pax_global_header00006660000000000000000000000064147633124020014514gustar00rootroot0000000000000052 comment=bd0525e1c789252157949a729c01d982bfd023d5 prometheus-alertmanager-0.28.1+ds/000077500000000000000000000000001476331240200170415ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/.circleci/000077500000000000000000000000001476331240200206745ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/.circleci/config.yml000066400000000000000000000122501476331240200226640ustar00rootroot00000000000000--- version: 2.1 orbs: prometheus: prometheus/prometheus@0.17.1 go: circleci/go@1.12.0 jobs: test_frontend: # We need to use a machine executor because the front-end validation runs # containers with mounted volumes which isn't supported with the docker # executor (even with setup_remote_docker). machine: image: ubuntu-2204:current steps: - checkout - run: sudo service docker restart - run: name: Remove existing Go installation command: sudo rm -rf /usr/local/go # Whenever the Go version is updated here, .promu.yml should also be updated. - go/install: version: "1.23.2" - run: name: Remove generated code command: make clean - run: name: Generate front-end code command: make all working_directory: ~/project/ui/app environment: JUNIT_DIR: ~/test-results - run: name: Generate assets command: make assets - run: name: Generate API v2 code command: make apiv2 - run: git diff --exit-code - store_test_results: path: ~/test-results - run: name: Save assets command: make assets-tarball - persist_to_workspace: root: . paths: - .tarballs test: docker: # Whenever the Go version is updated here, .promu.yml should also be updated. - image: quay.io/prometheus/golang-builder:1.22-base # maildev containers are for running the email tests against a "real" SMTP server. # See notify/email_test.go for details. - image: maildev/maildev:2.1.0 name: maildev-noauth entrypoint: bin/maildev command: - -v - image: maildev/maildev:2.1.0 name: maildev-auth entrypoint: bin/maildev command: - -v - --incoming-user - user - --incoming-pass - pass environment: EMAIL_NO_AUTH_CONFIG: /tmp/smtp_no_auth.yml EMAIL_AUTH_CONFIG: /tmp/smtp_auth.yml steps: - prometheus/setup_environment - go/load-cache: key: v1-go-mod - run: command: | cat \< $EMAIL_NO_AUTH_CONFIG smarthost: maildev-noauth:1025 server: http://maildev-noauth:1080/ EOF cat \< $EMAIL_AUTH_CONFIG smarthost: maildev-auth:1025 server: http://maildev-auth:1080/ username: user password: pass EOF - run: command: make environment: # By default Go uses GOMAXPROCS but a Circle CI executor has many # cores (> 30) while the CPU and RAM resources are throttled. If we # don't limit this to the number of allocated cores, the job is # likely to get OOMed and killed. GOOPTS: "-p 2" - prometheus/check_proto: version: "3.15.8" - prometheus/store_artifact: file: alertmanager - prometheus/store_artifact: file: amtool - go/save-cache: key: v1-go-mod - store_test_results: path: test-results mixin: docker: # Whenever the Go version is updated here, .promu.yml should also be updated. - image: quay.io/prometheus/golang-builder:1.22-base steps: - checkout # pin the mixtool version until https://github.com/monitoring-mixins/mixtool/issues/135 is merged. - run: go install github.com/monitoring-mixins/mixtool/cmd/mixtool@2282201396b69055bb0f92f187049027a16d2130 - run: go install github.com/google/go-jsonnet/cmd/jsonnetfmt@latest - run: go install github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@latest - run: make -C doc/alertmanager-mixin lint workflows: version: 2 alertmanager: jobs: - test_frontend: filters: tags: only: /.*/ - test: filters: tags: only: /.*/ - prometheus/build: name: build parallelism: 3 promu_opts: "-p linux/amd64 -p windows/amd64 -p linux/arm64 -p darwin/amd64 -p darwin/arm64 -p linux/386" filters: tags: ignore: /^v2(\.[0-9]+){2}(-.+|[^-.]*)$/ branches: ignore: /^(main|release-.*|.*build-all.*)$/ - prometheus/build: name: build_all parallelism: 12 filters: branches: only: /^(main|release-.*|.*build-all.*)$/ tags: only: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/ - mixin: filters: tags: only: /.*/ - prometheus/publish_main: context: org-context requires: - test_frontend - test - build_all filters: branches: only: main - prometheus/publish_release: context: org-context requires: - test_frontend - test - build_all filters: tags: only: /^v[0-9]+(\.[0-9]+){2}(-.+|[^-.]*)$/ branches: ignore: /.*/ prometheus-alertmanager-0.28.1+ds/.dockerignore000066400000000000000000000001771476331240200215220ustar00rootroot00000000000000.build/ .tarballs/ !.build/linux-amd64/ !.build/linux-armv7/ !.build/linux-arm64/ !.build/linux-ppc64le/ !.build/linux-s390x/ prometheus-alertmanager-0.28.1+ds/.github/000077500000000000000000000000001476331240200204015ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/.github/ISSUE_TEMPLATE.md000066400000000000000000000021161476331240200231060ustar00rootroot00000000000000 **What did you do?** **What did you expect to see?** **What did you see instead? Under which circumstances?** **Environment** * System information: insert output of `uname -srm` here * Alertmanager version: insert output of `alertmanager --version` here (repeat for each alertmanager version in your cluster, if relevant to the issue) * Prometheus version: insert output of `prometheus --version` here (repeat for each prometheus version in your cluster, if relevant to the issue) * Alertmanager configuration file: ``` insert configuration here ``` * Prometheus configuration file: ``` insert configuration here (if relevant to the issue) ``` * Logs: ``` insert Prometheus and Alertmanager logs relevant to the issue here ``` prometheus-alertmanager-0.28.1+ds/.github/dependabot.yml000066400000000000000000000005571476331240200232400ustar00rootroot00000000000000version: 2 updates: - package-ecosystem: "gomod" directory: "/" open-pull-requests-limit: 20 schedule: interval: "monthly" - package-ecosystem: "docker" directory: "/" schedule: interval: "monthly" - package-ecosystem: "npm" directory: "/ui/react-app" open-pull-requests-limit: 20 schedule: interval: "monthly" prometheus-alertmanager-0.28.1+ds/.github/stale.yml000066400000000000000000000033551476331240200222420ustar00rootroot00000000000000# Configuration for probot-stale - https://github.com/probot/stale # Number of days of inactivity before an Issue or Pull Request becomes stale daysUntilStale: 60 # Number of days of inactivity before an Issue or Pull Request with the stale label is closed. # Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. daysUntilClose: false # Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) onlyLabels: [] # Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable exemptLabels: - keepalive # Set to true to ignore issues in a project (defaults to false) exemptProjects: false # Set to true to ignore issues in a milestone (defaults to false) exemptMilestones: false # Set to true to ignore issues with an assignee (defaults to false) exemptAssignees: false # Label to use when marking as stale staleLabel: stale # Comment to post when marking as stale. Set to `false` to disable markComment: false # Comment to post when removing the stale label. # unmarkComment: > # Your comment here. # Comment to post when closing a stale Issue or Pull Request. # closeComment: > # Your comment here. # Limit the number of actions per hour, from 1-30. Default is 30 limitPerRun: 30 # Limit to only `issues` or `pulls` only: pulls # Optionally, specify configuration settings that are specific to just 'issues' or 'pulls': # pulls: # daysUntilStale: 30 # markComment: > # This pull request has been automatically marked as stale because it has not had # recent activity. It will be closed if no further activity occurs. Thank you # for your contributions. # issues: # exemptLabels: # - confirmed prometheus-alertmanager-0.28.1+ds/.github/workflows/000077500000000000000000000000001476331240200224365ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/.github/workflows/ci.yml000066400000000000000000000027131476331240200235570ustar00rootroot00000000000000--- name: CI on: # yamllint disable-line rule:truthy pull_request: workflow_call: jobs: test_frontend: name: Test alertmanager frontend runs-on: ubuntu-latest steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - run: make clean - run: make all working-directory: ./ui/app - run: make assets - run: make apiv2 - run: git diff --exit-code build: name: Build Alertmanager for common architectures runs-on: ubuntu-latest strategy: matrix: thread: [0, 1, 2] steps: - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - uses: prometheus/promci@c3c93a50d581b928af720f0134b2b2dad32a6c41 # v0.4.6 - uses: ./.github/promci/actions/build with: promu_opts: "-p linux/amd64 -p windows/amd64 -p linux/arm64 -p darwin/amd64 -p darwin/arm64 -p linux/386" parallelism: 3 thread: ${{ matrix.thread }} test: name: Test runs-on: ubuntu-latest # Whenever the Go version is updated here, .promu.yml # should also be updated. container: image: quay.io/prometheus/golang-builder:1.23-base steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - uses: prometheus/promci@c3c93a50d581b928af720f0134b2b2dad32a6c41 # v0.4.6 - uses: ./.github/promci/actions/setup_environment - run: make - run: git diff --exit-code prometheus-alertmanager-0.28.1+ds/.github/workflows/container_description.yml000066400000000000000000000044671476331240200275610ustar00rootroot00000000000000--- name: Push README to Docker Hub on: push: paths: - "README.md" - "README-containers.md" - ".github/workflows/container_description.yml" branches: [ main, master ] permissions: contents: read jobs: PushDockerHubReadme: runs-on: ubuntu-latest name: Push README to Docker Hub if: github.repository_owner == 'prometheus' || github.repository_owner == 'prometheus-community' # Don't run this workflow on forks. steps: - name: git checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set docker hub repo name run: echo "DOCKER_REPO_NAME=$(make docker-repo-name)" >> $GITHUB_ENV - name: Push README to Dockerhub uses: christian-korneck/update-container-description-action@d36005551adeaba9698d8d67a296bd16fa91f8e8 # v1 env: DOCKER_USER: ${{ secrets.DOCKER_HUB_LOGIN }} DOCKER_PASS: ${{ secrets.DOCKER_HUB_PASSWORD }} with: destination_container_repo: ${{ env.DOCKER_REPO_NAME }} provider: dockerhub short_description: ${{ env.DOCKER_REPO_NAME }} # Empty string results in README-containers.md being pushed if it # exists. Otherwise, README.md is pushed. readme_file: '' PushQuayIoReadme: runs-on: ubuntu-latest name: Push README to quay.io if: github.repository_owner == 'prometheus' || github.repository_owner == 'prometheus-community' # Don't run this workflow on forks. steps: - name: git checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set quay.io org name run: echo "DOCKER_REPO=$(echo quay.io/${GITHUB_REPOSITORY_OWNER} | tr -d '-')" >> $GITHUB_ENV - name: Set quay.io repo name run: echo "DOCKER_REPO_NAME=$(make docker-repo-name)" >> $GITHUB_ENV - name: Push README to quay.io uses: christian-korneck/update-container-description-action@d36005551adeaba9698d8d67a296bd16fa91f8e8 # v1 env: DOCKER_APIKEY: ${{ secrets.QUAY_IO_API_TOKEN }} with: destination_container_repo: ${{ env.DOCKER_REPO_NAME }} provider: quay # Empty string results in README-containers.md being pushed if it # exists. Otherwise, README.md is pushed. readme_file: '' prometheus-alertmanager-0.28.1+ds/.github/workflows/golangci-lint.yml000066400000000000000000000023451476331240200257140ustar00rootroot00000000000000--- # This action is synced from https://github.com/prometheus/prometheus name: golangci-lint on: push: paths: - "go.sum" - "go.mod" - "**.go" - "scripts/errcheck_excludes.txt" - ".github/workflows/golangci-lint.yml" - ".golangci.yml" pull_request: permissions: # added using https://github.com/step-security/secure-repo contents: read jobs: golangci: permissions: contents: read # for actions/checkout to fetch code pull-requests: read # for golangci/golangci-lint-action to fetch pull requests name: lint runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Install Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: go-version: 1.23.x - name: Install snmp_exporter/generator dependencies run: sudo apt-get update && sudo apt-get -y install libsnmp-dev if: github.repository == 'prometheus/snmp_exporter' - name: Lint uses: golangci/golangci-lint-action@971e284b6050e8a5849b72094c50ab08da042db8 # v6.1.1 with: args: --verbose version: v1.61.0 prometheus-alertmanager-0.28.1+ds/.github/workflows/mixin.yml000066400000000000000000000015121476331240200243040ustar00rootroot00000000000000name: mixin on: pull_request: paths: - "doc/alertmanager-mixin/**" jobs: mixin: name: mixin-lint runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: install Go uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2 with: go-version: 1.23.x # pin the mixtool version until https://github.com/monitoring-mixins/mixtool/issues/135 is merged. - run: go install github.com/monitoring-mixins/mixtool/cmd/mixtool@2282201396b69055bb0f92f187049027a16d2130 - run: go install github.com/google/go-jsonnet/cmd/jsonnetfmt@latest - run: go install github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@latest - run: make -C doc/alertmanager-mixin lint prometheus-alertmanager-0.28.1+ds/.github/workflows/publish.yml000066400000000000000000000023071476331240200246310ustar00rootroot00000000000000--- name: Publish on: # yamllint disable-line rule:truthy push: branches: - main jobs: ci: name: Run ci uses: ./.github/workflows/ci.yml build: name: Build Alertmanager for all architectures runs-on: ubuntu-latest strategy: matrix: thread: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] needs: ci steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - uses: prometheus/promci@c3c93a50d581b928af720f0134b2b2dad32a6c41 # v0.4.6 - uses: ./.github/promci/actions/build with: parallelism: 12 thread: ${{ matrix.thread }} publish_main: name: Publish main branch artefacts runs-on: ubuntu-latest needs: build steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - uses: prometheus/promci@c3c93a50d581b928af720f0134b2b2dad32a6c41 # v0.4.6 - uses: ./.github/promci/actions/publish_main with: docker_hub_login: ${{ secrets.docker_hub_login }} docker_hub_password: ${{ secrets.docker_hub_password }} quay_io_login: ${{ secrets.quay_io_login }} quay_io_password: ${{ secrets.quay_io_password }} prometheus-alertmanager-0.28.1+ds/.github/workflows/release.yml000066400000000000000000000023031476331240200245770ustar00rootroot00000000000000--- name: Release on: # yamllint disable-line rule:truthy push: tags: - v* jobs: ci: name: Run ci uses: ./.github/workflows/ci.yml build: name: Build Alertmanager for all architectures runs-on: ubuntu-latest strategy: matrix: thread: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11] needs: ci steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - uses: prometheus/promci@c3c93a50d581b928af720f0134b2b2dad32a6c41 # v0.4.6 - uses: ./.github/promci/actions/build with: parallelism: 12 thread: ${{ matrix.thread }} publish_release: name: Publish release artefacts runs-on: ubuntu-latest needs: build steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - uses: prometheus/promci@c3c93a50d581b928af720f0134b2b2dad32a6c41 # v0.4.6 - uses: ./.github/promci/actions/publish_release with: docker_hub_login: ${{ secrets.docker_hub_login }} docker_hub_password: ${{ secrets.docker_hub_password }} quay_io_login: ${{ secrets.quay_io_login }} quay_io_password: ${{ secrets.quay_io_password }} prometheus-alertmanager-0.28.1+ds/.gitignore000066400000000000000000000005501476331240200210310ustar00rootroot00000000000000/data/ /alertmanager /amtool *.yml *.yaml /.build /.release /.tarballs /vendor !.golangci.yml !/cli/testdata/*.yml !/cli/config/testdata/*.yml !/cluster/testdata/*.yml !/config/testdata/*.yml !/examples/ha/tls/*.yml !/notify/email/testdata/*.yml !/doc/examples/simple.yml !/circle.yml !/.travis.yml !/.promu.yml !/api/v2/openapi.yaml !.github/workflows/*.yml prometheus-alertmanager-0.28.1+ds/.golangci.yml000066400000000000000000000050001476331240200214200ustar00rootroot00000000000000output: sort-results: true linters: enable: - depguard - errorlint - godot - gofumpt - goimports - misspell - revive - testifylint - sloglint issues: max-issues-per-linter: 0 max-same-issues: 0 exclude-rules: - path: _test.go linters: - errcheck exclude-files: # Skip autogenerated files. - ^.*\.(pb|y)\.go$ timeout: 5m linters-settings: depguard: rules: main: deny: - pkg: sync/atomic desc: "Use go.uber.org/atomic instead of sync/atomic" - pkg: github.com/stretchr/testify/assert desc: "Use github.com/stretchr/testify/require instead of github.com/stretchr/testify/assert" - pkg: github.com/go-kit/kit/log desc: "Use github.com/go-kit/log instead of github.com/go-kit/kit/log" - pkg: github.com/pkg/errors desc: "Use errors or fmt instead of github.com/pkg/errors" errcheck: exclude-functions: # Don't flag lines such as "io.Copy(io.Discard, resp.Body)". - io.Copy # The next two are used in HTTP handlers, any error is handled by the server itself. - io.WriteString - (net/http.ResponseWriter).Write # No need to check for errors on server's shutdown. - (*net/http.Server).Shutdown # Never check for rollback errors as Rollback() is called when a previous error was detected. - (github.com/prometheus/prometheus/storage.Appender).Rollback godot: scope: toplevel exclude: - "^ ?This file is safe to edit" - "^ ?scheme value" period: true capital: true goimports: local-prefixes: github.com/prometheus/alertmanager gofumpt: extra-rules: true revive: rules: - name: exported arguments: ["disableStutteringCheck"] - name: blank-imports - name: context-as-argument - name: error-return - name: error-strings - name: error-naming - name: if-return - name: increment-decrement - name: var-naming - name: var-declaration - name: package-comments - name: range - name: receiver-naming - name: time-naming - name: unexported-return - name: indent-error-flow - name: errorf testifylint: disable: - float-compare - go-require enable: - bool-compare - compares - empty - error-is-as - error-nil - expected-actual - len - require-error - suite-dont-use-pkg - suite-extra-assert-call prometheus-alertmanager-0.28.1+ds/.promu.yml000066400000000000000000000017771476331240200210200ustar00rootroot00000000000000go: # Whenever the Go version is updated here, # .circle/config.yml should also be updated. version: 1.23 repository: path: github.com/prometheus/alertmanager build: binaries: - name: alertmanager path: ./cmd/alertmanager - name: amtool path: ./cmd/amtool tags: all: - netgo windows: [] ldflags: | -X github.com/prometheus/common/version.Version={{.Version}} -X github.com/prometheus/common/version.Revision={{.Revision}} -X github.com/prometheus/common/version.Branch={{.Branch}} -X github.com/prometheus/common/version.BuildUser={{user}}@{{host}} -X github.com/prometheus/common/version.BuildDate={{date "20060102-15:04:05"}} tarball: files: - examples/ha/alertmanager.yml - LICENSE - NOTICE crossbuild: platforms: - darwin - dragonfly - freebsd - illumos - linux - netbsd - openbsd - windows prometheus-alertmanager-0.28.1+ds/.yamllint000066400000000000000000000007171476331240200207000ustar00rootroot00000000000000--- extends: default ignore: | **/node_modules rules: braces: max-spaces-inside: 1 level: error brackets: max-spaces-inside: 1 level: error commas: disable comments: disable comments-indentation: disable document-start: disable indentation: spaces: consistent indent-sequences: consistent key-duplicates: ignore: | config/testdata/section_key_dup.bad.yml line-length: disable truthy: check-keys: false prometheus-alertmanager-0.28.1+ds/CHANGELOG.md000066400000000000000000001422151476331240200206570ustar00rootroot00000000000000## 0.28.1 / 2025-03-07 * [ENHANCEMENT] Improved performance of inhibition rules when using Equal labels. #4119 * [ENHANCEMENT] Improve the documentation on escaping in UTF-8 matchers. #4157 * [ENHANCEMENT] Update alertmanager_config_hash metric help to document the hash is not cryptographically strong. #4210 * [BUGFIX] Fix panic in amtool when using `--verbose`. #4218 * [BUGFIX] Fix templating of channel field for Rocket.Chat. #4220 * [BUGFIX] Fix `rocketchat_configs` written as `rocket_configs` in docs. #4217 * [BUGFIX] Fix usage for `--enable-feature` flag. #4214 * [BUGFIX] Trim whitespace from OpsGenie API Key. #4195 * [BUGFIX] Fix Jira project template not rendered when searching for existing issues. #4291 * [BUGFIX] Fix subtle bug in JSON/YAML encoding of inhibition rules that would cause Equal labels to be omitted. #4292 * [BUGFIX] Fix header for `slack_configs` in docs. #4247 * [BUGFIX] Fix weight and wrap of Microsoft Teams notifications. #4222 * [BUGFIX] Fix format of YAML examples in configuration.md. #4207 ## 0.28.0 / 2025-01-15 * [CHANGE] Templating errors in the SNS integration now return an error. #3531 #3879 * [CHANGE] Adopt log/slog, drop go-kit/log #4089 * [FEATURE] Add a new Microsoft Teams integration based on Flows #4024 * [FEATURE] Add a new Rocket.Chat integration #3600 * [FEATURE] Add a new Jira integration #3590 #3931 * [FEATURE] Add support for `GOMEMLIMIT`, enable it via the feature flag `--enable-feature=auto-gomemlimit`. #3895 * [FEATURE] Add support for `GOMAXPROCS`, enable it via the feature flag `--enable-feature=auto-gomaxprocs`. #3837 * [FEATURE] Add support for limits of silences including the maximum number of active and pending silences, and the maximum size per silence (in bytes). You can use the flags `--silences.max-silences` and `--silences.max-silence-size-bytes` to set them accordingly #3852 #3862 #3866 #3885 #3886 #3877 * [FEATURE] Muted alerts now show whether they are suppressed or not in both the `/api/v2/alerts` endpoint and the Alertmanager UI. #3793 #3797 #3792 * [ENHANCEMENT] Add support for `content`, `username` and `avatar_url` in the Discord integration. `content` and `username` also support templating. #4007 * [ENHANCEMENT] Only invalidate the silences cache if a new silence is created or an existing silence replaced - should improve latency on both `GET api/v2/alerts` and `POST api/v2/alerts` API endpoint. #3961 * [ENHANCEMENT] Add image source label to Dockerfile. To get changelogs shown when using Renovate #4062 * [ENHANCEMENT] Build using go 1.23 #4071 * [ENHANCEMENT] Support setting a global SMTP TLS configuration. #3732 * [ENHANCEMENT] The setting `room_id` in the WebEx integration can now be templated to allow for dynamic room IDs. #3801 * [ENHANCEMENT] Enable setting `message_thread_id` for the Telegram integration. #3638 * [ENHANCEMENT] Support the `since` and `humanizeDuration` functions to templates. This means users can now format time to more human-readable text. #3863 * [ENHANCEMENT] Support the `date` and `tz` functions to templates. This means users can now format time in a specified format and also change the timezone to their specific locale. #3812 * [ENHANCEMENT] Latency metrics now support native histograms. #3737 * [ENHANCEMENT] Add full width to adaptive card for msteamsv2 #4135 * [ENHANCEMENT] Add timeout option for webhook notifier. #4137 * [ENHANCEMENT] Update config to allow showing secret values when marshaled #4158 * [ENHANCEMENT] Enable templating for Jira project and issue_type #4159 * [BUGFIX] Fix the SMTP integration not correctly closing an SMTP submission, which may lead to unsuccessful dispatches being marked as successful. #4006 * [BUGFIX] The `ParseMode` option is now set explicitly in the Telegram integration. If we don't HTML tags had not been parsed by default. #4027 * [BUGFIX] Fix a memory leak that was caused by updates silences continuously. #3930 * [BUGFIX] Fix hiding secret URLs when the URL is incorrect. #3887 * [BUGFIX] Fix a race condition in the alerts - it was more of a hypothetical race condition that could have occurred in the alert reception pipeline. #3648 * [BUGFIX] Fix a race condition in the alert delivery pipeline that would cause a firing alert that was delivered earlier to be deleted from the aggregation group when instead it should have been delivered again. #3826 * [BUGFIX] Fix version in APIv1 deprecation notice. #3815 * [BUGFIX] Fix crash errors when using `url_file` in the Webhook integration. #3800 * [BUGFIX] fix `Route.ID()` returns conflicting IDs. #3803 * [BUGFIX] Fix deadlock on the alerts memory store. #3715 * [BUGFIX] Fix `amtool template render` when using the default values. #3725 * [BUGFIX] Fix `webhook_url_file` for both the Discord and Microsoft Teams integrations. #3728 #3745 * [BUGFIX] Fix wechat api link #4084 * [BUGFIX] Fix build info metric #4166 * [BUGFIX] Fix UTF-8 not allowed in Equal field for inhibition rules #4177 ## 0.27.0 / 2024-02-28 * [CHANGE] Discord Integration: Enforce max length in `message`. #3597 * [CHANGE] API: Removal of all `api/v1/` endpoints. These endpoints now log and return a deprecation message and respond with a status code of `410`. #2970 * [FEATURE] UTF-8 Support: Introduction of support for any UTF-8 character as part of label names and matchers. Please read more below. #3453, #3483, #3567, #3570 * [FEATURE] Metrics: Introduced the experimental feature flag `--enable-feature=receiver-name-in-metrics` to include the receiver name in the following metrics: #3045 * `alertmanager_notifications_total` * `alertmanager_notifications_failed_totall` * `alertmanager_notification_requests_total` * `alertmanager_notification_requests_failed_total` * `alertmanager_notification_latency_seconds` * [FEATURE] Metrics: Introduced a new gauge named `alertmanager_inhibition_rules` that counts the number of configured inhibition rules. #3681 * [FEATURE] Metrics: Introduced a new counter named `alertmanager_alerts_supressed_total` that tracks muted alerts, it contains a `reason` label to indicate the source of the mute. #3565 * [ENHANCEMENT] Discord Integration: Introduced support for `webhook_url_file`. #3555 * [ENHANCEMENT] Microsoft Teams Integration: Introduced support for `webhook_url_file`. #3555 * [ENHANCEMENT] Microsoft Teams Integration: Add support for `summary`. #3616 * [ENHANCEMENT] Metrics: Notification metrics now support two new values for the label `reason`, `contextCanceled` and `contextDeadlineExceeded`. #3631 * [ENHANCEMENT] Email Integration: Contents of `auth_password_file` are now trimmed of prefixed and suffixed whitespace. #3680 * [BUGFIX] amtool: Fixes the error `scheme required for webhook url` when using amtool with `--alertmanager.url`. #3509 * [BUGFIX] Mixin: Fix `AlertmanagerFailedToSendAlerts`, `AlertmanagerClusterFailedToSendAlerts`, and `AlertmanagerClusterFailedToSendAlerts` to make sure they ignore the `reason` label. #3599 ### Removal of API v1 The Alertmanager `v1` API has been deprecated since January 2019 with the release of Alertmanager `v0.16.0`. With the release of version `0.27.0` it is now removed. A successful HTTP request to any of the `v1` endpoints will log and return a deprecation message while responding with a status code of `410`. Please ensure you switch to the `v2` equivalent endpoint in your integrations before upgrading. ### Alertmanager support for all UTF-8 characters in matchers and label names Starting with Alertmanager `v0.27.0`, we have a new parser for matchers that has a number of backwards incompatible changes. While most matchers will be forward-compatible, some will not. Alertmanager is operating a transition period where it supports both UTF-8 and classic matchers, so **it's entirely safe to upgrade without any additional configuration**. With that said, we recommend the following: - If this is a new Alertmanager installation, we recommend enabling UTF-8 strict mode before creating an Alertmanager configuration file. You can enable strict mode with `alertmanager --config.file=config.yml --enable-feature="utf8-strict-mode"`. - If this is an existing Alertmanager installation, we recommend running the Alertmanager in the default mode called fallback mode before enabling UTF-8 strict mode. In this mode, Alertmanager will log a warning if you need to make any changes to your configuration file before UTF-8 strict mode can be enabled. **Alertmanager will make UTF-8 strict mode the default in the next two versions**, so it's important to transition as soon as possible. Irrespective of whether an Alertmanager installation is a new or existing installation, you can also use `amtool` to validate that an Alertmanager configuration file is compatible with UTF-8 strict mode before enabling it in Alertmanager server by running `amtool check-config config.yml` and inspecting the log messages. Should you encounter any problems, you can run the Alertmanager with just the classic parser enabled by running `alertmanager --config.file=config.yml --enable-feature="classic-mode"`. If so, please submit a bug report via GitHub issues. ## 0.26.0 / 2023-08-23 * [SECURITY] Fix stored XSS via the /api/v1/alerts endpoint in the Alertmanager UI. CVE-2023-40577 * [CHANGE] Telegram Integration: `api_url` is now optional. #2981 * [CHANGE] Telegram Integration: `ParseMode` default is now `HTML` instead of `MarkdownV2`. #2981 * [CHANGE] Webhook Integration: `url` is now marked as a secret. It will no longer show up in the logs as clear-text. #3228 * [CHANGE] Metrics: New label `reason` for `alertmanager_notifications_failed_total` metric to indicate the type of error of the alert delivery. #3094 #3307 * [FEATURE] Clustering: New flag `--cluster.label`, to help to block any traffic that is not meant for the cluster. #3354 * [FEATURE] Integrations: Add Microsoft Teams as a supported integration. #3324 * [ENHANCEMENT] Telegram Integration: Support `bot_token_file` for loading this secret from a file. #3226 * [ENHANCEMENT] Webhook Integration: Support `url_file` for loading this secret from a file. #3223 * [ENHANCEMENT] Webhook Integration: Leading and trailing white space is now removed for the contents of `url_file`. #3363 * [ENHANCEMENT] Pushover Integration: Support options `device` and `sound` (sound was previously supported but undocumented). #3318 * [ENHANCEMENT] Pushover Integration: Support `user_key_file` and `token_file` for loading this secret from a file. #3200 * [ENHANCEMENT] Slack Integration: Support errors wrapped in successful (HTTP status code 200) responses. #3121 * [ENHANCEMENT] API: Add `CORS` and `Cache-Control` HTTP headers to all version 2 API routes. #3195 * [ENHANCEMENT] UI: Receiver name is now visible as part of the alerts page. #3289 * [ENHANCEMENT] Templating: Better default text when using `{{ .Annotations }}` and `{{ .Labels }}`. #3256 * [ENHANCEMENT] Templating: Introduced a new function `trimSpace` which removes leading and trailing white spaces. #3223 * [ENHANCEMENT] CLI: `amtool silence query` now supports the `--id` flag to query an individual silence. #3241 * [ENHANCEMENT] Metrics: Introduced `alertmanager_nflog_maintenance_total` and `alertmanager_nflog_maintenance_errors_total` to monitor maintenance of the notification log. #3286 * [ENHANCEMENT] Metrics: Introduced `alertmanager_silences_maintenance_total` and `alertmanager_silences_maintenance_errors_total` to monitor maintenance of silences. #3285 * [ENHANCEMENT] Logging: Log GroupKey and alerts on alert delivery when using debug mode. #3438 * [BUGFIX] Configuration: Empty list of `receivers` and `inhibit_rules` would cause the alertmanager to crash. #3209 * [BUGFIX] Templating: Fixed a race condition when using the `title` function. It is now race-safe. #3278 * [BUGFIX] API: Fixed duplicate receiver names in the `api/v2/receivers` API endpoint. #3338 * [BUGFIX] API: Attempting to delete a silence now returns the correct status code, `404` instead of `500`. #3352 * [BUGFIX] Clustering: Fixes a panic when `tls_client_config` is empty. #3443 * [BUGFIX] Fix stored XSS via the /api/v1/alerts endpoint in the Alertmanager UI. ## 0.25.0 / 2022-12-22 * [CHANGE] Change the default `parse_mode` value from `MarkdownV2` to `HTML` for Telegram. #2981 * [CHANGE] Make `api_url` field optional for Telegram. #2981 * [CHANGE] Use CanonicalMIMEHeaderKey instead of TitleCasing for email headers. #3080 * [CHANGE] Reduce the number of notification logs broadcasted between peers by expiring them after (2 * repeat interval). #2982 * [FEATURE] Add `proxy_url` support for OAuth2 in HTTP client configuration. #3010 * [FEATURE] Reload TLS certificate and key from disk when updated. #3168 * [FEATURE] Add Discord integration. #2948 * [FEATURE] Add Webex integration. #3132 * [ENHANCEMENT] Add `--web.systemd-socket` flag to systemd socket activation listeners instead of port listeners (Linux only). #3140 * [ENHANCEMENT] Add `enable_http2` support in HTTP client configuration. #3010 * [ENHANCEMENT] Add `min_version` support to select the minimum TLS version in HTTP client configuration. #3010 * [ENHANCEMENT] Add `max_version` support to select the maximum TLS version in HTTP client configuration. #3168 * [ENHANCEMENT] Emit warning logs when truncating messages in notifications. #3145 * [ENHANCEMENT] Add `--data.maintenance-interval` flag to define the interval between the garbage collection and snapshotting to disk of the silences and the notification logs. #2849 * [ENHANCEMENT] Support HEAD method for the `/-/healty` and `/-/ready` endpoints. #3039 * [ENHANCEMENT] Truncate messages with the `…` ellipsis character instead of the 3-dots string `...`. #3072 * [ENHANCEMENT] Add support for reading global and local SMTP passwords from files. #3038 * [ENHANCEMENT] Add Location support to time intervals. #2782 * [ENHANCEMENT] UI: Add 'Link' button to alerts in list. #2880 * [ENHANCEMENT] Add the `source` field to the PagerDuty configuration. #3106 * [ENHANCEMENT] Add support for reading PagerDuty routing and service keys from files. #3107 * [ENHANCEMENT] Log response details when notifications fail for Webhooks, Pushover and VictorOps. #3103 * [ENHANCEMENT] UI: Allow to choose the first day of the week as Sunday or Monday. #3093 * [ENHANCEMENT] Add support for reading VictorOps API key from file. #3111 * [ENHANCEMENT] Support templating for Opsgenie's responder type. #3060 * [BUGFIX] Fail configuration loading if `api_key` and `api_key_file` are defined at the same time. #2910 * [BUGFIX] Fix the `alertmanager_alerts` metric to avoid counting resolved alerts as active. Also added a new `alertmanager_marked_alerts` metric that retain the old behavior. #2943 * [BUGFIX] Trim contents of Slack API URLs when reading from files. #2929 * [BUGFIX] amtool: Avoid panic when the label value matcher is empty. #2968 * [BUGFIX] Fail configuration loading if `api_url` is empty for OpsGenie. #2910 * [BUGFIX] Fix email template for resolved notifications. #3166 * [BUGFIX] Use the HTML template engine when the parse mode is HTML for Telegram. #3183 ## 0.24.0 / 2022-03-24 * [CHANGE] Add the `/api/v2` prefix to all endpoints in the OpenAPI specification and generated client code. #2696 * [CHANGE] Remove the `github.com/prometheus/alertmanager/client` Go package. #2763 * [FEATURE] Add `--cluster.tls-config` experimental flag to secure cluster traffic via mutual TLS. #2237 * [FEATURE] Add support for active time intervals. Active and mute time intervals should be defined via `time_intervals` rather than `mute_time_intervals` (the latter is deprecated but it will be supported until v1.0). #2779 * [FEATURE] Add Telegram integration. #2827 * [ENHANCEMENT] Add `update_alerts` field to the OpsGenie configuration to update message and description when sending alerts. #2519 * [ENHANCEMENT] Add `--cluster.allow-insecure-public-advertise-address-discovery` feature flag to enable discovery and use of public IP addresses for clustering. #2719 * [ENHANCEMENT] Add `entity` and `actions` fields to the OpsGenie configuration. #2753 * [ENHANCEMENT] Add `opsgenie_api_key_file` field to the global configuration. #2728 * [ENHANCEMENT] Add support for `teams` responders to the OpsGenie configuration. #2685 * [ENHANCEMENT] Add the User-Agent header to all notification requests. #2730 * [ENHANCEMENT] Re-enable HTTP/2. #2720 * [ENHANCEMENT] web: Add support for security-related HTTP headers. #2759 * [ENHANCEMENT] amtool: Allow filtering of silences by `createdBy` author. #2718 * [ENHANCEMENT] amtool: add `--http.config.file` flag to configure HTTP settings. #2764 * [BUGFIX] Fix HTTP client configuration for the SNS receiver. #2706 * [BUGFIX] Fix unclosed file descriptor after reading the silences snapshot file. #2710 * [BUGFIX] Fix field names for `mute_time_intervals` in JSON marshaling. #2765 * [BUGFIX] Ensure that the root route doesn't have any matchers. #2780 * [BUGFIX] Truncate the message's title to 1024 chars to avoid hitting Slack limits. #2774 * [BUGFIX] Fix the default HTML email template (`email.default.html`) to match with the canonical source. #2798 * [BUGFIX] Detect SNS FIFO topic based on the rendered value. #2819 * [BUGFIX] Avoid deleting and recreating a silence when an update is possible. #2816 * [BUGFIX] api/v2: Return 200 OK when deleting an expired silence. #2817 * [BUGFIX] amtool: Fix the silence's end date when adding a silence. The end date is (start date + duration) while it used to be (current time + duration). The new behavior is consistent with the update operation. #2741 ## 0.23.0 / 2021-08-25 * [FEATURE] Add AWS SNS receiver. #2615 * [FEATURE] amtool: add new template render command. #2538 * [ENHANCEMENT] amtool: Add ability to skip TLS verification for amtool. #2663 * [ENHANCEMENT] amtool: Detect version drift and warn users. #2672 * [BUGFIX] Time-based muting: Ensure time interval comparisons are in UTC. #2648 * [BUGFIX] amtool: Fix empty isEqual when talking to incompatible alertmanager. #2668 ## 0.22.2 / 2021-06-01 * [BUGFIX] Include pending silences for future muting decisions. #2590 ## 0.22.1 / 2021-05-27 This release addresses a regression in the API v1 that was introduced in 0.22.0. Matchers in silences created with the API v1 could be considered negative matchers. This affects users using amtool prior to v0.17.0. * [BUGFIX] API v1: Decode matchers without isEqual are positive matchers. #2603 ## 0.22.0 / 2021-05-21 * [CHANGE] Amtool and Alertmanager binaries help now prints to stdout. #2505 * [CHANGE] Use path relative to the configuration file for certificates and password files. #2502 * [CHANGE] Display Silence and Alert dates in ISO8601 format. #2363 * [FEATURE] Add date picker to silence form views. #2262 * [FEATURE] Add support for negative matchers. #2434 #2460 and many more. * [FEATURE] Add time-based muting to routing tree. #2393 * [FEATURE] Support TLS and basic authentication on the web server. #2446 * [FEATURE] Add OAuth 2.0 client support in HTTP client. #2560 * [ENHANCEMENT] Add composite durations in the configuration (e.g. 2h20m). #2353 * [ENHANCEMENT] Add follow_redirect option to disable following redirects. #2551 * [ENHANCEMENT] Add metric for permanently failed notifications. #2383 * [ENHANCEMENT] Add support for custom authorization scheme. #2499 * [ENHANCEMENT] Add support for not following HTTP redirects. #2499 * [ENHANCEMENT] Add support to set the Slack URL from a file. #2534 * [ENHANCEMENT] amtool: Add alert status to extended and simple output. #2324 * [ENHANCEMENT] Do not omit false booleans in the configuration page. #2317 * [ENHANCEMENT] OpsGenie: Propagate labels to Opsgenie details. #2276 * [ENHANCEMENT] PagerDuty: Filter out empty images and links. #2379 * [ENHANCEMENT] WeChat: add markdown support. #2309 * [BUGFIX] Fix a possible deadlock on shutdown. #2558 * [BUGFIX] UI: Fix extended printing of regex sign. #2445 * [BUGFIX] UI: Fix the favicon when using a path prefix. #2392 * [BUGFIX] Make filter labels consistent with Prometheus. #2403 * [BUGFIX] alertmanager_config_last_reload_successful takes templating failures into account. #2373 * [BUGFIX] amtool: avoid nil dereference in silence update. #2427 * [BUGFIX] VictorOps: Catch routing_key templating errors. #2467 ## 0.21.0 / 2020-06-16 This release removes the HipChat integration as it is discontinued by Atlassian on June 30th 2020. * [CHANGE] [HipChat] Remove HipChat integration as it is end-of-life. #2282 * [CHANGE] [amtool] Remove default assignment of environment variables. #2161 * [CHANGE] [PagerDuty] Enforce 512KB event size limit. #2225 * [ENHANCEMENT] [amtool] Add `cluster` command to show cluster and peer statuses. #2256 * [ENHANCEMENT] Add redirection from `/` to the routes prefix when it isn't empty. #2235 * [ENHANCEMENT] [Webhook] Add `max_alerts` option to limit the number of alerts included in the payload. #2274 * [ENHANCEMENT] Improve logs for API v2, notifications and clustering. #2177 #2188 #2260 #2261 #2273 * [BUGFIX] Fix child routes not inheriting their parent route's grouping when `group_by: [...]`. #2154 * [BUGFIX] [UI] Fix the receiver selector in the Alerts page when the receiver name contains regular expression metacharacters such as `+`. #2090 * [BUGFIX] Fix error message about start and end time validation. #2173 * [BUGFIX] Fix a potential race condition in dispatcher. #2208 * [BUGFIX] [API v2] Return an empty array of peers when the clustering is disabled. #2203 * [BUGFIX] Fix the registration of `alertmanager_dispatcher_aggregation_groups` and `alertmanager_dispatcher_alert_processing_duration_seconds` metrics. #2200 * [BUGFIX] Always retry notifications with back-off. #2290 ## 0.20.0 / 2019-12-11 * [CHANGE] Check that at least one silence matcher matches a non-empty string. #2081 * [ENHANCEMENT] [pagerduty] Check that PagerDuty keys aren't empty. #2085 * [ENHANCEMENT] [template] Add the `stringSlice` function. #2101 * [ENHANCEMENT] Add `alertmanager_dispatcher_aggregation_groups` and `alertmanager_dispatcher_alert_processing_duration_seconds` metrics. #2113 * [ENHANCEMENT] Log unused receivers. #2114 * [ENHANCEMENT] Add `alertmanager_receivers` metric. #2114 * [ENHANCEMENT] Add `alertmanager_integrations` metric. #2117 * [ENHANCEMENT] [email] Add Message-Id Header to outgoing emails. #2057 * [BUGFIX] Don't garbage-collect alerts from the store. #2040 * [BUGFIX] [ui] Disable the grammarly plugin on all textareas. #2061 * [BUGFIX] [config] Forbid nil regexp matchers. #2083 * [BUGFIX] [ui] Fix Silences UI when several filters are applied. #2075 Contributors: * @CharlesJUDITH * @NotAFile * @Pger-Y * @TheMeier * @johncming * @n33pm * @ntk148v * @oddlittlebird * @perlun * @qoops-1 * @roidelapluie * @simonpasquier * @stephenreddek * @sylr * @vrischmann ## 0.19.0 / 2019-09-03 * [CHANGE] Reject invalid external URLs at startup. #1960 * [CHANGE] Add Fingerprint to template data. #1945 * [CHANGE] Check Smarthost validity at config loading. #1957 * [ENHANCEMENT] Improve error messages for email receiver. #1953 * [ENHANCEMENT] Log error messages from OpsGenie API. #1965 * [ENHANCEMENT] Add the ability to configure Slack markdown field. #1967 * [ENHANCEMENT] Log warning when repeat_interval > retention. #1993 * [ENHANCEMENT] Add `alertmanager_cluster_enabled` metric. #1973 * [ENHANCEMENT] [ui] Recreate silence with previous comment. #1927 * [BUGFIX] [ui] Fix /api/v2/alerts/groups endpoint with similar alert groups. #1964 * [BUGFIX] Allow slashes in receivers. #2011 * [BUGFIX] [ui] Fix expand/collapse button with identical alert groups. #2012 ## 0.18.0 / 2019-07-08 * [CHANGE] Remove quantile labels from Summary metrics. #1921 * [CHANGE] [OpsGenie] Move from the deprecated `teams` field in the configuration to `responders`. #1863 * [CHANGE] [ui] Collapse alert groups on the initial view. #1876 * [CHANGE] [Wechat] Set the default API secret to blank. #1888 * [CHANGE/BUGFIX] [PagerDuty] Fix embedding of images, the `text` field in the configuration has been renamed to `href`. #1931 * [ENHANCEMENT] Use persistent HTTP clients. #1904 * [ENHANCEMENT] Add `alertmanager_cluster_alive_messages_total`, `alertmanager_cluster_peer_info` and `alertmanager_cluster_pings_seconds` metrics. #1941 * [ENHANCEMENT] [api] Add missing metrics for API v2. #1902 * [ENHANCEMENT] [Slack] Log error message on retry errors. #1655 * [ENHANCEMENT] [ui] Allow to create silences from the alerts filter bar. #1911 * [ENHANCEMENT] [ui] Enable auto resize the textarea fields. #1893 * [BUGFIX] [amtool] Use scheme, authentication and base path from the URL if present. #1892 #1940 * [BUGFIX] [amtool] Support filtering alerts by receiver. #1915 * [BUGFIX] [api] Fix /api/v2/alerts with multiple receivers. #1948 * [BUGFIX] [PagerDuty] Truncate description to 1024 chars for PagerDuty v1. #1922 * [BUGFIX] [ui] Add filtering based off of "active" query param. #1879 ## 0.17.0 / 2019-05-02 This release includes changes to amtool which are not fully backwards compatible with the previous amtool version (#1798) related to backup and import of silences. If a backup of silences is created using a previous version of amtool (v0.16.1 or earlier), it is possible that not all silences can be correctly imported using a later version of amtool. Additionally, the groups endpoint that was dropped from api v1 has been added to api v2. The default for viewing alerts in the UI now consumes from this endpoint and displays alerts grouped according to the groups defined in the running configuration. Custom grouping is still supported. This release has added two new flags that may need to be tweaked. For people running with a lot of concurrent requests, consider increasing the value of `--web.get-concurrency`. An increase in 503 errors indicates that the request rate is exceeding the number of currently available workers. The other new flag, --web.timeout, limits the time a request is allowed to run. The default behavior is to not use a timeout. * [CHANGE] Modify the self-inhibition prevention semantics (#1873) * [CHANGE] Make api/v2/status.cluster.{name,peers} properties optional for Alertmanager with disabled clustering (#1728) * [FEATURE] Add groups endpoint to v2 api (#1791) * [FEATURE] Optional timeout for HTTP requests (#1743) * [ENHANCEMENT] Set HTTP headers to prevent asset caching (#1817) * [ENHANCEMENT] API returns current silenced/inhibited state of alerts (#1733) * [ENHANCEMENT] Configurable concurrency limit for GET requests (#1743) * [ENHANCEMENT] Pushover notifier: support HTML, URL title and custom sounds (#1634) * [ENHANCEMENT] Support adding custom fields to VictorOps notifications (#1420) * [ENHANCEMENT] Migrate amtool CLI to API v2 (#1798) * [ENHANCEMENT][ui] Default alert list view grouped by configured alert groups (#1864) * [ENHANCEMENT][ui] Remove superfluous inhibited/silenced text, show inhibited status (#1698, #1862) * [ENHANCEMENT][ui] Silence preview now shows already-muted alerts (#1776) * [ENHANCEMENT][ui] Sort silences from api/v2 similarly to api/v1 (#1786) * [BUGFIX] Trim PagerDuty message summary to 1024 chars (#1701) * [BUGFIX] Add fix for race causing alerts to be dropped (#1843) * [BUGFIX][ui] Correctly construct filter query string for api (#1869) * [BUGFIX][ui] Do not display GroupByAll and GroupBy in marshaled config (#1665) * [BUGFIX][ui] Respect regex setting when creating silences (#1697) ## 0.16.2 / 2019-04-03 Updating to v0.16.2 is recommended for all users using the Slack, Pagerduty, Hipchat, Wechat, VictorOps and Pushover notifier, as connection errors could leak secrets embedded in the notifier's URL to stdout. * [BUGFIX] Redact notifier URL from logs to not leak secrets embedded in the URL (#1822, #1825) * [BUGFIX] Allow sending of unauthenticated SMTP requests when `smtp_auth_username` is not supplied (#1739) ## 0.16.1 / 2019-01-31 * [BUGFIX] Do not populate cluster info if clustering is disabled in API v2 (#1726) ## 0.16.0 / 2019-01-17 This release introduces a new API v2, fully generated via the OpenAPI project [1]. At the same time with this release the previous API v1 is being deprecated. API v1 will be removed with Alertmanager release v0.18.0. * [CHANGE] Deprecate API v1 * [CHANGE] Remove `api/v1/alerts/groups` GET endpoint (#1508 & #1525) * [CHANGE] Revert Alertmanager working directory changes in Docker image back to `/alertmanager` (#1435) * [CHANGE] Using the recommended label syntax for maintainer in Dockerfile (#1533) * [CHANGE] Change `alertmanager_notifications_total` to count attempted notifications, not only successful ones (#1578) * [CHANGE] Run as nobody inside container (#1586) * [CHANGE] Support `w` for weeks when creating silences, remove `y` for year (#1620) * [FEATURE] Introduce OpenAPI generated API v2 (#1352) * [FEATURE] Lookup parts in strings using regexp.MatchString in templates (#1452) * [FEATURE] Support image/thumb url in attachment in Slack notifier (#1506) * [FEATURE] Support custom TLS certificates for the email notifier (#1528) * [FEATURE] Add support for images and links in the PagerDuty notification config (#1559) * [FEATURE] Add support for grouping by all labels (#1588) * [FEATURE] [amtool] Add timeout support to amtool commands (#1471) * [FEATURE] [amtool] Added `config routes` tools for visualization and testing routes (#1511) * [FEATURE] [amtool] Support adding alerts using amtool (#1461) * [ENHANCEMENT] Add support for --log.format (#1658) * [ENHANCEMENT] Add CORS support to API v2 (#1667) * [ENHANCEMENT] Support HTML, URL title and custom sounds for Pushover (#1634) * [ENHANCEMENT] Update Alert compact view (#1698) * [ENHANCEMENT] Support adding custom fields to VictorOps notifications (#1420) * [ENHANCEMENT] Add help link in UI to Alertmanager documentation (#1522) * [ENHANCEMENT] Enforce HTTP or HTTPS URLs in Alertmanager config (#1567) * [ENHANCEMENT] Make OpsGenie API Key a templated string (#1594) * [ENHANCEMENT] Add name, value and SlackConfirmationField to action in Slack notifier (#1557) * [ENHANCEMENT] Show more alert information on silence form and silence view pages (#1601) * [ENHANCEMENT] Add cluster peers DNS refresh job (#1428) * [BUGFIX] Fix unmarshaling of secret URLs in config (#1663) * [BUGFIX] Do not write groupbyall and groupby when marshaling config (#1665) * [BUGFIX] Make a copy of firing alerts with EndsAt=0 when flushing (#1686) * [BUGFIX] Respect regex matchers when recreating silences in UI (#1697) * [BUGFIX] Change DefaultGlobalConfig to a function in Alertmanager configuration (#1656) * [BUGFIX] Fix email template typo in alert-warning style (#1421) * [BUGFIX] Fix silence redirect on silence creation UI page (#1548) * [BUGFIX] Add missing `callback_id` parameter in Slack notifier (#1592) * [BUGFIX] Throw error if no auth mechanism matches in email notifier (#1608) * [BUGFIX] Use quoted-printable transfer encoding for the email notifier (#1609) * [BUGFIX] Do not merge expired gossip messages (#1631) * [BUGFIX] Fix "PLAIN" auth during notification via smtp-over-tls on port 465 (#1591) * [BUGFIX] [amtool] Support for assuming first label is alertname in silence add and query (#1693) * [BUGFIX] [amtool] Support assuming first label is alertname in alert query with matchers (#1575) * [BUGFIX] [amtool] Fix config path check in amtool (#1538) * [BUGFIX] [amtool] Fix rfc3339 example texts (#1526) * [BUGFIX] [amtool] Fixed issue with loading path of a default configs (#1529) [1] https://github.com/prometheus/alertmanager#api ## 0.15.3 / 2018-11-09 * [BUGFIX] Fix alert merging supporting both empty and set EndsAt property for firing alerts send by Prometheus (#1611) ## 0.15.2 / 2018-08-14 * [ENHANCEMENT] [amtool] Add support for stdin to check-config (#1431) * [ENHANCEMENT] Log PagerDuty v1 response on BadRequest (#1481) * [BUGFIX] Correctly encode query strings in notifiers (#1516) * [BUGFIX] Add cache control headers to the API responses to avoid IE caching (#1500) * [BUGFIX] Avoid listener blocking on unsubscribe (#1482) * [BUGFIX] Fix a bunch of unhandled errors (#1501) * [BUGFIX] Update PagerDuty API V2 to send full details on resolve (#1483) * [BUGFIX] Validate URLs at config load time (#1468) * [BUGFIX] Fix Settle() interval (#1478) * [BUGFIX] Fix email to be green if only none firing (#1475) * [BUGFIX] Handle errors in notify (#1474) * [BUGFIX] Fix templating of hipchat room id (#1463) ## 0.15.1 / 2018-07-10 * [BUGFIX] Fix email template typo in alert-warning style (#1421) * [BUGFIX] Fix regression in Pager Duty config (#1455) * [BUGFIX] Catch templating errors in Wechat Notify (#1436) * [BUGFIX] Fail when no private address can be found for cluster (#1437) * [BUGFIX] Make sure we don't miss the first pushPull when joining cluster (#1456) * [BUGFIX] Fix concurrent read and write group error in dispatch (#1447) ## 0.15.0 / 2018-06-22 * [CHANGE] [amtool] Update silence add and update flags (#1298) * [CHANGE] Replace deprecated InstrumentHandler() (#1302) * [CHANGE] Validate Slack field config and only allow the necessary input (#1334) * [CHANGE] Remove legacy alert ingest endpoint (#1362) * [CHANGE] Move to memberlist as underlying gossip protocol including cluster flag changes from --mesh.xxx to --cluster.xxx (#1232) * [CHANGE] Move Alertmanager working directory in Docker image to /etc/alertmanager (#1313) * [BUGFIX/CHANGE] The default group by is no labels. (#1287) * [FEATURE] [amtool] Filter alerts by receiver (#1402) * [FEATURE] Wait for mesh to settle before sending alerts (#1209) * [FEATURE] [amtool] Support basic auth in alertmanager url (#1279) * [FEATURE] Make HTTP clients used for integrations configurable * [ENHANCEMENT] Support receiving alerts with end time and zero start time * [ENHANCEMENT] Sort dispatched alerts by job+instance (#1234) * [ENHANCEMENT] Support alert query filters `active` and `unprocessed` (#1366) * [ENHANCEMENT] [amtool] Expose alert query flags --active and --unprocessed (#1370) * [ENHANCEMENT] Add Slack actions to notifications (#1355) * [BUGFIX] Register nflog snapShotSize metric * [BUGFIX] Sort alerts in correct order before flushing to notifiers (#1349) * [BUGFIX] Don't reset initial wait timer if flush is in-progress (#1301) * [BUGFIX] Fix resolved alerts still inhibiting (#1331) * [BUGFIX] Template wechat config fields (#1356) * [BUGFIX] Notify resolved alerts properly (#1408) * [BUGFIX] Fix parsing for label values with commas (#1395) * [BUGFIX] Hide sensitive Wechat configuration (#1253) * [BUGFIX] Prepopulate matchers when recreating a silence (#1270) * [BUGFIX] Fix wechat panic (#1293) * [BUGFIX] Allow empty matchers in silences/filtering (#1289) * [BUGFIX] Properly configure HTTP client for Wechat integration ## 0.14.0 / 2018-02-12 * [ENHANCEMENT] [amtool] Silence update support dwy suffixes to expire flag (#1197) * [ENHANCEMENT] Allow templating PagerDuty receiver severity (#1214) * [ENHANCEMENT] Include receiver name in failed notifications log messages (#1207) * [ENHANCEMENT] Allow global opsgenie api key (#1208) * [ENHANCEMENT] Add mesh metrics (#1225) * [ENHANCEMENT] Add Class field to PagerDuty; add templating to PagerDuty-CEF fields (#1231) * [BUGFIX] Don't notify of resolved alerts if none were reported firing (#1198) * [BUGFIX] Notify only when new firing alerts are added (#1205) * [BUGFIX] [mesh] Fix pending connections never set to established (#1204) * [BUGFIX] Allow OpsGenie notifier to have empty team fields (#1224) * [BUGFIX] Don't count alerts with EndTime in the future as resolved (#1233) * [BUGFIX] Speed up re-rendering of Silence UI (#1235) * [BUGFIX] Forbid 0 value for group_interval and repeat_interval (#1230) * [BUGFIX] Fix WeChat agentid issue (#1229) ## 0.13.0 / 2018-01-12 * [CHANGE] Switch cmd/alertmanager to kingpin (#974) * [CHANGE] [amtool] Switch amtool to kingpin (#976) * [CHANGE] [amtool] silence query: --expired flag only shows expired silences (#1190) * [CHANGE] Return config reload result from reload endpoint (#1180) * [FEATURE] UI silence form is populated from location bar (#1148) * [FEATURE] Add /-/healthy endpoint (#1159) * [ENHANCEMENT] Instrument and log snapshot sizes on maintenance (#1155) * [ENHANCEMENT] Make alertGC interval configurable (#1151) * [ENHANCEMENT] Display mesh connections in the Status page (#1164) * [BUGFIX] Template service keys for pagerduty notifier (#1182) * [BUGFIX] Fix expire buttons on the silences page (#1171) * [BUGFIX] Fix JavaScript error in MSIE due to endswith() usage (#1172) * [BUGFIX] Correctly format UI error output (#1167) ## 0.12.0 / 2017-12-15 * [FEATURE] package amtool in docker container (#1127) * [FEATURE] Add notify support for Chinese User wechat (#1059) * [FEATURE] [amtool] Add a new `silence import` command (#1082) * [FEATURE] [amtool] Add new command to update silence (#1123) * [FEATURE] [amtool] Add ability to query for silences that will expire soon (#1120) * [ENHANCEMENT] Template source field in PagerDuty alert payload (#1117) * [ENHANCEMENT] Add footer field for slack messages (#1141) * [ENHANCEMENT] Add Slack additional "fields" to notifications (#1135) * [ENHANCEMENT] Adding check for webhook's URL formatting (#1129) * [ENHANCEMENT] Let the browser remember the creator of a silence (#1112) * [BUGFIX] Fix race in stopping inhibitor (#1118) * [BUGFIX] Fix browser UI when entering negative duration (#1132) ## 0.11.0 / 2017-11-16 * [CHANGE] Make silence negative filtering consistent with alert filtering (#1095) * [CHANGE] Change HipChat and OpsGenie api config names (#1087) * [ENHANCEMENT] amtool: Allow 'd', 'w', 'y' time suffixes when creating silence (#1091) * [ENHANCEMENT] Support OpsGenie Priority field (#1094) * [BUGFIX] Fix UI when no silences are present (#1090) * [BUGFIX] Fix OpsGenie Teams field (#1101) * [BUGFIX] Fix OpsGenie Tags field (#1108) ## 0.10.0 / 2017-11-09 * [CHANGE] Prevent inhibiting alerts in the source of the inhibition (#1017) * [ENHANCEMENT] Improve amtool check-config use and description text (#1016) * [ENHANCEMENT] Add metrics about current silences and alerts (#998) * [ENHANCEMENT] Sorted silences based on current status (#1015) * [ENHANCEMENT] Add metric of alertmanager position in mesh (#1024) * [ENHANCEMENT] Initialise notifications_total and notifications_failed_total (#1011) * [ENHANCEMENT] Allow selectable matchers on silence view (#1030) * [ENHANCEMENT] Allow template in victorops message_type field (#1038) * [ENHANCEMENT] Optionally hide inhibited alerts in API response (#1039) * [ENHANCEMENT] Toggle silenced and inhibited alerts in UI (#1049) * [ENHANCEMENT] Fix pushover limits (title, message, url) (#1055) * [ENHANCEMENT] Add limit to OpsGenie message (#1045) * [ENHANCEMENT] Upgrade OpsGenie notifier to v2 API. (#1061) * [ENHANCEMENT] Allow template in victorops routing_key field (#1083) * [ENHANCEMENT] Add support for PagerDuty API v2 (#1054) * [BUGFIX] Fix inhibit race (#1032) * [BUGFIX] Fix segfault on amtool (#1031) * [BUGFIX] Remove .WasInhibited and .WasSilenced fields of Alert type (#1026) * [BUGFIX] nflog: Fix Log() crash when gossip is nil (#1064) * [BUGFIX] Fix notifications for flapping alerts (#1071) * [BUGFIX] Fix shutdown crash with nil mesh router (#1077) * [BUGFIX] Fix negative matchers filtering (#1077) ## 0.9.1 / 2017-09-29 * [BUGFIX] Fix -web.external-url regression in ui (#1008) * [BUGFIX] Fix multipart email implementation (#1009) ## 0.9.0 / 2017-09-28 * [ENHANCEMENT] Add current time to webhook message (#909) * [ENHANCEMENT] Add link_names to slack notifier (#912) * [ENHANCEMENT] Make ui labels selectable/highlightable (#932) * [ENHANCEMENT] Make links in ui annotations selectable (#946) * [ENHANCEMENT] Expose the alert's "fingerprint" (unique identifier) through API (#786) * [ENHANCEMENT] Add README information for amtool (#939) * [ENHANCEMENT] Use user-set logging option consistently throughout alertmanager (#968) * [ENHANCEMENT] Sort alerts returned from API by their fingerprint (#969) * [ENHANCEMENT] Add edit/delete silence buttons on silence page view (#970) * [ENHANCEMENT] Add check-config subcommand to amtool (#978) * [ENHANCEMENT] Add email notification text content support (#934) * [ENHANCEMENT] Support passing binary name to make build target (#990) * [ENHANCEMENT] Show total no. of silenced alerts in preview (#994) * [ENHANCEMENT] Added confirmation dialog when expiring silences (#993) * [BUGFIX] Fix crash when no mesh router is configured (#919) * [BUGFIX] Render status page without mesh (#920) * [BUGFIX] Exit amtool subcommands with non-zero error code (#938) * [BUGFIX] Change mktemp invocation in makefile to work for macOS (#971) * [BUGFIX] Add a mutex to silences.go:gossipData (#984) * [BUGFIX] silences: avoid deadlock (#995) * [BUGFIX] Ignore expired silences OnGossip (#999) ## 0.8.0 / 2017-07-20 * [FEATURE] Add ability to filter alerts by receiver in the UI (#890) * [FEATURE] Add User-Agent for webhook requests (#893) * [ENHANCEMENT] Add possibility to have a global victorops api_key (#897) * [ENHANCEMENT] Add EntityDisplayName and improve StateMessage for Victorops (#769) * [ENHANCEMENT] Omit empty config fields and show regex upon re-marshaling to elide secrets (#864) * [ENHANCEMENT] Parse API error messages in UI (#866) * [ENHANCEMENT] Enable sending mail via smtp port 465 (#704) * [BUGFIX] Prevent duplicate notifications by sorting matchers (#882) * [BUGFIX] Remove timeout for UI requests (#890) * [BUGFIX] Update config file location of CLI in flag usage text (#895) ## 0.7.1 / 2017-06-09 * [BUGFIX] Fix filtering by label on Alert list and Silence list page ## 0.7.0 / 2017-06-08 * [CHANGE] Rewrite UI from scratch improving UX * [CHANGE] Rename `config` to `configYAML` on `api/v1/status` * [FEATURE] Add ability to update a silence on `api/v1/silences` POST endpoint (See #765) * [FEATURE] Return alert status on `api/v1/alerts` GET endpoint * [FEATURE] Serve silence state on `api/v1/silences` GET endpoint * [FEATURE] Add ability to specify a route prefix * [FEATURE] Add option to disable AM listening on mesh port * [ENHANCEMENT] Add ability to specify `filter` string and `silenced` flag on `api/v1/alerts` GET endpoint * [ENHANCEMENT] Update `cache-control` to prevent caching for web assets in general. * [ENHANCEMENT] Serve web assets by alertmanager instead of external CDN (See #846) * [ENHANCEMENT] Elide secrets in alertmanager config (See #840) * [ENHANCEMENT] AMTool: Move config file to a more consistent location (See #843) * [BUGFIX] Enable builds for Solaris/Illumos * [BUGFIX] Load web assets based on url path (See #323) ## 0.6.2 / 2017-05-09 * [BUGFIX] Correctly link to silences from alert again * [BUGFIX] Correctly hide silenced/show active alerts in UI again * [BUGFIX] Fix regression of alerts not being displayed until first processing * [BUGFIX] Fix internal usage of wrong lock for silence markers * [BUGFIX] Adapt amtool's API parsing to recent API changes * [BUGFIX] Correctly marshal regexes in config JSON response * [CHANGE] Anchor silence regex matchers to be consistent with Prometheus * [ENHANCEMENT] Error if root route is using `continue` keyword ## 0.6.1 / 2017-04-28 * [BUGFIX] Fix incorrectly serialized hash for notification providers. * [ENHANCEMENT] Add processing status field to alerts. * [FEATURE] Add config hash metric. ## 0.6.0 / 2017-04-25 * [BUGFIX] Add `groupKey` to `alerts/groups` endpoint https://github.com/prometheus/alertmanager/pull/576 * [BUGFIX] Only notify on firing alerts https://github.com/prometheus/alertmanager/pull/595 * [BUGFIX] Correctly marshal regex's in config for routing tree https://github.com/prometheus/alertmanager/pull/602 * [BUGFIX] Prevent panic when failing to load config https://github.com/prometheus/alertmanager/pull/607 * [BUGFIX] Prevent panic when alertmanager is started with an empty `-mesh.peer` https://github.com/prometheus/alertmanager/pull/726 * [CHANGE] Rename VictorOps config variables https://github.com/prometheus/alertmanager/pull/667 * [CHANGE] No longer generate releases for openbsd/arm https://github.com/prometheus/alertmanager/pull/732 * [ENHANCEMENT] Add `DELETE` as accepted CORS method https://github.com/prometheus/alertmanager/commit/0ecc59076ca6b4cbb63252fa7720a3d89d1c81d3 * [ENHANCEMENT] Switch to using `gogoproto` for protobuf https://github.com/prometheus/alertmanager/pull/715 * [ENHANCEMENT] Include notifier type in logs and errors https://github.com/prometheus/alertmanager/pull/702 * [FEATURE] Expose mesh peers on status page https://github.com/prometheus/alertmanager/pull/644 * [FEATURE] Add `reReplaceAll` template function https://github.com/prometheus/alertmanager/pull/639 * [FEATURE] Allow label-based filtering alerts/silences through API https://github.com/prometheus/alertmanager/pull/633 * [FEATURE] Add commandline tool for interacting with alertmanager https://github.com/prometheus/alertmanager/pull/636 ## 0.5.1 / 2016-11-24 * [BUGFIX] Fix crash caused by race condition in silencing * [ENHANCEMENT] Improve logging of API errors * [ENHANCEMENT] Add metrics for the notification log ## 0.5.0 / 2016-11-01 This release requires a storage wipe. It contains fundamental internal changes that came with implementing the high availability mode. * [FEATURE] Alertmanager clustering for high availability * [FEATURE] Garbage collection of old silences and notification logs * [CHANGE] New storage format * [CHANGE] Stricter silence semantics for consistent historical view ## 0.4.2 / 2016-09-02 * [BUGFIX] Fix broken regex checkbox in silence form * [BUGFIX] Simplify inconsistent silence update behavior ## 0.4.1 / 2016-08-31 * [BUGFIX] Wait for silence query to finish instead of showing error * [BUGFIX] Fix sorting of silences * [BUGFIX] Provide visual feedback after creating a silence * [BUGFIX] Fix styling of silences * [ENHANCEMENT] Provide cleaner API silence interface ## 0.4.0 / 2016-08-23 * [FEATURE] Silences are now paginated in the web ui * [CHANGE] Failure to start on unparsed flags ## 0.3.0 / 2016-07-07 * [CHANGE] Alerts are purely in memory and no longer persistent across restarts * [FEATURE] Add SMTP LOGIN authentication mechanism ## 0.2.1 / 2016-06-23 * [ENHANCEMENT] Allow inheritance of route receiver * [ENHANCEMENT] Add silence cache to silence provider * [BUGFIX] Fix HipChat room number in integration URL ## 0.2.0 / 2016-06-17 This release uses a new storage backend based on BoltDB. You have to backup and wipe your former storage path to run it. * [CHANGE] Use BoltDB as data store. * [CHANGE] Move SMTP authentication to configuration file * [FEATURE] add /-/reload HTTP endpoint * [FEATURE] Filter silenced alerts in web UI * [ENHANCEMENT] reduce inhibition computation complexity * [ENHANCEMENT] Add support for teams and tags in OpsGenie integration * [BUGFIX] Handle OpsGenie responses correctly * [BUGFIX] Fix Pushover queue length issue * [BUGFIX] STARTTLS before querying auth mechanism in email integration ## 0.1.1 / 2016-03-15 * [BUGFIX] Fix global database lock issue * [ENHANCEMENT] Improve SQLite alerts index * [ENHANCEMENT] Enable debug endpoint ## 0.1.0 / 2016-02-23 This version is a full rewrite of the Alertmanager with a very different feature set. Thus, there is no meaningful changelog. Changes with respect to 0.1.0-beta2: * [CHANGE] Expose same data structure to templates and webhook * [ENHANCEMENT] Show generator URL in default templates and web UI * [ENHANCEMENT] Support for Slack icon_emoji field * [ENHANCEMENT] Expose incident key to templates and webhook data * [ENHANCEMENT] Allow markdown in Slack 'text' field * [BUGFIX] Fixed database locking issue ## 0.1.0-beta2 / 2016-02-03 * [BUGFIX] Properly set timeout for incoming alerts with fixed start time * [ENHANCEMENT] Send source field in OpsGenie integration * [ENHANCEMENT] Improved routing configuration validation * [FEATURE] Basic instrumentation added ## 0.1.0-beta1 / 2016-01-08 * [BUGFIX] Send full alert group state on each update. Fixes erroneous resolved notifications. * [FEATURE] HipChat integration * [CHANGE] Slack integration no longer sends resolved notifications by default ## 0.1.0-beta0 / 2015-12-23 This version is a full rewrite of the Alertmanager with a very different feature set. Thus, there is no meaningful changelog. ## 0.0.4 / 2015-09-09 * [BUGFIX] Fix version info string in startup message. * [BUGFIX] Fix Pushover notifications by setting the right priority level, as well as required retry and expiry intervals. * [FEATURE] Make it possible to link to individual alerts in the UI. * [FEATURE] Rearrange alert columns in UI and allow expanding more alert details. * [FEATURE] Add Amazon SNS notifications. * [FEATURE] Add OpsGenie Webhook notifications. * [FEATURE] Add `-web.external-url` flag to control the externally visible Alertmanager URL. * [FEATURE] Add runbook and alertmanager URLs to PagerDuty and email notifications. * [FEATURE] Add a GET API to /api/alerts which pulls JSON formatted AlertAggregates. * [ENHANCEMENT] Sort alerts consistently in web UI. * [ENHANCEMENT] Suggest to use email address as silence creator. * [ENHANCEMENT] Make Slack timeout configurable. * [ENHANCEMENT] Add channel name to error logging about Slack notifications. * [ENHANCEMENT] Refactoring and tests for Flowdock notifications. * [ENHANCEMENT] New Dockerfile using alpine-golang-make-onbuild base image. * [CLEANUP] Add Docker instructions and other cleanups in README.md. * [CLEANUP] Update Makefile.COMMON from prometheus/utils. ## 0.0.3 / 2015-06-10 * [BUGFIX] Fix email template body writer being called with parameters in wrong order. ## 0.0.2 / 2015-06-09 * [BUGFIX] Fixed silences.json permissions in Docker image. * [CHANGE] Changed case of API JSON properties to initial lower letter. * [CHANGE] Migrated logging to use http://github.com/prometheus/log. * [FEATURE] Flowdock notification support. * [FEATURE] Slack notification support. * [FEATURE] Generic webhook notification support. * [FEATURE] Support for "@"-mentions in HipChat notifications. * [FEATURE] Path prefix option to support reverse proxies. * [ENHANCEMENT] Improved web redirection and 404 behavior. * [CLEANUP] Updated compiled web assets from source. * [CLEANUP] Updated fsnotify package to its new source location. * [CLEANUP] Updates to README.md and AUTHORS.md. * [CLEANUP] Various smaller cleanups and improvements. prometheus-alertmanager-0.28.1+ds/CODE_OF_CONDUCT.md000066400000000000000000000002301476331240200216330ustar00rootroot00000000000000# Prometheus Community Code of Conduct Prometheus follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md). prometheus-alertmanager-0.28.1+ds/COPYRIGHT.txt000066400000000000000000000010421476331240200211470ustar00rootroot00000000000000Copyright Prometheus Team Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. prometheus-alertmanager-0.28.1+ds/Dockerfile000066400000000000000000000014341476331240200210350ustar00rootroot00000000000000ARG ARCH="amd64" ARG OS="linux" FROM quay.io/prometheus/busybox-${OS}-${ARCH}:latest LABEL maintainer="The Prometheus Authors " LABEL org.opencontainers.image.source="https://github.com/prometheus/alertmanager" ARG ARCH="amd64" ARG OS="linux" COPY .build/${OS}-${ARCH}/amtool /bin/amtool COPY .build/${OS}-${ARCH}/alertmanager /bin/alertmanager COPY examples/ha/alertmanager.yml /etc/alertmanager/alertmanager.yml RUN mkdir -p /alertmanager && \ chown -R nobody:nobody etc/alertmanager /alertmanager USER nobody EXPOSE 9093 VOLUME [ "/alertmanager" ] WORKDIR /alertmanager ENTRYPOINT [ "/bin/alertmanager" ] CMD [ "--config.file=/etc/alertmanager/alertmanager.yml", \ "--storage.path=/alertmanager" ] prometheus-alertmanager-0.28.1+ds/LICENSE000066400000000000000000000261351476331240200200550ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. prometheus-alertmanager-0.28.1+ds/MAINTAINERS.md000066400000000000000000000002321476331240200211320ustar00rootroot00000000000000* Simon Pasquier @simonpasquier * Andrey Kuzmin @w0rm * Josue Abreu @gotjosh prometheus-alertmanager-0.28.1+ds/Makefile000066400000000000000000000060331476331240200205030ustar00rootroot00000000000000# Copyright 2015 The Prometheus Authors # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Needs to be defined before including Makefile.common to auto-generate targets DOCKER_ARCHS ?= amd64 armv7 arm64 ppc64le s390x include Makefile.common FRONTEND_DIR = $(BIN_DIR)/ui/app TEMPLATE_DIR = $(BIN_DIR)/template DOCKER_IMAGE_NAME ?= alertmanager STATICCHECK_IGNORE = .PHONY: build-all # Will build both the front-end as well as the back-end build-all: assets apiv2 build .PHONY: build build: build-react-app assets-compress common-build .PHONY: lint lint: assets-compress common-lint .PHONY: build-react-app build-react-app: cd ui/react-app && npm install && npm run build .PHONY: assets-compress assets-compress: build-react-app @echo '>> compressing assets' scripts/compress_assets.sh .PHONY: assets assets: asset/assets_vfsdata.go .PHONY: assets-tarball assets-tarball: ui/app/script.js ui/app/index.html scripts/package_assets.sh asset/assets_vfsdata.go: ui/app/script.js ui/app/index.html ui/app/lib template/default.tmpl template/email.tmpl GO111MODULE=$(GO111MODULE) $(GO) generate $(GOOPTS) ./asset @$(GOFMT) -w ./asset ui/app/script.js: $(shell find ui/app/src -iname *.elm) api/v2/openapi.yaml cd $(FRONTEND_DIR) && $(MAKE) script.js template/email.tmpl: template/email.html cd $(TEMPLATE_DIR) && $(MAKE) email.tmpl .PHONY: apiv2 apiv2: api/v2/models api/v2/restapi api/v2/client SWAGGER = docker run \ --user=$(shell id -u $(USER)):$(shell id -g $(USER)) \ --rm \ -v $(shell pwd):/go/src/github.com/prometheus/alertmanager \ -w /go/src/github.com/prometheus/alertmanager quay.io/goswagger/swagger:v0.30.5 api/v2/models api/v2/restapi api/v2/client: api/v2/openapi.yaml -rm -r api/v2/{client,models,restapi} $(SWAGGER) generate server -f api/v2/openapi.yaml --copyright-file=COPYRIGHT.txt --exclude-main -A alertmanager --target api/v2/ $(SWAGGER) generate client -f api/v2/openapi.yaml --copyright-file=COPYRIGHT.txt --skip-models --target api/v2 .PHONY: clean clean: - @rm -rf asset/assets_vfsdata.go \ template/email.tmpl \ api/v2/models api/v2/restapi api/v2/client - @cd $(FRONTEND_DIR) && $(MAKE) clean # In github actions we skip the email test for now. Service containers in github # actions currently have a bug, see https://github.com/prometheus/alertmanager/pull/3299 # So define a test target, that skips the email test for now. .PHONY: test test: $(GOTEST_DIR) @echo ">> running all tests, except notify/email" $(GOTEST) $(test-flags) $(GOOPTS) `go list ./... | grep -v notify/email` prometheus-alertmanager-0.28.1+ds/Makefile.common000066400000000000000000000221631476331240200217740ustar00rootroot00000000000000# Copyright 2018 The Prometheus Authors # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # A common Makefile that includes rules to be reused in different prometheus projects. # !!! Open PRs only against the prometheus/prometheus/Makefile.common repository! # Example usage : # Create the main Makefile in the root project directory. # include Makefile.common # customTarget: # @echo ">> Running customTarget" # # Ensure GOBIN is not set during build so that promu is installed to the correct path unexport GOBIN GO ?= go GOFMT ?= $(GO)fmt FIRST_GOPATH := $(firstword $(subst :, ,$(shell $(GO) env GOPATH))) GOOPTS ?= GOHOSTOS ?= $(shell $(GO) env GOHOSTOS) GOHOSTARCH ?= $(shell $(GO) env GOHOSTARCH) GO_VERSION ?= $(shell $(GO) version) GO_VERSION_NUMBER ?= $(word 3, $(GO_VERSION)) PRE_GO_111 ?= $(shell echo $(GO_VERSION_NUMBER) | grep -E 'go1\.(10|[0-9])\.') PROMU := $(FIRST_GOPATH)/bin/promu pkgs = ./... ifeq (arm, $(GOHOSTARCH)) GOHOSTARM ?= $(shell GOARM= $(GO) env GOARM) GO_BUILD_PLATFORM ?= $(GOHOSTOS)-$(GOHOSTARCH)v$(GOHOSTARM) else GO_BUILD_PLATFORM ?= $(GOHOSTOS)-$(GOHOSTARCH) endif GOTEST := $(GO) test GOTEST_DIR := ifneq ($(CIRCLE_JOB),) ifneq ($(shell command -v gotestsum 2> /dev/null),) GOTEST_DIR := test-results GOTEST := gotestsum --junitfile $(GOTEST_DIR)/unit-tests.xml -- endif endif PROMU_VERSION ?= 0.17.0 PROMU_URL := https://github.com/prometheus/promu/releases/download/v$(PROMU_VERSION)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM).tar.gz SKIP_GOLANGCI_LINT := GOLANGCI_LINT := GOLANGCI_LINT_OPTS ?= GOLANGCI_LINT_VERSION ?= v1.61.0 # golangci-lint only supports linux, darwin and windows platforms on i386/amd64/arm64. # windows isn't included here because of the path separator being different. ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux darwin)) ifeq ($(GOHOSTARCH),$(filter $(GOHOSTARCH),amd64 i386 arm64)) # If we're in CI and there is an Actions file, that means the linter # is being run in Actions, so we don't need to run it here. ifneq (,$(SKIP_GOLANGCI_LINT)) GOLANGCI_LINT := else ifeq (,$(CIRCLE_JOB)) GOLANGCI_LINT := $(FIRST_GOPATH)/bin/golangci-lint else ifeq (,$(wildcard .github/workflows/golangci-lint.yml)) GOLANGCI_LINT := $(FIRST_GOPATH)/bin/golangci-lint endif endif endif PREFIX ?= $(shell pwd) BIN_DIR ?= $(shell pwd) DOCKER_IMAGE_TAG ?= $(subst /,-,$(shell git rev-parse --abbrev-ref HEAD)) DOCKERFILE_PATH ?= ./Dockerfile DOCKERBUILD_CONTEXT ?= ./ DOCKER_REPO ?= prom DOCKER_ARCHS ?= amd64 BUILD_DOCKER_ARCHS = $(addprefix common-docker-,$(DOCKER_ARCHS)) PUBLISH_DOCKER_ARCHS = $(addprefix common-docker-publish-,$(DOCKER_ARCHS)) TAG_DOCKER_ARCHS = $(addprefix common-docker-tag-latest-,$(DOCKER_ARCHS)) SANITIZED_DOCKER_IMAGE_TAG := $(subst +,-,$(DOCKER_IMAGE_TAG)) ifeq ($(GOHOSTARCH),amd64) ifeq ($(GOHOSTOS),$(filter $(GOHOSTOS),linux freebsd darwin windows)) # Only supported on amd64 test-flags := -race endif endif # This rule is used to forward a target like "build" to "common-build". This # allows a new "build" target to be defined in a Makefile which includes this # one and override "common-build" without override warnings. %: common-% ; .PHONY: common-all common-all: precheck style check_license lint yamllint unused build test .PHONY: common-style common-style: @echo ">> checking code style" @fmtRes=$$($(GOFMT) -d $$(find . -path ./vendor -prune -o -name '*.go' -print)); \ if [ -n "$${fmtRes}" ]; then \ echo "gofmt checking failed!"; echo "$${fmtRes}"; echo; \ echo "Please ensure you are using $$($(GO) version) for formatting code."; \ exit 1; \ fi .PHONY: common-check_license common-check_license: @echo ">> checking license header" @licRes=$$(for file in $$(find . -type f -iname '*.go' ! -path './vendor/*') ; do \ awk 'NR<=3' $$file | grep -Eq "(Copyright|generated|GENERATED)" || echo $$file; \ done); \ if [ -n "$${licRes}" ]; then \ echo "license header checking failed:"; echo "$${licRes}"; \ exit 1; \ fi .PHONY: common-deps common-deps: @echo ">> getting dependencies" $(GO) mod download .PHONY: update-go-deps update-go-deps: @echo ">> updating Go dependencies" @for m in $$($(GO) list -mod=readonly -m -f '{{ if and (not .Indirect) (not .Main)}}{{.Path}}{{end}}' all); do \ $(GO) get -d $$m; \ done $(GO) mod tidy .PHONY: common-test-short common-test-short: $(GOTEST_DIR) @echo ">> running short tests" $(GOTEST) -short $(GOOPTS) $(pkgs) .PHONY: common-test common-test: $(GOTEST_DIR) @echo ">> running all tests" $(GOTEST) $(test-flags) $(GOOPTS) $(pkgs) $(GOTEST_DIR): @mkdir -p $@ .PHONY: common-format common-format: @echo ">> formatting code" $(GO) fmt $(pkgs) .PHONY: common-vet common-vet: @echo ">> vetting code" $(GO) vet $(GOOPTS) $(pkgs) .PHONY: common-lint common-lint: $(GOLANGCI_LINT) ifdef GOLANGCI_LINT @echo ">> running golangci-lint" $(GOLANGCI_LINT) run $(GOLANGCI_LINT_OPTS) $(pkgs) endif .PHONY: common-lint-fix common-lint-fix: $(GOLANGCI_LINT) ifdef GOLANGCI_LINT @echo ">> running golangci-lint fix" $(GOLANGCI_LINT) run --fix $(GOLANGCI_LINT_OPTS) $(pkgs) endif .PHONY: common-yamllint common-yamllint: @echo ">> running yamllint on all YAML files in the repository" ifeq (, $(shell command -v yamllint 2> /dev/null)) @echo "yamllint not installed so skipping" else yamllint . endif # For backward-compatibility. .PHONY: common-staticcheck common-staticcheck: lint .PHONY: common-unused common-unused: @echo ">> running check for unused/missing packages in go.mod" $(GO) mod tidy @git diff --exit-code -- go.sum go.mod .PHONY: common-build common-build: promu @echo ">> building binaries" $(PROMU) build --prefix $(PREFIX) $(PROMU_BINARIES) .PHONY: common-tarball common-tarball: promu @echo ">> building release tarball" $(PROMU) tarball --prefix $(PREFIX) $(BIN_DIR) .PHONY: common-docker-repo-name common-docker-repo-name: @echo "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)" .PHONY: common-docker $(BUILD_DOCKER_ARCHS) common-docker: $(BUILD_DOCKER_ARCHS) $(BUILD_DOCKER_ARCHS): common-docker-%: docker build -t "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" \ -f $(DOCKERFILE_PATH) \ --build-arg ARCH="$*" \ --build-arg OS="linux" \ $(DOCKERBUILD_CONTEXT) .PHONY: common-docker-publish $(PUBLISH_DOCKER_ARCHS) common-docker-publish: $(PUBLISH_DOCKER_ARCHS) $(PUBLISH_DOCKER_ARCHS): common-docker-publish-%: docker push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" DOCKER_MAJOR_VERSION_TAG = $(firstword $(subst ., ,$(shell cat VERSION))) .PHONY: common-docker-tag-latest $(TAG_DOCKER_ARCHS) common-docker-tag-latest: $(TAG_DOCKER_ARCHS) $(TAG_DOCKER_ARCHS): common-docker-tag-latest-%: docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:latest" docker tag "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:$(SANITIZED_DOCKER_IMAGE_TAG)" "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$*:v$(DOCKER_MAJOR_VERSION_TAG)" .PHONY: common-docker-manifest common-docker-manifest: DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)" $(foreach ARCH,$(DOCKER_ARCHS),$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME)-linux-$(ARCH):$(SANITIZED_DOCKER_IMAGE_TAG)) DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push "$(DOCKER_REPO)/$(DOCKER_IMAGE_NAME):$(SANITIZED_DOCKER_IMAGE_TAG)" .PHONY: promu promu: $(PROMU) $(PROMU): $(eval PROMU_TMP := $(shell mktemp -d)) curl -s -L $(PROMU_URL) | tar -xvzf - -C $(PROMU_TMP) mkdir -p $(FIRST_GOPATH)/bin cp $(PROMU_TMP)/promu-$(PROMU_VERSION).$(GO_BUILD_PLATFORM)/promu $(FIRST_GOPATH)/bin/promu rm -r $(PROMU_TMP) .PHONY: proto proto: @echo ">> generating code from proto files" @./scripts/genproto.sh ifdef GOLANGCI_LINT $(GOLANGCI_LINT): mkdir -p $(FIRST_GOPATH)/bin curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/$(GOLANGCI_LINT_VERSION)/install.sh \ | sed -e '/install -d/d' \ | sh -s -- -b $(FIRST_GOPATH)/bin $(GOLANGCI_LINT_VERSION) endif .PHONY: precheck precheck:: define PRECHECK_COMMAND_template = precheck:: $(1)_precheck PRECHECK_COMMAND_$(1) ?= $(1) $$(strip $$(PRECHECK_OPTIONS_$(1))) .PHONY: $(1)_precheck $(1)_precheck: @if ! $$(PRECHECK_COMMAND_$(1)) 1>/dev/null 2>&1; then \ echo "Execution of '$$(PRECHECK_COMMAND_$(1))' command failed. Is $(1) installed?"; \ exit 1; \ fi endef govulncheck: install-govulncheck govulncheck ./... install-govulncheck: command -v govulncheck > /dev/null || go install golang.org/x/vuln/cmd/govulncheck@latest prometheus-alertmanager-0.28.1+ds/NOTICE000066400000000000000000000004671476331240200177540ustar00rootroot00000000000000Prometheus Alertmanager Copyright 2013-2015 The Prometheus Authors This product includes software developed at SoundCloud Ltd. (http://soundcloud.com/). The following components are included in this product: Bootstrap http://getbootstrap.com Copyright 2011-2014 Twitter, Inc. Licensed under the MIT License prometheus-alertmanager-0.28.1+ds/Procfile000066400000000000000000000011551476331240200205310ustar00rootroot00000000000000a1: ./alertmanager --log.level=debug --storage.path=$TMPDIR/a1 --web.listen-address=:9093 --cluster.listen-address=127.0.0.1:8001 --config.file=examples/ha/alertmanager.yml a2: ./alertmanager --log.level=debug --storage.path=$TMPDIR/a2 --web.listen-address=:9094 --cluster.listen-address=127.0.0.1:8002 --cluster.peer=127.0.0.1:8001 --config.file=examples/ha/alertmanager.yml a3: ./alertmanager --log.level=debug --storage.path=$TMPDIR/a3 --web.listen-address=:9095 --cluster.listen-address=127.0.0.1:8003 --cluster.peer=127.0.0.1:8001 --config.file=examples/ha/alertmanager.yml wh: go run ./examples/webhook/echo.go prometheus-alertmanager-0.28.1+ds/README.md000066400000000000000000000421241476331240200203230ustar00rootroot00000000000000# Alertmanager [![CircleCI](https://circleci.com/gh/prometheus/alertmanager/tree/main.svg?style=shield)][circleci] [![Docker Repository on Quay](https://quay.io/repository/prometheus/alertmanager/status "Docker Repository on Quay")][quay] [![Docker Pulls](https://img.shields.io/docker/pulls/prom/alertmanager.svg?maxAge=604800)][hub] The Alertmanager handles alerts sent by client applications such as the Prometheus server. It takes care of deduplicating, grouping, and routing them to the correct [receiver integrations](https://prometheus.io/docs/alerting/latest/configuration/#receiver) such as email, PagerDuty, OpsGenie, or many other [mechanisms](https://prometheus.io/docs/operating/integrations/#alertmanager-webhook-receiver) thanks to the webhook receiver. It also takes care of silencing and inhibition of alerts. * [Documentation](http://prometheus.io/docs/alerting/alertmanager/) ## Install There are various ways of installing Alertmanager. ### Precompiled binaries Precompiled binaries for released versions are available in the [*download* section](https://prometheus.io/download/) on [prometheus.io](https://prometheus.io). Using the latest production release binary is the recommended way of installing Alertmanager. ### Docker images Docker images are available on [Quay.io](https://quay.io/repository/prometheus/alertmanager) or [Docker Hub](https://hub.docker.com/r/prom/alertmanager/). You can launch an Alertmanager container for trying it out with $ docker run --name alertmanager -d -p 127.0.0.1:9093:9093 quay.io/prometheus/alertmanager Alertmanager will now be reachable at http://localhost:9093/. ### Compiling the binary You can either `go get` it: ``` $ GO15VENDOREXPERIMENT=1 go get github.com/prometheus/alertmanager/cmd/... # cd $GOPATH/src/github.com/prometheus/alertmanager $ alertmanager --config.file= ``` Or clone the repository and build manually: ``` $ mkdir -p $GOPATH/src/github.com/prometheus $ cd $GOPATH/src/github.com/prometheus $ git clone https://github.com/prometheus/alertmanager.git $ cd alertmanager $ make build $ ./alertmanager --config.file= ``` You can also build just one of the binaries in this repo by passing a name to the build function: ``` $ make build BINARIES=amtool ``` ## Example This is an example configuration that should cover most relevant aspects of the new YAML configuration format. The full documentation of the configuration can be found [here](https://prometheus.io/docs/alerting/configuration/). ```yaml global: # The smarthost and SMTP sender used for mail notifications. smtp_smarthost: 'localhost:25' smtp_from: 'alertmanager@example.org' # The root route on which each incoming alert enters. route: # The root route must not have any matchers as it is the entry point for # all alerts. It needs to have a receiver configured so alerts that do not # match any of the sub-routes are sent to someone. receiver: 'team-X-mails' # The labels by which incoming alerts are grouped together. For example, # multiple alerts coming in for cluster=A and alertname=LatencyHigh would # be batched into a single group. # # To aggregate by all possible labels use '...' as the sole label name. # This effectively disables aggregation entirely, passing through all # alerts as-is. This is unlikely to be what you want, unless you have # a very low alert volume or your upstream notification system performs # its own grouping. Example: group_by: [...] group_by: ['alertname', 'cluster'] # When a new group of alerts is created by an incoming alert, wait at # least 'group_wait' to send the initial notification. # This way ensures that you get multiple alerts for the same group that start # firing shortly after another are batched together on the first # notification. group_wait: 30s # When the first notification was sent, wait 'group_interval' to send a batch # of new alerts that started firing for that group. group_interval: 5m # If an alert has successfully been sent, wait 'repeat_interval' to # resend them. repeat_interval: 3h # All the above attributes are inherited by all child routes and can # overwritten on each. # The child route trees. routes: # This route performs a regular expression match on alert labels to # catch alerts that are related to a list of services. - matchers: - service=~"^(foo1|foo2|baz)$" receiver: team-X-mails # The service has a sub-route for critical alerts, any alerts # that do not match, i.e. severity != critical, fall-back to the # parent node and are sent to 'team-X-mails' routes: - matchers: - severity="critical" receiver: team-X-pager - matchers: - service="files" receiver: team-Y-mails routes: - matchers: - severity="critical" receiver: team-Y-pager # This route handles all alerts coming from a database service. If there's # no team to handle it, it defaults to the DB team. - matchers: - service="database" receiver: team-DB-pager # Also group alerts by affected database. group_by: [alertname, cluster, database] routes: - matchers: - owner="team-X" receiver: team-X-pager - matchers: - owner="team-Y" receiver: team-Y-pager # Inhibition rules allow to mute a set of alerts given that another alert is # firing. # We use this to mute any warning-level notifications if the same alert is # already critical. inhibit_rules: - source_matchers: - severity="critical" target_matchers: - severity="warning" # Apply inhibition if the alertname is the same. # CAUTION: # If all label names listed in `equal` are missing # from both the source and target alerts, # the inhibition rule will apply! equal: ['alertname'] receivers: - name: 'team-X-mails' email_configs: - to: 'team-X+alerts@example.org, team-Y+alerts@example.org' - name: 'team-X-pager' email_configs: - to: 'team-X+alerts-critical@example.org' pagerduty_configs: - routing_key: - name: 'team-Y-mails' email_configs: - to: 'team-Y+alerts@example.org' - name: 'team-Y-pager' pagerduty_configs: - routing_key: - name: 'team-DB-pager' pagerduty_configs: - routing_key: ``` ## API The current Alertmanager API is version 2. This API is fully generated via the [OpenAPI project](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md) and [Go Swagger](https://github.com/go-swagger/go-swagger/) with the exception of the HTTP handlers themselves. The API specification can be found in [api/v2/openapi.yaml](api/v2/openapi.yaml). A HTML rendered version can be accessed [here](http://petstore.swagger.io/?url=https://raw.githubusercontent.com/prometheus/alertmanager/main/api/v2/openapi.yaml). Clients can be easily generated via any OpenAPI generator for all major languages. With the default config, endpoints are accessed under a `/api/v1` or `/api/v2` prefix. The v2 `/status` endpoint would be `/api/v2/status`. If `--web.route-prefix` is set then API routes are prefixed with that as well, so `--web.route-prefix=/alertmanager/` would relate to `/alertmanager/api/v2/status`. _API v2 is still under heavy development and thereby subject to change._ ## amtool `amtool` is a cli tool for interacting with the Alertmanager API. It is bundled with all releases of Alertmanager. ### Install Alternatively you can install with: ``` $ go install github.com/prometheus/alertmanager/cmd/amtool@latest ``` ### Examples View all currently firing alerts: ``` $ amtool alert Alertname Starts At Summary Test_Alert 2017-08-02 18:30:18 UTC This is a testing alert! Test_Alert 2017-08-02 18:30:18 UTC This is a testing alert! Check_Foo_Fails 2017-08-02 18:30:18 UTC This is a testing alert! Check_Foo_Fails 2017-08-02 18:30:18 UTC This is a testing alert! ``` View all currently firing alerts with extended output: ``` $ amtool -o extended alert Labels Annotations Starts At Ends At Generator URL alertname="Test_Alert" instance="node0" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local alertname="Test_Alert" instance="node1" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local alertname="Check_Foo_Fails" instance="node0" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local alertname="Check_Foo_Fails" instance="node1" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local ``` In addition to viewing alerts, you can use the rich query syntax provided by Alertmanager: ``` $ amtool -o extended alert query alertname="Test_Alert" Labels Annotations Starts At Ends At Generator URL alertname="Test_Alert" instance="node0" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local alertname="Test_Alert" instance="node1" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local $ amtool -o extended alert query instance=~".+1" Labels Annotations Starts At Ends At Generator URL alertname="Test_Alert" instance="node1" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local alertname="Check_Foo_Fails" instance="node1" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local $ amtool -o extended alert query alertname=~"Test.*" instance=~".+1" Labels Annotations Starts At Ends At Generator URL alertname="Test_Alert" instance="node1" link="https://example.com" summary="This is a testing alert!" 2017-08-02 18:31:24 UTC 0001-01-01 00:00:00 UTC http://my.testing.script.local ``` Silence an alert: ``` $ amtool silence add alertname=Test_Alert b3ede22e-ca14-4aa0-932c-ca2f3445f926 $ amtool silence add alertname="Test_Alert" instance=~".+0" e48cb58a-0b17-49ba-b734-3585139b1d25 ``` View silences: ``` $ amtool silence query ID Matchers Ends At Created By Comment b3ede22e-ca14-4aa0-932c-ca2f3445f926 alertname=Test_Alert 2017-08-02 19:54:50 UTC kellel $ amtool silence query instance=~".+0" ID Matchers Ends At Created By Comment e48cb58a-0b17-49ba-b734-3585139b1d25 alertname=Test_Alert instance=~.+0 2017-08-02 22:41:39 UTC kellel ``` Expire a silence: ``` $ amtool silence expire b3ede22e-ca14-4aa0-932c-ca2f3445f926 ``` Expire all silences matching a query: ``` $ amtool silence query instance=~".+0" ID Matchers Ends At Created By Comment e48cb58a-0b17-49ba-b734-3585139b1d25 alertname=Test_Alert instance=~.+0 2017-08-02 22:41:39 UTC kellel $ amtool silence expire $(amtool silence query -q instance=~".+0") $ amtool silence query instance=~".+0" ``` Expire all silences: ``` $ amtool silence expire $(amtool silence query -q) ``` Try out how a template works. Let's say you have this in your configuration file: ``` templates: - '/foo/bar/*.tmpl' ``` Then you can test out how a template would look like with example by using this command: ``` amtool template render --template.glob='/foo/bar/*.tmpl' --template.text='{{ template "slack.default.markdown.v1" . }}' ``` ### Configuration `amtool` allows a configuration file to specify some options for convenience. The default configuration file paths are `$HOME/.config/amtool/config.yml` or `/etc/amtool/config.yml` An example configuration file might look like the following: ``` # Define the path that `amtool` can find your `alertmanager` instance alertmanager.url: "http://localhost:9093" # Override the default author. (unset defaults to your username) author: me@example.com # Force amtool to give you an error if you don't include a comment on a silence comment_required: true # Set a default output format. (unset defaults to simple) output: extended # Set a default receiver receiver: team-X-pager ``` ### Routes `amtool` allows you to visualize the routes of your configuration in form of text tree view. Also you can use it to test the routing by passing it label set of an alert and it prints out all receivers the alert would match ordered and separated by `,`. (If you use `--verify.receivers` amtool returns error code 1 on mismatch) Example of usage: ``` # View routing tree of remote Alertmanager $ amtool config routes --alertmanager.url=http://localhost:9090 # Test if alert matches expected receiver $ amtool config routes test --config.file=doc/examples/simple.yml --tree --verify.receivers=team-X-pager service=database owner=team-X ``` ## High Availability Alertmanager's high availability is in production use at many companies and is enabled by default. > Important: Both UDP and TCP are needed in alertmanager 0.15 and higher for the cluster to work. > - If you are using a firewall, make sure to whitelist the clustering port for both protocols. > - If you are running in a container, make sure to expose the clustering port for both protocols. To create a highly available cluster of the Alertmanager the instances need to be configured to communicate with each other. This is configured using the `--cluster.*` flags. - `--cluster.listen-address` string: cluster listen address (default "0.0.0.0:9094"; empty string disables HA mode) - `--cluster.advertise-address` string: cluster advertise address - `--cluster.peer` value: initial peers (repeat flag for each additional peer) - `--cluster.peer-timeout` value: peer timeout period (default "15s") - `--cluster.gossip-interval` value: cluster message propagation speed (default "200ms") - `--cluster.pushpull-interval` value: lower values will increase convergence speeds at expense of bandwidth (default "1m0s") - `--cluster.settle-timeout` value: maximum time to wait for cluster connections to settle before evaluating notifications. - `--cluster.tcp-timeout` value: timeout value for tcp connections, reads and writes (default "10s") - `--cluster.probe-timeout` value: time to wait for ack before marking node unhealthy (default "500ms") - `--cluster.probe-interval` value: interval between random node probes (default "1s") - `--cluster.reconnect-interval` value: interval between attempting to reconnect to lost peers (default "10s") - `--cluster.reconnect-timeout` value: length of time to attempt to reconnect to a lost peer (default: "6h0m0s") - `--cluster.label` value: the label is an optional string to include on each packet and stream. It uniquely identifies the cluster and prevents cross-communication issues when sending gossip messages (default:"") The chosen port in the `cluster.listen-address` flag is the port that needs to be specified in the `cluster.peer` flag of the other peers. The `cluster.advertise-address` flag is required if the instance doesn't have an IP address that is part of [RFC 6890](https://tools.ietf.org/html/rfc6890) with a default route. To start a cluster of three peers on your local machine use [`goreman`](https://github.com/mattn/goreman) and the Procfile within this repository. goreman start To point your Prometheus 1.4, or later, instance to multiple Alertmanagers, configure them in your `prometheus.yml` configuration file, for example: ```yaml alerting: alertmanagers: - static_configs: - targets: - alertmanager1:9093 - alertmanager2:9093 - alertmanager3:9093 ``` > Important: Do not load balance traffic between Prometheus and its Alertmanagers, but instead point Prometheus to a list of all Alertmanagers. The Alertmanager implementation expects all alerts to be sent to all Alertmanagers to ensure high availability. ### Turn off high availability If running Alertmanager in high availability mode is not desired, setting `--cluster.listen-address=` prevents Alertmanager from listening to incoming peer requests. ## Contributing Check the [Prometheus contributing page](https://github.com/prometheus/prometheus/blob/main/CONTRIBUTING.md). To contribute to the user interface, refer to [ui/app/CONTRIBUTING.md](ui/app/CONTRIBUTING.md). ## Architecture ![](doc/arch.svg) ## License Apache License 2.0, see [LICENSE](https://github.com/prometheus/alertmanager/blob/main/LICENSE). [hub]: https://hub.docker.com/r/prom/alertmanager/ [circleci]: https://circleci.com/gh/prometheus/alertmanager [quay]: https://quay.io/repository/prometheus/alertmanager prometheus-alertmanager-0.28.1+ds/RELEASE.md000066400000000000000000000021601476331240200204420ustar00rootroot00000000000000# Releases This page describes the release process and the currently planned schedule for upcoming releases as well as the respective release shepherd. Release shepherds are chosen on a voluntary basis. ## Release Schedule Release cadence of first pre-releases being cut is 12 weeks. | release series | date (year-month-day) | release shepherd | |----------------|-----------------------|-------------------------------| | v0.26 | 2023-08-23 | Josh Abreu (Github: @gotjosh) | | v0.27 | 2024-02-28 | Josh Abreu (Github: @gotjosh) | | v0.28 | 2024-05-28 | Josh Abreu (Github: @gotjosh) | If you are interested in volunteering please create a pull request against the [prometheus/alertmanager](https://github.com/prometheus/alertmanager) repository and propose yourself for the release of your choice. If you'd like to know more about the shepherd responsibilities or the release instructions please [refer to the `RELEASE.MD`](https://github.com/prometheus/prometheus/blob/main/RELEASE.md) in [prometheus/prometheus](https://github.com/prometheus/prometheus). prometheus-alertmanager-0.28.1+ds/SECURITY.md000066400000000000000000000002541476331240200206330ustar00rootroot00000000000000# Reporting a security issue The Prometheus security policy, including how to report vulnerabilities, can be found here: prometheus-alertmanager-0.28.1+ds/VERSION000066400000000000000000000000071476331240200201060ustar00rootroot000000000000000.28.1 prometheus-alertmanager-0.28.1+ds/api/000077500000000000000000000000001476331240200176125ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/api.go000066400000000000000000000173251476331240200207220ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package api import ( "errors" "fmt" "log/slog" "net/http" "runtime" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/prometheus/common/route" apiv2 "github.com/prometheus/alertmanager/api/v2" "github.com/prometheus/alertmanager/cluster" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/dispatch" "github.com/prometheus/alertmanager/provider" "github.com/prometheus/alertmanager/silence" "github.com/prometheus/alertmanager/types" ) // API represents all APIs of Alertmanager. type API struct { v2 *apiv2.API deprecationRouter *V1DeprecationRouter requestsInFlight prometheus.Gauge concurrencyLimitExceeded prometheus.Counter timeout time.Duration inFlightSem chan struct{} } // Options for the creation of an API object. Alerts, Silences, AlertStatusFunc // and GroupMutedFunc are mandatory. The zero value for everything else is a safe // default. type Options struct { // Alerts to be used by the API. Mandatory. Alerts provider.Alerts // Silences to be used by the API. Mandatory. Silences *silence.Silences // AlertStatusFunc is used be the API to retrieve the AlertStatus of an // alert. Mandatory. AlertStatusFunc func(model.Fingerprint) types.AlertStatus // GroupMutedFunc is used be the API to know if an alert is muted. // Mandatory. GroupMutedFunc func(routeID, groupKey string) ([]string, bool) // Peer from the gossip cluster. If nil, no clustering will be used. Peer cluster.ClusterPeer // Timeout for all HTTP connections. The zero value (and negative // values) result in no timeout. Timeout time.Duration // Concurrency limit for GET requests. The zero value (and negative // values) result in a limit of GOMAXPROCS or 8, whichever is // larger. Status code 503 is served for GET requests that would exceed // the concurrency limit. Concurrency int // Logger is used for logging, if nil, no logging will happen. Logger *slog.Logger // Registry is used to register Prometheus metrics. If nil, no metrics // registration will happen. Registry prometheus.Registerer // GroupFunc returns a list of alert groups. The alerts are grouped // according to the current active configuration. Alerts returned are // filtered by the arguments provided to the function. GroupFunc func(func(*dispatch.Route) bool, func(*types.Alert, time.Time) bool) (dispatch.AlertGroups, map[model.Fingerprint][]string) } func (o Options) validate() error { if o.Alerts == nil { return errors.New("mandatory field Alerts not set") } if o.Silences == nil { return errors.New("mandatory field Silences not set") } if o.AlertStatusFunc == nil { return errors.New("mandatory field AlertStatusFunc not set") } if o.GroupMutedFunc == nil { return errors.New("mandatory field GroupMutedFunc not set") } if o.GroupFunc == nil { return errors.New("mandatory field GroupFunc not set") } return nil } // New creates a new API object combining all API versions. Note that an Update // call is also needed to get the APIs into an operational state. func New(opts Options) (*API, error) { if err := opts.validate(); err != nil { return nil, fmt.Errorf("invalid API options: %w", err) } l := opts.Logger if l == nil { l = promslog.NewNopLogger() } concurrency := opts.Concurrency if concurrency < 1 { concurrency = runtime.GOMAXPROCS(0) if concurrency < 8 { concurrency = 8 } } v2, err := apiv2.NewAPI( opts.Alerts, opts.GroupFunc, opts.AlertStatusFunc, opts.GroupMutedFunc, opts.Silences, opts.Peer, l.With("version", "v2"), opts.Registry, ) if err != nil { return nil, err } // TODO(beorn7): For now, this hardcodes the method="get" label. Other // methods should get the same instrumentation. requestsInFlight := prometheus.NewGauge(prometheus.GaugeOpts{ Name: "alertmanager_http_requests_in_flight", Help: "Current number of HTTP requests being processed.", ConstLabels: prometheus.Labels{"method": "get"}, }) concurrencyLimitExceeded := prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_http_concurrency_limit_exceeded_total", Help: "Total number of times an HTTP request failed because the concurrency limit was reached.", ConstLabels: prometheus.Labels{"method": "get"}, }) if opts.Registry != nil { if err := opts.Registry.Register(requestsInFlight); err != nil { return nil, err } if err := opts.Registry.Register(concurrencyLimitExceeded); err != nil { return nil, err } } return &API{ deprecationRouter: NewV1DeprecationRouter(l.With("version", "v1")), v2: v2, requestsInFlight: requestsInFlight, concurrencyLimitExceeded: concurrencyLimitExceeded, timeout: opts.Timeout, inFlightSem: make(chan struct{}, concurrency), }, nil } // Register API. As APIv2 works on the http.Handler level, this method also creates a new // http.ServeMux and then uses it to register both the provided router (to // handle "/") and APIv2 (to handle "/api/v2"). The method returns // the newly created http.ServeMux. If a timeout has been set on construction of // API, it is enforced for all HTTP request going through this mux. The same is // true for the concurrency limit, with the exception that it is only applied to // GET requests. func (api *API) Register(r *route.Router, routePrefix string) *http.ServeMux { // TODO(gotjosh) API V1 was removed as of version 0.27, when we reach 1.0.0 we should removed these deprecation warnings. api.deprecationRouter.Register(r.WithPrefix("/api/v1")) mux := http.NewServeMux() mux.Handle("/", api.limitHandler(r)) apiPrefix := "" if routePrefix != "/" { apiPrefix = routePrefix } // TODO(beorn7): HTTP instrumentation is only in place for Router. Since // /api/v2 works on the Handler level, it is currently not instrumented // at all (with the exception of requestsInFlight, which is handled in // limitHandler below). mux.Handle( apiPrefix+"/api/v2/", api.limitHandler(http.StripPrefix(apiPrefix, api.v2.Handler)), ) return mux } // Update config and resolve timeout of each API. APIv2 also needs // setAlertStatus to be updated. func (api *API) Update(cfg *config.Config, setAlertStatus func(model.LabelSet)) { api.v2.Update(cfg, setAlertStatus) } func (api *API) limitHandler(h http.Handler) http.Handler { concLimiter := http.HandlerFunc(func(rsp http.ResponseWriter, req *http.Request) { if req.Method == http.MethodGet { // Only limit concurrency of GETs. select { case api.inFlightSem <- struct{}{}: // All good, carry on. api.requestsInFlight.Inc() defer func() { <-api.inFlightSem api.requestsInFlight.Dec() }() default: api.concurrencyLimitExceeded.Inc() http.Error(rsp, fmt.Sprintf( "Limit of concurrent GET requests reached (%d), try again later.\n", cap(api.inFlightSem), ), http.StatusServiceUnavailable) return } } h.ServeHTTP(rsp, req) }) if api.timeout <= 0 { return concLimiter } return http.TimeoutHandler(concLimiter, api.timeout, fmt.Sprintf( "Exceeded configured timeout of %v.\n", api.timeout, )) } prometheus-alertmanager-0.28.1+ds/api/metrics/000077500000000000000000000000001476331240200212605ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/metrics/metrics.go000066400000000000000000000040261476331240200232570ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package metrics import "github.com/prometheus/client_golang/prometheus" // Alerts stores metrics for alerts. type Alerts struct { firing prometheus.Counter resolved prometheus.Counter invalid prometheus.Counter } // NewAlerts returns an *Alerts struct for the given API version. // Since v1 was deprecated in 0.27, v2 is now hardcoded. func NewAlerts(r prometheus.Registerer) *Alerts { numReceivedAlerts := prometheus.NewCounterVec(prometheus.CounterOpts{ Name: "alertmanager_alerts_received_total", Help: "The total number of received alerts.", ConstLabels: prometheus.Labels{"version": "v2"}, }, []string{"status"}) numInvalidAlerts := prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_alerts_invalid_total", Help: "The total number of received alerts that were invalid.", ConstLabels: prometheus.Labels{"version": "v2"}, }) if r != nil { r.MustRegister(numReceivedAlerts, numInvalidAlerts) } return &Alerts{ firing: numReceivedAlerts.WithLabelValues("firing"), resolved: numReceivedAlerts.WithLabelValues("resolved"), invalid: numInvalidAlerts, } } // Firing returns a counter of firing alerts. func (a *Alerts) Firing() prometheus.Counter { return a.firing } // Resolved returns a counter of resolved alerts. func (a *Alerts) Resolved() prometheus.Counter { return a.resolved } // Invalid returns a counter of invalid alerts. func (a *Alerts) Invalid() prometheus.Counter { return a.invalid } prometheus-alertmanager-0.28.1+ds/api/v1_deprecation_router.go000066400000000000000000000040561476331240200244510ustar00rootroot00000000000000// Copyright 2023 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. package api import ( "encoding/json" "log/slog" "net/http" "github.com/prometheus/common/route" ) // V1DeprecationRouter is the router to signal v1 users that the API v1 is now removed. type V1DeprecationRouter struct { logger *slog.Logger } // NewV1DeprecationRouter returns a new V1DeprecationRouter. func NewV1DeprecationRouter(l *slog.Logger) *V1DeprecationRouter { return &V1DeprecationRouter{ logger: l, } } // Register registers all the API v1 routes with an endpoint that returns a JSON deprecation notice and a logs a warning. func (dr *V1DeprecationRouter) Register(r *route.Router) { r.Get("/status", dr.deprecationHandler) r.Get("/receivers", dr.deprecationHandler) r.Get("/alerts", dr.deprecationHandler) r.Post("/alerts", dr.deprecationHandler) r.Get("/silences", dr.deprecationHandler) r.Post("/silences", dr.deprecationHandler) r.Get("/silence/:sid", dr.deprecationHandler) r.Del("/silence/:sid", dr.deprecationHandler) } func (dr *V1DeprecationRouter) deprecationHandler(w http.ResponseWriter, req *http.Request) { dr.logger.Warn("v1 API received a request on a removed endpoint", "path", req.URL.Path, "method", req.Method) resp := struct { Status string `json:"status"` Error string `json:"error"` }{ "deprecated", "The Alertmanager v1 API was deprecated in version 0.16.0 and is removed as of version 0.27.0 - please use the equivalent route in the v2 API", } w.Header().Set("Content-Type", "application/json") w.WriteHeader(410) if err := json.NewEncoder(w).Encode(resp); err != nil { dr.logger.Error("failed to write response", "err", err) } } prometheus-alertmanager-0.28.1+ds/api/v2/000077500000000000000000000000001476331240200201415ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/api.go000066400000000000000000000542771476331240200212600ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package v2 import ( "errors" "fmt" "log/slog" "net/http" "regexp" "sort" "sync" "time" "github.com/go-openapi/analysis" "github.com/go-openapi/loads" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/strfmt" "github.com/prometheus/client_golang/prometheus" prometheus_model "github.com/prometheus/common/model" "github.com/prometheus/common/version" "github.com/rs/cors" "github.com/prometheus/alertmanager/api/metrics" open_api_models "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/api/v2/restapi" "github.com/prometheus/alertmanager/api/v2/restapi/operations" alert_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/alert" alertgroup_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/alertgroup" general_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/general" receiver_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/receiver" silence_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/silence" "github.com/prometheus/alertmanager/cluster" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/dispatch" "github.com/prometheus/alertmanager/matcher/compat" "github.com/prometheus/alertmanager/pkg/labels" "github.com/prometheus/alertmanager/provider" "github.com/prometheus/alertmanager/silence" "github.com/prometheus/alertmanager/silence/silencepb" "github.com/prometheus/alertmanager/types" ) // API represents an Alertmanager API v2. type API struct { peer cluster.ClusterPeer silences *silence.Silences alerts provider.Alerts alertGroups groupsFn getAlertStatus getAlertStatusFn groupMutedFunc groupMutedFunc uptime time.Time // mtx protects alertmanagerConfig, setAlertStatus and route. mtx sync.RWMutex // resolveTimeout represents the default resolve timeout that an alert is // assigned if no end time is specified. alertmanagerConfig *config.Config route *dispatch.Route setAlertStatus setAlertStatusFn logger *slog.Logger m *metrics.Alerts Handler http.Handler } type ( groupsFn func(func(*dispatch.Route) bool, func(*types.Alert, time.Time) bool) (dispatch.AlertGroups, map[prometheus_model.Fingerprint][]string) groupMutedFunc func(routeID, groupKey string) ([]string, bool) getAlertStatusFn func(prometheus_model.Fingerprint) types.AlertStatus setAlertStatusFn func(prometheus_model.LabelSet) ) // NewAPI returns a new Alertmanager API v2. func NewAPI( alerts provider.Alerts, gf groupsFn, asf getAlertStatusFn, gmf groupMutedFunc, silences *silence.Silences, peer cluster.ClusterPeer, l *slog.Logger, r prometheus.Registerer, ) (*API, error) { api := API{ alerts: alerts, getAlertStatus: asf, alertGroups: gf, groupMutedFunc: gmf, peer: peer, silences: silences, logger: l, m: metrics.NewAlerts(r), uptime: time.Now(), } // Load embedded swagger file. swaggerSpec, swaggerSpecAnalysis, err := getSwaggerSpec() if err != nil { return nil, err } // Create new service API. openAPI := operations.NewAlertmanagerAPI(swaggerSpec) // Skip the redoc middleware, only serving the OpenAPI specification and // the API itself via RoutesHandler. See: // https://github.com/go-swagger/go-swagger/issues/1779 openAPI.Middleware = func(b middleware.Builder) http.Handler { // Manually create the context so that we can use the singleton swaggerSpecAnalysis. swaggerContext := middleware.NewRoutableContextWithAnalyzedSpec(swaggerSpec, swaggerSpecAnalysis, openAPI, nil) return middleware.Spec("", swaggerSpec.Raw(), swaggerContext.RoutesHandler(b)) } openAPI.AlertGetAlertsHandler = alert_ops.GetAlertsHandlerFunc(api.getAlertsHandler) openAPI.AlertPostAlertsHandler = alert_ops.PostAlertsHandlerFunc(api.postAlertsHandler) openAPI.AlertgroupGetAlertGroupsHandler = alertgroup_ops.GetAlertGroupsHandlerFunc(api.getAlertGroupsHandler) openAPI.GeneralGetStatusHandler = general_ops.GetStatusHandlerFunc(api.getStatusHandler) openAPI.ReceiverGetReceiversHandler = receiver_ops.GetReceiversHandlerFunc(api.getReceiversHandler) openAPI.SilenceDeleteSilenceHandler = silence_ops.DeleteSilenceHandlerFunc(api.deleteSilenceHandler) openAPI.SilenceGetSilenceHandler = silence_ops.GetSilenceHandlerFunc(api.getSilenceHandler) openAPI.SilenceGetSilencesHandler = silence_ops.GetSilencesHandlerFunc(api.getSilencesHandler) openAPI.SilencePostSilencesHandler = silence_ops.PostSilencesHandlerFunc(api.postSilencesHandler) handleCORS := cors.Default().Handler api.Handler = handleCORS(setResponseHeaders(openAPI.Serve(nil))) return &api, nil } var responseHeaders = map[string]string{ "Cache-Control": "no-store", } func setResponseHeaders(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { for h, v := range responseHeaders { w.Header().Set(h, v) } h.ServeHTTP(w, r) }) } func (api *API) requestLogger(req *http.Request) *slog.Logger { return api.logger.With("path", req.URL.Path, "method", req.Method) } // Update sets the API struct members that may change between reloads of alertmanager. func (api *API) Update(cfg *config.Config, setAlertStatus setAlertStatusFn) { api.mtx.Lock() defer api.mtx.Unlock() api.alertmanagerConfig = cfg api.route = dispatch.NewRoute(cfg.Route, nil) api.setAlertStatus = setAlertStatus } func (api *API) getStatusHandler(params general_ops.GetStatusParams) middleware.Responder { api.mtx.RLock() defer api.mtx.RUnlock() original := api.alertmanagerConfig.String() uptime := strfmt.DateTime(api.uptime) status := open_api_models.ClusterStatusStatusDisabled resp := open_api_models.AlertmanagerStatus{ Uptime: &uptime, VersionInfo: &open_api_models.VersionInfo{ Version: &version.Version, Revision: &version.Revision, Branch: &version.Branch, BuildUser: &version.BuildUser, BuildDate: &version.BuildDate, GoVersion: &version.GoVersion, }, Config: &open_api_models.AlertmanagerConfig{ Original: &original, }, Cluster: &open_api_models.ClusterStatus{ Status: &status, Peers: []*open_api_models.PeerStatus{}, }, } // If alertmanager cluster feature is disabled, then api.peers == nil. if api.peer != nil { status := api.peer.Status() peers := []*open_api_models.PeerStatus{} for _, n := range api.peer.Peers() { address := n.Address() name := n.Name() peers = append(peers, &open_api_models.PeerStatus{ Name: &name, Address: &address, }) } sort.Slice(peers, func(i, j int) bool { return *peers[i].Name < *peers[j].Name }) resp.Cluster = &open_api_models.ClusterStatus{ Name: api.peer.Name(), Status: &status, Peers: peers, } } return general_ops.NewGetStatusOK().WithPayload(&resp) } func (api *API) getReceiversHandler(params receiver_ops.GetReceiversParams) middleware.Responder { api.mtx.RLock() defer api.mtx.RUnlock() receivers := make([]*open_api_models.Receiver, 0, len(api.alertmanagerConfig.Receivers)) for i := range api.alertmanagerConfig.Receivers { receivers = append(receivers, &open_api_models.Receiver{Name: &api.alertmanagerConfig.Receivers[i].Name}) } return receiver_ops.NewGetReceiversOK().WithPayload(receivers) } func (api *API) getAlertsHandler(params alert_ops.GetAlertsParams) middleware.Responder { var ( receiverFilter *regexp.Regexp // Initialize result slice to prevent api returning `null` when there // are no alerts present res = open_api_models.GettableAlerts{} ctx = params.HTTPRequest.Context() logger = api.requestLogger(params.HTTPRequest) ) matchers, err := parseFilter(params.Filter) if err != nil { logger.Debug("Failed to parse matchers", "err", err) return alertgroup_ops.NewGetAlertGroupsBadRequest().WithPayload(err.Error()) } if params.Receiver != nil { receiverFilter, err = regexp.Compile("^(?:" + *params.Receiver + ")$") if err != nil { logger.Debug("Failed to compile receiver regex", "err", err) return alert_ops. NewGetAlertsBadRequest(). WithPayload( fmt.Sprintf("failed to parse receiver param: %v", err.Error()), ) } } alerts := api.alerts.GetPending() defer alerts.Close() alertFilter := api.alertFilter(matchers, *params.Silenced, *params.Inhibited, *params.Active) now := time.Now() api.mtx.RLock() for a := range alerts.Next() { if err = alerts.Err(); err != nil { break } if err = ctx.Err(); err != nil { break } routes := api.route.Match(a.Labels) receivers := make([]string, 0, len(routes)) for _, r := range routes { receivers = append(receivers, r.RouteOpts.Receiver) } if receiverFilter != nil && !receiversMatchFilter(receivers, receiverFilter) { continue } if !alertFilter(a, now) { continue } alert := AlertToOpenAPIAlert(a, api.getAlertStatus(a.Fingerprint()), receivers, nil) res = append(res, alert) } api.mtx.RUnlock() if err != nil { logger.Error("Failed to get alerts", "err", err) return alert_ops.NewGetAlertsInternalServerError().WithPayload(err.Error()) } sort.Slice(res, func(i, j int) bool { return *res[i].Fingerprint < *res[j].Fingerprint }) return alert_ops.NewGetAlertsOK().WithPayload(res) } func (api *API) postAlertsHandler(params alert_ops.PostAlertsParams) middleware.Responder { logger := api.requestLogger(params.HTTPRequest) alerts := OpenAPIAlertsToAlerts(params.Alerts) now := time.Now() api.mtx.RLock() resolveTimeout := time.Duration(api.alertmanagerConfig.Global.ResolveTimeout) api.mtx.RUnlock() for _, alert := range alerts { alert.UpdatedAt = now // Ensure StartsAt is set. if alert.StartsAt.IsZero() { if alert.EndsAt.IsZero() { alert.StartsAt = now } else { alert.StartsAt = alert.EndsAt } } // If no end time is defined, set a timeout after which an alert // is marked resolved if it is not updated. if alert.EndsAt.IsZero() { alert.Timeout = true alert.EndsAt = now.Add(resolveTimeout) } if alert.EndsAt.After(time.Now()) { api.m.Firing().Inc() } else { api.m.Resolved().Inc() } } // Make a best effort to insert all alerts that are valid. var ( validAlerts = make([]*types.Alert, 0, len(alerts)) validationErrs = &types.MultiError{} ) for _, a := range alerts { removeEmptyLabels(a.Labels) if err := a.Validate(); err != nil { validationErrs.Add(err) api.m.Invalid().Inc() continue } validAlerts = append(validAlerts, a) } if err := api.alerts.Put(validAlerts...); err != nil { logger.Error("Failed to create alerts", "err", err) return alert_ops.NewPostAlertsInternalServerError().WithPayload(err.Error()) } if validationErrs.Len() > 0 { logger.Error("Failed to validate alerts", "err", validationErrs.Error()) return alert_ops.NewPostAlertsBadRequest().WithPayload(validationErrs.Error()) } return alert_ops.NewPostAlertsOK() } func (api *API) getAlertGroupsHandler(params alertgroup_ops.GetAlertGroupsParams) middleware.Responder { logger := api.requestLogger(params.HTTPRequest) matchers, err := parseFilter(params.Filter) if err != nil { logger.Debug("Failed to parse matchers", "err", err) return alertgroup_ops.NewGetAlertGroupsBadRequest().WithPayload(err.Error()) } var receiverFilter *regexp.Regexp if params.Receiver != nil { receiverFilter, err = regexp.Compile("^(?:" + *params.Receiver + ")$") if err != nil { logger.Error("Failed to compile receiver regex", "err", err) return alertgroup_ops. NewGetAlertGroupsBadRequest(). WithPayload( fmt.Sprintf("failed to parse receiver param: %v", err.Error()), ) } } rf := func(receiverFilter *regexp.Regexp) func(r *dispatch.Route) bool { return func(r *dispatch.Route) bool { receiver := r.RouteOpts.Receiver if receiverFilter != nil && !receiverFilter.MatchString(receiver) { return false } return true } }(receiverFilter) af := api.alertFilter(matchers, *params.Silenced, *params.Inhibited, *params.Active) alertGroups, allReceivers := api.alertGroups(rf, af) res := make(open_api_models.AlertGroups, 0, len(alertGroups)) for _, alertGroup := range alertGroups { mutedBy, isMuted := api.groupMutedFunc(alertGroup.RouteID, alertGroup.GroupKey) if !*params.Muted && isMuted { continue } ag := &open_api_models.AlertGroup{ Receiver: &open_api_models.Receiver{Name: &alertGroup.Receiver}, Labels: ModelLabelSetToAPILabelSet(alertGroup.Labels), Alerts: make([]*open_api_models.GettableAlert, 0, len(alertGroup.Alerts)), } for _, alert := range alertGroup.Alerts { fp := alert.Fingerprint() receivers := allReceivers[fp] status := api.getAlertStatus(fp) apiAlert := AlertToOpenAPIAlert(alert, status, receivers, mutedBy) ag.Alerts = append(ag.Alerts, apiAlert) } res = append(res, ag) } return alertgroup_ops.NewGetAlertGroupsOK().WithPayload(res) } func (api *API) alertFilter(matchers []*labels.Matcher, silenced, inhibited, active bool) func(a *types.Alert, now time.Time) bool { return func(a *types.Alert, now time.Time) bool { if !a.EndsAt.IsZero() && a.EndsAt.Before(now) { return false } // Set alert's current status based on its label set. api.setAlertStatus(a.Labels) // Get alert's current status after seeing if it is suppressed. status := api.getAlertStatus(a.Fingerprint()) if !active && status.State == types.AlertStateActive { return false } if !silenced && len(status.SilencedBy) != 0 { return false } if !inhibited && len(status.InhibitedBy) != 0 { return false } return alertMatchesFilterLabels(&a.Alert, matchers) } } func removeEmptyLabels(ls prometheus_model.LabelSet) { for k, v := range ls { if string(v) == "" { delete(ls, k) } } } func receiversMatchFilter(receivers []string, filter *regexp.Regexp) bool { for _, r := range receivers { if filter.MatchString(r) { return true } } return false } func alertMatchesFilterLabels(a *prometheus_model.Alert, matchers []*labels.Matcher) bool { sms := make(map[string]string) for name, value := range a.Labels { sms[string(name)] = string(value) } return matchFilterLabels(matchers, sms) } func matchFilterLabels(matchers []*labels.Matcher, sms map[string]string) bool { for _, m := range matchers { v, prs := sms[m.Name] switch m.Type { case labels.MatchNotRegexp, labels.MatchNotEqual: if m.Value == "" && prs { continue } if !m.Matches(v) { return false } default: if m.Value == "" && !prs { continue } if !m.Matches(v) { return false } } } return true } func (api *API) getSilencesHandler(params silence_ops.GetSilencesParams) middleware.Responder { logger := api.requestLogger(params.HTTPRequest) matchers, err := parseFilter(params.Filter) if err != nil { logger.Debug("Failed to parse matchers", "err", err) return silence_ops.NewGetSilencesBadRequest().WithPayload(err.Error()) } psils, _, err := api.silences.Query() if err != nil { logger.Error("Failed to get silences", "err", err) return silence_ops.NewGetSilencesInternalServerError().WithPayload(err.Error()) } sils := open_api_models.GettableSilences{} for _, ps := range psils { if !CheckSilenceMatchesFilterLabels(ps, matchers) { continue } silence, err := GettableSilenceFromProto(ps) if err != nil { logger.Error("Failed to unmarshal silence from proto", "err", err) return silence_ops.NewGetSilencesInternalServerError().WithPayload(err.Error()) } sils = append(sils, &silence) } SortSilences(sils) return silence_ops.NewGetSilencesOK().WithPayload(sils) } var silenceStateOrder = map[types.SilenceState]int{ types.SilenceStateActive: 1, types.SilenceStatePending: 2, types.SilenceStateExpired: 3, } // SortSilences sorts first according to the state "active, pending, expired" // then by end time or start time depending on the state. // Active silences should show the next to expire first // pending silences are ordered based on which one starts next // expired are ordered based on which one expired most recently. func SortSilences(sils open_api_models.GettableSilences) { sort.Slice(sils, func(i, j int) bool { state1 := types.SilenceState(*sils[i].Status.State) state2 := types.SilenceState(*sils[j].Status.State) if state1 != state2 { return silenceStateOrder[state1] < silenceStateOrder[state2] } switch state1 { case types.SilenceStateActive: endsAt1 := time.Time(*sils[i].Silence.EndsAt) endsAt2 := time.Time(*sils[j].Silence.EndsAt) return endsAt1.Before(endsAt2) case types.SilenceStatePending: startsAt1 := time.Time(*sils[i].Silence.StartsAt) startsAt2 := time.Time(*sils[j].Silence.StartsAt) return startsAt1.Before(startsAt2) case types.SilenceStateExpired: endsAt1 := time.Time(*sils[i].Silence.EndsAt) endsAt2 := time.Time(*sils[j].Silence.EndsAt) return endsAt1.After(endsAt2) } return false }) } // CheckSilenceMatchesFilterLabels returns true if // a given silence matches a list of matchers. // A silence matches a filter (list of matchers) if // for all matchers in the filter, there exists a matcher in the silence // such that their names, types, and values are equivalent. func CheckSilenceMatchesFilterLabels(s *silencepb.Silence, matchers []*labels.Matcher) bool { for _, matcher := range matchers { found := false for _, m := range s.Matchers { if matcher.Name == m.Name && (matcher.Type == labels.MatchEqual && m.Type == silencepb.Matcher_EQUAL || matcher.Type == labels.MatchRegexp && m.Type == silencepb.Matcher_REGEXP || matcher.Type == labels.MatchNotEqual && m.Type == silencepb.Matcher_NOT_EQUAL || matcher.Type == labels.MatchNotRegexp && m.Type == silencepb.Matcher_NOT_REGEXP) && matcher.Value == m.Pattern { found = true break } } if !found { return false } } return true } func (api *API) getSilenceHandler(params silence_ops.GetSilenceParams) middleware.Responder { logger := api.requestLogger(params.HTTPRequest) sils, _, err := api.silences.Query(silence.QIDs(params.SilenceID.String())) if err != nil { logger.Error("Failed to get silence by id", "err", err, "id", params.SilenceID.String()) return silence_ops.NewGetSilenceInternalServerError().WithPayload(err.Error()) } if len(sils) == 0 { logger.Error("Failed to find silence", "err", err, "id", params.SilenceID.String()) return silence_ops.NewGetSilenceNotFound() } sil, err := GettableSilenceFromProto(sils[0]) if err != nil { logger.Error("Failed to convert unmarshal from proto", "err", err) return silence_ops.NewGetSilenceInternalServerError().WithPayload(err.Error()) } return silence_ops.NewGetSilenceOK().WithPayload(&sil) } func (api *API) deleteSilenceHandler(params silence_ops.DeleteSilenceParams) middleware.Responder { logger := api.requestLogger(params.HTTPRequest) sid := params.SilenceID.String() if err := api.silences.Expire(sid); err != nil { logger.Error("Failed to expire silence", "err", err) if errors.Is(err, silence.ErrNotFound) { return silence_ops.NewDeleteSilenceNotFound() } return silence_ops.NewDeleteSilenceInternalServerError().WithPayload(err.Error()) } return silence_ops.NewDeleteSilenceOK() } func (api *API) postSilencesHandler(params silence_ops.PostSilencesParams) middleware.Responder { logger := api.requestLogger(params.HTTPRequest) sil, err := PostableSilenceToProto(params.Silence) if err != nil { logger.Error("Failed to marshal silence to proto", "err", err) return silence_ops.NewPostSilencesBadRequest().WithPayload( fmt.Sprintf("failed to convert API silence to internal silence: %v", err.Error()), ) } if sil.StartsAt.After(sil.EndsAt) || sil.StartsAt.Equal(sil.EndsAt) { msg := "Failed to create silence: start time must be before end time" logger.Error(msg, "starts_at", sil.StartsAt, "ends_at", sil.EndsAt) return silence_ops.NewPostSilencesBadRequest().WithPayload(msg) } if sil.EndsAt.Before(time.Now()) { msg := "Failed to create silence: end time can't be in the past" logger.Error(msg, "ends_at", sil.EndsAt) return silence_ops.NewPostSilencesBadRequest().WithPayload(msg) } if err = api.silences.Set(sil); err != nil { logger.Error("Failed to create silence", "err", err) if errors.Is(err, silence.ErrNotFound) { return silence_ops.NewPostSilencesNotFound().WithPayload(err.Error()) } return silence_ops.NewPostSilencesBadRequest().WithPayload(err.Error()) } return silence_ops.NewPostSilencesOK().WithPayload(&silence_ops.PostSilencesOKBody{ SilenceID: sil.Id, }) } func parseFilter(filter []string) ([]*labels.Matcher, error) { matchers := make([]*labels.Matcher, 0, len(filter)) for _, matcherString := range filter { matcher, err := compat.Matcher(matcherString, "api") if err != nil { return nil, err } matchers = append(matchers, matcher) } return matchers, nil } var ( swaggerSpecCacheMx sync.Mutex swaggerSpecCache *loads.Document swaggerSpecAnalysisCache *analysis.Spec ) // getSwaggerSpec loads and caches the swagger spec. If a cached version already exists, // it returns the cached one. The reason why we cache it is because some downstream projects // (e.g. Grafana Mimir) creates many Alertmanager instances in the same process, so they would // incur in a significant memory penalty if we would reload the swagger spec each time. func getSwaggerSpec() (*loads.Document, *analysis.Spec, error) { swaggerSpecCacheMx.Lock() defer swaggerSpecCacheMx.Unlock() // Check if a cached version exists. if swaggerSpecCache != nil { return swaggerSpecCache, swaggerSpecAnalysisCache, nil } // Load embedded swagger file. swaggerSpec, err := loads.Analyzed(restapi.SwaggerJSON, "") if err != nil { return nil, nil, fmt.Errorf("failed to load embedded swagger file: %w", err) } swaggerSpecCache = swaggerSpec swaggerSpecAnalysisCache = analysis.New(swaggerSpec.Spec()) return swaggerSpec, swaggerSpecAnalysisCache, nil } prometheus-alertmanager-0.28.1+ds/api/v2/api_test.go000066400000000000000000000411661476331240200223100ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package v2 import ( "bytes" "encoding/json" "fmt" "io" "net/http" "net/http/httptest" "strconv" "testing" "time" "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/strfmt" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" open_api_models "github.com/prometheus/alertmanager/api/v2/models" general_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/general" receiver_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/receiver" silence_ops "github.com/prometheus/alertmanager/api/v2/restapi/operations/silence" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/pkg/labels" "github.com/prometheus/alertmanager/silence" "github.com/prometheus/alertmanager/silence/silencepb" "github.com/prometheus/alertmanager/types" ) // If api.peers == nil, Alertmanager cluster feature is disabled. Make sure to // not try to access properties of peer, which would trigger a nil pointer // dereference. func TestGetStatusHandlerWithNilPeer(t *testing.T) { api := API{ uptime: time.Now(), peer: nil, alertmanagerConfig: &config.Config{}, } // Test ensures this method call does not panic. status := api.getStatusHandler(general_ops.GetStatusParams{}).(*general_ops.GetStatusOK) c := status.Payload.Cluster if c == nil || c.Status == nil { t.Fatal("expected cluster status not to be nil, violating the openapi specification") } if c.Peers == nil { t.Fatal("expected cluster peers to be not nil when api.peer is nil, violating the openapi specification") } if len(c.Peers) != 0 { t.Fatal("expected cluster peers to be empty when api.peer is nil, violating the openapi specification") } if c.Name != "" { t.Fatal("expected cluster name to be empty, violating the openapi specification") } } func assertEqualStrings(t *testing.T, expected, actual string) { if expected != actual { t.Fatal("expected: ", expected, ", actual: ", actual) } } var ( testComment = "comment" createdBy = "test" ) func newSilences(t *testing.T) *silence.Silences { silences, err := silence.New(silence.Options{}) require.NoError(t, err) return silences } func gettableSilence(id, state string, updatedAt, start, end string, ) *open_api_models.GettableSilence { updAt, err := strfmt.ParseDateTime(updatedAt) if err != nil { panic(err) } strAt, err := strfmt.ParseDateTime(start) if err != nil { panic(err) } endAt, err := strfmt.ParseDateTime(end) if err != nil { panic(err) } return &open_api_models.GettableSilence{ Silence: open_api_models.Silence{ StartsAt: &strAt, EndsAt: &endAt, Comment: &testComment, CreatedBy: &createdBy, }, ID: &id, UpdatedAt: &updAt, Status: &open_api_models.SilenceStatus{ State: &state, }, } } func TestGetSilencesHandler(t *testing.T) { updateTime := "2019-01-01T12:00:00+00:00" silences := []*open_api_models.GettableSilence{ gettableSilence("silence-6-expired", "expired", updateTime, "2019-01-01T12:00:00+00:00", "2019-01-01T11:00:00+00:00"), gettableSilence("silence-1-active", "active", updateTime, "2019-01-01T12:00:00+00:00", "2019-01-01T13:00:00+00:00"), gettableSilence("silence-7-expired", "expired", updateTime, "2019-01-01T12:00:00+00:00", "2019-01-01T10:00:00+00:00"), gettableSilence("silence-5-expired", "expired", updateTime, "2019-01-01T12:00:00+00:00", "2019-01-01T12:00:00+00:00"), gettableSilence("silence-0-active", "active", updateTime, "2019-01-01T12:00:00+00:00", "2019-01-01T12:00:00+00:00"), gettableSilence("silence-4-pending", "pending", updateTime, "2019-01-01T13:00:00+00:00", "2019-01-01T12:00:00+00:00"), gettableSilence("silence-3-pending", "pending", updateTime, "2019-01-01T12:00:00+00:00", "2019-01-01T12:00:00+00:00"), gettableSilence("silence-2-active", "active", updateTime, "2019-01-01T12:00:00+00:00", "2019-01-01T14:00:00+00:00"), } SortSilences(open_api_models.GettableSilences(silences)) for i, sil := range silences { assertEqualStrings(t, "silence-"+strconv.Itoa(i)+"-"+*sil.Status.State, *sil.ID) } } func TestDeleteSilenceHandler(t *testing.T) { now := time.Now() silences := newSilences(t) m := &silencepb.Matcher{Type: silencepb.Matcher_EQUAL, Name: "a", Pattern: "b"} unexpiredSil := &silencepb.Silence{ Matchers: []*silencepb.Matcher{m}, StartsAt: now, EndsAt: now.Add(time.Hour), UpdatedAt: now, } require.NoError(t, silences.Set(unexpiredSil)) expiredSil := &silencepb.Silence{ Matchers: []*silencepb.Matcher{m}, StartsAt: now.Add(-time.Hour), EndsAt: now.Add(time.Hour), UpdatedAt: now, } require.NoError(t, silences.Set(expiredSil)) require.NoError(t, silences.Expire(expiredSil.Id)) for i, tc := range []struct { sid string expectedCode int }{ { "unknownSid", 404, }, { unexpiredSil.Id, 200, }, { expiredSil.Id, 200, }, } { api := API{ uptime: time.Now(), silences: silences, logger: promslog.NewNopLogger(), } r, err := http.NewRequest("DELETE", "/api/v2/silence/${tc.sid}", nil) require.NoError(t, err) w := httptest.NewRecorder() p := runtime.TextProducer() responder := api.deleteSilenceHandler(silence_ops.DeleteSilenceParams{ SilenceID: strfmt.UUID(tc.sid), HTTPRequest: r, }) responder.WriteResponse(w, p) body, _ := io.ReadAll(w.Result().Body) require.Equal(t, tc.expectedCode, w.Code, fmt.Sprintf("test case: %d, response: %s", i, string(body))) } } func TestPostSilencesHandler(t *testing.T) { now := time.Now() silences := newSilences(t) m := &silencepb.Matcher{Type: silencepb.Matcher_EQUAL, Name: "a", Pattern: "b"} unexpiredSil := &silencepb.Silence{ Matchers: []*silencepb.Matcher{m}, StartsAt: now, EndsAt: now.Add(time.Hour), UpdatedAt: now, } require.NoError(t, silences.Set(unexpiredSil)) expiredSil := &silencepb.Silence{ Matchers: []*silencepb.Matcher{m}, StartsAt: now.Add(-time.Hour), EndsAt: now.Add(time.Hour), UpdatedAt: now, } require.NoError(t, silences.Set(expiredSil)) require.NoError(t, silences.Expire(expiredSil.Id)) t.Run("Silences CRUD", func(t *testing.T) { for i, tc := range []struct { name string sid string start, end time.Time expectedCode int }{ { "with an non-existent silence ID - it returns 404", "unknownSid", now.Add(time.Hour), now.Add(time.Hour * 2), 404, }, { "with no silence ID - it creates the silence", "", now.Add(time.Hour), now.Add(time.Hour * 2), 200, }, { "with an active silence ID - it extends the silence", unexpiredSil.Id, now.Add(time.Hour), now.Add(time.Hour * 2), 200, }, { "with an expired silence ID - it re-creates the silence", expiredSil.Id, now.Add(time.Hour), now.Add(time.Hour * 2), 200, }, } { t.Run(tc.name, func(t *testing.T) { api := API{ uptime: time.Now(), silences: silences, logger: promslog.NewNopLogger(), } sil := createSilence(t, tc.sid, "silenceCreator", tc.start, tc.end) w := httptest.NewRecorder() postSilences(t, w, api.postSilencesHandler, sil) body, _ := io.ReadAll(w.Result().Body) require.Equal(t, tc.expectedCode, w.Code, fmt.Sprintf("test case: %d, response: %s", i, string(body))) }) } }) } func TestPostSilencesHandlerMissingIdCreatesSilence(t *testing.T) { now := time.Now() silences := newSilences(t) api := API{ uptime: time.Now(), silences: silences, logger: promslog.NewNopLogger(), } // Create a new silence. It should be assigned a random UUID. sil := createSilence(t, "", "silenceCreator", now.Add(time.Hour), now.Add(time.Hour*2)) w := httptest.NewRecorder() postSilences(t, w, api.postSilencesHandler, sil) require.Equal(t, http.StatusOK, w.Code) // Get the silences from the API. w = httptest.NewRecorder() getSilences(t, w, api.getSilencesHandler) require.Equal(t, http.StatusOK, w.Code) var resp []open_api_models.GettableSilence require.NoError(t, json.NewDecoder(w.Body).Decode(&resp)) require.Len(t, resp, 1) // Change the ID. It should return 404 Not Found. sil = open_api_models.PostableSilence{ ID: "unknownID", Silence: resp[0].Silence, } w = httptest.NewRecorder() postSilences(t, w, api.postSilencesHandler, sil) require.Equal(t, http.StatusNotFound, w.Code) // Remove the ID. It should duplicate the silence with a different UUID. sil = open_api_models.PostableSilence{ ID: "", Silence: resp[0].Silence, } w = httptest.NewRecorder() postSilences(t, w, api.postSilencesHandler, sil) require.Equal(t, http.StatusOK, w.Code) // Get the silences from the API. There should now be 2 silences. w = httptest.NewRecorder() getSilences(t, w, api.getSilencesHandler) require.Equal(t, http.StatusOK, w.Code) require.NoError(t, json.NewDecoder(w.Body).Decode(&resp)) require.Len(t, resp, 2) require.NotEqual(t, resp[0].ID, resp[1].ID) } func getSilences( t *testing.T, w *httptest.ResponseRecorder, handlerFunc func(params silence_ops.GetSilencesParams) middleware.Responder, ) { r, err := http.NewRequest("GET", "/api/v2/silences", nil) require.NoError(t, err) p := runtime.TextProducer() responder := handlerFunc(silence_ops.GetSilencesParams{ HTTPRequest: r, Filter: nil, }) responder.WriteResponse(w, p) } func postSilences( t *testing.T, w *httptest.ResponseRecorder, handlerFunc func(params silence_ops.PostSilencesParams) middleware.Responder, sil open_api_models.PostableSilence, ) { b, err := json.Marshal(sil) require.NoError(t, err) r, err := http.NewRequest("POST", "/api/v2/silences", bytes.NewReader(b)) require.NoError(t, err) p := runtime.TextProducer() responder := handlerFunc(silence_ops.PostSilencesParams{ HTTPRequest: r, Silence: &sil, }) responder.WriteResponse(w, p) } func TestCheckSilenceMatchesFilterLabels(t *testing.T) { type test struct { silenceMatchers []*silencepb.Matcher filterMatchers []*labels.Matcher expected bool } tests := []test{ { []*silencepb.Matcher{createSilenceMatcher(t, "label", "value", silencepb.Matcher_EQUAL)}, []*labels.Matcher{createLabelMatcher(t, "label", "value", labels.MatchEqual)}, true, }, { []*silencepb.Matcher{createSilenceMatcher(t, "label", "value", silencepb.Matcher_EQUAL)}, []*labels.Matcher{createLabelMatcher(t, "label", "novalue", labels.MatchEqual)}, false, }, { []*silencepb.Matcher{createSilenceMatcher(t, "label", "(foo|bar)", silencepb.Matcher_REGEXP)}, []*labels.Matcher{createLabelMatcher(t, "label", "(foo|bar)", labels.MatchRegexp)}, true, }, { []*silencepb.Matcher{createSilenceMatcher(t, "label", "foo", silencepb.Matcher_REGEXP)}, []*labels.Matcher{createLabelMatcher(t, "label", "(foo|bar)", labels.MatchRegexp)}, false, }, { []*silencepb.Matcher{createSilenceMatcher(t, "label", "value", silencepb.Matcher_EQUAL)}, []*labels.Matcher{createLabelMatcher(t, "label", "value", labels.MatchRegexp)}, false, }, { []*silencepb.Matcher{createSilenceMatcher(t, "label", "value", silencepb.Matcher_REGEXP)}, []*labels.Matcher{createLabelMatcher(t, "label", "value", labels.MatchEqual)}, false, }, { []*silencepb.Matcher{createSilenceMatcher(t, "label", "value", silencepb.Matcher_NOT_EQUAL)}, []*labels.Matcher{createLabelMatcher(t, "label", "value", labels.MatchNotEqual)}, true, }, { []*silencepb.Matcher{createSilenceMatcher(t, "label", "value", silencepb.Matcher_NOT_REGEXP)}, []*labels.Matcher{createLabelMatcher(t, "label", "value", labels.MatchNotRegexp)}, true, }, { []*silencepb.Matcher{createSilenceMatcher(t, "label", "value", silencepb.Matcher_EQUAL)}, []*labels.Matcher{createLabelMatcher(t, "label", "value", labels.MatchNotEqual)}, false, }, { []*silencepb.Matcher{createSilenceMatcher(t, "label", "value", silencepb.Matcher_REGEXP)}, []*labels.Matcher{createLabelMatcher(t, "label", "value", labels.MatchNotRegexp)}, false, }, { []*silencepb.Matcher{createSilenceMatcher(t, "label", "value", silencepb.Matcher_NOT_EQUAL)}, []*labels.Matcher{createLabelMatcher(t, "label", "value", labels.MatchNotRegexp)}, false, }, { []*silencepb.Matcher{createSilenceMatcher(t, "label", "value", silencepb.Matcher_NOT_REGEXP)}, []*labels.Matcher{createLabelMatcher(t, "label", "value", labels.MatchNotEqual)}, false, }, { []*silencepb.Matcher{ createSilenceMatcher(t, "label", "(foo|bar)", silencepb.Matcher_REGEXP), createSilenceMatcher(t, "label", "value", silencepb.Matcher_EQUAL), }, []*labels.Matcher{createLabelMatcher(t, "label", "(foo|bar)", labels.MatchRegexp)}, true, }, } for _, test := range tests { silence := silencepb.Silence{ Matchers: test.silenceMatchers, } actual := CheckSilenceMatchesFilterLabels(&silence, test.filterMatchers) if test.expected != actual { t.Fatal("unexpected match result between silence and filter. expected:", test.expected, ", actual:", actual) } } } func convertDateTime(ts time.Time) *strfmt.DateTime { dt := strfmt.DateTime(ts) return &dt } func TestAlertToOpenAPIAlert(t *testing.T) { var ( start = time.Now().Add(-time.Minute) updated = time.Now() active = "active" fp = "0223b772b51c29e1" receivers = []string{"receiver1", "receiver2"} alert = &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"severity": "critical", "alertname": "alert1"}, StartsAt: start, }, UpdatedAt: updated, } ) openAPIAlert := AlertToOpenAPIAlert(alert, types.AlertStatus{State: types.AlertStateActive}, receivers, nil) require.Equal(t, &open_api_models.GettableAlert{ Annotations: open_api_models.LabelSet{}, Alert: open_api_models.Alert{ Labels: open_api_models.LabelSet{"severity": "critical", "alertname": "alert1"}, }, StartsAt: convertDateTime(start), EndsAt: convertDateTime(time.Time{}), UpdatedAt: convertDateTime(updated), Fingerprint: &fp, Receivers: []*open_api_models.Receiver{ {Name: &receivers[0]}, {Name: &receivers[1]}, }, Status: &open_api_models.AlertStatus{ State: &active, InhibitedBy: []string{}, SilencedBy: []string{}, MutedBy: []string{}, }, }, openAPIAlert) } func TestMatchFilterLabels(t *testing.T) { sms := map[string]string{ "foo": "bar", } testCases := []struct { matcher labels.MatchType name string val string expected bool }{ {labels.MatchEqual, "foo", "bar", true}, {labels.MatchEqual, "baz", "", true}, {labels.MatchEqual, "baz", "qux", false}, {labels.MatchEqual, "baz", "qux|", false}, {labels.MatchRegexp, "foo", "bar", true}, {labels.MatchRegexp, "baz", "", true}, {labels.MatchRegexp, "baz", "qux", false}, {labels.MatchRegexp, "baz", "qux|", true}, {labels.MatchNotEqual, "foo", "bar", false}, {labels.MatchNotEqual, "baz", "", false}, {labels.MatchNotEqual, "baz", "qux", true}, {labels.MatchNotEqual, "baz", "qux|", true}, {labels.MatchNotRegexp, "foo", "bar", false}, {labels.MatchNotRegexp, "baz", "", false}, {labels.MatchNotRegexp, "baz", "qux", true}, {labels.MatchNotRegexp, "baz", "qux|", false}, } for _, tc := range testCases { m, err := labels.NewMatcher(tc.matcher, tc.name, tc.val) require.NoError(t, err) ms := []*labels.Matcher{m} require.Equal(t, tc.expected, matchFilterLabels(ms, sms)) } } func TestGetReceiversHandler(t *testing.T) { in := ` route: receiver: team-X receivers: - name: 'team-X' - name: 'team-Y' ` cfg, _ := config.Load(in) api := API{ uptime: time.Now(), logger: promslog.NewNopLogger(), alertmanagerConfig: cfg, } for _, tc := range []struct { body string expectedCode int }{ { `[{"name":"team-X"},{"name":"team-Y"}]`, 200, }, } { r, err := http.NewRequest("GET", "/api/v2/receivers", nil) require.NoError(t, err) w := httptest.NewRecorder() p := runtime.TextProducer() responder := api.getReceiversHandler(receiver_ops.GetReceiversParams{ HTTPRequest: r, }) responder.WriteResponse(w, p) body, _ := io.ReadAll(w.Result().Body) require.Equal(t, tc.expectedCode, w.Code) require.Equal(t, tc.body, string(body)) } } prometheus-alertmanager-0.28.1+ds/api/v2/client/000077500000000000000000000000001476331240200214175ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/client/alert/000077500000000000000000000000001476331240200225265ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/client/alert/alert_client.go000066400000000000000000000100301476331240200255140ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" ) // New creates a new alert API client. func New(transport runtime.ClientTransport, formats strfmt.Registry) ClientService { return &Client{transport: transport, formats: formats} } /* Client for alert API */ type Client struct { transport runtime.ClientTransport formats strfmt.Registry } // ClientOption is the option for Client methods type ClientOption func(*runtime.ClientOperation) // ClientService is the interface for Client methods type ClientService interface { GetAlerts(params *GetAlertsParams, opts ...ClientOption) (*GetAlertsOK, error) PostAlerts(params *PostAlertsParams, opts ...ClientOption) (*PostAlertsOK, error) SetTransport(transport runtime.ClientTransport) } /* GetAlerts Get a list of alerts */ func (a *Client) GetAlerts(params *GetAlertsParams, opts ...ClientOption) (*GetAlertsOK, error) { // TODO: Validate the params before sending if params == nil { params = NewGetAlertsParams() } op := &runtime.ClientOperation{ ID: "getAlerts", Method: "GET", PathPattern: "/alerts", ProducesMediaTypes: []string{"application/json"}, ConsumesMediaTypes: []string{"application/json"}, Schemes: []string{"http"}, Params: params, Reader: &GetAlertsReader{formats: a.formats}, Context: params.Context, Client: params.HTTPClient, } for _, opt := range opts { opt(op) } result, err := a.transport.Submit(op) if err != nil { return nil, err } success, ok := result.(*GetAlertsOK) if ok { return success, nil } // unexpected success response // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue msg := fmt.Sprintf("unexpected success response for getAlerts: API contract not enforced by server. Client expected to get an error, but got: %T", result) panic(msg) } /* PostAlerts Create new Alerts */ func (a *Client) PostAlerts(params *PostAlertsParams, opts ...ClientOption) (*PostAlertsOK, error) { // TODO: Validate the params before sending if params == nil { params = NewPostAlertsParams() } op := &runtime.ClientOperation{ ID: "postAlerts", Method: "POST", PathPattern: "/alerts", ProducesMediaTypes: []string{"application/json"}, ConsumesMediaTypes: []string{"application/json"}, Schemes: []string{"http"}, Params: params, Reader: &PostAlertsReader{formats: a.formats}, Context: params.Context, Client: params.HTTPClient, } for _, opt := range opts { opt(op) } result, err := a.transport.Submit(op) if err != nil { return nil, err } success, ok := result.(*PostAlertsOK) if ok { return success, nil } // unexpected success response // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue msg := fmt.Sprintf("unexpected success response for postAlerts: API contract not enforced by server. Client expected to get an error, but got: %T", result) panic(msg) } // SetTransport changes the transport on the client func (a *Client) SetTransport(transport runtime.ClientTransport) { a.transport = transport } prometheus-alertmanager-0.28.1+ds/api/v2/client/alert/get_alerts_parameters.go000066400000000000000000000214531476331240200274360ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "net/http" "time" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) // NewGetAlertsParams creates a new GetAlertsParams object, // with the default timeout for this client. // // Default values are not hydrated, since defaults are normally applied by the API server side. // // To enforce default values in parameter, use SetDefaults or WithDefaults. func NewGetAlertsParams() *GetAlertsParams { return &GetAlertsParams{ timeout: cr.DefaultTimeout, } } // NewGetAlertsParamsWithTimeout creates a new GetAlertsParams object // with the ability to set a timeout on a request. func NewGetAlertsParamsWithTimeout(timeout time.Duration) *GetAlertsParams { return &GetAlertsParams{ timeout: timeout, } } // NewGetAlertsParamsWithContext creates a new GetAlertsParams object // with the ability to set a context for a request. func NewGetAlertsParamsWithContext(ctx context.Context) *GetAlertsParams { return &GetAlertsParams{ Context: ctx, } } // NewGetAlertsParamsWithHTTPClient creates a new GetAlertsParams object // with the ability to set a custom HTTPClient for a request. func NewGetAlertsParamsWithHTTPClient(client *http.Client) *GetAlertsParams { return &GetAlertsParams{ HTTPClient: client, } } /* GetAlertsParams contains all the parameters to send to the API endpoint for the get alerts operation. Typically these are written to a http.Request. */ type GetAlertsParams struct { /* Active. Show active alerts Default: true */ Active *bool /* Filter. A list of matchers to filter alerts by */ Filter []string /* Inhibited. Show inhibited alerts Default: true */ Inhibited *bool /* Receiver. A regex matching receivers to filter alerts by */ Receiver *string /* Silenced. Show silenced alerts Default: true */ Silenced *bool /* Unprocessed. Show unprocessed alerts Default: true */ Unprocessed *bool timeout time.Duration Context context.Context HTTPClient *http.Client } // WithDefaults hydrates default values in the get alerts params (not the query body). // // All values with no default are reset to their zero value. func (o *GetAlertsParams) WithDefaults() *GetAlertsParams { o.SetDefaults() return o } // SetDefaults hydrates default values in the get alerts params (not the query body). // // All values with no default are reset to their zero value. func (o *GetAlertsParams) SetDefaults() { var ( activeDefault = bool(true) inhibitedDefault = bool(true) silencedDefault = bool(true) unprocessedDefault = bool(true) ) val := GetAlertsParams{ Active: &activeDefault, Inhibited: &inhibitedDefault, Silenced: &silencedDefault, Unprocessed: &unprocessedDefault, } val.timeout = o.timeout val.Context = o.Context val.HTTPClient = o.HTTPClient *o = val } // WithTimeout adds the timeout to the get alerts params func (o *GetAlertsParams) WithTimeout(timeout time.Duration) *GetAlertsParams { o.SetTimeout(timeout) return o } // SetTimeout adds the timeout to the get alerts params func (o *GetAlertsParams) SetTimeout(timeout time.Duration) { o.timeout = timeout } // WithContext adds the context to the get alerts params func (o *GetAlertsParams) WithContext(ctx context.Context) *GetAlertsParams { o.SetContext(ctx) return o } // SetContext adds the context to the get alerts params func (o *GetAlertsParams) SetContext(ctx context.Context) { o.Context = ctx } // WithHTTPClient adds the HTTPClient to the get alerts params func (o *GetAlertsParams) WithHTTPClient(client *http.Client) *GetAlertsParams { o.SetHTTPClient(client) return o } // SetHTTPClient adds the HTTPClient to the get alerts params func (o *GetAlertsParams) SetHTTPClient(client *http.Client) { o.HTTPClient = client } // WithActive adds the active to the get alerts params func (o *GetAlertsParams) WithActive(active *bool) *GetAlertsParams { o.SetActive(active) return o } // SetActive adds the active to the get alerts params func (o *GetAlertsParams) SetActive(active *bool) { o.Active = active } // WithFilter adds the filter to the get alerts params func (o *GetAlertsParams) WithFilter(filter []string) *GetAlertsParams { o.SetFilter(filter) return o } // SetFilter adds the filter to the get alerts params func (o *GetAlertsParams) SetFilter(filter []string) { o.Filter = filter } // WithInhibited adds the inhibited to the get alerts params func (o *GetAlertsParams) WithInhibited(inhibited *bool) *GetAlertsParams { o.SetInhibited(inhibited) return o } // SetInhibited adds the inhibited to the get alerts params func (o *GetAlertsParams) SetInhibited(inhibited *bool) { o.Inhibited = inhibited } // WithReceiver adds the receiver to the get alerts params func (o *GetAlertsParams) WithReceiver(receiver *string) *GetAlertsParams { o.SetReceiver(receiver) return o } // SetReceiver adds the receiver to the get alerts params func (o *GetAlertsParams) SetReceiver(receiver *string) { o.Receiver = receiver } // WithSilenced adds the silenced to the get alerts params func (o *GetAlertsParams) WithSilenced(silenced *bool) *GetAlertsParams { o.SetSilenced(silenced) return o } // SetSilenced adds the silenced to the get alerts params func (o *GetAlertsParams) SetSilenced(silenced *bool) { o.Silenced = silenced } // WithUnprocessed adds the unprocessed to the get alerts params func (o *GetAlertsParams) WithUnprocessed(unprocessed *bool) *GetAlertsParams { o.SetUnprocessed(unprocessed) return o } // SetUnprocessed adds the unprocessed to the get alerts params func (o *GetAlertsParams) SetUnprocessed(unprocessed *bool) { o.Unprocessed = unprocessed } // WriteToRequest writes these params to a swagger request func (o *GetAlertsParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { if err := r.SetTimeout(o.timeout); err != nil { return err } var res []error if o.Active != nil { // query param active var qrActive bool if o.Active != nil { qrActive = *o.Active } qActive := swag.FormatBool(qrActive) if qActive != "" { if err := r.SetQueryParam("active", qActive); err != nil { return err } } } if o.Filter != nil { // binding items for filter joinedFilter := o.bindParamFilter(reg) // query array param filter if err := r.SetQueryParam("filter", joinedFilter...); err != nil { return err } } if o.Inhibited != nil { // query param inhibited var qrInhibited bool if o.Inhibited != nil { qrInhibited = *o.Inhibited } qInhibited := swag.FormatBool(qrInhibited) if qInhibited != "" { if err := r.SetQueryParam("inhibited", qInhibited); err != nil { return err } } } if o.Receiver != nil { // query param receiver var qrReceiver string if o.Receiver != nil { qrReceiver = *o.Receiver } qReceiver := qrReceiver if qReceiver != "" { if err := r.SetQueryParam("receiver", qReceiver); err != nil { return err } } } if o.Silenced != nil { // query param silenced var qrSilenced bool if o.Silenced != nil { qrSilenced = *o.Silenced } qSilenced := swag.FormatBool(qrSilenced) if qSilenced != "" { if err := r.SetQueryParam("silenced", qSilenced); err != nil { return err } } } if o.Unprocessed != nil { // query param unprocessed var qrUnprocessed bool if o.Unprocessed != nil { qrUnprocessed = *o.Unprocessed } qUnprocessed := swag.FormatBool(qrUnprocessed) if qUnprocessed != "" { if err := r.SetQueryParam("unprocessed", qUnprocessed); err != nil { return err } } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // bindParamGetAlerts binds the parameter filter func (o *GetAlertsParams) bindParamFilter(formats strfmt.Registry) []string { filterIR := o.Filter var filterIC []string for _, filterIIR := range filterIR { // explode []string filterIIV := filterIIR // string as string filterIC = append(filterIC, filterIIV) } // items.CollectionFormat: "multi" filterIS := swag.JoinByFormat(filterIC, "multi") return filterIS } prometheus-alertmanager-0.28.1+ds/api/v2/client/alert/get_alerts_responses.go000066400000000000000000000167071476331240200273220ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/models" ) // GetAlertsReader is a Reader for the GetAlerts structure. type GetAlertsReader struct { formats strfmt.Registry } // ReadResponse reads a server response into the received o. func (o *GetAlertsReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { switch response.Code() { case 200: result := NewGetAlertsOK() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return result, nil case 400: result := NewGetAlertsBadRequest() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result case 500: result := NewGetAlertsInternalServerError() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result default: return nil, runtime.NewAPIError("[GET /alerts] getAlerts", response, response.Code()) } } // NewGetAlertsOK creates a GetAlertsOK with default headers values func NewGetAlertsOK() *GetAlertsOK { return &GetAlertsOK{} } /* GetAlertsOK describes a response with status code 200, with default header values. Get alerts response */ type GetAlertsOK struct { Payload models.GettableAlerts } // IsSuccess returns true when this get alerts o k response has a 2xx status code func (o *GetAlertsOK) IsSuccess() bool { return true } // IsRedirect returns true when this get alerts o k response has a 3xx status code func (o *GetAlertsOK) IsRedirect() bool { return false } // IsClientError returns true when this get alerts o k response has a 4xx status code func (o *GetAlertsOK) IsClientError() bool { return false } // IsServerError returns true when this get alerts o k response has a 5xx status code func (o *GetAlertsOK) IsServerError() bool { return false } // IsCode returns true when this get alerts o k response a status code equal to that given func (o *GetAlertsOK) IsCode(code int) bool { return code == 200 } // Code gets the status code for the get alerts o k response func (o *GetAlertsOK) Code() int { return 200 } func (o *GetAlertsOK) Error() string { return fmt.Sprintf("[GET /alerts][%d] getAlertsOK %+v", 200, o.Payload) } func (o *GetAlertsOK) String() string { return fmt.Sprintf("[GET /alerts][%d] getAlertsOK %+v", 200, o.Payload) } func (o *GetAlertsOK) GetPayload() models.GettableAlerts { return o.Payload } func (o *GetAlertsOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } // NewGetAlertsBadRequest creates a GetAlertsBadRequest with default headers values func NewGetAlertsBadRequest() *GetAlertsBadRequest { return &GetAlertsBadRequest{} } /* GetAlertsBadRequest describes a response with status code 400, with default header values. Bad request */ type GetAlertsBadRequest struct { Payload string } // IsSuccess returns true when this get alerts bad request response has a 2xx status code func (o *GetAlertsBadRequest) IsSuccess() bool { return false } // IsRedirect returns true when this get alerts bad request response has a 3xx status code func (o *GetAlertsBadRequest) IsRedirect() bool { return false } // IsClientError returns true when this get alerts bad request response has a 4xx status code func (o *GetAlertsBadRequest) IsClientError() bool { return true } // IsServerError returns true when this get alerts bad request response has a 5xx status code func (o *GetAlertsBadRequest) IsServerError() bool { return false } // IsCode returns true when this get alerts bad request response a status code equal to that given func (o *GetAlertsBadRequest) IsCode(code int) bool { return code == 400 } // Code gets the status code for the get alerts bad request response func (o *GetAlertsBadRequest) Code() int { return 400 } func (o *GetAlertsBadRequest) Error() string { return fmt.Sprintf("[GET /alerts][%d] getAlertsBadRequest %+v", 400, o.Payload) } func (o *GetAlertsBadRequest) String() string { return fmt.Sprintf("[GET /alerts][%d] getAlertsBadRequest %+v", 400, o.Payload) } func (o *GetAlertsBadRequest) GetPayload() string { return o.Payload } func (o *GetAlertsBadRequest) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } // NewGetAlertsInternalServerError creates a GetAlertsInternalServerError with default headers values func NewGetAlertsInternalServerError() *GetAlertsInternalServerError { return &GetAlertsInternalServerError{} } /* GetAlertsInternalServerError describes a response with status code 500, with default header values. Internal server error */ type GetAlertsInternalServerError struct { Payload string } // IsSuccess returns true when this get alerts internal server error response has a 2xx status code func (o *GetAlertsInternalServerError) IsSuccess() bool { return false } // IsRedirect returns true when this get alerts internal server error response has a 3xx status code func (o *GetAlertsInternalServerError) IsRedirect() bool { return false } // IsClientError returns true when this get alerts internal server error response has a 4xx status code func (o *GetAlertsInternalServerError) IsClientError() bool { return false } // IsServerError returns true when this get alerts internal server error response has a 5xx status code func (o *GetAlertsInternalServerError) IsServerError() bool { return true } // IsCode returns true when this get alerts internal server error response a status code equal to that given func (o *GetAlertsInternalServerError) IsCode(code int) bool { return code == 500 } // Code gets the status code for the get alerts internal server error response func (o *GetAlertsInternalServerError) Code() int { return 500 } func (o *GetAlertsInternalServerError) Error() string { return fmt.Sprintf("[GET /alerts][%d] getAlertsInternalServerError %+v", 500, o.Payload) } func (o *GetAlertsInternalServerError) String() string { return fmt.Sprintf("[GET /alerts][%d] getAlertsInternalServerError %+v", 500, o.Payload) } func (o *GetAlertsInternalServerError) GetPayload() string { return o.Payload } func (o *GetAlertsInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/alert/post_alerts_parameters.go000066400000000000000000000111771476331240200276460ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "net/http" "time" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/models" ) // NewPostAlertsParams creates a new PostAlertsParams object, // with the default timeout for this client. // // Default values are not hydrated, since defaults are normally applied by the API server side. // // To enforce default values in parameter, use SetDefaults or WithDefaults. func NewPostAlertsParams() *PostAlertsParams { return &PostAlertsParams{ timeout: cr.DefaultTimeout, } } // NewPostAlertsParamsWithTimeout creates a new PostAlertsParams object // with the ability to set a timeout on a request. func NewPostAlertsParamsWithTimeout(timeout time.Duration) *PostAlertsParams { return &PostAlertsParams{ timeout: timeout, } } // NewPostAlertsParamsWithContext creates a new PostAlertsParams object // with the ability to set a context for a request. func NewPostAlertsParamsWithContext(ctx context.Context) *PostAlertsParams { return &PostAlertsParams{ Context: ctx, } } // NewPostAlertsParamsWithHTTPClient creates a new PostAlertsParams object // with the ability to set a custom HTTPClient for a request. func NewPostAlertsParamsWithHTTPClient(client *http.Client) *PostAlertsParams { return &PostAlertsParams{ HTTPClient: client, } } /* PostAlertsParams contains all the parameters to send to the API endpoint for the post alerts operation. Typically these are written to a http.Request. */ type PostAlertsParams struct { /* Alerts. The alerts to create */ Alerts models.PostableAlerts timeout time.Duration Context context.Context HTTPClient *http.Client } // WithDefaults hydrates default values in the post alerts params (not the query body). // // All values with no default are reset to their zero value. func (o *PostAlertsParams) WithDefaults() *PostAlertsParams { o.SetDefaults() return o } // SetDefaults hydrates default values in the post alerts params (not the query body). // // All values with no default are reset to their zero value. func (o *PostAlertsParams) SetDefaults() { // no default values defined for this parameter } // WithTimeout adds the timeout to the post alerts params func (o *PostAlertsParams) WithTimeout(timeout time.Duration) *PostAlertsParams { o.SetTimeout(timeout) return o } // SetTimeout adds the timeout to the post alerts params func (o *PostAlertsParams) SetTimeout(timeout time.Duration) { o.timeout = timeout } // WithContext adds the context to the post alerts params func (o *PostAlertsParams) WithContext(ctx context.Context) *PostAlertsParams { o.SetContext(ctx) return o } // SetContext adds the context to the post alerts params func (o *PostAlertsParams) SetContext(ctx context.Context) { o.Context = ctx } // WithHTTPClient adds the HTTPClient to the post alerts params func (o *PostAlertsParams) WithHTTPClient(client *http.Client) *PostAlertsParams { o.SetHTTPClient(client) return o } // SetHTTPClient adds the HTTPClient to the post alerts params func (o *PostAlertsParams) SetHTTPClient(client *http.Client) { o.HTTPClient = client } // WithAlerts adds the alerts to the post alerts params func (o *PostAlertsParams) WithAlerts(alerts models.PostableAlerts) *PostAlertsParams { o.SetAlerts(alerts) return o } // SetAlerts adds the alerts to the post alerts params func (o *PostAlertsParams) SetAlerts(alerts models.PostableAlerts) { o.Alerts = alerts } // WriteToRequest writes these params to a swagger request func (o *PostAlertsParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { if err := r.SetTimeout(o.timeout); err != nil { return err } var res []error if o.Alerts != nil { if err := r.SetBodyParam(o.Alerts); err != nil { return err } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/alert/post_alerts_responses.go000066400000000000000000000163431476331240200275240ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" ) // PostAlertsReader is a Reader for the PostAlerts structure. type PostAlertsReader struct { formats strfmt.Registry } // ReadResponse reads a server response into the received o. func (o *PostAlertsReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { switch response.Code() { case 200: result := NewPostAlertsOK() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return result, nil case 400: result := NewPostAlertsBadRequest() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result case 500: result := NewPostAlertsInternalServerError() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result default: return nil, runtime.NewAPIError("[POST /alerts] postAlerts", response, response.Code()) } } // NewPostAlertsOK creates a PostAlertsOK with default headers values func NewPostAlertsOK() *PostAlertsOK { return &PostAlertsOK{} } /* PostAlertsOK describes a response with status code 200, with default header values. Create alerts response */ type PostAlertsOK struct { } // IsSuccess returns true when this post alerts o k response has a 2xx status code func (o *PostAlertsOK) IsSuccess() bool { return true } // IsRedirect returns true when this post alerts o k response has a 3xx status code func (o *PostAlertsOK) IsRedirect() bool { return false } // IsClientError returns true when this post alerts o k response has a 4xx status code func (o *PostAlertsOK) IsClientError() bool { return false } // IsServerError returns true when this post alerts o k response has a 5xx status code func (o *PostAlertsOK) IsServerError() bool { return false } // IsCode returns true when this post alerts o k response a status code equal to that given func (o *PostAlertsOK) IsCode(code int) bool { return code == 200 } // Code gets the status code for the post alerts o k response func (o *PostAlertsOK) Code() int { return 200 } func (o *PostAlertsOK) Error() string { return fmt.Sprintf("[POST /alerts][%d] postAlertsOK ", 200) } func (o *PostAlertsOK) String() string { return fmt.Sprintf("[POST /alerts][%d] postAlertsOK ", 200) } func (o *PostAlertsOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { return nil } // NewPostAlertsBadRequest creates a PostAlertsBadRequest with default headers values func NewPostAlertsBadRequest() *PostAlertsBadRequest { return &PostAlertsBadRequest{} } /* PostAlertsBadRequest describes a response with status code 400, with default header values. Bad request */ type PostAlertsBadRequest struct { Payload string } // IsSuccess returns true when this post alerts bad request response has a 2xx status code func (o *PostAlertsBadRequest) IsSuccess() bool { return false } // IsRedirect returns true when this post alerts bad request response has a 3xx status code func (o *PostAlertsBadRequest) IsRedirect() bool { return false } // IsClientError returns true when this post alerts bad request response has a 4xx status code func (o *PostAlertsBadRequest) IsClientError() bool { return true } // IsServerError returns true when this post alerts bad request response has a 5xx status code func (o *PostAlertsBadRequest) IsServerError() bool { return false } // IsCode returns true when this post alerts bad request response a status code equal to that given func (o *PostAlertsBadRequest) IsCode(code int) bool { return code == 400 } // Code gets the status code for the post alerts bad request response func (o *PostAlertsBadRequest) Code() int { return 400 } func (o *PostAlertsBadRequest) Error() string { return fmt.Sprintf("[POST /alerts][%d] postAlertsBadRequest %+v", 400, o.Payload) } func (o *PostAlertsBadRequest) String() string { return fmt.Sprintf("[POST /alerts][%d] postAlertsBadRequest %+v", 400, o.Payload) } func (o *PostAlertsBadRequest) GetPayload() string { return o.Payload } func (o *PostAlertsBadRequest) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } // NewPostAlertsInternalServerError creates a PostAlertsInternalServerError with default headers values func NewPostAlertsInternalServerError() *PostAlertsInternalServerError { return &PostAlertsInternalServerError{} } /* PostAlertsInternalServerError describes a response with status code 500, with default header values. Internal server error */ type PostAlertsInternalServerError struct { Payload string } // IsSuccess returns true when this post alerts internal server error response has a 2xx status code func (o *PostAlertsInternalServerError) IsSuccess() bool { return false } // IsRedirect returns true when this post alerts internal server error response has a 3xx status code func (o *PostAlertsInternalServerError) IsRedirect() bool { return false } // IsClientError returns true when this post alerts internal server error response has a 4xx status code func (o *PostAlertsInternalServerError) IsClientError() bool { return false } // IsServerError returns true when this post alerts internal server error response has a 5xx status code func (o *PostAlertsInternalServerError) IsServerError() bool { return true } // IsCode returns true when this post alerts internal server error response a status code equal to that given func (o *PostAlertsInternalServerError) IsCode(code int) bool { return code == 500 } // Code gets the status code for the post alerts internal server error response func (o *PostAlertsInternalServerError) Code() int { return 500 } func (o *PostAlertsInternalServerError) Error() string { return fmt.Sprintf("[POST /alerts][%d] postAlertsInternalServerError %+v", 500, o.Payload) } func (o *PostAlertsInternalServerError) String() string { return fmt.Sprintf("[POST /alerts][%d] postAlertsInternalServerError %+v", 500, o.Payload) } func (o *PostAlertsInternalServerError) GetPayload() string { return o.Payload } func (o *PostAlertsInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/alertgroup/000077500000000000000000000000001476331240200236035ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/client/alertgroup/alertgroup_client.go000066400000000000000000000055421476331240200276620ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alertgroup // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" ) // New creates a new alertgroup API client. func New(transport runtime.ClientTransport, formats strfmt.Registry) ClientService { return &Client{transport: transport, formats: formats} } /* Client for alertgroup API */ type Client struct { transport runtime.ClientTransport formats strfmt.Registry } // ClientOption is the option for Client methods type ClientOption func(*runtime.ClientOperation) // ClientService is the interface for Client methods type ClientService interface { GetAlertGroups(params *GetAlertGroupsParams, opts ...ClientOption) (*GetAlertGroupsOK, error) SetTransport(transport runtime.ClientTransport) } /* GetAlertGroups Get a list of alert groups */ func (a *Client) GetAlertGroups(params *GetAlertGroupsParams, opts ...ClientOption) (*GetAlertGroupsOK, error) { // TODO: Validate the params before sending if params == nil { params = NewGetAlertGroupsParams() } op := &runtime.ClientOperation{ ID: "getAlertGroups", Method: "GET", PathPattern: "/alerts/groups", ProducesMediaTypes: []string{"application/json"}, ConsumesMediaTypes: []string{"application/json"}, Schemes: []string{"http"}, Params: params, Reader: &GetAlertGroupsReader{formats: a.formats}, Context: params.Context, Client: params.HTTPClient, } for _, opt := range opts { opt(op) } result, err := a.transport.Submit(op) if err != nil { return nil, err } success, ok := result.(*GetAlertGroupsOK) if ok { return success, nil } // unexpected success response // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue msg := fmt.Sprintf("unexpected success response for getAlertGroups: API contract not enforced by server. Client expected to get an error, but got: %T", result) panic(msg) } // SetTransport changes the transport on the client func (a *Client) SetTransport(transport runtime.ClientTransport) { a.transport = transport } prometheus-alertmanager-0.28.1+ds/api/v2/client/alertgroup/get_alert_groups_parameters.go000066400000000000000000000220261476331240200317240ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alertgroup // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "net/http" "time" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) // NewGetAlertGroupsParams creates a new GetAlertGroupsParams object, // with the default timeout for this client. // // Default values are not hydrated, since defaults are normally applied by the API server side. // // To enforce default values in parameter, use SetDefaults or WithDefaults. func NewGetAlertGroupsParams() *GetAlertGroupsParams { return &GetAlertGroupsParams{ timeout: cr.DefaultTimeout, } } // NewGetAlertGroupsParamsWithTimeout creates a new GetAlertGroupsParams object // with the ability to set a timeout on a request. func NewGetAlertGroupsParamsWithTimeout(timeout time.Duration) *GetAlertGroupsParams { return &GetAlertGroupsParams{ timeout: timeout, } } // NewGetAlertGroupsParamsWithContext creates a new GetAlertGroupsParams object // with the ability to set a context for a request. func NewGetAlertGroupsParamsWithContext(ctx context.Context) *GetAlertGroupsParams { return &GetAlertGroupsParams{ Context: ctx, } } // NewGetAlertGroupsParamsWithHTTPClient creates a new GetAlertGroupsParams object // with the ability to set a custom HTTPClient for a request. func NewGetAlertGroupsParamsWithHTTPClient(client *http.Client) *GetAlertGroupsParams { return &GetAlertGroupsParams{ HTTPClient: client, } } /* GetAlertGroupsParams contains all the parameters to send to the API endpoint for the get alert groups operation. Typically these are written to a http.Request. */ type GetAlertGroupsParams struct { /* Active. Show active alerts Default: true */ Active *bool /* Filter. A list of matchers to filter alerts by */ Filter []string /* Inhibited. Show inhibited alerts Default: true */ Inhibited *bool /* Muted. Show muted alerts Default: true */ Muted *bool /* Receiver. A regex matching receivers to filter alerts by */ Receiver *string /* Silenced. Show silenced alerts Default: true */ Silenced *bool timeout time.Duration Context context.Context HTTPClient *http.Client } // WithDefaults hydrates default values in the get alert groups params (not the query body). // // All values with no default are reset to their zero value. func (o *GetAlertGroupsParams) WithDefaults() *GetAlertGroupsParams { o.SetDefaults() return o } // SetDefaults hydrates default values in the get alert groups params (not the query body). // // All values with no default are reset to their zero value. func (o *GetAlertGroupsParams) SetDefaults() { var ( activeDefault = bool(true) inhibitedDefault = bool(true) mutedDefault = bool(true) silencedDefault = bool(true) ) val := GetAlertGroupsParams{ Active: &activeDefault, Inhibited: &inhibitedDefault, Muted: &mutedDefault, Silenced: &silencedDefault, } val.timeout = o.timeout val.Context = o.Context val.HTTPClient = o.HTTPClient *o = val } // WithTimeout adds the timeout to the get alert groups params func (o *GetAlertGroupsParams) WithTimeout(timeout time.Duration) *GetAlertGroupsParams { o.SetTimeout(timeout) return o } // SetTimeout adds the timeout to the get alert groups params func (o *GetAlertGroupsParams) SetTimeout(timeout time.Duration) { o.timeout = timeout } // WithContext adds the context to the get alert groups params func (o *GetAlertGroupsParams) WithContext(ctx context.Context) *GetAlertGroupsParams { o.SetContext(ctx) return o } // SetContext adds the context to the get alert groups params func (o *GetAlertGroupsParams) SetContext(ctx context.Context) { o.Context = ctx } // WithHTTPClient adds the HTTPClient to the get alert groups params func (o *GetAlertGroupsParams) WithHTTPClient(client *http.Client) *GetAlertGroupsParams { o.SetHTTPClient(client) return o } // SetHTTPClient adds the HTTPClient to the get alert groups params func (o *GetAlertGroupsParams) SetHTTPClient(client *http.Client) { o.HTTPClient = client } // WithActive adds the active to the get alert groups params func (o *GetAlertGroupsParams) WithActive(active *bool) *GetAlertGroupsParams { o.SetActive(active) return o } // SetActive adds the active to the get alert groups params func (o *GetAlertGroupsParams) SetActive(active *bool) { o.Active = active } // WithFilter adds the filter to the get alert groups params func (o *GetAlertGroupsParams) WithFilter(filter []string) *GetAlertGroupsParams { o.SetFilter(filter) return o } // SetFilter adds the filter to the get alert groups params func (o *GetAlertGroupsParams) SetFilter(filter []string) { o.Filter = filter } // WithInhibited adds the inhibited to the get alert groups params func (o *GetAlertGroupsParams) WithInhibited(inhibited *bool) *GetAlertGroupsParams { o.SetInhibited(inhibited) return o } // SetInhibited adds the inhibited to the get alert groups params func (o *GetAlertGroupsParams) SetInhibited(inhibited *bool) { o.Inhibited = inhibited } // WithMuted adds the muted to the get alert groups params func (o *GetAlertGroupsParams) WithMuted(muted *bool) *GetAlertGroupsParams { o.SetMuted(muted) return o } // SetMuted adds the muted to the get alert groups params func (o *GetAlertGroupsParams) SetMuted(muted *bool) { o.Muted = muted } // WithReceiver adds the receiver to the get alert groups params func (o *GetAlertGroupsParams) WithReceiver(receiver *string) *GetAlertGroupsParams { o.SetReceiver(receiver) return o } // SetReceiver adds the receiver to the get alert groups params func (o *GetAlertGroupsParams) SetReceiver(receiver *string) { o.Receiver = receiver } // WithSilenced adds the silenced to the get alert groups params func (o *GetAlertGroupsParams) WithSilenced(silenced *bool) *GetAlertGroupsParams { o.SetSilenced(silenced) return o } // SetSilenced adds the silenced to the get alert groups params func (o *GetAlertGroupsParams) SetSilenced(silenced *bool) { o.Silenced = silenced } // WriteToRequest writes these params to a swagger request func (o *GetAlertGroupsParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { if err := r.SetTimeout(o.timeout); err != nil { return err } var res []error if o.Active != nil { // query param active var qrActive bool if o.Active != nil { qrActive = *o.Active } qActive := swag.FormatBool(qrActive) if qActive != "" { if err := r.SetQueryParam("active", qActive); err != nil { return err } } } if o.Filter != nil { // binding items for filter joinedFilter := o.bindParamFilter(reg) // query array param filter if err := r.SetQueryParam("filter", joinedFilter...); err != nil { return err } } if o.Inhibited != nil { // query param inhibited var qrInhibited bool if o.Inhibited != nil { qrInhibited = *o.Inhibited } qInhibited := swag.FormatBool(qrInhibited) if qInhibited != "" { if err := r.SetQueryParam("inhibited", qInhibited); err != nil { return err } } } if o.Muted != nil { // query param muted var qrMuted bool if o.Muted != nil { qrMuted = *o.Muted } qMuted := swag.FormatBool(qrMuted) if qMuted != "" { if err := r.SetQueryParam("muted", qMuted); err != nil { return err } } } if o.Receiver != nil { // query param receiver var qrReceiver string if o.Receiver != nil { qrReceiver = *o.Receiver } qReceiver := qrReceiver if qReceiver != "" { if err := r.SetQueryParam("receiver", qReceiver); err != nil { return err } } } if o.Silenced != nil { // query param silenced var qrSilenced bool if o.Silenced != nil { qrSilenced = *o.Silenced } qSilenced := swag.FormatBool(qrSilenced) if qSilenced != "" { if err := r.SetQueryParam("silenced", qSilenced); err != nil { return err } } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // bindParamGetAlertGroups binds the parameter filter func (o *GetAlertGroupsParams) bindParamFilter(formats strfmt.Registry) []string { filterIR := o.Filter var filterIC []string for _, filterIIR := range filterIR { // explode []string filterIIV := filterIIR // string as string filterIC = append(filterIC, filterIIV) } // items.CollectionFormat: "multi" filterIS := swag.JoinByFormat(filterIC, "multi") return filterIS } prometheus-alertmanager-0.28.1+ds/api/v2/client/alertgroup/get_alert_groups_responses.go000066400000000000000000000176561476331240200316170ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alertgroup // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/models" ) // GetAlertGroupsReader is a Reader for the GetAlertGroups structure. type GetAlertGroupsReader struct { formats strfmt.Registry } // ReadResponse reads a server response into the received o. func (o *GetAlertGroupsReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { switch response.Code() { case 200: result := NewGetAlertGroupsOK() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return result, nil case 400: result := NewGetAlertGroupsBadRequest() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result case 500: result := NewGetAlertGroupsInternalServerError() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result default: return nil, runtime.NewAPIError("[GET /alerts/groups] getAlertGroups", response, response.Code()) } } // NewGetAlertGroupsOK creates a GetAlertGroupsOK with default headers values func NewGetAlertGroupsOK() *GetAlertGroupsOK { return &GetAlertGroupsOK{} } /* GetAlertGroupsOK describes a response with status code 200, with default header values. Get alert groups response */ type GetAlertGroupsOK struct { Payload models.AlertGroups } // IsSuccess returns true when this get alert groups o k response has a 2xx status code func (o *GetAlertGroupsOK) IsSuccess() bool { return true } // IsRedirect returns true when this get alert groups o k response has a 3xx status code func (o *GetAlertGroupsOK) IsRedirect() bool { return false } // IsClientError returns true when this get alert groups o k response has a 4xx status code func (o *GetAlertGroupsOK) IsClientError() bool { return false } // IsServerError returns true when this get alert groups o k response has a 5xx status code func (o *GetAlertGroupsOK) IsServerError() bool { return false } // IsCode returns true when this get alert groups o k response a status code equal to that given func (o *GetAlertGroupsOK) IsCode(code int) bool { return code == 200 } // Code gets the status code for the get alert groups o k response func (o *GetAlertGroupsOK) Code() int { return 200 } func (o *GetAlertGroupsOK) Error() string { return fmt.Sprintf("[GET /alerts/groups][%d] getAlertGroupsOK %+v", 200, o.Payload) } func (o *GetAlertGroupsOK) String() string { return fmt.Sprintf("[GET /alerts/groups][%d] getAlertGroupsOK %+v", 200, o.Payload) } func (o *GetAlertGroupsOK) GetPayload() models.AlertGroups { return o.Payload } func (o *GetAlertGroupsOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } // NewGetAlertGroupsBadRequest creates a GetAlertGroupsBadRequest with default headers values func NewGetAlertGroupsBadRequest() *GetAlertGroupsBadRequest { return &GetAlertGroupsBadRequest{} } /* GetAlertGroupsBadRequest describes a response with status code 400, with default header values. Bad request */ type GetAlertGroupsBadRequest struct { Payload string } // IsSuccess returns true when this get alert groups bad request response has a 2xx status code func (o *GetAlertGroupsBadRequest) IsSuccess() bool { return false } // IsRedirect returns true when this get alert groups bad request response has a 3xx status code func (o *GetAlertGroupsBadRequest) IsRedirect() bool { return false } // IsClientError returns true when this get alert groups bad request response has a 4xx status code func (o *GetAlertGroupsBadRequest) IsClientError() bool { return true } // IsServerError returns true when this get alert groups bad request response has a 5xx status code func (o *GetAlertGroupsBadRequest) IsServerError() bool { return false } // IsCode returns true when this get alert groups bad request response a status code equal to that given func (o *GetAlertGroupsBadRequest) IsCode(code int) bool { return code == 400 } // Code gets the status code for the get alert groups bad request response func (o *GetAlertGroupsBadRequest) Code() int { return 400 } func (o *GetAlertGroupsBadRequest) Error() string { return fmt.Sprintf("[GET /alerts/groups][%d] getAlertGroupsBadRequest %+v", 400, o.Payload) } func (o *GetAlertGroupsBadRequest) String() string { return fmt.Sprintf("[GET /alerts/groups][%d] getAlertGroupsBadRequest %+v", 400, o.Payload) } func (o *GetAlertGroupsBadRequest) GetPayload() string { return o.Payload } func (o *GetAlertGroupsBadRequest) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } // NewGetAlertGroupsInternalServerError creates a GetAlertGroupsInternalServerError with default headers values func NewGetAlertGroupsInternalServerError() *GetAlertGroupsInternalServerError { return &GetAlertGroupsInternalServerError{} } /* GetAlertGroupsInternalServerError describes a response with status code 500, with default header values. Internal server error */ type GetAlertGroupsInternalServerError struct { Payload string } // IsSuccess returns true when this get alert groups internal server error response has a 2xx status code func (o *GetAlertGroupsInternalServerError) IsSuccess() bool { return false } // IsRedirect returns true when this get alert groups internal server error response has a 3xx status code func (o *GetAlertGroupsInternalServerError) IsRedirect() bool { return false } // IsClientError returns true when this get alert groups internal server error response has a 4xx status code func (o *GetAlertGroupsInternalServerError) IsClientError() bool { return false } // IsServerError returns true when this get alert groups internal server error response has a 5xx status code func (o *GetAlertGroupsInternalServerError) IsServerError() bool { return true } // IsCode returns true when this get alert groups internal server error response a status code equal to that given func (o *GetAlertGroupsInternalServerError) IsCode(code int) bool { return code == 500 } // Code gets the status code for the get alert groups internal server error response func (o *GetAlertGroupsInternalServerError) Code() int { return 500 } func (o *GetAlertGroupsInternalServerError) Error() string { return fmt.Sprintf("[GET /alerts/groups][%d] getAlertGroupsInternalServerError %+v", 500, o.Payload) } func (o *GetAlertGroupsInternalServerError) String() string { return fmt.Sprintf("[GET /alerts/groups][%d] getAlertGroupsInternalServerError %+v", 500, o.Payload) } func (o *GetAlertGroupsInternalServerError) GetPayload() string { return o.Payload } func (o *GetAlertGroupsInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/alertmanager_api_client.go000066400000000000000000000107161476331240200266040ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package client // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "github.com/go-openapi/runtime" httptransport "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/client/alert" "github.com/prometheus/alertmanager/api/v2/client/alertgroup" "github.com/prometheus/alertmanager/api/v2/client/general" "github.com/prometheus/alertmanager/api/v2/client/receiver" "github.com/prometheus/alertmanager/api/v2/client/silence" ) // Default alertmanager API HTTP client. var Default = NewHTTPClient(nil) const ( // DefaultHost is the default Host // found in Meta (info) section of spec file DefaultHost string = "localhost" // DefaultBasePath is the default BasePath // found in Meta (info) section of spec file DefaultBasePath string = "/api/v2/" ) // DefaultSchemes are the default schemes found in Meta (info) section of spec file var DefaultSchemes = []string{"http"} // NewHTTPClient creates a new alertmanager API HTTP client. func NewHTTPClient(formats strfmt.Registry) *AlertmanagerAPI { return NewHTTPClientWithConfig(formats, nil) } // NewHTTPClientWithConfig creates a new alertmanager API HTTP client, // using a customizable transport config. func NewHTTPClientWithConfig(formats strfmt.Registry, cfg *TransportConfig) *AlertmanagerAPI { // ensure nullable parameters have default if cfg == nil { cfg = DefaultTransportConfig() } // create transport and client transport := httptransport.New(cfg.Host, cfg.BasePath, cfg.Schemes) return New(transport, formats) } // New creates a new alertmanager API client func New(transport runtime.ClientTransport, formats strfmt.Registry) *AlertmanagerAPI { // ensure nullable parameters have default if formats == nil { formats = strfmt.Default } cli := new(AlertmanagerAPI) cli.Transport = transport cli.Alert = alert.New(transport, formats) cli.Alertgroup = alertgroup.New(transport, formats) cli.General = general.New(transport, formats) cli.Receiver = receiver.New(transport, formats) cli.Silence = silence.New(transport, formats) return cli } // DefaultTransportConfig creates a TransportConfig with the // default settings taken from the meta section of the spec file. func DefaultTransportConfig() *TransportConfig { return &TransportConfig{ Host: DefaultHost, BasePath: DefaultBasePath, Schemes: DefaultSchemes, } } // TransportConfig contains the transport related info, // found in the meta section of the spec file. type TransportConfig struct { Host string BasePath string Schemes []string } // WithHost overrides the default host, // provided by the meta section of the spec file. func (cfg *TransportConfig) WithHost(host string) *TransportConfig { cfg.Host = host return cfg } // WithBasePath overrides the default basePath, // provided by the meta section of the spec file. func (cfg *TransportConfig) WithBasePath(basePath string) *TransportConfig { cfg.BasePath = basePath return cfg } // WithSchemes overrides the default schemes, // provided by the meta section of the spec file. func (cfg *TransportConfig) WithSchemes(schemes []string) *TransportConfig { cfg.Schemes = schemes return cfg } // AlertmanagerAPI is a client for alertmanager API type AlertmanagerAPI struct { Alert alert.ClientService Alertgroup alertgroup.ClientService General general.ClientService Receiver receiver.ClientService Silence silence.ClientService Transport runtime.ClientTransport } // SetTransport changes the transport on the client and all its subresources func (c *AlertmanagerAPI) SetTransport(transport runtime.ClientTransport) { c.Transport = transport c.Alert.SetTransport(transport) c.Alertgroup.SetTransport(transport) c.General.SetTransport(transport) c.Receiver.SetTransport(transport) c.Silence.SetTransport(transport) } prometheus-alertmanager-0.28.1+ds/api/v2/client/general/000077500000000000000000000000001476331240200230345ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/client/general/general_client.go000066400000000000000000000054721476331240200263460ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package general // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" ) // New creates a new general API client. func New(transport runtime.ClientTransport, formats strfmt.Registry) ClientService { return &Client{transport: transport, formats: formats} } /* Client for general API */ type Client struct { transport runtime.ClientTransport formats strfmt.Registry } // ClientOption is the option for Client methods type ClientOption func(*runtime.ClientOperation) // ClientService is the interface for Client methods type ClientService interface { GetStatus(params *GetStatusParams, opts ...ClientOption) (*GetStatusOK, error) SetTransport(transport runtime.ClientTransport) } /* GetStatus Get current status of an Alertmanager instance and its cluster */ func (a *Client) GetStatus(params *GetStatusParams, opts ...ClientOption) (*GetStatusOK, error) { // TODO: Validate the params before sending if params == nil { params = NewGetStatusParams() } op := &runtime.ClientOperation{ ID: "getStatus", Method: "GET", PathPattern: "/status", ProducesMediaTypes: []string{"application/json"}, ConsumesMediaTypes: []string{"application/json"}, Schemes: []string{"http"}, Params: params, Reader: &GetStatusReader{formats: a.formats}, Context: params.Context, Client: params.HTTPClient, } for _, opt := range opts { opt(op) } result, err := a.transport.Submit(op) if err != nil { return nil, err } success, ok := result.(*GetStatusOK) if ok { return success, nil } // unexpected success response // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue msg := fmt.Sprintf("unexpected success response for getStatus: API contract not enforced by server. Client expected to get an error, but got: %T", result) panic(msg) } // SetTransport changes the transport on the client func (a *Client) SetTransport(transport runtime.ClientTransport) { a.transport = transport } prometheus-alertmanager-0.28.1+ds/api/v2/client/general/get_status_parameters.go000066400000000000000000000100641476331240200277710ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package general // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "net/http" "time" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" ) // NewGetStatusParams creates a new GetStatusParams object, // with the default timeout for this client. // // Default values are not hydrated, since defaults are normally applied by the API server side. // // To enforce default values in parameter, use SetDefaults or WithDefaults. func NewGetStatusParams() *GetStatusParams { return &GetStatusParams{ timeout: cr.DefaultTimeout, } } // NewGetStatusParamsWithTimeout creates a new GetStatusParams object // with the ability to set a timeout on a request. func NewGetStatusParamsWithTimeout(timeout time.Duration) *GetStatusParams { return &GetStatusParams{ timeout: timeout, } } // NewGetStatusParamsWithContext creates a new GetStatusParams object // with the ability to set a context for a request. func NewGetStatusParamsWithContext(ctx context.Context) *GetStatusParams { return &GetStatusParams{ Context: ctx, } } // NewGetStatusParamsWithHTTPClient creates a new GetStatusParams object // with the ability to set a custom HTTPClient for a request. func NewGetStatusParamsWithHTTPClient(client *http.Client) *GetStatusParams { return &GetStatusParams{ HTTPClient: client, } } /* GetStatusParams contains all the parameters to send to the API endpoint for the get status operation. Typically these are written to a http.Request. */ type GetStatusParams struct { timeout time.Duration Context context.Context HTTPClient *http.Client } // WithDefaults hydrates default values in the get status params (not the query body). // // All values with no default are reset to their zero value. func (o *GetStatusParams) WithDefaults() *GetStatusParams { o.SetDefaults() return o } // SetDefaults hydrates default values in the get status params (not the query body). // // All values with no default are reset to their zero value. func (o *GetStatusParams) SetDefaults() { // no default values defined for this parameter } // WithTimeout adds the timeout to the get status params func (o *GetStatusParams) WithTimeout(timeout time.Duration) *GetStatusParams { o.SetTimeout(timeout) return o } // SetTimeout adds the timeout to the get status params func (o *GetStatusParams) SetTimeout(timeout time.Duration) { o.timeout = timeout } // WithContext adds the context to the get status params func (o *GetStatusParams) WithContext(ctx context.Context) *GetStatusParams { o.SetContext(ctx) return o } // SetContext adds the context to the get status params func (o *GetStatusParams) SetContext(ctx context.Context) { o.Context = ctx } // WithHTTPClient adds the HTTPClient to the get status params func (o *GetStatusParams) WithHTTPClient(client *http.Client) *GetStatusParams { o.SetHTTPClient(client) return o } // SetHTTPClient adds the HTTPClient to the get status params func (o *GetStatusParams) SetHTTPClient(client *http.Client) { o.HTTPClient = client } // WriteToRequest writes these params to a swagger request func (o *GetStatusParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { if err := r.SetTimeout(o.timeout); err != nil { return err } var res []error if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/general/get_status_responses.go000066400000000000000000000063471476331240200276600ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package general // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/models" ) // GetStatusReader is a Reader for the GetStatus structure. type GetStatusReader struct { formats strfmt.Registry } // ReadResponse reads a server response into the received o. func (o *GetStatusReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { switch response.Code() { case 200: result := NewGetStatusOK() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return result, nil default: return nil, runtime.NewAPIError("[GET /status] getStatus", response, response.Code()) } } // NewGetStatusOK creates a GetStatusOK with default headers values func NewGetStatusOK() *GetStatusOK { return &GetStatusOK{} } /* GetStatusOK describes a response with status code 200, with default header values. Get status response */ type GetStatusOK struct { Payload *models.AlertmanagerStatus } // IsSuccess returns true when this get status o k response has a 2xx status code func (o *GetStatusOK) IsSuccess() bool { return true } // IsRedirect returns true when this get status o k response has a 3xx status code func (o *GetStatusOK) IsRedirect() bool { return false } // IsClientError returns true when this get status o k response has a 4xx status code func (o *GetStatusOK) IsClientError() bool { return false } // IsServerError returns true when this get status o k response has a 5xx status code func (o *GetStatusOK) IsServerError() bool { return false } // IsCode returns true when this get status o k response a status code equal to that given func (o *GetStatusOK) IsCode(code int) bool { return code == 200 } // Code gets the status code for the get status o k response func (o *GetStatusOK) Code() int { return 200 } func (o *GetStatusOK) Error() string { return fmt.Sprintf("[GET /status][%d] getStatusOK %+v", 200, o.Payload) } func (o *GetStatusOK) String() string { return fmt.Sprintf("[GET /status][%d] getStatusOK %+v", 200, o.Payload) } func (o *GetStatusOK) GetPayload() *models.AlertmanagerStatus { return o.Payload } func (o *GetStatusOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { o.Payload = new(models.AlertmanagerStatus) // response payload if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { return err } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/receiver/000077500000000000000000000000001476331240200232235ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/client/receiver/get_receivers_parameters.go000066400000000000000000000102711476331240200306240ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package receiver // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "net/http" "time" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" ) // NewGetReceiversParams creates a new GetReceiversParams object, // with the default timeout for this client. // // Default values are not hydrated, since defaults are normally applied by the API server side. // // To enforce default values in parameter, use SetDefaults or WithDefaults. func NewGetReceiversParams() *GetReceiversParams { return &GetReceiversParams{ timeout: cr.DefaultTimeout, } } // NewGetReceiversParamsWithTimeout creates a new GetReceiversParams object // with the ability to set a timeout on a request. func NewGetReceiversParamsWithTimeout(timeout time.Duration) *GetReceiversParams { return &GetReceiversParams{ timeout: timeout, } } // NewGetReceiversParamsWithContext creates a new GetReceiversParams object // with the ability to set a context for a request. func NewGetReceiversParamsWithContext(ctx context.Context) *GetReceiversParams { return &GetReceiversParams{ Context: ctx, } } // NewGetReceiversParamsWithHTTPClient creates a new GetReceiversParams object // with the ability to set a custom HTTPClient for a request. func NewGetReceiversParamsWithHTTPClient(client *http.Client) *GetReceiversParams { return &GetReceiversParams{ HTTPClient: client, } } /* GetReceiversParams contains all the parameters to send to the API endpoint for the get receivers operation. Typically these are written to a http.Request. */ type GetReceiversParams struct { timeout time.Duration Context context.Context HTTPClient *http.Client } // WithDefaults hydrates default values in the get receivers params (not the query body). // // All values with no default are reset to their zero value. func (o *GetReceiversParams) WithDefaults() *GetReceiversParams { o.SetDefaults() return o } // SetDefaults hydrates default values in the get receivers params (not the query body). // // All values with no default are reset to their zero value. func (o *GetReceiversParams) SetDefaults() { // no default values defined for this parameter } // WithTimeout adds the timeout to the get receivers params func (o *GetReceiversParams) WithTimeout(timeout time.Duration) *GetReceiversParams { o.SetTimeout(timeout) return o } // SetTimeout adds the timeout to the get receivers params func (o *GetReceiversParams) SetTimeout(timeout time.Duration) { o.timeout = timeout } // WithContext adds the context to the get receivers params func (o *GetReceiversParams) WithContext(ctx context.Context) *GetReceiversParams { o.SetContext(ctx) return o } // SetContext adds the context to the get receivers params func (o *GetReceiversParams) SetContext(ctx context.Context) { o.Context = ctx } // WithHTTPClient adds the HTTPClient to the get receivers params func (o *GetReceiversParams) WithHTTPClient(client *http.Client) *GetReceiversParams { o.SetHTTPClient(client) return o } // SetHTTPClient adds the HTTPClient to the get receivers params func (o *GetReceiversParams) SetHTTPClient(client *http.Client) { o.HTTPClient = client } // WriteToRequest writes these params to a swagger request func (o *GetReceiversParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { if err := r.SetTimeout(o.timeout); err != nil { return err } var res []error if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/receiver/get_receivers_responses.go000066400000000000000000000064251476331240200305100ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package receiver // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/models" ) // GetReceiversReader is a Reader for the GetReceivers structure. type GetReceiversReader struct { formats strfmt.Registry } // ReadResponse reads a server response into the received o. func (o *GetReceiversReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { switch response.Code() { case 200: result := NewGetReceiversOK() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return result, nil default: return nil, runtime.NewAPIError("[GET /receivers] getReceivers", response, response.Code()) } } // NewGetReceiversOK creates a GetReceiversOK with default headers values func NewGetReceiversOK() *GetReceiversOK { return &GetReceiversOK{} } /* GetReceiversOK describes a response with status code 200, with default header values. Get receivers response */ type GetReceiversOK struct { Payload []*models.Receiver } // IsSuccess returns true when this get receivers o k response has a 2xx status code func (o *GetReceiversOK) IsSuccess() bool { return true } // IsRedirect returns true when this get receivers o k response has a 3xx status code func (o *GetReceiversOK) IsRedirect() bool { return false } // IsClientError returns true when this get receivers o k response has a 4xx status code func (o *GetReceiversOK) IsClientError() bool { return false } // IsServerError returns true when this get receivers o k response has a 5xx status code func (o *GetReceiversOK) IsServerError() bool { return false } // IsCode returns true when this get receivers o k response a status code equal to that given func (o *GetReceiversOK) IsCode(code int) bool { return code == 200 } // Code gets the status code for the get receivers o k response func (o *GetReceiversOK) Code() int { return 200 } func (o *GetReceiversOK) Error() string { return fmt.Sprintf("[GET /receivers][%d] getReceiversOK %+v", 200, o.Payload) } func (o *GetReceiversOK) String() string { return fmt.Sprintf("[GET /receivers][%d] getReceiversOK %+v", 200, o.Payload) } func (o *GetReceiversOK) GetPayload() []*models.Receiver { return o.Payload } func (o *GetReceiversOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/receiver/receiver_client.go000066400000000000000000000055431476331240200267230ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package receiver // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" ) // New creates a new receiver API client. func New(transport runtime.ClientTransport, formats strfmt.Registry) ClientService { return &Client{transport: transport, formats: formats} } /* Client for receiver API */ type Client struct { transport runtime.ClientTransport formats strfmt.Registry } // ClientOption is the option for Client methods type ClientOption func(*runtime.ClientOperation) // ClientService is the interface for Client methods type ClientService interface { GetReceivers(params *GetReceiversParams, opts ...ClientOption) (*GetReceiversOK, error) SetTransport(transport runtime.ClientTransport) } /* GetReceivers Get list of all receivers (name of notification integrations) */ func (a *Client) GetReceivers(params *GetReceiversParams, opts ...ClientOption) (*GetReceiversOK, error) { // TODO: Validate the params before sending if params == nil { params = NewGetReceiversParams() } op := &runtime.ClientOperation{ ID: "getReceivers", Method: "GET", PathPattern: "/receivers", ProducesMediaTypes: []string{"application/json"}, ConsumesMediaTypes: []string{"application/json"}, Schemes: []string{"http"}, Params: params, Reader: &GetReceiversReader{formats: a.formats}, Context: params.Context, Client: params.HTTPClient, } for _, opt := range opts { opt(op) } result, err := a.transport.Submit(op) if err != nil { return nil, err } success, ok := result.(*GetReceiversOK) if ok { return success, nil } // unexpected success response // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue msg := fmt.Sprintf("unexpected success response for getReceivers: API contract not enforced by server. Client expected to get an error, but got: %T", result) panic(msg) } // SetTransport changes the transport on the client func (a *Client) SetTransport(transport runtime.ClientTransport) { a.transport = transport } prometheus-alertmanager-0.28.1+ds/api/v2/client/silence/000077500000000000000000000000001476331240200230415ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/client/silence/delete_silence_parameters.go000066400000000000000000000114301476331240200305560ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "net/http" "time" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" ) // NewDeleteSilenceParams creates a new DeleteSilenceParams object, // with the default timeout for this client. // // Default values are not hydrated, since defaults are normally applied by the API server side. // // To enforce default values in parameter, use SetDefaults or WithDefaults. func NewDeleteSilenceParams() *DeleteSilenceParams { return &DeleteSilenceParams{ timeout: cr.DefaultTimeout, } } // NewDeleteSilenceParamsWithTimeout creates a new DeleteSilenceParams object // with the ability to set a timeout on a request. func NewDeleteSilenceParamsWithTimeout(timeout time.Duration) *DeleteSilenceParams { return &DeleteSilenceParams{ timeout: timeout, } } // NewDeleteSilenceParamsWithContext creates a new DeleteSilenceParams object // with the ability to set a context for a request. func NewDeleteSilenceParamsWithContext(ctx context.Context) *DeleteSilenceParams { return &DeleteSilenceParams{ Context: ctx, } } // NewDeleteSilenceParamsWithHTTPClient creates a new DeleteSilenceParams object // with the ability to set a custom HTTPClient for a request. func NewDeleteSilenceParamsWithHTTPClient(client *http.Client) *DeleteSilenceParams { return &DeleteSilenceParams{ HTTPClient: client, } } /* DeleteSilenceParams contains all the parameters to send to the API endpoint for the delete silence operation. Typically these are written to a http.Request. */ type DeleteSilenceParams struct { /* SilenceID. ID of the silence to get Format: uuid */ SilenceID strfmt.UUID timeout time.Duration Context context.Context HTTPClient *http.Client } // WithDefaults hydrates default values in the delete silence params (not the query body). // // All values with no default are reset to their zero value. func (o *DeleteSilenceParams) WithDefaults() *DeleteSilenceParams { o.SetDefaults() return o } // SetDefaults hydrates default values in the delete silence params (not the query body). // // All values with no default are reset to their zero value. func (o *DeleteSilenceParams) SetDefaults() { // no default values defined for this parameter } // WithTimeout adds the timeout to the delete silence params func (o *DeleteSilenceParams) WithTimeout(timeout time.Duration) *DeleteSilenceParams { o.SetTimeout(timeout) return o } // SetTimeout adds the timeout to the delete silence params func (o *DeleteSilenceParams) SetTimeout(timeout time.Duration) { o.timeout = timeout } // WithContext adds the context to the delete silence params func (o *DeleteSilenceParams) WithContext(ctx context.Context) *DeleteSilenceParams { o.SetContext(ctx) return o } // SetContext adds the context to the delete silence params func (o *DeleteSilenceParams) SetContext(ctx context.Context) { o.Context = ctx } // WithHTTPClient adds the HTTPClient to the delete silence params func (o *DeleteSilenceParams) WithHTTPClient(client *http.Client) *DeleteSilenceParams { o.SetHTTPClient(client) return o } // SetHTTPClient adds the HTTPClient to the delete silence params func (o *DeleteSilenceParams) SetHTTPClient(client *http.Client) { o.HTTPClient = client } // WithSilenceID adds the silenceID to the delete silence params func (o *DeleteSilenceParams) WithSilenceID(silenceID strfmt.UUID) *DeleteSilenceParams { o.SetSilenceID(silenceID) return o } // SetSilenceID adds the silenceId to the delete silence params func (o *DeleteSilenceParams) SetSilenceID(silenceID strfmt.UUID) { o.SilenceID = silenceID } // WriteToRequest writes these params to a swagger request func (o *DeleteSilenceParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { if err := r.SetTimeout(o.timeout); err != nil { return err } var res []error // path param silenceID if err := r.SetPathParam("silenceID", o.SilenceID.String()); err != nil { return err } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/silence/delete_silence_responses.go000066400000000000000000000164741476331240200304510ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" ) // DeleteSilenceReader is a Reader for the DeleteSilence structure. type DeleteSilenceReader struct { formats strfmt.Registry } // ReadResponse reads a server response into the received o. func (o *DeleteSilenceReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { switch response.Code() { case 200: result := NewDeleteSilenceOK() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return result, nil case 404: result := NewDeleteSilenceNotFound() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result case 500: result := NewDeleteSilenceInternalServerError() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result default: return nil, runtime.NewAPIError("[DELETE /silence/{silenceID}] deleteSilence", response, response.Code()) } } // NewDeleteSilenceOK creates a DeleteSilenceOK with default headers values func NewDeleteSilenceOK() *DeleteSilenceOK { return &DeleteSilenceOK{} } /* DeleteSilenceOK describes a response with status code 200, with default header values. Delete silence response */ type DeleteSilenceOK struct { } // IsSuccess returns true when this delete silence o k response has a 2xx status code func (o *DeleteSilenceOK) IsSuccess() bool { return true } // IsRedirect returns true when this delete silence o k response has a 3xx status code func (o *DeleteSilenceOK) IsRedirect() bool { return false } // IsClientError returns true when this delete silence o k response has a 4xx status code func (o *DeleteSilenceOK) IsClientError() bool { return false } // IsServerError returns true when this delete silence o k response has a 5xx status code func (o *DeleteSilenceOK) IsServerError() bool { return false } // IsCode returns true when this delete silence o k response a status code equal to that given func (o *DeleteSilenceOK) IsCode(code int) bool { return code == 200 } // Code gets the status code for the delete silence o k response func (o *DeleteSilenceOK) Code() int { return 200 } func (o *DeleteSilenceOK) Error() string { return fmt.Sprintf("[DELETE /silence/{silenceID}][%d] deleteSilenceOK ", 200) } func (o *DeleteSilenceOK) String() string { return fmt.Sprintf("[DELETE /silence/{silenceID}][%d] deleteSilenceOK ", 200) } func (o *DeleteSilenceOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { return nil } // NewDeleteSilenceNotFound creates a DeleteSilenceNotFound with default headers values func NewDeleteSilenceNotFound() *DeleteSilenceNotFound { return &DeleteSilenceNotFound{} } /* DeleteSilenceNotFound describes a response with status code 404, with default header values. A silence with the specified ID was not found */ type DeleteSilenceNotFound struct { } // IsSuccess returns true when this delete silence not found response has a 2xx status code func (o *DeleteSilenceNotFound) IsSuccess() bool { return false } // IsRedirect returns true when this delete silence not found response has a 3xx status code func (o *DeleteSilenceNotFound) IsRedirect() bool { return false } // IsClientError returns true when this delete silence not found response has a 4xx status code func (o *DeleteSilenceNotFound) IsClientError() bool { return true } // IsServerError returns true when this delete silence not found response has a 5xx status code func (o *DeleteSilenceNotFound) IsServerError() bool { return false } // IsCode returns true when this delete silence not found response a status code equal to that given func (o *DeleteSilenceNotFound) IsCode(code int) bool { return code == 404 } // Code gets the status code for the delete silence not found response func (o *DeleteSilenceNotFound) Code() int { return 404 } func (o *DeleteSilenceNotFound) Error() string { return fmt.Sprintf("[DELETE /silence/{silenceID}][%d] deleteSilenceNotFound ", 404) } func (o *DeleteSilenceNotFound) String() string { return fmt.Sprintf("[DELETE /silence/{silenceID}][%d] deleteSilenceNotFound ", 404) } func (o *DeleteSilenceNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { return nil } // NewDeleteSilenceInternalServerError creates a DeleteSilenceInternalServerError with default headers values func NewDeleteSilenceInternalServerError() *DeleteSilenceInternalServerError { return &DeleteSilenceInternalServerError{} } /* DeleteSilenceInternalServerError describes a response with status code 500, with default header values. Internal server error */ type DeleteSilenceInternalServerError struct { Payload string } // IsSuccess returns true when this delete silence internal server error response has a 2xx status code func (o *DeleteSilenceInternalServerError) IsSuccess() bool { return false } // IsRedirect returns true when this delete silence internal server error response has a 3xx status code func (o *DeleteSilenceInternalServerError) IsRedirect() bool { return false } // IsClientError returns true when this delete silence internal server error response has a 4xx status code func (o *DeleteSilenceInternalServerError) IsClientError() bool { return false } // IsServerError returns true when this delete silence internal server error response has a 5xx status code func (o *DeleteSilenceInternalServerError) IsServerError() bool { return true } // IsCode returns true when this delete silence internal server error response a status code equal to that given func (o *DeleteSilenceInternalServerError) IsCode(code int) bool { return code == 500 } // Code gets the status code for the delete silence internal server error response func (o *DeleteSilenceInternalServerError) Code() int { return 500 } func (o *DeleteSilenceInternalServerError) Error() string { return fmt.Sprintf("[DELETE /silence/{silenceID}][%d] deleteSilenceInternalServerError %+v", 500, o.Payload) } func (o *DeleteSilenceInternalServerError) String() string { return fmt.Sprintf("[DELETE /silence/{silenceID}][%d] deleteSilenceInternalServerError %+v", 500, o.Payload) } func (o *DeleteSilenceInternalServerError) GetPayload() string { return o.Payload } func (o *DeleteSilenceInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/silence/get_silence_parameters.go000066400000000000000000000112051476331240200300730ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "net/http" "time" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" ) // NewGetSilenceParams creates a new GetSilenceParams object, // with the default timeout for this client. // // Default values are not hydrated, since defaults are normally applied by the API server side. // // To enforce default values in parameter, use SetDefaults or WithDefaults. func NewGetSilenceParams() *GetSilenceParams { return &GetSilenceParams{ timeout: cr.DefaultTimeout, } } // NewGetSilenceParamsWithTimeout creates a new GetSilenceParams object // with the ability to set a timeout on a request. func NewGetSilenceParamsWithTimeout(timeout time.Duration) *GetSilenceParams { return &GetSilenceParams{ timeout: timeout, } } // NewGetSilenceParamsWithContext creates a new GetSilenceParams object // with the ability to set a context for a request. func NewGetSilenceParamsWithContext(ctx context.Context) *GetSilenceParams { return &GetSilenceParams{ Context: ctx, } } // NewGetSilenceParamsWithHTTPClient creates a new GetSilenceParams object // with the ability to set a custom HTTPClient for a request. func NewGetSilenceParamsWithHTTPClient(client *http.Client) *GetSilenceParams { return &GetSilenceParams{ HTTPClient: client, } } /* GetSilenceParams contains all the parameters to send to the API endpoint for the get silence operation. Typically these are written to a http.Request. */ type GetSilenceParams struct { /* SilenceID. ID of the silence to get Format: uuid */ SilenceID strfmt.UUID timeout time.Duration Context context.Context HTTPClient *http.Client } // WithDefaults hydrates default values in the get silence params (not the query body). // // All values with no default are reset to their zero value. func (o *GetSilenceParams) WithDefaults() *GetSilenceParams { o.SetDefaults() return o } // SetDefaults hydrates default values in the get silence params (not the query body). // // All values with no default are reset to their zero value. func (o *GetSilenceParams) SetDefaults() { // no default values defined for this parameter } // WithTimeout adds the timeout to the get silence params func (o *GetSilenceParams) WithTimeout(timeout time.Duration) *GetSilenceParams { o.SetTimeout(timeout) return o } // SetTimeout adds the timeout to the get silence params func (o *GetSilenceParams) SetTimeout(timeout time.Duration) { o.timeout = timeout } // WithContext adds the context to the get silence params func (o *GetSilenceParams) WithContext(ctx context.Context) *GetSilenceParams { o.SetContext(ctx) return o } // SetContext adds the context to the get silence params func (o *GetSilenceParams) SetContext(ctx context.Context) { o.Context = ctx } // WithHTTPClient adds the HTTPClient to the get silence params func (o *GetSilenceParams) WithHTTPClient(client *http.Client) *GetSilenceParams { o.SetHTTPClient(client) return o } // SetHTTPClient adds the HTTPClient to the get silence params func (o *GetSilenceParams) SetHTTPClient(client *http.Client) { o.HTTPClient = client } // WithSilenceID adds the silenceID to the get silence params func (o *GetSilenceParams) WithSilenceID(silenceID strfmt.UUID) *GetSilenceParams { o.SetSilenceID(silenceID) return o } // SetSilenceID adds the silenceId to the get silence params func (o *GetSilenceParams) SetSilenceID(silenceID strfmt.UUID) { o.SilenceID = silenceID } // WriteToRequest writes these params to a swagger request func (o *GetSilenceParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { if err := r.SetTimeout(o.timeout); err != nil { return err } var res []error // path param silenceID if err := r.SetPathParam("silenceID", o.SilenceID.String()); err != nil { return err } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/silence/get_silence_responses.go000066400000000000000000000166371476331240200277670ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/models" ) // GetSilenceReader is a Reader for the GetSilence structure. type GetSilenceReader struct { formats strfmt.Registry } // ReadResponse reads a server response into the received o. func (o *GetSilenceReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { switch response.Code() { case 200: result := NewGetSilenceOK() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return result, nil case 404: result := NewGetSilenceNotFound() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result case 500: result := NewGetSilenceInternalServerError() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result default: return nil, runtime.NewAPIError("[GET /silence/{silenceID}] getSilence", response, response.Code()) } } // NewGetSilenceOK creates a GetSilenceOK with default headers values func NewGetSilenceOK() *GetSilenceOK { return &GetSilenceOK{} } /* GetSilenceOK describes a response with status code 200, with default header values. Get silence response */ type GetSilenceOK struct { Payload *models.GettableSilence } // IsSuccess returns true when this get silence o k response has a 2xx status code func (o *GetSilenceOK) IsSuccess() bool { return true } // IsRedirect returns true when this get silence o k response has a 3xx status code func (o *GetSilenceOK) IsRedirect() bool { return false } // IsClientError returns true when this get silence o k response has a 4xx status code func (o *GetSilenceOK) IsClientError() bool { return false } // IsServerError returns true when this get silence o k response has a 5xx status code func (o *GetSilenceOK) IsServerError() bool { return false } // IsCode returns true when this get silence o k response a status code equal to that given func (o *GetSilenceOK) IsCode(code int) bool { return code == 200 } // Code gets the status code for the get silence o k response func (o *GetSilenceOK) Code() int { return 200 } func (o *GetSilenceOK) Error() string { return fmt.Sprintf("[GET /silence/{silenceID}][%d] getSilenceOK %+v", 200, o.Payload) } func (o *GetSilenceOK) String() string { return fmt.Sprintf("[GET /silence/{silenceID}][%d] getSilenceOK %+v", 200, o.Payload) } func (o *GetSilenceOK) GetPayload() *models.GettableSilence { return o.Payload } func (o *GetSilenceOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { o.Payload = new(models.GettableSilence) // response payload if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { return err } return nil } // NewGetSilenceNotFound creates a GetSilenceNotFound with default headers values func NewGetSilenceNotFound() *GetSilenceNotFound { return &GetSilenceNotFound{} } /* GetSilenceNotFound describes a response with status code 404, with default header values. A silence with the specified ID was not found */ type GetSilenceNotFound struct { } // IsSuccess returns true when this get silence not found response has a 2xx status code func (o *GetSilenceNotFound) IsSuccess() bool { return false } // IsRedirect returns true when this get silence not found response has a 3xx status code func (o *GetSilenceNotFound) IsRedirect() bool { return false } // IsClientError returns true when this get silence not found response has a 4xx status code func (o *GetSilenceNotFound) IsClientError() bool { return true } // IsServerError returns true when this get silence not found response has a 5xx status code func (o *GetSilenceNotFound) IsServerError() bool { return false } // IsCode returns true when this get silence not found response a status code equal to that given func (o *GetSilenceNotFound) IsCode(code int) bool { return code == 404 } // Code gets the status code for the get silence not found response func (o *GetSilenceNotFound) Code() int { return 404 } func (o *GetSilenceNotFound) Error() string { return fmt.Sprintf("[GET /silence/{silenceID}][%d] getSilenceNotFound ", 404) } func (o *GetSilenceNotFound) String() string { return fmt.Sprintf("[GET /silence/{silenceID}][%d] getSilenceNotFound ", 404) } func (o *GetSilenceNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { return nil } // NewGetSilenceInternalServerError creates a GetSilenceInternalServerError with default headers values func NewGetSilenceInternalServerError() *GetSilenceInternalServerError { return &GetSilenceInternalServerError{} } /* GetSilenceInternalServerError describes a response with status code 500, with default header values. Internal server error */ type GetSilenceInternalServerError struct { Payload string } // IsSuccess returns true when this get silence internal server error response has a 2xx status code func (o *GetSilenceInternalServerError) IsSuccess() bool { return false } // IsRedirect returns true when this get silence internal server error response has a 3xx status code func (o *GetSilenceInternalServerError) IsRedirect() bool { return false } // IsClientError returns true when this get silence internal server error response has a 4xx status code func (o *GetSilenceInternalServerError) IsClientError() bool { return false } // IsServerError returns true when this get silence internal server error response has a 5xx status code func (o *GetSilenceInternalServerError) IsServerError() bool { return true } // IsCode returns true when this get silence internal server error response a status code equal to that given func (o *GetSilenceInternalServerError) IsCode(code int) bool { return code == 500 } // Code gets the status code for the get silence internal server error response func (o *GetSilenceInternalServerError) Code() int { return 500 } func (o *GetSilenceInternalServerError) Error() string { return fmt.Sprintf("[GET /silence/{silenceID}][%d] getSilenceInternalServerError %+v", 500, o.Payload) } func (o *GetSilenceInternalServerError) String() string { return fmt.Sprintf("[GET /silence/{silenceID}][%d] getSilenceInternalServerError %+v", 500, o.Payload) } func (o *GetSilenceInternalServerError) GetPayload() string { return o.Payload } func (o *GetSilenceInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/silence/get_silences_parameters.go000066400000000000000000000122631476331240200302630ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "net/http" "time" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) // NewGetSilencesParams creates a new GetSilencesParams object, // with the default timeout for this client. // // Default values are not hydrated, since defaults are normally applied by the API server side. // // To enforce default values in parameter, use SetDefaults or WithDefaults. func NewGetSilencesParams() *GetSilencesParams { return &GetSilencesParams{ timeout: cr.DefaultTimeout, } } // NewGetSilencesParamsWithTimeout creates a new GetSilencesParams object // with the ability to set a timeout on a request. func NewGetSilencesParamsWithTimeout(timeout time.Duration) *GetSilencesParams { return &GetSilencesParams{ timeout: timeout, } } // NewGetSilencesParamsWithContext creates a new GetSilencesParams object // with the ability to set a context for a request. func NewGetSilencesParamsWithContext(ctx context.Context) *GetSilencesParams { return &GetSilencesParams{ Context: ctx, } } // NewGetSilencesParamsWithHTTPClient creates a new GetSilencesParams object // with the ability to set a custom HTTPClient for a request. func NewGetSilencesParamsWithHTTPClient(client *http.Client) *GetSilencesParams { return &GetSilencesParams{ HTTPClient: client, } } /* GetSilencesParams contains all the parameters to send to the API endpoint for the get silences operation. Typically these are written to a http.Request. */ type GetSilencesParams struct { /* Filter. A list of matchers to filter silences by */ Filter []string timeout time.Duration Context context.Context HTTPClient *http.Client } // WithDefaults hydrates default values in the get silences params (not the query body). // // All values with no default are reset to their zero value. func (o *GetSilencesParams) WithDefaults() *GetSilencesParams { o.SetDefaults() return o } // SetDefaults hydrates default values in the get silences params (not the query body). // // All values with no default are reset to their zero value. func (o *GetSilencesParams) SetDefaults() { // no default values defined for this parameter } // WithTimeout adds the timeout to the get silences params func (o *GetSilencesParams) WithTimeout(timeout time.Duration) *GetSilencesParams { o.SetTimeout(timeout) return o } // SetTimeout adds the timeout to the get silences params func (o *GetSilencesParams) SetTimeout(timeout time.Duration) { o.timeout = timeout } // WithContext adds the context to the get silences params func (o *GetSilencesParams) WithContext(ctx context.Context) *GetSilencesParams { o.SetContext(ctx) return o } // SetContext adds the context to the get silences params func (o *GetSilencesParams) SetContext(ctx context.Context) { o.Context = ctx } // WithHTTPClient adds the HTTPClient to the get silences params func (o *GetSilencesParams) WithHTTPClient(client *http.Client) *GetSilencesParams { o.SetHTTPClient(client) return o } // SetHTTPClient adds the HTTPClient to the get silences params func (o *GetSilencesParams) SetHTTPClient(client *http.Client) { o.HTTPClient = client } // WithFilter adds the filter to the get silences params func (o *GetSilencesParams) WithFilter(filter []string) *GetSilencesParams { o.SetFilter(filter) return o } // SetFilter adds the filter to the get silences params func (o *GetSilencesParams) SetFilter(filter []string) { o.Filter = filter } // WriteToRequest writes these params to a swagger request func (o *GetSilencesParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { if err := r.SetTimeout(o.timeout); err != nil { return err } var res []error if o.Filter != nil { // binding items for filter joinedFilter := o.bindParamFilter(reg) // query array param filter if err := r.SetQueryParam("filter", joinedFilter...); err != nil { return err } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // bindParamGetSilences binds the parameter filter func (o *GetSilencesParams) bindParamFilter(formats strfmt.Registry) []string { filterIR := o.Filter var filterIC []string for _, filterIIR := range filterIR { // explode []string filterIIV := filterIIR // string as string filterIC = append(filterIC, filterIIV) } // items.CollectionFormat: "multi" filterIS := swag.JoinByFormat(filterIC, "multi") return filterIS } prometheus-alertmanager-0.28.1+ds/api/v2/client/silence/get_silences_responses.go000066400000000000000000000172031476331240200301400ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/models" ) // GetSilencesReader is a Reader for the GetSilences structure. type GetSilencesReader struct { formats strfmt.Registry } // ReadResponse reads a server response into the received o. func (o *GetSilencesReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { switch response.Code() { case 200: result := NewGetSilencesOK() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return result, nil case 400: result := NewGetSilencesBadRequest() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result case 500: result := NewGetSilencesInternalServerError() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result default: return nil, runtime.NewAPIError("[GET /silences] getSilences", response, response.Code()) } } // NewGetSilencesOK creates a GetSilencesOK with default headers values func NewGetSilencesOK() *GetSilencesOK { return &GetSilencesOK{} } /* GetSilencesOK describes a response with status code 200, with default header values. Get silences response */ type GetSilencesOK struct { Payload models.GettableSilences } // IsSuccess returns true when this get silences o k response has a 2xx status code func (o *GetSilencesOK) IsSuccess() bool { return true } // IsRedirect returns true when this get silences o k response has a 3xx status code func (o *GetSilencesOK) IsRedirect() bool { return false } // IsClientError returns true when this get silences o k response has a 4xx status code func (o *GetSilencesOK) IsClientError() bool { return false } // IsServerError returns true when this get silences o k response has a 5xx status code func (o *GetSilencesOK) IsServerError() bool { return false } // IsCode returns true when this get silences o k response a status code equal to that given func (o *GetSilencesOK) IsCode(code int) bool { return code == 200 } // Code gets the status code for the get silences o k response func (o *GetSilencesOK) Code() int { return 200 } func (o *GetSilencesOK) Error() string { return fmt.Sprintf("[GET /silences][%d] getSilencesOK %+v", 200, o.Payload) } func (o *GetSilencesOK) String() string { return fmt.Sprintf("[GET /silences][%d] getSilencesOK %+v", 200, o.Payload) } func (o *GetSilencesOK) GetPayload() models.GettableSilences { return o.Payload } func (o *GetSilencesOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } // NewGetSilencesBadRequest creates a GetSilencesBadRequest with default headers values func NewGetSilencesBadRequest() *GetSilencesBadRequest { return &GetSilencesBadRequest{} } /* GetSilencesBadRequest describes a response with status code 400, with default header values. Bad request */ type GetSilencesBadRequest struct { Payload string } // IsSuccess returns true when this get silences bad request response has a 2xx status code func (o *GetSilencesBadRequest) IsSuccess() bool { return false } // IsRedirect returns true when this get silences bad request response has a 3xx status code func (o *GetSilencesBadRequest) IsRedirect() bool { return false } // IsClientError returns true when this get silences bad request response has a 4xx status code func (o *GetSilencesBadRequest) IsClientError() bool { return true } // IsServerError returns true when this get silences bad request response has a 5xx status code func (o *GetSilencesBadRequest) IsServerError() bool { return false } // IsCode returns true when this get silences bad request response a status code equal to that given func (o *GetSilencesBadRequest) IsCode(code int) bool { return code == 400 } // Code gets the status code for the get silences bad request response func (o *GetSilencesBadRequest) Code() int { return 400 } func (o *GetSilencesBadRequest) Error() string { return fmt.Sprintf("[GET /silences][%d] getSilencesBadRequest %+v", 400, o.Payload) } func (o *GetSilencesBadRequest) String() string { return fmt.Sprintf("[GET /silences][%d] getSilencesBadRequest %+v", 400, o.Payload) } func (o *GetSilencesBadRequest) GetPayload() string { return o.Payload } func (o *GetSilencesBadRequest) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } // NewGetSilencesInternalServerError creates a GetSilencesInternalServerError with default headers values func NewGetSilencesInternalServerError() *GetSilencesInternalServerError { return &GetSilencesInternalServerError{} } /* GetSilencesInternalServerError describes a response with status code 500, with default header values. Internal server error */ type GetSilencesInternalServerError struct { Payload string } // IsSuccess returns true when this get silences internal server error response has a 2xx status code func (o *GetSilencesInternalServerError) IsSuccess() bool { return false } // IsRedirect returns true when this get silences internal server error response has a 3xx status code func (o *GetSilencesInternalServerError) IsRedirect() bool { return false } // IsClientError returns true when this get silences internal server error response has a 4xx status code func (o *GetSilencesInternalServerError) IsClientError() bool { return false } // IsServerError returns true when this get silences internal server error response has a 5xx status code func (o *GetSilencesInternalServerError) IsServerError() bool { return true } // IsCode returns true when this get silences internal server error response a status code equal to that given func (o *GetSilencesInternalServerError) IsCode(code int) bool { return code == 500 } // Code gets the status code for the get silences internal server error response func (o *GetSilencesInternalServerError) Code() int { return 500 } func (o *GetSilencesInternalServerError) Error() string { return fmt.Sprintf("[GET /silences][%d] getSilencesInternalServerError %+v", 500, o.Payload) } func (o *GetSilencesInternalServerError) String() string { return fmt.Sprintf("[GET /silences][%d] getSilencesInternalServerError %+v", 500, o.Payload) } func (o *GetSilencesInternalServerError) GetPayload() string { return o.Payload } func (o *GetSilencesInternalServerError) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/silence/post_silences_parameters.go000066400000000000000000000113721476331240200304710ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "net/http" "time" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" cr "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/models" ) // NewPostSilencesParams creates a new PostSilencesParams object, // with the default timeout for this client. // // Default values are not hydrated, since defaults are normally applied by the API server side. // // To enforce default values in parameter, use SetDefaults or WithDefaults. func NewPostSilencesParams() *PostSilencesParams { return &PostSilencesParams{ timeout: cr.DefaultTimeout, } } // NewPostSilencesParamsWithTimeout creates a new PostSilencesParams object // with the ability to set a timeout on a request. func NewPostSilencesParamsWithTimeout(timeout time.Duration) *PostSilencesParams { return &PostSilencesParams{ timeout: timeout, } } // NewPostSilencesParamsWithContext creates a new PostSilencesParams object // with the ability to set a context for a request. func NewPostSilencesParamsWithContext(ctx context.Context) *PostSilencesParams { return &PostSilencesParams{ Context: ctx, } } // NewPostSilencesParamsWithHTTPClient creates a new PostSilencesParams object // with the ability to set a custom HTTPClient for a request. func NewPostSilencesParamsWithHTTPClient(client *http.Client) *PostSilencesParams { return &PostSilencesParams{ HTTPClient: client, } } /* PostSilencesParams contains all the parameters to send to the API endpoint for the post silences operation. Typically these are written to a http.Request. */ type PostSilencesParams struct { /* Silence. The silence to create */ Silence *models.PostableSilence timeout time.Duration Context context.Context HTTPClient *http.Client } // WithDefaults hydrates default values in the post silences params (not the query body). // // All values with no default are reset to their zero value. func (o *PostSilencesParams) WithDefaults() *PostSilencesParams { o.SetDefaults() return o } // SetDefaults hydrates default values in the post silences params (not the query body). // // All values with no default are reset to their zero value. func (o *PostSilencesParams) SetDefaults() { // no default values defined for this parameter } // WithTimeout adds the timeout to the post silences params func (o *PostSilencesParams) WithTimeout(timeout time.Duration) *PostSilencesParams { o.SetTimeout(timeout) return o } // SetTimeout adds the timeout to the post silences params func (o *PostSilencesParams) SetTimeout(timeout time.Duration) { o.timeout = timeout } // WithContext adds the context to the post silences params func (o *PostSilencesParams) WithContext(ctx context.Context) *PostSilencesParams { o.SetContext(ctx) return o } // SetContext adds the context to the post silences params func (o *PostSilencesParams) SetContext(ctx context.Context) { o.Context = ctx } // WithHTTPClient adds the HTTPClient to the post silences params func (o *PostSilencesParams) WithHTTPClient(client *http.Client) *PostSilencesParams { o.SetHTTPClient(client) return o } // SetHTTPClient adds the HTTPClient to the post silences params func (o *PostSilencesParams) SetHTTPClient(client *http.Client) { o.HTTPClient = client } // WithSilence adds the silence to the post silences params func (o *PostSilencesParams) WithSilence(silence *models.PostableSilence) *PostSilencesParams { o.SetSilence(silence) return o } // SetSilence adds the silence to the post silences params func (o *PostSilencesParams) SetSilence(silence *models.PostableSilence) { o.Silence = silence } // WriteToRequest writes these params to a swagger request func (o *PostSilencesParams) WriteToRequest(r runtime.ClientRequest, reg strfmt.Registry) error { if err := r.SetTimeout(o.timeout); err != nil { return err } var res []error if o.Silence != nil { if err := r.SetBodyParam(o.Silence); err != nil { return err } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/silence/post_silences_responses.go000066400000000000000000000205721476331240200303510ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "fmt" "io" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) // PostSilencesReader is a Reader for the PostSilences structure. type PostSilencesReader struct { formats strfmt.Registry } // ReadResponse reads a server response into the received o. func (o *PostSilencesReader) ReadResponse(response runtime.ClientResponse, consumer runtime.Consumer) (interface{}, error) { switch response.Code() { case 200: result := NewPostSilencesOK() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return result, nil case 400: result := NewPostSilencesBadRequest() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result case 404: result := NewPostSilencesNotFound() if err := result.readResponse(response, consumer, o.formats); err != nil { return nil, err } return nil, result default: return nil, runtime.NewAPIError("[POST /silences] postSilences", response, response.Code()) } } // NewPostSilencesOK creates a PostSilencesOK with default headers values func NewPostSilencesOK() *PostSilencesOK { return &PostSilencesOK{} } /* PostSilencesOK describes a response with status code 200, with default header values. Create / update silence response */ type PostSilencesOK struct { Payload *PostSilencesOKBody } // IsSuccess returns true when this post silences o k response has a 2xx status code func (o *PostSilencesOK) IsSuccess() bool { return true } // IsRedirect returns true when this post silences o k response has a 3xx status code func (o *PostSilencesOK) IsRedirect() bool { return false } // IsClientError returns true when this post silences o k response has a 4xx status code func (o *PostSilencesOK) IsClientError() bool { return false } // IsServerError returns true when this post silences o k response has a 5xx status code func (o *PostSilencesOK) IsServerError() bool { return false } // IsCode returns true when this post silences o k response a status code equal to that given func (o *PostSilencesOK) IsCode(code int) bool { return code == 200 } // Code gets the status code for the post silences o k response func (o *PostSilencesOK) Code() int { return 200 } func (o *PostSilencesOK) Error() string { return fmt.Sprintf("[POST /silences][%d] postSilencesOK %+v", 200, o.Payload) } func (o *PostSilencesOK) String() string { return fmt.Sprintf("[POST /silences][%d] postSilencesOK %+v", 200, o.Payload) } func (o *PostSilencesOK) GetPayload() *PostSilencesOKBody { return o.Payload } func (o *PostSilencesOK) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { o.Payload = new(PostSilencesOKBody) // response payload if err := consumer.Consume(response.Body(), o.Payload); err != nil && err != io.EOF { return err } return nil } // NewPostSilencesBadRequest creates a PostSilencesBadRequest with default headers values func NewPostSilencesBadRequest() *PostSilencesBadRequest { return &PostSilencesBadRequest{} } /* PostSilencesBadRequest describes a response with status code 400, with default header values. Bad request */ type PostSilencesBadRequest struct { Payload string } // IsSuccess returns true when this post silences bad request response has a 2xx status code func (o *PostSilencesBadRequest) IsSuccess() bool { return false } // IsRedirect returns true when this post silences bad request response has a 3xx status code func (o *PostSilencesBadRequest) IsRedirect() bool { return false } // IsClientError returns true when this post silences bad request response has a 4xx status code func (o *PostSilencesBadRequest) IsClientError() bool { return true } // IsServerError returns true when this post silences bad request response has a 5xx status code func (o *PostSilencesBadRequest) IsServerError() bool { return false } // IsCode returns true when this post silences bad request response a status code equal to that given func (o *PostSilencesBadRequest) IsCode(code int) bool { return code == 400 } // Code gets the status code for the post silences bad request response func (o *PostSilencesBadRequest) Code() int { return 400 } func (o *PostSilencesBadRequest) Error() string { return fmt.Sprintf("[POST /silences][%d] postSilencesBadRequest %+v", 400, o.Payload) } func (o *PostSilencesBadRequest) String() string { return fmt.Sprintf("[POST /silences][%d] postSilencesBadRequest %+v", 400, o.Payload) } func (o *PostSilencesBadRequest) GetPayload() string { return o.Payload } func (o *PostSilencesBadRequest) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } // NewPostSilencesNotFound creates a PostSilencesNotFound with default headers values func NewPostSilencesNotFound() *PostSilencesNotFound { return &PostSilencesNotFound{} } /* PostSilencesNotFound describes a response with status code 404, with default header values. A silence with the specified ID was not found */ type PostSilencesNotFound struct { Payload string } // IsSuccess returns true when this post silences not found response has a 2xx status code func (o *PostSilencesNotFound) IsSuccess() bool { return false } // IsRedirect returns true when this post silences not found response has a 3xx status code func (o *PostSilencesNotFound) IsRedirect() bool { return false } // IsClientError returns true when this post silences not found response has a 4xx status code func (o *PostSilencesNotFound) IsClientError() bool { return true } // IsServerError returns true when this post silences not found response has a 5xx status code func (o *PostSilencesNotFound) IsServerError() bool { return false } // IsCode returns true when this post silences not found response a status code equal to that given func (o *PostSilencesNotFound) IsCode(code int) bool { return code == 404 } // Code gets the status code for the post silences not found response func (o *PostSilencesNotFound) Code() int { return 404 } func (o *PostSilencesNotFound) Error() string { return fmt.Sprintf("[POST /silences][%d] postSilencesNotFound %+v", 404, o.Payload) } func (o *PostSilencesNotFound) String() string { return fmt.Sprintf("[POST /silences][%d] postSilencesNotFound %+v", 404, o.Payload) } func (o *PostSilencesNotFound) GetPayload() string { return o.Payload } func (o *PostSilencesNotFound) readResponse(response runtime.ClientResponse, consumer runtime.Consumer, formats strfmt.Registry) error { // response payload if err := consumer.Consume(response.Body(), &o.Payload); err != nil && err != io.EOF { return err } return nil } /* PostSilencesOKBody post silences o k body swagger:model PostSilencesOKBody */ type PostSilencesOKBody struct { // silence ID SilenceID string `json:"silenceID,omitempty"` } // Validate validates this post silences o k body func (o *PostSilencesOKBody) Validate(formats strfmt.Registry) error { return nil } // ContextValidate validates this post silences o k body based on context it is used func (o *PostSilencesOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { return nil } // MarshalBinary interface implementation func (o *PostSilencesOKBody) MarshalBinary() ([]byte, error) { if o == nil { return nil, nil } return swag.WriteJSON(o) } // UnmarshalBinary interface implementation func (o *PostSilencesOKBody) UnmarshalBinary(b []byte) error { var res PostSilencesOKBody if err := swag.ReadJSON(b, &res); err != nil { return err } *o = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/client/silence/silence_client.go000066400000000000000000000153311476331240200263530ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "github.com/go-openapi/runtime" "github.com/go-openapi/strfmt" ) // New creates a new silence API client. func New(transport runtime.ClientTransport, formats strfmt.Registry) ClientService { return &Client{transport: transport, formats: formats} } /* Client for silence API */ type Client struct { transport runtime.ClientTransport formats strfmt.Registry } // ClientOption is the option for Client methods type ClientOption func(*runtime.ClientOperation) // ClientService is the interface for Client methods type ClientService interface { DeleteSilence(params *DeleteSilenceParams, opts ...ClientOption) (*DeleteSilenceOK, error) GetSilence(params *GetSilenceParams, opts ...ClientOption) (*GetSilenceOK, error) GetSilences(params *GetSilencesParams, opts ...ClientOption) (*GetSilencesOK, error) PostSilences(params *PostSilencesParams, opts ...ClientOption) (*PostSilencesOK, error) SetTransport(transport runtime.ClientTransport) } /* DeleteSilence Delete a silence by its ID */ func (a *Client) DeleteSilence(params *DeleteSilenceParams, opts ...ClientOption) (*DeleteSilenceOK, error) { // TODO: Validate the params before sending if params == nil { params = NewDeleteSilenceParams() } op := &runtime.ClientOperation{ ID: "deleteSilence", Method: "DELETE", PathPattern: "/silence/{silenceID}", ProducesMediaTypes: []string{"application/json"}, ConsumesMediaTypes: []string{"application/json"}, Schemes: []string{"http"}, Params: params, Reader: &DeleteSilenceReader{formats: a.formats}, Context: params.Context, Client: params.HTTPClient, } for _, opt := range opts { opt(op) } result, err := a.transport.Submit(op) if err != nil { return nil, err } success, ok := result.(*DeleteSilenceOK) if ok { return success, nil } // unexpected success response // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue msg := fmt.Sprintf("unexpected success response for deleteSilence: API contract not enforced by server. Client expected to get an error, but got: %T", result) panic(msg) } /* GetSilence Get a silence by its ID */ func (a *Client) GetSilence(params *GetSilenceParams, opts ...ClientOption) (*GetSilenceOK, error) { // TODO: Validate the params before sending if params == nil { params = NewGetSilenceParams() } op := &runtime.ClientOperation{ ID: "getSilence", Method: "GET", PathPattern: "/silence/{silenceID}", ProducesMediaTypes: []string{"application/json"}, ConsumesMediaTypes: []string{"application/json"}, Schemes: []string{"http"}, Params: params, Reader: &GetSilenceReader{formats: a.formats}, Context: params.Context, Client: params.HTTPClient, } for _, opt := range opts { opt(op) } result, err := a.transport.Submit(op) if err != nil { return nil, err } success, ok := result.(*GetSilenceOK) if ok { return success, nil } // unexpected success response // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue msg := fmt.Sprintf("unexpected success response for getSilence: API contract not enforced by server. Client expected to get an error, but got: %T", result) panic(msg) } /* GetSilences Get a list of silences */ func (a *Client) GetSilences(params *GetSilencesParams, opts ...ClientOption) (*GetSilencesOK, error) { // TODO: Validate the params before sending if params == nil { params = NewGetSilencesParams() } op := &runtime.ClientOperation{ ID: "getSilences", Method: "GET", PathPattern: "/silences", ProducesMediaTypes: []string{"application/json"}, ConsumesMediaTypes: []string{"application/json"}, Schemes: []string{"http"}, Params: params, Reader: &GetSilencesReader{formats: a.formats}, Context: params.Context, Client: params.HTTPClient, } for _, opt := range opts { opt(op) } result, err := a.transport.Submit(op) if err != nil { return nil, err } success, ok := result.(*GetSilencesOK) if ok { return success, nil } // unexpected success response // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue msg := fmt.Sprintf("unexpected success response for getSilences: API contract not enforced by server. Client expected to get an error, but got: %T", result) panic(msg) } /* PostSilences Post a new silence or update an existing one */ func (a *Client) PostSilences(params *PostSilencesParams, opts ...ClientOption) (*PostSilencesOK, error) { // TODO: Validate the params before sending if params == nil { params = NewPostSilencesParams() } op := &runtime.ClientOperation{ ID: "postSilences", Method: "POST", PathPattern: "/silences", ProducesMediaTypes: []string{"application/json"}, ConsumesMediaTypes: []string{"application/json"}, Schemes: []string{"http"}, Params: params, Reader: &PostSilencesReader{formats: a.formats}, Context: params.Context, Client: params.HTTPClient, } for _, opt := range opts { opt(op) } result, err := a.transport.Submit(op) if err != nil { return nil, err } success, ok := result.(*PostSilencesOK) if ok { return success, nil } // unexpected success response // safeguard: normally, absent a default response, unknown success responses return an error above: so this is a codegen issue msg := fmt.Sprintf("unexpected success response for postSilences: API contract not enforced by server. Client expected to get an error, but got: %T", result) panic(msg) } // SetTransport changes the transport on the client func (a *Client) SetTransport(transport runtime.ClientTransport) { a.transport = transport } prometheus-alertmanager-0.28.1+ds/api/v2/compat.go000066400000000000000000000137641476331240200217660ustar00rootroot00000000000000// Copyright 2021 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package v2 import ( "fmt" "time" "github.com/go-openapi/strfmt" prometheus_model "github.com/prometheus/common/model" open_api_models "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/silence/silencepb" "github.com/prometheus/alertmanager/types" ) // GettableSilenceFromProto converts *silencepb.Silence to open_api_models.GettableSilence. func GettableSilenceFromProto(s *silencepb.Silence) (open_api_models.GettableSilence, error) { start := strfmt.DateTime(s.StartsAt) end := strfmt.DateTime(s.EndsAt) updated := strfmt.DateTime(s.UpdatedAt) state := string(types.CalcSilenceState(s.StartsAt, s.EndsAt)) sil := open_api_models.GettableSilence{ Silence: open_api_models.Silence{ StartsAt: &start, EndsAt: &end, Comment: &s.Comment, CreatedBy: &s.CreatedBy, }, ID: &s.Id, UpdatedAt: &updated, Status: &open_api_models.SilenceStatus{ State: &state, }, } for _, m := range s.Matchers { matcher := &open_api_models.Matcher{ Name: &m.Name, Value: &m.Pattern, } f := false t := true switch m.Type { case silencepb.Matcher_EQUAL: matcher.IsEqual = &t matcher.IsRegex = &f case silencepb.Matcher_NOT_EQUAL: matcher.IsEqual = &f matcher.IsRegex = &f case silencepb.Matcher_REGEXP: matcher.IsEqual = &t matcher.IsRegex = &t case silencepb.Matcher_NOT_REGEXP: matcher.IsEqual = &f matcher.IsRegex = &t default: return sil, fmt.Errorf( "unknown matcher type for matcher '%v' in silence '%v'", m.Name, s.Id, ) } sil.Matchers = append(sil.Matchers, matcher) } return sil, nil } // PostableSilenceToProto converts *open_api_models.PostableSilenc to *silencepb.Silence. func PostableSilenceToProto(s *open_api_models.PostableSilence) (*silencepb.Silence, error) { sil := &silencepb.Silence{ Id: s.ID, StartsAt: time.Time(*s.StartsAt), EndsAt: time.Time(*s.EndsAt), Comment: *s.Comment, CreatedBy: *s.CreatedBy, } for _, m := range s.Matchers { matcher := &silencepb.Matcher{ Name: *m.Name, Pattern: *m.Value, } isEqual := true if m.IsEqual != nil { isEqual = *m.IsEqual } isRegex := false if m.IsRegex != nil { isRegex = *m.IsRegex } switch { case isEqual && !isRegex: matcher.Type = silencepb.Matcher_EQUAL case !isEqual && !isRegex: matcher.Type = silencepb.Matcher_NOT_EQUAL case isEqual && isRegex: matcher.Type = silencepb.Matcher_REGEXP case !isEqual && isRegex: matcher.Type = silencepb.Matcher_NOT_REGEXP } sil.Matchers = append(sil.Matchers, matcher) } return sil, nil } // AlertToOpenAPIAlert converts internal alerts, alert types, and receivers to *open_api_models.GettableAlert. func AlertToOpenAPIAlert(alert *types.Alert, status types.AlertStatus, receivers, mutedBy []string) *open_api_models.GettableAlert { startsAt := strfmt.DateTime(alert.StartsAt) updatedAt := strfmt.DateTime(alert.UpdatedAt) endsAt := strfmt.DateTime(alert.EndsAt) apiReceivers := make([]*open_api_models.Receiver, 0, len(receivers)) for i := range receivers { apiReceivers = append(apiReceivers, &open_api_models.Receiver{Name: &receivers[i]}) } fp := alert.Fingerprint().String() state := string(status.State) if len(mutedBy) > 0 { // If the alert is muted, change the state to suppressed. state = open_api_models.AlertStatusStateSuppressed } aa := &open_api_models.GettableAlert{ Alert: open_api_models.Alert{ GeneratorURL: strfmt.URI(alert.GeneratorURL), Labels: ModelLabelSetToAPILabelSet(alert.Labels), }, Annotations: ModelLabelSetToAPILabelSet(alert.Annotations), StartsAt: &startsAt, UpdatedAt: &updatedAt, EndsAt: &endsAt, Fingerprint: &fp, Receivers: apiReceivers, Status: &open_api_models.AlertStatus{ State: &state, SilencedBy: status.SilencedBy, InhibitedBy: status.InhibitedBy, MutedBy: mutedBy, }, } if aa.Status.SilencedBy == nil { aa.Status.SilencedBy = []string{} } if aa.Status.InhibitedBy == nil { aa.Status.InhibitedBy = []string{} } if aa.Status.MutedBy == nil { aa.Status.MutedBy = []string{} } return aa } // OpenAPIAlertsToAlerts converts open_api_models.PostableAlerts to []*types.Alert. func OpenAPIAlertsToAlerts(apiAlerts open_api_models.PostableAlerts) []*types.Alert { alerts := []*types.Alert{} for _, apiAlert := range apiAlerts { alert := types.Alert{ Alert: prometheus_model.Alert{ Labels: APILabelSetToModelLabelSet(apiAlert.Labels), Annotations: APILabelSetToModelLabelSet(apiAlert.Annotations), StartsAt: time.Time(apiAlert.StartsAt), EndsAt: time.Time(apiAlert.EndsAt), GeneratorURL: string(apiAlert.GeneratorURL), }, } alerts = append(alerts, &alert) } return alerts } // ModelLabelSetToAPILabelSet converts prometheus_model.LabelSet to open_api_models.LabelSet. func ModelLabelSetToAPILabelSet(modelLabelSet prometheus_model.LabelSet) open_api_models.LabelSet { apiLabelSet := open_api_models.LabelSet{} for key, value := range modelLabelSet { apiLabelSet[string(key)] = string(value) } return apiLabelSet } // APILabelSetToModelLabelSet converts open_api_models.LabelSet to prometheus_model.LabelSet. func APILabelSetToModelLabelSet(apiLabelSet open_api_models.LabelSet) prometheus_model.LabelSet { modelLabelSet := prometheus_model.LabelSet{} for key, value := range apiLabelSet { modelLabelSet[prometheus_model.LabelName(key)] = prometheus_model.LabelValue(value) } return modelLabelSet } prometheus-alertmanager-0.28.1+ds/api/v2/models/000077500000000000000000000000001476331240200214245ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/models/alert.go000066400000000000000000000063631476331240200230720ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // Alert alert // // swagger:model alert type Alert struct { // generator URL // Format: uri GeneratorURL strfmt.URI `json:"generatorURL,omitempty"` // labels // Required: true Labels LabelSet `json:"labels"` } // Validate validates this alert func (m *Alert) Validate(formats strfmt.Registry) error { var res []error if err := m.validateGeneratorURL(formats); err != nil { res = append(res, err) } if err := m.validateLabels(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *Alert) validateGeneratorURL(formats strfmt.Registry) error { if swag.IsZero(m.GeneratorURL) { // not required return nil } if err := validate.FormatOf("generatorURL", "body", "uri", m.GeneratorURL.String(), formats); err != nil { return err } return nil } func (m *Alert) validateLabels(formats strfmt.Registry) error { if err := validate.Required("labels", "body", m.Labels); err != nil { return err } if m.Labels != nil { if err := m.Labels.Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("labels") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("labels") } return err } } return nil } // ContextValidate validate this alert based on the context it is used func (m *Alert) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error if err := m.contextValidateLabels(ctx, formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *Alert) contextValidateLabels(ctx context.Context, formats strfmt.Registry) error { if err := m.Labels.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("labels") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("labels") } return err } return nil } // MarshalBinary interface implementation func (m *Alert) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *Alert) UnmarshalBinary(b []byte) error { var res Alert if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/alert_group.go000066400000000000000000000126241476331240200243030ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "strconv" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // AlertGroup alert group // // swagger:model alertGroup type AlertGroup struct { // alerts // Required: true Alerts []*GettableAlert `json:"alerts"` // labels // Required: true Labels LabelSet `json:"labels"` // receiver // Required: true Receiver *Receiver `json:"receiver"` } // Validate validates this alert group func (m *AlertGroup) Validate(formats strfmt.Registry) error { var res []error if err := m.validateAlerts(formats); err != nil { res = append(res, err) } if err := m.validateLabels(formats); err != nil { res = append(res, err) } if err := m.validateReceiver(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *AlertGroup) validateAlerts(formats strfmt.Registry) error { if err := validate.Required("alerts", "body", m.Alerts); err != nil { return err } for i := 0; i < len(m.Alerts); i++ { if swag.IsZero(m.Alerts[i]) { // not required continue } if m.Alerts[i] != nil { if err := m.Alerts[i].Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("alerts" + "." + strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("alerts" + "." + strconv.Itoa(i)) } return err } } } return nil } func (m *AlertGroup) validateLabels(formats strfmt.Registry) error { if err := validate.Required("labels", "body", m.Labels); err != nil { return err } if m.Labels != nil { if err := m.Labels.Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("labels") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("labels") } return err } } return nil } func (m *AlertGroup) validateReceiver(formats strfmt.Registry) error { if err := validate.Required("receiver", "body", m.Receiver); err != nil { return err } if m.Receiver != nil { if err := m.Receiver.Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("receiver") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("receiver") } return err } } return nil } // ContextValidate validate this alert group based on the context it is used func (m *AlertGroup) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error if err := m.contextValidateAlerts(ctx, formats); err != nil { res = append(res, err) } if err := m.contextValidateLabels(ctx, formats); err != nil { res = append(res, err) } if err := m.contextValidateReceiver(ctx, formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *AlertGroup) contextValidateAlerts(ctx context.Context, formats strfmt.Registry) error { for i := 0; i < len(m.Alerts); i++ { if m.Alerts[i] != nil { if swag.IsZero(m.Alerts[i]) { // not required return nil } if err := m.Alerts[i].ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("alerts" + "." + strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("alerts" + "." + strconv.Itoa(i)) } return err } } } return nil } func (m *AlertGroup) contextValidateLabels(ctx context.Context, formats strfmt.Registry) error { if err := m.Labels.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("labels") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("labels") } return err } return nil } func (m *AlertGroup) contextValidateReceiver(ctx context.Context, formats strfmt.Registry) error { if m.Receiver != nil { if err := m.Receiver.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("receiver") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("receiver") } return err } } return nil } // MarshalBinary interface implementation func (m *AlertGroup) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *AlertGroup) UnmarshalBinary(b []byte) error { var res AlertGroup if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/alert_groups.go000066400000000000000000000043501476331240200244630ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "strconv" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) // AlertGroups alert groups // // swagger:model alertGroups type AlertGroups []*AlertGroup // Validate validates this alert groups func (m AlertGroups) Validate(formats strfmt.Registry) error { var res []error for i := 0; i < len(m); i++ { if swag.IsZero(m[i]) { // not required continue } if m[i] != nil { if err := m[i].Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName(strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName(strconv.Itoa(i)) } return err } } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // ContextValidate validate this alert groups based on the context it is used func (m AlertGroups) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error for i := 0; i < len(m); i++ { if m[i] != nil { if swag.IsZero(m[i]) { // not required return nil } if err := m[i].ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName(strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName(strconv.Itoa(i)) } return err } } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/alert_status.go000066400000000000000000000101001476331240200244550ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "encoding/json" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // AlertStatus alert status // // swagger:model alertStatus type AlertStatus struct { // inhibited by // Required: true InhibitedBy []string `json:"inhibitedBy"` // muted by // Required: true MutedBy []string `json:"mutedBy"` // silenced by // Required: true SilencedBy []string `json:"silencedBy"` // state // Required: true // Enum: [unprocessed active suppressed] State *string `json:"state"` } // Validate validates this alert status func (m *AlertStatus) Validate(formats strfmt.Registry) error { var res []error if err := m.validateInhibitedBy(formats); err != nil { res = append(res, err) } if err := m.validateMutedBy(formats); err != nil { res = append(res, err) } if err := m.validateSilencedBy(formats); err != nil { res = append(res, err) } if err := m.validateState(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *AlertStatus) validateInhibitedBy(formats strfmt.Registry) error { if err := validate.Required("inhibitedBy", "body", m.InhibitedBy); err != nil { return err } return nil } func (m *AlertStatus) validateMutedBy(formats strfmt.Registry) error { if err := validate.Required("mutedBy", "body", m.MutedBy); err != nil { return err } return nil } func (m *AlertStatus) validateSilencedBy(formats strfmt.Registry) error { if err := validate.Required("silencedBy", "body", m.SilencedBy); err != nil { return err } return nil } var alertStatusTypeStatePropEnum []interface{} func init() { var res []string if err := json.Unmarshal([]byte(`["unprocessed","active","suppressed"]`), &res); err != nil { panic(err) } for _, v := range res { alertStatusTypeStatePropEnum = append(alertStatusTypeStatePropEnum, v) } } const ( // AlertStatusStateUnprocessed captures enum value "unprocessed" AlertStatusStateUnprocessed string = "unprocessed" // AlertStatusStateActive captures enum value "active" AlertStatusStateActive string = "active" // AlertStatusStateSuppressed captures enum value "suppressed" AlertStatusStateSuppressed string = "suppressed" ) // prop value enum func (m *AlertStatus) validateStateEnum(path, location string, value string) error { if err := validate.EnumCase(path, location, value, alertStatusTypeStatePropEnum, true); err != nil { return err } return nil } func (m *AlertStatus) validateState(formats strfmt.Registry) error { if err := validate.Required("state", "body", m.State); err != nil { return err } // value enum if err := m.validateStateEnum("state", "body", *m.State); err != nil { return err } return nil } // ContextValidate validates this alert status based on context it is used func (m *AlertStatus) ContextValidate(ctx context.Context, formats strfmt.Registry) error { return nil } // MarshalBinary interface implementation func (m *AlertStatus) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *AlertStatus) UnmarshalBinary(b []byte) error { var res AlertStatus if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/alertmanager_config.go000066400000000000000000000042271476331240200257470ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // AlertmanagerConfig alertmanager config // // swagger:model alertmanagerConfig type AlertmanagerConfig struct { // original // Required: true Original *string `json:"original"` } // Validate validates this alertmanager config func (m *AlertmanagerConfig) Validate(formats strfmt.Registry) error { var res []error if err := m.validateOriginal(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *AlertmanagerConfig) validateOriginal(formats strfmt.Registry) error { if err := validate.Required("original", "body", m.Original); err != nil { return err } return nil } // ContextValidate validates this alertmanager config based on context it is used func (m *AlertmanagerConfig) ContextValidate(ctx context.Context, formats strfmt.Registry) error { return nil } // MarshalBinary interface implementation func (m *AlertmanagerConfig) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *AlertmanagerConfig) UnmarshalBinary(b []byte) error { var res AlertmanagerConfig if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/alertmanager_status.go000066400000000000000000000134021476331240200260200ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // AlertmanagerStatus alertmanager status // // swagger:model alertmanagerStatus type AlertmanagerStatus struct { // cluster // Required: true Cluster *ClusterStatus `json:"cluster"` // config // Required: true Config *AlertmanagerConfig `json:"config"` // uptime // Required: true // Format: date-time Uptime *strfmt.DateTime `json:"uptime"` // version info // Required: true VersionInfo *VersionInfo `json:"versionInfo"` } // Validate validates this alertmanager status func (m *AlertmanagerStatus) Validate(formats strfmt.Registry) error { var res []error if err := m.validateCluster(formats); err != nil { res = append(res, err) } if err := m.validateConfig(formats); err != nil { res = append(res, err) } if err := m.validateUptime(formats); err != nil { res = append(res, err) } if err := m.validateVersionInfo(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *AlertmanagerStatus) validateCluster(formats strfmt.Registry) error { if err := validate.Required("cluster", "body", m.Cluster); err != nil { return err } if m.Cluster != nil { if err := m.Cluster.Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("cluster") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("cluster") } return err } } return nil } func (m *AlertmanagerStatus) validateConfig(formats strfmt.Registry) error { if err := validate.Required("config", "body", m.Config); err != nil { return err } if m.Config != nil { if err := m.Config.Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("config") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("config") } return err } } return nil } func (m *AlertmanagerStatus) validateUptime(formats strfmt.Registry) error { if err := validate.Required("uptime", "body", m.Uptime); err != nil { return err } if err := validate.FormatOf("uptime", "body", "date-time", m.Uptime.String(), formats); err != nil { return err } return nil } func (m *AlertmanagerStatus) validateVersionInfo(formats strfmt.Registry) error { if err := validate.Required("versionInfo", "body", m.VersionInfo); err != nil { return err } if m.VersionInfo != nil { if err := m.VersionInfo.Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("versionInfo") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("versionInfo") } return err } } return nil } // ContextValidate validate this alertmanager status based on the context it is used func (m *AlertmanagerStatus) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error if err := m.contextValidateCluster(ctx, formats); err != nil { res = append(res, err) } if err := m.contextValidateConfig(ctx, formats); err != nil { res = append(res, err) } if err := m.contextValidateVersionInfo(ctx, formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *AlertmanagerStatus) contextValidateCluster(ctx context.Context, formats strfmt.Registry) error { if m.Cluster != nil { if err := m.Cluster.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("cluster") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("cluster") } return err } } return nil } func (m *AlertmanagerStatus) contextValidateConfig(ctx context.Context, formats strfmt.Registry) error { if m.Config != nil { if err := m.Config.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("config") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("config") } return err } } return nil } func (m *AlertmanagerStatus) contextValidateVersionInfo(ctx context.Context, formats strfmt.Registry) error { if m.VersionInfo != nil { if err := m.VersionInfo.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("versionInfo") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("versionInfo") } return err } } return nil } // MarshalBinary interface implementation func (m *AlertmanagerStatus) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *AlertmanagerStatus) UnmarshalBinary(b []byte) error { var res AlertmanagerStatus if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/cluster_status.go000066400000000000000000000111371476331240200250420ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "encoding/json" "strconv" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // ClusterStatus cluster status // // swagger:model clusterStatus type ClusterStatus struct { // name Name string `json:"name,omitempty"` // peers Peers []*PeerStatus `json:"peers"` // status // Required: true // Enum: [ready settling disabled] Status *string `json:"status"` } // Validate validates this cluster status func (m *ClusterStatus) Validate(formats strfmt.Registry) error { var res []error if err := m.validatePeers(formats); err != nil { res = append(res, err) } if err := m.validateStatus(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *ClusterStatus) validatePeers(formats strfmt.Registry) error { if swag.IsZero(m.Peers) { // not required return nil } for i := 0; i < len(m.Peers); i++ { if swag.IsZero(m.Peers[i]) { // not required continue } if m.Peers[i] != nil { if err := m.Peers[i].Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("peers" + "." + strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("peers" + "." + strconv.Itoa(i)) } return err } } } return nil } var clusterStatusTypeStatusPropEnum []interface{} func init() { var res []string if err := json.Unmarshal([]byte(`["ready","settling","disabled"]`), &res); err != nil { panic(err) } for _, v := range res { clusterStatusTypeStatusPropEnum = append(clusterStatusTypeStatusPropEnum, v) } } const ( // ClusterStatusStatusReady captures enum value "ready" ClusterStatusStatusReady string = "ready" // ClusterStatusStatusSettling captures enum value "settling" ClusterStatusStatusSettling string = "settling" // ClusterStatusStatusDisabled captures enum value "disabled" ClusterStatusStatusDisabled string = "disabled" ) // prop value enum func (m *ClusterStatus) validateStatusEnum(path, location string, value string) error { if err := validate.EnumCase(path, location, value, clusterStatusTypeStatusPropEnum, true); err != nil { return err } return nil } func (m *ClusterStatus) validateStatus(formats strfmt.Registry) error { if err := validate.Required("status", "body", m.Status); err != nil { return err } // value enum if err := m.validateStatusEnum("status", "body", *m.Status); err != nil { return err } return nil } // ContextValidate validate this cluster status based on the context it is used func (m *ClusterStatus) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error if err := m.contextValidatePeers(ctx, formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *ClusterStatus) contextValidatePeers(ctx context.Context, formats strfmt.Registry) error { for i := 0; i < len(m.Peers); i++ { if m.Peers[i] != nil { if swag.IsZero(m.Peers[i]) { // not required return nil } if err := m.Peers[i].ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("peers" + "." + strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("peers" + "." + strconv.Itoa(i)) } return err } } } return nil } // MarshalBinary interface implementation func (m *ClusterStatus) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *ClusterStatus) UnmarshalBinary(b []byte) error { var res ClusterStatus if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/gettable_alert.go000066400000000000000000000226561476331240200247440ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "strconv" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // GettableAlert gettable alert // // swagger:model gettableAlert type GettableAlert struct { // annotations // Required: true Annotations LabelSet `json:"annotations"` // ends at // Required: true // Format: date-time EndsAt *strfmt.DateTime `json:"endsAt"` // fingerprint // Required: true Fingerprint *string `json:"fingerprint"` // receivers // Required: true Receivers []*Receiver `json:"receivers"` // starts at // Required: true // Format: date-time StartsAt *strfmt.DateTime `json:"startsAt"` // status // Required: true Status *AlertStatus `json:"status"` // updated at // Required: true // Format: date-time UpdatedAt *strfmt.DateTime `json:"updatedAt"` Alert } // UnmarshalJSON unmarshals this object from a JSON structure func (m *GettableAlert) UnmarshalJSON(raw []byte) error { // AO0 var dataAO0 struct { Annotations LabelSet `json:"annotations"` EndsAt *strfmt.DateTime `json:"endsAt"` Fingerprint *string `json:"fingerprint"` Receivers []*Receiver `json:"receivers"` StartsAt *strfmt.DateTime `json:"startsAt"` Status *AlertStatus `json:"status"` UpdatedAt *strfmt.DateTime `json:"updatedAt"` } if err := swag.ReadJSON(raw, &dataAO0); err != nil { return err } m.Annotations = dataAO0.Annotations m.EndsAt = dataAO0.EndsAt m.Fingerprint = dataAO0.Fingerprint m.Receivers = dataAO0.Receivers m.StartsAt = dataAO0.StartsAt m.Status = dataAO0.Status m.UpdatedAt = dataAO0.UpdatedAt // AO1 var aO1 Alert if err := swag.ReadJSON(raw, &aO1); err != nil { return err } m.Alert = aO1 return nil } // MarshalJSON marshals this object to a JSON structure func (m GettableAlert) MarshalJSON() ([]byte, error) { _parts := make([][]byte, 0, 2) var dataAO0 struct { Annotations LabelSet `json:"annotations"` EndsAt *strfmt.DateTime `json:"endsAt"` Fingerprint *string `json:"fingerprint"` Receivers []*Receiver `json:"receivers"` StartsAt *strfmt.DateTime `json:"startsAt"` Status *AlertStatus `json:"status"` UpdatedAt *strfmt.DateTime `json:"updatedAt"` } dataAO0.Annotations = m.Annotations dataAO0.EndsAt = m.EndsAt dataAO0.Fingerprint = m.Fingerprint dataAO0.Receivers = m.Receivers dataAO0.StartsAt = m.StartsAt dataAO0.Status = m.Status dataAO0.UpdatedAt = m.UpdatedAt jsonDataAO0, errAO0 := swag.WriteJSON(dataAO0) if errAO0 != nil { return nil, errAO0 } _parts = append(_parts, jsonDataAO0) aO1, err := swag.WriteJSON(m.Alert) if err != nil { return nil, err } _parts = append(_parts, aO1) return swag.ConcatJSON(_parts...), nil } // Validate validates this gettable alert func (m *GettableAlert) Validate(formats strfmt.Registry) error { var res []error if err := m.validateAnnotations(formats); err != nil { res = append(res, err) } if err := m.validateEndsAt(formats); err != nil { res = append(res, err) } if err := m.validateFingerprint(formats); err != nil { res = append(res, err) } if err := m.validateReceivers(formats); err != nil { res = append(res, err) } if err := m.validateStartsAt(formats); err != nil { res = append(res, err) } if err := m.validateStatus(formats); err != nil { res = append(res, err) } if err := m.validateUpdatedAt(formats); err != nil { res = append(res, err) } // validation for a type composition with Alert if err := m.Alert.Validate(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *GettableAlert) validateAnnotations(formats strfmt.Registry) error { if err := validate.Required("annotations", "body", m.Annotations); err != nil { return err } if m.Annotations != nil { if err := m.Annotations.Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("annotations") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("annotations") } return err } } return nil } func (m *GettableAlert) validateEndsAt(formats strfmt.Registry) error { if err := validate.Required("endsAt", "body", m.EndsAt); err != nil { return err } if err := validate.FormatOf("endsAt", "body", "date-time", m.EndsAt.String(), formats); err != nil { return err } return nil } func (m *GettableAlert) validateFingerprint(formats strfmt.Registry) error { if err := validate.Required("fingerprint", "body", m.Fingerprint); err != nil { return err } return nil } func (m *GettableAlert) validateReceivers(formats strfmt.Registry) error { if err := validate.Required("receivers", "body", m.Receivers); err != nil { return err } for i := 0; i < len(m.Receivers); i++ { if swag.IsZero(m.Receivers[i]) { // not required continue } if m.Receivers[i] != nil { if err := m.Receivers[i].Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("receivers" + "." + strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("receivers" + "." + strconv.Itoa(i)) } return err } } } return nil } func (m *GettableAlert) validateStartsAt(formats strfmt.Registry) error { if err := validate.Required("startsAt", "body", m.StartsAt); err != nil { return err } if err := validate.FormatOf("startsAt", "body", "date-time", m.StartsAt.String(), formats); err != nil { return err } return nil } func (m *GettableAlert) validateStatus(formats strfmt.Registry) error { if err := validate.Required("status", "body", m.Status); err != nil { return err } if m.Status != nil { if err := m.Status.Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("status") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("status") } return err } } return nil } func (m *GettableAlert) validateUpdatedAt(formats strfmt.Registry) error { if err := validate.Required("updatedAt", "body", m.UpdatedAt); err != nil { return err } if err := validate.FormatOf("updatedAt", "body", "date-time", m.UpdatedAt.String(), formats); err != nil { return err } return nil } // ContextValidate validate this gettable alert based on the context it is used func (m *GettableAlert) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error if err := m.contextValidateAnnotations(ctx, formats); err != nil { res = append(res, err) } if err := m.contextValidateReceivers(ctx, formats); err != nil { res = append(res, err) } if err := m.contextValidateStatus(ctx, formats); err != nil { res = append(res, err) } // validation for a type composition with Alert if err := m.Alert.ContextValidate(ctx, formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *GettableAlert) contextValidateAnnotations(ctx context.Context, formats strfmt.Registry) error { if err := m.Annotations.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("annotations") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("annotations") } return err } return nil } func (m *GettableAlert) contextValidateReceivers(ctx context.Context, formats strfmt.Registry) error { for i := 0; i < len(m.Receivers); i++ { if m.Receivers[i] != nil { if swag.IsZero(m.Receivers[i]) { // not required return nil } if err := m.Receivers[i].ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("receivers" + "." + strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("receivers" + "." + strconv.Itoa(i)) } return err } } } return nil } func (m *GettableAlert) contextValidateStatus(ctx context.Context, formats strfmt.Registry) error { if m.Status != nil { if err := m.Status.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("status") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("status") } return err } } return nil } // MarshalBinary interface implementation func (m *GettableAlert) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *GettableAlert) UnmarshalBinary(b []byte) error { var res GettableAlert if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/gettable_alerts.go000066400000000000000000000044031476331240200251150ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "strconv" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) // GettableAlerts gettable alerts // // swagger:model gettableAlerts type GettableAlerts []*GettableAlert // Validate validates this gettable alerts func (m GettableAlerts) Validate(formats strfmt.Registry) error { var res []error for i := 0; i < len(m); i++ { if swag.IsZero(m[i]) { // not required continue } if m[i] != nil { if err := m[i].Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName(strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName(strconv.Itoa(i)) } return err } } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // ContextValidate validate this gettable alerts based on the context it is used func (m GettableAlerts) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error for i := 0; i < len(m); i++ { if m[i] != nil { if swag.IsZero(m[i]) { // not required return nil } if err := m[i].ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName(strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName(strconv.Itoa(i)) } return err } } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/gettable_silence.go000066400000000000000000000122761476331240200252540ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // GettableSilence gettable silence // // swagger:model gettableSilence type GettableSilence struct { // id // Required: true ID *string `json:"id"` // status // Required: true Status *SilenceStatus `json:"status"` // updated at // Required: true // Format: date-time UpdatedAt *strfmt.DateTime `json:"updatedAt"` Silence } // UnmarshalJSON unmarshals this object from a JSON structure func (m *GettableSilence) UnmarshalJSON(raw []byte) error { // AO0 var dataAO0 struct { ID *string `json:"id"` Status *SilenceStatus `json:"status"` UpdatedAt *strfmt.DateTime `json:"updatedAt"` } if err := swag.ReadJSON(raw, &dataAO0); err != nil { return err } m.ID = dataAO0.ID m.Status = dataAO0.Status m.UpdatedAt = dataAO0.UpdatedAt // AO1 var aO1 Silence if err := swag.ReadJSON(raw, &aO1); err != nil { return err } m.Silence = aO1 return nil } // MarshalJSON marshals this object to a JSON structure func (m GettableSilence) MarshalJSON() ([]byte, error) { _parts := make([][]byte, 0, 2) var dataAO0 struct { ID *string `json:"id"` Status *SilenceStatus `json:"status"` UpdatedAt *strfmt.DateTime `json:"updatedAt"` } dataAO0.ID = m.ID dataAO0.Status = m.Status dataAO0.UpdatedAt = m.UpdatedAt jsonDataAO0, errAO0 := swag.WriteJSON(dataAO0) if errAO0 != nil { return nil, errAO0 } _parts = append(_parts, jsonDataAO0) aO1, err := swag.WriteJSON(m.Silence) if err != nil { return nil, err } _parts = append(_parts, aO1) return swag.ConcatJSON(_parts...), nil } // Validate validates this gettable silence func (m *GettableSilence) Validate(formats strfmt.Registry) error { var res []error if err := m.validateID(formats); err != nil { res = append(res, err) } if err := m.validateStatus(formats); err != nil { res = append(res, err) } if err := m.validateUpdatedAt(formats); err != nil { res = append(res, err) } // validation for a type composition with Silence if err := m.Silence.Validate(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *GettableSilence) validateID(formats strfmt.Registry) error { if err := validate.Required("id", "body", m.ID); err != nil { return err } return nil } func (m *GettableSilence) validateStatus(formats strfmt.Registry) error { if err := validate.Required("status", "body", m.Status); err != nil { return err } if m.Status != nil { if err := m.Status.Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("status") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("status") } return err } } return nil } func (m *GettableSilence) validateUpdatedAt(formats strfmt.Registry) error { if err := validate.Required("updatedAt", "body", m.UpdatedAt); err != nil { return err } if err := validate.FormatOf("updatedAt", "body", "date-time", m.UpdatedAt.String(), formats); err != nil { return err } return nil } // ContextValidate validate this gettable silence based on the context it is used func (m *GettableSilence) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error if err := m.contextValidateStatus(ctx, formats); err != nil { res = append(res, err) } // validation for a type composition with Silence if err := m.Silence.ContextValidate(ctx, formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *GettableSilence) contextValidateStatus(ctx context.Context, formats strfmt.Registry) error { if m.Status != nil { if err := m.Status.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("status") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("status") } return err } } return nil } // MarshalBinary interface implementation func (m *GettableSilence) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *GettableSilence) UnmarshalBinary(b []byte) error { var res GettableSilence if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/gettable_silences.go000066400000000000000000000044251476331240200254340ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "strconv" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) // GettableSilences gettable silences // // swagger:model gettableSilences type GettableSilences []*GettableSilence // Validate validates this gettable silences func (m GettableSilences) Validate(formats strfmt.Registry) error { var res []error for i := 0; i < len(m); i++ { if swag.IsZero(m[i]) { // not required continue } if m[i] != nil { if err := m[i].Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName(strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName(strconv.Itoa(i)) } return err } } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // ContextValidate validate this gettable silences based on the context it is used func (m GettableSilences) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error for i := 0; i < len(m); i++ { if m[i] != nil { if swag.IsZero(m[i]) { // not required return nil } if err := m[i].ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName(strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName(strconv.Itoa(i)) } return err } } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/label_set.go000066400000000000000000000022671476331240200237140ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "github.com/go-openapi/strfmt" ) // LabelSet label set // // swagger:model labelSet type LabelSet map[string]string // Validate validates this label set func (m LabelSet) Validate(formats strfmt.Registry) error { return nil } // ContextValidate validates this label set based on context it is used func (m LabelSet) ContextValidate(ctx context.Context, formats strfmt.Registry) error { return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/matcher.go000066400000000000000000000052351476331240200234030ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // Matcher matcher // // swagger:model matcher type Matcher struct { // is equal IsEqual *bool `json:"isEqual,omitempty"` // is regex // Required: true IsRegex *bool `json:"isRegex"` // name // Required: true Name *string `json:"name"` // value // Required: true Value *string `json:"value"` } // Validate validates this matcher func (m *Matcher) Validate(formats strfmt.Registry) error { var res []error if err := m.validateIsRegex(formats); err != nil { res = append(res, err) } if err := m.validateName(formats); err != nil { res = append(res, err) } if err := m.validateValue(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *Matcher) validateIsRegex(formats strfmt.Registry) error { if err := validate.Required("isRegex", "body", m.IsRegex); err != nil { return err } return nil } func (m *Matcher) validateName(formats strfmt.Registry) error { if err := validate.Required("name", "body", m.Name); err != nil { return err } return nil } func (m *Matcher) validateValue(formats strfmt.Registry) error { if err := validate.Required("value", "body", m.Value); err != nil { return err } return nil } // ContextValidate validates this matcher based on context it is used func (m *Matcher) ContextValidate(ctx context.Context, formats strfmt.Registry) error { return nil } // MarshalBinary interface implementation func (m *Matcher) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *Matcher) UnmarshalBinary(b []byte) error { var res Matcher if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/matchers.go000066400000000000000000000045471476331240200235730ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "strconv" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // Matchers matchers // // swagger:model matchers type Matchers []*Matcher // Validate validates this matchers func (m Matchers) Validate(formats strfmt.Registry) error { var res []error iMatchersSize := int64(len(m)) if err := validate.MinItems("", "body", iMatchersSize, 1); err != nil { return err } for i := 0; i < len(m); i++ { if swag.IsZero(m[i]) { // not required continue } if m[i] != nil { if err := m[i].Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName(strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName(strconv.Itoa(i)) } return err } } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // ContextValidate validate this matchers based on the context it is used func (m Matchers) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error for i := 0; i < len(m); i++ { if m[i] != nil { if swag.IsZero(m[i]) { // not required return nil } if err := m[i].ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName(strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName(strconv.Itoa(i)) } return err } } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/peer_status.go000066400000000000000000000045361476331240200243210ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // PeerStatus peer status // // swagger:model peerStatus type PeerStatus struct { // address // Required: true Address *string `json:"address"` // name // Required: true Name *string `json:"name"` } // Validate validates this peer status func (m *PeerStatus) Validate(formats strfmt.Registry) error { var res []error if err := m.validateAddress(formats); err != nil { res = append(res, err) } if err := m.validateName(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *PeerStatus) validateAddress(formats strfmt.Registry) error { if err := validate.Required("address", "body", m.Address); err != nil { return err } return nil } func (m *PeerStatus) validateName(formats strfmt.Registry) error { if err := validate.Required("name", "body", m.Name); err != nil { return err } return nil } // ContextValidate validates this peer status based on context it is used func (m *PeerStatus) ContextValidate(ctx context.Context, formats strfmt.Registry) error { return nil } // MarshalBinary interface implementation func (m *PeerStatus) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *PeerStatus) UnmarshalBinary(b []byte) error { var res PeerStatus if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/postable_alert.go000066400000000000000000000126511476331240200247600ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // PostableAlert postable alert // // swagger:model postableAlert type PostableAlert struct { // annotations Annotations LabelSet `json:"annotations,omitempty"` // ends at // Format: date-time EndsAt strfmt.DateTime `json:"endsAt,omitempty"` // starts at // Format: date-time StartsAt strfmt.DateTime `json:"startsAt,omitempty"` Alert } // UnmarshalJSON unmarshals this object from a JSON structure func (m *PostableAlert) UnmarshalJSON(raw []byte) error { // AO0 var dataAO0 struct { Annotations LabelSet `json:"annotations,omitempty"` EndsAt strfmt.DateTime `json:"endsAt,omitempty"` StartsAt strfmt.DateTime `json:"startsAt,omitempty"` } if err := swag.ReadJSON(raw, &dataAO0); err != nil { return err } m.Annotations = dataAO0.Annotations m.EndsAt = dataAO0.EndsAt m.StartsAt = dataAO0.StartsAt // AO1 var aO1 Alert if err := swag.ReadJSON(raw, &aO1); err != nil { return err } m.Alert = aO1 return nil } // MarshalJSON marshals this object to a JSON structure func (m PostableAlert) MarshalJSON() ([]byte, error) { _parts := make([][]byte, 0, 2) var dataAO0 struct { Annotations LabelSet `json:"annotations,omitempty"` EndsAt strfmt.DateTime `json:"endsAt,omitempty"` StartsAt strfmt.DateTime `json:"startsAt,omitempty"` } dataAO0.Annotations = m.Annotations dataAO0.EndsAt = m.EndsAt dataAO0.StartsAt = m.StartsAt jsonDataAO0, errAO0 := swag.WriteJSON(dataAO0) if errAO0 != nil { return nil, errAO0 } _parts = append(_parts, jsonDataAO0) aO1, err := swag.WriteJSON(m.Alert) if err != nil { return nil, err } _parts = append(_parts, aO1) return swag.ConcatJSON(_parts...), nil } // Validate validates this postable alert func (m *PostableAlert) Validate(formats strfmt.Registry) error { var res []error if err := m.validateAnnotations(formats); err != nil { res = append(res, err) } if err := m.validateEndsAt(formats); err != nil { res = append(res, err) } if err := m.validateStartsAt(formats); err != nil { res = append(res, err) } // validation for a type composition with Alert if err := m.Alert.Validate(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *PostableAlert) validateAnnotations(formats strfmt.Registry) error { if swag.IsZero(m.Annotations) { // not required return nil } if m.Annotations != nil { if err := m.Annotations.Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("annotations") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("annotations") } return err } } return nil } func (m *PostableAlert) validateEndsAt(formats strfmt.Registry) error { if swag.IsZero(m.EndsAt) { // not required return nil } if err := validate.FormatOf("endsAt", "body", "date-time", m.EndsAt.String(), formats); err != nil { return err } return nil } func (m *PostableAlert) validateStartsAt(formats strfmt.Registry) error { if swag.IsZero(m.StartsAt) { // not required return nil } if err := validate.FormatOf("startsAt", "body", "date-time", m.StartsAt.String(), formats); err != nil { return err } return nil } // ContextValidate validate this postable alert based on the context it is used func (m *PostableAlert) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error if err := m.contextValidateAnnotations(ctx, formats); err != nil { res = append(res, err) } // validation for a type composition with Alert if err := m.Alert.ContextValidate(ctx, formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *PostableAlert) contextValidateAnnotations(ctx context.Context, formats strfmt.Registry) error { if swag.IsZero(m.Annotations) { // not required return nil } if err := m.Annotations.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("annotations") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("annotations") } return err } return nil } // MarshalBinary interface implementation func (m *PostableAlert) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *PostableAlert) UnmarshalBinary(b []byte) error { var res PostableAlert if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/postable_alerts.go000066400000000000000000000044031476331240200251370ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "strconv" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) // PostableAlerts postable alerts // // swagger:model postableAlerts type PostableAlerts []*PostableAlert // Validate validates this postable alerts func (m PostableAlerts) Validate(formats strfmt.Registry) error { var res []error for i := 0; i < len(m); i++ { if swag.IsZero(m[i]) { // not required continue } if m[i] != nil { if err := m[i].Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName(strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName(strconv.Itoa(i)) } return err } } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // ContextValidate validate this postable alerts based on the context it is used func (m PostableAlerts) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error for i := 0; i < len(m); i++ { if m[i] != nil { if swag.IsZero(m[i]) { // not required return nil } if err := m[i].ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName(strconv.Itoa(i)) } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName(strconv.Itoa(i)) } return err } } } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/postable_silence.go000066400000000000000000000060661476331240200252760ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) // PostableSilence postable silence // // swagger:model postableSilence type PostableSilence struct { // id ID string `json:"id,omitempty"` Silence } // UnmarshalJSON unmarshals this object from a JSON structure func (m *PostableSilence) UnmarshalJSON(raw []byte) error { // AO0 var dataAO0 struct { ID string `json:"id,omitempty"` } if err := swag.ReadJSON(raw, &dataAO0); err != nil { return err } m.ID = dataAO0.ID // AO1 var aO1 Silence if err := swag.ReadJSON(raw, &aO1); err != nil { return err } m.Silence = aO1 return nil } // MarshalJSON marshals this object to a JSON structure func (m PostableSilence) MarshalJSON() ([]byte, error) { _parts := make([][]byte, 0, 2) var dataAO0 struct { ID string `json:"id,omitempty"` } dataAO0.ID = m.ID jsonDataAO0, errAO0 := swag.WriteJSON(dataAO0) if errAO0 != nil { return nil, errAO0 } _parts = append(_parts, jsonDataAO0) aO1, err := swag.WriteJSON(m.Silence) if err != nil { return nil, err } _parts = append(_parts, aO1) return swag.ConcatJSON(_parts...), nil } // Validate validates this postable silence func (m *PostableSilence) Validate(formats strfmt.Registry) error { var res []error // validation for a type composition with Silence if err := m.Silence.Validate(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // ContextValidate validate this postable silence based on the context it is used func (m *PostableSilence) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error // validation for a type composition with Silence if err := m.Silence.ContextValidate(ctx, formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // MarshalBinary interface implementation func (m *PostableSilence) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *PostableSilence) UnmarshalBinary(b []byte) error { var res PostableSilence if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/receiver.go000066400000000000000000000040001476331240200235510ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // Receiver receiver // // swagger:model receiver type Receiver struct { // name // Required: true Name *string `json:"name"` } // Validate validates this receiver func (m *Receiver) Validate(formats strfmt.Registry) error { var res []error if err := m.validateName(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *Receiver) validateName(formats strfmt.Registry) error { if err := validate.Required("name", "body", m.Name); err != nil { return err } return nil } // ContextValidate validates this receiver based on context it is used func (m *Receiver) ContextValidate(ctx context.Context, formats strfmt.Registry) error { return nil } // MarshalBinary interface implementation func (m *Receiver) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *Receiver) UnmarshalBinary(b []byte) error { var res Receiver if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/silence.go000066400000000000000000000106041476331240200233760ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // Silence silence // // swagger:model silence type Silence struct { // comment // Required: true Comment *string `json:"comment"` // created by // Required: true CreatedBy *string `json:"createdBy"` // ends at // Required: true // Format: date-time EndsAt *strfmt.DateTime `json:"endsAt"` // matchers // Required: true Matchers Matchers `json:"matchers"` // starts at // Required: true // Format: date-time StartsAt *strfmt.DateTime `json:"startsAt"` } // Validate validates this silence func (m *Silence) Validate(formats strfmt.Registry) error { var res []error if err := m.validateComment(formats); err != nil { res = append(res, err) } if err := m.validateCreatedBy(formats); err != nil { res = append(res, err) } if err := m.validateEndsAt(formats); err != nil { res = append(res, err) } if err := m.validateMatchers(formats); err != nil { res = append(res, err) } if err := m.validateStartsAt(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *Silence) validateComment(formats strfmt.Registry) error { if err := validate.Required("comment", "body", m.Comment); err != nil { return err } return nil } func (m *Silence) validateCreatedBy(formats strfmt.Registry) error { if err := validate.Required("createdBy", "body", m.CreatedBy); err != nil { return err } return nil } func (m *Silence) validateEndsAt(formats strfmt.Registry) error { if err := validate.Required("endsAt", "body", m.EndsAt); err != nil { return err } if err := validate.FormatOf("endsAt", "body", "date-time", m.EndsAt.String(), formats); err != nil { return err } return nil } func (m *Silence) validateMatchers(formats strfmt.Registry) error { if err := validate.Required("matchers", "body", m.Matchers); err != nil { return err } if err := m.Matchers.Validate(formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("matchers") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("matchers") } return err } return nil } func (m *Silence) validateStartsAt(formats strfmt.Registry) error { if err := validate.Required("startsAt", "body", m.StartsAt); err != nil { return err } if err := validate.FormatOf("startsAt", "body", "date-time", m.StartsAt.String(), formats); err != nil { return err } return nil } // ContextValidate validate this silence based on the context it is used func (m *Silence) ContextValidate(ctx context.Context, formats strfmt.Registry) error { var res []error if err := m.contextValidateMatchers(ctx, formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *Silence) contextValidateMatchers(ctx context.Context, formats strfmt.Registry) error { if err := m.Matchers.ContextValidate(ctx, formats); err != nil { if ve, ok := err.(*errors.Validation); ok { return ve.ValidateName("matchers") } else if ce, ok := err.(*errors.CompositeError); ok { return ce.ValidateName("matchers") } return err } return nil } // MarshalBinary interface implementation func (m *Silence) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *Silence) UnmarshalBinary(b []byte) error { var res Silence if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/silence_status.go000066400000000000000000000061011476331240200247760ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "encoding/json" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // SilenceStatus silence status // // swagger:model silenceStatus type SilenceStatus struct { // state // Required: true // Enum: [expired active pending] State *string `json:"state"` } // Validate validates this silence status func (m *SilenceStatus) Validate(formats strfmt.Registry) error { var res []error if err := m.validateState(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } var silenceStatusTypeStatePropEnum []interface{} func init() { var res []string if err := json.Unmarshal([]byte(`["expired","active","pending"]`), &res); err != nil { panic(err) } for _, v := range res { silenceStatusTypeStatePropEnum = append(silenceStatusTypeStatePropEnum, v) } } const ( // SilenceStatusStateExpired captures enum value "expired" SilenceStatusStateExpired string = "expired" // SilenceStatusStateActive captures enum value "active" SilenceStatusStateActive string = "active" // SilenceStatusStatePending captures enum value "pending" SilenceStatusStatePending string = "pending" ) // prop value enum func (m *SilenceStatus) validateStateEnum(path, location string, value string) error { if err := validate.EnumCase(path, location, value, silenceStatusTypeStatePropEnum, true); err != nil { return err } return nil } func (m *SilenceStatus) validateState(formats strfmt.Registry) error { if err := validate.Required("state", "body", m.State); err != nil { return err } // value enum if err := m.validateStateEnum("state", "body", *m.State); err != nil { return err } return nil } // ContextValidate validates this silence status based on context it is used func (m *SilenceStatus) ContextValidate(ctx context.Context, formats strfmt.Registry) error { return nil } // MarshalBinary interface implementation func (m *SilenceStatus) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *SilenceStatus) UnmarshalBinary(b []byte) error { var res SilenceStatus if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/models/version_info.go000066400000000000000000000072751476331240200244660ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package models // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "context" "github.com/go-openapi/errors" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/go-openapi/validate" ) // VersionInfo version info // // swagger:model versionInfo type VersionInfo struct { // branch // Required: true Branch *string `json:"branch"` // build date // Required: true BuildDate *string `json:"buildDate"` // build user // Required: true BuildUser *string `json:"buildUser"` // go version // Required: true GoVersion *string `json:"goVersion"` // revision // Required: true Revision *string `json:"revision"` // version // Required: true Version *string `json:"version"` } // Validate validates this version info func (m *VersionInfo) Validate(formats strfmt.Registry) error { var res []error if err := m.validateBranch(formats); err != nil { res = append(res, err) } if err := m.validateBuildDate(formats); err != nil { res = append(res, err) } if err := m.validateBuildUser(formats); err != nil { res = append(res, err) } if err := m.validateGoVersion(formats); err != nil { res = append(res, err) } if err := m.validateRevision(formats); err != nil { res = append(res, err) } if err := m.validateVersion(formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } func (m *VersionInfo) validateBranch(formats strfmt.Registry) error { if err := validate.Required("branch", "body", m.Branch); err != nil { return err } return nil } func (m *VersionInfo) validateBuildDate(formats strfmt.Registry) error { if err := validate.Required("buildDate", "body", m.BuildDate); err != nil { return err } return nil } func (m *VersionInfo) validateBuildUser(formats strfmt.Registry) error { if err := validate.Required("buildUser", "body", m.BuildUser); err != nil { return err } return nil } func (m *VersionInfo) validateGoVersion(formats strfmt.Registry) error { if err := validate.Required("goVersion", "body", m.GoVersion); err != nil { return err } return nil } func (m *VersionInfo) validateRevision(formats strfmt.Registry) error { if err := validate.Required("revision", "body", m.Revision); err != nil { return err } return nil } func (m *VersionInfo) validateVersion(formats strfmt.Registry) error { if err := validate.Required("version", "body", m.Version); err != nil { return err } return nil } // ContextValidate validates this version info based on context it is used func (m *VersionInfo) ContextValidate(ctx context.Context, formats strfmt.Registry) error { return nil } // MarshalBinary interface implementation func (m *VersionInfo) MarshalBinary() ([]byte, error) { if m == nil { return nil, nil } return swag.WriteJSON(m) } // UnmarshalBinary interface implementation func (m *VersionInfo) UnmarshalBinary(b []byte) error { var res VersionInfo if err := swag.ReadJSON(b, &res); err != nil { return err } *m = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/openapi.yaml000066400000000000000000000303701476331240200224630ustar00rootroot00000000000000--- swagger: '2.0' info: version: 0.0.1 title: Alertmanager API description: API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html consumes: - "application/json" produces: - "application/json" basePath: "/api/v2/" paths: /status: get: tags: - general operationId: getStatus description: Get current status of an Alertmanager instance and its cluster responses: '200': description: Get status response schema: $ref: '#/definitions/alertmanagerStatus' /receivers: get: tags: - receiver operationId: getReceivers description: Get list of all receivers (name of notification integrations) responses: '200': description: Get receivers response schema: type: array items: $ref: '#/definitions/receiver' /silences: get: tags: - silence operationId: getSilences description: Get a list of silences responses: '200': description: Get silences response schema: $ref: '#/definitions/gettableSilences' '400': $ref: '#/responses/BadRequest' '500': $ref: '#/responses/InternalServerError' parameters: - name: filter in: query description: A list of matchers to filter silences by required: false type: array collectionFormat: multi items: type: string post: tags: - silence operationId: postSilences description: Post a new silence or update an existing one parameters: - in: body name: silence description: The silence to create required: true schema: $ref: '#/definitions/postableSilence' responses: '200': description: Create / update silence response schema: type: object properties: silenceID: type: string '400': $ref: '#/responses/BadRequest' '404': description: A silence with the specified ID was not found schema: type: string /silence/{silenceID}: parameters: - in: path name: silenceID type: string format: uuid required: true description: ID of the silence to get get: tags: - silence operationId: getSilence description: Get a silence by its ID responses: '200': description: Get silence response schema: $ref: '#/definitions/gettableSilence' '404': description: A silence with the specified ID was not found '500': $ref: '#/responses/InternalServerError' delete: tags: - silence operationId: deleteSilence description: Delete a silence by its ID parameters: - in: path name: silenceID type: string format: uuid required: true description: ID of the silence to get responses: '200': description: Delete silence response '404': description: A silence with the specified ID was not found '500': $ref: '#/responses/InternalServerError' /alerts: get: tags: - alert operationId: getAlerts description: Get a list of alerts parameters: - in: query name: active type: boolean description: Show active alerts default: true - in: query name: silenced type: boolean description: Show silenced alerts default: true - in: query name: inhibited type: boolean description: Show inhibited alerts default: true - in: query name: unprocessed type: boolean description: Show unprocessed alerts default: true - name: filter in: query description: A list of matchers to filter alerts by required: false type: array collectionFormat: multi items: type: string - name: receiver in: query description: A regex matching receivers to filter alerts by required: false type: string responses: '200': description: Get alerts response schema: '$ref': '#/definitions/gettableAlerts' '400': $ref: '#/responses/BadRequest' '500': $ref: '#/responses/InternalServerError' post: tags: - alert operationId: postAlerts description: Create new Alerts parameters: - in: body name: alerts description: The alerts to create required: true schema: $ref: '#/definitions/postableAlerts' responses: '200': description: Create alerts response '500': $ref: '#/responses/InternalServerError' '400': $ref: '#/responses/BadRequest' /alerts/groups: get: tags: - alertgroup operationId: getAlertGroups description: Get a list of alert groups parameters: - in: query name: active type: boolean description: Show active alerts default: true - in: query name: silenced type: boolean description: Show silenced alerts default: true - in: query name: inhibited type: boolean description: Show inhibited alerts default: true - in: query name: muted type: boolean description: Show muted alerts default: true - name: filter in: query description: A list of matchers to filter alerts by required: false type: array collectionFormat: multi items: type: string - name: receiver in: query description: A regex matching receivers to filter alerts by required: false type: string responses: '200': description: Get alert groups response schema: '$ref': '#/definitions/alertGroups' '400': $ref: '#/responses/BadRequest' '500': $ref: '#/responses/InternalServerError' responses: BadRequest: description: Bad request schema: type: string InternalServerError: description: Internal server error schema: type: string definitions: alertmanagerStatus: type: object properties: cluster: $ref: '#/definitions/clusterStatus' versionInfo: $ref: '#/definitions/versionInfo' config: $ref: '#/definitions/alertmanagerConfig' uptime: type: string format: date-time required: - cluster - versionInfo - config - uptime clusterStatus: type: object properties: name: type: string status: type: string enum: ["ready", "settling", "disabled"] peers: type: array items: $ref: '#/definitions/peerStatus' required: - status alertmanagerConfig: type: object properties: original: type: string required: - original versionInfo: type: object properties: version: type: string revision: type: string branch: type: string buildUser: type: string buildDate: type: string goVersion: type: string required: - version - revision - branch - buildUser - buildDate - goVersion peerStatus: type: object properties: name: type: string address: type: string required: - name - address silence: type: object properties: matchers: $ref: '#/definitions/matchers' startsAt: type: string format: date-time endsAt: type: string format: date-time createdBy: type: string comment: type: string required: - matchers - startsAt - endsAt - createdBy - comment gettableSilence: allOf: - type: object properties: id: type: string status: $ref: '#/definitions/silenceStatus' updatedAt: type: string format: date-time required: - id - status - updatedAt - $ref: '#/definitions/silence' postableSilence: allOf: - type: object properties: id: type: string - $ref: '#/definitions/silence' silenceStatus: type: object properties: state: type: string enum: ["expired", "active", "pending"] required: - state gettableSilences: type: array items: $ref: '#/definitions/gettableSilence' matchers: type: array items: $ref: '#/definitions/matcher' minItems: 1 matcher: type: object properties: name: type: string value: type: string isRegex: type: boolean isEqual: type: boolean default: true required: - name - value - isRegex alert: type: object properties: labels: $ref: '#/definitions/labelSet' generatorURL: type: string format: uri required: - labels gettableAlerts: type: array items: $ref: '#/definitions/gettableAlert' gettableAlert: allOf: - type: object properties: annotations: $ref: '#/definitions/labelSet' receivers: type: array items: $ref: '#/definitions/receiver' fingerprint: type: string startsAt: type: string format: date-time updatedAt: type: string format: date-time endsAt: type: string format: date-time status: $ref: '#/definitions/alertStatus' required: - receivers - fingerprint - startsAt - updatedAt - endsAt - annotations - status - $ref: '#/definitions/alert' postableAlerts: type: array items: $ref: '#/definitions/postableAlert' postableAlert: allOf: - type: object properties: startsAt: type: string format: date-time endsAt: type: string format: date-time annotations: $ref: '#/definitions/labelSet' - $ref: '#/definitions/alert' alertGroups: type: array items: $ref: '#/definitions/alertGroup' alertGroup: type: object properties: labels: $ref: '#/definitions/labelSet' receiver: $ref: '#/definitions/receiver' alerts: type: array items: $ref: '#/definitions/gettableAlert' required: - labels - receiver - alerts alertStatus: type: object properties: state: type: string enum: ['unprocessed', 'active', 'suppressed'] silencedBy: type: array items: type: string inhibitedBy: type: array items: type: string mutedBy: type: array items: type: string required: - state - silencedBy - inhibitedBy - mutedBy receiver: type: object properties: name: type: string required: - name labelSet: type: object additionalProperties: type: string tags: - name: general description: General Alertmanager operations - name: receiver description: Everything related to Alertmanager receivers - name: silence description: Everything related to Alertmanager silences - name: alert description: Everything related to Alertmanager alerts prometheus-alertmanager-0.28.1+ds/api/v2/restapi/000077500000000000000000000000001476331240200216105ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/restapi/configure_alertmanager.go000066400000000000000000000132211476331240200266410ustar00rootroot00000000000000// This file is safe to edit. Once it exists it will not be overwritten // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package restapi import ( "crypto/tls" "net/http" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/prometheus/alertmanager/api/v2/restapi/operations" "github.com/prometheus/alertmanager/api/v2/restapi/operations/alert" "github.com/prometheus/alertmanager/api/v2/restapi/operations/alertgroup" "github.com/prometheus/alertmanager/api/v2/restapi/operations/general" "github.com/prometheus/alertmanager/api/v2/restapi/operations/receiver" "github.com/prometheus/alertmanager/api/v2/restapi/operations/silence" ) //go:generate swagger generate server --target ../../v2 --name Alertmanager --spec ../openapi.yaml --principal interface{} --exclude-main func configureFlags(api *operations.AlertmanagerAPI) { // api.CommandLineOptionsGroups = []swag.CommandLineOptionsGroup{ ... } } func configureAPI(api *operations.AlertmanagerAPI) http.Handler { // configure the api here api.ServeError = errors.ServeError // Set your custom logger if needed. Default one is log.Printf // Expected interface func(string, ...interface{}) // // Example: // api.Logger = log.Printf api.UseSwaggerUI() // To continue using redoc as your UI, uncomment the following line // api.UseRedoc() api.JSONConsumer = runtime.JSONConsumer() api.JSONProducer = runtime.JSONProducer() if api.SilenceDeleteSilenceHandler == nil { api.SilenceDeleteSilenceHandler = silence.DeleteSilenceHandlerFunc(func(params silence.DeleteSilenceParams) middleware.Responder { return middleware.NotImplemented("operation silence.DeleteSilence has not yet been implemented") }) } if api.AlertgroupGetAlertGroupsHandler == nil { api.AlertgroupGetAlertGroupsHandler = alertgroup.GetAlertGroupsHandlerFunc(func(params alertgroup.GetAlertGroupsParams) middleware.Responder { return middleware.NotImplemented("operation alertgroup.GetAlertGroups has not yet been implemented") }) } if api.AlertGetAlertsHandler == nil { api.AlertGetAlertsHandler = alert.GetAlertsHandlerFunc(func(params alert.GetAlertsParams) middleware.Responder { return middleware.NotImplemented("operation alert.GetAlerts has not yet been implemented") }) } if api.ReceiverGetReceiversHandler == nil { api.ReceiverGetReceiversHandler = receiver.GetReceiversHandlerFunc(func(params receiver.GetReceiversParams) middleware.Responder { return middleware.NotImplemented("operation receiver.GetReceivers has not yet been implemented") }) } if api.SilenceGetSilenceHandler == nil { api.SilenceGetSilenceHandler = silence.GetSilenceHandlerFunc(func(params silence.GetSilenceParams) middleware.Responder { return middleware.NotImplemented("operation silence.GetSilence has not yet been implemented") }) } if api.SilenceGetSilencesHandler == nil { api.SilenceGetSilencesHandler = silence.GetSilencesHandlerFunc(func(params silence.GetSilencesParams) middleware.Responder { return middleware.NotImplemented("operation silence.GetSilences has not yet been implemented") }) } if api.GeneralGetStatusHandler == nil { api.GeneralGetStatusHandler = general.GetStatusHandlerFunc(func(params general.GetStatusParams) middleware.Responder { return middleware.NotImplemented("operation general.GetStatus has not yet been implemented") }) } if api.AlertPostAlertsHandler == nil { api.AlertPostAlertsHandler = alert.PostAlertsHandlerFunc(func(params alert.PostAlertsParams) middleware.Responder { return middleware.NotImplemented("operation alert.PostAlerts has not yet been implemented") }) } if api.SilencePostSilencesHandler == nil { api.SilencePostSilencesHandler = silence.PostSilencesHandlerFunc(func(params silence.PostSilencesParams) middleware.Responder { return middleware.NotImplemented("operation silence.PostSilences has not yet been implemented") }) } api.PreServerShutdown = func() {} api.ServerShutdown = func() {} return setupGlobalMiddleware(api.Serve(setupMiddlewares)) } // The TLS configuration before HTTPS server starts. func configureTLS(tlsConfig *tls.Config) { // Make all necessary changes to the TLS configuration here. } // As soon as server is initialized but not run yet, this function will be called. // If you need to modify a config, store server instance to stop it individually later, this is the place. // This function can be called multiple times, depending on the number of serving schemes. // scheme value will be set accordingly: "http", "https" or "unix". func configureServer(s *http.Server, scheme, addr string) { } // The middleware configuration is for the handler executors. These do not apply to the swagger.json document. // The middleware executes after routing but before authentication, binding and validation. func setupMiddlewares(handler http.Handler) http.Handler { return handler } // The middleware configuration happens before anything, this middleware also applies to serving the swagger.json document. // So this is a good place to plug in a panic handling middleware, logging and metrics. func setupGlobalMiddleware(handler http.Handler) http.Handler { return handler } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/doc.go000066400000000000000000000017731476331240200227140ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Package restapi Alertmanager API // // API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) // Schemes: // http // Host: localhost // BasePath: /api/v2/ // Version: 0.0.1 // License: Apache 2.0 http://www.apache.org/licenses/LICENSE-2.0.html // // Consumes: // - application/json // // Produces: // - application/json // // swagger:meta package restapi prometheus-alertmanager-0.28.1+ds/api/v2/restapi/embedded_spec.go000066400000000000000000001127701476331240200247120ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package restapi // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "encoding/json" ) var ( // SwaggerJSON embedded version of the swagger document used at generation time SwaggerJSON json.RawMessage // FlatSwaggerJSON embedded flattened version of the swagger document used at generation time FlatSwaggerJSON json.RawMessage ) func init() { SwaggerJSON = json.RawMessage([]byte(`{ "consumes": [ "application/json" ], "produces": [ "application/json" ], "swagger": "2.0", "info": { "description": "API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager)", "title": "Alertmanager API", "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" }, "version": "0.0.1" }, "basePath": "/api/v2/", "paths": { "/alerts": { "get": { "description": "Get a list of alerts", "tags": [ "alert" ], "operationId": "getAlerts", "parameters": [ { "type": "boolean", "default": true, "description": "Show active alerts", "name": "active", "in": "query" }, { "type": "boolean", "default": true, "description": "Show silenced alerts", "name": "silenced", "in": "query" }, { "type": "boolean", "default": true, "description": "Show inhibited alerts", "name": "inhibited", "in": "query" }, { "type": "boolean", "default": true, "description": "Show unprocessed alerts", "name": "unprocessed", "in": "query" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "multi", "description": "A list of matchers to filter alerts by", "name": "filter", "in": "query" }, { "type": "string", "description": "A regex matching receivers to filter alerts by", "name": "receiver", "in": "query" } ], "responses": { "200": { "description": "Get alerts response", "schema": { "$ref": "#/definitions/gettableAlerts" } }, "400": { "$ref": "#/responses/BadRequest" }, "500": { "$ref": "#/responses/InternalServerError" } } }, "post": { "description": "Create new Alerts", "tags": [ "alert" ], "operationId": "postAlerts", "parameters": [ { "description": "The alerts to create", "name": "alerts", "in": "body", "required": true, "schema": { "$ref": "#/definitions/postableAlerts" } } ], "responses": { "200": { "description": "Create alerts response" }, "400": { "$ref": "#/responses/BadRequest" }, "500": { "$ref": "#/responses/InternalServerError" } } } }, "/alerts/groups": { "get": { "description": "Get a list of alert groups", "tags": [ "alertgroup" ], "operationId": "getAlertGroups", "parameters": [ { "type": "boolean", "default": true, "description": "Show active alerts", "name": "active", "in": "query" }, { "type": "boolean", "default": true, "description": "Show silenced alerts", "name": "silenced", "in": "query" }, { "type": "boolean", "default": true, "description": "Show inhibited alerts", "name": "inhibited", "in": "query" }, { "type": "boolean", "default": true, "description": "Show muted alerts", "name": "muted", "in": "query" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "multi", "description": "A list of matchers to filter alerts by", "name": "filter", "in": "query" }, { "type": "string", "description": "A regex matching receivers to filter alerts by", "name": "receiver", "in": "query" } ], "responses": { "200": { "description": "Get alert groups response", "schema": { "$ref": "#/definitions/alertGroups" } }, "400": { "$ref": "#/responses/BadRequest" }, "500": { "$ref": "#/responses/InternalServerError" } } } }, "/receivers": { "get": { "description": "Get list of all receivers (name of notification integrations)", "tags": [ "receiver" ], "operationId": "getReceivers", "responses": { "200": { "description": "Get receivers response", "schema": { "type": "array", "items": { "$ref": "#/definitions/receiver" } } } } } }, "/silence/{silenceID}": { "get": { "description": "Get a silence by its ID", "tags": [ "silence" ], "operationId": "getSilence", "responses": { "200": { "description": "Get silence response", "schema": { "$ref": "#/definitions/gettableSilence" } }, "404": { "description": "A silence with the specified ID was not found" }, "500": { "$ref": "#/responses/InternalServerError" } } }, "delete": { "description": "Delete a silence by its ID", "tags": [ "silence" ], "operationId": "deleteSilence", "parameters": [ { "type": "string", "format": "uuid", "description": "ID of the silence to get", "name": "silenceID", "in": "path", "required": true } ], "responses": { "200": { "description": "Delete silence response" }, "404": { "description": "A silence with the specified ID was not found" }, "500": { "$ref": "#/responses/InternalServerError" } } }, "parameters": [ { "type": "string", "format": "uuid", "description": "ID of the silence to get", "name": "silenceID", "in": "path", "required": true } ] }, "/silences": { "get": { "description": "Get a list of silences", "tags": [ "silence" ], "operationId": "getSilences", "parameters": [ { "type": "array", "items": { "type": "string" }, "collectionFormat": "multi", "description": "A list of matchers to filter silences by", "name": "filter", "in": "query" } ], "responses": { "200": { "description": "Get silences response", "schema": { "$ref": "#/definitions/gettableSilences" } }, "400": { "$ref": "#/responses/BadRequest" }, "500": { "$ref": "#/responses/InternalServerError" } } }, "post": { "description": "Post a new silence or update an existing one", "tags": [ "silence" ], "operationId": "postSilences", "parameters": [ { "description": "The silence to create", "name": "silence", "in": "body", "required": true, "schema": { "$ref": "#/definitions/postableSilence" } } ], "responses": { "200": { "description": "Create / update silence response", "schema": { "type": "object", "properties": { "silenceID": { "type": "string" } } } }, "400": { "$ref": "#/responses/BadRequest" }, "404": { "description": "A silence with the specified ID was not found", "schema": { "type": "string" } } } } }, "/status": { "get": { "description": "Get current status of an Alertmanager instance and its cluster", "tags": [ "general" ], "operationId": "getStatus", "responses": { "200": { "description": "Get status response", "schema": { "$ref": "#/definitions/alertmanagerStatus" } } } } } }, "definitions": { "alert": { "type": "object", "required": [ "labels" ], "properties": { "generatorURL": { "type": "string", "format": "uri" }, "labels": { "$ref": "#/definitions/labelSet" } } }, "alertGroup": { "type": "object", "required": [ "labels", "receiver", "alerts" ], "properties": { "alerts": { "type": "array", "items": { "$ref": "#/definitions/gettableAlert" } }, "labels": { "$ref": "#/definitions/labelSet" }, "receiver": { "$ref": "#/definitions/receiver" } } }, "alertGroups": { "type": "array", "items": { "$ref": "#/definitions/alertGroup" } }, "alertStatus": { "type": "object", "required": [ "state", "silencedBy", "inhibitedBy", "mutedBy" ], "properties": { "inhibitedBy": { "type": "array", "items": { "type": "string" } }, "mutedBy": { "type": "array", "items": { "type": "string" } }, "silencedBy": { "type": "array", "items": { "type": "string" } }, "state": { "type": "string", "enum": [ "unprocessed", "active", "suppressed" ] } } }, "alertmanagerConfig": { "type": "object", "required": [ "original" ], "properties": { "original": { "type": "string" } } }, "alertmanagerStatus": { "type": "object", "required": [ "cluster", "versionInfo", "config", "uptime" ], "properties": { "cluster": { "$ref": "#/definitions/clusterStatus" }, "config": { "$ref": "#/definitions/alertmanagerConfig" }, "uptime": { "type": "string", "format": "date-time" }, "versionInfo": { "$ref": "#/definitions/versionInfo" } } }, "clusterStatus": { "type": "object", "required": [ "status" ], "properties": { "name": { "type": "string" }, "peers": { "type": "array", "items": { "$ref": "#/definitions/peerStatus" } }, "status": { "type": "string", "enum": [ "ready", "settling", "disabled" ] } } }, "gettableAlert": { "allOf": [ { "type": "object", "required": [ "receivers", "fingerprint", "startsAt", "updatedAt", "endsAt", "annotations", "status" ], "properties": { "annotations": { "$ref": "#/definitions/labelSet" }, "endsAt": { "type": "string", "format": "date-time" }, "fingerprint": { "type": "string" }, "receivers": { "type": "array", "items": { "$ref": "#/definitions/receiver" } }, "startsAt": { "type": "string", "format": "date-time" }, "status": { "$ref": "#/definitions/alertStatus" }, "updatedAt": { "type": "string", "format": "date-time" } } }, { "$ref": "#/definitions/alert" } ] }, "gettableAlerts": { "type": "array", "items": { "$ref": "#/definitions/gettableAlert" } }, "gettableSilence": { "allOf": [ { "type": "object", "required": [ "id", "status", "updatedAt" ], "properties": { "id": { "type": "string" }, "status": { "$ref": "#/definitions/silenceStatus" }, "updatedAt": { "type": "string", "format": "date-time" } } }, { "$ref": "#/definitions/silence" } ] }, "gettableSilences": { "type": "array", "items": { "$ref": "#/definitions/gettableSilence" } }, "labelSet": { "type": "object", "additionalProperties": { "type": "string" } }, "matcher": { "type": "object", "required": [ "name", "value", "isRegex" ], "properties": { "isEqual": { "type": "boolean", "default": true }, "isRegex": { "type": "boolean" }, "name": { "type": "string" }, "value": { "type": "string" } } }, "matchers": { "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/matcher" } }, "peerStatus": { "type": "object", "required": [ "name", "address" ], "properties": { "address": { "type": "string" }, "name": { "type": "string" } } }, "postableAlert": { "allOf": [ { "type": "object", "properties": { "annotations": { "$ref": "#/definitions/labelSet" }, "endsAt": { "type": "string", "format": "date-time" }, "startsAt": { "type": "string", "format": "date-time" } } }, { "$ref": "#/definitions/alert" } ] }, "postableAlerts": { "type": "array", "items": { "$ref": "#/definitions/postableAlert" } }, "postableSilence": { "allOf": [ { "type": "object", "properties": { "id": { "type": "string" } } }, { "$ref": "#/definitions/silence" } ] }, "receiver": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string" } } }, "silence": { "type": "object", "required": [ "matchers", "startsAt", "endsAt", "createdBy", "comment" ], "properties": { "comment": { "type": "string" }, "createdBy": { "type": "string" }, "endsAt": { "type": "string", "format": "date-time" }, "matchers": { "$ref": "#/definitions/matchers" }, "startsAt": { "type": "string", "format": "date-time" } } }, "silenceStatus": { "type": "object", "required": [ "state" ], "properties": { "state": { "type": "string", "enum": [ "expired", "active", "pending" ] } } }, "versionInfo": { "type": "object", "required": [ "version", "revision", "branch", "buildUser", "buildDate", "goVersion" ], "properties": { "branch": { "type": "string" }, "buildDate": { "type": "string" }, "buildUser": { "type": "string" }, "goVersion": { "type": "string" }, "revision": { "type": "string" }, "version": { "type": "string" } } } }, "responses": { "BadRequest": { "description": "Bad request", "schema": { "type": "string" } }, "InternalServerError": { "description": "Internal server error", "schema": { "type": "string" } } }, "tags": [ { "description": "General Alertmanager operations", "name": "general" }, { "description": "Everything related to Alertmanager receivers", "name": "receiver" }, { "description": "Everything related to Alertmanager silences", "name": "silence" }, { "description": "Everything related to Alertmanager alerts", "name": "alert" } ] }`)) FlatSwaggerJSON = json.RawMessage([]byte(`{ "consumes": [ "application/json" ], "produces": [ "application/json" ], "swagger": "2.0", "info": { "description": "API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager)", "title": "Alertmanager API", "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" }, "version": "0.0.1" }, "basePath": "/api/v2/", "paths": { "/alerts": { "get": { "description": "Get a list of alerts", "tags": [ "alert" ], "operationId": "getAlerts", "parameters": [ { "type": "boolean", "default": true, "description": "Show active alerts", "name": "active", "in": "query" }, { "type": "boolean", "default": true, "description": "Show silenced alerts", "name": "silenced", "in": "query" }, { "type": "boolean", "default": true, "description": "Show inhibited alerts", "name": "inhibited", "in": "query" }, { "type": "boolean", "default": true, "description": "Show unprocessed alerts", "name": "unprocessed", "in": "query" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "multi", "description": "A list of matchers to filter alerts by", "name": "filter", "in": "query" }, { "type": "string", "description": "A regex matching receivers to filter alerts by", "name": "receiver", "in": "query" } ], "responses": { "200": { "description": "Get alerts response", "schema": { "$ref": "#/definitions/gettableAlerts" } }, "400": { "description": "Bad request", "schema": { "type": "string" } }, "500": { "description": "Internal server error", "schema": { "type": "string" } } } }, "post": { "description": "Create new Alerts", "tags": [ "alert" ], "operationId": "postAlerts", "parameters": [ { "description": "The alerts to create", "name": "alerts", "in": "body", "required": true, "schema": { "$ref": "#/definitions/postableAlerts" } } ], "responses": { "200": { "description": "Create alerts response" }, "400": { "description": "Bad request", "schema": { "type": "string" } }, "500": { "description": "Internal server error", "schema": { "type": "string" } } } } }, "/alerts/groups": { "get": { "description": "Get a list of alert groups", "tags": [ "alertgroup" ], "operationId": "getAlertGroups", "parameters": [ { "type": "boolean", "default": true, "description": "Show active alerts", "name": "active", "in": "query" }, { "type": "boolean", "default": true, "description": "Show silenced alerts", "name": "silenced", "in": "query" }, { "type": "boolean", "default": true, "description": "Show inhibited alerts", "name": "inhibited", "in": "query" }, { "type": "boolean", "default": true, "description": "Show muted alerts", "name": "muted", "in": "query" }, { "type": "array", "items": { "type": "string" }, "collectionFormat": "multi", "description": "A list of matchers to filter alerts by", "name": "filter", "in": "query" }, { "type": "string", "description": "A regex matching receivers to filter alerts by", "name": "receiver", "in": "query" } ], "responses": { "200": { "description": "Get alert groups response", "schema": { "$ref": "#/definitions/alertGroups" } }, "400": { "description": "Bad request", "schema": { "type": "string" } }, "500": { "description": "Internal server error", "schema": { "type": "string" } } } } }, "/receivers": { "get": { "description": "Get list of all receivers (name of notification integrations)", "tags": [ "receiver" ], "operationId": "getReceivers", "responses": { "200": { "description": "Get receivers response", "schema": { "type": "array", "items": { "$ref": "#/definitions/receiver" } } } } } }, "/silence/{silenceID}": { "get": { "description": "Get a silence by its ID", "tags": [ "silence" ], "operationId": "getSilence", "responses": { "200": { "description": "Get silence response", "schema": { "$ref": "#/definitions/gettableSilence" } }, "404": { "description": "A silence with the specified ID was not found" }, "500": { "description": "Internal server error", "schema": { "type": "string" } } } }, "delete": { "description": "Delete a silence by its ID", "tags": [ "silence" ], "operationId": "deleteSilence", "parameters": [ { "type": "string", "format": "uuid", "description": "ID of the silence to get", "name": "silenceID", "in": "path", "required": true } ], "responses": { "200": { "description": "Delete silence response" }, "404": { "description": "A silence with the specified ID was not found" }, "500": { "description": "Internal server error", "schema": { "type": "string" } } } }, "parameters": [ { "type": "string", "format": "uuid", "description": "ID of the silence to get", "name": "silenceID", "in": "path", "required": true } ] }, "/silences": { "get": { "description": "Get a list of silences", "tags": [ "silence" ], "operationId": "getSilences", "parameters": [ { "type": "array", "items": { "type": "string" }, "collectionFormat": "multi", "description": "A list of matchers to filter silences by", "name": "filter", "in": "query" } ], "responses": { "200": { "description": "Get silences response", "schema": { "$ref": "#/definitions/gettableSilences" } }, "400": { "description": "Bad request", "schema": { "type": "string" } }, "500": { "description": "Internal server error", "schema": { "type": "string" } } } }, "post": { "description": "Post a new silence or update an existing one", "tags": [ "silence" ], "operationId": "postSilences", "parameters": [ { "description": "The silence to create", "name": "silence", "in": "body", "required": true, "schema": { "$ref": "#/definitions/postableSilence" } } ], "responses": { "200": { "description": "Create / update silence response", "schema": { "type": "object", "properties": { "silenceID": { "type": "string" } } } }, "400": { "description": "Bad request", "schema": { "type": "string" } }, "404": { "description": "A silence with the specified ID was not found", "schema": { "type": "string" } } } } }, "/status": { "get": { "description": "Get current status of an Alertmanager instance and its cluster", "tags": [ "general" ], "operationId": "getStatus", "responses": { "200": { "description": "Get status response", "schema": { "$ref": "#/definitions/alertmanagerStatus" } } } } } }, "definitions": { "alert": { "type": "object", "required": [ "labels" ], "properties": { "generatorURL": { "type": "string", "format": "uri" }, "labels": { "$ref": "#/definitions/labelSet" } } }, "alertGroup": { "type": "object", "required": [ "labels", "receiver", "alerts" ], "properties": { "alerts": { "type": "array", "items": { "$ref": "#/definitions/gettableAlert" } }, "labels": { "$ref": "#/definitions/labelSet" }, "receiver": { "$ref": "#/definitions/receiver" } } }, "alertGroups": { "type": "array", "items": { "$ref": "#/definitions/alertGroup" } }, "alertStatus": { "type": "object", "required": [ "state", "silencedBy", "inhibitedBy", "mutedBy" ], "properties": { "inhibitedBy": { "type": "array", "items": { "type": "string" } }, "mutedBy": { "type": "array", "items": { "type": "string" } }, "silencedBy": { "type": "array", "items": { "type": "string" } }, "state": { "type": "string", "enum": [ "unprocessed", "active", "suppressed" ] } } }, "alertmanagerConfig": { "type": "object", "required": [ "original" ], "properties": { "original": { "type": "string" } } }, "alertmanagerStatus": { "type": "object", "required": [ "cluster", "versionInfo", "config", "uptime" ], "properties": { "cluster": { "$ref": "#/definitions/clusterStatus" }, "config": { "$ref": "#/definitions/alertmanagerConfig" }, "uptime": { "type": "string", "format": "date-time" }, "versionInfo": { "$ref": "#/definitions/versionInfo" } } }, "clusterStatus": { "type": "object", "required": [ "status" ], "properties": { "name": { "type": "string" }, "peers": { "type": "array", "items": { "$ref": "#/definitions/peerStatus" } }, "status": { "type": "string", "enum": [ "ready", "settling", "disabled" ] } } }, "gettableAlert": { "allOf": [ { "type": "object", "required": [ "receivers", "fingerprint", "startsAt", "updatedAt", "endsAt", "annotations", "status" ], "properties": { "annotations": { "$ref": "#/definitions/labelSet" }, "endsAt": { "type": "string", "format": "date-time" }, "fingerprint": { "type": "string" }, "receivers": { "type": "array", "items": { "$ref": "#/definitions/receiver" } }, "startsAt": { "type": "string", "format": "date-time" }, "status": { "$ref": "#/definitions/alertStatus" }, "updatedAt": { "type": "string", "format": "date-time" } } }, { "$ref": "#/definitions/alert" } ] }, "gettableAlerts": { "type": "array", "items": { "$ref": "#/definitions/gettableAlert" } }, "gettableSilence": { "allOf": [ { "type": "object", "required": [ "id", "status", "updatedAt" ], "properties": { "id": { "type": "string" }, "status": { "$ref": "#/definitions/silenceStatus" }, "updatedAt": { "type": "string", "format": "date-time" } } }, { "$ref": "#/definitions/silence" } ] }, "gettableSilences": { "type": "array", "items": { "$ref": "#/definitions/gettableSilence" } }, "labelSet": { "type": "object", "additionalProperties": { "type": "string" } }, "matcher": { "type": "object", "required": [ "name", "value", "isRegex" ], "properties": { "isEqual": { "type": "boolean", "default": true }, "isRegex": { "type": "boolean" }, "name": { "type": "string" }, "value": { "type": "string" } } }, "matchers": { "type": "array", "minItems": 1, "items": { "$ref": "#/definitions/matcher" } }, "peerStatus": { "type": "object", "required": [ "name", "address" ], "properties": { "address": { "type": "string" }, "name": { "type": "string" } } }, "postableAlert": { "allOf": [ { "type": "object", "properties": { "annotations": { "$ref": "#/definitions/labelSet" }, "endsAt": { "type": "string", "format": "date-time" }, "startsAt": { "type": "string", "format": "date-time" } } }, { "$ref": "#/definitions/alert" } ] }, "postableAlerts": { "type": "array", "items": { "$ref": "#/definitions/postableAlert" } }, "postableSilence": { "allOf": [ { "type": "object", "properties": { "id": { "type": "string" } } }, { "$ref": "#/definitions/silence" } ] }, "receiver": { "type": "object", "required": [ "name" ], "properties": { "name": { "type": "string" } } }, "silence": { "type": "object", "required": [ "matchers", "startsAt", "endsAt", "createdBy", "comment" ], "properties": { "comment": { "type": "string" }, "createdBy": { "type": "string" }, "endsAt": { "type": "string", "format": "date-time" }, "matchers": { "$ref": "#/definitions/matchers" }, "startsAt": { "type": "string", "format": "date-time" } } }, "silenceStatus": { "type": "object", "required": [ "state" ], "properties": { "state": { "type": "string", "enum": [ "expired", "active", "pending" ] } } }, "versionInfo": { "type": "object", "required": [ "version", "revision", "branch", "buildUser", "buildDate", "goVersion" ], "properties": { "branch": { "type": "string" }, "buildDate": { "type": "string" }, "buildUser": { "type": "string" }, "goVersion": { "type": "string" }, "revision": { "type": "string" }, "version": { "type": "string" } } } }, "responses": { "BadRequest": { "description": "Bad request", "schema": { "type": "string" } }, "InternalServerError": { "description": "Internal server error", "schema": { "type": "string" } } }, "tags": [ { "description": "General Alertmanager operations", "name": "general" }, { "description": "Everything related to Alertmanager receivers", "name": "receiver" }, { "description": "Everything related to Alertmanager silences", "name": "silence" }, { "description": "Everything related to Alertmanager alerts", "name": "alert" } ] }`)) } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/000077500000000000000000000000001476331240200237735ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alert/000077500000000000000000000000001476331240200251025ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alert/get_alerts.go000066400000000000000000000041521476331240200275640ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "net/http" "github.com/go-openapi/runtime/middleware" ) // GetAlertsHandlerFunc turns a function with the right signature into a get alerts handler type GetAlertsHandlerFunc func(GetAlertsParams) middleware.Responder // Handle executing the request and returning a response func (fn GetAlertsHandlerFunc) Handle(params GetAlertsParams) middleware.Responder { return fn(params) } // GetAlertsHandler interface for that can handle valid get alerts params type GetAlertsHandler interface { Handle(GetAlertsParams) middleware.Responder } // NewGetAlerts creates a new http.Handler for the get alerts operation func NewGetAlerts(ctx *middleware.Context, handler GetAlertsHandler) *GetAlerts { return &GetAlerts{Context: ctx, Handler: handler} } /* GetAlerts swagger:route GET /alerts alert getAlerts Get a list of alerts */ type GetAlerts struct { Context *middleware.Context Handler GetAlertsHandler } func (o *GetAlerts) ServeHTTP(rw http.ResponseWriter, r *http.Request) { route, rCtx, _ := o.Context.RouteInfo(r) if rCtx != nil { *r = *rCtx } var Params = NewGetAlertsParams() if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params o.Context.Respond(rw, r, route.Produces, route, err) return } res := o.Handler.Handle(Params) // actually handle the request o.Context.Respond(rw, r, route.Produces, route, res) } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alert/get_alerts_parameters.go000066400000000000000000000156371476331240200320210ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) // NewGetAlertsParams creates a new GetAlertsParams object // with the default values initialized. func NewGetAlertsParams() GetAlertsParams { var ( // initialize parameters with default values activeDefault = bool(true) inhibitedDefault = bool(true) silencedDefault = bool(true) unprocessedDefault = bool(true) ) return GetAlertsParams{ Active: &activeDefault, Inhibited: &inhibitedDefault, Silenced: &silencedDefault, Unprocessed: &unprocessedDefault, } } // GetAlertsParams contains all the bound params for the get alerts operation // typically these are obtained from a http.Request // // swagger:parameters getAlerts type GetAlertsParams struct { // HTTP Request Object HTTPRequest *http.Request `json:"-"` /*Show active alerts In: query Default: true */ Active *bool /*A list of matchers to filter alerts by In: query Collection Format: multi */ Filter []string /*Show inhibited alerts In: query Default: true */ Inhibited *bool /*A regex matching receivers to filter alerts by In: query */ Receiver *string /*Show silenced alerts In: query Default: true */ Silenced *bool /*Show unprocessed alerts In: query Default: true */ Unprocessed *bool } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface // for simple values it will use straight method calls. // // To ensure default values, the struct must have been initialized with NewGetAlertsParams() beforehand. func (o *GetAlertsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { var res []error o.HTTPRequest = r qs := runtime.Values(r.URL.Query()) qActive, qhkActive, _ := qs.GetOK("active") if err := o.bindActive(qActive, qhkActive, route.Formats); err != nil { res = append(res, err) } qFilter, qhkFilter, _ := qs.GetOK("filter") if err := o.bindFilter(qFilter, qhkFilter, route.Formats); err != nil { res = append(res, err) } qInhibited, qhkInhibited, _ := qs.GetOK("inhibited") if err := o.bindInhibited(qInhibited, qhkInhibited, route.Formats); err != nil { res = append(res, err) } qReceiver, qhkReceiver, _ := qs.GetOK("receiver") if err := o.bindReceiver(qReceiver, qhkReceiver, route.Formats); err != nil { res = append(res, err) } qSilenced, qhkSilenced, _ := qs.GetOK("silenced") if err := o.bindSilenced(qSilenced, qhkSilenced, route.Formats); err != nil { res = append(res, err) } qUnprocessed, qhkUnprocessed, _ := qs.GetOK("unprocessed") if err := o.bindUnprocessed(qUnprocessed, qhkUnprocessed, route.Formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // bindActive binds and validates parameter Active from query. func (o *GetAlertsParams) bindActive(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] } // Required: false // AllowEmptyValue: false if raw == "" { // empty values pass all other validations // Default values have been previously initialized by NewGetAlertsParams() return nil } value, err := swag.ConvertBool(raw) if err != nil { return errors.InvalidType("active", "query", "bool", raw) } o.Active = &value return nil } // bindFilter binds and validates array parameter Filter from query. // // Arrays are parsed according to CollectionFormat: "multi" (defaults to "csv" when empty). func (o *GetAlertsParams) bindFilter(rawData []string, hasKey bool, formats strfmt.Registry) error { // CollectionFormat: multi filterIC := rawData if len(filterIC) == 0 { return nil } var filterIR []string for _, filterIV := range filterIC { filterI := filterIV filterIR = append(filterIR, filterI) } o.Filter = filterIR return nil } // bindInhibited binds and validates parameter Inhibited from query. func (o *GetAlertsParams) bindInhibited(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] } // Required: false // AllowEmptyValue: false if raw == "" { // empty values pass all other validations // Default values have been previously initialized by NewGetAlertsParams() return nil } value, err := swag.ConvertBool(raw) if err != nil { return errors.InvalidType("inhibited", "query", "bool", raw) } o.Inhibited = &value return nil } // bindReceiver binds and validates parameter Receiver from query. func (o *GetAlertsParams) bindReceiver(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] } // Required: false // AllowEmptyValue: false if raw == "" { // empty values pass all other validations return nil } o.Receiver = &raw return nil } // bindSilenced binds and validates parameter Silenced from query. func (o *GetAlertsParams) bindSilenced(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] } // Required: false // AllowEmptyValue: false if raw == "" { // empty values pass all other validations // Default values have been previously initialized by NewGetAlertsParams() return nil } value, err := swag.ConvertBool(raw) if err != nil { return errors.InvalidType("silenced", "query", "bool", raw) } o.Silenced = &value return nil } // bindUnprocessed binds and validates parameter Unprocessed from query. func (o *GetAlertsParams) bindUnprocessed(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] } // Required: false // AllowEmptyValue: false if raw == "" { // empty values pass all other validations // Default values have been previously initialized by NewGetAlertsParams() return nil } value, err := swag.ConvertBool(raw) if err != nil { return errors.InvalidType("unprocessed", "query", "bool", raw) } o.Unprocessed = &value return nil } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alert/get_alerts_responses.go000066400000000000000000000103771476331240200316730ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/runtime" "github.com/prometheus/alertmanager/api/v2/models" ) // GetAlertsOKCode is the HTTP code returned for type GetAlertsOK const GetAlertsOKCode int = 200 /* GetAlertsOK Get alerts response swagger:response getAlertsOK */ type GetAlertsOK struct { /* In: Body */ Payload models.GettableAlerts `json:"body,omitempty"` } // NewGetAlertsOK creates GetAlertsOK with default headers values func NewGetAlertsOK() *GetAlertsOK { return &GetAlertsOK{} } // WithPayload adds the payload to the get alerts o k response func (o *GetAlertsOK) WithPayload(payload models.GettableAlerts) *GetAlertsOK { o.Payload = payload return o } // SetPayload sets the payload to the get alerts o k response func (o *GetAlertsOK) SetPayload(payload models.GettableAlerts) { o.Payload = payload } // WriteResponse to the client func (o *GetAlertsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(200) payload := o.Payload if payload == nil { // return empty array payload = models.GettableAlerts{} } if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } // GetAlertsBadRequestCode is the HTTP code returned for type GetAlertsBadRequest const GetAlertsBadRequestCode int = 400 /* GetAlertsBadRequest Bad request swagger:response getAlertsBadRequest */ type GetAlertsBadRequest struct { /* In: Body */ Payload string `json:"body,omitempty"` } // NewGetAlertsBadRequest creates GetAlertsBadRequest with default headers values func NewGetAlertsBadRequest() *GetAlertsBadRequest { return &GetAlertsBadRequest{} } // WithPayload adds the payload to the get alerts bad request response func (o *GetAlertsBadRequest) WithPayload(payload string) *GetAlertsBadRequest { o.Payload = payload return o } // SetPayload sets the payload to the get alerts bad request response func (o *GetAlertsBadRequest) SetPayload(payload string) { o.Payload = payload } // WriteResponse to the client func (o *GetAlertsBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(400) payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } // GetAlertsInternalServerErrorCode is the HTTP code returned for type GetAlertsInternalServerError const GetAlertsInternalServerErrorCode int = 500 /* GetAlertsInternalServerError Internal server error swagger:response getAlertsInternalServerError */ type GetAlertsInternalServerError struct { /* In: Body */ Payload string `json:"body,omitempty"` } // NewGetAlertsInternalServerError creates GetAlertsInternalServerError with default headers values func NewGetAlertsInternalServerError() *GetAlertsInternalServerError { return &GetAlertsInternalServerError{} } // WithPayload adds the payload to the get alerts internal server error response func (o *GetAlertsInternalServerError) WithPayload(payload string) *GetAlertsInternalServerError { o.Payload = payload return o } // SetPayload sets the payload to the get alerts internal server error response func (o *GetAlertsInternalServerError) SetPayload(payload string) { o.Payload = payload } // WriteResponse to the client func (o *GetAlertsInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(500) payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alert/get_alerts_urlbuilder.go000066400000000000000000000077571476331240200320330ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "errors" "net/url" golangswaggerpaths "path" "github.com/go-openapi/swag" ) // GetAlertsURL generates an URL for the get alerts operation type GetAlertsURL struct { Active *bool Filter []string Inhibited *bool Receiver *string Silenced *bool Unprocessed *bool _basePath string // avoid unkeyed usage _ struct{} } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *GetAlertsURL) WithBasePath(bp string) *GetAlertsURL { o.SetBasePath(bp) return o } // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *GetAlertsURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string func (o *GetAlertsURL) Build() (*url.URL, error) { var _result url.URL var _path = "/alerts" _basePath := o._basePath if _basePath == "" { _basePath = "/api/v2/" } _result.Path = golangswaggerpaths.Join(_basePath, _path) qs := make(url.Values) var activeQ string if o.Active != nil { activeQ = swag.FormatBool(*o.Active) } if activeQ != "" { qs.Set("active", activeQ) } var filterIR []string for _, filterI := range o.Filter { filterIS := filterI if filterIS != "" { filterIR = append(filterIR, filterIS) } } filter := swag.JoinByFormat(filterIR, "multi") for _, qsv := range filter { qs.Add("filter", qsv) } var inhibitedQ string if o.Inhibited != nil { inhibitedQ = swag.FormatBool(*o.Inhibited) } if inhibitedQ != "" { qs.Set("inhibited", inhibitedQ) } var receiverQ string if o.Receiver != nil { receiverQ = *o.Receiver } if receiverQ != "" { qs.Set("receiver", receiverQ) } var silencedQ string if o.Silenced != nil { silencedQ = swag.FormatBool(*o.Silenced) } if silencedQ != "" { qs.Set("silenced", silencedQ) } var unprocessedQ string if o.Unprocessed != nil { unprocessedQ = swag.FormatBool(*o.Unprocessed) } if unprocessedQ != "" { qs.Set("unprocessed", unprocessedQ) } _result.RawQuery = qs.Encode() return &_result, nil } // Must is a helper function to panic when the url builder returns an error func (o *GetAlertsURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } if u == nil { panic("url can't be nil") } return u } // String returns the string representation of the path with query string func (o *GetAlertsURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string func (o *GetAlertsURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { return nil, errors.New("scheme is required for a full url on GetAlertsURL") } if host == "" { return nil, errors.New("host is required for a full url on GetAlertsURL") } base, err := o.Build() if err != nil { return nil, err } base.Scheme = scheme base.Host = host return base, nil } // StringFull returns the string representation of a complete url func (o *GetAlertsURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alert/post_alerts.go000066400000000000000000000041761476331240200300000ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "net/http" "github.com/go-openapi/runtime/middleware" ) // PostAlertsHandlerFunc turns a function with the right signature into a post alerts handler type PostAlertsHandlerFunc func(PostAlertsParams) middleware.Responder // Handle executing the request and returning a response func (fn PostAlertsHandlerFunc) Handle(params PostAlertsParams) middleware.Responder { return fn(params) } // PostAlertsHandler interface for that can handle valid post alerts params type PostAlertsHandler interface { Handle(PostAlertsParams) middleware.Responder } // NewPostAlerts creates a new http.Handler for the post alerts operation func NewPostAlerts(ctx *middleware.Context, handler PostAlertsHandler) *PostAlerts { return &PostAlerts{Context: ctx, Handler: handler} } /* PostAlerts swagger:route POST /alerts alert postAlerts Create new Alerts */ type PostAlerts struct { Context *middleware.Context Handler PostAlertsHandler } func (o *PostAlerts) ServeHTTP(rw http.ResponseWriter, r *http.Request) { route, rCtx, _ := o.Context.RouteInfo(r) if rCtx != nil { *r = *rCtx } var Params = NewPostAlertsParams() if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params o.Context.Respond(rw, r, route.Produces, route, err) return } res := o.Handler.Handle(Params) // actually handle the request o.Context.Respond(rw, r, route.Produces, route, res) } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alert/post_alerts_parameters.go000066400000000000000000000053551476331240200322230ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "io" "net/http" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" "github.com/prometheus/alertmanager/api/v2/models" ) // NewPostAlertsParams creates a new PostAlertsParams object // // There are no default values defined in the spec. func NewPostAlertsParams() PostAlertsParams { return PostAlertsParams{} } // PostAlertsParams contains all the bound params for the post alerts operation // typically these are obtained from a http.Request // // swagger:parameters postAlerts type PostAlertsParams struct { // HTTP Request Object HTTPRequest *http.Request `json:"-"` /*The alerts to create Required: true In: body */ Alerts models.PostableAlerts } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface // for simple values it will use straight method calls. // // To ensure default values, the struct must have been initialized with NewPostAlertsParams() beforehand. func (o *PostAlertsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { var res []error o.HTTPRequest = r if runtime.HasBody(r) { defer r.Body.Close() var body models.PostableAlerts if err := route.Consumer.Consume(r.Body, &body); err != nil { if err == io.EOF { res = append(res, errors.Required("alerts", "body", "")) } else { res = append(res, errors.NewParseError("alerts", "body", "", err)) } } else { // validate body object if err := body.Validate(route.Formats); err != nil { res = append(res, err) } ctx := validate.WithOperationRequest(r.Context()) if err := body.ContextValidate(ctx, route.Formats); err != nil { res = append(res, err) } if len(res) == 0 { o.Alerts = body } } } else { res = append(res, errors.Required("alerts", "body", "")) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alert/post_alerts_responses.go000066400000000000000000000073341476331240200321000ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/runtime" ) // PostAlertsOKCode is the HTTP code returned for type PostAlertsOK const PostAlertsOKCode int = 200 /* PostAlertsOK Create alerts response swagger:response postAlertsOK */ type PostAlertsOK struct { } // NewPostAlertsOK creates PostAlertsOK with default headers values func NewPostAlertsOK() *PostAlertsOK { return &PostAlertsOK{} } // WriteResponse to the client func (o *PostAlertsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses rw.WriteHeader(200) } // PostAlertsBadRequestCode is the HTTP code returned for type PostAlertsBadRequest const PostAlertsBadRequestCode int = 400 /* PostAlertsBadRequest Bad request swagger:response postAlertsBadRequest */ type PostAlertsBadRequest struct { /* In: Body */ Payload string `json:"body,omitempty"` } // NewPostAlertsBadRequest creates PostAlertsBadRequest with default headers values func NewPostAlertsBadRequest() *PostAlertsBadRequest { return &PostAlertsBadRequest{} } // WithPayload adds the payload to the post alerts bad request response func (o *PostAlertsBadRequest) WithPayload(payload string) *PostAlertsBadRequest { o.Payload = payload return o } // SetPayload sets the payload to the post alerts bad request response func (o *PostAlertsBadRequest) SetPayload(payload string) { o.Payload = payload } // WriteResponse to the client func (o *PostAlertsBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(400) payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } // PostAlertsInternalServerErrorCode is the HTTP code returned for type PostAlertsInternalServerError const PostAlertsInternalServerErrorCode int = 500 /* PostAlertsInternalServerError Internal server error swagger:response postAlertsInternalServerError */ type PostAlertsInternalServerError struct { /* In: Body */ Payload string `json:"body,omitempty"` } // NewPostAlertsInternalServerError creates PostAlertsInternalServerError with default headers values func NewPostAlertsInternalServerError() *PostAlertsInternalServerError { return &PostAlertsInternalServerError{} } // WithPayload adds the payload to the post alerts internal server error response func (o *PostAlertsInternalServerError) WithPayload(payload string) *PostAlertsInternalServerError { o.Payload = payload return o } // SetPayload sets the payload to the post alerts internal server error response func (o *PostAlertsInternalServerError) SetPayload(payload string) { o.Payload = payload } // WriteResponse to the client func (o *PostAlertsInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(500) payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alert/post_alerts_urlbuilder.go000066400000000000000000000054311476331240200322240ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alert // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "errors" "net/url" golangswaggerpaths "path" ) // PostAlertsURL generates an URL for the post alerts operation type PostAlertsURL struct { _basePath string } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *PostAlertsURL) WithBasePath(bp string) *PostAlertsURL { o.SetBasePath(bp) return o } // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *PostAlertsURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string func (o *PostAlertsURL) Build() (*url.URL, error) { var _result url.URL var _path = "/alerts" _basePath := o._basePath if _basePath == "" { _basePath = "/api/v2/" } _result.Path = golangswaggerpaths.Join(_basePath, _path) return &_result, nil } // Must is a helper function to panic when the url builder returns an error func (o *PostAlertsURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } if u == nil { panic("url can't be nil") } return u } // String returns the string representation of the path with query string func (o *PostAlertsURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string func (o *PostAlertsURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { return nil, errors.New("scheme is required for a full url on PostAlertsURL") } if host == "" { return nil, errors.New("host is required for a full url on PostAlertsURL") } base, err := o.Build() if err != nil { return nil, err } base.Scheme = scheme base.Host = host return base, nil } // StringFull returns the string representation of a complete url func (o *PostAlertsURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alertgroup/000077500000000000000000000000001476331240200261575ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alertgroup/get_alert_groups.go000066400000000000000000000043621476331240200320600ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alertgroup // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "net/http" "github.com/go-openapi/runtime/middleware" ) // GetAlertGroupsHandlerFunc turns a function with the right signature into a get alert groups handler type GetAlertGroupsHandlerFunc func(GetAlertGroupsParams) middleware.Responder // Handle executing the request and returning a response func (fn GetAlertGroupsHandlerFunc) Handle(params GetAlertGroupsParams) middleware.Responder { return fn(params) } // GetAlertGroupsHandler interface for that can handle valid get alert groups params type GetAlertGroupsHandler interface { Handle(GetAlertGroupsParams) middleware.Responder } // NewGetAlertGroups creates a new http.Handler for the get alert groups operation func NewGetAlertGroups(ctx *middleware.Context, handler GetAlertGroupsHandler) *GetAlertGroups { return &GetAlertGroups{Context: ctx, Handler: handler} } /* GetAlertGroups swagger:route GET /alerts/groups alertgroup getAlertGroups Get a list of alert groups */ type GetAlertGroups struct { Context *middleware.Context Handler GetAlertGroupsHandler } func (o *GetAlertGroups) ServeHTTP(rw http.ResponseWriter, r *http.Request) { route, rCtx, _ := o.Context.RouteInfo(r) if rCtx != nil { *r = *rCtx } var Params = NewGetAlertGroupsParams() if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params o.Context.Respond(rw, r, route.Produces, route, err) return } res := o.Handler.Handle(Params) // actually handle the request o.Context.Respond(rw, r, route.Produces, route, res) } get_alert_groups_parameters.go000066400000000000000000000156571476331240200342350ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alertgroup// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alertgroup // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) // NewGetAlertGroupsParams creates a new GetAlertGroupsParams object // with the default values initialized. func NewGetAlertGroupsParams() GetAlertGroupsParams { var ( // initialize parameters with default values activeDefault = bool(true) inhibitedDefault = bool(true) mutedDefault = bool(true) silencedDefault = bool(true) ) return GetAlertGroupsParams{ Active: &activeDefault, Inhibited: &inhibitedDefault, Muted: &mutedDefault, Silenced: &silencedDefault, } } // GetAlertGroupsParams contains all the bound params for the get alert groups operation // typically these are obtained from a http.Request // // swagger:parameters getAlertGroups type GetAlertGroupsParams struct { // HTTP Request Object HTTPRequest *http.Request `json:"-"` /*Show active alerts In: query Default: true */ Active *bool /*A list of matchers to filter alerts by In: query Collection Format: multi */ Filter []string /*Show inhibited alerts In: query Default: true */ Inhibited *bool /*Show muted alerts In: query Default: true */ Muted *bool /*A regex matching receivers to filter alerts by In: query */ Receiver *string /*Show silenced alerts In: query Default: true */ Silenced *bool } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface // for simple values it will use straight method calls. // // To ensure default values, the struct must have been initialized with NewGetAlertGroupsParams() beforehand. func (o *GetAlertGroupsParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { var res []error o.HTTPRequest = r qs := runtime.Values(r.URL.Query()) qActive, qhkActive, _ := qs.GetOK("active") if err := o.bindActive(qActive, qhkActive, route.Formats); err != nil { res = append(res, err) } qFilter, qhkFilter, _ := qs.GetOK("filter") if err := o.bindFilter(qFilter, qhkFilter, route.Formats); err != nil { res = append(res, err) } qInhibited, qhkInhibited, _ := qs.GetOK("inhibited") if err := o.bindInhibited(qInhibited, qhkInhibited, route.Formats); err != nil { res = append(res, err) } qMuted, qhkMuted, _ := qs.GetOK("muted") if err := o.bindMuted(qMuted, qhkMuted, route.Formats); err != nil { res = append(res, err) } qReceiver, qhkReceiver, _ := qs.GetOK("receiver") if err := o.bindReceiver(qReceiver, qhkReceiver, route.Formats); err != nil { res = append(res, err) } qSilenced, qhkSilenced, _ := qs.GetOK("silenced") if err := o.bindSilenced(qSilenced, qhkSilenced, route.Formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // bindActive binds and validates parameter Active from query. func (o *GetAlertGroupsParams) bindActive(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] } // Required: false // AllowEmptyValue: false if raw == "" { // empty values pass all other validations // Default values have been previously initialized by NewGetAlertGroupsParams() return nil } value, err := swag.ConvertBool(raw) if err != nil { return errors.InvalidType("active", "query", "bool", raw) } o.Active = &value return nil } // bindFilter binds and validates array parameter Filter from query. // // Arrays are parsed according to CollectionFormat: "multi" (defaults to "csv" when empty). func (o *GetAlertGroupsParams) bindFilter(rawData []string, hasKey bool, formats strfmt.Registry) error { // CollectionFormat: multi filterIC := rawData if len(filterIC) == 0 { return nil } var filterIR []string for _, filterIV := range filterIC { filterI := filterIV filterIR = append(filterIR, filterI) } o.Filter = filterIR return nil } // bindInhibited binds and validates parameter Inhibited from query. func (o *GetAlertGroupsParams) bindInhibited(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] } // Required: false // AllowEmptyValue: false if raw == "" { // empty values pass all other validations // Default values have been previously initialized by NewGetAlertGroupsParams() return nil } value, err := swag.ConvertBool(raw) if err != nil { return errors.InvalidType("inhibited", "query", "bool", raw) } o.Inhibited = &value return nil } // bindMuted binds and validates parameter Muted from query. func (o *GetAlertGroupsParams) bindMuted(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] } // Required: false // AllowEmptyValue: false if raw == "" { // empty values pass all other validations // Default values have been previously initialized by NewGetAlertGroupsParams() return nil } value, err := swag.ConvertBool(raw) if err != nil { return errors.InvalidType("muted", "query", "bool", raw) } o.Muted = &value return nil } // bindReceiver binds and validates parameter Receiver from query. func (o *GetAlertGroupsParams) bindReceiver(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] } // Required: false // AllowEmptyValue: false if raw == "" { // empty values pass all other validations return nil } o.Receiver = &raw return nil } // bindSilenced binds and validates parameter Silenced from query. func (o *GetAlertGroupsParams) bindSilenced(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] } // Required: false // AllowEmptyValue: false if raw == "" { // empty values pass all other validations // Default values have been previously initialized by NewGetAlertGroupsParams() return nil } value, err := swag.ConvertBool(raw) if err != nil { return errors.InvalidType("silenced", "query", "bool", raw) } o.Silenced = &value return nil } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alertgroup/get_alert_groups_responses.go000066400000000000000000000110031476331240200341470ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alertgroup // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/runtime" "github.com/prometheus/alertmanager/api/v2/models" ) // GetAlertGroupsOKCode is the HTTP code returned for type GetAlertGroupsOK const GetAlertGroupsOKCode int = 200 /* GetAlertGroupsOK Get alert groups response swagger:response getAlertGroupsOK */ type GetAlertGroupsOK struct { /* In: Body */ Payload models.AlertGroups `json:"body,omitempty"` } // NewGetAlertGroupsOK creates GetAlertGroupsOK with default headers values func NewGetAlertGroupsOK() *GetAlertGroupsOK { return &GetAlertGroupsOK{} } // WithPayload adds the payload to the get alert groups o k response func (o *GetAlertGroupsOK) WithPayload(payload models.AlertGroups) *GetAlertGroupsOK { o.Payload = payload return o } // SetPayload sets the payload to the get alert groups o k response func (o *GetAlertGroupsOK) SetPayload(payload models.AlertGroups) { o.Payload = payload } // WriteResponse to the client func (o *GetAlertGroupsOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(200) payload := o.Payload if payload == nil { // return empty array payload = models.AlertGroups{} } if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } // GetAlertGroupsBadRequestCode is the HTTP code returned for type GetAlertGroupsBadRequest const GetAlertGroupsBadRequestCode int = 400 /* GetAlertGroupsBadRequest Bad request swagger:response getAlertGroupsBadRequest */ type GetAlertGroupsBadRequest struct { /* In: Body */ Payload string `json:"body,omitempty"` } // NewGetAlertGroupsBadRequest creates GetAlertGroupsBadRequest with default headers values func NewGetAlertGroupsBadRequest() *GetAlertGroupsBadRequest { return &GetAlertGroupsBadRequest{} } // WithPayload adds the payload to the get alert groups bad request response func (o *GetAlertGroupsBadRequest) WithPayload(payload string) *GetAlertGroupsBadRequest { o.Payload = payload return o } // SetPayload sets the payload to the get alert groups bad request response func (o *GetAlertGroupsBadRequest) SetPayload(payload string) { o.Payload = payload } // WriteResponse to the client func (o *GetAlertGroupsBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(400) payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } // GetAlertGroupsInternalServerErrorCode is the HTTP code returned for type GetAlertGroupsInternalServerError const GetAlertGroupsInternalServerErrorCode int = 500 /* GetAlertGroupsInternalServerError Internal server error swagger:response getAlertGroupsInternalServerError */ type GetAlertGroupsInternalServerError struct { /* In: Body */ Payload string `json:"body,omitempty"` } // NewGetAlertGroupsInternalServerError creates GetAlertGroupsInternalServerError with default headers values func NewGetAlertGroupsInternalServerError() *GetAlertGroupsInternalServerError { return &GetAlertGroupsInternalServerError{} } // WithPayload adds the payload to the get alert groups internal server error response func (o *GetAlertGroupsInternalServerError) WithPayload(payload string) *GetAlertGroupsInternalServerError { o.Payload = payload return o } // SetPayload sets the payload to the get alert groups internal server error response func (o *GetAlertGroupsInternalServerError) SetPayload(payload string) { o.Payload = payload } // WriteResponse to the client func (o *GetAlertGroupsInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(500) payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } get_alert_groups_urlbuilder.go000066400000000000000000000100071476331240200342230ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alertgroup// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package alertgroup // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "errors" "net/url" golangswaggerpaths "path" "github.com/go-openapi/swag" ) // GetAlertGroupsURL generates an URL for the get alert groups operation type GetAlertGroupsURL struct { Active *bool Filter []string Inhibited *bool Muted *bool Receiver *string Silenced *bool _basePath string // avoid unkeyed usage _ struct{} } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *GetAlertGroupsURL) WithBasePath(bp string) *GetAlertGroupsURL { o.SetBasePath(bp) return o } // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *GetAlertGroupsURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string func (o *GetAlertGroupsURL) Build() (*url.URL, error) { var _result url.URL var _path = "/alerts/groups" _basePath := o._basePath if _basePath == "" { _basePath = "/api/v2/" } _result.Path = golangswaggerpaths.Join(_basePath, _path) qs := make(url.Values) var activeQ string if o.Active != nil { activeQ = swag.FormatBool(*o.Active) } if activeQ != "" { qs.Set("active", activeQ) } var filterIR []string for _, filterI := range o.Filter { filterIS := filterI if filterIS != "" { filterIR = append(filterIR, filterIS) } } filter := swag.JoinByFormat(filterIR, "multi") for _, qsv := range filter { qs.Add("filter", qsv) } var inhibitedQ string if o.Inhibited != nil { inhibitedQ = swag.FormatBool(*o.Inhibited) } if inhibitedQ != "" { qs.Set("inhibited", inhibitedQ) } var mutedQ string if o.Muted != nil { mutedQ = swag.FormatBool(*o.Muted) } if mutedQ != "" { qs.Set("muted", mutedQ) } var receiverQ string if o.Receiver != nil { receiverQ = *o.Receiver } if receiverQ != "" { qs.Set("receiver", receiverQ) } var silencedQ string if o.Silenced != nil { silencedQ = swag.FormatBool(*o.Silenced) } if silencedQ != "" { qs.Set("silenced", silencedQ) } _result.RawQuery = qs.Encode() return &_result, nil } // Must is a helper function to panic when the url builder returns an error func (o *GetAlertGroupsURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } if u == nil { panic("url can't be nil") } return u } // String returns the string representation of the path with query string func (o *GetAlertGroupsURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string func (o *GetAlertGroupsURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { return nil, errors.New("scheme is required for a full url on GetAlertGroupsURL") } if host == "" { return nil, errors.New("host is required for a full url on GetAlertGroupsURL") } base, err := o.Build() if err != nil { return nil, err } base.Scheme = scheme base.Host = host return base, nil } // StringFull returns the string representation of a complete url func (o *GetAlertGroupsURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/alertmanager_api.go000066400000000000000000000373361476331240200276310ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package operations // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "fmt" "net/http" "strings" "github.com/go-openapi/errors" "github.com/go-openapi/loads" "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/runtime/security" "github.com/go-openapi/spec" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" "github.com/prometheus/alertmanager/api/v2/restapi/operations/alert" "github.com/prometheus/alertmanager/api/v2/restapi/operations/alertgroup" "github.com/prometheus/alertmanager/api/v2/restapi/operations/general" "github.com/prometheus/alertmanager/api/v2/restapi/operations/receiver" "github.com/prometheus/alertmanager/api/v2/restapi/operations/silence" ) // NewAlertmanagerAPI creates a new Alertmanager instance func NewAlertmanagerAPI(spec *loads.Document) *AlertmanagerAPI { return &AlertmanagerAPI{ handlers: make(map[string]map[string]http.Handler), formats: strfmt.Default, defaultConsumes: "application/json", defaultProduces: "application/json", customConsumers: make(map[string]runtime.Consumer), customProducers: make(map[string]runtime.Producer), PreServerShutdown: func() {}, ServerShutdown: func() {}, spec: spec, useSwaggerUI: false, ServeError: errors.ServeError, BasicAuthenticator: security.BasicAuth, APIKeyAuthenticator: security.APIKeyAuth, BearerAuthenticator: security.BearerAuth, JSONConsumer: runtime.JSONConsumer(), JSONProducer: runtime.JSONProducer(), SilenceDeleteSilenceHandler: silence.DeleteSilenceHandlerFunc(func(params silence.DeleteSilenceParams) middleware.Responder { return middleware.NotImplemented("operation silence.DeleteSilence has not yet been implemented") }), AlertgroupGetAlertGroupsHandler: alertgroup.GetAlertGroupsHandlerFunc(func(params alertgroup.GetAlertGroupsParams) middleware.Responder { return middleware.NotImplemented("operation alertgroup.GetAlertGroups has not yet been implemented") }), AlertGetAlertsHandler: alert.GetAlertsHandlerFunc(func(params alert.GetAlertsParams) middleware.Responder { return middleware.NotImplemented("operation alert.GetAlerts has not yet been implemented") }), ReceiverGetReceiversHandler: receiver.GetReceiversHandlerFunc(func(params receiver.GetReceiversParams) middleware.Responder { return middleware.NotImplemented("operation receiver.GetReceivers has not yet been implemented") }), SilenceGetSilenceHandler: silence.GetSilenceHandlerFunc(func(params silence.GetSilenceParams) middleware.Responder { return middleware.NotImplemented("operation silence.GetSilence has not yet been implemented") }), SilenceGetSilencesHandler: silence.GetSilencesHandlerFunc(func(params silence.GetSilencesParams) middleware.Responder { return middleware.NotImplemented("operation silence.GetSilences has not yet been implemented") }), GeneralGetStatusHandler: general.GetStatusHandlerFunc(func(params general.GetStatusParams) middleware.Responder { return middleware.NotImplemented("operation general.GetStatus has not yet been implemented") }), AlertPostAlertsHandler: alert.PostAlertsHandlerFunc(func(params alert.PostAlertsParams) middleware.Responder { return middleware.NotImplemented("operation alert.PostAlerts has not yet been implemented") }), SilencePostSilencesHandler: silence.PostSilencesHandlerFunc(func(params silence.PostSilencesParams) middleware.Responder { return middleware.NotImplemented("operation silence.PostSilences has not yet been implemented") }), } } /*AlertmanagerAPI API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) */ type AlertmanagerAPI struct { spec *loads.Document context *middleware.Context handlers map[string]map[string]http.Handler formats strfmt.Registry customConsumers map[string]runtime.Consumer customProducers map[string]runtime.Producer defaultConsumes string defaultProduces string Middleware func(middleware.Builder) http.Handler useSwaggerUI bool // BasicAuthenticator generates a runtime.Authenticator from the supplied basic auth function. // It has a default implementation in the security package, however you can replace it for your particular usage. BasicAuthenticator func(security.UserPassAuthentication) runtime.Authenticator // APIKeyAuthenticator generates a runtime.Authenticator from the supplied token auth function. // It has a default implementation in the security package, however you can replace it for your particular usage. APIKeyAuthenticator func(string, string, security.TokenAuthentication) runtime.Authenticator // BearerAuthenticator generates a runtime.Authenticator from the supplied bearer token auth function. // It has a default implementation in the security package, however you can replace it for your particular usage. BearerAuthenticator func(string, security.ScopedTokenAuthentication) runtime.Authenticator // JSONConsumer registers a consumer for the following mime types: // - application/json JSONConsumer runtime.Consumer // JSONProducer registers a producer for the following mime types: // - application/json JSONProducer runtime.Producer // SilenceDeleteSilenceHandler sets the operation handler for the delete silence operation SilenceDeleteSilenceHandler silence.DeleteSilenceHandler // AlertgroupGetAlertGroupsHandler sets the operation handler for the get alert groups operation AlertgroupGetAlertGroupsHandler alertgroup.GetAlertGroupsHandler // AlertGetAlertsHandler sets the operation handler for the get alerts operation AlertGetAlertsHandler alert.GetAlertsHandler // ReceiverGetReceiversHandler sets the operation handler for the get receivers operation ReceiverGetReceiversHandler receiver.GetReceiversHandler // SilenceGetSilenceHandler sets the operation handler for the get silence operation SilenceGetSilenceHandler silence.GetSilenceHandler // SilenceGetSilencesHandler sets the operation handler for the get silences operation SilenceGetSilencesHandler silence.GetSilencesHandler // GeneralGetStatusHandler sets the operation handler for the get status operation GeneralGetStatusHandler general.GetStatusHandler // AlertPostAlertsHandler sets the operation handler for the post alerts operation AlertPostAlertsHandler alert.PostAlertsHandler // SilencePostSilencesHandler sets the operation handler for the post silences operation SilencePostSilencesHandler silence.PostSilencesHandler // ServeError is called when an error is received, there is a default handler // but you can set your own with this ServeError func(http.ResponseWriter, *http.Request, error) // PreServerShutdown is called before the HTTP(S) server is shutdown // This allows for custom functions to get executed before the HTTP(S) server stops accepting traffic PreServerShutdown func() // ServerShutdown is called when the HTTP(S) server is shut down and done // handling all active connections and does not accept connections any more ServerShutdown func() // Custom command line argument groups with their descriptions CommandLineOptionsGroups []swag.CommandLineOptionsGroup // User defined logger function. Logger func(string, ...interface{}) } // UseRedoc for documentation at /docs func (o *AlertmanagerAPI) UseRedoc() { o.useSwaggerUI = false } // UseSwaggerUI for documentation at /docs func (o *AlertmanagerAPI) UseSwaggerUI() { o.useSwaggerUI = true } // SetDefaultProduces sets the default produces media type func (o *AlertmanagerAPI) SetDefaultProduces(mediaType string) { o.defaultProduces = mediaType } // SetDefaultConsumes returns the default consumes media type func (o *AlertmanagerAPI) SetDefaultConsumes(mediaType string) { o.defaultConsumes = mediaType } // SetSpec sets a spec that will be served for the clients. func (o *AlertmanagerAPI) SetSpec(spec *loads.Document) { o.spec = spec } // DefaultProduces returns the default produces media type func (o *AlertmanagerAPI) DefaultProduces() string { return o.defaultProduces } // DefaultConsumes returns the default consumes media type func (o *AlertmanagerAPI) DefaultConsumes() string { return o.defaultConsumes } // Formats returns the registered string formats func (o *AlertmanagerAPI) Formats() strfmt.Registry { return o.formats } // RegisterFormat registers a custom format validator func (o *AlertmanagerAPI) RegisterFormat(name string, format strfmt.Format, validator strfmt.Validator) { o.formats.Add(name, format, validator) } // Validate validates the registrations in the AlertmanagerAPI func (o *AlertmanagerAPI) Validate() error { var unregistered []string if o.JSONConsumer == nil { unregistered = append(unregistered, "JSONConsumer") } if o.JSONProducer == nil { unregistered = append(unregistered, "JSONProducer") } if o.SilenceDeleteSilenceHandler == nil { unregistered = append(unregistered, "silence.DeleteSilenceHandler") } if o.AlertgroupGetAlertGroupsHandler == nil { unregistered = append(unregistered, "alertgroup.GetAlertGroupsHandler") } if o.AlertGetAlertsHandler == nil { unregistered = append(unregistered, "alert.GetAlertsHandler") } if o.ReceiverGetReceiversHandler == nil { unregistered = append(unregistered, "receiver.GetReceiversHandler") } if o.SilenceGetSilenceHandler == nil { unregistered = append(unregistered, "silence.GetSilenceHandler") } if o.SilenceGetSilencesHandler == nil { unregistered = append(unregistered, "silence.GetSilencesHandler") } if o.GeneralGetStatusHandler == nil { unregistered = append(unregistered, "general.GetStatusHandler") } if o.AlertPostAlertsHandler == nil { unregistered = append(unregistered, "alert.PostAlertsHandler") } if o.SilencePostSilencesHandler == nil { unregistered = append(unregistered, "silence.PostSilencesHandler") } if len(unregistered) > 0 { return fmt.Errorf("missing registration: %s", strings.Join(unregistered, ", ")) } return nil } // ServeErrorFor gets a error handler for a given operation id func (o *AlertmanagerAPI) ServeErrorFor(operationID string) func(http.ResponseWriter, *http.Request, error) { return o.ServeError } // AuthenticatorsFor gets the authenticators for the specified security schemes func (o *AlertmanagerAPI) AuthenticatorsFor(schemes map[string]spec.SecurityScheme) map[string]runtime.Authenticator { return nil } // Authorizer returns the registered authorizer func (o *AlertmanagerAPI) Authorizer() runtime.Authorizer { return nil } // ConsumersFor gets the consumers for the specified media types. // MIME type parameters are ignored here. func (o *AlertmanagerAPI) ConsumersFor(mediaTypes []string) map[string]runtime.Consumer { result := make(map[string]runtime.Consumer, len(mediaTypes)) for _, mt := range mediaTypes { switch mt { case "application/json": result["application/json"] = o.JSONConsumer } if c, ok := o.customConsumers[mt]; ok { result[mt] = c } } return result } // ProducersFor gets the producers for the specified media types. // MIME type parameters are ignored here. func (o *AlertmanagerAPI) ProducersFor(mediaTypes []string) map[string]runtime.Producer { result := make(map[string]runtime.Producer, len(mediaTypes)) for _, mt := range mediaTypes { switch mt { case "application/json": result["application/json"] = o.JSONProducer } if p, ok := o.customProducers[mt]; ok { result[mt] = p } } return result } // HandlerFor gets a http.Handler for the provided operation method and path func (o *AlertmanagerAPI) HandlerFor(method, path string) (http.Handler, bool) { if o.handlers == nil { return nil, false } um := strings.ToUpper(method) if _, ok := o.handlers[um]; !ok { return nil, false } if path == "/" { path = "" } h, ok := o.handlers[um][path] return h, ok } // Context returns the middleware context for the alertmanager API func (o *AlertmanagerAPI) Context() *middleware.Context { if o.context == nil { o.context = middleware.NewRoutableContext(o.spec, o, nil) } return o.context } func (o *AlertmanagerAPI) initHandlerCache() { o.Context() // don't care about the result, just that the initialization happened if o.handlers == nil { o.handlers = make(map[string]map[string]http.Handler) } if o.handlers["DELETE"] == nil { o.handlers["DELETE"] = make(map[string]http.Handler) } o.handlers["DELETE"]["/silence/{silenceID}"] = silence.NewDeleteSilence(o.context, o.SilenceDeleteSilenceHandler) if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } o.handlers["GET"]["/alerts/groups"] = alertgroup.NewGetAlertGroups(o.context, o.AlertgroupGetAlertGroupsHandler) if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } o.handlers["GET"]["/alerts"] = alert.NewGetAlerts(o.context, o.AlertGetAlertsHandler) if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } o.handlers["GET"]["/receivers"] = receiver.NewGetReceivers(o.context, o.ReceiverGetReceiversHandler) if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } o.handlers["GET"]["/silence/{silenceID}"] = silence.NewGetSilence(o.context, o.SilenceGetSilenceHandler) if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } o.handlers["GET"]["/silences"] = silence.NewGetSilences(o.context, o.SilenceGetSilencesHandler) if o.handlers["GET"] == nil { o.handlers["GET"] = make(map[string]http.Handler) } o.handlers["GET"]["/status"] = general.NewGetStatus(o.context, o.GeneralGetStatusHandler) if o.handlers["POST"] == nil { o.handlers["POST"] = make(map[string]http.Handler) } o.handlers["POST"]["/alerts"] = alert.NewPostAlerts(o.context, o.AlertPostAlertsHandler) if o.handlers["POST"] == nil { o.handlers["POST"] = make(map[string]http.Handler) } o.handlers["POST"]["/silences"] = silence.NewPostSilences(o.context, o.SilencePostSilencesHandler) } // Serve creates a http handler to serve the API over HTTP // can be used directly in http.ListenAndServe(":8000", api.Serve(nil)) func (o *AlertmanagerAPI) Serve(builder middleware.Builder) http.Handler { o.Init() if o.Middleware != nil { return o.Middleware(builder) } if o.useSwaggerUI { return o.context.APIHandlerSwaggerUI(builder) } return o.context.APIHandler(builder) } // Init allows you to just initialize the handler cache, you can then recompose the middleware as you see fit func (o *AlertmanagerAPI) Init() { if len(o.handlers) == 0 { o.initHandlerCache() } } // RegisterConsumer allows you to add (or override) a consumer for a media type. func (o *AlertmanagerAPI) RegisterConsumer(mediaType string, consumer runtime.Consumer) { o.customConsumers[mediaType] = consumer } // RegisterProducer allows you to add (or override) a producer for a media type. func (o *AlertmanagerAPI) RegisterProducer(mediaType string, producer runtime.Producer) { o.customProducers[mediaType] = producer } // AddMiddlewareFor adds a http middleware to existing handler func (o *AlertmanagerAPI) AddMiddlewareFor(method, path string, builder middleware.Builder) { um := strings.ToUpper(method) if path == "/" { path = "" } o.Init() if h, ok := o.handlers[um][path]; ok { o.handlers[um][path] = builder(h) } } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/general/000077500000000000000000000000001476331240200254105ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/general/get_status.go000066400000000000000000000042301476331240200301200ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package general // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "net/http" "github.com/go-openapi/runtime/middleware" ) // GetStatusHandlerFunc turns a function with the right signature into a get status handler type GetStatusHandlerFunc func(GetStatusParams) middleware.Responder // Handle executing the request and returning a response func (fn GetStatusHandlerFunc) Handle(params GetStatusParams) middleware.Responder { return fn(params) } // GetStatusHandler interface for that can handle valid get status params type GetStatusHandler interface { Handle(GetStatusParams) middleware.Responder } // NewGetStatus creates a new http.Handler for the get status operation func NewGetStatus(ctx *middleware.Context, handler GetStatusHandler) *GetStatus { return &GetStatus{Context: ctx, Handler: handler} } /* GetStatus swagger:route GET /status general getStatus Get current status of an Alertmanager instance and its cluster */ type GetStatus struct { Context *middleware.Context Handler GetStatusHandler } func (o *GetStatus) ServeHTTP(rw http.ResponseWriter, r *http.Request) { route, rCtx, _ := o.Context.RouteInfo(r) if rCtx != nil { *r = *rCtx } var Params = NewGetStatusParams() if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params o.Context.Respond(rw, r, route.Produces, route, err) return } res := o.Handler.Handle(Params) // actually handle the request o.Context.Respond(rw, r, route.Produces, route, res) } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/general/get_status_parameters.go000066400000000000000000000034751476331240200323550ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package general // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/errors" "github.com/go-openapi/runtime/middleware" ) // NewGetStatusParams creates a new GetStatusParams object // // There are no default values defined in the spec. func NewGetStatusParams() GetStatusParams { return GetStatusParams{} } // GetStatusParams contains all the bound params for the get status operation // typically these are obtained from a http.Request // // swagger:parameters getStatus type GetStatusParams struct { // HTTP Request Object HTTPRequest *http.Request `json:"-"` } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface // for simple values it will use straight method calls. // // To ensure default values, the struct must have been initialized with NewGetStatusParams() beforehand. func (o *GetStatusParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { var res []error o.HTTPRequest = r if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/general/get_status_responses.go000066400000000000000000000036401476331240200322250ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package general // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/runtime" "github.com/prometheus/alertmanager/api/v2/models" ) // GetStatusOKCode is the HTTP code returned for type GetStatusOK const GetStatusOKCode int = 200 /* GetStatusOK Get status response swagger:response getStatusOK */ type GetStatusOK struct { /* In: Body */ Payload *models.AlertmanagerStatus `json:"body,omitempty"` } // NewGetStatusOK creates GetStatusOK with default headers values func NewGetStatusOK() *GetStatusOK { return &GetStatusOK{} } // WithPayload adds the payload to the get status o k response func (o *GetStatusOK) WithPayload(payload *models.AlertmanagerStatus) *GetStatusOK { o.Payload = payload return o } // SetPayload sets the payload to the get status o k response func (o *GetStatusOK) SetPayload(payload *models.AlertmanagerStatus) { o.Payload = payload } // WriteResponse to the client func (o *GetStatusOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(200) if o.Payload != nil { payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/general/get_status_urlbuilder.go000066400000000000000000000054161476331240200323600ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package general // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "errors" "net/url" golangswaggerpaths "path" ) // GetStatusURL generates an URL for the get status operation type GetStatusURL struct { _basePath string } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *GetStatusURL) WithBasePath(bp string) *GetStatusURL { o.SetBasePath(bp) return o } // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *GetStatusURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string func (o *GetStatusURL) Build() (*url.URL, error) { var _result url.URL var _path = "/status" _basePath := o._basePath if _basePath == "" { _basePath = "/api/v2/" } _result.Path = golangswaggerpaths.Join(_basePath, _path) return &_result, nil } // Must is a helper function to panic when the url builder returns an error func (o *GetStatusURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } if u == nil { panic("url can't be nil") } return u } // String returns the string representation of the path with query string func (o *GetStatusURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string func (o *GetStatusURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { return nil, errors.New("scheme is required for a full url on GetStatusURL") } if host == "" { return nil, errors.New("host is required for a full url on GetStatusURL") } base, err := o.Build() if err != nil { return nil, err } base.Scheme = scheme base.Host = host return base, nil } // StringFull returns the string representation of a complete url func (o *GetStatusURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/receiver/000077500000000000000000000000001476331240200255775ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/receiver/get_receivers.go000066400000000000000000000043361476331240200307620ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package receiver // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "net/http" "github.com/go-openapi/runtime/middleware" ) // GetReceiversHandlerFunc turns a function with the right signature into a get receivers handler type GetReceiversHandlerFunc func(GetReceiversParams) middleware.Responder // Handle executing the request and returning a response func (fn GetReceiversHandlerFunc) Handle(params GetReceiversParams) middleware.Responder { return fn(params) } // GetReceiversHandler interface for that can handle valid get receivers params type GetReceiversHandler interface { Handle(GetReceiversParams) middleware.Responder } // NewGetReceivers creates a new http.Handler for the get receivers operation func NewGetReceivers(ctx *middleware.Context, handler GetReceiversHandler) *GetReceivers { return &GetReceivers{Context: ctx, Handler: handler} } /* GetReceivers swagger:route GET /receivers receiver getReceivers Get list of all receivers (name of notification integrations) */ type GetReceivers struct { Context *middleware.Context Handler GetReceiversHandler } func (o *GetReceivers) ServeHTTP(rw http.ResponseWriter, r *http.Request) { route, rCtx, _ := o.Context.RouteInfo(r) if rCtx != nil { *r = *rCtx } var Params = NewGetReceiversParams() if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params o.Context.Respond(rw, r, route.Produces, route, err) return } res := o.Handler.Handle(Params) // actually handle the request o.Context.Respond(rw, r, route.Produces, route, res) } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/receiver/get_receivers_parameters.go000066400000000000000000000035371476331240200332070ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package receiver // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/errors" "github.com/go-openapi/runtime/middleware" ) // NewGetReceiversParams creates a new GetReceiversParams object // // There are no default values defined in the spec. func NewGetReceiversParams() GetReceiversParams { return GetReceiversParams{} } // GetReceiversParams contains all the bound params for the get receivers operation // typically these are obtained from a http.Request // // swagger:parameters getReceivers type GetReceiversParams struct { // HTTP Request Object HTTPRequest *http.Request `json:"-"` } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface // for simple values it will use straight method calls. // // To ensure default values, the struct must have been initialized with NewGetReceiversParams() beforehand. func (o *GetReceiversParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { var res []error o.HTTPRequest = r if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/receiver/get_receivers_responses.go000066400000000000000000000037761476331240200330720ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package receiver // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/runtime" "github.com/prometheus/alertmanager/api/v2/models" ) // GetReceiversOKCode is the HTTP code returned for type GetReceiversOK const GetReceiversOKCode int = 200 /* GetReceiversOK Get receivers response swagger:response getReceiversOK */ type GetReceiversOK struct { /* In: Body */ Payload []*models.Receiver `json:"body,omitempty"` } // NewGetReceiversOK creates GetReceiversOK with default headers values func NewGetReceiversOK() *GetReceiversOK { return &GetReceiversOK{} } // WithPayload adds the payload to the get receivers o k response func (o *GetReceiversOK) WithPayload(payload []*models.Receiver) *GetReceiversOK { o.Payload = payload return o } // SetPayload sets the payload to the get receivers o k response func (o *GetReceiversOK) SetPayload(payload []*models.Receiver) { o.Payload = payload } // WriteResponse to the client func (o *GetReceiversOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(200) payload := o.Payload if payload == nil { // return empty array payload = make([]*models.Receiver, 0, 50) } if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/receiver/get_receivers_urlbuilder.go000066400000000000000000000054711476331240200332140ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package receiver // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "errors" "net/url" golangswaggerpaths "path" ) // GetReceiversURL generates an URL for the get receivers operation type GetReceiversURL struct { _basePath string } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *GetReceiversURL) WithBasePath(bp string) *GetReceiversURL { o.SetBasePath(bp) return o } // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *GetReceiversURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string func (o *GetReceiversURL) Build() (*url.URL, error) { var _result url.URL var _path = "/receivers" _basePath := o._basePath if _basePath == "" { _basePath = "/api/v2/" } _result.Path = golangswaggerpaths.Join(_basePath, _path) return &_result, nil } // Must is a helper function to panic when the url builder returns an error func (o *GetReceiversURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } if u == nil { panic("url can't be nil") } return u } // String returns the string representation of the path with query string func (o *GetReceiversURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string func (o *GetReceiversURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { return nil, errors.New("scheme is required for a full url on GetReceiversURL") } if host == "" { return nil, errors.New("host is required for a full url on GetReceiversURL") } base, err := o.Build() if err != nil { return nil, err } base.Scheme = scheme base.Host = host return base, nil } // StringFull returns the string representation of a complete url func (o *GetReceiversURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/000077500000000000000000000000001476331240200254155ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/delete_silence.go000066400000000000000000000043341476331240200307140ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "net/http" "github.com/go-openapi/runtime/middleware" ) // DeleteSilenceHandlerFunc turns a function with the right signature into a delete silence handler type DeleteSilenceHandlerFunc func(DeleteSilenceParams) middleware.Responder // Handle executing the request and returning a response func (fn DeleteSilenceHandlerFunc) Handle(params DeleteSilenceParams) middleware.Responder { return fn(params) } // DeleteSilenceHandler interface for that can handle valid delete silence params type DeleteSilenceHandler interface { Handle(DeleteSilenceParams) middleware.Responder } // NewDeleteSilence creates a new http.Handler for the delete silence operation func NewDeleteSilence(ctx *middleware.Context, handler DeleteSilenceHandler) *DeleteSilence { return &DeleteSilence{Context: ctx, Handler: handler} } /* DeleteSilence swagger:route DELETE /silence/{silenceID} silence deleteSilence Delete a silence by its ID */ type DeleteSilence struct { Context *middleware.Context Handler DeleteSilenceHandler } func (o *DeleteSilence) ServeHTTP(rw http.ResponseWriter, r *http.Request) { route, rCtx, _ := o.Context.RouteInfo(r) if rCtx != nil { *r = *rCtx } var Params = NewDeleteSilenceParams() if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params o.Context.Respond(rw, r, route.Produces, route, err) return } res := o.Handler.Handle(Params) // actually handle the request o.Context.Respond(rw, r, route.Produces, route, res) } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/delete_silence_parameters.go000066400000000000000000000060451476331240200331400ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/errors" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/strfmt" "github.com/go-openapi/validate" ) // NewDeleteSilenceParams creates a new DeleteSilenceParams object // // There are no default values defined in the spec. func NewDeleteSilenceParams() DeleteSilenceParams { return DeleteSilenceParams{} } // DeleteSilenceParams contains all the bound params for the delete silence operation // typically these are obtained from a http.Request // // swagger:parameters deleteSilence type DeleteSilenceParams struct { // HTTP Request Object HTTPRequest *http.Request `json:"-"` /*ID of the silence to get Required: true In: path */ SilenceID strfmt.UUID } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface // for simple values it will use straight method calls. // // To ensure default values, the struct must have been initialized with NewDeleteSilenceParams() beforehand. func (o *DeleteSilenceParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { var res []error o.HTTPRequest = r rSilenceID, rhkSilenceID, _ := route.Params.GetOK("silenceID") if err := o.bindSilenceID(rSilenceID, rhkSilenceID, route.Formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // bindSilenceID binds and validates parameter SilenceID from path. func (o *DeleteSilenceParams) bindSilenceID(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] } // Required: true // Parameter is provided by construction from the route // Format: uuid value, err := formats.Parse("uuid", raw) if err != nil { return errors.InvalidType("silenceID", "path", "strfmt.UUID", raw) } o.SilenceID = *(value.(*strfmt.UUID)) if err := o.validateSilenceID(formats); err != nil { return err } return nil } // validateSilenceID carries on validations for parameter SilenceID func (o *DeleteSilenceParams) validateSilenceID(formats strfmt.Registry) error { if err := validate.FormatOf("silenceID", "path", "uuid", o.SilenceID.String(), formats); err != nil { return err } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/delete_silence_responses.go000066400000000000000000000066321476331240200330200ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/runtime" ) // DeleteSilenceOKCode is the HTTP code returned for type DeleteSilenceOK const DeleteSilenceOKCode int = 200 /* DeleteSilenceOK Delete silence response swagger:response deleteSilenceOK */ type DeleteSilenceOK struct { } // NewDeleteSilenceOK creates DeleteSilenceOK with default headers values func NewDeleteSilenceOK() *DeleteSilenceOK { return &DeleteSilenceOK{} } // WriteResponse to the client func (o *DeleteSilenceOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses rw.WriteHeader(200) } // DeleteSilenceNotFoundCode is the HTTP code returned for type DeleteSilenceNotFound const DeleteSilenceNotFoundCode int = 404 /* DeleteSilenceNotFound A silence with the specified ID was not found swagger:response deleteSilenceNotFound */ type DeleteSilenceNotFound struct { } // NewDeleteSilenceNotFound creates DeleteSilenceNotFound with default headers values func NewDeleteSilenceNotFound() *DeleteSilenceNotFound { return &DeleteSilenceNotFound{} } // WriteResponse to the client func (o *DeleteSilenceNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses rw.WriteHeader(404) } // DeleteSilenceInternalServerErrorCode is the HTTP code returned for type DeleteSilenceInternalServerError const DeleteSilenceInternalServerErrorCode int = 500 /* DeleteSilenceInternalServerError Internal server error swagger:response deleteSilenceInternalServerError */ type DeleteSilenceInternalServerError struct { /* In: Body */ Payload string `json:"body,omitempty"` } // NewDeleteSilenceInternalServerError creates DeleteSilenceInternalServerError with default headers values func NewDeleteSilenceInternalServerError() *DeleteSilenceInternalServerError { return &DeleteSilenceInternalServerError{} } // WithPayload adds the payload to the delete silence internal server error response func (o *DeleteSilenceInternalServerError) WithPayload(payload string) *DeleteSilenceInternalServerError { o.Payload = payload return o } // SetPayload sets the payload to the delete silence internal server error response func (o *DeleteSilenceInternalServerError) SetPayload(payload string) { o.Payload = payload } // WriteResponse to the client func (o *DeleteSilenceInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(500) payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/delete_silence_urlbuilder.go000066400000000000000000000062031476331240200331420ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "errors" "net/url" golangswaggerpaths "path" "strings" "github.com/go-openapi/strfmt" ) // DeleteSilenceURL generates an URL for the delete silence operation type DeleteSilenceURL struct { SilenceID strfmt.UUID _basePath string // avoid unkeyed usage _ struct{} } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *DeleteSilenceURL) WithBasePath(bp string) *DeleteSilenceURL { o.SetBasePath(bp) return o } // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *DeleteSilenceURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string func (o *DeleteSilenceURL) Build() (*url.URL, error) { var _result url.URL var _path = "/silence/{silenceID}" silenceID := o.SilenceID.String() if silenceID != "" { _path = strings.Replace(_path, "{silenceID}", silenceID, -1) } else { return nil, errors.New("silenceId is required on DeleteSilenceURL") } _basePath := o._basePath if _basePath == "" { _basePath = "/api/v2/" } _result.Path = golangswaggerpaths.Join(_basePath, _path) return &_result, nil } // Must is a helper function to panic when the url builder returns an error func (o *DeleteSilenceURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } if u == nil { panic("url can't be nil") } return u } // String returns the string representation of the path with query string func (o *DeleteSilenceURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string func (o *DeleteSilenceURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { return nil, errors.New("scheme is required for a full url on DeleteSilenceURL") } if host == "" { return nil, errors.New("host is required for a full url on DeleteSilenceURL") } base, err := o.Build() if err != nil { return nil, err } base.Scheme = scheme base.Host = host return base, nil } // StringFull returns the string representation of a complete url func (o *DeleteSilenceURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/get_silence.go000066400000000000000000000042241476331240200302270ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "net/http" "github.com/go-openapi/runtime/middleware" ) // GetSilenceHandlerFunc turns a function with the right signature into a get silence handler type GetSilenceHandlerFunc func(GetSilenceParams) middleware.Responder // Handle executing the request and returning a response func (fn GetSilenceHandlerFunc) Handle(params GetSilenceParams) middleware.Responder { return fn(params) } // GetSilenceHandler interface for that can handle valid get silence params type GetSilenceHandler interface { Handle(GetSilenceParams) middleware.Responder } // NewGetSilence creates a new http.Handler for the get silence operation func NewGetSilence(ctx *middleware.Context, handler GetSilenceHandler) *GetSilence { return &GetSilence{Context: ctx, Handler: handler} } /* GetSilence swagger:route GET /silence/{silenceID} silence getSilence Get a silence by its ID */ type GetSilence struct { Context *middleware.Context Handler GetSilenceHandler } func (o *GetSilence) ServeHTTP(rw http.ResponseWriter, r *http.Request) { route, rCtx, _ := o.Context.RouteInfo(r) if rCtx != nil { *r = *rCtx } var Params = NewGetSilenceParams() if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params o.Context.Respond(rw, r, route.Produces, route, err) return } res := o.Handler.Handle(Params) // actually handle the request o.Context.Respond(rw, r, route.Produces, route, res) } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/get_silence_parameters.go000066400000000000000000000057761476331240200324670ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/errors" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/strfmt" "github.com/go-openapi/validate" ) // NewGetSilenceParams creates a new GetSilenceParams object // // There are no default values defined in the spec. func NewGetSilenceParams() GetSilenceParams { return GetSilenceParams{} } // GetSilenceParams contains all the bound params for the get silence operation // typically these are obtained from a http.Request // // swagger:parameters getSilence type GetSilenceParams struct { // HTTP Request Object HTTPRequest *http.Request `json:"-"` /*ID of the silence to get Required: true In: path */ SilenceID strfmt.UUID } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface // for simple values it will use straight method calls. // // To ensure default values, the struct must have been initialized with NewGetSilenceParams() beforehand. func (o *GetSilenceParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { var res []error o.HTTPRequest = r rSilenceID, rhkSilenceID, _ := route.Params.GetOK("silenceID") if err := o.bindSilenceID(rSilenceID, rhkSilenceID, route.Formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // bindSilenceID binds and validates parameter SilenceID from path. func (o *GetSilenceParams) bindSilenceID(rawData []string, hasKey bool, formats strfmt.Registry) error { var raw string if len(rawData) > 0 { raw = rawData[len(rawData)-1] } // Required: true // Parameter is provided by construction from the route // Format: uuid value, err := formats.Parse("uuid", raw) if err != nil { return errors.InvalidType("silenceID", "path", "strfmt.UUID", raw) } o.SilenceID = *(value.(*strfmt.UUID)) if err := o.validateSilenceID(formats); err != nil { return err } return nil } // validateSilenceID carries on validations for parameter SilenceID func (o *GetSilenceParams) validateSilenceID(formats strfmt.Registry) error { if err := validate.FormatOf("silenceID", "path", "uuid", o.SilenceID.String(), formats); err != nil { return err } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/get_silence_responses.go000066400000000000000000000075041476331240200323340ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/runtime" "github.com/prometheus/alertmanager/api/v2/models" ) // GetSilenceOKCode is the HTTP code returned for type GetSilenceOK const GetSilenceOKCode int = 200 /* GetSilenceOK Get silence response swagger:response getSilenceOK */ type GetSilenceOK struct { /* In: Body */ Payload *models.GettableSilence `json:"body,omitempty"` } // NewGetSilenceOK creates GetSilenceOK with default headers values func NewGetSilenceOK() *GetSilenceOK { return &GetSilenceOK{} } // WithPayload adds the payload to the get silence o k response func (o *GetSilenceOK) WithPayload(payload *models.GettableSilence) *GetSilenceOK { o.Payload = payload return o } // SetPayload sets the payload to the get silence o k response func (o *GetSilenceOK) SetPayload(payload *models.GettableSilence) { o.Payload = payload } // WriteResponse to the client func (o *GetSilenceOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(200) if o.Payload != nil { payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } } // GetSilenceNotFoundCode is the HTTP code returned for type GetSilenceNotFound const GetSilenceNotFoundCode int = 404 /* GetSilenceNotFound A silence with the specified ID was not found swagger:response getSilenceNotFound */ type GetSilenceNotFound struct { } // NewGetSilenceNotFound creates GetSilenceNotFound with default headers values func NewGetSilenceNotFound() *GetSilenceNotFound { return &GetSilenceNotFound{} } // WriteResponse to the client func (o *GetSilenceNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.Header().Del(runtime.HeaderContentType) //Remove Content-Type on empty responses rw.WriteHeader(404) } // GetSilenceInternalServerErrorCode is the HTTP code returned for type GetSilenceInternalServerError const GetSilenceInternalServerErrorCode int = 500 /* GetSilenceInternalServerError Internal server error swagger:response getSilenceInternalServerError */ type GetSilenceInternalServerError struct { /* In: Body */ Payload string `json:"body,omitempty"` } // NewGetSilenceInternalServerError creates GetSilenceInternalServerError with default headers values func NewGetSilenceInternalServerError() *GetSilenceInternalServerError { return &GetSilenceInternalServerError{} } // WithPayload adds the payload to the get silence internal server error response func (o *GetSilenceInternalServerError) WithPayload(payload string) *GetSilenceInternalServerError { o.Payload = payload return o } // SetPayload sets the payload to the get silence internal server error response func (o *GetSilenceInternalServerError) SetPayload(payload string) { o.Payload = payload } // WriteResponse to the client func (o *GetSilenceInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(500) payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/get_silence_urlbuilder.go000066400000000000000000000061311476331240200324570ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "errors" "net/url" golangswaggerpaths "path" "strings" "github.com/go-openapi/strfmt" ) // GetSilenceURL generates an URL for the get silence operation type GetSilenceURL struct { SilenceID strfmt.UUID _basePath string // avoid unkeyed usage _ struct{} } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *GetSilenceURL) WithBasePath(bp string) *GetSilenceURL { o.SetBasePath(bp) return o } // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *GetSilenceURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string func (o *GetSilenceURL) Build() (*url.URL, error) { var _result url.URL var _path = "/silence/{silenceID}" silenceID := o.SilenceID.String() if silenceID != "" { _path = strings.Replace(_path, "{silenceID}", silenceID, -1) } else { return nil, errors.New("silenceId is required on GetSilenceURL") } _basePath := o._basePath if _basePath == "" { _basePath = "/api/v2/" } _result.Path = golangswaggerpaths.Join(_basePath, _path) return &_result, nil } // Must is a helper function to panic when the url builder returns an error func (o *GetSilenceURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } if u == nil { panic("url can't be nil") } return u } // String returns the string representation of the path with query string func (o *GetSilenceURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string func (o *GetSilenceURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { return nil, errors.New("scheme is required for a full url on GetSilenceURL") } if host == "" { return nil, errors.New("host is required for a full url on GetSilenceURL") } base, err := o.Build() if err != nil { return nil, err } base.Scheme = scheme base.Host = host return base, nil } // StringFull returns the string representation of a complete url func (o *GetSilenceURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/get_silences.go000066400000000000000000000042361476331240200304150ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "net/http" "github.com/go-openapi/runtime/middleware" ) // GetSilencesHandlerFunc turns a function with the right signature into a get silences handler type GetSilencesHandlerFunc func(GetSilencesParams) middleware.Responder // Handle executing the request and returning a response func (fn GetSilencesHandlerFunc) Handle(params GetSilencesParams) middleware.Responder { return fn(params) } // GetSilencesHandler interface for that can handle valid get silences params type GetSilencesHandler interface { Handle(GetSilencesParams) middleware.Responder } // NewGetSilences creates a new http.Handler for the get silences operation func NewGetSilences(ctx *middleware.Context, handler GetSilencesHandler) *GetSilences { return &GetSilences{Context: ctx, Handler: handler} } /* GetSilences swagger:route GET /silences silence getSilences Get a list of silences */ type GetSilences struct { Context *middleware.Context Handler GetSilencesHandler } func (o *GetSilences) ServeHTTP(rw http.ResponseWriter, r *http.Request) { route, rCtx, _ := o.Context.RouteInfo(r) if rCtx != nil { *r = *rCtx } var Params = NewGetSilencesParams() if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params o.Context.Respond(rw, r, route.Produces, route, err) return } res := o.Handler.Handle(Params) // actually handle the request o.Context.Respond(rw, r, route.Produces, route, res) } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/get_silences_parameters.go000066400000000000000000000053001476331240200326310ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/strfmt" ) // NewGetSilencesParams creates a new GetSilencesParams object // // There are no default values defined in the spec. func NewGetSilencesParams() GetSilencesParams { return GetSilencesParams{} } // GetSilencesParams contains all the bound params for the get silences operation // typically these are obtained from a http.Request // // swagger:parameters getSilences type GetSilencesParams struct { // HTTP Request Object HTTPRequest *http.Request `json:"-"` /*A list of matchers to filter silences by In: query Collection Format: multi */ Filter []string } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface // for simple values it will use straight method calls. // // To ensure default values, the struct must have been initialized with NewGetSilencesParams() beforehand. func (o *GetSilencesParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { var res []error o.HTTPRequest = r qs := runtime.Values(r.URL.Query()) qFilter, qhkFilter, _ := qs.GetOK("filter") if err := o.bindFilter(qFilter, qhkFilter, route.Formats); err != nil { res = append(res, err) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } // bindFilter binds and validates array parameter Filter from query. // // Arrays are parsed according to CollectionFormat: "multi" (defaults to "csv" when empty). func (o *GetSilencesParams) bindFilter(rawData []string, hasKey bool, formats strfmt.Registry) error { // CollectionFormat: multi filterIC := rawData if len(filterIC) == 0 { return nil } var filterIR []string for _, filterIV := range filterIC { filterI := filterIV filterIR = append(filterIR, filterI) } o.Filter = filterIR return nil } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/get_silences_responses.go000066400000000000000000000105611476331240200325140ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/runtime" "github.com/prometheus/alertmanager/api/v2/models" ) // GetSilencesOKCode is the HTTP code returned for type GetSilencesOK const GetSilencesOKCode int = 200 /* GetSilencesOK Get silences response swagger:response getSilencesOK */ type GetSilencesOK struct { /* In: Body */ Payload models.GettableSilences `json:"body,omitempty"` } // NewGetSilencesOK creates GetSilencesOK with default headers values func NewGetSilencesOK() *GetSilencesOK { return &GetSilencesOK{} } // WithPayload adds the payload to the get silences o k response func (o *GetSilencesOK) WithPayload(payload models.GettableSilences) *GetSilencesOK { o.Payload = payload return o } // SetPayload sets the payload to the get silences o k response func (o *GetSilencesOK) SetPayload(payload models.GettableSilences) { o.Payload = payload } // WriteResponse to the client func (o *GetSilencesOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(200) payload := o.Payload if payload == nil { // return empty array payload = models.GettableSilences{} } if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } // GetSilencesBadRequestCode is the HTTP code returned for type GetSilencesBadRequest const GetSilencesBadRequestCode int = 400 /* GetSilencesBadRequest Bad request swagger:response getSilencesBadRequest */ type GetSilencesBadRequest struct { /* In: Body */ Payload string `json:"body,omitempty"` } // NewGetSilencesBadRequest creates GetSilencesBadRequest with default headers values func NewGetSilencesBadRequest() *GetSilencesBadRequest { return &GetSilencesBadRequest{} } // WithPayload adds the payload to the get silences bad request response func (o *GetSilencesBadRequest) WithPayload(payload string) *GetSilencesBadRequest { o.Payload = payload return o } // SetPayload sets the payload to the get silences bad request response func (o *GetSilencesBadRequest) SetPayload(payload string) { o.Payload = payload } // WriteResponse to the client func (o *GetSilencesBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(400) payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } // GetSilencesInternalServerErrorCode is the HTTP code returned for type GetSilencesInternalServerError const GetSilencesInternalServerErrorCode int = 500 /* GetSilencesInternalServerError Internal server error swagger:response getSilencesInternalServerError */ type GetSilencesInternalServerError struct { /* In: Body */ Payload string `json:"body,omitempty"` } // NewGetSilencesInternalServerError creates GetSilencesInternalServerError with default headers values func NewGetSilencesInternalServerError() *GetSilencesInternalServerError { return &GetSilencesInternalServerError{} } // WithPayload adds the payload to the get silences internal server error response func (o *GetSilencesInternalServerError) WithPayload(payload string) *GetSilencesInternalServerError { o.Payload = payload return o } // SetPayload sets the payload to the get silences internal server error response func (o *GetSilencesInternalServerError) SetPayload(payload string) { o.Payload = payload } // WriteResponse to the client func (o *GetSilencesInternalServerError) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(500) payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/get_silences_urlbuilder.go000066400000000000000000000062741476331240200326520ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "errors" "net/url" golangswaggerpaths "path" "github.com/go-openapi/swag" ) // GetSilencesURL generates an URL for the get silences operation type GetSilencesURL struct { Filter []string _basePath string // avoid unkeyed usage _ struct{} } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *GetSilencesURL) WithBasePath(bp string) *GetSilencesURL { o.SetBasePath(bp) return o } // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *GetSilencesURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string func (o *GetSilencesURL) Build() (*url.URL, error) { var _result url.URL var _path = "/silences" _basePath := o._basePath if _basePath == "" { _basePath = "/api/v2/" } _result.Path = golangswaggerpaths.Join(_basePath, _path) qs := make(url.Values) var filterIR []string for _, filterI := range o.Filter { filterIS := filterI if filterIS != "" { filterIR = append(filterIR, filterIS) } } filter := swag.JoinByFormat(filterIR, "multi") for _, qsv := range filter { qs.Add("filter", qsv) } _result.RawQuery = qs.Encode() return &_result, nil } // Must is a helper function to panic when the url builder returns an error func (o *GetSilencesURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } if u == nil { panic("url can't be nil") } return u } // String returns the string representation of the path with query string func (o *GetSilencesURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string func (o *GetSilencesURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { return nil, errors.New("scheme is required for a full url on GetSilencesURL") } if host == "" { return nil, errors.New("host is required for a full url on GetSilencesURL") } base, err := o.Build() if err != nil { return nil, err } base.Scheme = scheme base.Host = host return base, nil } // StringFull returns the string representation of a complete url func (o *GetSilencesURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/post_silences.go000066400000000000000000000062441476331240200306240ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "context" "net/http" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/strfmt" "github.com/go-openapi/swag" ) // PostSilencesHandlerFunc turns a function with the right signature into a post silences handler type PostSilencesHandlerFunc func(PostSilencesParams) middleware.Responder // Handle executing the request and returning a response func (fn PostSilencesHandlerFunc) Handle(params PostSilencesParams) middleware.Responder { return fn(params) } // PostSilencesHandler interface for that can handle valid post silences params type PostSilencesHandler interface { Handle(PostSilencesParams) middleware.Responder } // NewPostSilences creates a new http.Handler for the post silences operation func NewPostSilences(ctx *middleware.Context, handler PostSilencesHandler) *PostSilences { return &PostSilences{Context: ctx, Handler: handler} } /* PostSilences swagger:route POST /silences silence postSilences Post a new silence or update an existing one */ type PostSilences struct { Context *middleware.Context Handler PostSilencesHandler } func (o *PostSilences) ServeHTTP(rw http.ResponseWriter, r *http.Request) { route, rCtx, _ := o.Context.RouteInfo(r) if rCtx != nil { *r = *rCtx } var Params = NewPostSilencesParams() if err := o.Context.BindValidRequest(r, route, &Params); err != nil { // bind params o.Context.Respond(rw, r, route.Produces, route, err) return } res := o.Handler.Handle(Params) // actually handle the request o.Context.Respond(rw, r, route.Produces, route, res) } // PostSilencesOKBody post silences o k body // // swagger:model PostSilencesOKBody type PostSilencesOKBody struct { // silence ID SilenceID string `json:"silenceID,omitempty"` } // Validate validates this post silences o k body func (o *PostSilencesOKBody) Validate(formats strfmt.Registry) error { return nil } // ContextValidate validates this post silences o k body based on context it is used func (o *PostSilencesOKBody) ContextValidate(ctx context.Context, formats strfmt.Registry) error { return nil } // MarshalBinary interface implementation func (o *PostSilencesOKBody) MarshalBinary() ([]byte, error) { if o == nil { return nil, nil } return swag.WriteJSON(o) } // UnmarshalBinary interface implementation func (o *PostSilencesOKBody) UnmarshalBinary(b []byte) error { var res PostSilencesOKBody if err := swag.ReadJSON(b, &res); err != nil { return err } *o = res return nil } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/post_silences_parameters.go000066400000000000000000000054171476331240200330500ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "io" "net/http" "github.com/go-openapi/errors" "github.com/go-openapi/runtime" "github.com/go-openapi/runtime/middleware" "github.com/go-openapi/validate" "github.com/prometheus/alertmanager/api/v2/models" ) // NewPostSilencesParams creates a new PostSilencesParams object // // There are no default values defined in the spec. func NewPostSilencesParams() PostSilencesParams { return PostSilencesParams{} } // PostSilencesParams contains all the bound params for the post silences operation // typically these are obtained from a http.Request // // swagger:parameters postSilences type PostSilencesParams struct { // HTTP Request Object HTTPRequest *http.Request `json:"-"` /*The silence to create Required: true In: body */ Silence *models.PostableSilence } // BindRequest both binds and validates a request, it assumes that complex things implement a Validatable(strfmt.Registry) error interface // for simple values it will use straight method calls. // // To ensure default values, the struct must have been initialized with NewPostSilencesParams() beforehand. func (o *PostSilencesParams) BindRequest(r *http.Request, route *middleware.MatchedRoute) error { var res []error o.HTTPRequest = r if runtime.HasBody(r) { defer r.Body.Close() var body models.PostableSilence if err := route.Consumer.Consume(r.Body, &body); err != nil { if err == io.EOF { res = append(res, errors.Required("silence", "body", "")) } else { res = append(res, errors.NewParseError("silence", "body", "", err)) } } else { // validate body object if err := body.Validate(route.Formats); err != nil { res = append(res, err) } ctx := validate.WithOperationRequest(r.Context()) if err := body.ContextValidate(ctx, route.Formats); err != nil { res = append(res, err) } if len(res) == 0 { o.Silence = &body } } } else { res = append(res, errors.Required("silence", "body", "")) } if len(res) > 0 { return errors.CompositeValidationError(res...) } return nil } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/post_silences_responses.go000066400000000000000000000102201476331240200327120ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command import ( "net/http" "github.com/go-openapi/runtime" ) // PostSilencesOKCode is the HTTP code returned for type PostSilencesOK const PostSilencesOKCode int = 200 /* PostSilencesOK Create / update silence response swagger:response postSilencesOK */ type PostSilencesOK struct { /* In: Body */ Payload *PostSilencesOKBody `json:"body,omitempty"` } // NewPostSilencesOK creates PostSilencesOK with default headers values func NewPostSilencesOK() *PostSilencesOK { return &PostSilencesOK{} } // WithPayload adds the payload to the post silences o k response func (o *PostSilencesOK) WithPayload(payload *PostSilencesOKBody) *PostSilencesOK { o.Payload = payload return o } // SetPayload sets the payload to the post silences o k response func (o *PostSilencesOK) SetPayload(payload *PostSilencesOKBody) { o.Payload = payload } // WriteResponse to the client func (o *PostSilencesOK) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(200) if o.Payload != nil { payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } } // PostSilencesBadRequestCode is the HTTP code returned for type PostSilencesBadRequest const PostSilencesBadRequestCode int = 400 /* PostSilencesBadRequest Bad request swagger:response postSilencesBadRequest */ type PostSilencesBadRequest struct { /* In: Body */ Payload string `json:"body,omitempty"` } // NewPostSilencesBadRequest creates PostSilencesBadRequest with default headers values func NewPostSilencesBadRequest() *PostSilencesBadRequest { return &PostSilencesBadRequest{} } // WithPayload adds the payload to the post silences bad request response func (o *PostSilencesBadRequest) WithPayload(payload string) *PostSilencesBadRequest { o.Payload = payload return o } // SetPayload sets the payload to the post silences bad request response func (o *PostSilencesBadRequest) SetPayload(payload string) { o.Payload = payload } // WriteResponse to the client func (o *PostSilencesBadRequest) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(400) payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } // PostSilencesNotFoundCode is the HTTP code returned for type PostSilencesNotFound const PostSilencesNotFoundCode int = 404 /* PostSilencesNotFound A silence with the specified ID was not found swagger:response postSilencesNotFound */ type PostSilencesNotFound struct { /* In: Body */ Payload string `json:"body,omitempty"` } // NewPostSilencesNotFound creates PostSilencesNotFound with default headers values func NewPostSilencesNotFound() *PostSilencesNotFound { return &PostSilencesNotFound{} } // WithPayload adds the payload to the post silences not found response func (o *PostSilencesNotFound) WithPayload(payload string) *PostSilencesNotFound { o.Payload = payload return o } // SetPayload sets the payload to the post silences not found response func (o *PostSilencesNotFound) SetPayload(payload string) { o.Payload = payload } // WriteResponse to the client func (o *PostSilencesNotFound) WriteResponse(rw http.ResponseWriter, producer runtime.Producer) { rw.WriteHeader(404) payload := o.Payload if err := producer.Produce(rw, payload); err != nil { panic(err) // let the recovery middleware deal with this } } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/operations/silence/post_silences_urlbuilder.go000066400000000000000000000054671476331240200330630ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package silence // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the generate command import ( "errors" "net/url" golangswaggerpaths "path" ) // PostSilencesURL generates an URL for the post silences operation type PostSilencesURL struct { _basePath string } // WithBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *PostSilencesURL) WithBasePath(bp string) *PostSilencesURL { o.SetBasePath(bp) return o } // SetBasePath sets the base path for this url builder, only required when it's different from the // base path specified in the swagger spec. // When the value of the base path is an empty string func (o *PostSilencesURL) SetBasePath(bp string) { o._basePath = bp } // Build a url path and query string func (o *PostSilencesURL) Build() (*url.URL, error) { var _result url.URL var _path = "/silences" _basePath := o._basePath if _basePath == "" { _basePath = "/api/v2/" } _result.Path = golangswaggerpaths.Join(_basePath, _path) return &_result, nil } // Must is a helper function to panic when the url builder returns an error func (o *PostSilencesURL) Must(u *url.URL, err error) *url.URL { if err != nil { panic(err) } if u == nil { panic("url can't be nil") } return u } // String returns the string representation of the path with query string func (o *PostSilencesURL) String() string { return o.Must(o.Build()).String() } // BuildFull builds a full url with scheme, host, path and query string func (o *PostSilencesURL) BuildFull(scheme, host string) (*url.URL, error) { if scheme == "" { return nil, errors.New("scheme is required for a full url on PostSilencesURL") } if host == "" { return nil, errors.New("host is required for a full url on PostSilencesURL") } base, err := o.Build() if err != nil { return nil, err } base.Scheme = scheme base.Host = host return base, nil } // StringFull returns the string representation of a complete url func (o *PostSilencesURL) StringFull(scheme, host string) string { return o.Must(o.BuildFull(scheme, host)).String() } prometheus-alertmanager-0.28.1+ds/api/v2/restapi/server.go000066400000000000000000000373751476331240200234640ustar00rootroot00000000000000// Code generated by go-swagger; DO NOT EDIT. // Copyright Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // package restapi import ( "context" "crypto/tls" "crypto/x509" "errors" "fmt" "log" "net" "net/http" "os" "os/signal" "strconv" "sync" "sync/atomic" "syscall" "time" "github.com/go-openapi/runtime/flagext" "github.com/go-openapi/swag" flags "github.com/jessevdk/go-flags" "golang.org/x/net/netutil" "github.com/prometheus/alertmanager/api/v2/restapi/operations" ) const ( schemeHTTP = "http" schemeHTTPS = "https" schemeUnix = "unix" ) var defaultSchemes []string func init() { defaultSchemes = []string{ schemeHTTP, } } // NewServer creates a new api alertmanager server but does not configure it func NewServer(api *operations.AlertmanagerAPI) *Server { s := new(Server) s.shutdown = make(chan struct{}) s.api = api s.interrupt = make(chan os.Signal, 1) return s } // ConfigureAPI configures the API and handlers. func (s *Server) ConfigureAPI() { if s.api != nil { s.handler = configureAPI(s.api) } } // ConfigureFlags configures the additional flags defined by the handlers. Needs to be called before the parser.Parse func (s *Server) ConfigureFlags() { if s.api != nil { configureFlags(s.api) } } // Server for the alertmanager API type Server struct { EnabledListeners []string `long:"scheme" description:"the listeners to enable, this can be repeated and defaults to the schemes in the swagger spec"` CleanupTimeout time.Duration `long:"cleanup-timeout" description:"grace period for which to wait before killing idle connections" default:"10s"` GracefulTimeout time.Duration `long:"graceful-timeout" description:"grace period for which to wait before shutting down the server" default:"15s"` MaxHeaderSize flagext.ByteSize `long:"max-header-size" description:"controls the maximum number of bytes the server will read parsing the request header's keys and values, including the request line. It does not limit the size of the request body." default:"1MiB"` SocketPath flags.Filename `long:"socket-path" description:"the unix socket to listen on" default:"/var/run/alertmanager.sock"` domainSocketL net.Listener Host string `long:"host" description:"the IP to listen on" default:"localhost" env:"HOST"` Port int `long:"port" description:"the port to listen on for insecure connections, defaults to a random value" env:"PORT"` ListenLimit int `long:"listen-limit" description:"limit the number of outstanding requests"` KeepAlive time.Duration `long:"keep-alive" description:"sets the TCP keep-alive timeouts on accepted connections. It prunes dead TCP connections ( e.g. closing laptop mid-download)" default:"3m"` ReadTimeout time.Duration `long:"read-timeout" description:"maximum duration before timing out read of the request" default:"30s"` WriteTimeout time.Duration `long:"write-timeout" description:"maximum duration before timing out write of the response" default:"60s"` httpServerL net.Listener TLSHost string `long:"tls-host" description:"the IP to listen on for tls, when not specified it's the same as --host" env:"TLS_HOST"` TLSPort int `long:"tls-port" description:"the port to listen on for secure connections, defaults to a random value" env:"TLS_PORT"` TLSCertificate flags.Filename `long:"tls-certificate" description:"the certificate to use for secure connections" env:"TLS_CERTIFICATE"` TLSCertificateKey flags.Filename `long:"tls-key" description:"the private key to use for secure connections" env:"TLS_PRIVATE_KEY"` TLSCACertificate flags.Filename `long:"tls-ca" description:"the certificate authority file to be used with mutual tls auth" env:"TLS_CA_CERTIFICATE"` TLSListenLimit int `long:"tls-listen-limit" description:"limit the number of outstanding requests"` TLSKeepAlive time.Duration `long:"tls-keep-alive" description:"sets the TCP keep-alive timeouts on accepted connections. It prunes dead TCP connections ( e.g. closing laptop mid-download)"` TLSReadTimeout time.Duration `long:"tls-read-timeout" description:"maximum duration before timing out read of the request"` TLSWriteTimeout time.Duration `long:"tls-write-timeout" description:"maximum duration before timing out write of the response"` httpsServerL net.Listener api *operations.AlertmanagerAPI handler http.Handler hasListeners bool shutdown chan struct{} shuttingDown int32 interrupted bool interrupt chan os.Signal } // Logf logs message either via defined user logger or via system one if no user logger is defined. func (s *Server) Logf(f string, args ...interface{}) { if s.api != nil && s.api.Logger != nil { s.api.Logger(f, args...) } else { log.Printf(f, args...) } } // Fatalf logs message either via defined user logger or via system one if no user logger is defined. // Exits with non-zero status after printing func (s *Server) Fatalf(f string, args ...interface{}) { if s.api != nil && s.api.Logger != nil { s.api.Logger(f, args...) os.Exit(1) } else { log.Fatalf(f, args...) } } // SetAPI configures the server with the specified API. Needs to be called before Serve func (s *Server) SetAPI(api *operations.AlertmanagerAPI) { if api == nil { s.api = nil s.handler = nil return } s.api = api s.handler = configureAPI(api) } func (s *Server) hasScheme(scheme string) bool { schemes := s.EnabledListeners if len(schemes) == 0 { schemes = defaultSchemes } for _, v := range schemes { if v == scheme { return true } } return false } // Serve the api func (s *Server) Serve() (err error) { if !s.hasListeners { if err = s.Listen(); err != nil { return err } } // set default handler, if none is set if s.handler == nil { if s.api == nil { return errors.New("can't create the default handler, as no api is set") } s.SetHandler(s.api.Serve(nil)) } wg := new(sync.WaitGroup) once := new(sync.Once) signalNotify(s.interrupt) go handleInterrupt(once, s) servers := []*http.Server{} if s.hasScheme(schemeUnix) { domainSocket := new(http.Server) domainSocket.MaxHeaderBytes = int(s.MaxHeaderSize) domainSocket.Handler = s.handler if int64(s.CleanupTimeout) > 0 { domainSocket.IdleTimeout = s.CleanupTimeout } configureServer(domainSocket, "unix", string(s.SocketPath)) servers = append(servers, domainSocket) wg.Add(1) s.Logf("Serving alertmanager at unix://%s", s.SocketPath) go func(l net.Listener) { defer wg.Done() if err := domainSocket.Serve(l); err != nil && err != http.ErrServerClosed { s.Fatalf("%v", err) } s.Logf("Stopped serving alertmanager at unix://%s", s.SocketPath) }(s.domainSocketL) } if s.hasScheme(schemeHTTP) { httpServer := new(http.Server) httpServer.MaxHeaderBytes = int(s.MaxHeaderSize) httpServer.ReadTimeout = s.ReadTimeout httpServer.WriteTimeout = s.WriteTimeout httpServer.SetKeepAlivesEnabled(int64(s.KeepAlive) > 0) if s.ListenLimit > 0 { s.httpServerL = netutil.LimitListener(s.httpServerL, s.ListenLimit) } if int64(s.CleanupTimeout) > 0 { httpServer.IdleTimeout = s.CleanupTimeout } httpServer.Handler = s.handler configureServer(httpServer, "http", s.httpServerL.Addr().String()) servers = append(servers, httpServer) wg.Add(1) s.Logf("Serving alertmanager at http://%s", s.httpServerL.Addr()) go func(l net.Listener) { defer wg.Done() if err := httpServer.Serve(l); err != nil && err != http.ErrServerClosed { s.Fatalf("%v", err) } s.Logf("Stopped serving alertmanager at http://%s", l.Addr()) }(s.httpServerL) } if s.hasScheme(schemeHTTPS) { httpsServer := new(http.Server) httpsServer.MaxHeaderBytes = int(s.MaxHeaderSize) httpsServer.ReadTimeout = s.TLSReadTimeout httpsServer.WriteTimeout = s.TLSWriteTimeout httpsServer.SetKeepAlivesEnabled(int64(s.TLSKeepAlive) > 0) if s.TLSListenLimit > 0 { s.httpsServerL = netutil.LimitListener(s.httpsServerL, s.TLSListenLimit) } if int64(s.CleanupTimeout) > 0 { httpsServer.IdleTimeout = s.CleanupTimeout } httpsServer.Handler = s.handler // Inspired by https://blog.bracebin.com/achieving-perfect-ssl-labs-score-with-go httpsServer.TLSConfig = &tls.Config{ // Causes servers to use Go's default ciphersuite preferences, // which are tuned to avoid attacks. Does nothing on clients. PreferServerCipherSuites: true, // Only use curves which have assembly implementations // https://github.com/golang/go/tree/master/src/crypto/elliptic CurvePreferences: []tls.CurveID{tls.CurveP256}, // Use modern tls mode https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility NextProtos: []string{"h2", "http/1.1"}, // https://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet#Rule_-_Only_Support_Strong_Protocols MinVersion: tls.VersionTLS12, // These ciphersuites support Forward Secrecy: https://en.wikipedia.org/wiki/Forward_secrecy CipherSuites: []uint16{ tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305, tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305, }, } // build standard config from server options if s.TLSCertificate != "" && s.TLSCertificateKey != "" { httpsServer.TLSConfig.Certificates = make([]tls.Certificate, 1) httpsServer.TLSConfig.Certificates[0], err = tls.LoadX509KeyPair(string(s.TLSCertificate), string(s.TLSCertificateKey)) if err != nil { return err } } if s.TLSCACertificate != "" { // include specified CA certificate caCert, caCertErr := os.ReadFile(string(s.TLSCACertificate)) if caCertErr != nil { return caCertErr } caCertPool := x509.NewCertPool() ok := caCertPool.AppendCertsFromPEM(caCert) if !ok { return fmt.Errorf("cannot parse CA certificate") } httpsServer.TLSConfig.ClientCAs = caCertPool httpsServer.TLSConfig.ClientAuth = tls.RequireAndVerifyClientCert } // call custom TLS configurator configureTLS(httpsServer.TLSConfig) if len(httpsServer.TLSConfig.Certificates) == 0 && httpsServer.TLSConfig.GetCertificate == nil { // after standard and custom config are passed, this ends up with no certificate if s.TLSCertificate == "" { if s.TLSCertificateKey == "" { s.Fatalf("the required flags `--tls-certificate` and `--tls-key` were not specified") } s.Fatalf("the required flag `--tls-certificate` was not specified") } if s.TLSCertificateKey == "" { s.Fatalf("the required flag `--tls-key` was not specified") } // this happens with a wrong custom TLS configurator s.Fatalf("no certificate was configured for TLS") } configureServer(httpsServer, "https", s.httpsServerL.Addr().String()) servers = append(servers, httpsServer) wg.Add(1) s.Logf("Serving alertmanager at https://%s", s.httpsServerL.Addr()) go func(l net.Listener) { defer wg.Done() if err := httpsServer.Serve(l); err != nil && err != http.ErrServerClosed { s.Fatalf("%v", err) } s.Logf("Stopped serving alertmanager at https://%s", l.Addr()) }(tls.NewListener(s.httpsServerL, httpsServer.TLSConfig)) } wg.Add(1) go s.handleShutdown(wg, &servers) wg.Wait() return nil } // Listen creates the listeners for the server func (s *Server) Listen() error { if s.hasListeners { // already done this return nil } if s.hasScheme(schemeHTTPS) { // Use http host if https host wasn't defined if s.TLSHost == "" { s.TLSHost = s.Host } // Use http listen limit if https listen limit wasn't defined if s.TLSListenLimit == 0 { s.TLSListenLimit = s.ListenLimit } // Use http tcp keep alive if https tcp keep alive wasn't defined if int64(s.TLSKeepAlive) == 0 { s.TLSKeepAlive = s.KeepAlive } // Use http read timeout if https read timeout wasn't defined if int64(s.TLSReadTimeout) == 0 { s.TLSReadTimeout = s.ReadTimeout } // Use http write timeout if https write timeout wasn't defined if int64(s.TLSWriteTimeout) == 0 { s.TLSWriteTimeout = s.WriteTimeout } } if s.hasScheme(schemeUnix) { domSockListener, err := net.Listen("unix", string(s.SocketPath)) if err != nil { return err } s.domainSocketL = domSockListener } if s.hasScheme(schemeHTTP) { listener, err := net.Listen("tcp", net.JoinHostPort(s.Host, strconv.Itoa(s.Port))) if err != nil { return err } h, p, err := swag.SplitHostPort(listener.Addr().String()) if err != nil { return err } s.Host = h s.Port = p s.httpServerL = listener } if s.hasScheme(schemeHTTPS) { tlsListener, err := net.Listen("tcp", net.JoinHostPort(s.TLSHost, strconv.Itoa(s.TLSPort))) if err != nil { return err } sh, sp, err := swag.SplitHostPort(tlsListener.Addr().String()) if err != nil { return err } s.TLSHost = sh s.TLSPort = sp s.httpsServerL = tlsListener } s.hasListeners = true return nil } // Shutdown server and clean up resources func (s *Server) Shutdown() error { if atomic.CompareAndSwapInt32(&s.shuttingDown, 0, 1) { close(s.shutdown) } return nil } func (s *Server) handleShutdown(wg *sync.WaitGroup, serversPtr *[]*http.Server) { // wg.Done must occur last, after s.api.ServerShutdown() // (to preserve old behaviour) defer wg.Done() <-s.shutdown servers := *serversPtr ctx, cancel := context.WithTimeout(context.TODO(), s.GracefulTimeout) defer cancel() // first execute the pre-shutdown hook s.api.PreServerShutdown() shutdownChan := make(chan bool) for i := range servers { server := servers[i] go func() { var success bool defer func() { shutdownChan <- success }() if err := server.Shutdown(ctx); err != nil { // Error from closing listeners, or context timeout: s.Logf("HTTP server Shutdown: %v", err) } else { success = true } }() } // Wait until all listeners have successfully shut down before calling ServerShutdown success := true for range servers { success = success && <-shutdownChan } if success { s.api.ServerShutdown() } } // GetHandler returns a handler useful for testing func (s *Server) GetHandler() http.Handler { return s.handler } // SetHandler allows for setting a http handler on this server func (s *Server) SetHandler(handler http.Handler) { s.handler = handler } // UnixListener returns the domain socket listener func (s *Server) UnixListener() (net.Listener, error) { if !s.hasListeners { if err := s.Listen(); err != nil { return nil, err } } return s.domainSocketL, nil } // HTTPListener returns the http listener func (s *Server) HTTPListener() (net.Listener, error) { if !s.hasListeners { if err := s.Listen(); err != nil { return nil, err } } return s.httpServerL, nil } // TLSListener returns the https listener func (s *Server) TLSListener() (net.Listener, error) { if !s.hasListeners { if err := s.Listen(); err != nil { return nil, err } } return s.httpsServerL, nil } func handleInterrupt(once *sync.Once, s *Server) { once.Do(func() { for range s.interrupt { if s.interrupted { s.Logf("Server already shutting down") continue } s.interrupted = true s.Logf("Shutting down... ") if err := s.Shutdown(); err != nil { s.Logf("HTTP server Shutdown: %v", err) } } }) } func signalNotify(interrupt chan<- os.Signal) { signal.Notify(interrupt, syscall.SIGINT, syscall.SIGTERM) } prometheus-alertmanager-0.28.1+ds/api/v2/testing.go000066400000000000000000000035031476331240200221460ustar00rootroot00000000000000// Copyright 2022 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package v2 import ( "testing" "time" "github.com/go-openapi/strfmt" open_api_models "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/pkg/labels" "github.com/prometheus/alertmanager/silence/silencepb" ) func createSilence(t *testing.T, ID, creator string, start, ends time.Time) open_api_models.PostableSilence { t.Helper() comment := "test" matcherName := "a" matcherValue := "b" isRegex := false startsAt := strfmt.DateTime(start) endsAt := strfmt.DateTime(ends) sil := open_api_models.PostableSilence{ ID: ID, Silence: open_api_models.Silence{ Matchers: open_api_models.Matchers{&open_api_models.Matcher{Name: &matcherName, Value: &matcherValue, IsRegex: &isRegex}}, StartsAt: &startsAt, EndsAt: &endsAt, CreatedBy: &creator, Comment: &comment, }, } return sil } func createSilenceMatcher(t *testing.T, name, pattern string, matcherType silencepb.Matcher_Type) *silencepb.Matcher { t.Helper() return &silencepb.Matcher{ Name: name, Pattern: pattern, Type: matcherType, } } func createLabelMatcher(t *testing.T, name, value string, matchType labels.MatchType) *labels.Matcher { t.Helper() matcher, _ := labels.NewMatcher(matchType, name, value) return matcher } prometheus-alertmanager-0.28.1+ds/asset/000077500000000000000000000000001476331240200201605ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/asset/asset.go000066400000000000000000000025241476331240200216310ustar00rootroot00000000000000// Copyright 2018 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //go:build dev // +build dev package asset import ( "net/http" "os" "strings" "github.com/shurcooL/httpfs/filter" "github.com/shurcooL/httpfs/union" ) var static http.FileSystem = filter.Keep( http.Dir("../ui/app"), func(path string, fi os.FileInfo) bool { return path == "/" || path == "/script.js" || path == "/index.html" || path == "/favicon.ico" || strings.HasPrefix(path, "/lib") }, ) var templates http.FileSystem = filter.Keep( http.Dir("../template"), func(path string, fi os.FileInfo) bool { return path == "/" || path == "/default.tmpl" || path == "/email.tmpl" }, ) // Assets contains the project's assets. var Assets http.FileSystem = union.New(map[string]http.FileSystem{ "/templates": templates, "/static": static, }) prometheus-alertmanager-0.28.1+ds/asset/asset_generate.go000066400000000000000000000020061476331240200234760ustar00rootroot00000000000000// Copyright 2018 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //go:build ignore // +build ignore package main import ( "log" "time" "github.com/shurcooL/vfsgen" "github.com/prometheus/alertmanager/asset" "github.com/prometheus/alertmanager/pkg/modtimevfs" ) func main() { fs := modtimevfs.New(asset.Assets, time.Unix(1, 0)) err := vfsgen.Generate(fs, vfsgen.Options{ PackageName: "asset", BuildTags: "!dev", VariableName: "Assets", }) if err != nil { log.Fatalln(err) } } prometheus-alertmanager-0.28.1+ds/asset/assets_vfsdata.go000066400000000000000000126633321476331240200235410ustar00rootroot00000000000000// Code generated by vfsgen; DO NOT EDIT. //go:build !dev package asset import ( "bytes" "compress/gzip" "fmt" "io" "net/http" "os" pathpkg "path" "time" ) // Assets statically implements the virtual filesystem provided to vfsgen. var Assets = func() http.FileSystem { fs := vfsgen۰FS{ "/": &vfsgen۰DirInfo{ name: "/", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), }, "/static": &vfsgen۰DirInfo{ name: "static", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), }, "/static/favicon.ico": &vfsgen۰CompressedFileInfo{ name: "favicon.ico", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 15086, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xd4\x5b\x09\x70\x54\x45\xfa\xef\x18\x94\x7f\xf9\xdf\x5a\x52\x6b\xa9\xab\xe5\x16\xac\x4a\x19\x83\x62\x74\x85\x12\xd7\x15\x77\xa5\x54\x3c\x08\x84\xfb\x52\x50\x10\x10\x16\x44\x10\x14\x01\xb3\x20\x78\xb1\xe8\x6a\x5c\x45\x14\x01\x0f\x0e\x15\x35\x88\x88\xae\x6b\x10\x50\x97\xd3\x0b\x89\x28\x10\x91\xc9\x64\xae\x64\x32\x99\x7b\xe6\xbd\xdf\xd6\xd7\xd3\x3d\xbe\x99\xcc\x7b\xaf\x67\x88\xeb\xee\x57\xf5\x55\x27\x6f\x5e\x77\x7f\xdd\xfd\xdd\x5f\x3f\xc6\x8a\x58\x31\x2b\x29\xa1\xb6\x0b\x9b\xd8\x81\xb1\x9e\x8c\xb1\x2e\x5d\x52\xff\xaf\x2d\x61\x6c\x45\x07\xc6\xca\xcb\xc5\xff\x5d\x19\xbb\xe6\x54\xc6\x4a\x19\x63\x25\xf4\x1e\x4b\x3d\xe7\xd0\x81\x59\x02\x80\x8e\x00\xfa\x02\x58\xab\x69\x38\xe6\x6d\xd6\x12\x3e\xbf\x96\xd0\x34\x1c\x05\xf0\x12\x80\x3e\x00\x4e\x32\xe9\x7b\x06\x80\x6a\x00\xcd\x91\x98\x8e\x67\x5f\x6b\x45\xff\x69\x6e\x0c\x98\xee\xc6\xca\xb7\x82\x88\xc5\x75\x00\xf0\x01\xf8\x2b\x80\x53\x73\xf4\xad\x81\x80\xba\x23\x71\x8c\x9e\xe3\x45\xe5\x74\x37\xc7\x31\xf3\xbc\x38\x7c\x2c\x21\x7f\xa6\x81\xd6\xcb\x31\x88\x1e\x00\x4f\xd2\x0f\x49\x0d\xd8\xb8\x35\x8c\xc7\x5f\x0a\xe0\xc1\xe7\x5b\x32\x90\x9e\x6d\xde\x1e\x86\xa6\xa7\xc7\x78\x18\x40\x07\x00\xd7\x03\x68\xa2\x87\xf1\x84\x8e\x85\xcf\xfa\x31\xe8\x2e\x0f\x86\xde\x9d\x89\x03\xef\xf2\xe0\x91\x17\x5a\xf8\x1c\x02\x5c\x00\xae\xa2\xbd\x92\x0f\x5a\x43\x3a\xd6\x6c\x0e\xe2\xa9\xb5\x01\x3c\xbd\xbe\x35\x03\xe9\xd9\xba\x2d\x21\x84\xc2\x3a\x0c\xb0\x1c\xc0\x0f\xf2\x9f\x55\x35\x41\x5c\x3a\xcc\x89\xf2\xc1\x0d\xe8\x36\x20\x13\x2f\x19\xea\xc4\xef\x86\x39\xf1\xca\x3b\x41\x63\xff\x6f\x00\x24\x24\xed\xef\x6c\x0b\xe3\x8d\x0f\x42\xe8\x37\xd5\x8d\xb2\x01\x0d\xb8\xa0\x32\x85\x65\xfd\x1b\x30\x71\xa1\x8f\xef\x0d\xbd\x93\x48\xa6\xfb\x07\x64\x7f\x09\xbb\xf6\xc7\xd0\x63\x84\x13\xdd\x2a\x33\xfb\xdf\x38\xc5\x0d\x77\x53\x12\x59\x40\xfd\x8f\x1a\x1f\xec\xd8\x17\xc5\xc5\x43\xb3\xfa\x0f\x68\x40\x9f\xdb\x5d\x70\xb8\xda\xf4\xaf\x03\xf0\x8a\xf1\xc1\x0f\x8d\x49\x5c\x3b\xd1\x85\x0b\x07\xa6\xd6\x7d\xd9\x28\x27\x2e\x1e\xe2\xc4\xad\xf3\xbd\x08\x47\xf4\xec\xfe\xcb\x00\x5c\x0b\xc0\x2b\x1f\xd0\xf9\xcc\x79\xa2\x19\xe3\xaa\x7c\x7c\xcf\x06\xcd\xf0\x70\xda\x37\x7c\x10\xca\xee\xeb\x04\x70\x25\x80\x13\x01\x3c\x66\xfc\x81\xf6\x88\x78\xe5\xea\xf1\x2e\x3c\xb4\xa2\x05\x8f\xbd\x18\x80\xc3\x9d\x41\x3b\x11\xb2\x08\x40\xb1\xe0\xc1\xd3\x01\xbc\x2e\x9e\x23\x14\xd1\xe1\x69\xd2\x70\xf3\x7d\x5e\xec\xde\x1f\xc3\xf7\x0d\x09\x23\xed\xc4\x41\x2f\x03\x38\x25\x4b\x06\x4e\x03\xb0\x54\xc8\x08\x3f\xa3\xd7\xff\x11\x82\xcf\xaf\x19\xe7\x75\x03\x78\x30\xbb\xaf\x61\x8c\x93\x84\x8c\xae\x06\x70\x38\x16\xd7\xc3\x49\x0d\xb4\xf0\xef\x00\x3c\x2f\xf8\xf5\x44\x63\x9f\x68\x67\xc6\xea\x3b\x32\x56\x5b\xcc\x58\x55\x51\x0a\xcd\x40\xfe\x4e\xef\x52\x1f\xea\x5b\x2a\x74\xcc\x55\x46\x3d\x53\xc2\x0a\x02\x21\x8f\x65\x00\xa6\x02\xd8\x00\xe0\xa0\xe0\xb1\xa4\x40\x3f\x80\x03\x42\xe6\x26\x00\x38\x57\x9e\xc1\xf1\x80\x98\xf7\x32\x00\xcf\x00\xa8\x17\x73\x71\x20\xbd\xd5\xd4\xa2\xa1\x39\xa0\x21\x91\xc8\xe0\xbf\x38\x80\x6f\x05\xef\x94\x03\x38\xa1\xc0\xb9\xcf\x12\x3a\xd1\x63\x1c\x3c\x1c\xd5\x51\x53\x1b\xc6\xe4\xc5\xbe\x94\x1e\xbd\xd3\x8d\xe9\x8f\x34\xe1\xfd\x4f\x22\x52\x97\x1a\xc1\x01\xa0\x2a\x5b\xaf\x2a\xcc\x4d\x6b\xde\x21\xf9\x56\x02\xe9\x6f\xe2\x7b\xd2\x43\xa5\x15\x29\xf9\x27\xa4\xbf\x49\x3f\x91\x3e\x4b\xb4\x11\x65\xce\xd7\xef\x02\xb8\x40\x71\xee\x3e\x62\xff\xda\xc0\x7b\x1f\x47\xd0\x7d\x50\x6a\xbe\xf3\xb3\xf0\xbc\x7e\x0e\xf4\x18\xee\xc4\xce\x2f\x63\x30\x81\xcf\x00\xf4\x54\x58\xf7\xb7\x66\x03\xbc\xfa\x5e\x08\xb7\xcc\xf5\x72\x9d\x93\x0b\xc9\x1e\x6d\xf9\x38\x02\x0b\xd8\x0b\xa0\x9b\xc5\x79\x6f\xcf\xee\xd0\x1a\xd6\xe1\xf2\x25\xb9\x8e\x25\x5d\x73\xd4\x69\x8d\x0d\xee\xd4\xbb\x6e\x5f\x92\xeb\x9b\x1c\xb0\x11\xc0\xaf\xb2\xe6\x2e\x06\xb0\x24\xd7\xcb\xcf\xbf\xd1\xca\xf5\xee\xf5\x93\xdd\xb8\x41\x11\xe9\xdd\xbe\x93\x5c\x5c\x4f\xe5\x00\xe2\x87\xd9\x59\xf3\x5f\x2e\x74\x58\x1b\x20\xdb\x7a\xce\x0d\x0e\x7e\xbe\xf9\x60\xd7\x1b\x1d\x9c\x76\x13\x38\x42\xfa\xc4\xb0\xf6\x65\x66\x2f\xd2\x1a\x6e\x5f\xe0\xe3\x76\x32\x1f\x9c\xb0\xc0\xc7\x65\xd2\x02\x1e\x10\xf3\x77\x13\xf4\xe4\x04\x92\x77\xd2\x31\x85\x20\xc9\xab\x05\x7c\x2e\x78\x6e\x6a\xb6\xad\x97\xe0\x6b\xd1\x30\xb7\xba\x19\xc3\x67\x7b\x30\xf2\x9e\xfc\x90\xfa\x2c\x5a\xee\x47\x20\xa8\x99\x2e\x0d\xc0\x10\xa1\xcf\xdb\x32\x89\x06\x6e\x5f\xc9\xd6\xa7\xe5\xbc\x7f\x1e\x58\x91\xf2\x31\x96\xbd\xd6\x0a\xdd\x7c\x1b\xaa\x85\xaf\xd4\x06\x76\x7e\x15\xe3\x3e\x06\xf1\x12\xd1\x40\xbe\x06\xf9\x1e\x17\x54\x5a\xe3\x45\x83\x1b\x70\xd1\xa0\x14\x0d\xd4\xb7\xf7\xd8\x46\xec\x3f\x14\x37\x9b\x7f\x9b\xb0\x63\x99\x6b\xd7\x81\x25\x2b\x5b\x50\x39\xdd\x83\x7b\xff\xd6\x8c\x17\xdf\x0e\x62\x5e\x75\xb3\xed\xfc\x44\x67\x9f\xf1\x2e\xac\xde\x18\xc4\x13\xaf\x04\x30\xe5\xc1\x26\xdc\xf4\x67\x37\x9e\x59\x6f\x2a\x07\x87\x85\x3c\xb6\xd9\x7b\xd2\x35\xfe\x56\x8d\xef\x9d\xa7\x59\xe3\xbe\x2e\xe9\x7a\xbb\xf5\x13\x8d\x2f\xbc\x99\xf2\x45\x13\x49\x1d\x5e\xbf\xc6\xc7\x32\x39\x03\x8f\xd1\xa6\x9a\xc1\xbb\x3b\x22\x7c\x4f\xed\xe6\x26\xa4\x7d\x1f\x75\xaf\x97\xfb\xdc\x0a\x40\xf3\xb7\xd8\xbd\x54\xbd\x26\xc0\xc7\x55\x99\x9f\xce\x80\xfc\x43\xd2\xc5\x0a\x70\x48\xf8\x2d\x96\xb0\x74\x75\x20\xcd\xcf\x2a\xf3\xf7\xbe\xb5\xd1\x18\x17\x59\x41\xad\x88\x99\x2c\xe1\xe5\x4d\x41\x3e\xae\xca\xfc\xc4\x23\xd7\x4d\x72\xa1\xd1\xab\xb4\xfe\xc7\x01\xdc\x61\xa6\x7f\x24\xec\xf9\x3a\x86\x9e\x23\x9d\x39\x69\xa0\x78\xa2\xd7\x28\x27\xf7\xe9\xf9\xf9\x57\x34\x60\xfc\x5f\x7c\x88\xc6\x6c\xcf\x9f\x8c\x53\x25\x80\x52\xe1\x07\x9b\x42\x4b\x50\xc3\x88\x7b\x3c\x9c\x07\x48\xbe\xbb\x0f\xca\x8c\x61\x86\xcc\xf4\x70\x39\x97\xf4\xad\xae\x09\xaa\xac\x9d\x7c\x81\x33\xc9\x3f\x94\x71\xaa\x15\xfc\x7d\x5d\x00\xa5\x15\x0e\x1e\xb7\x50\x0c\x2c\x65\x91\xda\x19\x4b\x52\x72\x4e\x7e\x11\xf9\x84\x0d\x6e\xa5\xbd\x9f\x6f\xb0\xbf\x3d\x44\xdc\x63\x0a\xfb\xea\x62\xdc\xbf\x9a\xb5\xb4\x19\x6b\x36\x87\x70\xa1\x61\xfd\x14\xc3\x52\x5c\x45\xb4\x90\xee\x51\x00\xf2\xb1\xba\x1a\xe6\x3f\x41\xc4\x4d\xa6\x40\xf6\x8c\x7c\xdd\x17\xde\x0a\xf2\x3c\xc0\xe5\x37\xa7\xf6\x9b\x62\x5f\x8a\x2d\xc9\xd6\xfc\x71\x9c\x8b\xc7\x54\x36\x40\x2f\xdc\x99\xc3\xff\xfa\x35\x80\x0f\xcc\x3a\x91\x3e\xb9\xef\xc9\x66\x1c\xfa\x21\x01\x6f\xb3\x86\x1b\xa6\xb8\x51\xda\xcf\x81\xc1\x33\x3d\x9c\x3f\x36\x6d\x0b\x73\x9b\x1f\xb1\xe7\xbb\x57\x01\x74\x32\xf1\x01\x2f\x06\xf0\x55\xae\x4e\xc4\xcf\xf5\x0d\x09\xee\x90\x07\x42\x1a\x86\xdc\xed\xe1\xf6\x85\x74\x13\x0f\x00\x7d\x49\x6e\xeb\x6c\xf8\xfe\x13\x8a\x8d\x6c\x7c\xe0\x2b\xcc\x68\x48\xd3\x12\xd7\xf9\x79\x93\x7d\xfc\xea\xdb\x1f\x6d\x9b\xd3\x93\xcc\x15\x83\x48\xf8\x14\xc0\x45\x8a\x31\x00\xc5\x4d\xef\xe7\xb2\x4d\x12\xc8\xa6\x91\x8f\xd1\x1a\xd6\x55\xce\x7b\x83\x91\xdf\x14\x69\x38\x4d\xc4\x4e\x8e\x5c\x83\x92\x8c\x55\xaf\x0d\xd8\xd9\x19\xf2\xeb\x66\x00\x28\x29\x30\x06\x3c\x41\xec\xc5\x52\xe1\xa7\x64\x04\x37\xe4\xdf\xe7\x88\xb7\x22\xe2\xfc\x16\x09\xdd\x56\xd4\x0e\x71\x30\xd1\x71\x36\x80\x31\x00\x56\x00\xd8\x2d\xf4\x45\x40\xd8\x4f\x87\x38\x5f\x8a\x93\x87\x03\xf8\x8d\xea\xbc\xf0\x77\x02\xaa\x8a\xa0\x33\x76\x7f\x92\xb1\xde\x51\xc6\x3a\xfb\x19\xeb\x54\xcf\x58\xc7\xda\x14\x16\x57\x31\x56\x24\xd1\x6e\x3c\xc3\xbb\xc5\xb5\x29\xec\x48\x63\xd1\x98\x34\x36\xcd\xa1\xd3\x92\xaa\x8a\x40\x73\x97\x32\xc6\xca\x19\x63\x63\x8c\x79\x8a\x73\x59\xbb\x03\x80\x5f\x02\xe8\x05\x60\x9a\xc8\x6d\xed\x21\x36\x12\x7e\xb0\xcc\x63\x04\x45\xde\xef\x53\xb1\xcf\xb7\x0b\x9d\x70\x32\xfb\x19\x40\xc4\x46\xe7\x03\x98\x09\xe0\x9f\xaa\xfe\x5a\x96\xec\xd1\x1a\xdf\x06\x30\x11\x40\x97\xf6\xe0\xc7\x3c\xe4\xe6\x09\xb1\x9f\xa6\x42\x4a\xfa\x92\x6c\x0b\xf9\xba\x16\xba\x4b\xc6\xad\x07\x01\x2c\x14\xf9\xa5\xa2\x9f\x88\xf6\x33\x00\x2c\x30\xd3\x3b\x32\x07\xf8\x59\x5d\x0c\x4b\x57\xb7\xe0\xb6\xfb\x53\xf9\xf0\x81\x77\x79\x78\xdc\xf9\xf4\xba\x56\x7c\x53\x1f\x97\xf9\xec\x5c\xa0\x8b\x75\x4c\x2b\x54\x2f\x99\xd0\x5d\x04\xa0\xb7\x88\x69\x4c\xf5\x36\xed\x33\xf9\xb3\xbf\xbf\xb9\x31\x1d\xa7\xc9\x3c\x92\xfc\xfb\xea\x71\x2e\x5e\x1b\x88\x44\x75\x3b\xde\x7a\x0b\x40\xf7\x76\xa0\xfd\x44\x00\xb7\x59\xed\xb9\x8c\xc5\xab\x9e\xf6\xa7\xfd\x6c\x2b\x1f\xb8\x7c\x70\x03\xcf\x87\x25\x35\x5b\x19\xa9\x03\x70\x63\xa1\xfc\x24\x72\xbb\xb3\x72\xc5\x91\xd9\xf0\xf6\x47\x61\x1e\xc7\xaa\xf8\xf2\xf4\x0e\xf9\x58\xbb\xf7\xc7\x54\xe4\xbc\x11\xc0\xe8\x7c\x73\x9d\x62\xdf\x67\x09\x5f\xdc\x5a\x91\x24\x81\xa9\x0f\x35\xf1\xbc\x0e\xf9\xb9\x2a\x48\xef\x3e\xbc\xa2\x45\x55\x57\x79\x01\x8c\xca\xe7\x1c\x00\xdc\xaa\xb2\xef\xdc\x28\x47\x75\x9e\xcf\x98\xf6\x70\x13\xcf\xd7\xaa\x20\xad\x97\x62\x69\x4d\x53\xd6\xb7\xa4\x6b\xaf\x53\xa4\x9d\x64\xf5\x18\xfe\xfb\xe0\x4b\xb2\x39\x36\xb4\x93\xaf\xbe\xd5\x6a\x10\x8a\x7f\x57\xd5\x04\xb9\x1e\x59\x25\xb1\xa6\x40\x14\xfd\x69\x2c\x8a\x85\x5d\x3e\x5b\x13\xb8\x06\xc0\xff\x5b\xe8\xc9\x2a\x2b\x9b\x24\x6b\x4d\x52\x97\x50\x8c\xd5\x2e\xd8\xbf\x81\xc7\x70\x7b\x0f\xd8\xca\x74\x14\xc0\x58\x8b\x18\xc5\x96\x6f\x88\xfe\xee\x8a\x39\x1b\x55\x24\x9d\xd4\x73\xa4\x13\xfb\x0e\x28\xe9\xa4\x7d\xe4\x87\xe6\xf0\x0b\xaa\x55\x3a\x6f\xfa\x28\xcc\xf7\x4c\x55\xd7\xa8\xa1\x83\xc7\xab\x7b\xd5\xe8\x27\xfe\x98\x99\x45\x7f\x99\xb1\x2e\x6c\x05\x5f\x1c\x8c\x63\xfe\x53\x7e\xcc\xab\x6e\x3f\x9c\x5b\xdd\xcc\xeb\xe0\x0a\x31\x76\x3a\x75\x03\xe0\x74\x03\xfd\x77\xe3\x7f\x0b\xe8\xa0\x06\x0b\xda\x3b\x09\x1f\x58\x09\x8e\x3a\x13\xa8\xdd\x15\x41\xed\xee\x76\xc4\x5d\x11\x6c\xdd\x13\x55\xd1\x3f\x46\x58\x29\xfc\xf8\x5e\x66\x35\x96\x36\x05\x70\x4f\x12\x63\xe6\x7a\x79\xce\x95\xfc\x85\xf6\xc2\xf2\x21\x4e\x9e\x3f\x23\x1b\xd8\xd4\xa2\x6c\xd4\x0e\x00\xe8\x0c\xe0\x4e\x95\xd8\x23\x1a\x4f\xf9\x68\x65\x03\xda\x57\xf7\x18\xf3\x8d\xd4\x92\xef\x9d\x54\x3b\x06\x8a\xe9\x6e\x12\xb5\x7d\xa8\xf8\x68\xa4\x23\xba\xfd\x44\xf4\x4b\x3d\xda\x6b\x94\x13\xdb\xf7\x46\x55\xf5\xd0\x7c\x21\xcb\xd6\xc9\x74\x51\x27\x20\xbf\x9e\xd7\x6d\x0c\x75\x98\x42\x6d\xc1\x85\x03\x53\x7d\x8d\xb1\x82\xac\x09\x4d\x58\xe8\x43\x30\xac\x94\xe7\x5f\x6b\x97\xdf\x24\x58\xbf\x25\x94\xae\xf5\xfc\x69\x9c\x8b\xd7\x7a\x17\x2d\xf7\xf3\x5c\xd3\x35\x13\x5c\x05\x9d\xc9\x25\x43\x9d\x7c\x8c\xea\xb5\x01\x4c\x59\xec\xe3\x79\xda\xcb\x46\xa5\x6a\x49\x34\xcf\x87\x3b\x23\x2a\xf4\x7f\x2c\xf2\x04\xe6\xc1\xa9\x06\xac\x7b\x37\xc4\xe3\x3f\xd2\x13\x47\x1c\x89\x74\xfd\x77\xc5\x1b\xad\xca\xf5\x93\x5c\xb1\x0c\xed\x73\x20\xa8\xf1\x7a\x8e\xbb\x49\xe3\xb6\x85\xf8\x94\xe2\x38\x6a\x15\xe0\x1b\xab\x98\xd0\x58\xf7\xca\xa5\x47\xfb\xde\xe1\x52\xaa\x3d\x99\x21\xc5\x62\x9b\x4c\xe8\x54\xf4\xad\xbf\x57\xa1\x3f\x17\xac\xdb\x12\x3a\x6e\x79\x25\x5e\x9f\xb1\xa4\x49\x55\xdf\x98\xd1\x1f\xca\xb7\x93\xae\x83\xd7\x1f\x4b\x2b\x8e\x8f\x7e\x3a\xbb\x7e\x53\xdd\x5c\x3f\x14\x08\x75\x76\xb1\x79\xce\x98\x2b\xa6\x63\xec\x3c\xaf\x72\xed\xcc\x4a\x5f\x5e\x39\xb6\x91\xe7\xfe\x0b\x84\xed\x00\x76\xe6\xdb\x89\xe4\x77\xf4\x1c\xaf\x72\xed\xd1\x8a\xfe\x2b\x6e\x69\xe4\x79\xa1\x02\x81\x6c\xd7\xaa\x7c\x3b\xc5\x13\x3a\x26\x3d\xe0\x6b\x97\xfd\xbf\xea\xb6\x46\xae\xd3\x0a\x00\xd2\x2a\x73\x00\x4c\xb6\xab\x33\xe6\x82\xc5\xcf\xb5\x1c\x37\xfd\xc7\xc9\xff\x01\x71\xf7\xf6\x52\x15\x1b\x96\x0d\x35\xb5\x61\x74\x1f\xa8\x4e\x2b\xd9\xa6\xf2\x21\x6d\xf5\xcf\xe4\xc5\x3e\x7e\x9e\x05\xc6\xf3\x67\x01\xf8\x85\xb8\x07\x96\x17\xd0\x99\x5f\x3d\xde\xa5\x9c\xb3\x1a\x3e\xdb\x83\xcb\x47\x37\x66\xbc\x4f\x7f\x53\xec\x5e\x20\x3c\x2b\xf3\x5a\x22\x67\x9a\x17\x90\xcd\x24\xdd\x2d\x79\x88\xec\x3e\xf9\x77\x66\x6b\x98\xfd\x78\x33\xf7\x3d\x24\xfd\x65\xe2\x4e\xc7\x77\x85\xe9\x1e\x72\x2e\x2a\x0c\xf1\x57\x57\x71\xe7\x23\x2f\xd8\xb8\x35\xcc\xfd\x07\xf2\x7d\x2f\x1d\xe6\xe4\x71\x60\x8f\x11\xce\x9c\xbe\x5a\xf5\x9a\x00\x2a\xa6\xba\x33\xea\xd3\x8f\xae\x6c\xb1\xba\x83\x63\x57\xaf\x3c\x25\x2b\x77\xf2\x68\xbe\x83\x38\xdc\x49\x5c\x7f\x87\x8b\xeb\x51\xee\xf7\xee\x8b\x72\xdf\x2e\x5b\xaf\x92\x9f\x40\xf2\x32\x66\x5e\xea\x37\xda\xfb\xbe\x93\x5c\xaa\x77\x29\xb2\x81\xac\xf5\xe4\x1c\xf9\x93\xb2\x7c\xcf\x40\x13\x77\x97\xcf\xeb\xe7\xe0\x77\xf1\x1a\xbd\x49\xee\x93\x1a\x7d\x22\x79\x27\xfa\xb3\xba\x18\xaf\x53\x93\xcd\xa6\x67\xb2\x3e\x5c\x00\x7c\x6a\x8c\xdd\xb3\xd6\x30\x2b\xcf\x3a\x10\xf7\x4d\x49\x06\xc8\x1e\x90\x1f\xb3\x63\x5f\x34\x43\x0e\x68\x2d\xfd\xa7\xb9\x79\x5c\xb8\xe2\xcd\x56\xbe\xff\x7f\x18\xd3\x88\xaf\x0f\x15\x64\xb3\xc8\xd7\x19\x66\x91\x3f\x3c\x25\x5f\x5d\xb4\x6d\x6f\x94\xfb\xeb\x2f\x6f\x4a\xe9\x91\xef\x1b\x12\x19\x72\x4a\x6b\x5b\xb8\xcc\xcf\x7f\xfb\xd7\x17\x51\xee\xf7\x13\x8f\x99\xdc\xc1\xb4\x83\xe7\x00\xfc\x9f\x4d\x0e\xb4\x87\xb8\x3f\xa4\x04\x1f\xee\x8a\x70\xbe\x96\xb9\x03\x7f\x40\xe3\x35\x23\x1e\x4f\x55\xa6\x74\xd2\xd6\xdd\xd1\xf4\x5d\x0b\xfa\x8d\xf8\xa8\x40\xbe\xf9\xad\x62\x0e\x7a\xb0\xbc\xd7\x6e\x9b\x04\x38\x1c\xe7\x68\xac\xc5\x48\x19\x26\x1c\x71\x8f\x87\xd7\x96\x24\x2c\x7f\xbd\x95\xdb\xee\x3c\x81\xe4\xf2\x8a\x3c\xeb\x8c\x13\x55\xee\x90\xe5\xf2\x8d\x26\x2c\x48\xf9\x46\xc4\x43\xcf\x6d\xc8\xbc\xa3\xe7\xf4\x26\xf9\x37\x1d\x79\xd8\x5c\xf2\x8f\xfb\x15\x78\xc7\x7d\x82\xf1\x5b\x09\x55\x98\xff\x94\x3f\x7d\xc7\xb1\xee\x48\x5b\x39\x25\x1e\x23\xfb\xa7\x62\xe6\x8d\x76\xaa\xc0\x7a\xef\x40\xbb\x7b\x5c\xb9\x72\x2d\x24\xbb\xfc\x1b\x92\xa8\x5e\xa8\x9e\xdc\x0d\xe0\xca\x76\xaa\xa1\x5e\x22\x6a\xe5\x4a\x06\x87\x74\xe5\xc8\x7b\xbd\x98\xfe\x68\x53\x3e\x35\xa2\xb4\x08\x89\xdc\xe0\x39\xed\x5c\xbf\x2e\x11\x77\x8a\x0f\xda\xd5\x38\xe4\xdd\x3e\x92\x53\xc5\xfb\x9a\xb2\x0e\xbf\x47\xd4\xea\x4e\xfe\x89\x6a\xf0\x45\xa2\xc6\xbf\x50\xe4\x2e\x2c\x6d\x1d\xe9\x1d\x05\x39\x8d\x8b\x6f\x10\x66\x00\x38\xf3\x3f\x74\x7f\xa3\x48\xe4\x4e\xc7\x89\x3b\x50\xf5\xa2\xb6\xa3\x1a\x37\x85\xc4\x39\xbe\x24\xee\xf5\x9c\xce\x7e\x26\x10\xdf\x20\x9e\x0f\x60\x84\xf8\x2e\x66\xb3\xb8\xe7\x74\x4c\xdc\x4b\xf1\x88\xda\xc8\xe7\xe2\x5e\xc0\x62\x71\xbf\xf3\xec\xec\x6f\x9b\x0a\x9b\xbf\xbe\x23\x40\xad\xc0\x28\x63\x9d\xa9\xad\x67\xac\x13\xb5\xb5\x8c\x15\x53\x5b\xc5\x58\x11\xb5\xbc\x13\x63\x3a\xb5\xf7\x33\x96\xa4\xb6\x37\x63\x51\x6a\x3b\x33\xe6\xa7\xb6\x13\x63\xf5\xc6\xb6\x23\x63\xb5\xc6\xb6\xf8\xc7\xb6\x8a\xf1\x0b\x4a\x6d\x5a\x66\x6c\x8f\x17\x8a\xcc\xe7\xc9\xa6\x47\xd2\x29\xe9\x96\xeb\x91\xad\x5c\xa7\x5c\xb7\xdc\x07\xb9\x2f\xe9\x7d\x92\xfb\xe6\x17\xfb\x18\x65\xac\xb7\x71\x9f\xc5\xbe\xff\x3b\x00\x00\xff\xff\xeb\x12\x88\x54\xee\x3a\x00\x00"), }, "/static/index.html": &vfsgen۰CompressedFileInfo{ name: "index.html", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 1654, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x94\x55\xd1\x6e\xdb\x3a\x0c\x7d\xef\x57\xb0\x7e\x71\x82\x9b\xd8\xe8\xdb\x45\x6e\x1c\xa0\x68\x7b\x87\x0e\xd8\x3a\xa0\x05\x86\x3d\xb2\x16\x6d\x6b\x51\x24\x81\xa2\xd3\x06\x43\xff\x7d\x90\x3d\x34\xb5\x93\x6c\x9d\x5e\x62\x51\xe4\xc9\xe1\xe1\xb1\xbc\x3c\xbf\xbe\xbb\x7a\xf8\xf6\xe5\x06\x1a\xd9\x98\xd5\xd9\x32\xfe\x80\x41\x5b\x17\x09\xd9\x64\x75\x06\x00\xb0\x6c\x08\x55\xff\xd8\x6d\x37\x24\x08\x65\x83\x1c\x48\x8a\xa4\x95\x6a\xfe\x6f\x32\x3e\xb6\xb8\xa1\x22\xd9\x6a\x7a\xf2\x8e\x25\x81\xd2\x59\x21\x2b\x45\xf2\xa4\x95\x34\x85\xa2\xad\x2e\x69\xde\x6d\x66\xa0\xad\x16\x8d\x66\x1e\x4a\x34\x54\x5c\xcc\x20\x34\xac\xed\x7a\x2e\x6e\x5e\x69\x29\xac\x7b\x0b\x6f\xb4\x5d\x03\x93\x29\x12\x5d\x3a\x9b\x80\xec\x3c\x15\x89\xde\x60\x4d\xf9\xf3\xbc\x8f\x35\x4c\x55\x91\x54\xb8\x8d\xdb\x4c\x97\x2e\x81\xfc\x0d\x84\x68\x31\xb4\xba\x34\xc4\xb2\x41\x8b\x35\xf1\x32\xef\x63\x7d\xbf\xf9\xbe\xe1\xe5\xa3\x53\xbb\x37\xa5\xa1\x64\xed\x65\x1f\x88\x2b\xcf\xe1\xb6\x02\x69\x88\x09\x74\x00\xeb\x40\x18\xb5\xd1\xb6\x86\x60\x30\x34\x80\x12\x4f\x81\xac\x02\xd7\x25\x82\x47\x69\x40\xdb\xee\xb9\x65\x33\x1b\xe3\xa1\x52\xe0\x2c\x65\xf0\xd0\xe8\x00\x64\x43\xcb\x14\x00\x43\x20\x09\x60\xf4\x9a\xa0\x27\x92\x7d\x0f\x80\x4c\x60\x1c\x2a\x52\xe0\xd9\x79\x62\xb3\x1b\xc0\xe9\x0a\x26\xc6\x95\x28\xda\xd9\x2c\xfe\x71\x9c\x4d\x16\xda\xc7\x20\x3c\x99\x5f\x4c\xe1\xbc\x80\x34\x4f\xa7\xf0\x63\x50\x16\xd7\x41\x19\x14\x47\x62\xff\xc4\xf2\xff\x0e\x8a\x4b\x67\x83\x33\x94\x19\x57\x4f\x52\x54\x91\x5f\x27\x47\x3a\x1d\xe6\xbe\xec\xd5\xcd\xc7\xf2\xfe\xd2\x1b\x02\x97\x45\xf2\xda\x72\xb2\x3a\x99\x39\x9c\xcc\x16\x19\xd0\x7b\x28\xe0\xc6\x6c\xb2\x4f\xa8\x6d\x16\xbd\x36\x39\xec\xb4\x32\x58\x87\xc5\x11\x09\xe2\xf2\xec\x54\x5b\xc6\xa6\x17\x20\xdc\xd2\xec\x68\x56\xa5\x39\xc8\x35\xee\xee\xaa\xaf\x44\xeb\x05\x7c\xbc\xbf\xfb\x9c\xf9\xf8\x96\x74\xf2\x9b\x7b\x71\x8c\x35\x65\x35\xc9\xad\xd0\x66\x92\x0e\x0b\xd2\xe9\xf4\x38\xae\xa2\x0a\x5b\x23\x57\x4c\x28\x8e\x17\x70\x1c\x6c\x98\x95\x9e\xc0\xaa\xd9\xb5\xfe\xe6\xd9\xa3\x55\x97\xc6\xbc\x83\xe3\xb0\x20\x9d\x4e\x0f\x60\x5f\x86\xc3\x1c\x0d\x17\xbd\xcf\xe2\x0d\x10\x32\x4f\x1c\x74\x90\xeb\x01\xcf\xce\x86\x25\xeb\x47\x9a\x54\xad\xed\x24\x9e\x44\x4f\x9d\x32\xe3\x2b\xc1\x70\xa2\xef\x59\x77\xf3\x8c\x1d\xf6\x27\x52\x1f\x06\x5d\x1e\x23\x45\xdd\x21\xa9\xf7\x13\x1b\x29\x37\xeb\xb5\x0e\xc2\xda\xd6\xba\xda\xed\x11\xff\x96\xec\xff\x03\xdb\x1c\x23\x3b\x34\xd6\xfb\x29\x8f\x0c\x79\x40\x79\x84\xfb\x1b\xe2\xc3\xf7\x73\x99\xf7\xb7\xe8\x32\xef\xbf\x32\x3f\x03\x00\x00\xff\xff\xc3\xab\x41\xac\x76\x06\x00\x00"), }, "/static/lib": &vfsgen۰DirInfo{ name: "lib", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), }, "/static/lib/bootstrap-4.0.0-alpha.6-dist": &vfsgen۰DirInfo{ name: "bootstrap-4.0.0-alpha.6-dist", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), }, "/static/lib/bootstrap-4.0.0-alpha.6-dist/css": &vfsgen۰DirInfo{ name: "css", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), }, "/static/lib/bootstrap-4.0.0-alpha.6-dist/css/bootstrap.min.css": &vfsgen۰CompressedFileInfo{ name: "bootstrap.min.css", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 150996, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xec\xbd\x5b\x93\xe3\xb8\x91\x30\xfa\x7e\x7e\x05\xb7\x1d\x1d\x3d\x3d\x23\xb2\x49\xea\x56\x92\x62\x26\xbc\x76\xec\x17\x9f\x23\x66\xfc\xb0\xde\x3d\x2f\xf3\xf5\x03\x25\x42\x12\xdd\xbc\x7d\x24\x55\xc5\x1a\xad\xce\x6f\x3f\x41\x00\x24\x71\x49\x5c\x54\x5d\x17\xf5\x78\xd6\x6b\xb7\x0a\x48\x64\x26\x12\x89\x44\x22\x09\x24\x3e\x7d\xff\x6f\xff\x8f\xf3\xbd\xf3\x97\xa2\x68\xea\xa6\x8a\x4a\xe7\x7e\xe6\xf9\x9e\xef\x46\x69\x79\x8c\xbc\x85\xf3\xdd\xb1\x69\xca\x7a\xfd\xe9\xd3\x01\x35\xdb\x1e\xc8\xdb\x15\xd9\xc7\xae\xd9\x5f\x8b\xf2\xb1\x4a\x0e\xc7\xc6\x09\xfd\x20\x70\x43\x3f\x58\x3a\xff\x75\x44\x0c\xba\x7f\x3f\x35\xc7\xa2\xaa\x95\xc0\x0f\x49\xd3\xa0\x6a\xe2\xfc\x2d\xdf\x79\x1d\xd0\xcf\xc9\x0e\xe5\x35\x8a\x9d\x53\x1e\xa3\xca\xf9\xe5\x6f\xff\xc5\xb0\x90\x34\xc7\xd3\xb6\x23\xfe\xa9\x79\xd8\xd6\x9f\x06\x7e\x3e\x6d\xd3\x62\xfb\x29\x8b\xea\x06\x55\x9f\x7e\xfe\xdb\x5f\xff\xe3\xef\xff\xf8\x8f\x8e\xbf\x4f\x9f\xbe\xff\x37\x27\x2f\xaa\x2c\x4a\x93\xdf\x90\xb7\xab\x6b\xe7\x7e\xde\x75\xcf\xf9\x1f\x8c\x99\x12\x73\xfe\xc7\x61\x50\xe7\x68\x57\xa4\x51\xfd\x89\x6f\xf7\xfd\xa7\x63\x93\xa5\xe7\x7d\x91\x37\xee\x3e\xca\x92\xf4\x71\x5d\x47\x79\xed\xd6\xa8\x4a\xf6\x9b\x34\xc9\x91\x7b\x44\x5d\xe7\xd6\x81\x17\xcc\x37\x6e\x56\xbb\x0d\x6a\x1b\xb7\x4e\x7e\x43\x6e\x14\xff\xf3\x54\x37\xeb\xc0\xf7\xdf\x6f\xdc\x07\xb4\xfd\x92\x34\x70\xed\x65\x5b\xc4\x8f\xe7\x2c\xaa\x0e\x49\xbe\xf6\x2f\x51\xd5\x24\xbb\x14\x4d\xa2\x3a\x89\xd1\x64\x5f\x14\x9d\xa8\x8e\x28\x8a\x51\x35\xc9\xa3\xfb\x49\x8d\x76\x4d\x52\xe4\xe7\x38\xa9\xcb\x34\x7a\x5c\x6f\xd3\x62\xf7\xe5\x72\x0c\x08\x9b\x1d\xf2\x75\x88\xb2\x0d\xc5\xe7\x2d\x96\x28\x73\xfc\xcb\x3e\x39\xec\xa2\xb2\x6b\x38\xd9\x27\x87\x53\x85\x26\x59\x94\x88\x48\x48\x4d\xcf\x4a\x80\x32\x67\xe6\x97\xed\xe5\x58\x9d\xfb\x0e\x6c\x8b\xb6\x23\x91\xe4\x87\xf5\xae\xc8\x1b\x94\xe3\xa2\x8d\xa2\x98\x0a\xc7\xdf\x14\xf7\xa8\xda\xa7\xc5\xc3\xfa\x3e\xa9\x93\x6d\x8a\x2e\x65\x85\x38\xb1\x66\x45\x5e\xd4\x65\xb4\x43\x93\xe1\xd7\x66\xec\x4f\x80\xb2\x4b\x74\xde\x46\xbb\x2f\x87\xaa\x38\xe5\xb1\xbb\x2b\xd2\xa2\x5a\x37\x55\x94\xd7\x65\x54\xa1\xbc\xe1\x25\x1c\xa3\x5d\x51\x45\x5d\x67\xdd\xfa\x4b\x52\xae\x8b\xed\x3f\xd1\xae\xa9\x2f\xd1\x3a\xda\x35\xc9\x3d\x9a\x44\xeb\x63\xc7\xd2\xb9\x38\x35\x78\x14\x1f\x92\xb8\x39\x76\xb2\xdf\x6e\xab\x5f\x9b\xa4\x49\xd1\xe7\xf3\xb6\xa8\x62\x54\xb9\xdb\xa2\x69\x8a\x6c\x9d\x17\x39\xda\x08\xc8\xd7\x58\x5d\x3b\x04\xea\x1a\x27\x2e\x9a\x06\xc5\x97\xed\xa4\x6e\xaa\x22\x3f\x90\x5e\x3f\x10\xc1\x24\xf9\x11\x55\x49\x03\x57\x6e\x8b\x34\x46\xd5\x65\x57\xc4\x68\xf2\x65\x1b\x4f\xea\x28\x2b\xaf\x94\x59\xbc\xcf\xa9\x56\x34\x8f\x29\x5a\x27\x4d\x94\x26\xbb\x4b\x16\x55\x5f\x64\x61\xfe\x69\xbf\xf7\x37\xf4\xa7\xef\xfb\x97\x3a\x8b\xd2\x94\xd1\xa9\x3b\xff\xfd\xa5\x3e\x6d\x27\xf5\xa9\x64\x4a\x97\xf3\xf7\xdc\x3c\xf0\x37\x65\x51\x27\x58\x04\x15\x4a\xa3\x4e\xd8\x9b\x7b\xd4\x69\x74\x94\xba\x51\x9a\x1c\xf2\xf5\x36\xaa\x51\xd7\xa4\xc3\x76\xa6\xd2\x75\xbd\x70\x8e\xb2\x4b\x87\xbb\x29\xca\xb5\xeb\x75\x7f\x45\xa7\x38\x29\x26\xf7\x49\x8c\x8a\x41\x4f\x93\x1c\x53\x23\xea\x8a\x01\xd6\x79\xd1\x7c\xf7\x6b\xa7\x75\x55\x91\xd6\x9f\x3f\x0e\xa0\x78\xc4\x7a\xb6\x2e\x49\x76\xe8\x47\x94\x08\xa3\xab\xbe\xd4\xf7\x07\xdc\x7e\x5d\x15\x45\xf3\xf1\x3c\xa8\xe9\x31\x89\x63\x94\x5f\xb6\xa7\xa6\x29\xf2\x49\x92\x97\xa7\x66\x52\x94\x4d\x27\xb0\x72\x52\xa3\x14\xed\x9a\x49\x37\xe4\x51\x85\x22\x95\x79\x60\x86\xa2\x33\x01\x92\xb5\x18\x26\x3c\x4b\xe5\x2c\xcd\x14\x5a\x4b\x88\x9e\xb1\x9e\x61\xbd\xdf\x17\x15\xd1\xca\xcb\xaf\xcd\x63\x89\x7e\xac\x50\x8d\x9a\xcf\x13\xf2\x47\x7d\xda\x66\x49\xf3\x79\x42\x1b\x77\x56\xcc\x21\x35\xa4\xe4\xf3\x30\xa1\xa3\xb2\x44\x51\x15\xe5\x3b\xb4\x26\x55\x17\x0e\x6e\xbd\x76\xb3\xe2\x37\x77\x5f\xec\x4e\xb5\x9b\xe4\x39\xaa\x26\x2c\x39\x65\x35\x65\x00\xa8\x27\x88\xe5\x0a\x79\x74\x36\x65\x14\xc7\x9d\x49\xf1\x05\x9e\xc6\xa6\x55\x92\x1f\x78\x86\xc0\xba\x9e\x1b\xa1\x92\xb2\xc2\x97\xf6\x36\x61\x1d\x94\x2d\x9d\xbc\xce\x5f\x30\xe0\x7f\xa1\xb6\xb9\xec\x13\x94\xc6\x35\x6a\x28\xbb\x18\xaa\x2e\xd2\x24\x76\xea\x24\xbd\x47\xd5\x30\xac\x4e\x58\xb6\x43\x0f\xbc\xe9\x1c\x65\x8e\xb7\x08\xf1\x3f\xcb\x4e\xbb\x53\x74\x40\x79\x0c\x19\xd6\xc1\xf0\x70\x76\x95\x29\x25\xb3\x94\x1a\x8f\x4d\xaf\xef\x4d\xb4\x4d\xd1\x26\x8b\x5a\x6a\xcd\xb0\xd6\x0d\x22\xdc\x3c\x1c\x93\x06\xb9\xd8\x4a\xac\xc9\x2a\x77\x29\xab\xe2\x50\xa1\xba\x06\x67\x97\x72\xda\x0e\x7a\x3f\xa8\x6a\x74\x6a\x0a\x3a\x44\xbb\x23\xda\x7d\xd9\x16\x6d\xaf\x88\x55\x14\x27\xc5\xe7\x27\xf5\x52\x1c\xfd\xfc\x94\x6d\x51\xd5\xa9\x14\x45\x86\xd5\xc6\xad\xcb\x24\x77\xa9\x9e\x2b\x00\x8b\x53\xc3\x03\x9e\xe9\x3c\x64\x18\xaf\x51\x54\xed\x8e\xe0\xbc\xe8\x3a\x8c\x87\x7d\xd3\x2f\x17\xc5\x7e\x5f\xa3\x66\xed\x86\x65\xcb\x37\x1f\x69\x92\x02\x77\xd7\x61\x48\x79\xfe\x54\xb0\xe3\xf2\x01\x71\x81\xa7\xfa\xd8\x66\x9f\xa4\xc8\x3d\x95\x69\x11\xc5\x7d\xa7\x94\x53\x1a\x9b\xa2\x61\xb1\x89\x51\x13\x25\x69\x3d\xc9\x50\x7e\x12\xd6\xff\xfa\x94\x65\x51\xf5\x38\x94\xa6\x49\xdd\xb8\x49\x83\xb2\xcb\x2e\xca\xef\x23\x58\x51\x2e\x0d\xca\xca\x34\x6a\x10\x67\x79\x2f\xbf\x12\x1b\xfa\x99\x2f\xfd\x73\x86\xe2\x24\x72\xca\x2a\xc9\x9b\xf3\xf7\x93\xf5\x3a\xda\x77\xee\xcd\x7a\xbd\x45\xfb\xa2\x42\x13\x8c\xf1\xff\x9e\x8a\x06\xad\xd7\xfb\xa4\xaa\x1b\x37\x45\xd8\x57\x04\x2a\x92\x1c\x4d\xe2\xe4\x5e\x00\x64\x4b\x3a\x88\x34\x11\x00\x98\x82\xae\xbe\x14\xaa\x4b\xb6\x96\xd8\xdb\xfa\x18\xc5\xc5\x03\xee\xc0\xbf\x25\x59\x59\x54\x4d\xc4\x78\x1c\x58\x7b\x41\x08\x65\xcd\x25\x9a\x44\xd8\xc0\x37\x28\x3e\x2b\x5d\x07\xd6\x1b\xa1\x82\x3a\x53\xef\x6a\xfd\xce\xf9\xee\x9d\x13\x35\x4d\xf5\x1d\xae\xff\xe8\xbc\xfb\xf8\x0e\x3b\x55\xec\x34\x2f\x2b\xe4\x3e\x54\x51\xc9\x10\x1e\xc5\x38\xe9\xa0\x25\x23\xf6\xa7\xd5\x6a\xb5\x29\xa3\x03\x72\xb7\x15\x8a\xbe\xb8\x49\xde\x79\xa1\xeb\xe8\xbe\x48\xe2\x4b\xd3\x79\xa1\x67\xce\xde\xb8\xc4\x31\x75\xf1\xca\xd8\x2d\xb2\x93\xa6\x3a\xab\xda\x1f\xc3\xc9\x71\x3a\x29\xcf\x45\x55\x1e\xa3\xbc\x5e\x4f\x37\x0f\x49\x5c\x3c\xd4\xeb\x29\xa9\x62\x1b\xe2\xee\xd2\x76\x5e\x1e\xdd\x6f\xa3\x8a\xd7\x24\x6f\x1b\xc5\x07\xa8\x07\x9d\xf3\xe2\x61\xe6\xfa\x25\x65\x57\xa4\x69\x54\xd6\x68\xdd\xff\x60\x04\x42\x20\x9d\x26\x9e\xf4\xbf\x8e\xa0\x6f\xb4\x97\xda\xb8\x04\x3b\x8a\xc7\xc6\x4c\xd1\x11\xe0\x2c\x8e\x63\x06\xcb\x05\xef\x2d\x9e\x60\x19\x2f\xf2\xbc\x81\xd0\xf4\xeb\x83\x5c\x74\xf9\x73\xb7\x53\xb9\x4f\xd0\x43\xc7\xcb\x99\x2c\x17\x31\xba\x4f\x76\xd4\x13\xa6\xac\x65\xb5\xdb\xdb\x78\xba\x2c\xd7\xbb\xaa\x48\xd3\x6d\x54\x8d\xfe\x76\x54\xba\xc7\xe4\x70\x4c\x3b\x83\x2a\xfb\xe5\x64\x6f\xc3\x7a\x48\x9d\x79\x4a\x91\x5b\x3f\xd6\x0d\xca\x26\xe4\x1f\xf7\x94\x4c\xfe\x92\x26\xf9\x97\x5f\xa2\xdd\x3f\x70\xc9\xff\x2a\xf2\x66\xf2\xee\x1f\xe8\x50\x20\xe7\xbf\xff\xf6\x6e\xf2\x9f\xc5\xb6\x68\x8a\xc9\xbb\xff\x8d\xd2\x7b\xd4\x2d\x4b\xce\xdf\xd1\x09\xbd\x9b\xfc\x7b\x95\x44\xe9\x04\xf6\xba\x2a\x94\x6d\x58\x87\x7a\xe6\xfb\x82\x17\x36\xef\x1d\xde\x70\x15\x6e\xc3\xdd\x06\x1c\xf8\xcb\xaf\x4d\xb4\x4d\xf2\x18\xb5\x3f\xbe\x73\x83\x77\x9f\xd7\xd8\x55\x18\xdc\x04\x9f\x19\xd2\x63\x30\x21\x3a\x7e\x9c\x4d\x8e\xf3\xc9\x71\x41\xb7\x52\x6e\xe7\xd4\xfa\xd4\x35\xe8\x77\x14\xde\xbc\x42\xd9\xa5\xd4\x81\x74\x5d\x20\x56\x20\x8e\x9a\xc8\x2d\xaa\xe4\x90\xe4\x51\xea\x12\x9b\x30\x61\x77\x2b\xbb\x53\x55\x17\xd5\xfa\x88\xd2\xf2\x12\xc5\x31\x5e\xd6\x65\x64\x1b\x66\x37\x40\x9c\x00\x4e\x22\xc3\x12\x91\x4e\x8a\x74\x72\x4a\x8d\xbc\x15\xa9\x53\x74\xb0\xce\xa9\x03\x77\x70\x23\x67\x6c\x47\x41\xfd\x4b\xdc\x70\x5b\x9b\xa5\xef\x5f\xe2\xf8\x0c\xc8\xa3\x27\x92\xa2\x7d\xe7\xb5\x8f\xe6\x6a\xd8\x1f\x3b\xbe\x43\xc4\x72\xee\x37\x2b\xe1\x72\x1e\xdf\x49\x3b\x30\x6c\x24\x22\x32\x58\xc3\x7e\xaf\x6f\x12\xcc\x76\x77\xbb\x8d\xc6\xf2\x92\x5d\xc5\xb1\x42\xfb\xcf\x1f\xc9\xef\x5e\x09\x3e\x7f\x3c\xf3\xfe\x97\x82\xb0\x06\xc1\xc0\x94\x0e\x86\x65\xf8\x6b\x49\x8d\xca\x8a\xd7\x08\xc3\xa8\x6e\x78\xc7\x8e\x0f\x0a\x0c\xf2\xef\x36\x54\x82\x8b\x98\x25\x71\x9c\xa2\xcb\xaf\x55\x91\x8e\x1b\x0d\xaa\x98\x65\x91\xe4\x0d\xaa\xf8\xca\x49\x34\xe9\x3c\xc9\x09\xb7\xcf\x4a\xa3\x2d\x4a\xfb\x4d\x16\xf5\x48\xc6\xcd\x16\x8e\xb1\x14\xa7\xdd\xd1\x8d\x70\x18\x64\x9d\x45\x79\x52\x9e\x52\x2c\x90\x8d\xb2\xe6\xa2\x5f\x10\x36\xba\xd8\xc2\x85\x06\x4e\xce\xd4\x23\xc5\x82\xf3\x96\x58\x5d\xfb\xa2\x5e\x87\x49\x29\x55\xb3\xc5\x74\xb1\x5b\x86\x64\xd4\x88\x84\x3a\xb5\xde\x50\x74\x2e\x5e\x19\x49\xc3\x4b\x73\x3c\x0b\x60\x17\x2c\x07\xd8\x35\x87\x0c\x09\xdd\xcc\xf0\xe3\x3d\xee\x61\x7a\xdf\x75\x3d\x2f\x5b\xa7\x1b\x57\x67\xf0\x24\xf1\x1e\xac\xdb\xfa\x90\xae\xf3\xbb\x5e\x71\xb3\x0b\x99\x0b\x0c\x29\xf8\xff\xeb\x38\xa9\x3b\x91\xc7\x13\xa6\x96\xec\x06\x86\xaa\x5e\x37\xf2\xa2\xeb\x78\x5a\x3c\xa0\x98\xc5\x15\x47\x0d\xfa\xcc\x36\x6f\x92\x8c\x2f\xe8\x20\xba\x42\x37\x2d\x76\x51\xca\x55\x65\x45\xde\xc0\xee\x7c\xe7\xd4\x76\xab\xe8\xd0\xa5\x0a\xe1\xf5\xa2\x57\xe6\x71\x8b\x97\x25\x79\x1f\x19\x62\x36\x52\xfd\x44\xd8\xd0\x05\xde\xef\xb7\x72\x9c\x2f\xbd\x01\x37\x61\x90\xc5\x63\x56\x2c\x52\x60\x10\xb1\x66\xa7\x82\xed\x41\x71\x6a\xca\x53\x03\xbb\xea\xa0\x53\xce\x7a\x36\xc7\x60\xe2\x1d\xc3\x89\x77\x9c\x4e\xbc\xe3\x6c\xe2\x1d\xe7\x13\xef\xb8\x98\x28\x17\x36\xb9\x27\x74\x99\xef\x4d\x16\x6b\xf6\xe7\xd2\x02\x1c\xf0\x7b\x59\x4c\x9f\x8f\x64\x12\xe5\xee\x78\x3a\x86\x6c\x39\x29\x9d\x76\x5e\x23\x2b\xc0\x25\x05\x9f\x4d\x8e\xb3\xb3\x28\xd9\x4b\xd7\x9d\xe3\x9c\x2b\x0f\x69\xc5\xa2\xeb\x14\xef\x3c\x5c\xbc\xb4\xf3\x77\x25\x68\xae\x4f\xd3\xce\xdb\xa4\xd2\x74\x59\xce\x17\x00\xa4\xd8\xfb\xb1\x25\xdb\xb7\xb9\x37\xbf\xaa\x2d\x2b\x81\xd9\x95\x6d\x59\x21\x4d\xed\xda\x1e\x2b\x76\x01\x09\x98\x45\x9b\x5d\x43\xfa\xc9\x41\x7f\x10\xd8\xc1\x15\xae\x0e\xdb\xe8\x3b\x7f\xd2\xfd\xc7\x0b\x3e\x5e\x3c\x1c\x6c\x9c\x00\x21\x47\xd1\x81\xbb\x78\x59\x54\x7d\x99\xe0\x10\xe6\x10\x5c\x09\x3b\x7a\xb2\xeb\xb6\xdb\xdf\xa1\xe9\xc5\xc3\x9b\xd8\x53\x8e\x9d\x9e\x78\xb0\xe1\xc4\xc1\xd8\xe0\x4a\x26\x20\x48\xa0\xc9\x9c\xb9\x06\x16\xef\x92\xe1\x39\x27\x81\x91\x88\x63\x1a\xd5\x8d\xbb\x3b\x26\x69\xfc\xb1\x97\x67\x45\x66\x49\xd9\x5e\xbc\x24\x4f\x9a\x24\x4a\x93\x3a\x63\xe4\xb1\xf2\xdf\x6f\x84\x00\xe0\xa9\x2c\x51\xb5\x8b\xea\x6e\x3f\x34\xfa\x4a\x83\x64\xba\x01\x75\x54\x43\x24\x2b\x36\x1d\x2b\xdc\x5f\x52\xd4\x6f\x5d\xd0\x0e\x21\xb4\x67\x89\xb8\xe4\xcb\x84\x60\xf5\xf8\xc1\xe3\xd6\x41\xa0\xf1\xb0\x7d\x19\xb6\xb5\xff\x27\xf4\x83\x99\xf3\x7f\x7c\xff\xdf\xfd\x77\x5c\x83\x0a\xdd\xa3\xaa\x1e\xc7\x84\xc8\x2a\x60\xd7\x60\x3a\x4c\xcc\x3a\x8a\x81\xfa\x5e\x91\x16\x50\xb7\xb8\x7e\xfb\x10\x59\xc7\x86\xf7\x77\xd6\x2d\x85\xbd\x3c\xee\xae\x83\xbb\xfe\xee\xe2\x25\xd9\xc1\xdd\xa7\xa7\xa4\xf3\x8f\xb9\x58\x1e\x1b\xb4\xc2\x50\xcd\xf1\x94\x6d\xf3\x28\x49\x99\xa9\x40\xc6\x11\xda\xc7\x6c\xc0\x0d\xe9\x20\x9d\x28\x4e\x4e\x75\x8f\x60\xd8\xdd\x75\x8a\x46\xc2\xf9\x51\x9a\x3a\x5e\x58\x3b\x28\xaa\x91\x9b\xe4\x6e\x71\x6a\x36\x6e\x61\x82\x30\x54\xeb\x7a\x48\xfd\x4e\x78\x4e\x91\x4a\xb7\x73\x42\xa1\x95\x88\xb3\x59\x03\x74\xef\xc7\xf1\x33\x8a\x57\xd2\xe1\x73\x4b\x59\x21\xf9\x93\xcb\x2f\x28\x4f\x8b\xc9\x2f\x45\x1e\xed\x8a\xc9\x5f\x8b\xbc\x2e\xd2\xa8\x9e\xbc\xfb\x39\xd9\x22\xe2\x92\x3b\xbf\x14\x79\xf1\x6e\xf2\xee\xaf\xc5\xa9\x4a\x50\xe5\xfc\x1d\x3d\xbc\x1b\x3f\xcf\x60\xec\xcc\x60\x75\x9a\xe8\xcd\xf8\xb9\xc8\xb0\xb4\x8d\x67\xc1\x6c\x09\x8d\xe6\x72\xbf\xdc\xaf\xc0\xa1\xbb\x44\x3f\x71\x44\x7c\x21\x5a\x2c\x21\xeb\x97\xde\x2f\xdb\xd8\x9e\x33\xac\x4e\x12\x5b\xfd\x2e\x5a\x60\xab\xe3\xea\xcb\x36\x76\x58\x0a\xbe\xf8\x79\x44\xdc\x1e\x96\xcc\xd0\x73\x4e\xaf\x72\xd7\x02\x32\x4a\x58\xea\xb0\x39\x82\x58\x46\xf0\x5e\x34\x06\x41\xb1\x5f\x1b\xf9\x2e\xfa\x17\xaf\xac\x90\x4b\x82\x23\x78\x9f\xd1\xe9\x35\x55\xbf\xe9\xcc\x2f\xdb\x61\x4b\xe5\x3e\xd2\x18\xca\xc5\xeb\xa6\x7f\x94\xe4\xa8\x3a\xcb\x9f\xcc\xd8\x5d\x70\x37\x1b\x36\xdc\x0a\x81\x4b\x04\x43\x38\x1f\xbf\x36\x90\x66\x5d\x49\x1f\x6e\xfd\x6e\xf4\x64\xe7\xcb\x45\xd9\x7e\x3c\xb3\xd4\x6d\x10\x01\x98\x96\x8b\xbb\x67\xc2\xb4\x5a\x85\xcf\x84\x29\x08\x7d\xff\x99\x50\xc9\x82\xa2\xe5\x78\x3c\x79\xc3\x65\x27\x1e\x5a\x1e\xda\xb5\x97\x85\x42\xcb\x17\x76\xed\x01\x51\xd0\x8a\x00\xec\xc1\x08\x47\x57\x9f\x37\xd5\xca\x9e\x87\xe7\xd2\xcd\xaf\xc4\x27\x0d\xc6\x57\xe2\x93\x07\xe7\x2a\x84\x5e\x55\x3c\x0c\xd6\x91\x09\xfd\x6e\xc4\xb2\x7d\x8a\x98\xc2\xac\xc6\x05\x2c\x20\x06\x60\xa1\xf1\x07\x83\x75\xf7\x3f\x9b\x1e\x9e\x29\x12\xfe\xe4\xc6\xdf\xc5\xdc\xb2\x3a\xe2\x1a\x46\xbb\xeb\x85\x15\x0a\xcd\x08\x7f\x0d\x8e\x7e\x54\xbf\x06\xc7\x30\x92\xf6\x48\xbc\xbc\x70\x0f\xa7\xa6\x41\x55\xcd\xb7\xf0\x85\xe8\x27\x03\xf8\x93\xb7\x2b\xd2\x09\x5b\xf0\xeb\x2e\x8d\xea\xfa\xfb\x1f\x77\x45\xea\x7e\x16\xf4\xc6\x17\x7c\xe2\x0b\x69\xdd\x81\x06\xf4\x1f\x9f\xfe\xdb\xff\x1d\x92\x7f\xe9\x3f\x53\xf2\xcf\x8c\xfc\x33\x27\xff\x2c\xc8\x3f\x4b\xf2\xcf\x1d\xf9\x67\x45\xfe\x49\x0f\xfd\xbf\x3d\x85\xee\x97\x3f\xfe\x64\x4a\xc3\xe1\xe7\xf8\x6b\x3a\xfc\x9a\x0d\xbf\xe6\xc3\xaf\xc5\xf0\x6b\x39\xfc\xba\x1b\x7e\x51\x16\xb2\xb8\xff\xb7\x67\xa1\xfb\xe5\x8f\x3f\x99\xd2\x70\xf8\x39\xfe\x9a\x0e\xbf\x66\xc3\xaf\xf9\xf0\x6b\x31\xfc\x5a\x0e\xbf\xee\x86\x5f\x94\x85\x3a\xeb\xff\xed\x59\xe8\x7e\xf9\xe3\x4f\xa6\x34\x1c\x7e\x8e\xbf\xa6\xc3\xaf\xd9\xf0\x6b\x3e\xfc\x5a\x0c\xbf\x96\xc3\xaf\xbb\xe1\x17\x65\xa1\x4d\xfb\x7f\x7b\x16\xda\x71\xb4\xdb\x71\xc0\xdb\x71\xcc\xdb\x61\xd8\xdb\x61\xe4\xdb\x61\xf0\xdb\x61\xfc\xdb\x41\x05\xda\x41\x0b\xda\x41\x11\xda\xd4\x5d\x01\x6b\x06\xe3\xdd\x77\x93\xa6\xf7\xc9\x19\xbb\xf6\xe4\xa5\xe2\x0f\x8d\xfe\x43\xa3\x5f\x5e\xa3\xbf\xda\x03\xf9\x43\x4d\xff\x50\xd3\x9b\x55\xd3\xd1\xb1\xfd\x43\x4d\xff\x50\xd3\x9b\x55\x53\x66\xbf\xf4\x87\x9e\xfe\xa1\xa7\x37\xa2\xa7\x1d\xfc\x99\xdb\x3c\x6f\xa3\x3a\xa9\xd7\xfe\xb8\x75\x2e\x2b\xb4\x47\x55\x85\x62\x12\x6a\xf4\x37\x3c\x18\x73\x6a\xab\xab\x58\x07\xfc\x5e\xfc\x50\x15\x0f\x5d\xd9\x80\x0d\xbb\xd7\xf7\x68\x1d\x6c\xd8\x7a\x21\x94\x83\xbb\x11\x9d\x9a\xe2\x2c\xe1\xf7\x39\xfc\xf8\x30\x07\x0e\xdb\xf4\x14\xc6\x12\xfe\x2f\x82\x9d\xc4\xe5\xf1\x34\xb3\x42\x7d\xe7\x4d\xf1\xff\xbd\xe7\xf1\x8f\xc5\x40\xd1\xd8\x97\xa1\x8c\x90\x0c\xad\x48\x06\x0b\x6f\xd1\xfd\xdf\x52\xa0\xc9\x94\x43\x65\x8c\x04\x87\x42\x42\x76\x6a\x45\x36\x9c\x0b\xf4\xba\x02\xee\x8f\x91\x42\x38\xa7\xa8\x67\x56\xa8\xa7\x53\x58\x8a\x4c\x39\x54\x36\xd2\x1b\x0b\x09\xd9\xb9\x15\xd9\x59\x00\x0b\x92\x29\x87\xca\x46\xb2\x63\x21\x21\xbb\xb0\x22\x3b\xf7\x05\x7a\x5d\x01\xf7\xc7\x48\x61\xde\xeb\xfa\xd2\x0e\xb5\x42\x1d\xe7\x80\x3e\xce\x21\x85\x9c\x0b\x1a\x79\x67\x45\x76\xa1\xd0\xc8\x05\xa0\x91\x0b\x48\x23\x17\x82\x46\xae\xac\xc8\x2e\x45\x8d\x5c\xb2\x1a\xb9\xe4\x34\x72\xd9\x6b\x64\xe0\xdb\xcd\x6b\x85\x4a\xde\x01\x2a\x79\x07\xa9\xe4\x9d\xa0\x92\x81\x9d\x3d\x59\x29\x74\x72\x05\xe8\xe4\x0a\xd2\xc9\x95\xa0\x93\x81\xa5\x51\xf1\x45\xad\x24\x9f\xac\xb8\xbf\x44\x23\x5c\x9e\xd2\xd4\xf5\xcf\x15\xf3\x45\x13\x17\x05\xb4\x88\x51\x26\x5c\x1e\xd2\x72\xd6\x00\xe1\x8a\x29\xad\xc0\x76\x03\x97\xcc\x68\x09\x3b\xb3\x71\xc5\x9c\x56\xb0\x73\x0f\x57\x2c\x68\xc5\x7c\xe0\x6c\xd9\x97\x88\x7c\xdc\xd1\x8a\x85\xc8\xc7\x8a\x56\x2c\x07\x3e\x82\xbe\x7b\x77\x22\x23\x41\xdf\xcb\x95\xc8\x49\x30\xf4\x93\x4a\xa9\x3e\xba\xfe\x79\xf8\xa4\x40\x4b\x02\x52\xc2\xf1\x56\x1f\xdd\x90\x14\xf3\x22\xaa\x8f\xee\x94\x94\x53\x09\xd5\x47\x77\x46\x0a\x78\x01\xd5\x47\x77\x4e\xca\x79\xf9\xd4\x47\x77\x41\xca\xe7\x03\x4b\x4b\x5a\x20\x72\x70\x47\xca\x17\x22\x07\x2b\x52\xbe\x1c\x38\x08\x68\xa7\xee\x44\x16\x02\xda\xb7\x95\xc8\x43\xd0\xf7\x0e\x0b\x86\x5c\x31\x71\x83\x33\x1b\x12\x66\xb8\xa1\xf5\x21\x57\xcf\x0a\x86\x02\x4c\x39\x00\x2c\x21\x5a\x33\xe3\x6a\x58\x51\x51\x80\x39\x07\xc0\xca\x8c\x02\x2c\x38\x80\x39\xc3\xf6\x92\xaf\x91\xf9\xbe\xe3\x00\x16\x32\xdf\x2b\x0e\x60\xc9\xf0\x1d\xf8\xbc\x4c\x64\xc6\x03\x5e\x6a\x8c\xa4\xb5\xe1\x44\xb7\xce\x6e\xd5\x9b\xab\xb3\x17\x76\xe8\x3a\x4f\xfe\xf5\x7d\xba\x6e\xd3\xf0\x36\x6e\x5d\xb7\x49\x79\x39\xcf\xae\xdb\xf8\xbc\x8d\x73\xd7\x6d\xb4\xde\xc6\xbf\xeb\x36\x76\x2f\xe7\xe2\x75\x9b\xc5\xb7\xf1\xf2\xba\xcd\xe9\xdb\x38\x7a\xdd\x66\xf8\xe5\x7c\x3d\xbc\xa3\x7f\x1b\x77\x0f\x47\x10\xde\xc6\xe3\xc3\x11\x8b\x17\x76\xfa\xea\x0c\xf2\xfb\xb0\x85\x85\x5d\x3f\x6c\x06\x15\xde\x1f\x36\x54\xa2\x03\x88\xed\x8b\xc2\x07\xc4\x16\x40\xe1\x06\xe2\x39\x2a\x7a\x82\x78\x6a\x29\x9c\x41\xac\xfc\x0a\x7f\x10\xab\xa7\xe8\x12\x12\xad\x52\x78\x85\x64\xdc\x15\x8e\x21\x19\x19\xc9\x37\xc4\xc2\x14\xdd\x43\x2c\x4b\xd0\x43\xc4\xa2\x84\x9d\x44\x2c\x49\xc1\x4f\xc4\x82\x84\x5d\x45\x2c\x47\xd8\x5b\xc4\x62\x14\x1c\x46\x2c\x45\xd8\x67\xc4\x42\x84\xdd\x46\x2c\x43\xc1\x73\x24\x22\x84\x9d\x47\x22\x41\xd8\x7f\x24\x02\x94\x5d\x48\x2c\x41\xe1\x60\xc1\x58\x65\x72\x30\xb1\x40\x0d\x3e\x26\x96\xac\xca\xcd\xc4\x22\x36\x78\x9a\x58\xd6\x06\x67\x13\x0b\x5d\xe5\x6f\x62\xe9\x1b\x5c\x4e\x3c\x0c\x06\xaf\x13\x8f\x87\xca\xf1\x24\x03\x63\xf0\x3d\xc9\x08\x29\xdc\x4f\xfd\x77\x42\x37\x8b\x6f\xd5\xff\xcc\xe2\x17\xf6\x3f\xb3\xf8\x2d\xfc\xcf\x2c\x7e\x2b\xff\x33\x8b\x5f\xd2\xff\xcc\xe2\xb7\xf2\x3f\xb3\xf8\xad\xfc\xcf\x2c\x7e\x49\xff\x33\x8b\xdf\xca\xff\xcc\xe2\xb7\xf2\x3f\xb3\xf8\x25\xfd\x4f\xfc\x51\xeb\x6d\xfc\x4f\xfc\x11\xed\x6d\xfc\x4f\xfc\xd1\xee\x85\xfd\xcf\x2c\x86\xfc\x4f\x6c\x61\x61\xff\x13\x9b\x41\x85\xff\x89\x0d\x95\xe8\x7f\x62\xfb\xa2\xf0\x3f\xb1\x05\x50\xf8\x9f\x78\x8e\x8a\xfe\x27\x9e\x5a\x0a\xff\x13\x2b\xbf\xc2\xff\xc4\xea\x29\xfa\x9f\x44\xab\x14\xfe\x27\x19\x77\x85\xff\x49\x46\x46\xf2\x3f\xb1\x30\x45\xff\x13\xcb\x12\xf4\x3f\xb1\x28\x61\xff\x13\x4b\x52\xf0\x3f\xb1\x20\x61\xff\x13\xcb\x11\xf6\x3f\xb1\x18\x05\xff\x13\x4b\x11\xf6\x3f\xb1\x10\x61\xff\x13\xcb\x50\xf0\x3f\x89\x08\x61\xff\x93\x48\x10\xf6\x3f\x89\x00\x65\xff\x13\x4b\x10\xf6\x3f\xb1\x1c\xf5\xfe\x27\x16\xa8\xc1\xff\xc4\x92\x55\xf9\x9f\x58\xc4\x06\xff\x13\xcb\xda\xe0\x7f\x62\xa1\xab\xfc\x4f\x2c\x7d\x83\xff\x89\x87\xc1\xe0\x7f\xe2\xf1\x50\xf9\x9f\x64\x60\x0c\xfe\x27\x19\x21\x7b\xff\x93\x39\x00\xe4\xa6\x87\x5b\xf5\x3f\xd3\xc3\x0b\xfb\x9f\xe9\xe1\x2d\xfc\xcf\xf4\xf0\x56\xfe\x67\x7a\x78\x49\xff\x33\x3d\xbc\x95\xff\x99\x1e\xde\xca\xff\x4c\x0f\x2f\xe9\x7f\xa6\x87\xb7\xf2\x3f\xd3\xc3\x5b\xf9\x9f\xe9\xe1\x25\xfd\x4f\x7c\xae\xeb\x6d\xfc\x4f\x7c\x8e\xec\x6d\xfc\x4f\x7c\x6e\xed\x85\xfd\xcf\xf4\x00\xf9\x9f\xd8\xc2\xc2\xfe\x27\x36\x83\x0a\xff\x13\x1b\x2a\xd1\xff\xc4\xf6\x45\xe1\x7f\x62\x0b\xa0\xf0\x3f\xf1\x1c\x15\xfd\x4f\x3c\xb5\x14\xfe\x27\x56\x7e\x85\xff\x89\xd5\x53\xf4\x3f\x89\x56\x29\xfc\x4f\x32\xee\x0a\xff\x93\x8c\x8c\xe4\x7f\x62\x61\x8a\xfe\x27\x96\x25\xe8\x7f\x62\x51\xc2\xfe\x27\x96\xa4\xe0\x7f\x62\x41\xc2\xfe\x27\x96\x23\xec\x7f\x62\x31\x0a\xfe\x27\x96\x22\xec\x7f\x62\x21\xc2\xfe\x27\x96\xa1\xe0\x7f\x12\x11\xc2\xfe\x27\x91\x20\xec\x7f\x12\x01\xca\xfe\x27\x96\x20\xec\x7f\x62\x39\xea\xfd\x4f\x2c\x50\x83\xff\x89\x25\xab\xf2\x3f\xb1\x88\x0d\xfe\x27\x96\xb5\xc1\xff\xc4\x42\x57\xf9\x9f\x58\xfa\x06\xff\x13\x0f\x83\xc1\xff\xc4\xe3\xa1\xf2\x3f\xc9\xc0\x18\xfc\x4f\x32\x42\xf6\xfe\x27\x7b\xb2\xd7\x6d\x6f\xf6\x38\x65\xfb\xd2\x27\x2a\xdb\x37\x39\x54\xd9\xbe\xd9\xb9\xca\xf6\x45\x8f\x56\xb6\x6f\x76\xba\xb2\x7d\xb3\x03\x96\xed\x8b\x9e\xb1\x6c\xdf\xec\x98\x65\xfb\x66\x27\x2d\xdb\x17\x3d\x6c\xd9\xbe\xdd\x79\xcb\xf6\xed\x8e\x5c\xb6\xaf\x70\xea\xb2\x05\x0f\x5e\xb6\xea\xb3\x97\xad\xe6\xf8\x65\x0b\x9d\xc0\x6c\x35\x87\x30\x5b\xcd\x39\xcc\x16\x3a\x8a\xd9\x6a\x4e\x63\xb6\x9a\x03\x99\x2d\x74\x26\xb3\xd5\x1d\xcb\x6c\x75\x27\x33\x5b\xf8\x70\x26\x16\xa6\xe8\x80\x62\x59\x82\x0e\x28\x16\x25\xec\x80\x62\x49\x0a\x0e\x28\x16\x24\xec\x80\x62\x39\xc2\x0e\x28\x16\xa3\xe0\x80\x62\x29\xc2\x0e\x28\x16\x22\xec\x80\x62\x19\x0a\x0e\x28\x11\x21\xec\x80\x12\x09\xc2\x0e\x28\x11\xa0\xec\x80\x62\x09\xc2\x0e\x28\x96\xa3\xde\x01\xc5\x02\x35\x38\xa0\x58\xb2\x2a\x07\x14\x8b\xd8\xe0\x80\x62\x59\x1b\x1c\x50\x2c\x74\x95\x03\x8a\xa5\x6f\x70\x40\xf1\x30\x18\x1c\x50\x3c\x1e\x2a\x07\x94\x0c\x8c\xc1\x01\x25\x23\xa4\x72\x40\x69\x62\x68\xf6\x56\x3a\x9f\x82\x0a\x48\x72\x0b\xa5\x88\x1e\x32\x25\x91\x84\x9f\x42\x22\xd4\xa6\x28\xe1\xbc\x77\x43\x1e\xb5\x1e\x11\x8a\x70\xae\x68\x31\xd7\x3e\xa6\xbe\xe1\x5f\x20\x09\x95\x58\xb6\x45\xfc\xf8\x03\xfe\xdf\x33\x43\x55\x09\xdf\x27\xc7\x06\x93\x1d\xd3\x44\xd6\x75\xc6\x64\xb5\xee\xfe\x60\xba\x3c\x1d\x85\x32\x24\xbc\x06\xb2\x5d\x73\x44\xaf\x4f\x96\xad\x6a\x4e\x44\x06\x21\xa1\xb2\xe4\xa4\xd6\x3b\x86\x65\x3b\xf4\xac\xa9\x92\xb2\x83\xef\xe4\xe5\x34\xd5\x3a\x6f\x8e\x6e\xb1\x77\x9b\xc7\x12\x7d\x57\xc4\xf1\x47\x59\x30\x6c\xb6\x42\x7f\xfe\xb1\xc7\x84\x33\xf4\x8e\x78\x48\xc2\x5e\x7d\xe3\xe5\xd8\x9a\xbe\x44\xc3\xfd\xf5\xd3\xd8\xaf\xbe\xe0\x68\x8f\x91\xf0\xc3\xb5\xbf\x96\x29\x25\x0a\x86\x33\x0d\xcc\x15\xcc\xd6\xa7\xdd\x0e\xd5\xf5\x84\xff\x93\x21\x33\x94\x40\xf9\xd8\xe3\xfd\xde\x8f\xef\x40\xae\x69\x3b\x55\xcf\xff\x14\xfb\x68\xb5\x5b\x98\x9b\xaa\x7a\x2c\x00\x1d\x8d\x24\x92\x7c\x5f\x4c\x98\xdf\x0c\x62\xf2\x27\x88\x62\x85\xe2\xfd\x12\xe4\xb2\x6b\xa4\xec\xdd\x6e\x86\xa6\xfb\xa9\xa1\x9d\xaa\x6b\x2c\xc4\xd1\x88\xfc\x21\xaa\xf2\x24\x3f\x4c\xf8\x3f\x19\xdc\x43\x09\x98\x51\x9f\x66\xe7\x04\xd8\xa0\xed\x94\x7d\xdc\x47\xfb\x70\xb7\x33\x37\x55\x75\x53\x00\x3a\x1a\x49\xc4\x51\x7e\x40\xd5\x84\xfb\x8b\x41\xde\x17\x80\x88\xc2\x18\xc5\x08\xe4\x95\x34\x53\xf6\x12\x6d\x77\x3b\x45\x2f\xd9\x96\xaa\x4e\xf2\x30\x47\x1d\x81\xce\x70\xba\x49\x4e\xd2\x55\x36\xc7\xb3\x45\x8e\xbf\xbe\x55\x8c\xf6\xd1\x29\x6d\x98\x56\xb3\xc5\x2c\x9a\x41\x99\xf4\x79\x7b\x4e\xc9\x59\xd2\x62\x9b\x38\xec\xf4\xe9\x79\x96\x4b\xf8\xc5\x40\x5e\xe0\x28\xa4\x62\x19\xeb\x5f\x90\x70\x2b\x54\x97\x45\x5e\x27\xf7\x48\x9d\xde\x79\xc8\xed\xd7\xae\x87\xd0\x8f\xf0\x6e\x42\x57\xd4\xd5\x1d\x13\x7c\x87\x78\x78\x46\x41\x26\xa3\x66\x68\x5f\x54\x99\x4b\xdf\xb9\x32\xe7\x9a\x26\xa9\x5f\xa9\x7b\x22\x3c\x8a\xc0\x67\xf4\x0d\x87\x57\x10\x94\x63\x27\x0c\x4f\x92\x45\x07\xfa\x44\xd3\xb0\x91\x63\xda\xa4\x49\xb9\x1e\xf3\xa2\xb7\x1b\x6d\x9d\xb8\xee\x73\x99\x81\xe7\x1f\xad\xd3\x93\xb2\x03\xcd\xa6\x18\x75\xbc\x60\x5e\x4f\xe4\xb7\x5a\x24\x98\xcd\xb3\x22\xe3\x33\xa3\xea\xf1\x3d\x0b\x53\x2f\x8d\xc4\xa6\xd7\xbc\x8e\xae\xb1\xd6\xa3\xb6\x8c\xf2\xf8\x6c\x91\x4d\x53\xd4\x71\x9a\xca\xde\x4a\x37\xb9\x59\x3e\xdf\x6d\xa7\xfb\x31\xe1\xbd\x2f\xb1\x35\xbc\x1f\x55\x9e\x1a\xb7\x4c\xa3\x1d\x3a\xe2\xb7\xf6\xce\x7c\xde\xfe\xa2\x8c\x76\x49\xf3\x88\x13\xc8\x0a\xfd\x2a\x7e\x7b\x42\xbb\x4e\x1c\x4f\xa6\x79\x7d\x93\x21\x01\x3f\x57\xfc\x6b\x85\xa2\xb8\xc8\xd3\xc7\xcf\x67\x95\x8d\x36\x62\x84\xf2\xf6\x93\x77\x02\x78\x78\xfc\x16\x45\x67\x76\xfa\x77\x29\xb2\x53\xda\x24\x65\x8a\x3e\x7f\xec\x5f\xe0\xda\x45\xe9\xee\xbb\x90\x26\x65\xfe\xc1\x09\xcb\xf6\x23\x88\x0a\xeb\x02\xd1\xa8\xfb\x28\x3d\x21\x1b\xb5\xe0\xb9\xc7\x2f\x66\xf1\xb2\x70\xab\x6e\x91\x14\xde\xc0\xc2\x51\x2a\x0c\x45\x1e\x60\x60\x1f\x7d\xc0\xdc\x12\xcb\xea\x3a\x9d\xcd\xfa\xde\x09\x3f\x8a\x6f\x40\xc0\x40\xe2\x8b\x28\x02\x19\x37\x3d\x00\x94\x96\x56\xa4\x24\x28\x20\xbf\xbd\x40\xad\xce\x00\x6a\xa1\x15\xb5\x50\x4d\xcd\xbb\x5b\x8a\xd4\xc8\xcb\x08\xdc\xc3\x19\xe0\xbb\x19\x73\x39\x47\xb9\xbf\x11\xd3\xf1\x73\x63\x57\x37\x51\x93\xec\x9e\x8a\x5a\x5a\x02\xa9\x0d\x22\x8b\x10\x90\xea\x97\x2e\xb1\x65\xeb\xf8\x20\x23\x7c\x59\x7a\x98\x98\x81\xea\x6c\xe2\x11\x7b\x80\x5f\xcf\x72\xd3\xc3\x4f\xc6\x46\x76\x2d\x58\x98\x28\x8e\x8b\x5c\x6e\xc6\xfe\xbd\x6d\x72\x18\xcf\xb6\x11\x5a\xd6\xd9\xb5\x2c\xaa\x5a\x18\x58\xec\x9a\xd9\xb2\x68\x4c\x7e\xa9\x95\xba\xc8\xa0\x9e\x0f\x5b\x56\x19\xb6\xfa\x94\xf3\xe2\x6b\x1f\x74\xb6\x80\xe9\xb2\x8d\x04\xa8\x8d\xdc\x36\xb9\xce\xca\x4a\x8c\x5e\x69\xa5\x55\xed\x25\x89\x68\x91\x00\x44\xdd\x3a\xb3\x59\x1d\x02\xef\x2e\xa0\x06\x4c\x9a\x5e\xba\x79\xa0\x57\x77\xdb\x19\xc1\x8d\x21\x31\xb2\x81\xfc\x64\x4b\x08\x0d\xe2\x54\x1a\x44\x88\xc2\x53\x06\x31\x3d\x7c\xdd\x20\x8e\xed\xbf\x7e\x10\xd3\x83\xcd\x20\x4e\xbd\x00\x47\x5f\xc7\x61\xc4\x34\xcf\x50\xa4\x15\x57\x37\xa8\x6d\xd4\xb9\xdf\x3d\x4e\x21\x8e\x68\xf7\x05\xc8\x3a\x0a\xb6\xe6\x9e\x4b\x62\xda\x7b\xbd\x5f\xe3\x30\x85\x74\xf5\xe7\x5d\x2d\xc0\xef\x91\x9b\xf0\x89\xa2\xa8\x7e\x88\xeb\x8f\xf0\x2a\x16\x8b\x85\xbc\x03\x3c\xf4\x29\xda\xd6\x45\x7a\x6a\x90\x2c\x03\x21\xb7\xb0\x2c\x18\x82\x6a\xdd\x79\x7b\xe4\xa5\x91\x11\x2b\xb1\x9e\x02\x30\x7e\xf4\x44\xf1\xde\x82\x08\x07\xc8\x0a\x7e\x0d\x4c\x6e\xfa\x03\x40\x95\xed\x4a\xff\x88\x0f\xef\xbd\x21\x14\x77\x5e\xde\x59\xa9\x0a\x14\xb0\x0f\xd6\xf0\xe6\xa6\x8f\x36\x72\xa5\x34\x10\x24\xac\x1f\xa1\xfc\x88\x46\x85\x4a\x14\x35\xeb\xbc\xa0\xbf\xd8\xba\x41\xa4\x3b\xd4\x0d\xa5\x43\x1e\xbb\xf7\xe6\x0b\x7e\xab\xca\xb4\xa0\x86\x83\x58\x36\xa7\xff\xb1\x31\x42\x5c\xbc\x63\x54\xf7\x5d\x71\x04\x97\x6e\x22\x54\x9e\xea\xa6\x60\xec\x21\x57\x29\x8e\x1c\x58\x2d\xc8\x5d\x07\xc3\x4d\x95\xf9\x6e\x7b\x37\xdf\x5d\xd4\xe0\x67\x69\xb7\x26\xc3\x4b\xb6\x89\xc7\xbe\x81\x50\x40\x31\xa7\x68\xbf\x40\x91\x86\x97\xbe\xf4\x2c\x45\x37\x4e\x55\xfa\xdd\xbb\x38\x6a\xa2\x35\xfe\xfb\x53\x7d\x7f\xf8\xa1\xcd\xd2\xcd\xee\x18\x55\x35\x6a\x7e\x3c\x35\xfb\xbb\xc9\xfb\xe9\x5f\xeb\xfb\x83\xd3\x66\x69\x5e\xff\xf8\xe1\xd8\x34\xe5\xfa\xd3\xa7\x87\x87\x07\xef\x61\xea\x15\xd5\xe1\x53\xe8\xfb\x7e\xd7\xf2\x83\x73\x9f\xa0\x87\xbf\x14\xed\x8f\x1f\xf0\x37\x7a\xe7\xee\xc3\xfb\xe9\x7f\xbc\x9f\xfe\xb5\x8c\x9a\xa3\xb3\x4f\xd2\xf4\xc7\x0f\xef\xc3\x29\xe9\xc7\x07\x27\xfe\xf1\xc3\x2f\xa1\x37\x75\x16\xde\x72\xfa\xb3\xb7\x70\x66\xde\x7c\xba\x73\xbd\x99\x1b\x78\xfe\xcc\x9b\x2d\xdc\xc0\x9b\x75\x5a\xe1\x7a\x77\x69\xe0\x05\x4e\xf7\xe7\xd4\x9b\xb9\x53\xef\x6e\xe7\x2d\x5c\x6f\x31\x75\x82\xee\xdf\x70\xe9\x04\x5e\xe8\x2d\x53\x77\xe6\xcc\xbc\x45\x87\x62\xea\xcd\x5d\xef\x0e\xa3\x0a\xbc\xe0\xb7\x0f\x9f\x08\x1f\x1d\x93\xef\xa7\xff\xf1\xee\x23\x91\x15\x9d\x18\xb0\x8e\x8d\x95\x80\x8e\x0d\x95\xb0\x8e\x09\xd5\xa0\x8e\xc1\x30\x9c\x8e\xed\xfd\x28\x9e\xa1\x8b\x1a\x5c\x8c\xfb\x41\xf0\x4a\x1d\x23\xd0\x1b\x08\x85\x6a\xa3\xa9\xe6\xbb\xb7\x31\x37\xa1\x60\xa4\x13\x44\xc1\x66\xde\xcc\x99\x7b\xd3\x70\x76\x74\xbd\xbb\x7b\x37\xf4\x66\x8b\xa3\x77\xf7\x5b\xe6\x77\xea\x14\x76\x85\xff\xef\xdc\xbb\x5b\x75\x65\xbf\x4c\xbd\xe5\xc2\x5b\x4c\x7f\xf6\xfc\x99\xb3\xf4\xfc\xe5\x7c\xe7\x7a\x41\x30\xf7\x42\xcf\x0f\x16\xde\x2c\x9c\x7b\x61\xf7\xcf\xe2\xb8\xf4\xa6\xab\xe5\xce\x0b\x67\xa1\xe3\x3b\xde\x74\x19\xba\x5e\x18\x2e\xbc\x70\x7e\xe7\x76\xf5\x7f\x5d\x78\xcb\xb0\xd3\xe7\x55\xd8\x11\x9f\x2d\x9d\xd0\x5b\xae\x9c\x99\x17\xce\xa7\xde\x62\x8a\xb1\x4e\x5d\x2f\x58\xce\x5c\x6f\xba\xa2\x3f\x66\xab\x99\xe3\xab\x34\x95\x58\x7b\x58\x51\x87\x3a\x40\x4f\xfb\x3a\x58\x4d\xf9\x5a\x50\x4b\x41\x10\x4e\x49\xe3\xd5\x7c\x3a\xdb\x5f\x94\xd0\x82\x8e\x42\xe0\x4a\x15\x25\xc0\x1b\x08\x03\xa4\xa2\xf1\x7e\xb9\x5f\xaa\x39\xa1\x85\x2f\xae\xa3\x83\x1e\x12\x4e\x19\xa5\x75\x43\xc7\x0d\x9d\xa5\xb3\x64\xd5\xb6\x6e\xaa\xe2\x0b\xe2\x1a\x74\x8a\xeb\x3b\x7e\x3a\x75\xa6\x99\xef\x4e\x7f\xf6\x9d\x69\xaf\x18\xbb\xa4\xda\xa5\xc8\xa9\x7e\xfc\xe0\xcd\x85\xb2\x5d\xfb\xe3\x87\xe9\x07\xb8\xea\x51\x5d\x45\x5a\x41\x10\x8c\x12\x62\x39\x0a\xae\xd3\x33\xbf\xc8\x81\x9f\x62\xad\x8a\x07\x87\x7f\x95\x83\x2f\x86\x20\x99\x88\x2d\x71\xc9\x88\x8b\x32\x54\xe0\x42\xfc\x24\x5d\x3d\x54\xf5\xd8\xb9\x06\x32\x20\xd7\x71\x76\x1a\x31\x47\x2b\x34\xd9\xb6\xd8\xc6\xfc\x3b\xa7\xcf\x27\xbb\x97\xe8\x36\x87\xbc\x8c\x76\x5f\xc4\xf2\x7f\x9e\xea\x26\xd9\x3f\xba\xfd\xdb\x6e\x22\x7e\xb6\x8d\x02\x56\x8a\x14\xca\x92\x26\x1b\xa8\x97\x11\xd9\x57\x9d\x6a\xbe\x79\xbd\xb5\x91\xae\xf8\x8d\x8d\x7b\x7a\x77\x3c\xb7\xbd\xd1\xed\x77\x20\x84\x7d\xc8\x52\xb3\xc3\xea\x9b\x31\x86\xff\xcc\x9e\x14\x57\xe3\x26\xb3\x48\xdc\x66\xda\xb3\x88\xe7\xee\x1f\x93\xb0\x2f\x66\x86\x59\xf3\xee\x9c\xaf\x14\x25\x14\x0b\xd0\x40\x0b\x7b\x7e\xf1\xc5\x2d\x8e\x36\xfb\x8e\xa5\xf8\x60\x10\x87\x9f\xf7\x7b\xfe\x18\xdc\x01\x56\x3b\x2a\xbc\xd4\xdc\x24\x8f\x93\x5d\xd4\x14\x95\x18\x3b\xd9\xe8\x5e\xe6\xe6\xc6\x48\x3c\x1c\x88\xda\x86\x2a\x90\x40\xba\xf3\xcf\x7a\x2f\x53\xe1\x7c\x9e\xb1\x2a\x5c\x2e\x38\x38\x09\x72\x20\x3c\x98\x2b\x7f\xe9\x60\xde\x47\xed\x95\xfd\x98\x34\xc8\xc5\x2f\x54\xae\xf3\x02\xdb\x60\xd0\x70\x0c\x63\x70\xaa\x51\xe5\x92\x88\x20\x3d\x06\x90\x15\xbf\x41\xa5\xb5\x5c\x28\x15\x48\x47\x00\xd8\xaf\x2f\xc0\x4b\xb6\xc2\x61\x86\xb7\x7c\xbf\x14\x0f\x03\x7d\xcd\x1f\xff\x24\x87\x79\xc0\x67\xfa\xbb\x7a\x8f\x01\x15\x1e\xe6\xdf\xc8\xdf\xd7\xf1\xb2\xea\x3b\x61\xd9\x92\x53\x11\xe1\x24\x08\x96\x93\x30\x58\x4c\xbc\x10\x9f\x8c\xb0\x03\x24\x94\xc7\xaf\xc1\x1d\x71\xcd\x97\xdc\xe1\xeb\xaf\xb7\x98\x93\xa6\xfd\x49\xc5\xae\x21\xf9\x7d\x06\x0f\x83\x5c\x22\x9e\x52\xff\x8e\xfa\xaf\x7d\xc9\x67\x27\x22\x41\x75\x12\xf5\x74\xd1\x3d\xca\x9b\x7a\x14\x8f\x5b\x56\x49\x16\x55\x8f\xfa\x53\x41\x7e\xb8\x9c\xc7\x77\xc2\xde\x87\x14\x72\x58\xe8\x60\x18\x70\xcd\xa3\x68\x2e\xe2\x0a\xe6\xb3\xd5\x96\xc3\xc5\x0c\xdc\x80\x9e\x0c\xe0\x55\xc3\x66\x3b\x6a\x74\xd0\x06\xea\xdc\xe0\x0d\x0c\x0c\x83\xf8\x74\x19\xb1\x63\x3b\xe0\xed\xcb\xea\x63\xf1\xf0\x13\xcf\x47\x55\x94\x71\xf1\xd0\x2d\x48\x87\x43\x8a\xec\x64\x0b\x9e\x1b\x52\x4b\xbc\x46\xbb\x22\x8f\x19\x2d\xe8\x5f\x95\xb5\x38\xf9\x81\xcf\xb3\x71\x48\x78\x25\x50\xa2\x42\x8b\xee\x3f\x02\xb6\x28\xee\xfe\x23\x20\x64\x35\x61\xa4\x62\xad\x0b\xfe\x6c\xd2\xff\xd7\xa0\x0d\x3c\xa4\xc8\x05\xaf\x11\x23\x23\x1a\x9d\xb0\x11\x17\xa7\x0f\x23\x56\x59\x23\x18\x4e\x60\x9d\x30\x8a\xda\x42\x2d\xd8\x01\x48\xf2\x7d\xa1\xd7\xb7\xf9\x76\xe7\xc7\x22\x0a\x52\x38\xa2\xb0\x31\x0a\xd3\x60\xeb\xc7\xa2\x51\x08\xa3\x68\x1b\x87\x23\x22\x56\x0f\x30\x62\x5b\x15\x58\x05\x93\x60\x15\x4e\xc2\x30\x34\x68\x00\x0f\xc8\x50\xe6\xc7\x1e\x13\xd7\x0c\xbb\x95\x58\xb8\x71\xc7\x18\xe5\x21\x27\xb4\xaf\xb1\x00\xbd\x20\x2d\x86\x9a\x15\x6f\x1f\x93\xd7\x8f\xb6\xfa\x43\x00\x87\xc5\x66\xc0\x67\xb3\x55\x3c\x9b\x09\xb8\x66\xc1\x6a\x31\x0b\x38\x5c\xdc\xdc\xa7\xe8\xad\x87\x3d\x9c\x04\x77\xb3\xc9\xca\x38\xea\x2c\x1c\x4f\x5d\x98\xf3\x94\x01\xdd\xd0\x5b\xca\x88\x9f\xf5\x14\x2f\x30\xe7\x7b\x3e\xae\xd1\x81\x5e\xb6\x16\x3a\xc0\x4a\xbc\x0f\x9b\x6b\x71\x6b\x02\xf5\x1c\x16\x1b\x1d\x40\xbb\xd5\x32\x10\x0d\x24\xda\xae\xa6\xc1\x82\xc3\xc5\xea\x40\x8f\xde\xda\xfa\xcf\xfc\x49\xb0\x9c\x4e\x96\x77\x26\xe3\xcf\x01\xf2\xf4\x79\x2d\xe8\x59\xd0\xd9\x7d\x4b\x29\x71\x5a\xd0\xe3\x95\xb5\x60\xe0\xe3\x1a\x2d\xe8\xa5\x6b\xa1\x05\xac\xcc\x69\x5c\x5a\x8b\x5a\x13\x0a\x67\x91\xd8\xe8\xc0\x6e\x35\xf5\x43\x71\xbe\xec\x82\x10\x85\x11\x8b\x8a\x55\x01\x8a\xdc\x5a\x03\x82\xe5\xe4\x6e\x3a\x59\xae\x4c\x0a\xc0\xc2\x71\xb4\xf9\xe1\xa7\xe4\x35\xa3\x6f\x29\x1e\x6e\xf0\x29\x56\x79\xec\x7b\x1e\xae\x19\xfa\x5e\xa8\x16\x43\xcf\x8a\x9a\x6e\x8c\xc4\x2d\x41\xef\xd8\xc2\xd8\x2c\x9e\xec\x07\x7c\x61\x81\x94\xdd\xbe\xc1\xe0\x5f\x0b\x38\x59\x95\x11\xc9\xbd\xc2\x3e\x42\xe4\x86\x57\x22\x91\xa1\x71\x73\xa8\x92\xb9\x24\x5d\x98\x0c\xab\x53\x22\x11\x59\xb9\x24\x26\xaf\xdb\x6c\x58\x0e\x88\xb4\xbd\xd8\xed\x76\x5f\xaf\x4e\x83\x27\x2d\x91\xb1\xb2\x3b\xbb\x9d\x35\x3e\x48\x93\x5e\x7d\x1f\x22\x73\x05\x6b\x14\xb0\x2f\x81\xa5\x6e\x50\x28\x78\x7f\x22\x53\x51\x2b\x95\x71\xbf\xf2\xe4\x91\x61\x37\x26\xbd\xaf\xfd\xb5\xea\xc4\xba\xe7\x2c\x1d\x1b\x65\x32\xfa\xfb\x2c\x42\x48\x9b\x5e\x6f\x37\xc3\x71\x02\x6b\x10\xbf\xbb\x51\x8a\xd9\xa0\x3f\xd2\x16\x87\x43\xaf\xd6\x9a\xeb\xb7\x3c\xd6\xd2\x17\x36\x39\xf2\x11\xa6\x27\x6a\x0e\xe3\xdd\x0b\xa4\xac\x94\xc7\xb4\x63\x10\x70\x82\xd6\xe8\xf5\x76\x46\x22\x37\x0a\x2b\x24\xee\x94\x0c\xc7\xc6\xd4\x66\x08\xd8\x2e\x89\x44\x34\x26\xe8\x29\xdb\x27\xeb\x01\x11\x37\x4c\xd2\x71\xa5\xa7\xe9\x13\xbb\x4f\x10\x48\xd9\xe8\x93\x71\xef\x21\xe0\x84\xf4\xe9\x55\x77\x59\x22\x3f\xb0\x46\x49\xbb\x2e\xc3\x21\x31\xa5\x46\x41\x5b\x2f\x91\x88\x5a\xa3\x9e\xb4\x15\xb3\x1e\x12\x7e\xf3\x25\x1f\x2e\x7a\x9a\x42\xb1\x5b\x0f\x9e\x92\x8d\x3e\x19\x77\x33\x3c\x4a\x48\x9d\x5e\x6f\xc7\x26\xf0\x02\xab\x92\xb8\x83\x33\x9c\xe5\x52\x6a\x12\xb0\x8d\x13\x48\xa8\xf5\xe8\x29\xdb\x3a\xe3\x48\xa4\x49\xfe\xe5\x2c\x7e\x8c\x04\xbd\x75\xfa\xe9\xce\x1f\xdb\x4d\x86\x5f\x5c\x87\xba\x82\xb5\x54\xa0\xde\xfc\x4a\xc2\xe2\x71\xcb\xa8\x88\x52\x70\x7d\x02\x71\xf4\x97\xf6\xcd\x80\x8c\x02\x32\x0d\x87\xcf\x1e\xb3\xdd\xdd\x6e\x23\x7e\x2e\x3c\xe5\x31\xaa\xba\x81\xd9\xd8\xf5\x48\x52\x1e\x72\x5b\x01\x00\x90\xd8\x19\x2a\x0c\x1f\x2e\x99\x4b\x2c\xf8\x4e\x18\x46\x70\xf8\xba\xdb\x31\x23\xda\x3a\x63\xd0\x8e\x57\x13\x9f\x74\x71\xaa\x43\x81\x3f\x84\x2b\xaf\xc8\x33\x30\x3f\x30\xe0\xec\xbd\x02\x7c\xda\x1e\x9f\xc9\xf8\xb5\x79\x2c\xd1\x8f\xdb\x53\xd3\x14\xf9\xe7\x11\x7a\xc2\x54\x56\xa8\x46\x8d\xa2\xae\x3e\x6d\xb3\x84\xad\x64\x8f\xc7\x79\xfb\x28\x46\xe7\xfe\x73\xab\x0f\x7d\xb4\xa6\x95\xf8\x76\xb5\xd3\xa9\x44\x54\x09\x1f\xad\x21\x08\x7d\x35\xa1\x8b\xcd\xc0\x99\xb9\xe9\xbb\x2b\xd2\x34\x2a\xeb\xf1\x14\x23\x19\xfc\xbe\x98\xc0\xf3\x57\x65\x9b\x4a\x51\x4d\x93\x1a\x14\x0f\x17\x9c\x1d\xc7\x04\x45\xd4\x60\xa0\x85\xaf\x64\x48\x47\x61\xe8\x11\x06\x7f\x48\xb7\xb0\x3e\x26\x71\x8c\x72\x48\x6c\x04\xd6\xf1\xa6\x73\xf2\xb9\x5e\x90\x99\x54\xad\xa9\xbb\x0c\x66\x71\x82\x7f\x9d\x4a\x99\xb7\x8b\x68\x3a\xd7\xeb\x68\xdf\xa0\x4a\x77\x82\xcc\x1f\x3b\xc4\xdd\x7d\x99\xca\x07\x46\xe8\xe1\x8b\xfe\x10\xcb\xbb\x77\x6c\x6e\xa9\xae\x01\x39\x37\x31\xcc\x07\x72\xf6\x64\x28\x87\x6e\xb3\x0e\xb4\x64\x10\xb9\x33\xc2\x49\x85\x0b\x95\x83\xa3\xea\x35\xc3\x9d\x2f\xe4\xb0\x1a\x49\x32\x64\x32\x94\x9f\x80\xfb\x4e\x38\x73\x96\xef\xbf\xdf\x90\x63\x3a\x9b\xdf\xdc\x24\x8f\x51\xdb\x95\xf9\x1b\x56\x49\x37\xfb\xb4\x88\x9a\x75\x07\xb6\x61\x12\xcb\xfa\xcc\x65\x60\x7a\x7e\xa4\x97\xf5\xba\xbf\x5a\xe3\x3b\xe2\x2d\xe3\x0d\xff\xfd\x92\x39\x2c\x83\xf1\xa7\x49\xdd\xd0\x9c\x1e\xb0\xe7\x83\x97\xcb\x37\xc9\x8a\xc1\x48\x34\x4e\xee\x93\x18\x55\xc3\x35\xca\xb2\x1d\x3a\x4e\xe5\x20\x4e\x22\x75\xbe\x96\x01\x69\xd2\xa0\xcc\x9c\x77\x64\x5a\xb6\xfd\x3a\xb0\x4b\x51\x54\xad\xb7\x45\x73\xdc\x28\xfc\x00\x59\xc8\x49\x7e\x44\x55\xd2\x40\x47\x92\x46\x16\x3b\xdf\x8b\x49\x1a\xc1\x71\xd8\x2f\x71\x7c\x21\xb7\xec\x06\x71\x80\x82\xfd\x06\x5a\xec\xa0\xf1\x5c\xee\x97\xfb\x95\x40\x65\x70\x4b\x78\x32\xf4\x74\x0c\xa3\x09\x96\x44\xfa\x48\x25\x4f\x64\xf4\x18\x79\x32\xf0\x7a\x0f\xdc\x4e\x34\x38\x10\xc4\x13\xe4\xe7\xa1\x90\x0c\x01\x83\x44\xe2\xe4\x1f\xc0\x89\xb1\x39\xf7\x17\xaf\x99\x34\x91\x3c\x58\x57\xc1\x64\xe4\xdc\xf4\x27\xef\x06\xa8\x23\x8a\x62\xc6\x60\x12\xf5\x12\x0e\x7f\x99\x92\x04\xf4\x7e\x01\x2f\x15\x59\x93\x18\xb2\x9d\x7c\xba\x3f\x46\xf3\xb3\x4f\x5a\x14\x6f\x88\xed\xea\xbb\x35\x66\x0d\xe0\x2d\xd1\x6a\x05\x19\x43\x2c\xc6\x0e\x01\xee\x69\x7f\xbd\x55\xce\x2d\x38\xdc\xea\x1b\x1c\xa1\x09\xe3\x13\xf5\x6b\x80\xe6\x72\xeb\x98\xc7\x84\xac\x2e\xc0\x79\x4e\x5a\x25\x1d\xeb\x64\xca\xd9\x66\x2c\xb8\xe2\xe8\xb0\xcc\x21\xe3\xbb\xe1\x0a\x7a\x71\x5a\x62\xdb\x7c\xc8\x3c\x90\x0e\x99\x07\xdc\x21\x73\xf2\x97\x92\x07\x32\xcb\x45\x4e\xe8\xdc\xef\xc7\x2c\x54\x36\xe7\xb6\x1a\x10\x7a\x53\x3d\xe3\x5c\x8f\xe4\x65\xac\x0a\x64\x0c\x0e\x90\x59\xa7\xfb\xf9\x83\x20\xeb\xb1\x50\xd2\x20\x67\xfc\x09\xb6\x62\xaa\xd4\xda\x07\x12\x05\x6a\x0d\x18\x60\x36\x94\x30\xfc\x05\x71\x7a\xbd\xb9\x6c\x89\x30\x9a\xa2\x48\xb7\x51\xf5\x42\xc7\x99\xf1\xe9\xe1\xba\x89\xaa\x46\x79\xe0\x18\x9f\x32\xa6\x20\xdc\xa1\x63\x52\xa6\x06\xe7\xf8\x57\x9f\xf1\x17\x34\x22\x2f\x9a\xef\xd6\xfb\xa4\xaa\x1b\x72\x87\x9b\xdc\xb3\x5f\xa7\x11\x5f\x20\x3a\x63\x1f\xcf\xe0\xee\x9a\x55\xb5\x11\xa7\x98\x9d\x56\x0d\x79\x25\x71\x9a\x84\x13\x1b\xd2\x81\x13\xc6\x7d\x15\x6a\x24\xca\x23\x21\x59\x0e\xdc\xdc\x11\x5d\x51\x09\x5a\xe0\xa8\xeb\x29\xc8\x10\x57\x21\xf2\x43\x47\x6b\xf4\x37\x61\x00\x8b\x31\x23\x46\xd2\x30\x44\x14\x9b\x4e\xfc\xa2\x98\x26\x4f\x41\x21\x06\x7e\x9e\x67\xf0\x28\x69\xdd\x10\xca\x8a\xf8\x95\xa3\x24\xef\x49\x24\x3b\xeb\x15\x25\xca\x25\x38\xd6\xc3\xc1\x46\x4d\xa8\x77\xeb\x32\x4d\x1a\x21\x53\x00\xcd\xae\xc7\x5d\x27\xe8\x93\x17\xa8\x91\xf4\xdb\x24\xd5\x9c\xeb\xc3\x21\x8a\xe6\x7d\x94\xc4\x92\xc5\x29\xc4\xe3\x74\x29\x78\x1e\x7d\x64\x47\x4b\x33\x3d\xd8\xd1\x1c\x32\x1a\x08\x99\x30\x24\x7f\x67\x74\x72\x5e\xc7\xa5\x61\x0d\x7d\x51\x25\x9d\x75\xee\x39\xe0\xea\xe2\xa4\x42\x3b\xea\xae\x57\x19\x53\x89\x6d\xf9\x58\xbb\x2b\xd2\x53\x96\x8f\xab\x80\x54\xa3\x80\x97\xae\xcf\xf0\x0b\x0e\x7b\x29\x06\x5a\x6c\xd8\x36\x2a\xd8\x17\xbf\x44\x73\x51\xad\xe3\x86\x05\xfe\x2c\x06\xe2\x00\x4f\x4a\xe9\x28\xfc\x64\xe1\x70\xfc\x64\xe1\x70\xfc\xa4\x75\x38\x3a\xdf\xdd\x1d\xf7\xcc\xc0\x0c\xe5\xfd\x3e\xb3\xb5\xd7\x18\x7a\xd1\x87\xd4\x18\x6a\x2b\xbb\x0c\x59\x4e\x35\x39\x9d\x71\x3e\x2b\x2d\xbd\x8d\x25\x86\x64\xfd\x0c\xeb\x22\x88\xf6\x89\x0b\xe4\x13\x70\x3d\x65\xa5\xbc\x6a\x44\xbe\x66\xd1\xbc\x66\xa0\x7e\x8d\xa3\x26\xa2\xbd\xa0\xe1\xed\xfa\x33\xc6\xec\x30\xe1\x6b\x7c\x39\x71\x5b\xb4\x9f\x27\x76\xf0\x1d\xfa\x42\x07\xcc\xb8\x07\xd7\xd2\x51\x34\x25\x24\x81\xf0\x21\x0e\xaa\x75\x96\x97\xc6\xcd\xfc\x8f\x1b\xf0\xde\x11\xeb\x86\x9b\xf7\xda\x4f\xdf\x65\xb0\x76\x8f\xa1\x29\xdc\x39\x96\x39\x18\xf6\x82\xa6\xe7\xad\xd6\x81\xb4\x81\x0e\xb8\x0d\xf4\xf0\x17\x65\xe5\xbd\x7c\x9b\x55\xc9\xd8\xe0\x47\xa9\x21\xe8\xf6\x57\x0d\xc0\x6f\xc4\xa7\x1a\x6a\x13\x53\xbe\x36\xf6\xf6\xe3\xf3\x6e\x00\x6f\xc4\x2f\x78\xa9\x45\x5b\x3d\x3a\x66\xdb\x3c\x51\xa4\x8c\xbb\xa6\xd5\x53\xd7\x4b\x0b\x7d\xb0\xbd\xc5\x0a\x20\x3b\x83\x59\xb3\xf5\xe9\x48\xcd\x17\x6d\xf9\x14\xb5\xf2\xb5\x5b\x65\xfe\xdd\x27\x86\xff\xa5\x6e\x99\x13\x5f\x3e\x25\xb5\xa5\x4c\xe6\x39\x93\x5d\x02\x8c\x43\xd9\x1e\x9f\x92\xcf\xd1\xc0\xf8\xd7\x66\x78\xc4\x28\xe1\x55\x4d\x0f\x47\x97\x30\xf6\xae\xbf\x71\xa2\xda\x4c\xcb\xeb\x26\xa1\xe4\xa7\x89\x4e\x94\x2d\x0e\xcb\x10\x91\x02\x9d\x25\x55\x11\x8c\xf1\x0e\x6c\x5a\x3c\x57\xc4\xc3\x2c\xf9\x33\xf7\x55\xd6\xbf\xca\x02\x5b\x19\x5c\xdb\x61\xb9\x4e\x05\xec\x9b\x08\xa2\xbc\x6a\xbc\xae\x63\x55\xf2\xea\x9f\x2b\xc8\xc7\x8e\xc2\x0f\x36\x32\x3f\xb3\x9f\xd1\x05\x35\x80\x3f\x7e\x8c\xf6\xc4\x07\xbf\x48\xc1\xc9\x67\xcd\xdf\x50\x00\x17\x90\x7d\x35\x8f\xfe\xcd\xfc\x86\x49\xe1\x5d\x30\x10\x70\x87\x60\x21\x57\x70\xac\x94\xbd\xc0\xb1\x4e\xe7\x00\x3e\x93\x05\x38\x73\x09\x38\xc0\x4e\x3c\xcb\xfc\x18\x3f\xd1\x6c\x8c\x52\xd3\xdb\x5a\x85\x34\xf5\x8d\x60\x29\xeb\xdb\xd0\xaf\x63\x96\x46\xfc\x3a\xb6\xae\x63\x48\x56\x04\x21\x55\xcd\x5b\x7d\xf3\xcc\x92\x7c\xf4\xe0\xa0\x10\x26\xeb\x17\xd2\x60\x27\xfe\xe2\x2c\x64\xf3\x95\x72\xc8\xc0\x19\x7d\x7b\x01\xb8\xc1\x90\x74\xc3\x87\x1b\xaf\xb1\x2f\x81\xe2\xff\x4f\x9d\x9e\xc6\xe2\x7a\x94\x02\x37\x1e\x3b\x0d\x66\xe5\x21\xd9\xce\x41\xed\x08\x4e\xc8\x9f\xd3\xee\xcf\xe1\x68\xa7\x35\xac\x82\x2b\xa2\x80\x4f\xed\xf0\xdd\x7e\x17\xed\x91\x02\x75\x7f\x7e\x42\x87\xdc\xe2\x2c\xc5\x70\x44\xe6\x3a\x22\x31\xaa\x77\x55\x52\x76\xaa\x60\x91\x5e\xda\x9c\x8e\x88\x3b\x30\x45\x9d\x55\x7a\x50\x01\x3c\xad\xd3\xd5\xf7\x4a\x8e\x55\x5c\x8e\x8a\xbc\x50\xa2\x1f\xf9\x10\x71\x1c\x3f\x35\xcd\xb2\x98\x2d\x4a\x48\x9e\x3c\xf7\xdf\xe3\x97\x8c\x15\xe5\xa3\x5c\xa9\x8f\xae\xc9\xfb\x04\x6f\xb6\xcc\xed\xed\xa6\xed\x6d\xe4\x85\xdd\xd3\xdc\x9a\x0b\x6f\xbe\x98\x79\xcb\x79\xea\x4e\xbd\xf9\xca\x99\x7a\x8b\x20\x74\x03\x6f\x3e\xbd\xeb\xfe\x77\xfe\xb3\xef\xcc\xbc\x70\xe1\x84\xde\x6a\x39\x73\x96\x5e\x38\x77\xee\x9c\xd0\x0b\x56\x53\x28\x3f\xab\x9d\x88\x3a\x13\xd8\xa0\x2a\x4b\xf2\xa8\x41\x76\x82\x32\xdc\x05\x7e\x49\x09\xce\x9c\x99\x22\x45\xe9\x20\x43\xdf\x09\x8f\x33\xb5\x38\xf0\x6e\xcf\x5a\xdd\x58\x5d\x55\xb5\xbc\x31\x45\x73\x67\x8e\x3b\x63\x54\x6d\x4c\xcc\x3a\xfd\xc0\xab\x9c\x5a\x65\x08\xf7\xb5\x5b\x37\x51\xd7\xad\xdf\x5d\xac\x4f\xd9\x53\x29\x6b\x9f\x70\x66\x4c\xb0\x3e\x86\xd6\x3f\x28\xb0\xf5\xfb\x16\x5a\x4b\x8c\xf4\x59\x91\xd0\x8e\x7b\x1e\x57\xfd\x6c\xd3\x78\x5a\x6f\xda\x47\x52\xc8\xbf\xfd\xdf\x34\xaa\x66\x08\x93\xc1\x67\x9f\x99\xb3\x9f\xdd\x82\xef\xbc\xec\x14\x9f\x83\x46\x72\x3a\x9d\xd2\xd4\xec\x8e\xff\x33\x9e\xe4\xbf\x65\xbe\xd3\xd9\xc4\xe9\x71\x26\xdb\x3f\x67\x58\xc6\xfa\x27\x01\x88\x18\x0c\x0b\xd7\x5d\xd9\x3a\x81\x5f\xb6\x1b\x75\xc5\xd3\x9e\xcc\xeb\x16\xee\xa8\x2c\x51\x54\x45\xf9\x4e\x78\xbd\x4f\x28\x17\x14\x03\xba\x16\x03\x3c\xb2\x06\xb4\xb9\xfa\xc1\x2e\x1e\xc7\x57\x9c\x73\x15\x7d\x33\x8a\x91\x7d\x92\x4e\x76\xb9\x09\x90\xf8\x38\x96\x78\x84\x62\x38\xca\x2e\xbe\xad\x48\x5e\xf6\x27\xa8\xf6\x49\x8a\x34\xdb\x18\x8b\x29\x16\x7a\x56\x0f\x87\x30\xf4\xe8\x3e\x83\x39\x02\x3f\x23\x18\x8c\xe8\xd7\xfe\x66\x9f\xa4\x0d\xaa\xd6\x51\x5a\x1e\xa3\xef\xa8\x68\x7e\xf4\x3f\x02\x1b\x13\x4c\x4a\xda\xa9\x71\x5e\xe8\x78\x74\x56\x38\x31\x3b\x17\xc8\x03\xe9\x1d\x79\xfb\x20\x9a\x87\x37\x74\x56\xc7\xfc\x69\x57\x47\xe6\x01\xc9\xad\xd3\x28\x3f\x7c\x87\xf2\x8f\xfd\x71\xa0\xe1\x7a\xc7\x5f\x8f\x45\x51\xa3\xce\xee\x20\xcf\xf3\xde\xc1\xad\xd7\x5b\xb4\x2f\x2a\xa4\x90\x3f\x3e\xbd\x30\x86\x40\xfa\x43\xc8\xf8\x77\x3f\x14\x0b\x61\x77\xf0\x95\x03\xf3\x5c\x1f\x33\x7c\xa7\xff\x82\x40\x6f\x68\x98\xa4\x47\x05\x31\x88\xef\x2f\x55\xf1\x50\xa3\x77\x17\x2f\x8f\xee\x9f\xd1\x6f\xe0\x73\xc6\x02\xef\xc9\x71\xf7\x42\x30\x75\x72\x05\x52\x75\xa4\xbd\x13\x6b\xa7\x1b\x3d\x60\x1f\x42\x19\xfe\xd6\x5d\xc9\xeb\x81\x3c\x6b\x13\x49\xda\x34\xd1\xb6\xe6\x83\xa4\xec\x93\xeb\x71\xcc\x80\x39\xf8\x17\xbe\xf4\xc1\x77\x96\xc4\xb8\x78\x30\xdc\x53\x6d\x22\x57\x55\x10\x9d\xff\xba\x22\x06\x67\xfb\x09\x24\x53\x63\xc5\x25\xd4\x00\x97\x33\xa9\x32\x3a\xc3\xbf\x40\x57\x75\xf2\xb4\xbf\xe0\xcc\x5d\xb0\x90\x65\x89\x2f\x54\x8c\xf4\x20\xfe\x3d\xfe\x16\xc9\x15\x0f\x9f\xc6\x31\x19\x44\x87\x2c\xa6\x23\x6a\xfe\x6e\x82\x78\xcc\xe9\x29\xe7\x7c\x3a\xdc\x65\x92\xa6\xf2\xf8\x43\x43\xc7\x40\x2a\x85\x20\x60\xf3\xe4\xbb\x34\x54\xa9\xe9\x9b\xd3\x9a\x28\x57\x87\xa3\x73\xdb\x18\x15\x7e\xb6\xb3\x13\xd2\x67\x5c\x42\x8e\x7c\x6f\x4f\x3a\x17\xfc\x2a\x9a\x78\x49\xe6\x68\xe2\x12\xfe\x2f\x80\x66\x13\x6d\xfb\x6f\xfb\x3f\xe1\x3f\xca\x28\x17\xaf\x6e\x72\x30\x54\x9c\xc2\xf5\x9e\x3c\xba\xdf\x46\xd5\x8b\x9e\x7b\xb9\x91\xc3\x15\xf2\x82\xd6\xf7\xde\xdd\x56\x9d\x3b\x08\xba\x66\x9c\x1f\x18\x82\x6e\x60\xa8\x88\x09\xcb\x5f\x90\xd9\x05\x54\x7d\xcf\x8d\x67\x8b\x31\x73\x63\x99\x61\x65\xe8\x00\x9f\x77\xf1\xbb\xad\x31\xbc\x66\x0d\xa6\xb2\x60\xac\x94\xe9\xb1\x50\xda\x88\x7b\x84\x50\xad\x13\x33\x58\x29\x66\xa3\xf1\xc3\xc8\xf0\xa7\xd1\x31\x92\x4e\x4e\xed\xd6\x28\xdd\x83\x07\x7c\x3b\xeb\x01\x9c\xf2\x15\xe1\xc5\x23\x17\xcb\xb9\x59\xef\x02\xc5\x35\x4a\xed\xa2\x2d\x5b\x74\xa6\x53\x82\x86\xf6\xa5\x16\x3a\x4a\x41\xdd\x64\x57\xe4\xba\xab\xd2\x41\xe7\x2c\x6d\x46\xcf\xd3\xea\x86\xf4\xd8\xcb\x71\x1f\x6e\x17\x3a\xee\x4c\x2e\xb1\xbb\xca\x1a\xa9\x0b\xf8\x7e\xa3\xec\x8b\x93\xaf\x46\x80\xd0\xe8\xbd\x49\xb9\xc5\x68\x40\xc6\xd7\x73\x86\xfd\xdb\x7c\x39\xc7\xaf\xe7\x70\xb8\x3a\x77\xc5\xe1\x54\x5d\x71\xb1\x9a\x3e\x5b\x40\x2e\xaf\x00\x03\xd1\x21\xfa\xc9\xeb\x64\x18\x25\x39\xaa\x4c\x13\x45\xf3\xba\x8f\x84\xf6\x0c\x18\x90\x63\x51\x25\xbf\x75\xc4\x9e\x66\x42\xaa\xe2\x01\xb2\x1f\x5d\x31\x04\xc9\x22\xe9\xac\x6c\x7f\x42\x6c\x40\xc1\x16\xca\x50\x2f\xfa\x92\x92\x76\x38\xdf\x5a\x74\x17\x93\xb6\x29\x0c\x2b\xf0\xf9\xd4\x03\xcc\x87\xa8\x74\x2f\xf4\x84\xd6\xb7\x33\xe4\x52\x1a\x0e\x86\x91\x7f\x4b\xb2\xb2\xa8\x9a\x28\x6f\x40\x99\x40\xd5\xa3\x74\x80\x5a\xa1\x11\x7b\x42\x59\xcd\x60\xbf\x96\x71\xbe\x26\x60\xac\x96\x8b\x25\x6c\x0c\xdc\x3a\x7b\x36\x7b\x85\x4f\x28\x7e\x8d\xc9\x5a\x2e\xee\x94\x5c\xfe\x61\xb5\xae\x52\x61\x61\x5c\x6f\xd0\x70\x49\x9a\xf7\xf5\xb6\x4b\x50\xc0\x7f\x55\xf3\xc5\x4a\xf6\x56\x2d\x18\xcb\xa3\xad\x11\x5b\xad\x02\x85\x79\xc8\xe2\xe7\x33\x62\x59\xfc\x75\x46\x6c\xb5\x0a\x95\x5c\xfe\x61\xc4\xae\x53\x64\x7e\x5c\x6f\xd1\x88\x89\x9a\xf7\x0c\x46\x8c\x57\xc0\x7f\x59\x23\xc6\x48\xf6\x66\x8d\x18\xc3\xa3\xad\x11\x0b\x82\xd5\x4a\x61\x1f\xd2\xc3\xf3\x59\xb1\xf4\xf0\x75\x56\x2c\x08\x7d\x5f\xc9\xe6\x1f\x66\xec\x3a\x55\xe6\x07\xf6\x16\xcd\x98\xa8\x7a\xcf\x60\xc6\x78\x0d\xfc\x97\x35\x63\x8c\x64\x6f\xd6\x8c\x31\x3c\xc2\x66\x0c\x68\xd3\xa6\x7f\x58\x81\xeb\x34\xa1\x4d\x9f\xcf\xbc\xb7\xe9\x15\xe6\xdd\xc8\xcb\x2d\x5a\x24\x51\x5a\xcf\x60\x91\x78\xa1\xfd\xcb\x5a\x24\x46\xb2\x37\x6b\x91\x18\x1e\x41\x8b\xd4\x57\xa6\xe4\x30\x1f\xfb\x41\x6e\x02\xd7\xf5\x68\xc8\xd7\x69\xf6\xd8\xcb\xea\xa3\x0e\x9d\xf0\x45\x05\x82\xa0\x77\x79\x74\x64\xb5\x58\xf8\xaf\x34\x57\x30\xc8\x4f\x0c\xb9\xe1\xdc\xaa\xa1\x96\x37\x1e\x52\xc5\xe1\xd2\x8a\x90\x78\x9e\x83\xc5\x30\xd5\x62\x20\xdf\xcb\x7f\xe2\x0f\x29\x98\xa8\xf5\x97\xa6\x2c\x40\x8b\x12\xe5\x3a\xc0\xae\xfe\x27\x9d\xa4\x95\x43\xd4\xab\x1d\x77\x36\x84\x3b\x74\x65\x68\x49\x3e\xc8\x7d\xd5\x79\x71\xee\x40\xed\x34\x74\xa6\xe1\x07\x8b\x73\xb8\xc0\xc1\x7a\xca\xb7\x43\xff\xdf\x9b\x7f\xfc\x40\xeb\xc8\xae\xe1\xc7\x0f\xe1\x50\x90\x26\x39\xda\x45\xe5\x8f\x1f\x30\xd7\x43\x71\x96\x34\xa8\x4a\x93\x2c\x69\x7e\xfc\x10\xf8\xe4\x08\xef\xcc\xb9\x3b\x86\xb3\x5f\x66\x4e\xb0\x20\xff\x86\xb3\x63\x08\x1d\xda\x87\xe5\x84\xda\x46\xaf\xfb\x49\x7e\x8f\xaa\x1a\x29\xcc\x84\x58\xcb\x1b\x8a\xe1\xf0\x8e\x12\x91\x30\x7d\x60\x18\xde\x44\x28\x48\x1a\x30\x41\x66\x42\xcb\x9e\xd2\x3c\x84\xf3\xf9\xa4\xff\xaf\x4e\x50\x3a\x33\xa1\x87\x95\x0c\x05\x47\x72\x69\x4b\x13\xb4\x18\x1c\xaa\xd0\x84\x4a\x69\x3a\xf4\x84\x05\xe3\xa1\x07\xe6\xcc\x07\x08\x0a\x1a\x10\xed\xe0\xa9\x0d\x07\xd7\xff\xe0\xa3\x09\xc3\xcd\x19\x90\x8e\x6f\x67\xfc\x9f\x37\x33\x23\x92\xbc\x04\x43\x22\xcd\x92\x5d\x54\xc5\xff\x0a\xa7\xb3\x9e\x72\xda\x3a\x54\x1f\xb7\x8e\xaa\x98\x3e\xb7\xf0\x6c\xe7\xfe\xfa\xc3\x36\x01\x47\xa4\x49\x9a\x14\x89\x77\x74\x96\x0c\x40\x7d\xda\x72\x30\xf8\xd0\x65\x7f\x75\x40\x4a\xbf\x44\x70\xa2\xb6\x61\x6e\xb7\x9f\x61\x28\xe3\x11\xe1\x01\xea\x87\xf1\x27\x77\xff\x87\xeb\xc9\x4f\x1e\x3e\x3d\x25\xe5\x40\x73\x98\x72\x9a\x5f\xdd\x22\xf1\x98\xdd\xa1\x5e\x89\xee\xd8\x69\x99\x2c\x23\x10\x4d\xb2\x0e\x9e\x30\x90\x06\x82\x1b\x3d\x9a\x74\x5c\xca\x00\x13\x82\x37\x2f\x54\xa9\xe1\x37\xaa\xf3\xd4\xa2\xb6\x72\x54\x21\x39\x52\x1e\xf1\xe5\x2a\x7a\xa8\xcb\x75\x82\xb2\xfd\xe8\x00\x45\xbe\xd3\xab\xc2\xbe\x28\x1a\x75\x37\x4c\x6c\xe3\x67\x16\x4c\x3c\x13\x12\xc0\x20\x0c\xa7\xf6\x7d\xc7\x8a\x6d\x4e\x06\xe4\x38\x3a\x9f\xb1\xc1\x5b\x40\xd2\x77\xf9\x94\x4c\x24\xd7\x42\x0f\xca\xcb\xdf\xe7\x49\xe0\x63\xc5\x7a\x1a\x1c\x36\xda\xba\x7f\x76\xf6\xca\x97\x46\xd9\xb6\x0e\x2b\xba\x09\x54\x45\xf5\x4f\x9f\xa4\x9f\x9a\x11\xf2\x5a\xe0\x95\x0f\xc4\xb1\x6d\x21\x76\xf8\x2a\x7b\x76\xf0\x9b\x97\x57\x3e\x7e\x38\x34\x84\x18\x61\xca\xed\xb9\xe8\x9f\xbc\xbb\xf2\x8d\x33\xb6\x2d\xc4\x0b\x5f\x65\xcf\x0e\x7d\x2f\xed\xca\xa7\xb2\x98\xa6\x10\x33\x5c\x8d\x3d\x2f\xe2\xeb\xc9\x4f\x78\x19\x99\xc3\x33\xbe\x9a\x7b\xed\xa3\xb8\x1c\x1a\x58\x6f\xcc\xef\xa0\xf2\xbc\xa8\xe6\x82\xf9\x55\x4c\x0e\x8f\x52\x7d\xcc\xaf\x21\x72\x78\x54\xe3\x6e\x7e\x03\x8f\xaa\x3e\xf6\x09\x95\x6e\xe0\x62\x30\xc2\x83\xf7\x08\xcd\x1f\xb6\xca\x42\x4f\x36\x06\x27\x3f\x84\x89\x62\xa7\xea\xff\x9e\x8a\x06\x4d\x9e\xc4\x13\x58\x45\x1c\x24\xee\x1a\xa8\x8e\xb2\xe3\x8d\xbf\x75\x14\xc9\xd6\x0b\xa8\xe8\x7d\x32\x98\x19\x9d\x4b\xae\x1a\x0b\x76\xb3\xaa\xaa\x96\xf7\xd0\x42\xbf\x86\x05\x5c\x3e\xd9\x2e\xa4\x9b\x22\x24\xb2\x83\xd1\x6f\x18\x41\xdd\x8e\x7a\x1a\x3d\x1a\x2f\x6c\x8a\x6f\x9d\xc0\x7e\x6f\x87\xb1\x29\x4a\xa5\x03\x28\xb3\xa2\x72\x06\xb5\x4c\x13\x66\x74\x0e\x9f\x9a\x10\xe0\xfc\x01\xb4\xd4\x87\x98\x89\xf9\x45\xcc\x43\x72\xcf\x1c\xb6\xc7\xcf\x2f\x55\xc5\x83\xc3\x07\xee\xf9\x62\xb9\xe8\x32\x72\x46\xd4\xeb\x85\xee\x79\xc0\xbb\x25\x5f\x48\x2f\xe6\x33\xe9\xc5\x48\xdd\xad\xe4\x57\xe0\x85\x04\xe4\x70\xe3\xf6\x42\xf3\xb2\x55\xb4\x61\x73\xf9\xf1\xb7\x7c\xba\x36\x26\x05\x22\xc9\xc2\x6e\x52\x83\x68\x0a\x42\xac\x42\x5f\x3f\xf0\x32\x52\xb2\xef\xe4\x53\x4e\x80\x96\x8c\x69\xa3\x79\x0b\xc2\x3e\x29\xa3\x0e\xa9\x63\x67\xbf\xec\xb1\x98\x4d\x14\x84\x4b\xb9\x9b\xb5\x4d\x59\xa8\xc1\xa8\xee\xe2\x93\x70\x80\x1d\x34\x61\x7a\x4a\x8a\xdf\x27\x20\x91\xd8\x9c\x7c\x25\x16\x46\x60\x03\x63\xa6\x29\x4e\x2c\xce\xf8\x96\x30\xf9\xdb\xdd\x15\xa7\xbc\x59\x4f\x49\x12\x02\xa1\x4c\x04\xe1\x5b\x1e\xa2\x72\xb8\xbb\xc5\xb6\x66\xcb\xe5\xa2\x0b\xc7\x8d\xb0\x34\x40\xb7\xaa\x80\x17\xc9\x48\xe4\xea\xe2\x6d\x2b\x14\xc5\xbb\xea\x94\x6d\xa5\xa8\x82\xbc\x37\xa7\xc9\x01\x4c\xef\x22\x72\xe9\x00\xc4\x70\xcc\x48\x50\x7c\x3a\x93\xb0\xcc\xdc\xec\x1a\x5f\x15\x64\x9b\x91\x1b\xb7\xdc\xc3\x3c\x7c\xdd\x0f\x62\xc1\x90\x39\x40\x7b\xc9\x4f\xff\xc9\x5f\x78\x6a\x6e\xe0\xf2\xd3\x3b\x0b\xfa\xd8\x21\x1c\xb8\x50\x3e\x02\xfc\xd5\x98\xe8\x23\xbe\x7c\x1b\xe1\x7a\x75\xff\x62\x70\x19\x1d\x92\x1c\x37\x7b\xb9\xd4\x09\x92\xaa\x80\x1a\x51\x46\x07\x24\x05\x1c\x1d\x52\x2c\x85\x32\x7d\x63\xc4\xcf\x14\x8b\x1c\xc9\xb1\x46\x70\xa4\x66\x1d\x73\x54\xc4\x42\x19\x0a\x54\xf4\x2c\xf6\x31\x99\xa8\x45\x16\x47\xc5\x7e\x7d\xc4\xdf\x7f\xc1\x62\x29\xf0\x8a\x0a\x65\x51\xb1\xca\xaa\x03\xe6\x1c\xb8\x30\x74\xd4\xdf\x2a\xa0\x27\x1d\xa1\xa8\x5e\x50\xb6\xca\x1c\x51\x72\xc6\x37\xdd\xd7\x02\x81\xb7\x7e\x83\x36\x16\xd8\x3c\xc6\x6d\x65\xcd\x04\x59\xd0\x29\x84\x0f\xb9\x31\xa2\xb1\x4b\x34\x0e\x63\xd0\xcd\x04\x8d\xee\x4f\x75\xaa\x3f\xd5\x53\xbb\x7e\x22\x4c\xb5\xf3\x40\x22\x57\x67\xa0\x78\xb4\x09\xe4\x61\x04\x4f\x94\x4e\xa8\x35\x0c\x7a\x6a\x4f\x30\x13\x7a\x2b\x41\xd6\xc1\x28\x3e\xe8\x57\xa4\x4e\x3e\x9d\x78\x66\x62\xea\x29\xee\x3d\x82\xa5\xf8\x1e\xc1\x46\x7c\x93\x96\x3b\xc5\x65\x7e\x3a\x61\x1b\xd5\x88\x3c\x49\x0f\xaf\xdf\x1d\xdf\x6b\x94\x95\xcd\xa3\x70\x6a\x6a\xdb\xe4\x0e\xed\x96\x6c\x1b\xfa\x14\x24\x97\x88\x62\x20\x53\xb4\xff\x4b\x0c\x99\xc0\x93\x53\xcc\x88\x85\xdb\xe2\xb8\xbf\x78\x70\x6f\x21\x2d\xe2\x0b\x29\xb1\x3f\x7e\x36\xba\x47\x42\x53\x8d\x00\x31\xdd\xe1\x89\x7d\x16\xee\xd7\x63\x85\xf6\x9f\x87\x77\x40\x81\x2a\x9a\x9a\x46\x42\x37\xdb\xce\xc3\xf9\x72\xe0\xdd\xf0\xf1\x41\x80\x83\xc8\xf2\x55\x2a\xb2\x7e\x38\x8f\xa2\x79\x8f\xce\xf4\x91\x41\x80\x83\xc8\xf2\x55\xca\xde\xce\x56\xf1\x6c\xd6\xa3\xd3\x7e\x4c\x60\x81\x20\x82\x4c\xb9\x8a\xda\x34\xd8\xfa\xf1\xd0\x49\xd3\x47\x03\x01\x0e\xa2\xc9\x57\xa9\xc8\xa2\xdd\x6a\x19\xec\x07\x0d\xd1\x7f\x1c\xe0\xc1\x40\x3d\x62\x6b\x54\x34\x77\xab\xa9\x1f\xee\x2e\xde\x3f\x4f\xd9\xb6\x68\x2a\xe6\x61\x93\x50\xe1\xbc\x87\xf0\x27\x42\xd8\x59\x9f\x72\x69\x09\xa4\xdd\x90\x4c\x75\xd6\x51\x0d\xc9\x9e\x62\xa8\x75\x8f\xec\x13\xf1\x83\x1c\xfc\x18\x6b\xf6\x08\xb6\x4f\x4f\x49\x6c\x38\x68\xbc\x91\x76\x91\x51\x8a\xaa\xc6\xee\x93\x6e\x30\x1a\xe4\xab\xf2\x5f\x60\x12\x38\xa0\xdd\x29\x12\xe1\x9f\xe6\x73\xe9\x2b\xf1\x62\x20\x18\xe4\xbe\x2e\x4e\xea\x2c\xa9\xeb\x04\x5f\xaa\xde\xa5\x45\xad\xb4\x8c\xd4\x3d\xea\x13\xb9\xf1\x09\x68\xc4\xbe\x81\x7c\xa8\xa7\x74\xbc\xdf\xfb\x92\x2f\x19\xfb\x68\xb5\x5b\xf4\x6b\xc5\x74\xb7\x5c\x4c\x63\x01\x95\x03\x8e\xde\x2e\x40\xe1\x76\x2a\x82\xb2\xc2\xe8\x5f\x7c\xdf\xce\x67\x9d\x86\x92\x1a\xc5\xd4\x8f\x57\x28\xde\x2f\x05\xde\xb6\xbb\x78\xbf\x1f\xd6\xb1\x69\xb0\xf4\xef\xf6\x2c\x1e\x98\xb1\x68\x11\xcf\x11\x47\x0f\xe4\x6a\x36\x0f\x17\xab\x1e\x4a\x63\x22\x76\xfb\x3b\x34\x15\x3f\x0a\x45\xfb\x70\xb7\xeb\x19\xbb\x8b\x16\xf1\x74\x2b\xa0\x82\x79\xdb\x2f\xd1\x6e\x3b\x17\x41\x01\xf6\x16\x8b\x79\x30\x0a\x4d\x69\x4a\xf6\x61\x8c\xa4\xcf\xaf\x68\xbb\xdb\x8d\xdc\x45\xab\xd9\x6c\x16\xf2\x98\x60\xe6\xd0\x6c\xbb\xda\xae\x04\x48\x80\xb7\xbb\xd9\x74\x3e\x9d\x5d\xfe\xdc\x6f\x09\xbf\xa0\xc7\x7d\x15\x65\xa8\x76\xca\xaa\x38\x54\xa8\xae\xdd\x6d\x54\xb9\x75\x53\x25\x25\xaa\xcf\xfb\xaa\xc8\xce\x50\x5a\xef\x80\x24\xfb\x6b\x0a\xb0\xd6\x77\xfc\xcb\xe5\xcf\x6e\xf1\xa2\xe8\x5f\x10\xb7\xd7\x63\x7c\xc6\x6d\x75\xb7\x06\xe0\xb8\xee\x31\x89\x63\x94\xb3\xbe\x32\x90\x69\xb7\x2b\xb8\xfa\x09\x2a\x69\x0f\xcb\xc8\xe5\xcc\x62\xb6\x7a\x7c\x00\x90\x6a\x2c\x9f\x12\xec\x85\xd0\x71\x1f\x55\xee\xa1\x63\x01\xe5\xcd\x77\xb3\x79\x8c\x0e\x13\xe0\x38\xe2\xfc\xa3\x13\xce\xdf\x4f\x18\xbb\x2d\xfd\x3d\xf7\xdf\x2b\x5a\xaa\x6b\x96\x02\x0e\xe1\xef\x8f\x72\xde\x71\xb7\xf8\x06\x99\xbe\x79\x8e\x95\x69\x9a\x06\x8f\x46\x59\x23\xa8\x5c\x94\x27\x59\xd4\xa0\xf1\x6b\x07\x29\xe8\x26\x29\x34\xe1\x9d\xa0\x76\x88\x74\x9c\x24\xdf\x27\x79\xd2\xa0\x8d\x5b\x3c\xa1\xd1\xd5\x2d\x2e\x1e\xf6\xb1\x5e\xe8\xc3\xde\xcb\x3c\x39\x4c\x79\x76\xb7\x45\xfc\x78\x7e\x8e\x67\x8a\xc6\x03\x80\xff\x6a\x89\xec\x2e\xe2\xe1\x47\x37\xc2\xad\x99\xa7\x93\xd5\x6f\x0b\x0e\x0e\x20\x8c\x43\x3a\x58\x29\xf8\xb1\x7f\x0a\x57\xe1\xb6\xf3\x35\xe0\xe6\xfd\x9e\x44\x51\xcb\x6d\xd8\x59\xde\xcc\x01\x35\x72\x28\x51\x49\x97\x0f\x57\x13\x26\x35\x59\xbf\x05\x2c\xaf\x72\x84\xfa\x6b\x3e\xc9\xbe\xe8\x8d\xbc\x8d\xd5\x6e\x88\xa4\x82\x7d\xda\x39\xec\xcb\x0b\x9e\x12\xd6\x1c\x04\x56\x1c\x93\xf9\xaa\x83\xc1\x52\x47\x40\x85\xd7\x9e\xbc\x16\x60\x87\x78\xbc\x8c\xe5\x6b\x12\xdc\xe3\x23\x44\x2a\x52\xca\x69\xae\xe6\xc1\x64\x19\x54\x86\x45\x43\xb3\x13\xcf\x35\x04\x99\xb3\x57\x43\x80\x4d\xa4\x46\x0d\xc1\x73\x7c\x31\x81\x51\xdb\x8b\xce\xd4\xe0\x27\xaf\xce\xa2\x34\xbd\xbe\x1d\x6e\x66\x12\xbb\x0a\x09\x2b\xc4\x38\x42\x48\x50\x93\x7d\x7a\xaa\x8f\x52\x2b\xe1\x95\x4a\xfe\x98\x86\x1c\x64\x11\xf1\x3d\xe5\xc6\x00\x88\xe7\x29\x37\x00\xa0\x05\xb3\x8f\x7b\x70\x91\x8c\x8d\x2a\x0a\x72\x89\x54\x08\x26\xe4\x09\x72\x3b\xfc\x6a\x34\x6a\x9d\xd2\xe3\xb7\x9d\x93\x4a\xc2\x43\x40\x5d\x55\x4f\x6e\x09\xea\xb9\xa0\x48\x0c\x40\xdc\xda\xaf\x16\x38\x8e\x30\xa9\x19\xee\x6f\xc1\xe9\x89\x01\xc9\xc1\x81\xb8\x2f\xe5\x81\x9b\xfb\x7d\x4c\x4b\x44\x8c\x23\x51\x5c\x6c\x69\xa3\x8a\x4b\x01\xcc\x77\xad\x55\x2c\xcb\x98\x15\x08\xae\x56\x12\x6d\x23\xa3\x86\x74\xad\x95\xea\x81\x2b\xb5\xba\xc1\x34\xd7\x41\xf0\x5a\xa1\x12\xec\x6e\x86\xa6\xfb\xa9\x82\x49\x83\x4a\x30\x20\x06\x7d\xa0\xd4\x79\x7d\xa0\x71\x44\x11\x6b\x1f\x03\xe4\xa2\x7a\x1b\x55\x44\x10\xe0\x9c\x22\x50\x71\x0d\xe2\x57\xa3\xb9\x5a\x37\x4c\xed\x8c\xea\x41\x11\x28\x35\xa4\xaf\xd7\x2a\x09\x8f\xc4\x00\xc4\xa9\x8a\x5a\xe0\x38\xda\xaa\x66\xd8\xa0\x2d\x3c\x94\xe1\x0d\x49\xca\x03\xa7\x30\x7d\x7c\x57\x44\x4c\xa3\xb2\x5c\x9c\x75\xa3\x8a\xd1\x02\xec\x93\xf6\x2a\xb6\x21\xec\x4a\x24\x57\x2b\x8b\xa1\x99\x51\x57\x48\x7b\xa5\xaa\xd0\x6a\xad\xa6\x70\x28\xf4\x30\x9c\x9e\x28\x05\x4d\xe2\xde\x4a\x66\x0d\x6a\xc2\x01\xe9\xb5\xa4\xe7\x80\xd3\x92\x3e\xce\x8e\xb2\x2d\x8a\xdd\x0a\xd5\x65\x91\xd7\x1d\x2a\xd3\xf9\x18\x66\x8b\x3f\x5e\x07\x10\x22\xbd\x32\x5a\xe9\x2c\x9b\x78\x6a\x4e\x6e\xe2\x48\x25\xb8\xe7\x13\x19\x10\x17\x00\xe5\x09\x0e\x96\x03\x15\xc5\xf6\x9f\x68\xd7\x00\x15\xf7\x49\x8c\x0a\xe5\x0d\x04\xf1\xe6\x81\xfc\x66\x15\x49\xca\x4e\x36\xa3\xbe\xdc\x25\x37\x0c\xb6\x8f\xab\xf1\x69\x24\x26\x4f\xff\x2c\xf4\xee\xe6\xcb\x60\x36\x7d\x0f\x34\x0b\x16\xaa\x66\xf3\x85\x17\xce\xa1\x26\xb3\xed\xe3\x14\x6c\xb1\x04\xc1\x83\xed\x63\x00\x82\x93\x64\x34\xe4\x23\x20\x39\xbc\x88\x3d\x70\xee\x54\xd0\x78\x10\xc6\x74\xb8\xc3\xf7\x7d\x12\x6e\x19\x5e\xde\xed\xb6\xec\x3e\x7e\x0e\x66\x78\xc8\xcb\x9b\x53\x82\xc3\x85\x15\xfc\x07\x7f\x16\xaa\x47\xa4\x3f\x6b\x31\xe2\x5c\xce\x2f\x74\x26\xd1\x0f\x9a\x83\xee\x0a\x2d\xe0\xd7\x07\x7c\xf5\x4b\x74\x59\x11\x47\xa9\x5b\x94\x28\x3f\x4b\xd3\x00\xd7\x8d\xfa\xb4\x4f\x5a\x14\x1b\xae\xb3\xf4\xfb\xc6\xc0\x9f\x8f\xcf\xe3\xe2\xae\x89\x9f\x53\x98\x97\xed\x30\x1d\x6f\x1f\xc5\xc8\xa1\xfc\xc4\x49\x94\x16\x63\x52\x42\x1c\xb0\x26\x4c\x70\x45\xfb\xa2\xca\x1c\x6f\x5a\x3b\x28\xaa\x91\x5b\x9c\x9a\x8d\x3d\xa4\x5b\x70\x68\x0b\x0b\x8c\x4f\x85\x98\xe8\x59\x99\xa8\x89\x4b\x0d\x09\x85\x34\x6a\xd0\x77\xfe\xc4\x0d\xe7\xef\x3f\x6e\xd8\xd6\x40\xb5\xa6\xae\x97\x3c\x79\x2e\x48\x2d\x79\xa9\xb5\xaf\xa1\xea\xab\x48\xfa\x1f\x59\x6d\xa3\xf4\x06\xa5\x73\xdb\x41\x31\xfa\x92\xc7\x75\x74\x6a\x8a\x0b\xcf\x98\x6c\xe0\x89\x1d\xc3\x49\x04\xe8\x6b\x7b\x81\x5f\xb6\x7d\x33\x6a\xa3\xff\x75\x93\x3c\x00\xdf\x77\x76\x69\x52\xae\xc7\x27\x55\xf8\xb0\xa4\x54\xa7\x0b\x4e\x86\x1f\xa1\x33\x2c\xd2\xdc\xc6\xc4\xe3\xaa\x28\x9f\x6a\x4c\x66\x50\x7a\x00\xdf\x97\xf0\x63\x23\xc2\xbe\x3c\x29\x54\x77\x9a\x7e\x66\x2d\x35\xa9\xa7\x17\x3a\x5f\xf2\x7b\xd0\x33\x86\x9b\x59\xe4\x65\xb4\xfb\xb2\x26\x8f\x63\x3d\x0e\x15\xf4\xef\x5e\xf7\xd7\xf8\xe0\xa1\xbb\x45\xcd\x03\x42\x8c\x5a\x71\x6d\xf5\x6d\x86\x5b\x8a\xf3\xf1\x3d\x33\xf9\x7d\xbb\xfe\xeb\x00\x11\x2a\x94\xbb\xc3\x17\x5f\x39\x1c\x46\xa8\x88\x1f\x81\x39\xfa\xfc\xe9\x45\xe6\xa3\x69\xa0\x79\x1d\xbe\xd5\x51\x47\x79\xac\x1c\x71\x8c\x11\x03\x70\x83\xdd\x95\x28\x41\xa1\x31\xe6\x93\x57\x08\x03\x4c\xe4\xf7\x93\xe1\xea\x5f\x1f\xf8\x07\xda\x28\xaf\xfe\xf1\x6d\xea\x5d\x55\xa4\xe9\x36\xaa\xdc\x0c\x45\xf5\x49\xfd\x2a\xe7\x6a\xb5\x5a\x95\x2d\x5d\x10\xe6\x7e\xd9\xf6\x8e\x2d\xfe\x3d\x38\x20\x04\x9f\xe6\xa0\x1d\xb7\xe0\x30\xcf\x03\xf9\x1d\x1a\xba\xc6\x4c\xfd\xb2\x75\xd8\xf5\xa9\xce\x18\xd0\x69\x07\xaa\x4b\x25\x4f\xda\xa4\x2c\xfa\x3b\xd2\xc6\x6b\x8a\x22\x6d\x92\x12\xe8\xe4\x68\x0f\x97\xbe\xb0\xaf\xc1\xfe\xeb\x3e\xca\x92\xf4\x71\xdd\x39\x79\x29\x72\xeb\xc7\xba\xdb\x70\x90\x7f\xdc\x53\x32\xf9\x4b\x9a\xe4\x5f\x7e\x89\x76\xff\xc0\x25\xff\xab\xc8\x9b\xc9\xbb\x7f\xa0\x43\x81\x9c\xff\xfe\xdb\xbb\xc9\x7f\x16\xdb\xa2\x29\x26\xef\xfe\x37\x4a\xef\x51\xb7\x76\x39\x7f\x47\x27\xf4\x6e\xf2\xef\x55\x12\xa5\x93\x3a\xca\x6b\xb7\x46\x55\xb2\xa7\xbe\x33\xbd\x5f\x82\x97\x31\xd6\x79\x9e\x75\xce\x33\x6a\x1a\x54\xe1\xf3\xce\x9d\x42\x51\x28\x72\xd6\xba\x42\xd1\x17\xb2\x58\x8b\xef\x9d\x32\x1f\x59\x3b\xc5\x61\xff\x26\x1f\xc6\x41\x8f\x99\xf5\xc7\xc7\x82\xd1\x03\xc1\x65\xfc\xf9\x6b\xcc\xcd\x43\x51\xc5\x94\x1b\xb6\x44\xe0\x59\x3a\x1f\x4f\xa0\x70\xae\x4f\xdc\xd8\xed\xfe\x66\x1f\xf1\xa5\xa3\x27\xac\x34\xab\xb1\x62\x5b\xbb\x0d\x6a\x8e\xa8\x72\x51\x8a\x32\x94\x37\x6e\xd4\x34\xd1\xee\x88\xe2\xe1\x8e\x5d\x0f\x4a\xff\xc5\xb7\xe6\xfa\xd9\x39\xef\x76\x1c\x1b\x36\xdb\xd1\xb4\xb3\x68\xd6\xd8\x9d\x01\x6b\x92\xe7\xe3\xad\x26\x90\xa8\x02\xf6\xcc\xaf\xd3\xf3\xf1\x9e\x1b\xb9\x61\xd2\xd9\x0f\xf6\xa9\x30\x62\x4a\xe8\x1c\x2a\x5b\x87\x74\x41\x3e\x12\x87\xd7\x73\x8b\x8e\x74\x54\x64\x7e\xe9\x8b\x5f\xfd\xc6\xa8\xa3\xc2\xb1\x65\x2b\xa6\x0e\xd8\x5a\x48\xf4\xe5\x71\x58\x4c\x78\x87\xeb\xbf\xdf\xf0\xa7\x10\xf0\x98\xd9\x88\x88\x13\x13\xf9\xd8\x7a\xa5\xa0\x9a\xa2\x94\x59\xa6\xf7\x4d\x95\xfa\x64\x2b\x27\xb5\x7e\xa8\x68\xea\xe4\xf4\x14\x5d\xf2\x7b\x31\x09\x9f\x9d\xaf\x94\x12\x16\xad\xcc\x33\x79\x72\x4e\xa9\x4e\xd6\xd3\x4e\xa7\x22\x30\x55\x93\x3e\xf5\xee\xf2\x35\x0a\x25\xc9\x0a\x7f\x9b\x07\x24\x45\x68\x32\xcb\x12\x7e\x35\x60\x70\x0e\xa6\x65\xeb\xdc\x61\x5a\x9a\xeb\x2e\xa0\xab\xae\x38\xf2\x08\x77\x55\x5e\xfb\xe8\x90\xf7\x2b\xba\xaf\x7c\x15\xb8\xaf\x20\x2b\x14\x76\x5c\x2e\x5e\x59\x94\x38\xfe\xa2\x8a\x8d\x49\x1b\x8e\x85\xb8\xc0\x32\x02\xe9\xbc\x84\xd1\x5b\x2a\xdb\x3f\x16\xdf\x37\x5d\x7c\x6f\x66\xdb\x3b\xa8\x99\xcd\x1a\xdf\x83\xd2\x7f\xf1\x1a\xcf\x3d\x1c\x8d\x63\x18\xd6\x08\xe9\xb5\xee\xc9\x35\x2d\x7a\x1b\x04\xb0\x22\xa1\xe3\xea\xe8\x24\x1d\x2c\x36\x6f\x7e\xe9\x4c\xbd\x3c\x1b\x2b\xbc\xd7\xe1\x06\x81\x68\x8a\x03\xe1\x95\x6d\x39\x75\x30\x3e\x43\xf5\x74\x61\xca\x92\x19\xb9\xf1\x25\x6e\x7c\x88\x1b\x72\x9e\xc8\x82\x05\xe2\xdd\x88\x94\x89\x77\xc3\xa5\x54\xb1\x55\x10\x0c\x7d\x85\x7a\x10\x78\xd5\x88\x90\xc5\x47\x25\x20\x5a\x2b\x2c\x58\xec\x92\x73\x8d\x76\x58\x71\xc2\x2a\x23\xa7\x1b\x64\x1a\x31\xaa\xc1\xfa\x50\x4f\x51\x0e\x50\x90\x90\x5c\xce\x8c\x22\x88\x73\x1a\x74\xe8\x6c\x75\x03\x3b\x74\x22\x65\xea\xd0\x31\x84\xac\x55\x03\x9a\xe9\x26\x70\xd5\x70\x18\xa6\x0e\x3f\xd3\x25\xdb\xd1\x4d\x94\x6b\x54\xc3\x8a\x15\x46\x0d\x0d\x56\x83\xf3\x1c\x9f\xa2\x1b\x3a\x9b\xc9\x49\xe6\x3c\x6a\x82\xd2\x6a\xf0\x7e\x2c\x3e\xb9\xbb\xb4\xe5\xc2\x19\x8d\x55\xd2\xa4\xc8\x24\x24\x05\xb8\xde\x51\xea\xc6\x0d\xfa\xac\x1a\xc2\xbd\x92\xfd\x52\x39\x74\x78\x45\x27\xa9\xbf\x2e\xf6\x07\xfb\xeb\x12\x71\x7b\x8c\xd7\x4c\x04\xce\xf4\xc0\xac\x28\xb5\x81\x35\x6a\xa2\x85\x24\x46\xe1\x9a\x79\x60\xc5\x09\x25\xd6\xdf\x73\xd4\xd9\x48\x66\x5b\xf0\x94\x69\xa0\x5f\x1d\x18\xb9\x0c\xcc\xe8\x6c\x24\xbb\x47\x61\x4d\x24\x0d\x2d\xf7\x2e\xf8\x5d\xd9\x3a\xc1\x6c\xc4\x33\x84\x27\x98\xaf\xbc\x9a\x4c\xbd\x4b\x4d\x40\x7b\xdb\xfd\x67\xa3\xcf\xc2\x37\xb5\x4d\xc2\x37\x65\x73\xf0\xf1\xd3\x0e\xba\xd9\xdf\x43\x0c\x5f\xb0\x68\x77\x57\xb4\xbb\x03\x84\x28\x6f\xcd\x24\x86\x66\xed\x57\xee\xa9\x06\x6a\xaa\xed\x67\xa7\x5e\x22\xaf\x6a\x60\x9f\x26\x8a\x2b\x4e\x35\x4a\xe5\x2f\x02\x63\x1d\xdd\xa8\xaa\xbe\x07\xe2\xb3\x0c\xd2\x17\xed\xb1\xb1\xfe\xd6\x02\xd9\xb8\x8c\xef\xd9\xf4\x81\x5c\xe9\xb3\xa8\x3b\x8d\x49\x9e\x2a\x06\xad\xdd\x57\xeb\x05\xfd\xcc\x9b\xe4\x16\x1f\xae\x05\x60\xdd\xb7\x6b\x35\xde\xaf\x03\x9a\x18\xd9\x9a\x68\x19\x61\x37\x64\xfb\x68\x87\xdc\xfb\xa4\x4e\xb6\x49\x9a\x34\x8f\xfd\x97\x5f\x4d\x55\xdf\xba\x44\x55\x5d\x22\x7c\x6c\xa8\x1b\x19\x1c\x9a\x90\x8a\x2e\x97\x3f\xd7\xa7\xb2\x2c\xaa\xa6\x76\xbe\xfb\x4e\xf3\x29\x7b\x1a\x13\x03\xf7\xf1\xa3\x53\x54\xce\x77\x5a\x88\x3f\x86\xf9\xf6\x86\x99\x1f\x11\x37\xc7\xf7\x21\xf8\xb2\xb2\x42\xf7\x42\x59\x7f\xec\xec\xd9\x3e\xfc\xd9\xf2\xa1\xf2\xaa\xae\x32\x2f\x18\xbb\x50\x44\xf6\x8c\x32\x41\xa1\x88\x6c\x22\x6d\xe6\xc3\x46\x57\x79\xa1\x02\x84\xb0\x4f\x00\x66\x0d\x14\x3b\x03\xab\x23\x3a\xd4\x2b\xe8\xaa\x3a\x6f\x20\xeb\x9a\xe8\x8e\x00\xaf\x62\x4f\xfe\x18\xd7\x37\x18\xd7\x11\x7d\xe7\x90\x54\x45\x2a\xce\xdd\xbe\x58\x37\x7d\xc7\x73\x2b\xdf\xea\x51\x02\xa1\x5c\x3c\x22\x20\xe2\x67\xdb\x28\x60\xa9\xef\x34\x7f\xaf\xff\x52\xc0\x1d\x9a\x84\x86\x82\xc9\xfa\x0d\x54\xd2\x37\xb8\xc0\xd1\x52\xb6\xc4\x95\x76\xa9\xaf\x86\x73\x4c\x1b\xf6\x4b\x2e\xac\x1c\x4c\xca\x5d\x99\x53\xba\xdd\x51\x55\xe3\x07\x9d\x14\xac\x92\xc7\x9e\x34\x89\x46\x43\xe6\xa0\x03\xfe\xcd\x9c\x01\x65\x6f\xfe\xe7\x85\x5b\xa1\x12\x45\x8d\x43\x84\xef\x88\xda\x20\x5e\xf3\xf7\xfd\xf7\x0e\x39\x12\xac\xaa\xb9\xe8\x58\xfe\xaa\xf7\xa9\xcc\x6f\x51\x39\xfb\x24\x4d\x7f\xfc\xf0\x3e\x9c\xee\xf7\xfb\x0f\xfc\x83\x56\x77\xce\x1d\xfb\x56\x15\x79\x4a\xca\x4f\xdd\x99\x43\xfe\x13\x78\x73\xb7\xfb\x6f\x48\xfe\xeb\xd0\x7f\x5d\x5a\xfe\x1b\xf0\xc2\x94\x7a\xdc\x6e\xac\xa3\x81\x37\xef\xba\xda\xfd\x13\x90\xae\x39\x4c\x37\x9d\xbe\x7c\xe6\xe2\xff\x68\xbb\x9a\xe4\x71\xb2\x8b\x9a\xa2\xaa\x01\xd3\x27\x1c\xda\xc3\xfb\x76\xf1\x33\xda\xfc\x85\x2c\xe2\x0b\x19\x2d\x38\x6d\x40\x9f\x8d\x9c\xff\x32\xdd\xfd\x2d\x64\x5a\x05\x25\xe7\xa4\xc9\x93\xce\xb5\xf9\xd2\xb9\x36\x9f\x3b\xd7\x46\xff\x62\x8f\x1c\x8d\x66\x60\x3a\x06\x43\x2a\xb1\xa0\x3f\x0c\x41\x2c\x5e\x37\x50\x79\x83\x8f\x4e\x95\xad\xfa\x30\xb9\x6b\x78\x44\x0d\xe8\xb5\x21\x94\xe8\xb2\x0a\x63\x4a\xa3\x3c\xdc\x4f\xe0\xa2\x89\x6a\xca\x24\xc6\x20\x13\xe6\x3e\xda\xbc\x00\xed\x7e\x67\xa1\xb8\x4d\x3e\xda\x90\xa8\xc4\x09\x27\x54\xb3\xaa\x53\xae\x3e\x81\xdc\xc0\x6a\x57\x38\x7e\xa0\xde\xb0\xd7\x1c\x42\xe6\x13\xbd\xcb\x36\xd4\x2d\xbe\x17\x8f\xb8\x06\x7d\xea\xc9\xb3\x22\x25\xe5\xf8\xc2\x6f\xdf\xa2\x29\x4a\x11\xb8\x29\x4a\x19\x2e\x4b\xe2\x38\x95\xf0\x92\x52\x19\x9a\x7e\xc7\x10\xb9\xc0\xa5\x00\x0f\x5d\x77\xe0\x26\x4c\x95\xa2\x1d\xd4\x01\x5a\xce\xb6\xd8\x1e\xdc\x7d\x14\xf3\x49\x94\x84\xa0\xfc\xf6\x60\xcc\x26\xc9\x60\x8c\x18\xf8\x31\x17\xe7\x58\xa4\xcf\x23\x29\xb0\x66\x4a\x27\x29\xd2\x15\xaf\x2c\x33\x45\xfa\x44\x92\x02\x5d\x6d\x3e\x49\x91\x28\x77\x0b\xb6\xff\x5b\x9f\x49\x52\x20\x67\x4a\x28\x29\x52\x14\x2f\x56\x32\x45\xfa\x54\x92\x02\x5d\x43\x46\x49\x91\xac\x70\x47\x6f\x2c\xd1\xe7\x92\x94\x64\x4b\x1e\x2b\x92\xc1\x49\x4a\x16\x59\xbc\x18\x9e\x97\x30\x29\x52\xd1\x0d\xfc\x20\x08\x42\x8e\x2e\x09\xc0\xfa\xe7\xfe\xb6\x10\x50\xd9\x14\xe5\x00\x40\xb2\x0b\x00\x40\x24\x38\xee\x0b\xc9\x0e\x00\x40\xfa\x81\xcb\x17\x13\x0d\x00\xa0\x38\x8c\x3e\x00\x12\x9b\xcd\x82\xe1\xbe\x21\xf1\xbd\xbc\xfe\x74\x11\xad\xd5\xbe\x45\x61\x97\x26\xa5\xc7\x44\xf6\xda\x5f\x9f\xae\xbc\xc7\x67\x7e\xdf\xc2\x3a\xb5\x4a\x8f\x12\x7f\x09\xfb\xda\x84\xed\x3d\xb2\x5d\x52\xed\x52\x24\x88\x77\xde\xb9\xfe\x3d\x84\x0f\x3c\x35\x91\xa2\xa8\xda\x27\xed\x55\x8f\x0d\xc4\x6e\xe7\x44\x71\x1f\x41\xd8\x81\x8e\x5d\xb2\x42\x0b\x5b\x21\x08\x84\xbe\x4d\x0a\xad\xec\x3c\x38\x0f\x07\x00\x34\xd1\x36\x1d\x29\xe2\xbf\x00\x00\x77\x87\xd2\x94\x87\xc2\x45\x3c\x68\xe7\xb8\xbd\xfe\xab\xfc\x8c\x54\x40\x06\x7a\xe1\x68\xf9\x60\x10\x28\xd8\x61\x20\x60\x54\x20\x0a\xcd\x19\xfc\xd8\xad\x33\x93\x42\xd4\x99\x8d\x4e\x0c\x50\xd6\x6a\x51\x67\x66\xcd\xa8\x33\xb3\x72\xf4\x30\x76\xfa\x51\x67\x6f\xa8\x22\xa3\x90\x6e\x50\x4b\x00\x35\x59\x2e\xee\xa8\x9a\x64\x46\xbb\x91\x59\x99\x8e\xec\x6a\xeb\x91\x59\x18\x90\xcc\xc2\x86\x64\x57\x99\x91\xec\x2d\x2d\x49\x16\x7f\x5b\x6a\xd2\x5f\xb7\x89\xdd\xf4\x60\x52\x93\xf4\x60\xa3\x26\x03\x94\xb5\x9a\xa4\x07\xb3\x9a\xa4\x07\xb3\x9a\xf4\x30\x76\x6a\x92\x1e\xde\x50\x4d\x46\x21\x7d\x1b\x6a\x12\xe0\x43\xee\x58\x4f\xda\xd4\xa4\x27\x6d\x6a\xa3\x27\x03\x94\xb5\x9e\xb4\xa9\x59\x4f\xda\xd4\xac\x27\x3d\x8c\x9d\x9e\xb4\xe9\x1b\xea\xc9\x28\xa4\x5b\xd4\x13\x8f\xe4\x91\x4c\xaa\xba\x39\xf3\x57\xbc\xe3\x24\x8f\x52\xfa\xa8\xfa\x98\x5b\x81\xec\x9e\xdc\x60\x8c\x39\x0e\x25\xfd\x0f\x8a\x33\x8d\xb4\x28\x43\x01\xa5\x84\xb1\x47\xd8\xe3\x3b\xe5\xf8\x6f\x14\x6b\x90\x06\x02\x52\x5f\x44\xea\x6f\x86\xcc\x1f\xb8\xb4\x2a\x1e\xce\xc0\xcd\xf6\x63\x51\x25\xbf\x15\x79\x13\x31\x8a\xa4\xbd\xe5\x0e\x80\x09\xf7\xd7\xab\xe2\x81\x05\x92\xaf\xbd\xf3\x00\xba\x4a\xca\x3b\xb9\x11\x7f\xd6\x5c\xcc\x7f\x36\xe6\x09\x29\x3d\xff\x12\x8c\xa1\x7e\x1c\x01\xb7\x42\x24\x22\xf0\x75\x23\x41\xb1\x58\x0d\x85\x0b\x00\x83\x43\x02\x00\xda\x00\x71\x43\xa4\xeb\x9f\xf5\x50\x59\xf7\x8e\xa7\x69\x33\x66\xe6\x3e\xaa\xe0\x68\x37\x1f\xaa\xa8\x3c\x73\xec\xe0\xfb\x2b\xdd\xff\x40\xf4\xa1\x4a\x55\x05\xa5\x40\x1e\x14\x02\x68\x90\x0a\x25\x15\xa9\x5a\x5d\xc5\xf4\x45\x1a\x30\x9e\x3b\x9d\x6c\x75\x40\x26\x80\x8b\x27\x7c\xb3\x21\x59\xb1\xcf\xd2\x57\x21\x5c\x0c\x68\x02\x78\xed\x5d\x02\xe6\x3e\x16\x89\xb5\x36\x28\x64\x3e\x51\x1e\x9f\xa1\xbb\xfb\xb6\x3c\x0a\xa0\xe2\x7d\x7e\x13\x7f\x1c\x88\xcc\x1d\xf9\x14\x70\x56\x7c\x5c\xb3\xe0\x51\x06\x04\x3e\xb8\x69\x98\x14\x01\x64\x16\x69\x0e\x8a\xb3\x2a\xed\x85\x05\x93\x5c\x32\x0b\x25\xaf\x32\x3e\x4b\x3c\x32\xcf\x11\x0e\x8e\x9d\xf5\xfc\x10\x20\x25\x3b\x71\x52\x37\x55\xb2\x3d\x35\xc8\xc8\x91\x88\xa9\xff\xd8\x81\x4f\x7d\x00\x33\x85\xb9\xd8\x07\x48\x0f\x4e\x40\x0f\xf1\x09\xe3\x31\xb5\xe7\xb9\x13\xe7\x07\xc1\x09\x4f\x10\x09\xb3\x62\x72\x40\x38\xf4\x6d\x79\x9e\x80\x59\xc1\x7e\x39\x33\x70\xa6\x9e\x12\x0a\x24\xba\xc6\x3c\x63\xc3\xb7\x3a\x99\x35\xf9\x73\x1d\xc8\x1c\x04\xc6\xb3\x07\x40\xe8\x11\x88\xda\x56\xa1\x66\x77\x04\xf5\x0d\xd7\x18\x18\x04\xa0\x44\x75\x13\x01\xb4\xcd\x7b\xee\xe0\x75\x83\xab\x33\x68\x3b\xde\x24\x80\x2b\x83\x19\x8b\xc8\x05\xab\xf5\x40\x6b\x85\x5e\x8f\x1c\x40\xba\xad\xb3\xfb\x3c\x75\x41\xbf\xf9\xe6\x6a\xf5\x1d\xc9\x2b\x54\x58\x6d\xd4\x79\xfa\xa2\x49\xe7\x5b\x1b\xad\xf5\xc8\x87\x6c\xb2\xad\x50\x89\xfc\x08\xe6\x1a\xc2\xa1\x36\xd6\x23\x37\xa0\xc5\xb6\x41\x26\xeb\x28\x3f\x87\x04\x1c\xea\x19\xc2\xaa\x28\x3c\x4b\x94\x48\x7a\x1e\x6a\x94\xee\xdd\xe8\xd4\x14\x02\xf5\xae\x1c\xdf\x1d\x87\xe8\x92\xa7\x24\xf0\xf4\x04\x40\x0e\x55\x12\xe3\xcd\x0c\x08\xa1\x44\xcf\x71\x04\x4d\x5b\xdc\x46\x3f\x67\x19\xc6\xe0\x49\xab\xc4\xc1\x51\x97\xa7\xeb\xd8\x4e\x31\x57\x19\xca\xd0\x64\x55\xb4\xe7\xa8\x82\xd3\x14\x37\x54\xcf\x51\x86\x2c\x08\x24\x8c\x85\x62\x22\x83\x44\x38\xde\xa4\x95\x88\x69\xa8\x5b\x63\x18\xfe\x94\x0b\x8d\x02\x89\xa0\x0f\xd0\x14\xc1\x2d\x35\xf3\x83\x53\x07\x08\x4a\x10\x8f\x6a\x16\xc1\x74\x34\x9f\xb3\x88\x86\x65\x2f\x12\x4d\xaa\xb3\x67\x0f\x28\xd5\xd9\xcb\xc4\x94\xea\xec\x9b\x0e\x2b\xd5\xd9\xef\x24\xb2\x44\xc6\xe1\xf7\x1b\x5c\x1a\x06\xea\x77\x1f\x5f\xaa\xb3\x57\x08\x31\xe1\x4f\xf1\xaf\x15\x65\xa2\x3d\xba\x9d\x40\x53\xf6\xcd\xc4\x9a\xea\xec\xc6\xc3\x4d\xdd\xbc\xbc\xfd\x88\x53\x9d\x7d\x93\x41\xa7\x3a\xbb\xb1\xb8\x53\x76\xe3\xa1\x27\x60\xba\xdc\x42\xf4\x09\x9e\x24\xb7\x11\x80\xea\xa6\xc6\x37\x10\x83\xca\x6e\x3f\x0c\x95\xdd\x48\x24\x4a\x98\x04\xaf\x1f\x8c\x92\xd5\xfd\xd5\xe3\x51\x80\xc1\x7f\xeb\x90\x94\x6c\xcc\xdf\x3e\x2a\x95\xbd\x7d\x60\xaa\x13\xcb\xed\xc5\xa6\xb2\x37\x0e\x4f\x81\x73\xf8\x35\x22\x54\xaa\xb9\x7b\x23\x41\x2a\x68\xb5\x7a\xed\x38\x55\x76\x9b\xa1\x2a\xcd\x99\x5a\x4c\x3e\x8b\x5f\x24\x56\x95\xc5\xcf\x1e\xab\xca\xe2\x97\x89\x55\x65\xf1\x37\x1d\xab\xca\xe2\xdf\x49\xac\x8a\x8c\xc3\xef\x37\x56\x35\x0c\xd4\xef\x3e\x56\x95\xc5\xaf\x10\xab\xc2\xf7\x01\x5e\x2b\x56\x45\x7b\x74\x33\xb1\xaa\x2c\xfe\x66\x62\x55\x59\x7c\xe3\xb1\xaa\x6e\x5e\xde\x7e\xac\x2a\x8b\xbf\xc9\x58\x55\x16\xdf\x56\xac\x0a\x9c\x38\xb7\x14\xab\x02\xa6\xcb\x2d\xc4\xaa\xe0\x49\x72\x1b\xb1\xaa\x6e\x6a\xdc\x7e\xac\x0a\x6b\xde\x6d\xc7\xaa\xa4\xc9\xf1\x56\xb1\x2a\x61\x12\xbc\x7e\xac\x4a\x56\xf7\x57\x8f\x55\x01\x06\xff\xad\x63\x55\xb2\x31\x7f\xf3\x58\x15\x30\xab\x5e\x3d\x56\xd5\x89\xe5\xe6\x62\x55\x8a\xb9\xfc\x7a\xb1\x2a\x70\x0e\xbf\x46\xac\x4a\x35\x77\x6f\x24\x56\x05\xad\x56\xaf\x1c\xab\x52\x4e\x9a\xdb\x8b\x55\xf5\x17\x7b\xc9\x84\x3d\xbc\xcc\x2d\xbd\xc3\xb3\xc7\xaa\xd2\xc3\xcb\xc4\xaa\xd2\xc3\x37\x1d\xab\x4a\x0f\xbf\x93\x58\x15\x19\x87\xdf\x6f\xac\x6a\x18\xa8\xdf\x7d\xac\x2a\x3d\xbc\x42\xac\x0a\x27\x25\x78\xad\x58\x15\xed\xd1\xcd\xc4\xaa\xd2\xc3\x37\x13\xab\x4a\x0f\x37\x1e\xab\xea\xe6\xe5\xed\xc7\xaa\xd2\xc3\x37\x19\xab\x4a\x0f\xb7\x15\xab\x02\x27\xce\x2d\xc5\xaa\x80\xe9\x72\x0b\xb1\x2a\x78\x92\xdc\x46\xac\xaa\x9b\x1a\xb7\x1f\xab\xc2\x9a\x77\xdb\xb1\x2a\x69\x72\xbc\x55\xac\x4a\x98\x04\xaf\x1f\xab\x92\xd5\xfd\xd5\x63\x55\x80\xc1\x7f\xeb\x58\x95\x6c\xcc\xdf\x3c\x56\x05\xcc\xaa\x57\x8f\x55\x75\x62\xb9\xb9\x58\x95\x62\x2e\xbf\x5e\xac\x0a\x9c\xc3\xaf\x11\xab\x52\xcd\xdd\x1b\x89\x55\x41\xab\xd5\x2b\xc7\xaa\x94\x93\xe6\xf6\x62\x55\x43\x76\x31\x4c\xbf\x4d\x5f\x24\x58\xd5\xa6\xcf\x1e\xac\x6a\xd3\x97\x09\x56\xb5\xe9\x37\x1d\xac\x6a\xd3\xdf\x49\xb0\x8a\x8c\xc3\xef\x37\x58\x35\x0c\xd4\xef\x3e\x58\xd5\xa6\xaf\x10\xac\xc2\x99\x11\x5f\x2b\x58\x45\x7b\x74\x33\xc1\xaa\x36\xfd\x66\x82\x55\x6d\x7a\xe3\xc1\xaa\x6e\x5e\xde\x7e\xb0\xaa\x4d\xbf\xc9\x60\x55\x9b\xde\x56\xb0\x0a\x9c\x38\xb7\x14\xac\x02\xa6\xcb\x2d\x04\xab\xe0\x49\x72\x1b\xc1\xaa\x6e\x6a\xdc\x7e\xb0\x0a\x6b\xde\x6d\x07\xab\xa4\xc9\xf1\x56\xc1\x2a\x61\x12\xbc\x7e\xb0\x4a\x56\xf7\x57\x0f\x56\x01\x06\xff\xad\x83\x55\xb2\x31\x7f\xf3\x60\x15\x30\xab\x5e\x3d\x58\xd5\x89\xe5\xe6\x82\x55\x8a\xb9\xfc\x7a\xc1\x2a\x70\x0e\xbf\x46\xb0\x4a\x35\x77\x6f\x24\x58\x05\xad\x56\xaf\x1c\xac\x52\x4e\x9a\xb7\x0e\x56\x79\xfb\xb4\x88\x1a\xf2\x62\x10\xfe\xb9\xee\x7e\xf2\xbb\xb1\x0e\x80\xbc\x7a\x44\x20\xf0\x6f\x19\x04\x67\xcd\x27\x10\x42\xce\x7c\x5d\x56\xac\xae\x65\x9d\x99\x19\xa8\x33\x1b\x1e\xfa\x27\x63\x40\x36\xb4\x37\x1e\xbb\xd6\x59\x6c\xe6\x23\x8b\x6d\xf8\xe8\xdf\x24\xb1\xe5\x63\x3c\xcd\x86\x47\xe3\x60\xe6\x23\x3d\xd8\xf0\xd1\x3f\x7a\x61\xcb\x07\x13\xa9\xec\x9a\xb7\xa9\x99\x91\x36\xb5\x61\xa4\x7f\x55\x01\x66\xc4\xdb\x27\x2d\x7d\xa4\x6b\x78\x11\x11\x17\xd1\xf7\x95\xfb\xa7\x46\xc5\xe7\x45\xfd\xa9\xdf\xb7\xa5\xcf\x68\x09\xcd\x85\x37\x4a\x15\x18\xea\x26\xd9\x7d\x79\xe4\xc9\xf7\xd3\x94\xd4\x6d\x86\x72\xfa\x37\xe1\x4b\x40\x53\xb9\x45\x9e\x3e\x02\x8f\x3a\x52\xe1\x8e\xef\x73\x06\xe3\x73\x8d\xc3\x3b\xa3\x6b\xb7\x2b\x2d\xee\x51\xb5\x4f\x8b\x87\xfe\x41\xfc\x5d\x9a\x94\xeb\x0a\xed\x1a\xf2\x46\xf7\xc4\xff\xb8\xd9\x0e\xd1\x54\x4a\xd1\xc5\xaf\xbf\x45\xdb\x14\xad\xc9\xfb\x93\x13\xa0\x06\xff\x3a\x33\xfd\x88\x9a\x64\x47\x39\xc3\x2f\x89\x52\xd6\xe8\xab\xa2\x98\x23\x7f\x64\x07\x3f\xd5\x9f\x22\xc2\x4f\x07\x73\xf1\x1e\xdc\x70\x7e\xa6\x4f\x10\xcf\xdf\xb3\x63\xfe\xe0\xce\x7d\x5a\x33\xf7\x85\x9a\x65\xdf\x66\x29\xb6\x09\xfc\xbe\x51\xe0\xf3\xad\x8e\x1d\xa5\xfe\x85\xe3\xb9\x50\x35\xf7\xfb\xaa\xb9\xd8\x6a\x39\xb4\x5a\x8a\xad\x3a\x62\xc3\xcb\x9e\x7c\xbb\x8c\xb0\x32\xbe\xac\x2a\x01\x1c\x07\x00\x15\x0a\xb7\xab\x26\x32\x74\xb8\xe7\xea\xb2\x66\xa8\x92\x9f\xd1\xcb\xaa\xb1\x12\x78\x3c\x2f\xdb\x8e\xd5\xd0\x8b\x79\x59\x3a\xd6\xcb\x0f\xe5\x65\xad\x06\xf9\x46\xdd\xec\x51\xc9\xf0\x46\xc7\x8b\x1b\xf4\x12\x20\x2f\xca\x39\xe4\x1f\x41\x16\x01\x8b\x1a\x80\xa8\x46\x08\xc2\x33\x00\xb3\x1d\x61\x28\x27\x00\x50\x3a\x02\xe1\x3e\x02\x20\xad\x89\xd6\xc6\x80\xe0\x51\xdf\x9d\x8d\x91\x49\x37\x1c\x64\x46\x44\x06\x48\x2c\xe4\x48\x00\x02\x0b\x85\x4e\x00\xf2\x0a\x45\x79\x01\xe2\x0a\x79\x71\x01\xd2\xd2\x13\xda\xe8\x9b\x3f\x6a\x3b\xb2\x31\xf1\xe7\x4e\x7b\x49\x05\x9d\xa0\x02\x59\x4e\x53\x16\x7d\x20\x8b\x69\xca\x73\x1f\xc8\x52\x9a\x0a\x52\x0a\x64\x21\x4d\x39\x21\x05\xb2\x8c\xb4\x54\x36\xda\xc6\x8f\xba\x2e\x6c\x0c\xac\xb9\xb3\x41\x3e\x44\x95\x02\x48\x97\x66\x1c\x01\x48\x99\x66\x02\xff\x90\x36\xcd\x44\x39\x41\xea\x34\xe3\x25\x05\xe9\x93\x81\xd6\xc6\x80\xe0\x51\xdf\x9d\x8d\x91\x49\x77\xde\xcb\x6c\xda\x49\x6c\x2a\xcb\x6b\xce\x12\x98\xca\xd2\x9a\xf3\x3d\x98\xca\xb2\x9a\x0b\xb2\x9a\xca\x92\x9a\x73\x92\x9a\xca\x72\xd2\x52\xd9\x68\x1b\x3f\xea\xba\xb0\xd1\xb3\x56\xba\xfe\x79\xf0\x59\xf8\x45\xad\x6c\xc6\x3a\x79\x55\x2b\x2b\xa6\x16\x58\xd6\xca\x2d\x53\x0f\xad\x25\x65\xca\x00\xc8\x2b\x54\xd9\xea\xf0\x6f\x34\x0d\x1f\xd5\x6c\x6f\xb4\x0c\xb9\xc1\x20\x0a\xe5\xea\x56\x36\x23\x94\x62\x79\x2b\x2b\x06\x44\xb5\xbe\x95\x5b\x06\x48\xb9\x76\x94\x29\x03\xa5\x58\xa0\xca\xd6\x48\x6e\x63\x42\xf1\x68\xe8\xd4\xc6\xcc\xa9\x1b\x8e\xc2\x83\x97\xb9\xb2\x19\x61\xe0\x75\xae\xac\x18\x08\xc5\x42\x57\x6e\x19\x18\xd5\x4a\x52\xa6\x0c\x10\xbc\x56\x95\xad\x89\xd6\xc6\x80\xe0\x51\xdf\x9d\x8d\x91\x49\x77\x3a\x88\x0c\x5c\xef\xca\x66\x84\x00\x17\xbc\xb2\x62\x00\xe0\x15\xaf\xdc\x32\x20\x8a\x75\xa5\x4c\x19\x18\x70\xd9\x2a\x5b\x03\xa1\x8d\xbe\xf9\xa3\xb6\x23\x1b\x13\x7f\xee\x6c\x14\x94\x6a\xe1\x2b\x9b\x11\x4a\xb1\xf2\x95\x15\x03\xa2\x5a\xfa\xca\x2d\x03\xa4\x5c\x56\xca\x94\x81\x52\xac\x5d\x65\x6b\x24\xb7\x31\xa1\x78\x34\x74\x6a\x63\xe6\xd4\x9d\x0f\xc2\x03\x57\xc0\xb2\x19\x21\xc0\x25\xb0\xac\x18\x00\x78\x0d\x2c\xb7\x0c\x88\x6a\xa5\x49\x19\x18\x70\x21\x2b\x5b\x03\xa1\x8d\xbe\xf9\xa3\xb6\x23\x1b\x03\x7f\x34\x05\x1d\x75\x16\xc4\x90\x70\xd6\xb0\xd5\x18\xbd\x04\x52\x71\x20\xd5\xb0\xf1\x16\xbc\x05\x16\x88\xf2\x22\x41\xa5\x1c\x14\xee\xae\x04\xd3\x1a\xc9\x6d\xb4\xed\x1f\x0d\x3d\xda\x68\x79\x54\x87\xff\x32\xb7\xd6\xee\x94\x99\x5a\x70\xb3\xcc\xd6\xc3\xfb\x65\x16\x42\xb1\x65\x66\x41\xc0\x5d\xb3\x96\x8a\x76\xe3\xac\xe1\x5f\xbf\x77\xae\x2d\xb7\xcf\x0c\x9c\x7a\x07\xcd\x02\x69\x36\xd1\x2c\x98\x6e\x1f\xcd\xc2\xa9\xb7\xd2\x66\xa2\xe6\xdd\xb4\xa9\x77\x16\x1b\xea\xda\x6a\x4f\xcd\x40\x29\xb7\xd5\x2c\x8c\x7a\x67\xcd\x42\x69\x36\xd7\x2c\x98\x72\x7f\x6d\xa4\x68\xdc\x62\x1b\xfa\x65\xde\x65\xd7\x16\x1b\x6d\x06\x46\xb5\xd7\x66\x41\x94\xdb\x6d\x16\x48\xbd\xe3\x66\xa1\x54\x9b\x6e\x13\x39\xd3\xbe\x5b\xdf\x23\xe3\xd6\xbb\xb6\xdc\x7d\x33\x70\xea\x0d\x38\x0b\xa4\xd9\x83\xb3\x60\xba\x6d\x38\x0b\xa7\xde\x89\x9b\x89\x9a\x37\xe3\xa6\xde\x59\xec\xc7\x6b\x8b\x2d\x39\x03\xa3\xda\x95\xb3\x20\xca\x8d\x39\x0b\xa4\xde\x9b\xb3\x50\xaa\xed\xb9\x89\x9c\x69\x87\xae\xef\x91\x71\x93\x8e\xd7\x1c\xf5\x3e\x9d\xad\x06\xb7\xea\x1c\x00\xbc\x5b\xe7\x40\x14\x1b\x76\x0e\x06\xdc\xb3\xeb\x09\xe9\xb7\xed\xba\x5e\x18\x76\xee\x78\x51\xb1\xd9\xbc\xb3\x80\xea\xfd\x3b\x07\xa5\xd9\xc2\x73\x70\xba\x5d\x3c\x07\xa8\xde\xc8\x5b\xd0\xb5\xd8\xcb\x1b\xfb\x68\xb3\x9d\xc7\xab\x8c\x79\x47\xcf\x82\x29\x37\xf5\x1c\x90\x7a\x5f\xcf\x81\x69\xb6\xf6\x1c\x9c\x72\x77\x6f\x26\x6a\xde\xe0\x9b\x7a\x67\xb1\xc7\xc7\xcb\x8e\x69\x9b\xcf\x02\xa9\x76\xfa\x1c\x8c\x72\xb3\xcf\x41\xa9\xf7\xfb\x1c\x98\x6a\xcb\x6f\xa4\x68\xdc\xf5\x1b\xfa\x65\xde\xf8\xe3\xf5\xc6\x66\xef\xcf\x02\xaa\xb7\xff\x1c\x94\x26\x02\xc0\xc1\xe9\x82\x00\x1c\xa0\x3a\x0e\x60\x41\xd7\x22\x14\x60\xec\xa3\x4d\x34\x00\x2f\x44\xa6\x80\x00\x0b\xa4\x8a\x09\x70\x30\xca\xb0\x00\x07\xa5\x8e\x0c\x70\x60\xaa\xe0\x80\x91\xa2\x31\x3e\x60\xe8\x97\x39\x44\x50\x1b\xa3\x04\x3c\x84\x2a\x50\x20\x40\x29\x63\x05\x02\x9c\x3a\x5c\x20\x00\xaa\x22\x06\x16\x74\x4d\x41\x03\x63\x07\xf5\x71\x03\xcd\x79\x9d\xcc\xcd\x62\x5d\xe0\x80\xa9\x05\x03\x07\x6c\x3d\x1c\x38\x60\x21\x14\x81\x03\x16\x04\x0c\x1c\x68\xa9\x68\x03\x07\x1a\xfe\xf5\x81\x83\x2c\xb6\x0b\x1c\x30\x70\xea\xc0\x01\x0b\xa4\x09\x1c\xb0\x60\xba\xc0\x01\x0b\xa7\x0e\x1c\x98\x89\x9a\x03\x07\xa6\xde\x59\x04\x0e\xb2\xd8\x26\x70\xc0\x40\x29\x03\x07\x2c\x8c\x3a\x70\xc0\x42\x69\x02\x07\x2c\x98\x32\x70\x60\xa4\x68\x0c\x1c\x18\xfa\x65\x0e\x1c\x64\xb1\x39\x70\xc0\xc0\xa8\x02\x07\x2c\x88\x32\x70\xc0\x02\xa9\x03\x07\x2c\x94\x2a\x70\x60\x22\x67\x0a\x1c\xe8\x7b\x64\x0c\x1c\x64\xb1\x5d\xe0\x80\x81\x53\x07\x0e\x58\x20\x4d\xe0\x80\x05\xd3\x05\x0e\x58\x38\x75\xe0\xc0\x4c\xd4\x1c\x38\x30\xf5\xce\x22\x70\x90\xc5\xe6\xc0\x01\x03\xa3\x0a\x1c\xb0\x20\xca\xc0\x01\x0b\xa4\x0e\x1c\xb0\x50\xaa\xc0\x81\x89\x9c\x29\x70\xa0\xef\x91\x31\x70\x80\xd7\x1c\x75\xe0\x80\xad\x06\x03\x07\x1c\x00\x1c\x38\xe0\x40\x14\x81\x03\x0e\x06\x0c\x1c\xe8\x09\xe9\x03\x07\xba\x5e\x18\x02\x07\x78\x51\xb1\x09\x1c\xb0\x80\xea\xc0\x01\x07\xa5\x09\x1c\x70\x70\xba\xc0\x01\x07\xa8\x0e\x1c\x58\xd0\xb5\x08\x1c\x18\xfb\x68\x13\x38\xc0\xab\x8c\x39\x70\xc0\x82\x29\x03\x07\x1c\x90\x3a\x70\xc0\x81\x69\x02\x07\x1c\x9c\x32\x70\x60\x26\x6a\x0e\x1c\x98\x7a\x67\x11\x38\xc0\xcb\x8e\x29\x70\xc0\x02\xa9\x02\x07\x1c\x8c\x32\x70\xc0\x41\xa9\x03\x07\x1c\x98\x2a\x70\x60\xa4\x68\x0c\x1c\x18\xfa\x65\x0e\x1c\xe0\xf5\xc6\x26\x70\xc0\x02\xaa\x03\x07\x1c\x94\x26\x70\xc0\xc1\xe9\x02\x07\x1c\xa0\x3a\x70\x60\x41\xd7\x22\x70\x60\xec\xa3\x4d\xe0\x00\x2f\x44\xa6\xc0\x01\x0b\xa4\x0a\x1c\x70\x30\xca\xc0\x01\x07\xa5\x0e\x1c\x70\x60\xaa\xc0\x81\x91\xa2\x31\x70\x60\xe8\x97\x39\x70\xd0\x67\x0d\x57\x07\x0e\x78\x08\x55\xe0\x40\x80\x52\x06\x0e\x04\x38\x75\xe0\x40\x00\x54\x05\x0e\x2c\xe8\x9a\x02\x07\xc6\x0e\x5e\x1d\x38\xe8\x2f\xd8\x64\x6e\x7a\xd0\x05\x0e\x98\x5a\x30\x70\xc0\xd6\xc3\x81\x03\x16\x42\x11\x38\x60\x41\xc0\xc0\x81\x96\x8a\x36\x70\xa0\xe1\x5f\x1f\x38\x48\x0f\x76\x81\x03\x06\x4e\x1d\x38\x60\x81\x34\x81\x03\x16\x4c\x17\x38\x60\xe1\xd4\x81\x03\x33\x51\x73\xe0\xc0\xd4\x3b\x8b\xc0\x41\x7a\xb0\x09\x1c\x30\x50\xca\xc0\x01\x0b\xa3\x0e\x1c\xb0\x50\x9a\xc0\x01\x0b\xa6\x0c\x1c\x18\x29\x1a\x03\x07\x86\x7e\x99\x03\x07\xe9\xc1\x1c\x38\x60\x60\x54\x81\x03\x16\x44\x19\x38\x60\x81\xd4\x81\x03\x16\x4a\x15\x38\x30\x91\x33\x05\x0e\xf4\x3d\x32\x06\x0e\xd2\x83\x5d\xe0\x80\x81\x53\x07\x0e\x58\x20\x4d\xe0\x80\x05\xd3\x05\x0e\x58\x38\x75\xe0\xc0\x4c\xd4\x1c\x38\x30\xf5\xce\x22\x70\x90\x1e\xcc\x81\x03\x06\x46\x15\x38\x60\x41\x94\x81\x03\x16\x48\x1d\x38\x60\xa1\x54\x81\x03\x13\x39\x53\xe0\x40\xdf\x23\x63\xe0\x00\xaf\x39\xea\xc0\x01\x5b\x0d\x06\x0e\x38\x00\x38\x70\xc0\x81\x28\x02\x07\x1c\x0c\x18\x38\xd0\x13\xd2\x07\x0e\x74\xbd\x30\x04\x0e\xf0\xa2\x62\x13\x38\x60\x01\xd5\x81\x03\x0e\x4a\x13\x38\xe0\xe0\x74\x81\x03\x0e\x50\x1d\x38\xb0\xa0\x6b\x11\x38\x30\xf6\xd1\x26\x70\x80\x57\x19\x73\xe0\x80\x05\x53\x06\x0e\x38\x20\x75\xe0\x80\x03\xd3\x04\x0e\x38\x38\x65\xe0\xc0\x4c\xd4\x1c\x38\x30\xf5\xce\x22\x70\x80\x97\x1d\x53\xe0\x80\x05\x52\x05\x0e\x38\x18\x65\xe0\x80\x83\x52\x07\x0e\x38\x30\x55\xe0\xc0\x48\xd1\x18\x38\x30\xf4\xcb\x1c\x38\xc0\xeb\x8d\x4d\xe0\x80\x05\x54\x07\x0e\x38\x28\x4d\xe0\x80\x83\xd3\x05\x0e\x38\x40\x75\xe0\xc0\x82\xae\x45\xe0\xc0\xd8\x47\x9b\xc0\x01\x5e\x88\x4c\x81\x03\x16\x48\x15\x38\xe0\x60\x94\x81\x03\x0e\x4a\x1d\x38\xe0\xc0\x54\x81\x03\x23\x45\x63\xe0\xc0\xd0\x2f\x73\xe0\xa0\x4f\xe1\xac\x0e\x1c\xf0\x10\xaa\xc0\x81\x00\xa5\x0c\x1c\x08\x70\xea\xc0\x81\x00\xa8\x0a\x1c\x58\xd0\x35\x05\x0e\x8c\x1d\xbc\x3a\x70\x30\x64\xc4\xc8\xdc\x36\xd5\x45\x0e\x98\x5a\x30\x72\xc0\xd6\xc3\x91\x03\x16\x42\x11\x39\x68\x4d\x37\xfc\xb5\x54\xb4\x91\x03\x0d\xff\xfa\xc8\x41\x9b\xda\x45\x0e\x18\x38\x75\xe4\x80\x05\xd2\x44\x0e\x58\x30\x5d\xe4\xa0\xb5\xba\xf6\x6f\x26\x6a\x8e\x1c\x98\x7a\x67\x11\x39\x68\x53\x9b\xc8\x01\x03\xa5\x8c\x1c\xb0\x30\xea\xc8\x01\x0b\xa5\x89\x1c\xb4\x36\xb9\x00\x8c\x14\x8d\x91\x03\x43\xbf\xcc\x91\x83\x36\x35\x47\x0e\x18\x18\x55\xe4\x80\x05\x51\x46\x0e\x58\x20\x75\xe4\xa0\xb5\x48\x10\x60\x22\x67\x8a\x1c\xe8\x7b\x64\x8c\x1c\xb4\xa9\x5d\xe4\x80\x81\x53\x47\x0e\x58\x20\x4d\xe4\x80\x05\xd3\x45\x0e\x5a\xab\xac\x01\x66\xa2\xe6\xc8\x81\xa9\x77\x16\x91\x83\x36\x35\x47\x0e\x18\x18\x55\xe4\x80\x05\x51\x46\x0e\x58\x20\x75\xe4\xa0\xb5\x48\x25\x60\x22\x67\x8a\x1c\xe8\x7b\x64\x8c\x1c\xb4\xa9\x36\x72\xc0\x56\x83\x91\x03\x0e\x00\x8e\x1c\x70\x20\x8a\xc8\x41\x6b\xcc\x2f\xa0\x27\xa4\x8f\x1c\xe8\x7a\x61\x88\x1c\xb4\xa9\x65\xe4\x80\x05\x54\x47\x0e\x38\x28\x4d\xe4\x80\x83\xd3\x45\x0e\x5a\xbb\xa4\x03\x16\x74\x2d\x22\x07\xc6\x3e\xda\x44\x0e\xda\xd4\x2a\x72\xc0\x82\x29\x23\x07\x1c\x90\x3a\x72\xc0\x81\x69\x22\x07\xad\x55\x26\x02\x33\x51\x73\xe4\xc0\xd4\x3b\x8b\xc8\x41\x9b\x5a\x44\x0e\x58\x20\x55\xe4\x80\x83\x51\x46\x0e\x38\x28\x75\xe4\xa0\xb5\x49\x4f\x60\xa4\x68\x8c\x1c\x18\xfa\x65\x8e\x1c\xb4\xa9\x65\xe4\x80\x05\x54\x47\x0e\x38\x28\x4d\xe4\x80\x83\xd3\x45\x0e\x5a\xbb\x9c\x05\x16\x74\x2d\x22\x07\xc6\x3e\xda\x44\x0e\xda\xd4\x22\x72\xc0\x02\xa9\x22\x07\x1c\x8c\x32\x72\xc0\x41\xa9\x23\x07\xad\x4d\x22\x03\x23\x45\x63\xe4\xc0\xd0\x2f\x73\xe4\xa0\x4d\x4d\x91\x03\x1e\x42\x15\x39\x10\xa0\x94\x91\x03\x01\x4e\x1d\x39\x68\xed\xb2\x1b\x58\xd0\x35\x45\x0e\x8c\x1d\x34\x44\x0e\xbc\x06\xb5\x43\xaa\xfd\x33\xfe\x83\x64\x64\x95\x32\x41\x53\x50\xfa\x94\xc6\xc3\x31\x69\x90\x8b\x53\x2f\x03\x4f\x61\x60\xc8\xa6\x3a\xe5\xbb\xa8\x41\x67\x31\x37\x24\xae\x1d\x0a\x51\x9a\x26\x65\x9d\xd4\x1b\x19\x25\x45\x84\x73\x79\x32\xac\x89\x09\x3d\x71\x15\x49\xe6\xc9\x40\x49\x19\x3d\x71\x1d\x4d\xf8\xcb\xc0\x49\x39\x78\xd5\x79\x1f\x70\xab\x3e\xeb\xab\x89\xa1\x21\xf3\xab\x91\xa7\x3a\xb3\x61\x4b\x73\xad\x04\x37\xeb\xb3\xc0\x9a\xf8\x1a\x32\xc1\x1a\xf9\x1a\x1f\x9e\xbf\x92\xaf\xfe\xd4\x0a\x19\xbd\x83\x1d\x5f\x43\x66\x58\x23\x5f\xe3\x23\x63\x57\xf2\x35\x04\xc5\x70\xbb\x3e\x4b\xac\x89\xb1\x21\x53\xac\x91\xb1\x31\xa1\xb4\x96\x31\xda\x8b\xe2\x01\x55\xbb\xa8\x46\x67\x3a\x5b\xa2\xbc\xde\x17\x55\xb6\x1e\x2a\x24\xfc\xa7\xb2\x84\x9b\x0c\x15\xb2\xbe\x47\x65\xd2\x44\x69\xf2\x9b\xd4\x66\xac\xe1\xd2\xde\x16\x79\xe3\x3e\xe0\xec\xa0\x2e\x79\xea\xe9\xcc\x14\xad\x67\xbe\xcf\xc3\x6c\x8b\x34\xe6\x20\x96\x03\x04\xc6\xbe\x23\x95\x75\xf3\x98\xa2\x35\x29\xa1\x9c\xe1\xe9\x7e\xde\x15\x69\x51\xad\xff\xb4\xdf\xef\x65\xf5\x3b\x35\x28\xee\x01\x16\xd3\xc5\x6e\x19\x32\x30\x11\x03\x44\x92\xc4\x4e\xb8\xa2\x63\x67\x60\xfa\xd6\xb3\xed\x3c\x9c\x2f\x25\x0a\x65\x95\x64\x51\xf5\xd8\x43\xf9\xe1\x72\x1e\xdf\xc9\x34\x28\x18\x4f\xa5\x2f\xe4\xe8\xf8\xe1\x3c\x8a\xe6\xf2\x04\x3f\xed\x76\xa8\xae\x7b\xa8\xf9\x6e\x7b\x37\xdf\xc9\x74\x28\x18\x4f\xa7\x2f\xe4\xfb\x33\x5b\xc5\xb3\x99\x44\x27\xc9\xf7\xc5\x40\x64\xbb\xf3\x63\x24\x13\xe9\x60\x78\x0a\xb8\x84\x43\x3f\x0d\xb6\x7e\x2c\x77\xe3\x21\xaa\xf2\x24\x3f\x0c\x63\xe6\x47\xf1\x0c\xa0\x40\xc1\x78\x22\x7d\x21\x47\x07\xed\x56\xcb\x40\x1e\xf8\x38\xca\x0f\x23\x50\xbc\x9a\x4f\x67\x7b\x99\x0c\x81\xe2\xa9\xd0\x32\x8e\xc8\x6e\x35\xf5\xc3\x9d\x44\xe4\x50\x45\x8f\x6e\x1c\x55\x5f\x7a\xb8\x70\x15\x6e\x43\x60\x54\x06\x40\x9e\xd4\x58\xcc\x51\x0b\xfc\x20\x08\x42\x89\xda\x31\x89\x11\x9e\x09\x6b\xff\x93\xef\x44\x1b\x02\x8d\x27\x63\x19\x55\x28\x6f\xc8\xa2\x58\x1f\xa3\xb8\x78\xc0\x79\xa6\x37\xdb\x68\xf7\xe5\x80\x1f\x35\x70\x65\xe8\x31\x97\x72\x92\xd3\x14\xc7\x67\xfc\x6f\x92\x26\xcd\x23\x5d\x68\xb9\xcc\xc1\xb8\xc4\x6d\x6b\xf7\x54\x9e\xe3\xa4\x2e\xd3\xe8\x51\x99\xef\x7c\xc8\x20\x3c\x5f\xce\xb1\xbd\x1c\x5b\xc7\xc5\x43\xae\x6a\xaf\x59\x39\x29\x82\x3a\xd3\x90\x07\xe8\x2f\x17\x4b\xa1\xf9\x95\xf4\xfb\x15\x92\x22\xc8\xe2\xeb\xe8\xaf\x56\x81\xd0\xfc\x4a\xfa\xfd\x4a\x48\x11\xa4\x87\xeb\xe8\x07\xc1\x6a\x25\xb4\xbf\x92\x81\x61\xc9\xeb\x87\x30\xd5\x71\xc0\x40\xe9\xe8\x78\x54\xe5\x3a\x23\x98\x37\xee\x36\x2d\x76\x5f\x0c\x4a\x85\x21\xcf\xda\x86\xf8\x2f\x8e\x1b\x1e\x3a\xc9\xf1\x53\x08\x4f\xa0\x23\xb4\x24\x7f\x1a\x29\x3d\xbd\x5f\x60\x7b\xb6\x10\x18\x33\x8a\x88\x0e\x00\xf9\x4b\x35\x4c\x9f\xbe\xff\x93\x53\x17\xa7\x6a\x87\x7e\x89\xca\x32\xc9\x0f\xff\xfd\x9f\x3f\xff\xb8\x2d\x8a\xa6\x6e\xaa\xa8\xf4\xb2\x24\xf7\x76\x75\xed\x65\x51\xe9\x7c\xff\xe9\xff\x0f\x00\x00\xff\xff\xae\xba\xa2\x3e\xd4\x4d\x02\x00"), }, "/static/lib/bootstrap-4.0.0-alpha.6-dist/css/bootstrap.min.css.map": &vfsgen۰CompressedFileInfo{ name: "bootstrap.min.css.map", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 68044, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xec\x7d\x59\x77\xdb\xba\xce\xe8\x7f\xe9\x6b\xb4\x77\x9d\xb1\xe9\xb9\x4f\x04\x45\x39\x92\x22\x3b\xaa\xea\x7a\xbb\x77\x7d\x6b\x2f\xd5\x51\x15\xc5\x53\x6c\xc7\x71\x9c\xbb\xee\x7f\xff\x16\x67\x8a\xa6\x1d\x27\x4d\x77\x7b\xce\x71\x1e\x1c\x89\x04\x07\x80\x20\xc0\x01\x80\xfe\xdf\xbb\x87\x62\x36\xaf\x26\xe3\x77\xff\x3a\xf6\xde\xcd\x27\x8b\x59\xbf\x98\xbf\xfb\xd7\xff\x7d\xf7\xe7\x9f\xef\xff\xfc\xf3\xfd\xbc\x3f\x9f\xbf\xff\x7b\x3c\x99\x8d\xf2\x61\xf5\x54\xfc\x49\xdf\xdf\x79\xef\xbe\x4d\x26\xf7\xf3\xfb\x59\x7e\xf7\x27\x7f\x37\x81\xef\x66\xd5\xf8\x5e\x02\x9a\x19\xb3\x82\x16\x73\xe5\x3c\xe4\xb3\x2a\xff\x36\x2c\xe6\x8e\xcc\x51\xf5\x58\x8d\xe7\xef\xff\xbe\x99\x3c\x14\x33\x57\xe1\xfb\xd5\x5d\xb1\xa5\xdc\xb0\x9a\xdf\xbb\xea\xfd\xbb\x1a\xe5\xe5\xd6\x16\x19\xc0\x96\xfc\x6f\x93\xd9\x75\x31\xfb\x63\x96\x5f\x57\x0b\x67\x0b\x1c\xd0\x95\xd3\x9f\x5c\xbb\x6a\xfe\xbb\x9c\x55\xd7\x5b\x5a\x7c\x26\xfb\xdb\xac\xc8\x07\x77\x93\x6a\x7c\x3f\x7f\xa6\x92\x3f\xbe\xcf\xf2\x51\xb1\x9c\xcc\x06\x4e\x8a\x3e\x37\x16\x0c\xe0\x8f\xd9\x64\xe9\x2a\xfd\x7d\x32\x1b\x6d\x2b\xbc\x29\xff\xef\x6f\x8b\xfb\xfb\xc9\x78\x5b\xd1\xcd\x10\x7f\xdf\xcf\xf2\xf1\xbc\xba\xaf\x36\x64\x5f\xcf\x26\x77\xd7\x93\xe5\x78\x4b\xe5\xe3\xfc\xe1\x8f\xeb\xea\xa1\xba\x76\xb3\x19\x6f\xfb\x8f\x72\x36\x59\xdc\x39\xd9\x69\x7c\xb7\xb8\xdf\x9c\xdd\x5f\xcc\xef\x27\xa3\x3f\x36\x22\x3f\xce\x1f\x36\x24\x7f\xcb\x9d\xfd\xe9\xe7\xb3\x6d\xbc\x40\xb3\xdd\x54\x9e\x15\xf9\x75\x7f\xb6\x18\x7d\xdb\x56\x7a\x58\xe4\xb3\xef\xd5\xa3\xab\x82\xbb\xbc\xac\xc6\x39\xa5\xf4\x96\x0a\xb6\x02\xfd\xfd\x2d\xbf\xde\x3e\xb3\x36\xe4\xff\x7d\xbb\x18\x7d\x9b\xdc\xcf\xdc\xb5\xe6\xc3\x62\x76\xbf\xa5\xd6\x4d\xf9\x7f\xdf\xcd\x26\xe5\xac\x98\x6f\x9f\x34\xf9\x75\x55\xb8\x27\xd6\xdf\xa3\xe2\xba\xca\x5d\x19\x54\xf6\x6c\x64\x09\x53\x40\x6d\xe6\x9b\x59\x31\xbf\x9b\x8c\xe7\xd5\x43\xf1\x47\x31\xfa\x56\x5c\x3b\x59\x61\x38\x99\x3b\xc9\x35\x9a\x5c\xe7\x43\xe7\x6c\x99\x4c\x86\xf7\xd5\xb6\x5e\xcd\x8a\x79\x71\xff\xc7\x7d\xf1\xe8\xa6\xd8\xe4\x6e\x93\x38\xee\xe7\xb3\xc9\x62\x5e\x0c\xb7\x89\x0f\x3a\x57\x37\xcd\x84\xc5\x7d\x35\xac\xee\xab\x82\x0d\x58\x55\x8e\xb7\x83\x7c\xcb\xfb\x03\x4a\xbb\xf1\x56\xb9\xa8\x80\xfe\x60\x9a\xc6\xa9\x9e\xcc\x4a\x99\x60\x7f\xa6\x73\xd7\xd5\xfc\x6e\x98\xaf\xb6\x03\x7d\x1f\x16\x8f\xcf\x41\x4c\xf2\x6d\x4c\xbb\x29\xdf\xa8\xe2\x6e\xc2\x05\xdf\x76\xa8\x79\x7f\x56\x14\x63\x3a\xf9\xdd\xa8\xc9\x06\x39\xdc\x1f\x1c\xf0\x99\x2a\xab\xa7\x6a\x5c\x3e\x03\x73\x97\xf7\x9f\x05\xda\xc0\x66\x8a\x5f\x8a\xc7\xfb\x3f\xee\x67\x8b\x71\x3f\xbf\x2f\x9e\x83\x2b\x46\x77\x37\xf9\xbc\x9a\x3f\x07\x77\x53\x39\x55\xb0\xd1\xab\x87\x6a\x5e\x7d\xa3\x6f\xab\x2d\x75\xd9\x40\xff\xe3\xbd\x1b\xe7\x23\xb6\x84\xfa\x1f\xef\xdd\x28\xbf\xbb\xab\xc6\xe5\xfc\xdd\xbf\xde\xfd\x1f\xfa\x77\x42\x50\x0f\x79\x31\xc2\xc4\xeb\x21\x84\xbc\x2e\xc2\x88\x3f\xc5\xf4\x69\x0a\xea\x71\x25\x1e\x3b\x01\x07\x6f\xd3\x57\x82\xda\x81\x97\xd2\xa7\x84\xfe\xb4\xd5\x4f\x48\x7f\x52\x94\x10\x99\x9b\x06\x5e\x93\x16\xeb\xf0\x5c\x2c\xe0\x12\x5e\x4b\x37\xf0\xba\xaa\x6c\x8c\x9a\xaa\x58\x3b\xf0\xda\xaa\xb5\x90\xe7\xca\xaa\x46\xac\x47\xa2\xdb\xec\x49\xd6\x4a\xe8\x53\xc6\xbb\x90\x06\xb4\x39\x81\x5e\x87\xff\x60\x24\xfb\xd1\x0d\x28\x30\xf1\x2a\x50\x35\x9c\x81\x2a\x28\xaa\x20\xc4\xeb\xf3\x6a\xd3\x80\xc2\x88\x57\x46\x96\x12\x54\x95\xf2\x91\xe1\xd1\xa6\x15\xb3\x27\x22\xda\x4e\x1d\x69\x6d\x5a\x63\x6c\xe0\xd6\xdc\xd4\xd1\xb6\x40\xa3\xab\xaa\x8f\x75\xbf\x59\x4f\x12\xfe\xd4\x0e\xbc\xc4\x20\x34\x43\x9f\x3d\x11\x93\xf8\xbd\x3a\x99\x32\xfa\x54\xf0\xa7\xa6\x68\x49\x0c\xa6\x7c\x0d\xf9\x80\x74\x02\xde\x50\x42\xeb\x63\x83\x94\xd3\x26\xe7\x40\x61\x52\xd5\x19\xcd\x1d\xac\x70\xae\xfa\x56\xd0\xd7\x8c\x57\xdd\x0d\x0c\x26\xc8\xd4\xf8\x67\x28\x36\xb9\xb1\xa3\x2a\xed\xd9\xd5\xa7\xaa\x02\x42\x8c\xf1\x6e\x2b\x22\x17\xbc\x44\x16\xf0\x1e\xf4\x55\x1b\x23\x40\xa1\xe4\x20\x46\xcd\x12\xd3\xc7\x03\x96\xc0\x9f\x57\x0c\x24\x57\x6d\xa6\x0a\x25\xce\x21\x27\xec\x97\x3f\xcf\x19\x6c\xaa\x06\xb2\xcd\x7b\xdf\xa6\x2c\x54\xe3\x5e\x31\x4d\x34\x0a\x72\x40\xac\x49\xc4\x08\xdd\xd6\x5c\xde\x35\x7e\xe4\x58\xa7\x46\xb9\x1a\x9d\x52\x35\xb8\x9a\xc9\x32\x35\x3e\xb9\x31\xd6\xb2\x83\x8c\x76\x31\x7e\x1f\x05\x82\x8b\x73\x7f\x15\x6f\x68\x9b\xd7\x8e\xef\xe2\xc0\x5b\x71\x42\x61\xff\x2c\x16\x48\xc6\xf8\x31\x0e\xbc\xbe\x5f\x5d\xca\xd2\x1d\xd5\x5c\x8c\x3f\xc4\x81\x77\x22\xcb\xcc\x15\x08\x9b\xd2\x67\xa0\xb1\x65\x04\x8a\x39\x8e\xdd\x40\xb2\x15\x31\xa5\x42\xaa\xf0\xe9\x28\x52\x69\x76\xd4\xd8\xc6\xf8\x43\x12\x78\x99\xbf\x6c\xc9\x04\x72\xd3\x67\x44\x20\x9c\xfa\xa9\x62\x3e\x2e\xe1\x16\xec\x77\xc0\x19\x81\xfd\xf2\x39\x56\xe8\x84\x3e\xea\x0b\x06\x2d\x10\x41\xa2\xcf\x85\xa2\x52\x41\xe7\x0c\xe1\x5d\x23\x44\x89\x85\x34\xa0\x90\xbc\x5f\x67\x40\xd1\xfb\x00\xb4\x96\x33\xf0\x42\xd4\x7f\x0f\x86\x98\x1a\x01\x22\x42\x22\xb2\x79\x6b\xf1\x0f\x1b\x64\xde\x43\x26\x58\x13\x85\xed\x08\xf8\x7c\x45\xc8\x6b\xd2\x82\x12\xa8\x49\x45\x26\x4b\x64\x9c\x21\xe5\x2b\x31\x18\x51\x83\x10\x29\x56\x12\x94\x98\x84\x8e\x69\xa7\xda\x0e\x7e\x8e\x69\x61\x96\xc1\x71\x1d\x01\xf2\x03\x29\xc2\xe2\x50\x11\xb0\x19\x09\x5a\xd1\x6e\x86\x76\x2d\x25\xe0\xe3\xe0\x13\x17\x6b\xeb\x8c\x27\x49\x2a\x86\xab\x29\x61\x52\x05\x93\xa2\x09\xb0\x29\x5e\x02\xaf\x30\x47\xe9\x90\xd2\xb9\xa7\x59\xb1\x29\xa7\x6d\x8f\x56\xa8\xd5\x5e\x5f\xc9\x5c\xa3\xe5\x36\x3e\x8a\x4f\x2e\xbc\x0a\xfc\xe3\xf8\xf4\x82\xd7\xe9\x92\x48\xa1\xf1\x44\xd4\xdc\x24\x92\x71\xe2\x60\x94\x52\x01\x49\x0e\xaf\x04\x21\x7b\xa8\xc7\x88\x1d\x6e\xf8\xc1\x43\xe0\x3d\x60\xe3\xd3\x57\x3c\x4f\x94\x02\xd0\x19\x31\x0a\x03\xaf\x21\x71\x22\x4a\x83\x8a\x81\xd3\x8a\xaa\xab\x26\x96\xd0\x46\x35\x9e\x68\xd2\xb2\x6b\x55\x37\x95\xb0\xd7\x3f\xa1\x52\x86\x4d\xa1\x87\x05\xea\xf2\xb5\xaf\x24\x52\x4f\xc1\x75\x8d\x15\x83\xfc\x61\xb3\x9e\xa1\xa4\xa5\x19\xe7\x9f\x98\xdc\x44\x82\x54\x69\x30\x8a\xd0\x1a\x40\x07\x75\x22\xef\x1c\x36\x94\x8d\x89\x37\x61\x42\x66\x82\x83\x51\xbc\x5e\x3a\x46\xad\x88\x42\x74\x42\x39\x0b\xb2\x88\xcf\x33\x41\x00\xa2\x08\x40\x84\x68\x88\xb9\x5a\x69\xba\x91\x08\x69\x06\x9b\xff\xed\xe0\x3c\x09\xbc\x3e\xb9\x4d\x04\x64\x8a\xfa\x81\xa4\x17\x12\x32\xad\x5d\x27\x69\xdb\x60\xeb\x4c\x4e\xbd\xdc\xf8\x61\x33\x5c\x09\x92\x4c\x73\x56\x4f\x0d\x73\x4f\x0d\x6e\xa1\x9e\x34\xda\x5d\xc5\x04\xb9\xd2\xe9\x4d\x85\x6f\xac\x1a\xd0\xea\x41\xf3\x5c\xae\xa6\x7f\xa8\x6a\x4e\x8d\x05\x0b\x97\x9b\x4d\x53\x93\x0b\x25\x9e\x10\x83\xd3\xce\x59\x87\x8f\x00\x25\x62\xde\xf7\x50\x1c\x09\x34\x2a\x99\xc7\xe5\x6e\xa6\xa7\x76\x93\x4a\x72\x29\xff\x32\xfe\x9a\x88\x65\x0c\x1b\xa6\x35\x29\x56\x93\x67\x6d\x43\x65\x60\x53\x76\xa6\xf6\xe4\xc2\x6a\xdd\x56\x9b\x1f\x23\x40\xb1\x56\x52\x61\x4d\xcd\x04\xe7\x61\xe0\x65\xe4\x5e\xea\xfd\xa2\xf9\xfe\x2f\x26\x7a\xe3\x4d\x3f\x4f\xb0\x6d\xd2\x93\x21\xd8\x53\x27\x75\x8a\x18\x3d\xb4\x4d\xb6\x2a\x8b\x68\x0d\x1d\xd5\xff\x96\x9d\x16\x3b\xd2\x52\x47\x5a\x7b\x47\xb8\x18\x91\x2f\xc6\x12\xd3\xec\x64\x28\x66\xfa\x36\x01\x69\x82\xb4\x7f\x22\x88\xdc\x25\x68\xe6\xef\xdb\xcb\x47\x39\x35\xb4\x0e\x2a\xea\x4b\xca\x8e\x5d\xa9\x14\x88\x7a\x31\xc2\xea\xab\xf4\x96\xa1\xc0\x1f\x88\x58\x35\xea\x06\x62\xbf\x0a\x02\x2f\xc7\xc3\xc0\x91\x35\x09\x02\xca\xf6\x7a\xfd\xe2\x07\xde\x08\xa3\x30\xe4\xa0\x21\x95\x75\xbd\xfa\xd6\xa9\xe0\x42\x30\x14\xbb\x91\xb4\xbe\x32\xd0\x78\x5a\x03\xa4\xa7\xa8\xe4\x6e\x4c\xec\x05\xa4\xc9\x5f\x17\x81\x98\xb1\x29\x42\x73\xca\x9d\xf1\x21\x78\x13\xa8\xeb\x15\x0b\x9f\xc4\x10\x33\xc8\x14\x42\x5a\x19\x1c\x60\x44\x58\x9d\x5d\xaf\x89\x82\xef\xde\x39\xa6\x8b\x04\xd1\x06\x99\x85\x87\xe0\x75\x71\xa8\xb8\xa8\x29\xb7\x85\xbe\x2f\xb6\x0f\xa9\x1a\x75\x63\xfb\x63\xaf\x49\xc8\x57\xd1\xcb\x36\xee\xca\x39\x1c\xaa\x1f\xad\xf5\xad\xb4\xae\x95\x16\x44\xd1\x7a\x47\x8a\x80\xef\x0a\xc5\x80\x35\xcd\x5d\xa1\xa5\xf9\x4a\xa8\x0f\x1d\x27\x48\xf8\x88\xcd\x7d\x9f\x90\xa5\xa1\x90\x98\xa6\x14\x65\x32\xf1\xd3\xe8\xea\x28\xf0\xfa\xe9\xf8\xea\x38\xe0\xe3\x1e\xd7\xc7\xdd\x3d\x7e\x9a\x33\x83\xcf\x92\x18\x24\x37\xa5\x18\x71\x42\x53\xd1\x1c\x3e\xdf\x80\xc9\xfa\xc1\x13\x48\xfc\xc9\x14\x22\x2f\x45\x59\x68\x34\xb1\x26\x10\x92\x7a\x0b\x92\x7b\x88\x83\x7f\x4d\x8c\x2e\xa9\x06\x58\xaf\x39\x75\xa1\xd1\x53\x75\x11\x8a\x10\x1f\x88\x6e\xbd\xbd\x36\x7e\xf2\x91\xd7\xc5\xc8\xdc\x07\xf7\xea\xbc\x1d\x53\xee\xb4\xf8\x3d\xc6\x47\x38\xf0\x56\x10\x8c\xfd\xc0\xeb\xe2\xf6\x1a\x40\xf2\x46\x00\x8d\x9d\x6b\x18\x40\x68\x0f\x55\x82\xcb\x37\x82\x68\xac\x41\xb4\x35\x84\x7f\x45\x35\x39\xfe\xfa\x5a\x1a\x3e\xe0\x80\x96\xbf\xdc\x8c\xe1\x0f\x43\x34\xb6\x41\xf8\xfd\xc8\x8b\x71\x8e\xe4\xe2\x5c\x2e\xc7\x72\xf5\xa4\xd3\x8c\xad\x57\xac\x44\x48\xac\x76\x0f\x0c\xcf\xbc\x2e\x06\x12\x9c\xb1\x2e\x7e\x80\xc0\x8b\xf1\x08\xd6\x00\xda\x6f\x03\xd0\xd8\x06\xe0\x5f\x0b\x25\x92\xd7\xcf\x06\x08\x0a\x02\x31\x5f\x1a\x4c\xd4\xf7\x55\x3e\x87\x6c\xde\xe2\xc8\x58\xb6\xa6\xf5\x9f\xf6\x8e\x3f\xa9\xa2\x50\xb7\xfe\xd3\xd9\xf1\xe7\xdf\xbd\x02\x79\xc6\x92\xd5\xa5\x27\xd7\x36\xc1\x02\xc8\xfa\xec\x98\x03\x1d\x74\x7c\xeb\x07\x7b\xfa\xff\x68\x05\x41\x03\x1c\x92\x61\x4f\xe1\x3d\x85\xff\x13\x28\xdc\xd8\x53\xf8\xe7\x51\x98\x44\xc8\x3c\x93\x64\xc7\x38\x4b\xfd\xa8\x97\xad\x95\x4e\x1c\x38\x1f\x3b\xf6\x72\x98\x04\x5c\x33\x18\x25\x73\xfb\x78\x49\xae\x4c\xad\xb4\xd8\x4e\xd3\x6a\x25\x44\x5e\x3b\x38\x83\xd6\x96\x6a\x3b\x8e\x6a\x3b\x8e\x6a\x3b\x28\x96\xb4\x21\x43\x9c\x3c\x5b\x6f\xd7\x51\x6f\xd7\x51\x6f\x57\xd5\xdb\xdd\xa9\xde\xd0\x51\x6f\xe8\xa8\x37\x54\xf5\x86\xbf\xb4\xbf\x7b\x3a\xfc\x9e\x74\x48\x7f\x52\x7f\x7f\x55\xbd\xbb\x8b\x07\x59\x6f\x4c\x8e\x21\xf5\xd2\x60\x81\x3f\xc9\x73\x92\x07\x5c\x4b\xe8\xd8\x09\x5d\x3b\x21\x7c\x16\xe2\xed\x8a\x64\x36\xc4\xb6\x04\x89\xcb\x08\x7f\x12\x64\x20\xe3\x7a\x42\xc7\x4e\xe8\xda\x09\xe1\xb3\x10\x6f\x57\x24\xb3\x21\xb6\x25\xc4\xe4\x10\x52\xaf\x13\xcc\xe1\x93\x30\x11\x20\xf7\xf5\x84\xae\x9d\x10\x3e\x0b\xf1\x76\x45\xba\x36\x84\x99\x80\x1f\x80\xd0\x75\xe0\x21\x10\x7e\x5f\xf1\x53\x74\x69\xfe\x53\x74\x69\xe7\x27\xe9\xd2\xce\x4f\x92\x19\x9d\x9f\x24\x3b\x7f\x55\x7f\xf7\x74\xf8\x3d\xe9\xd0\xfd\x49\xfd\xfd\x55\xf5\xbe\x56\x97\x76\x6d\xfd\xd3\xb5\x75\x69\xd7\x56\x59\x5d\x5b\xcb\x6d\x83\x78\xbb\x22\x3d\x1b\x62\x5b\x82\xc4\xc5\xd2\xa5\x5d\x5b\x97\x76\x6d\x95\xd5\xb5\xb5\xdc\x36\x88\xb7\x2b\xd2\xb3\x21\xb6\x25\x70\x5d\x9a\x6b\x0d\x45\x98\xca\xca\x6d\xe5\x9a\xdb\x4a\x2d\xb7\xd5\xde\x36\x88\xb7\x2b\xd2\xb7\x21\x8c\x84\xde\x5e\xb9\xee\x95\xeb\x5e\xb9\xee\x95\xeb\x5e\xb9\xee\x95\xeb\x5e\xb9\xee\x95\xeb\x5e\xb9\xee\x95\xca\x9e\x0e\x7b\xe5\xba\x57\xae\x7b\xe5\xfa\x6f\xa0\x5c\x1b\x7b\xe5\xba\x57\xae\x7b\xe5\xba\x57\xae\x7b\xe5\xba\x57\xae\x7b\xe5\xfa\x66\xca\xb5\x79\x2c\xbd\x35\x93\xba\x3d\xbd\xe9\x23\x72\xa1\xdc\x34\xdb\xa1\xe1\x56\x51\x28\xbb\x7b\xcb\x3f\x26\x45\x9f\x99\x25\x7d\x1e\x1a\x8e\x66\x7d\x1b\xe6\x9a\xf9\x79\x0e\x20\x5c\x2f\x3e\x84\xc8\xeb\xa3\x39\x84\xca\x75\x23\x8b\xa4\x9f\x5b\x33\x94\xee\x00\x99\x34\xd7\x6f\xdb\xe5\xfd\x40\xbb\x90\xc6\xe1\x7a\xfe\x65\x24\xdc\x78\x57\x80\xba\x89\x37\x11\x6e\x1f\x9d\x96\xb7\x62\x5e\x27\x95\xf4\xeb\xcd\x22\xef\x04\x50\x33\x51\x3e\x68\xf8\x03\x89\x38\x2a\xca\x2b\x2d\x0c\xf5\x73\x12\x79\x15\x46\xb1\x86\x47\x97\x2d\xe5\x66\x88\xb2\x54\xa7\x8f\xe1\x13\x27\xce\x40\x7a\xb4\xa9\x7a\x52\x5a\xcd\xc0\xa8\x26\xa5\xb5\x4c\x59\x2d\x53\xa3\x96\x94\x55\xd2\x53\x6e\xc5\x85\x55\xc5\x01\x58\x55\x0c\x58\x15\x83\xb5\x2a\xde\xa4\x1f\x1b\x88\x92\xda\x34\x49\xdd\x24\x49\xfd\x2a\xf8\x42\x9b\x27\xe1\xba\xdf\x08\x0a\x23\x33\x2b\xb5\xb2\x8a\x3a\xff\xca\x1c\xee\x31\xa5\x50\x5b\x02\x65\x5f\xe1\x68\x70\xc5\x3c\x43\xbb\xa1\x74\xf2\xea\x45\xa6\x77\x55\xe2\xb0\xbf\x66\x4f\x23\xc9\x35\x51\x40\x91\x4a\x65\x79\x72\x13\x51\xb6\x70\x95\x6f\xd6\xbd\xf6\x37\x84\x2a\xb0\xf1\x8a\x0d\xcf\x60\x9a\xba\xd4\x51\x2c\x4a\xa8\x87\xb1\x30\x7d\xa3\x51\x2c\x3d\x78\x3e\x7d\x96\x0b\xe5\x5c\x95\x8c\xb5\xeb\xb2\x7e\xef\xee\x00\xd3\x77\xc0\x74\x9f\xaf\xe6\xe5\x20\x66\xc3\xe9\xe7\x96\xd7\x00\x74\xa6\xa4\x80\x11\xb9\x03\x67\x81\x70\x31\x5b\x27\x1c\x56\x3e\x19\xca\x87\xd3\x3f\xc6\x11\x9d\xda\x73\x1c\x1a\x8e\xd7\xc2\x3d\xe8\x11\x47\x5e\xb9\x25\x6f\xb2\x25\xef\x08\x36\xe7\x2d\x00\xa1\x25\xd0\x91\x1b\xf8\x77\xa0\xb8\x52\x03\xdd\xf9\x0c\x68\xe9\x2b\x67\xd7\x30\xf2\x4a\x5f\x39\xbd\x4f\x00\x5d\x44\x74\xa6\xf5\x42\x07\x9a\xb1\x74\x93\x9f\x80\xe1\xc0\xda\x91\xbe\x64\x3d\x11\x70\x42\xca\x69\xfe\xa8\x7d\xb2\x47\x1a\x6a\xa1\xa1\xf8\x63\xc7\x72\xfe\xdb\x0a\xd5\x61\x9e\x21\x58\x39\xa5\x49\xa0\xc4\x68\x4f\x33\x7d\x16\x78\xd3\x1d\xa0\xad\x18\x1e\x89\x1a\xfe\x5c\x71\x3c\x41\xad\x33\x9f\x49\xa3\xf7\xfc\xdf\xb4\xe9\x0d\x7c\x84\x66\x4d\x6f\xe1\x33\x4f\x15\x1f\xa1\x39\x66\x69\xf7\x58\xa7\x75\xd6\xbd\x57\x50\xce\x9d\x8c\x07\xc0\x3c\x90\x87\xe0\x8d\x98\x7c\x9a\x63\xc3\x8f\xb0\xe6\xef\x94\x7e\x3e\x8d\xa4\x27\x5b\x56\xc6\x91\xb7\x24\x08\x4d\x7c\xaf\x24\x08\xdd\xf9\xde\x94\x2d\xf6\x46\x3e\x95\x58\x6d\xe1\x85\xb9\x5b\x13\x6d\xa3\x89\xc7\x58\x35\x71\xf2\x7c\x13\x3d\xe5\x01\xaa\xdd\xf2\xbb\x0e\xe7\xb9\xb6\x0a\x4f\xa3\x5d\x4d\xd2\xfa\x10\x24\x54\xe3\x2f\x30\x6a\x27\x06\xdf\x49\x7f\xec\x96\x10\x94\x7a\x8e\xf5\xeb\x4e\xd5\x8c\x71\x38\x8c\x6e\xc1\x8a\x2b\x90\xd1\x16\xce\x98\x2b\x91\x88\xe8\xc2\xd9\xb9\xe6\xde\x3a\x65\xee\xad\x62\x05\x11\x45\x94\x56\x69\x28\x7d\x54\x33\x36\x77\x74\xa8\x9b\x66\x20\xc2\x10\xcd\xe5\x6f\x53\x50\x22\xd5\xce\x58\x2c\xca\xc8\x04\xea\x7e\xa7\x99\x96\xaf\x99\xfa\x29\x8d\x77\x7c\x7a\x25\x23\xb8\xf0\x5f\x1e\xff\x85\xeb\x30\xaa\xda\x94\x14\x0a\x99\x2b\xac\x26\x4e\xca\x22\xc6\xd4\xa4\x54\x6e\x2b\x30\xff\xa8\x1d\x09\x4f\x5e\x9e\xb2\xbc\xc2\x77\x69\xf0\xd3\x1a\x8c\xfd\xd1\x55\xbd\xc1\xaa\x83\x4f\xd3\x40\x84\xbc\xe0\xbf\xdc\x11\x9f\xb3\x68\x69\x35\xd8\xb0\x1a\x3c\x80\x67\x31\xbc\x62\x4b\x00\xd5\xe0\x20\x43\xfd\xc8\x88\x19\xb0\xb3\x33\x5d\x58\xd7\x48\x61\xdd\xad\x2e\xb4\xa0\xa5\x10\x95\x8f\x85\x7a\x12\x3c\x74\x11\x50\x55\x9e\xc9\x05\x47\x74\x78\x45\x75\x7b\x58\x5d\x31\xc1\x57\x84\x2f\xec\xdd\xb3\xed\x29\x92\xb4\xf5\xd9\x55\xbb\x1e\x71\xa8\x84\xfa\x82\x99\xb0\xb5\xf0\x0a\xd0\x02\x76\xef\xce\x1b\x1d\x63\xfd\x14\x9a\x6b\xc4\x8e\x81\xe9\xcf\x12\x87\x46\x48\x09\xbd\xe8\x12\x25\x87\x98\xad\x41\x17\x1a\xea\x01\x47\x94\x07\x8f\xb0\x5a\x28\x52\xed\x5e\x61\x74\x80\x4d\xd1\x2e\xca\xdf\xf8\x8c\x7c\x73\xff\x17\x8f\xa6\xb5\x9a\x24\x26\x21\x7c\xb6\x56\x3f\xf7\x43\x39\x5c\x1f\x79\x4a\x45\x42\x5b\x84\x12\xc3\x71\x5e\x7b\x67\xde\x91\x88\x4a\x8a\x15\xf9\xc5\x48\x8a\xee\x9f\x92\x88\xaa\x8f\x03\xa2\xa4\x3b\x46\xc6\x18\xe7\xf5\x1d\x64\x0f\x0d\x83\x88\xaa\xe9\x45\x10\x8a\xa0\x44\xe4\xf0\xaf\x96\xe1\xbc\x9e\x3b\x42\x37\xb8\xa2\xd5\x58\xa1\x4d\x26\xda\x01\xb7\xd2\x8f\xa5\x7e\xec\x6d\x0a\x0b\xd0\xc3\x13\x82\xec\x80\x09\x7c\x05\xf3\xf5\x3d\x79\x93\x88\x01\xad\x58\x84\x6e\xea\xd2\x0e\xa9\x5e\x5d\xa7\x34\xf5\xab\xd7\x65\x1b\x63\xed\xc0\x6e\x9c\x79\x5b\x27\x6d\x13\x30\x4e\xbf\x9d\xd9\x63\xb6\x9b\x46\x85\xd7\x47\x2b\xf8\x4b\x0e\xaf\x8e\xd0\x72\x08\x19\xed\xe3\x37\xaf\xc7\x26\xa3\xa4\x55\x12\x71\x5a\xae\xc0\x88\x91\x96\x06\x5e\x8e\x3f\x38\xb7\x5b\x4a\xf4\xdf\x82\x4f\x09\x53\x41\x82\xb6\x81\x21\x62\xec\xd2\x93\x70\x0b\x8a\xa3\xed\x28\xd2\x4d\x7e\xa4\xf5\xbe\x0a\x4c\x65\xb6\xd5\x0c\x04\xa1\x26\x52\xb3\x35\x37\xe0\xb0\xb6\x8d\xf0\xfb\x91\x57\xe0\x1b\x7f\xdb\x5e\x23\x66\x38\x4f\x0d\x9c\xd3\x8d\x38\xf3\x65\xca\xf4\x19\x9c\xa7\xdb\x71\x9e\x32\x9c\x97\x72\x63\x4b\xc8\x7a\x97\x28\xce\x73\x63\x49\x34\xd5\x38\xa7\xcf\xe2\x5c\x41\xe4\x75\xf0\xd8\x7f\x7e\xa0\xcb\x9d\x06\xba\x94\x27\x2a\x5b\x91\x7e\x9e\x97\x63\x23\x38\xd8\xa6\x81\x36\xe3\x05\x95\x2f\x19\xe8\x09\x44\x5e\x8e\xef\xfd\xff\x2a\xee\x5e\x30\xa4\x9f\xfe\x61\xa4\x77\x1a\xe9\x9f\x87\x74\x03\x22\xaf\x87\x4f\x77\x40\x7a\xb0\x13\xd2\xea\x9c\xe9\xc7\x47\x5a\x89\x87\x4d\x48\x2b\x02\xf3\xb3\xbc\xdd\x91\x3e\x00\x5a\x3b\x7e\x82\x0d\x92\xcc\x38\x65\x91\x04\x38\xc4\xc4\x3b\x82\x0a\xce\xf0\x76\x12\x34\x03\x11\x99\xeb\x88\xf5\xfb\x47\x48\xa0\xc2\x80\x9d\xb3\xaa\xd6\xe3\xb5\x34\xeb\x5b\x95\xa3\xcd\x24\x10\x78\xb3\xb3\x18\x7c\x0a\xeb\x50\x4e\xb4\x63\x8e\xf6\xd9\x06\xb4\x2d\x09\xab\xb6\x69\x5b\xd1\x7e\x5e\x9a\x37\x65\x70\xd1\x12\x2b\xb4\x63\x0b\xed\x73\x63\x6f\x76\xe6\x44\xdb\xe8\x9c\xcf\xce\x4c\xf1\xfb\x17\x8e\xf6\x72\xb7\xd1\x36\x35\xcf\x8f\xcc\x72\x8b\x71\x9c\xa3\xad\x8e\xea\x69\x8b\xcf\x8e\x76\x9b\x31\xf9\x10\xff\x97\x31\x79\x87\xa1\x3d\xfb\x95\x68\xef\x34\xda\x6f\x8c\x76\x1e\x79\x13\xc0\x8f\x2f\x44\xbb\xb1\x1b\xda\x0d\x19\xf1\xe6\xc7\x47\xdb\x14\x13\x4e\xb4\x8f\x8c\xf0\x86\x8d\x67\xd1\xa6\x4a\xbb\x63\x44\xd5\xac\xdd\x20\x88\x6d\x25\xbf\xb5\x3b\xe3\x27\xcf\x43\xfe\x6f\x82\x69\x7f\xb2\x63\xac\x9a\xfe\xcc\x02\x97\x9d\xf0\xec\x5b\xa0\x4b\xb4\xe2\x4a\x9c\xd2\xdf\xc0\x63\x93\x2e\xda\x4a\x38\x6a\x22\x95\x76\xdb\x44\x6a\x39\x57\xc2\xa4\xe9\x0a\xbc\x69\xe0\xf6\x00\x6c\xc9\xd6\x90\x21\xa1\xd2\x1b\x78\x6a\x22\x35\xa9\x4b\x38\x69\x12\xb5\xfd\xe9\x34\x19\x39\x3f\x7b\x29\x7e\xf4\x37\x9c\x8b\xea\x1d\x58\xd2\x6d\x84\xb1\x2a\x70\xea\x6f\x38\xab\x35\x0b\x4c\xa2\xc8\x3e\x15\x4d\x54\xdc\xc6\xb9\x19\xfc\x2b\x5c\x8b\xe0\x1c\x86\xea\x76\x3b\x8e\x8c\x70\xba\xe4\x6b\x3f\x34\xe3\xcc\xc6\xf5\x4d\xb2\x95\xd6\xb5\xd2\x7a\xdf\x5b\x5e\x57\x84\xb6\xa3\xc3\x16\x8a\x91\x15\x20\x2c\x9a\x9d\xbe\xf3\xe4\xc7\xc8\x72\x9f\xcf\x8e\x95\x27\xfa\xbd\x04\x9a\x60\x1d\xee\x5a\xb1\xce\xdb\x5f\x6f\x20\x54\x11\x94\x6b\xe7\x3f\x7d\x47\x5a\xd7\x4a\xcb\xaf\x5b\xf2\xe4\x9f\xa8\x56\xb8\x42\x68\xae\x1d\xe4\x58\x31\x37\x7b\xf6\xe1\x0e\xdf\x83\x76\xbd\x26\xc2\x7f\x19\x76\x18\x89\xa1\x62\x6b\xa7\xff\x3d\x3b\xed\x2f\x76\x0a\x5c\x82\x49\x3d\xba\xe4\x4f\xd6\x03\xc5\xf1\x48\xc5\x2d\x23\xb4\x38\xa3\x8e\x3e\xc0\x8a\x55\x89\xb4\x1e\x02\x34\xae\x9f\xdf\x74\x54\x17\x53\x23\x36\x3d\x36\xa3\xa3\x10\x47\x48\x3b\x57\xa0\xd5\xae\x4b\x7d\xef\x78\xd5\x77\x4d\x77\xa4\x7c\xc4\xfa\x73\x9f\xe9\xfa\x99\xaf\xee\xc2\xad\xc8\xf9\x6a\xf0\xcd\x63\xd9\x55\x2d\x52\xa2\x2b\xf8\x69\xe8\x38\xbe\x72\x49\x9c\xae\x1d\x41\x52\xdb\x04\x28\x06\x18\xc3\x03\xdb\x22\xf3\xf5\xce\x08\x1a\xbe\x2b\xe6\xae\x21\xed\xbe\xf3\x0d\xc0\x02\xe8\xbf\x09\x8c\xc1\xe8\x84\x03\xfc\x1e\xf8\x7e\x78\xc5\xae\xdc\x8e\x60\x06\xeb\x97\x17\x86\x58\xca\xd8\x4a\x5b\x4f\xac\x8b\xc8\x4b\x51\xaa\xf8\x28\x8d\xc4\x3d\x95\x26\x60\xac\xd6\x7c\xc6\xcd\xa3\xc9\x39\xa1\xbc\x09\x4b\x1d\x1c\xd2\x76\x5c\x87\x59\x01\x09\x05\xed\x42\x79\xed\x96\xa9\x6a\xc2\x7a\x14\x46\x6b\x5a\x59\x8c\xcb\xbe\x02\xb0\x60\xb8\x85\xf5\x03\x2e\x6d\xd3\x91\x92\x63\x26\x08\xd5\xf5\xa1\x75\x17\x64\x48\xb3\x89\x7e\x34\x52\x7b\xc6\x2c\x8e\xe4\x12\xad\x64\x37\xec\xba\xaa\xb7\x38\x87\xfe\x14\x89\xdb\x8f\x39\xa0\x3c\x91\xc3\xf3\xad\xa5\x57\xcb\xe2\x7e\x64\xe4\xb3\x1b\xd7\x43\x60\xff\x9e\x18\xd7\x0c\x40\x95\x18\x42\x4b\x30\x9f\xa9\x69\x2b\xac\x57\xd4\xca\x26\x81\x6b\xe0\x23\x08\xa5\xbc\x89\x5f\x78\x59\x21\xe3\xa2\xab\x13\xd3\xae\x92\xae\x89\x9e\xd6\x5d\x14\xb0\x25\x46\xac\xce\xb1\xc3\xc8\x5b\x11\x75\x83\xc7\x18\xea\x44\x5f\x96\x12\x66\xd6\x42\x6e\xe0\x06\x87\xa2\xfb\x44\xcb\x0b\x52\xc2\x02\x47\x74\x5b\x40\x11\xc2\x37\x70\x08\xa1\x58\xc0\x30\xa8\x85\x84\xa2\xbb\xc0\xb9\xc9\xc0\x24\xf0\xce\x7d\xa3\x55\xba\x87\x67\xc4\x9f\x90\x1b\xb8\xf3\xdd\x6d\xad\xfc\x88\xe5\x9f\x62\x77\x2b\xa5\x1f\x89\xeb\xa3\x0a\xab\xeb\x69\x82\x4a\x90\x28\xf5\xeb\x87\xc6\x6d\x4a\x8c\x11\x0b\xf1\x2a\x90\x0d\xcf\x81\x0e\x03\x1a\x62\x71\xc3\xd4\x5f\x5b\xa1\x95\xd8\x01\x91\x29\x88\x0c\x4d\x40\x4e\xd6\x17\x70\xf5\x48\x5f\xfd\xcd\xb5\x96\x5c\x80\xf9\x55\x08\xeb\xbc\xdc\x08\xb4\x5f\x5f\x07\x17\x86\xae\x92\x71\xe1\x77\x3d\x4f\x57\xd3\xea\x00\xa8\x60\x4a\xd4\x7c\x70\xb2\x6b\x11\x1a\xda\xa4\xa7\x94\xe1\x09\xbb\x20\x16\x23\x1b\x44\xde\xdc\xbf\x81\x61\x58\x1b\xd3\x86\x1c\xb3\x2a\xe4\xf9\x37\x51\xa8\x0c\xab\xcd\x31\x6d\x44\x91\xb7\x20\x75\x4e\x39\x61\x9c\x72\x46\x78\x29\x57\xad\xd3\x28\x62\xf9\x77\xb1\xab\xd6\xcf\x8d\xb2\xc9\x8c\x1e\xf8\x96\x96\x4e\x4c\xf6\xbc\xf4\x57\x70\x7b\x18\x24\x86\x34\x11\x4b\x14\xfd\x9d\x88\x61\xd2\xe2\xf3\xd2\x12\x5e\x3b\xcc\xd0\x44\x19\xb6\x1d\x31\xe2\x5a\x35\x90\xb7\x92\x5e\x72\x71\xdc\x34\xa4\xff\xf5\x39\x30\x4b\xac\x21\x66\xe2\x67\x4a\xe8\xbf\x01\xbc\xf7\x65\xdb\x71\x4b\x10\x72\xa4\xac\xa9\x76\x97\x3d\xaf\xe3\xde\x5d\x79\xb2\xc5\x64\x05\xad\x9b\xfd\x4e\xfc\x5b\x78\x90\xd1\xd0\x48\x05\x13\x1c\xe9\x4e\x13\x47\xc0\xf9\x15\x58\x01\xa5\x37\x68\xc6\x78\xd3\x8d\x8f\xb5\xe6\x68\x5b\xdb\xa3\xb5\x55\xd2\x2d\x3c\xa9\xfb\x9a\x0a\x4a\x22\xa5\x12\xff\x5d\xfa\xa8\x1f\xba\x37\x0d\xb7\xf0\x5e\x06\xf8\x4f\x9c\x05\x47\x10\xba\xf7\x27\xb7\x70\x17\xd4\x4b\x2e\xa5\xc9\xdc\x89\x34\x76\x24\xa8\x13\x89\x6f\x9c\x88\x79\xcc\x18\xe6\x80\xfd\x2e\xb8\x99\x9e\xcf\x0d\x3c\x6e\xe1\x29\x70\xc9\xe0\x0a\xaa\x26\x33\x4e\xd2\xe1\x5a\x49\x20\xe6\x10\xb7\xd1\xe3\xcd\x8e\xc4\x48\xe9\x56\x56\x74\xd4\x02\x97\xdc\xae\xe0\x20\x88\x68\x09\xad\x73\xda\x72\x51\x23\x97\xfa\xa6\xfb\x84\x18\xdf\x4b\xb6\x75\xea\xa8\x69\x44\xb6\x4d\x9e\xa6\x63\xf2\x34\x1d\x93\xa7\x89\xbe\xb2\xfb\xe1\x22\x91\xc3\xff\x7d\x05\x6c\x4b\xf6\x1e\xd8\x9e\xec\xc0\xa7\xff\x26\xf0\xa4\x26\xce\x1d\xb4\x04\xf1\xce\x28\xad\x13\xb9\x87\x38\x85\x96\x20\xc6\x39\x46\x03\x9c\xd8\x9f\xbe\x89\xd1\x18\xb7\xbc\xa9\x49\x28\x1f\xa1\xca\xf7\x0e\x30\x42\xb7\x3e\x2d\x85\x46\x4d\xfa\x6f\x8e\x8f\x03\xf9\x69\x9b\x61\xfc\x49\xd8\x5a\xbd\x6a\xf1\xd4\xb5\x15\xa0\xde\xf3\xd4\x2c\x69\xe6\xae\x26\x9a\x86\xa8\xba\x08\x28\x3b\x26\x2e\xb3\xc9\x2b\x2a\xd0\x51\xbe\xed\x4c\x3a\xde\x94\x91\x6e\x3d\xd5\xd8\x52\xec\x5b\xe4\x2d\x7c\x54\x81\xab\x43\xcc\x98\xc1\x47\x4b\x48\xd6\x96\xe4\x29\x7a\x82\x16\x95\xfe\x67\xe0\x30\x3b\xca\x5a\xc2\xee\xc4\xda\xb9\xb5\x1d\x0b\x60\x6b\x27\xd3\xae\xef\x3a\xe3\x17\x5e\x0d\x1b\x3b\x33\xb7\x11\x51\x5b\x4f\x4a\x7d\xbf\x5b\x9a\xef\x69\xe0\x1d\xe1\x21\x1c\x4b\x4d\xdc\x1e\xc0\x11\x61\x6b\xbd\x44\x5e\xb7\xae\x12\xd4\x8a\xe8\xfc\xef\x84\xeb\x87\xf8\xf3\x88\x6e\x57\x96\x58\xa9\xf2\x90\xa9\x72\xa3\xf8\x28\xa2\x02\x65\x05\x2f\x59\xa5\xbe\x42\x53\x04\xec\x63\x4e\x32\x48\x77\x9b\xd9\x51\xfb\x28\x4d\xa4\xb0\xe8\xb5\x8c\x0d\x65\x6e\x3a\x58\x69\x53\x03\xbc\x16\x78\x34\xad\xdf\xe2\x5b\x72\xbe\xa8\xef\x28\xd9\xe8\x4c\xb4\x01\x4a\xb2\x71\x1c\x62\x6b\x1c\x62\xa7\x82\x18\xc2\x47\xf9\xad\x9a\xf6\x00\x2a\xf5\x69\x2b\x83\x44\x31\xfa\xce\x6e\x6d\x07\x32\x62\xb6\x61\x59\xca\x2e\xd7\x4b\x2e\x6d\xd6\x4f\x20\x3f\x50\xc1\x03\x68\x80\xc3\x2d\x7b\xd1\x14\xdd\x71\x4b\xd2\x15\x36\x8f\x31\x06\x7a\xe5\xaf\xe9\x90\x1a\xf1\xee\xf3\xc0\xb9\xfa\xc9\xeb\x4a\xb4\xed\x50\xb1\x6d\xcb\xbe\xb3\xe3\xf8\x3a\x58\xdb\xfe\x04\x99\x7c\xaa\xa0\xfe\x99\xb3\xa9\x6b\x5a\x5a\x7b\x55\x6b\x82\x92\x7a\x03\x96\x9d\x85\xeb\x80\xe1\x47\x67\xae\x63\xd8\xc7\x6d\x3d\xec\xf3\x16\xb3\xb3\x1d\xd1\xed\xe2\x23\x9c\x67\x03\xf0\x2a\x58\xc2\x6d\xe7\x91\x69\x9c\x25\x84\xce\x13\x23\x97\x8c\x49\x1d\xb2\xe8\x45\xa8\x6e\x5b\xcd\x0c\xe1\xe9\x0a\x19\x1f\x0a\xd2\x41\x79\x09\x47\x62\x8e\xd1\x0a\x33\x24\x8e\x3e\x75\xbc\x6c\x05\x4f\x37\x70\x03\x86\x29\xcd\x0e\x72\x21\xb7\xed\x93\xf4\xd4\x6b\x06\xc6\xd9\x64\x62\x1c\x90\xd1\x7e\x3e\x42\x42\xd4\xc1\xf0\x12\x2e\xf4\xa8\x5c\xb2\x55\x61\xc7\x31\x09\x32\x71\xd8\xd9\xb7\x3f\x15\xe6\xb3\x8d\x5b\xa8\x02\xed\x46\xec\x9c\x33\x5d\xf3\xe5\xe8\x8d\xe1\x23\xe8\x45\xab\x5a\xca\xb4\x47\x30\x05\x66\x27\x86\x8e\x80\xfe\xeb\xcd\xc0\x40\x59\x74\xfb\x6b\x8b\x0e\x6f\xe9\x98\xbb\xfa\xca\xa0\xc7\x8e\x0e\xf8\xb2\xef\x88\xf3\xc2\x16\x3b\x10\xe3\xe7\x90\x1b\xee\x1d\xc8\x35\x5f\x3c\x86\x99\x8f\x1c\x7b\xa0\x11\x1c\xf8\x91\x37\x85\x31\xdc\x2b\x0d\x31\x82\x39\x89\xc4\xda\xf0\x84\x1d\xab\x24\xf6\xda\xc0\xe0\x95\x4c\x9e\x02\xbf\x91\xe5\x9f\x58\x9b\x84\x0c\x81\x37\xaf\x96\x9b\xee\xca\x33\xeb\x98\xea\xb2\x29\xa8\x13\xf0\x04\x8f\x9b\x11\x77\xf4\x7d\xf9\xbe\xee\x75\xbb\x1f\x73\x56\xa6\x81\xe1\xc7\x91\x6f\x32\x2d\xcb\x37\x7d\x3c\xc7\x38\xc8\x7b\x82\x1b\x20\xca\x44\x61\x05\x23\xd0\x33\x22\x8b\x8c\x6f\xf2\xfc\x34\xbc\xb6\xcc\x64\xbe\x64\x4f\x1d\xb6\xf0\x99\x79\xd8\x95\xd7\x11\x2b\x94\xc9\x7f\x09\xd6\x07\xf8\x26\xfa\xfc\xc3\xfa\x08\xa4\xbd\x3f\xaa\x7f\x58\xd4\x3a\x26\x36\x66\xf6\x1d\xdc\x06\x52\x44\x5f\x96\xa0\x2d\xbb\x57\x30\x25\x9a\x94\x89\x3c\xa9\xb5\xee\x1e\x12\xe3\x0c\x7c\xdb\x8d\x43\xc7\xb5\x80\x88\x5d\x9a\x25\x46\xf1\xba\xba\x8b\xd5\x21\x9a\xbd\x50\xe7\x0c\xf5\xfd\x14\x13\x6f\x05\x45\xe5\x07\x74\x03\x91\x75\x8c\x83\x78\xc1\x72\x5f\xbe\x78\xe7\x80\x8a\xd4\x1e\x8b\xe6\xf7\x8f\xa4\x45\xcb\x9e\x73\x7f\xb6\x29\x24\x26\xc5\xd7\x18\xc1\xb8\x8d\x0c\x15\x23\x84\x96\xb1\xa7\xde\xd3\x77\xac\xb3\xab\x67\x6d\x41\x1f\xa0\xe5\x1d\x00\x6a\x40\xfa\x9a\x6e\x1c\xc2\x27\xba\x78\x3c\x83\x8e\xf1\x05\x24\xf1\x01\x92\x8f\xc0\x48\x30\xc1\xe9\x6b\xec\x57\x7f\x00\xa5\x7b\xfc\x89\x0a\xd9\x23\xd9\xf0\x5c\x6f\xd2\x16\xfa\xd1\x48\x2d\x8c\x71\x3b\xc5\x9f\xa8\x5e\xa8\x7c\x51\x38\xf9\x3e\x6c\xb2\xf1\x9a\xfb\xc8\xab\x7c\x14\xa6\xeb\x63\x7d\xf9\xc9\xab\x30\xea\x24\x1b\xc7\x7a\x44\x58\x7b\xa5\xba\xa3\xfb\x35\x63\x4d\x37\x6a\x03\xfc\x5a\x96\x9b\x41\xcb\x3b\xc1\x68\x09\xe9\xfa\x58\x3f\x01\x23\xc1\x81\x3c\x9a\xff\xc7\xc6\xfa\x16\xb3\xd3\x81\xb9\xdc\xff\xbf\x68\xac\x1f\x70\x8b\x2e\xae\x4e\x64\xe1\xfd\x58\xff\xb7\x8d\x75\xe3\x07\xc6\xba\xb1\x1f\xeb\x7f\x97\xb1\x46\xa7\x34\xe5\xf7\x18\xa8\x17\xf2\x1a\x41\x7f\xb5\xf6\x83\xbb\x65\x70\x63\x94\x7f\xd1\x0e\x6e\xcd\x50\x7e\xcd\xf3\x82\xcd\x09\x34\xc2\xec\xdf\x18\xeb\xbb\xb5\x24\x91\x30\x2d\xe6\xb4\xde\x53\xef\x5f\x5b\xec\xee\xf1\x88\x5d\x41\x16\x63\x2c\xd3\xbf\x7f\xf2\xce\x30\x1a\x41\x2a\x13\xc6\xf0\x49\x9c\xf4\x1f\x89\x6f\x9a\xab\x0b\x66\x55\xd9\x31\xb4\x68\x8f\x4a\x2c\x0e\x98\x0a\x74\x83\xd9\x85\xc3\x44\xf9\x63\x4c\xae\xe4\x31\xd1\x12\xab\x8e\xc7\xf2\x32\xb0\xc4\x0a\x9d\x98\xa2\x43\x11\x98\x72\x3c\x66\x98\xd2\x80\xbb\x9a\x4a\x74\x62\x8a\xce\x5c\xa3\x33\x05\x8a\x0f\xed\xe5\x19\xa6\xff\x8a\x99\xc0\x67\x0e\x14\xa1\x03\x03\xa1\x39\x0f\x5d\x70\x8e\x8d\x1b\x3b\xbe\x4b\x35\x30\x8a\x19\x46\x25\xd6\x18\x4d\x81\xa1\x34\x35\x51\x6a\x70\x94\xce\x0c\x94\xa6\x80\x67\xa9\xb0\xad\xfa\xa7\x76\x7f\x9b\x8f\x89\x2a\x98\xc1\xa5\xdc\x82\x4c\x81\x6d\xda\x9a\x6f\x16\x25\x2a\x55\xa7\x70\x3d\xe3\x42\xbc\x29\x6c\x72\xba\x0a\x7b\xed\xb3\x3d\xd7\xb7\xdc\xe4\x10\xee\x80\x76\xa5\x01\x2b\x63\x5f\x19\xb0\xbb\xfd\x24\x94\x94\x09\x23\xef\xc8\x9f\xc1\x2d\x0e\x1d\x47\x24\x53\x28\x71\xe4\xad\xfc\x19\x8c\x41\xde\x30\xb5\xf5\xdd\x6d\x7b\x0a\x53\x6c\x6e\x06\xdb\x0e\x8f\x5f\xe3\xb4\xaa\x6f\x13\x8f\xdf\x60\xcf\xe0\xd0\x17\xdb\x4c\xd3\x72\x9d\x13\x63\x0a\x53\xe2\x6e\xc2\xa8\xb8\xbb\x56\xf1\x45\xe0\x2d\x61\x06\x33\x7d\xb5\x2d\x7f\x64\x13\x53\x98\x04\x91\xe9\xa9\xac\x49\x99\x1a\x5e\xc8\x0e\x97\xf8\xbc\xfe\x75\xca\x8c\x9d\x08\xe0\xfb\xa6\xcb\x1a\x9f\xa0\x9a\x69\xac\x38\x3a\xf2\x27\xcd\xc8\xeb\xe3\xa7\x97\x14\x59\x34\x23\xaf\x8b\x4f\x37\x15\x59\x77\xf4\xe9\xf9\x0d\xd6\xca\xfb\x97\xb4\x72\xd6\x8c\xbc\x1c\x0f\x2f\x36\x14\x31\xed\x5d\x65\x91\xc1\x05\x65\x29\xfc\x41\x35\xd3\x33\x3d\x0a\x98\xe1\x1f\xbe\xb9\x58\xcf\x8c\xfd\xc1\x05\x25\x29\x1e\x5f\xb8\x4a\x4e\x2f\x28\x3b\xe3\x7b\x67\xe6\x92\x67\x3e\x39\x33\x8f\x2e\xe8\x26\x1c\x9f\x3a\x33\x47\x21\x1d\xac\xe3\x0b\xa2\x84\x95\x9b\x12\xaa\xc8\x14\xe8\xd6\xfd\x60\xcd\x30\xa8\xc1\x2e\xdd\xb5\x85\x0c\xbf\x8d\x5d\x19\x3e\xd9\x2b\x0d\x31\x37\x2a\x39\x30\x22\x98\xf8\xe7\xcd\x96\x69\x12\x46\x1c\x41\x0e\x98\x95\x4f\x67\x06\xa7\x91\x9a\x24\x53\x28\xe3\x68\xcd\x83\xfe\x45\x36\x60\x29\x4a\x02\xaf\x3f\x83\x7b\x65\x74\x31\x02\x3d\xf3\x69\x13\x4b\xf6\x61\xf5\x19\x1c\x2b\xb3\x0d\x0e\xd1\x10\xcf\xf1\x01\x70\xf3\xdc\x51\x68\xc6\x11\x78\x5b\x57\x6d\xfe\x55\xd1\xf8\x2d\x3c\x9b\x77\xbf\x56\x7e\x9d\xa2\xe0\x3e\xf3\xbd\x06\xc8\x0b\x86\xaf\x87\xcc\x8c\x23\x5f\x89\x73\xe5\xe4\x06\x6e\xa2\x07\x60\x34\x3b\x8a\x82\x97\x9d\xef\xbd\x8c\x66\x03\x46\xb3\xb7\xa0\xc5\x25\xb3\x99\xd4\x17\x78\x9a\x2b\x3f\xd3\x15\xc9\x0c\x86\x09\x71\xd8\x1e\x4c\xa1\x4a\x02\xaa\xf1\x07\xd0\x51\x07\xda\x43\xf8\x42\x57\x0a\x53\xe8\xa8\x12\x33\xf8\xe2\x9d\xc1\x0c\xee\x2e\x89\xc3\xda\x60\x0a\xa3\xcb\x80\xae\x1e\x4e\xa0\x23\xd3\xd0\x29\x7c\xa1\x8b\x8b\x03\xe8\xa8\x12\xef\xe1\x8b\x37\xf5\xd9\xe9\x90\x98\x3c\x77\xf8\x93\x37\xe7\xf2\x9e\xa0\x25\x16\x27\x4a\xcd\x1b\x18\x27\x9f\xd8\x00\x54\x2d\x71\x8c\x3b\x75\x06\x80\xcc\x2d\xbf\xda\x54\x9f\xf4\xa5\x86\x8d\x76\xc0\x2e\x21\x62\xb7\x7f\xba\xb0\xa3\xbc\xf9\xd4\x32\x86\xba\xed\xf8\xbc\xba\x6d\xe4\x9b\x3e\x00\x92\xea\x7e\x09\x17\xeb\x5f\x58\xd7\x07\x94\x42\x8c\xb0\xa9\x6a\x58\xec\xf9\x01\x5d\x3f\xd6\xfa\xb5\xb6\x62\xaf\xdd\x29\xa5\x08\x55\xd8\x0b\xd1\xe7\x19\xf6\x4a\x6e\xba\x22\x2d\xf5\xd9\xfd\xa5\xcf\x62\x6d\xc9\x45\x84\xb0\xa4\xd5\x16\xfb\x64\x8c\x5f\x72\x5e\x4d\xd6\x3e\xf7\x1e\x3f\x69\x94\x57\x10\xb2\xe5\x76\x53\x32\xdd\x13\x4c\x40\xfa\x5a\x98\xcb\x93\x15\x3c\xd2\x3d\x10\x7e\x82\xac\xb6\x3a\x59\xca\xec\x2f\x6c\xed\xd8\x0f\xed\x8f\x94\x6f\x70\xe8\xb8\x05\x66\x4a\x3a\xad\x5d\xe0\x14\xf5\xb5\x5f\xcf\x7d\xa9\x13\x0a\xa7\x01\x57\xc4\x14\xcb\x90\xa9\xb7\x53\x70\x27\xc7\x97\xe8\x3f\xc2\x13\x10\xe5\xbb\x7a\x0e\x27\xf0\x8c\x7d\xb4\xfe\x06\xf0\x8d\x2f\xa3\x72\xb8\x0f\xdc\x63\xe2\x55\xfe\x21\x4c\x15\x99\x13\x4d\xe6\xa4\x01\xb7\x40\xbc\xd2\x3f\x04\x22\xbd\x50\x12\x4d\xe6\xa4\x01\xdf\xd7\x2b\x4f\xde\xa8\xf2\x23\xf8\x16\x19\xdf\x99\xcf\x1d\x57\xa4\x9d\xba\x11\x58\x58\xbf\x3d\x48\x9e\x0f\x05\x90\x1d\xc3\x17\xc9\x7b\x47\xc0\x16\xb4\x7d\x75\xf5\x14\xaf\x79\x4b\x70\x29\x7b\x83\x5b\xa2\x4c\xbf\xc4\x39\x72\x5b\x9e\xb7\xd5\xe5\x9b\x19\x76\x47\x0d\xcb\x31\x73\x35\xea\x0b\x44\x07\x7e\xe4\x15\xcc\xa1\x5a\x8c\xdf\x2d\xae\x80\xa8\x35\x47\x85\xbf\xa9\x1c\x7f\xe4\xb7\xbc\x02\x3f\xec\x04\xbb\x60\xb0\xc7\x3b\xc1\x1e\xf9\x2d\xaf\x87\xdf\xdb\xb0\x72\x71\x59\x83\x3d\x60\xf5\x8e\xc9\x4e\xfd\x25\x2d\xaf\x8f\x1f\x6c\x58\xb9\x9c\x34\x61\xf1\x55\xcb\x58\x4d\xc4\x0e\x71\x29\x00\x3f\x80\x22\x5e\x3c\xf1\xe9\x52\x64\x09\x8f\x3e\x5d\x8a\xb4\xcd\xc2\xcc\x23\xa6\xaf\x63\xf7\x4a\x07\x70\x6d\xa4\xaa\x4e\x47\x3e\xc0\x37\x99\x78\x0e\xc8\xe4\x3b\x6b\x63\xe3\x8c\x08\xf1\x11\x2e\x24\x17\x9d\x43\x1a\x79\x85\xe1\xc9\x15\x0a\x6d\xdf\x53\xe6\x3e\x0d\x76\xbc\x60\x71\x95\x36\xf7\xcf\xea\x97\x63\xa6\x1f\x40\x46\xd9\xe4\x11\xbb\x56\xe8\x1a\x88\x20\xb1\x3c\x54\x41\xc5\x64\x1c\xa0\x44\x8c\x08\x15\xd8\xf8\xf8\xf9\x6a\x0a\xab\x96\xa5\x59\xcb\x1c\xd3\xce\x7c\xfc\xd1\xce\xac\x30\xdd\xa8\xdc\xfa\xcf\x56\x53\xd9\xd5\x34\x8c\x6a\xf0\x17\x66\x02\x85\x09\x1d\xf8\xb6\x69\x07\x42\x10\xbe\xa2\xeb\x9b\x58\x24\x8a\xb5\x4d\x70\x45\x57\x6c\x2f\x82\x2f\x5f\x02\x1f\x5e\x19\xc6\x10\x3b\xac\xf1\xb2\xba\x58\x6e\x6f\x0a\x65\x22\xf0\xbf\xc1\x9f\x25\xc3\x95\xb8\x27\x98\xbc\xed\xb0\x3d\x51\x81\x10\xd9\xa6\xa9\x27\x09\xb8\x32\x6c\x64\x26\xc6\x73\x15\xfb\x5f\x9e\xb9\xe6\x0c\x03\x11\x5b\x6b\x00\xda\x79\xb9\xa9\xd8\x35\x53\x68\x3a\x73\x3a\xce\x1c\xf2\x11\x02\x63\xca\xed\xbc\x26\x7e\xd6\xa2\x5e\x9e\x9f\xbc\xc1\x72\x18\x07\xc1\x4f\xbf\x96\x6f\x3a\xae\xe5\xb3\xda\xbc\x8b\x9d\xbe\x55\x17\x81\x57\x69\x2b\xcf\xf4\x11\x5f\x22\xe5\x4b\xbb\xc4\x9d\x67\xd6\x0a\xdf\x78\x3c\x21\x70\x05\xd0\xcc\xa2\xba\x85\xef\x0b\x0e\xdc\x7e\x56\x84\x28\x53\x34\x92\x75\xe5\xe0\x3e\xab\x43\x9f\x03\xef\x0c\xc6\xf8\xce\x79\xd8\x35\xc2\x54\x26\x9e\xf0\x83\x7d\x4e\xf7\x31\xbe\xc7\xc8\x71\xee\x75\x79\x29\x4b\x2d\x60\x89\x0f\x0c\x8a\xce\x6a\x26\x45\x0d\x78\xd8\xe6\x63\x16\xa3\x53\x60\xc6\xd4\x68\xe2\xd3\x7f\x25\xfe\x88\x25\xf8\x0d\x6e\x31\xa7\x87\xca\x67\xeb\x71\x7c\xac\x72\xc6\x98\x99\x0c\x1a\xb6\x80\xcf\x2c\x6b\x4f\x31\xbb\x28\xe0\x46\xe9\xb4\xcf\x3e\x1a\xf8\xca\xa0\x69\xe8\xb7\x98\xdd\xb2\x4e\xe9\x32\x63\x26\x12\x1a\x6c\xd8\xb3\x19\x32\x8a\xbc\x23\x1f\x65\xca\x8b\xf2\x73\xcb\x5b\xf9\xa8\x90\x37\x0e\xf8\xf8\x42\x1a\x9b\xae\xb3\x93\xf2\x9b\xae\xc5\x85\xf3\x03\x61\x88\xbe\xf4\x95\x1f\x6d\xfa\x84\xd3\xa0\xe6\xc7\x25\x63\xcb\xae\x70\xe4\xaa\xfa\x73\x24\x1c\xb6\xe6\x18\xe5\xe1\x56\xaa\xdc\xd5\xbd\x9c\xec\x1e\x2e\xa4\x67\x6f\xad\x87\xdc\x0d\x65\x6a\xf7\xd0\x8c\xc4\x27\x43\xe8\x6e\xee\xa1\x0a\x9d\xb7\x43\x0f\x7f\x7f\x1a\x2e\x37\xf7\x70\x25\x2f\x52\x6a\x3d\x1c\x48\x26\xac\xf7\xf0\x60\x2d\x8e\xe1\x64\x4b\x0f\x15\x26\xdb\x7b\x88\x67\xd0\x5a\x3b\x27\xdb\xe8\xcc\x6a\x7a\xc1\x5e\x32\x02\xa7\xe1\xfa\xae\xfb\xf3\x77\x71\x43\xb3\x34\xa2\x4e\xac\xe4\xf1\x6b\xb5\x6e\x09\xba\xf1\x20\xce\x65\x1d\xda\x36\xbd\x94\x49\x28\x75\x58\xfd\x9d\x19\xde\xf1\x73\x44\xb1\xa2\xac\xbf\xc7\xf8\xd6\x8f\x8c\xa0\xdd\x89\x63\x4d\xb1\x71\x9f\xd4\xab\x9b\xeb\x5b\xd7\x11\xcd\x63\x9c\x8b\x23\xf0\xfc\x08\x7f\xd9\xbe\xf1\xd1\x0e\xa7\x1d\xf3\x0c\x9f\xd4\x41\x6c\x3f\x60\xc3\xae\x1a\xcf\xc0\x0c\x45\xca\x5c\x5f\xdb\x3f\xe0\xf9\x6a\xb9\x6c\x67\x4a\xe3\x8a\x7e\xfd\x45\x47\xfd\x1e\x37\xe5\xf5\xa8\xa1\xbe\x32\xb5\xc0\xb0\x13\x75\xec\x63\x0b\xb0\xf3\x7c\x9a\x5d\x97\x51\xcd\x1c\x97\x50\x8f\x4f\x9d\xeb\xc7\x8e\x78\x1c\x73\x7d\x33\x85\x15\x88\x9c\x42\x41\x16\x0a\xb0\x40\xe4\x09\xc4\x29\x52\xd7\xb6\x96\x0f\xc5\x41\x98\x6d\x97\x66\xf0\x65\x18\xd8\x4e\xf1\xff\xd8\x85\xdb\x4e\xbe\xee\xc5\x03\x1e\x4a\x5f\xf7\x64\x81\xe7\x7e\xa0\xcc\xe4\x03\xd3\x03\xe7\x95\x0c\x23\xbb\x73\xc5\x8c\xfb\x3a\x5d\x59\xf9\x97\xbf\xe8\x7b\xb7\x2b\x3d\x6e\xe2\xbf\x0c\xcb\xd0\x9f\x10\x61\x31\xd5\x52\xa7\x5f\x0f\x1e\x51\x82\x72\x7d\x4c\xeb\x3b\x66\x33\xa8\x7d\x28\xfc\x01\xac\x0b\x86\x10\xc5\xf5\x78\xbf\x4d\xf4\xa6\x37\x98\x9a\xc5\x7e\x16\x61\x42\x4d\x98\xac\xbe\xca\x94\x51\x7a\x6b\x84\x59\xfb\x9a\xc0\x25\x8f\xd5\xbe\x02\x59\xf3\xa7\x27\xa0\xf2\x36\x5b\x82\xf4\xbd\x0a\x1f\x41\x28\xe3\x8d\x7b\x76\x4b\x92\x73\xe1\x32\xc4\xb7\x84\x78\x2b\x18\xe0\x05\x11\x54\xe8\xd4\x8d\x4f\x05\xf1\xda\x2c\x18\x4b\x4f\x88\xe9\x21\xbe\x09\xbe\xb0\x62\x93\xa0\x96\x81\x8f\xc3\x6b\xda\xfa\xda\x64\xd4\xf4\x4e\xf0\x85\x19\x66\xb2\x63\x85\xa0\x69\xbf\xc7\xd3\xab\x93\x0b\xaf\x82\x03\x3c\xbb\x3a\xbd\x90\x26\xb9\x64\xed\x88\x2c\x74\x7a\xd7\xd4\x72\xad\x48\x15\x89\xa5\x07\x7a\x0e\xcf\x2a\x2b\x00\x84\xe1\xe0\xe6\x5f\xa9\x33\x43\x22\x3f\xae\x62\x28\xe7\x2f\x94\x7e\x3d\x35\xdb\xbe\x76\x99\x5d\xc1\x3d\xd0\x49\xa8\x02\x7c\x84\xb6\x1d\xf3\x2d\xac\xb0\x37\x20\x08\x7d\x60\x86\x0b\x13\xe9\x58\xa6\x67\xbb\xe5\x40\xaa\x0f\xd7\xf3\xba\xc7\x16\x31\x65\xc1\x13\x0c\x80\xad\x03\x1e\x59\x38\x81\x73\x1d\x60\xc4\x3a\x8d\x7c\x0f\x47\x98\x85\xe4\x7e\x8f\xa5\x73\x61\xa8\x60\x62\xbb\xb7\xdb\xda\x0f\x6d\xed\x88\x1e\xf0\x08\x98\xdf\xe2\x13\x0b\x69\x71\x82\xdd\x44\x08\xd1\x07\x7c\x82\xbd\x03\x1f\xa1\x1b\xe6\xb2\x58\xfa\x89\x01\xb3\x03\x11\x88\xd1\x09\xc3\xc5\x66\xe6\x57\xdc\x05\xff\x81\x05\x53\x68\xf8\x6e\x22\xc4\xe8\xd8\x6f\x60\xaf\x22\x08\x7d\xc4\xde\x19\x46\xe7\xbe\x49\x84\x64\x47\x22\x58\x9d\x18\x48\xf3\x6e\xe1\x52\x66\x45\x5d\xb1\xea\x77\x1e\xa1\xc4\x8f\xf8\x58\x39\xff\x2e\xf1\x9c\x30\xbf\x83\x2c\xb4\x75\xa1\xa5\x23\xf2\xfa\x0d\x71\x42\x1e\x82\xc8\x9e\x93\xe1\xf3\x4b\x90\xc4\x11\x2b\x26\xf4\x5b\xff\x9e\x73\x17\x47\xee\xb9\xfb\x62\x55\x7e\x88\xbf\x4a\x4d\xde\xc0\xd1\x00\x8c\x49\xbe\x92\x8e\x32\x09\x7a\x82\x23\x1e\xcc\xff\x8e\xed\x9c\xd1\x07\xee\xf1\xfb\x91\x79\x63\x9d\x41\x62\x30\xb5\x3c\x92\xfb\x08\x4b\x60\xb0\x1c\x88\x4e\x44\x7d\x55\xa1\x3f\x36\xa0\xbe\xec\x72\x87\x17\xc0\x9a\xe0\x75\x2f\xb7\xc2\xc7\xe8\x10\xd7\x04\x42\xe9\xab\xe0\x20\x37\xfe\x59\x93\xed\x1c\x87\x3e\xdb\x87\xbf\xe7\x11\xfe\x6f\x58\x50\x8a\x49\x6d\x2a\xc8\x1b\xc8\x99\xdf\x00\x06\xcb\x81\x56\x7e\x62\xc4\x3d\xd2\xa3\x35\x92\x7d\x3d\xf6\x57\xc0\x9a\xe0\x75\x1f\x6c\x85\x8f\xd1\x2d\xa9\xc9\x8d\x05\x51\xa1\x21\x1e\xc8\x79\x53\x3a\x35\x97\xaa\x7d\x74\x8b\xa9\x3a\x3c\x22\x26\x5d\xe5\x12\xe1\x94\x1c\xf1\xb6\x39\x50\x19\x24\x72\x38\x6b\x74\x9a\xc8\xbe\x0e\x83\x06\xb0\x26\x78\xdd\xf3\xad\xf0\x29\x7a\x0c\x1a\xa6\xe8\x3a\xab\x45\x7c\x70\x09\x31\xd7\xf6\xae\xe7\xb8\x3a\x5d\x5b\x1e\xdd\x35\xeb\xd2\xac\x19\xca\x72\x87\xcd\x93\x26\x1b\x8e\xb1\xcf\x38\xe2\xa3\x72\x33\x3f\x07\x74\xde\x34\x47\x50\xda\x2e\xbd\x6f\xae\x38\xf7\x70\xa0\xd1\x45\x62\x6c\xc5\xf4\x88\x0c\x24\x55\x66\x17\x4b\x3e\xe2\xbc\xee\xd5\x56\xf8\x18\xb5\x4d\x3f\xda\xb0\xbe\xe4\xb3\x82\x24\x6c\x36\xc0\x4a\x0f\xf1\x87\x0b\x79\xbb\x33\x30\xcc\x3f\x06\xd0\xc0\x8b\x0b\xe6\x36\xd3\x51\x37\x61\x61\x64\x5a\xaa\x84\xca\x19\xaa\x34\xc2\x39\x6c\xdc\x64\x3f\x23\x41\xf5\x9d\x8c\x25\xf8\x63\x11\x1a\xd8\x91\x83\x1f\x63\xe1\x6c\xa8\x63\x8c\x95\xb0\x69\x27\x93\xd5\x8d\xe7\x5c\x8b\x27\x0e\x8c\xbf\x22\xef\x1c\xfc\x8c\x89\xa2\x30\x5c\xdf\x08\xf6\x5c\x1b\xc1\x9e\x63\x23\xd8\x73\x6c\xfa\x36\xa6\xd9\x75\x19\xd5\x34\xb0\x0a\x7a\x58\x5b\x12\xd7\x9d\xcc\x7b\xe2\x0e\x64\x81\xbd\x69\xe0\x93\x27\xfc\x6f\xd9\x7f\x11\xae\x4e\x41\xf1\xaf\x74\xec\xb4\x6f\x30\xa3\xfd\x92\x75\x55\x8c\x3f\x02\x1b\xd8\x11\x96\xf1\x33\x96\x2c\xee\xd0\xc0\x30\x39\xec\xe8\x70\x8c\x27\x46\x55\x03\x23\x46\x76\x47\xf6\x4a\xde\x56\x9b\x20\x0b\x0d\xb2\x04\xfc\x88\xf9\x58\x9c\xc0\x13\xfe\x67\x9a\x14\x8e\x93\x3c\x99\x90\x6d\x07\x51\x04\xfd\x06\x5f\x3b\xd8\xb8\x3c\xe3\x4b\xfc\x1b\x9f\xee\xea\xcd\xc3\x55\xf9\x5b\xfa\x4b\x7f\xc3\xd1\x93\xe5\x5e\xdd\x44\x4d\xf9\x1d\x98\x58\xc5\x40\x59\x98\x81\xdb\x42\x23\xa2\x28\x21\x4e\x4b\x9e\x76\xbd\x8b\xbd\x97\x7a\x05\x12\x19\xd3\x8a\x13\xe8\xe4\xd2\x4e\x39\xbf\xd4\xdf\x3d\xda\xb8\xf6\x74\xc5\x20\x6c\xbe\xe4\x30\xe6\xe5\xdf\x69\x20\x6a\x22\xbb\x56\x8e\x5f\xd9\xad\x54\xf1\xd6\x01\xdd\xd6\xa3\x0c\x84\xc6\x87\x9d\xd6\xcf\x2f\xdb\x2e\x97\xe7\x29\xb0\xb8\xa2\x25\xb7\x39\xb7\x26\x42\xe2\xa0\x64\xbe\xc5\x5f\x9f\xea\x9d\x5b\x7c\x0b\x6c\xc1\x86\x13\x3b\x74\xe6\x6b\xaa\x3b\xa4\xd5\x9d\x01\xfb\x24\x89\xf1\x09\xc3\x81\x8b\x05\x42\x07\x0b\x84\x75\x16\x70\x2d\xd6\xed\x89\x45\x6e\x2e\xb9\xb6\x9e\x02\x87\x1a\x01\xc2\x33\xa0\xb9\x32\xa5\xcf\x12\xfa\x3a\xa1\x82\x0d\x29\x23\xa3\x9e\x39\x4f\xaa\x57\x8d\xfd\x19\x70\xf5\x2c\x0d\x3b\x02\x64\xde\xc3\x0e\xe0\xce\x2f\x41\xdb\x63\x4f\xfc\xaf\x3a\x0b\x5d\x46\x2f\x82\xcd\xd6\x61\x65\x9c\x81\x1f\xaa\xb7\xbb\x0e\x2b\x0f\x64\x5f\x5d\x2f\x8e\x58\x7c\xd4\x11\xa8\xfb\xc0\x31\x23\xf0\x08\xa4\x74\xa1\x09\xb4\xfb\x23\x50\x0b\xa5\x31\x0f\xbf\x3b\x02\x3e\x5d\x79\x4a\xc1\x12\xf8\x67\x3a\x51\x32\x06\x2f\xbb\xf1\xbf\xc8\xf8\x00\xa5\x9f\x47\x5e\x7e\xe3\x5f\xb9\xee\x3a\x4b\x3f\x8b\xbc\xe2\xc6\xbf\x70\xd9\xcd\x95\x7e\x1c\x79\x25\xdc\xf8\xd8\x65\xf3\x5f\xfa\x38\xf2\xfa\x37\x7e\x1c\x3a\x2c\xf2\x4a\x3f\x90\x9f\xdc\x14\x6b\x4d\xf9\x8d\x31\xbe\x32\x7d\x84\x21\x46\xae\x18\x98\x35\x73\xc6\x15\x84\x2c\x91\x28\x87\x1d\x76\x04\x26\x5e\x69\x69\xce\xc7\x44\xb9\xf9\xe0\x80\xce\x19\xa2\x0e\x43\x1d\xef\x7d\xf5\x3e\x65\xef\xba\xfe\x5d\x3c\x86\xe8\xb2\x51\xc2\x9f\xe9\x9c\x73\xfd\x78\x66\x16\x3d\xc5\x2b\x1c\x78\x2b\x38\xc1\x37\x3e\x9b\x7e\x26\x2a\xb9\x85\xca\xc8\x46\xa5\x67\x75\xdd\x7e\xaf\xc0\xc2\xa5\xfb\x42\x5c\x06\xb0\x3b\x32\x8b\x3d\x32\xbf\x39\x32\x8d\xff\x0c\x64\xf0\x95\xe8\x42\x43\xaf\x21\xfa\xca\x12\xa7\x50\x4f\x32\x5c\xa2\xe8\x8f\x0d\x4d\x14\x34\x31\xc3\x1b\x4b\x89\xb1\x1b\x38\x11\x02\x67\x64\x98\x37\xcd\x8d\x8f\xc6\x2c\xf4\x25\xcc\x48\x3f\x4a\x15\x2a\x68\x6f\x3a\x33\xad\x17\xae\xea\x01\x1c\x65\x71\x3e\x56\x9c\x72\xeb\xad\x9b\x6b\xfe\xf9\x5a\xf5\x4a\x19\xf3\x4f\x08\xb9\x7a\x60\x56\xb0\x32\x72\x57\xba\x82\x15\xf3\x55\x61\xb4\x35\x6e\x14\xfb\xf6\x8d\xa2\xc4\x72\x60\x60\x60\x7c\xe1\xb7\x63\x33\xde\xc0\x26\x9c\xb1\x73\x59\x80\x58\x95\x23\xa2\xcf\xdf\xd4\x2a\x75\xaa\xcb\x94\x46\xe6\xd4\x40\xd4\x68\x7e\x09\xd6\xa8\x18\x05\x47\xac\xc8\xd2\x28\x52\x19\xed\xac\xe1\xa0\x4e\x36\x30\xb7\x65\x30\xf4\x3d\x32\x3c\xae\x64\xa1\x41\xbd\xe7\xaa\xa5\xa5\x8d\xf9\xd4\x00\xe4\xa8\x9b\x24\x2a\x8d\xed\xef\x54\x0f\x40\xa9\x4f\x4f\xa7\xc6\xf4\x1c\xe8\x6a\x27\x06\xe6\x7a\xcc\x7a\x1a\xf1\x09\xd8\x03\x36\x71\xb0\x9f\x2c\xc3\xf1\x9e\x1b\x65\x46\xe0\x6c\xc6\xf8\x24\xef\xc8\x18\x13\xf3\xe6\x7a\x62\x3c\x1b\xdf\x92\x96\x27\x07\x44\x96\x99\x1b\x58\x8f\xc0\xbc\xd9\x54\x68\x8f\x0c\xc0\x91\x73\xac\x47\x46\xc7\xe7\x1b\xe6\x5a\x5f\x63\xb8\x30\x00\x4d\xe6\x19\xd4\x78\xca\xaa\x71\x61\x00\x4e\x6b\x3c\x6d\xd5\x38\x70\xd7\xc8\x91\xae\x8c\x59\x5a\x68\x3a\x15\x16\x81\xbb\x96\x44\x35\x9b\x9d\x80\x19\x2f\x5a\x51\xa9\x5c\x9b\xff\x13\xdd\x78\x57\x53\x69\x64\xc0\xad\xb3\x84\x99\xde\xd5\x14\x9b\x6e\xa8\xdc\xb8\xa8\x30\x19\x6e\xb4\x81\x11\xcc\x74\x71\x1e\xf5\x01\x77\xe9\x54\x3b\x63\xfa\xac\x78\x91\x32\xe8\xbf\x48\x19\x8c\x5e\xa6\x0c\xf2\x1f\x51\x06\x25\xfc\xa0\x36\x98\xfe\xa8\x36\x58\xfe\xa8\x36\xe8\xef\xa0\x0d\x4a\xd8\x4d\x1d\xcc\x77\x54\x07\x8d\xd7\xa8\x83\xe5\xcb\xd5\xc1\xd1\x6b\xd4\xc1\xc9\x6b\xd4\xc1\xd1\xae\xea\x60\xfe\x0a\x75\x30\x79\xb1\x3a\x58\xbc\x42\x1d\xac\x5e\xa1\x0e\x96\xaf\x50\x07\xcb\x5d\xd5\xc1\x7c\x47\x75\xb0\xda\x55\x1d\x34\x76\x55\x07\xab\x5d\xd5\x41\x63\x57\x75\x30\x79\xa9\x3a\x98\xee\xaa\x0e\x46\x3b\xaa\x83\xf9\x6b\xd4\xc1\x72\x57\x75\xb0\x78\x99\x3a\x18\xed\xd5\xc1\x5e\x1d\xec\xd5\xc1\x5e\x1d\xec\xd5\xc1\x5e\x1d\xec\xd5\xc1\x5e\x1d\xec\xd5\xc1\x5e\x1d\xec\xd5\xc1\x5e\x1d\x98\xea\xa0\xb1\x57\x07\x7b\x75\xb0\x57\x07\x7b\x75\xb0\x57\x07\xff\xe5\xea\x00\x3f\xe1\xc0\xeb\xe1\x8b\x40\x38\x12\xf8\x21\xf1\x72\xec\x07\xf2\xd3\x28\x3e\x21\x5e\x0f\x63\x99\xfd\x1e\x57\x3e\xf1\x56\x70\x8e\xef\xa8\xfa\xa8\x97\x2b\xc1\x2a\x58\xa8\x82\x25\xfc\xba\x92\x8d\x57\x94\xc4\x97\x81\x11\x9a\x2a\xd9\xf1\x03\x3c\xcc\x9c\xb6\x5f\x2f\xb6\x93\xbb\x64\xd3\x74\x25\x2c\x94\xcd\x5f\xbb\xde\x6e\x2a\xbc\x94\x21\xf0\x32\xbc\xcd\xe0\x2d\x74\x7c\x12\xc8\x8a\x95\xa2\xbf\xfa\x28\xba\xd5\x91\xb6\x4a\x2b\x6d\x04\xdb\x7e\xc6\xdf\x5a\xd6\x98\xea\x2f\x36\xe0\x27\x1e\x5f\x4b\x18\x8a\xf6\x11\x0a\x9e\x79\x6d\xab\xd7\x42\xe5\xb6\xeb\xc0\x1b\x5f\xdb\xea\xb5\x40\x61\x8b\xa2\xdc\x51\xea\xf2\x0b\x7f\xe5\x53\x19\x93\x80\x76\x90\xc8\x9e\x73\x6b\x30\x51\x5f\xb7\xfe\x9a\xd7\x5f\xfb\xf5\xd7\x9e\xf1\x8a\x89\x61\x93\x2f\x32\x88\xc8\xe8\xaa\x0c\x51\xc1\x5f\x66\x0f\xda\x7a\x6e\xeb\x2e\x18\xef\xb9\xf5\xde\xb7\xde\x7b\xe6\x3b\x36\xe0\xb5\x2a\xa9\x75\x84\x67\xc9\x5a\x6a\x5d\x49\xb4\xed\x8a\xee\x4a\x69\x75\xa5\xb4\xba\x52\x5a\x5d\x29\xad\xae\x94\xba\x2b\xa5\xd5\x95\x52\x77\xa5\xb4\xba\x12\x2b\xb1\xab\x7b\x52\xd4\x3b\x52\xd4\xfb\x51\xd4\xbb\x51\xd4\x7b\x51\xa8\x4e\x14\xf5\x3e\x14\xaa\x0b\xc5\x6f\x3b\x2e\xbf\x94\x18\xa9\x63\x9a\xf4\xb6\xce\x8b\x62\xf3\x24\xc2\x1a\x58\x39\xb1\xc8\x1e\xf4\xea\x5f\xbd\xee\xd5\x7b\xd0\xde\x46\x5e\x07\xf9\x8b\x6d\xc3\x85\x0d\x78\xa4\xb2\x6a\x1d\xe1\x59\x85\x35\x1c\xa9\x6b\x9a\xf4\x9e\x99\x16\xc5\xb6\x69\x84\x0d\x78\xa4\xb2\x6a\x5d\x29\x75\x57\x4a\xab\x2b\xf1\xe6\xc1\x5e\x67\x85\x62\x33\xdf\x60\x0d\xac\x82\x1f\xd4\xfa\x50\xa8\x2e\x14\xbf\xed\xb8\xfc\x12\x62\x24\x2d\x6e\x09\xdb\x56\x15\x64\xf5\x39\x9a\xd5\xab\xcf\xea\x7d\xc9\xea\x3d\xcd\x36\xcd\xd1\xcc\x35\x47\xef\xfc\x0a\xe8\xd2\x78\xe2\x7f\xe0\x9e\xcb\x6b\x4a\x2d\xab\x2b\xb5\xac\x3e\x1f\xb3\xfa\xe4\xcd\xea\x53\x3b\xdb\xa4\xd4\xb2\x4d\x4a\x2d\x75\x09\xcf\xcc\x12\x9e\x99\x35\xea\x99\xc5\x25\x99\xc5\x45\xd9\x66\xe1\x99\x6d\x16\x9e\xa9\x4b\xa9\x65\x96\x52\xcb\xac\xd9\x98\x59\xb3\x37\xb3\x66\x77\xb6\x59\xa9\x65\x9b\x95\x5a\xea\x90\xe3\xff\x1c\x8f\xfc\xb6\xe3\xf2\x4b\x89\x91\x3a\xa6\x49\x6f\xeb\xbc\x28\x36\x4f\xa2\x0d\x4a\x2d\xdb\xa4\xd4\x52\x97\xf0\x5c\x27\xaf\x83\xfc\xc5\xb6\xe1\xda\x28\x3c\xb3\xcd\xc2\x33\x75\x29\xb5\x75\xb6\x77\x4c\x8b\x62\xdb\x34\xda\xa8\xd4\xb2\xcd\x4a\x2d\x75\xc8\xf1\xb5\xc1\x5e\x67\x85\x62\x33\xdf\x6c\x90\xe3\xd9\x26\xa5\xf6\x5b\x8e\xcb\x2f\x21\x46\xd2\xe2\xf6\xcb\x5a\xa9\xf5\xea\x73\xb4\x57\xaf\xbe\x57\xef\x4b\xaf\xde\xd3\xde\xa6\x39\xda\x73\xcc\xd1\x12\xf6\x5a\x6d\xaf\xd5\xf6\x5a\x6d\xaf\xd5\xf6\x5a\x6d\xaf\xd5\xf6\x5a\x6d\xaf\xd5\xf6\x5a\x6d\xaf\xd5\xf6\x5a\x6d\xaf\xd5\xf6\x5a\xed\x77\xd5\x6a\x8d\xbd\x56\xdb\x6b\xb5\xbd\x56\xdb\x6b\xb5\xbd\x56\xdb\x6b\xb5\xff\x00\xad\x86\x6f\x71\x8b\x3e\x57\xa0\xe2\xfc\xe1\x5b\x16\x4b\xa8\x02\x4d\xae\x5b\xf0\x0a\x1c\x99\xf6\x31\xfd\xfa\x87\x6d\xdb\x7e\x87\x70\x2c\xba\x0e\x2c\x38\xa7\xe6\x86\x0c\x9c\xf9\x73\x66\xe9\x36\xf5\x1f\x79\x65\x66\xc1\xc2\x2a\xc8\x0d\x40\x45\xf7\x7e\x5d\xc9\xc6\x2b\x4a\xd2\xc1\x15\xe1\x99\xa4\xe1\x9d\x11\xb1\xc9\x4c\xaa\x8c\xa4\x29\xa0\x70\x0c\xcc\x88\x6d\x0e\x2a\x84\xd9\x3d\x0f\xdb\x5f\x4f\xc9\x59\x82\x88\x86\x17\xde\x03\x1f\x66\x6e\x58\x44\x86\x18\x19\xef\x03\xb8\x25\x66\xa4\xa9\x8a\x7c\x55\x39\xe8\x52\x7c\x13\xaa\x06\x39\x15\x06\x80\xaf\x87\xec\xae\x41\x4a\x73\xcd\xd7\xd7\x99\xaf\x41\xca\x58\x8e\x36\x64\x09\x6b\xa0\x32\xe4\xa1\x09\x1a\x0c\xfc\x96\xd7\x6d\x3e\xfa\xc4\x0e\x30\xa7\x0d\xdf\x7a\xf5\xc8\x69\x95\x15\x94\x98\xe0\x20\xf0\xba\xd8\x57\x0c\xee\xa7\x94\x51\x88\x88\x88\x5a\x3c\xf9\x4b\x9f\xf2\xde\xca\x9f\xf9\x8c\x45\x64\x4e\x09\x4f\x82\x2d\x57\xfe\x07\x66\x6d\x6e\xe6\xfc\xb3\x85\x1a\x9b\x0b\x35\x1c\x85\x50\x33\x32\x41\x0b\xd4\x69\x89\xb0\x84\xe2\x9d\x45\x04\xbc\xe0\xec\xac\xc3\x0b\x35\xe5\xb7\x74\x2c\xa8\xb9\x86\x1a\x30\xa8\x13\x17\xd4\x89\x86\x5a\x02\x8a\xa9\x54\xf1\x19\xa5\x79\xe2\xbb\xff\xff\xbf\x01\x00\x00\xff\xff\xb4\x36\xa3\x31\xcc\x09\x01\x00"), }, "/static/lib/elm-datepicker": &vfsgen۰DirInfo{ name: "elm-datepicker", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), }, "/static/lib/elm-datepicker/css": &vfsgen۰DirInfo{ name: "css", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), }, "/static/lib/elm-datepicker/css/elm-datepicker.css": &vfsgen۰CompressedFileInfo{ name: "elm-datepicker.css", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 2085, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xac\x55\xdd\x6e\x9b\x30\x14\xbe\xcf\x53\x58\xaa\x2a\x6d\xd2\x8c\x08\x6b\xda\xcd\xbd\x9c\xf6\x1c\x93\xc1\x07\x70\x03\xc7\xc8\x1c\x42\xba\x6a\xef\x3e\x19\x30\x85\x00\xe9\x56\x35\xdc\xc4\xf6\xe7\xef\x7c\x3e\xbf\x41\xd2\xd8\xda\x58\x5e\x19\x8d\x04\x96\xbd\xf4\x6b\xc1\x86\x8d\xc7\x3f\xbb\x5d\x50\x1a\xa4\x9c\xbd\xec\x18\x63\x2c\x07\x9d\xe5\x24\x58\xf4\x10\x56\xe7\xc7\x9d\x3b\x4e\x64\x01\xa8\xa4\xfd\xc5\x02\x25\x09\x78\x62\x90\xa4\x46\xc7\x76\x79\xde\x02\x1c\x73\x90\xaa\x3b\x73\x74\xa5\xb4\x99\x46\x4e\xa6\x12\xec\xb0\x41\x38\x40\x13\x53\x38\x61\x37\x3f\x42\xf7\x3d\xf6\x7b\x17\x6a\x67\x12\xbf\x76\x0a\xdd\x4e\xab\x15\xe5\x82\xdd\x8d\x1b\x4a\xd7\x55\x21\x9f\x05\xd3\x58\x68\x04\x9e\x16\x30\x9c\x3c\x35\x35\xe9\xf4\xb9\x7b\x04\x20\x09\x96\xc0\x2b\xb3\x2c\x74\x86\x5c\x13\x94\xf5\xfc\x20\x35\x48\xbc\xd6\xbf\x41\xb0\xe0\xe1\x60\xa1\xec\xb7\x63\x99\x1c\x33\x6b\x1a\x54\xdc\xab\x4f\xd3\x74\xf5\x91\x01\xe5\xba\x9e\x3a\xda\x5f\x88\xa2\xe8\x7b\xb4\x71\x27\xb5\x06\x69\xc0\x2f\x6d\xd9\x2c\x96\x9f\xc2\x2f\xdd\xf7\x79\x9d\xc0\x5d\x9a\x47\x22\x36\x44\xa6\xdc\x0e\x46\x6f\x33\x28\x4d\x53\x83\x39\x8d\x71\x5c\x79\xe9\xcf\xee\x37\x38\xc2\x58\x05\x96\x5b\xa9\x74\x53\x0b\x76\x08\x6f\xaf\x91\xd7\x24\xed\xf6\xb3\x6e\xe2\x30\xb9\x53\xf0\x1e\x62\x40\xf5\xb1\xb4\x8e\xe6\x1d\x72\xc9\x54\xbc\x80\x94\xe6\x06\x26\x80\x3e\x0a\x2b\x98\x4d\x11\xff\xfb\x34\x27\xc1\xba\x3a\x79\x4b\xc3\x0a\x68\x53\x44\x0c\xd4\x02\xe0\xdb\x42\x1c\x03\xe9\x12\x2a\x9d\x1c\xc7\x1c\x1a\xea\xf6\xfe\xa2\x6c\xbf\x79\x5d\xd3\x5e\xb1\x1f\xbb\xcf\x84\x26\xa8\x9b\xf8\x09\x12\x1f\x8b\x4a\x2a\xa5\x31\x13\xfb\x0b\xc2\xc8\x13\x9e\xc0\x92\x4e\x64\xc1\xbb\xba\x16\xa5\x56\xaa\x58\x8a\x0b\x72\xd3\x78\x89\x3d\xc1\xde\x3b\x61\x8a\x2a\x35\x36\x63\xaf\xba\x82\x3b\x69\x68\x2f\x50\x5e\xcf\xe0\x80\x31\x10\x04\x67\x1a\xb4\x4d\x9b\x4d\x1f\x1f\xc1\xc2\xea\xcc\xd0\xe0\x8a\xe2\xa6\xe2\x71\x43\x64\xf0\xba\xa1\xe8\x70\xfb\xaf\x8c\xca\xb4\xf8\xd1\x9c\x2e\x29\xe6\x6c\xec\xb0\xe2\x30\xf7\x7f\xe1\xb4\x31\x0f\xbb\x96\xc9\x67\x33\xa5\x47\x3c\xcc\xd3\x46\xb0\x90\xc9\x86\xcc\xca\xad\xa0\xb2\x70\xe2\xd3\xde\x3b\xc9\x93\x25\xba\x5f\xb9\xd8\xcc\xd0\xf7\xde\x5e\x37\x0b\xda\x61\x06\xc5\xa6\x50\x8b\x11\xb1\x8f\x7c\x42\x4e\x22\x3c\xce\x93\xa5\x45\x74\xa8\x2b\xfa\x54\x37\xbf\x78\x4f\x30\x40\xfc\x84\x7b\x9d\x6c\x9b\xc3\x6b\x31\xf2\xea\x4a\x26\xc0\x65\x57\xba\xce\xc2\xdf\x00\x00\x00\xff\xff\x47\x61\x08\x3b\x25\x08\x00\x00"), }, "/static/lib/font-awesome-4.7.0": &vfsgen۰DirInfo{ name: "font-awesome-4.7.0", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), }, "/static/lib/font-awesome-4.7.0/css": &vfsgen۰DirInfo{ name: "css", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), }, "/static/lib/font-awesome-4.7.0/css/font-awesome.css": &vfsgen۰CompressedFileInfo{ name: "font-awesome.css", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 37414, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xd4\x7d\x5d\xaf\xe3\xb8\x91\xf6\x7d\xff\x0a\xbd\x33\xc8\x3b\x3d\x83\xa3\xd3\x47\xb2\x8f\x3f\x4e\x90\x4d\x66\x37\x08\x36\x40\xb2\x09\x90\x09\xb0\x17\x7b\x43\x51\x25\x8b\x6d\x4a\xd4\x90\x94\x7d\xdc\x8b\xf9\xef\x0b\xc9\x1f\x7a\x24\x9b\xa5\x5e\x60\x6e\xf6\x20\x48\x8f\xa5\xa7\x4a\xa4\x58\x2c\x16\x8b\x0f\xa9\x4f\x3f\xfc\xbf\x0f\xd1\x0f\x51\xf4\x27\x53\xfb\xe8\xc7\x23\x39\x53\x51\xb4\x7c\x5e\x3f\xbf\x44\xd9\x29\xfa\x43\x2e\x0e\xb4\x13\x75\x7e\x8a\xe2\xa8\xf4\xbe\x79\xfb\xf4\xa9\x30\xb5\x17\x67\xe0\xb3\x32\x51\x1c\xfd\x01\xae\xf4\xba\xfe\xa2\x24\xd5\x8e\x42\x22\x9f\xf4\xe5\xfe\xc7\xee\xa1\x6f\xd1\x3f\xfe\xfc\x97\xe8\x6f\x7f\xfa\x4b\x94\x3c\x27\x4f\xd1\xbf\xfd\xe3\x1f\x6f\xd1\x5f\xff\xfc\xd3\x55\xc9\xf7\x1f\xa2\x1f\x3e\x7d\xf8\xf4\x43\xf4\xa7\xbf\xfd\xc7\x4f\xd1\xdf\x7f\xfc\xe9\xdf\xbb\x47\xc4\xc1\xbf\x0e\xdd\x17\x28\x2e\x84\xa4\xe8\xbf\x3f\x44\xd1\xe5\x57\xa5\xf4\xe9\x2d\xfa\xae\x7b\xe6\xa5\x9e\xdf\xfd\xf6\x43\x14\x39\x2b\xdf\xa2\xd6\xea\x8f\xdf\x3d\x3f\xf7\x05\x75\x58\xdc\xf8\x48\x59\xf7\xf3\x99\x8c\xff\xfd\xe1\x77\xfd\x8b\xf9\xee\xfb\xff\xa5\xdc\xb7\x8a\x0a\xf5\xfe\xff\x6f\xe2\x51\x61\x6c\x25\xfc\xc7\xef\xa8\xca\x28\xcf\x29\x8f\x4d\x43\xb5\x3f\x35\xf4\xdd\xf7\x4f\x5f\xa1\xf3\x68\x8a\x22\xfd\xfd\xbd\xba\xfe\xfa\xd7\xab\x08\x68\xf8\x3a\x05\xde\x3f\x92\xf7\xb6\xa5\xaf\xaf\x87\x3b\xec\xae\x3a\xbe\x85\xfb\x96\x76\xad\x16\x16\xd4\xba\xc3\xee\xfc\xd2\xfb\xa6\x3c\x92\xda\x95\xfe\x2d\xaa\xbb\xbb\xfa\x76\xd9\xf9\x93\xa6\xe1\xea\x2f\x1f\x9e\x0b\xd1\xb7\x7f\xae\x5c\xa3\xc5\xe9\x2d\x52\xb5\x56\x35\xc5\x99\x36\x72\x7f\x15\xbb\x0a\x4c\xfe\x49\x96\xcd\xfb\xa7\x24\x02\x63\x19\x9e\xa3\xbe\x50\xa7\xab\x24\xab\x7c\x77\xd5\xd3\xbb\x8f\x2d\xd5\x39\x59\x55\xef\xde\x22\xd1\x7a\xd3\x5d\xef\xea\xb9\x57\x3e\x3e\x4b\x55\xc6\xf8\xf2\x7c\xbf\xf6\x4a\x68\x25\x1c\xe5\x3d\xac\x32\x5f\x62\xe3\xde\xef\x70\x3b\x2b\x4e\x4e\x0a\x4d\x5d\x65\x3e\xfd\x10\x55\x62\x4f\x2e\xf2\x25\xf5\xe5\x88\x16\x8b\xdf\x44\x5a\xd8\x1d\xd9\xc8\x92\x16\x5e\x1d\x28\xf2\xa6\xbf\xaf\xa4\xa9\x23\xd9\xbd\x51\x55\x93\xed\xba\xc4\x73\x21\x62\xbd\x1b\xba\xc3\xb9\x12\xc9\xf3\xe2\xf2\x47\x55\x57\x94\xfe\xf5\x94\x97\xd7\xfb\xf2\xbc\x7e\x3d\x5f\x3e\x90\xf5\x4a\x0a\x1d\x0b\xad\x76\xf5\x5b\x14\x27\xaf\xbf\xb9\xbc\xe0\x38\x7d\x9f\x2a\x4d\x3b\xa1\xf3\xcd\xc5\xdd\xcd\xc5\x70\x73\x79\x77\x73\x39\xdc\x7c\xbd\xbb\xf9\x3a\xdc\x2c\x8e\xfd\xcd\xa3\xca\x7d\xd9\x55\x22\xdd\xbc\xae\x93\x65\xba\x3d\x97\xb6\x6f\x8e\x4b\x49\x25\xd5\x9e\xec\x55\xae\xd5\xbd\x5c\x23\xf2\x5c\xd5\xbb\x58\x53\xd1\x55\xb3\x93\xa9\x84\xdd\xa9\xfa\x72\x25\x7d\x4e\x96\x67\x95\xd7\xb7\xe2\x2e\xd6\x15\x77\xb6\xdd\x59\x4c\x4d\xa0\xf3\x5f\x22\xad\xce\x8a\x8d\x53\x5e\x99\xfa\xed\xd6\x20\x57\xd4\x1d\x40\x64\xce\xe8\xd6\xf7\x56\x75\x7e\x6a\x3c\x7d\xec\xa5\x7a\xd3\xcb\xde\x34\x5d\xdb\x4c\x2e\x06\xeb\xac\x15\x34\xfd\xe5\x49\xc9\xf3\xf9\x85\x6d\x56\xc3\x3b\xcd\x8c\xcd\xc9\xe2\xfb\x79\x8b\x9e\x53\xaa\xa2\xe7\xf4\xb5\xfb\xff\xe4\x62\x0b\x67\xdc\x5b\xe4\x8c\x56\x79\xf4\xf2\xfc\xb2\xa1\x2a\xfa\x96\xfa\xbf\xe1\x7e\x6c\x45\xae\x5a\xf7\x16\x3d\x27\xc3\x23\x9a\x56\xeb\xfe\x15\x9f\x9b\x56\x1b\xe1\xdf\xfa\x22\x8d\x00\xb6\xb3\x3e\x44\xf4\x17\x2e\x90\x7b\x35\x97\x96\xb3\x67\x9b\x7d\x1e\xec\xeb\x81\xc2\x51\x2b\x5f\xa1\x9f\x7e\x88\xfe\x48\x8d\x25\x29\x3c\xe5\x91\x70\x91\x29\xa2\xe5\xf3\xf2\xf9\xa5\xef\x36\x73\x45\x9a\xab\xd3\xf3\xd7\x96\xf6\x6b\x8a\xda\x55\xc9\x35\xaa\xee\x11\x57\xef\x22\x6a\x55\x89\xb3\x51\x5d\x6f\xa7\x2e\x52\x75\xa1\x6a\xe5\xa9\xef\xd2\xc2\x76\x2d\xf3\x95\xc0\x5b\x53\x38\x9a\x7b\x4e\x02\xe2\xce\x53\xe3\x3e\x6e\xbe\x0f\x3c\xe9\x31\xf4\x97\x0f\x7f\xb8\xaa\xdf\xd3\xa9\xb0\xa2\x22\x17\x61\x25\x5f\x7e\xd3\xff\x33\x94\xc2\x5b\x51\xbb\x6e\x58\x78\x8b\xac\xf1\xc2\xd3\xc7\x97\x9c\x76\xfd\x53\xa3\x88\xb9\xf9\xcb\x87\x28\x4a\x5e\xbe\x42\xdd\xe2\x75\xcb\x29\x84\xdb\xbf\x74\xc5\xff\xbf\x59\xec\xae\x85\xcf\x77\xe2\xed\xcb\xb9\x95\x2b\x17\x17\x4a\xfb\xae\x6b\x7f\xd3\x58\xb3\x53\xf9\xdb\x1f\xff\xf3\xcf\x95\xd8\xd1\x4f\x57\x6d\xcf\x7f\x55\xd2\x1a\x67\x0a\xff\xfc\xaf\xc2\x29\xd9\xdf\xfd\xd8\xeb\x51\xa6\xfe\x5d\xf2\xfd\x37\x38\xea\xdd\x17\x62\x7b\xab\x56\xf7\x34\xee\x7e\xf8\xde\xa8\xec\xc9\xe6\x57\x2b\x7c\x3a\x57\xf8\x64\x33\x53\x7a\x00\x30\x37\x47\xe5\x4f\xd7\xbf\x5a\xf9\x17\x73\xe5\x4f\xd7\x33\xe5\x07\x00\x73\xf3\x32\x00\x6b\xd5\xc4\xa5\xb1\xea\x4b\x17\x63\xe8\x5f\xab\x12\x2f\x4f\x51\xa5\xac\x35\x96\xb1\xa5\x3e\x20\xfa\x18\x27\x4f\x51\xf2\xa8\x32\xd3\xdb\xc1\x5b\x50\x91\x6b\x78\xf3\xab\xd9\xd2\x57\x57\x23\x79\x8a\x62\xa6\x1a\xc3\xed\xe0\xad\x5f\x3e\xbc\x59\x63\x7c\x34\xea\xd1\x4f\xf7\x17\x93\xcd\xa3\xab\xe9\x7a\x74\x75\xd2\xac\x77\xb7\x46\x2f\xea\xfa\x92\x30\x18\x72\x5e\xc8\x7d\x30\x14\x62\x22\xf1\x6b\xac\x73\x8e\x31\xae\x11\x68\xfa\x20\x2a\x4d\x1f\x87\xa4\x95\xca\x73\x3d\x2e\x47\x9c\xbc\x3f\xc1\xaf\x4b\xa0\xca\x85\x60\x2f\x50\x94\xce\xeb\xf2\x91\xd5\xf5\x21\xe7\xc8\x0a\xcb\x78\x9b\x1b\xfc\x72\xff\xfc\xc7\x81\xb2\xaa\x0f\x64\x2f\x03\xae\x34\xda\xd8\xb7\xe8\xdb\xa2\xff\xbb\x84\x28\xa3\xe9\x79\xeb\x2e\xf3\x80\x7f\xd6\x4a\x9a\x9c\xa2\xbf\x5b\x75\x10\x9e\xa2\x7f\x3a\x8a\x7e\xb4\x24\xa2\x8f\x7f\xff\xe7\x8f\xdf\x77\xb3\x01\xaa\x5d\x6b\x29\x72\xd2\x12\xd5\xdd\xe0\x60\x49\xe4\x64\x5d\x94\x9b\xa8\x36\xbe\xff\x19\x99\xa2\x88\xac\xa8\x73\x53\x45\xb2\x14\x56\x48\xdf\x21\x7c\x29\xba\xfb\x8d\x25\x47\xb5\xef\xe7\x14\xee\x3a\x95\xd8\x69\xe1\xdc\x5b\x46\x85\xb1\xd7\x42\xd7\x9e\xba\xd9\xd4\x37\xff\x55\xbc\xbc\xbc\x7c\x73\xad\x58\xd5\x3a\x25\xc3\xc0\xe4\x06\x74\x24\xac\x2c\xc3\xc8\xf4\x86\xa4\xfa\x40\xda\x34\x14\x9b\x30\x7a\x71\x43\x97\x24\xac\x0f\x03\x97\xdf\x40\x2b\xd9\x30\xee\x75\x84\xe3\x1e\xbd\xba\x21\x5b\x47\x8c\xc6\xf5\x0d\x57\x28\x5d\x85\x71\x9b\x1b\xce\x97\x71\x3f\xdf\x0b\x63\xb7\x80\x0d\xa3\xc4\x48\xa3\x72\xcc\xeb\xc9\x6e\x50\x59\x92\xdc\x87\x81\xf2\x06\xb4\x54\x99\xc3\xb5\x8c\xe7\x0e\x28\xb5\x71\xe3\x2b\x5e\x55\xc4\xd8\x4f\x3e\x31\x8b\xb8\xd1\x2d\x03\xa7\x29\xbc\x52\x35\x83\x4f\x06\xf3\x6c\xcc\x91\x6c\x6c\x8a\x22\x0c\x06\x13\x55\xbb\x5a\xe8\x30\x72\x30\xd1\x1d\xdd\x6c\xe9\xf2\x06\xcc\x2e\x2c\x37\x18\xab\xb7\xc2\x95\x8c\x71\x25\x83\xb9\x96\xa6\x0a\x1b\x42\xf2\x8a\xc6\xc5\xf5\x94\x64\x30\x57\xd9\x39\x63\x0e\x3a\x58\xac\x35\x22\x0f\xe3\x06\x8b\xcd\xcd\xb1\xd6\x2c\x76\xb0\x58\x61\xad\x39\xc6\x52\x59\xd9\x15\xb8\x17\x0d\x8b\x89\x90\x58\xdb\x84\x85\x06\x63\x56\x75\x66\xde\xc3\xc0\xc1\x98\xbb\xd1\xea\xa6\x3c\x2c\x90\x7f\x33\x89\xec\xce\x13\x3c\xb4\x00\x4b\x0d\x89\x70\x4f\x4b\x08\x3a\x50\x61\xc9\x85\xfb\x6f\x3a\x58\x64\x9f\x99\x10\x3a\xac\x36\x1d\x6c\xb2\x6b\xdd\x30\x6e\xb0\xc1\x42\x8b\xb0\xad\xa6\x4b\x74\xac\x79\x53\x9a\x9a\xe9\xc7\xe9\x60\x86\x07\xa3\xdb\x8a\xd8\x9e\x96\xae\xa6\x68\xd6\x06\xd2\xf5\x14\xce\xb4\x7d\x3a\xd8\xe4\xcf\xb6\x1b\x32\xc3\xc8\xc1\x22\x33\x31\x03\x05\x47\xca\xbd\xb3\x0c\x61\xcc\xdb\x1a\xcc\x2e\x33\x86\x69\xab\x7c\x84\xab\x84\x65\xb0\x83\x59\x35\x56\xd5\x8c\xa1\x14\x83\x1f\x10\x15\x59\x11\x44\x2e\x06\xef\xd9\xe7\x4f\x83\xb8\x04\x8a\xa9\xc3\x2e\x60\x31\x98\xa8\xf2\x42\x33\xd1\xc2\x02\x1c\x65\x17\x95\x5d\xc2\xad\x20\x7c\x39\x86\x9f\x03\xbb\x20\x7a\xb0\xd5\x3e\xda\x3b\xa7\x5e\x82\xe8\xd5\x04\x7d\x0e\x0d\xc3\xf8\xf5\x04\x6f\xf9\xa2\x6f\x26\xf0\xcf\xad\xf3\xaa\x38\x85\x05\xb6\x23\x9f\x10\xc6\x0d\x26\x9b\x53\x4e\xf5\xd8\x47\x99\xd6\xc3\xb5\x07\xd2\xe8\x41\x79\xe4\x60\xcb\x07\x95\x93\x99\x35\xaa\xc1\xa6\x9b\xd2\x78\x33\x2a\x96\xea\xa6\x57\xa3\x2b\x8d\x92\xbe\xb5\x9c\x4b\x5e\x80\xe1\x53\x2d\x55\x78\xd8\x5e\x42\xb0\x2a\x9a\xb8\xeb\x4e\x4c\x43\x2e\x07\xab\x16\x79\xd7\x2a\x61\xe4\x60\xd7\x9e\xeb\x79\xcb\xc1\xaa\x29\x57\xe3\x06\x39\x17\x3d\x76\x3f\xb7\x82\xad\xed\x12\xc2\xd8\xb2\x83\xce\x4b\xbc\x8e\x23\xbb\xaf\x90\x58\x8d\xc7\xdc\xb0\x23\x5b\xae\x21\x58\xa6\x26\xce\x84\xdc\x1f\x85\x0d\xbb\x80\xe5\x60\xee\x85\x70\xfe\x2b\x04\xd0\x49\xcf\x61\xc5\x68\x34\x0f\xe3\x06\xe3\x6e\x44\xeb\xc2\x6e\x7f\x29\xa1\x7a\x26\x3c\xe6\x2c\x73\x70\x94\x96\x2f\x23\x8d\x5f\xc0\x1c\xfe\xf5\x65\xfc\x86\x67\xf1\x83\xd5\xd2\x67\x92\x61\x63\x7c\x4d\xd1\x2c\x0e\xd6\xcc\xf8\xc1\xd7\xc5\x1d\x9e\xf7\x6c\xaf\x4b\x68\x8d\xd6\x5d\x62\xab\x30\x7c\x30\xd3\x3e\xa6\x9f\xc5\xaf\xa0\xd3\x55\x34\x8f\x5f\x4f\xba\xc1\x1c\x1e\xe2\x88\x96\x9c\x57\xa6\x9e\x15\xd9\x82\xd3\x2c\xcc\x2c\x7c\x30\x57\x69\x8d\x73\xa5\x50\x36\xdc\xd5\x5e\xb3\x87\xf5\x65\xba\xf1\xab\x7c\x58\x63\x4e\x02\xe2\x0d\x11\x8e\xc7\x5e\x69\x12\x93\xb3\x86\xb3\x7a\x99\xa0\x79\xb3\x59\x25\x13\x38\x13\xeb\xad\xd2\x09\x96\x0d\x23\x57\x0b\x70\xff\x4a\x4f\xba\xd2\xd3\xe0\x53\xc3\x1a\x06\x93\xa6\xf7\x46\xd4\xe1\x6e\xb8\x02\xa7\x6b\xaa\xc6\x12\x93\x43\x59\xad\x46\x1d\x25\x8c\x5b\x8f\x7b\x48\x18\x08\x31\x85\xf3\x64\x95\x0b\x87\x8d\xab\x2d\x54\x49\x6a\x71\x5e\xcd\x99\x33\xdd\xd5\x60\xba\x3b\xc5\xb5\xfd\x60\xb4\x9a\x44\x78\x42\xb0\x92\x30\x8b\xe5\x1a\x60\x30\x50\x3a\x31\x30\x42\x58\xec\xb4\x60\x26\x59\xeb\xc1\x3e\x8f\xc2\xd6\xaa\xde\x8d\x2c\x02\xdf\x8a\xb7\x4a\xd4\x3b\xe6\xbd\xac\x13\x1c\x81\x6a\x06\x08\xde\x57\x68\xaa\x73\x26\x23\xb5\x1e\xec\xf6\x9c\xba\x0b\x23\x97\x68\x75\x15\x17\xb6\xad\xc1\xdd\x8a\x5d\x4d\x0c\x72\x75\xe7\xf8\x99\x2e\xb9\x5e\xdf\xa1\xd9\x4e\xb9\xde\xc0\x6c\xd8\x1f\x89\x2b\xc8\x16\x42\x1f\xd3\x34\xaa\xde\xc5\x92\x4b\xf9\xad\x05\x0c\xcb\x3a\x67\x62\xbd\x75\x36\x41\xf6\x34\x9d\x30\x5c\x4e\x02\xa4\xf8\x10\xc6\xe6\x53\x2c\x63\x8a\x84\x33\xd2\x58\x96\xc2\xfa\x78\x1c\x21\xdf\xae\x07\x95\x6c\x06\x7b\xf6\x47\xe5\x3d\xd9\x4b\xc4\x17\x96\x48\x20\x26\x91\xd4\x4d\x35\x67\x45\xd2\xc9\x24\xb2\x6b\x3d\x1b\x1e\x59\x36\x83\x0d\xef\x29\x1c\x99\x6d\x96\xa3\xc4\x9a\x9b\x66\xd6\xc2\x3e\x6f\xf3\x3a\x35\x7d\x06\x0b\xa1\x43\xd9\x56\x99\xe3\xb3\x49\x9b\xf5\x3d\x9c\xb5\xe9\xcd\x66\x9c\x42\x2e\x85\x0e\xbb\xbe\xcd\x76\x9c\xc0\x66\x86\xe7\x8d\x18\x25\x28\xbb\x49\x5c\x18\x0b\x9e\x57\xd5\x7b\xca\x55\x3d\xdb\xa6\x72\x5c\xcf\xd8\x0b\x26\x8f\xb4\x01\x57\xfc\xee\xc9\xd6\x42\xf7\x4f\x0a\x0b\xd0\xb8\xf4\x2a\xfc\x02\xb7\x60\xc2\xd6\x34\x65\xd8\x60\xb6\x09\x0c\x44\xbe\x6c\xb3\xb9\x4a\x6e\x07\xc3\x6d\x1b\x36\x61\xb9\x5d\xc0\xd8\x55\x99\x9a\x69\x98\xed\x12\xe7\xb4\x8c\xdb\xdf\xc2\xe2\xc2\xdc\x2c\x6c\xbb\xba\x4b\xfe\x70\xe8\xf5\xb8\x08\xb3\xef\x61\x33\xf5\x12\x61\xe8\xf6\xde\x3d\x14\xa3\x9e\x79\xbd\x1c\x56\x21\x26\xcd\x14\x46\x0e\x76\xdb\xd6\x6c\x22\x73\x0b\xe1\xad\xed\xe6\xd3\xdd\x60\xc0\x34\x27\xcc\xd1\x88\xc6\x51\x9f\x65\xa2\xb3\xed\x60\xb6\x65\x9e\x33\x2d\x20\x06\xa3\xcd\x5a\xad\x4b\x63\xc3\x06\x2e\x20\x63\x46\x3a\x9c\xb1\x28\x60\xd2\x45\xd6\xab\x42\x49\xe1\xc3\x8d\x2a\x60\x31\x4c\xd4\x79\x6c\x66\x62\x6d\xb1\x9c\xe2\xd9\x48\x5e\xbc\x4e\xe1\x8c\xd7\x14\xab\x29\x98\xf5\x99\x62\xfd\x38\xcf\xcf\x17\x68\xf3\x58\x68\xa6\xd6\x81\x95\x08\xae\x32\x81\x55\x08\xbe\x4a\x83\x29\xef\xb4\xc9\x98\x66\x1b\x2c\xf9\x68\xa9\x66\xd6\x46\x45\x0e\x09\x66\xb7\x0f\x5b\xad\x20\x5c\x16\xe2\x7a\x77\x06\x66\x6b\x15\x15\x52\x30\x09\x91\x2c\x99\x06\x33\xdc\x92\x44\x06\xcb\x64\xd6\xdc\x5e\xef\xd3\x6d\xc9\x34\x5c\x7e\xf9\x02\x61\xa4\xb8\x0d\x15\x4f\xb7\x01\x2d\x2c\x99\xe0\x32\x57\x1b\x76\x08\x32\xc5\x85\x10\x66\x8a\x24\xa1\x13\xb6\xe3\xac\x9d\x93\xca\x39\xc3\xd5\x03\x23\xf2\xe6\x34\xf6\x9a\x4a\x93\x63\x1c\x8a\x7c\x85\x34\x55\x43\x56\x6a\x15\xb6\x50\x39\x74\x37\x27\x26\x8b\xb2\x85\x36\x4d\x73\xe2\x9e\xb4\x9e\x0c\x4b\x61\xe4\xd0\xe3\x6a\x71\x50\xd2\xd4\x93\xa5\xaf\x33\x67\x74\x12\xb1\x32\xef\x67\x9c\xcd\x8e\xdb\xb0\x2f\x94\x62\x0c\x35\x0c\x34\x83\x00\xcc\xaa\x3d\xf9\xd2\x9a\x76\x17\xee\x57\x52\xc2\xa8\x93\x93\xd5\x8a\x19\xc4\x25\x76\xc2\x8c\x99\x0d\x4a\xc2\x39\x16\xb3\xdc\x91\x63\xbc\xd3\x32\x63\x5e\x0e\xf3\x4b\x55\x7b\xb2\xc4\xa4\xa5\xf3\xf4\x1e\x3c\xd7\xbe\xf9\x60\xeb\x3b\x63\x76\x9a\xce\xb9\xbb\x39\xa9\xe5\x23\xa9\x30\x1c\xe6\x9e\xa6\x66\xa6\x03\x39\x4c\x3d\x85\x25\xcf\xfb\xdb\x7c\x3d\x41\x33\x0e\x3d\xdf\x4c\xb0\xec\x38\x93\x6f\x27\x68\x7e\x80\xc9\x21\xb1\x67\x74\x5b\xd5\xcc\xab\xc0\x70\xc7\x19\xeb\x27\x91\x49\x77\x29\x2c\x0c\xe9\x69\x63\x47\x6f\xe7\x09\xae\x92\x63\x2c\x2f\x1f\xab\x98\x38\xe9\xfe\x9a\xe0\xe4\xe9\x8e\xac\x13\xc4\xd2\xcb\xdd\x94\x24\x8c\x4d\xa6\xeb\xec\xd0\x40\x4f\xd7\x8e\x1a\xf6\x68\x04\xab\xe1\xb4\xbb\x51\x39\xce\x92\x3b\x71\xa0\xb0\xf3\xa0\xa1\x0b\xe4\xc2\x95\x99\x99\xe6\x08\xbd\x90\xa5\xa9\x88\x1b\x54\xe9\x2e\x11\xc3\x78\x5f\xba\x9f\xba\x72\xe8\xd5\x68\xd8\x2a\xc7\xbe\xd6\x30\xc3\x31\x81\x97\x57\x9e\x2a\x11\xee\x1e\x34\x74\x8f\xb6\xca\x2c\x69\x1d\x5e\xd0\xa3\x2d\x0c\x53\xce\x4f\xf9\x40\xaa\xc1\x37\xf8\x40\x1c\xdd\xfa\xae\xf4\x59\xab\x33\xae\xfa\x19\xe6\x2b\x4b\x51\x33\x24\x29\x92\xe3\x50\x60\x9e\xa4\x42\xf9\x44\x62\x66\x8e\x48\x34\xa2\x80\xc5\x55\x18\x5a\x8c\x16\x72\x7c\x69\x9c\xe4\x3a\x4b\x01\x64\xa4\x56\x79\x36\x2a\x2b\xd2\xd1\x6c\x82\x9b\xa3\x40\xda\xc6\x14\x05\x31\x3a\x97\x18\xf4\x68\xb2\x61\x2f\x5d\x4c\x28\x48\xfd\x12\x7c\xb8\x0c\x05\xcc\x6b\x5b\xa5\xfb\xfd\x39\x0c\x7a\x0d\x3c\x28\xd7\x28\x2f\xb8\xfa\x15\x30\x21\xa8\xb2\x56\x8b\x5a\x32\x55\x1c\x0c\xb7\xa2\x7c\xaf\xc2\x3d\xa7\x80\x44\x62\x67\xa3\x64\xe3\xcf\x4c\xa2\xb2\xc8\xa0\x3d\x18\x2f\x51\x0c\xf6\x59\xce\x0d\xb1\x45\x3e\x5e\x4d\x9b\x83\xc3\x12\x4d\xbd\xeb\x67\x2a\x6d\x36\x33\x9d\x4a\x80\xcc\x39\x12\x62\x47\xbb\x04\x98\x9d\x23\xa9\xf0\xe8\x9b\x00\xc5\x73\x24\xc2\x0d\xef\x09\x30\x3d\xcf\x42\x7c\x5d\x96\x13\xf4\x4c\x25\x5e\x27\x70\xae\xf4\xab\xbb\xd2\x73\xc5\x5e\x03\x0f\xc3\xed\x99\x65\xe4\x04\x08\xa0\x5a\x34\x2c\x72\x3b\x0e\x41\x99\x8a\x09\x88\xb5\xb2\xae\x7b\x62\x86\xea\x09\x6e\x84\x55\x00\x35\x74\x66\x05\x31\x01\x76\xe8\xcf\xad\xf1\x73\x8d\x94\x4f\xd0\x33\x8d\x04\x19\xc4\x46\xd5\x75\xb8\x6b\x25\x40\xfc\xe4\x97\xb2\x12\x60\x7d\xf6\xab\x82\x96\x1a\x7d\x9a\xf2\xf9\xf4\x29\x2c\x9f\x4e\x33\x90\xcc\x94\x38\x01\x06\xe8\x75\xa1\x21\x8c\x5d\x3e\x5a\x94\xe0\x04\x20\xbb\x58\xb1\x64\xd0\x04\x98\x9b\x85\x35\x47\x56\x2b\xba\xc9\x92\x03\x42\x92\x4f\x54\xd4\x84\xc7\xcd\x04\x08\x9a\x7b\x3a\xf5\x01\x02\xa7\x58\x8e\x28\x8b\x1c\x32\x1f\x23\xfb\x75\x6f\xb2\xc4\x94\x84\x80\x3a\x66\x2b\xc5\xd0\x7e\x93\x14\x8c\x8a\x61\x0b\x26\xe9\x23\x93\x8a\x85\xd6\xf7\x66\x05\x57\x1f\xe8\x49\xef\xd7\x11\x62\xaa\x1a\x3f\xb6\xcf\xe1\x5e\xd1\x4e\x9e\x31\xdc\x0a\xbf\x33\x20\x84\x6a\x23\xcf\x0b\x9d\x7d\x72\x27\x2c\xb1\x44\xe2\x42\xd8\x4b\xa5\xaf\xa3\xf7\x15\x17\x26\xcc\x5f\x4c\x80\x13\xda\xd6\x90\xe1\x79\x1a\x92\x40\x71\x66\xcd\x3e\xbc\x2c\x97\x00\x4f\xf4\x4a\xd9\x08\x63\x37\x23\xae\x46\x18\xf7\x70\x7d\x3c\x0c\x87\x25\x9a\xb6\x21\xeb\xa4\x55\x4d\xd8\x1d\x00\x61\xd4\xb5\xd9\x1c\x78\xe8\x06\x64\x05\xb3\xe3\x20\x01\xde\x68\xd3\x7e\xf9\xd2\x39\x7d\x45\x92\x31\x58\x48\x54\xa8\xae\x49\xb9\x45\x8c\x04\x68\xa1\x03\x9a\x5f\x64\x4f\x80\x22\xea\x4a\x45\x61\x92\x68\xb2\xb8\x5f\x19\x67\x8c\x17\x88\xa2\x85\xb2\x14\xd3\xbb\x57\xf5\xae\x55\xae\x64\x5e\x0f\xd0\x45\xad\x91\x7b\x66\xf4\x5c\xe0\x2a\xf9\xbb\xcc\xc3\x0d\xbf\xb8\x5f\x25\xff\x8a\x0c\x76\xb2\x58\x87\xc4\xf8\xa1\x10\x68\xa3\x13\x39\x26\x70\x01\xea\xe8\x44\x88\x8d\x60\x80\x49\x5a\xfa\x4a\xbf\x86\x81\x10\x28\x38\xb7\x08\xe3\x60\xf9\xbc\x96\xa5\x61\x5a\x2a\x9f\xac\x06\xb1\x83\x2b\x30\x41\xb3\x56\x6b\xc7\x50\x44\x12\xe0\x82\x92\xd6\xaa\x71\x8a\x59\x98\x4f\x80\x0b\x7a\x43\x1f\xc2\xe8\xc1\x84\xad\x9b\x0b\xd5\x13\x60\x85\xc2\x1e\x84\x30\x1c\xb8\xce\x8a\x35\xde\xe5\x94\x51\x37\x57\x90\xd5\x43\x3c\xd3\xfb\x80\xfe\xa9\xe9\x40\x9a\x33\x3e\x60\x7e\x9e\xb1\xac\xcd\x2d\xb7\x0f\x49\xab\x61\xbc\x98\x90\x80\x67\x05\xb2\xc7\xcb\xd7\xb3\x72\xf2\x21\xff\x36\x8c\xcf\x47\x44\x30\x66\x2f\x5d\x02\xd4\x50\x6f\x76\x93\x89\xc5\x13\x64\x1f\xaf\xed\xc2\xbf\x42\x60\x8e\x5e\xd4\x4d\x92\x7b\x13\x65\x4c\xdb\x01\xa9\xf4\xa2\xea\x7e\xd7\xcb\x44\x1b\xef\xbe\x80\x7c\x4a\xad\x1d\x33\x5c\xa8\x0d\xfb\x03\x20\xa1\xee\x32\xa6\xbc\x4b\xd8\x97\xa4\xf5\x64\x87\x56\xeb\xc2\xa3\x0f\xb0\x50\x6d\xdb\xd0\x78\x9e\xa4\x6a\xa6\x64\xe0\xff\xeb\xc9\xfc\xa1\xca\x46\xbf\x4f\x34\x6e\xd4\xcf\x4d\x78\x76\x01\xac\x55\xdb\x0e\x6b\x0d\x17\xc5\xe6\xfe\x52\x78\x69\x3d\x01\x46\xeb\x71\xb2\x6e\xb3\xb7\xe1\x68\x0f\x58\xad\x99\xf2\xd2\x4c\x16\xe3\x32\x2f\xc3\xa2\x62\x94\x19\x0a\xe3\xb2\xfb\x0c\x52\x18\x3c\xc9\x7a\x0b\xdd\x94\x82\x4b\x52\x27\xaf\xf9\x23\x09\x2e\x2f\x9e\x00\xc5\xf5\x2c\x52\x99\xb6\x66\x53\xe1\x09\xf0\x5c\x51\x84\x7d\x0c\x90\x5d\x7b\x99\xba\xad\xc8\x2a\xc9\x3f\x27\x7d\x2c\xc3\x3f\x68\x31\xe5\x30\x31\xdd\x1d\x68\xae\x17\x30\xeb\x68\x80\xeb\x7a\x32\xad\x6f\xb3\x59\xa7\x08\x8c\xd7\x8b\x44\x18\x3a\x74\x80\xf7\x81\x9a\xf9\x00\xb7\x19\xe1\x66\x4b\xb0\xbd\x2b\x33\xb7\x65\x20\x01\xc2\x6b\x6e\x4d\xc3\xec\x29\x4c\x56\xb8\xf8\x28\xe4\x3e\x36\x07\xb2\x85\x66\xe6\x53\xc0\x7e\x55\xb5\xf3\x62\x67\x45\x15\x06\xe3\x14\x57\xc9\x7d\xd8\x25\x01\x0b\x56\x30\x91\x2b\xf0\x5f\x33\xe5\xb3\x96\x8d\x29\x80\xe0\x7a\x03\xcf\xbd\x6b\xe0\xba\xfa\xb6\xca\x74\xb8\xc4\xc0\x74\x3d\x23\x67\x55\x2f\x61\xee\x5a\xef\xbe\x82\x05\x9e\x00\xf1\x15\x44\x98\xde\x00\xfc\x57\x10\x60\xa3\x7a\x20\xc1\x82\x08\x3f\x24\x02\x11\x56\x34\x0d\xe3\x2c\x81\x06\x7b\x54\x75\xce\x6c\xcf\x49\x80\x00\x2b\xea\xdc\x1a\x15\x1e\xf8\xd6\x23\xbe\x60\x1b\x36\x6f\xe0\xbe\xe6\x56\x65\x59\xc6\x15\x15\x1c\xef\xfe\xd4\x30\x40\xa0\xab\x98\xd6\xce\xb4\x3a\x32\x5c\x2d\x69\x1d\x0e\x50\x91\xd9\x4a\x95\x60\x8a\x0a\x84\x56\x1e\xb7\xc0\x74\x9f\x57\xe3\x90\x6a\x67\x85\x57\x0d\xe3\x47\x80\xe0\xea\x5a\x2e\xeb\xb6\xc1\x35\x72\xc3\x22\x71\xb7\x96\x2c\xd5\x81\x29\xfc\x1a\x26\x48\x61\x5f\x0a\xfc\xd5\x43\x38\x61\x03\xc4\xd5\x23\xa9\x8c\x29\xa0\x00\x8a\x77\x6d\x99\x04\xce\x06\x37\x66\xed\x48\x2b\x66\xcb\x71\xb2\x91\x13\x3f\x3b\xb7\x1e\x98\x6c\xf2\xd0\x5e\x72\xbe\x6b\x6e\x28\x24\xc7\x7a\x81\xed\x5d\x00\x7e\xb7\x86\x3d\x09\x9a\x79\x75\x09\x04\xb5\x7e\x3e\x15\x0f\x4c\xd7\x63\x49\xa4\x65\x29\x54\xd8\xf5\x02\xdb\xf5\xa0\x2a\x32\x73\x9e\x17\x28\xaf\xbe\xb5\x7b\xe5\xca\x58\xab\xdb\xb6\xcf\xcb\x42\x79\x78\xd1\x30\x01\x26\x2c\xac\x67\x71\xd5\x01\x82\x53\x23\x24\xc5\xae\x6c\xbd\x67\x7a\x2a\x30\x62\x9d\x66\x98\xcc\x09\x50\x61\x6f\x07\x8e\xcc\xd5\x1e\x6c\xdf\xd8\x9c\xdd\xdf\x93\x00\xf9\xd5\x34\x54\x33\x4e\x78\x9b\x8d\x02\x01\xe5\x5b\x48\x36\x5e\xd9\x54\x93\xcc\x68\x5b\xab\x03\x59\xa7\x3c\xf3\xae\x25\xf8\x12\xeb\x85\x8d\xef\x49\x0d\x3b\x2b\xf2\xf6\xb2\xf7\x27\x4c\x0c\x48\x80\x45\x7b\x12\xa5\x61\x9a\x8b\x26\x94\xa0\x20\x12\x78\xb3\x96\xf2\x3c\xbc\x0c\x9b\x00\x6b\xf6\x8c\x9c\x6b\x26\x81\x09\xf4\x2e\xa0\xa0\xb6\x99\xdd\xdc\x94\x00\x8b\x16\xa4\xc2\x70\x98\x6c\x92\x56\x52\x99\x30\xf5\x29\x01\x0a\x6d\xae\x76\x61\x17\x0c\xec\xd9\x46\x51\x1e\x37\xaa\x21\x1b\x37\xe1\x86\x01\xfe\x2c\x08\x70\xd9\x32\x20\xcf\xe6\xb6\x6d\x98\x75\x0f\x20\xcc\x7e\x36\xa6\x0a\x73\x41\x12\xe0\xc9\x6a\x51\xef\x5a\xc1\x78\x63\xa0\xc7\x16\x22\x1c\x6f\x00\x39\xf6\x4a\x17\x08\x63\x21\xd9\x52\x2a\x26\xc9\x0c\xf4\xd8\x46\x84\x03\x73\xe0\xc6\xba\xc6\x30\x36\x00\xbc\x58\xc9\xcd\x66\x80\x11\xdb\xe1\xc2\x76\x92\x2d\x80\x42\x50\x72\x34\x86\x24\x5b\x4e\xa1\x73\xdd\x22\xc3\x23\x8e\x88\x99\x6b\x64\xab\x31\x70\x56\x31\x64\x2b\x48\x9e\xb8\x4e\x96\x41\xb8\xdb\x7a\x33\x5a\x82\xbe\x8d\x8d\x61\x69\x24\xe4\x65\x13\x76\xd6\xbb\x0a\xcb\x09\x8c\x1c\x99\xd2\x65\xd8\xf0\xdc\x79\x0c\x49\x06\xf1\x30\x1d\x94\xa8\x3d\xb3\x39\x2b\xc9\x30\x15\xd1\xd6\x39\x4b\x51\x4e\x32\x02\x2a\x9a\x17\x19\x43\x02\x4a\x80\x31\xdd\xe7\x50\x9a\x9c\x5b\xf4\x03\x96\x74\x8f\xee\x46\x31\x0e\x9e\x8e\xe1\xf4\x2e\x49\x73\xf8\xc5\xa4\x30\xe6\x48\xb6\x31\x8a\xe3\xc1\x25\xc0\x95\x2e\x2e\x44\x05\x6f\x26\xdb\xdf\xce\x37\x26\x67\x42\xc0\xad\xfe\x00\x09\xee\x19\x13\xae\xd2\x17\xd5\x3c\x52\x73\x09\xa4\x39\x45\xab\xb1\xa2\xbe\x35\x1f\xaa\x6a\x73\x65\x38\x45\xeb\xb1\xa2\xca\x1c\xd4\xc3\xaa\x9d\x4f\xd7\x60\x14\x6d\xc6\x8a\xfa\x25\x57\x06\xbe\x85\x80\x8f\x59\xed\x93\x62\xb4\x88\xcb\x6c\x8b\x4c\x80\x76\xfd\xd9\x15\xfd\x31\x7d\x61\xac\x84\xf9\x66\x41\x71\x66\xda\xd3\x84\xe4\xdf\x5d\x6d\xcd\x83\xab\x4e\x1c\x26\x1c\x73\xd7\x36\xcd\xc0\x94\x05\xa8\xe5\x86\x0b\x20\x72\xdf\x22\xfa\xda\xf8\xf0\xfe\x8b\x04\x18\xdd\x93\x58\xd7\x92\x53\xce\x83\xa3\xbe\x5e\xce\xc2\x54\xd3\x04\x78\xdf\x93\x63\x4f\xa8\x6a\x98\x7d\xd0\x49\x3e\xda\xf6\x36\xe7\x96\xf3\x11\x45\x25\x0c\x1b\x3a\xed\x29\x96\xa6\xca\x54\x2d\xbc\x99\xe4\x60\x2e\x29\x6c\xf9\xe8\x6a\x29\xe4\x9e\x6c\x5c\x13\x93\x92\xc8\xf1\xa8\x9e\x5a\xd2\xf9\x90\x77\x66\xf6\x08\x64\xf1\x9f\x7f\x0e\xa3\x56\x30\x19\x95\xa5\x18\x9b\xc2\x91\xd4\x7b\x98\x6c\x9c\x00\x71\xdc\x51\x3d\x8e\x8b\xfb\x9d\x17\xfc\x66\xee\x04\xc8\xe4\x9d\xfc\xa4\xf3\x82\x06\xa6\x3b\x02\xc5\xbc\x54\xce\x1b\x66\xea\x84\xf4\xf2\xb3\xd9\xfa\x92\xab\x5d\x36\x3a\xc8\x8b\x59\x17\x07\x3e\x79\x23\xac\xd8\x59\xd1\x84\xbb\x02\x32\xc7\xb5\xca\x99\xcd\x3c\x09\x90\xc4\xcf\x6b\x66\x5c\x58\x0a\x2c\xf1\x1b\x78\xce\xc0\x09\x0f\xa0\xaa\xc2\x2b\x20\x84\xa9\x73\x29\xc9\xc6\x99\x00\xbe\xec\xc5\xd9\xb6\x3e\x33\xdc\xe0\x06\x04\x71\xcf\xcc\xba\x80\x03\x9e\xa9\xda\xc8\x56\x33\x1b\x61\x12\x1a\xcd\x87\xc3\x3e\x0b\xe8\xdf\xfd\x6b\x67\x0f\xac\x48\x80\xf2\xed\x8f\x8a\xf3\x6c\xc0\xf8\x3e\x91\x0e\xcf\x33\x80\xed\xdd\xf5\xf3\xb3\x71\x33\xef\x4a\x40\xb2\xb2\x08\x07\x66\x40\xeb\x96\x42\x77\xef\xca\x33\xb4\x00\x42\x43\x3d\x71\x53\x17\x20\x74\x5f\x76\xa6\x1c\x85\xe6\xf8\x92\xc0\xe8\x96\x32\x3e\x28\x17\x9e\xec\x00\xa3\x5b\xca\xb8\xea\x8f\xda\xe0\xb6\xa0\x26\xc0\xe9\x96\x32\xce\x95\x93\xe6\xc0\x74\x47\xa0\x75\x4b\x19\x8b\x8a\xc2\x93\x24\xdc\x27\x2a\xe7\xde\x09\x52\xbb\x65\xbf\x41\x8a\xc9\xcc\x02\xb9\xbb\xe7\x96\xf3\x34\x1f\xe4\x76\xdf\xd0\x8c\x79\x00\xbb\xbb\x3f\x10\x33\x0c\xdc\x8c\xf6\xd1\xf1\xf9\x3a\x20\x76\x0b\x06\x25\xf0\x90\x90\xdc\x9a\xa6\xe1\x1a\x03\x53\x93\x5d\x1c\x9b\xd9\x96\x2b\x2f\xcc\x5a\x95\xf5\x65\x2e\x4e\xb1\x14\x7b\xe6\x3d\x63\x6e\x92\x04\x7f\xc6\x43\x02\xf4\xee\x46\x11\x0f\x4e\x5f\x46\xfb\x6e\x66\xd1\x70\xe6\xa4\x70\xbe\xa8\xc2\xc8\x74\x82\x9c\x71\xd3\x29\x30\xb8\x2f\x09\x51\xe6\x90\xc8\x14\x18\xdc\x57\x74\x1d\x06\x83\x99\x2a\x76\xe6\x99\xbe\xe0\xfe\x03\x17\x86\x0d\xa6\xa9\xcc\x7b\x69\x1c\xf3\xca\x36\x48\x08\x27\xcd\x9d\xcb\x97\x02\x75\x5b\xca\x30\x0a\x78\x84\x25\xed\x69\x42\xeb\x2c\xe9\xe7\xc9\x25\xa5\x99\xaa\x64\xc0\xe0\x15\x75\x23\xc2\x87\x23\xa6\x2f\x98\x6e\x39\x39\xd2\x5a\xe4\x8c\x66\x64\xb7\xd4\x35\x49\x9f\x53\x9f\x41\x0d\x4b\xd0\x68\x77\x15\x97\x2d\x49\x13\x3c\x7f\xd2\xb6\x55\x46\x0c\x36\xc1\x93\x86\xea\x26\xcc\x83\x48\x81\xb1\xdd\xd5\xcf\x9d\xc2\xc8\x05\xb2\x16\xad\x77\xaa\xce\x5a\xbd\x0f\xe3\x61\x75\x47\x55\x8d\x3e\x65\xad\x0a\x87\x3a\x29\xf2\xb5\xf7\x27\xe1\xb5\x08\xbf\xe9\x64\xb4\x15\xd2\xb3\x1b\x2c\xd3\x64\x3d\x06\xcf\x2f\x8b\xa6\x78\x94\xaf\x12\x95\x09\x9f\x6d\x95\x26\x78\x0e\x4f\x78\x4b\x72\x0a\x7c\xf0\x7e\x73\x94\x23\x69\x89\x79\x1b\x60\xa5\xc6\x1b\xcb\xf7\xe2\x04\x57\x7f\x2c\x91\x8f\x0f\x8a\x8e\x61\x78\x3e\x3e\x65\x25\x63\x4e\xe8\x4d\x81\x13\x7e\x20\xe6\xa0\xad\x74\x44\xf4\xb6\x0c\x0e\x16\x17\xc9\xca\x36\x1c\xdc\xa7\xc0\xc6\xee\xf7\xec\xba\xdb\xa8\x7f\x5d\x53\x11\xb5\xdb\xf5\x5f\xa0\x0a\xeb\x58\xe2\xa8\x7a\x85\x73\x51\x77\x8a\xe7\xf7\x76\x55\xbe\xec\xc8\x09\xe3\x57\xa3\x9a\xcf\xc2\xd7\x13\xf5\xfc\xeb\xda\x8c\x95\x3b\x6f\xcd\x9e\x51\xbe\x7d\x04\x0f\xf3\x33\x53\x20\x69\xa3\x40\xd8\x29\x02\x4d\xbb\xa6\xd6\x73\xaf\x5e\xc2\x8c\xbe\xdf\x49\xce\xac\x0c\xa5\xc0\xd3\xbe\x9d\xac\x62\x8a\x42\x49\x15\x0e\xdf\x52\xa0\x5f\x0f\xdb\xba\xc3\xbd\x10\x98\xd7\xc7\x52\x78\x27\x1a\x06\x8b\x9e\xd1\x32\xb1\x69\x0a\xbc\xeb\xbe\x6f\xb3\xee\x08\xf8\xd6\x3d\x98\x3d\x12\x3e\x05\xce\x75\x69\xfc\x64\x98\xcb\xc2\x5b\x39\x52\xa0\x60\x1f\x94\x00\xa2\xda\x03\xe8\x28\xee\xe4\x80\x1b\x24\xe8\x1f\xc3\x2b\xfb\xe9\x62\xb4\x9b\x50\xb5\xe1\xb8\x09\xf8\xd4\x27\x39\x4e\xab\x40\xda\x25\x2c\x9e\xc1\x72\xa2\x57\x75\x5c\x99\xda\x71\x36\x09\x74\x6b\xd3\x50\xcd\x1d\x99\x96\x2e\xf0\x54\xa7\x86\x72\xe5\x29\x77\x8e\x31\x46\x3c\xb1\xcc\x7b\xb2\xa7\x78\x39\x59\xaf\xec\xaf\x3e\xba\x86\xdb\x55\xee\x35\x03\x41\xfb\x8a\x5f\x3c\xd4\xe2\x4b\x4b\x14\x77\x91\xa7\x67\x92\x10\x29\x50\xb8\xaf\x92\xe9\x43\x7d\xdc\x69\x5d\x29\x50\xbb\xaf\xf8\xe4\xa1\x96\x4b\x79\xc2\x8a\x16\x77\x8a\x5e\x1e\x2a\xc2\xfd\x3e\x0f\xd4\x2c\x61\xd0\x6c\x1d\xc5\x7d\x92\x9d\x7b\xee\xd0\xbb\x54\x2c\x5b\xeb\x18\x4b\x03\x42\xb8\xc9\x3e\x93\xf4\xa3\x63\x5c\x1e\xe0\xd7\x53\x7c\x5b\xcf\x48\xe0\x49\x69\x4a\xee\x4f\x71\x6d\xc2\xe7\x1b\xa5\xc0\x0a\x07\x78\x78\x7e\x99\x02\x2d\x5c\xca\xf8\xb3\x0c\x07\x85\xc0\x07\xef\xe7\xe6\x35\x59\x17\x4b\xcd\x84\x91\xcb\xd1\xee\xf2\x9a\x29\x35\x9e\xaa\xaa\xcf\x0b\x74\x92\xe1\x18\xa5\x40\x04\x2f\x4d\x6b\xfb\x2f\xb0\x30\x95\x04\xa2\xf7\x00\x1f\x5b\xe5\x70\xdd\x71\xcb\x53\x29\x10\xbd\x07\x91\x34\xa0\x8a\xed\x28\xc0\xf0\x1e\x24\x16\x01\x4d\xc4\x44\x9b\x40\xf9\xbe\x09\x84\xc1\x93\x03\xad\x76\x56\x64\x93\xf4\x5e\x7f\xdd\xb2\xdf\xbf\x48\x5f\x27\x07\x5d\x39\x6f\x9a\x47\x6a\x66\xb2\x5f\xe9\xeb\xe4\x0c\xac\xeb\x71\x41\x9c\xc8\x7a\x2c\xa2\xd5\x17\x76\x73\x64\x0a\xac\xee\xf3\x33\x9a\x99\xba\x6d\xc7\xf8\x8b\xc3\xe0\x24\xc4\x44\x82\x84\xe4\x3a\x1d\x9e\x54\x6c\x45\x4e\xdc\x67\x0b\xd2\x57\xfc\x9c\xcc\x4e\x75\x03\x19\x33\xc4\x03\x93\x5b\x5a\xea\x3f\x36\xd5\x9f\x99\x61\x6a\xc6\x26\x80\x89\x12\xcc\xab\xa6\xc0\xde\xde\xed\x66\x18\x22\x29\xd0\xb6\xbd\x55\x8d\xc8\x0f\x8a\xf3\xa3\xc0\xd8\x36\x79\x6d\xf6\x9d\x09\xd7\x6a\xaf\xc2\x02\x8b\xc7\x02\x73\x09\x96\x15\x1e\x9f\xe9\xe3\x86\xdd\xdc\x96\x02\x6f\xfb\xa8\xf6\xaa\x1b\xed\x45\x1c\x9e\x42\xad\xf0\x84\xa9\x42\x58\xa6\xf8\xb8\xa9\xcd\x32\x5f\xaf\x49\x57\x9b\xd1\xf6\xbd\x22\x4c\xab\x4e\x81\xb1\x6d\x1a\xe6\x03\x03\x29\x50\xb5\x7b\xcb\xae\xc9\x77\xb1\x8c\x36\x96\x19\x16\x81\xb4\xed\x0f\xe3\x09\x17\x69\x3a\x28\xc7\x6c\xfa\x4c\x81\xbf\xdd\x7f\x89\x37\xdc\x35\x80\xbc\xfd\xfa\xf2\xd2\x30\xb5\x05\xca\x61\x25\xbe\x30\x0f\x07\xfa\xf6\x6d\xbf\x64\xcf\xa8\x0b\x97\x02\x48\xdc\x37\x91\xf3\x8e\x2f\x46\xe6\xc1\xb6\xcc\xf3\x39\xe4\x8c\xcc\xe2\x5e\xe6\xbc\x9b\x8b\x91\x59\xe2\x87\x27\x5a\xc7\x70\x08\xd3\xd1\x19\xc6\x4d\x37\x1b\x0a\x43\x57\x23\xa8\x53\x3b\xc6\x63\x00\x7d\xbb\x03\x33\x85\xc5\x89\x6a\x38\xca\x01\xc6\xf6\xe5\x80\x1f\x66\x55\x3a\x5d\x8b\x07\x68\xae\x10\x19\x0e\x90\x5f\xbe\x84\x81\x72\x4c\xf1\x0c\x03\x21\x60\xd1\x42\xee\x63\xaf\xc2\x5d\x78\x44\xdd\xae\x7d\xff\xed\xb8\x20\x78\x33\xe5\xfa\xc5\x42\xab\x30\xa3\x20\x05\xfe\x36\xe5\x61\x2e\x59\x8a\xc7\x11\x0f\x67\x81\xb2\x19\x0f\x20\x72\x4b\x93\x2b\x6a\x98\x3a\x6e\x30\xca\xce\xc3\xbd\x16\x48\xdb\x45\xbf\x05\xe8\xfc\x15\xbf\x30\x1e\xbf\x20\x17\x8e\x34\x81\xb6\xdd\x58\x93\xb7\xd2\xc7\x65\x5b\x33\x55\x03\xb3\x54\xef\x2c\xc5\x28\x05\x16\xb7\x93\x56\x65\x0c\x52\x8c\xbf\x9a\x31\x37\x48\x6e\xb2\x87\x78\xc6\x92\x37\xe3\xcf\x6d\xcc\x3e\x20\x7f\x04\xe7\xf4\xd3\xfd\x01\xe2\x59\xf8\x73\x4e\xe9\xf6\xe5\x11\xde\x71\x63\x2a\x90\xb4\x4b\xe1\x4a\xcf\x69\x87\xa9\xa4\x6e\xc9\x1b\xc3\xa4\xe5\x81\x9e\x7d\x03\xc7\x61\x8b\xc1\x03\x89\xc9\x4a\xe6\x20\xf8\x14\x88\xd8\x3b\xe5\xb5\x60\x94\x02\xc7\xa2\xc9\x68\xc7\x9e\xc0\x92\x02\xfd\xfa\xd8\x14\xc6\x56\x61\xaf\x30\x26\x60\x2b\x66\x6c\x07\xde\xf5\x85\xf7\x2c\x74\x2c\xa4\xe4\x92\x6c\x40\xbf\x1e\x78\xf0\xac\x6b\x00\x1a\xf6\xe4\xd3\x1f\x8c\x71\x01\xc9\x3a\xd3\x8a\x99\xd0\x00\x85\xfa\xcc\x0d\xcb\xe9\x7c\xf0\x03\x17\x62\x00\x9d\xfa\xf2\x09\xb4\xee\xb6\x35\x9a\x3f\x70\x3a\xc5\x43\x89\xad\x50\x9a\xe9\x4e\xc0\xae\x16\xce\x29\xd7\x07\xd7\xba\x8b\xc8\xeb\x7e\x43\xdd\xc9\x79\x62\x1a\x11\xb8\xd6\xc2\xe9\x73\xe8\xd5\x58\xf2\xd3\xef\x29\x88\x7e\xb7\xa2\xa8\xcf\x87\x80\x5f\x59\xc2\x8f\xf0\x0f\x9e\x01\x47\xf3\x91\x28\xea\xa1\xd9\xaf\x93\xb2\x6e\xaa\x54\xf4\x29\xfe\xe9\x73\x73\xe6\xfb\x13\x29\x70\xb8\x77\x5a\xe5\xcc\x4b\x7a\x1d\x03\x63\xa6\xb0\xab\xd1\x79\xe7\xd3\xf2\x8c\xaa\x1f\x56\x82\x3b\xc9\x8e\xf1\x4c\x20\x0a\x94\xee\x83\x12\x39\x33\xc4\x8b\xed\x04\x39\x37\xb5\x00\x66\xb7\xab\x45\x03\x14\xab\x07\xd8\xec\x0e\x1b\xef\xd8\x15\x54\x20\x79\xdf\x24\xe6\x0a\x94\x3f\x20\xbc\x87\xd1\x78\x1e\xb2\x75\x3e\xc6\x73\x6a\xef\xe1\x40\xfc\x3e\x19\xc1\x14\x1c\x88\xdf\xbe\xa4\x8a\x94\x63\x7a\x18\x9e\x87\x0c\x87\xab\x8e\x86\xb9\xa7\xbb\xdb\xb3\x0b\x02\xc0\x15\x2f\xc6\xa4\xc4\xfe\x0b\xc4\x73\x41\x48\x36\xce\x99\xb8\x52\xec\x39\x3f\x07\xe4\xf1\xe1\xf3\xbc\x0c\x2b\x34\x05\x12\xf9\x48\x80\x7b\xc6\x1a\x19\x0b\xcc\x51\x4b\x29\xd2\xc8\xf3\xdc\x92\x73\xec\x17\x15\x53\x20\x8e\x23\x9e\x2b\xcb\x60\xf8\x07\x39\xdd\x35\x73\xd5\xc1\xd1\x7e\x52\x20\x93\xf7\x1a\x26\x99\x24\xd4\xc1\x95\x43\x8e\x17\x51\x66\x82\x23\x20\x9a\x03\x9c\xd3\x3f\x39\xca\x32\x8c\x04\xa6\xb9\xca\xe3\x4c\x70\x81\x39\xf0\xcc\x73\xdb\x0f\xd8\xb1\x56\x92\xea\xc9\x47\x82\x55\xce\xbf\x42\xe0\x9f\x4f\xd4\x4c\x5e\xe6\x45\x11\x57\xfa\x05\x9e\x39\xc7\xc4\x1a\x48\x47\xb7\x74\xe1\x53\x4b\x51\x85\xe7\x79\x40\x2e\xf7\xa4\x89\xdb\xc6\x9d\x4a\xfc\x06\x09\xd9\xea\x7c\xa0\xec\x64\xf1\x04\xee\x84\xae\xf3\x8b\x28\x72\xfd\xf0\x29\x8b\xa0\xb6\xaf\x5c\x4c\x91\x9b\x87\x7a\xd3\xa0\x5e\x36\x57\x2c\xb7\x0f\xb5\x25\x41\x6d\x73\x8b\x2b\x52\x3c\x54\xf8\x12\x54\xc8\x2f\xb2\xe0\x71\xe2\xa5\x39\x72\x0f\x96\xb8\xaa\x53\xfa\x76\xbc\x37\xc5\x25\xaf\xd3\x35\x9e\x70\xc8\x0f\xec\xf4\xc6\xe4\x92\x1b\x85\x80\x96\x7e\xde\x12\x1e\x57\xe2\x5d\x55\xea\x4b\xb8\x63\x02\xf5\xfc\x2a\xa2\xea\x19\x91\x64\x2a\x62\xc9\x79\xc3\x8c\xd1\x79\x3a\xf9\x66\x9d\x25\xe9\xf1\x0b\x5a\x4f\xa8\x0d\xbf\x1d\xfe\x40\xd7\x22\xa4\x6b\xe2\x02\x50\x1b\xe3\x07\x80\x88\x9e\x89\x3a\x67\x3b\x36\x70\xd0\x77\x56\x84\x89\x05\xc0\x42\x27\xcf\xf0\x8a\x80\x70\xae\xaa\x3c\x3c\xe3\x02\x62\xb9\x15\x07\xd2\x4c\x2e\x0c\xf8\xe3\x44\x96\xb5\x16\xe0\x8f\xf7\xe7\xb7\x49\x8e\xc4\x93\x63\x2c\x67\x8e\x85\xe6\xa3\x03\x3c\x92\xbc\x6d\xc8\xf6\x1b\x7f\xc2\x7e\x04\x48\xe4\xc7\x66\x36\x49\x0b\x3c\xf2\x8a\xc8\x33\xeb\x8a\x57\x12\xb9\xb3\xb1\xa9\xf5\xa9\x07\x34\xc6\xa9\x7e\x8e\x15\x89\xcc\x19\xdd\x7a\xfa\xed\x87\x28\x3a\x7f\x2a\x38\x4a\x9a\xf7\xee\xd7\xe5\x3b\xc3\xd7\x9f\x8d\xc8\xfb\xfd\x86\xd1\x4b\xf7\xab\x12\x76\xa7\xea\xb7\x28\xbe\xdc\xbd\x9d\xeb\x11\x95\x2a\xcf\xa9\xee\xae\xf5\xdf\x68\x88\x3a\xd3\xfc\xf8\xf2\x14\x5d\xfe\xf7\x7d\x77\x27\x3b\x47\x9c\x9d\xaa\xa1\x60\x71\x61\x64\xeb\xfa\x8f\x08\x08\xd9\x4d\xb8\x9e\x1e\xdd\xea\xff\x6b\x52\x07\xe7\x85\x57\x12\x6a\x20\x5a\x6f\xb0\x0a\xd7\xdf\xd7\x52\xbf\x8c\x8b\xdc\xcd\x24\x32\x4d\x43\x99\xcf\xf8\x5f\x3e\xfc\x4f\x00\x00\x00\xff\xff\xa2\x10\xca\xbc\x26\x92\x00\x00"), }, "/static/lib/font-awesome-4.7.0/css/font-awesome.min.css": &vfsgen۰CompressedFileInfo{ name: "font-awesome.min.css", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 31000, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xcc\x7d\x4d\x8f\xe4\xb8\xd1\xe6\xdd\xbf\x22\x77\x06\xde\xe9\x36\x4a\x35\x25\xe5\x77\x16\xbc\x9e\xfd\x80\x01\x03\x36\xf6\x60\x1f\xf6\xb0\x17\x8a\x0a\xa5\xd8\x49\x89\x1a\x92\xca\xac\xec\x46\xff\xf7\x17\x92\x18\x14\x95\x19\x94\xe7\x05\xe6\xf0\x1a\x86\x5d\x4d\x3e\xa4\xf8\x11\x0c\x06\x23\x1e\x32\x7f\xfe\xd3\x7f\xfb\xc3\xea\x4f\xab\xd5\x5f\x55\x63\x57\xff\xf3\x06\x46\xd5\xb0\xda\xbc\xee\x5f\xdf\x56\xf9\x7d\xf5\x4b\xc1\xae\x70\x66\x4d\x71\x5f\x25\xab\xca\xda\xf6\xf4\xf3\xcf\xa5\x6a\x2c\x1b\x81\xaf\x42\xad\x92\xd5\x2f\x41\xca\x50\xd7\xdf\x05\x87\xc6\x40\xac\xc8\xcf\xd2\xe5\x7f\xea\x3f\x7a\x5a\xfd\xf3\x6f\x7f\x5f\xfd\xdf\xbf\xfe\x7d\x95\xbe\xa6\x2f\xab\xff\xfd\xcf\x7f\x9e\x56\xff\xf8\xdb\xbf\xb0\x92\xcf\x7f\x58\xfd\xe9\xe7\xe1\x0b\x49\xc9\x38\x7c\x73\x7f\xd5\x42\xde\x4f\x3f\xf5\xe5\x5d\x9b\x7f\x7a\x37\x9a\x9f\x3a\x2d\x3f\xfd\xf4\xfa\x3a\x7c\xd0\x84\x9f\x4d\x6e\x90\xf7\xff\x7c\x05\x65\xff\x72\xfd\xf3\xd0\xc1\x9f\x3e\xff\x27\xca\xfc\x28\xa0\x14\x1f\xff\xdd\x17\x5d\x95\x4a\xd7\xcc\x7e\xfa\x09\xea\x1c\x8a\x02\x8a\x44\xb5\xd0\xd8\x7b\x0b\x3f\x7d\x7e\xf9\xf7\x55\xde\x54\x59\x66\x7f\x79\xae\x6d\x48\xff\xcd\x35\x44\x2a\xf8\x4d\xe5\xad\xa5\x8a\x5b\xdd\xc1\x6f\xee\x84\xb9\x9e\xb1\x8a\x1f\x83\x7c\x0d\xe7\x4e\x32\x1d\xd4\x6a\xae\xe7\x9f\x3e\xbf\x0f\x53\x77\x03\x71\xae\xec\xa9\xe9\x73\xe4\x98\x64\xec\x5d\x82\x4b\xf9\xfe\x5a\xb2\x6f\x85\x30\xad\x64\xf7\x93\x68\xa4\x68\x20\xc9\xa5\xe2\x97\x01\xea\x40\xab\xf9\xff\xa5\x9b\xf6\xe3\xe7\x74\x15\x08\x83\xab\x57\x7c\x85\x93\x68\x2a\xd0\xc2\xbe\x5b\xf8\xb0\x89\x86\xa6\x00\x2d\x9a\xf3\x89\x75\x56\xbd\xf7\x1d\xb9\x08\x9b\x8c\xe8\x5a\x29\x5b\x0d\x79\x8d\x15\x4c\x0a\x66\xa0\x78\x4f\x6a\xf5\x35\x51\xe6\xe3\x11\x73\xd6\xec\x6e\x38\x93\xd0\x37\x38\x91\xe7\x6f\xd3\x17\xd3\xd7\xb5\xfb\x0f\xd4\xef\x43\x07\xaa\xb1\xcf\xaf\xfb\x2d\xd4\xef\x57\xd0\x56\x70\x26\x13\x26\xc5\xb9\x39\x25\xe9\xf6\x8f\x43\x1d\xd9\x47\x50\x47\x06\xf5\x90\xb8\x0e\x13\xd7\x2e\x71\x13\x26\x6e\x5c\xe2\x36\x4c\xdc\xba\xc4\xf2\xf6\xed\x26\x0a\x5b\x9d\xd2\xd7\xec\xb0\xdd\xa7\x9b\xec\x08\xf5\x38\x14\xe3\xd7\x39\x34\x16\xf4\x80\xed\xe4\xb7\x96\x15\x85\x68\xce\x89\x84\xd2\x9e\xde\xde\x6b\xa6\xcf\xa2\x19\xff\x95\xbd\xa6\x9b\xb1\x8a\xa1\x53\xc6\xcd\x5a\xd2\xcb\xca\xa9\x51\x0d\xb8\x3a\xfe\x87\x14\xdf\x5a\x65\x84\x15\xaa\x39\x69\x90\xcc\x8a\xab\x1b\xa3\x20\x83\xe5\x46\xc9\xce\xc2\xfb\x50\x77\x32\xab\x7c\x6c\xf0\x2c\xc9\xaa\xf6\x34\xfb\x37\xd9\x01\x29\xdc\x54\x8c\x95\xa6\xaf\x63\x8f\x0f\x3b\x37\x18\xb9\xd2\x05\x68\xec\xe4\xe9\x35\x83\x7a\xf5\x9a\x6d\xfb\xff\x4d\xfb\x89\x19\xf3\x4f\x46\x49\x51\xac\x5e\xdf\x0e\x50\xaf\x7e\x04\x00\x97\x9e\x68\x56\x88\xce\x9c\x5e\x53\x57\x5d\xdb\x49\x39\x8c\xcd\xb7\x52\x2a\x66\x4f\xfd\x9f\x53\x86\xee\x67\xdc\xe5\x0c\x7f\xf7\x59\xf3\x62\x6e\x78\xf5\x28\x1b\x6e\x72\x1f\x2a\x08\xa7\x60\x84\xc4\x6a\x8f\x35\xe7\xf5\xdf\x7d\x70\xf1\x6b\x25\x4b\x4c\x2b\x9a\x6f\xb8\x52\x58\x23\x6a\x36\x4c\xa1\xcb\x59\x65\x66\x25\x9a\x52\x34\xc2\xc2\xaa\x17\x76\xa6\xdf\x7f\x0b\x08\x47\xca\xc0\x42\xdd\x69\x50\xcc\x58\x68\xcd\xa7\xc3\xe7\xf7\xdf\x06\xfb\xfe\x0b\x56\x7b\x81\x7b\xa9\x59\x0d\x66\x85\x9d\x79\xfb\xa3\xff\xa6\xd5\xac\x31\xbd\x96\x3a\x69\x65\x99\x85\x4f\x6f\x05\x9c\x3f\xbf\xd3\xc9\xdf\xd3\xb7\xa5\xa2\xeb\xed\x91\x2e\xec\x32\xbe\x7f\xff\xe5\xbf\x50\x5b\xfa\xf1\x1f\xd3\x92\xe3\xdb\xb7\xa4\x36\x49\x29\xa4\x05\x7d\xfa\xa1\xd5\xea\x2c\x8a\xd3\xff\xf9\x7f\x7f\xab\xd9\x19\xfe\x85\x35\xbc\xfe\x43\x70\xad\x8c\x2a\xed\xeb\xff\x62\x46\xf0\x21\xf7\xd3\x50\x85\x50\xcd\x9f\xd3\xcf\x3f\xbc\x47\x9b\x73\x1c\xbb\xd2\x7f\x25\x96\x17\x49\x0f\xdb\x99\x1e\x7e\x8f\x86\x66\x4b\x0d\x4d\x0f\x0b\x2d\xc5\xcc\x58\x46\xd8\xd6\x6c\xff\x7b\xb4\x75\xbd\xd4\xd6\x6c\xbf\xd0\x56\xcc\x8c\x65\x8c\xdb\x83\x14\x6d\x52\x29\x2d\xbe\xf6\x9b\xb7\xfc\x1d\x1a\xfc\xf6\xb2\xaa\x85\xd6\x4a\x47\xe4\x61\xd8\x32\x3f\x25\xe9\xcb\x2a\x7d\x6c\xf8\x2c\x8b\x4e\x9e\x1a\x8d\x9b\xe8\xef\x21\x0f\xbf\xa9\xc9\xe9\xcb\x2a\x89\x34\xd9\x65\xd1\xc9\xdf\x4f\x5a\x29\xbb\x9a\xad\xb6\x97\xa7\xb4\xf4\x40\x24\x66\xfb\x30\xf1\x61\xae\x1e\x73\xfc\x80\xb8\xc1\xf0\x5b\xb2\xb1\x8c\x5f\x9e\xb7\xe4\x77\xd2\xc6\x72\x7b\x2f\xd4\xef\xce\x64\xc9\x1e\x4c\x98\xec\xd9\x80\xa9\x45\x51\xc8\xe0\x5b\x49\xfa\xf1\x32\xfd\x23\xfb\x88\xed\xfa\x6f\xee\x6b\xbd\x22\x8b\xec\xe8\x58\xdf\xb7\xb0\x09\xce\xa0\xfb\x3e\xfb\xc6\xb3\xe5\x24\x9a\x2b\x68\x03\xdf\xb8\x92\x4a\x9f\x7e\x2c\xcb\x72\x48\x3e\x4b\x66\xcc\x29\x87\x52\xe9\x3e\xaf\xb1\xd0\xd8\xd3\x0f\xff\xbf\x7c\x7b\x7b\xfb\x61\x00\xd4\x9d\x11\x9c\x04\xa4\x23\xc0\x00\xd3\xbc\x22\x11\xd9\x88\x80\xe6\x0a\x52\xb5\x90\x28\x12\xb5\x1e\x51\x15\x30\x6d\x49\xc0\xe6\x07\xec\x9c\x26\xf3\xb7\x53\x7e\xe4\x13\xbb\x11\xd1\x19\xa0\x6b\xd8\x8f\xf9\xa5\x90\x35\x99\x7f\x18\xf3\x6d\x95\x48\xa6\xcf\x40\x62\x8e\x88\x21\x73\xd9\x54\x83\x30\x74\x37\xf3\x11\xc2\x2b\xe0\x17\x12\xc0\x47\x80\x86\x5a\x5d\xb1\x0d\x83\x68\x71\xa9\xcc\x2c\xc1\x8a\x1a\xe8\x59\x2d\xc2\x49\x4b\x5a\xd9\xd1\x30\x98\xc1\x6a\xd1\xd0\xb8\xd4\x09\x49\xab\x6e\xa0\x13\x55\x96\x24\x08\x05\x45\x9c\x1b\x26\x49\x84\x13\x94\x33\xf8\x19\x1e\xfb\xa5\xce\x24\xdc\x49\x8c\xd5\xcc\x54\xf4\x8c\xa7\x4e\x66\x2a\x55\x93\xb3\x95\x6e\xfd\x8c\x47\xc4\x32\x75\x32\xc3\x7b\x45\x10\x81\x38\xb1\xd1\x8a\x15\x64\xbe\x13\x9b\x42\xdd\x1a\x19\xc3\x38\xb1\x61\x5a\xab\x5b\xc2\x85\xe6\x7d\x83\x86\x22\x24\x9c\x91\xf0\xae\x25\xc1\x4e\xa2\x44\x93\xab\x0f\x12\xe0\x24\xaa\x57\x7c\xbe\x32\x12\x58\xfc\x10\x6e\xe6\xa3\xc5\x1c\x4c\x94\x86\x16\x18\x29\xd5\x29\xa0\xd0\x96\x1a\x0c\xb9\x36\x32\x27\x1f\xc3\x29\x8a\x49\xb2\x9a\xcc\x49\x48\x3f\x19\x64\xbe\x13\x89\x52\x32\x52\x64\xb2\x8d\x57\x32\x45\x5b\xa9\x86\x5e\x1d\x99\x93\x8a\xab\x92\x5d\x0d\x31\x79\xce\x76\x33\x54\x6c\xaa\xb2\xfd\x0c\x46\x4f\x51\xe6\x44\xe4\x57\xcd\x55\x41\x4a\x6a\xe6\x04\x24\x67\x71\x08\x2a\x97\x48\xdf\x73\x9f\x4d\xf7\xda\x49\x41\xae\x14\x3d\xb6\xc5\x94\x5f\x33\x4d\x63\xdc\x34\xb7\x5a\x34\xf4\x04\x96\x6e\x39\xb1\x1a\x34\xa3\x10\x6b\xa7\x4b\x06\xbf\x06\x95\x9f\x62\x33\x24\xb9\x92\xd6\x4e\x44\x84\x65\x92\xde\xb1\xd6\xa8\x37\xfa\xcd\xd5\xed\x9e\x14\x6c\x13\xc0\xc6\x3d\x99\x42\x39\x59\x19\x36\xe9\xf1\x88\x48\xa1\x76\x21\x6a\xdc\xca\x49\xdc\x3e\xc4\xe9\x68\xd3\x0e\x21\xec\x4b\x67\xac\x28\xef\x24\xf0\x38\xad\x29\x32\xdf\x89\x4c\x01\x05\x34\xb3\xa5\xac\x3a\x1b\x24\xcd\x0b\x79\x7d\x12\x45\x38\x51\xba\x8a\x02\xd4\xd2\x5c\x3b\x91\x6a\x2b\x65\x55\xf8\x75\xd1\xdb\xa2\x61\x42\x2b\xb8\xed\x74\x44\x2d\xad\x51\xea\xa0\xe1\x82\xdc\x59\x36\x68\xc5\xb0\x36\xe9\x65\x97\x1e\xfd\x8d\x13\x2d\x56\xf4\x43\x4a\x22\x9c\x70\xd9\x88\x78\x6f\x9c\x68\x41\x21\x66\xa3\x39\xb6\x2c\x31\xbf\x76\x2c\xd6\x89\x0d\x9a\x37\x55\x0f\x59\x44\x6e\x03\x0b\x61\x19\xb9\x0b\xb6\x09\x72\xd1\x6f\xf6\x68\x34\x41\x9b\xe4\x8c\x5f\x6e\x4c\x93\xcb\x6a\xe3\x44\xae\x64\xc6\x2e\x03\xbd\xa2\x5a\xc0\xb0\x69\xc3\x21\xf3\x9d\x84\xb5\xac\x33\xa4\xaa\xdb\x70\x6c\xb6\x22\xf5\xe9\xa6\x40\x25\xa2\xa3\x6d\x80\xa0\x43\x0b\xb8\xed\x5b\x30\x42\x4b\x38\x27\x3c\xf0\x05\x38\x29\x1b\xdb\xcc\x4f\xdb\x55\xab\xb8\xae\xd8\xae\xe7\xb8\xa8\x16\xd8\x6e\x70\x14\x3b\xe3\xb6\x6d\x12\xe6\xc4\x65\xb0\xde\x96\x70\x3b\x94\xed\x1a\x16\x71\xfb\x50\xfc\x16\x70\xb8\xa7\x75\x60\xfa\x73\xce\x12\xf4\x88\x1a\xa5\x54\x4b\x30\x27\x36\xfd\xb1\xd5\x54\x4c\x68\x52\xa4\xb7\xf9\x73\x3f\xe8\xe5\xb1\xe5\xcf\x3d\x89\x20\x71\xef\x63\xe4\x1e\xbf\x85\xd0\x1c\x8b\x4d\xec\xee\x2d\x44\x45\xa7\x75\x97\x86\x30\xda\x5e\xd8\x65\x21\x26\x66\x7a\xec\xd6\xa8\xf5\x84\x7c\x10\xdd\x17\xaf\x6a\xc8\x82\x4e\xb2\xe0\xa3\x65\x0d\x29\xed\x3b\xd4\x41\xaa\x6e\x35\xd0\x47\xc7\xdd\x6e\x92\x4f\x32\x7f\x1f\x08\x26\x09\xc0\x6d\xce\x58\xd0\xc2\x90\x16\xc7\xee\x88\x4d\xe5\x92\x8d\x0e\xd0\x05\x09\xda\x39\x09\x3a\x8b\xc8\x14\x39\xd9\x91\xc0\x48\x9b\x6f\xc7\xf1\xbc\x10\x19\x38\x27\x27\x70\xa7\xb3\xc1\x67\x27\x46\x32\xda\x0e\xde\x3b\x31\xb9\x31\xdd\x88\xe6\x1c\x4e\x58\xd8\x49\xab\x05\x6b\xce\x74\x37\xf7\xa9\xd7\xaf\x0d\x0d\x40\x5d\xc4\x24\x34\x05\x7d\x9e\xde\x3b\xe9\xd1\xac\x29\x14\x79\x1e\xde\x6f\xbc\x10\xd4\x11\x4b\x60\x8f\xca\x87\x9d\x1b\xa0\x11\xbb\xb9\xba\xa3\x05\x7e\xbf\x9f\xa3\x62\x22\xbf\x3f\xe0\x39\xc3\xde\x20\xf2\xc1\x23\x6e\xb4\xaa\x6d\x45\x73\x4e\x78\xc4\xe1\xb0\x67\xb8\x89\xc8\x82\x36\x18\xf6\x79\x88\x18\x22\x9d\x24\x8c\x87\xdb\x70\x72\x25\x31\xc5\x0c\x43\x4b\x06\xf8\x33\x40\xc2\x2b\xa6\x6d\x32\x33\x9a\x7c\x32\x55\xf6\xe0\xa4\xca\xde\x84\xb5\xa0\x9d\xd9\x40\x22\x53\xdc\x18\x39\xf4\xb6\xfe\x12\x34\x0b\xad\xf9\x7e\xd0\x35\xa9\x3e\x0f\x4e\x94\x2e\x40\x6e\xf7\x87\xcd\x74\xee\x37\x0f\x07\x7f\x52\x31\x1c\xb6\x33\xc1\xa3\x31\xb8\x9d\x55\x5d\x9d\x9b\xe8\xe1\xf8\xb0\x7f\x80\xc5\x24\xeb\x70\x08\xdc\x4b\x15\x93\xa4\x7e\x38\x1c\x03\x27\x16\xbd\x95\x1c\xd8\xe4\x06\xe9\xad\x6c\x12\x83\x6a\x48\x34\x17\x28\x44\xb3\x34\x05\x3c\x68\x7f\x62\x19\x7d\x2e\x3e\xa0\x5e\xfa\xb0\xa0\x1b\x26\x87\x9a\x49\x20\x04\xad\x13\xe4\x40\x1c\x51\x92\xb4\x6a\x2b\x72\x3e\x8f\x29\x6a\x59\x5b\x75\xf9\x42\xe3\x8f\x4e\x7e\xba\x36\xe6\x17\x39\xae\x51\x21\xd7\xaa\xa1\x07\xf4\xb8\xf1\x87\x08\x5a\xd9\x1d\xd1\x31\xb8\x60\x29\x1f\x77\xf3\xc3\x6d\x04\xb5\x0f\x3e\xb5\xd4\xaf\xc3\x6c\xb1\x91\x90\xe3\xc3\x2a\x2b\x43\xc1\xc7\x54\xb2\x24\x0b\x47\x97\x44\x38\xf1\xe9\x9a\x98\x9f\xe4\x88\x96\x8f\xee\x4f\x2a\xbd\x06\xa4\x47\x1f\xcd\x68\x80\x99\xe1\xa0\xe9\x0d\xff\xe8\x84\xa7\x2a\x0a\x7a\xfc\x98\x13\x9d\xbc\x93\xb2\x52\x9a\x14\x2f\x86\xe7\x7b\x90\xe4\x51\xae\x44\xf3\x18\xb4\x15\xa5\xe0\xcc\x92\x53\xc0\xd0\x9d\xcc\x9a\x22\x51\x71\x6b\x8b\x6d\x66\xb8\x98\xed\xc6\xb6\x33\x18\xad\x4b\xd8\x6e\x06\x8a\x69\x12\xb6\x27\x9c\x77\xd1\x0f\x1f\x08\x70\xbc\x37\x94\x1b\x31\xd2\x58\xca\x85\x18\x6d\xb2\x93\xa8\xb3\x54\x39\x3d\xdc\x4e\xa0\x6e\x1a\x1a\x3a\x0a\xc0\x0a\x74\x3f\x99\x0b\x29\x3d\x0c\xbc\x2f\x36\xb2\x66\x72\x14\x1f\x2d\xa0\xe4\x8c\x3e\x1a\xe6\xe9\x6c\x23\x8d\x38\x12\x73\x74\x35\x6b\xe5\x87\xe7\x05\x63\x03\x64\xf3\xf8\x1b\x5a\x20\xcc\xeb\xc5\x17\x54\xd2\x64\x81\xd4\x7b\x8e\x3b\x72\x75\xf1\xcc\x3b\x2b\x69\xdb\x96\xa3\xa8\x77\x33\x67\x82\xe1\xc2\x18\x15\x69\xa5\x37\xc9\xda\xfb\x4c\xa1\x08\x09\x86\x5e\x94\x7c\x8b\x87\xed\x16\x34\x97\x82\x94\x16\xee\x44\xdb\xb0\x79\xc8\xa1\x94\xaa\x6d\xef\x91\x8a\xf7\xa1\xde\x25\x11\x4e\xb8\x1b\x76\x15\x5c\x35\x73\x57\xf2\x48\x3b\x99\xdb\x37\x74\x9f\x03\x27\x57\xd2\x91\x4a\x83\xb3\x00\xa2\x68\x48\x8e\xfb\xbb\x16\x17\xb0\x95\x56\xdd\x99\x14\x64\xce\x51\xbb\x16\xa0\xa5\xa0\xf7\x1c\xee\xa5\x3d\xa7\x4d\x74\x0e\xde\x30\xa6\xbd\x94\x85\xdf\x66\x3b\x5a\x87\x17\x68\xe4\x8b\xc6\x82\x06\xda\x61\x55\x64\x0f\xa0\x85\xd9\x28\x9c\xb8\x9d\x95\x3a\x4b\x18\xdd\x0a\x0b\xe8\xcd\x13\x9a\x84\xe1\x01\x40\x35\xb4\xf1\x57\xa0\xfd\xcf\x34\xd8\xa8\x02\x2a\xf6\x21\x8a\xd6\x68\xc5\x21\xc4\xc4\x14\x6a\x71\x0c\x51\x51\x4d\x5a\xa0\xaf\x41\xc9\xae\x6e\xe8\xae\xf9\x6d\xd6\x28\x6d\xe7\x3b\x64\x9f\x42\x96\x41\xc7\x95\xd2\xb3\xce\xbe\x4c\x89\x60\x68\x79\x28\x82\x92\x73\x9d\x35\x24\xb1\x48\x31\x98\x07\x5f\x29\x0c\xbc\xcd\xcd\x4d\x12\x93\xce\x42\x3f\xc1\xe8\xbe\xb8\xc5\x40\xea\x00\xc0\x80\x0d\x9c\x7d\xcc\x6f\x28\x70\x66\x57\x20\xd7\x21\x38\x29\x2c\x98\xa9\x72\xf5\xe0\xb1\xb0\x8c\x57\xaa\x86\xc8\xfe\x00\xf3\xf3\x28\xad\x95\xe0\xe1\xec\x10\x41\xed\x26\xdd\x5c\xcd\x94\x90\xa2\x37\x14\x40\x65\x27\x2c\xd4\x8c\x94\x4f\x70\xf2\xd9\xd5\xb9\x06\x29\x49\x8f\x38\x1c\x51\x19\x1b\xfb\x10\xdb\x15\x6d\x38\x1c\xf3\x52\x5e\xbd\x9d\x2b\x9b\x77\x32\x8f\x74\x2a\xf7\xbe\x92\x8a\x35\x74\xfc\x1a\x78\xb0\x6b\x2d\x86\x2c\xa1\x08\x91\x71\x13\x1e\x60\x8a\xba\x27\x35\x09\x29\x27\x1f\xab\xad\x94\xe1\x11\x39\x2d\x31\x82\xdc\x09\x1b\xdb\xfe\xcb\x6c\x32\x1f\x23\x46\x28\x1e\x5a\x55\x59\x02\x5d\xc7\xc6\xef\xbb\x12\x34\xa9\xb5\xca\x30\x70\x3c\x44\x88\xc8\x6f\x95\x78\xac\xe8\x84\x1c\x28\xa4\x34\x6a\x8f\x51\x6a\xd3\x0a\xcb\x22\xed\x2e\xd1\x12\xac\xf3\x4e\xb2\x86\xd3\x4d\x77\xf2\x53\x43\x71\x11\xa4\xa0\x96\xe8\xd5\xe8\x65\x05\x74\xf2\x85\xf6\x92\x94\x39\x8e\x23\xbd\xd6\x4a\x27\x27\xd5\xc2\x16\x51\x16\x81\x83\x7a\x01\x86\xde\xd3\xe6\x3c\x98\xa0\x5d\x1e\xb7\x87\x53\xe4\xa3\xcc\xc0\x31\x2d\x9e\x22\x39\x65\x86\x26\x77\x8f\x14\x59\x2a\x33\x68\x64\x3b\x4a\x91\xac\x32\x82\xa3\x6d\xdd\x84\xa8\x78\x23\xb7\x21\x2c\xd2\xba\xdd\xbc\x75\x91\x66\xed\x31\x9c\x67\x2e\x74\x64\x24\x45\x0e\x8b\x64\x6d\x0c\x71\x0c\x4c\x17\xba\xc1\x0c\xf7\xf4\xbc\x17\xff\xf0\xe0\xfd\x32\xa5\x93\x25\x91\xdc\x12\xf7\xb5\xa7\xc8\x6f\xf9\xb5\x53\x76\x61\x6c\x8b\x10\x15\x1f\x5b\xf4\x67\xb4\xa2\x69\x48\x49\x4e\x91\xbc\x12\xf5\x1a\xa7\xc8\x5c\x19\xfc\xe8\x1a\x5a\x79\x7f\x20\x3d\xc8\x3b\x59\x2c\x9b\xb9\x41\xe8\x93\x48\x8a\x2c\x16\xf4\x21\x92\x98\xcd\x93\x9f\x31\x02\x44\x57\x47\x1d\x23\xb4\xa4\xc8\x46\x29\xb5\xba\xc5\x6a\xf1\x4a\xa4\x8a\x00\xd0\x05\xc1\x6a\x68\x49\xad\x9f\x22\xe9\xe4\x02\xf7\x61\xdb\x8a\x54\xc4\x27\xbe\x46\x04\x51\x04\x88\x21\x50\x03\x1a\xe8\x2f\x02\xc6\xeb\x75\x2d\x68\x86\x51\x9a\xe1\x5c\xd3\x14\x8a\x34\x7b\x9a\xe9\x84\x49\xf9\x34\xdb\x41\xe2\xbc\x78\xf6\xe0\x23\x4c\xa0\x6e\xed\x4c\x5a\xa6\xac\xb2\x9b\xd7\x3c\xe5\x90\x03\x81\xd4\x16\xa9\xf8\x18\x00\x18\x0e\xb8\x24\x72\xe3\xc3\x64\xe4\x02\xcf\xb6\xd3\x20\x24\xa5\x22\x99\x1c\x29\xb2\x5b\xba\x26\x38\xdf\xbe\xf8\x03\x70\x92\x6b\x75\x21\xbd\xdd\x29\x12\x5e\x30\xee\x47\x62\x0e\x53\xc0\x8f\xcc\x7f\x8e\xea\x90\x30\xf4\xa5\x76\x2d\x68\xc3\xb5\x68\xc9\x25\x86\xcc\x17\xd3\xe5\x0b\x20\x27\x8a\xa0\x19\x4d\x0f\x4c\x91\x00\xd3\x76\x5f\xbf\xf6\x6a\x4f\x00\xa7\x85\x08\x8f\x76\xa2\x9f\x81\x88\x57\x32\x45\x9e\xcb\x84\x8a\x86\x84\x52\xe4\xbc\x98\x4a\x00\xc9\x7a\x49\xd7\x0f\x01\x1d\x5a\x86\x90\xf9\x52\x0a\x0d\x09\x7c\x58\xd1\x9c\x3b\x61\x2a\xba\xbb\xc8\x7f\xd1\x8a\x5f\xe8\x7d\x60\xed\x83\x3b\x1f\xbc\x20\x27\x68\xfd\x10\xdc\x59\x76\x76\xa5\xeb\x3d\x09\x8f\x6a\x77\xe4\xc1\x3c\xe0\xe9\x2d\x14\xb9\x30\x0f\xe0\xd8\x5e\x8a\xd4\x98\xca\xd6\x72\x4b\x02\x70\x2f\x33\x66\x4d\xe6\x63\xd4\xa7\xe1\x95\xa2\x47\xb8\x08\xfd\xb4\xb1\x0d\x02\xd9\x2d\x79\x27\xa5\xa1\x03\x8b\x29\xf2\x5b\x40\x4a\xd1\x1a\x41\xc7\x8f\x52\xe4\xb7\x78\xd4\x95\x44\x39\x51\xd2\x66\xc1\x68\x4b\x91\xe9\x12\x70\x06\x49\x18\x92\xa8\x44\x4c\x88\x36\x33\x7a\xc2\xc2\x07\x77\xcf\x38\x5a\xca\x91\xd3\x22\xe1\x0a\x32\x22\x0c\x48\x67\x19\x31\x31\x19\xd8\x1c\x9f\x99\x36\x24\x8e\x85\x04\xa4\x25\x60\x4e\xc4\x61\x96\xf0\xfc\x99\x14\x44\xe2\x8a\x29\x1c\x4f\x13\xb9\x53\xe4\xbb\x58\x75\x7e\x30\x21\x5f\x26\x77\x08\x0e\x6b\x74\x44\x90\x0d\xe3\x6a\x99\xfb\x21\x1e\xea\xa0\x47\x1e\x79\x32\xae\x86\x27\x0e\xe9\x43\x25\xd1\xb5\x8f\x74\x1a\xe8\xf4\x2c\x0a\x0a\x1d\xb9\xd6\x90\x55\x73\xce\xe9\x56\x6d\x90\xa3\x2b\xe5\x9c\x7c\xdc\x19\x52\xe1\x22\xab\x46\x77\x2d\xcc\x8c\x5f\xd1\xd0\xdf\x47\x4d\xd8\xcc\x8d\xc7\x3a\x0f\xff\x79\x87\xd9\xa4\x7c\x69\x49\xc3\x12\x19\x38\xba\x9b\x9c\x8b\x63\x6d\xea\x29\x85\x8c\x10\xa5\xc8\xcd\xb9\xcd\x9d\xae\x17\x4d\x1a\x14\x48\xcf\xc9\x85\xe5\x6a\xee\xfc\xce\x2d\x27\x4b\xb0\xe9\x78\x4c\xe6\xe7\x0f\xc7\x67\x12\x14\xfa\xca\x98\x6c\x2b\x16\x71\x72\xa5\xdb\xe2\x09\x19\x71\xa3\xa5\x48\xd5\x19\xa1\xb5\xea\x9a\x98\xeb\x2c\x45\xbe\x4e\x08\x8d\x55\x8b\xa4\x9d\x01\xdb\x74\x35\x68\xc1\xa3\xf5\x66\x04\x36\x5a\xf1\x7a\x16\x9f\xa6\xd7\x14\xf2\x75\x1c\x28\xb6\x78\x91\xb4\x73\x57\x9d\xed\xf2\x25\x7d\x82\xd4\x1d\x87\x24\x21\x4e\x08\x3f\x26\x8e\xca\x3c\xff\x30\xe5\x2f\x7d\xe9\x38\x6f\x53\x84\x12\x98\x22\x73\xa7\xd0\xaa\xa5\x69\xec\xe9\xce\x7b\xf0\x19\xbf\x24\xea\x0a\xba\x94\xb4\x85\x8c\x34\x1e\xd1\x18\xcb\xce\x9a\xd5\x24\xc8\x9f\x3c\x04\xbf\x90\x6b\x1a\xe9\x3c\x8c\x36\x7e\x90\xc8\x93\x0b\x9b\x77\xb1\xed\x0f\xa9\x3a\x1e\xb4\x30\x56\xc8\xda\xb1\x5d\x9d\x4b\xb2\x45\xc8\xd9\x19\x11\x4b\x55\x6d\xf0\x34\xd1\x9c\x97\x59\x64\x29\x52\x78\x02\x28\x2d\x85\xc8\xe4\x09\x80\x31\x43\x0f\xe9\x3c\x01\x34\xaa\xe8\x91\xd2\xc3\xda\x96\x56\x26\x48\xe8\xb9\x89\xa6\xa0\x69\xae\x29\x52\x79\x58\x53\x68\x25\x48\x85\xbe\x9f\x38\x17\x1d\x29\x5e\xc8\xe2\x29\xb4\xc8\xf3\x3c\xd2\x14\x54\x44\x97\x7b\x4b\x03\x30\xc8\xa9\x3a\x1d\x9f\x1d\x4f\xd6\xd1\x20\x25\x69\xe3\x78\x92\x0e\xd4\x8c\x6e\x0a\x72\x73\xa2\xf9\x6b\xef\x9d\xb0\x62\xb6\x8d\x9f\x35\xb3\xa2\xa5\x97\x21\x52\x75\x4c\x17\xf1\x1d\x1c\x7c\xbc\x47\xc5\x10\x9e\x94\xcc\x2b\x71\xa5\xdb\xb6\x47\x93\x97\x54\x2d\x48\xc5\xb9\x92\x27\x57\xe4\xe0\xdc\x40\xe4\x74\x03\x18\x72\xc4\x1a\x4d\x1f\x61\x0f\x9e\x7f\x7c\x06\x29\xe8\x5b\x22\xe9\x81\x87\xea\x66\xc1\xa7\x9e\x1e\x0a\xf2\xb6\x4e\x54\xe2\x0f\x40\xe2\x63\x8b\xe9\x38\xb7\xc9\x1e\x43\x33\x0f\x06\x55\xb4\x96\x14\x2d\x20\xbb\xe8\x9e\x43\xce\xce\xad\x02\x90\xbc\x62\x82\x54\x44\xc8\xdb\xb9\x8a\x1a\xd4\x82\x1e\x42\xf2\x8e\xed\xf4\x45\x98\x2a\x91\xc2\xdf\x14\x18\x03\x3e\xa4\xfb\x3d\x45\x4a\x4f\xe0\x59\x8e\xb4\x16\xe3\xd6\x2d\xe3\x90\x98\xaa\xb3\x96\x5e\x0e\x48\xed\x31\x92\xa6\x50\xa5\xc8\xe9\xf1\xb7\x18\x17\x3a\x85\x12\xa8\x74\x11\x63\xc7\xa6\x48\xe3\x51\x2d\x34\xb4\x46\x3a\xe6\xd3\x2e\x25\x6c\x17\x38\x41\x5c\x38\x7c\xee\x97\xe9\x1a\x71\x05\x6d\x84\xa5\x47\x8c\xe3\xba\xd4\x96\xe9\xe4\x29\xb2\x76\xd6\xac\xe8\x1c\x7d\x96\x0c\x5f\xa5\x48\x06\xba\xb3\x4a\xd1\x63\x0d\x61\x44\x98\x42\x20\xff\x47\x43\x51\x90\xd1\x89\x14\xd9\x3f\x23\x62\x61\x8c\x99\x77\xb5\xf5\x5b\x1d\x74\xed\x12\xef\x37\x45\x36\x50\x80\x26\x61\x78\x0a\x00\x29\xb8\x50\x64\x44\x3b\x45\x2a\x50\x21\xce\xa4\x76\x42\x16\x50\x2b\xa0\x48\x5a\xd1\x82\x4e\x5a\x72\x40\x91\x07\x14\x00\x23\x2e\x00\x24\x01\x15\xba\x6b\x69\xc7\x26\x12\x7f\xbe\x28\x55\x93\x91\xc5\x14\xf9\x3e\x92\x35\xe7\x8e\xd1\x8a\x0a\x69\x3e\x25\x23\x77\x40\x24\xf9\x60\x34\x8b\xc4\xe0\x49\xb4\x12\xb4\xa7\x0a\x69\x3e\x2d\x23\x4d\x33\xe4\xf8\x98\x56\xd1\x73\x84\xfc\x1e\x1e\xb1\x4b\x91\xd9\xd3\xe7\x93\xf3\x97\xaf\x31\xb2\x55\x45\xa2\x68\x69\xbe\x99\x41\x16\xc4\x30\xf7\x97\x8e\x81\xb6\x22\xf3\x5d\x00\x58\xaa\x08\xcf\x74\xc0\xef\x11\x21\xce\xd1\x10\xea\xac\x9a\x85\x58\x50\xcd\x93\x85\x3c\xdd\x21\x9f\x07\xd2\x3f\x04\x09\x67\xde\xf2\xa0\xdb\x90\xfb\xe9\x89\xdc\x39\x4b\x73\xb4\x93\xe0\x2a\x58\x63\x69\x3e\x72\x9a\xfb\x23\x5b\xd7\x14\x31\x8a\x54\x9a\x03\x92\x01\x2c\xcb\xe9\x88\x6f\x8a\xc4\xac\xe1\x2c\xd9\x16\x11\xf7\x39\xb2\xb1\x06\x54\xaf\x98\x23\xb0\x2c\x80\xc1\x07\x07\x19\xc1\xad\xc3\x8f\xaa\x1b\xe8\x56\x89\x08\xe5\x20\x45\x52\x56\xe9\xa2\x65\x56\xcd\x89\xdb\x63\xfa\xc3\x0d\xb7\x29\x67\xb8\x0c\x17\xa9\x39\x0c\x43\x7f\x15\x2d\x51\xda\x99\x59\x91\xf2\xbb\xa0\xfc\x30\x15\x54\x0d\x5d\x21\x54\xa4\xfc\x3e\x28\x5f\xab\xab\xa0\xda\x3f\xde\x02\xa4\xcb\x1f\x82\xf2\x43\x3c\x82\x86\x1d\xd1\x9a\xa0\x7d\xe9\x9c\x4d\x11\x0d\x9a\x83\x9f\x22\xbd\xeb\x8b\x29\x87\x87\x19\x48\x0c\xc7\x23\x40\x09\x49\xae\xba\xfb\x9c\xe6\xd7\x27\x76\xea\x39\xd1\xb0\xeb\x9c\xa8\x66\xba\xb6\x9d\xf8\x3f\x13\x50\x47\x74\x26\x92\xc5\xbc\xa5\xd7\x28\x4b\x92\x28\x53\x64\x8d\xcd\x8d\x24\x0d\x46\x18\x1b\x28\x33\x97\x9a\x93\x0c\x9b\x14\x99\x65\xf3\x1b\x96\x50\xb7\xf4\xa5\x96\xb4\x98\xe8\xdc\x0b\x0a\xac\x98\xa2\x9d\x64\xb6\x5b\x30\xf7\x84\xab\x3a\x17\x0d\xb3\xea\xe1\x7c\x3a\x3a\xc0\x38\x91\x58\x31\x7e\x01\x9d\x34\x40\x1f\xee\x0a\x7f\x51\xb7\xe1\x30\x3e\xa5\x46\x1b\xfe\xc8\x45\xfb\xf5\x57\x32\x77\x87\xe7\x06\x5e\xb1\xd9\xe4\xdd\x40\x7c\x90\xac\xa8\x14\x69\x69\x06\x9a\x99\x35\x35\x70\x29\xa3\xd7\x6f\x52\x64\xaa\xf5\xc5\xe6\x0b\x26\x28\x48\x2f\x05\xa4\xaf\x55\xc2\x58\x45\x1b\xc7\x9e\xba\x36\x8a\x93\xad\x22\x6d\xcf\xa7\xbb\xf0\x74\x04\x08\xc9\x6a\x2d\xd3\xec\xac\x59\x4b\x8a\xa4\xe7\xa5\x49\x51\xd0\xd4\xd9\x14\x39\x68\xa3\x17\x3b\x62\xe3\x20\x09\xcd\x83\x16\x64\x0d\xfc\x1d\xf0\x9a\x74\x6f\x82\xf7\xb0\x71\x0e\x3a\xc9\x59\xc0\x05\x1a\xf5\x52\x67\x73\x15\x51\xed\x48\x40\xb3\xb4\x21\x8d\x24\xb3\x5c\x34\x8a\x77\x92\xe6\xa4\xa6\x30\x1d\x50\xc8\x25\x8f\xfc\xb2\x61\xd4\x62\xf7\xf0\x52\x24\x95\xd9\x9b\x88\x28\x04\xe4\x94\xdd\x41\x92\x36\x26\xf2\xc9\xfa\xb5\x33\xca\x16\xdd\x67\x86\x2e\x94\x92\x34\x0b\x90\x39\xc6\x99\xec\xfb\x6c\xe9\x78\x16\x78\x79\xb9\x47\xcc\x54\xe4\x8c\x39\xd2\xe8\x8d\xc9\x08\xc5\x04\x49\x63\x9c\x27\x57\x61\x48\x83\x16\x49\x63\x9c\x27\xf5\x70\x43\x30\x72\x8b\x21\x45\xda\x18\xe7\x49\x21\x0c\x57\x57\x5a\xda\x91\x39\xc6\x79\xc2\x6a\x20\x0d\x60\x7f\xf7\x80\x2f\xf4\xd1\xb3\xc7\xf8\xc0\x25\xa6\xfd\x40\xc8\x1f\x1b\x68\x6a\xd1\xb8\xaf\xa7\x8f\x79\x14\x3d\x7d\x48\x20\x1b\x5e\x42\x21\x01\x87\x89\x16\x1e\x75\x3b\x20\x77\x8c\xd1\xb9\xcc\xdf\x5d\x2c\xb4\x6a\xdb\xc8\x20\x7a\xcf\x49\x6f\x0d\xe5\xba\x8b\xb4\x07\x4f\x12\x42\xdb\xaa\x60\xf7\x84\xb3\x0b\x3d\x4e\xde\x75\x02\x2c\x7a\xb9\x2d\x45\x06\x59\x2b\x20\x0a\xca\xde\x26\x96\xeb\x12\x0a\x5f\x21\x61\xc6\x96\x35\x89\xc8\x42\x44\x5c\x4b\x65\x48\x12\x73\x7e\x19\xfa\x19\x91\x0c\x49\x62\x88\x6a\x48\x10\x8a\x8b\x88\x9d\x0e\xb2\x37\x4f\x35\x34\x64\xb6\x13\x11\xa1\x3e\x2a\x65\xe8\xae\x1f\x3c\xc7\x0c\x64\xe4\xc5\x88\x0c\xd9\x61\x9c\x93\xb9\x48\xc8\xa8\xe0\x02\x73\x76\x4b\x05\xbf\xce\x53\x84\xa4\x1b\x9a\x23\xf9\x88\x35\x2d\x23\x1f\xdd\xc8\xde\xfc\x41\xf4\x6e\x40\x4a\x56\xd0\x35\xf9\xa0\x68\xd3\x00\xb7\x05\x0c\x8e\x1b\x12\x09\x13\xe7\x38\x72\xae\xcc\x52\xff\x2e\x89\xee\xea\x1c\x68\x4c\xea\xaf\x0f\x37\x2d\x19\x79\xcb\x90\x14\xd6\xb7\xdb\xdc\x49\xc4\xda\x93\x3d\xb4\x35\xa2\xc9\x3b\x79\x21\x71\xe8\x8a\x15\x75\x2b\xef\xfd\x99\x9c\x9c\x30\x4f\x09\xbb\xdc\x99\x95\x8c\x1c\xa9\x74\xe2\xe0\xdb\x18\x93\x3f\x4b\xf7\x01\x68\x31\x64\x90\xf9\x17\x8f\x04\xab\x15\x79\x81\x3c\x4b\xfd\x2d\x5c\xf2\xc2\x49\x86\x14\xb3\x81\x35\x6c\x80\x6b\xa0\x7b\x87\xd2\xa2\xac\xd2\xd1\xb5\x91\x7a\x57\xad\x06\xb0\xc9\x55\xc0\x8d\x84\x15\xc1\xed\xcd\x9c\x7e\xc9\x28\x43\x9a\xd9\x15\xe8\x5b\xeb\xd9\xc4\x21\xd3\x74\x3e\x3a\xe6\x41\xf3\x8e\xb4\xe0\x32\xe4\x7a\x0d\x97\x36\x8c\xdf\x8b\x9c\x47\x94\x35\xe6\x3c\x3c\xd8\x4b\x16\xdd\xf8\xad\x00\x61\x11\x8b\x2b\xf3\xcf\x1c\xf5\x3d\x71\x8c\x57\x12\xb7\x9b\x3a\xb4\x04\xdb\x87\xd5\x45\x7b\x7f\x08\x2a\x33\x56\xab\x0b\x5d\xd9\xf1\x09\x46\xb2\x55\x32\xa4\x80\x85\x40\x52\x67\x20\x09\xac\x81\xce\x46\x86\x8e\xe3\xb9\x68\xb8\xd9\x43\xfb\x6d\x33\x64\x81\xf9\x8b\x9b\xaa\x2c\x05\x17\xa4\x2d\x90\x21\xc9\x6b\xba\x7e\x43\x0a\x3b\xf2\xbb\x6e\x15\xb3\x86\xb5\x34\xc6\x2b\x0e\x4d\x1b\x30\x19\xb2\xbb\x86\x25\x13\x5b\xc5\xc8\xea\x1a\x40\xb1\xf7\xe1\x32\x64\x76\x55\xca\xce\x95\x76\x4e\x72\x2f\x33\xe4\x79\x5d\x05\x0b\x18\x02\x73\xc8\x64\xa3\x44\x00\x07\xcf\xd2\xbb\x91\xc1\xa7\x6c\x3d\x91\xdb\x45\x47\xee\xcd\x48\xda\xba\xf3\xd9\xa1\x32\x38\x73\x92\xa5\x72\x74\xc5\x5b\xd1\x24\xb5\x6a\x4c\x44\x42\x90\xd2\xa5\x5a\x68\x22\xaf\x06\x64\x6b\x7f\xd5\xba\x85\x42\x58\x28\x8c\xa1\x45\xc3\x5f\xe6\xb7\x16\xf4\x3d\xd9\xcc\x7d\xfb\x43\x22\x91\x14\xd2\x46\x67\xf5\x21\x05\x0c\x71\x6b\xaa\xb0\xad\x34\x40\xd2\x5b\x2c\x96\x3e\xab\x65\xc8\x11\xc3\x12\x19\x55\x4d\xe4\xfa\x7b\x86\xd4\x31\xc4\xa5\x54\x61\xf7\x75\xb2\xfc\x7a\x5e\xfe\x8d\x2a\x1f\x52\x6a\xe7\xa5\x37\xb8\x17\x74\x06\x92\xc1\x1f\x17\xf9\x8c\x93\x6e\x91\xf0\x4e\x1b\x5a\x26\x90\x6e\xa6\xf2\x2f\xc0\xed\xec\x9e\xe8\x1c\xb7\x9f\xe1\xba\x26\x8e\xf4\x0f\x08\x08\x7e\xb9\x27\x8d\x22\x2f\x2e\x67\xc8\x39\x0b\x60\xa4\xd1\x9f\x21\xe9\x8c\xf3\xe4\x0b\x27\x6d\x0d\x64\x9b\x0d\x07\x9f\x06\xb4\x49\xb8\xa4\xad\x92\xcd\x74\xeb\xa7\xa1\x5b\xe5\x1f\xc0\x91\xa3\x47\x9c\xd3\x61\xe5\x0c\x69\x66\x95\xea\xf4\xf0\xa8\x28\xdd\x78\xe4\x91\x4d\xb0\x99\xac\x4c\xc9\x26\xe2\x40\xce\x90\x47\x36\x41\x33\xba\x86\x98\xb0\x22\x81\x6c\x42\xae\xe9\x0a\x80\xb6\x60\x90\x51\xe6\x81\x24\x28\xbc\x5e\x7e\xd6\x2c\x9f\xfb\x21\x86\x64\x1d\x7b\x59\x32\xdb\x86\xb7\xce\x8d\x55\x2d\x51\x3a\x7e\xaa\xcf\xb6\xe1\x7d\x74\xbc\x35\x1c\x81\xee\x03\xa8\x14\x5f\x63\x8c\xfd\x0c\x99\x63\x63\x9d\x6d\xbc\xe9\xc7\x00\xe7\xd6\x62\x04\xc9\x42\x24\x30\x1e\x91\x77\xff\xae\x93\x66\x05\x44\x1e\x20\xcc\xb6\xfe\x71\xd4\xb3\xe8\xb5\x38\xbd\x5d\x21\x5f\x8c\x6b\x18\x5e\xfd\x1d\x2e\x03\xaa\x86\x9e\x41\x8c\x6a\x52\x7e\x9c\x0c\x39\x62\xe7\x73\x3c\xfa\x98\x21\x39\xcc\x6a\xd1\xb2\xe2\x2a\x22\x2a\x07\x79\x61\xaa\x68\xd4\xa5\x17\xa8\x46\x5c\x04\x09\x5c\x13\xc0\x85\x83\xe8\xce\xbf\xaf\x62\x93\x36\xc6\xe6\xce\x90\x1d\x76\x13\x17\xd1\x6f\x5d\x2c\x21\x8d\xe4\x9d\xbf\x09\x5e\x32\x4d\x37\xcf\xb3\xb8\x35\xfd\xec\x6a\xb6\x3b\x4c\x3c\xf4\x92\x24\x73\x65\xc8\x0b\x53\x2d\xfd\x76\x60\x86\x84\xb0\x41\xb2\x1a\xb0\xfd\x86\x2b\x95\xa6\x35\x3e\x52\xc3\xec\x75\x66\x4a\x83\x84\xab\x30\xf4\xe5\x82\x0c\x49\x62\x7d\x1a\x23\x25\x12\x19\x62\xdb\xb7\xb7\x96\xee\x04\x12\x39\x6a\xf6\x95\xfe\x08\x72\xc4\x3c\x6f\x7f\x60\x34\x90\x5f\x43\xa6\x98\x87\x8e\x4c\x68\x1a\xfb\x78\x1d\x60\x7c\x0c\x8d\xc6\xae\x1f\xb0\x23\xdb\x99\xc6\x6e\xfc\xd3\x8f\x9d\xa1\xb9\x19\xd9\xf4\xe4\x53\xdb\xdb\xbd\x24\x64\x37\x41\x8c\x38\xd3\x0b\x0f\x39\x62\x3d\x88\x6e\x8c\x3f\x4a\x90\xfb\x2d\xd2\xc2\xdc\x45\x5f\x3a\xf6\x92\xed\xd9\x23\x2a\xf2\xb1\xdc\x6b\xfb\xaf\x5f\x49\x00\x0f\x18\x2f\x24\x00\xb7\x50\xc9\xf8\x25\xb1\x82\x5c\x19\x13\x3f\xac\xb1\x82\x47\x54\xd2\x61\x46\xa3\x48\x98\x14\x64\xcc\x2b\x43\x92\x18\x14\x64\xb8\x3f\xf3\xcf\x37\x4d\xaf\xc0\xc4\xce\x8a\xc8\x16\xe3\xaa\x10\xd0\xd2\x6d\x3f\x78\xfb\xab\x20\x57\x03\x52\xc3\xca\x81\x4f\x3b\xfe\x22\x0d\x89\xf3\xcf\x74\x93\xb6\x0a\x92\xc3\x5a\xad\x8a\x8e\xdb\xa4\xea\x1a\xba\xc9\x28\x1e\xe2\x23\x16\x5f\xce\x90\x2b\x66\xb8\x16\x39\x8d\x60\xc1\x53\x94\x0b\x3a\xfe\x90\x3f\xe3\x68\x49\x3a\x04\x6f\x57\x2e\x55\x58\x3c\xc1\x22\xf5\xc1\xc3\x7b\x66\x39\xf9\xfe\x6f\x76\x7c\x7b\xc2\x99\xc8\x56\x80\x5c\xb0\x8a\x99\xca\x46\x6a\x43\x53\x5f\x76\x60\x95\xa2\xfd\x74\xc8\x02\xf3\xa0\x84\x9c\x51\xff\x82\x13\x68\x4e\xbf\x23\x97\x21\xe1\xeb\x2c\xac\x64\x74\x25\x18\xbe\x6b\x73\x38\xc7\x2e\x7b\x66\x48\xf3\xba\xb5\xa5\xd2\x35\xb9\xba\x02\xa2\x97\xa0\xb7\x1e\xe4\x77\x39\xc6\x15\x93\x09\xe3\x3c\xe2\x2e\x40\x9a\xd7\x44\x97\x8b\x2d\x31\xa4\x7b\x3d\xbc\x97\x49\x4f\x3a\xd2\xb9\x72\x29\x68\xeb\x14\xd9\x5a\x63\xf0\xbe\x80\xf1\xe2\x5b\x64\xab\x43\xe6\x96\x7b\xa3\xba\xcf\xd2\x4a\x46\x5f\xd4\xca\xfc\x3b\x4e\x9a\x09\x49\x8b\x2f\x12\xb9\x98\x31\xc2\x0c\x36\x96\xec\x0d\xb2\x66\x60\x83\xdf\x8d\x05\x7a\xf0\x91\xd6\xc5\x8c\x1c\x77\xf6\x56\x83\x7d\x78\x05\x91\x0d\x8c\x79\xd6\x8c\x8f\x94\x21\x9f\x89\x82\xcf\xab\xc6\x87\x25\x80\x95\xcd\x34\x5b\xce\x92\xee\xed\xdd\x72\xf0\xfc\x3d\x7c\xad\xa0\x9f\x82\xcc\x90\x2b\x76\x96\xa2\xa0\x47\x60\x1b\x00\x12\xba\x49\xbb\xe9\xb5\xb5\x87\xcf\xce\xfa\x46\x96\xf5\x14\xea\x5b\x12\x37\x62\x90\x39\x76\x15\xac\xa0\xb7\x25\x76\x0c\x11\x0b\x56\x24\x12\xc8\x4c\xc3\xda\x20\x42\x3e\xc7\xe4\x73\x4c\x72\x8e\x05\x1b\x90\x4b\xe6\x91\x0b\x1f\x2e\x1e\x79\x72\x24\xca\x3f\x1f\xa5\x8d\x4d\xc2\xc7\x83\x66\x30\xe4\x97\xdd\x15\xa3\x1b\x86\xfc\x32\x5b\x41\x0d\xc2\xd0\xd2\xed\x9f\x8f\x0a\x9e\xca\x99\xa9\xf2\x97\xc7\xdc\x25\x2f\x21\x32\xd2\xca\x19\xab\x63\xf8\xed\x8e\x85\x6d\x32\x0f\x8e\x96\xa6\x62\x97\x88\xa6\x40\x86\xda\xf4\xeb\x1b\x34\x43\x26\x43\xa6\xda\x0c\x18\xa9\x73\xef\x43\x69\xf4\x45\xea\xcc\x73\xd5\x8a\x42\x83\x31\xb1\x47\xe5\x33\xa4\xa7\x85\xb8\xc8\x37\x9d\xf8\x5d\xf9\x03\x73\x15\x8b\x46\xc2\xbf\x19\x52\xd6\x86\x82\xf3\x03\x74\x58\x34\xf2\x55\x1e\xb8\x4b\xe3\x9b\x35\xb2\xd9\x02\x58\xa4\xbe\xf0\x31\x14\x12\x81\x74\x36\x51\x24\x39\x8b\x18\x6e\x48\x66\x2b\xf4\xb0\x01\x25\xee\x87\x23\x67\xd1\xb5\x22\x3a\x20\xc8\x71\x7b\x28\x3d\x1f\x1a\x57\x3e\xd2\xc6\xb5\x7f\x7c\x81\xde\x21\x3d\xe3\x4d\x83\xe3\x75\x71\x56\x93\x56\x3a\x32\xd8\xfa\xb3\x58\xe4\x26\x4e\xc6\xfd\x53\x9e\xa0\xeb\xf1\xf9\x9f\xb9\xbb\x34\xc8\x88\x24\x47\xdd\xa6\x7c\xff\x5c\xf7\x3a\x56\xc9\xbf\x77\x9f\xf2\xc3\x73\x75\x59\xac\xba\x98\x67\x8a\x1f\x9f\x2b\x49\x63\x95\x2c\xb8\x53\x39\x7b\xae\xe7\x2d\x56\x4f\xd4\xad\xea\x1f\x46\xab\xd4\x2d\xf2\x1d\xee\xdd\xb6\x95\xed\x66\x3c\x53\x93\x6e\x1f\x7c\xb8\xa4\xa1\x88\x0c\xb8\x56\x15\x3c\xa2\x97\x91\xfa\x36\xde\xf2\x49\x6a\xf6\x21\x6a\xf1\x95\x5c\x1e\x48\x70\x43\xa8\x68\xe2\xd0\x74\x06\xd5\x60\xac\xa2\x77\xa1\x22\x0b\x9f\x15\xd7\xc0\x6d\xf8\xfc\xf2\x4b\x50\x49\xf8\x33\x3c\xf3\x2a\xd6\x64\x15\xf3\x85\x17\x56\x42\xaf\x3e\xe4\xbb\xe5\xac\x29\x62\xcb\x0a\xa9\x6e\x67\xcd\xc8\xb0\x19\x92\xdd\xc0\xd2\x41\x68\x24\xb6\x89\xba\x20\xad\x6d\x64\xb0\x69\x76\x05\x49\xfb\x01\x90\xa9\x06\xa0\x63\x73\x8a\x4c\xb5\xe1\x0d\x04\x1e\x89\x04\x17\xde\xa6\x50\xb7\x52\x46\xf7\x39\xff\xb2\x5a\xd7\x82\x1e\x18\xb9\xe4\x02\x45\xba\xda\xad\x5d\xf2\x17\x21\x63\xad\x06\xb0\xb4\x37\x7f\xa0\xab\x19\x9d\xa8\x46\xde\x89\x9f\xf2\x72\xbf\xe1\xd5\x7e\xe0\x2f\x86\xf5\x7f\xe2\x4f\x6c\xe2\x4f\x88\x9e\x92\x3e\xd5\x5f\x54\xac\x44\x51\x40\xf3\x3e\x3c\xc1\xd8\x0b\xc7\xa7\xb7\x97\x95\xfb\xef\x67\xfc\x15\xce\x37\xff\xd1\xa4\x54\xbc\x33\xc3\xf3\x82\x8c\xf7\x06\xf6\x0b\x91\x33\xfc\x35\x35\xcf\x58\x66\x05\x77\x8d\x1b\x7e\xea\xd5\xb5\x6e\xf8\xdb\x35\xea\x6d\x6a\x51\x6f\x57\xe6\x12\xc6\x26\xf5\x98\xef\x7f\xf8\x8f\x00\x00\x00\xff\xff\xdc\x38\xf5\x02\x18\x79\x00\x00"), }, "/static/lib/font-awesome-4.7.0/fonts": &vfsgen۰DirInfo{ name: "fonts", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), }, "/static/lib/font-awesome-4.7.0/fonts/FontAwesome.otf": &vfsgen۰CompressedFileInfo{ name: "FontAwesome.otf", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 134808, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x9c\xfa\x79\x7c\x93\xc5\xfa\x07\x0c\xcf\x34\xc9\x9d\x74\x26\x4b\x97\xa4\xd2\x26\x77\x02\xc8\xa2\xb2\xb5\xd9\xda\x0a\x28\x50\x16\x05\x41\xc4\x88\x2c\xc2\x4d\xda\xa6\x4d\x68\x9a\x84\x24\x5d\xa1\x74\x87\x42\xa0\xd0\x36\xa5\x94\x52\x5a\xa0\x2a\x9b\x2c\x82\xe0\x7a\xac\xc7\xa3\x22\xb8\x13\x3d\x8a\xfb\xf6\x73\x45\x3d\x1e\x74\xd2\x4c\x8a\xef\xe7\x4e\xc0\xa3\xef\xf3\xc7\xfb\x7e\x1e\x42\x73\x5d\x33\x99\xb9\xbe\x33\xd7\x5c\xdb\xe4\xce\xbd\x16\xcb\xbd\x00\x81\x3a\x20\x00\x23\xf3\xe6\xce\x1d\x99\xeb\xfb\x2a\x1b\x00\x70\x0c\xc0\xc8\x73\x73\x16\xcf\x5c\x02\x58\x70\x0b\x80\xd4\x09\x00\xc8\xbc\xf7\xfe\x29\xfa\x16\x7d\xf5\x6a\x00\xe9\x5e\x00\xc0\x9a\x82\x52\xab\x07\xbe\x72\xc0\x02\x20\x8d\x02\x20\xd0\xd8\x6d\xd6\x42\xf1\x9e\x9f\x8f\x01\xf8\xc7\x08\x00\x80\xd9\x6e\xb7\x59\x15\x02\x74\x06\xc0\x3f\x16\x03\x00\xc6\xd8\x4b\xfd\x95\xf3\x27\xdc\x74\x1e\xc0\x3f\xfc\x00\xa0\xef\x4b\xad\x95\x9e\x84\x17\x16\x03\x90\x80\xd6\x00\x00\x18\x97\xb5\xd4\x76\x47\xd2\x98\x9b\x41\x02\xb2\x03\x20\x94\x79\xdc\x3e\x3f\x10\x00\x00\x12\xe4\x95\x00\x80\x91\x10\x08\x05\x00\x42\x28\x9d\xeb\x76\xf9\x67\x56\xd8\x7c\xee\x52\x1b\xdf\xce\x0b\x27\x81\xc8\x9b\x30\xf2\x56\x42\xe4\x2d\x41\x38\x5d\x18\x90\x0a\x02\x52\xe1\x56\xda\xa9\x49\x84\x1a\x06\x8a\xb4\xfd\xe0\x81\x3a\xf3\x1f\x81\xc0\x9f\x8c\x54\xac\xd1\x9f\x53\x68\xf4\x9f\x26\x1f\x67\x01\xfc\x4c\x96\x92\x70\x36\x01\x40\xc0\x00\x0c\x92\x41\x3a\xd0\x82\xd1\x60\x22\xc8\x04\x46\x30\x0d\xdc\x01\xe6\x80\x79\x60\x21\xb0\x80\x87\x00\x07\x6c\xc0\x0e\x4a\xc1\x3a\x50\x05\x6a\x40\x3d\xd8\x0e\x3a\x41\x0f\xe8\x07\x47\xc1\x29\xf0\x24\x18\x04\xff\x02\xe7\xc1\x3b\xe0\x23\xf0\x0d\xf8\x05\xfc\x0e\x86\x21\x80\x42\x28\x81\x49\x50\x05\xd5\x50\x07\x6f\x86\xb7\x42\x23\xbc\x03\xde\x05\x2d\x90\x83\x4e\xe8\x81\xeb\xe1\x66\xd8\x09\xf7\xc2\x03\xf0\x18\x7c\x1c\x9e\x85\x4f\xc3\xe7\xe1\xbf\xe0\x79\xf8\x2e\xfc\x02\x7e\x0f\x7f\x82\xff\x85\x04\x5e\x4b\x40\x09\x69\x09\xea\x84\xf1\x09\xc6\x84\xe9\x09\xf3\x12\x96\x24\x2c\x4f\x28\x4a\x70\x27\x54\x25\x6c\x4a\xd8\x91\xd0\x9d\x70\x30\xe1\x78\xc2\xd9\x84\xc1\x84\x57\x13\x42\x09\x9f\x25\xfc\x92\x70\x35\x21\x9c\x10\x15\x08\x05\x32\x41\xba\x40\x2b\x18\x27\x98\x28\x30\x08\x72\x05\x79\x82\x7b\x05\x4b\x05\x05\x02\xb7\xa0\x5a\xb0\x45\xb0\x47\x70\x50\x70\x42\xf0\xac\xe0\xbc\xe0\xa2\xe0\x4d\xc1\xbf\x05\x5f\x09\xfe\x2b\x88\x0a\xc5\x42\xb9\x50\x2d\x1c\x2d\x9c\x22\x34\x09\xa7\x0a\xe7\x0a\x17\x0b\x1f\x10\xae\x10\xda\x84\x3e\x61\x8d\xb0\x49\xb8\x4d\xd8\x2e\xdc\x2d\x3c\x28\x7c\x44\x78\x58\x78\x4a\xf8\x84\x70\x50\x78\x41\x78\x49\x78\x59\xf8\xa5\xf0\xaa\x88\x11\xa9\x44\xe3\x44\x13\x44\x59\x22\xb3\x68\x9a\x68\x8e\xe8\x5e\xd1\x83\x22\x4e\x64\x17\x95\x8a\xd6\x89\xca\x45\x1b\x44\xb5\xa2\x46\xd1\x76\x51\x9b\xa8\x47\x74\x40\x34\x20\x7a\x44\x74\x5a\xf4\xac\xe8\x05\xd1\xcb\xa2\x8b\xa2\x90\xe8\x0b\xd1\xaf\xa2\x61\x26\x81\x91\x32\x4a\x46\xcb\xdc\xca\x64\x32\x46\x66\x3a\x33\x9b\x59\xcc\x2c\x63\x1e\x62\xac\xcc\x5a\xa6\x8c\xa9\x67\x9a\x99\x6d\x4c\x90\xe9\x66\x0e\x32\x47\x99\xa7\x98\x97\x98\xd7\x98\x7f\x33\x9f\x32\xdf\x30\x57\x98\xff\x30\xd7\xc4\x8c\x58\x2e\xbe\x49\xcc\x8a\x6f\x11\x4f\x14\xeb\xc5\x66\xf1\x3c\xf1\x72\xb1\x5d\x5c\x25\x6e\x14\xb7\x8a\x77\x89\xfb\xc5\x8f\x8a\x1f\x13\x9f\x16\x3f\x2f\xbe\x28\x7e\x57\xfc\x99\xf8\x1b\xf1\x15\xf1\xaf\xe2\xa8\x44\x2a\x51\x4b\xc6\x4a\xb2\x24\x66\xc9\x54\xc9\x1d\x92\x39\x92\x85\x92\x07\x24\x05\x92\x12\x89\x5b\x52\x29\xd9\x2c\xe9\x94\x74\x4b\x0e\x48\x0e\x49\x8e\x49\xce\x49\xfe\x29\xb9\x28\x79\x53\xf2\xa1\xe4\x6b\xc9\x7f\x25\x43\x89\xe2\xc4\x11\x89\xda\xc4\x31\x89\xa6\xc4\x79\x89\x4b\x13\x8b\x13\x9d\x89\x9e\xc4\xf2\xc4\xba\xc4\x96\xc4\x9e\xc4\x63\x89\x27\x13\x9f\x4a\x7c\x3e\xf1\xf5\xc4\xf7\x13\x3f\x4b\xfc\x3e\xf1\x6a\xe2\x30\x82\x08\xa3\x14\x94\x81\xc6\xa1\xdb\xd0\x24\x94\x89\x0c\xc8\x8c\x72\xd1\x34\x74\x27\x9a\x85\xe6\xa2\x7b\x11\x87\x0a\x50\x19\x0a\xa0\xdd\xe8\x30\x7a\x0c\x9d\x42\xcf\xa1\x7f\xa1\xf3\xe8\x6d\xf4\x31\xfa\x0a\xfd\x07\x45\x30\xc0\x02\x2c\xc6\x2a\xac\xc6\xe3\xb0\x09\xcf\xc2\xf7\x61\x2b\x2e\xc2\xa5\xd8\x8f\xab\x70\x1d\x6e\xc6\x3b\x70\x27\xee\xc1\x7d\xf8\x61\x7c\x08\x1f\xc3\xa7\xf1\x59\xfc\x24\x7e\x0e\xbf\x88\x5f\xc1\xef\xe2\x0f\xf0\x4f\xf8\x57\x29\x90\x0a\xa5\x49\x52\xa5\x74\x94\x74\xac\xf4\x56\xe9\x24\x69\x96\xd4\x24\xcd\x95\x4e\x97\xce\x94\xde\x25\xbd\x47\xba\x58\x6a\x91\x2e\x93\x3e\x24\x5d\x23\x2d\x94\xda\xa5\x4e\xa9\x47\xea\x97\x56\x4a\x37\x48\xeb\xa4\x9b\xa5\x01\xe9\x0e\x69\x87\xb4\x4b\xda\x23\xed\x93\x1e\x94\x3e\x2a\x3d\x2a\x3d\x21\x3d\x2d\x3d\x27\x7d\x46\xfa\xbc\xf4\x65\xe9\xeb\xd2\xb7\xa5\xef\x4a\x3f\x90\x7e\x2c\xfd\x5c\xfa\xb5\xf4\x3b\xe9\x15\xe9\x7f\xa4\xbf\x49\x87\xa4\xc3\x32\x28\x93\xc8\x14\xb2\x34\x59\x86\x4c\x2b\x1b\x2b\x9b\x28\x33\xc8\xb2\x65\x53\x65\x77\xca\xf2\x64\xf3\x64\x0b\x64\xf7\xca\x96\xca\x56\xc8\x56\xcb\xf2\x65\x45\xb2\xb5\x32\x97\xcc\x2b\x2b\x97\x55\xcb\x36\xca\x1a\x64\x9b\x64\x5b\x65\xad\xb2\x4e\x59\xb7\xac\x57\xb6\x5f\xf6\xb0\xec\xb0\xec\x31\xd9\x29\xd9\x13\xb2\xa7\x64\xcf\xc9\x5e\x90\xbd\x24\x7b\x55\xf6\xba\xec\x6d\xd9\xbb\xb2\x0f\x64\x1f\xcb\x3e\x97\x7d\x2d\xfb\x4e\x76\x45\xf6\x1f\xd9\x6f\xb2\x21\xd9\xb0\x1c\xca\x45\xf2\x44\xb9\x4c\x9e\x2c\x57\xc9\xd3\xe5\xac\x7c\x94\x7c\xac\xfc\x56\xf9\x24\x79\x96\xdc\x24\xcf\x95\x4f\x97\xcf\x94\xcf\x91\xcf\x97\x2f\x92\x2f\x91\x2f\x95\xaf\x90\xaf\x96\xe7\xcb\x8b\xe4\x6b\xe5\x2e\xb9\x57\x5e\x2e\xaf\x96\x6f\x94\x37\xc8\x37\xc9\xb7\xca\x5b\xe5\xed\xf2\x5d\xf2\x3d\xf2\x7d\xf2\x03\xf2\x47\xe4\x47\xe4\xc7\xe5\x8f\xcb\xcf\xca\x9f\x96\xff\x43\xfe\x4f\xf9\xcb\xf2\x0b\xf2\x37\xe4\xef\xc8\xdf\x93\x5f\x96\x7f\x22\xff\x42\xfe\x7f\xf2\xef\xe5\x3f\xc9\x7f\x95\xff\x2e\x8f\xc8\xaf\x29\x12\x14\x8c\x02\x29\xe4\x8a\x14\x45\x9a\x22\x43\xa1\x55\x8c\x56\x8c\x53\xdc\xa6\x98\xac\xd0\x2b\xcc\x8a\xdb\x15\x77\x28\x66\x29\xe6\x2a\xe6\x2b\x16\x29\x96\x28\x96\x2a\x56\x28\x56\x2b\xf2\x15\x45\x8a\xb5\x0a\x97\xc2\xab\x28\x57\x54\x2b\x36\x2a\x1a\x14\x9b\x14\x5b\x15\xad\x8a\x76\xc5\x2e\xc5\x1e\xc5\x3e\xc5\x01\xc5\x23\x8a\x23\x8a\xe3\x8a\x27\x14\xcf\x2a\x06\x15\xff\x52\x9c\x57\xbc\xa9\x78\x4f\x71\x59\xf1\x89\xe2\x0b\xc5\xff\x29\xbe\x57\xfc\xa4\xf8\x55\xf1\xbb\x22\xa2\xb8\x96\x94\x90\xc4\x24\xa1\x24\x79\x52\x4a\x52\x5a\x52\x46\x92\x36\x69\x74\xd2\xb8\xa4\xdb\x92\x26\x27\xe9\x93\x72\x93\x66\x24\xcd\x4b\x5a\x94\xf4\x40\xd2\x43\x49\x05\x49\x6b\x93\xd6\x25\x55\x26\xd5\x26\x6d\x4a\xda\x9e\x14\x4c\xea\x49\x3a\x90\x74\x38\xe9\x64\xd2\xb9\xa4\x7f\x24\xbd\x94\xf4\x5a\xd2\xa5\xa4\xcb\x49\x9f\x27\x7d\x9b\xf4\x73\xd2\xef\x49\xc3\xc9\xc2\x64\x9c\x9c\x92\x9c\x9e\x3c\x32\x79\x7c\xf2\xe4\x64\x53\xf2\xb4\xe4\xbc\xe4\xf9\xc9\xf7\x25\x2f\x4b\xe6\x92\x8b\x92\x4b\x93\xfd\xc9\xeb\x93\x1b\x92\xb7\x24\xef\x4c\xee\x4a\xde\x97\xfc\x70\xf2\xb1\xe4\xd3\xc9\x4f\x27\xbf\x90\x7c\x3e\xf9\xcd\xe4\xf7\x92\x3f\x4e\xfe\x2a\xf9\x87\xe4\x5f\x93\x87\x52\x40\x8a\x38\x45\x9e\x92\x92\x92\x9e\x32\x32\x65\x7c\xca\xe4\x14\x53\xca\xb4\x94\x92\x94\xf2\x62\xa7\xd5\xe7\x2b\x2d\xf3\x39\x0a\x7c\x36\xab\xb7\xc0\x6e\x73\x95\xdb\x9c\x6e\x8f\xcd\x6e\xb3\x7a\xfd\x3e\xbf\xd5\xcb\xff\x71\xb6\x52\x8f\xbf\xaa\xcc\x67\xf3\x16\x39\x9c\xa5\x7e\x3b\xe7\xb4\x7a\x8b\x6d\x7e\x3b\xcf\x39\x7c\x7e\x77\x89\xd7\x56\xea\x2e\xb7\x55\xbb\xdd\xa5\x9c\xc3\x15\x23\xee\x32\xbf\xbb\xa8\xc8\xe7\x28\x76\x59\x9d\x05\xee\x62\xbf\xd7\xea\xb3\xdb\xdd\xa5\xb6\x22\x87\xd3\xc6\x59\x9d\x7e\xbf\xa3\xd4\xe6\x75\x5b\x0b\x0b\xdd\x15\x2e\xa7\xdb\x5a\xc8\xf7\xdd\xe0\xcb\x3c\xfc\xbb\xc3\x95\xef\xae\xf4\x38\xad\x55\x5c\x81\xc3\x5b\xe0\xb4\x79\x6d\x1e\x9b\xd5\xef\xb5\x15\x79\x6d\x3e\x3b\x0f\xcb\x4f\x71\xba\x0b\x4a\x8a\x9c\xd6\x62\x3e\xe5\x79\xec\x6e\x97\xcd\x57\xee\x76\x96\x95\xda\x38\x77\x51\xd1\x75\x8e\x97\x7a\x9d\x2d\xf3\xac\xf3\x16\xb8\x0b\x6d\xf9\xd6\x18\xf1\x5b\x8b\xfd\xd6\x62\x5f\xbe\xdb\x5d\xc2\xff\x95\x5a\xbd\x25\x1e\xaf\xc3\xe5\x2f\xb0\x96\xda\xbc\xd6\x22\xb7\xcb\x9f\xef\x76\x16\x3a\xfc\x56\xa7\xa3\xc0\x6f\xab\xf4\x73\x76\x9b\xa3\xd8\xee\x8f\xb1\x15\x8e\x42\xbf\xdd\xea\x74\x14\xbb\x38\xa7\xad\xc8\x1f\xe7\x0a\x6c\x2e\xbf\xcd\x1b\xe7\xbd\xfc\xd0\x38\xbb\xb6\xcc\xe7\x77\x14\x55\xf1\x6b\x76\xb8\x0a\x6d\x2e\x7f\x6c\xca\x75\x36\x36\xae\xc8\x5a\x60\xe3\x35\xc2\x95\x3b\x0a\x6d\x6e\x8f\xa3\xc0\x5f\xc6\x6f\xd7\x55\xe0\x70\x96\x5a\x3d\x1c\xbf\x32\x9b\xd7\x5a\xc8\x0b\xf2\x3b\x5c\x7e\x5b\xa1\xc3\xef\xb3\x5b\xbd\xb6\x02\xbb\xad\xa0\x84\x57\xbd\xcf\x6f\xf3\x70\xf9\xd6\x82\x92\x0a\xab\xb7\xb0\xc8\xea\xf3\xff\xd9\xb8\x41\x79\x4d\x7a\xac\x65\x3e\x9b\xcf\xef\xf6\x14\xb9\xbd\x7f\x0e\xbc\xce\xc7\x24\x5c\xe7\x6d\x6b\x6d\x05\xfe\x02\xbb\xad\xdc\xeb\x8e\x6f\xef\x06\x1f\x5b\xac\xc7\x59\xe6\xe3\xf8\x93\x2d\x75\xb8\xae\x73\xf1\xf3\x8f\xb1\xee\x92\x18\x59\x57\x66\xf3\xf9\x1d\x6e\x57\xac\xe1\x70\x15\xb9\x63\x8c\xaf\xc0\x6b\xb3\xb9\x7c\x76\xb7\xff\xfa\x8c\xf8\xd1\xba\x4b\xae\x33\xf9\x56\xd7\x75\xce\xea\xf5\xba\x2b\xe2\xaa\x8d\x71\x71\x75\xc6\xd8\x32\x4f\x9c\xf2\x07\x1b\xd3\x02\x6f\x08\x5e\x9b\xcf\x51\x6d\xe3\x8a\xca\x9c\xce\xeb\xac\xaf\xd4\xea\x74\xda\x2a\x0b\x9c\xd6\x52\xeb\x9f\x2b\x29\x76\x14\xf9\x9d\x36\x6b\x51\x91\xc3\x6b\xb3\x55\xd9\x38\xb7\xc7\xe6\xe2\x69\x81\xd3\xed\xb3\x55\x58\xbd\x2e\x87\xab\x38\x36\xd0\xe3\xb4\xba\x6c\x05\x56\xa7\xcd\x55\x68\xf5\x7a\xad\xae\x42\x77\x69\x81\xbb\xb4\xd4\xe6\xf2\x97\x5a\x8b\x5d\xb6\x3f\x35\x52\xe6\xb9\xc1\xf1\xcb\xf1\xda\xfc\x15\x36\x9b\xdf\x67\x77\x7b\x3c\xbc\xa4\x02\xab\xd7\x5f\xe4\x76\x16\xda\xbc\x71\x84\xeb\x3c\x8f\x7a\x7d\x95\xe5\x36\xaf\xdf\x51\x60\xbd\xb1\x68\xbb\xdb\xeb\xa8\x76\xbb\xfc\x56\x67\xbe\xd5\xcb\x15\xd8\xad\x5e\xbf\xbf\xc2\xe1\xf7\xdb\xbc\xb1\x55\xf1\x76\xc2\x9b\x6a\xac\x11\x37\x53\xce\x6b\xf3\x7b\xdd\x25\xb6\xaa\x02\x77\xb1\xef\xfa\x12\x7d\x7e\x7b\x59\x69\xbe\x8f\x2b\xf3\xc4\x5c\x2d\xde\xe0\xd7\xc7\x37\x63\x0e\x6d\xb7\x3a\x8b\x62\x2e\x1e\x77\xed\xd8\xc1\x95\xf9\x9d\x0e\x57\x89\xad\xd0\x11\x57\x95\xa7\xcc\x67\xf7\x38\x5c\xb6\x4a\xbf\xcd\xeb\xb2\x3a\x39\xfe\xc3\xf8\x61\xfa\xbd\x6e\x8f\xbd\xaa\xd8\xe1\xb7\x97\xe5\xc7\x86\xc6\x1d\x36\xe6\x8f\xb6\x52\xb7\x2b\xe6\x88\x31\xd3\x8c\x4b\xbf\xe1\x5c\xf1\x56\xec\xd3\xd8\xb4\xeb\x3b\xbb\xb1\xa9\xb8\xc0\x32\x17\xef\xd3\x05\x5e\xde\xc6\x79\xfd\x15\x7a\x7d\x3e\x7b\x61\x61\x7e\x99\xd3\x69\x77\x7b\x5d\xf9\x36\xa7\xb3\x80\xd7\x59\x91\xa3\xc0\xea\xb7\xd9\xad\xae\xc2\xb8\x6d\xc4\x38\xde\x5e\x62\x4c\x99\x27\x46\xf8\x3d\xc7\xed\x89\xfb\x9f\x41\xfd\xad\x23\x36\xf7\x6f\x3d\x65\x9e\xbf\x35\x79\x11\xc5\x4e\x77\xbe\xad\xc2\x6b\x73\x15\xd8\xfd\x56\x5f\x89\xaf\xc8\xe1\xf4\xdb\xbc\xf9\x5e\x87\xad\xa8\xc0\xea\xb3\xf1\x46\x17\xb7\x6c\x97\xdb\x6f\x5b\x57\x66\x75\x3a\x5c\x45\x0e\x97\xc3\x5f\xe5\xb4\xf9\x7c\xb1\x8e\x62\xaf\xbb\xcc\xc3\x6b\xb0\xc0\xe9\x2e\x2b\xcc\xb7\x59\x4b\x6c\xde\x82\x32\x7f\x81\xdb\x53\xe5\xb1\x7a\x62\xe6\xe1\xf0\xf8\xac\xe5\x36\x5e\x2f\x5c\xbe\xd3\xea\x2a\xf1\xda\xdc\xde\x42\x9b\xb7\xcc\xe9\x76\xfa\xfc\x5e\x47\x89\xcd\x6f\xf7\xba\xcb\x8a\xed\x65\xae\x42\x9b\xd7\xe9\x70\xd9\xfc\xd6\x7c\xa7\xad\xd4\x5a\xec\x28\xf0\x7b\xcb\x0a\x4a\x3c\x7c\x60\xf0\xda\x7c\xfe\x3f\x99\xb8\xc5\xbb\xdd\xc5\x4e\x1b\xf7\xa7\xd3\xfe\xa5\x5d\xea\x76\xd9\xaa\x0a\xac\x5e\x9b\x3f\xae\xa8\x18\x57\xe6\x89\xd3\x98\xa6\x62\x5c\x5c\x45\x7c\x04\x75\xf9\x7c\x6e\xaf\x9f\xff\x8b\x3b\x1f\xcf\x94\x79\x6e\xa4\x8c\xd8\xf9\x5f\xb7\xa0\x32\x57\xa1\xdb\x69\x2b\xb6\x3a\x0b\xad\x3e\x7b\xbe\xdb\xea\x2d\xbc\x6e\x9a\xfc\xa0\x1b\x56\xca\xf3\xf9\x6e\xa7\xdf\xe7\xf0\xdb\x4a\xad\x9e\xb2\xd2\x7c\xaf\xcd\xe9\xb4\x7a\xac\x3e\xbf\xcd\xc9\x83\x72\xf9\x65\xce\x7c\x5b\x65\x81\xdd\xea\x2a\xb6\xc5\x34\xc7\xdd\xc8\x11\xf1\x56\xdc\xf0\xf8\xc4\xc4\x95\xf2\x11\xcc\x6f\x77\xfb\x0a\xdc\x1e\x9b\xaf\xcc\xe1\xe7\x4f\x86\xb7\x96\x38\x62\x51\x91\xcd\x56\xe4\x76\x17\xc6\xf2\x4f\x2c\x82\xf3\xe0\x65\x0e\x67\xa1\xc3\x55\x6c\x77\xfb\x3c\x7c\x98\xb7\x96\xe6\x97\x39\xad\xae\x02\x5b\xa9\xad\xb0\xc4\xe1\x2f\xe2\xd7\x60\xf3\x72\x6b\x6d\xfe\x7c\x9b\xcd\x6b\x8f\xbb\x60\x66\x91\xad\xd0\x5d\x96\xcf\x1b\x88\x8b\xd7\x24\xaf\xa8\xbf\x75\xc4\xf4\xf5\xb7\x9e\x32\xcf\xdf\x9a\xfc\x1e\xfe\x37\xf7\x2f\x93\x6e\x8c\xfe\xdf\xb0\x42\x9b\xaf\xc4\xef\xf6\x38\xad\x1e\xbf\xdb\x13\x3b\x70\x7f\xa9\x3b\x9f\xdf\x43\xdc\xc9\xe2\x96\x1a\xb3\x97\x75\x65\x6e\x7f\x5c\x62\x9c\x8b\x49\xf4\x79\x1c\x2e\x97\xcd\xfb\x67\x06\x75\xde\x70\x5b\xab\xf3\x6f\x81\xe9\x2f\x6d\x3e\x38\xf1\x4d\x5b\xa5\x87\x77\xa1\x98\xf6\xf8\x53\x89\x0f\xf2\x95\x3a\x9c\xb6\x22\xaf\xbb\xc2\x55\x6a\xb3\x17\x5b\x4b\x6d\x1e\x6b\x61\x89\xad\x2a\x76\xc4\x7c\x22\x8e\x09\xe2\x69\xcc\xff\x6d\x5e\x5b\xa1\xdf\xe6\x2d\x75\xc4\xaa\x80\xc2\xf8\x0a\x38\xab\xd3\xf9\x67\x10\x8a\xc7\x04\xa7\xbb\x20\x1e\xa3\x63\x3e\x57\xe0\x75\x7b\xf8\xd1\x7c\x3a\x2a\x29\x73\xf1\x36\xc5\xe9\xb3\x73\xff\x12\xcb\x7d\x65\x1e\x9b\xd7\x57\xe0\x75\x78\xfc\xbe\xb2\xfc\x38\xc3\xe9\x73\x0c\x9e\xb2\xea\x6a\x5e\x37\x0e\x5b\x81\xad\xd4\xc1\xcb\xe1\xb5\xf4\x3f\x8e\x2f\x0b\x7c\x76\x87\xcd\x59\x78\x23\xb4\xc7\xf1\xf9\x74\xc0\xd9\x2a\xfd\x0e\x57\x71\x99\xc3\x67\xb7\x79\xbd\xee\x82\x12\x9b\xbf\xd4\x5a\x59\x50\xe8\xba\x11\xe0\x7d\x37\x92\xfd\xdf\x3a\xe2\xde\xf1\xd7\x9e\xff\xa5\x84\x58\x93\x3f\x46\xbb\xbf\xd4\x69\x2a\xf0\xf9\x0c\x56\x57\x81\xdd\xed\x8d\xc7\xb8\xb8\x05\x3a\x9d\x3e\x5b\x95\xcd\xe6\xe4\xfd\xdf\xe1\xfb\x4b\x02\xf8\xb3\xeb\x46\x8a\xe0\x0c\x99\x86\x58\x3d\x14\x8b\x9d\x8e\xd8\x02\xff\xcc\xc0\xb1\x73\x8a\x85\xdc\x58\x9f\xd3\x56\x6e\x73\xf2\xee\x11\xa3\x31\xef\x8e\x7d\xc8\x0f\x8d\x45\xd6\xd8\x1c\x43\x96\x3e\x9e\x40\x63\xe9\xc4\x5d\xea\xb1\xfa\x7c\x37\x0e\xfb\xcf\x43\xf7\xbb\x3d\x9c\x21\x2b\xdb\x56\xe6\x2d\xce\xf7\x94\xf9\x0a\x1d\x2e\xef\x5a\x4f\x95\xb7\x2c\xbf\xc4\x5b\x91\xef\x2f\xe0\x1d\xea\x4f\xa7\x8a\x45\x84\x7c\xfe\x84\x3d\x76\x6b\xbe\xcd\xcf\x19\xf4\xb9\x7f\xf6\xf9\xfd\x5e\x47\x7e\x99\xdf\xe6\xfb\x7f\xf6\xc4\x2c\xeb\x7a\x6f\x2c\xea\xfd\xad\xc1\x7f\xca\x19\x0c\x46\xce\x60\x30\x55\xb9\xcb\xfc\x65\xf9\xf1\x15\x5f\xe7\x2b\x1d\xae\xe2\xca\x1b\x79\xfb\xc6\xe7\xbc\xa2\x0a\xbd\x6e\x4f\xbe\xbb\xd2\xe7\xb7\x16\x94\xdc\x88\x22\x0e\x97\xcf\x6f\x2d\xf6\x5a\x4b\x8b\x9c\x8e\x82\x12\xaf\xb5\xd0\x55\x94\x95\x9d\x95\xef\xf0\xe7\x97\xf1\x0a\x8d\xeb\xb6\xac\x34\xdf\xe9\x8d\xbf\xc7\x3a\x9c\x6e\x57\xf1\x5f\xd2\xc1\x5f\x9a\x7c\x00\xfa\xb3\xc1\xdb\xc6\x5f\x9a\x71\x97\xf6\x78\x9c\xb6\x0a\x87\xab\xd0\x5d\xe1\xb3\xba\x0a\xbd\x6e\x47\xa1\xd3\xe1\x2a\xab\x2c\xf4\x3a\xf2\xf3\x9d\x36\x5f\x49\x95\xc7\x56\xe4\x2e\xf3\xfa\xd6\x95\xf1\xc1\x96\x0f\x80\xee\x22\x5b\xa9\xd5\x19\xfb\x2b\x76\xf8\xfd\x0e\x8f\xaf\xcc\xc5\x19\xcc\x66\xbe\x3c\x77\x94\xdb\xf2\xcb\x8a\xcb\x4b\x2a\x6c\x8e\x7c\xb7\x97\xaf\x22\x5c\x9c\x21\x5b\x1f\xdb\x22\x77\x63\x8f\x9c\x21\xdb\x18\x5f\xc2\x8d\x4c\xe6\x8c\xc7\x73\xce\x90\x6d\x2e\x74\xfb\xff\xda\x6d\xc8\xce\x29\x77\x94\xda\xdc\x5c\x7c\x01\x9c\x21\x27\x33\x9e\x2a\xe2\x4d\x37\x67\xc8\xd1\x73\x86\x1c\x03\x67\xc8\x31\x72\x86\x1c\x13\x67\xc8\x31\x73\x86\x9c\x6c\xce\x90\x93\xc3\x19\x72\x72\xcb\x5c\x8e\xb9\x59\x33\x33\x8b\xb2\xac\x59\x9c\x21\x57\xcf\x19\x72\x0d\x45\x59\x56\x23\x67\xc8\x35\x71\x86\x5c\x33\x67\xc8\xcd\xe6\x0c\xb9\x39\x9c\x21\x37\x97\x33\x66\xf2\xe3\xf2\x39\x63\xa6\x9e\x33\x66\x1a\x38\x63\xa6\x31\x36\x7d\x56\x16\x67\xcc\x34\x73\xc6\xcc\x6c\xce\x98\x99\xc3\x19\x33\x73\x39\x63\x56\x26\x67\xcc\xca\xe2\x8c\x59\x7a\xce\x98\x65\xe0\x8c\x59\x46\xce\x98\x65\xe2\x8c\x59\x66\xce\x98\x95\xcd\x19\xb3\x72\x38\x63\x56\x1c\x3d\x2f\x33\x4e\xb2\x38\xa3\x5e\xcf\x19\xf5\x06\xce\xa8\x37\x72\x46\xbd\x89\x33\xea\xcd\x9c\x51\x9f\xcd\x19\xf5\x39\x9c\x51\x9f\xcb\x19\x0d\x99\x9c\xd1\x90\xc5\x19\x0d\x7a\xce\x68\x30\x70\x46\x43\x7c\x01\xb3\xe3\x12\x66\x67\xc5\x09\xff\x61\x0e\x67\x34\xc4\xc5\xcf\x36\xc5\x89\x39\x4e\xb2\x39\xa3\xd1\xc0\x19\x8d\x46\xce\x68\x34\x71\x46\xa3\x99\x33\x1a\xf9\xbe\x1c\xce\x68\x8c\x4f\x98\x93\xc9\x19\x4d\x59\x9c\xd1\xa4\xe7\x8c\x26\x03\x67\x34\x19\x39\xa3\xc9\xc4\x19\x4d\x66\xce\x68\xca\xe6\x8c\xa6\x1c\xce\x68\xca\xe5\x8c\xe6\x4c\xce\x68\xce\xe2\x8c\x66\x3d\x67\x34\x1b\x38\xa3\x39\xbe\x98\xb9\x7c\xb7\x99\x33\x9a\xb3\x8b\xb2\x8a\xf8\xee\x5c\xce\x98\x9d\xc9\x19\xb3\xb3\x38\x63\xb6\x9e\x33\x66\x1b\x38\x63\xb6\x91\x33\x66\x9b\x38\x63\xb6\xb9\x28\xab\xa8\x80\x33\x66\xe7\x70\xc6\xec\x5c\xce\x98\x93\xc9\x19\x73\xb2\x38\x63\x8e\x9e\x33\xe6\x18\x38\x63\x8e\x91\x33\xe6\x98\x38\x63\x8e\x99\x33\xe6\x64\x73\xc6\x9c\x1c\xce\x98\x93\xcb\x19\x73\x33\x39\x63\x6e\x16\x67\xcc\xd5\x73\xc6\x5c\x03\x67\xcc\x35\x16\xe9\x79\x8d\xe7\x9a\x8b\xf4\xbc\xc6\x73\x73\x38\x63\x6e\x2e\x67\xca\xcc\xe4\x4c\x99\x59\x9c\x29\x53\xcf\x99\x32\x0d\x9c\x29\xd3\xc8\x99\x32\x4d\x9c\x29\xd3\xcc\x99\x32\xb3\x39\x53\x66\x0e\x67\xca\xcc\x2d\xb7\xf1\x51\xc8\x94\x95\xc5\x99\xb2\xf4\x9c\x29\xcb\xc0\x99\xb2\x8c\x9c\x29\xcb\xc4\x99\xb2\xcc\x9c\x29\x2b\x9b\x33\x65\xe5\x70\xa6\xac\x5c\xce\xa4\xcf\xe4\x4c\xfa\x2c\xce\xa4\xd7\x73\x26\xbd\x81\x33\xe9\x8d\x9c\x49\x6f\xe2\x4c\x7a\x33\x67\xd2\x67\x73\x26\x7d\x0e\x67\xd2\xe7\x72\x26\x43\x26\x67\x32\x64\x71\x26\x83\x9e\x33\x19\x0c\x9c\xc9\x60\xe4\x4c\x06\x13\x67\x32\x98\x39\x93\x21\x9b\x33\x19\x72\x38\x93\x21\x97\x33\x19\x33\x39\x93\x31\x8b\x33\x19\xf5\x9c\xc9\x68\xe0\x4c\x46\x23\x67\x32\x9a\x38\x93\xd1\xcc\x99\x8c\xd9\x9c\xc9\x98\xc3\x99\x8c\xb9\x9c\xc9\x94\xc9\x99\x4c\x59\x9c\xc9\xa4\xe7\x4c\x26\x03\x67\x32\x19\x39\x93\xc9\xc4\x99\x4c\x66\xce\x64\xca\xe6\x4c\xa6\x1c\xce\x64\xca\xe5\x4c\xe6\x4c\xce\x64\xce\xe2\x4c\x66\x3d\x67\x32\x1b\x38\x93\xd9\xc8\x99\xcc\x26\xce\x64\x36\x73\x26\x73\x36\x67\x32\xe7\x70\x26\x73\x6e\x91\xde\x9c\x59\xa4\xe7\xc7\x65\xeb\x8b\xf4\xfc\xb8\x6c\x23\x67\xca\x36\x71\xa6\x6c\x33\x67\xca\xce\xe6\x4c\xd9\x39\x9c\x29\x3b\x97\x33\xe5\x64\x72\xa6\x9c\x2c\xce\x94\xa3\xe7\x4c\x39\x06\xce\x94\x63\xe4\x4c\x39\x26\xce\x94\x63\xe6\x4c\x39\xd9\x9c\x29\x27\x87\x33\xe5\xe4\x72\xa6\xdc\x4c\xce\x94\x9b\xc5\x99\x72\xf5\x9c\x29\xd7\xc0\x99\x72\x8d\x9c\x29\xd7\xc4\x99\x72\xcd\x9c\x29\x37\x9b\x33\xe5\xe6\x14\xe9\xb3\x6d\xbc\x7d\xe8\x73\x32\xe3\x24\x8b\x33\x67\xea\x39\x73\xa6\x81\x33\xc7\xfd\x48\x9f\x63\x8a\x13\x33\x67\xce\xcc\xe6\xcc\x99\x39\x9c\x39\x33\x97\x33\x67\x65\x72\xe6\xac\x2c\xce\x9c\xa5\xe7\xcc\x59\x06\xce\x9c\x65\xe4\xcc\x59\x26\xce\x9c\x65\xe6\xcc\x59\xd9\x9c\x39\x2b\x87\x33\x67\xe5\x72\x66\x7d\x26\x67\xd6\x67\x71\x66\xbd\x9e\x33\xeb\x0d\x9c\x59\x6f\xe4\xcc\x7a\x13\x67\xd6\x9b\x39\xb3\x3e\x9b\x33\xeb\x73\x38\xb3\x3e\x66\xe2\xfa\x99\xf1\x35\xcc\xcc\x8a\x13\x7d\x9c\x18\xe2\x24\xbe\x98\x99\xf1\xc5\xcc\x34\xc7\x49\x76\x9c\xe4\xc4\xc9\x75\x29\x33\xe3\x64\x56\x9c\xe4\xc5\xc9\xec\x38\x99\x13\x23\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xb3\xe2\x40\xf1\x20\xa2\xcf\x8b\x03\xe5\xc5\x81\xf2\xe2\x40\x79\x71\xa0\xbc\x38\x50\x5e\x1c\x28\x2f\x0e\x94\x17\x07\xca\x8b\x03\xe5\xc5\x81\xf2\xe2\x40\x79\x71\xa0\xbc\x38\x50\x5e\x1c\x28\x1e\x6b\xf4\xf1\x58\xa3\x9f\x1d\x07\x9a\x1d\x07\x9a\x1d\x07\x8a\x47\x1c\x7d\x3c\xe2\xe8\x67\xc7\x81\x66\xc7\x81\x66\xc7\x81\x66\xc7\x81\x66\xc7\x81\x66\xc7\x81\x66\xc7\x81\x66\xc7\x81\xe6\xc4\x81\xe6\xc4\x81\xe6\xc4\x81\xe6\xc4\x81\xe6\xc4\x81\xe6\xc4\x81\xe6\xc4\x81\xe6\x64\x73\xe6\xdc\x38\xca\x9c\x38\xca\x9c\x38\xca\x9c\x38\xca\x9c\x38\xca\x9c\x38\xca\x9c\x39\x79\x6e\x4f\x55\x2c\xc7\x8d\x9c\x6d\x2d\xb7\x8d\x9c\x67\x75\x15\x56\x8d\xd4\x67\x66\x99\x27\x8f\x9c\xe9\x74\x8e\x8c\xd7\x9f\x23\xbd\x36\x9f\xcd\x5b\x6e\x2b\x9c\xfc\x97\x87\x05\xf0\x4a\x02\x80\x40\x0a\x56\x02\x0e\xb4\x82\x76\xd0\x05\x0e\x80\x47\xc0\x49\xf0\x31\x1c\x0d\x27\xc0\x29\xd0\x00\xb3\xe1\x54\x68\x81\xcb\x20\x07\x0b\xa1\x1d\xba\xe0\x76\xd8\x06\x3b\xe1\x29\x78\x0e\xbe\x0c\x5f\x87\x6f\xc3\x77\xe1\x47\xf0\x73\xf8\x0d\xfc\x0f\xfc\x0d\x46\x12\xb4\x09\x37\x27\x8c\x4f\x58\x9c\xe0\x4d\xa8\x4e\xa8\x4f\x38\x98\x70\x38\xe1\x6c\xc2\xab\x09\x6f\x26\x7c\x96\xf0\x55\xc2\xb7\x09\xbf\x24\x0c\x0b\x12\x04\x49\x82\xc9\x02\xbd\xc0\x2c\xb8\x5d\x30\x43\x30\x5b\x70\x97\x60\xa1\xa0\x5f\x70\x52\xf0\xac\xe0\x9f\x42\x2c\x4c\x17\x6a\x85\x63\x85\xb7\x09\x27\x0b\x8d\xc2\x1c\xe1\x0c\xe1\x1c\xe1\xa2\xd8\x77\xee\xab\x85\x35\xc2\xcd\xc2\x80\x70\xa7\xf0\x15\xe1\x4f\x42\x2a\x02\x22\xa1\x48\x22\x1a\x21\xd2\x88\xa6\x88\x0c\xa2\x9d\xa2\x2e\xd1\x7e\xd1\x71\xd1\x13\xa2\x67\x44\x83\xa2\x57\x44\xaf\x8b\xde\x16\xfd\x20\x22\x22\xca\x2c\x66\x1e\x64\x56\x33\x05\x4c\x31\xe3\x64\x6a\x99\x66\x66\x0b\x73\x9c\x39\xc7\x3c\xcb\x5c\x11\xe7\x88\xa7\x89\xe7\x8a\xe7\x8b\xbb\xc4\x7b\xc5\x07\xc5\x47\xc4\x8f\x8b\x9f\x14\x3f\x27\x7e\x41\xfc\x8a\xf8\x2d\xf1\xd7\xe2\x9f\xc5\x61\x89\x46\x92\x27\x79\x40\x62\x95\xac\x95\xb8\x25\xe5\x92\xf5\x92\x5a\x49\xb7\x64\x40\x72\x4c\x72\x46\xf2\xbc\xe4\x35\xc9\xa5\xc4\xc4\xc4\x19\x89\xf3\x13\x57\x24\x6e\x4d\xdc\x91\xd8\x97\x78\x38\xf1\x85\xc4\x97\x12\xdf\x4b\xfc\x2e\xf1\xbf\x89\x43\x89\x7f\x20\x09\x92\xc5\xbe\xdf\x9e\x8c\x6e\x47\x33\x91\x05\x95\x22\x2f\xaa\x41\x0d\xa8\x19\xed\x45\xc7\xd0\x13\xe8\x19\xf4\x25\xfa\x16\xfd\x88\xc5\x38\x15\x4f\xc5\xb3\xf0\x5c\x7c\x0f\xb6\xe0\x65\x98\xc3\x05\xd8\x81\x5d\xd8\x87\xab\x71\x3f\x7e\x18\x1f\xc3\x8f\xe3\xa7\xf0\x20\x7e\x1b\x5f\xc6\x5f\xe3\x2b\xb1\x6f\xad\x47\x4a\x27\x4b\x0d\xd2\x1c\xe9\x0c\xe9\x5c\xe9\x02\xe9\x62\xa9\x47\xba\x41\xda\x22\xdd\x2e\xed\x92\xee\x95\x3e\x22\x3d\x29\x7d\x4e\x7a\x51\xfa\x96\xf4\x43\xe9\xe7\xd2\xef\xa4\x3f\xc9\xc4\xb2\x71\xb2\x39\xb2\x42\x59\xa9\xac\x5a\xb6\x59\x16\x90\xb5\xcb\x1e\x96\x9d\x93\xbd\x28\x7b\x43\xf6\x6f\xd9\x47\xb2\xcf\x65\xff\x27\xfb\x49\xf6\x1f\xb9\x4c\xce\xca\xc7\xca\xb3\xe4\xd3\xe5\xb3\xe4\xf3\xe4\x8b\xe4\x0f\xc8\x57\xca\x6d\xf2\x5a\x79\xb7\xfc\xb4\xfc\x69\xf9\x0b\xf2\x97\xe4\xaf\xc9\xdf\x91\xbf\x2f\xff\x8f\x02\x29\x6e\x56\xdc\xaa\x98\xa4\xc8\x56\x4c\x57\xe4\x29\xe6\x2b\xee\x55\xac\x52\x94\x28\xbc\x8a\x3a\xc5\x66\x45\x87\x62\xaf\xe2\x61\xc5\x71\xc5\x69\xc5\x53\x8a\x7f\x28\x5e\x51\xbc\xa9\xf8\xb7\xe2\x43\xc5\xaf\x8a\xb0\x62\x38\x29\x35\xe9\xd6\xa4\xdb\x93\x16\x27\x3d\x90\x94\x9f\xe4\x4c\x5a\x97\x54\x9e\xb4\x21\xa9\x31\x69\x6b\xd2\xce\xa4\xce\xa4\xde\xa4\xc7\x93\xce\x26\x5d\x4c\xfa\x2c\xe9\xb7\x64\x90\x2c\x4f\x1e\x9d\x3c\x31\xd9\x94\x7c\x7b\xf2\xac\xe4\xf9\xc9\xf7\x26\x5b\x92\x8b\x93\xab\x93\xb7\x27\xf7\x24\xf7\x27\x3f\x92\xfc\x58\xf2\x13\xc9\xcf\x26\xbf\x90\x7c\x21\xf9\x8d\xe4\x4b\xc9\x97\x93\x3f\x49\xfe\x32\xf9\xb7\x14\x71\x4a\x7a\xca\x98\x14\x73\xca\x5d\x29\x2b\x52\x56\xa5\xd8\x53\x7c\x29\xeb\x53\xea\x53\x9a\x53\xb6\xa6\xf4\xa4\xf4\xa7\x9c\x4a\xf9\x67\xca\xa5\x94\x0f\x53\x7e\x4c\xf9\x4f\xca\x6f\x29\x91\x54\x94\x3a\x22\x75\x64\xea\xb8\xd4\x89\xa9\xe6\xd4\x19\xa9\xf3\x53\x2d\xa9\xcb\x52\xd7\xa4\xda\x53\x5d\xa9\xfe\xd4\x0d\xa9\x8d\xa9\x5b\x52\x5b\x53\x3b\x53\x7b\x52\xfb\x52\x1f\x4e\x3d\x92\x7a\x32\xf5\x4c\xea\x53\xa9\xff\x48\x7d\x3d\xf5\x83\xd4\x6f\x53\x49\xea\x35\xa5\x4c\xa9\x51\xde\xaa\xcc\x51\xce\x50\xde\xab\xbc\x5f\xb9\x4c\xf9\x90\x32\x5f\x69\x57\x7a\x94\x1b\x95\xcd\xca\x0e\x65\xaf\x72\x40\xf9\x98\xf2\x71\xe5\x33\xca\x17\x94\xaf\x28\x5f\x53\xbe\xad\x7c\x5f\xf9\x89\xf2\x4b\xe5\x77\xca\x9f\x94\x57\x55\x50\x25\x57\xa9\x55\xa3\x55\x53\x54\x46\xd5\x54\xd5\x9d\xaa\xb9\xaa\x7b\x54\xf7\xab\x1e\x54\x3d\xa4\xb2\xab\x4a\x55\x7e\x55\x9d\x6a\x9b\x6a\xb7\x6a\x40\x75\x5c\xf5\xa4\xea\x9f\xaa\x57\x54\x6f\xaa\xfe\xad\xfa\x54\xf5\x8d\xea\x27\xd5\x55\x55\x58\x75\x2d\x4d\x90\x26\x49\x93\xa5\xa5\xa4\xdd\x94\xa6\x49\x1b\x9f\x36\x31\x4d\x9f\x36\x3d\xed\xae\xb4\xfb\xd3\x56\xa7\xd9\xd2\x9c\x69\x15\x69\xb5\x69\x4d\x69\x5b\xd2\x5a\xd3\x3a\xd2\x76\xab\x6e\x43\x64\x26\x8a\x58\xc6\xb1\x72\x8d\xe8\x59\x8d\xb0\x49\x45\x5f\x23\xaf\x89\x4e\x16\xcd\x3c\xb2\x54\x7d\x4d\x79\x11\x69\x86\x06\x2d\x2c\x79\x9a\x1d\x74\xbe\x5b\x74\x52\x1b\x5d\x4c\x5a\x54\x7b\x9b\xf7\x36\xb4\x37\x91\xd7\xe9\xeb\x23\xda\x9b\x82\xd5\x6d\xd5\x92\xa8\x94\x09\x2b\xc9\x27\x48\x43\xc1\x62\x34\x14\x8c\x1a\x3f\x66\xb1\x6a\x14\xc2\xaa\x48\xd0\xcf\x5e\x0b\x8a\xaf\x05\x35\xc2\x41\xd5\x76\x34\x14\x4c\xdb\x8e\xc2\xca\x8b\x5f\xb3\x54\xf9\x03\xb3\x0e\x45\x95\x3f\x88\xd7\x21\xaa\x14\xe7\xb3\x7e\xf6\x3d\x56\x3c\x0e\xe1\xaa\x9a\x9a\x2a\xcc\x10\x03\x51\x11\x15\x31\xe8\xf0\x58\x56\x87\xa9\x81\xaa\xa8\x8a\x1a\x74\xf8\x4b\xa4\x11\xad\xa9\x66\x35\x91\x7e\x6a\x11\x6f\xac\x6d\xac\xdd\xa4\xdb\x54\xdb\xba\x31\x58\x4f\x42\x34\x34\x82\x30\x6c\x47\x47\x6b\x5b\xbb\x8e\x5c\x22\x97\x44\x58\x45\x8c\x44\xc7\x6a\xc2\x83\xab\xd0\x35\x4b\x31\xab\x11\xcf\x58\x81\x88\x51\x9c\x1a\x21\x12\xa4\x0b\x2b\xc5\xe4\x1c\x4a\x8d\x46\x83\xc2\xd4\xcb\x54\xc9\xa4\x46\xc9\x12\xa4\x09\x0f\x4e\x64\x23\x96\x95\xfc\x58\x52\x8f\x88\x52\x2c\x0f\x4f\xa3\x3f\x92\x1f\xa3\xd3\x30\x63\x44\x78\x22\xd2\xe2\xd5\xec\x71\x2c\xd6\x23\x1c\x6d\x8c\x8e\x8d\x8e\x8d\x36\x46\x1b\xc3\x63\xa3\x63\xc3\x8d\xe1\xc6\xf0\xd8\xf0\xd8\x70\x23\x36\xb0\x5a\x7c\x11\x51\xcb\x34\x84\x8f\xbb\x0e\xd9\xf1\x0c\x56\x87\xa7\xb2\xd4\x22\xc6\x8b\x78\xdd\x58\xee\x66\xc3\x41\x6a\x59\x84\x48\xf0\xa2\x2a\x0f\x2d\x60\xe6\xb2\xba\x05\x25\xec\x45\x06\x33\x66\x84\x99\x3b\x59\xac\x22\xf5\x2c\x1d\xa4\x2d\xb4\x85\x0e\xce\x47\xba\xa1\x60\xf4\xcc\x25\x36\x40\xb6\x22\x22\x63\x6f\x47\x0b\x26\xb2\xf8\x76\x44\x43\x4c\x55\x4d\x77\xaf\x8e\x58\xd6\x22\x6c\x42\x54\x39\x85\xc5\x0f\x22\x2d\x5e\x30\x86\xc5\xe3\x59\x6a\x19\xc3\xe2\xe3\x87\x0e\x1d\xc7\x4b\xd1\x3d\x48\x87\xcb\x11\x79\x1a\x11\x09\xd2\x62\xbe\x65\x46\x45\x08\xab\x78\x45\x6b\xa9\xf2\xba\x18\xa5\xb8\xb7\xbb\xbb\x57\x4b\x94\x4c\x6f\x77\x4d\x95\x8e\x28\x85\x4e\x16\x57\x6f\xd8\x50\x8d\x55\x63\x11\x1e\xae\x25\x59\x68\x48\x79\x02\x05\x88\xf2\xc6\x2b\x40\x94\x0b\x88\x25\x75\xf8\xad\x21\x25\xb1\xa8\x3e\x5c\x1e\x9a\xfe\xa8\x16\xab\xf6\x6e\xd8\x53\xad\x5d\xc0\xf0\x33\x75\x0b\xc4\xd5\x7b\x36\xec\xd5\x5e\x64\xf6\xee\xd9\xb3\x57\x47\x83\x24\xb4\x08\xe1\x23\x68\xd4\xe7\xa6\x5e\x84\xc9\x28\x22\xde\x87\xf0\xbf\x51\xb4\x28\x5a\x44\x6e\x41\x61\x96\x7f\x45\x59\x51\x73\x5b\x70\x73\x87\x3a\xd8\x41\xe6\xa1\xe7\x9e\xeb\x44\xf8\x3e\x64\x60\x75\x78\x03\x4b\x2c\xc2\xeb\x6f\xb8\x87\xbd\x66\xa9\x43\x11\x4b\x08\x45\x2c\xcc\xde\x3d\x1b\xaa\x7d\x6c\x33\x5a\xf2\xaf\x77\x70\x27\x4b\xce\xb1\x44\x45\x55\xc4\xa0\x1d\x0a\x8d\x63\xb1\x6a\x3c\xc2\xe2\xf1\x08\x4f\x43\x1a\xd1\x8c\x99\x08\x5f\x97\xde\x11\x24\xf3\x10\x0e\x2b\x89\x12\x8b\xda\x9a\x1b\x76\x34\xaa\x1b\x1b\x36\x37\x37\xeb\xf0\x6a\x44\x46\x30\x21\x96\x68\x56\x92\xe4\xe9\x57\xb4\xa4\x9d\x74\x88\x48\x32\x8a\x5a\x34\x74\xe4\x14\xa4\x32\x20\x5c\xc0\x06\xb0\x78\x12\x8b\x07\xd7\x9c\x5d\xaa\xc5\xdd\x35\xbd\xd8\x7e\xc8\x85\x47\xb3\x34\x88\x87\x43\xaa\x59\x6c\x44\x99\x56\x8e\xb4\xa9\x8f\x90\xdf\xd9\x48\xa8\x18\x69\xe8\xbd\xcc\x33\xf5\x5b\x3f\x9c\xa7\xa6\x41\xa6\x1e\x91\x35\x0c\x99\x33\x7c\x51\x54\xe3\x7a\xe8\x0e\x27\x29\x46\x91\x20\xf3\x25\x7b\x6d\x22\xd3\xd9\xd7\xdd\x7f\x20\xe3\x40\xc3\xc0\xe6\xfd\xda\xc8\x21\x22\x17\x1d\xdb\x71\xf0\xd1\xa3\x19\x72\x62\x27\x3f\xb2\x27\x59\x6a\x27\x33\xe8\x0c\x62\xc7\x8f\xb0\x1a\x0a\xc4\x73\x5e\xba\xef\x6d\x2d\xa6\xca\xc5\x08\x5e\xd7\xb8\x66\x68\x46\x5c\xe7\xd4\x12\x57\xba\x86\x19\x8c\xab\x3d\x1c\x12\xc6\x46\x5c\x0b\xfd\x7d\x40\x24\xf4\x26\x1b\x16\xb2\xd9\x88\x1f\x39\x17\xe9\xe4\xaa\x03\x2c\x49\x65\x49\x25\x4b\x54\x48\x8b\x07\xcf\x9e\x1d\xc4\x62\xc3\xa5\xbc\x2f\xb5\x78\xf6\x92\x25\xb3\x31\x33\x9b\xc5\xe4\x23\xb6\x8c\xc5\x55\x48\x8b\xa7\x22\xa2\x14\x4e\x45\x98\xf2\x2a\x54\xfd\x66\xfa\x7c\xd4\x7c\x56\x8b\xf3\x59\x8d\x04\xbc\xc7\x5e\x66\xbf\x46\x58\x6c\x47\x78\x28\xa8\x11\xf6\xab\xbe\x45\xf4\x73\xfa\xb9\x88\xee\x31\xa1\xa8\x72\x0a\x4b\xf6\x30\xe4\x73\xfa\xf9\xab\x08\xeb\xae\x59\xc4\x24\x18\xb1\x8c\x64\x35\xa2\x3a\x3c\x01\x4d\x62\xb1\xbf\xba\xac\xb2\x41\x47\xcb\xa2\x2b\xa3\x5b\x67\x89\xbc\x9b\x9d\xb5\xa5\x19\x55\xbb\xab\xbb\x36\x6a\xc3\x80\xfe\x6e\x8a\xb6\x88\xb6\x36\x6d\x6d\x6e\xca\x58\xb7\xdb\x77\xa8\x7b\xf7\xce\xf6\xdd\xda\xf0\x03\xa4\x0e\xab\xec\x2e\x97\x9d\x37\x66\xbb\xeb\xd0\x71\xde\x98\x79\xdb\xe7\x8d\xf9\xf8\x21\x97\x5d\x47\x95\xe2\xb0\x52\x78\x34\xb6\x5a\x7f\x24\x44\xfc\x30\x40\xfc\x98\x19\x60\x75\x58\x6c\x41\x58\x23\x06\xb1\xa8\xa3\x5d\x10\xf7\x85\x8b\x77\x22\xac\x5a\xcb\x62\x43\x5e\x1e\x79\x12\x91\x7e\xa4\x1b\x0a\x89\xbf\xbc\x74\xe9\x4b\x2d\x56\x99\x58\x4c\xa6\xd2\x04\x72\x0b\x9d\xfe\xad\x76\xcf\x8a\x8e\x65\x0f\x66\xd0\x79\x53\x68\x2e\x9d\x4a\xe5\x5a\x2a\xa4\x53\x28\xb7\x90\x96\xa8\x5d\xa5\xdb\xb7\xbb\x74\xb9\x24\x99\xdc\xbe\x9c\xdc\xad\x3e\xff\x72\x5b\xe7\x8b\xba\x4f\x16\x7f\xb7\xe6\x97\x75\x8f\x34\x1d\xda\x74\x78\x73\xcf\x96\x3d\xbb\x77\xf4\x4a\x88\x84\xdd\xb1\x6f\x63\x57\xdd\xee\xc2\x73\xdc\xe3\x8e\x4f\x24\xd8\x3b\x50\x10\xf0\x7a\xb1\x3a\xea\x08\x44\x1d\x51\x47\x06\x26\x97\x59\x18\x20\xc1\x48\x90\x04\x05\x98\x54\xb1\xa4\x05\xe1\x19\x2c\xb9\x8b\xc5\xbf\x7d\xfe\xf9\x6f\x78\x12\x4b\x94\x4b\x10\x86\x64\x3c\x12\x60\x8d\x08\xe0\xf0\xe1\x00\x79\x02\xf1\x96\x4d\x2c\x64\x24\xab\x11\xd7\xc5\x3c\x35\x75\x0f\xce\x62\x35\x91\xba\x69\xac\x9f\xcd\x44\xb8\xbb\x57\x87\x55\xce\x6b\xae\x80\x53\xbd\x61\x43\x4b\x73\x8d\x8e\xab\x76\xe7\xaf\xce\xd0\x44\x88\x78\xf5\xa3\xf9\xe7\xaa\xb5\xcd\xdd\x7b\x5a\xf6\xa8\x8f\x1c\xea\xea\x3f\xa0\x0b\x2f\x0c\x4f\x0b\x2f\x8c\x4e\x13\x95\x1f\x38\x54\x77\x44\xbd\x67\xcf\xf6\xb6\x6e\xdd\xb9\xbd\x8f\x9e\x79\x32\x43\x23\x4a\x14\x3f\xe9\x3e\xc3\xed\xd5\xb6\xd5\x6c\x68\xdd\xa0\x96\x7b\x51\x38\xf4\x2e\xc2\x53\x58\xa2\xcc\x44\x98\x04\xc8\x2a\x1c\xa8\x41\x98\x06\xe8\x2a\x7c\x19\x45\x83\xbf\xa0\xa8\x32\x6e\xbe\xe1\x60\x15\x8b\xbb\x51\xf9\xab\x2c\x66\x6e\x61\xb1\xea\x63\x44\x19\xc2\x3c\xc8\xd2\xcf\xe8\x67\xe4\x29\x74\x9e\x8d\x5a\xa6\xb0\x61\x0b\xf9\x89\x25\x4f\x21\xf2\x19\xf9\xac\x13\xe1\xf0\xda\x40\xd8\x11\xb6\x67\x60\x1a\x5c\xcf\x62\xe2\x17\x0c\x05\xc9\x6d\x28\x3a\x8d\xfe\x48\x7f\x8c\x4e\x8b\x4e\x23\x3f\xd2\x1f\xc9\xe3\x88\xfc\x18\x9e\x36\x81\xd5\x69\x22\x9f\x09\xc9\xac\x3f\x23\xa9\x0e\x47\x42\xa4\x0f\x0d\x2b\x99\x76\x36\x9c\xc0\xea\xae\x29\xc5\x74\x26\xb9\x9f\x8e\x24\x4d\xcd\x5a\xea\xa0\xab\x45\x15\xe5\xdd\xf6\x43\xea\xc8\x19\xe6\x50\xf7\xf1\xbe\x72\x1d\x75\x90\xd5\x22\xd2\xd4\x46\xee\x27\x23\xc9\xcc\x8c\x88\x52\x4c\xe6\xd0\x55\xe4\x66\x1a\xd0\x62\x55\x2f\x8b\xc7\xa3\x05\xb7\xa0\x68\x68\x36\xc2\x73\x59\x2d\x56\x91\x52\xaa\x24\x69\xd4\x40\xc7\x8f\xa2\x22\xaa\xa5\x69\xdf\x53\x86\x8c\x7d\xf9\xe5\xfe\xc3\x8f\x6a\xb7\x33\x37\x57\x2e\x1c\x4f\xa5\x6a\xd7\xba\xb6\xf6\x0a\x5d\x5d\x6b\xdd\x8e\x86\x1d\x85\x54\x34\xa2\x6b\x53\xf7\xa6\x9e\x4d\x92\x86\x87\x4f\x36\x3d\xa9\x26\x0d\x24\x81\xb8\xc9\x6a\x1d\xa6\xab\x68\x00\xab\x7e\x45\x69\x7e\x84\x2b\x11\xc9\x62\x75\x7c\xbc\x7c\x86\xa5\xa3\x70\xb0\xbd\x3d\xa8\xc3\x6f\xbf\xf4\xd2\xdb\x58\x74\x8a\xc5\x73\xee\xbb\x6f\x8e\x0e\x9b\xd8\x70\x30\xaa\xac\x65\x71\x47\x0b\x71\xb0\x94\xcf\x7e\x6d\x4d\x8d\x3b\x1a\xd4\x7c\x2a\xc0\x55\xdd\x35\x24\x8d\xe5\xcf\x9c\x28\x61\x2c\x82\x63\x72\x0a\x51\x3f\xb3\x74\xcd\xd9\x41\xdd\x51\xf2\x2b\x22\x2f\xa2\x05\x0c\x39\x82\x86\x2d\xe4\x49\x56\x1b\x56\x32\xe4\x1a\xe2\xc7\x44\x95\xcc\x11\xa4\x8b\x2a\xf9\x5e\xe2\x27\xdf\xa0\x12\x71\x3e\xd2\x2e\x98\xc6\x5e\x64\xc8\x71\x52\x1d\x16\x22\x1d\x56\x2d\x43\x9a\xc8\x0c\xc6\x90\x97\x67\xd0\x69\xe8\x0c\xd2\xc6\x92\x9b\xd9\xc5\x28\x1a\x52\x91\x14\x16\xab\xf8\x14\x78\x1f\xd2\x62\x6a\x6f\x62\x71\x6d\x57\x4f\xd3\x5e\x35\xef\x87\x41\xac\x61\xea\x30\x99\xc2\x0e\xdd\x2e\xe6\x87\x68\xa9\xf2\x73\x44\x76\xa1\x43\xc7\x75\x43\xb7\xbf\x84\xb0\x8a\x06\x5b\x11\x09\x92\xa9\x2c\xae\x64\x79\x9f\x15\x60\x1a\x20\xcf\xb2\x24\x80\xcb\x58\xe2\x64\x89\x65\xc1\x33\x88\xb7\xe9\xa1\xba\x56\xa4\x61\xea\x32\x11\xfe\xe4\x93\x4f\x72\x9e\x63\xb1\x23\x87\x2b\x2c\xe4\xea\x36\x6e\xac\xdd\x51\xc9\x3b\x58\x75\x6b\x77\xed\x9e\x6d\xdb\x02\xdb\xd4\x87\x77\x1c\xda\xf9\x48\xfb\x2f\x0f\x7f\x77\xf6\x93\x97\x25\xf5\x2f\xbe\xdc\x7c\x5e\x1d\x4e\x27\x6f\x92\x2a\x72\x02\x87\x47\x93\x5c\x32\x82\xdc\x0b\x03\x24\x97\x8c\x25\x8d\x61\x21\x49\x26\x1f\x93\x5c\x41\xe4\xd6\x21\xac\xa2\x6e\x3a\x9e\x66\xd2\x75\xd4\x41\xef\x24\x33\x88\x9d\xd8\x09\x4f\x1d\x78\xc0\x7b\x3a\x30\x30\x90\xfe\x16\x8b\xf3\xd0\x35\xcb\xf5\x54\x1e\xb1\x78\x11\x5e\x8c\x86\x94\xaa\xf0\x54\x7a\x85\x5c\x89\x4e\xa5\xcb\xe9\xfd\xd3\x68\x3a\x1d\xa5\xa5\x69\x44\x55\xb5\xcf\xbd\xd3\x5f\x9f\xee\xab\x5f\xef\x5f\x97\x11\x37\x73\x06\x67\x9c\xe3\x8d\x88\x8a\x8b\x89\x98\x21\x4a\x96\x98\xc8\x07\x2c\x5e\xd9\xc3\x04\x10\x99\x8b\x98\x58\xa0\x45\x30\x40\x7c\x48\x23\x1a\xe4\x8d\xde\x98\x85\x48\x37\x83\x5f\x67\xb5\x78\x2f\x79\x8a\xd5\x92\x10\x09\x89\xda\xda\x5a\x83\x1d\x19\x58\xdc\xd2\xbe\xb9\xad\xb9\x6d\x78\xc5\xd0\x8a\x11\xde\x81\x8a\x06\x7b\x06\x56\x91\x5b\x59\xd2\xc5\xde\x8f\xf0\x63\x68\x12\x5f\x11\x04\xca\x1b\x58\x4c\x8f\xd3\x6a\x5a\x4d\x8f\x63\x12\xd8\xc9\x62\xd5\xed\x88\xfa\xa9\x9f\x21\x6f\xb3\xc4\x4f\xfd\x62\xf2\x26\x4b\xfc\xc4\xcf\x60\xd5\xdb\x08\x67\xa1\x1f\x70\x2b\x7b\x2d\xc4\x64\xa3\x48\xa8\x95\x8d\x69\xfb\x43\x84\xc3\xc1\x34\x22\x67\xb5\x01\xf1\x7c\x56\x17\x0d\x86\x83\x2e\x16\xd3\x77\xe8\x2e\xba\x8b\xbe\x43\xdf\x21\xbb\xe8\x2e\xf2\x0e\x79\x87\xec\x22\xbb\xc8\x3b\x58\x35\x81\xd5\x62\x72\xe6\x28\xf1\x93\x16\xf2\x6c\x06\x2e\x65\x89\x12\x57\xb1\xf2\xdf\xa6\x12\xb4\x52\x4b\x73\xa8\xf2\x28\x4d\xca\x20\x4f\xa3\x77\xfe\xf5\xc2\x6f\x5a\x4c\x82\x24\x18\x37\xd8\xef\x11\x51\x0a\x30\x51\xf2\x6d\xa2\xc4\x76\x17\xb9\x83\xc5\xaa\xae\xdd\x81\xbe\xda\xdd\x1b\xbb\x2a\x02\x1b\x6b\x69\x90\x06\x47\xd4\x6e\x0c\x54\x74\x6d\x94\xfc\xaf\x0a\x0c\x92\xa0\x08\x2f\x60\x3f\x40\x98\x99\xce\x62\xed\x04\xe2\x67\x96\x21\x0d\x9d\xb1\x8a\xb7\xd8\x62\x56\x23\x1c\x5c\x81\x88\xff\x07\x31\x16\x2f\x5d\xb3\x66\xa9\x2e\x1a\x22\x53\x11\x8e\xa8\xc8\x54\x15\x85\x0c\x5d\x43\x9e\x25\xf7\x90\x3e\x11\x49\x26\xd3\x68\x27\x43\x47\xd2\x4a\xaf\x75\x53\xd3\xe6\xa6\x2d\x4d\xe9\x2d\x0c\xfe\x18\x2d\x7f\xee\x41\x16\xab\x7e\xe2\x03\x32\x5f\xa2\x10\xc5\xb8\x5f\xa8\x42\x8b\x55\x97\x11\xde\xb8\x31\x50\xb1\x7b\x23\x9e\xc1\x97\x82\x2a\xf2\x11\x8b\xc5\x44\xc0\xe2\x0f\xf8\x0d\x93\x5d\xec\xe7\xa6\x51\x58\xd5\x7f\x51\xd4\xdb\xb6\xaf\x7b\xaf\x3a\x7c\x95\xe9\xed\xac\xa9\x6a\xd6\x95\x2f\x10\x55\x35\x57\xd6\x54\xab\xa3\x57\x99\xaa\xfa\xee\xde\x36\x1d\x76\x21\x7e\x86\x32\x40\xb6\xb1\x98\x58\xd8\x6c\x16\x7b\xbd\x81\x82\x01\x2f\xde\xbd\x3b\xd0\xb7\x71\x37\x2e\x46\x9a\x48\x1d\xc3\x67\x3f\x9d\x26\x52\x47\x76\x22\xbe\x8a\x59\xbe\x7c\x1e\xc2\x64\x27\xdd\xb9\x18\xd1\x9d\x64\x27\xde\xbd\xb1\x2f\xb0\x7b\x77\x3a\x56\x85\x6f\x23\x9f\xd0\x4f\xa2\xb7\x45\x6f\xa3\x7f\x52\xf2\x49\xf8\x36\xbe\x9f\xa7\x3a\xac\x9a\x8e\x30\x31\x92\x6f\xd8\x68\xe8\x22\xa2\x46\x2c\xaa\xed\x6a\xee\xd9\x9b\xb1\xb7\xad\xa7\xab\x4b\x8b\xc9\xad\x48\x8b\x27\xb3\x33\x58\x4c\x5a\xc8\x20\xb9\x85\xc5\xcd\xed\xe4\x55\x16\x93\x95\x48\x87\x89\x1d\x69\xb1\xa8\xa5\xa3\x63\x4b\x87\x7a\xd7\xae\xd6\x9d\x41\xdd\xde\xce\xae\x9e\xd6\x7d\x24\xb8\x18\x8d\xd8\x31\x50\x7f\xb0\x7c\x8f\x04\x13\x0b\xd9\xc8\x56\xb3\xd1\xd0\x18\x16\x93\xb5\x6c\x00\x4d\x60\x62\x93\x05\x24\x89\xc5\xe1\x69\xe4\x47\x3e\x76\xeb\xe4\x7c\x41\x81\xef\x46\x61\x25\x35\x92\x66\x16\x6b\x84\x9f\x91\xd8\x3d\x05\xe7\xa1\x1b\x35\x8b\x97\x6f\x68\x22\x83\x4c\x36\x5f\xda\x79\x11\xce\x47\x74\x14\x26\xe6\x13\xd7\x7d\x08\x93\xf7\x79\x6d\xf7\x6a\x89\x85\xe9\xed\xc6\xc7\xc8\x1c\x16\x8f\x24\x14\x0d\x85\x2e\x06\x88\x32\x25\x70\x9a\xaf\xa4\x48\x30\x0c\xd9\x54\x3b\x26\x86\x8f\xa6\x6c\x6e\xd5\x05\xeb\xb6\xad\x6f\xac\x5d\x3a\x7d\xc4\xa6\xc6\x86\x4d\xf5\x5b\xeb\xb7\x36\xec\x68\x6a\x97\x04\xb0\x2a\x44\x5c\xed\x7d\xdb\xf6\xb4\x76\xa5\xb7\xf6\x89\x76\x30\xcd\xdb\x9a\xb7\x35\x6a\xbb\x1e\xba\x44\x5d\xa2\x61\x29\xce\x20\x57\x56\xa9\x68\x02\x4d\x20\xb1\xbf\xf8\x8b\x26\x10\x48\x13\xc4\x24\x17\xbf\x14\x73\xd9\x72\x56\xfe\xf0\x81\x9e\x83\x9d\xba\xce\x03\x9b\x1e\xad\xec\xc5\xb5\xb5\xeb\x9b\xab\xd5\xd5\xeb\xdb\xba\x6a\x75\x58\xbc\x0c\x61\x7e\x51\x44\x89\x0f\x93\xbc\x15\x24\xfb\x56\xa2\xe0\x6b\xcf\x11\x34\x63\x36\xc2\xd4\x12\x0e\xa9\x7a\x6b\xba\xab\xb4\xd4\x92\xc3\x12\x0b\x83\xf3\x10\xb5\x30\xd9\x88\xf0\x81\x86\x04\xe8\x2a\xb2\x8a\x06\x56\xf2\xe1\x90\x34\xf2\xb7\x29\xfc\x33\x0a\x2b\x31\xd9\xc2\x1e\xc2\x64\x90\xb4\x60\xd2\x8f\xf8\xfa\x05\x67\xb3\xf2\x14\xde\x29\xc2\x37\x91\xd3\xf4\x01\x22\x25\xbb\xc9\x19\x5a\x44\x64\xa9\xc3\x33\x34\xc2\x47\x71\x7f\x29\x1b\x20\x6d\xb1\x1a\x3f\x48\x46\xb2\xf8\x22\xaf\xdf\x69\x08\x0f\xad\x18\x5a\xd1\xd6\xb6\xa3\xad\xb5\x3d\x1d\x0f\xaf\x18\x5e\xd1\xdc\xbc\xb9\xb9\xa5\x29\x1d\xb7\xb0\xeb\x59\x4c\x95\xb3\x10\x1e\x18\x08\x9c\xf6\x0e\x60\xef\x40\xe0\xf4\xc0\x00\xae\x6e\x5f\xdf\x55\x8b\xc9\x5b\x68\x02\xd2\x11\x0b\xc2\xaa\x69\x1f\xad\x20\x09\x44\x9e\x41\xe4\xcf\x92\x84\xcb\x1f\x69\x2f\xdf\xfe\x2c\x4d\xa0\xf2\x0c\x7c\x68\x5f\xc7\xe9\x8a\xc3\x74\x16\xd9\x3d\x62\xcf\xa9\xd3\xc1\xb3\x6a\x32\x9b\x8c\xa1\x63\xe8\x6c\x9c\x16\xd8\x4c\x36\xd1\x5b\xc8\x74\xed\x1a\x86\x68\xa8\x7d\x0b\x5d\x11\xc8\x08\xb4\xd0\x9d\xf8\x7b\x36\x16\x04\x3e\x66\x23\x96\x99\x08\x33\xef\xf3\xd5\x46\x38\x98\x89\xf0\xde\x9e\xf6\xae\x2e\x1c\xab\x03\x71\xb4\x21\x3a\x2e\x3a\x2e\xda\x10\x6d\x08\x8f\x8b\x8e\x0b\x37\x84\x1b\xc2\xe3\xc2\xe3\xc2\x0d\x58\xd7\x59\x5b\xd7\xbe\x5e\x4d\x9f\x5a\x4a\x7f\xa6\xe5\x34\xfb\xf7\x09\xc4\xa8\x1b\xba\xc6\x60\xbd\xb8\xaf\xaa\x6b\x9d\x27\x83\x8f\x04\x7c\x5e\x7c\xa4\xeb\xe1\xbe\x5e\xed\x57\x62\x3c\x1f\x91\x7a\x16\x93\xe5\x48\x2e\x5e\xf8\xdc\xf2\x57\xc9\x7e\xa4\xc5\x35\x61\x01\xea\xe6\x03\xd2\x1d\x08\xc7\x2e\x20\x3a\xcc\x57\x9a\x58\x54\x55\x55\xef\xf5\x66\x78\x3b\xbd\xbd\x55\x5a\xac\xf2\xf8\xfd\x1e\xed\x38\xc6\xe3\x3f\xf0\x88\x0e\x67\xb1\x34\x68\x42\xd8\xdf\x55\xde\x57\xab\xdd\xd4\xb9\xab\x65\x97\x7a\x17\x66\x62\x45\x04\x0e\xa7\xb0\x6d\xe4\x07\xd4\x5c\xdb\xa5\x8b\x87\xbd\x20\x09\xe2\xf0\x54\x72\x85\x5c\x09\x4f\xc5\x0c\x51\xfc\xf2\x0b\x51\xe8\x70\x38\x58\x8c\x70\x3b\x4b\xba\x10\x1e\xc3\x12\x23\x26\xbf\x91\xd3\xf4\x34\xfd\x0d\x8b\xaa\x7a\x07\xea\x07\xd4\x18\x06\x22\x41\x41\x24\x88\xc5\x1b\x59\x4c\x16\x12\x15\x11\x90\xfb\xb6\xe8\x1e\x7f\xae\xff\xe2\xc5\x8c\xee\xad\x7b\xb6\x74\x6b\x71\xff\x65\x35\xf1\xb1\xe4\x34\xf9\x0d\xdf\xf7\xd6\x6c\x97\xbf\xb9\xae\x4a\x4b\x0f\x8b\xeb\x7b\x0f\x6c\x3a\xa4\x7e\xe7\xa5\xb7\x70\x7b\x47\x47\xb0\x2d\x98\x1e\x16\x85\x1f\x11\x7d\x15\xbd\x48\xab\x88\x94\x88\xb1\x8a\xf8\x49\x33\x7f\xeb\x9c\xcb\xea\xa8\x3f\xaa\xc4\x21\x1b\xc1\x59\x59\x36\x8a\x67\xcd\x3a\x45\xf1\xd7\x5f\x9f\x22\x38\xa4\xc5\xd7\x2c\x9d\x6c\x2c\x5e\xc5\x62\x75\x20\x16\xbc\x62\x25\x87\x1e\x61\x22\xe4\xc3\x7f\x03\xab\xe5\x9d\x72\x1f\xc2\x6d\xed\x3b\x3a\x82\x19\x78\x60\xe0\x74\x60\xc0\x8b\x61\x6c\xcf\xc1\xe6\x36\x2d\x26\x77\xf3\x39\x4f\xcc\xef\xaa\xfe\xe0\xc3\x19\x03\x9d\x07\x7b\x7b\xb5\x64\x3c\x19\x27\xda\xdb\x8b\x17\xfc\x17\x61\xaa\x6e\xaf\xd8\xc3\xf5\x70\x07\x0a\x0e\xb4\x1e\x68\xdf\xdf\x21\x69\x3b\xbe\x95\x0f\x5b\x21\x62\x0c\x2b\x49\x10\x06\x88\x51\xc3\x0c\x12\xa3\x00\xf7\xf4\xb4\x75\x75\xe9\x86\x04\xe1\x1f\x45\xc1\x20\xf1\x90\x55\xa4\x29\x03\x2f\x61\xe9\x19\x12\x42\xe4\xaa\x18\x93\x79\x2c\x7f\x09\x51\x46\x2c\xaa\x65\x08\x6f\x69\x6f\x69\x6f\x6e\x6f\xda\xdd\xb4\xa7\xa1\x9b\xea\x48\xe5\x08\x7a\x28\x56\xc3\xd2\x55\xe4\x0a\x92\x8f\xcc\xd1\x30\x06\xf2\x35\xc2\x81\xb0\x84\xc5\xe2\xe3\x15\x41\xaf\x57\x8b\xc5\xf6\xbe\x86\x81\x01\x2d\x26\x62\x2a\xc6\xd4\x4e\x67\xe0\x17\xa9\x98\x6a\xce\xd3\xa9\x6a\x5a\x44\xcb\x69\xb2\x6d\x81\x0e\x3f\x54\x59\xe0\x28\xd1\x76\x95\xb7\xf9\x7c\x19\xab\xfc\x4b\xac\x7e\x2d\xce\x88\xdb\x9e\x76\xe8\x1a\x43\x8c\xbf\xff\x40\xb2\x75\x98\xa1\x8a\x71\xe3\xa8\x42\x37\x1c\x22\x1f\x22\x9c\xcd\x86\x43\x98\xc8\xd9\x23\x7c\x68\x58\xca\xc2\x00\x26\xb7\xb0\x7c\x21\x8b\x27\x21\xfe\x9a\x83\xdf\x8d\x65\x93\xd9\x64\x0c\x19\x43\x66\x63\x55\x00\xe1\x1f\xc4\x13\x11\x7e\xac\xe6\x98\xff\xa0\x16\x07\x16\xf3\xf3\xc4\xc7\xf1\x9a\xe9\xf4\x3f\xd1\x6b\x85\x19\x01\x31\xcd\x27\xa7\x72\x49\x36\x26\xb3\xe8\x6e\x51\x65\x57\x5f\x7d\xbf\xba\x6b\x77\x6b\xc7\x2e\x5d\xfc\xc4\xfe\xfa\x1f\x93\xc7\x59\x3f\x3b\x74\x86\x18\x10\x26\x5a\x52\x47\xb4\xe1\x20\xd1\xde\x49\xee\x21\x4a\xa2\xc5\xe7\x8a\x4f\x70\x5c\x71\x31\xc7\x9d\x28\x3e\x77\xee\xc4\x89\x73\x5a\x9c\x41\x84\x01\x22\xdc\x42\x84\xda\x86\xfa\x6d\x0d\x6a\xeb\x56\xfc\x02\x92\xef\xec\x6a\xdd\xdd\x9d\xc1\x5f\x94\x71\x2c\x73\xc7\xfe\x78\xaf\xe9\x64\xb7\xf0\x56\xc2\x27\xf5\x4d\xec\x6f\xf8\xcb\x4b\x79\x06\x1c\x4b\xde\xb5\xe9\x4f\xad\xea\xaa\xed\x0b\xec\xee\x4a\xc7\x44\x59\x83\x70\x34\x9d\xbe\x49\xab\xe8\x09\x6a\xfe\x2f\x1d\x4b\xcc\x93\x30\x79\x87\xee\x22\xb1\xe2\x22\x5e\x64\xe0\x77\x48\x22\xe1\xde\x23\x63\xd4\x44\xf1\x61\xc1\xb2\x5f\x74\x98\x6c\x44\x43\x96\x25\x2c\x26\x4b\x89\x9e\xe8\xc9\x52\x9e\x52\x3d\x5d\x8a\x35\xa2\x41\x06\x9f\x66\x19\x4c\x82\x34\x88\x17\xcf\x78\x41\xd7\x55\x1d\xac\xda\x55\x2d\xa9\x6b\xef\x68\xc6\xd5\x61\x80\xb4\x34\x44\x43\xa2\xe6\xe6\x16\xac\x11\xf9\x54\x64\x0a\x8b\x67\xb2\xf4\x8c\x18\xf7\xf7\x97\xb7\xb0\x78\x4b\xfd\xf6\xfa\xb6\xc6\xf4\xa6\x36\xdc\xc4\x07\xee\x76\x3e\x70\xef\xae\xed\x0b\x74\x75\xa5\x3f\xf5\x14\xbe\xfe\x95\x08\x09\xe2\x7c\x3e\x19\x9e\x21\x67\xf8\x99\xf0\xfd\x48\xb5\x20\xf2\x0a\xa6\x21\xf1\x24\x84\x55\x44\x8c\xb4\xbc\x47\xc4\x22\x98\xf0\x24\x11\x17\x31\x18\x06\xfc\xac\x00\x87\x01\xab\xc5\x54\xa5\x61\x12\x20\xa6\xca\xd3\x2c\xc4\xcc\x38\x84\x87\x43\x62\x6a\xc0\xe2\x70\x02\xc2\x1d\xc1\xd6\xb6\x36\xbc\x09\x89\x31\x15\x13\x31\xe6\x8d\x92\x2f\x17\xe7\xcc\xa3\x4c\xe5\x8a\x4e\xd7\x66\x6d\x15\xf6\xb3\x42\x4d\x04\x2c\x46\x8b\x91\x18\x77\xf5\x74\xee\xed\xd8\x27\xe9\xdb\x4e\x54\xdd\x7b\x32\x30\x61\xc9\x84\x0c\x32\x61\x31\x61\x27\xfe\xaa\x3d\x81\xa9\x52\x4c\x7e\x67\x71\x46\x77\x47\x67\x77\xab\xf6\x9b\xbe\x37\x2e\x3c\xfe\xa9\x04\x37\x36\x77\x74\x6c\xd3\xbd\x16\x9e\x28\xda\xb5\xad\xb3\x83\xdf\xd1\x66\x14\x73\xde\xcd\x08\x73\xf6\x33\xba\xd2\xc7\x0e\x54\xfe\x43\xfd\x8f\xfd\xfb\x0e\x63\x46\x8f\x48\x1a\xd2\xe1\x8e\xb6\x5d\xed\xba\x5d\x7b\x83\xbd\x5d\x7b\x25\xef\xbd\x80\x37\x21\x15\xee\x68\xe9\x50\xe3\x2d\xac\x0a\x5f\x0c\x90\x9f\x10\x3e\x80\xce\xf1\x7b\x2e\x64\xc3\x46\xf1\x71\xdc\xbd\x37\x83\x28\xc5\xc1\x1d\x1d\x6d\x6d\xda\x36\x6c\x44\xc4\xb2\x92\xc5\x74\xcd\xb5\x85\x22\xf2\x05\x43\xd6\x44\x16\x8a\xe2\x57\x71\x6a\x99\xc8\xc6\xcc\x9e\x04\x71\x74\x2a\xb9\x42\xf9\x38\x18\xe6\xef\x94\xe1\x86\xe8\xb8\xf0\xb8\x68\x03\x5f\x4a\x34\x23\x4c\x43\x31\x13\x8d\xa2\x00\x3e\x41\xc2\x2c\x7e\x9c\xe5\xaf\xca\x98\xfa\xc5\xe3\x59\x3c\x19\x8d\xe5\xa5\x5c\x24\x4a\xac\x89\xcc\x10\x63\x0f\x22\xb7\xb2\x78\x9d\x7f\xbd\xbf\x5e\x57\xef\xdb\xe9\xde\x57\x85\x75\xcd\xcd\x9b\x1b\x1b\x32\x7c\x64\x2c\x1d\x83\xff\xf7\xe5\x56\xcc\x4e\x53\xc8\x11\x16\x1b\x0c\x9b\x0d\xea\x72\xba\x60\x7b\x6b\x13\xef\x27\x27\xf9\xfa\x88\x0f\x30\x98\x79\x88\xc5\x1b\x6b\x03\xe5\xbb\x6b\x71\x3f\xf9\x18\x41\x5c\xb3\xd6\x91\xe1\xe8\xc6\xe2\x3c\x16\xd3\x19\x64\x06\xa6\x2c\xd5\xd6\xd5\x6d\xad\xec\xdc\x98\x8e\x19\x92\x87\xf8\xbb\xfc\x82\x8a\x14\x6c\x1a\x39\xca\xf8\xf9\xef\xbf\x7d\xf1\xc5\x6f\xbf\xe3\x8a\x12\x1d\xad\x16\x6f\x68\x6a\xda\xa0\xc5\xda\x89\x63\x16\x53\x96\x4e\xc8\xa0\x13\xb0\x8a\xca\x28\xa6\xdb\x98\xda\x86\x00\xd6\xb6\x36\x36\x6c\x6f\x50\x4f\x42\x37\xd6\xc7\x87\xd8\xf8\xd7\x79\x44\x89\x55\xe4\x2c\x7f\x5b\x62\x8a\x09\xc3\x60\x91\xef\xc0\xb1\x9a\xc7\xd4\x98\xd9\xdb\x53\x53\xb5\x4d\x87\x45\xbd\xdb\x7a\xba\x63\x17\xae\xb0\x88\x37\x7c\x65\x38\xa4\xc2\x03\xac\x16\x17\x51\xf1\x49\x06\x8b\xc9\xd3\x08\x0f\xf1\x9b\xa5\x37\xd3\x39\xbc\x93\x5a\xb0\x66\x68\x06\x83\xa3\xca\xb0\x12\xdf\xfa\xe0\xb9\xe3\xf9\xba\xc3\x0e\xff\x3e\x4c\x8e\x22\x7e\x36\xb9\x1f\x61\x2a\xb9\x42\x6f\x22\xc6\x65\xe4\x1f\xb8\xa2\xb4\x52\x77\xb8\x6a\x6d\x9f\x5d\x8d\xd5\x74\x04\x05\x14\xd0\x11\x3a\xac\x7a\xdc\x7d\xa0\x68\x85\xad\x70\x45\x21\x16\x3f\x88\x8a\x58\x2d\xd6\x6a\x84\x7c\xb9\xe6\xad\xf7\x55\x55\x69\xe9\x78\x3a\x0e\x93\x91\x2c\x1f\x0d\x30\xe5\xcf\x4a\xd4\xd5\xd5\x83\xa9\x92\x2a\x31\xb1\x93\x19\xb8\xbf\x1c\x06\x30\x04\x10\x00\x0c\xc1\x48\x00\x6a\x00\x68\x04\x60\x2b\x00\xdb\x01\xe8\x06\xe0\x61\x08\x8e\x00\xb8\xf9\x8f\x84\xcd\x7f\x08\x36\x9f\x4e\x78\x41\x00\xf8\xa1\x26\x00\x72\x01\x78\x11\x80\xdf\x00\xec\x00\xb0\x13\xc0\x2e\x00\xbb\x01\xec\x01\xb0\x17\xc0\x3e\x00\x4f\x03\xf8\x04\x80\x11\x90\xa0\x07\x09\x77\x83\x84\x2f\x80\x40\x02\x04\x39\x40\xd0\x0a\x04\x17\x80\x30\x1d\x08\x73\x80\xb0\x01\x08\xdf\x04\xa2\x51\x40\xd4\x03\x44\x5f\x03\x26\x19\x30\x3b\x01\xf3\x06\x90\x30\x40\xb2\x11\x24\x4a\x40\x62\x06\x48\xbc\x1b\x24\x5e\x05\x68\x21\x40\x3b\x01\xfa\x18\xe0\x3b\x01\xae\x02\xf8\x13\x20\xdd\x0d\xa4\xdf\x01\xd9\x6d\x40\xf6\x18\x90\xcf\x02\xf2\xc5\x40\xde\x0e\x14\x1b\x40\x52\x0e\x48\xce\x01\xc9\x53\x41\x72\x23\x48\x71\x82\x94\x5a\x90\xf2\x0b\x48\x5d\x05\x94\x26\xa0\xd2\x02\xd5\x71\x90\xd6\x0a\x6e\x2a\x05\x37\x75\x83\x9b\x9e\x05\x37\x7d\x0b\x6e\x8a\x80\x11\x13\xc0\x88\x87\xc0\x88\x9d\x60\xc4\x07\x20\x7d\x1a\x48\x7f\x1e\xa4\x53\x90\xa1\x00\x19\x9d\x40\x9d\x0f\x34\x93\x80\xe6\x7b\xc0\xce\x03\x2c\x07\xd8\x2a\xc0\x3e\x0c\xd8\x10\x60\x7f\x07\xec\x1f\x40\x3b\x1e\x68\xef\x00\xda\x07\x80\x76\x13\xd0\x9e\x07\x3a\x08\x74\x77\x00\x5d\x01\xd0\x45\xc0\xc8\x25\x60\xe4\x47\x60\x54\x26\x18\xf5\x2e\x18\x3d\x11\x8c\x5e\x0d\x46\x9f\x07\x37\x67\x82\x9b\xfb\xc1\x18\x29\x18\xb3\x0e\x8c\xf9\x08\x8c\xf9\x01\x8c\x15\x80\xb1\x1b\xc1\x38\x13\x18\xf7\x25\x18\x3f\x13\x8c\xff\x11\xdc\xca\x80\x5b\xdb\xc1\x6d\xf3\xc1\x84\x9b\xc0\x84\x41\x30\x51\x0b\x26\x96\x82\x89\x87\xc1\xc4\xcf\xc1\xa4\x76\x30\x39\x05\x4c\xce\x02\x93\xbb\xc0\xe4\x8f\xc0\xe4\x6b\x60\xca\x62\x30\xe5\x0a\xc8\x14\x83\xcc\x56\x90\x95\x0b\xf4\x97\x80\x9e\x02\xa3\x1a\x98\xd6\x01\xd3\x56\x60\xfa\x1d\x98\xa7\x01\xf3\x20\xc8\xce\x02\xd9\x95\x20\xfb\x19\x90\x63\x07\xb9\x11\x70\xfb\xfd\x60\x6a\x25\x98\xc6\x82\x69\x16\x30\xad\x1e\x4c\x67\xc0\xf4\x13\x60\xfa\x10\xb8\xb3\x19\xdc\xf9\x14\x98\x31\x0a\xcc\x78\x0f\xcc\x5c\x0b\x66\xfe\x04\x66\xed\x06\x79\x3d\x60\x76\x2b\x98\xf3\x28\x98\x3b\x08\xe6\x5d\x01\x77\xcd\x07\x77\x9d\x06\x77\x8b\xc0\xdd\x16\xb0\x48\x0d\x16\x75\x82\x45\x9f\x81\x7b\x47\x83\x7b\x2b\xc1\xe2\x54\xb0\x58\x05\x16\xdf\x04\x16\xa7\x83\xc5\xef\x82\x25\x93\xc0\x92\x72\xb0\xe4\x0d\x60\x79\x18\x3c\x30\x0f\x2c\xd5\x80\xa5\x8f\x82\xa5\x27\xc0\xd2\x57\xc1\x83\x2c\x58\x96\x05\x96\x2f\x03\x2b\x5e\x02\x2b\x27\x80\x95\x2f\x80\x87\xf2\xc0\xaa\x24\xb0\x6a\x10\xac\x8a\x82\xd5\x41\xc0\x4d\x00\x5c\x2e\xe0\xe6\x01\xce\x0d\xb8\x0e\xc0\xbd\x03\xb8\xaf\x00\xf7\x1f\xc0\xfd\x01\xd6\xb4\x01\xeb\x08\x60\x9d\x07\xf2\xcd\x20\xff\x79\x90\xff\x15\x28\x58\x0c\x0a\x5e\x01\x85\xe3\x41\xe1\x65\x60\x5b\x04\x8a\xe6\x81\xa2\xbd\xa0\xe8\x0a\x28\xbe\x03\x14\x7f\x08\xec\x2d\xc0\xfe\x26\x70\x4c\x02\x8e\x3a\xe0\xf8\x0a\xac\x1d\x09\xd6\x5e\x06\x25\x15\xc0\x39\x16\x38\xbb\x41\x69\x36\x28\xed\x03\xa5\x2f\x83\xd2\x9f\x81\x6b\x0c\x70\x4d\x05\xae\x7b\x81\xab\x00\xb8\x9a\x80\xeb\x39\xe0\x7a\x0d\xb8\x3e\x04\xee\xd1\xc0\xdd\x0e\xdc\xff\x02\x1e\x16\x78\xc6\x01\xcf\x1d\xc0\xb3\x0c\xac\x83\x60\x1d\x02\xeb\x6a\x80\xf7\x6e\xe0\x6d\x07\xbe\x1c\xe0\xbb\x1d\xf8\xa6\x01\xdf\x76\xe0\xfb\x04\xf8\x22\xc0\xbf\x15\x94\x6d\x05\xe5\xd3\x40\xc5\xdd\xa0\xc2\x0e\x2a\x42\xa0\x72\x1e\xa8\x7c\x03\x54\x8d\x04\x55\x8d\xa0\x7a\x1c\x58\x6f\x06\xeb\xcb\xc0\xfa\x27\xc1\x06\x1d\xd8\xd0\x00\x36\xbc\x07\x6a\xfe\x01\x36\x8a\xc0\xc6\x3d\x60\xe3\x2f\x60\x63\x14\xd4\x3e\x01\xea\xf2\x40\xdd\x5e\x50\xf7\x3e\xa8\x4f\x06\xf5\x0b\x41\x7d\x33\xa8\xff\x0e\x34\xe4\x82\xc6\x24\xd0\x98\x07\x1a\x37\x80\xc6\x1e\xd0\x78\x16\x34\xe9\x41\x53\x2b\x68\xce\x01\xcd\x4b\x41\xf3\x0e\xd0\xfc\x33\xd8\xb4\x18\x6c\x6a\x01\x9b\x13\xc1\xe6\x02\xb0\xf9\x33\xd0\xa2\x04\x2d\xf7\x83\x96\x76\xd0\xf2\x05\xd8\xf2\x02\xd8\x7a\x2f\x08\xa4\x82\xc0\x49\xb0\xed\x6e\xb0\xed\x75\xb0\xfd\x3b\xd0\xfa\x25\xd8\x71\x33\xd8\xb1\x01\xec\xb8\x00\x76\xde\x04\x76\xde\x03\x76\xb6\x81\x9d\xe7\xc0\xce\x4f\x40\x5b\x2f\x68\x5f\x03\x82\x4f\x80\xae\x74\xd0\xf5\x02\xd8\x5d\x0a\xba\x11\xe8\xee\x00\x7b\x20\xe8\x59\x0c\x7a\xdc\xa0\xa7\x1f\xec\x1d\x04\xbd\xff\x06\xfb\xb2\xc0\xbe\xad\x60\xdf\x65\xd0\x77\x1b\xe8\xab\x04\x7d\x2f\x83\xfe\x9d\xa0\xff\x0d\xb0\xff\x35\xf0\x88\x11\x3c\x5a\x04\x0e\x4d\x06\x87\x05\xe0\xf0\x5d\xe0\xf0\x7b\xe0\x88\x1a\x1c\x79\x00\x1c\x7d\x08\x1c\xfd\x05\x1c\xcb\x02\xc7\xbe\x07\x8f\x7d\x03\x4e\xec\x00\x27\x93\xc1\xc9\x0b\xe0\xd4\x78\x70\x2a\x0f\x9c\xaa\x00\xa7\x8e\x80\x53\x4f\x82\xc7\x57\x82\xc7\x87\xc0\xe9\x07\xc1\xe9\x7e\x70\xe6\x11\xf0\x44\x0b\x38\x2b\x01\xe7\x6e\x01\xe7\xf6\x80\x27\x59\xf0\xe4\x15\xf0\x54\x3e\x78\xea\x4d\xf0\xf4\xeb\xe0\x99\x13\xe0\xd9\xa9\xe0\xd9\x8f\xc0\x73\x4a\xf0\xdc\x31\xf0\x8f\xf9\x60\x70\x3d\x78\xe1\x29\xf0\xe2\x64\xf0\x52\x12\x78\xa9\x17\xbc\x7c\x1f\x78\xf9\x31\xf0\x4a\x11\x78\xe5\x38\x38\x7f\x1b\x38\xff\x3e\x78\xf5\x3c\xb8\xd0\x03\x2e\x76\x81\xd7\xb6\x80\xd7\xb7\x81\xd7\x2f\x80\x37\xd2\xc1\x1b\x1b\xc0\x9b\x6b\xc0\x9b\x47\xc1\x3b\x2b\xc0\x3b\xbd\x20\x74\x0b\x08\xfd\x13\xbc\x3b\x1f\xbc\xfb\x3c\x78\x0f\x82\xf7\x7e\x02\xff\x7e\x06\xbc\xaf\x05\xef\xbf\x0f\x3e\xf0\x80\xcb\xb9\xe0\xc3\x11\xe0\xc3\xcf\xc1\x47\xb3\xc1\xc7\x0a\xf0\x69\x2e\xf8\x6c\x2b\xf8\x3c\x0c\x3e\x1f\x06\x5f\xbc\x06\xbe\x7c\x0e\x7c\x35\x00\xbe\xfa\x03\x7c\x5d\x0c\xbe\x7e\x02\x7c\xfd\x6f\xf0\x7f\x7f\x80\x6f\xfc\xe0\x9b\x8f\xc0\xb7\xc5\xe0\xdb\x30\xf8\x7e\x22\xf8\xfe\x23\xf0\xc3\x31\xf0\xe3\x08\xf0\xe3\x66\x70\x65\x1d\xb8\xf2\x05\xf8\xf9\x4e\xf0\xf3\x55\xf0\xcb\xa7\xe0\x3f\x6e\xf0\xeb\x2a\xf0\x5f\x2d\xb8\x9a\x05\x86\xac\x80\xce\x87\x20\x0f\xc2\x73\x50\xd0\x0f\x85\x42\x28\x3c\x0a\x45\x99\x50\xf4\x36\x64\x3e\x81\xe2\x62\x28\xfe\x12\x4a\xb6\x40\xc9\x00\x94\x7c\x0a\x13\xc7\x40\x84\x21\xfa\x02\xe2\x45\x10\xef\x82\xd2\xdd\x50\x36\x17\xca\x27\xc3\xa4\x74\x98\xcc\xc0\xe4\x2a\x98\xb2\x0e\xa6\xbc\x0b\x55\x1f\xc0\x34\x23\x4c\xfb\x0a\xde\x14\x81\x23\xce\xc1\x8c\x5d\x50\x3d\x01\x6a\xb4\x50\xb3\x10\x6a\xf6\x40\x76\x1a\xd4\x36\x43\xdd\x0e\x38\xf2\x2c\x1c\x75\x07\x1c\xf5\x39\x1c\x3d\x15\x8e\xb6\xc3\xd1\x9f\xc0\x9b\x53\xe1\xcd\xdb\xe0\x98\x7c\x38\xb6\x18\x8e\x9b\x0d\xc7\xb5\xc1\xf1\x0c\x1c\xbf\x1d\x8e\x3f\x0d\xc7\x7f\x08\xc7\x7f\x0c\xc7\x7f\x0a\x6f\xd1\xc0\x5b\x9e\x83\xb7\x3e\x07\x6f\x1b\x0d\x6f\x3b\x08\x27\x74\xc2\x09\x9f\xc0\x89\x77\xc2\x89\x1e\x38\xf1\x2c\x9c\x34\x17\x4e\x7a\x00\x1a\xef\x80\xc6\x43\xd0\xb4\x11\x9a\x7e\x81\x66\x31\x34\xb3\xd0\x6c\x80\xe6\x3b\xa0\x79\x27\xcc\x4e\x84\x39\xa3\x61\xee\x6e\x98\xfb\x3a\xbc\x7d\x12\x9c\x3a\x17\x4e\xfd\x16\x4e\xcb\x85\xd3\x28\x9c\x3e\x1e\x4e\x7f\x08\x4e\xef\x86\xd3\x9f\x87\x77\xa4\xc1\x3b\x97\xc3\x19\x4b\xe0\xcc\xb7\xe0\xac\x67\xe0\x6c\x25\x9c\x33\x13\xce\x3d\x0f\xe7\x6d\x85\x77\xdd\x02\xef\x3a\x00\xef\x16\xc1\xbb\x4b\xe1\x82\x79\xf0\x1e\x0d\xbc\xe7\x7d\xb8\x70\x35\x5c\xb4\x02\xde\xfb\x1c\x5c\x5c\x09\xef\x9b\x01\x97\xc8\xe1\xfd\x63\xe1\xfd\x4e\x78\xff\x1f\x70\xe9\x51\xf8\xe0\x69\xb8\xec\x76\xb8\x6c\x09\x5c\xf6\x30\x5c\xf6\x15\x5c\x2e\x81\xcb\x57\xc1\xe5\xef\xc0\x15\x75\x70\xc5\x0b\x70\xe5\x04\xb8\xd2\x05\x57\x9e\x87\x0f\x15\xc2\x87\xda\xe0\xaa\x62\xb8\x7a\x39\x5c\xfd\x0d\xe4\xf4\x90\xfb\x12\xae\x31\xc1\x35\x17\xa1\x75\x3f\xb4\xfe\x04\x0b\x66\xc1\x42\x01\x2c\x9c\x0a\x0b\x1f\x84\x85\xe5\xb0\xb0\x07\xda\x46\xc1\xa2\x11\xb0\xe8\x1b\x58\xec\x86\xc5\xaf\x43\xfb\x22\x68\xff\x27\x74\x94\xc0\xb5\x33\xe0\xda\x0f\x60\xc9\x25\xe8\xfc\x18\x96\x36\x40\x57\x1f\x74\xf7\x43\x4f\x14\xae\xb3\x43\xef\x4e\xe8\x7f\x0a\x96\x95\xc0\xf2\xe5\xb0\xa2\x08\x56\xfe\x08\xab\x97\xc2\xf5\x5e\xb8\xa1\x01\xd6\x4c\x81\x1b\x19\xb8\xf1\x49\x58\xdb\x08\xeb\xa2\xb0\xfe\x24\x6c\x7a\x00\x36\x6d\x87\x4d\xd7\xe0\xa6\x32\xb8\x59\x07\x5b\x94\x70\xcb\xab\x70\xeb\x4a\xb8\x95\xc0\xc0\x05\xb8\xad\x1b\x6e\x97\xc1\xed\x7e\xd8\x9a\x06\x5b\xf7\xc1\x1d\xf3\xe1\x8e\x1f\xe0\xce\x93\xb0\x7d\x23\x6c\x7f\x1b\xb6\x7f\x08\xdb\xbf\x86\xed\x3f\xc3\xf6\x21\xd8\x71\x14\x06\x77\xc2\xce\xf3\xb0\xeb\x26\xd8\x65\x80\x5d\xf3\x61\xd7\x21\xb8\xfb\x66\xb8\xbb\x0d\xee\x3e\x0e\xf7\xbc\x08\x7b\x76\xc0\xbd\x05\xb0\xf7\x0f\xb8\xef\x1b\xd8\xf7\x06\xdc\x3f\x06\xee\x3f\x0c\x0f\x4c\x85\x03\x17\xe0\xc0\x6b\x70\xe0\x0d\x38\xf0\x16\x1c\x78\x07\x0e\x84\xe0\xc0\x7b\x70\xe0\x7d\x38\x70\x19\x0e\x7c\x04\x07\x3e\x81\x03\x9f\xc1\x81\x2f\xe0\xc0\x57\x70\xe0\xff\x86\xff\x08\x10\xa1\x46\xa4\x23\x42\x48\x84\x44\x18\xb6\x10\xa1\x80\xf8\x89\x50\xa5\x11\x8d\x0c\x5b\x34\x91\xcf\xa2\x16\x31\x15\x52\xa1\x6a\xc8\xb8\x18\x0d\x1b\x35\x11\xc0\xc8\x35\x91\x77\xe5\x23\x0b\x58\x82\x34\xa2\xa0\x40\x23\xba\x10\xae\x56\xd1\x7d\x64\x32\xd9\x47\x26\x9f\x3f\xde\x7f\xd9\x7e\x3e\x7d\x01\x49\xb0\x9f\x9f\xd6\xbf\xc8\x9e\x4e\xf7\xd1\x49\x22\xf2\x8a\xf8\x32\xa2\xca\x5f\x10\x7d\x45\x4c\xf7\x91\x49\x8b\x8e\x4f\x2b\xb7\x2f\x4a\x5f\x40\x13\xec\x8b\xfa\xa7\x9d\xb7\xa7\x93\x7d\x74\x32\xdd\x47\x27\x2f\xb2\x97\x4f\x3b\xbe\x28\xfd\x22\x4d\x38\xbe\xe8\x72\xf9\xf9\xe3\xe9\x64\x1f\x99\x24\xa2\xaf\x90\x41\x44\x5e\x11\x93\x7d\x74\xd2\x79\xfb\xe5\xfe\xe3\xe7\xd3\x2f\x92\x84\xe3\xe7\xcb\x2f\x2f\x3a\x9e\x2e\xa7\x7f\xf4\x97\x93\xed\x6c\xd4\x18\x36\x92\x6f\x58\x6a\xb9\x88\xa2\xc6\xa8\x31\xfe\xcd\x26\xb5\x4c\x43\x61\x63\xd4\xf8\x31\x4b\x2c\x33\x51\xd8\x18\x36\x8a\x17\x22\xf9\x70\x6d\x80\x84\x86\x32\xc9\x93\x30\xac\x24\x21\xc1\x90\x85\x1c\x53\xed\xaf\xea\x2d\xd3\xd2\x26\xa6\xac\xaa\xaa\x4c\x47\x9b\xc4\x65\xbd\x55\xfb\xb5\xa4\x89\xd9\xdf\xdb\xbb\x5f\x47\xde\x1a\xfa\x48\x45\xaa\x68\x13\xb9\x93\xae\xa5\x6b\xe8\x44\x23\x9d\x47\x81\xb6\xae\x6a\x47\xd9\xde\x8d\x24\x87\x26\x8f\xd8\xd4\xd1\xd1\x12\x54\xef\xea\x6a\xeb\xec\xd0\xbd\xfc\xee\xc1\x83\x07\xf7\x4a\xf6\xec\x3f\xd3\xfd\xa4\xfa\xa3\xd0\xf2\xfb\x17\x94\xac\xbd\xc3\xae\x33\x14\x50\xe9\xcd\x54\x96\xb1\x5a\x5c\xd6\xed\x88\xc9\x3e\xb0\xf7\xe1\xfd\xba\x80\xf8\xd0\xc9\xb7\x5e\x7e\x4c\xfb\xfd\x20\x51\x85\xc8\x92\x0c\x79\xff\x5f\x5e\xf4\x8f\x70\x30\xac\x24\xdb\x59\x0d\x9d\xa1\x67\x35\xc2\xc1\x99\x48\xde\x2f\x27\x46\x04\x87\x82\x24\x28\xd0\x30\x07\x35\xa2\xb9\xaa\x67\x17\x06\x8b\xb4\x9a\x48\x1d\x53\xb4\xb0\x61\x85\xeb\x80\xab\xaf\x42\x37\x24\x1d\x96\x8a\x86\x83\x34\x24\xae\x47\x11\x25\xf3\x25\x4b\x43\x43\x41\x66\x48\x3a\x24\x15\xf5\xf5\x1d\x38\x74\x28\x43\xde\x5f\x0e\xc9\x33\x88\x54\x22\xc1\x62\xa4\x11\x8d\x54\xf1\xd7\xd5\xfa\x86\xad\x2d\x0d\xda\xe1\x10\x0d\x8a\x0a\x36\xba\x8b\xac\x19\xd7\x56\x92\x51\x68\x68\xb9\x78\x28\x48\xea\x45\xd1\xc7\xc8\x28\x24\x1f\x19\x20\xc1\x88\xf2\x14\x8a\x28\x49\x50\xb0\x09\x0d\x59\x66\xa0\x01\x56\x27\xef\xa7\xca\xf8\x4d\x77\x28\x48\xf2\xd9\xd3\xec\xd1\x1e\x56\x13\x99\x51\x87\x86\x82\xe2\x7e\xdf\x81\xb2\x81\x0a\x72\x33\x4d\x20\x63\xa8\x90\xe8\xa8\x44\x72\xcf\x7b\xdf\xde\xf1\x5f\xf5\x36\x66\x1b\xf3\xdf\x6f\xdf\xbf\xf0\x9e\x8e\xe8\x88\x84\x8c\x21\x42\x72\x33\x49\x18\xe8\x3b\xb0\xbf\xff\xa0\x64\x38\x28\x8e\x9c\x10\x9a\x73\xa9\x60\xfe\x32\x2d\xcd\x18\x4d\x33\x46\xd1\xf4\x51\x92\x35\x4b\x27\x4c\x99\xa3\xde\xca\x6c\x65\xe6\x4c\xf8\xe6\xec\x52\x1d\x4d\xff\x8d\x66\xfc\x46\x33\xae\x4a\xb2\xde\x59\xf2\x13\x61\x32\xe6\x22\x2d\xe9\x63\x4f\x35\x73\x5e\x1d\x51\x9e\xfc\x1d\xf5\xaf\x60\x35\x62\x20\x88\x28\xa9\x52\x45\xdc\xec\x71\x44\x9b\x88\x87\xae\xea\x68\xd2\x0d\x09\xa3\x3f\x89\x6a\xbb\x7a\x9a\x7b\xd4\x72\xe2\x67\x4f\xb3\x11\x99\xea\x70\x49\x97\x6f\x87\x36\xba\x35\x44\xcb\xc2\x2b\x45\xfb\x1a\xaa\xf7\xfb\xd5\xe5\x6c\xf8\x01\x5a\x27\x6a\xea\xea\xde\xd4\xad\x3e\xd4\x75\xf0\x61\xb2\x02\x11\x3f\xab\x11\xae\x0b\x1f\x52\x5d\x8a\xe6\x46\x65\x64\x65\x54\x4e\x57\x86\xc2\xb9\xf4\x65\xf2\x5c\xf8\xf6\x57\xc9\x7d\xe1\x14\x72\x5f\x34\x25\x7c\xfb\x42\x11\x59\xf7\xca\xff\x3f\x52\x0f\x3c\x42\x56\xa0\x68\xed\x0a\x76\x0b\x2b\xd8\xc2\x12\x56\x45\x7a\xe6\x93\x7f\xd1\x3d\x5a\xd2\x83\xe8\x9e\xf9\xf4\x5f\xb4\x87\x8e\xfb\x81\x62\x92\xa8\x1b\xfa\x9e\x21\x89\x3f\x10\x4c\xc6\xe9\x68\x30\x82\x55\x56\x76\x3f\xd2\xca\xc9\xad\x34\x48\x36\xc4\xef\xad\x41\xe2\x43\x61\xe5\x82\x0a\x36\x12\x1c\x0e\x12\x80\xae\x05\x35\xc2\x3a\x02\x58\x3f\xab\xa1\x3c\x8d\xf2\xa7\x04\x50\x58\x19\x55\x56\xb0\x44\x49\x8c\xaa\x65\x48\x33\x34\xb8\x0a\x69\x22\x83\xc5\xac\x86\x99\x71\x01\x8d\xec\x2f\x27\x5f\xa3\xa1\x60\x38\xa8\xea\x60\x37\x21\x61\x07\x1b\x51\x46\x95\x37\x78\x39\x79\x84\x0d\x07\xc9\x99\xe5\xec\x90\x45\x68\x40\x43\x4a\x1a\x5a\xce\x0e\x2b\x35\xc2\xc1\x98\x1d\x69\x69\x88\xb9\xee\x7f\xe2\xa5\x67\xd7\x0c\x6a\x49\x88\x19\x3c\x7b\x76\x50\xc7\x0f\x3c\x8d\x62\x03\x4f\xa3\xd8\xd4\xff\x2f\x49\x5b\x58\xf2\x6f\xf6\x9a\xe5\xc6\x6c\x32\x15\x69\x28\xd0\x08\x07\x97\xb3\xff\xcf\x4f\x86\x2c\xc2\x87\xfe\xde\x23\xef\xef\xd6\x08\x07\x20\x91\x69\x18\xb9\x40\xc3\x6c\x8e\xac\x56\x0d\xd4\x0f\x54\xf5\x6a\xa9\x86\x68\x48\x02\x1a\x1e\x33\x3c\x96\x3e\x4d\x9e\x21\x09\x88\x6a\xa8\x86\xdc\xcd\x92\x6b\xf4\x1a\xe1\xd9\xa5\xec\xc0\x40\x67\x6f\xaf\x8e\x68\x88\x66\xc8\x3e\x64\x17\xf5\xf6\x76\x0e\x0c\x64\xc8\xe9\x1f\xad\xe5\x90\x24\x68\x84\x03\x02\x8d\x28\x85\xac\xbd\x21\xf0\x69\x12\x7b\x5d\x1f\xf6\x37\x14\xfa\x34\xff\x22\x4f\xff\x05\xe5\xe9\xeb\x7d\x77\xb3\x7f\x07\x8b\xc9\xa0\x4f\xff\x0d\xfd\x06\x32\xef\x68\x4b\xd9\xb0\xf2\x14\xe2\xdf\x49\x50\x19\x8d\x04\xc9\x25\x44\xfd\xc4\xcf\x5c\xff\xf9\x0c\xf5\x53\xbf\x38\xfe\xec\x8d\xf8\xa9\x9f\x79\x1c\x69\x2f\x7a\x11\xf1\x13\xbf\xf8\x0e\x44\x94\x47\x67\xf0\x97\x65\xdd\x5f\x24\xf1\x4e\xab\xfc\x2c\x26\x27\x1a\xba\xfe\xd4\x2e\x1c\xf2\xfe\x65\x2c\x8d\x7f\x8f\xc8\x47\x9d\x6f\x91\xd2\x13\x7b\x9a\x47\x36\x53\x21\xf1\xd3\x07\xc9\x38\xed\xfd\x67\x6f\xaf\xb3\x2e\x59\x73\x7f\xd7\xed\x2f\x5a\x25\x24\xed\xd6\xf7\xe8\xad\xd4\x9c\x71\x81\xa5\xc7\x69\x75\x58\x88\x88\xf9\x3d\x72\x2b\x49\xbb\xa2\x7d\xf1\x89\xae\x8f\xd6\xbc\x68\xfd\xd7\xd4\x5d\x4b\xd6\x48\xe8\x83\x74\x1c\x15\x52\x3f\xdd\x9c\x41\x2e\xb1\x64\x31\xab\x1d\x56\x0e\x05\x55\x6f\xdf\xf7\xd2\x9c\x39\xf7\xdd\x37\x47\x3b\x1c\x7f\x34\x4e\xae\xb1\xb1\x30\x12\xc3\x27\xdd\xac\x80\x04\x7f\x58\x8e\xf8\x10\x4d\x72\x10\x0d\x91\x71\x6c\x98\xe7\xa2\x3c\x17\xb1\x90\x1c\x74\xcd\x42\xc6\xb1\x1a\xd1\x20\xc9\x41\x9a\xc8\x8c\x9f\x91\xdc\x86\x22\xc1\x21\xe5\x7a\x14\x0e\x12\xa8\xda\x5b\xdb\x53\xdd\xaa\xa5\x0b\x1e\xad\x3f\x56\x73\xac\xfa\x68\xfa\x63\x4f\x9f\x3c\xf7\xd8\x53\x92\x9d\xed\xad\xed\xc1\x8c\x8e\x2d\x1d\x9b\xda\xb4\xd6\x97\xe7\xbc\xba\xf4\x59\x49\x5b\x53\xc3\x8e\x06\x75\x43\x43\x4b\x73\xb3\x8e\x8e\x1e\xe9\xda\x53\xda\xe5\xec\x4c\x77\x93\x7b\x44\x7b\xb7\xac\xdf\x5d\xa5\xa6\x5e\xa6\xaa\xa6\x76\xfd\x66\xdd\xfa\x7b\x9b\xe7\x37\x2d\x72\xd6\x3b\x37\xba\x36\x50\xed\xef\x23\xda\x1a\xf9\x89\x0e\xaa\xa6\xe3\xd6\xfa\x74\x9b\x9a\x36\x37\x35\x64\x34\xec\x68\x6c\x6b\xd2\x9e\x5c\x7d\x62\xf5\x63\x2b\xd7\x97\x6e\x2c\xad\x2f\xa1\x8b\xdc\x23\x36\xb4\xd4\x56\x6d\xc8\xa0\x5e\x71\x75\xd7\xfa\xbd\x2d\x5a\xb2\xc0\xd3\xe9\xe8\x5e\xbb\xb7\x24\xdd\xf1\x50\x11\xe7\x58\x25\xd9\xd4\xd4\xd2\xd4\x90\xd1\xb8\xbd\x71\x67\x93\xf6\x89\xfb\xde\x5e\x38\xb8\x52\xd2\xd4\x1e\xdc\x1c\x54\x07\x83\xb1\x27\x7a\xa3\x7e\x3f\xb4\xe1\x70\xed\x91\xfa\xf4\x47\xe9\x3d\xa2\xea\xed\x3d\x1b\x7b\xd5\xc4\xcb\xf4\x76\x77\xf5\xec\xd0\xf5\xbc\xd2\xf6\x5a\xfb\xf9\x23\x9d\x47\x76\x1f\xda\x43\xb4\x14\x8c\xd8\xd4\xc1\xcf\x7c\x8c\xa8\xc9\xf8\xa3\x07\x75\x6d\xb1\x0d\x07\x37\x07\x9b\xdb\xb5\x45\x4f\x16\x9f\x73\x3c\xdb\x73\xa8\xeb\xf0\xae\xa3\x64\xe1\xa3\x23\x7a\x5a\xbb\x7a\xf7\xf0\x46\x5e\xca\x46\x62\xcf\x18\xc9\x49\xf6\xfa\x97\x2d\xbf\xb1\xe1\xe0\xd0\x19\xd5\x5e\x96\x04\xc3\xa1\xbf\x10\x25\xbd\x45\xb5\xd2\xe3\xde\xa4\x1d\x0e\x31\x9b\x3c\x8f\x3e\xa3\x8b\xdc\x15\x51\x5e\xbb\x4b\x3c\x6c\x8c\x9c\xff\x14\x3d\x5b\x71\xef\xe9\xa5\x6a\xde\xfd\xef\x2d\x58\x51\xa1\x9b\x43\xa7\x8a\xe8\xab\x6f\xb0\xd7\xee\x61\x68\xc2\xa5\xac\x2f\xb5\x43\x21\xe6\xcb\x4b\xdf\x91\x04\x5d\xe4\x2e\x52\xc6\x07\x19\xb8\x09\x91\xa0\xc0\xcf\x86\xcf\xa8\xb6\x07\xb6\x6f\xdd\xae\x8d\x5e\x0a\xbb\xa2\x97\xa2\x2e\xd1\x96\xad\x5b\xb6\x64\x44\xfd\x53\x58\x72\x1e\x91\x60\x54\x49\x42\x2c\xf1\x85\x9f\x52\xed\xda\xbd\xa5\x7f\xe3\x2e\xea\x26\xf3\x47\x84\x27\x56\xb3\xf4\x41\x31\x6d\x21\x6b\xac\xc7\xe7\x05\xac\xf6\xf4\xe1\x82\xe8\x0f\x1b\xeb\xb6\x94\xef\xda\x98\xfe\xea\xcc\x9d\xcd\x1d\x9b\x3b\xb6\xa6\x07\xb7\x76\xb4\xb6\xef\x1c\xba\x2b\xfc\xee\x88\xa1\xbb\xa2\xef\x8a\x36\xb5\xb5\x6f\xe9\x88\x3d\x18\xef\xd8\xd6\xb1\x63\x67\xdb\xab\xef\x8e\x90\xb7\xa0\x48\x90\xa4\xa2\xa1\x20\xa9\x40\xa3\xd8\xb0\x91\xe1\x1d\xc1\x1f\x36\x12\x65\xf8\x4c\xfc\x77\x33\xe1\x33\x44\x19\x36\x12\xbf\x20\xa2\x8c\xf8\xc9\x6b\x88\x5e\xa5\x7e\x37\x22\x16\x14\x36\xfe\xa0\xba\x19\x91\x5b\xfb\xcb\x49\x88\x58\x96\xb2\xf0\x39\x8d\x58\x23\x88\xfc\x10\x3e\xa9\x5a\xbf\x6d\x43\xed\x06\x35\x6d\x61\x36\x6c\xe8\xea\xd9\xa6\xdb\x21\x3e\x48\x42\x84\xb2\x64\x11\x89\xb0\x07\x69\x48\xb4\x59\x3c\x14\x88\x16\xab\x4e\xd7\x9d\xde\x70\x42\x1b\x35\x45\x0e\x89\x06\xea\x3d\xfb\x3d\x6a\xfa\x0d\x89\xb0\x7b\xa8\x45\x54\xb5\x6d\x63\x4d\x95\x9a\xde\xce\x54\x6d\xec\xee\xdd\xa6\xdb\x43\x2c\x84\xb2\xf4\x1b\xc6\xe3\x29\xf3\xd6\xeb\xa2\xa6\x6b\x87\x44\x1b\x8a\xeb\x0a\x0a\x32\x5c\x1d\xdc\x29\xed\x90\x85\xa9\xae\xe1\xc7\xf5\x91\x20\x0f\x33\x40\x22\x6c\x1f\x0d\x8a\xaa\xb6\xd5\xd4\x54\xab\x87\x2c\xcc\xa9\x8e\x73\x87\x62\xe1\x20\xc2\x07\xda\x20\x4b\x2c\xff\x42\xd1\x42\x86\x8f\x52\xa2\xe2\xa2\x95\x15\xcb\xd4\xcb\x56\xf6\x9d\x28\xd2\x51\x35\xd1\x88\xa2\x36\x62\x46\x11\x99\xea\x40\xbd\xbf\x67\x9d\x9a\x06\xc3\x16\x86\x2c\x60\xa3\x16\x1a\x14\x93\xcf\xd8\xb0\x25\x6a\x19\x41\xb4\x28\x6c\x09\x5b\xf6\xf5\xee\x7c\xb4\xfe\x60\xba\xbc\x92\x0d\x1b\x49\x90\x57\x92\x32\x27\x72\x35\x7c\xf5\x4b\x44\xae\x56\xb3\xf4\xea\xff\xef\x9f\x2c\x92\x22\x96\x5e\x0d\x87\x72\xd9\xbf\x89\xf8\x75\xe8\x16\xd5\xce\xae\x96\xdd\x0d\x9d\x34\x44\x42\x23\xda\x9a\x1a\x5b\x1b\xd5\x8d\x8d\x2d\xcd\x4d\x3a\x7a\x89\x5e\x12\x35\x37\x6d\x6e\x6c\xc8\x18\x87\x02\xc4\x42\xaf\xfe\x8c\xc8\x55\x62\x11\xef\xee\xea\xe8\xda\xa9\xa3\xbf\x86\xfb\x73\xd9\xfe\xf2\x48\x88\x58\xbe\x42\x91\x8e\x70\x48\x35\x91\x5a\x44\x34\xc4\x4c\x24\x16\x11\x7d\x8b\xd9\xbe\x73\x5b\xdb\xf6\x9d\xc4\x1e\x6e\x1a\x31\xb4\x8c\x21\xf6\x68\xd3\xf6\x4d\xdb\x9a\xb7\x6f\x4a\x27\xcb\x4b\x55\x27\xea\x06\x6b\x1e\xd3\xd2\x86\xf0\xb3\xa2\x63\x35\x05\x0f\xdb\xd5\xc3\x21\xc6\x5e\xb0\x6e\x6d\x8d\x8e\x36\x44\x9f\x15\xd5\x38\xea\x96\x16\x67\x44\xcb\xc9\x4e\x74\x96\xd5\x08\xfb\x87\x94\xaa\x03\xb5\xfd\x15\xbb\xb4\xd1\x33\x24\x54\xd9\xe5\x0d\x54\xd4\xa5\x57\xd4\xd6\x96\xfb\x33\x86\x95\x62\x72\x0f\xbb\xab\xb5\xad\x53\x17\x3e\x43\x42\xa2\xbe\x5d\x5d\xfd\x07\x32\x88\x32\xed\x66\x44\x7e\x66\x03\x24\x98\x7a\x72\x31\x22\x17\x58\xc2\x22\x9a\x46\x55\x23\x48\x3a\x1d\x45\xef\xbf\x4c\x97\xab\xc9\x1e\x44\xaa\x88\xf3\x17\x32\x9b\x8c\xd3\x75\xee\x0e\xec\xab\xdd\x45\x59\xa2\x1d\xd1\xd6\xd4\xd0\xda\xa0\x6e\xd8\xda\xb0\x79\x53\x93\x84\xa6\xde\x4a\xc7\xe7\x51\x83\x9a\x8c\x41\xe4\x26\x92\xb4\xdc\xf8\x9d\x2e\xf5\x2d\xaa\xa5\x5a\xb2\x00\x85\x2d\x0e\x1e\x84\xb4\xb0\xa9\x27\x35\xa2\x6f\xc2\x7e\xd5\xde\x9a\x3d\x55\x5a\x6a\x61\x36\xd4\x37\xd4\x6c\xd2\x55\x17\xd4\xda\x7c\x85\x12\x3a\x71\x32\xcd\x9d\x42\xe7\xaa\xa9\x8a\x26\x3f\xf7\xe5\x24\x1d\x61\x09\xfb\x06\xca\x62\xa3\x16\x13\x8a\x5a\xc4\xa9\x6f\x5d\x42\x44\x45\x54\x22\xaa\x26\xa3\xc9\x7d\x77\x90\x07\xd5\x61\x11\x79\x92\x04\xc8\xef\x9f\xe9\xb6\x6d\x0f\xb4\x6e\xcf\x18\x18\x3a\xa3\xfa\x36\xb6\x01\x11\xc9\xa0\xa3\xe9\xfd\x1f\xd0\x65\xea\xa8\x88\x3e\x43\xb7\x52\x62\xd2\x6d\x09\xb4\x6c\xc9\xa8\xee\xde\xd0\xab\x25\x2b\x99\x3d\x9d\xc1\xee\x9d\xba\xbd\xa7\xbb\x4e\x1d\x7c\x5c\x42\x26\x7e\x4b\x72\xbf\x21\x73\xd5\x44\x45\x92\x57\x18\xbe\xd7\xf1\x4b\x0f\xc6\x56\xde\xff\xbf\x1f\x5c\xe6\xf2\xb6\xaa\x14\x84\x95\xe4\xea\x68\x96\x84\x84\xa3\x50\xec\x6d\x13\x8a\x5a\x54\xff\xe0\x3b\x6e\xbc\x29\x87\x95\x37\x8a\xce\x50\x28\xf6\xec\x79\x1e\x3b\x1c\x12\x13\x65\x24\xf4\x3b\x8a\xfe\xd1\x5f\xae\x11\x0e\x12\x0b\x24\x0e\x3e\x3f\x58\x04\x24\x34\x14\x54\x11\x8b\x98\xa4\x20\x6a\x11\x93\xd0\x04\x62\x40\x25\xc4\xc2\x90\xad\x74\x35\x59\x4d\xb7\xd2\xad\x74\x35\x5d\x4d\xb7\x6a\xa9\xa5\xe4\x53\x56\xde\x5f\xc0\x92\x4e\x96\x84\xc8\x05\xb6\x1c\xad\x1a\xc8\x7f\xdc\xaf\xd5\x50\x79\x09\x7b\xd1\x8b\x34\xc2\x5f\xc5\x8f\x1f\x18\x38\xf3\x54\x86\x46\x34\xb8\xa0\x18\x71\x74\x3a\xd5\xd0\x2c\xb5\xd3\xb5\xb3\xdb\xad\x7b\x8d\xea\xa8\xe2\x79\x9a\xa5\xa6\xa3\xe9\xa4\xfb\x17\xd0\x14\xdd\xba\x8d\xae\x1a\xdf\x7a\x49\x65\x4d\x6d\xb5\x2f\x63\xb8\x5a\x3c\x99\xed\xea\x6c\x6d\xdb\xa5\x7d\x97\x68\xc9\xd4\x4b\xc4\x40\x5c\x5f\xd2\x91\xe4\x1e\x35\xb9\x89\x24\xff\xf3\x3c\x11\xe9\x0e\xed\x39\xd0\x7d\x32\x43\x3e\xf2\xc6\x16\x02\xc4\x42\x42\xb1\xa7\x04\x21\x62\x11\x9c\x66\x87\xb4\xaa\xf0\x94\x68\x32\xf9\x39\xfa\x60\xf4\xc1\x68\x32\xfd\x39\x3a\x85\xc2\xbe\x51\xa7\x6f\xd1\xf6\xad\x20\x0b\xd7\x8a\x28\x3c\xf4\xd3\xed\x04\xab\x4b\x66\xa3\x70\x88\xdc\x83\x4a\xc4\x13\x72\x96\x4e\xe7\x74\xf3\xba\x44\x95\xaf\xd6\x5f\x7c\x23\x83\xfc\x93\x3c\x4f\xf6\x92\xef\xc8\x77\xe4\x79\xba\x97\xfe\xf3\xae\xfa\x05\x95\x0b\xb5\xf3\x6a\x45\x1f\x70\x39\x83\x13\xd4\x47\xc5\x7b\xd9\xa3\x62\x82\x7f\xfa\x88\xc0\x43\x3a\xb2\xf0\x58\xdf\xb3\xa2\xd3\x3f\xf5\xfd\x46\x60\x86\xfc\x5a\xed\x51\x8d\x70\x10\x06\x86\x82\x02\x2f\x2b\x8f\xfe\x11\x6b\xf1\xc9\x44\xe0\x65\xc3\xca\xf0\x19\xd5\xcf\x8b\xae\x4c\x3a\xa9\xdd\xd1\xd8\xb0\xad\x51\x6d\x77\xb9\x8b\x75\x77\x12\x49\x3f\x95\x51\x19\x95\xf4\xdf\x99\x51\x7c\xc8\x7d\xbc\x23\xb8\x6d\x47\x87\xf6\xbb\x53\xe7\x7f\xfc\x39\x43\x3e\x52\x23\x9a\x57\xc1\x0b\xe0\xd0\xff\x2b\x01\x24\x98\x46\x38\x2a\x27\xf7\xd1\xc5\x97\xc9\x55\xd6\xdd\x53\x79\xa0\x56\xf7\x48\xcd\x40\xed\xc1\x2a\xc9\x4f\x79\x2f\x51\x31\x95\x67\x50\xf9\x7d\x54\x7c\x4b\x9e\xd6\x57\xe5\xad\xf5\xd4\x48\xfc\xb5\xeb\x2b\xdd\x19\xab\xd9\x13\x1d\xc1\xed\xad\x1d\x5a\xb2\xf8\x32\x91\x93\xfb\x08\x17\x93\xf5\x0a\x5d\x40\x8e\xd0\xe3\x44\x46\xae\xb2\xae\x3d\xeb\x0f\xd6\xe8\xba\x1b\x7b\x36\xed\x69\x7c\x74\xc3\xa3\xd5\x0f\x57\x4a\x48\x0e\x95\xfd\x48\xef\xa7\x6b\x32\xe8\x9a\xdb\xe8\xfd\x34\x87\xca\xb4\xeb\x2a\xdd\xd5\xee\x0d\x1b\x1a\xd7\x6f\xaa\x69\x94\xf8\x6a\x36\xac\x77\x65\x4c\x66\x83\x71\xd9\xbc\xa0\x05\xe4\x08\x79\x85\xcf\xba\x01\xa2\x22\xa9\x44\xc9\xd7\x3c\x81\x13\xe8\x2f\x4f\x61\xfe\x7c\xa5\x7e\x1a\x26\xe7\x91\x8a\x7c\x87\x98\x88\x52\xc8\x13\x52\x19\x6f\x5e\x0b\x5e\x4b\x55\x85\x53\xc3\xca\x68\xaa\x38\xaa\x1c\xea\x50\x91\xf3\x28\xaa\x14\x87\x95\x69\x71\x66\x58\x49\x83\xaa\x61\xe5\xb0\x72\x48\xc9\x90\x67\xe2\x73\xf8\xfb\x99\x2a\x9c\xca\x32\xa9\x23\x47\x10\x25\x33\xa4\x14\xc6\x1a\x3b\x33\x4b\xd9\xa8\x72\x58\xc9\xa4\x8e\xcc\x21\xca\xb0\x92\x49\xfd\x34\x1c\x86\x28\xac\x64\x86\x83\xe4\x3c\x7b\x5d\xc8\x50\x70\x48\x79\x43\xa0\xbc\xbf\xbf\x7c\x7f\x79\x4a\xe0\xc2\x91\xa3\x17\x8e\x90\x94\x23\xdf\xbf\xfa\xfd\x91\xa3\x47\x8e\x1e\xf9\xee\xc2\x77\x17\xf8\x7f\x47\x2e\x7c\xff\xdd\x91\xa3\x47\x2e\xa4\xd6\xfe\x31\x78\x21\x2d\x5c\x12\xff\xf9\x62\x79\x79\xa0\x3c\xf6\x0b\xcf\xb5\x51\x47\x46\x7f\x5f\x60\xbf\xfa\xc2\x36\x55\x17\x5b\x57\x1f\xa8\x6b\x60\xbb\x82\x81\x5d\xea\xef\x3a\xd0\xae\xce\x40\xa7\x9a\x64\x75\xa0\xae\x20\xf9\x27\xaa\x78\x95\xdd\xdf\x17\xe8\x53\x93\x94\xeb\x9f\x5c\xf8\x1f\x4d\xed\x07\xe0\xfa\xe8\x20\x9b\xba\x7c\xb0\xee\xc0\xbe\x40\x7f\xac\x71\x20\x3e\x25\xc8\xcf\xed\xff\x1f\xf3\x5d\x90\x8d\x0f\xb9\xaf\x1b\x95\x38\x03\xce\x06\x36\xb5\x0e\x0c\x1e\x3d\x12\x38\xa2\xbe\xd0\x8d\xe2\xcb\x48\x9d\x7b\x27\x88\x2f\x65\xab\x2a\xfc\xff\xe1\xeb\x4d\xe0\x9b\xa8\xb6\xc7\x71\x6a\x3b\xc9\x38\x3e\xab\x92\x19\x6c\x67\x32\x33\x55\x10\x54\x10\x41\x22\xfa\x50\x04\x51\x41\x65\x97\x80\xec\x94\x7d\x29\x94\xd2\x86\xee\x6d\x9a\x34\xfb\x9e\x74\xda\x74\xdf\xa1\x40\xcb\x56\xaa\xec\x5a\x04\x14\xa9\x0a\xfa\xaa\x3e\xb7\xf7\xf0\xa9\xa8\x0f\x77\xd1\x33\xc9\x49\xf0\xff\x49\x0a\xbe\xef\xf6\xff\x25\x9f\xcf\x2c\xf7\x9e\x7b\xee\xb9\x67\xe6\xde\x39\xe7\xde\x73\xce\xdd\xe8\x94\x37\xc9\x1b\xff\x43\xf7\xc6\xc8\x26\x36\x8e\x3b\xb9\x90\x4a\x86\xfb\x0a\xa9\x18\xb7\xad\x7c\x74\x45\x68\x39\xf1\xca\xc2\xfb\x0f\x3d\xcd\xa1\x4e\xf1\xde\x77\xab\x17\xbe\x22\x86\x56\x44\x97\x13\xad\x39\x35\x9b\x36\xb2\x1b\x4b\x36\xe9\x74\x42\x64\x53\x64\x13\xb1\x61\xef\x8e\x9c\x57\xb9\xbd\x5d\x35\xad\x6d\xa2\xac\x97\xcb\xe0\x45\x2a\x39\x6d\x0b\x1f\xa6\x21\x4c\xc5\xe7\x61\x4e\xfc\x33\x51\xad\x58\x1f\x7e\x99\x29\x6e\xca\xad\xd1\x49\xae\x02\x67\x9e\x39\x1f\x7b\xaf\x6d\x4d\x59\x5f\x96\x9e\xbb\x8e\xbb\xf6\xa0\x42\x3b\x35\x78\x36\x4f\x2c\x6f\x71\x49\x15\x41\x32\x28\xd5\x79\xaa\xb9\x50\x48\x01\xaa\x1d\x7b\x61\xf4\x31\x11\x76\x86\x85\x9a\x63\xe6\x63\xdb\xf6\xa7\xee\xcb\x5e\xd9\xbc\x94\x8b\xba\x15\x85\x85\x16\x6b\xa1\xe8\xf2\xa0\x6a\x7f\x39\xf2\x2b\x67\xa6\x16\xe9\x72\xf2\xac\xf9\xb6\x82\xca\x42\x7b\xa1\x79\xc1\xea\x51\x39\x9b\x8a\xf3\xb6\x1b\x4c\x3a\x73\x51\xa5\xce\x9e\x6b\x59\xba\xe1\xa1\xac\x65\x86\x82\xfc\x12\x4b\x3e\x69\x29\xac\xdc\x6e\xc9\x2f\x7b\x71\xe3\x84\x2d\x8b\x8a\xb2\x72\x0b\xad\x39\x76\xbd\x54\xea\x28\x72\xe4\x58\xf3\xec\x79\x25\x6b\x9d\x2b\xea\x96\x93\x43\x0f\x40\xc2\x84\x9f\xb9\xf0\x83\x8a\xcf\xbf\x78\xfb\x52\xbb\x08\x1d\x61\xa1\xe6\xa8\xe9\x58\xf6\xfe\xd4\x6b\x27\xec\xdf\xf1\x8f\xa2\xf4\x1d\x9f\x1c\xd1\xdf\xad\x26\xbe\x4d\x70\xda\xf9\x44\x75\x92\x4b\x4d\x94\xb9\xf9\x34\xa4\x81\x0e\xd1\x70\x99\x4a\x88\xaf\x92\x5b\x29\xa8\xe4\x63\x4c\x95\xc2\x34\x4a\xca\x6b\x74\x88\x66\x42\x74\x88\x46\xcd\xe3\x14\x68\x22\xb4\x02\xa4\xe9\xdf\xf3\x43\xae\x6a\xfe\x75\xb7\x30\x1d\x24\x45\xef\x96\xfe\xb5\x07\x05\x1c\x05\xa3\x88\x83\x6b\xa7\xec\x5e\xc0\x45\x35\x7d\x54\xa4\x67\xba\xf2\x6e\x8d\xe6\x6e\x31\xa2\x89\xeb\x45\x1a\x98\xc0\x83\x26\xae\x13\x25\xc3\x7d\xdd\x7c\x82\x53\xad\x2c\x4b\x0c\x6b\x43\x57\x99\x1b\x0e\x16\x38\x6e\xc0\x78\xfe\x86\xfb\x05\x8c\x43\x06\x18\x1c\x27\x86\xb4\xb2\x86\x41\x9d\x62\x21\xa8\x89\xb7\xb3\x27\x9e\x7a\x86\x8b\x48\x8a\x67\x26\xce\x7f\x2e\x5b\x5c\x88\x6a\x02\x75\x0a\xe8\xe4\xaf\xd1\x4a\x13\x25\xe8\x78\xc5\x74\x5e\x0c\xd3\x32\x45\x45\xb5\x6a\x2c\x7b\x90\x4a\x43\xfa\xbb\x51\x97\xe4\xb9\x70\xcb\x60\xe7\x21\x5e\x75\x20\xb4\x31\xbc\x96\x51\x65\xbd\x87\xf7\x9c\xc3\x07\x5f\xc5\x51\xa4\x23\x3f\xdf\x91\xcf\xdd\x7b\xaf\xc7\x75\xaf\x18\x79\x35\x3a\x94\x39\xff\xa6\xa7\xea\xbc\xe8\xae\x69\xf2\xd7\x00\x09\x37\xe7\x01\xc9\xb9\x24\x97\x24\xb1\x4d\xce\x46\x47\xa3\xf0\x42\x05\x8e\xf0\xfc\x9d\x3d\xf8\x13\xd4\xee\x38\x2b\xc8\x0b\xec\x44\xdd\x2a\x60\xf0\xe4\x7a\x76\xdd\x02\x53\x96\x59\xc0\x3b\xb7\x12\xb6\x6d\x8e\x6d\xdb\x58\x2f\xdc\x09\x77\x56\xc1\x9d\xa0\x02\x55\x11\xa8\x38\xc9\x55\x21\xb1\x8d\xb6\x46\x5b\xa3\xb0\xb4\xe1\x41\xff\xa6\x1d\x25\x55\x25\xbb\x4d\x75\x8b\x7e\xde\xf0\xfb\xf2\x5f\x49\xd5\x81\x49\xf0\xf4\x54\x98\x36\x19\x9e\xc1\x95\xb2\x2e\xc5\x16\xb0\x06\xac\x01\x72\x81\x62\xb2\x02\xbb\xa2\x1b\xd0\x10\x89\xac\xc4\x41\xf7\x34\x3d\x90\x99\x6a\x7f\x9c\x48\xc6\x3f\x30\xf1\xdb\xd0\xc3\xdf\xcb\xc7\x7f\x19\x0c\x39\xf0\xae\xbc\x1a\x3e\xc4\x0a\xf8\x4a\x25\xcb\xaf\xd6\x32\x39\x67\x25\x98\x7d\xf1\xaa\xeb\xb7\xdf\xd8\xca\x8e\x97\x9d\xbb\x39\x78\x18\xd8\x72\xbc\xff\x1b\xb1\x6b\x41\xc5\xf3\x33\x59\xb4\xe1\xbd\x63\x30\x7f\xc9\x92\xea\xc6\x15\x42\x49\xa8\x94\x51\x5d\x75\xb4\x3a\x63\xff\x5e\x57\x6f\xef\x5f\xee\x51\xc9\x3f\x95\xff\xf4\x13\x1b\x78\xf9\x65\xff\x61\x0e\x1e\x83\x27\x9f\xc5\x17\xb1\x08\x47\xcc\xc5\x55\xeb\xd7\xb9\xfc\xeb\xc5\xc8\xc1\x6b\xb7\x32\x01\x98\x0a\xcf\xd5\xc1\xb4\x2f\xbe\x30\x7f\xc1\xc1\x51\x78\x1b\x14\xf0\x1d\xac\xc3\x89\xc0\xe0\x0b\x2f\x8b\x70\x57\x1f\xa8\xdf\x81\x69\x2c\x54\xa3\x1b\x06\x61\xae\xa0\xba\xba\x7c\x99\x6b\x39\x87\x06\x34\x16\x5a\xd1\x28\x7a\x1f\x25\x54\x72\x97\x15\x46\x98\x6a\x33\xc9\xb6\xa5\xf6\x6b\x73\xb6\xb3\xcf\xfa\x86\x6e\x98\x23\xcc\xdc\xf6\xbc\x63\x7a\x91\xfd\x81\x94\xe4\xa8\xfe\xae\x7f\xd6\xe7\x0e\x76\x86\x25\x55\x3a\x0e\x4e\xf2\x7d\xf1\xaf\xda\x2f\x39\x55\xf3\x85\x8b\x0e\xc7\x45\xd1\x71\xe6\xf5\xfc\x33\x2d\xcd\x9e\x16\xae\xa2\xcb\xdf\xe5\xee\x9a\x59\x39\x33\x30\xab\xc6\xd1\x90\x62\x7d\xe9\x04\x2c\xa9\x3c\xde\x0b\x95\x7d\x10\x3c\x0e\xc1\xca\x33\xbe\xd7\x5b\x4e\x5d\xd8\xd9\x5f\x75\xb1\xad\x62\x57\x60\xb7\x77\x37\x69\xbe\xeb\x2e\xc3\x5d\x1c\x0e\xc1\x3b\x2b\xfd\xc8\x88\xf9\xc3\xde\x30\xbc\x53\xf1\xda\x96\x54\x55\x7a\xb6\xd2\xf3\x18\x66\x5e\xdb\x58\x3a\xcd\xb4\xa1\x6c\x9d\x2e\x73\xf6\xe6\xa9\xe5\xd3\xf3\x48\x55\x73\xe1\x78\x22\xb9\x19\x6f\x03\x6f\x58\x02\x2f\x3e\x00\x34\xde\x0e\x77\x0c\x76\xc2\x2d\x72\x0a\x54\x85\x82\x40\xab\xf6\xa9\x15\x17\x81\x66\x1e\x0b\x4b\x9f\x28\x0e\xd7\x74\xec\xcb\x12\x55\xef\xe0\x60\x18\x9f\xb5\x6f\x85\x33\x6b\x43\x2a\x0e\xc6\xf1\xc4\x86\xac\x9a\xad\x87\xb9\x4f\xae\x49\x8f\x29\x56\x94\x6c\xdd\xb0\x53\x84\xc1\x38\x7e\xe7\x86\xc3\xce\x9d\xfb\x52\x61\x30\x8c\x27\x54\xfb\xf6\xed\x2c\xe9\x58\xc1\xa9\x43\x06\x75\xd2\x1f\xf0\x0e\x45\xaa\x1a\xdf\xf0\x3a\x61\xe9\xf1\x2e\xb2\x79\xd7\xef\xf5\x07\xb8\x7a\xb8\xd3\x53\x5c\x23\x06\x4b\xac\x4f\x15\xb0\x78\xb3\x12\x97\xfb\x63\x82\x12\x3b\xc3\x83\x6d\xdb\x17\x1f\xa1\x60\xaf\x0d\xf6\x3a\x60\xaf\xa0\xda\xe7\x38\xe2\x3d\xe6\x3b\x4c\x56\x7d\xf5\x6f\xeb\x65\x6e\x4f\xab\x6f\x5b\xb3\xe8\xb6\xb7\xc1\x16\xbe\x7b\x1f\xf8\x78\x62\x6d\x96\x4e\x5a\xcd\xe1\x51\xc5\x53\x4f\xbb\x9e\x82\x2f\xf9\xe4\x2d\xbc\x3a\xe9\x5f\xc0\x24\xc4\x5a\xd5\x00\xfe\xc4\x4f\xd5\x84\x1e\xde\xa1\xde\xf0\xb9\x60\xd9\xb1\x3d\x64\x5d\x1b\xe8\x5b\x5e\xba\x41\x40\x6d\xa1\x09\xf5\xab\x8a\x7d\xc5\x25\xec\xb8\x40\x64\x4b\xf6\xbc\x23\x14\x8c\xb7\xc3\x78\x07\x3c\x22\xbc\xa8\x74\xc0\xa8\x81\xda\x53\x6b\xe0\x56\xb8\xdb\x04\xb7\x71\x95\xc7\x5d\xb6\x0a\xb1\x2a\xa6\x08\x1b\x5d\xf6\x76\xd8\xc2\x1f\xdc\x0f\x3e\xbe\xb4\x20\xb7\x64\xbb\x2b\x55\xc2\x06\x6c\x36\x63\x03\x7c\xc9\xab\x93\x82\x6a\x4c\x65\x96\xd5\xa5\x15\x88\xd7\x24\x45\x43\xdd\xef\xcb\x36\x60\x2a\xde\x92\x9b\x25\x14\xeb\xcb\x0a\xf3\xd8\xbc\xaa\xc2\x5a\xbd\x90\xbb\x13\x52\xf1\x96\x7d\xdc\xd1\xa2\xdf\x1b\xc4\xb0\xa4\x28\x28\x4a\x3b\xba\x0f\x52\xe1\x96\xe6\x9d\x42\x6d\xb0\xaa\xbe\x89\x6d\x2a\xab\x2f\x0e\x0a\xcd\x59\x98\x0a\xb7\x6c\xe0\x92\xb7\x50\x11\x1a\x5e\xe0\xd5\x38\xe8\x71\xde\xce\x8f\xa1\x40\x8a\xdd\x85\x07\x3d\xce\xcf\xa1\xc6\xdc\xc8\x2b\x7b\x9c\xb7\x50\x1b\xa9\xeb\xb0\xd7\xe8\xc7\xf9\x30\x1d\x03\x95\x25\xc6\xc9\xc7\xd3\xa2\xf4\xe3\x7c\x88\x8e\x81\xc8\x52\xd2\xd8\xff\xa0\x1b\xb8\xbb\x81\xee\x7a\xde\x9f\xe8\x64\x29\xe9\xd9\xff\x72\x48\x6e\xf6\xc7\x1d\x2c\x12\x41\x02\x1d\x03\x43\x79\xb9\x3f\x69\xe0\xb8\x2f\x86\x43\x4d\x4c\x66\xf6\xc5\xd3\x06\x5f\x3f\x26\xe7\x51\x32\x1d\xd6\x31\x4b\xa9\xb8\xc1\x50\x0f\xf6\x10\x66\xb3\xcd\x58\xce\x96\x7b\x8c\x7e\xb3\x00\xf1\x04\xbf\x64\xab\xe0\x9e\xa0\x74\x3c\x6a\xd7\xf0\x79\x14\x5c\x0d\x69\x99\x01\xd3\xfc\x1e\xe8\x21\xfc\x66\xa3\xa7\x9c\x9b\xca\x8b\x91\xfe\x02\x2a\x6e\xbb\x1d\x4f\x8d\xdb\x6e\xab\x89\xe6\x88\x6e\x0d\xdf\xdc\x9c\x0b\x63\x62\x4a\x15\xb3\xa3\xa8\x55\x57\x19\x37\x01\x29\xe7\x0a\x8b\xcc\xa5\x7a\x31\x32\x22\x32\x9c\x80\xbf\x2a\xef\xa7\xa2\xda\x4a\x3e\xaa\x55\xde\x18\xb5\x85\x90\x76\x38\x0f\x13\x94\xf2\x88\xc8\x08\xa2\x34\x58\x67\x7e\x3b\x36\xd0\xbf\xcf\x83\x36\xac\x1d\x30\xc3\x3b\x14\xd3\x20\x42\x74\x58\x9b\xc9\x87\xa5\x08\xcd\x44\x34\xb2\x26\x22\x45\x24\xd4\x80\x26\x6e\xfb\x84\x5a\x1d\xaf\xbc\x02\xe7\xf8\xb8\x51\xa3\x1a\x27\x2b\x1b\x78\xd8\x4d\xa9\x93\x7a\x65\x25\x0f\x9a\x0c\x66\x21\xe5\x54\x87\x7a\x95\xf3\x28\x35\x4e\xbe\x3e\x45\xba\x25\xc6\x40\x3a\x11\xfe\x18\x92\x26\x27\x50\xbf\x2b\x2e\x5f\x06\x3d\xea\x09\xf9\xe9\xd0\x47\x8c\xd9\x6e\xb6\x58\x84\x48\x77\xa4\x9b\xb0\x58\xcc\x76\x33\x57\x6a\x94\xaa\xfd\x6e\xbf\xcf\x27\xca\xdd\x72\x37\xe1\xf3\xf9\xdd\x7e\xae\x5a\x32\x96\x8a\xf3\x41\xcb\x44\xfb\xa3\xfd\x44\x8c\x28\x65\xa8\x3f\xd4\x4f\x40\x13\xf4\x33\x60\xe5\x51\x0f\xa5\x44\x5b\xce\xa6\x9a\x8d\xdc\xc6\x4d\x25\x39\x3a\x11\x27\xe0\x5f\x65\x4d\x44\x03\x13\x60\x42\x4c\x76\x88\xea\x2d\xd4\x41\x0a\x3e\xa3\x12\x43\x52\x98\x2e\xa2\x62\x02\xab\x89\x02\x82\x9a\x15\x98\xb1\x43\x2b\xc8\x09\xd1\x5a\x62\x45\xd3\xd1\xac\xe3\xdc\xf1\xa3\x3b\x0f\x37\x8b\xf2\xa0\x50\x2d\xb1\xe3\xb5\xc0\xf9\x73\x6c\x72\x3e\x9f\x18\x92\xae\x30\xcf\x53\xe2\xb5\x7e\x65\x48\x92\x7b\x98\x34\x2a\xaa\x77\x82\x84\xfa\xdc\xc1\x4e\x68\xe1\xc3\x92\x6a\x8e\xca\x27\x4b\x32\xcd\xcc\xe1\x05\x55\x73\x7b\x45\x5b\xb0\x49\xa8\x6e\xea\xbd\xd0\xfc\x0e\x59\xe5\xa9\xf4\x55\x70\x15\x95\x96\x32\x8f\xd8\xfc\x6c\xef\xb4\xea\x3c\x32\x98\x57\x91\x93\xcd\xaa\xe6\xc4\xa4\xcd\x9f\xb6\x7c\xbb\xf0\x13\x61\xe1\x27\xb8\x09\xda\x26\x40\x2b\xf9\xb2\x7e\x55\x73\x06\x97\xb1\x3a\x37\xbd\x54\x9c\x80\xad\xb8\x09\xdb\x16\x3e\x46\xaa\xd2\x17\x3d\xb6\xf9\x81\xe1\xac\x6a\x0e\xee\x87\x02\x2c\x80\xfd\x30\x97\x12\x92\x07\x94\xbf\x2b\x61\xcd\xc0\xc3\x93\xa5\x2b\x72\x0f\xd0\x89\xe1\xbf\xc0\x55\x66\xde\x95\x91\xa7\x15\x40\x02\x09\xa3\x70\x14\x01\x7f\x97\x7f\x62\x24\xa3\xa3\xd8\x68\xc4\x5f\xf0\x97\x14\xa3\xb1\xd8\x61\x94\x8c\x92\xab\x56\x92\xe0\x17\xf8\x25\x45\x92\x6a\x5d\x92\x91\xfc\x24\x72\x99\xa9\x2e\xaf\xd2\xfb\x04\xbd\xaf\xd4\x6e\x30\x4c\x9f\x9e\x62\x36\xdb\xca\xcb\x59\x1c\x0c\x0b\xf9\x50\xbf\xa2\xb6\xd6\x6e\xad\x15\xab\xac\x41\x8f\x24\x9d\x38\x91\x52\x51\xe1\xa9\xb4\x57\xd9\x2b\x4d\x92\xd1\x4b\xd6\xaf\x5b\x5d\xb1\x9a\x8b\xf6\xcf\xe5\x47\x86\x35\x4c\x54\x13\xd5\x10\xb1\xd7\x59\x19\xd2\x84\x34\x04\x8c\x81\x31\xcc\x81\x03\xce\x37\xd7\x1d\x88\x89\x21\x29\xeb\x0e\xcc\x74\xae\x5b\xf7\xe0\x83\x29\xb1\x0e\xf1\xf5\xd7\x44\x72\x9a\x13\x68\x0b\xb5\x87\x87\xf5\xa1\x53\x40\x27\xea\x78\xf9\x30\x53\x6d\x1c\x20\xa5\xc4\x6a\x34\x16\x15\x17\x94\xe6\x19\xc9\x32\xb3\xa9\x4c\xcf\xe2\x26\x58\xc8\x43\x92\xc2\xef\x73\xbb\x7d\xe2\xc1\xd6\x23\x4d\x27\xeb\xc9\x5a\x4f\x55\x75\x1d\xdb\x50\x5c\x53\x28\x38\x9d\x4e\xd8\x40\xfd\xe5\x6e\xac\x98\xcb\x83\x21\x64\x65\xe0\x21\x5e\x26\xf8\x94\xa0\xbe\x28\x50\xc8\x95\x1b\xed\xb6\x72\x51\x17\x77\xaf\x40\x2d\x6a\x94\xd1\xb4\x47\xf0\x1c\x36\xe3\x52\x18\x87\xdb\x03\x06\xb1\xdc\x5f\x69\xa9\xe4\xbc\x5e\x97\xcb\x2b\x56\xfb\xa5\x1a\x7b\xcd\x66\x28\x6c\x83\xfb\x3f\xfd\x86\xfc\xf2\x23\x48\x7b\x09\xb2\x38\xd0\xa0\x56\xb1\xad\x4e\xd7\x6a\x10\x6c\x15\x92\xbd\x82\xab\xaf\xf3\x57\x07\x45\x38\x47\xdd\x68\x0a\xd0\xcf\xe7\x0d\xbe\x7e\xa5\xfa\xbb\xea\x88\x8e\x97\x7f\xb9\xce\x5c\xb7\xd5\xea\xb2\x72\xe5\xe5\x36\x93\x49\x9c\x3e\x9d\xb8\xce\xe2\x80\x72\xc0\xa3\x4c\xf5\xf7\xff\xea\x53\xf6\x27\xd3\x1d\x1e\x8f\xc3\x33\xe0\x99\x78\xe2\xc4\x00\xe3\x53\xff\x17\xe7\xa1\x28\x74\x9c\xe9\xec\x74\x9e\xcc\xe8\xc4\x9b\xe0\xa6\x94\x8c\xce\x45\xce\x8c\x8c\x28\x17\xe5\x52\xb0\x0e\xea\x06\x6e\x53\xf1\x26\xbc\x29\x23\xc3\xb9\xa8\x33\x23\x55\x9e\x12\x99\xd2\x99\x71\xd2\xd9\xd9\x99\x1a\x7a\x2d\xf4\x1a\x91\x0c\xdf\xf2\x21\x09\x24\xb8\x8d\x8a\xd0\x32\x0d\xb4\x12\x9e\xa2\xe4\x3b\xf8\xbd\x14\xdc\x49\x89\x28\xa1\x24\x51\x40\x47\xe8\x08\x0d\xb4\xe2\x62\x7c\x69\x04\x69\xe5\x03\x14\x68\x78\x11\x5a\xf8\x1d\x3c\x4c\xe4\xe3\x8e\x15\xef\x50\x63\x79\xa4\xe1\x1c\x85\xb4\xe2\x6f\xd4\x40\x4a\x72\x54\x0f\x3d\x7c\x6c\x34\x0d\xaf\x57\x13\x39\x4c\x0f\x7f\xdd\xf2\xbd\xf9\x7a\xb2\x5a\xf1\x37\x68\xe7\x43\x8b\x21\x97\xef\x89\x9d\xd4\x7c\x1a\xf4\xf0\x90\xac\x56\x28\x12\xd5\x8a\x79\x37\xf2\xa2\x8b\xa3\x8b\x7f\xe2\x53\x43\x8b\xa3\x8b\x89\xf6\xec\x26\x69\x1f\x1b\x87\xc5\x3f\x50\xad\x56\xdc\x9e\xe0\x54\x13\xfa\x44\x35\xb1\x41\xfe\x8d\xd9\x53\xef\xec\xd8\x5c\xaf\x0e\x5f\x0c\xe5\xa6\x6c\xae\xcf\x2e\xde\xc0\xc2\x3f\xf8\x0d\xed\xc5\x7b\xea\x85\xe4\xb5\xd4\x1c\x4a\x4d\x4c\x5e\x4f\x45\xa4\xcf\x29\x59\x52\x4c\xe6\xc5\x6b\xb4\x9a\x28\xbb\x91\xb0\x91\xba\x0e\xf1\x4b\x9c\x0a\xa7\x5a\xa1\x80\x1a\x2a\xba\x18\xf2\xf8\xd0\xe2\xd0\x62\x78\x88\x4f\x8d\x2e\x0e\x2d\x26\x06\x3c\x68\xa2\x8b\x41\x4d\xc5\xda\x31\x27\xd6\xd8\xeb\x70\x3d\x54\x3c\x39\xde\xec\xf8\x4a\xe4\x11\x54\x32\x3d\x94\x3a\x3c\x19\xf2\xf8\x64\x2c\x91\x19\x5e\xad\xb8\x29\xb1\x46\x3e\xc5\x64\x67\x4b\x79\xfb\x38\x68\xe2\xf7\x49\x4d\xed\xd9\x62\x0c\xb3\x81\x4f\x0d\x19\xd4\x78\x2b\xf3\x77\x4a\x1d\x2e\xf3\x50\xc9\x11\xfd\x3d\x6a\xc5\x8c\x04\x18\x1d\x6e\x4e\x54\x27\x55\xa8\x93\xfe\x16\x7b\xb1\x71\x02\x4c\x48\x31\xf0\xd1\xc2\x68\x61\xca\x4f\x7c\x28\x76\x1a\x70\x3b\x8a\x8d\x7e\x29\xf0\x10\x1f\xe9\x90\x3b\x52\xe4\x0e\xb9\x83\xb8\x81\xe1\xab\x70\x73\x62\xf8\xeb\xd0\x88\x58\xf1\x68\x61\xa8\x30\xc5\xc0\xe3\x04\x9c\x90\xf2\x13\x2f\x77\x44\x3a\x52\x22\x1d\x91\x8e\x9f\xf8\x54\x98\x80\x13\x76\x50\xa1\xc2\x50\x21\x91\x8c\x34\xf4\x87\x69\xe8\x4f\x70\x0e\x9c\x13\xd5\x49\xbd\x50\x46\xc5\x5e\x08\x45\x16\x0f\x2d\xbc\x12\xde\xe2\x63\x4f\x59\xb1\x21\xf6\xba\x28\xe1\x59\x5e\x44\x5a\x09\xfd\x7d\x4c\x1a\xb5\x98\xff\x6f\x85\xa2\xd2\x0d\x3f\x4c\x38\x45\xfd\x09\xb4\x96\x52\x27\x95\xc8\x0f\x31\x85\xa6\x42\xbd\x5e\x18\x3b\x96\xd0\xeb\x0b\x61\x17\x8f\xcf\xc1\x73\xf8\x1c\x3e\x47\xe8\xf5\x45\xa6\x42\xae\xb0\x30\x10\xd4\x8b\x63\xbf\x22\xf4\x41\x53\x7d\x3d\x5b\x1f\xa8\x0b\x06\x05\x88\xc3\xc0\x73\xb1\xc4\xba\x58\x62\x7d\x30\x28\x7c\xf5\x15\x11\x0c\xd6\x07\xe0\x0a\x65\xd2\x07\xc5\x01\x00\x78\x4e\x1e\xcc\x07\xea\xb9\xfa\xfa\x58\xda\x57\x63\x89\xa0\x3e\x50\x58\xc8\x16\x9a\x8a\xf4\x7a\x01\x9f\x1b\xa8\x2b\x96\x58\x54\xc8\xca\x77\x42\x2e\x93\x46\x21\x3d\x87\x1a\xec\xbc\xca\xab\x9a\xd5\x44\x52\xe8\x65\x00\x3e\x72\x28\x72\x28\x46\x9c\xa9\x90\x2b\x8a\x53\x83\xd7\xe0\xda\x9f\x8e\x30\xb1\xaa\x2f\x7f\x05\x33\x29\xc8\xc5\x5c\x79\x94\x3c\x12\x66\x52\x97\x63\x15\xf9\x0b\x0b\x59\xf0\xe1\xf8\x33\xbc\xea\x22\xdc\xca\x77\xf3\x20\xf5\x85\xb4\x20\x7d\x49\x85\x69\xd0\x5c\x77\xb7\xd6\xde\xf0\xda\x86\x57\xe3\xb3\x6d\x52\x48\xc3\xe0\xa8\xa1\x73\x27\xa5\x0b\x4b\xb3\x32\x17\xeb\x58\xa7\x12\xde\xe5\xf7\x2b\xbf\xfb\xee\x1f\xef\x75\x0a\xe7\x3a\x76\xee\x78\x95\x3d\x3c\xa7\x67\xfa\xfa\x4d\x7a\x7d\xa1\x90\x5f\x92\x57\xb0\x74\x36\x59\x6e\x36\x58\x8d\x9c\xc9\xe4\xf6\x5a\x44\x4c\xf9\xb1\xb4\xd2\xda\x20\xd5\xa4\xc2\xd0\xcf\x21\xf9\x5d\x78\x84\x83\xc9\xa0\x45\x1e\xa7\x8b\x32\x8d\x5a\x26\x8d\xea\xe6\x41\x07\xfd\xa0\x03\x1a\x74\xa0\xf9\x92\x0a\x4b\xa0\x61\x26\x50\x11\x2d\xbc\x4e\x5d\x81\xfe\x91\xd7\x49\xd2\x6c\xa2\x22\xd2\x15\xb8\xc2\xa3\x46\x89\x74\x98\xfe\x1f\x14\x6b\x62\x14\x6b\x94\x21\x3a\xa2\x61\xd2\x62\x9f\xda\x04\x39\x21\xa6\xc0\xee\x95\x25\x26\x1d\x87\xa1\x02\x15\x38\x2c\x9d\x84\x84\x16\x1e\x13\x94\x38\xec\x65\x54\x80\x22\x1d\x86\x91\x90\x00\xa7\x29\x4c\x50\xbc\x0c\xc3\x40\x01\x0a\x18\xf6\x32\x89\x09\x5e\x1e\x12\x94\x30\x2c\x1d\x14\xa8\x78\x19\x87\x91\x98\xf0\x38\x0f\x09\x0a\xf8\x1a\xb4\xeb\x29\x1c\xaa\x58\x0c\x19\x38\x11\x26\x62\xc6\x09\x12\x86\xb6\xf0\x38\x54\x89\x19\x8b\x71\x22\x4e\x5c\x8c\x19\x24\x0e\x7d\x9c\x87\xa1\x8a\x13\x98\x01\x13\x71\x22\x64\x2c\x26\x71\xa8\x97\x87\xa1\x4a\xc8\x38\x01\x13\x61\xe2\x09\xc8\x20\x61\xe8\x46\xea\x65\x3e\xfc\x99\xbc\x8c\xf9\x99\x47\x1e\xf8\x14\xe0\x81\xff\x99\x4f\xc5\xe1\x30\x1c\x14\x54\x2a\xf2\x18\x4f\x8f\x5f\x0f\xc7\xe1\x97\xf9\x54\xe0\x07\x12\x63\x97\xc3\x71\xf8\x6f\xb1\x5c\x3e\x96\xf8\x1b\x0f\xc3\x61\x38\x01\x19\x30\x9d\x19\x1a\x9f\xec\xae\x08\xad\x8f\xf5\xad\x7b\x7e\x8e\xf5\xac\x0e\xec\x48\xc1\x11\x30\xc2\xc0\xa7\xde\x73\x4f\xac\x5f\x1d\xc3\x63\x3b\x28\x79\x82\x3c\x81\x80\xbb\x1e\x65\x86\x52\x71\xbf\xe3\x8f\xe4\x64\x2a\x51\x4d\xa4\x85\xee\x64\xf0\x35\xb4\xa1\x1d\x7b\x31\xe1\x9e\xae\xd3\x0f\x0b\x21\x4b\xc8\x4c\xbc\x36\xbe\x73\x38\x26\xb0\xd7\x8a\xf0\x55\x66\xde\xe7\x9b\x7e\x86\x44\x16\x4e\x81\x0d\xec\xd0\x0b\x89\xbf\x6c\x9a\xfb\xb9\x20\x6f\x88\x2c\x61\xe4\x89\xf8\x1d\x7c\x1f\x79\x3c\xee\xf4\xfa\x7d\x64\x62\xe4\x09\xf8\x0e\xbf\x87\x6e\x0a\xbe\x97\x9f\x10\x92\xd5\xc4\xf4\xbc\x84\x3e\x35\xd1\x9b\x18\x5f\xb1\xbc\xb0\xfc\x8d\xa7\x84\xa8\x56\x01\x47\xe1\x28\xd1\xd6\x56\xd3\xb5\x97\xdd\x5b\xd2\x95\xd3\x26\x4c\x7e\x9f\x68\xcb\xc9\xb8\x2e\x4f\xe5\x88\x51\x31\x2a\x10\x3a\xc8\xa5\x36\xb5\xea\x84\x90\x18\x4d\x83\xb7\xa9\x0f\x3e\x24\xda\x5a\x6f\x94\x68\x15\xf0\x28\x1c\x23\x42\x5a\xc5\xdf\x8e\xbc\x71\x41\x1c\xa8\xc7\x19\xab\x47\x4d\xf4\xca\xfd\xcc\xde\xd2\x18\x4c\x54\x0c\x89\x37\xe4\xb4\x8c\x18\xde\xc9\x93\x89\x1c\x1d\xfc\x9b\xdf\xd4\xa6\x13\xe0\x28\x1e\x23\xa2\x5a\xc5\x53\xcb\x67\x4f\x8b\x0d\x1d\xd3\x8e\xcc\xfe\x9b\x10\xd2\x2a\xf0\x28\x1e\x25\x72\x62\x75\xb7\xe5\x08\x1f\x4c\x26\x74\x6d\x9d\xf0\x0c\xdf\xda\x26\x86\xe2\xd8\xda\xaa\xbb\xf6\xc6\x67\x43\x27\xe7\x25\xf4\xaa\x15\x43\x12\xd5\x8a\xe9\xf2\x9b\x31\xa9\xf0\x46\x6d\xd5\xb1\x56\x94\xe6\xe8\x62\xad\x10\xe3\x98\x32\x06\x30\xe5\xb4\xc2\x9d\x7c\x5b\xab\x08\xc7\xe0\x28\x11\xd5\x2a\x9f\x7a\x63\xf9\x05\x01\x68\xc5\x85\x37\x8e\xfc\x4d\x0c\x69\x95\x70\x2c\x56\x73\x1c\xa8\x4d\xfc\xe0\x03\xa2\xb5\xad\xa6\x33\x56\xd7\x64\x35\xd1\xf7\x67\x5d\x21\x6d\xac\xae\xc9\x1f\x10\xad\x37\xe4\x4f\x9d\x4e\xc4\x63\x18\x63\xc6\x75\x6b\x9e\x98\x08\x7e\x0c\x8e\x11\xad\xba\x1b\x10\x39\xe2\x93\x93\xaf\xb7\x69\x80\x9f\x84\x2e\x56\xcd\x40\xa3\xd2\x62\x12\x6b\x33\xd2\x6a\xc5\xe4\x04\x27\x6c\x4a\x2c\xe2\xc3\x34\xec\xe7\x23\x92\x2c\x9d\xe3\x51\x42\x9d\x12\x3f\x8d\x8c\x9a\x8b\xdf\xa3\x28\xae\xbc\xab\x0c\x95\x98\xc4\x62\xda\xbb\x38\xfd\x0c\xd2\x42\x95\xae\x2a\xa3\x36\x97\x34\x04\x02\xa6\x1a\xae\x29\x58\xd7\x58\x67\x6d\x70\xd4\x89\xb6\x1e\x7b\x4f\x0f\x2b\x6f\x83\xfd\xff\x90\x9f\x12\x40\x87\x92\xe2\x6f\x94\x2c\xc9\xb1\x8f\xf2\x5a\x2a\x64\x95\x75\x55\x7c\xa8\x25\x74\xb5\x8e\x4a\x46\xa5\x9a\xb8\x9c\x50\xad\x26\x2e\x27\x86\x24\xb9\xbf\x8e\x0a\x59\xc3\x57\xab\xf8\xe4\xd8\x80\x75\x25\xa4\x89\x0d\x58\xff\x4f\xb7\x6a\xa0\xd5\x78\x17\x53\x50\x52\x5c\x08\x7f\x50\xc5\xb5\x0d\x22\xbc\xa0\x6c\xa8\xad\x8d\x3b\xda\xd5\xd7\x14\x17\x88\x76\x18\xcd\x94\x38\x8a\xcb\x0a\x38\x9c\xa9\xc8\x2f\xae\xaa\x11\x0b\x43\x09\x44\xc0\x13\x08\x78\x05\x9f\x5f\xf2\x48\x1c\x64\x29\x24\xc9\x66\xf1\x8b\x01\xab\xc7\x64\x62\x93\x9d\x71\x73\x99\x97\xa8\x04\x70\x01\x7d\x05\xd4\xd0\x0f\xea\x2b\x31\x49\x57\x03\xcf\x32\x1b\x32\x0b\x37\xc4\x86\xa1\x0d\x99\xf5\xfb\xc4\xd3\x4a\x79\x83\x12\xb4\xd0\x8f\x5a\x65\x64\x83\x72\x9e\x32\xb2\x34\x74\x89\x59\x90\xfe\x72\xef\x3a\x7e\x6f\x5b\x41\x69\x55\x4c\x91\x7f\x98\x90\x0d\x57\x98\x05\xe9\xe9\x0b\x04\x5c\xa0\x80\x3b\xe0\x61\xa2\xba\xaa\xad\x61\x2f\xd7\xfb\x72\xfa\x02\x51\xfe\x0b\x4a\x2f\xf0\x91\x19\x0a\xb8\xfd\xc7\x1f\xe1\x76\xb8\x7d\xc4\x8f\x78\xfb\xb3\x33\xb7\x2e\x5e\x23\x22\x8d\x7f\x45\x1a\xfe\x4a\x9c\x58\x33\xb3\xe3\x59\x0e\x6f\x1f\x31\x02\x6f\x87\xb5\x94\x18\x99\x71\x2f\x85\xfd\xc3\xf8\x2b\x11\xcd\x67\x7c\xb8\xff\x49\x4a\xd6\xc0\x76\xaa\xb9\x39\x37\x4c\xc3\x3f\x6d\xbc\x9d\x07\x99\x42\x07\x3e\xf8\x3c\x3e\x82\xcf\x09\x4b\x96\xaf\x58\xb2\x78\x05\xa9\x2f\x2d\x31\x15\x70\xb1\x2f\x61\x43\xa0\x26\x58\x2d\x42\x05\x14\x41\x3e\xdc\x0b\xbf\x73\xb1\xaf\xa7\x2c\xc1\x62\xe6\xd2\x3a\x38\x8a\xc4\x23\x59\x4b\x17\x6a\x05\x14\x31\x25\xf2\xec\xc7\xb8\x72\x1a\x89\x07\x1e\x40\x3f\xe6\xe1\x7b\xec\x06\xcf\x06\xff\x46\xc1\x9b\xb7\x63\x81\x71\x2e\x2e\x9e\x30\x94\xcd\x0d\x98\xa5\x42\x61\xd9\xce\xc6\xcd\xe7\xff\xf5\x06\xa4\x9f\xe4\x0e\x5d\x99\x51\x74\x5c\xdc\x7c\xf9\x87\xa2\x2b\x1c\x8c\x82\x91\x87\x2e\x00\x27\xc2\x1e\x10\x60\x29\x2c\xef\x83\x3e\xb2\xba\x2f\xf0\x56\x1f\x9b\x8c\x7f\xc0\x58\x2a\xee\xd6\x83\x1a\x66\xc0\x75\x72\xc0\xf0\x21\xee\x3e\x89\x52\xf8\x2a\x03\x97\xb1\x0c\x9e\xc2\x5d\xa0\x12\x5c\x0e\x9b\x8b\xd8\x33\x6b\xdf\xe8\x67\xb0\x22\xa2\xdd\x18\x51\xb1\x78\x19\xca\xf0\x29\xd8\x85\x2a\xc1\xe1\xf2\x3a\x88\x8c\x73\x1b\xbe\x79\x17\x2a\x64\xed\x5e\x59\xc5\xc6\x75\x95\x70\x12\x0c\x4b\x90\xb5\x30\x2c\xf1\x10\x2f\xf7\x33\x58\x8f\x93\x70\x17\xce\xc0\xf7\x39\x7c\x1f\x77\xc1\x0c\xa8\xc7\x49\xe2\xbf\x61\x04\x0c\x81\xc1\x30\xe6\x13\x72\xf5\xb4\xdc\x89\x8f\xb3\x87\x79\xd8\x49\xe5\x7e\xb4\xfa\x82\x00\x63\x1e\x83\x21\x38\xf8\xdf\x38\x82\x8c\xae\x91\x69\x66\xdb\xf6\xed\xdb\x50\xf1\xc0\x03\xa8\x80\x65\x54\xe8\xcb\x08\xcd\xb4\x97\xb7\xea\x9b\x05\x78\x0d\x67\xe0\x57\xb0\x12\x81\x43\xc0\xaf\x70\x25\xbe\x86\x33\x44\x7d\x6e\xb9\x2e\x9b\xcd\xae\xd0\x05\x73\x05\x7c\x0d\x66\xc0\x57\xb8\x12\x80\x03\x80\xaf\x20\x1d\x4e\xc3\x0c\x31\xd8\x5c\xd1\xda\xce\x26\xc7\x1e\x9b\xe9\x06\xa5\xf2\xab\xb0\x8c\xc1\xa7\x3f\xc6\x11\xc0\x0d\x85\x87\xff\x17\x75\x38\xf4\x22\x72\x40\x3e\x22\x40\x9f\x7c\xed\x06\x45\xa3\x51\x09\xcb\x28\xf8\x03\xe6\x31\x55\xe6\x4a\x83\x5f\x08\xe6\x3e\x70\xb6\x80\xd3\x1b\xcc\x06\xb3\x38\xff\x7e\xa2\x6a\xce\x2c\xff\x6c\x2e\x42\xe0\x9b\xb8\x02\xcf\xe0\x62\xb1\x34\xcf\x94\x9d\xc3\x66\x07\x72\xaa\xf3\x04\x50\xe2\xb3\xf0\x08\xde\x0f\x0b\xc6\x91\x86\xc2\x8d\xf3\x8b\x58\xbd\xdf\x50\x69\x16\xf4\xcd\xff\x9e\xdb\xc0\x55\x55\xf9\x2b\xfd\xe2\x89\x2f\x61\xbd\x7c\x2b\xac\x95\x6f\x8b\x9d\x53\x5d\x6e\xa7\xcf\xcd\x1e\x88\xcc\x63\x3a\x6c\x1d\x96\x0e\x01\xbb\x22\x0e\x02\x9e\x7c\x1b\x94\x30\x01\x66\xb1\xb2\x16\x69\x66\x87\xa9\xb9\xb4\x45\x98\x08\x0c\xde\x01\x77\xe0\xed\xff\x98\x81\x49\x29\x40\x4c\xfc\xf7\xf0\xf7\x51\x89\x63\xd0\x82\x4e\x7c\x06\x0f\x67\x3f\x89\x29\x29\x70\x0a\x5a\x81\x87\xed\xb0\x50\xec\x3e\xd2\x7d\x62\xcf\x2b\x64\x75\x4b\xa0\x79\x07\x9b\xdc\xdc\x1d\x77\xcb\xb0\xf1\x61\x09\x1e\x8e\x75\xf1\x02\xf8\x83\x2a\xb9\xde\xc5\x6b\x6a\x61\x08\x5f\x5c\x20\xe2\x0b\x4a\xbb\x4c\x31\xa5\x8e\x62\xc3\xf5\x1e\x5e\x59\x2d\x16\xca\xcb\x08\xbf\xa7\x32\xe0\x8b\xf5\x70\xff\xf5\x1e\x6e\x8e\xf5\x70\x8b\xa7\xdc\xcc\x66\xc8\x5b\x99\x9e\xed\xe9\x3b\x96\x72\x4b\xd3\xb7\xad\xda\x2e\x46\x25\x75\xb8\x6c\xfb\x1a\xd7\x92\xd6\x35\xa9\x6b\x5a\x5f\xca\x39\xc2\xcd\xa1\x14\x47\x5e\x6a\xeb\x6e\x15\x5b\xbb\x5d\xc7\xb7\x77\x93\xc9\xf8\x47\x4c\x78\x26\x0a\x13\xd5\x44\xba\x9a\x48\x67\xa6\xf7\xa1\x66\xfa\xc8\x91\xa8\x41\x4d\x4a\xf4\x01\x18\x67\xf0\xe8\xad\xe5\xa6\x54\x59\xc5\x9b\x4c\xb6\x32\x97\x31\xd5\x6d\xf0\x1b\x25\x8b\xec\xc3\xce\x14\x0c\x62\x10\x17\xf4\x12\x2e\xbb\xcd\x69\xe3\xe4\x41\x94\x38\xf2\x7e\xb3\xc9\x6a\x74\x19\x53\x5d\x46\xaf\xb1\xc2\x02\x3e\x9c\x9b\x02\x73\xd1\xe7\x2f\xaf\xb0\x56\x3a\x52\x5d\x4e\xa7\x8b\x83\xa3\xbc\x78\xe5\x4a\x85\xe4\xa9\xb2\x55\xa5\x2e\x80\x05\x10\x84\x20\x74\x46\x7c\xb1\x02\x92\x3d\xd5\xe1\x71\x3b\xdd\x5c\x20\xe0\xf6\xfa\x44\xa0\xaf\x54\x56\xf8\xaa\x6d\xc1\x54\xd4\x84\x66\xc0\xc3\xf0\xf0\x95\x2b\x7d\xa0\x99\xde\x97\x9a\x9c\x66\xa3\xa0\xa7\x0f\xfa\xfb\xa0\x07\x34\x70\xf5\x55\xaa\xb3\xaf\x13\x68\xd0\xf4\x81\x06\xe8\x81\xeb\x4a\x5e\x4e\xa0\x18\xe8\xe2\xfb\x86\xc0\x01\x2a\xaa\x81\xab\x0c\xf4\x43\x0f\xf6\x2b\xfb\x86\x40\x3f\xf4\x63\xbf\x32\xaa\x91\xe9\x18\x84\xac\x8d\xea\x98\x18\x90\x36\x14\x3f\x0f\xdc\x77\xf1\x37\x0a\x0d\xc0\x86\xae\xd6\xf1\xd3\xcb\x28\xe8\xe9\xa7\xfa\x60\x1a\x8f\x3d\xca\x90\x2e\xfa\x27\xd2\x01\x5c\x07\xa8\xbe\x21\xd0\xc5\xa3\x24\xeb\xfe\x27\xf0\xff\x7f\x40\xa6\x66\xa0\xe3\x2e\xd2\x36\x3e\x34\x3a\x7c\x88\x81\xbb\x87\xe3\x9d\xff\xc0\xa9\x1c\xea\x1e\xe5\x41\xa7\x80\x91\x7d\x78\x2b\xde\x7a\x56\x3c\xf4\x6d\xcf\x37\xa7\x3f\x27\xc3\xe1\xe8\x21\x66\x17\x8f\x92\x12\x47\x4e\x87\x5b\xe1\xd6\xb9\xe2\xea\x07\x56\x8d\xd6\x3e\x4c\x62\x35\xcc\x84\xe9\xfb\xe0\x24\x37\x10\x7f\xe6\x2c\x1f\xa6\x93\x06\x20\x3f\xc2\x21\xd8\x8c\x55\x98\x28\xe6\xbc\x90\x3d\x37\x73\x1e\x89\x83\xe6\xcd\x18\x83\xa9\x7f\x56\xf2\x11\x0c\x81\x66\xa8\x82\x44\xb1\xed\x4c\xfb\xd9\x5d\xa7\x49\x18\x74\xfa\xfc\x65\x48\xe5\x40\x8a\x49\xa7\xb5\x25\x67\xf9\xe4\x81\xf9\xb2\x10\xcd\xc0\xef\x91\x7b\xa0\x3b\x52\x1e\x29\x8f\xdc\x83\x87\xf0\x37\x5c\x01\x29\xf8\x1c\xac\xc2\x9b\x85\xa5\xf8\xd8\x53\xb3\x67\x3c\x5d\x5c\x50\x58\xec\xcb\x26\x9d\x4e\xa7\x83\xf5\xe5\x34\x17\xb5\xb8\xbb\x7d\xdd\x81\xfd\x95\xf0\xe4\x61\x18\xf3\x19\xdc\x09\x24\x69\x39\x76\xc2\x76\x82\x93\xcb\xe5\x7b\xa0\x1b\x7e\x17\xe3\x9a\x64\x4c\x0e\xb8\x87\xc7\xe9\xb8\xd1\x98\x9e\x8e\x1b\x25\x98\x2e\xc4\x94\xe7\x7b\xf8\xc8\x28\xf8\x10\x4f\xc8\x73\xe5\xb9\xf0\x21\x9c\x90\x47\x09\xd7\xa4\x90\xb4\x9e\x82\xf2\x81\x68\x37\xfd\x7c\x58\x92\xe9\xff\x7a\x9f\xdc\xdc\x0c\x57\x29\x58\xc9\xb4\xb7\x3b\x7b\xb2\xdb\xa3\x85\xa1\x82\x01\xf5\xae\x20\x25\x3b\xdb\xb9\xaa\x3d\x1b\x26\xe0\x5f\xaf\xab\x78\xf2\x80\x6a\x17\xe9\xd8\x41\xc1\x04\xf8\x2b\x91\xdc\x9c\x01\x57\xa9\xd0\xe6\xeb\x65\x71\x02\xfc\x35\xc5\xc0\x47\x06\x94\x3a\xb9\xc3\xc0\xa7\xe2\x04\xfc\xeb\x00\x9a\xd4\x50\x61\xb4\x20\xae\xdf\x15\x10\xc9\x70\x1f\x7c\x39\x60\xab\x6a\xe7\x3b\x99\x80\xad\xc2\xea\x17\x50\x03\x5a\x22\x60\x36\x78\x8d\x5c\xa4\x5f\xa6\x41\xab\x98\xcc\xd7\x5a\x6a\x0d\x55\x22\xf6\xcb\x34\x51\xa3\x2f\xa8\xc8\xe7\xf2\x0b\xca\x4b\xf4\x22\xf6\x47\x68\xc2\x50\x66\x29\x2e\x86\xf5\x14\x68\x23\x1a\x05\x6a\x94\xd9\x96\x35\x07\x84\xb0\x36\x9b\x0a\xd1\xb2\x66\x3d\x85\x5a\x59\xa3\x00\x8d\xb2\xdd\xd7\xbd\x4e\x88\x07\xc3\x30\x79\xca\xbd\x16\x11\x34\xa8\x25\xca\xfd\x95\x56\x89\x93\xfb\x23\x34\x6a\xa7\x50\xc5\xbe\xe2\xca\x32\x11\x62\x48\x4b\x82\x0d\xc6\x46\xae\xb1\x41\xaa\x09\x8a\x10\xab\xb6\xb2\xca\x57\x5b\xcb\x26\xa7\x01\x52\x60\xa5\xfe\x74\xd4\x57\x65\x85\xe8\x21\x37\x4c\xe5\xae\x9b\xc9\x85\xff\x7b\x8a\xa0\xda\xd5\x1e\x93\x4f\xfe\x13\x77\xc9\xfe\xc9\xb3\xff\x3d\xee\x52\xd1\xe6\xe5\x93\xff\x77\xdc\xa5\xb6\xf2\x56\x4b\xeb\x40\xdc\x25\xd5\x86\x4e\x6f\x7b\x47\x67\xdc\xc8\x00\xbe\xa2\x0e\xf1\x61\x0d\xe8\xa9\xa8\xe6\x25\x0a\x6f\xfb\x69\x38\xdc\x26\xc4\x54\xdc\xb9\x7c\x32\xdc\x17\x1b\x9e\x94\x2f\x26\xaa\x95\x2f\xca\x9f\x32\x47\x16\x56\xad\x17\xae\xf5\x2b\xc6\x21\x35\x7f\xda\x5c\x11\xbf\x8c\xa4\x11\x45\x05\xc5\x39\x39\xec\xf2\x57\xca\xf6\x0b\xe1\x7e\xc5\x17\x40\x9d\xba\x70\x56\x84\x2f\xe5\x34\xa2\xae\xa1\xb6\xad\x8d\xc5\x2b\xf0\x1d\xe8\xa9\x48\xcf\x4b\x54\xb9\xcb\x58\xce\xfa\xfc\xf0\x95\x9c\x46\x5c\xf9\x14\x1e\x7c\x0f\xee\xe0\x42\xfd\x8a\xe4\x6b\x7a\x10\xe3\x73\x2b\x89\x21\x6d\xac\xe2\xfd\xfc\xff\x9a\xaa\xb9\x26\xc1\x58\xfe\xff\x67\x76\x26\x2c\x01\xbd\x91\x6a\x96\x25\x90\x12\x9c\x6a\xe5\x20\xb8\x8d\xba\x26\x01\xad\xbc\x48\x85\x25\xa4\x95\x7f\x4e\xdb\xc0\xee\x81\x39\x5c\x90\x4a\xa8\xc4\x10\x1d\xa2\x19\x94\x22\x31\x5d\x5f\xa6\xc3\x12\x83\xd2\xb5\xd8\x75\xac\x08\xa3\x96\xcb\x74\x3c\xd2\xea\xf0\x20\x35\x39\x48\x11\x1d\xc8\x8e\x0e\x80\x42\x4c\x7a\x55\x63\x19\x48\x71\xab\xb1\xfe\x04\x27\xf4\x24\xda\xf9\xf0\x43\xcc\xd6\xf4\xf5\xeb\x56\x65\x92\x2e\xa3\xd3\x68\x64\x71\x0f\x6e\xc0\xfe\xc8\x10\xbc\x05\x6f\xda\xf7\xfa\x68\xc1\x5e\x57\xef\xa8\xe7\x7e\xf8\x6a\xef\xe9\xbf\x89\x0f\xba\x9f\x38\x97\xf5\x0f\xd2\x5e\x5d\x6d\xaf\xe6\x1a\x6b\x3c\xbe\x06\x71\x64\xe3\x13\x97\x7e\x66\x5d\x4e\x97\x53\xe8\x2c\xee\x32\xec\x73\x90\x2f\x1c\xdc\xd8\xd7\xcf\x1e\xac\x3a\xd0\xb0\x47\xf8\x15\x69\x78\xf0\x51\x78\xca\x48\x5a\x6b\x1d\xf5\x75\x2c\x90\xdf\x7e\x0b\xe4\x1b\xaf\x65\xaf\x3a\x28\x1c\x97\x8e\x34\xf4\xb4\x15\x2d\xde\xb4\x72\xc5\xb6\x97\xfd\x87\xaa\x0e\xd6\x93\x20\xc1\x82\x34\x3e\x34\x1b\xaa\x61\x0b\x14\x27\xa8\x89\x3b\xa0\x1c\xfe\xc2\xcb\xbb\x4e\x53\x30\x07\x9e\xe2\x9b\xdf\xe7\xdf\x94\x5f\xfe\x16\xe8\xb7\xe1\x33\xbe\xef\xfa\xa4\x6b\x58\x13\x17\x45\x43\x5a\xe6\x1e\x3e\x26\x54\xc2\xa7\xf1\x68\x0a\x33\xa8\x98\x9c\x3d\x64\x2d\x7f\x4d\x8a\xbc\xc7\x00\x3d\x27\x36\x6c\x46\x68\xf9\x3d\x46\x4f\x5d\x93\x42\x43\x18\xa0\x65\x3a\x96\x24\xa1\x96\x01\x3a\x94\xa2\xec\x03\x9a\x08\x5d\x44\x41\x81\x94\x32\xc6\x6c\x06\x0e\x53\xea\xf0\x20\xc5\x06\x5e\x8c\xbd\xe2\x87\xf8\x39\x94\x22\x6e\x7c\xda\x1c\xeb\x8c\x21\x7a\xc0\xc2\x25\x76\x4e\x0c\xf5\x87\x25\x66\x0f\x95\xb9\x35\x10\xdc\x26\x04\xb7\x05\xb6\x66\xb2\xf0\x77\xea\xb7\xcf\x3f\xff\x6d\x57\x87\x49\xbf\x43\xd0\xef\x30\x75\xec\x62\xaf\xf0\x42\xe8\xeb\xa8\x96\xd9\x85\x9d\x50\xb7\xee\x80\x30\x10\xda\x4c\xf7\xe0\x83\xba\x6d\xdf\x4e\x68\xce\x15\x47\x8e\x44\x00\x20\x3e\xba\xda\x0b\x34\xa4\xb0\x90\x89\x23\xe1\x7e\xdc\x82\x9f\x5e\xff\x6f\x81\xfb\x71\x24\x64\x42\x0a\xd0\xbd\x1f\x5d\x15\x42\xe3\xa2\xe3\x60\x01\x7f\xba\xaf\xef\x74\xdc\xb0\x57\xc4\x2c\xc8\xba\x72\x85\xc8\x6d\xfe\xf4\x81\x1d\x5c\xeb\xd7\x5f\xb7\x8a\xc9\x70\xdf\x16\xde\x9a\x7b\x34\x17\x24\xb8\x1c\x7b\x9d\xe8\xc1\x16\x0a\x24\xd5\x13\x61\x3a\x44\x17\x51\x21\x29\x22\x31\xcf\xbc\x30\xf7\xe9\x67\xe6\x9e\x79\x0f\x56\x53\x61\x29\xe9\xcf\xbb\x6b\xbc\x2a\xf0\xee\xd9\xb9\xcf\x88\x11\x3a\xf2\x57\xa6\xc6\x50\x5d\xe2\x11\x70\x54\xab\xb1\x43\xbf\xb3\x74\x67\x6a\x47\xf7\xee\xfd\xbb\xba\x49\xaf\xdf\xe3\x0f\xb0\x1d\x48\xc1\xa0\x6d\x6d\x82\xcf\x6c\xf2\x94\x73\x26\x93\xdd\x62\x16\x91\x7a\x28\x27\x98\x5d\xb5\xad\x22\x55\x07\x0f\x10\x35\xf6\x92\xaa\x12\x0e\x67\x29\x4a\xf4\x86\x12\xab\x58\xba\xd8\xa2\xb5\x2c\xca\x32\x66\x1b\xb2\x4b\x51\xf9\x55\x8a\x37\x5e\x30\x13\x93\xf0\xd6\xac\x3c\xd1\x62\xb6\x9b\x4c\xac\xc9\x63\xf2\x9a\x85\xce\xb5\xbb\xd7\x75\xac\x2e\xcd\x2e\xcb\x2e\xdf\x86\x0f\xe6\xa4\x94\xda\x0d\xc5\xa5\x2c\xce\x54\x96\x54\x96\xd6\xd8\x05\x18\x95\x23\x6d\x0d\x66\xd5\x64\xa5\x66\xae\xd9\xb2\x2e\x73\x2d\x69\x35\xdb\xcc\x26\x36\x13\xa8\xb4\x1d\x39\x82\xc5\x1f\xb0\x55\x70\x81\x0a\xb7\xcf\x27\x02\xf5\x65\x9b\xbe\xbd\x6c\x47\x79\x6a\x2b\x3e\x40\x94\xb8\x6b\xca\x6a\x38\x98\xa5\xa8\x09\x56\xd6\x78\xc5\xea\x13\xbe\xd7\x7c\xaf\xec\xac\x68\xaf\x6c\xaf\x06\xe5\xd8\x14\x6b\xbc\xe0\x2e\x48\x82\xe4\x9d\x4d\xa2\xcf\xe7\x0e\x04\xd8\x0a\x9b\xdf\xea\x17\x32\x0e\x6e\x39\xb0\xf5\x50\x75\x7b\x55\x7b\xc5\x0e\x78\xb0\x2d\xa5\xda\x5d\x59\x5b\xcd\x86\x68\xfc\x89\x81\x93\x54\x3a\x05\x5f\x50\xaa\x27\x1a\x56\xfe\x68\x6c\x12\xe0\x55\x5e\x9d\xe4\x4a\x82\x93\x94\x6a\x4a\x3a\xa5\x32\xc2\x17\xd4\x40\x86\x6a\x16\xbc\x1a\x37\x4d\xd7\xf1\x21\x89\x81\xfd\x78\x01\x0a\x22\xa9\x50\xcb\x0b\xc7\x79\x51\xa6\x51\x62\xca\x78\x18\xff\xed\xaf\x30\x0c\x1e\x61\x93\xb7\xf0\x4e\x98\xca\x3b\xbf\x1d\xb0\xbb\x79\x03\xee\x80\x35\x40\xc3\x73\x40\x8f\x06\x7a\x1c\xd0\xaa\x17\x7d\xaa\x17\x9b\xe5\x44\x9e\x79\x80\x12\x54\xc1\xde\x98\x3e\x63\xe6\x45\x0b\x25\xf7\x33\xeb\xb6\x8e\x5d\xea\x10\x9a\x73\x6a\x96\x66\xb0\xaa\xad\x3e\x28\xe2\x3d\x05\xee\xfc\x7c\x16\x93\x1f\x5f\x8e\x84\x80\xb7\x2a\x90\x42\xc5\xbe\x83\x78\x93\xd8\x38\xff\xc1\xfd\xf3\xb8\x8c\x10\xdd\xa9\x50\xbd\xe8\xfb\x18\x6e\x81\x49\x67\x8f\x88\xed\x7b\xda\xf6\x74\xec\xfa\xee\xe7\x4d\xf0\x40\xdf\x5b\x24\xf0\xad\x93\xf1\x66\x11\xa9\x91\xe3\xf1\x66\x16\xae\x2a\xde\x39\x37\x7b\x9a\x08\xb4\x8b\x89\x21\x17\x90\x82\x9b\x51\x10\xf0\x69\xc5\xee\x37\x1b\xde\x78\x97\x7d\xc7\x7a\x76\xf3\x39\xe1\xbb\xc5\x23\x0e\x0c\xe5\x36\x66\xc4\x94\xee\x11\xf7\x75\xe2\x43\xb3\xa7\xaf\x5d\xb5\x21\x7d\xe3\x0a\x52\x15\xec\xdd\xb2\x66\xda\xd8\x35\xdb\x48\xdc\x19\xeb\x63\x51\x1a\x0e\xf1\xd0\xa3\x50\xbd\xd8\xdc\xf1\xe9\x16\xc3\x2e\x71\x19\xa4\x40\xca\x4a\xb8\x9b\x53\xbd\xe8\xfb\x46\xb1\x5f\x01\x8b\xf8\xf6\xc3\xd5\x27\x4f\xb2\xad\xb6\x36\x73\x8b\xd0\x79\xbc\xfe\xcc\x59\x36\xd9\x46\x2d\x18\xe0\x10\xa4\x0d\xd8\x04\xbf\x0e\x77\xc0\x5a\xa0\xe1\x56\xa0\xa7\xfd\xc9\xa5\xd9\xbd\xaa\x0f\x6d\x20\x85\xfb\xe3\x6c\x7a\xe4\x3f\x6c\x8a\xf4\x33\xd3\x66\xcd\x7e\x56\xc0\xab\x0a\xbc\xf9\xca\x78\xa4\x58\xbc\x59\x37\x19\x79\x61\xfa\x5b\x5d\xf0\xc0\xfd\x3f\x6f\xdd\x95\xb3\x27\x7b\x0f\x79\x76\x39\xde\x02\x93\x1e\xe7\x32\x14\xaa\xd9\xbd\x21\xba\x53\x79\xfa\xeb\xfd\x8d\xa7\xc4\x83\x70\x13\x28\xf6\x01\xc5\x01\xad\x50\xcd\x6e\x86\xc4\xf7\x17\xe1\xcd\xa2\x6a\xb6\x2f\xdf\x9e\x6f\x2b\x10\x5e\xd2\xb5\xbe\xb0\x8c\x55\x7d\x68\xcb\x31\xe7\xe8\x73\x85\xbd\x19\x8d\xab\x97\xb2\x19\x25\x4b\x73\x73\x04\xd5\x6c\xdf\x31\x47\xc7\xd8\x75\x2c\xd0\x0e\x46\x35\xbb\xf9\x6c\xe1\x99\x8c\xe3\x82\xbf\xc5\xd3\xd6\xca\xaa\x66\xf7\x9e\x2c\x3d\x99\x7d\x58\x70\xd7\xb8\x6a\x6b\xd8\xbe\xdc\xbe\x35\x27\x05\x9f\x52\x75\xb8\x17\x66\xbb\xf0\x4e\x18\x84\xcf\x73\x98\xa4\xc0\xd1\x78\xc7\xda\x45\x38\x4c\x34\x64\x4e\xd8\xb2\x95\xc3\x9e\x18\x6d\x7f\x32\x72\xa7\xa2\x7b\xdb\x85\xb1\xbb\xd7\xec\x5d\xb1\x2f\xfd\xe0\xea\xd7\x9f\xdf\x8c\x0f\xfd\x78\x1f\xa9\x6b\xeb\x2c\xd9\xcb\xfd\xfa\xe3\x81\xef\x4e\x88\x7b\xde\xf0\xbe\xf1\x36\xfb\x6e\xc1\x1b\x5b\xde\x14\xe0\x69\x45\x8c\x41\x02\x50\x70\x33\x08\x62\x72\xf4\x8f\x47\xd5\x8a\x71\x09\xce\x50\x7f\x62\xa8\x5f\x4d\x5c\x62\x9c\xca\x5c\x9e\x70\x2a\x93\x9b\xd5\xc4\xa0\xb8\xe7\x4c\x78\x32\x83\xd3\x71\x26\x3e\x61\xb3\x09\x91\xbf\x47\x4e\x47\x3e\x92\xcf\x10\x76\x37\xce\x84\x27\x60\x3a\x0b\x7b\xe1\x85\xd7\x41\x03\xf7\xc1\xe3\xf8\xf0\xcc\x57\x85\xb6\xcc\x93\xce\xb6\x5d\xe4\x9b\xaf\xc2\xe3\xf0\x30\xdc\xc7\x81\x06\x5e\x98\x83\x7b\x45\xa0\x87\xfc\xdf\xae\x2e\xb0\x95\x4f\x4e\x83\xed\x7c\x62\x88\xbe\xc2\x1c\x58\x63\xc9\x16\xb0\x47\x11\x5f\x98\xd1\x0e\x2c\xcc\x40\xbf\xe2\x48\xe9\x85\x8e\xa5\x94\x88\xfd\xff\x7d\x99\xf5\x7a\x8e\x18\xd6\xc8\x3d\x5d\x54\xec\x5b\xe7\x09\x3d\xff\x2d\x98\xa0\x2a\xc1\x09\x06\x28\x02\x15\x14\x81\x05\x8a\xc0\x90\x08\x06\x48\x66\x42\xcf\x43\x51\xf4\x79\x65\x6d\x38\x8d\x79\x6e\xd1\xfc\x09\x82\xd3\xa1\x9c\xb8\xe8\xd4\xdb\x17\x5e\x7d\xf5\xe3\x8f\x4f\xbc\x38\xcd\x25\xca\x9f\x5d\x4b\x63\x64\xa5\xf2\xdb\x4d\xe7\x1f\x9d\xbe\x36\x7d\x55\xa1\x60\x2e\x76\xe4\xe6\xb1\x91\x14\x2c\x72\x2a\x3d\xa1\x9b\x6d\x6f\x39\x59\x28\x1a\x6e\x57\x1c\xdf\xfd\xda\x45\xb8\x3d\xa6\xe7\x2b\xee\xc5\x8d\x62\xe4\x6e\x25\x18\xc2\x85\x69\x7c\xe4\x8f\xd8\xb0\x9b\x00\x12\x68\x12\x65\x5d\x48\xc3\xc0\xa7\x94\x20\x6b\x95\xa3\xa8\x19\x94\x10\xd1\x2a\x43\x1a\xbc\xca\xc0\xa3\x78\x3b\x8c\xc1\x14\x41\x96\x94\xed\x7c\x4c\x72\x12\xa3\xb4\xe2\x86\xf4\x24\x46\x24\x25\xa6\xe0\xed\x38\x06\x1f\x1d\xcd\x8b\xf2\xbd\x8a\x0f\x23\x05\x44\x91\xa7\xba\xac\x8e\x73\xba\x9c\xce\xba\xea\xea\x3a\xb7\xf0\x8a\x9c\x47\xc8\x4f\x0e\x18\xa6\x5a\x28\xf8\x9c\xd2\xf1\xf2\x55\x78\x8b\xc2\x7e\x58\xc8\x87\xb4\x1b\xf9\xa8\x76\x2e\x2f\xd3\xea\xa4\xe6\xf5\x54\x44\x9a\x32\xb0\x6e\xf4\x34\x3e\x1d\x4d\x8b\xa6\x4d\xa3\x40\x81\x8a\xf9\x7c\x28\x2d\x94\x16\x4b\x83\x37\x28\x27\xc4\x85\x94\x04\x1d\x0f\x74\x62\xdc\x86\xb8\x8b\x82\xab\x70\x95\xb9\x9f\xc2\x7e\xc5\xf2\xea\x69\x5b\xd7\x75\xfb\xda\x45\xe8\x51\x40\x90\x17\xa3\x5a\x65\x16\x25\x5c\xcf\xe8\xa6\x44\xe8\x1f\xce\x27\xa7\x75\xf3\xd7\xe3\x54\xc8\xfd\x20\xc9\xfd\x40\xd3\x8f\xca\xcb\x43\x77\x31\xb8\xa8\x07\x53\x41\xfd\x3d\x7b\x05\x24\x25\x8e\xed\xc4\xe4\x97\x1e\x14\xc2\xe7\xa1\x83\xb9\x0f\x53\x51\x8d\x8b\x56\x09\x2f\x7d\xdd\x09\xc9\x30\x96\x05\x69\xa4\x22\xde\xb7\xc7\x51\xd8\x73\x45\xb1\x90\x8a\xf4\x2f\xa3\x46\x62\xcf\x75\xef\x39\x5a\x89\x2f\x40\x21\xae\x83\xb7\x8a\x85\x43\x0b\x0f\x6c\x69\x28\x21\x7b\x97\xd4\x2c\x9a\xce\x4e\xcf\x98\x3e\x72\xe4\xc8\xe9\x23\x85\x27\xf8\x50\xff\x23\x7c\x9f\xf2\xca\xc8\xbe\x91\x23\x33\xfa\xfa\xfa\x6a\x4e\xf6\x1e\x17\x1a\x6a\x0e\xec\x3e\xf4\x0a\x09\x6f\xd5\x42\x21\xac\x83\x17\xd8\x64\x68\x39\xff\x4d\x5d\x68\xc9\x41\x0a\x1e\xdc\x01\xe9\x50\x21\xc7\x24\x72\xb9\x0e\xbe\x64\x6c\x36\xb3\xcb\xe2\xb5\x7a\x1d\x7e\xb7\xc7\xe3\xf1\x3b\x7c\x56\xaf\xd5\x65\xb6\xdb\x48\xa7\x72\x6b\x0f\xe3\xb1\x38\xcd\x36\x3b\xe9\x54\xda\xec\x16\xb7\xd5\x67\xf3\x3a\xfd\x1e\xb7\xd7\xed\xb3\x7b\xac\xe4\xaa\x43\x8c\xc3\x66\x75\x5a\x5d\x56\xb7\xdd\xe3\xf6\xb8\x3c\x5e\xa7\xc7\xe1\xb5\xbb\xad\x8e\x58\x81\x66\x1d\x63\xb3\x59\xdc\x36\x8f\xcd\xeb\xf0\x7a\x3c\x6e\xb7\xcf\xe1\xb1\x7a\x6d\x4e\x8b\x3d\x96\xfb\xf9\x64\xc6\x6e\xb5\xd8\xcd\x6e\xb3\xdb\xea\x73\x79\xdd\x5e\x9f\xdb\x6f\xf7\xdb\xbd\x16\x87\x95\x74\x2a\x5f\xb2\x31\x56\x8b\xd5\x6c\xb6\x78\x63\x3f\x7f\xc0\x67\xb5\x0a\x4e\x65\x77\x80\xb1\x5a\x2d\x66\x87\x60\x76\x58\x3c\x0e\xaf\x23\x96\xe5\xf2\xbb\xfc\x76\x57\xac\x4c\x68\x08\xbc\xcb\x60\x2e\x8e\x40\x2d\xae\x98\x26\x6c\xb3\x18\xeb\x6a\xea\x5d\xaf\x5d\x60\x8f\x17\xee\x29\xa8\x13\x40\x51\x0d\x7f\x79\x19\x16\xb1\xa7\xf3\x8e\x6c\xda\x2f\xf8\xaa\x1b\x5e\xdd\xfa\x1e\x99\x5e\x7d\xdf\x73\x4e\x36\xb8\x2a\xdd\xb7\x82\x5b\x91\x6e\xd1\xaf\x12\x9d\xf7\xbd\x9d\x5e\x2a\x6c\x7d\xba\xe1\x45\x5f\x29\xb9\x69\x7d\xde\xf2\x79\x2c\x2e\x84\xbf\xac\x00\x45\xa9\x50\x5c\x5a\xaa\xb3\x6c\xca\x2c\x9d\xac\x5b\xfe\x31\xb9\xf5\xc4\x22\xaf\x93\x5d\x74\x34\xc3\x29\xee\x2d\x6e\x9d\xe3\x64\x77\x3f\x08\x77\xef\x71\xb2\xae\x74\xe7\x6a\x3d\x5b\x62\x2c\xda\xe6\x13\x70\xc5\x05\x1c\x01\x5a\xc8\x65\x61\x2e\x05\xf1\x25\x76\xdc\x2f\x80\x24\xeb\xd2\xe2\xa6\x77\xd7\xdd\x00\xfa\xce\x50\x91\x49\x8a\x27\xb3\x9e\x9e\xff\x68\x4c\x6b\x78\xf4\xe9\x53\xef\x67\x89\x91\x49\x30\x9e\x0a\x2f\x65\x06\xc2\x76\x45\xb4\xb2\x36\xa5\x5a\x5f\xe8\x2f\xe2\x8a\x0a\xe3\xc6\x18\xda\x88\x16\xa6\x53\x20\x45\xb4\xf0\x3a\x2f\x6b\x41\x52\x0e\x84\xf9\x8a\x0d\x0b\xb1\xe1\x42\xc0\x04\xb8\x53\x9d\x74\x40\x4e\xa0\x40\x18\x0b\x69\x3c\xde\x01\xf4\x5d\x40\xab\x93\x8e\x02\xfd\x28\xd0\xaa\x40\x9a\xea\xa1\x34\x35\xa1\x0f\x2d\x66\x70\x17\x2e\xc6\x33\x58\x37\x5a\xc8\x7c\x14\x93\x4c\x0f\xa1\x02\x13\xf7\xa0\x62\xd1\xd2\xed\x8b\x39\xd5\xdc\xb4\x2d\x45\xad\x1d\xe2\xe1\x96\x97\x8e\xb2\x2a\x5f\xf3\xa7\xd9\x1f\x7f\xca\x82\xf9\x5d\xe8\x82\xe5\xf0\x80\xf0\xfa\xe1\x0f\x3a\x2f\xec\x24\xf7\x7e\xfe\xd5\xbe\x6f\x38\x95\x25\x0d\x6e\x01\x62\x09\xdc\xd2\xdd\x2d\x75\x73\x5e\x9f\xd3\xe1\x15\x55\x81\xc9\x52\x91\x2b\x2f\x7f\xb9\x61\xf9\x32\x76\x7e\x55\x56\xe3\x12\xa1\x6e\xb5\x84\xb7\x2d\x65\x81\x76\x33\x7d\x65\x90\xaa\x3b\x2b\xa8\x02\x69\xfa\x4e\x63\xcd\xfe\x23\x95\x47\x8f\xb0\xbf\xae\xfa\x14\x15\xc2\x9a\xb5\x86\xb5\x78\x33\x12\xc7\xf1\x16\x4e\xe5\x98\x8c\x89\xc3\xd6\xad\xba\x47\x54\x05\xd2\x1e\xdf\x3c\x7e\xdd\xb4\x17\x49\x2c\xc3\x69\x1a\x7c\x07\x0f\xb0\x2a\x4b\xda\x5f\xdb\x1f\x9f\xb0\x6c\xfb\xca\xa5\xac\x6a\x6e\xda\xa8\x0f\x1e\xfa\x41\x38\x79\x7c\xd7\x71\x20\x20\x29\x13\x14\xdc\xaf\x70\x9b\xb4\xef\x07\x11\x2e\x42\x12\x14\xc1\xaf\xf0\x39\x9b\x2c\xdf\x46\xe9\x78\x38\xc1\x04\x9c\x01\x5b\x40\x30\x35\x2f\x6e\xc9\xab\x7c\xa1\x73\xee\x9e\x79\x5d\x64\xdd\xb6\x8c\xdd\x9b\x67\x3d\x84\xcf\xcd\xe7\xb2\x36\xb4\xd7\xe4\x88\xf8\xfc\x4f\x38\x18\x06\x0f\x87\xe7\xc9\x92\xb6\xec\x7d\x3b\x4f\xc1\x73\x5f\x9e\x63\xf7\x6c\xe9\x2c\xda\x21\x6c\x3a\xbd\xf9\x6c\xc6\x19\x43\xd3\xf6\x13\xb9\x01\xd2\x63\x32\x39\x4d\xdc\xfa\x67\x8a\x8a\x37\x89\x8b\x73\x33\xe6\x65\x2f\x27\x33\xe6\xe4\xcf\x7e\x96\x1d\x7d\xf0\x91\x3d\xe3\x85\x96\x59\x3b\xe7\xec\xd5\x5e\xc5\x27\x60\x25\xae\x84\x27\xee\x7e\x6d\xe3\xeb\x59\xe7\xb6\x93\x9b\x2f\xfd\x73\xed\x37\xdc\x3b\x6f\x34\x76\xbe\x2e\x1e\x69\x3f\xdd\xd9\x7c\x82\xac\xed\xaa\x7b\x77\xff\x80\x81\xf2\xc0\x60\x17\xbe\x0a\xe7\xf9\xf8\x48\xd4\x3f\x60\x2f\x01\x3d\xa8\x61\xee\xa7\x9c\xd1\x7e\xe5\xbd\xff\x23\xf6\x70\x72\x44\x0f\x7b\xa9\x81\xf1\x2d\xd1\x42\xc1\x79\x5e\x8d\xc3\x95\x91\xc7\xe4\xfb\x1f\xba\xf4\xd0\xf8\xc8\x63\x91\xfb\x09\x75\xd2\xc7\x61\x49\x19\x04\xda\xcd\x97\xf3\x76\x1e\xae\x30\xdb\xf4\x0b\x0d\x39\xc2\x73\x5b\x70\xf0\x92\xa9\xdc\xb3\xb3\x76\xb6\xce\x14\x71\xeb\x27\x68\x04\xe3\x63\xb0\x95\xd4\xbd\x99\x75\xee\x1d\xf6\xe2\x71\x18\xfc\xf6\x6e\xa1\xb2\xed\x95\xe0\x0e\xce\xe7\x77\xda\x7d\x62\x83\xf9\x7d\x1c\x5e\xb7\x95\xac\xca\x6f\xd1\xe9\x56\xe0\x9d\xcf\xaf\x61\xf3\x1a\xb2\x2b\x0b\x84\xf7\x31\xe5\xf2\x18\x48\x79\x92\x34\x34\xb4\x17\x34\x75\xbf\x05\x77\x1e\xe6\x5a\x5b\xb7\x97\x35\x8a\x1d\x45\x30\xfc\x49\x7f\x01\xe9\xb6\x38\xcd\x16\x16\xa4\x50\x43\x1a\x9f\xd6\x9c\x9b\x70\x58\xad\xb8\x37\x51\xad\xd0\x86\x23\xcc\xdc\xec\x19\x05\xcf\x9b\xde\x39\xf4\xca\xf9\xb6\x0f\x66\xae\x7b\x26\x6b\x4a\x09\x79\x7e\xce\x23\xdd\xa3\x39\x9c\x86\xc3\xf0\x1e\x9c\x9a\xed\xc9\xf6\xe5\x88\xd8\x5c\x83\xe5\x40\xe3\x38\x58\x48\x6e\x5d\x52\xa4\x9d\xcd\x62\xd2\x99\x7b\xff\x35\x57\x58\xe0\x5e\x54\x9b\xde\x46\x3a\x9c\x76\x07\x8b\x63\x21\x11\x87\xc0\xbd\x5b\x04\x53\x56\xa6\x35\x93\xcb\xcd\x73\x7b\xf2\xc4\x1e\xa4\xe1\x96\xd1\x70\xb7\x8d\xd4\x60\x22\x8a\x0b\x71\x24\x97\x95\xed\xf2\x6c\x13\x1f\x84\xa1\xf0\xc4\x02\x98\xce\xc9\x97\xe1\x23\xb9\x4c\x9e\x54\xe3\xac\x71\xd4\x88\xe7\x8f\xbe\x76\xe6\x70\x1f\x99\x1c\xd5\x87\x6e\x81\x13\xf0\x39\xec\x4a\x80\x5f\xe0\xf5\xc4\xf0\x3c\x35\x71\x95\xf1\x66\x8d\xae\xc0\x41\x1c\xe6\xe2\x83\x28\xa0\x5f\xc4\x4c\xac\xc0\x13\x50\x11\x75\xc2\xeb\x21\x27\x04\x94\xdd\x70\x82\xc0\xa3\x30\x57\x71\xa9\xf5\x75\xb8\x4d\x80\xb1\x8a\xe4\xb1\x6a\xe2\x63\x75\x78\x04\x3c\x39\xd8\x09\x7b\xa0\xac\x2f\xf4\x38\xec\x51\x1d\xf9\x6f\x0b\x20\xa2\x2a\x1f\xbf\x86\x2c\xec\x81\xb3\xf7\x08\xdd\xa6\x9a\xb6\xa6\x46\xc7\x1b\x7d\xac\x13\x37\x2d\x5b\x0e\xbc\xe0\xdc\xf0\xe5\xa2\x56\xc1\xf9\xcc\xf1\x0f\x1c\x82\xf3\x43\xf3\x4b\x53\x84\x77\x90\x82\xa4\xbd\x87\x9b\x02\x27\x9a\xf6\xb6\x34\x91\x38\xa9\x11\xa7\xbd\x0d\xc7\xd8\x7f\xee\xbe\x70\xe2\x94\x50\xde\xb4\xed\xa3\x97\x7e\x23\xfb\x9a\x60\xc4\xbd\x4e\xb6\xfe\xdc\xdb\xd2\x5b\xdc\x5b\x6f\x1b\x0b\xcf\x89\x4e\x18\xf1\x43\x5f\x9e\xf0\xd2\x5d\xdb\x26\x96\xe7\x91\x27\xe6\xef\x9e\xf6\x08\x8b\xc7\xf1\xd9\xe7\x71\x52\xbe\xd0\x91\xd3\xb6\xec\xa9\x61\x8e\x47\xb3\xd9\xbc\x9a\x9c\xee\x80\x00\x67\x7f\x86\x2c\xe8\x81\xaf\x59\xd5\x91\x91\xbc\x10\xd9\x76\xed\x0b\xc6\x6e\x8d\x0d\xc9\x66\x8f\xcd\xe7\xf6\xba\x3d\x3e\x97\xdf\xee\xb7\x79\x2c\x76\x2b\xb9\x67\x23\x63\xb5\x9a\xdc\x16\x9f\xc5\xef\x08\x78\x3d\x5e\x6f\xc0\xee\xb3\xf8\xcc\x2e\x93\xd5\x46\xee\x5e\xce\x58\x6d\xe5\x1e\x4b\xc0\x12\x70\x56\xf8\x3c\x3e\x6f\x85\xcd\x6b\xf2\x99\x9c\xe5\x16\x2b\xf9\xd2\x4a\xc6\x6a\x31\xba\x4c\x01\x93\xdf\x2e\xf9\xbc\x5e\x9f\xe4\x08\x98\xfc\x66\xb7\xd1\x6a\x25\xcf\x64\x33\x76\xb3\xd1\x56\xee\x31\xba\xcd\x01\xb7\xdf\xed\x97\x3c\x15\x76\xc9\xe6\x37\xd9\xcd\xe4\x79\x0b\x63\x36\x59\x8c\x82\xc1\x61\xf2\x05\x58\x7f\xc0\x27\x09\x92\xab\xc2\x62\x62\xcf\x56\x32\x2e\xb3\xd9\x6c\xb4\x1b\xed\xe5\x5e\x87\xdf\x11\xf0\xfb\x25\xb7\xe4\xaa\xb0\xba\xcc\xe4\x7f\xfc\x3a\x42\x12\x68\xe3\xbe\x29\x87\xf8\xb0\x96\x81\x61\xbc\x80\xda\xa8\xe6\x9f\xbc\xdc\xaf\x5c\xca\x8f\x04\xad\x02\x06\x53\x28\x3d\xc8\xf7\x6d\xa4\xe0\xbe\xb8\xc3\x35\x2d\x93\x31\xe1\x5c\x8a\xbb\xc8\xa8\x15\x97\xe0\x7e\x4a\x1d\xea\xdd\x4c\xa9\x15\x93\x17\x53\x31\xa4\x22\xaf\x0e\xf5\x22\xcd\xa8\x15\x93\x61\x1a\x8f\x3a\x75\xa8\x0c\x74\xd0\x49\xa9\x71\x10\x03\xbb\x29\xf9\xea\x21\x3e\x72\x55\xd9\xc0\xab\xc3\x69\x40\x33\x31\x45\x16\x25\x45\x4c\x7f\x67\x16\xf0\x11\x5a\x11\x1b\xa8\x62\x4a\x79\x26\x2f\x4b\x78\x1b\x53\x08\x1b\x47\xc3\x32\x1c\x05\x23\x71\x24\x8c\xc2\x65\xdf\xe0\xc6\x7a\xd2\xee\x70\xda\xb9\xa2\x22\x73\x59\x99\x58\xa2\x37\x15\x16\xb0\xc8\x29\x37\xb5\x67\x75\xd9\x04\x38\x9b\x09\x16\xb4\xec\xc2\xb3\xe4\x26\xcf\xce\xec\x2e\x0e\x38\x45\x43\x7d\xa0\x26\x28\x06\xab\xfd\xf5\x8e\x06\x52\x96\xec\x4c\x01\xfc\x82\x23\xe0\x33\x74\x83\x0b\x5d\xe0\xc6\xcf\x60\x04\xfe\xd2\x40\x3a\x1c\x4e\x47\x0c\xab\x5e\x2f\x96\xea\x4d\x45\x05\x2c\x0e\x55\x6e\xda\xb1\x75\xaf\x5d\x90\x3f\xda\x28\xaf\x8e\xac\xee\x8a\x7c\x44\x6e\x74\x77\x6c\xdb\xcb\xc1\x50\x45\x43\x5d\xa0\x3a\x28\x56\xc7\xb0\xd6\x93\xc9\x4e\xa0\x21\x09\x34\x90\x04\x97\xe3\x02\x52\xc8\x04\x9a\x2b\xf1\x7b\x3a\x31\xdc\x0e\xfd\x0c\x78\x79\x90\x86\xc4\x8e\x49\xa8\xa9\xe3\xd5\x38\xb9\x8c\x82\xfe\xfe\x38\xc7\xa6\xf1\xd8\xaf\x54\xe3\x43\xb2\x8e\x81\xb1\x72\x2e\x51\xef\x6b\xac\x6e\xe0\x42\xad\x8a\x86\xc6\xd2\x42\x9f\x08\x63\x23\xb9\x04\x4c\x45\x0d\xb3\xb3\xbc\xb5\xbc\x5d\xc0\x45\xf2\x2f\xc4\xbb\xba\x67\x4f\x3c\xc9\x45\x5b\x15\x4f\x3e\xbb\xf8\x19\x9d\x88\x8b\x22\xbf\x10\xe5\xd9\xe5\xba\x2c\x16\xfb\xe3\xf1\x56\xcf\x53\xcd\x61\x0e\x6e\x4d\x80\x87\xa8\x43\x7c\x98\x66\x64\x5a\xf9\x31\x85\x1a\xd4\x62\x3f\xea\x22\x34\x17\xd1\x2d\xa3\x50\xbb\x9e\x87\x64\xc5\x33\xb8\xfd\x73\x9c\x7a\x16\xa7\x7e\x3d\x1e\xaa\xdc\x6f\x42\xf2\x5d\xff\x18\xfb\xe9\xbb\xa0\x9c\xf8\x49\x0f\x88\x70\xcb\x21\xf8\x31\x13\x0e\xe1\x0a\x98\x8a\xf7\x92\xed\x7c\x3c\x9e\x3f\x49\xbd\xf7\xc2\x99\xa7\x45\xa4\x23\x3f\x31\x58\x03\x4b\xd1\x0f\x04\x06\x3a\x48\x68\x55\x42\xa0\x03\xfc\xa0\x84\x1a\x58\x4a\x26\x37\xa3\xf4\x09\x3c\x0d\x34\x26\x41\x52\x4c\x6e\x1e\xbc\x80\x07\xfa\x93\x4f\x40\x0b\x3d\x40\xab\xde\x0e\x0f\x43\x0d\x03\x4b\xa8\xef\x29\x21\x3a\x1a\x7a\x18\x98\x06\xcb\xff\x05\x3b\x41\x66\x81\x81\x64\x98\x07\xb5\x50\x0b\xc9\x38\x0f\x19\x94\xff\x85\x3b\x61\x1a\x2e\x17\xe0\xf9\x21\x78\x2f\xdc\x81\x93\x41\x27\xe7\xb1\xa0\xc5\x71\xb0\x0e\x1b\xba\x05\x08\xf0\x82\x6a\x6f\x4c\x8c\x2c\xf1\x94\xfa\xf4\x22\x36\xac\xc1\x71\xb8\x0e\xb5\xac\xea\xed\x48\x1e\x4e\x46\x1d\xde\x8b\x77\x08\x03\x21\xb1\xb5\x0a\xd5\x3f\xf1\x2e\x50\xa2\x12\x98\x98\xf8\xfe\x01\xbf\x96\x52\x13\xe9\x21\x9a\x01\x01\xb8\xc6\x86\xc0\x4e\x73\x7b\xaa\xa9\x3d\xaf\x29\xdb\x8f\x73\x8e\xa7\xf4\xc2\xac\x40\xbb\x69\x67\x7e\x43\x6a\x41\x63\x56\x20\xdb\x84\xb3\x16\xa4\x2c\x81\x39\xe6\x38\x40\xea\xb6\xc0\x36\x53\x41\x3e\x72\x28\xa6\x20\x07\xe2\x00\x48\x6a\xb6\x39\x2f\xcf\x9c\xbd\x04\xe7\xa4\xe0\xac\xde\xec\x40\x96\xa9\x20\x3f\x35\xbf\xc0\x94\x15\xc8\xee\xc5\x59\x29\x38\x67\x49\x0c\xc0\x94\x9d\x6a\xce\x0e\x64\x35\x16\x80\x80\x5c\x0a\x0a\xc8\xc5\x40\xfc\xd9\xa9\x81\xec\xa6\xbc\x76\x33\xcc\x59\x92\xb2\x00\x67\x99\xe2\x20\xa9\x0d\xf9\x3b\x4d\xed\x01\x98\xd5\x9b\x72\x1c\xe7\xf8\xb3\x1b\xf3\x76\x98\x52\xdb\xcd\x3b\x03\x0d\x8d\xc0\x81\x90\x02\x1c\x0a\x44\x49\x75\x63\x79\x23\xe7\x0f\xb8\x5c\x7e\xb1\x3d\xd0\xd4\xe4\x6f\x3f\x0e\x73\x52\x60\xd6\x82\x76\x53\x0c\x30\x35\xd6\x34\x53\xfb\x02\x98\x95\x02\x73\x8e\xb7\xfb\x9b\x9a\x02\xed\xa9\xfe\x78\xd3\xc8\x64\x18\x15\x57\xbb\x43\x1a\xa0\x9b\x63\xea\xb6\x0a\x4e\x02\xad\xda\x7a\x40\x4e\xe4\x19\xd5\xfe\x8b\xf3\x29\x55\xde\x01\x1d\x2f\xf7\x33\x53\xe7\xcc\x99\x2a\xe0\x3f\x15\x03\xf3\x11\x50\xc4\xab\xb6\x1e\xb8\x3e\x1f\xf1\x97\x27\x96\x62\x92\x80\x0b\x70\x12\xd0\xf8\xd4\xc0\x34\xc4\x6f\xef\x7d\xd5\xdf\x27\xf6\x1c\x3d\x78\xb4\xab\xb7\xba\x39\xd8\x12\x6c\x21\x5b\xab\x5e\x01\xb2\x83\x53\xe5\x1d\xb8\xf4\x41\xc6\x48\x11\xe9\x91\xcf\xcf\x60\xe5\xfe\xff\xcc\x43\xfc\x39\x09\x11\xa1\x14\xb5\x3d\x81\x97\x0f\xb3\x30\x11\x99\x7f\xe1\x38\x41\xb5\xff\x22\xb2\xe9\x38\x69\xf4\x5c\x71\xcb\xd2\x8d\xab\xd6\xaf\x22\x37\x65\x4e\x7b\x78\x49\x4c\x69\xde\xc0\x8b\xaa\xad\x07\x6e\xcc\x3e\x9c\xff\x61\xdd\xf6\x73\xe2\xda\x5f\x7f\xdb\x0c\x49\x1c\x2c\xe2\x9b\x0f\x54\x1f\xf2\xbc\x44\xc2\x44\x05\xa4\x01\x09\x37\x43\x9a\x18\x6f\xf2\x49\x50\x8d\x06\x7a\x1a\x30\xab\x07\xda\x1e\xf7\x82\xca\x7c\x54\x4d\xa4\x03\xcd\xa8\xf6\x2d\xc4\xa7\xf0\x09\xa4\x71\x09\x87\x89\x53\x4e\x00\x25\xaa\x32\x8f\x34\xba\x1a\x3d\x0d\xc2\xca\x56\xdd\x99\xa3\x6c\x9b\xbf\x2d\xd8\x2c\xa8\xb6\x3e\xba\xb1\x33\xff\xd0\x31\xb6\xb3\xe6\x58\x73\x5b\x8c\x39\x53\xe7\xbc\x7e\xf1\xc2\xb9\x37\xde\x11\xe5\x7e\x85\x2a\xf7\xd1\xf3\x23\xdf\x02\x9a\xbd\xf2\x41\xe7\xa5\x9d\x27\x91\xd0\x05\x85\xa0\x2e\xa8\xab\xd9\xde\xb5\xe0\xe0\xb2\x9e\x65\xe4\x94\xbe\xf7\xc6\xfe\xc6\x75\x46\x69\x05\x48\x7d\xdf\xc7\x78\x0c\x87\x29\xd5\xd6\x47\xb1\x47\xb1\x64\xda\xe7\x5d\x99\xe2\xfa\x9e\x8d\x3d\x5b\x8e\x91\xdf\xcc\x4d\x87\x49\xc8\x72\x38\x0e\x19\x0d\x4e\x5c\x11\x48\xaf\x5d\x25\x46\x28\x05\x0a\x48\xe1\xcd\x28\x60\x1a\x90\x18\x6b\x19\x4c\x54\x78\x56\x56\xaf\x6e\x5e\x47\xaa\x32\x8f\xd8\x4b\x1c\xc5\x25\xec\xf4\xe6\xe9\x87\x16\x09\xaa\x7d\x0b\x1d\x16\x02\xe7\x39\x80\x1d\x0a\x33\x38\xb8\xe9\x6a\xe7\x81\x9f\x45\x55\xe6\xa3\x2d\xe7\x7e\x38\x70\x9e\x8b\xe9\x7f\x24\x25\x26\xdb\xa8\xff\xf5\x2a\x4c\xa1\x54\x5f\xa7\xdb\xf9\xe9\xdf\xf3\x21\x1f\xa3\xfa\x7a\x0e\x2e\x40\x1a\x27\xe1\x53\x6c\x46\x94\xee\x54\xfe\x36\xf6\xbd\x29\x7d\xc2\xb2\x9e\x65\x07\x17\x74\xe5\x56\x6f\x0f\x6e\x0f\x92\xba\x2a\x24\x5f\xe9\x60\x2f\x75\x7e\x70\x45\x50\x5d\xbe\x04\xf4\x5b\x23\xcf\x73\x72\xbf\xf2\x9d\x37\xce\x5d\x10\x54\x3f\xa6\x5f\x7c\x7d\xce\x54\x11\xff\xa9\x54\x41\x7a\x73\xdb\xb1\x9a\x4e\xee\xd8\xa1\xfc\x8d\x9d\x62\xb0\xb9\xcd\xdf\xc6\xa9\xbe\x9e\x73\xf4\x8c\x6e\x65\xab\xe8\x69\x68\x74\x37\x72\x70\xeb\xd1\x49\x48\x88\x40\xfb\x18\x98\x89\x89\xc0\xe0\x5c\xbb\xd0\xbd\x68\x7a\xf3\x74\xae\xa4\xd8\x61\x2f\x11\x55\x30\x67\x5d\xf3\xea\xea\x95\x1e\x12\x26\x2a\x21\x0d\x6f\x06\x12\xd3\x50\xc0\x9b\x91\x8a\xbf\x45\xca\xda\x55\xe9\x81\x15\x1c\x4e\xd4\xc4\xdd\x6f\x58\x98\x94\xfe\xcd\x5c\xf1\xd8\x96\x9e\x8d\x3d\xeb\x49\xd5\x8f\xe9\x5d\x99\x9f\x4f\x5b\xc2\x62\x8f\x32\x46\xe9\x31\x4a\x08\xd1\x71\x46\x40\x8f\xf2\xfc\x81\x1f\x5a\xce\x09\x07\x7f\xdd\xf3\x1b\x24\xb1\x31\xc6\xfc\x1f\x2f\xcc\x14\x4a\xe5\x1d\xe8\x1b\x98\xb8\x78\x0a\x52\x82\x2a\xb8\x2b\x3f\xdf\xe5\x29\x10\x57\xea\x5e\xd0\x2d\xe3\x72\x72\xfc\xc1\x5c\x71\x63\xc6\xea\xfc\xa5\xdc\xa6\x15\xb5\x4d\xdb\xe2\xed\xde\x7f\x20\xd6\x93\xa6\xcd\x3e\xf7\x8e\x20\xf7\x2b\x67\x3c\x3f\x12\x69\x6e\x64\xc6\x07\x97\x76\x02\x71\xb2\x35\x28\xb6\x06\x5b\x83\x2d\x35\xbd\x5d\x47\x0f\x1e\xed\x21\xfb\xfb\xbe\x7a\xef\x37\xb6\x53\xa9\xba\x70\x20\x44\x67\x28\x54\xde\x2c\x7c\x0a\x68\x7c\x02\x97\xb0\x48\x87\x24\x06\x8c\xfc\xd7\xbc\x2a\xb8\x0b\x9e\xe5\x45\x95\xf7\x00\x48\x51\x1f\x03\x37\x65\x5c\x5d\xf7\xb3\xb0\xfd\xdc\xba\x1f\xce\xb3\xd0\x13\xdf\x86\x25\xb8\x2b\x4a\xc7\x3a\x0a\xf6\x28\x97\x3c\x3c\x6d\x53\xa6\xb0\x6a\xfd\xaa\x8d\x4b\xb7\x90\xa3\xe7\xe2\xa4\x74\x64\x59\x1c\xf7\x05\x32\xf0\xf8\x4b\xc7\xfc\x75\xdd\x31\xb6\xa1\x00\x37\x23\x05\x02\xa4\xc1\xcd\x40\x42\x9a\xa0\xf2\x66\xc1\x44\x65\xb7\xf7\x68\xcd\xde\x46\x52\x75\xe1\x80\xbd\xa6\xd6\x51\xc3\xf5\xf5\x35\x1f\x3a\x29\xfa\x1c\x84\x6a\xff\x01\x98\xe7\xf8\x15\x58\x98\xc1\x26\x23\x7d\x95\x1f\xec\x04\x6f\xb8\x06\x24\xd5\xb3\x76\x1e\xca\xa8\x88\x43\x01\x73\x71\x2e\xa1\x3a\x12\xd4\xfb\x8b\x0a\x59\xd5\xb3\xf0\x32\x35\x66\x0c\xf4\x51\x78\x0d\xae\x8d\xb9\x0c\x37\xf1\x97\x2f\xc3\x35\xb8\x06\xa3\xa8\xeb\xf6\x83\xd7\x8d\x0a\x63\xa5\x64\x87\x42\x75\x04\x02\x54\x5f\xdc\x9e\xf0\x2a\x2f\xdf\x4e\x85\x6b\xc0\xab\x5a\xa8\x26\x88\x10\x0d\xc0\x8f\x19\x83\xd7\xf0\x1a\xa1\x3a\x32\x10\xf5\x59\xb5\x70\x20\xee\xf3\x98\xcb\x7f\x5a\x34\xc6\xcd\x1c\xe7\xc2\x5c\x22\x46\xc9\x5b\xbc\xec\x50\xe0\x5c\x98\x3b\x50\xed\xac\x78\x78\x8e\xcb\x63\x88\x01\xda\xc0\x3b\x44\x75\x24\x8d\xea\xe6\x63\x75\xc4\x4d\x17\x7d\x6a\x22\x29\xc4\xc4\xeb\x21\xf4\xfa\x22\xd8\xc5\xe3\x00\x2a\x65\x16\x2f\x3b\x94\x31\x1a\xa1\x8d\x82\x9b\xf8\x58\x0b\x2e\x5f\x86\x51\x54\x0c\xe1\x0d\x74\x3e\xc7\x19\x5e\xf5\x0d\xdc\xca\x23\x3d\xc0\x93\x38\xce\x39\x31\x9c\x2a\x00\x3e\x46\xf9\x98\x31\xd0\x16\xe7\xc4\x00\x41\x33\x29\x18\x68\xf6\x36\x3e\xe2\x50\xc6\xc8\x1e\x60\xcb\x00\x3a\xd7\x7f\xd0\x09\x60\x7b\x0d\xee\x01\x95\x5d\x02\xbe\x16\x06\xd7\x36\x34\xd6\xd7\x1e\x85\xb9\xa8\x81\x84\xd1\x35\xce\x1d\xbf\xd7\xbb\x5a\xf6\xc2\xf0\xc1\x4e\x38\x0e\xcf\x74\x7d\xfc\x99\xb1\xe5\x58\xc7\x0e\xe9\x78\x53\xc5\xab\xb9\x4d\x40\x4a\xaa\xcf\x46\xec\x2d\xfb\x7f\xda\x22\xa9\xfe\x39\x62\x6f\x19\xec\x8c\x34\x30\x55\x81\x06\xa9\xc6\x5a\x65\x93\xac\xa5\x46\x52\xf5\xfd\x88\xbd\x65\x66\xab\xd1\x6b\xb2\x4b\xf6\x6a\xab\xd5\xb8\xa3\x78\x63\x41\xa1\x9b\xac\x70\x64\x17\xbb\x58\xa3\x45\xef\x34\x19\xcb\xcb\xaa\xf2\x8b\xbd\xe6\x52\x5d\xc0\x50\x52\xa5\xdf\x5e\x58\x56\x6b\xb0\xfa\xca\x0c\x66\xaf\xd9\x65\x36\x59\xdd\xae\xa0\xc1\xe3\x20\x2d\x76\xab\xd5\xc2\xf9\x4a\xcb\x4a\x8c\xe5\x86\x72\x5d\xb9\xcd\x5e\x50\xa8\xcf\xee\x34\x91\x2e\xe7\x26\x87\x4b\x74\xeb\x7d\x1b\x72\xab\x0d\x3e\x73\x87\xad\xca\x16\x74\x38\xcb\x83\xa5\xc5\xf6\xaa\xb2\x00\x19\xa7\xbc\xcc\x5f\x64\x37\xfb\x8b\xcb\xca\x3c\xb6\x7a\x6b\x79\x85\xde\x61\xb3\x18\x8c\xee\x72\x7f\x69\xe5\xd6\xc2\xe2\x00\xe9\xf2\x5a\xed\x1e\xd1\xa6\x37\x05\xcc\xd6\x01\x8a\x4d\x16\xb3\xc1\x6c\xa9\xce\x2e\xc9\x71\x65\x91\x79\xd5\x1b\x1a\xcb\x04\xc9\xb2\xdb\x2e\x79\x6b\xfc\xf6\x2a\x5f\xd0\x57\xed\xf7\xd7\xba\x5e\x76\x6f\xda\x60\x29\xb0\x95\x3a\x8a\xed\x7a\xd2\xee\xf3\xb9\x7c\x9c\xd7\xe3\xf3\xb0\x7e\x43\x93\xcd\x1f\x0c\xe8\x6b\x8c\xee\x12\xb2\xc4\x5d\x5d\x9c\xcf\x95\xd4\x6d\xb5\xb8\xc5\xaa\xbc\x86\xf2\xa6\x4a\xb2\xdc\xb6\xbd\xcc\x2e\x18\xec\xf9\xcd\xde\x2a\x87\xd5\x66\xb3\xd9\x0d\xc1\x42\xbf\x31\x68\xf7\x64\xf5\xf8\xdd\x25\xe6\xad\x95\xa5\x81\xdc\x2a\xdb\xae\x6d\xd6\x02\x9b\xc5\x94\x5b\x41\x96\xf8\xf4\x95\x25\x81\x22\x69\xab\x64\x6e\x32\xd7\xb9\x1b\x8d\xb5\x64\xa5\xb9\xa0\xa9\x94\x0b\xea\x76\x7b\x6c\x62\x59\xf5\xea\x7d\x15\x4d\x6e\xcf\xf6\x0a\xab\xcb\x6b\x70\x95\xf9\x8c\x3e\x83\xdf\xe8\x37\x54\x15\xd4\x6e\xb7\x6f\x2f\xb5\x7a\x1b\xad\x15\xa6\xea\x7c\xa7\xa5\x86\x74\xbb\x5c\x4e\xb7\xcb\x55\x9f\x5d\xe3\x0d\x96\x54\x39\x9b\x0d\x35\xc6\xea\x62\x7f\xa9\x64\xf1\xac\x3f\x5a\xed\xc9\xb3\x18\x8e\x79\x82\xa4\xd3\xee\x74\xb1\xde\xa0\xe9\xcd\x3a\x57\x99\xc3\xb6\xd3\xe3\x73\x7b\x6b\x8b\x5d\x76\xbf\xc7\x5f\x61\x0f\xd8\x2a\xca\x02\x26\xbf\xcd\xbd\x7a\x87\xc3\xe1\x0d\x38\x02\x66\x1f\x99\x5f\x5c\xb9\xcb\xe0\xb1\xba\xac\x1e\xab\xf7\xec\xd7\x9f\xfe\xfd\x4a\x2f\xe9\xf2\x57\x38\x2b\xb8\x06\x7b\x65\x71\xb5\xd1\xed\xb3\x56\xd8\x7c\x9e\x8a\xa0\x3b\xe0\x96\x5c\xd5\xee\x0a\xab\x59\x32\x55\x98\x2a\x1c\x0e\x9b\xdd\x61\x2f\x93\x72\xf5\x06\x2b\x59\x6e\x35\x59\xca\x6d\x16\xbb\xcd\x69\x75\xc5\x9e\xd9\x67\x65\xbb\xeb\xf6\xd4\x74\x55\xf9\xad\x7e\x93\x64\x32\xfb\x9c\x3a\xb7\x95\xac\x2a\x6e\xab\xac\x75\x1c\x31\x1b\xff\x32\x2c\x60\x70\x16\x4b\x46\x49\x2a\xad\xf4\x4b\x6e\x6f\x83\xcf\xef\x09\xf8\xf4\x01\x9b\xdb\xe0\x5f\xe3\x69\x6c\x0d\x54\xb4\x5b\x2b\x2c\xa4\xea\xb3\x91\xaf\x94\x55\x99\x83\x65\xc5\x86\x80\xa3\xcb\x68\x29\x25\xfd\x1e\x9f\x54\xc1\x49\x0e\x77\xae\xd7\x52\x93\xdd\x76\xd2\x6b\x2f\x08\xec\x95\x24\x5b\xc0\x56\x95\x53\x1a\xab\xd8\xba\xaf\xac\xca\xe0\xda\x9e\xe7\x2a\x71\x15\x35\x96\x16\x93\xaa\xcf\xa6\xed\x2d\x33\x1a\xac\xc5\x46\x63\x49\x49\xbe\xab\xd0\x1d\x70\x6c\xd7\xd9\xad\x66\x93\xb5\xdc\x5e\x6e\x37\xb8\xcb\x2c\x86\x7a\x9f\xb4\xd9\xe4\x68\xf6\xd4\x3b\x9b\x4c\x03\x18\x6a\x2c\xcd\x66\x7f\xb1\xd7\xdf\x68\xf3\xdb\x83\x66\x57\xa9\xa7\xcc\x5b\x5c\x9d\x5d\x5f\xe1\x71\xb7\x54\x96\xfb\x49\xd5\x67\x77\xee\x2b\x2b\x0f\x18\x1b\x2a\x2a\x2b\xaa\x1a\x3d\xbe\x1a\xb2\xa2\x35\xc3\x56\xcf\x56\x56\x7b\x1c\x41\xa1\xb2\xb8\x29\x18\x10\x2a\xfd\xc7\x0d\x92\x59\x32\x77\x94\xbb\x8d\x03\xea\x4c\xbc\x83\x55\x98\x02\xc5\x25\x56\xc9\xbd\xc3\x50\x60\xf6\x7b\x7c\x76\xbf\x37\xe0\xf5\x06\x24\x8b\xdb\x51\xd5\xe2\x77\x48\x0e\x77\xa9\xd7\xec\x35\x56\xd9\xbc\x46\x32\x50\x68\x2b\x6a\x35\x07\xec\x8d\x55\x8e\x62\xd2\xeb\x75\x7b\x5c\xac\xab\xc4\x5f\x54\xef\x26\x9d\xce\x7c\xbb\x4d\x30\x1b\x8b\xdd\x46\x8b\xcd\x91\x93\xeb\xb1\x95\xd6\xe6\x3a\x0b\xad\x05\xb6\x42\x7b\xa1\xa9\xdc\x5a\x6e\x35\x9b\x6c\x56\x4b\x81\xc5\x51\xe9\xf6\x55\x55\xf8\x07\xfa\x10\x3e\x72\x2d\x81\x71\xf8\x1c\x95\x2e\xd6\x51\x57\x5f\xe5\xa8\x2d\xf3\xd8\xaa\xdc\x41\x77\x7d\x6d\x30\x58\x15\xac\xf2\xb4\xda\x6a\x2c\x6d\xce\x76\x6b\x9b\xcb\x5c\xef\xf6\x94\x7b\x03\x6e\xc9\x17\x20\xbd\xfe\x80\xdb\xef\xab\xf4\x37\xb7\x06\x4b\x2a\xf5\xd9\xa5\xd5\x65\xde\x0a\x6b\xb0\xa2\xa2\xae\xa1\x2a\xaf\xce\x52\x6f\xf1\x9b\xab\xcb\xac\xde\xa6\x80\xdb\x45\x36\x7a\x2b\xca\xaa\x0d\x35\x86\x16\x93\x3d\xaf\xd2\xee\xb7\x55\xd8\x2a\xac\x55\x6e\xbf\xf9\xc1\xfb\x31\x79\x1a\xf2\x39\x64\x72\x1a\xea\xd5\x8a\x8c\x84\x66\xb5\x62\x63\xa2\x4c\xf7\x65\x52\xa1\x14\xf9\x51\x06\xef\x7c\xf5\xee\xab\x2f\xc2\x9d\xd1\x89\xd1\x89\x29\x37\x2c\x3d\x7f\xc3\x41\xf0\x36\x15\x7a\x22\xf4\x04\x11\x4a\x96\xa7\x31\x4d\xfa\xda\xbc\x3c\x2c\xc6\xe1\xf9\x9b\x04\x9c\xff\x3b\x01\x3a\x25\x1c\x85\x89\x84\xe4\x0f\x54\x55\xb1\x41\xb3\x64\x08\x08\x3d\xb3\x46\xb5\x4c\xe1\x96\x50\x87\x79\x98\x0b\x93\xe0\x36\x98\x7a\x5e\xac\xea\x0c\xf6\x74\xb1\xc9\xff\x25\xf8\xc3\x8d\x7f\x84\x8a\xbb\x70\x85\xa5\x98\x92\x4a\x87\x68\xa4\x95\xd7\x24\x59\x02\x23\x15\xa1\x65\xe9\xc6\x92\x33\xd0\xd1\x7e\xe6\x28\x1f\x92\x92\xae\x1f\x92\xf1\x0f\xa4\x75\x3c\x74\xf3\x6a\xa2\x48\x9d\xf4\xd1\xf5\x60\x26\x6a\x1c\xa4\x80\x4b\xbc\x6c\x88\x18\x52\x22\x85\x4a\xd0\xf0\x02\xb4\xf0\xd7\x5d\xc7\x42\x85\x4a\xd9\x20\x1b\x6e\x04\x35\x69\x6e\xce\x1d\x88\x93\x96\x00\xc7\xa9\x8f\x78\x5a\x1d\xa2\xe1\x3c\x0f\xb4\x2c\x21\xad\x0c\xd1\x51\x9a\x89\x6a\x50\x33\x85\x12\xb0\xff\x2b\x0a\x34\x51\x4d\x44\x77\x8a\x8a\x4a\xb2\x8e\x41\xa9\x9b\x57\x84\x24\xf9\x2a\xb3\x90\xc2\xab\x90\xc0\xe3\x55\xe5\x3c\x2a\x42\x17\xf1\xca\xe4\x98\x7e\x93\x18\xce\x63\x60\x18\x0e\x23\xf4\xc1\x3a\xd3\xdb\x94\xac\xcd\xa7\x22\x5a\xc5\x36\x5d\x51\x8e\x41\x34\xe8\x7c\x5b\x1b\x0b\x62\xb9\x29\x08\xb1\x3f\x00\x0c\x83\x61\x71\xa2\x5a\x53\xdb\xe2\xad\x18\x88\xd0\x01\x59\x54\x3c\x12\x3a\x5c\x87\x3b\x4a\xfd\x5f\xdb\xac\x00\xcf\xc3\x51\x2a\x05\xe2\x3f\x04\x1c\x86\xc3\xe2\x31\x42\xc6\x50\xb2\x56\x09\x3c\x85\x03\x35\x01\x10\xd7\x23\xcf\xc1\x7d\x20\x52\x71\x47\x69\xf9\xab\x10\xcd\xbc\xf8\x41\xe6\x57\x97\xd9\x16\x77\x8b\xa7\x45\x28\x4e\x5f\x51\xbe\x0c\xb9\xa1\x97\x72\x39\x54\x79\xb0\x7d\x02\x26\x7e\xbb\xe4\x47\x11\x58\xc5\x3b\x9f\x7c\x7b\xe4\x57\x0f\x19\x3e\x1d\xbd\x83\x81\xdc\x05\xf0\x23\x1e\x15\x36\xe2\xed\x28\xe2\x52\x5c\x8a\xb7\x83\xb8\xf1\xcf\x0d\x08\xc6\xff\x7e\xff\xc0\x06\x04\xa0\xf9\xfd\x3b\x18\x2f\x5e\x93\xd4\x49\xd1\xb5\x7c\x48\x1b\xa1\x07\x02\x9a\xc9\xfd\xb8\x9d\xf9\xd4\x03\xed\xa8\x12\x72\x87\x8e\x47\x8e\x5b\xb6\xa2\xa2\x36\x5d\xf4\x6c\x77\x6f\xdf\xce\x8e\xc9\x1c\xfb\xe2\x64\xe1\x57\xdb\xb7\xcb\xdf\x79\x8c\x04\x56\xf1\xe3\xb7\xc7\x21\x51\x44\x5a\xfe\x6d\x2d\x9f\x9c\x86\x49\x30\x1f\xe7\xab\x15\xe9\xd7\x34\x30\x1f\x1f\x1e\x98\x54\x19\x5c\x07\x5a\xd4\x0e\x24\xce\xc3\x87\x60\x9e\x6a\xca\x20\x95\x71\x90\x9a\x38\x00\xfd\x8c\x7c\x1b\x4f\x14\x16\x64\x1b\xb3\xb9\xec\x6c\xa9\xa1\x40\xc4\x55\xb0\x9a\x28\x68\x30\xb4\xb7\xb3\xbb\x83\xad\xcd\x4d\xc2\xa6\xae\x8e\x35\xaf\x70\x33\x29\xd5\x1d\x83\x5e\x59\xd3\xb1\xa9\x4b\x68\x6e\x6a\xad\xda\xc5\xb5\xb7\x1b\x0a\x1a\x44\x58\x83\x6b\x88\x86\x82\xca\x9c\x6d\x6c\x74\x5e\x68\x3e\xb3\x45\xaf\xcb\xcd\x13\xba\x36\x6d\xed\x5e\xc8\xc5\x54\xe0\x85\xdd\x5b\xbb\x36\x89\xb9\x79\x3a\x43\xe6\x75\xfc\xaa\x29\x83\x70\x0d\xac\x81\x0c\xbe\xbd\xb2\xfd\x06\x96\x55\xb8\x3a\x86\x25\x3b\x9b\x0d\xab\xa2\xf3\x99\xbf\x67\xfe\x4d\xfb\x9a\x10\x03\x23\x4e\xcd\x7f\x72\xf7\x24\xee\xf1\x27\x33\xe6\x69\xc5\x71\x5f\x10\xa7\x5f\xeb\xfc\xe0\x63\xf6\xc3\xcc\xfe\xf9\xa7\x84\x38\xa5\xaa\x51\x65\xaf\xcd\x9f\xb2\xfb\x09\x4e\xa5\x2e\x9b\x34\x25\x73\xfe\x7c\x11\x47\xe0\x70\x62\xfe\x82\xcd\x4f\x4e\x62\x9f\xd8\xf5\xd4\x6b\x5a\x21\x4e\xe3\xfc\x53\xef\x6f\xf9\x90\xfb\xf8\xfd\xce\xd3\xaf\x89\x5f\x8c\x23\xe6\x69\x33\x26\x3f\xce\xaa\x5a\x06\x4d\xda\x35\xe5\xd4\x7c\x21\x4e\x80\xf6\x54\xff\x96\xbf\x73\xaa\x51\x65\x1f\xf6\xef\x3a\x75\x4a\x8c\x6f\x3f\x70\xaa\x77\xcf\xfb\x1f\xb2\x37\x6c\x7f\xca\x12\xd5\xca\x32\x99\x66\xe0\x79\x54\xc1\x28\x7c\xe2\x90\xb0\xe3\x50\xed\xb1\x57\xa0\x83\x9a\x3e\x57\xb7\x66\x85\x00\xb3\x9f\xc0\xe9\x70\x27\x6e\xe2\x80\xa0\x4a\x5c\xc5\xae\x12\x11\x47\x3d\x7d\x17\x3e\x88\xd3\x7a\xf9\x70\xbf\xe2\x5f\x54\x9a\x9d\x07\x3a\xe1\x0a\x95\xa8\x26\xe0\x0b\x26\xe2\x0c\xed\x25\xe4\xa1\x7d\xca\x2f\xf8\x88\xa4\x30\x50\x7d\x91\xa1\x8a\x88\x33\xba\x97\xc0\x5b\x26\xf7\xde\x0f\x77\x71\x16\x4a\x01\x77\xf5\x7e\x07\xb7\x4c\x16\xa3\x4d\xa1\x8d\x4c\xd3\x1e\xe2\x80\x52\x1e\x0a\x74\x64\xa8\x72\x9d\xb2\x69\x33\xb4\x47\x9e\x24\xa2\x4b\x15\xf1\xe8\x61\x9a\xb2\x5c\xb8\x0a\x9a\x78\x38\xff\xf8\xce\x08\x83\x5d\x30\x4e\xd6\xc2\x38\x57\x5f\x5f\x4c\x7f\x9e\x1c\xd6\x86\x68\x66\x26\x0f\xbd\xd3\x19\xd9\x2b\xdf\xdd\x50\x2d\xb5\xd8\x9b\x53\x6d\x2d\xa5\x8d\xf9\x95\x48\xf7\xa5\xf8\x8c\x06\xb7\x81\x2b\x2b\xb3\x59\x8c\x62\x74\x6a\xe4\x4e\xbc\xe9\x6d\xab\xdb\xea\xb6\xba\x52\xa5\x3d\xde\x2e\x5b\x97\xf1\x97\xa9\x3f\xe0\x4d\x17\xc9\x53\xe3\xef\xdb\xfd\x00\x37\x76\x52\xd6\x8b\xf3\xc4\x17\x5e\xcc\x9c\x14\x98\x28\xdd\x73\xf1\x5e\x48\x78\x86\x9c\x7f\xe9\x87\x2d\xdf\x72\xa7\x5f\xa9\x6a\x3a\x2c\xfa\x8d\x01\x93\x64\x86\xe4\x29\x29\xaa\xf2\x41\x98\x3c\xc5\x68\x36\x99\xcc\xc6\xd4\xa6\x15\x0b\xab\xe6\x71\x0f\xdc\xbb\x65\xfe\x78\x11\x13\x9e\x99\x7a\xaf\xf1\x1e\xd3\xc4\x5d\x93\xce\x2c\x20\x17\x9e\xfe\x30\xeb\x2b\x4e\x35\x7b\xd0\xb7\xdf\xef\x3e\x75\x49\x84\x9b\xde\xbd\xf8\xbd\xf4\x8b\xa7\xcb\xda\x65\xdc\xe3\x75\x79\xdd\x5e\x37\xdc\xf4\x76\x4a\x68\x6a\xe4\x4e\xc2\x22\x55\xd9\xaa\xb8\xca\x4a\xb7\x4f\x12\x81\xee\x6b\xac\xac\x6e\xf4\xb4\xa4\xba\x9b\x8d\x2d\x05\xd5\xa4\x1a\x97\x86\x86\x33\x39\xdb\x56\xe9\x97\x71\xaa\xb6\x41\xb3\x9e\x69\xea\x9e\x25\xe2\xa0\x0b\x6b\x7f\x3a\x77\x9a\x6c\xdb\xd1\x13\x3c\xca\xbd\xf1\x5e\xde\x9a\x73\x22\x0c\x9a\x76\x70\xf8\xac\x79\xe4\xf8\x68\x09\xb3\x66\xd6\xd3\x79\xb3\x39\xd5\xed\xbd\xcb\x56\x05\xdb\xb6\x89\xb3\x4e\x1f\xfc\x09\x06\x5d\x20\xbb\xcf\xbd\xdb\x74\x8e\x3b\xda\xa3\xcf\xd9\x21\x9e\x9b\xb7\x76\x38\x0e\x9a\x46\xc2\x54\x39\xc4\x48\x92\xdb\xed\x76\x79\x3c\xa9\x15\x01\x7f\x45\x45\xc5\x8e\x1d\x29\x1f\x2f\x2d\x29\x27\xf2\xf4\xa5\xb9\x3a\xb6\x4c\x09\x34\x4e\x60\x50\x33\x72\xdb\x8e\xf2\x0a\x73\x45\x79\x45\xaa\xcd\x6d\x77\xd9\x3d\xc6\x8a\x14\xd0\x5c\x21\x80\x50\x86\x24\xf9\x29\xa0\xa7\x47\x75\x91\x7e\x42\xbe\x1a\xa1\x99\xc8\xc7\xf0\x89\xcf\xed\x73\x79\xbc\xa9\xf0\x0c\x08\x72\x7d\x64\x14\x91\x0c\xde\x3f\xf7\x66\x91\x69\x58\xc9\x2f\xe0\x55\x3f\x1c\x50\x2b\x9a\xe1\x1c\x1f\xd1\x28\xd6\x2c\x2a\xd4\xad\x11\xe1\x53\xa5\x0a\xe6\x2c\x8d\x25\x2c\x78\x72\xf3\xba\x75\x62\x64\x54\x64\x14\xb1\x6e\xdd\xe6\x27\x17\xb0\x51\xcd\xe3\x94\xea\x87\x03\x72\x0f\xf6\xc0\x04\x5e\x9d\xd4\xab\x5c\xca\x47\x7a\x70\x23\xa3\xfa\xe1\x22\xbe\x8a\xaf\x2a\xf1\xdb\xd0\x24\x26\x7e\x25\x97\xe3\x4f\xcc\x40\x29\x94\x22\x52\x88\x8e\x47\x0c\x95\x35\x32\x1d\xd1\x28\x55\x3f\x1c\x08\xd1\xd7\xae\x32\xd7\xe8\x58\xba\x42\x05\x63\x06\xb2\x94\xb1\xcf\xcc\xed\xa0\x0a\x0f\x01\x06\x3c\x70\x7b\x82\x17\x68\x70\x00\x1d\x0a\x82\x2a\x51\x4d\x14\xc3\x48\xe6\x8b\x75\x97\x66\xbc\x29\x44\x3e\x92\x3f\x22\x0e\xad\x99\xdf\x3a\x8f\xc3\x9b\x1e\x7e\x18\x6f\xd2\xb6\x6a\x0f\xad\x11\xe5\xd1\x91\xd1\x84\xd9\x5f\x61\xad\xe0\x9a\xcf\x9c\x69\xae\x80\x28\x15\x19\x2d\x8f\x26\x8a\xeb\x0c\xcd\x2d\x6c\xf7\xae\x8e\x83\x2d\x2d\xc6\xe2\x3a\x41\xfe\x28\xf2\x11\x71\x70\x6d\xfb\x8b\x5a\x76\xfc\x8c\x19\xe3\xe7\x2f\x68\x3f\xb8\x56\x88\xd6\x87\x1a\x88\x25\xc7\xb7\xbe\x75\x81\x85\xbb\xe0\x26\x50\xc2\xdd\x17\xde\xda\xb2\xf4\xb8\x20\xff\x12\xf9\x35\x8e\x55\xe2\x9a\x4f\x9f\x1e\xc0\xfa\xb3\xfc\x0b\xf1\xb7\x29\xf7\xf5\xdc\xc3\xe1\x06\x7c\x0c\x27\xe2\x86\xe1\x2f\xdd\xf7\xde\x53\x62\xa8\x21\x5a\x4f\xcc\x7c\xf3\xd2\xda\x2f\x38\x18\x03\xb7\xc0\x2d\x30\x26\xbe\x90\x17\xf7\x94\x04\x29\x76\x7e\x95\x92\x25\xf8\x8d\x97\xe9\x21\x32\x1d\x92\x22\xb1\x8f\xed\x10\x59\xa3\x5c\xca\x47\xfb\xfb\xa8\x88\x06\xe9\x58\x9f\x8e\x68\x1e\xa7\xe4\xb8\x9b\x80\xb2\xa9\xbb\xa8\xa4\x46\x84\xbd\xb8\x97\xa8\x2e\xad\x5f\x95\xcf\x5e\xa3\x95\x11\x29\xac\xa9\xe3\x51\x3b\x30\xd9\x0a\xda\x81\xb9\xd6\x10\x9d\xc1\x5c\x0f\xe4\xd1\x05\x5d\xd7\x03\x79\x5c\xd3\x0c\xc4\x75\x54\x87\x7b\xb5\x7c\xdc\x10\x35\x7c\x35\x8d\x77\xfe\x9b\x82\xe1\x14\x7d\x69\x0e\x05\x5a\xc6\xc9\x87\xe8\xa4\xeb\x87\xe4\x66\xe7\xbf\xa9\xbe\x3c\x1b\xbf\x80\xcf\xe4\x65\x29\xe9\xfa\xce\x8c\x3a\x3e\xa2\x61\x9e\xa2\xe0\x4d\xea\x11\x4a\x9d\x14\xdf\xef\x51\x1d\x2e\x0b\x5f\xcd\xe4\xff\x8f\x9c\x90\xf6\xfd\xff\x76\x9f\xdc\x8c\x12\x24\xc0\x08\x90\xee\xfb\x1e\xe8\x1f\x76\x81\xd4\x08\x09\x40\xff\x30\xb8\xf3\xb7\x46\xb8\x65\x03\x0c\xc1\x9b\x41\x35\xec\xaa\xea\xf9\x32\xf9\x8e\x47\x98\x8b\x2b\x5e\x7d\xb6\x4e\xf8\x37\x28\x89\x2f\xf0\x73\x1c\xf5\x9b\x52\x75\x2a\xad\x57\xa9\x6a\x49\xeb\xec\x72\x77\x72\x0e\x65\xfa\x9a\x4d\x0b\xd7\x2f\xdb\x31\x2f\xa5\xc7\xd3\x67\x9b\xc7\xae\x5e\x57\xb8\x61\xed\xaa\xa6\xf6\x2c\xe1\x85\x71\x84\xea\x54\xda\xf2\x23\x7d\xb9\xe7\xb9\x5f\x3f\x7f\x13\x6e\x12\xdd\x21\x25\x73\xb7\x42\x75\x53\xda\x6c\x54\x29\x3d\x1f\xc1\x96\x2e\xb8\x97\xfd\xe1\xb1\xd7\x46\x4f\x9a\xb6\x66\xea\x26\xe1\xd2\x1c\xa2\xa3\x7e\xd7\xee\x7d\x5c\x57\x73\xc1\x46\xf1\x11\xcc\xdd\x8a\x33\xd9\x02\x4f\x81\xa7\x40\x80\x6b\x0a\x35\x61\x40\x0d\xdc\x42\xc5\xda\xf9\x21\xa3\xba\xa9\x0c\x07\x29\x54\xb7\xdf\x2e\xdf\x7b\x97\x12\xd5\xa8\x7a\x6f\x52\x63\x7d\x53\x6d\x55\x4b\xaa\x5b\xaf\x98\xe0\x98\x30\x81\x4d\x53\xa8\xe8\xc9\xf7\xc2\x17\x4a\x1d\x8f\x3d\x70\x0b\x15\xe3\x82\xea\xf6\xdb\xd5\x38\x19\x0e\x51\xa8\x55\xc6\x23\x77\xc5\x38\xa2\x22\xcb\x9e\x88\xfb\xef\xfc\x26\xef\x01\x3a\x34\x0c\x92\x6c\xbc\x5a\x71\x29\x44\x33\xea\xd0\xe4\xb1\x94\x5a\xd1\xbb\x91\x57\x63\x62\x1f\x13\x2a\x52\x64\x35\x64\xd4\xaf\xaf\x9f\xb6\xfb\x85\x96\x25\x35\x78\x77\xcf\xe8\x97\x57\x1c\x21\x57\x1c\xd9\x7e\xf4\x04\x7b\xb6\xe5\xc4\x91\x6e\xa1\xfb\xc8\xb9\xa6\x0f\xb9\x4f\xde\xdb\x32\xeb\x75\x71\xef\xfa\x7d\xd3\xf6\x0e\xaf\xb1\xa7\xfc\xd3\x1c\xf4\x10\x9e\x3a\x77\x6d\x0d\xfb\xb2\xe5\x9c\xf1\x63\xc1\xf4\xaa\xe9\x90\x69\xc7\x93\x6d\x73\xea\x56\x54\x90\xc1\x27\xb5\x81\xb5\x1c\x3e\x89\x77\xae\x1c\xff\x90\xf8\xd0\xf8\xe5\xf7\x60\x32\x3b\xbb\x6e\x46\xe7\xf3\x42\x6d\x66\x7d\x56\x63\x0e\x29\x7b\x51\x62\x2e\x6e\x3d\x9a\xd3\x92\x4f\x9e\x5a\xbc\xf3\xc5\x79\xec\xb2\xa2\xf4\xcd\xab\x85\x2d\xab\x57\x65\x2e\x2c\x24\x0b\x16\x2d\x35\xae\xe4\x96\x2e\x0f\xd4\xae\x16\x57\xd5\x6c\x68\xcc\x6c\xcb\x6c\xcb\xda\x93\xd3\x5d\xd6\x50\xf8\xca\xba\x4b\xf7\xd8\x53\x56\x28\xf3\xac\x1b\xdc\x8b\x04\xef\x48\xfb\x8b\xe5\x6c\xa9\xb2\xcc\x6b\xf2\x5a\x85\xca\xf2\x56\x63\x77\x19\xa4\xad\x4e\xc9\x7d\xff\x6d\xfb\x6b\xdc\x3f\xde\x09\xd4\xf4\x8a\xbd\xd5\x27\x5b\x4f\xee\x3e\xb1\x67\xff\xce\xb6\xd6\xae\xae\xd6\xbd\xb5\x07\xc8\x8e\x8b\xd5\xef\xfd\x8d\xed\xb2\xef\xb1\x74\x08\xc9\x4e\xb0\x21\x09\x64\xf8\xe4\xb7\x63\xbf\x79\xf8\x8b\xc1\xb0\x01\x8e\x84\x72\x21\xe9\xaf\xbf\xab\xdc\xaa\xf9\xc7\xd5\xc4\x5d\xcc\x67\xf6\x13\x25\x75\x3a\xb2\xaa\xc8\xff\x34\x0e\x66\xf1\x73\xe5\x30\xdf\xe3\x55\x5a\xa1\xf6\xb1\x8e\xe7\x0f\x2d\x3a\xb4\xe8\x8d\x55\x1f\x6f\x26\x37\x7f\xfc\xef\x62\xb8\x89\xfb\xee\x52\x55\x4b\xbf\xd8\xdf\xf2\xc6\xee\x13\x07\x8e\x1f\x3c\xd8\xb3\xe3\x70\xfd\xee\x9a\x9e\xca\x57\x2a\x5f\xa9\xfc\xd9\x02\x23\x49\x95\xa7\x44\x4e\x2e\x6f\x70\xb2\x8e\x76\x7b\x53\x35\xdb\xe8\xaf\x96\x24\xc1\xe7\xdb\xe9\x3b\x16\xd8\xe5\xea\xf0\xed\x0c\x90\xee\xa0\xbb\x52\x62\x25\x7b\xbd\xb5\x5d\x28\x70\xcf\x30\x3d\x6f\x9e\xe6\x49\xc5\x95\x95\xc4\x23\x0a\xfb\xc3\x35\xb6\x1f\xdd\xbb\x5c\x3b\xf4\x2d\xba\xd4\x9a\xe2\xc0\x16\x4f\xba\x77\x4e\x8a\x6a\x47\x2d\xe6\x56\x5b\x70\x1a\x3b\xd4\x34\xa9\x64\xb1\x60\xd8\x50\xb8\x66\xdb\x6a\x7d\xde\xf6\xdc\xcd\xba\xcd\x39\x9b\x8a\x36\x94\x91\xf9\x73\xa6\x1b\xa7\x71\x73\xe7\xd4\x76\xce\x16\x57\xb5\x64\xec\xd1\x75\x6f\x3e\x55\xf4\x8e\xf5\xd3\x12\xe8\x4a\x71\x40\x01\x51\xeb\x68\x6c\x63\x3f\xf2\x1e\x96\x2a\x85\xfa\xea\x1d\x15\x87\xb8\x97\x7b\x3c\xfe\x43\xa2\xa4\xb4\xf7\xb9\x6a\x08\x47\x71\xa6\x63\x25\x97\xee\x58\x6c\x9f\x6f\x27\x55\x95\x76\xed\x3c\xc7\x0b\x5c\xd1\x3c\xb7\xef\x01\xd1\xb3\x66\xad\x6b\x03\x57\x52\xea\x74\x94\x8a\x9e\x71\x84\x6a\x7e\xd0\x56\xeb\x6c\x70\x90\x6a\xe2\xa2\x3a\xac\x67\x26\xc4\xb7\x5d\x54\xb9\x35\xd4\x76\x4a\x4d\xf4\xbe\x10\x0f\x49\x4c\x43\xfa\x80\x29\x0c\x0d\x3f\xc7\x06\x2a\x8d\x9e\x97\xe9\xa4\x0e\x3e\x22\x85\xa4\xeb\x0e\x9d\x7f\x6e\x1c\x7c\x7d\xc7\xdf\xfe\x81\x1d\x7f\x51\xab\x94\xa5\x08\xbd\x93\x8a\x81\xee\xa4\x64\x3a\xe9\x61\x1e\x68\xe8\x8f\x6f\xef\xd8\xbb\x8c\xba\xd6\xbf\x9e\x57\x13\x93\xcf\x53\x69\xc3\xd5\x8a\xb5\x09\x3b\xd5\x8a\xb5\x89\xea\xa4\x9d\xe1\xd9\x4c\xda\xef\xf0\xff\x31\xf6\x26\xf0\x4d\x54\xdd\xff\x70\x6b\x9b\x99\x3c\xf3\x68\x51\x92\xe1\x69\x33\x99\x99\xb2\xca\xa6\x82\x14\x10\x41\x44\x41\x11\x2b\xc8\x12\x64\xdf\x97\xb6\x14\x4a\x0b\xe9\xbe\x25\x69\x9a\xb6\x99\xb4\x4d\xda\x49\xba\xef\x50\x28\xa5\xac\x95\x45\x41\x40\x59\xd4\x02\x22\x44\xf4\x51\x50\x14\xc1\xa5\x3e\x0a\x8a\x9e\x49\x4e\x52\xde\xcf\xa4\xe8\xe3\xef\xfd\xbd\xff\xf7\x7d\x3f\x4a\x27\x77\xe6\x9e\x7b\xcf\xdc\x99\x7b\xee\x39\x77\xce\xf9\x9e\xa3\x70\xf4\x8f\x48\x05\x3c\xd9\xaf\x36\xbf\x26\xb7\x82\xc3\xc5\xb0\x58\x51\x91\x9b\xe9\xc8\x60\x32\x02\x5f\xae\xb4\x5e\xaf\xd6\xeb\x55\xe4\xe6\xe6\x67\x66\x68\x32\x1c\x99\x15\xb9\x1c\x2c\xc6\xc5\x01\x57\x2c\xe8\xa6\x1c\x15\x15\xbc\x56\x41\x68\x15\x84\xa2\xa2\xc2\x51\x53\xab\xd1\x7a\x8f\xc2\x5c\x18\x4c\x81\x1d\xc3\xe9\xd7\x61\xe1\xeb\xb8\x10\x17\xca\xc7\x73\xb8\xf0\x1c\x2c\x84\x85\xe7\x14\x9e\x2d\xbe\x71\x30\x98\xf2\xa7\x78\x9e\x86\xc1\x54\x58\x23\xe4\xb1\x1e\x35\xdc\x64\xa5\x7f\x50\x2a\x80\xc9\xd4\xd9\x5e\x8b\xa8\x8d\x2c\x75\x54\x97\x94\x70\xb0\x00\x16\x28\x4a\x4a\xaa\x1d\xa5\x0c\x3c\x4d\xa8\x7e\x41\x91\xf4\xaa\x7d\xe2\x59\x0a\x44\xaf\x3b\x86\xea\x11\xc7\x52\x01\xa8\x80\x98\x25\xa9\x5b\xb6\xf0\x2a\x40\x99\x3d\x9d\xce\x39\x69\x9a\x06\xf6\xb0\x2f\xfc\xdb\x79\x9c\xef\x22\xfe\xf6\x6d\x46\xfd\xb7\xc2\xf1\x7f\x1b\x3f\x09\x2c\x13\x5d\x9e\xd1\x30\x11\xfe\x15\xf0\x03\x2b\x86\x61\x30\x0c\xec\x70\x1c\x66\x83\xbd\x37\x1a\x73\x04\xfb\xe7\x3e\x16\x7e\x04\x73\xb0\x19\x5a\xf0\x9f\x5c\xd1\x29\xdb\xf9\xaa\x33\x4a\xa1\xfa\x83\xaf\x40\xe2\xb6\x1c\x13\xdc\x82\x06\x88\x0b\x37\xae\x7f\xdc\xf1\xc6\x6b\x2f\x2d\x1f\xa0\x1f\xce\x4d\x48\x3b\x37\xe3\x0b\x06\x86\xfc\x07\x5e\x87\x24\x78\x0e\x09\xe8\x8b\xab\x31\x1b\x07\xe3\x8b\xf8\xc6\x2b\x0d\x4b\x77\xad\xe7\xab\x32\x8a\xf3\x2d\xa9\x05\xd9\x79\x71\x05\x39\x96\xd4\x4c\x73\x46\x99\x32\xf2\xf0\x22\xa0\x02\x5e\xbe\xf0\x1a\x54\x4b\x41\xf0\x16\xcc\xc7\x38\x4c\xc5\x77\x71\x12\x26\xa3\xf0\xcc\x73\x47\xde\x49\xe2\x96\xe3\x4b\xa6\x38\x41\x93\x39\x7b\xc3\xec\x84\x65\xca\x94\x8f\xaf\x18\x3e\x65\x7a\xf7\xee\x3e\xf3\x0c\x83\x09\xd0\x6f\x3f\x05\x43\x61\x28\xd8\xe0\x2d\x98\x05\x22\x3c\xcc\x42\x34\x91\xff\xae\xe9\x8f\xa6\xef\x64\x9e\xbf\x84\x7b\xdc\xd6\x63\xc2\x15\x41\x03\xa1\xe7\xbf\xba\x76\x69\xf7\x82\x99\x2f\xaf\x18\xa8\x1f\xc1\x3d\x9b\x76\x6e\xc6\xe7\x0c\x0c\xfa\x09\x66\xc2\x66\x98\x88\xa1\xf0\x28\xae\xc4\x0c\x1c\x84\xcf\xa3\xee\x95\x86\x65\x6d\xeb\xf9\xaa\xcc\x62\xb3\x25\x4d\xe6\xb9\x30\xc7\x92\x16\xe0\xb9\xff\xe1\x45\xa0\x84\x7e\x1a\xd8\x08\xaf\x42\x05\xf8\xe1\x10\xcc\xc3\xf5\x98\x8c\xef\xe0\xb3\xb8\x15\x0b\x27\x4c\x3e\xfc\x4e\x22\xb7\x02\xa7\xca\x3c\xa7\x4c\x98\xff\xec\x86\xa5\x4a\x4f\x1c\x4c\x65\x8f\xb1\xbf\x7e\xb3\x6e\xe6\x45\x6e\xe0\x10\xc5\x8e\x84\x45\xbb\x5e\x60\x30\x3c\x12\x83\x50\x83\x9a\x3f\x30\x08\xc2\x61\xe4\x69\x08\x7e\xaf\x9c\xc7\x4d\x10\x4e\x08\xd0\x43\x96\xa4\x95\xa4\x6e\x01\x86\x95\xda\x23\x59\xa9\xed\x49\x68\x86\x4b\x60\xc7\xf5\xb0\x1e\xbc\xd0\xdc\x57\x80\x76\x2d\xf1\x32\xac\x57\x5d\xd3\x2a\xea\x3c\x21\xf4\xdb\x96\x7d\xe6\x7d\x9c\xff\x15\x81\x40\xbb\x14\x45\x46\x66\x60\x30\xae\xc3\x43\x0c\x96\xe0\x4a\x58\x13\x48\xd7\x26\x1f\x4b\x60\xe0\x8f\xb3\x16\x9c\xe2\x61\x09\xcc\x53\xc0\xc3\xa8\xc6\x09\x57\x70\x31\xa3\x3a\xe6\x1b\x86\xd7\xf0\x9a\x6f\x98\x6f\x18\x5c\xc3\x6b\xd2\x30\x69\x22\x74\xc0\x71\x69\x3c\xef\x01\x08\xa3\x71\x1d\xac\xc3\xf5\xb8\x0e\xd7\xe1\x7a\x58\x87\xeb\x60\x3d\xac\x83\x75\x44\x18\x0c\x13\x40\xdd\x0d\x51\x52\xa7\x7c\x50\x07\xc3\x6e\xea\xf2\xe9\x80\x1a\xf2\x36\x15\xe2\x11\x25\x35\xdd\x0d\x6a\xe8\x2c\x22\x33\xb7\x64\x19\xb6\xa6\x4c\xfe\x22\x1c\x86\x02\xab\x00\xc2\xa7\x03\x75\xc0\x9f\x4d\x94\x6d\x93\x87\x20\x07\xd7\xe3\x7a\x7c\x08\x73\xf0\x55\x7c\x15\x1e\xc2\x1c\x90\x6f\xf4\x21\xc8\x81\x57\x39\x49\x44\x91\x86\x76\x56\x8b\x06\xa2\x99\xe5\x24\x91\x8c\x66\x79\x0b\x45\x98\x29\xce\x27\x92\xa0\xf6\xb8\x63\x28\xad\x27\x68\x2c\xa5\x45\xc3\x53\x6c\x26\x1b\x47\xf9\x73\xc1\x2d\xb9\x61\x01\xeb\x71\x9b\x02\x88\x0f\x62\xa0\x04\x6e\x3a\x87\xea\xb9\x0f\x6a\xaf\x18\xdc\x25\xb9\x43\x3c\x6a\xaf\x9b\xfe\x9e\xf2\xe9\x7c\x3a\x45\x6e\xae\x39\x33\x43\x03\x51\x2c\x27\xe9\x7c\x3a\x38\xf7\x67\x3d\x41\x72\x87\x48\x6e\x4f\x20\xfa\x55\x27\xe9\xde\x67\x7b\xd4\xe4\x95\x00\x94\xea\xc5\x00\x1e\x5c\xc0\xa7\x51\x08\x20\xa3\xbd\xcc\xaa\x9f\x81\xa8\x7e\x2d\x94\xf7\x9e\x47\xad\x45\x03\xe9\x11\xdb\x6b\x58\xdf\x3d\x0b\x25\xab\xa2\x04\x04\x30\xb7\x03\xa2\x6a\x23\x15\x10\x53\xfe\x5c\xad\x62\x4a\x2a\x2c\x60\x25\x9d\x49\x96\x66\x39\x94\x3f\x37\x3a\xc0\xa9\x7c\x22\xec\xaf\xcb\x1e\x99\xef\xc6\xc0\xee\xc8\x28\xd6\x73\x91\xde\xb4\x21\x2e\x21\x66\x0b\x4e\x44\x05\x4e\x42\x02\xc7\x23\xa5\x9c\x39\x7e\xe0\xf3\x18\x1c\x00\x5b\xc7\xe0\x81\x9f\x7e\x30\x9e\xc7\xf1\xf0\x4f\x9c\x04\x0a\x7c\x16\x14\xeb\xb7\xc5\xed\xdc\xb4\x5b\xe9\xdf\x73\x8a\xf2\xba\x43\x6f\xbe\x78\x25\x8a\x93\x05\x73\xe4\x1b\xe3\x87\x8d\xba\x83\x8a\xcb\x4b\x78\x78\x0a\x83\x60\x34\x06\xc1\x53\x18\xac\x5c\x7e\x1e\x1e\x7a\xea\x5a\x00\xf3\xfd\x1a\x3c\xf4\xdd\x91\xf3\x3c\x3c\x05\xc1\x30\x1a\x82\x60\x14\x04\x29\x6f\xbe\xff\xe5\x1d\x08\xd5\x84\x79\xc6\x41\x25\x4e\x84\x41\x7d\xeb\xe1\x4b\xcf\xcf\x70\x5d\x95\x08\x77\xbd\x03\x69\xfc\xb2\x67\x2b\x7c\x49\x34\x6a\x15\x8f\xd1\xaa\x7d\x3f\x59\x5f\xfa\x04\x15\x0c\x86\xbe\xf0\xc2\xf0\x91\x97\x9f\x87\x10\xbe\x58\x20\x80\xbc\xf2\xe9\x8f\x56\x5e\x1b\x5a\xe2\xdf\x44\xc3\x69\x1c\x07\x03\x70\x13\xa7\x4a\xc4\x97\x9f\x1b\x3a\x7d\x25\xaf\xda\x57\x0c\x83\xf0\x3a\x21\x94\x3e\x59\xd0\xd3\x8f\x13\xe0\xba\x74\x9c\x6c\x2b\xd9\x59\xde\xc4\x9d\x6d\x39\xf5\xfe\x6d\x06\xfe\xf9\xf6\x28\x8c\xe0\x7d\xad\x70\x9d\x0c\x83\x5f\xd8\x22\x16\x44\xd5\x3e\xd5\xa5\x13\xac\x6a\x1f\xb0\x6c\x00\x7e\xf5\x23\x4a\x75\x09\xfe\xc3\xaa\xf6\xe1\x34\x18\x02\x1b\x87\x40\x3a\x03\xb3\x03\xe8\xf7\xb9\x5a\xe2\xbd\xe0\x83\x5a\xe2\xbd\x10\x2d\xd1\xdd\x0f\x0a\x58\xbc\x0f\xf7\x1f\xc4\x4e\xaf\xdb\x98\x99\x98\xc8\x4b\x8f\xb1\xd0\x17\xfa\x2a\x44\xd1\x5e\x51\xa9\xa9\xb4\x54\x98\x44\x6e\x53\x5b\xd3\xe6\xa3\xcc\xf6\x66\x67\x5d\x3d\xbf\xb7\xe3\xed\xbd\xa7\x1e\x20\x89\xfb\x46\x4a\x23\x15\x75\xe9\x5b\x9c\x5b\x98\xf9\x31\x4b\x62\xe2\xf8\xf4\x34\xa3\x3e\x49\xb3\x6c\x47\x72\xdb\x26\x4e\x34\xe5\xda\x73\x98\x9c\x5c\x8b\xc9\xc4\xe3\x1d\xbc\xa3\x30\x99\x2c\xb9\x39\x9a\x1c\x7b\xae\x68\xe2\xda\x36\x25\xef\x58\xc6\x24\xe9\x8d\xe9\x69\x7c\x4c\xdc\x92\x98\xf9\x0f\x92\x32\x4a\x23\x7d\x23\xe1\x0d\xf6\xd4\xde\xb7\xf7\x76\xf0\x75\xf5\xce\xe6\xed\x9a\xa3\x9b\x9b\x36\xb5\x71\x26\xb1\xc2\x52\xc9\x54\x56\xd8\x45\x91\x97\xf9\x83\x26\x56\x91\x98\x98\xb9\x71\x9d\x26\xae\x2a\x10\xbe\x7e\xdf\x17\xf4\x57\x14\xf7\x1f\x10\x14\x08\xe2\x0e\xbc\xa2\xab\x59\x78\x9f\x9a\xce\x82\x4e\xd2\x4d\x67\xa5\x29\xbe\x64\xfa\xfc\xf2\x8e\x09\x29\xcf\x26\x0e\x1e\x30\x73\x50\xeb\xe0\xd6\x99\xf7\x5a\x7f\x6d\xba\x76\xe9\xdd\xcf\x1d\x77\xa4\xbe\xe1\x62\xc7\x9e\xc6\x0e\x93\x52\x20\x3b\x4c\x0d\xb1\x79\x71\x4a\xe9\x3d\xbc\x3b\x9d\xf5\xab\x3d\xea\xe9\xac\xa4\x43\xdd\x74\x16\xdc\x3e\x1d\x0d\x9f\xb0\x7f\xe6\xb0\xc4\x29\xc7\x70\xe2\x77\x38\x88\x4b\xaf\x68\x30\x34\x31\x5a\x45\x06\xd1\xd4\xe0\xaa\xab\xe0\xbf\x83\xc1\xc7\xe0\x59\x98\xf2\x20\xfa\x56\x84\xd5\xac\x57\xad\x0d\x35\xec\xa0\xfe\x8c\x82\xe3\x04\x32\x10\x08\x77\x00\xff\x68\xa0\x1a\x1b\x53\x1e\x24\x26\xf8\x9a\xf2\xe8\xe0\x7d\x16\xce\x43\x2d\x4e\xc3\xb5\xb8\x16\xe5\xe3\xf9\x05\x0b\xed\xe2\x22\xfe\x0d\xe7\x8a\x8d\xa9\xd9\x29\x39\x29\xb9\x11\x7b\xbe\x1a\xfe\x9e\x02\xd5\x9f\xbc\xf0\x3b\x3c\xa4\x81\xb5\x50\x0b\xd3\xe0\x3c\x07\xea\x50\xa8\x66\xf9\xb7\xd9\x3f\x23\x0b\x78\xcf\x87\x5a\xdc\x4c\xff\x15\x52\x60\x60\xc3\xfc\xf7\x51\x3c\xc8\x06\x0b\x5e\x55\x88\xf7\x1f\xde\xe5\xb4\x68\xca\x75\xe4\x30\x05\x05\x56\x6b\x01\xef\x8b\x1c\x06\xcf\x4b\x6b\x14\x25\x8e\x62\x87\x43\xd3\x9c\x5a\xbf\x85\x13\xf0\x1a\x99\x92\x9e\x93\x66\xe1\x71\x99\xff\x42\x61\x76\x69\x56\x85\x31\xc2\x5c\x5e\x51\xe0\x62\x4a\x4b\x05\x5b\x29\x2f\x0d\xbf\x83\x8b\xfc\xc7\x2c\x29\x95\x29\x4d\xe6\x08\xab\xdd\x6e\x2d\x65\xea\x6a\x9c\xd5\xe5\xbc\xb4\x4f\x1b\x9a\x5f\x56\x5d\x58\x6b\xa8\x88\x08\x6b\x94\xdc\xb2\xa0\xd4\x81\x5a\x12\xe1\x36\xa5\x4e\xcc\x64\xa1\x13\xc6\x50\x23\x40\x47\x7c\x4e\xf9\x44\xd0\x75\xbf\x40\x81\x9b\x5c\xca\xa2\xbb\x8b\x42\xf7\x24\xaa\x1b\x75\x3e\xf1\x0e\x85\xba\x11\xe4\x8d\xde\x2b\x23\x40\x27\x89\xa8\x1b\x41\xfc\xef\xb2\x2c\x93\xb4\x8a\x48\x88\x0a\x96\xd4\x00\x94\x57\xed\x59\x48\x97\xa5\xa4\x94\x26\x33\xc9\x29\x05\xe6\x14\xde\xf7\x19\xf9\xca\xac\x59\xaf\xbc\x32\xeb\xfd\x8b\x30\x8c\x42\x1e\xfe\x81\xff\x00\x1e\x78\xf8\x07\xfc\x03\x78\xce\x23\x4a\xc7\xe9\x92\x00\xba\xb7\x14\x36\xda\xa7\x80\x0d\x3e\x25\xe3\xa3\x7c\xc1\xb8\xc1\x17\xf6\x14\x6f\x2d\x12\x8a\x0a\x35\x07\x28\xb1\xac\xd4\x51\xc6\x9d\x3a\x73\x6a\xff\x97\xcc\x8f\xd7\xa1\x99\xad\x64\xaa\xe0\x1c\x7b\xed\xec\x8f\xcc\x8f\xd7\xa0\x99\xad\x62\x2a\xe1\x1c\x7b\xfd\xec\x8f\xcc\x97\xa7\xd6\xcd\x3f\xc3\xe7\x97\x95\x15\x88\xcc\x64\xca\x2f\x7a\xe2\x69\x08\x61\x87\x91\x8d\xb6\x26\x5b\x63\x63\x93\xb5\xf1\xe1\x41\x61\x8d\x30\x9a\x82\xb7\x29\xe9\x41\xf2\xe4\x07\x98\xf6\x77\x29\x8f\x88\x6a\xda\x42\x49\xbd\xb6\x6a\x94\x5f\x4d\xf8\xd5\x5a\x45\x63\x0d\xeb\xd7\x19\xa8\x2e\xb7\xfc\x86\x4c\x67\xa3\x49\x10\xfd\x51\x34\x9c\x20\xe1\x04\x9e\x50\x40\x1c\xaa\x1f\x98\xa8\xf2\xcc\x34\xb8\x72\xc5\x9c\xf2\x08\xb8\x46\x2e\x65\x7b\xdc\xf0\x04\x2b\x75\x06\x40\x26\xc3\xfc\xb9\xde\xce\x2e\x88\x82\x48\x16\x06\x82\x0a\xd2\x40\xf5\x6c\x20\xfc\x55\x75\x5b\xe5\xf5\xe8\xbd\x3a\x1a\x42\xf0\x5f\xc7\x9e\x7c\x99\x3d\x40\x9d\xfc\x23\xf1\xe5\x03\xd4\xcb\x14\x07\x51\xfd\xa2\x93\x5e\x59\xb5\x98\x4b\x4b\x4e\x4e\x49\xd5\x4f\x1b\xf7\xfa\xe3\x46\x54\x28\x31\x8d\x30\x82\xe2\xf5\x5f\xa6\xdd\x48\x6d\x4e\x6e\x4c\x6b\x52\xae\x3a\x96\x74\xb1\x4b\x03\x4b\x61\x05\x3c\x0c\x33\x38\xd5\x6d\x98\x01\x2b\xf0\x61\x5c\xca\x83\xba\x1f\x6c\xc3\x0a\x98\x86\x0e\x74\x60\x05\x4e\xc3\x6d\x83\x3a\x9e\xbe\xf4\x3c\xa7\xf2\x5e\x7a\xfe\x76\x64\x79\xa4\x32\x21\x23\x3d\x7e\x83\x66\xab\xa8\xaf\xc9\xe0\x32\x33\x4c\xfa\xad\x9a\x0d\xb5\x9b\x76\xa4\x73\x79\xd9\x96\x8c\x4c\x8d\xea\xf6\xab\xef\x6c\x3c\xc3\xcd\xd9\x7e\x66\xdd\x87\xcc\x87\x67\xf6\x9f\xd9\xce\x9f\x79\x67\xd7\xf9\x1a\x4b\x6d\x5e\x15\xbf\xa3\xae\xb6\x6d\xb7\xa6\xc5\xd4\x9c\x59\xcb\xd5\xd4\x8a\xcd\x2d\x9a\xdd\xe9\xed\x09\xb5\x5c\xf9\x1f\xb7\xff\xb8\xf4\xa9\xf2\xd2\xa7\x1d\xdf\xfe\xaa\x09\x6b\x04\x35\x7c\x4f\xc1\x28\x16\xee\xd1\x01\xa0\x2a\xad\xb7\x11\x74\x44\x5d\x56\x15\xb4\xb0\x79\x26\x4d\x5e\x49\x9e\x23\x9f\x83\x2b\xe8\x56\xe4\x97\x95\x17\x88\x4c\x5d\x55\x75\x2d\x0f\x3a\xad\x62\x25\x39\x99\xf2\xe8\x43\x77\xb2\x5a\x6f\x23\x39\x9e\xd2\x2a\x56\xa2\x8e\x08\x04\xca\x06\xf4\x00\x7d\x2f\x58\x67\x11\x2b\xdd\xa3\x4d\x05\x79\xf9\x66\x0e\x7f\xc3\xdf\x14\xf9\xf9\xa6\xc2\x3c\xc6\x94\x57\xe2\xc8\xe7\xf1\x1e\xdc\x53\xe4\x3b\x0a\xc5\x72\x4d\x6d\x55\x75\x1d\x07\x7a\xb8\x47\xc8\x03\x1b\xd8\x5e\xb8\x07\x7a\xe8\x66\x3d\x6a\xd4\xdb\x28\xb9\x41\xf1\xcf\x06\x3d\x51\x74\x46\x76\x56\x3a\x87\x7a\xbc\x47\xd4\xf5\x6e\x4a\xdc\x43\x3d\x29\x1b\x09\x62\x69\xb9\xa3\x8c\x87\xdf\xe0\x37\x85\xc3\x21\x96\x94\x33\x62\x79\x61\xbe\x83\x87\x7b\x78\x4f\xe1\xc8\x2f\x31\xe5\x69\x3c\x6a\xec\xb4\x51\x78\xbf\xd7\x09\x0f\x56\x53\xbd\x49\x3e\x51\x0f\xba\xc0\x03\xff\x4d\x52\x83\x6e\x2f\xab\xfa\xdd\x2b\xce\xa2\x61\xc9\x1a\xb8\x88\xa6\x13\xdc\xce\xe9\xe6\xe7\x5e\xd4\x7c\xbe\xfc\xd8\xb8\x51\x1a\x78\x81\xfd\x2b\x01\x02\xbc\xc0\x46\xb3\x5c\x17\xb9\xbb\x70\x77\x72\x2b\xa7\xc2\x19\xe3\x07\xae\x8b\x64\x22\x07\xee\xbf\x30\x9e\x4f\x4e\x2c\xdc\xb0\x41\x83\x2b\xc8\x4f\x13\x4f\xbc\xf8\xac\x46\xf5\x1b\x7c\x46\x5d\x7b\xc7\xfd\x59\x2b\x07\x2b\xc8\x4e\x47\x67\xcd\x7e\x0e\x4d\x0b\xd6\xe0\x45\x5c\x02\x59\x2c\xba\xbd\x8f\x3d\x48\x08\x82\xf7\x37\xb1\x50\x40\x81\x3b\x80\xd6\x05\xe2\x8f\x6c\x6f\x8a\x53\xd5\xf1\x20\x55\x8f\xa1\x88\xf5\xb8\xff\xc3\xf6\x83\x5c\x76\xfc\xc9\x97\xae\x26\x72\x3e\x1e\x32\x29\x08\x27\x61\x53\x2b\x4c\x84\x28\x98\xaf\x91\x44\x72\x0c\x9b\x6f\xb1\x5a\x2d\xdc\x81\xe4\x55\xad\x4b\x98\x7c\xea\xf4\xdc\xcb\xcd\x4d\x65\xae\x7a\xde\x37\x04\x32\x29\x69\x08\x69\xa8\x6f\x32\x37\x33\x0f\xfc\xcf\x96\xac\x4a\x5c\x9b\xcc\xab\x8e\x07\xd9\x2c\x16\x5b\x3e\xf3\x04\x15\x88\xac\x98\x0f\x13\x31\x0a\x36\x25\x72\x18\x4e\x62\x2c\x2c\xc3\x29\x5d\x2c\x4c\x81\x58\x4e\xe2\x49\x55\x8f\xe1\x6a\xeb\xc9\x8f\xbf\x92\x5f\xa0\x0e\x0a\x3a\x41\x0f\xb7\x29\xd0\x43\x67\x88\x47\x2d\xcb\xe9\xde\x8f\x2c\xfe\x7b\xfd\xa2\x21\x9b\xed\x22\x02\x5e\xc8\xa8\x86\x60\x16\xd5\x5a\x0c\xf2\x8a\xa4\xa4\xf6\x76\x42\x2e\x15\xad\xc5\xa0\x2e\x98\xc3\x86\x35\xfe\xcd\x85\xcd\x73\x1a\x3a\xe9\xff\x93\x6f\xda\x5f\x8e\x69\xdc\x7f\x1d\xd3\xfe\x1f\xdc\xd2\xfe\xa7\x53\x1a\x0c\x3b\xc0\xca\xcf\x55\xfe\x17\x7c\x90\xed\xf5\xd3\x54\xd3\xbb\x28\x2e\x5a\x52\x77\x11\xbf\x7f\x3d\xb6\x3f\xaf\xf5\x18\xfc\x22\x6d\xa6\xb8\xa2\x00\x1c\x6c\x97\x47\xa4\x21\x16\x7e\x62\x31\x96\xd3\xa2\x61\x2c\xe5\xd7\xc3\x17\xb2\x8c\x99\xc3\xb6\x77\x91\xdf\x50\x78\x1f\x78\x4a\x80\x15\x94\x47\xad\x55\x9c\x94\xa5\x98\x2f\x8a\x84\x0b\x6c\xc2\xce\xd8\xd8\x84\x84\x58\xee\x7f\x96\xfc\x6a\xf2\xd9\x13\x2f\x7e\x9a\xc8\xf9\x1b\xe0\x24\xe5\x69\x20\x3f\x6d\x3d\xe1\xbe\xa6\xf1\x88\x1e\x75\x0c\x85\x22\x01\xf3\x29\xde\xdf\x19\xcf\x82\xde\x27\x12\x81\x7b\x00\xf5\x55\x16\x45\x98\x20\x9b\xb4\x7f\x4f\x6f\xd0\x23\x62\x14\x3d\xf9\x41\xe0\xca\x50\xca\xa3\x47\x3d\xed\xd7\x8d\xa6\xe4\x13\x28\x86\xfe\xf9\x33\x0c\xef\xff\x49\xdd\x0b\xc5\xfe\xdf\xe4\x10\x6a\xd0\xff\x09\xc7\x2e\x76\xcd\xa2\x3c\xa2\x4f\x47\xd7\x66\x55\x67\x70\xd1\x44\x46\x56\x56\x06\x1f\x4d\x66\x54\x67\xd5\x72\x5d\x44\x6d\x75\x75\x2d\x8f\x22\xb8\x67\xb0\xff\x3f\x2a\xfd\x7f\x5c\x1e\xc7\xbe\x4c\xf1\x28\x6a\xbd\x37\x60\x39\x3b\x9b\xb2\x50\x5a\x6f\x10\x09\x6a\x2d\x31\x25\x86\xd2\xa2\xac\xae\x7b\x0c\x4f\xb1\x45\x6c\x1c\x15\xe0\x5c\x16\xfe\x45\x54\x60\xe7\x18\xd4\x3f\x07\x6e\x43\x05\xf3\xff\x27\xef\xe3\x58\x95\x72\xda\x64\x0a\x45\x7f\x27\x2c\x0f\xa8\xde\xf1\x93\x28\x49\xf7\x02\xa5\x32\x2b\xda\x41\x94\x75\x6e\x9f\x5a\x1b\xda\x18\x40\x0f\xe8\x46\xf5\x08\xb2\x2e\x80\x23\xe0\xee\xc5\x11\x18\x01\xea\x6e\x37\xa5\xa2\x74\x5d\xbd\xbb\x99\xaa\x82\x97\x24\xb1\x3d\x86\x42\x37\x74\x12\xaa\xc4\x5d\x4b\x59\x9f\xae\x8b\xc2\x4e\xd8\x13\x88\x76\xed\x65\x0e\x86\xf5\x9a\xed\x32\x7f\x37\x59\x50\xf7\xe2\x4f\xf4\xa6\x8e\x16\x55\x9e\x46\x98\x4c\x4d\x67\x1f\xd8\xf1\x36\x87\xdd\x55\x62\x97\xed\xf8\x70\xd5\x1f\x27\xed\xa5\xae\x52\x87\x4d\x09\x4f\xa3\x48\xc8\x86\xfc\x74\x16\xd4\x9e\xa8\xf3\x2c\x04\x07\x32\xc3\x40\x37\x1b\x80\xd7\x92\x3a\x69\x95\xa7\x31\x00\x00\x3a\x96\x42\x37\x46\x91\xb1\x8b\x03\x06\xfe\x1f\x27\x03\x16\xfe\x96\x2d\xa9\x8b\x63\x35\xbe\x28\xd2\x48\x41\xc0\xa4\x27\x90\x84\x01\x30\x00\x88\xfa\x80\x91\x6f\xa6\x1e\xfc\x06\x5d\x1c\xd5\x78\xa0\x17\x3a\x4f\x0d\x6a\xe9\x51\xaa\x1b\xa2\x60\x37\x25\x40\x54\xb7\xcc\xaa\xa1\x88\x95\xa2\xce\xb3\xaa\x3f\x0c\xff\xe5\x40\xe5\x31\xa0\x8e\x54\xfd\x61\xf0\xab\x3d\x7a\xfa\xc1\x2c\x56\x79\x0c\x3d\xea\x7e\xf1\x90\xcd\xb6\x13\xda\xd0\x46\x79\x26\x47\xc9\x33\x39\x4a\x9e\xc9\x6e\x12\xee\x05\x66\x72\xbc\x16\x83\xda\x7b\xe3\xcc\x85\x76\xd0\x81\x18\x0f\x62\xbc\x14\xc2\xb6\xf7\x95\xc5\xb6\x6a\xb7\x96\x34\x48\x6e\x5a\x10\xda\xb1\xb3\x8b\xc3\x7b\xed\xa8\xef\x52\x44\x13\x78\x14\xee\x29\x2e\x49\x8f\x50\x23\x08\x8c\x22\xa2\xe3\xbb\x7c\x51\x84\xea\x1a\x46\x11\xa8\x03\xbd\x62\x04\x11\x1f\xaf\x40\x5d\x7b\x3c\xa8\xf3\x48\xd4\x6d\x55\xa0\x9a\x04\xdd\x56\x45\x1e\xaa\xe3\xe3\x51\x47\xb6\xc7\x2b\x54\xbb\xbb\x09\x90\xeb\x42\x94\x2f\x2a\x3a\xbe\x8b\x80\x28\xa2\x5b\x7a\x84\x7a\x99\x00\xb9\xe9\x2e\x02\xf4\x5d\x70\xaf\x5d\x01\x9d\x5d\x42\xbb\x10\x08\x92\x0f\x24\xc8\x09\x96\x1f\x5a\x6f\xe4\x78\x56\x8c\x30\x99\x99\x36\xf7\xf4\x65\x5e\x08\x7c\xbe\xd6\x80\xe8\x53\x13\x5e\xf9\x8d\x47\x35\xe8\x14\x9e\x4e\xb2\xab\x3d\x1e\x74\x8a\x1e\x1d\x11\x8f\x6a\x85\x4f\x2f\x1f\xba\xa2\x15\xe8\x96\xe5\xe2\x14\x94\x65\xa2\xeb\x77\xc1\xc5\xa0\x1a\x75\x0a\xd4\xc1\x5b\x6c\x58\x20\x3a\x42\x47\x27\xca\xba\xb1\x88\x6e\x32\x91\xf5\xaa\x93\x58\x74\x4b\x22\xb8\x93\x64\xab\x11\x44\x6f\x54\x64\x6f\x10\x85\x41\x7e\xce\x6e\x42\xae\x8b\xee\x00\x6a\x9d\x1b\xdc\x44\xac\xfc\x22\xba\x49\x28\xa3\xa4\xce\x48\xd6\x9f\xfb\x99\x37\x23\xf8\x88\x77\x71\x88\x87\x84\x28\xfa\x3a\xe5\x63\xa5\xc0\x7f\x4e\xaa\xbc\x40\x8c\xa7\x24\x75\xbf\xff\x75\x2e\xac\x97\xa8\xd2\xbb\x38\x44\xfa\x4e\x72\xd3\x76\xb9\x96\x9d\x0a\xf3\xdd\x87\xfe\xde\xc5\xd0\xc1\x82\x9e\x7e\x8d\x95\xd4\xa1\xaf\xb1\xf2\xb9\x17\x02\xe7\x3c\x51\x74\xb4\x6c\x7d\x46\x53\x61\x3d\xf7\x03\x7d\x4a\x9f\x87\x78\x48\xaf\x9e\x16\x0b\xca\xe3\xa9\xbf\x77\xf2\xa0\x42\xa5\xf4\x79\x6f\xfb\x9f\x52\x8b\x16\x29\xf2\xf3\x0b\x4c\x79\x9a\xbc\x52\x93\x23\x9f\x93\x58\x1f\x2b\xa9\xa8\x07\xe7\x4c\xa5\xb2\x2a\x71\x7c\xd1\xce\x00\x07\x4d\xd2\xe7\x32\x07\xf7\xe8\xde\xce\x4f\x05\x8a\x9e\x4e\x3a\x9a\x0a\x83\x61\xb0\xb6\xd7\x6b\x20\x93\x95\x3a\x6b\x58\x68\xa3\x3c\x6e\x89\xec\x45\x78\x0d\xe4\x85\xf0\xb8\xff\xcc\x7b\xd5\xe3\x8e\x61\xa5\x4e\x22\x2a\x7a\xfa\x7a\x88\xa1\x24\x71\x14\xb5\x27\xfa\xca\x0d\x8d\xd4\xf9\xa1\xac\x34\x74\x8f\x00\x5d\x74\x57\x17\xa8\x21\x8d\xea\x2b\xcf\x83\x00\xf4\xe5\x72\x29\x0a\x44\xda\xeb\x5e\x2c\x8b\x73\x9e\xed\x71\x2f\xa3\xfc\xba\x18\x36\xde\x73\x8f\x7e\x99\xe2\xbc\x6e\x98\xce\xfa\x75\x64\x1d\xdb\xe3\x36\x04\xd4\x1a\x3d\xad\xf5\x9c\x24\x30\x6a\x04\xf1\xc6\x95\x95\x37\x39\x2d\x31\x85\xb8\x79\xe5\xd0\x49\xbe\x9b\x54\xbd\xd3\x13\x3a\x82\x86\x2d\x14\x90\xf2\x5d\x08\x5d\xa0\xee\x82\x79\x14\x14\x50\x21\x30\x99\x4a\x90\x75\xd8\xa8\x1a\xd6\xef\x36\x50\x5e\x9d\x9b\xf2\xb8\x21\x89\xf5\xbb\x7b\x99\xf6\xb8\x3f\xa4\x7a\x72\x85\xb7\x21\xea\x6d\x8f\xd8\xdd\x2e\xeb\xb9\xdd\x92\xbb\x3b\x44\x5a\x0b\x6a\x7a\x45\x4c\xcc\x0a\xf8\x8a\xe2\x60\xad\x4c\xef\x13\x0d\x94\x47\xe7\xa6\x24\xb1\x97\x33\xd4\x79\xbe\x95\x97\x4a\x0e\xb6\x50\x3c\x74\xd6\xdc\x62\x65\x83\xa0\x47\x24\x7b\x17\x3f\xf1\x2a\x7b\x88\xf5\x88\xda\xd0\xc6\x09\x6c\x64\x63\x8a\x85\xda\x4f\x49\xc1\x6c\x00\x3a\xab\x9d\xf5\xaa\x25\x75\x3b\x1b\x48\x2c\x15\x0c\xd7\x1f\x5c\xd0\x86\x9e\xdc\xcd\x7a\xd5\x1e\xdd\x6e\x36\xac\x11\x75\x20\x2e\x02\x11\x2c\x20\x4a\xb7\x53\xfb\x76\x41\x13\x7b\x90\xd5\x7a\x67\x3d\x38\xa5\x03\x51\xa5\x0f\x92\x9a\x61\x00\x2d\xab\x0e\x2f\xcd\x99\x3b\x4d\xee\xf6\xf2\xe9\x33\x1f\x73\x92\x05\x57\xd3\x2f\xb2\x7e\x9d\x47\x47\xbf\xc8\x6a\x43\x0f\xf8\x2c\xf4\xe5\x39\xa7\x5f\x8a\x65\x5f\x3a\x3d\xe7\x32\xf4\xb0\x3d\x0b\xbd\x69\xf4\xcd\xa9\x57\xc6\x24\x52\x63\xae\x4c\xbd\xc9\xa9\x5e\x0c\x5a\x43\x69\x43\xcb\x7c\x16\x99\x4c\xed\xd1\xd1\x70\x83\xe2\x54\x6d\x41\xd0\x43\x49\xad\xb8\x9a\x86\x3e\x43\xee\x60\x1f\x7c\xf4\xf1\x21\xd8\x07\xd6\x51\x9c\x2a\xd1\x00\x7d\xee\xfc\x02\x8f\x3e\x80\x38\x51\xd3\x91\xd4\x03\x60\x32\x2d\x31\x3c\x00\x4d\x26\x45\xd1\x10\x6a\x00\x72\xd5\xef\x1c\xfc\x07\x79\xdf\xc8\x33\x78\x8d\x41\x3d\x88\xc4\xf7\x94\x4f\xf4\x89\x7f\xdf\xdb\x11\x7d\xe2\x07\xf2\x22\xa3\x27\xa5\xa9\xb0\xf7\x19\x5f\xd2\xea\xa2\xd5\x85\xab\x79\x6b\x66\x41\x7a\xa6\x26\xad\x22\xb3\xa1\xaa\xac\xcc\x59\xc6\x55\x37\xba\xda\x5d\xcd\xca\xd3\xa0\xfe\x18\xa2\x21\x52\x13\x16\x89\xea\x1f\x83\x05\xd0\x43\x94\xac\x3c\x47\x81\x5e\x56\x7b\xdc\x34\xac\x60\x3d\xea\x7e\xb0\x82\x85\xa8\x7e\x78\x16\x77\x2f\xc5\x42\x0e\x27\x11\x58\x88\xbb\xdf\x82\xb3\xf0\xc4\xf7\xc0\xc0\xf8\x0b\x5d\xb9\xa6\xf3\x7c\xde\x89\x13\x85\x27\x99\x93\x27\x4a\xca\x4f\xf0\xe2\x85\x0f\x2b\x2e\x30\x30\xfe\x7b\x64\xf0\x09\x1e\xf4\x30\x8d\x86\x21\x6b\x80\x1f\x01\x0a\xae\xee\x94\x78\xfa\xb4\xe6\x6a\xc6\xd5\xb8\x8f\x38\x1c\x35\xe4\x95\x27\xf1\x9f\x7c\xd3\xa8\x91\xce\x27\x98\x81\x03\x0d\x5b\x87\xf0\x3f\xe0\xc3\x43\x2e\xe1\xd3\x4c\xdc\xf4\x8c\x29\x53\x34\x73\xc5\x39\x75\x3a\x6e\x04\x86\xae\x41\x0e\x87\x68\x30\xc4\x85\xff\x7c\x67\x08\x87\xcd\xc0\x4a\xb4\x1e\x6a\x19\xa8\x84\xfb\xdb\xa1\x01\xc2\xf9\xe3\x77\x5d\x40\x41\x48\x20\x5b\x99\xda\xab\x06\x9a\x95\xc4\xc0\x3c\x09\x99\x4d\x81\xbe\x17\x8b\x0c\x3e\xa0\xde\x58\x79\xe8\x24\xef\xd5\xc1\x72\x79\xae\x7c\x47\xf9\x75\xf2\xec\xd3\xfd\x1f\x00\x46\x02\xe8\x13\x81\xd5\x30\xd0\xda\xcb\x2c\x14\x05\x82\x5b\x7e\x97\xee\xd2\x59\xa6\x1c\x93\x81\xc3\xb7\xf0\xbe\x62\x55\xdc\x4b\x1b\xde\x60\x7a\xdc\x44\xf2\xc6\xb2\x1d\xd5\x62\xa5\x58\xc1\xc3\x5b\x70\x5f\xd1\xd9\xf1\xf1\xee\x93\x8c\xd7\x4d\x34\xed\x32\x6f\xe6\xb5\x28\xc0\x78\x7a\x54\xe4\xc2\x69\x73\x78\x14\xf1\x23\x85\xe7\x07\x58\x4e\x49\x6e\xf8\x8e\xc2\x28\x52\x2a\xc2\xf1\x74\x8b\xa5\xd9\xd8\xc8\x75\x6d\x9a\xbe\x6b\x3a\x83\xb2\xfa\x9e\x1d\xc0\x26\x79\xc0\x96\xd7\x4d\xdc\x82\xe0\x13\x1f\x9f\xe6\xe1\x6d\xb8\xaf\x68\xed\xa8\x7f\xf3\x70\x6f\x92\x46\x54\xc3\x9b\x94\xa4\xfb\x8c\xd5\x86\x26\x48\xab\x68\x57\x47\xda\x9e\x0d\xae\x38\x57\x4c\x9a\x21\x4e\x19\xb9\x61\xe8\x54\x0c\x65\x30\x74\xe8\x95\x3f\x36\xf0\x86\x8e\x98\xfa\x0d\x86\x38\x43\x5a\xac\x2b\x4e\x89\x63\x8f\xc3\xe3\x18\x04\xcf\x31\xf0\x1c\x3c\x0e\x41\x30\xf6\x38\xef\x33\x49\xd3\x9f\xa1\x36\xb1\x92\x0e\xe2\xa8\x40\x83\x70\x8e\x86\xb1\x8b\xf0\x71\x08\xc2\xe7\x18\x7c\x0e\x1f\xc7\x20\x1c\xbb\x88\x37\xc4\xd5\xc7\x76\x18\x76\x1b\xf6\xd6\xbb\x3a\x94\x7f\xec\xfe\xf9\x0a\x84\x32\x10\xfa\xf3\xd4\xc8\xdd\xbc\x2b\x6e\x6f\x5a\x87\x6b\xb7\xab\x7e\x8f\xa1\x43\xe9\x33\x49\x5f\x3f\x43\xa1\x1a\x2e\xb3\x9f\xb1\x16\x4a\xd2\xc5\x50\x7e\x35\x61\xa4\x3c\xea\x51\x94\x4f\x94\x74\xcf\x04\x8c\x21\x5d\x34\x74\x4a\x51\xa0\xeb\x2b\xc8\xa6\xd8\x49\x10\x55\x47\x3c\x6e\x49\x47\x3f\x4b\xa1\x0e\x75\x84\x2a\xad\x80\x02\x1d\xea\xc8\x28\x4a\x75\x04\xd4\x4b\x58\xd0\x81\x8e\x28\x60\x51\x07\x3a\x59\xd1\x50\x93\x92\x3b\x7a\x7a\x00\x1d\x95\x56\xa5\xcd\x66\x41\x49\x71\xaa\x23\xf0\x08\xc5\x83\x6c\x64\xab\xd2\xc0\x2c\x9f\xe8\x51\x13\xa0\xa0\xfe\x42\x78\xee\x07\xd4\xb1\xcf\x6f\xf1\x90\x48\x4c\xba\x05\xd4\x62\xe8\xc7\xc0\x1c\x8a\xef\x7d\xee\xa0\xee\x4d\x83\x12\xc8\x88\xf2\x33\xfb\x57\x16\x94\x9e\x76\x83\xa4\x96\x42\x69\xd1\x5c\x66\xe2\x66\xc8\x55\xee\x41\x3e\x8b\x7a\x02\x48\x76\x04\x69\x2a\x33\x8b\x1c\xe8\x6f\xcb\xf7\x7b\xef\xcf\x3a\x5e\xd1\x17\x05\xf9\xac\xaa\x7f\x50\x90\xff\xde\xdf\xea\x79\xee\xdd\xa6\xfc\x7f\xab\xf7\x5f\x1a\xe8\xc3\xaa\xb6\x4c\x09\xfa\xbf\x9f\x1a\x65\x0f\x82\x3e\xec\x0c\x79\xd8\xfe\x22\x02\xb1\x5b\x6e\x3b\x71\x70\xd0\x5f\xbf\x47\xfd\x33\x08\x46\x51\x68\xc6\x50\xf2\x7f\x32\x05\x6a\xdf\x20\x5a\xeb\x31\x78\xd5\xd0\xc8\xca\xb6\xfa\x61\x59\x49\x25\x62\x59\xbe\x27\x10\x1a\xd1\xc8\xf6\x62\x9f\x40\x0b\xa8\x2b\x40\x2d\x25\x81\xba\x1c\xd4\x7d\x41\x0d\xd7\x59\x79\x4e\xa8\x55\xcb\x0f\xb2\x52\x2e\xbd\x61\x26\x3e\x3c\x1b\x43\x98\xb5\x71\xe5\x55\x9b\xf9\xcd\x55\x8a\x93\x91\x8f\xbf\x83\x4f\x32\xaa\x2f\x31\x02\x27\x2d\x98\x85\xe1\xbc\xd4\x4d\x76\x81\x12\x9e\xfe\x10\x68\x06\x78\x50\x2e\x7c\xe3\x0f\x3e\xf9\xd0\x31\xe3\x49\xb8\x43\xf9\x7c\xa4\xd6\x7b\xd2\xd3\x46\xab\x96\xa7\x50\x9c\x2a\x67\xe9\xf6\xd5\xfb\x93\x39\x2d\x86\x4d\xa3\x54\x5f\x6a\x43\x7f\x25\x41\x43\xc1\x69\x4a\xb5\x1c\x32\x58\xd5\x97\x69\xb9\xb9\x29\xc9\x1a\x7f\x06\xa9\xca\x81\xd7\xd8\x8a\x12\x87\x93\x87\x5a\x56\xb5\x1c\x9e\xa7\x54\x5f\x36\xba\xaa\x9a\x5a\x34\x7f\x72\xfc\xd8\xbb\x95\xd2\x28\x50\x97\x01\xfd\x77\x9e\xf7\x7a\xdc\xd2\x6e\x1a\x1f\x35\xe2\xa0\x65\xa8\x9c\xaf\x84\x99\x24\x90\xa7\xe1\xf1\x63\x10\xe6\x52\xa2\x8e\x94\xc6\x85\xe2\xa3\x16\x1c\xb0\x00\xa9\x59\x4a\x98\x43\xc2\x43\xef\xc3\xd0\xb3\xd0\xd7\xa1\xc4\x45\xa4\xc7\xed\x5b\xf3\xd7\xfd\xc6\x6d\x72\xb8\x12\x79\x98\x4d\xe6\x94\xe6\xd8\x73\x1c\xca\xd3\x48\xe2\xa3\xa7\x70\x44\x7e\xbe\x60\x66\x60\x0b\x59\x5c\x5b\x63\xab\x61\x60\xc4\x0f\xf3\xe7\x00\xc9\x57\xe6\x57\x5a\x2a\x0b\x94\xa8\x27\x41\xb3\x1a\xc6\x5c\xbc\x7d\x44\x89\xaf\x91\xd2\xf3\xa1\xa3\x16\xe2\x98\xc9\xa8\xd9\xaf\x84\x85\x64\xfe\xb6\xed\x45\xad\x70\x87\x52\xf5\xc5\x39\xf2\xa8\x40\x0f\x9d\x42\xfd\x6d\x40\xe4\xe1\x50\xbd\x0a\x1a\x4a\x65\x84\xd3\x14\x64\xb0\x7f\x0d\xc7\x9f\x83\xa1\x7a\x55\x1e\x8e\x37\xe1\x79\xea\xc1\x60\xc8\xf2\x2f\xb8\x52\x4b\x6c\x0d\x91\xae\x4b\xc7\x8f\x52\xde\x2e\xdf\xb2\xb9\x6c\x8f\x6e\x34\xe5\xd5\xc1\x70\x16\x86\xe1\x43\x5a\xc5\xd2\xe0\x23\x5a\x72\x48\x88\xe4\x07\x96\xbe\x2b\x6b\x35\x6c\xb8\xac\x03\xdd\x65\x23\x16\x1d\x07\x82\x8a\xf0\xad\xf7\xad\xbf\xcd\x46\x48\xeb\x7d\xeb\x7f\x67\x8f\x1f\x57\x48\x37\xbd\x27\x68\x7b\xad\xb1\x2e\xc3\x3e\xb3\x36\x3c\xd3\x9e\x6e\xb4\x64\xf8\xfe\xa1\xf5\xfe\x1e\x6e\xc9\x70\xa6\xd7\x5a\x3e\xc8\x08\xaf\xb1\xd4\x39\xed\xb5\xd2\x3f\xb4\x8a\x7f\x86\x7b\x06\xfb\xf9\xa3\x7f\x83\xd8\xd4\x6b\x15\xaf\xc2\x86\x10\x8f\x5a\x5a\x4c\xfb\xfa\x4b\xfd\x61\x0c\x1b\x21\xf5\x97\x06\x28\x2e\x9d\xa7\x2c\x54\x3b\x0d\x83\xd2\x61\x3d\x8e\x80\xa7\x38\xec\x0b\x34\x2e\x72\xe3\xce\x7a\x25\x54\x9f\xa7\xa0\x94\x84\xf8\x0c\xe0\x16\xde\x18\x79\x07\x43\x3b\xf0\x95\x04\xdc\x6e\xcd\x12\xb3\xab\x2d\x4a\x6b\x49\x89\x50\xc2\x54\xb8\x1c\x2e\x3b\x5f\x56\x09\xa3\xe1\x2c\xac\xd5\x84\x05\xd2\xa1\x36\x4b\x9f\xd2\x8b\x97\x56\xcc\x38\x87\x80\x97\x61\xd2\xec\x5d\x0a\xef\x02\x12\xc6\xe0\xd5\xb6\xd7\x2f\x18\x41\x5a\xa0\x80\x05\x15\xf4\xe1\x43\xd9\x6f\xbe\x2e\xfa\xac\xee\xf0\x40\x2e\xd4\xd6\xec\x8c\xaa\x74\x46\x20\xd3\xd3\xb3\x13\x73\x78\x4c\xf6\x2d\xf1\x59\x5f\x7c\xdd\x94\xbd\xea\xd0\xca\x08\x29\x08\xff\x18\xeb\x2b\x54\xac\x30\xd7\x24\xed\x62\x5c\x55\xa5\xe5\xd5\xbc\x34\x1f\x0c\x81\xbc\xa9\x79\xd5\x55\x05\x2e\x66\x57\xcd\xf6\xc3\x66\x7e\xac\x54\x08\xf7\xe1\x0f\xc5\xdf\xbd\x3d\xd3\xb5\xa1\x2d\x74\xe5\x36\x4b\x5b\x6a\xbd\xb2\x32\xf0\x45\xd6\x68\x2c\xb2\x98\x64\x13\xcc\xaf\x4e\xca\xc9\xde\x54\x96\x10\x91\x50\xb6\x2d\xb5\x8d\x91\xdc\x3e\x37\xb1\xa9\x61\xcb\x4e\x33\x67\xb5\xdb\xad\x76\xa6\xa5\xa9\xb2\xc9\xc5\x7b\xd4\x45\xac\x22\x2c\x12\xbe\x0d\x68\x37\xd2\x29\x10\x69\xe9\x3b\xe9\x3b\x85\xef\x3b\xd2\xaf\x3e\x12\xf8\x4d\x4a\xa7\xfc\x51\x73\x59\xd4\x7b\xbe\x23\x40\x00\x6b\x45\xa5\xd0\x90\x5b\x19\x91\x53\x91\x2a\xe4\xe4\xa2\x15\x85\x70\xff\x77\xa0\x27\x74\x54\x20\x4f\xe7\xf3\x2c\xe8\xfd\xf7\xe0\x10\xeb\xb9\x87\x7a\xa2\x8d\x0d\xa4\xe9\x1c\x27\xab\xd7\xa8\xee\xd6\x86\x9e\xec\x6e\xef\xee\x2b\x74\x0b\xa0\x13\xba\x65\x91\xa2\xeb\x56\x75\x43\x67\x17\x5d\x4b\x59\xa8\xd0\x5a\xca\x13\x08\xc9\x94\x97\x53\x15\xc8\xab\xe9\xc9\x43\x52\x5f\x6a\xe5\x1b\x7c\x77\x3f\x08\x63\x39\x55\xf7\x2e\x6a\xda\x81\x99\xa7\x37\xf0\x45\xb8\xae\xff\x0a\x9c\x35\x7b\x71\xd6\xfc\x8c\x85\x5b\x94\x2a\x90\xf2\xc9\xd3\xbb\x0f\x7c\x70\x59\xa3\xea\x86\x5c\x36\x50\x89\xf3\xbf\x4f\xaa\x60\xee\x86\xb5\x33\xa7\x69\xfa\x7f\x3d\xb6\x8e\xba\xbc\xf6\x83\xb9\xbb\xb9\xed\xe4\x4f\x27\x5a\x60\xcc\x71\x0e\x26\x9f\x02\xf1\x8b\x12\xf0\x2b\x7b\x29\x03\x0e\x95\xba\xd9\x29\x52\x54\x97\xa4\xeb\x82\x6f\x7b\x7d\x29\xe1\xdb\x3f\x4b\xaa\x4c\x83\x14\x0d\x75\x5f\xb0\xf0\xdc\x6a\x1a\xae\xb1\x1c\xba\xc9\x64\x16\xf5\x52\x27\x8c\x65\x55\x06\x83\x36\xf4\x0e\xaa\xe9\xcf\x36\x5d\x99\xff\x2e\x87\xdf\xc2\xb7\x19\xb5\x69\x95\xa9\x15\x11\xe9\x98\x07\xad\xb8\xe3\x81\xe3\xa4\xd4\x87\x8d\x89\x89\xb6\xc5\xec\x8d\xc0\xed\xd0\x8a\x79\xe9\x15\xa9\x95\x69\xb5\x19\x11\xaa\x4c\x03\x7c\x83\x37\x1f\xf8\x25\x7e\x76\xe5\x2f\xa7\xc4\x77\x4f\xb5\x5d\xf9\x4c\xe3\xf3\x7b\x62\x69\xd5\xc3\x41\xb9\x0d\x39\xf5\x19\xb5\xf8\x0d\xdc\x0c\xef\xf5\x84\x9c\x3c\xf5\x2f\x37\x48\xdd\xfc\x4d\x53\x27\x6b\x26\xb7\x4d\x3d\xa5\xe3\xe0\x5b\xfc\xb6\x36\xa3\x3e\xa7\x21\x57\x6e\xb9\x0e\xcc\xd8\x0a\xad\x10\xcf\xb6\x38\xb7\x33\xdb\x5b\x02\x6e\x98\xdb\xb1\x15\xf2\xea\x14\x9e\x47\xc6\xc3\x58\xd6\xd7\x29\x75\xfe\xf7\x9e\xa4\x11\xf0\xdc\x17\x6c\x58\xcf\x7d\x41\xd6\xd8\x74\xe0\x0e\x16\x3c\x6a\x59\x6b\xd3\xc5\x50\xd1\x92\x9b\x80\xc1\xec\x93\x2c\xd7\xe5\x53\x47\x13\xb1\x09\x09\xb1\x3c\xaa\x61\x12\x8b\x6a\xad\x22\x88\x86\x68\x16\x75\x4f\xb1\x20\xc6\x51\x3d\xf7\x1b\x53\x82\xff\x23\xcd\x0e\x91\x44\xe8\x0c\x5c\xd0\x3f\xc5\x42\x3f\x8a\x6f\x83\x0f\xd9\x3d\xb6\xcd\x3b\x63\x19\x74\x13\xb1\x9b\x13\x62\x6d\xfc\x0e\xbf\xa8\x88\xb5\xb5\x25\xec\x61\xe0\x27\xaa\x6d\xe7\x1e\x1b\xbf\xc3\x23\x2a\xc2\x04\x98\x28\x6d\x82\xbe\x31\x30\x09\xba\x61\x48\x5f\xad\x62\x1e\x8c\x41\x02\xfa\xaa\x4e\xab\xb6\xdd\x60\x55\xa7\x61\x0b\x4b\xa8\x3e\xc3\x49\xc0\x92\xc7\x29\xcf\x63\x9e\x6f\x68\xec\x3b\x11\xb3\x88\x2a\x18\x08\x37\x1a\xc0\xac\x81\x88\x21\x37\x70\xf0\xb8\x59\xf1\x1b\x20\x9e\xea\xa8\xdb\xcf\x9c\x7c\x2b\x76\x01\xaf\x3a\x2d\x91\x54\x5a\x71\x36\x57\x92\xa8\x90\x5c\x44\x18\x8a\xd0\x17\xfa\xc1\x44\x78\x19\x86\x40\x1e\x4c\xea\xab\x55\xcc\x7f\xd0\x91\x5b\x25\xdd\x60\x55\x6e\xd8\xc2\xca\xbd\x10\xc7\x29\x8f\x6a\xd1\x5f\x9d\x0c\x92\x3b\xc9\xfb\xab\x93\x8d\x71\x10\x4f\xed\xae\x3b\xd0\xdb\x89\x44\x52\xe9\xb6\x2c\xae\xb4\xb7\x8b\xc0\xba\xdf\xbb\x29\x0b\x05\x14\xed\x17\x09\xf8\x56\x52\x2b\x3c\x22\xe1\x99\xe0\x99\x41\x1f\x4d\x59\xb6\x73\x11\xe3\x17\x89\xf5\xb1\x99\x9b\xb7\xf2\x3d\xea\x1e\x71\xc3\xba\xbc\x37\x1a\x96\x45\x2c\x6b\x3c\x9a\x70\x9c\xf1\x88\xc4\xbe\x3d\x35\x3b\x5a\x78\xaf\xda\x2b\xee\xde\x5f\x7e\x32\xf5\x68\x44\x58\x64\x6d\xca\xf6\x14\x40\x88\xee\x2b\x25\x43\xb4\x2a\xf1\x20\x2b\xbd\x4a\xdf\x9b\xf3\x13\x92\x1c\xaa\x74\xc3\x5f\x66\x62\x37\x36\xb5\xe8\xf9\x84\x5d\xf9\x87\xdf\xd4\x5c\x77\x5d\xaf\xbc\xc6\x15\x3b\xcb\xce\x96\x94\x2a\x8b\x49\xd5\xbe\x7c\x24\x90\x48\x42\x92\x99\xf6\xc2\x8e\xeb\x3c\x3c\x04\x21\xed\x10\xa6\x81\xe0\xb1\x67\x07\xf7\x1f\x3e\x27\xd0\xc6\x4f\xba\x97\x35\xb1\xc9\x1b\xb7\xea\xb9\x84\x8d\x2b\xf2\x57\x31\x13\x26\xb8\x2a\x9f\xe5\x8d\xc5\xb3\xcb\x0a\x4a\x94\xaa\xc4\x1e\x91\xb4\x96\x08\xc5\x56\xae\xb2\xa8\xae\xb0\xbe\xa8\xae\x30\x22\xe7\xda\x75\xc3\x75\xe6\xcd\xc3\x8e\x9d\xbb\xf8\x96\xe6\xa6\x5d\x7b\x2e\x0d\x7f\x17\x54\x1a\x20\x7f\x3a\x73\xef\xd7\xaf\x67\x63\x30\x87\x61\x18\x12\x8f\x0f\x69\x26\x7c\xb2\xf9\xf2\x6f\xbf\x35\x38\x7f\xe5\x6c\x2e\x97\xe0\x62\xec\xa4\xed\xb3\xf8\xab\xff\xd6\x7c\xd2\x76\xfc\x0b\x0e\x1e\x6a\xc7\x10\x08\x63\x20\xf8\xec\xd7\xbf\xf2\x61\xbe\xfb\x9b\xd8\x60\x61\x1f\xa5\x4e\xb4\x50\x1e\x37\x0d\x21\xb2\x4e\xb6\x84\x82\x79\x2c\x07\xea\x1f\xe4\x02\x4c\xa3\xbe\xa4\x50\x94\x44\x1a\xa6\xc1\x51\x0a\xa7\xc1\xfc\xc0\x07\x6e\x9c\x06\x83\x70\x10\x4c\x03\x33\xfb\x60\xa7\x38\x1c\x1e\x0d\x86\x5b\xac\xfa\x19\x68\x91\x6e\xd2\xa6\xbd\xf9\xfb\x0f\x68\x1e\x34\xf2\x7c\xf5\xd4\xd6\x19\xdc\x9d\x3b\x0a\xef\xcf\xd2\xcf\xf4\x5d\x76\xc2\xf5\x70\x20\x28\x2d\x3e\xa9\xc5\x27\xc3\x6f\xb3\xd7\x27\x84\x57\xe6\x34\x08\x95\x95\x50\x06\x65\xe1\x1f\xaf\xfc\x22\xe1\x86\x49\xf9\x25\xf5\x80\x78\x09\xf5\xc2\x4b\xf5\xed\xb3\xb8\xee\x6e\x45\x6e\xc7\x3e\xf3\x7e\x06\xcc\x2c\x0f\x6a\x12\xfc\xe0\x57\xf8\x1e\x85\x70\x1a\xc2\x96\x23\xf5\x2d\x72\x0c\xcc\x0f\x6c\x19\x7b\x82\x3d\xc1\x8a\x30\x5f\x6e\x6f\x4c\xbc\xd7\x0d\xba\x10\xaf\x5b\x72\xd3\x38\x18\xd5\xf8\xaf\xc8\xf1\xdc\xc4\xd7\x26\x2c\x5d\x98\xa8\xd4\x86\x26\x49\x3a\xbf\x9a\x04\x9d\x47\x8c\xa1\x7a\x77\x57\x45\xd2\x37\x41\xfa\x1a\xeb\xb7\x19\xb8\xf2\x02\xb1\x48\x14\xc5\xe2\xf2\x87\x07\x6d\x73\x49\x5f\x43\xbd\x34\x41\x13\x16\x59\x48\x79\x45\x2b\x25\x05\x53\x03\x59\xbc\x6f\x09\x28\x9b\xdd\x7d\xa1\xb3\xbb\x1b\xa2\x50\xdd\xad\xda\x27\x89\x5a\xc5\x94\x04\xca\xab\x6e\xa7\x9d\x05\x62\x9e\x83\xb3\xe7\x9b\x8b\xcd\x4c\x51\x91\x60\x2d\xe4\x7d\xba\x11\x8a\xec\x42\x43\x4e\x96\x06\xdf\x25\xc4\x06\x7b\x63\xb3\xa6\xd7\x0c\x8d\x77\x26\x54\x6f\xe1\x54\xdf\xe3\xb2\x57\x1f\xc7\x37\x2c\xc6\xcc\xf8\xca\x75\xbb\x32\x95\x16\xd1\x59\xe4\x64\x9a\x9b\xe5\xf5\xa4\xd8\x06\x04\x6c\x86\x58\xa6\x1d\x43\x08\xec\xb7\xe6\x09\x0c\xc3\x81\x1a\x7f\x27\x4c\x62\x3d\x9d\x24\x3c\x85\x0f\x01\x8d\x43\xda\xb8\xbb\x20\x92\x59\xae\x9c\xaa\x42\x4e\xd2\x8d\x50\xfc\x05\xbe\x6a\x77\xf0\xaa\x7d\xe5\x8e\x52\xd1\x29\x8b\x63\xbd\x96\x58\x19\xdc\xae\x25\x56\x86\x68\x15\x8d\x5e\x37\x5d\x1b\xd8\x35\xa7\xeb\x32\xab\xd2\xf1\x0e\xce\x9b\x88\xc5\x58\xc2\xcd\x9d\x33\x7b\xc6\xeb\xd3\x7c\x7d\x52\xc3\x8d\x56\x63\x7e\xbe\x09\xf5\x3e\x75\xb8\x39\xb7\x38\xd3\x69\xe8\x8a\x0e\xef\xcd\xd5\x53\x52\x22\xd8\x4a\x78\xd8\x79\x03\x3a\xb0\x63\x1c\xee\x2c\x34\x94\xe4\x96\x9b\x22\xba\xa2\x15\x40\xb0\x0e\xbb\xad\xc4\xce\x4b\x6a\xd0\x8b\x0e\x87\xd3\xe6\x8c\x68\x90\xfa\x5c\x3e\x77\xe1\xec\x99\xd3\x11\x60\x04\xd3\x77\x90\x04\x37\x7a\x61\x85\x67\xc2\x17\x7d\x05\x2d\xf1\x05\x7e\x0e\x9f\xab\x6e\x68\x89\x8f\x3d\xa5\xf4\x0e\x08\x4f\x80\x88\x89\xff\x51\xfe\x67\x12\xf6\x79\x0f\x19\x46\x8b\xa1\x04\x3c\x81\x5f\xc0\x25\x16\x0e\x10\xf2\xdf\xe7\x88\xbd\x6d\xb9\x29\xb5\x7c\x5d\x8a\x3d\x3e\x2f\x16\x5f\xf6\xbb\xc3\xe1\x1b\x42\x75\x09\x9e\xf1\x94\x06\x52\x33\x94\x78\x1b\xa1\xe4\x5b\xca\xdb\x1f\xfa\xd3\xb0\x9e\xf2\x2d\x96\x16\x87\xc3\x18\x56\x0a\x1c\x63\xd8\xbb\x83\xc3\xe1\x25\x0a\xcf\xe1\xb9\x70\x38\x87\xe7\xe0\x25\x2a\x42\x6a\x92\xfa\x07\xa2\x11\xff\xa4\xf5\xac\xea\xa5\x1d\x7c\x57\xa6\x84\x73\x70\x2e\x1c\xcf\xc1\x39\x59\x17\xba\x7b\x17\x62\xd8\x08\x69\xb1\x6f\x71\x80\x32\xf8\x48\x6f\x4a\x87\x00\x61\x88\x36\xb4\x58\x0a\x10\x62\x2f\x09\x9e\x83\xf5\x54\xc4\xe0\xbb\x01\x25\x6a\xb1\xb4\xf8\xef\xa4\xd0\x04\xfd\xff\x4e\xeb\x39\x05\xc6\xbf\xf3\x7b\xf7\xae\xcc\x2d\xf4\xf2\x09\xe7\x64\xd2\xbb\x83\x7b\x09\x17\xca\xcc\xde\x97\x0c\x37\xe1\x65\x98\x01\x53\xe1\x2d\x38\xc0\x7a\x7b\xbc\xcf\xd3\xfe\x71\x44\x35\xce\x50\x78\xc2\x89\x45\xbe\x4e\xc4\xa1\x0a\x6b\x01\x89\x3d\xbf\x24\xc3\x2e\x05\x4c\x25\x2a\x31\x12\x16\xbe\x01\x8b\x4e\x36\x41\x9a\xc2\x27\x11\x4b\xa5\x5d\x0a\xaf\x92\xd0\xa2\x05\xde\xa2\x41\xad\xf5\xae\x96\x2e\xe3\x38\xe9\x2a\x8c\x03\xb5\x56\x51\xaf\x08\x6b\xf4\x84\xc0\x71\x98\x07\xc7\x83\x2b\xb4\xc4\xf7\x21\xb0\x03\x86\x53\xb3\xf1\xb8\x42\x1b\x7a\x84\x58\x87\xf3\x14\x5a\x9c\x4e\xcc\x79\x50\x9e\x8e\xdf\xf9\x32\x70\xac\xef\x59\x18\xbb\x13\x1e\x57\xe0\x71\x62\x1a\x4a\x9e\x59\xd8\xe0\x39\x02\x0d\x50\xaf\x55\x8c\x55\x84\x35\x4a\xc1\xb2\xb5\x2a\x9b\x8e\x43\x25\x83\x6c\x49\x8a\xd1\xa0\x93\x0c\x30\x54\xf5\xbe\x57\xa7\x55\x04\x25\x50\x1e\x77\x8f\xac\x1d\xdd\x23\xfe\x9e\xfc\xf7\x97\xc7\xc3\x47\xe3\x23\xf8\xc2\x18\x5c\x9c\xa8\xf4\x30\xa0\x23\xa3\x58\xb8\x4a\xa1\x0e\xc6\x13\x9f\x1e\x3e\x71\xfd\x47\xd8\x41\xad\xa6\x46\x9e\x98\xf0\xe9\x0a\x0e\xc7\x93\xaa\xab\xa8\x1b\x4b\xa1\x9a\x54\xbd\xff\x34\x05\x3a\x3f\x43\xe0\xe2\x56\x7c\xe1\xe6\x68\x78\xe4\x97\x5f\xc2\x45\x67\x49\xa5\xa5\x42\x59\x61\xc9\x2d\xcf\x61\xf0\x1e\xa1\x72\x3f\xce\xe2\x3d\x32\xa7\x3c\xb7\xc2\xc2\x59\x4b\x4b\xad\xa5\x01\x70\xe3\xef\xbf\x57\xe0\x1c\x18\x0d\x7b\xf0\x11\xf8\x80\x81\x0f\x02\x49\x38\xe7\xc0\x68\xfe\xfb\x27\x15\xf9\x65\xe5\xb0\x93\x52\xfd\x58\x61\x2f\xaf\xa8\xd4\x84\x05\xd2\xc4\x2a\xa6\xfc\x2d\x4d\xac\xb7\xd3\x23\xd2\x7e\x3d\xb8\x89\x6b\xec\xd3\x54\x17\x31\x85\x85\x41\x2c\x8f\xee\xf8\x07\xb0\x1c\x61\x90\xc7\x7a\x44\x98\x40\xc1\xe7\x54\x88\x57\xf4\xa8\xd7\xc9\x46\x5e\x2e\x25\x5b\x7a\x81\x54\x4c\x7f\x4f\x6d\x04\xea\x7e\xab\x28\x98\x2f\x8b\xe7\x61\xf2\x63\x17\x25\x35\x1c\x60\x25\xb5\xa7\x93\x5e\x11\xe8\xee\xbf\x87\x30\xad\xd7\x29\xd1\xac\x14\xc8\x7c\x2b\x5f\xf6\xe8\x42\x1f\xfc\x09\x3b\xc0\x7a\xb7\xc2\x9b\xc1\x02\x88\xf2\x31\x04\xae\x53\xd3\x59\xf8\xed\x09\xda\x66\x2a\x30\xe5\xc3\x47\x54\x65\xad\x95\xcf\x82\x55\x38\x01\x26\xe0\xaa\x6a\x65\x86\x2d\x07\x2e\xb2\x0e\xb1\x54\xb4\xc2\x87\x19\x60\x45\x6b\x2d\x7e\xa8\x94\xd4\x56\xda\x66\x2a\xcc\x33\xc3\x47\x54\x95\x4c\x20\x8d\xc1\xdb\x70\xdb\x37\x46\x26\xc8\x86\x8b\x6c\x59\x59\x89\xd3\x2a\xd5\x66\x48\x13\x7c\x13\x6a\x7d\xb5\x4a\x78\xd3\x3b\x2f\x92\x5d\xf7\xff\x8e\x92\x2f\xa9\xfd\x5d\xb4\xaf\x13\xdd\x8a\x7c\xa3\xa1\xd0\xc0\x18\x0c\x25\x76\x23\x9f\x5a\x91\xdb\xd8\xac\xf1\xa8\xc9\xe6\x8a\xc6\x86\x0a\xae\xc1\xb5\x4d\xa8\xcf\x95\x3a\xd1\x1d\xde\x60\xa8\x48\xd1\x6b\xf4\xb9\x29\xa9\x06\x2e\xac\x11\x57\x68\x09\x27\xbe\x09\x6f\xf6\x3d\x05\x9d\xd8\xf9\xa0\xa0\xb2\x7b\x45\xef\x25\xda\x77\xc9\x77\x09\x2e\xe1\x25\xe9\x92\x74\x49\xe1\x6b\xf1\x8f\xa0\x81\x63\x03\xc1\xb9\xf2\x94\xec\x91\x7a\x5a\x5a\xde\x14\x5a\xb6\x46\x04\x72\xfa\xcb\x93\xab\xa5\x9e\x3e\x76\x4c\xb8\xbe\xf8\x38\xf6\x85\xc7\xc2\xa7\x4c\xc1\x30\x61\xca\xd5\x29\x57\x05\x08\xbb\x7a\x55\xa9\x6a\xc4\xc7\xe0\xb1\x45\xc7\x27\x08\x8b\x17\x45\xa8\x62\x7b\xf8\x1e\x6e\xd1\x22\x61\xc2\xf1\xc5\x11\xf0\x18\xf6\xbd\x7a\x15\xc2\x84\xab\x53\x22\xae\x4e\x11\x30\x6c\xca\x14\xe8\x8b\x7d\xc3\x8f\x2d\xbe\x2e\x1c\x3f\xe6\xe5\xbd\x91\xe1\x61\x8b\x59\x10\xbd\x62\x00\x55\x18\x0c\x54\x8f\x9a\x80\xf3\xac\x57\x4d\x3c\xd8\x66\xc7\xfb\xa0\x0f\xb8\xa3\xca\x0b\x8c\xfa\x86\x85\xf2\xe8\xe7\xb2\x7e\xf7\x68\xca\xe3\x86\xcb\x94\x4f\x4d\xe7\x04\x30\x94\x02\x78\x4a\xbd\xfb\xd0\xc3\x29\xbf\x7b\x0e\x1b\x16\xc8\xbf\x15\x0c\xd7\xa9\x10\x6f\x89\x77\x02\xed\x6a\x2a\x68\xcd\xac\x47\xb7\xa4\x0e\xdf\xba\x73\x91\xb0\x35\x01\xdd\x3e\x75\x78\x66\x5a\x61\xa2\x33\x59\xa9\x77\x35\x65\x6f\x63\x40\xe7\x57\xa3\x9b\x30\x19\x0b\xcc\xf9\x3c\x46\xa1\x2e\xcf\x68\xcd\xb1\xe7\x46\x18\xec\x15\xe6\x0a\xc6\xa3\x1b\xcf\x7a\xee\x81\x8e\xdc\xd6\x54\xd5\xec\xe2\xc3\xfc\xb9\x32\xd3\x81\x0e\xda\xe1\x43\x36\x37\x37\xcf\x60\xe1\x2d\x06\x5b\x76\xb9\x09\xa2\x50\x17\xde\x9b\x73\x1e\xdc\x7e\x35\xea\x88\x2d\xc9\x59\xc9\x06\xde\xa8\x2f\x49\xac\x49\x03\xb9\xe3\x5e\xac\x41\x90\xd9\xa9\xa9\x2f\x6d\x35\x34\x2b\x9b\x0c\xc9\xd5\x5b\x18\xd4\x79\x7e\x23\xea\xb2\xab\xd3\x39\x79\x5c\x12\xbc\x37\x20\x21\xc4\xf3\x42\xaf\x08\x44\x2f\x78\xff\x26\x02\x63\x30\x26\x5c\x8a\x91\x62\xfe\x26\x02\x8d\xd0\x14\xc9\xa2\x5a\x0a\x61\xdf\xf3\x88\x50\x1b\x2c\xfc\xf9\x2b\x44\x1a\x2a\x4d\xa1\x17\x2c\x50\xcc\xeb\x1e\xf1\x1e\x79\xe2\x84\x02\xaa\xa5\x03\xb4\xb9\x3c\xbb\xc8\x64\xc2\xc3\x78\x38\xdc\x64\x2a\xca\x2e\x37\x97\xe5\x55\x15\x8b\x22\x1c\x86\xc3\xe1\xa2\x58\x5c\x95\x57\xa6\xc4\x56\xff\xcb\x34\x76\x42\x27\x21\x75\x4a\x9d\x81\xcc\x74\x5d\x5d\x81\x13\xdf\x7d\xb7\x6f\xdf\x07\xc2\xbe\xf5\x11\x30\x12\x47\xee\x5b\x2f\xcc\x5c\xbf\x3e\x02\x8e\xc0\x11\x99\x01\xd8\xe3\xcd\x08\xb8\xdd\x05\x8e\xbd\x2e\x07\x49\x99\x7a\xbd\x91\x2b\xcc\x33\x15\xe5\x31\x19\x99\x8e\xca\x5c\x1e\x8e\x52\xbe\x5d\xbe\x5d\x7f\x5b\x0b\x76\x49\xbb\xe0\x28\x95\x56\x67\xd9\xe1\x6c\x89\x68\x76\x36\xd7\x6c\x67\x24\x7d\x35\xe5\xd3\x93\x20\x4a\x62\xa0\xe5\x28\x59\x95\x89\x0a\xcc\xd7\x7b\x10\x15\xe2\x35\x4a\xd3\xe9\xde\xb4\x3f\x79\xa6\xe2\x12\x33\xbf\xd5\x99\xd9\xbc\x5d\x03\x51\x24\xbe\xde\x7f\xd3\xcb\xb3\xf8\x17\x27\xa4\xe1\xf0\x36\xcc\x2f\xce\xce\xcb\xce\xb1\x28\x8b\x0a\x2c\xd6\x02\xc6\x64\x2a\x2d\x37\xf3\xf9\xe5\x38\x16\x16\xc0\x32\x0d\x08\x17\xe0\xba\x74\x99\x83\x28\x72\x7b\x4d\x73\x8b\x93\x6b\x76\xee\xb0\xd4\xa5\xc1\x3d\xbc\x27\x2f\x8a\x4a\x98\x0e\x5f\x47\xb2\x69\x2c\x74\xf6\x7e\x58\x84\xce\xc0\xfe\xb2\xa4\xa3\x41\x24\x41\x44\xb5\x02\xd4\xd2\x1a\xda\x27\xa2\xa8\xf0\x1d\x20\xe1\x3a\xa5\x80\x4e\x18\x48\x0f\xa4\xf2\x58\x6d\x68\xba\xe7\x2e\xdd\x64\x48\xae\xdc\xca\xf8\xd5\xc4\xd6\xe4\x9c\x64\x03\x6f\x48\x29\x4e\xaa\x92\x5f\x04\x5d\x78\x46\x45\xbd\xb1\x91\x69\xac\x77\xd6\x06\xb0\xab\x75\x55\xf5\xc5\xdb\x0d\x8d\x11\xc0\xf8\xe7\xbc\xce\x06\xc8\xa5\xf1\xb4\xab\xb1\x68\x7b\xb6\xfc\xf2\xea\xc2\x6b\x73\xd3\x9c\x29\x4c\x4a\x9a\x31\x23\x80\xa8\xad\xcb\x4e\x2b\x4a\x72\xa5\x44\x24\xbb\x9a\x72\x5a\x18\x8f\x9a\xe8\xb5\xb8\x81\xc1\x0a\x99\xdc\xeb\xf6\xa8\xe9\x46\x63\x7d\x46\x05\xe7\xd3\x81\x3b\xad\x2a\xa9\x38\xc5\x10\x91\x6c\xc8\x49\xde\xaa\xf1\xab\xc9\xad\x95\xc9\x4d\x06\xae\xd1\xb0\xbd\xb8\xbe\x4a\xd2\x81\x3b\xbc\xb6\xc2\x59\xdf\xa8\x01\x9d\x4f\x4f\x3f\x4b\xf5\xe8\x46\xb2\x5e\xdd\x12\xd6\xab\x0b\xb8\x77\x6f\x65\xe5\x29\x95\x06\x65\xf0\xd2\x3d\x78\x19\xcc\x90\x12\xfc\x33\x94\x86\x78\xd7\x42\x3a\x5d\x54\x6e\x29\xcf\xb3\xe7\x95\x1a\x6d\x79\x85\x4a\xeb\xb4\xad\x51\x0c\x4e\xc6\x41\xff\x81\x51\xd1\xbc\xf4\x2f\xa2\xba\xd2\x55\x5d\xc2\xb7\x40\x68\xb1\x58\xe4\xcc\x2f\x8f\x28\xcb\x37\xd9\x8d\x8c\x6f\x05\x51\x74\xc0\xda\x51\xd2\xae\x94\xb2\x88\x9a\x07\x55\x88\x62\xb1\xd0\x99\x5f\x16\x51\x9e\x6f\x2a\x35\x32\xbe\x58\x02\x86\x5d\x84\xfe\xb7\x61\xd2\xe5\x8f\x32\x6c\x4c\xad\xa5\xd6\x59\x5a\x7b\x08\xc6\x84\x17\x97\x5b\xc5\x82\x32\x4b\x99\xd9\x91\x57\xac\xb4\x15\x8c\x6d\x1a\xc8\xe0\x09\x14\x71\x16\xee\x7e\x9a\x1f\x36\x94\x42\x62\x10\x7b\x91\x28\x8a\x15\xd6\xd9\xe2\x95\x33\xe0\x20\x85\x8a\xde\xf0\x8b\x1f\x09\x7c\xeb\x2b\x28\xc5\xd9\x70\x9e\x81\x87\xbf\x6f\xb7\x95\xf2\xd5\x76\xb1\xa6\xa0\x46\x19\x90\x18\x1b\x70\x03\x24\x48\x7d\x60\x81\x44\x43\x66\x5f\xa0\xa1\x54\x7a\x1a\x52\x54\x59\x5e\xbb\x34\x70\x2e\x8b\xe3\x08\xd5\xb1\xc7\x59\x9c\xe1\x7b\x9a\x54\x65\x49\x7d\xe0\x0c\x39\x8e\x82\x7f\xcd\x63\xf1\x0c\xc4\x13\x77\x3f\xfd\x08\x14\x77\xbe\x9e\x6e\xb5\x71\x0e\x8b\x58\x58\x6e\x13\x6d\x65\xa5\x8e\xb2\x5f\x41\x15\xee\xac\xb4\xd6\xe7\xba\x94\xf6\x7c\xa4\xe1\x61\x5c\xca\x60\x19\xbe\x86\x13\x30\x8d\xc7\xad\x23\xc9\xc7\x59\xfc\xd7\x20\xf6\x47\x9f\x6a\xb8\xcc\xe7\xf0\x41\xac\x77\x36\x0c\x67\xfd\xb9\xc0\x53\x1f\x41\xd9\xcf\xb0\xe4\x1e\x38\x42\xbc\xeb\xe1\x37\x1a\xf2\x71\xed\x35\x7c\xed\x32\x87\x03\xde\xc5\xb0\xb7\x7e\xd7\xdc\xbe\xf9\x21\xa8\x60\x38\x3c\x12\x69\xb5\x71\xe5\xf9\x62\xa1\xb3\xd8\x69\x2b\x77\xd8\xc5\x6b\x30\x24\xbc\xac\xa2\xa8\xda\xe8\x2a\x28\xc5\x20\x78\x08\x57\x34\x2b\x61\xda\x3c\x16\x19\x22\x23\x2b\x3b\x9d\xc7\x57\x48\x5c\xb7\x06\x07\xe1\x48\x7c\x4d\x83\xa5\xa0\x1f\x0d\xaf\x4c\xe3\x80\x99\x0f\xd4\xd2\x11\x1a\x54\xf4\x5f\x30\x0c\x5f\xc2\x48\xd0\xd8\x8a\xb8\xfc\x32\x53\x89\xc9\xda\x9b\x28\x7f\x10\x32\xe1\xa6\x5c\x5b\x86\x33\xd7\x9e\x0f\x6a\x8c\x84\x9c\x0d\x4a\x9c\x4a\xa6\x57\x67\xd7\x72\xc0\x8c\x67\x61\x2a\x09\xb1\x7b\x60\x08\x8c\x85\x95\x9a\x30\xbf\xbf\x31\xc5\xfb\x0c\x3c\x0b\x83\xe0\xd9\x60\xc1\xdb\x2f\xc4\xdb\xcf\xfb\xce\x5c\x16\x9f\x27\x0c\xef\xa6\xbc\x1d\xdf\xa9\x84\xec\xf1\xec\xdd\x79\xac\xdf\x3d\x94\xc2\x88\xde\x07\x04\x83\x09\x88\xbc\xb5\x6e\xca\x7e\xde\x37\x7a\x28\x35\x78\x10\x2b\x3d\x4f\x60\x70\x02\x3e\x34\x1b\xa7\x31\x18\x2a\x0f\x91\x8a\x7c\xe0\x04\x35\x07\x97\xc1\x50\x7c\x09\xc6\xe2\x7c\x65\x9e\x43\x2c\x70\x32\xb0\x80\xa8\x74\x95\xb9\xec\xbc\xc3\x55\x54\x95\x27\xe2\x08\x98\x89\x63\x40\x87\xc3\x60\x0c\xa4\xb6\xc2\xe3\xf0\xd8\x2e\xd0\x29\x61\x92\x3c\xc0\x59\x8d\x29\xd0\x03\x13\x6f\xc0\xa4\x60\x69\x20\x18\x42\xa4\x5f\xfa\xd5\x56\xdb\x58\xf8\x12\x0e\x91\xe3\xa8\x5f\xe7\xb1\x78\xe8\x06\x1c\x1a\xcf\xfe\x46\xf6\xa6\xfb\x8f\x27\xe0\x82\xf4\xa9\xdd\x29\x54\xe4\x8b\x11\xce\x7c\xa3\xc3\xc0\xe0\x3c\x22\x37\xd7\x9c\x6b\xe1\x71\x9e\xef\x99\xb4\x15\xc9\xab\x32\x56\x46\x64\xee\xcf\x3c\xb8\xf5\x2d\x8c\x97\x9e\x0b\x77\xe5\x1b\xca\x72\x19\x7c\x83\x30\x18\xf2\x8d\xf9\xbc\xc5\x28\xe4\xda\x8d\xf0\x89\xef\x6a\x38\x6e\x80\x83\xd4\xc0\x41\x2c\x74\x8e\x83\x50\x6a\x90\xfc\x03\xbf\x84\x43\x2c\x4c\x21\xc2\x7c\xb9\x8d\x29\xa0\x07\x1d\x50\x10\x27\xe9\x20\x2e\x18\x44\xc8\x94\x4e\x82\x31\xc4\xbb\xc3\xbb\x82\x46\xcd\xc8\xd1\xd8\x9f\x93\xa5\x01\x21\x80\x9b\x84\xfe\x3f\x8e\x46\x0d\x0f\xc6\x7e\xe0\xc4\x59\xf0\x0a\x36\x70\x82\x6f\x2f\xf9\x38\xeb\xff\x07\x7c\xc1\xe2\xb0\x41\x2c\xe8\x91\x42\xfd\x50\x0a\xd5\x81\xdf\x3a\xb9\x9f\x89\xe3\x59\xd0\x49\xc5\xf2\xfb\xab\x9e\xc7\xfa\x8a\x81\x82\xef\x09\x68\x80\x59\xf0\x0a\x38\x79\xd9\x12\xf1\xa8\xe1\x33\x56\x4b\x06\x85\x48\x2e\xf8\x81\x2e\xb2\x16\x16\x69\xac\xc5\x42\xb1\xb5\x78\x0a\x9c\x0c\x87\x31\xc4\x1e\x50\xd3\x98\x4c\xc4\x83\x5a\x01\x47\x08\x18\x8d\x6a\xba\x03\xd4\x8a\x8f\x89\x3d\xb2\x40\xfc\xd0\x37\x85\x2e\xb2\x16\x3d\xa0\x29\x79\x16\x4e\x84\xc3\x38\x62\xb7\x4c\x93\x41\xc4\xc9\x34\xc7\x09\xe9\x11\x94\xb5\xda\xe9\x84\x4c\x07\x83\xe3\x58\x0c\x21\x6e\xc3\x4f\x25\x62\x91\x2b\x20\x25\x8c\x76\x23\x83\x2c\x91\x95\x63\xcc\x2e\xe4\x9f\x44\x9f\xc2\x17\x4c\x0c\x03\x9f\xa2\xaa\x20\xd7\x99\xc5\x60\x5f\x22\x3b\xc7\x98\x5d\xc0\x0f\x47\x9f\x02\x91\x18\x2d\x5f\x29\xcc\x91\xaf\xb0\x84\xd1\x68\x31\xe7\xf3\xf9\x79\x45\xc6\x12\xe3\xb7\xf8\x53\x38\x06\x8f\xa6\x60\x00\xb1\x1b\xd5\x0a\x9c\x3a\x9a\x82\xb5\x04\x44\xf9\x7c\x8a\xec\x92\x4a\x63\x15\x03\x63\x88\xea\x00\xc6\x36\x4c\x94\x7c\x0a\x58\x47\xc0\xb3\xf2\xb5\xd2\x07\xd7\xaa\x2a\x03\xd7\x9e\x91\xaf\xc5\xc1\x70\xd6\x97\x6b\x81\xd7\xf1\x55\x88\x86\x5b\xf0\x24\x9c\x83\x57\xf1\x79\x18\xdf\x17\x44\xa8\xc7\xd1\xf0\x24\x84\xc1\x93\xaa\x68\x6d\x68\xa9\x57\x4d\x67\xc0\xab\x38\xfa\x7d\x5c\x5c\xab\x04\x3b\x3e\x49\xaa\xe6\x61\x11\xb9\x66\xb5\xd5\xba\x9a\x07\x41\x2e\x47\xa3\x9d\xb4\x6e\xd8\x20\x6c\x64\x04\x12\x63\x6d\x0a\xd5\x4c\x7c\x86\x04\x45\x71\x51\x91\xa0\xf9\xb0\x21\x26\xde\xc1\xe3\x41\xb2\xd4\x21\x58\x1d\xbc\x25\x5f\xb0\x30\xbe\x21\x64\x6a\x61\xee\xc6\x95\x8c\x50\x5c\x84\x8a\x62\x6e\x23\x46\x2b\x54\xd1\xb0\x94\xd8\xb7\xd7\xba\x97\xc1\x72\x52\x25\xc0\x93\x60\x27\xac\x6f\x76\x0a\x07\x18\x2c\x25\x55\xd1\xf0\x24\x94\x13\xe0\xaa\x82\x57\xce\x37\x43\x41\x1d\x2c\x78\xea\x1b\x1c\xb2\x47\xa9\x7a\xf3\xe6\x91\xf7\xbe\xc8\x81\x08\x25\xc6\xfb\xde\xa4\x71\x1e\x7e\xde\x34\x90\x83\xdb\xe4\x6f\xf0\xf9\x4e\x5c\xcc\x4f\x93\x12\x69\x7c\x01\xb7\x35\x44\x71\x70\x8e\xfc\x06\xb6\xb5\xe2\x0c\x3e\x0c\x45\x2d\x19\xf4\x2d\xe5\x15\xbd\x22\x2d\x6d\x24\x4c\x55\xa6\x0a\xa3\xd3\x37\x52\x1a\x19\x6e\x74\xe6\x8a\xd9\xa2\x12\xd5\x3e\x1b\x2d\x75\xfa\x1f\xa0\xde\x6a\x3d\x27\x75\xac\xb7\xd3\x27\x17\x0f\x9d\xe4\xc3\x7a\x1d\x5f\xe4\xd7\x8a\x08\x52\xdf\xd0\x2a\x8e\x79\x8f\xd0\x32\x79\x2f\x75\x84\x6f\xa3\xb4\x91\xec\x6d\x54\xe9\x4b\xc4\x67\x02\x49\x99\xf8\xff\xd5\x1c\xe9\x53\xfb\xf5\xb4\x8b\x02\x5d\xe8\x83\x3f\x61\x91\x28\x02\x21\xed\x03\x02\xc4\xdf\x61\x10\x3c\x04\xfb\xa1\x0f\x8c\x60\xbd\x3e\xd0\xb0\x3d\xb5\xc3\x58\x55\x8f\x01\xd6\xb3\x9e\xcf\xf0\x9f\xf0\x1b\x5b\x64\xe2\xb3\x8b\x14\xc5\xa4\xcb\x05\xcb\x58\xc8\x22\xe1\x51\xea\x5b\x6f\x0f\x64\x50\x84\xca\x3f\x05\x96\x06\x5a\xfb\x6f\x2b\x7f\x36\x3c\x82\xfd\x0d\x34\x6c\xde\x9f\x6d\x79\x47\xa3\x15\x32\x28\x58\x4a\x3d\xad\x0d\xfd\x01\x7e\x63\xad\x26\x3e\xbb\x50\x51\x42\xba\x9c\xb0\x8c\x25\xe5\x96\xb2\x08\x78\x94\x0a\x83\x11\x94\x47\xdf\x3d\x8c\x95\x69\x3a\x51\x2d\x2b\xaf\xcf\xb0\x1e\x37\xd4\xb1\x7e\xf5\x33\xac\x47\x0d\x75\xac\x4f\xf7\x8c\x6c\x00\xd6\xb1\x28\x3e\xc3\x82\x08\xc3\x59\x18\x41\x69\x43\x4f\xc6\xcf\x7d\x70\x66\x3c\xeb\xd3\x83\x3b\xd0\x86\x27\x4a\x52\xcf\x7d\x40\x21\x4f\x61\x8f\x6e\xee\x83\x86\xfe\x2a\xf5\xb6\x3f\x9c\x45\x51\x52\x52\x01\xfe\xe3\x52\x21\x89\x82\xad\xb0\x81\x42\x55\x6f\x2b\xa6\x4b\xf5\xec\x26\xcf\xaa\xab\x54\x98\x3c\x72\xde\x01\x72\xcd\x24\x4a\x1b\xfa\x15\x6c\xa0\xb4\x68\xec\xad\xb4\x16\x4d\x57\xa9\x36\xad\x62\x7b\x3d\x1b\x16\x29\xec\x62\x21\x2a\x44\x0a\x61\xe9\x98\x84\xcd\xb1\x31\x9b\x77\xec\xdd\xb3\x63\xe7\x5e\x78\x85\xe5\x20\x0a\xe6\xb2\xd8\x39\x96\xf2\xab\x9f\x62\xa1\x73\x14\x15\x00\x61\xa6\x7f\x1b\x73\x73\x20\x87\x6d\x44\x79\xbb\xd3\xe9\x6a\x52\xb6\x9e\xd8\x79\xe6\xba\xe6\x33\x01\xa6\xa3\x1e\xfe\x45\x71\x2b\x57\xe5\xce\x34\xcc\xce\x9d\x63\x78\x7d\xed\xda\x8d\x1b\xe3\x56\xc6\x2c\x5b\x31\x67\x04\xfe\x73\x7d\xa1\x72\x43\xe1\xe6\xcd\x1b\x34\x7e\x9a\x8c\x6d\xdb\xdc\x61\xe5\xf6\x58\xcf\xa5\x7c\x98\xac\x5c\x0f\x41\xc0\x2c\x85\x81\x4c\x2d\xf1\x29\x51\x57\x25\x94\x32\x37\x6d\x17\xb6\x1f\x7a\x67\xff\x91\xda\xf7\xf3\xaf\x6e\x6b\xa9\xdf\xed\xdc\xe7\x3a\x28\x1c\x34\xec\x6b\x3b\x58\xfd\x56\xd1\x71\x65\x55\x41\x9b\xa1\x9d\xeb\x38\xd0\x78\xfa\xa4\x26\x2c\xd2\xab\x86\x7d\x6c\x08\x88\x5e\x1d\xbd\x37\x61\x47\x6c\xcc\xe6\xcd\x31\xb1\x3b\x12\xf6\x7e\xc7\x42\x94\x4f\xa4\x9f\xa0\x38\xec\xbc\x45\x79\xd4\xd0\x49\x41\x67\x35\xe5\x57\x93\x5e\x3f\x0c\xa3\x5d\xed\xa5\x6d\x55\x9a\xe2\xe3\x59\x6f\x6d\x3a\xe8\xda\x27\x1c\x34\x1c\x34\xee\x4b\xdb\xbd\xa5\xc5\x71\x35\xe3\xfd\x75\x47\x56\xbe\x33\x63\xfb\x18\x9b\xb2\x20\x5b\x48\x67\x9e\x27\x32\x08\x1c\x88\xcc\xd2\xf5\x18\xc4\xbf\x96\xfc\x7a\x4a\xac\x55\x19\x67\xdd\xb4\x39\x56\xbe\x91\x0d\x3b\x36\xef\x2e\xe4\xf6\x15\x76\xe3\x3f\x0f\xcf\xd9\xbb\xac\x63\xe5\xae\x8d\x07\xd6\xba\x5e\xaf\x98\xe3\x9a\x5d\x31\xf3\xd0\x2a\xe5\x7e\x16\xf4\x02\x4c\xff\xec\xfa\xa6\x33\x49\x27\x78\x43\x93\xd1\x99\xd7\xae\x84\x36\xe2\xb7\x6f\x6e\xfe\x66\xe3\x4f\xa6\x9c\x89\xdb\xcf\x85\xa1\x1a\x42\x20\xf2\x7d\x50\xbe\x7b\xe3\xdc\x3b\x1f\x83\xfa\xa2\x94\xff\x63\x5f\x01\x12\x20\xea\x93\x5b\x17\x96\xdf\xae\xb8\x98\xdb\x65\xbf\x68\x79\xb7\xe2\x82\xe1\x6c\xe9\x85\x0b\x17\xaf\x43\x82\x6a\xaf\x7b\x9f\x77\x04\x64\xd3\x1b\x8c\x99\x69\x06\x83\xdd\x65\xe0\x40\x4f\xba\x5c\x2e\xbb\x8b\xa9\x77\x66\x6c\xe0\x71\x34\xa9\x2a\x18\x60\x87\xd7\x20\x8c\xee\x20\x3b\x5c\xb5\x4d\x4d\xae\x8c\x38\x2e\x8e\xf4\x3f\x06\xf5\x34\x66\xbd\xf4\x6f\xdf\xc4\x4f\xa4\x89\x5f\x10\xb0\x6c\x1e\xfd\x0a\xee\x26\x52\x64\x59\xcc\x98\x2c\x76\xa7\x95\xb7\x16\x0b\x62\xb5\x06\x9a\x67\xe0\x21\x32\xa9\x38\xa3\xd4\xc0\xa5\x39\xaa\x4d\x8d\xcc\xb6\x6d\xd5\x6d\xdb\xf9\x35\x17\x49\xb0\x83\x48\xef\x29\x6a\xb1\x54\x73\x3b\xf2\xd2\xab\x12\x99\xad\xfa\xec\xa4\x14\x1e\xc6\xbe\xe2\x33\x5e\xdc\x4b\x26\x36\x35\x67\x37\x33\xad\x75\x55\x3b\xca\x79\x7b\x75\xf1\xb6\xdd\x1a\x28\xad\xa5\xa7\x13\x49\xd6\xac\x02\x4d\x46\x81\xd1\x94\xc9\xe8\x0d\xb5\x1d\xfc\x79\x88\xf8\x94\x3c\x60\xde\x91\x5d\xcf\x6d\x4b\x4f\xac\xdc\xc0\xc4\x25\xe6\x6c\x49\xe3\xb3\xd3\xf2\x37\xaf\xd5\x20\x4d\xae\x2d\x4b\xa8\x4a\xe7\xb6\xd4\xb7\xe6\xec\x61\x3a\x76\x54\xb6\xd6\xf1\xe5\x15\xf6\xca\xe2\x6a\xa5\xad\xcc\x56\xd5\xa4\xf1\x2d\xf0\x7c\x42\x77\x18\xea\x52\x92\x8d\xe9\x71\x1c\x8e\x22\xe3\x9c\x19\x4d\x8d\xae\xda\x0e\x4e\x6a\xf3\x9d\xa2\x55\x69\x9f\xac\x1c\x27\x8c\x4a\x1d\xcf\xe5\xcc\x59\xb2\x72\xae\x59\x99\x85\x2c\x72\x02\xb2\x4c\xe0\x58\x8d\x2c\x3f\xb7\x6c\xc9\xa1\x9c\x33\xca\xd4\xaf\x84\xdb\x37\x34\x02\xf9\xb5\xed\x76\xfd\x97\x5c\xe5\xd9\xb7\x0f\x9d\x71\x28\xab\x41\x0b\x9c\x00\x2c\x03\x1c\x70\x42\x16\x68\xf9\xd3\xf9\x6f\xaf\xac\x9a\xad\xac\x7f\x46\x18\x35\x56\x23\x90\xfe\x02\x0f\x4f\xe3\xb2\x17\x60\x19\x69\xde\x9b\x75\x62\xeb\xc7\x59\x47\x33\x8e\x66\x1d\x55\xfe\x9b\x38\x89\x0b\xde\x81\x05\x8a\xab\x04\x2c\xf1\x3d\x42\xaf\x35\x6f\xca\x4e\xe7\xb6\xa4\x25\xe5\x6c\x60\xe2\x92\x2a\xb7\xa5\xf3\xd9\xf5\xe6\x9d\x07\x34\xd0\x8f\x3c\x50\xb6\xb3\xaa\x9e\xdb\x56\xb7\xbd\xb2\x83\xd9\xbd\x3d\x67\x4b\x3d\x5f\x95\x56\x96\xb0\x56\x83\xfd\x48\x98\x81\x0f\xd3\x07\xc9\x4d\x89\x5b\xb2\xb6\x30\x29\x59\x62\x9d\x99\x2f\xa8\x28\xaa\xdd\xae\x81\xa3\x17\x71\x1b\xa9\x7a\x48\x19\x94\x29\xe4\xd9\x8a\x38\x83\xcd\x61\x11\x99\xca\x2a\x67\x63\x35\x0f\x7b\x2f\xfa\x08\x52\x7a\x05\x4e\x47\xb2\x28\xc2\x42\x78\xfe\xec\x55\x20\xae\x5e\xfd\x01\x5e\xf8\xf2\x3a\xdc\xbd\x96\x9f\xda\xb7\x15\x36\xfe\x02\x0f\x4f\xfb\xe5\xdc\xe7\x19\xb7\x6a\xfe\x9d\x77\xdb\xf1\x55\xe6\xed\xaa\x8f\x2d\xb7\x4b\x6e\xde\x86\x10\x95\xdf\xbd\xd3\xbb\x02\x8e\xd0\x87\x73\x9a\x93\xb2\xb2\xcc\x59\x59\x1c\x9e\x22\xb3\xaa\xab\xcd\xd5\xcc\xf6\xca\xa6\x23\x3c\xdc\x86\xf5\xf4\x91\xac\xe6\x4d\x9b\xb2\xf4\xcb\xb9\x65\xb7\xc8\x9e\xc5\x50\x4b\xfb\x2e\x3c\x4e\xaa\xa4\x4f\x16\x4a\x17\x06\xfc\x00\xe7\x9f\x20\x61\x86\xef\x02\x7d\x8a\x5c\x1d\x13\x97\x1a\xcf\x24\xa4\x54\x6c\xcb\xe3\x2d\xd5\x85\xcd\x7b\x34\x12\xf3\xad\x2f\x88\x4c\x11\x0c\xb6\x42\x2e\xbb\xb8\xcc\x5c\xc1\xd4\xd5\x57\xed\x68\xe0\xa5\xb0\x6f\x7d\x26\x12\xbe\x87\xa1\xf4\xb2\xa2\x0d\xe6\x14\x2e\xc6\xb0\x25\x2d\x96\x89\xdf\x58\xb7\x6f\x13\xbf\xe4\x69\xcf\x88\x6f\x49\x15\x31\x3c\x08\x37\x91\x7b\x77\xee\xaa\xdb\xcd\xec\xd9\x96\xb6\xde\xc5\x97\xa5\x16\x6f\x58\xa6\xc1\x45\x24\xdc\x76\xd2\x09\x42\x6a\x91\x89\x2b\x4a\xcd\x4b\x37\x64\x2a\x63\xb7\xae\x4f\x5f\xca\x2c\x8d\xad\xed\x48\xe2\xd3\x5a\x8c\x07\x4e\x6a\xe0\x05\xf2\xa4\xb8\xbf\x7e\x1b\xd7\xb1\x7d\x4f\xed\x51\xe6\xc8\x9e\x8c\xb8\xed\x7c\xdd\x16\x71\xdd\x1b\x9a\x41\x38\x3d\x8a\x5c\x56\xad\xdf\xd5\x54\x59\xd1\x62\xe7\x6c\x76\x5b\xc3\x5e\xcd\xed\x1c\xc2\x77\xcf\x3b\x98\x5e\x96\xb3\x75\x53\x42\x76\xcb\x51\x0e\xd6\x93\x47\xab\x9a\x77\xb6\x55\xea\x97\x71\xb8\x9e\xf4\xac\xf1\xe7\xd1\xa0\x14\x20\x2c\x09\x42\xb9\xf4\xcf\x5f\x3d\x33\x59\x54\x36\xe0\x6b\x38\x4b\xc0\x99\x0c\xce\xc4\x59\x42\x2a\x46\xf3\xcf\x99\xa2\xe7\xa4\x4d\x52\x6e\xc1\x50\x2b\x86\xa1\x52\x23\x90\x48\x0a\xd8\x67\x3b\x86\x72\x75\x93\xce\xcf\xf9\x2c\x4f\x99\x02\xaf\xc1\x2c\x01\x66\x32\x30\x13\x66\x09\x8d\xf0\x1a\xff\x59\x79\xd7\x99\xfa\xcf\x95\xdb\x20\xd4\x06\x7d\x80\xd4\xf4\x64\x68\x43\x7d\xf4\x74\xac\x99\x06\x35\x8a\xfe\x44\xe3\xcc\xa6\xd7\x9a\x66\xb6\x3f\xd9\xf0\x92\xb8\x58\x89\x2d\xbf\x40\x0b\x09\x8f\x48\x03\x15\xd0\x88\x5f\xd3\x27\x4d\x07\xd2\xb6\x71\x1d\x5b\x62\x6b\x97\x31\xcb\x63\x33\xe2\xb6\xf0\x69\x5b\x4c\x6b\xdf\xd0\xe0\x54\xf2\x0d\x71\x6d\x7d\x12\x17\xb7\x6d\x4f\xc6\x11\xe6\xe8\x9e\xda\x8e\x6d\x7c\xfd\x36\xf1\xe0\x49\x0d\xdc\x84\x5b\xf4\x28\xdf\x63\x44\x42\x6a\x5a\x76\x3a\x93\x6b\x2e\xaf\x2a\x92\x25\x40\x45\xa3\x46\x0a\x19\xe5\xe3\xc8\x98\x92\xad\xf6\x2c\x6e\x8b\xd8\x98\xbb\x93\xd9\xdd\xd1\xf0\xe6\x5e\x5e\x47\xaa\x14\x41\x8d\xb7\x89\xc0\xa7\x64\x2d\x91\x02\x07\x58\xe9\x07\x8f\x87\x16\xac\x36\x1c\x0f\xfb\xb9\xc6\xdc\xf4\x96\x18\x06\xf3\x88\xec\x5c\x8b\x31\x9f\x37\x1b\x6d\xd9\x65\x39\x30\x16\xdb\xc3\xad\x36\x41\xb0\x32\xe8\xf0\xe9\xcc\x39\xb6\x1c\x87\x31\xc2\xe8\x70\x99\xab\x18\xc8\x23\xf6\xd4\xb6\x34\x55\xf2\x20\x48\xd1\xce\x5a\x41\xe3\x79\xcb\xd3\x8f\x76\xe6\x1b\xec\xd9\x0c\xe6\x13\x31\x59\xc9\xfa\x1c\xde\xe7\xea\x19\x94\xb1\x49\xd0\x08\x82\x15\xbe\xf3\x07\x73\x29\xae\xfa\xad\x7b\x65\xd2\x2a\x97\xdd\x59\xc6\x3b\x9c\x42\x95\xb9\x12\xbf\x95\x30\xdc\x2a\xd8\x6c\x8c\xb4\xcd\xfb\x6c\x59\xa5\x50\x65\x76\x46\x84\xc1\x53\x14\x6c\xf5\x5e\x85\xad\x21\x9e\x17\x3c\x15\xb4\x60\xce\x41\x1d\x7e\xc7\x65\x98\xb2\xd3\x12\x19\x9c\x49\x18\xf2\xec\xe5\x16\xde\x52\x6e\x75\x3a\x9c\xb0\x10\x7e\x0e\xb7\x09\x82\xc0\xe1\x63\xb0\xd1\xe2\xb4\xba\xec\xe5\x11\x65\x76\xb1\xb4\x82\x81\xd7\x88\x1d\x55\xe9\x99\x4e\x1e\xfa\x62\x92\x60\x15\x34\x9e\x50\x29\x9f\xb6\xe7\x09\x46\x8b\xd1\xf7\x84\x3f\x26\x5c\x10\xac\x02\x07\x95\xbe\x44\x87\x51\x30\x5a\xf2\x22\xf2\x2c\xa6\x02\x03\x83\xaf\x11\x09\xd9\xf5\x35\x26\x1e\xab\x25\xbd\x60\x13\x34\x42\x65\xb3\x34\xc0\xf3\x06\x57\xe7\xac\xa8\x6d\x65\xe0\x75\xc2\x55\x5e\x90\x67\xe7\x21\x15\x87\x46\xb2\x8d\x4e\x6d\xe8\x4f\x85\xac\x67\x89\x34\x92\x96\x04\x52\x4a\x43\x87\x2f\x0d\x4b\x14\x30\xd3\xf3\x2b\x2d\x90\xbe\x47\xb0\x24\x5d\xe0\x63\x0b\x26\x0b\xd3\xa7\x2a\x05\xdd\xfc\x4c\x7c\x94\x4b\xc3\xc1\x36\x1c\x2c\x68\x50\x4b\x0a\x56\x1c\x5c\x8f\x83\xb9\x1a\xec\xf3\xae\x4e\xd0\x7c\x34\xed\x56\xf1\x41\xb3\x52\x80\x81\xd9\xd2\xfa\x02\x4e\x20\xa5\x47\xa0\xa4\x5e\xe0\xf7\x94\x7e\x26\x7c\x74\x59\x29\xbc\xfb\x6e\x0d\xf4\xe1\xea\x61\xb0\x15\x06\x0b\x1a\xd0\x92\x82\x0d\x06\xa7\xc1\x60\x2e\x13\x1e\xd5\x9d\x12\x34\xd3\xaf\x4c\x16\x62\x4b\x95\x02\x96\xd4\xf9\x1e\xe1\x7a\xbd\x26\xa8\xe0\xae\x83\x6c\x88\x34\xc4\xf3\x31\x8d\xb7\xb1\x45\xca\xc1\x2b\xf0\x23\xec\x57\x48\x06\x2c\xa1\xf1\xf1\x11\xd8\x0d\xfb\x14\xc5\xa4\xd5\x6a\xb5\x29\x8a\x48\xfc\x11\xf7\xe1\xe3\xdd\x0a\x0c\x22\xa5\x6c\x3c\xaa\xb0\x92\x36\x9b\xcd\xaa\xb0\x91\x52\x0e\x1c\x55\xf8\xaf\x6a\x43\xbf\xa5\x7d\x72\x13\xb7\xb1\x59\x32\xc1\x69\x85\x64\xc2\xd3\xb4\xcf\x84\x67\xa0\x1b\xf7\x4b\xd9\x70\x45\xe1\xcb\xf6\xdc\xa1\x51\x2e\x99\xf0\x34\xdc\x86\x66\x45\xd8\x79\x18\x13\xec\xed\x81\x31\x21\x5a\xc5\x3f\x46\xd0\x92\x1e\xa2\xfc\x6a\xad\x77\xb5\x47\x0d\x51\x3e\x3d\x09\xd3\xa4\x46\xda\xd3\x82\xcf\xec\x86\x51\xfe\x16\x98\xa0\xf8\x18\x36\xd1\x9e\x38\xbc\x7d\x11\x06\xfb\xe3\xe0\x3b\x05\x68\x60\x3d\x2d\x79\x7d\xce\xbb\xd0\xc7\xe7\x95\x9c\x0a\x78\x1b\xca\x69\x54\x8f\x90\x92\xfc\x34\xa8\xbb\x15\x5a\x9c\xef\xbf\x4c\x7b\x3a\x61\x8c\xbf\x33\x90\xb0\xaa\x84\xed\x2b\x40\x09\xab\xfa\x65\x8a\x57\xf4\xa8\x69\x50\xb1\x48\x42\x20\xe8\x41\xf5\xe5\xc9\x7f\x53\x3c\x70\xfd\x20\x01\xa7\xc1\x34\x4c\xc0\x04\x9c\x86\x81\x63\x20\x8f\x45\x02\x24\xc0\x34\x98\x06\x09\x1c\x04\x49\x4f\xd2\xef\xac\xee\x5c\xb8\x70\xf5\xea\x85\x0b\x3b\x57\xbf\xf3\x4e\x67\xe7\x3b\x9c\xcf\x0a\x89\x34\x84\x82\x59\x5c\x73\x87\xdf\x93\xbd\x3d\xa3\x35\xb1\x35\xb1\x36\xa9\x2a\x56\x79\x70\x88\x09\xcd\x18\xaa\xc1\x50\x11\xcd\x6b\x86\x70\xd9\xb1\x19\x49\x89\x89\x89\x89\x49\x19\xb1\xd9\xca\x35\x43\xd0\x2c\x06\xbc\xe7\xd0\x6c\x3a\x38\x84\x8f\xad\x4a\xaa\x4d\x6c\x4d\x6c\xcd\xd8\x9e\xbd\x47\xb9\xe6\x8e\x08\x66\x08\xd5\x40\xa8\x09\xcc\x07\xef\x70\x55\x7b\x6a\xb7\xb7\xb6\xb6\xb6\x6e\xaf\xdd\x53\xa5\x3c\x78\x07\xcc\x26\x08\x65\x3c\xa2\x9f\xa2\x7f\xb7\xdd\xcb\xff\x9d\xcb\x87\x3e\x9b\x21\x78\xf4\xad\xd1\xb7\x30\x78\x07\xf6\x71\x28\xfb\x3b\x06\x58\xfb\xf7\x1f\x60\xeb\xff\xf0\x20\xec\x93\x8f\xc1\x9b\x47\x8f\x1e\x3d\x7a\x33\x06\xe7\x63\x1f\x65\x7e\x7f\xdb\x00\xa1\xbf\xd0\xdf\x3a\xa0\xff\xc3\x83\x1d\xd8\x67\x07\x06\xdf\x1a\x7d\x6b\x34\x04\x6f\x86\x3e\xf9\xca\xdf\xf3\xef\xd9\x7e\xff\xfd\x9e\xf5\xf7\x87\x07\x41\x1f\x07\x04\xef\xb8\x75\xeb\xd6\xad\x1d\x10\xec\x80\x3e\x4a\xc7\xef\xd6\x7b\xbf\x6b\xc2\x16\xb3\xd0\x2a\x4d\x82\x48\x69\x12\xb4\xaa\x13\xb7\x52\xbe\xb7\xfc\x22\x0d\xe3\x29\xe9\xfd\x7e\x30\x3e\x90\x92\x56\xf4\x0e\xa1\x71\x19\x9e\x55\x48\x43\x08\x78\x06\xf5\xf4\x40\x88\x52\xf8\xea\x89\x81\x18\xa5\x78\x82\x90\x56\x78\xa6\x4b\x2b\xfc\xd3\x15\xf0\x01\x88\x81\x4f\x43\x38\x15\x6e\xc1\x63\x30\x06\x42\x20\x19\x42\xc0\x01\x0b\x21\x34\x58\xba\x05\x5b\xa4\xc8\x96\x10\xcf\x7b\x9e\x09\xf4\xbf\x87\x9f\x7a\x65\x35\xf7\x5c\x8c\x80\xaa\x2f\x62\x2f\xaf\xbc\x7b\xc1\xf0\x95\x12\x42\x1a\xe9\x6a\x0c\x1b\x89\xff\xc4\x30\x83\xfc\xbf\xf2\x17\x0b\x84\x15\x7c\xff\xde\xcd\x2f\xf7\xc1\xbf\xce\xc2\xd8\x27\xea\x70\x80\x12\xf2\xa4\x03\xf4\xcc\x99\x4f\xe5\x3d\x63\xc4\xa1\x69\x38\xd2\x86\x43\xeb\x27\x38\x47\x89\xd1\xe7\x0e\xbc\xf7\xb1\xeb\x03\x27\xbc\xbe\x1b\x74\x56\x78\x7d\xd3\x05\xc3\x55\xe3\xe1\x39\xca\xd3\x3d\x0d\xb4\xad\x63\xcf\xe9\xa5\x55\x78\x02\x17\xf9\xc6\x0a\xf8\x0e\x2c\x4a\x37\x85\xe7\x67\xd6\x0c\xab\x19\xb6\x6d\x44\xc4\xe9\x61\x10\xb6\xe1\xb7\x34\x58\x14\x0b\x9b\x5c\x30\xfd\xe7\xdf\x4e\x67\x42\xf8\x8e\xff\x28\x61\x86\x77\x3e\x6d\xdf\x53\x7e\x60\xeb\xae\x37\x2e\x8e\x6f\x7f\xae\x19\x37\x77\x61\x66\x39\xa6\x24\xf7\x37\x46\x66\x3c\xbe\x7e\xca\xe6\x21\x6b\x73\x47\x6f\xc3\x35\x07\x71\xd5\x1e\x5c\xe5\x9c\x2d\xbc\x74\x72\xb5\x12\x14\x51\x30\x60\x3d\xf0\x59\xb0\x2a\x19\x12\x6a\xe0\xf5\x1f\x4e\xb4\x7e\xb0\xd7\xd5\xb5\x1f\x12\x0e\x40\x42\x07\x6c\x56\xca\xaf\xef\x0c\xb0\xdc\x06\xe2\x0b\x18\xff\x05\xbc\x0a\xfd\xaf\xc1\x8c\x60\x01\x2a\xe1\x97\x2f\x60\xec\x17\x70\x07\x2a\x43\x3c\xdf\x7a\x9e\xa4\xcb\x5f\x7f\x71\xe9\x82\x5d\x73\x5a\x84\xef\x4e\xb7\x2a\xdf\xde\xf9\xf1\xda\xb9\x9a\x2f\x6a\xe8\x9c\xbb\xa8\xfc\xe8\x89\x55\xaf\x27\xae\x8e\x2e\x99\x51\xfa\xf4\x97\x53\x6f\x96\xdf\x2c\xbf\xf4\xb5\xe1\xa6\x12\xa6\x48\x0c\xbd\xb1\x73\x7e\xf9\x92\x32\x64\x9a\x90\xb3\x21\xb3\x75\xb9\x79\x51\xde\xe6\x35\x47\x57\x9e\x37\x9f\xcd\x83\xa0\x1c\x08\xb6\xfe\x51\x75\xb6\xec\xa2\xe3\xf0\x11\xe5\x9b\xfe\x1c\x3a\x65\x5a\xc5\xc8\x29\xab\x90\x9e\x86\xa3\xf3\x70\xc0\xf6\x29\x95\x63\x5a\x56\x5f\x4e\xbf\x64\xb8\x9c\xfb\xb1\xbd\x22\xbc\xc2\x01\x1b\x71\x00\x9c\x14\x20\x1e\x06\x44\x74\x18\xb7\xac\xde\xaa\x81\x7e\x9e\x19\xf4\x16\x1c\x93\x88\xa3\x37\xe3\xe8\xbc\x65\x2b\x92\xd6\xa5\x22\x33\x1d\x47\x1b\x70\x68\xcd\xe3\xae\x41\xad\xcf\x7e\xb0\xae\x4d\x38\x9e\xf7\xe6\x16\x18\x96\x00\x8f\xa7\xc3\x70\xb1\xcb\xbd\xe3\x54\xa3\xf2\xca\xf6\xcf\x2a\x3f\x2b\x83\x71\x35\x30\x31\x1f\x9e\x5e\x76\x3a\xe3\x9c\x7e\xff\x92\xda\x64\x4b\x42\xc1\x56\x25\xd4\xfe\x12\xc9\xfa\x73\x3d\x77\xc0\x1e\xfc\x91\x77\x76\x88\x77\x1a\xac\xa1\x37\x66\xcd\xce\x59\x61\x55\xa2\xa6\x30\xe9\xa7\x8f\x35\x52\x35\x7c\x03\x76\xfc\x5a\x9a\x44\xa2\xb9\x40\x10\xf8\x02\x73\x41\x9e\x95\xcf\xc6\x7e\xb3\x30\x0d\xed\xa3\x94\x18\x0f\x93\x7c\x9d\x24\xce\x02\x16\x6b\xe1\xbe\x83\x83\xb0\x62\xd0\xbe\xd3\x76\x44\x29\xaf\x37\x5a\x22\x28\x44\x1b\x9a\x78\x95\xd6\xc7\x0d\x58\xfb\x44\x91\x12\xdb\x2d\x03\x60\x25\x0c\xd4\x48\xe3\xb0\x1f\x4c\x20\xe1\x8d\x8f\xdf\x82\x69\xae\x9f\x95\x65\x36\x7b\x49\x09\x23\x94\x08\x30\x93\xc3\xcf\x41\xc4\x37\xd0\xe9\x1b\x40\xea\x1a\x5f\xb8\x5b\xc2\x75\x1c\x71\x56\xb4\xf0\x1f\x60\xb4\x42\x1a\xe4\x6d\x8b\x64\x7b\x72\x51\xa7\x25\x4e\x42\x2c\x1b\xe2\x71\x80\x91\xae\xb0\x18\xca\x72\x18\xd4\x6b\x43\x6f\x10\x3a\x4a\x8b\x91\xa8\x27\x73\x0c\x81\xef\x15\xb9\xc5\x39\xe5\x46\x00\x9f\x3a\x3c\xdf\x11\xf8\x5e\x11\x4b\x89\xe5\xa5\x0e\x07\x07\xbf\x4a\xea\x72\x67\x71\xa5\xa5\x22\x22\xac\x27\x17\xc5\xbf\xda\xf3\xee\xa0\xed\x15\x45\x95\x79\x4e\x04\x49\x1d\xee\xc8\x37\x95\x9a\x64\x2a\x53\x5e\x41\x7e\x3e\x87\xbf\xfa\xd4\x79\xc6\xa2\x1c\x7b\x6e\x44\xae\xdd\x65\xae\x64\x40\xaf\xc5\x48\xa2\x8d\xd5\x86\xde\x00\x3d\x59\xe9\x2a\x77\xd9\xf9\x30\xf8\x81\xed\xd2\x12\x27\x43\x32\x59\x8f\x7e\x2e\xab\xc5\x48\xd0\x13\x95\x79\x2e\x83\x9d\xcb\xb5\xe7\x14\x19\x4d\x3e\x35\xfe\x11\x9e\x9f\x5f\x60\x32\x69\x40\xc9\xf6\x46\x29\x48\x6a\xfc\xd5\x99\x57\x59\x54\x61\x8f\xa8\xb0\x97\xb9\x2a\x35\x20\xdf\x0e\x39\x8e\x92\x5b\x13\xe4\xd6\xb4\xc4\x49\xcf\xbf\x68\x50\xb2\x62\x41\x79\xbe\x83\xf3\xa9\xe1\x57\x63\x79\x4e\x71\xae\x25\x22\xd7\x62\x36\xe4\x68\x50\x66\x85\x7c\x5e\x66\x05\xf5\x44\x4e\xb9\xc1\x65\xe1\x2a\x2c\x95\xc5\x4e\x51\x52\xc3\x1f\xe1\x0e\x47\xa9\x28\x06\x52\x1c\xef\xa1\xb4\x8a\xa4\x10\xad\x22\x09\x3e\xa1\x67\xd7\xbd\xf1\xe6\xb2\x0b\xca\x65\x17\xf4\x57\xaf\x6b\x3e\x6d\xba\x74\xe8\x03\xae\x65\xcf\xfe\x03\x27\x0e\xc7\xbd\x19\xdb\x11\xdb\xa2\x3c\x34\x73\x5a\xd3\x44\x66\xf1\x9c\xdc\xe4\x19\xbc\x7e\xc6\x12\x43\x02\xa3\x5f\xe6\x6c\x78\x99\x6f\x78\x69\x8e\x73\x31\x83\xe4\x13\x4b\x46\x4c\xe1\xa7\x0c\x5f\x87\x8f\xe2\x13\x1a\x7c\xe6\x38\x4e\xfc\x09\xa7\x70\x38\xe5\xe7\x9f\xa3\x7e\x65\x76\x1f\x76\x35\xbf\xcb\x37\x9d\x7a\xdb\x75\x90\xe9\x7c\xc7\x98\x7c\x96\x4f\x39\x77\xd4\xd0\xc1\xdc\xf8\xfa\x3c\xfc\xeb\x6b\xfe\xcc\x37\x07\xbf\xda\xf6\xb9\xd2\xf7\xb0\x36\xd4\x49\x97\x59\x1d\x65\x1a\xab\xa3\xa8\xac\x48\x44\x65\xe2\xf8\xc5\x8b\xa6\x2e\x9a\x9a\x34\xb6\x68\xe8\x5b\xa5\x1d\x8e\xe6\xb2\xbd\x15\x7b\x5b\xf6\xee\x7d\xf3\xcd\x5d\x47\x1b\x8e\x2b\xeb\x8f\x39\x8f\x76\x6a\xc2\x22\xf3\x53\xe0\x16\xe5\x99\x2c\xb5\xd2\x82\x7f\xb2\xef\x14\xe9\x99\xfc\x84\x42\xab\xd8\x12\xea\x9f\xfc\x84\xc2\xf7\x81\x67\x32\xe9\xdd\x30\x9e\xee\xe1\xfd\xc3\x08\x2f\x8f\x8f\x29\x0e\xb2\xa1\x3d\xf2\xd1\x3f\xda\xcb\x93\x61\x78\xdf\x4b\xc1\xc4\x60\x01\x56\x41\x32\xac\x02\x0e\x56\x83\x1e\x56\x85\x48\x46\xef\x7e\x3a\x25\xa3\xae\xb1\xb1\xb6\xae\xb1\xa9\x36\x3d\x25\x25\x23\x3d\x99\x97\x9e\xed\x97\xdc\x7b\xae\xa9\xb1\xf7\x5c\x0a\xef\x3f\x89\xaf\xd1\x73\x97\x2d\x9b\xc7\xfb\x5e\x24\xe7\x1e\x5d\x76\xfa\xf4\x91\xa3\xa7\x39\xe9\x45\xf2\xbd\x65\x47\xe7\x71\xde\x23\x69\x74\xcf\x70\xff\x93\xc4\xac\x63\x8b\xdf\xe7\x3e\x21\x6c\x98\xaa\x98\x7b\x74\xd9\x7b\xa7\x8f\x1e\x3d\xcd\x41\x2a\x70\x98\xda\x4b\xd4\x5b\xbe\x4a\x9e\x3b\x76\xec\x7d\x1e\xb3\xbc\xef\xd1\x97\xe1\x5f\xa5\x65\x45\xa2\xb9\x34\xc2\x5c\x62\x2a\x2a\x30\x4f\xc5\xf0\xf0\xd6\x59\xd3\xab\xa7\x32\x53\xa7\x67\x25\xce\xe2\xa7\x42\x78\x41\x99\xa9\xd8\x5c\x18\x61\x2e\x28\x32\x95\x9a\x2f\xe3\xbf\xc2\xb1\xff\xd4\x91\xc8\xe1\x18\x8d\x77\x34\x01\x63\x46\x02\x87\x91\x57\x38\x29\xc9\x97\x45\x9f\x5e\x76\x64\xee\xbc\x65\xcb\xe7\x72\xbd\x5c\xf6\x32\x10\x86\xe2\xb1\x15\x9d\x6f\x35\xa6\x76\xc3\xd7\xb5\xd2\xf1\x8b\x87\x1b\x80\x6c\x28\x6e\xc8\xae\x36\xb7\xbd\xdd\x98\x55\xd7\xb7\xac\x2d\xb5\x5e\x68\x87\x41\x3f\xfc\xf4\xad\xf8\x76\xfc\x2e\x67\x67\xdc\xfe\xf3\x5f\xb7\x9e\xe8\xa8\xd9\x73\x66\x6f\x13\xcc\x80\xf1\xa6\x6a\x78\xac\x51\x55\xff\xea\x07\x3f\x79\x46\x78\x3d\x74\x7c\x71\x91\xde\x69\x53\xba\xcc\x75\xc5\x0d\xbc\x40\x7e\x93\x4d\x3b\x4b\x8d\x0d\x09\x39\x4a\x81\xac\xb3\xdb\xd2\x9c\x25\x4a\xfc\xcd\xf7\x3c\x5d\x5e\x68\x31\x59\x32\xf2\xb3\xb3\x73\x2d\x36\xa5\x40\x66\x17\xd7\x39\xcb\x2a\xc5\xaa\xa2\x3a\xb1\x50\xe9\xe9\x46\xa4\x57\xef\xc6\x3e\x8e\xc2\x89\xca\xe4\xcc\xa2\xcc\x1c\x5e\x35\x34\x28\x68\xd4\xa2\xd9\x47\x91\xb2\x44\x2b\x55\xfd\x82\xde\x0f\x2a\x98\x97\xa9\xcb\x9b\xb7\xc9\x56\xd2\x28\xee\x52\xaa\x1e\x0a\x7a\x34\x48\x6c\xad\xdc\x6d\x6b\xb7\xb5\x15\xd6\xe5\x95\x9a\xed\x06\x53\x66\x52\x9c\xee\x85\xad\x2f\xe7\x4d\x37\x45\x97\xc5\xed\x37\x54\xa6\x66\x14\x15\x16\x5a\xaa\x4c\xae\x54\xa5\x2a\x68\x14\x11\x54\xb3\xb9\x7a\xc5\xba\x54\xdb\x9d\x78\xc7\x86\x0f\x94\x02\xa9\xfa\x87\x72\xc0\xa5\xae\x32\xf1\xa3\x8d\x3b\xb7\x6e\x43\xee\x6e\xec\xc1\x8c\x3a\xbd\x68\x6a\x4c\x7e\x3b\xeb\x52\xeb\x31\xbb\x58\x5a\x50\x90\xae\x0c\xf0\x91\x3c\xe0\xa3\xb1\xd5\x87\x5d\x6d\xc6\x53\x8e\xc3\x4a\x55\xd0\x94\x17\x83\x9c\x9f\x5e\x82\xc7\x77\x95\x2f\xbd\x79\xf7\x23\xeb\x67\xd6\xe3\x47\x30\xe4\xc8\xd6\xe3\x49\xef\x7e\xfa\xef\xfd\x4d\xae\x1d\x15\x45\x4e\xb9\xc3\xd0\x29\xa6\x23\x4f\x0e\x19\x5f\xb8\xce\x9a\x2d\x66\x55\xad\x38\x74\x2c\xe6\x42\xc5\x4e\xbb\xd3\xbe\xab\xb2\xbd\x62\x4f\xfd\x1e\xa7\x52\x55\xa8\x0c\xde\xbd\xcd\x51\x54\x6f\xb4\x5b\x4a\xf2\x04\xb3\x21\x2b\x69\x5a\x56\xb2\x39\xc1\xb4\x31\x6f\x55\x71\x74\x71\x75\xdb\xb2\xed\x39\x65\xa5\x0d\xb5\x75\x4e\x71\x9b\xa3\xb2\x51\x59\x5c\x52\x53\x5b\x29\x96\x96\x08\xff\x5e\x6b\x93\x47\x20\xf2\xd1\x38\x9b\x31\xc9\x96\xa4\x4c\x2a\xae\x4a\x16\x99\x3a\x5b\x46\xaa\xb1\x30\xcb\x92\xfa\x61\x49\x5b\x71\x7b\xcd\x7b\x07\xad\x7b\xad\xdb\x97\x5b\x9f\x53\xe6\x9c\xa9\x6f\x48\xe1\xaa\xb2\x67\xc2\x48\xe0\x5c\x7b\xcd\x7b\x72\xab\xc6\x5b\xf2\xaa\xe6\x24\x9b\x13\x4d\x19\xce\x9a\xed\xce\xed\xc6\x0b\xba\x82\x79\x85\xe5\x43\xab\x8b\xaa\x8b\xf6\x27\xb6\x5a\x94\xdf\x64\x44\x2f\x72\xcd\x52\xaa\x1e\x0d\xb2\x07\x55\x4e\x3f\x52\xd7\x89\xaf\x96\x1b\x3a\x8c\xbb\x31\x72\x27\x3e\xb6\xfa\xa9\x8f\xcb\x6b\x6c\x2d\x76\xe7\xde\xed\xdf\xad\x81\x90\x35\x57\xf5\x87\x93\x77\xe6\x3a\x8f\x26\x9e\x8d\xaa\x8a\x56\xd6\x8d\xab\x88\x49\x1c\xad\xac\x31\x1f\xc8\x48\xd7\xf8\x95\x9e\x8f\xe8\xc2\x22\xc1\xca\xa9\xa6\x84\x16\x06\x99\xac\xe5\x15\xc5\xbc\x58\x6c\x71\x14\x30\x02\x99\x5f\x54\x54\x57\x51\xe8\x28\xaa\x48\x2f\xd8\xa2\x94\xc6\xe3\x22\xba\x24\xdb\x94\x99\x5b\x9c\x5a\xba\xf4\xed\xc6\x66\xa5\x4a\x19\x1c\x14\x24\x90\x2a\xe5\x43\x41\x41\x65\x65\xa5\xa9\xf5\xb9\x35\xc6\xaa\xb2\xd2\x34\x25\xbe\x0c\x71\x74\xa1\xb1\xa0\x58\x53\x54\x9d\x57\x95\x57\xac\x14\xc8\xfc\xe2\x02\x47\xa5\xcd\x6e\x6b\xcc\xb5\x6e\x55\x9e\x82\x6c\xda\x62\xd0\x97\x58\x8a\xd2\xcc\xf9\xe9\xa6\x32\x63\x79\xb5\x58\xea\x52\x0a\x64\x89\xd3\xd8\xd8\x50\xac\x2c\x2f\x37\xe7\x95\xf3\xa2\xb9\x32\xdf\x6a\x51\x4a\x1f\x68\xbd\xef\xd1\x9b\xeb\xa6\xd7\xe7\x43\xbf\x24\x7d\x09\x3e\x72\x65\xeb\x17\x89\xc7\x97\xe3\xb0\x85\x4a\xd5\xa3\xc1\x41\x41\xc3\xe2\x32\x8c\xcf\xbd\x3a\x69\x06\x52\xdb\x1b\x81\x73\xb9\x1d\x67\xd3\x3f\x34\xb5\x15\x1c\x74\xb4\xba\x4e\xed\xac\xd9\xb9\xb0\x6e\x83\x63\x5d\x57\xa1\x52\x35\x3b\x34\x28\xe8\x97\x82\x86\x3b\xed\xf6\xc6\x92\xa6\xf7\x33\xff\x93\x7e\x6f\x26\x4c\x98\xf4\x95\x52\x65\x08\x0a\x0a\x9d\xf1\xf1\xea\xf7\x93\xbe\x49\xfe\x24\xf7\x72\xe9\x25\xc7\xcd\xc5\xd0\xe7\xb9\x33\x8b\xf7\x4e\x6e\x78\xd9\xaa\x5c\xbb\x3e\x3f\x6b\x33\x8f\xca\xd7\x32\x47\x17\x0f\x2a\x1e\x51\x82\x0f\xb9\x06\xe6\x2c\x99\x3e\x6a\xe5\xbc\x39\x73\x13\x30\x64\xdd\xf0\xd4\x85\x1b\xb6\x16\xce\xb0\xa6\xd9\x96\xd4\x56\x7d\x74\xe2\x06\x86\x03\x8d\xcb\x95\x02\xd9\xb2\xf6\x1b\x1c\x8f\x23\x53\x16\x9a\x27\xec\x9d\xd4\x30\xad\xf6\x45\xd7\x1a\xd7\x96\xff\x8b\xb0\xff\x80\x6e\xe2\x0a\xfe\x86\x61\x1b\x7b\xa5\x45\x21\x0e\x20\x2d\x58\xbb\xd2\xae\x09\x01\x42\x09\xd5\x94\xd0\x21\x21\xf4\xd0\x4c\x33\x1d\x8c\x6d\xdc\x31\xee\x4d\x92\x65\xcb\x92\x56\x92\x65\x59\xee\x1d\x1b\x17\x6c\x6c\x8a\xe9\x25\x74\x12\x4a\x68\x0e\x21\x81\x84\x96\x46\x48\xa7\xcc\x4a\x23\xf3\xff\x8e\x4c\xf2\x3c\xdf\xf3\xbc\xe7\xbc\xef\x39\xbb\x3b\x77\xe7\xce\xcc\xbd\x77\xcf\xd5\x6a\x67\x77\xee\xfc\x6c\x1a\xbb\xa1\x20\xbb\xbe\x6d\x9f\xa9\xd9\xdc\x9c\x51\xae\xde\xa5\xde\xa5\xaf\xb2\x17\x92\x79\xf6\x12\xcb\x4e\x43\xa3\xbe\x35\xaf\xb2\x68\x77\x65\xe9\xfe\xf4\xe3\xe4\xda\xd4\x94\xad\xf1\x6c\x48\x62\x40\xf9\xf6\xb8\xc8\xed\xed\x9f\xe8\x57\xe9\xb7\x6e\xd9\x50\x11\xf4\x66\x5a\x56\x04\x3d\xd4\x3d\x49\x86\xde\xdb\x3b\xd6\x5d\x30\x3c\xd4\x17\x3f\x04\x5f\xcb\x7e\xd3\x3e\xf3\x3e\x13\x79\xe8\x10\x6f\x3c\xcc\x3d\xd1\x47\xae\x3b\x1f\x75\x22\xf6\x71\x41\x75\x55\x43\xfd\xd7\x57\xce\x37\x92\x52\x0f\xb5\xc7\xf4\x8e\xbd\x30\xe5\x32\xbe\xf3\x75\xd7\x33\x97\xb7\xf0\xe4\xef\x54\x10\x09\x15\xe0\xdd\x9b\x07\x6f\x05\xe1\x07\xde\xd2\xfb\x4e\x7b\x1b\x15\x36\x79\x6c\xd2\x48\x06\xc7\xe0\x80\xf3\xbf\xa0\x88\xe3\xed\xd9\x79\x3a\x16\x7a\x43\xbd\x20\x07\x05\x4f\x9b\xcc\x26\x13\xf3\x33\x66\xed\xc3\xb5\x05\x4b\x48\x5c\x28\x3c\xa7\xb4\xfa\x4c\x43\xa6\x9e\xe4\xf1\x15\x8a\x70\x36\xde\x66\x81\x54\xf6\x07\x72\x3e\x0c\x87\xc9\xb4\xf4\x7d\x1b\x6f\x33\xd9\xd8\x42\xb8\xab\xfd\x0b\x7e\xe2\x2a\x83\x2b\x82\xcb\x82\x49\x3f\x08\xa5\xa4\xf7\x27\xe0\x75\xac\xb7\xa4\x30\x87\x60\x03\x28\x60\x0a\xcc\x7f\x64\x57\xc1\xdb\x38\x01\x44\xb8\x9e\x74\x4c\xc7\xdb\x54\x24\xce\xef\x8f\xa3\x71\xd0\xfb\x59\xfb\x43\x61\xf9\x58\xd0\x40\x68\x0b\xcc\x5f\x52\x92\x43\x76\x1e\x75\x24\x53\x46\xa3\x91\xe7\x4c\x5d\x20\xe8\xc2\x63\x1c\x40\x19\xf4\xc3\xf1\x5d\xe4\x47\xa0\x37\x6c\xc6\x9e\x30\x5e\x53\x4c\x16\x9d\xfc\xcc\x76\x9a\x91\xbe\x07\x13\x61\xd8\xc2\x01\x20\xe6\x60\x87\x2b\x99\xd2\x9a\x70\xc7\x09\x4c\x88\x22\xa5\xab\x74\x85\x39\x45\xba\xc2\xf4\xe6\xb4\xe6\xb4\xdd\x50\xf4\xf2\x05\x0c\x33\x9b\x7f\x46\xef\xb3\xd8\xdf\x8c\x23\x48\xf0\xce\xa2\xfc\x24\xf3\x21\xcb\x39\x05\x52\x7b\x83\x5e\xa9\x70\x4e\x87\xab\x8e\x7d\xf0\x99\xf4\xa1\xc2\xbb\x40\x88\xa4\x70\x03\xae\xfa\x00\x17\x63\x3c\x2e\xfe\x13\xde\x39\xbb\xfb\xe4\x4d\xf6\x55\x01\x0e\x87\x85\xcc\x93\xf3\xfb\x4f\x5d\x09\x28\x18\x5d\xc3\xe1\xc0\x36\x02\x07\xb6\xa2\xf7\x25\x98\x4c\xc3\x06\x58\x77\x07\x66\xc0\x12\x58\x36\x1d\xc5\x4b\x82\x56\xcd\x63\x87\xe8\x41\x8c\xa3\x98\x31\xcb\x76\xac\x58\x72\x3e\xe3\xeb\x64\xee\xf9\x0e\x02\xde\x0d\x87\x29\x8b\x70\x26\x0d\xff\x83\x91\xd4\x93\xc8\xfb\xab\xaf\xb2\x05\xc7\xf3\x4e\x9d\xa2\x05\x39\x5e\x87\xeb\x2e\xf9\xaa\x55\xd9\x9a\x35\xec\xc9\x79\x13\x9b\xc6\x30\x59\xca\x31\x4d\x13\x4f\xce\xe3\x34\x6b\xb2\x57\xad\xa2\x5d\x72\xb8\x8e\xd7\x05\xf9\xa9\x53\x79\x05\xc7\xd9\xd5\x57\xef\x47\x3e\x61\xa4\x77\x1f\x4b\x5c\x2a\x61\x30\x2c\x84\x63\x5d\x71\x6a\xf3\x3d\x0f\xc3\x7c\x67\x9a\xdd\xcb\x99\xe6\x7c\x4c\x25\xe4\xc4\xc4\xef\x60\xf8\x58\x1e\xbf\x0a\x8a\x8e\x09\x62\x37\x89\x83\x1a\xa2\xf7\x43\x65\x03\xcf\xb3\xf5\xf5\x91\x51\xd9\x5c\x76\x54\x34\x0e\xd4\xa7\x92\xa9\xfa\xa4\xe8\x30\x86\x8f\xe1\x31\x74\x83\x2a\x3b\x34\x92\xe5\xa3\x82\xb1\x14\xaf\xb3\x7a\xbd\xde\x64\xa1\x9d\x8f\xc4\x75\x35\x8d\xcd\x8e\x19\xf5\x6e\xcd\xda\xd8\xf0\x2c\x0e\x96\x36\x50\xc0\x36\x84\x7e\x85\x7d\x98\xce\x3c\x7c\x87\xe7\x39\xf4\x09\x19\xb1\x84\xe3\xf9\x25\x0a\xe7\x11\x7a\x6e\xeb\x8e\x2a\x2d\x5b\xa5\x3d\x93\xd5\xb2\x8f\x14\xc6\x0b\x29\xb6\x7c\x9e\x2e\x2c\x30\x19\x0b\xab\x61\x1c\xff\x84\x01\x51\xc5\x77\xc7\x8a\xb8\x82\x76\xf0\x12\xae\xed\x85\x39\x24\xef\x1d\x8c\x73\xd0\xcb\x75\x4d\xb3\xb9\x6b\x3a\xb7\x3b\x3b\xe0\x27\xa5\xd0\x0e\x32\xa1\x1d\xfc\x65\x13\x1c\x01\x10\x40\x4d\x94\xb8\xe2\x86\x29\x9d\xf6\x35\x4a\x21\x6e\xa9\xe4\xb5\x5d\xec\xf0\x17\x64\xff\x72\x1d\xb2\x37\xdc\x4e\x99\x18\xfc\x1d\xf6\x7f\x94\x2e\x95\xa3\x0b\x6c\xda\xa0\xf4\x32\x28\x85\x38\xaa\x32\xbb\x52\x53\xca\xa2\x5d\x90\x11\x17\xb7\x2c\x3c\x3e\x83\x71\xc9\x44\x33\x16\xae\x59\xbc\x85\x43\xbb\x4b\x46\x68\xd2\xb2\x93\x92\xe8\x95\x92\xe6\xa6\xb2\xfa\x0a\xf7\xa3\xc3\x53\xe2\x08\xfa\x8a\x90\x77\x8d\x20\xb2\x35\x7a\xb5\xaa\x0b\x6d\x1c\xeb\x44\x0b\x4f\xad\xfe\x9c\x05\x7f\x11\xd4\x48\x38\xa8\x83\x00\xf1\x74\x65\x91\xbe\x30\xbb\x80\x43\x5e\x18\x41\x80\xef\x11\x31\x24\xe2\x53\x22\xa6\xa2\x29\xb5\x99\x59\x28\x71\xf9\x3b\xda\xd3\x24\x3e\x9d\xff\xf6\x06\x02\xae\x40\x5c\xd7\x16\xe0\xe5\xb4\x3b\x3a\x60\x9f\xa4\x53\x26\xda\x2d\xe1\x5c\xfe\xc2\xdb\x4a\x78\x71\xe5\xf5\x7b\xf0\xb1\x52\x08\xba\xe2\x0a\x82\x8f\x95\xce\xf7\xae\xe0\x0b\xe1\x6d\x25\xb6\x3b\x5e\xa4\x75\xf9\xaa\x25\x90\x41\xe1\xdf\x42\x64\xcc\xde\x70\x78\xeb\xaf\x2f\xe5\x8f\xcf\x7d\xb7\xf1\xd0\x6a\x32\xb9\xac\x3e\xfe\x33\xe6\xb3\x86\x9a\x8a\x32\xee\xd0\xc9\xef\x0e\x3d\x5a\xf6\xf7\x9c\x70\x7c\x2b\x26\x98\x14\x46\xcd\xe9\x5a\x4a\x69\x57\x88\xfe\x07\x6f\xc3\xed\xde\x90\xf4\xb3\x4e\xf2\xb3\x74\xaf\x82\x38\xed\x90\x51\x78\x0b\x0b\xb1\x10\x6f\xb9\x29\x14\xc2\x2d\xb8\x05\xff\x8b\xba\xf9\x2c\x34\x62\x13\x65\x29\x30\x16\x66\xe7\xe3\x1c\x30\xf9\xc2\x1c\x30\xe5\xd9\x4d\x05\xfa\x02\xb9\xbe\x40\x6b\xcb\xb4\xe0\x91\x67\xbe\x70\x51\x5c\xa0\x2b\xd0\xe6\xb1\x99\x79\x1a\xb3\x26\x07\x8f\x7c\xe0\xeb\x16\x56\x95\x45\xf3\xaa\x54\x39\xce\x41\x13\x1e\x79\xaa\xc9\xd5\x18\x32\xb3\xe5\xda\x6c\x9d\x46\x43\xe3\x45\x31\x1e\x19\x9a\xa9\xd7\x66\xe9\x35\x72\xbd\xc6\xa4\xc9\xcb\x84\x39\x68\xf2\x75\xcb\x66\x6b\x8d\x6a\x8b\x46\x6e\xd1\xe4\x67\xd9\xf5\x70\x64\xa8\x2f\x5e\x14\x6b\xac\x9a\xfc\x6c\xd6\x9e\x5d\x60\x28\xc8\x85\x23\x4f\x7d\xdd\xc2\x84\x36\xaf\x40\x57\xc0\x14\x14\x58\xf3\xf3\x38\x77\xbf\xe0\xc8\x07\x05\x39\x05\x66\x7b\x9e\x3c\x3f\xcf\x5a\x50\x40\xc3\x45\x31\x1c\x79\x46\x48\x63\xec\x96\x7c\x9b\xa5\x80\xf4\x89\x54\x42\x5c\x57\xe2\x19\x19\xbc\xe8\x42\xf9\xfc\x03\xd2\x29\x1c\x80\x3d\x70\xee\x18\x5c\xce\xe0\x4b\x3c\x00\x6b\x94\x70\x08\x96\x82\x1e\x2a\xbf\xe5\xe6\xf4\x0b\xc6\x9e\x28\xa5\x5d\x62\x38\x83\x67\x04\xf1\xde\xbd\x96\xbc\x36\x16\x36\x3c\xa4\x0a\x6b\x75\x8d\x49\x95\x49\x95\xd1\xd6\x58\x35\xb9\x6d\xe6\xb4\x94\xc9\x0c\x9e\x46\x3d\xe8\xe1\x34\x0c\xbf\x0c\xef\x82\xe8\x39\x57\x59\x61\x6b\x54\xd7\x69\x6a\xe3\xca\xa2\x8d\xa4\x6b\x74\x1a\x7e\x83\x3f\xba\xc6\xd0\x70\x5b\x09\xa7\xa0\x1e\x3e\x82\x5a\xe8\xc5\xfa\x54\x3b\xec\x10\xd0\xf5\x92\xcb\xd9\xe1\x08\xe8\xfa\x84\x64\x17\x85\x46\x35\xb6\xfa\x2b\xc1\x5e\x2a\x11\x3a\x20\x20\x44\xa2\x70\xaa\xc7\x4a\x5e\x07\x8c\x50\xc6\x29\x47\x4a\xae\x28\x08\xb5\x9b\xe5\x61\x91\x2c\x96\x6c\x93\xf8\x55\x27\x08\xf6\x6f\x94\xd0\xe1\xd9\xac\x10\x4d\xf7\x52\x88\x36\x0a\x1d\x21\x12\x8c\x13\x81\x8c\xff\xf3\x1a\x0d\x33\x60\x06\x8c\x56\xca\x35\x4a\x9c\x81\x33\x7c\x3b\x1f\x8a\x70\x06\xcc\xd0\x28\xe5\x7f\x29\xc1\xcd\x98\xcb\x0f\x42\x19\x8d\x71\x22\x8d\x04\xe2\x44\x48\xee\x1c\xdd\xfa\x09\x8b\xeb\x31\x31\x2e\xc6\xbc\x65\xd7\x0e\xb9\xba\xb8\x54\x57\xca\x54\x94\xdb\x4a\x8a\x39\x98\x0f\x5b\x08\x1e\x7c\xd1\x17\xe6\xb2\x90\x23\x79\x2d\x13\xc3\x54\xe8\x0b\x3d\x78\x0e\x02\x71\x35\x01\xac\x04\x46\x2b\x31\x08\xb6\xfa\x1e\xb8\x55\xff\x14\x7a\xd1\x10\x37\x52\xe2\x8a\x13\x3a\x28\x98\x25\xc8\x24\x38\x0b\x67\x61\x7f\xa1\x9b\x92\x75\xc8\x44\x3e\x30\xb8\x26\xc1\xc9\x37\x6a\x6d\xbd\x15\xe2\xe8\x52\xe9\x0d\x85\x38\xdd\x69\xa2\xf8\xf4\x03\xfe\x6a\x16\xdb\x0d\x44\xbc\x25\x35\x93\xa7\xf9\x94\x4c\x6d\x3c\xbb\x16\xdf\x5e\xd4\x9f\xa7\x51\x86\x51\x2b\x55\x09\x25\x64\xe0\xee\xe2\x5f\xaf\xd3\x10\xda\xfc\x64\xd8\x4e\x36\xc2\x16\x67\x9d\x68\x7a\xcf\xe4\x6f\x0c\xdc\x11\x96\x1a\x1b\x52\x6a\xa8\xd4\x1f\xca\xdc\x19\x41\xf2\x75\x9b\x73\x47\xb1\x85\x68\x5e\x15\xc1\xd3\x41\x09\xb3\x5b\x07\xc1\x66\x92\x5f\xf2\xf7\x7a\xf0\x66\xb5\xd5\xa9\x85\x3c\xcd\x27\x97\x6c\xcf\x65\xa5\x7b\xb1\xde\x40\x6c\x4a\x4b\xe2\xf9\xb4\xd4\x92\x30\x0e\xc2\x5c\x3c\xe8\xd1\xca\xd3\x3c\xec\xc0\x74\xc8\x2b\x63\x79\x10\x8b\x5b\x2d\x15\x95\x3c\xcd\x97\x55\x18\x5b\x58\x03\x0c\xbf\xbd\x93\xa7\x6f\xd6\xfc\x88\xd3\x9e\xcd\x25\xf9\x8e\xd5\x67\x0b\x59\xb0\xe7\x12\xc0\x98\xe6\x83\x37\x4f\xeb\xec\xe1\x37\x70\x38\xf4\x27\xa5\x37\xd0\x1f\x06\x57\xef\x80\x15\x50\x08\x12\x18\x75\xec\x59\x5a\x3b\xe9\x53\x3d\xf6\xef\x0e\xe8\x06\xb3\x61\x0b\x0c\xe8\xca\xc8\x36\x03\x1a\x41\xd9\x5b\xf0\xfb\x0d\x56\x15\x7e\x05\x4b\x85\x60\x90\xbc\x04\x56\x0a\x0f\x1d\xe3\xc1\x4a\x45\xad\x5b\x98\xb8\xae\x7a\x7d\x75\xfa\xe9\xc6\x23\x0d\x87\x2f\x55\x1d\x49\x3a\x96\x58\xba\x22\x7a\x1d\xf9\x14\xde\xa6\x34\xc9\x71\xda\x64\x5b\x72\xbe\xae\xb2\xa0\xa2\xa0\xbc\x26\xbf\x22\xbb\x22\x2b\x2f\x51\x93\x4c\xc2\x4c\x3f\xea\x12\xd0\x33\x80\xc5\x41\xfb\xb0\x5f\x1b\x8e\x99\xb5\x10\x7b\x2e\x44\xe9\x25\xec\x07\xfd\xd7\x91\x52\x52\x0d\xef\xaf\x81\x99\x5f\x5d\x02\x05\x09\x57\xc1\x9f\xaa\xc4\x95\x18\x87\x73\xf1\x64\x24\x29\xb5\x4e\xc7\x93\x51\x68\x07\x3a\x09\x56\x26\xc1\x4a\x88\x83\xb9\x70\xb2\x09\x4e\x36\x82\x1d\xe9\x4a\x5c\x49\xc2\xe7\x39\x14\x28\x50\x74\xf7\xbd\x66\x36\x36\x3f\xc5\x5a\xdc\xd2\x70\xdb\xf2\x45\xc4\xe1\x25\xdf\xe3\x98\x1c\x9c\x37\x95\x34\x2d\xdd\x5e\x72\x94\x6d\xf8\x31\xe7\xeb\x0d\x87\xde\xff\x03\xcb\x06\x60\x02\x26\x90\x52\x78\x88\x53\x70\xca\x60\x9c\x8d\x23\x68\x3c\x29\xf4\xc4\x39\x02\x29\xa4\xc2\x5d\x68\x83\x78\x76\x86\xc3\x9b\x5a\x7a\x65\x5c\xed\x94\x14\x52\x4a\x4e\x0f\xcf\x4a\x8c\xb0\x85\xe7\x85\x37\x27\x36\xdb\xdc\x8a\xbc\x78\x5f\x7e\xbb\xaa\x21\xa2\x21\x22\x7f\x93\x6a\x2b\xc9\x8b\x35\x11\xe5\x61\xbb\x35\xbb\x35\x2d\xe5\x05\xbb\xeb\xbe\x4e\x7d\xbc\xf4\x32\xe9\xf6\x9c\x28\x94\x40\x5f\x9c\x71\x02\xc7\x6e\x23\x79\x71\xb0\x76\x47\x48\x7e\x70\x7e\xf0\xde\x1d\x7b\xf3\x41\x54\x0b\xef\x84\x3e\x18\xfe\x60\x44\x0d\x4a\x43\xd0\x8b\xe4\xc5\xea\x90\xaa\xad\x6d\xaa\x36\xd5\xbe\xaa\xa2\x36\x12\x48\xe5\x49\x18\x19\x01\x9f\xa0\x04\xfa\xb8\xff\x8b\x14\xc4\x3f\x3f\x48\x14\xde\x91\xdb\x28\x9c\x05\xde\xd8\x1f\xa6\xac\x81\xc0\xb5\x18\x88\xfd\x71\x0a\xce\x42\x6f\x72\x11\x78\x42\xaf\x6d\x20\x67\x80\x86\x5e\x7b\x2e\x81\x27\xe7\xd2\x2a\x08\x3b\x85\xaf\x3f\xc5\x46\xbc\xee\xea\x49\xe3\x92\xeb\x38\x1d\x08\xa4\x59\xa8\x86\x3e\xb0\x04\x8e\xc1\xaf\xb4\xb3\x0f\xd6\x52\x42\x4f\x6c\x84\xeb\xf8\xfa\x73\xd6\x95\x2c\xc6\x5f\x61\x09\x1e\x83\x6a\xec\xc3\x02\x01\xf4\x75\x98\x0e\x4b\xe8\xae\x84\x2f\x3f\x28\xbc\x6b\x0e\xc4\xd4\xf5\x76\xec\x7c\x28\xdd\x2b\xbd\xa1\x20\x52\x84\x59\x14\x7e\x03\xa5\x78\x0e\x9f\xf0\x74\xf3\x93\xba\x5f\xcb\xfe\x24\x79\x81\x1f\x58\x2a\xa4\xb3\xf8\x08\xc4\xf8\x21\x7e\xc3\xd3\xe6\x56\xfe\xbe\x21\x8f\xe4\x21\x55\x98\xe3\x5a\x03\xa3\x58\x34\xe3\x63\xc1\x17\x6b\x78\x5a\x9f\x8d\x7d\xb3\x3f\x65\xa5\x7b\x79\xf4\x11\xd6\xb8\x66\xe3\x47\x6c\x9b\x6b\x9e\x60\xbb\xc7\xd3\x29\xef\x6e\x1f\x12\x32\x7a\x16\xf4\xc2\xf9\xb0\xc9\xf5\x2e\x4e\x80\x51\xae\x81\xd0\x76\x18\x86\x5c\x40\x1a\x8d\xb8\x09\x47\xa0\xca\x48\xc6\x26\x26\xc5\xc6\x56\x25\xd6\x71\xd0\x6a\x02\x3d\x04\xc0\xfb\xf0\x19\xc9\x0b\x09\x78\x16\xd6\x09\x39\xac\x8f\x4b\x55\x0c\x3b\x6f\x41\x7e\x87\x7b\xdb\xe9\x59\xad\xf0\xbe\xe3\xa5\xf0\x7e\x06\x6d\x94\x02\x87\xcc\x15\x21\xf1\x64\x24\x78\xb0\xc2\x2e\xac\x11\x41\x31\xd4\x10\xe7\x45\xe0\xf1\xe4\x27\x20\x38\x41\x21\xf4\x90\x08\xf7\xdc\x07\xce\x1b\xbc\xc7\xfc\x84\x1e\x6c\xe7\x63\x11\x7a\x8c\x19\x89\xde\xdc\x1c\x85\xf7\x1d\xb1\x0f\x8c\x95\x38\x64\x54\xa3\x12\x5f\x88\xc7\x4b\xe0\xc5\x7f\x29\xaa\xc0\xbf\x4f\x7f\x09\x8c\x95\xc0\x6d\x09\xbe\x80\x00\x51\x79\x5a\x29\xd4\x2a\x33\xb5\xb4\xd6\x92\xf9\x26\xdf\xd5\xed\x7f\xf3\x5d\x8d\x93\x40\x00\xbc\x10\x4f\x95\x80\xff\xb3\xae\x10\x4b\xa7\xdd\x19\x40\x8d\x51\x66\x64\xe4\x68\xd5\xac\x2b\x00\x3b\x88\x14\x95\x26\x31\x91\x4e\x28\x48\x2a\x57\xb1\x82\x9b\xa1\x2d\x2c\xce\x29\x66\xdc\x37\x66\xf4\x5f\xa4\x3c\xa4\x7c\x13\x5c\x8e\x76\xa1\xfd\x43\xa5\x1f\x8c\x92\x08\x76\xa0\x94\x5e\xce\x7c\xf8\x9b\xc2\x82\x0a\x0c\xc2\x18\x2c\x60\x60\x99\x12\x3e\x79\x01\xfe\x30\xfe\x36\x97\x02\x7d\x09\x4c\x9c\x80\xc3\x30\x02\x75\x34\xde\x84\x22\x2c\x82\x9b\x60\x81\x58\x18\x0f\x99\x77\x59\x61\xe9\x73\x0a\x03\xdf\xc7\x24\x61\x0d\x51\xad\x89\x2b\xd9\xc1\xb8\xd6\x88\x52\x41\x46\x08\x43\x41\xe6\x9a\x24\x0a\x86\x83\xc4\xcf\x9a\x7b\xdf\xfc\xd4\xb5\xca\xe5\xe3\xf9\xeb\x3f\x49\x62\xf5\x9a\x9c\x78\x93\xe6\x59\x67\x95\x6f\x78\x6e\x43\x6c\x33\x23\x44\x88\x40\xeb\xda\x4e\x24\x14\xec\x4c\xaf\xfd\x2f\x17\xbd\x1d\x64\xc4\x9b\xe7\xaa\x00\x68\xf7\xe4\x61\xbe\xf3\x29\xe8\xbd\x14\x44\x0f\x67\x1f\x2a\x07\x3d\xa6\xe1\xfb\x38\x10\x17\x93\xb8\x0a\x87\xa2\x6c\x70\x7f\x66\xde\xf2\x4b\xf0\xd6\x7a\x2e\x12\xba\x45\x82\x67\x24\x74\x23\xe1\xad\xb0\x90\x4b\x5b\x19\x6d\x54\xf2\xb6\xd5\xdc\xca\x2f\xcf\x1e\x3f\x7d\xe2\xcc\x31\xf9\xed\x2b\xe7\x9a\xdb\x72\x1f\xe7\x9f\x5e\x5c\x85\xbd\x6b\x50\x59\x3a\x3e\x7f\x1b\x89\xc4\xae\x5d\xcb\x9a\x98\x9d\xad\x6d\x5f\x1d\xe3\x8e\x76\xd4\x9d\xb3\xec\x23\xaf\xd8\x62\x9b\x97\x31\x31\x31\x59\xaa\x68\xee\x0c\xcc\x7e\xfe\x18\x86\xeb\x40\x94\x73\x66\x66\x16\x0e\x20\x41\x0f\xb1\x7e\x4a\xd7\xff\xf0\x10\x8f\x1b\x13\x7a\x83\x1d\xe2\x84\x00\x88\x93\xc6\x48\xf7\xea\x24\x8e\x80\xa5\x4a\xf4\x17\x0d\x50\xa2\x0d\x03\x31\x08\x2d\x29\x9c\x90\x0a\xdd\x25\xbf\x40\x77\x09\xcc\x5d\xa6\x44\xff\xf7\x25\x68\x81\x1e\x12\x08\xbf\x46\x0c\x87\x1e\x12\x69\x8c\xbb\xe4\x02\x08\x50\x8a\x04\x5f\xb8\x01\x37\x04\x5f\xce\xe7\x4d\x00\x38\xc4\x49\x64\xae\x37\xc1\xdf\xf8\x02\x5e\xc0\x42\x25\xbe\xc0\x17\xd1\xee\x09\xf4\x42\xa4\xed\xc2\xfb\xee\x0a\x65\xfb\x7f\x09\x08\x17\x06\x43\xc7\xbd\x32\xe8\xc0\x65\x5f\xc0\x80\x7b\xbd\x79\x05\xa9\x96\x16\x4b\xef\x3a\x3c\x04\x7f\xca\xf9\xbb\xe8\xab\xe2\x2f\x0b\x8f\xe6\x93\x10\xd0\x7c\xe5\x4a\x33\xdd\x3c\xff\x0a\x06\x34\xb3\xeb\xf2\xe7\x14\xce\x28\x26\x5f\xff\x2e\x3a\xf0\xc9\x07\xb5\xef\x32\x28\x9b\x5f\x2c\x09\xd9\xc0\x49\x8f\x24\x5b\x52\x72\xd3\xd9\xa9\x86\x25\x19\xa9\x74\xea\x85\x8c\xbb\x06\x56\x7a\x37\x27\x5d\x9f\x92\x4c\x6f\x28\x09\xa9\x60\xaf\xcc\x07\x99\xe8\xc5\xd3\xda\x03\x37\x38\xe7\x73\xb0\x52\xf7\x9b\x88\xf6\xa8\xfa\x0d\x81\x74\x60\xcc\x86\xcd\x51\xec\xc4\x26\xa2\xb9\xa6\xba\x65\x2f\xbd\x37\xa1\x25\xbc\x86\x95\x16\xbf\xfe\x03\xab\xa9\xcd\x33\x86\xc4\x0d\x60\xa2\x44\xbf\xb8\x82\x88\x96\xcb\x3c\xcf\x5d\xbe\xda\xdc\xdc\xcc\x35\x37\x83\x3f\xf8\x3f\x7b\x46\xf2\xcf\x9e\x81\x8c\x05\xed\x41\x88\xdc\xc7\xd3\x0a\xa7\x20\xf8\x53\x7f\xff\x16\xb7\xf9\x2b\xce\xc9\x8b\x78\x8c\xdc\x87\xda\x83\x2c\xca\x86\x3e\xe3\xb9\xa1\xcf\xd0\x1f\xfc\xc3\x9b\xc9\xe6\xf0\x05\xcd\xf3\x18\x7e\x1e\x1f\xc1\x0e\x77\x05\x11\x3e\x7e\xd0\x2a\x39\xa0\xf4\x52\x10\x7f\x3a\x4c\x54\x5a\xaa\x5e\x97\xc6\xe1\x84\x65\xef\xc2\x0d\x18\x75\x86\x38\x57\x79\xfc\xb3\x2f\xe8\x7b\x73\x2e\x4c\x49\x4b\x37\xe4\xa4\xb3\x38\x2e\x60\x05\x8c\x25\x2e\x26\x2e\x3b\xb0\x80\x99\x3c\x6f\xee\xe4\x54\x4b\xaa\x35\x8d\x3b\x83\xfe\x78\xf9\xdd\xe5\xe0\x4f\x5c\x4a\x0c\xd8\xbf\x80\x99\x34\xff\xbf\x9a\xd3\x38\x06\x47\xad\x20\x16\x27\x6e\x59\xb6\x90\x9e\xf4\xc5\xa7\xf7\xca\xca\x2c\xd6\x32\x16\x46\x9e\x79\x81\xd7\x70\xe4\x7f\x35\x13\x3f\x5f\x74\xbf\xbc\x3c\xd7\x5d\xf3\xc1\xe9\xb3\x38\x9e\x58\x54\x75\x36\xe8\x32\x73\xef\xca\x97\xdf\x94\xe9\xcb\x74\xa5\x5c\x00\x4c\x80\xcb\x2f\xcf\xe2\x87\xc4\xa2\xaa\x73\x41\x97\x99\x6f\xaf\x5c\xfb\xb6\xcc\xe0\xae\x59\x06\x93\x60\xfa\x45\xe2\x52\x75\xcb\x91\x2b\xf4\x77\x0b\x2e\x7d\xc8\x76\xb6\x62\x29\xf5\x2e\x5c\x83\xcb\xaf\x5e\xe0\x75\xc2\x47\x88\xbb\xd2\x15\x1e\x6e\x07\xbb\xd7\x0e\x49\xf3\xeb\xf6\x37\x6b\x7d\x3b\x3b\x44\x6f\xc2\xc9\xe6\x88\x77\xa6\x54\xc4\xef\x4c\xfb\x65\xfe\xef\x4b\x7f\x99\x4f\x86\x1d\xbb\x10\x72\x91\x81\x6f\x24\x17\x2f\xb4\xb5\x1c\xe3\x7e\xb9\xf2\xdb\x85\xa7\x5f\xd4\x96\x56\x57\x56\x56\x93\xa0\xf4\x5e\xbd\x78\x51\xd0\x76\x76\xf4\xe2\xd1\x4b\x47\x2f\x21\x63\xb7\x2e\x58\xb7\x8e\x59\xb7\xe0\x68\xdd\x56\x6e\xcc\x85\x91\x67\xc7\x5c\x24\x37\x35\x2c\xbb\x78\x86\x0e\x56\xb2\x8e\x0e\xd1\xb9\x03\xeb\x97\x77\xa5\xba\x6f\x87\xd0\x04\x05\xf1\x67\xbb\x27\xdf\x2e\xe8\xff\x11\xa2\x60\xb4\x10\xdd\xee\x05\x52\xf7\x73\xfb\x79\x98\x85\x65\x50\x80\xbd\x58\x97\x97\x53\x43\x6c\x1c\xba\xa3\x1f\x7a\xd1\x0a\x82\xdc\x4f\xfd\x1a\x76\x2d\xf2\x14\x1b\x74\x25\xf8\xf4\x65\xfa\xd6\x99\xab\x77\x58\x4b\x2e\x6f\x61\xa0\x17\x2a\x71\xde\x5d\x5c\xcb\x60\x0d\xaa\x91\xc5\xad\xa8\xe4\x2a\xca\x8d\x25\x0c\x7f\xdf\x04\x3d\x61\xa7\x04\x5a\x3a\x3b\x60\xb2\x60\xc2\x1e\x70\x9f\xe0\x37\xe7\x06\xe5\xb2\x9b\x2c\xd6\xcb\x07\xf5\x24\x48\x33\xef\x18\x79\x9a\xbf\x67\x82\x5e\x6e\xc1\xdd\x9d\x5f\x7e\x0d\x76\xa2\xf9\x55\xfd\xd7\xd7\x68\x97\xa5\x1f\x85\x29\x9d\xa3\x89\x84\x1b\x1d\xea\x3b\xcc\x8f\x0f\xcb\x1a\xee\x71\x06\x8b\x21\xd7\x98\x4b\x0a\x93\x9d\xd7\xa9\xdc\x58\xf3\xf6\x68\x7a\x4a\xe2\xd8\x20\xf4\x66\x51\xd5\x39\x91\x80\x64\x90\xc3\x70\xe0\x61\x2f\x0d\x74\x28\xf4\x5a\x04\xdd\xd8\xce\x71\x42\x2d\x05\xd3\x94\xf0\x95\x92\x53\x38\x06\x7b\xbb\xc2\x05\x42\x29\x84\x0b\xe1\xf0\xb9\xc4\x4d\x04\x99\x4b\xe6\x0a\x77\x85\xbb\xba\x28\xe7\x53\x2d\x50\x4a\xa8\x15\x0e\x40\x9d\x97\xf3\x16\x54\x49\xb0\x0e\xe5\x84\xc2\xb9\x57\xcc\x8b\xf1\x8b\xfd\x98\x01\x53\x60\x23\x0d\xcb\x21\x18\xc6\xc1\xfe\x93\x2c\x4c\x17\xbb\xe6\xae\xc0\xef\x31\x13\xf7\xd3\x78\x12\x5e\xa1\x41\xd8\xb8\x99\xe5\xc5\x50\x07\x32\xc2\x31\xca\xf9\x29\x85\x7e\x93\xb1\xcf\xb7\x38\xf1\x1c\x2e\xac\x91\xe3\x74\xf1\xcb\xa4\x67\xdb\xbe\x59\x87\x83\x26\xf8\x0a\x35\x28\x22\x7c\xa0\x09\xed\x6e\xff\x4d\x06\x39\x12\x4f\xb0\xa7\x4b\xbc\x9c\x01\x50\x25\x79\x1d\xe0\x92\x11\x91\x4a\x71\xe8\xee\xa8\x7d\xac\x82\x78\x25\xda\xb7\xbb\xb1\x95\x03\x19\xc8\x44\x0a\x87\x1a\xed\x54\xa7\x7d\xb1\x78\x6b\x44\x54\x28\x37\xff\x80\xf2\x8a\xb8\x35\xa2\x71\x2b\xbb\xd8\x61\x47\x7b\xa7\x1d\x65\xff\x4f\x2a\x52\x10\x93\x5e\x07\x50\x0a\x87\x44\xd4\xa5\x84\x32\x85\x58\x0d\x06\xa5\x5b\xcd\x47\x68\x0a\x54\x2a\xba\x7b\x78\x29\x44\x7f\x38\x16\x53\xae\x5b\x38\x97\xd0\xa5\xa6\x1a\x52\x99\xd4\x54\xb3\x35\x95\x73\xdd\x82\xb9\xc9\x78\x83\xc0\x7e\x5a\x38\x8e\x62\x78\xc9\xc0\x4b\x38\x5e\x29\xd1\x72\x82\xdd\x21\xa3\x4a\x32\x8b\x32\xac\xec\xeb\x17\xf0\x82\xc8\x31\xe9\x79\xbd\x5e\xcf\xe7\xf4\x78\xef\xf5\x0b\x7c\x41\x64\xe8\x32\x55\xe9\x74\xba\x5d\x55\xac\x63\xe1\x51\xff\x85\xfe\x91\xd8\x3b\x1b\xbb\xcb\xb7\xc6\xc7\x6c\x5e\x43\xaf\xdf\x19\xd4\x1a\xc7\x2e\x71\xcd\x32\x66\x5a\x32\xf3\xb2\xe4\x59\x6f\x3e\xf2\x04\x88\xec\xf6\x5c\x5b\x1e\x97\x67\xb3\xd8\x8d\xf6\x25\xc2\x2c\xdf\xd6\x9d\x3b\xf7\x1f\xa1\x8f\xc5\x1e\xd8\x5a\xc3\xe6\x03\x73\x00\xba\x9d\x3f\xe2\xf0\xc3\xcd\xbe\xb9\x46\x0b\x6f\xb1\x58\xf8\xdc\x1e\xef\x39\xdd\xed\x17\x5b\xed\x45\x25\xb4\x0f\x1c\x54\x3a\x46\xc2\x6a\x2f\xc7\x9f\xc2\xd7\x14\x74\x87\x8d\xd0\x1d\x36\xc0\x5b\xb0\xe1\x06\x74\xbf\x06\x3d\xee\x41\x37\x92\x17\xf3\xe2\xcc\xe0\x20\xdd\x56\x26\x24\xc4\x6a\x0f\xe5\x90\x46\x0b\x8e\xc2\x6c\x7c\x1f\x75\x38\x08\xf4\x38\x0c\xb2\xd1\x0f\x4c\xa4\x36\x64\x6b\x56\x30\x13\x1c\x92\x67\x0f\xe5\x60\x13\x7e\x01\x1f\xe1\x3d\xf8\x14\xbf\xca\xe8\x5c\xe9\x9b\xd7\xda\x6a\x6d\x65\xda\x5a\x75\xd9\x7b\xba\xd2\xa3\xb7\xc1\x03\x28\x17\xde\x82\x36\x4f\x1e\x8e\x78\x39\xec\x8e\x4c\x0a\xcb\x85\x39\x62\x24\x92\x51\x84\x51\x78\x9e\xc1\x52\x0c\x83\x48\xa8\x86\x6a\x70\xd3\x52\x18\xfc\xe7\xfc\x80\xf3\x1c\x6c\x85\x75\x04\xf4\x42\x1a\x67\x7e\x8d\x5b\x18\xd7\x14\x7c\x86\xcf\x5c\x53\x5c\x53\xe0\x19\x3e\x13\xa6\x08\x8b\xe0\x18\x5c\x15\xe6\x9d\xd2\xed\xcb\xda\xcf\x75\x6e\x13\xf9\x54\x43\xe3\x61\xe8\x07\xb3\x61\x30\x6c\xf5\x14\x5e\xc2\x6c\x88\x80\xd9\x5e\xce\x7b\x02\x41\x69\xf3\xd3\x79\xad\x96\x0c\x0e\x9e\xaa\x0a\x60\x02\xa6\x14\xed\x0d\xe1\xde\xb0\x32\x33\xf9\x74\xbb\x96\x5c\x7a\x1e\xba\xe9\x9a\x99\x66\xe8\x66\x3d\x7f\x9e\xb3\xe7\xf3\x25\x99\x76\x12\x2f\xc1\x5c\xea\xe4\x96\x03\x81\xab\xb7\x6c\x59\x1d\x78\x60\xcb\xc9\x13\x07\x0e\x9c\x60\x05\xae\xcf\xc9\x2d\x07\x56\x07\xbe\xe1\x9d\x38\xe9\xe6\x41\x2e\xf4\xa0\xd6\xc6\x6c\x09\x4a\x64\xad\xc9\xe6\xc4\x24\x1a\x97\x62\x18\x0e\xc7\x72\x2c\xc3\x30\x18\x0e\x4b\x2b\xcd\x95\xb9\x15\xec\x96\xaa\xe8\x03\xc7\xe9\x6b\x67\x4e\x5f\xdb\xb3\x3b\x3d\xae\x86\xbd\x7f\x0e\x3c\xda\xa0\x87\xf5\x06\x5c\xf5\xb5\x14\x16\xe6\x17\xea\x61\x7b\xa0\x6f\x63\x69\x53\x75\x2b\x73\xf2\xc0\xe6\xc0\xc0\x2d\x9b\x57\x07\x6e\x39\x70\x82\xc3\xb5\x47\x16\x60\x1b\xbc\x9d\x03\x9e\x21\xf7\x97\xc9\x6b\x6a\x9a\x4a\xf6\x30\xd7\xce\xac\x98\xcb\x81\x33\x92\xca\x95\x8c\x54\xb2\x3e\x70\x7f\x2f\xbc\x0d\xc3\x41\x06\xb3\x61\x38\x5c\xf2\xe4\xe1\x12\x84\xc3\x70\x58\x00\xc3\x21\x1c\x2e\x79\x39\xa7\x09\x43\xa9\xac\x7c\x15\x9f\xa5\x25\x23\x22\xe6\xa8\xd7\x32\x6b\xe7\x14\xee\x8e\xe0\xde\xb0\xb2\xb2\x78\x95\x2d\x8b\x0c\x3c\xf1\x34\xa7\x81\x69\x78\x9a\x7b\xe2\x04\x67\xb3\xf1\x45\x59\x36\x12\xcb\x60\x24\x05\x16\x09\xfc\xd4\xc7\x7d\x0c\xff\x87\xda\x12\x17\x1a\x96\xc2\xe6\xa6\x9a\x53\x53\x68\x1c\x8f\x0b\xd0\xd7\xed\x6b\xe0\x7c\xf0\x85\xf1\x65\xe6\x72\x4b\x29\xbb\xad\x7c\x47\x6b\x3b\x7d\xee\xe8\xd1\xf3\x8d\xbb\x54\x89\x95\xec\x8d\xe3\xbf\xec\xfe\x27\xf7\x12\x54\xfb\x9a\xed\x76\x5b\x81\x1e\x96\x6c\xf2\xdd\x55\xbc\xab\xbc\x89\x39\xd8\x1a\xba\x69\x53\x68\xe8\xa6\x4d\xdb\xf6\x1c\x34\x72\x38\x6d\xff\x72\xcc\xf9\x47\xff\x34\xe2\xe6\x1a\x79\x65\xe5\xae\xa2\x06\xe6\xfc\xd1\x75\xcb\x38\xb8\x24\x04\xfa\x29\x03\x95\xd0\x01\x43\x7f\x81\xc1\xbf\xc0\x90\x5f\x60\x08\xfc\xe8\xe5\x78\xe5\x58\x48\x2d\x6a\x20\xce\x88\x77\x25\x54\xc7\x6e\x4f\x48\xd8\xce\x62\x8b\xd8\x6f\xf4\x58\x3f\xf4\x1c\xf3\x18\x3c\x59\x9e\x37\xc1\xdb\x34\x0c\xc5\x1e\xa2\xed\x55\x09\xbb\x76\x55\x57\xef\x62\xa1\x4d\xfc\xf2\xc7\x07\x2f\x5f\xfe\x38\xae\x1f\xbb\x50\x0c\x39\x18\x4b\xa1\xe7\x18\x7f\xf4\x40\x8f\xd1\x8f\x5f\xb1\xf0\x8e\xf8\x52\xf4\x8f\xbb\x08\x7c\x47\xbc\xbd\x3a\xa1\xee\x8d\x4a\x6f\x18\x22\xc6\xb7\xbb\xa2\x80\x7e\x04\x96\xf2\x93\xc0\xe0\xe1\x0a\xe2\x98\x27\x0f\xf7\x61\x23\x7c\xfb\xef\x7e\xdf\xcb\x79\xcc\x71\x95\x82\xbe\x9f\xc2\xca\x0b\x04\x28\xc4\x90\x8a\x2b\x61\x21\xa6\x63\x1a\xae\xc2\x05\x98\xcc\x76\x7a\x88\x97\xae\x5b\xbf\x6c\xd9\xba\x23\xe7\x59\x28\xc5\xfb\x62\x2c\xe3\xf5\x3c\x8b\x1a\x08\xc0\x00\xd0\x80\x0a\x56\xc0\x12\xc8\x60\x05\x41\x7c\xee\xe8\xd1\x73\xe7\x8e\xae\x5b\xc6\x0a\xf5\xf8\x0b\x85\x0d\xe2\x65\x6f\x14\xcf\xb1\xb0\x53\x8c\x2b\x97\x60\xdf\xcf\x09\xac\x16\xa3\x0a\x96\xe3\x52\x50\x83\x06\x02\x20\x00\x34\x2c\xcf\x5b\xa0\x8c\xf6\x41\xd9\x95\x38\xe5\x15\x4f\xde\x7d\xf4\x52\x10\xa7\xc1\x9f\xc2\x9e\x83\x06\x61\x4f\xd6\x15\xe7\x08\xe8\x0c\x10\xe2\x44\xd0\xf3\xcf\x3f\xa1\x27\x2b\xc4\x75\x06\x38\x02\x5c\x71\xa2\x2b\xce\x00\x3f\x25\x34\xed\x82\xf1\xdf\xc1\x04\x81\x80\x09\xfc\x77\xbd\x79\xd8\x04\xef\xc0\x46\x81\xe8\xa2\x9b\xbe\x83\x8d\x6e\x22\xfd\xf3\xb4\x74\xbd\x07\xdc\x57\x78\xff\x44\xe1\x7e\xbc\xdf\xb9\x50\x68\x74\x86\x8b\xa5\x11\x1e\xb8\xb1\xf3\x12\xdc\x94\xc0\x7e\x98\x40\xc1\xa6\xce\x85\xb8\x49\xe4\x0c\xf7\x86\x4d\x22\xe9\x4a\x0f\xdc\x88\x9b\xc4\x70\xe0\x43\xaa\x73\xa1\x58\xfa\xe4\x34\xdc\xff\x10\xef\xe3\x78\xa1\xc9\x39\x53\x84\x9b\x5c\x4d\x6e\xb5\x03\x30\x81\xea\x5c\x08\xf7\x3e\xc4\x7b\x38\x5e\x68\x74\xce\x14\xff\x5b\xe3\x83\xb2\x1f\x1c\x3d\x2b\x05\x01\xe6\x78\xf2\x70\x14\x42\xc0\x17\x42\x60\x0d\x44\x43\xad\x97\x73\xb7\x50\x4c\x3d\x82\xb5\xca\x87\x1c\x3e\x13\xa6\x53\x0f\x61\xad\xf2\x11\x27\x5c\x74\x7d\x44\xe1\x6c\x64\x70\x00\x4e\xdc\x18\x94\x57\x1c\xca\xe2\x66\x31\x86\x6c\x26\x1c\x3d\xc5\xf7\x72\xef\xb4\x9d\xfb\x7c\xef\xfe\x5d\x47\x4b\x4f\x91\xe6\xe2\x62\x53\x31\x03\x13\xc1\x2d\x3a\xdb\x6d\x63\xda\x7f\x8a\x93\x36\x05\xd9\x8a\xfe\xb7\xe2\x7d\xf8\x54\xbc\xf3\xd0\x89\xe2\x13\x0c\x4c\xfa\x57\x5a\x70\xc2\x1c\x3f\x25\x54\xd9\x12\x0e\x95\xc1\x08\xe8\x03\xe9\x87\x2d\x97\xc1\x06\x7d\x7a\x0b\xc7\x60\x3c\xfc\xd5\x96\x05\x7d\xa5\x37\x3d\x14\xde\x17\x85\xe7\x94\xb1\x3a\xe7\x18\x48\x96\xe4\xc3\x5b\xf2\xd5\xb1\x04\x8c\xf9\x64\x7f\x13\x06\x32\xab\x36\x65\x6b\x56\x71\x96\x24\xf7\x8d\x63\x83\x6a\x73\x44\x38\x7b\x3d\x89\xc8\x56\xe7\xa8\x55\xb4\xb4\xa7\x7a\x26\x0c\xbe\xec\x47\xcf\x47\x19\x0e\x58\x10\x8d\x63\x60\x66\xab\x89\x35\x95\xc1\xbc\x03\x44\x55\x6e\x51\x79\x25\xbd\x33\xb1\x2c\x3e\x03\x95\xe1\xba\x78\xb6\x22\x2b\x69\x77\x3c\xa3\x56\xab\xf5\x6a\x4e\x3a\x44\x1d\x9e\x39\xcd\xd8\xb2\xc8\x95\xd2\xcf\x37\x29\x47\x95\x9c\x44\x27\x54\xa6\x54\x37\x08\x33\xfe\x28\x3e\xc7\xda\xd5\x36\x75\xa1\x96\x5c\x7d\x13\x58\x34\x5f\x60\x1e\x80\xe4\x9b\xeb\x47\xb9\xc2\xd2\xe2\xc2\x4a\x83\x79\x0d\x7a\x7f\xac\x0b\x23\x73\x22\x4d\xa1\x11\x74\x1a\x9f\x6a\x4e\x65\xb3\x76\xd6\xea\xeb\x98\x2f\xaf\xd6\x18\xbe\xe4\x4a\x3b\x6a\x3a\xf4\x77\x8c\x2d\xbe\x3a\x78\x2b\xac\x74\xc2\xcd\x9c\x5c\x9d\x35\xc7\x9a\x97\xeb\x5b\x60\x26\xe0\x73\xf4\xee\x94\xe2\x58\x08\xe0\x80\xfc\x0c\x94\x47\xc0\xe3\xcb\x81\x3f\x7c\x78\x73\x16\xbc\x85\x12\x08\xc4\xf7\x20\x0c\x8b\x35\xe4\x25\x50\x51\x36\x6b\x65\x71\x11\x2d\xed\xe5\x51\xbe\xb9\x51\xb7\x87\xdd\x5f\x75\xc2\x74\xa8\x00\x34\xe7\x61\x32\x48\x5f\x42\x6c\xf5\xe1\xaa\xa3\xe6\x13\x59\x99\xbe\xef\xe3\xcc\xd4\x75\x38\x19\x65\xe8\x35\x0e\xfb\x04\x60\x9f\xd5\xa4\xb4\xa7\x3a\xde\x44\x7c\x2d\x56\x19\x03\xf5\x69\x97\xb6\xd5\xca\xe7\x7d\xb4\x7e\xd6\xb0\x90\x0d\x29\x3b\x92\xe3\x37\x93\xcd\xd7\xbf\x2a\xbc\xc3\xdc\xde\x6d\x51\xd7\x72\x3b\x35\xe5\xf1\xfb\xd7\x93\x52\xc2\x03\xb7\xbf\xfe\x80\xaa\xc5\x51\x44\x56\xfb\xc1\x9c\x83\xcc\x83\xef\xca\x1a\xbf\xe1\x5a\x53\xe6\xc1\xa8\x30\x66\x2e\x8e\x0a\x0b\x09\xe0\x50\xeb\x60\xa8\x07\xb8\xad\xe3\x38\x21\xed\xa9\x46\x4f\x98\x45\x08\xab\x5d\xbb\xa8\x74\xd1\x42\xd3\x27\xa9\x0b\xb3\x6c\x1b\x7d\x77\x5b\x61\x7a\xc5\x2e\xda\x6a\xc8\x33\x5a\x59\xd7\x3a\x07\x49\xd9\xd4\x6a\x4b\x06\x13\x97\xa0\x36\xc4\x71\x79\x29\x04\x1c\x76\x39\xa9\x61\xe2\xf6\x22\xcd\xf7\x84\xe3\x0f\x05\x71\x8b\x32\x89\x8d\x62\x5e\xcc\x7b\x1b\x72\x8c\x7a\xb3\x99\x30\x59\x29\x93\x89\xf0\xc1\xcc\xef\xcf\x40\xef\x79\xd7\x81\x80\xb7\x7a\xf3\xf0\x48\xe1\x9d\x71\x5a\x5a\x27\x3d\xaf\xf0\xce\x5d\x4d\x99\xb3\x2c\x1a\x95\x8a\x94\xd6\x69\xb5\x53\x96\x8f\xc8\x1c\xa9\xc5\x9e\xd9\x33\xae\xab\x8a\x72\xcb\xf3\x6d\xa4\xcd\x9e\x67\x2d\x64\x0a\x0c\x7c\x8e\x95\xdb\xbe\xe7\x54\x1c\x78\x30\xe0\xf1\xf5\xee\xba\x3d\x9c\xb4\xa3\xac\x28\x4f\x63\xce\x22\x83\x40\x4c\xd9\x52\xb2\x34\xe9\x59\xaa\x6c\xa3\x45\x55\x43\xd6\xa8\x34\x35\x8b\x99\xc5\x49\x09\x71\x51\x5c\xf4\x0e\xb5\x56\x53\x4c\x4a\xeb\x34\x25\x96\xe2\xca\xf2\xca\xf2\xa6\xfa\xc6\x22\xb2\xa8\xb1\xd4\x50\xcf\xd4\x37\x1a\x32\xaa\x38\xe9\x89\xaa\xf4\xa2\x48\x5b\x0a\x09\x00\x7b\xa8\x15\x29\x1f\x6c\x59\xc4\x6e\x5e\x1c\x1b\xbf\x26\xf7\xd3\x5c\x7c\x1b\x96\x4d\xb1\x90\x96\xc1\xb8\x0d\x83\x70\x32\x33\x30\xa2\x64\xe7\x36\x4e\x5a\xb7\xaa\x75\xc7\x59\xd3\x57\x66\xf0\x85\x77\xa0\x27\x8c\x34\x41\xa0\x19\x94\x18\xf8\x87\x99\x34\x3d\x84\x71\x30\xf1\x1e\x23\x6d\x79\xb8\x73\xcc\x4a\xce\x7d\x23\x12\x96\xe3\x43\xd8\xb0\xbc\x85\x1d\x7d\x6e\x5c\xcd\xb8\x73\x2b\x5b\x67\x3e\xfc\xb4\x83\x94\xd6\xa9\xb1\x7b\xe8\x9a\x4d\x61\xe3\x66\x2f\x4f\x98\xbe\x85\x5c\x10\x86\xbf\xe0\x7a\xd7\x1c\xda\x35\x57\xf0\xc2\xaf\x84\x61\xc2\x50\x78\x05\x27\x84\x00\xd6\xa7\x06\xc2\x1c\xad\x10\xee\x09\xef\x43\x98\x63\x0f\x84\x79\x39\xcf\x0a\x5b\x28\x1c\x0a\xc3\x70\x2c\xfa\xe3\x50\x1c\x16\x19\x19\x18\x38\x89\x0f\x3c\x21\x0f\x3c\x69\xbc\x77\xf2\x44\x61\xa1\xaf\xbb\x56\xa5\x1a\x33\x26\x12\x7b\x36\x22\x21\x1f\x99\x30\xe7\xc3\x21\x34\x8a\x7e\x1e\x01\xc4\xef\xdf\x5d\xff\xb9\x9a\x05\xef\x68\x78\xa7\xe9\xc9\xe3\xa6\x26\x5f\x18\x0a\xc3\xdc\x1e\x1c\x81\x4f\x1d\x53\x29\xff\x47\xf8\xf6\x6e\xf4\xda\x4e\xfe\x96\x3a\xfe\xce\x7b\x0c\x12\x23\x46\xa0\x68\xf0\xf5\x0f\x7f\x4e\xe4\x42\xb1\x7b\x03\xf6\xfd\x79\x64\x53\xa4\x2f\x2f\x86\xa1\x38\x0c\xc6\xa2\xbf\x5b\xdb\xed\xcb\xe1\x30\x18\x16\xd5\x18\x78\x82\xbf\x7f\xe2\x84\xfc\xc4\x89\x7b\xfc\x89\xc0\x22\x95\x2f\x0c\x83\x61\x84\xa3\xed\xf5\x01\xea\xf9\xd4\x87\x83\x4a\xd8\x06\xf0\x8e\x80\x77\xfc\x1f\x47\x35\xf9\xba\x15\xde\x28\xe2\x30\xf0\x47\x7f\x18\x86\xc3\x9a\x22\x4f\x04\xf2\x93\x02\x03\xe5\x6f\xc6\xa3\x2a\xf2\x75\x0f\xaf\x50\xf5\xf3\x08\x90\x47\x03\xd9\x26\xe7\xc5\x1f\x54\x7e\xff\xf1\x9f\x0c\x10\x3f\xff\x0c\x22\xce\xe0\x14\x28\x10\x8d\xf8\x19\x89\xfe\x63\xa7\x0e\x4a\x67\x91\xdc\x83\x7d\xa2\x46\x8e\x8c\x8a\xf4\x75\x9b\x75\x5f\x1f\x82\x17\x43\x57\x0b\xe0\xef\xee\x4c\x53\xd3\x9b\xbe\xc9\xdf\x34\xa4\x52\xf9\xba\x07\x52\x54\xf4\xd3\x4f\x8d\x40\x85\x81\x58\xfe\x67\xc9\x37\x8f\x9e\xd3\x3e\x68\xdf\xe7\x1c\x7a\x0c\x24\x57\x3d\xf9\xfd\x8e\x79\x87\x85\x9b\xfb\xbd\x1c\xef\x0a\xeb\x29\x73\xbe\xfa\x68\xb6\x39\xdb\x8c\x6f\x9d\x4c\xc9\x4f\xb7\x6d\x2b\x49\xb5\x1d\xb9\xd9\x70\x3a\x37\xdf\x56\x7a\xfc\xa9\xc9\x6a\xca\x33\xd5\x18\xad\x46\x6b\x8a\x66\x87\x96\xdc\xa1\x5d\x1f\x99\xac\x4f\xc9\x59\x96\x10\xa5\x89\xd2\x2c\x4f\x8d\xcf\x8e\xcf\x4e\x34\xaa\x72\x48\x53\x4a\x6e\x36\x4f\x5b\x74\x45\x19\xc5\xfa\x92\x9c\x9d\xa6\x02\x4b\xa1\xb9\xc2\x6e\xce\x35\xe7\xea\x8b\x72\x73\x73\x2d\x67\x8b\xab\xf2\xaa\x6d\xdf\xd6\x17\x18\xf5\xaa\x05\xd8\x3b\x61\x2b\x99\xb8\x15\xdf\xc2\x89\xb1\x51\x89\x71\xeb\x96\xa6\xaa\x72\x0d\x8d\x16\xab\xa5\xa5\xfa\xcc\xf5\x8a\xea\xcf\x3e\x3f\x7a\xb5\xed\x2c\xc9\x8b\x6d\xfa\xf3\x6b\x4b\x35\xa5\x9a\x8b\x61\xc5\xd9\xc5\xba\x13\x71\x66\x1b\x89\x9b\x84\x14\xaa\x58\xaf\xcd\xd5\x30\x1a\x63\xa4\x36\x4d\x97\x9e\x13\x91\x99\xa1\xcf\xd0\x47\xe5\xe6\xe4\xe6\xe4\xda\x43\x8b\x32\x6a\xe2\x2b\xf4\x76\x23\x59\x55\x97\x97\x57\xca\x95\xe6\xd5\x15\x17\x54\x9a\x73\xad\x36\x7d\x39\xe9\xf8\x14\x29\x6a\x1a\x2e\x04\x6e\x13\xa1\xc0\x48\xd7\x4d\xca\x59\x26\x76\xcc\x83\x74\xe2\x75\xb9\x58\x38\xfc\x90\x0a\x06\x06\x43\xae\xae\xc7\x6e\x03\x76\x43\x84\xd0\xf2\x67\x04\xcc\xed\x1c\x40\xb8\xfe\x76\xc6\x53\xc2\x4d\x58\x45\xb8\x7a\x8a\xb1\x54\x81\x66\xea\xd0\xcc\x88\x94\xa8\xa4\xb0\x34\x79\x20\x8a\xc6\xa5\x62\x2f\x66\x20\xf6\x6e\x3f\x32\x8a\xcb\xcb\x58\xdb\x98\xc9\x68\xb4\x5a\x75\x96\x39\x27\x4f\xc7\x7d\xfa\x00\x96\x2f\x78\xc9\x3c\x10\x35\xb6\xe4\xe5\x35\x72\xbf\x96\xfd\x79\xe0\xfe\x67\x07\xe6\xfa\x9e\x01\x7f\x02\x0e\x39\xef\x52\x38\xe8\x18\x21\x8c\x13\x17\x67\xe6\xab\x33\x3b\xbb\x61\xb8\x21\x8b\x75\x9d\x85\x40\xc2\x25\x13\x8f\x8b\xfa\x34\x51\x6f\xcc\x36\x68\x0d\xd9\x59\x06\x83\x51\x67\xd4\x93\xaf\x2f\x8b\x8d\x26\xa3\x91\xd6\x5a\x6c\xba\x7c\xa6\xc0\xb1\x09\x74\xb6\x32\x8e\x37\xf1\x8e\x12\x34\xb2\x5d\x90\x6f\x71\x6e\xb7\xcb\xbd\x41\x1c\x1c\xef\x82\x7d\x85\xf6\x2e\x46\x3b\xc8\xbc\xa0\x1d\x3e\x57\xa2\xec\x4d\xf6\x55\x90\x05\x4a\x9c\x1d\xc0\x29\x15\xc4\x46\x1c\x4f\xc1\x78\xf1\xe9\x88\xaf\x82\xf7\xb2\xee\x59\x4c\xec\x0d\x9e\xb1\x7b\x05\xd3\xe9\x7f\x45\xa2\x70\x7a\x84\x28\x1d\x2f\x44\xf3\x95\x9c\xc3\x2e\x7e\xba\xf2\xfb\x69\x87\xd9\xce\xb8\xd7\xdb\x67\x29\xc1\xde\x29\xfb\xef\xf8\x0c\xec\xd4\x6b\x99\xdb\x75\x42\xff\xef\x94\xe0\x2f\xf2\xd1\x4b\xc0\x0e\xf6\xae\x14\xf3\xe5\x12\xa1\xa7\x04\xca\x25\xd2\xcf\xfe\x52\x10\xd3\xa1\xea\xff\x48\x76\x3d\x52\x72\x40\x99\x24\xe9\xec\xc0\x76\x6a\x86\x52\x3a\xa3\x7a\xfe\x29\x09\x06\x78\xaf\x90\x48\x47\x9d\xfe\x48\xf9\xe6\x64\xc6\xff\xa2\xd2\x0d\x0f\xdd\x45\x19\xfe\x8b\x8b\x35\xff\x0d\x2c\xd6\x95\x37\xa8\x58\x57\xde\x80\x62\x41\x80\xf7\x87\x12\xc1\xae\x70\x9e\xa6\x26\x29\xa1\xc3\xfb\x43\x89\x74\xea\x48\xb0\xbf\xee\xf8\xff\xd2\xf1\x71\xa9\x30\x4b\x21\x5a\xec\x29\xc8\xba\xbe\x3c\x7a\x29\xbc\xeb\x9c\x31\xd4\xde\x7d\xfc\xa5\xe0\x7d\x5b\xf7\x2e\xe2\xb7\x06\x63\x12\x26\xf9\xba\xbc\x45\x98\x04\x49\x6f\x38\xf2\xe0\xad\xfc\xa2\xbd\x5b\xe1\x08\x1e\xf1\xed\xbc\x0a\x1f\x2b\x05\xd9\x15\x97\x0c\x3e\x56\x3a\xae\x8a\xe1\x08\x1c\x21\xf0\x2e\x4c\x48\x93\xf8\xf8\x05\x2a\x0f\x28\xbd\x1c\xd5\xce\x13\x14\xf8\x0d\x81\x8d\x38\x1e\xa9\x25\x28\x47\x6f\xf4\xfb\x1d\x37\xc2\x38\xa0\x2e\x80\x1c\xbc\x59\xfc\xd5\x95\x48\xc1\x00\xec\x0e\xab\xd1\x1f\x3d\x57\x0e\x18\x82\x03\xa0\x3b\xae\x02\x7f\xe8\x76\xea\xaf\xdf\x58\x81\xad\xa7\xd0\x80\x0f\xf0\x05\x6a\x90\x78\x14\xf6\x1b\x07\x03\x40\xf4\x03\xd0\x20\x03\x8f\x51\x40\x33\x7f\x3f\xaf\x02\x29\xa8\xf1\x01\xbc\x44\x03\x07\x5a\x08\xa1\x60\xdc\xef\xb0\x11\xfc\xc0\x7b\x09\xc8\x91\xc2\xf1\x43\x70\x23\xfa\xa1\xf7\x05\x94\x03\xc5\x09\x1f\x3f\xa7\xd0\x1f\xbb\xe3\x6a\x1c\x30\xe4\xd4\x40\xe8\x06\xfe\xd0\x1d\x56\xc1\x80\xdf\x56\xfe\x8d\x9e\x9c\xcf\x6b\x15\x70\x92\x2b\x0e\x99\x97\x23\xc0\x99\x45\x81\x1d\xfb\x43\xdd\x9b\xaf\x53\x58\x87\x76\x5c\xfb\x18\xfb\x82\xcf\x1a\x76\x7d\xe7\x17\x44\xa8\xa1\x3e\xaa\xd5\xed\xec\xb6\xd6\x37\xb6\x1a\xb8\xf5\x8e\x2f\x08\xf0\x39\xfe\x18\xfa\xc2\x5a\xda\x3d\x3b\x0f\x28\x3d\x79\xa0\x15\x44\x0a\xc8\xbc\x9c\xb2\xe1\x94\x23\x4b\xec\x90\x41\x3a\xd1\xd9\x53\xdc\x19\x20\x14\x53\x9d\x9f\x82\xcd\xd1\xb5\xa3\x8d\x00\xda\x40\x9d\xd9\x76\x7c\x75\x05\xdb\x19\x00\x76\xc2\x9a\x9e\x66\x49\x63\xd2\xd2\xf4\xba\x74\xae\x33\x00\xed\xc4\xea\xe4\x6d\x6b\x96\xd3\x9d\x76\xf1\xda\x5d\x1b\xdb\xe3\x59\x47\x80\x4b\x46\xa8\x2b\xab\x75\xd5\x4c\x75\xb5\xb5\xb0\x92\x73\x04\x08\x32\xa2\xbd\x66\xd7\xa1\x63\xb4\x8f\xd0\x64\x4b\xf0\x14\xec\xc0\x08\x6f\xc3\xdf\x12\x87\x6c\x28\xf8\x4a\x1c\xd3\x3b\xc5\xe0\x2b\xe9\xfc\x05\x7a\x50\x50\x25\x16\x64\x30\x81\xc0\x4a\xb1\x2b\x00\xc2\x28\xd7\x42\x58\x22\x74\xed\xb8\x84\x70\x30\x9d\x2b\xa9\x53\x91\x47\xd7\x54\xb3\xae\x4f\xe0\x53\x42\x78\x4f\x7c\x2a\xe2\xe8\xda\x6a\xd6\x15\x00\x01\x84\x2d\x35\xc5\x92\xc2\xa4\xa4\xe8\xb3\x52\x39\x57\x00\x06\x10\x6b\x13\x22\xd6\xad\xa2\x5d\xef\x89\x5d\x9f\xe0\xa7\xff\x9d\xf9\x8b\xd7\xd4\xaf\x3f\x9c\xc0\x0a\x01\x18\x47\x40\xb1\xc4\x62\x32\x9b\xcc\x66\xb9\xd9\x60\x36\x5a\x8c\x6e\xa6\x2f\x14\x4b\x88\xc3\xd5\xf5\x47\x8e\xd3\x3e\xd0\x64\x80\xc5\x38\x01\xc2\x60\x1e\x8c\xb6\xc1\x52\x03\x2c\x79\x05\xe1\xbd\x79\x68\x12\x56\xc0\x4e\x8c\x86\xa6\xef\x20\x57\xda\xea\xa1\x10\x4f\x50\x78\xef\xa1\xb0\xa7\x2b\x1f\x7a\x8a\xa1\xc8\x35\x95\x82\xde\x97\x67\xe0\xdb\x85\x9c\x6b\x98\x08\x7a\xe4\xdf\xbb\x03\x3d\x98\x32\xd7\x77\x14\x0e\x9a\xfa\x08\x06\x72\x8e\x81\x22\x53\xa9\xa9\xac\x8c\x86\x9d\x38\x1a\xe2\x71\x3f\xee\xc6\x25\xb8\x15\xeb\x71\x2f\xcc\xc6\x95\xd0\x0e\x51\xd0\xef\x77\xd8\x7a\x9d\xc5\xed\xa2\x29\x3b\x06\x6f\x9e\xc6\x28\x9c\x5f\x9c\xa4\xa4\x2b\xd4\xf0\x27\x9c\x15\x4b\x57\x7a\x80\xcf\xdd\x55\x48\xa1\x74\xc4\x16\x24\x38\x3c\x21\xec\xa1\xe0\x18\x14\x8b\xa5\xd3\xd5\x7f\xfe\x18\x8d\xa4\xdf\xac\x8d\xef\x73\xae\xb3\x42\x1e\xa5\x40\x99\x00\x62\x48\x86\x70\xe8\x06\x76\x18\x3d\x1d\xba\xe3\x88\xc3\x1c\x10\x67\x2e\x7e\x07\x52\x5a\xba\x67\x3a\xe4\xe2\xa2\xcf\x31\x82\xf5\x11\x7c\x21\x12\x3f\xba\xf5\x07\xf8\x98\x60\x41\xee\xdd\x2e\xc4\x87\x19\xd0\x8a\xad\x70\x0d\x66\x9c\x12\xbe\x04\x99\x34\xe2\xf4\x0e\x49\xa7\xc6\xe5\x45\x01\x03\xdd\xb7\xe2\xa8\xc9\xc1\xab\x66\x6d\xe3\x9e\x45\x1f\x9b\xf9\x3e\x8d\xfe\x48\xcf\xc6\xfe\xac\xab\xb7\xa3\x41\x04\x7f\xe3\x2d\xea\x8b\xc3\xf5\x5f\x76\x2c\x2d\x5f\xc8\xb9\xdd\x5b\x11\x2c\xc4\x27\xd4\xad\xf3\xb5\xf7\xee\xad\x69\x99\xc6\xe1\x12\x8c\x14\x39\xbe\x0e\xa7\x8e\x7d\xbe\xeb\x78\x29\x07\xac\x08\xfb\x6c\x1a\xf3\x29\x2a\x19\xa9\xcd\x03\xe7\xa0\x37\xbc\x0d\x9f\xc0\x34\x78\x0b\xfa\xc2\x0c\x98\xfd\x07\xf6\xc3\xc9\x1a\x5e\x63\xd4\x70\xae\x11\xa2\x91\xc7\x97\xff\xcc\x4a\x35\x1e\x1a\xa1\x1b\x35\x7d\xf5\xda\xe9\x3a\x0e\x6c\xa2\x3b\x59\x41\xc7\xa6\x30\x52\xbf\xe9\x38\x0e\x2a\xa9\xa9\x70\xfb\xae\xd8\xa7\x1a\x65\x3f\x0a\xfa\x1f\x97\xc3\x10\xe1\x15\x0c\xe9\xad\x10\x85\xc1\x10\xe9\x11\x85\x68\xb8\xf3\x53\x0a\x18\xec\x06\x9e\x48\x23\x83\x9e\xe8\x89\x0c\x32\xe0\x89\x9e\xc0\x00\x0d\xdd\xc0\x13\x18\x56\x7a\xb7\xb3\xb0\x33\x85\x42\x0e\xbd\xd0\x0b\xb9\xa1\x13\xce\x7c\xbb\x89\x95\x1e\x69\x4f\x6d\x4f\x69\x4f\xfd\x7b\x13\x90\x27\xdb\xff\x6e\xff\x7b\x35\x88\x07\xb4\xf7\x3f\xe8\x9b\x5b\x51\x61\xae\x60\x80\x83\x2e\x61\xce\x71\xcb\x91\x4c\xe1\x14\x54\xa2\x02\x27\xbb\x69\x57\x74\xd1\x64\x50\x82\x12\xa6\xb0\xd2\xbb\xee\x22\x2a\x71\x32\x07\x43\xfa\x48\x8f\x40\x2e\x6e\x84\x8d\x98\x8b\x16\xdc\x88\xeb\xd1\x6c\x60\x71\xaf\x6b\x28\x61\x52\xab\x4c\x2a\x66\xc1\xe2\x94\x88\x55\x9c\x4b\x0e\xa3\x08\xd7\x0c\x31\xa4\x8c\x20\xa4\x77\xf1\x83\x16\x50\xa2\x18\xc6\x31\xf0\x31\x0c\x04\x06\xa6\x97\x71\xc2\x5c\xb8\x4d\x40\x2e\x6c\x84\x0d\x60\xed\x7a\x69\xe4\x7f\xeb\xac\x90\x76\x52\xe8\x73\x0c\xde\x02\x7f\x4f\xe1\xe6\x45\x98\x79\x42\xe8\xeb\x3e\x93\x79\x29\xbc\xbf\x75\xbe\x4d\xf9\xf9\xc3\x5f\xca\xc7\xfe\xfd\x58\xd7\x2b\xd7\x43\x0a\xba\x8d\x79\x82\xdd\xd2\xd3\x0c\xfa\x0c\xf6\xbb\xb0\xfb\xe1\xfb\x47\x84\x4f\x92\x87\x4d\x1c\x11\x34\xa9\x39\xac\x24\xbc\x38\xac\x98\x5c\xd0\x72\x6d\xe3\xd7\x0c\x74\x7b\xf2\x04\xba\x71\x4e\x85\xe3\x12\x35\x44\x02\x1b\x95\xae\x50\x31\x9c\xc4\xb7\x88\xda\x03\xc7\x8a\x4f\x32\x05\x76\xde\x68\xe7\x20\x1e\xee\x10\xb0\xda\x0c\x63\xc1\x1f\x56\x33\xb0\x16\xc6\xe2\x58\x5c\x8b\x81\x38\x16\xc7\xe1\x5a\x0e\x7f\x47\x2b\x81\x8a\x0c\x14\xfb\xa1\x1f\x83\x32\xf4\xf8\x09\xde\xde\xce\xe1\xf4\x1b\x04\x7e\x20\xc6\x31\x40\x21\x05\x63\x58\x67\xc0\x40\x25\xf2\x8e\x70\x0a\x68\xf4\x00\x0f\xa4\x51\x8e\x1e\x5d\xf0\x74\x72\xf0\x40\x0f\x90\x03\x0d\x1e\xe0\x01\x72\xd6\xa7\xda\x90\xb0\x2f\x41\x41\xac\x4a\xec\x5d\xa6\x10\x3d\x94\xc6\x38\xee\x0a\x5e\x94\xeb\xe3\xb2\xa9\x45\x3c\x1d\x39\x7a\x25\x76\x3b\x30\xbc\x72\xc3\xa1\xc0\xcf\x72\x84\x09\x51\xbe\xe6\x9a\x52\xc1\x9b\x70\xf5\x15\xbe\xa7\x5c\xb3\xca\xc1\x6f\x2c\x31\x19\x7b\x85\x2e\xe0\x69\x3e\x74\xc1\xfe\x25\x2c\x2c\x45\x07\xc1\x57\xc3\x32\x88\x87\x02\x16\x06\x8d\x20\x9c\x6d\xc8\x52\x3c\x4e\x1d\x89\x3f\xb7\xb3\x59\x30\x03\x43\xf0\x35\xa4\xb8\xbc\xb4\x30\x81\x80\xf7\xad\xb7\x6c\x3c\xcd\xdf\xce\xdb\x75\x95\x85\xc5\x80\x44\xe7\x2e\xe7\x48\x6a\xfe\x8d\x8f\x7e\x1b\x64\x0f\xb4\x2e\x48\x8d\xde\x80\xf1\x28\xf8\x56\xaa\xe0\x26\x2e\x22\x20\x4a\xe8\x7e\xec\x0b\x9e\x76\xf4\xc7\x4b\x54\x92\x1a\xaf\xe1\x4a\x02\x52\x5d\x9e\x7b\x3e\xe6\xe9\x1f\xeb\xa0\x47\xd5\x99\x07\xbb\x0e\x96\x5d\x8e\x39\x42\x22\x08\x8f\x28\xa9\x75\x26\x50\x41\x9f\xf3\x34\xbf\xf5\xd2\xac\x6c\xd6\x35\xd8\x44\x48\x63\x78\x18\x83\xdd\xa0\x07\xde\x66\x71\xe8\x58\x61\x7c\x22\xc4\x08\xdd\x09\x1f\x68\x02\x19\x44\x29\x85\x38\x21\x00\x92\x25\x6d\xd0\x01\xd3\x25\x20\x60\x07\x24\x77\x7d\x35\x84\x9e\x83\xfe\xc4\x9e\x2c\xec\x92\x74\xda\x45\xe0\x23\x41\x99\xe8\xac\x04\xda\x24\x67\x25\x20\x83\x78\x09\x34\xf1\x10\xa5\x54\x88\xfd\x1c\x32\x0a\x76\x49\x50\x06\x71\xa2\x41\x12\x57\x00\x74\x48\x50\x26\x06\x1f\xc9\x7c\xd1\x59\xc9\x15\xa7\x7d\xbe\xf8\xac\xe4\x0a\xac\x90\x08\x32\xf1\xbf\x16\x15\x4e\x3f\x57\xdc\x25\x25\xac\x12\xe2\xdc\x2d\xae\x72\x9f\xf8\x54\x27\x78\x36\x2b\x88\xd3\x5e\x0a\xe2\xe1\x15\x68\x53\xba\x06\x0a\x83\x08\x48\x86\x3f\xfe\x2d\xad\x86\x3f\x94\x02\xa1\xdc\x23\x81\xbe\x12\xce\x25\x73\xc9\xec\x12\x58\x2d\x72\x0d\x74\x0d\xb2\x4b\x20\xf9\xdf\x82\xb0\x59\xa4\x9f\xaf\x9d\x33\x8f\x0e\xab\x8f\xd9\xc3\x42\x87\x68\x4f\x7d\x7d\xcb\x55\xed\x97\xfa\x2b\x9c\xb0\x79\x9b\x44\x50\x43\x6f\xe8\x05\x62\x4f\x1e\x34\xce\x6f\x61\x93\x97\x13\xe1\x5b\x2a\x3a\x3e\x31\x36\x43\x9b\x6b\x53\xb1\x5f\xba\x7f\x8c\x6d\x38\x88\x99\xf0\xa1\x3a\x75\x0a\xa7\x57\xa5\xea\x32\x99\xc8\xa4\xda\xba\xe6\xca\xd2\x9d\x56\xae\xfa\xd7\xa7\xc5\xbf\x33\x30\x19\x86\x6c\x9d\x0a\x14\x57\xa9\x2a\x54\x47\xd3\xcf\x20\x9c\x0a\xdb\x1e\xb3\x2d\x55\x6d\xcb\x53\xb3\x5f\x61\x2f\x9c\x71\x12\x97\x32\x43\xc6\xa7\x27\xcd\xe2\x72\xd2\xb4\x39\xe9\x4c\x58\x4c\x7d\x4b\x4b\x59\x4d\xb3\x9d\xab\x7d\xf4\xa4\x02\x28\x06\xd6\xc1\x8a\xd5\x23\xe1\x03\xae\x2e\xad\x20\x29\xc6\x3d\x23\x4d\xd4\xa6\x6d\x91\x5b\x53\x35\xb9\xf9\xe9\xec\xf7\xc8\x61\xc4\x51\x0c\x62\xde\x7d\x57\x13\x33\x84\xd3\xab\xd3\x75\x69\xcc\xe6\x88\xe6\xf6\x83\xbb\x6a\x1b\xf2\xb9\x66\xf0\x04\x9f\x52\x90\x33\x90\x00\x9a\xb5\x03\x61\x06\x57\x9b\x5e\x96\x14\x4c\xc3\x26\x1c\x4c\xf9\x49\x3a\x55\x28\x53\x88\xd4\xb0\x52\xa9\xf0\xbe\x49\xc1\x39\x3c\x23\x36\x18\x62\xa2\x8d\x0c\xbe\x8b\xbb\x36\x44\x12\xae\x5c\xd7\x18\x68\x16\xd5\x46\xe2\x39\xd7\x3d\x02\xcf\xc1\x19\xb1\xd9\x5c\xdf\x60\x62\xe0\x5d\xd8\x75\xb8\x89\x10\x72\x85\x31\xd8\x2c\xda\xb1\x9b\xf0\x11\x9a\x04\xe1\xd7\x6f\x2a\xae\x57\x7a\x0a\xfb\x8f\x9d\xfd\x0c\x98\x93\xfb\x7e\x7a\x71\xd3\xcb\x51\x07\x13\xa8\x0c\xa3\x46\x93\xc1\xa8\x34\x05\xc5\x46\x2e\x1d\xb2\x4b\x84\x2a\xa2\xb8\xb0\xb0\xa8\xb8\x40\x9d\x61\x62\xcb\x5c\x55\x04\xb4\x60\x28\x65\xdc\x41\x68\xf5\x59\xd9\x3a\x56\xa7\xcb\xca\xd1\x32\x99\xda\x5c\x5b\x36\x97\x63\x35\xe4\xe5\xd1\x5d\xab\x02\xd5\xa0\xe2\x4d\x3c\x5d\x20\x7c\x6d\xca\x23\x0a\xac\xf6\x7c\x2b\x6b\xb5\x58\xcd\x79\x79\x56\x83\xb5\xc7\x7b\xf9\x3a\x6b\xa6\x86\x2e\x72\x7d\x4f\xbc\x6e\x07\x8a\xb2\x1a\xf5\xb9\x3a\x46\xa7\xcf\xd1\x19\xb9\x14\x94\x95\x63\x6f\x42\x67\xb2\xe4\x58\x19\xab\x25\xd7\x6a\xe2\xaa\xa0\x37\x71\x0d\xb6\x50\x56\x63\x8e\x5b\x2c\x27\x47\xc7\xf3\x7c\x1c\x6e\xe1\x76\xe2\x7a\x22\x3b\x37\xc7\x6a\xcd\xcd\xb5\x9a\xd8\x5d\xb0\x81\x00\x1b\x1a\x29\x5e\xcc\x8b\x71\xb1\xa0\xa2\x6c\x3a\x6b\x76\xb6\x4e\x97\x65\x64\x13\xd0\x50\x8d\x1a\x22\xdb\x64\xd5\xe5\x31\x79\x56\x6b\x1e\x57\x07\x1a\xe2\x06\x58\xa9\x7c\x63\xb6\x35\x8b\xc9\xca\xd6\x69\xb9\x04\xb4\x56\xa3\x9e\xd0\xe6\xe9\x6c\xb6\x3c\x6b\xbe\x89\xdd\x09\x7a\xe2\x16\x64\x50\xf9\xc6\x2c\x9b\x96\xd1\x66\x65\x69\xb9\x44\xcc\xa8\x42\x23\x91\x69\xcb\xca\xcf\xb7\xd9\xec\x26\xb6\x1a\x8c\x04\xbc\xc6\xec\x37\xad\x1e\x74\x78\x52\x05\xda\xfc\x4c\x4d\x96\x56\x63\x64\x79\x9e\x4f\x76\xf5\x64\x2b\xd0\x48\x68\x4c\x36\x6d\x01\x63\xcf\xcf\x2f\xe0\x78\xb1\x5b\xa7\x43\x08\xa6\x0a\x33\xf3\x35\x6a\xad\x56\xdd\x25\x99\xea\x0a\x65\xcb\x50\x4f\xa8\x4d\xf9\xda\x42\xa6\xc0\x9e\x5f\xc8\xf1\xe2\x4a\xd0\x13\xdf\x0a\x56\xaa\xc8\x98\x59\xa0\x62\xd4\x1a\x8d\x8a\x4b\x75\x59\xca\x50\x47\xa8\x4c\xf6\xcc\x42\xa6\xc8\x6e\x2f\x32\x71\xbc\xb8\x02\x74\x84\x20\x41\x35\xc5\x8b\xe1\x1b\x09\x90\x4a\x0c\x74\x64\x50\x25\xea\xc2\xf4\x74\xb5\x3a\x9d\x4d\x77\xd9\x4a\x50\x4b\xa4\x9b\x0a\xd4\x25\x4c\x49\x61\x61\x09\xc7\x8b\x4b\x41\x4b\x3c\x10\x54\x54\x99\x51\x5d\x94\xc6\xa4\xa9\x54\xa9\x46\x4e\xe5\x52\x17\xa1\x9a\x48\x33\x15\xa9\x4a\x99\xd2\xa2\xa2\x52\x8e\x17\x97\x80\x9a\x80\xc0\x3e\xe9\x0e\xa9\xb1\x30\xbb\x20\xd3\x2a\xb7\xe4\x64\x9b\x75\x8c\x36\x4b\x9f\xa3\xe3\xb2\xb2\x73\x32\x8d\x99\xa4\x5e\xac\xea\xec\x99\x87\xdd\xf3\x50\x44\xa4\x98\x4a\xd2\xcb\x99\xf2\x92\x92\x72\xce\x7d\x49\x4a\x20\x95\x70\xfe\x56\x49\xc1\x28\x94\x82\x14\x47\x06\x05\x6b\xd3\xb7\xb1\x90\x1f\x87\x61\xb0\x16\x4b\x98\xf9\x0b\x55\xf1\x01\x5c\xbc\x36\x5b\x9b\x42\xbf\xee\x2b\x4e\x2e\xc9\x28\x37\xb0\x6e\x1f\x6a\x17\x8c\x04\x29\xf4\x86\x91\xac\x0f\xda\x21\x5f\xd9\x05\xd6\xed\xb0\x3b\xec\x54\x9e\xa4\xd3\xee\x9d\x27\x11\x64\xde\x79\x12\x9d\xc4\xbb\x2b\x7d\x9c\x18\xfb\x71\x28\x13\x63\x3f\xf8\x0d\xc5\xb0\x5f\x52\x29\x61\x41\x26\x86\x7e\xf8\x1b\x88\x5d\x93\x59\xb7\xff\x23\x3b\x13\x96\x00\x75\xa7\x1b\x2e\x0b\x71\x4f\x25\x42\xf9\xa5\xbc\xe3\x91\x6d\x5d\xe9\x38\x22\x0e\x74\x25\x86\x6f\xb3\xf7\x53\x4a\x7b\xea\x05\x7f\x91\xab\xd0\xf5\x11\xb5\xf8\xf8\xca\x87\xa1\x2f\x8a\x6e\x98\x2e\x99\x2e\x93\x05\x7c\x41\x01\x2d\x25\x49\x0b\x6f\x36\x5a\x58\xb3\xd9\x64\x31\x59\xf2\x9a\xf5\x35\xaa\x12\x52\xda\x66\x2f\xd0\xaa\xac\x69\x8c\x51\x94\x20\x4a\x4c\x4b\x8b\xcd\xe2\x92\xe7\x16\xa0\x77\x33\x7a\xee\x18\x1f\x3a\x66\xfd\xa8\x2d\x13\x43\xe6\x45\xac\x22\x4d\x46\xb3\xd1\xc4\xea\xf2\x35\x16\xad\x0e\x7b\xce\x5b\x3e\x55\xb3\x4e\x9f\x98\xab\xb6\xea\xba\x70\xec\x8d\xb5\x2a\x5f\x9d\xdd\x6e\x28\x60\x2e\x7d\xfb\x08\x3e\xfe\x87\x7b\xb5\x17\x06\xee\x06\xae\x94\xdc\xf0\xe0\xb7\xa8\x2b\xcc\xe9\xd2\xaa\x0a\x0b\xc7\xf3\x26\x9e\x35\x99\x4c\x66\x93\xa9\xb0\x36\xbb\x22\xab\x80\x6c\x8f\x1d\x97\x3f\x87\x09\x09\x32\xe8\x36\x71\x11\x15\xd1\x15\xb1\x55\xa4\x74\xba\xda\xd5\xe1\x1a\x41\x95\xee\x39\x76\xed\xce\x85\xf9\x03\x37\x6e\x8c\x4c\x27\x85\x77\x9d\xc3\x28\xb7\x26\x2d\xf5\xf6\xcb\xcb\xca\x53\x9b\x92\x4d\x06\xde\x60\x32\x1a\xf4\x46\x83\x51\x4f\x4a\xbd\xa7\x1b\x54\xfa\x74\x43\x8a\x21\xc3\x90\xa6\x4f\x75\x1b\xd1\x9e\xe3\x8f\x17\x34\x90\x52\x92\xc4\x9e\x9d\x83\xa9\xd2\xfa\xd2\x86\xd2\x06\x52\xda\x93\x6c\xbb\xd5\x70\xb5\xf2\xf3\x3d\x33\x0f\x2f\x3a\xb1\x91\x94\x92\xde\x76\x6d\x41\x56\x81\xd6\x2d\x38\x38\x79\x70\xf4\x98\x50\xd2\x41\x97\x51\xa6\x2e\xd7\xd8\x98\xa3\xe3\x33\x99\xc8\xf5\x05\x15\x81\x1c\x78\xee\x4a\xd2\x59\x39\x1f\xbd\xc4\x69\x07\xa9\x44\x98\x68\x83\x9f\xff\xc3\x90\x52\xe0\x36\x94\x51\x70\xda\x6f\x94\xe8\x0f\xd7\xbc\xdc\x54\x73\x8a\x29\x43\x6e\x4e\x20\x72\x45\xb9\xd5\x96\x62\x53\x79\x6e\x99\x1c\xde\x13\x0e\x12\x20\x12\xc1\x7b\xae\x83\x6e\x01\x4b\x86\xdc\x94\x65\xd6\x66\xd3\xb9\x22\x73\xb5\xa9\xd8\xec\x96\xf9\x43\x98\x47\x8c\x7a\x05\xa7\xfd\x66\x89\x70\x42\xe7\x60\x02\xc7\x88\x50\x26\x24\xeb\xca\x8c\x65\xfa\x12\xb9\xbe\x96\xc8\x11\x69\x8d\x5a\xa3\x96\x35\xa4\xea\xd3\x74\x69\x28\x73\x25\xfb\xba\x65\x26\x38\x06\x13\xb3\x44\x5d\x3d\x7b\x2a\x11\xbe\x7d\x3e\xea\xf9\x75\x90\xad\x50\x4a\xe1\x0d\xc0\x55\x48\xe7\x6e\xea\xba\x08\x56\x40\x1b\x2e\x81\x3a\x62\xf6\x2b\x38\xe4\x37\x4d\xf4\x12\xc7\xe4\x67\x5a\xb3\x72\xb3\xe4\x66\xbd\x59\x6f\xca\x21\xcd\x22\xa3\xbd\xb4\xa8\x92\xfd\x07\xc6\x10\x33\x5e\x41\xb3\xdf\x1c\x11\xae\xc4\x56\x08\xc0\x5d\xc4\xf5\x7e\x22\x29\xe2\xe1\x97\x5f\x8b\xfc\x60\x6c\x56\x41\x76\x5e\x4e\xbe\xdc\x60\x31\x58\x8c\xb9\xa4\x41\xa4\xcf\x4e\x4b\x52\x71\xef\xe1\x58\xe2\x4e\x3f\xdc\xd3\xe5\xac\x67\xc0\x24\x20\xa0\x1a\x74\x4f\x25\x42\x25\x14\x65\x74\x75\xa7\x53\xfd\xa6\x3f\x71\x9d\xbb\xa9\x9f\x85\xcf\x46\xbc\x12\xbc\x45\x47\x8f\xe6\xa4\xed\xe3\xbe\x0f\x3d\x33\x1e\x3d\x69\xf4\x5c\x36\x7c\x54\x04\x9b\x11\x12\x64\xd8\xc8\xa0\x12\x27\xfd\xd2\x0f\xef\x89\xe0\xa5\xd0\x87\x92\xbe\x56\xef\xde\x65\x2d\xa8\xe6\x0e\x56\x57\x1d\x3a\x47\x9f\x4e\x6c\x0f\xa9\x66\x8b\x12\x62\xf2\x42\x19\xec\x81\xd5\x5d\x8d\x6e\x93\xe0\xb4\x04\xa7\xec\xa9\x04\x92\x24\x2b\x94\xd2\xcf\xba\x5a\x43\x99\xab\x83\xc2\x0e\xe8\x70\xff\x35\x47\x2a\x09\xe9\x03\x0c\xe8\x02\x15\x72\xda\xc5\x9d\x1d\x82\x9d\x7a\xf9\xe8\xd1\x4b\x78\x28\xe1\xba\x7e\x63\x5d\x80\x1d\xfc\x9b\x34\x71\xbd\x79\xf8\xc0\x5d\x5e\xa1\x94\xfe\xb6\xd7\x21\x53\x78\xab\x61\xb1\x04\x64\x68\x87\xc5\x5d\x2f\x0d\xfe\x3d\xa3\xa4\xe5\x7b\xbf\x52\x8a\x1c\x8b\xa1\x98\xc2\xab\x70\xf5\xdf\xb7\x1d\xaf\x65\x57\x24\x5d\x09\x6f\xe0\x98\xf2\xcd\xab\x10\xd7\x62\xd0\x53\xe5\xd9\xe5\x99\xb6\x2c\xb8\x86\xd7\x7c\x6d\x59\xf6\x94\xbc\x14\xd2\xd5\x43\x24\xed\xe7\x27\xc8\xe0\x7b\x89\x02\x3d\x16\x4b\x04\x3b\x68\x95\x2e\xff\xef\xdc\x9d\xef\x14\xe3\x39\xaa\x41\x1b\x5b\x19\xc5\x4c\x06\x99\x20\x55\x8a\xa4\x33\xa7\xbf\x8f\x8f\x13\x16\xf2\xb4\x2e\x45\x9f\x92\x4c\xa3\x17\x78\x4c\xec\x82\x67\xf6\xb8\x0f\x5e\x15\xfa\x72\x5d\x39\x2b\xed\xe7\xc7\xc7\x7f\x31\x0e\x0e\xb0\xd2\x99\xd3\xb1\x9f\x6b\x2b\xf5\xf1\xd2\xc6\xd6\xd6\xf3\x8d\xb7\x6e\x9d\x8f\x0a\x0d\x5d\x1a\xf5\xb1\x7b\xb0\x82\x0c\xec\xc2\x9b\x8b\x35\x1f\x64\xd0\x01\x32\xe9\xc9\xae\x2b\x26\x9d\xd9\xd9\x88\xc1\x94\xca\x9a\xa1\xd7\x64\xe2\x44\x9c\xe4\x8b\x7d\x27\x28\xa1\xaf\x08\x26\xe2\xa4\x7f\xb3\x84\xbe\xc9\x11\x2a\xb4\x8b\x8b\xb5\x45\x2a\x2b\x2b\x8c\xed\x9c\x45\xa5\xa7\x5b\x0b\x54\x5c\x74\x4d\xce\x81\x9d\x0d\xe4\xd5\x7b\xad\xbf\x3f\xa7\x9f\x87\xfe\x3e\xef\x1e\x1b\xd7\x90\x7b\xa0\x61\x67\x7d\x4d\x7b\x4e\x4d\x34\xf9\xfd\x80\xa3\x48\xa1\x2f\x8d\xbe\xeb\x90\x9a\x30\x80\x4d\xcd\x48\xd6\x26\x31\x18\x02\xef\x53\x69\xa9\x79\x85\x19\x5c\x6c\xad\xa1\xbd\x6e\x17\xd9\xd2\x56\x79\xf4\x04\x7d\x22\xe9\x68\x58\x1b\x1b\xbb\xcb\xdc\x5e\x57\xbb\xab\xb6\xdd\x58\xbb\x9d\x3c\xb7\x68\xf7\xd4\x0f\xe9\x0f\x23\xa6\x2e\x5b\xc4\x66\x64\xa4\x64\xa5\x30\xff\x4e\xfc\xae\x81\x74\x74\xdd\x0b\x9d\x5d\x03\xe9\x94\xa1\x8c\x72\xc9\xfe\x92\xb8\x64\xff\x22\xf9\xc8\x92\x95\x82\x4c\xfc\xad\x44\xfa\x4a\x50\x1b\x28\x53\x4e\x8e\x29\x87\x11\x3c\x24\x1c\x56\x60\x25\x31\x4a\x0c\x6e\x92\x9d\x67\xff\xdf\x03\xec\xf8\x77\x80\xee\xc9\x31\x20\xc1\xe9\xfb\x7f\x22\xc7\xf9\xa3\x8c\xc2\x04\x3c\xa3\x55\xf3\xa9\xf9\x6a\x39\x24\xe0\x99\xc2\xf4\x2a\x7d\x49\xa1\xfc\xd4\xbe\x92\x42\x4b\x95\xba\x44\x8e\xf3\x20\x07\xe6\x41\x4e\x61\x89\xbe\x2a\xbd\x50\xbe\x6a\x5f\x7a\x61\xa2\x5e\x9d\x2e\x77\x1c\xc2\x33\x14\x26\xc0\x19\x75\x49\xa2\x25\x5d\x2d\x5f\xb5\x35\x5d\xad\x4f\x2c\x4c\x97\xc3\x3c\xcc\xc1\x79\x98\xa3\x4e\xb7\x24\x96\xa8\xe5\xa7\xb6\x96\xa8\xab\x2c\x85\x25\x72\x48\x80\x33\xf9\x85\x7c\x99\xb6\x50\xde\xe9\xe1\xda\x44\x5d\xd6\x94\xeb\xcb\x0b\x2d\x15\x72\x60\x1d\xb7\x2d\xe5\xea\xf2\x64\x8b\x7c\x41\x41\x8a\x25\x45\xad\x4f\x96\x23\xdb\x79\x5b\x9f\x52\x98\x52\xa1\x97\xfb\x08\x69\xb0\x45\x78\x02\x16\x4f\x47\x32\x94\x41\x3c\x54\x7b\x29\x88\x6f\x1c\xab\x29\xcd\xa6\x4d\x39\xc1\x0c\x06\xe3\x38\x18\x08\xf9\xd0\xeb\xf8\xd5\x1b\x57\x0f\x2d\xc1\xb7\xe6\x24\xcf\xc8\xd8\xc8\x5d\x45\x02\x3e\x6e\xe5\xe9\x7d\xdf\x57\x81\xc7\xaf\x34\xe4\x63\x1f\x78\x1f\x33\xd1\x80\xfd\x71\x31\x9a\xd1\x08\x62\x0c\x81\x25\x43\xd9\xc9\x38\x66\x00\xf6\xeb\xd7\x0f\x97\x41\x1a\xce\x84\xcb\x1f\x0b\x7f\x91\xd8\x26\x82\x3e\xaf\x33\x05\x1a\x3b\xfe\x59\x78\x31\xf4\xa4\xf9\x74\xd3\x83\x63\x90\x0b\x56\xf0\x83\x63\xe4\x85\x9b\xb6\xb2\x9b\x9c\x0f\x2c\x92\xc0\x70\xc7\x07\x6f\x76\x59\x0c\x44\x08\x5e\x14\xd4\xc0\x1c\x78\x8c\x3b\x08\x44\x71\xe7\x07\xc2\x21\x0a\x0a\xc5\xb0\x1c\x29\xc2\x21\xea\x1c\x4f\x01\x8a\xe1\x31\xec\x80\x1a\x9c\x43\x74\x4e\xfe\x89\xc2\x3a\x98\x07\x5d\x3b\xce\x23\x3a\xa7\xfd\x42\x61\x0d\xcc\x11\xfe\x14\x06\xba\xd5\x1d\x22\xbc\x41\xc1\x72\xa0\x08\x2c\x14\xe3\x03\x88\xa5\xf0\x31\xec\x20\x00\xc5\xc2\x9f\xae\x81\x04\x44\xf4\xa9\xcb\xa8\x4b\x28\x61\x3b\x2f\x09\x87\x88\xfc\x8c\x34\x6b\x1a\x93\x96\xa6\xd3\x66\x70\x9d\x97\x5c\x87\x88\x84\xf4\x8c\xd8\x58\xda\x75\x48\x1c\x5b\x1c\x5b\x9d\xce\x3a\xdc\x3c\x6d\x57\x40\x76\x69\xa9\x35\xbf\x98\x73\xb8\xb5\xaa\x4b\x8a\xeb\xea\x68\x1f\x68\x32\x41\x1a\xbc\x0b\x3a\x4f\x5e\x41\x7a\x78\x29\xc4\xa4\xc3\x4a\x15\x99\x8a\x8a\x68\x78\x80\x75\x50\x83\x3f\x62\x0e\x06\xa1\x1f\xae\x1f\xcc\xb6\xad\x59\x54\x33\x9f\xc1\x91\xd8\x0b\x7b\xe2\x07\x51\xb9\x31\xf9\xdb\x39\x7c\xfb\xe3\x89\xd8\x07\x07\xd3\x18\xdb\x95\x8b\x2c\x2e\x83\xb5\x8a\xcc\x22\x93\x48\xe1\x7d\x54\x64\xb3\x19\xf3\x19\x88\x85\xb9\xf0\x09\x44\xc3\x87\xef\xc1\xbb\x38\xe0\x12\xa7\x70\x5e\xc5\x4a\x0a\x3e\x04\xe5\xaf\x30\x82\x85\xab\xe7\x5d\x32\xd8\xc6\xdc\x39\x77\xe2\xee\xcd\xb9\xc7\xe6\x2e\x5d\x1f\x1b\xb4\x85\x8b\x68\x8b\xdc\x1b\xde\x4a\xde\xb8\xd9\xd1\xf0\x3b\x03\xa3\x41\x3e\x04\x27\xe2\x04\xf4\x1d\x8c\x23\x39\xec\x58\x2b\xc8\x30\x86\xf9\xe4\xd3\x35\x33\x67\x7c\xbe\xf6\xd6\x85\x23\x75\x07\xda\xb9\xa6\x90\xe6\xd0\xc6\x10\x72\xf6\xc7\x1f\x47\x0c\x66\x70\x0c\xca\x7f\x85\x29\x9c\xcf\x4b\x89\x53\x06\x55\x92\x91\xca\x5c\x09\x87\x32\x6f\xe8\x03\xef\x84\x2d\x05\x0f\x0e\x57\xe0\x0a\xa2\x62\x45\x40\xc1\x62\x66\xc9\x32\x4d\xf2\x0a\x0e\x57\xc0\x0a\xe2\x3c\x78\xc0\x3b\x2d\xd0\x87\xe9\x9c\xf8\xba\x93\x5a\x0a\x1e\x61\xf0\x0e\xf4\xa1\xa1\x4f\x0b\xbc\x73\x1e\x3c\x58\x70\x6b\x25\xaf\xd0\x04\x2c\xa6\x97\x14\x2c\xab\x58\xc1\x0a\x49\xae\xdf\x29\xec\x83\xef\xb4\x9c\x47\x0f\x0e\xdc\x36\x92\x4f\x9f\xd3\x5c\x60\x2e\x9e\x2d\xa8\x38\xcd\x75\xc9\x2f\x45\x0f\x7c\x27\x0c\xfb\x30\x82\xcc\x1b\x43\xe1\x37\x25\x84\xd6\x48\x04\x99\x12\xa7\xef\x55\x72\x42\x12\x44\x52\x15\xa7\x0b\xce\x5d\xa0\x2f\x68\xce\x25\x9f\x66\xbb\x6c\x9c\x47\x8f\x16\x7c\x07\xfb\xd0\xd8\x27\x0c\xdf\x59\x8a\x1e\xac\x4f\x35\xc6\x41\x9c\x67\x33\xc4\x19\x94\x10\xe7\xa5\x10\x3d\x74\xc8\x28\xe1\x13\xec\x00\x74\xf9\x7f\xc1\x62\x92\x18\x8e\x2c\x86\x18\x2c\xc2\x2f\x68\x7c\x89\x07\xf0\x00\xbe\xfc\x6f\x61\xc2\x17\x10\x03\x45\x70\xe4\x22\x0b\x49\x62\x97\xff\x42\xec\x40\x74\x7d\x42\xbb\xb6\x0b\x7d\x5d\x7d\x85\xed\xc2\x76\xa1\xaf\xd0\x57\xd8\xce\xfa\x54\x2b\x88\xb9\x89\x35\x89\xbd\x2b\x21\x41\xd8\x0d\x69\xc2\x6e\x48\x96\x26\x49\x8f\x54\x3a\x86\x50\x2e\x5d\x9a\xc0\xb8\x26\x08\x3c\x23\x14\x09\xde\xc2\x5b\xc2\xce\x2c\x2e\x5b\x98\x8d\xe9\x30\x03\xe7\x82\x2f\xc9\xc7\x16\xd4\x24\xb2\xbc\xf0\x81\x2b\xde\x25\xc6\x87\x2c\x8f\x6b\x71\x1a\x76\x87\xb1\xec\x20\x50\xb6\x43\xcc\xf9\x7f\x48\xfe\x2a\x78\xff\xd1\xcc\x4a\x93\xde\x03\x31\xc1\xfb\x2d\x5e\x3d\x81\xe5\xad\xe0\xf3\xd5\x73\x16\xfd\x61\x2e\x8e\xc5\xf9\x04\xff\x1d\x8a\xf5\x7e\x2c\x3f\xfb\xef\x31\xfb\xd8\xfe\x28\x26\x78\xa0\x02\xda\x46\xb1\x3c\xf4\xc3\x7a\xe4\x70\x2e\xcb\xe3\x00\x9c\x8a\x73\x60\x36\x8b\xcf\xe1\x6f\xa1\x97\xb0\xbc\xba\x8a\xb4\x5a\xb2\x0d\x46\x06\x2b\x70\x26\x0e\xc4\x72\x0d\xee\x27\x7d\xaa\xd1\x7e\xf8\xf0\x35\xe8\x91\xa0\x20\xd6\x26\xb6\x5c\x3b\x7c\xb8\x37\x7f\xf8\x10\x7c\xa0\x20\xfc\xe0\x83\x43\x87\xa5\x70\xda\xf1\x7a\x00\xb5\xd9\xb4\xd9\x1a\x64\x2b\x7f\xe4\x8b\x03\x1b\x51\xf6\xf5\x07\xaf\xe6\x2d\xf5\x8d\xd9\x1d\xdb\x92\xd0\x4a\xf2\xe2\x25\xdb\x80\xc3\x78\xe0\x71\x18\xb4\x6a\xe5\xae\x5f\x85\x5f\xa8\xb8\x6b\x19\xb7\xbf\xa2\xbf\x2a\xba\xbd\xf3\x1a\xfb\x61\x43\xf1\xfe\xf2\x7d\x95\xad\xf2\xa5\x2d\xc4\x42\x14\x85\xa0\x2f\x72\xb4\xdb\xcb\xf5\xfd\x02\x45\xec\xf9\x96\xa4\xb6\xd4\xbd\xe9\xfb\xe5\xdf\x37\x10\x0a\xef\x1f\x70\x16\x95\x10\x1a\x1b\x16\x13\x31\xef\xbc\xef\x07\x7e\x28\x9b\x86\x03\xa3\x48\x69\x77\x8f\xf2\xb1\x41\x59\x9b\x75\x9b\x8d\x72\x69\x2f\x8f\xb9\x62\x68\xcd\x07\x1e\x86\x01\x07\xf1\x24\x6e\x15\x1e\x52\xf1\x97\xb7\x9d\xdf\x78\x02\x17\xe2\x38\x5f\x29\xa9\x0e\x3e\xb4\x6a\xf7\xe2\xa2\xe3\x90\xe5\x6b\x8b\x08\xb3\x6c\x63\xb6\x85\xe9\xb3\x22\xb8\xe3\x98\xb5\x58\xb5\x2a\x22\x78\xa3\x1c\x17\xc2\xb8\x8d\x81\xdb\x96\xc6\x2f\x90\x43\xfa\x24\x22\x33\x46\x17\x1d\x49\x47\x5a\xa3\xed\x31\x2c\xa6\x4d\xaa\x5e\xb0\x67\xe9\xa1\x40\x39\x2c\x84\x71\x7b\x37\x9e\x8a\xbc\xa8\x92\xaf\xc1\x6c\x22\x7b\x77\x4b\x8e\xe0\x25\xc9\xcd\xdb\xcd\xad\x81\xec\x8b\x45\xa7\x9a\xf6\x1e\x92\xc3\x42\x1c\x77\xe8\xc4\x9e\xf3\xd5\x97\xe5\x98\x76\x8f\xb0\xd7\x5b\x1b\x9a\xe8\x26\x5d\x43\x66\x3d\x0b\xe9\xf7\x08\x17\xef\xe8\x4b\xf1\x62\x6c\xd5\xa2\x11\x87\x22\x87\x09\xe7\xc3\x7c\x6b\x5a\x6b\x5b\xea\x9b\xae\x2e\xf3\x7d\xfa\x0a\x64\x5f\xc3\xc0\x86\x94\x47\xbe\xfb\xf3\xdb\x73\xdb\x4d\xa4\xe3\x76\x67\x0a\x05\x5c\x08\xf8\x2e\x04\x11\xbb\x34\xac\x32\xb4\x7c\x6b\x71\x90\xfc\xc3\x68\x62\xe7\xdc\xa2\x8f\x66\xd0\x33\x32\x3e\x8a\x9b\xcb\x7e\x1f\x9d\x1e\x94\x1a\x9c\x14\x22\x3f\x1f\x46\x7c\x01\xa2\x36\xf0\x05\x8e\xc6\x1e\xc2\x24\x0a\x39\x48\x40\x23\x0c\xc5\xd6\x7c\x72\xae\xb8\xdd\xd8\x9e\xb3\x5f\x9b\x32\xd6\x17\x06\x46\x83\x6c\xda\x53\xbf\xab\xe7\x7c\xeb\x23\x6b\xc3\x6a\x42\xcf\xb7\xf8\xc2\x78\xd7\x24\xca\x15\xe6\xea\xed\xea\xed\x0a\x73\x53\xa1\xb7\x10\x26\x84\x09\x5d\x94\xe5\xc5\xee\xa2\xbb\x8a\x3b\xdc\x27\x57\xc2\xf2\xe2\x91\xca\xae\x37\x74\xf3\x5f\x81\x14\x3a\x60\xe6\x8b\x5f\x61\x0e\x18\x84\x9e\x12\xe8\x0d\x6b\x71\x11\x0c\x85\x89\x5f\x80\xef\x25\xf8\x12\xec\xd2\xce\x87\xc2\xb7\x90\x44\x9d\x59\x64\xdb\xb4\x61\x79\x66\xc0\xb2\x2b\x59\x87\x58\xe9\x4c\x8f\xc3\x27\x8a\xce\x70\x21\x42\x30\x75\x2c\xee\xe0\xaa\xa5\x89\x5b\x57\xae\xac\x09\x3f\xcb\x4a\xfb\x79\x9c\xa9\x6a\x3d\xc9\xc1\xc4\x3b\x54\xaa\x2e\x25\x27\x35\x87\xcc\x4b\xc9\x4d\x49\xa6\xdf\x9d\x37\x79\x40\x22\x1b\xa1\x4b\x4e\x0f\xa3\x43\x8f\x27\x36\xe8\xd8\xef\xd3\x7e\x8a\x1c\x44\x63\xbf\xa1\x6b\x51\xd6\x0f\xdf\x6e\x03\xe9\x57\x47\x0e\x5d\xaf\x61\x2d\xe2\xa8\x72\x55\x7d\x0b\xdd\x9c\xb7\xbf\xb9\x84\xb5\x88\x17\x56\x6f\x7e\xf4\x05\x0d\xe4\x8f\x0f\x40\xb4\x7f\x9f\x26\xa9\x85\x3d\x7a\xb4\xb8\xec\x10\x87\xbd\xc4\x17\x5d\xe3\x29\x4b\x1d\x5f\x57\x47\x0b\x0a\xf1\x4e\xbe\x4e\xbf\x93\x05\xa5\xc8\x10\xc7\xc7\xc5\xd1\xae\xbe\xe2\x18\x3e\xda\x1c\xc3\x0a\x64\x19\x95\x1c\xb6\x35\x3b\x98\x41\xdf\xd4\xe7\xe0\xc1\x41\xa4\xd9\x2c\xd6\x6a\x4d\x59\x4c\x86\xca\x60\x54\x71\xd0\xfd\xd2\x31\x71\xa5\xb1\x42\x5f\xc1\x82\x9f\x48\xb7\xcd\xbc\x6d\x1b\xfd\x02\xbb\x8b\x92\x53\xcc\xc9\xcc\x4a\x8c\x17\x05\xe7\xaf\x3f\x52\x5b\x6b\x2b\xa9\x62\xf1\x6d\x31\x0a\x8e\x15\xd4\xba\x90\x8d\x6b\xd6\x04\x1f\x3c\x76\xbc\xed\xd0\x89\x13\xad\x1b\xd6\xb2\x82\x70\xdc\x4f\x59\x8d\x76\x98\x01\x87\x60\xbd\x90\x05\x9f\xe2\x34\x98\xdb\xfb\x3a\x6c\xc4\xe5\x10\x86\xdd\x20\x18\xfa\xc3\x66\x1c\x04\xeb\xc1\x03\xc2\x20\x00\x22\xa5\xbf\x3c\x14\x7e\xae\xa1\xfc\xa7\x24\xcf\xfc\xe4\xbd\xc2\x1f\x7f\x78\x5c\x7a\xeb\xfa\x6f\xaa\x31\xec\x62\x47\x0e\x35\x31\x7c\x99\xff\x98\x90\xcf\xbe\x7f\xd0\xfc\xf9\xcf\xdf\xb7\xcd\x9e\xce\x42\x0d\xdc\xa5\x62\x3e\x99\x91\x38\x9d\xd9\xbd\x7c\x61\x59\x57\x0e\xab\x01\xa8\xc4\x45\x03\xaf\x21\xf7\xd7\x36\x2e\x47\xbc\x32\x4e\xbd\x60\x15\xbd\xbc\x7a\xc3\xd1\x68\x36\x47\x8c\x9e\x21\x33\x3f\xc1\x1e\x34\x6e\x86\x95\x4b\x61\x1a\x04\xc1\x88\x3b\x90\xcc\x4a\x65\x6a\x68\x75\xbd\xdf\x1f\x3e\xa0\xcf\x34\x56\x9f\x2c\x60\x61\xe2\xee\xe7\x40\xc1\x14\xba\x31\xbb\x41\x53\xcf\xd6\xe7\xed\xb2\xed\xb2\x93\x70\xab\x73\x12\x95\x73\x84\x3f\x7c\x84\x16\x1c\xe2\x76\xe3\x41\x6b\x3b\x8b\xb1\x22\xeb\x26\xe3\xc6\x8d\xb4\xeb\xa5\x78\x3d\xbf\x21\x67\x3d\x0b\xb1\x22\xe1\x77\x88\xa5\xe2\xc3\xb7\xaa\x83\x98\x19\x19\xb7\x2f\x72\xd2\x4c\x0f\xc1\xf3\xa1\xb8\xa1\x31\xa7\x91\x81\xa5\x38\x4d\x2c\xd5\xab\xcf\x1a\xce\xe6\x9f\x65\x31\x51\x64\x8d\x32\x45\x46\xd2\xd2\x77\xd5\xd3\x86\x8a\xa5\x1a\x0f\x5c\x2a\xb6\x54\x56\x59\xaa\x8a\x8a\x0c\xc5\x8c\x54\xaf\xce\x31\xe0\x73\xb1\x74\xf9\x46\x9c\x59\x87\x53\x20\xec\xd2\xe7\x05\x8d\xa7\x59\x57\x87\xc2\x3b\x91\xba\xb3\xec\xf6\xe4\x49\x4b\x66\x4d\x9d\x76\xf1\x93\x6f\x59\xe9\x46\xbf\xbb\x17\x6e\xde\xe1\x7c\x8e\x49\x7e\xf0\x53\xba\x54\x82\xf8\x1f\xe7\xd2\xe7\xbd\xcf\x3f\x5f\xf5\xdc\xa9\x7c\x2e\xbd\x2b\xfd\xc5\xf1\xbd\x73\x15\xf5\xca\xff\x51\x3f\xbf\xb1\x63\xfd\x62\xac\xdb\x0b\x77\xb0\x9b\x36\xac\x5f\xbe\x7e\x0e\xbe\x83\xf3\x91\xc3\xcb\xfb\x5d\xf3\xc8\x18\xcb\xce\xc4\x5d\x66\x13\x6f\x66\x1a\x2c\xd5\x75\x86\xc6\x48\xf8\xe6\x06\x1c\x84\xf1\x60\xd8\x7f\xe1\xc0\x89\xb6\xfd\x64\x7c\xf3\xbe\x8c\x76\x46\x7a\xf7\xe5\xe3\xc7\x2f\x39\xa1\x97\x9a\x82\x3b\x58\x02\x25\x78\x07\xbf\xc2\x52\x2c\xc1\x3b\x23\x6a\x46\x1c\x9c\xc8\x16\x6f\xdf\xad\xd9\x55\x5c\x57\x5c\xb0\x3b\x63\x17\xb9\xed\x7a\x72\xc7\x5d\x1a\xca\x21\x1c\xc2\xa1\xdc\x4d\x31\x1c\xcb\xb1\x1c\xbb\x68\x48\x70\xae\x3d\x94\x8d\xce\x8b\x49\xce\x8a\xc9\x8e\x2e\x8f\x6e\xc8\x22\x33\x0f\x1d\xd6\x1d\x66\xe0\x0e\x94\x40\x09\x7c\xc5\xf9\xbc\x90\x54\x28\x44\xf7\xbd\x60\xa7\x23\x8a\xc2\x91\x28\x19\x8a\xef\xe3\x5a\x3a\xd8\x1e\x59\x12\xc6\x1a\xf2\xf4\xda\x7c\xc6\x24\xba\x90\xf7\xd9\xd9\x9a\x53\xa4\xd5\x6c\x29\xb5\x31\x56\x7d\xe9\x47\xbf\xe1\xcc\x1b\xa9\x72\xb3\x9e\xd0\x1b\x79\xa3\x91\x35\xea\x72\x8c\x3a\x26\xc4\x10\x97\x12\x91\x4d\x06\x85\xa8\x52\x97\xd1\xd8\x07\x8e\xe9\xbe\x7e\x04\x83\x2b\xbe\xfc\x9c\xdd\xa5\x6f\xcb\xad\xcd\x22\xb7\x81\xf8\x8f\x70\xf0\x61\x7e\x86\x0f\x0a\x1f\x9d\xe7\xf2\x0b\x0d\x45\xd6\xc2\x94\x5f\x47\xe8\x96\x9e\xbd\xfa\x45\xeb\x37\xcd\xdf\x5b\x73\x7d\x4d\x26\xde\x68\xe2\xb6\x97\x1c\x1a\xb6\x9f\x39\x57\x09\x3e\xad\x30\x7a\x0a\xb0\x63\x41\xca\x19\xcd\xd9\xf9\xe6\xda\x8a\xfa\x7a\xfa\xcc\xf6\xcf\xa2\x0e\xb3\x46\xeb\x6a\x50\xad\x80\x05\xa8\xfa\x43\xbe\xe7\xc3\xa1\xd5\x63\x18\x24\xd0\x23\x25\xf0\x3d\x0e\x27\x4d\xc2\xfe\x98\x8e\x0b\xe9\xc4\x14\xf5\x0a\xd3\x76\x32\x25\x21\x79\x7d\x34\x9d\x6c\x4a\xb1\xa5\xb0\x3e\xd0\x94\x9f\xe0\xe8\x07\x87\xde\x3c\x82\x09\x77\x9d\x97\xa8\xe5\x21\x21\x01\xcb\x03\xda\xce\x9c\x3d\xdb\x76\xe6\x6c\x5b\x48\x00\xeb\x48\x75\xe5\x52\xc1\x21\x21\x01\x21\x21\x6d\x7b\xdb\xda\xda\xda\xce\xb6\x85\x84\xb0\xa8\x16\x72\xdd\xb2\xcb\x03\x96\xb7\x9d\x39\x7b\xa6\xed\xec\x99\x2e\xd9\x77\xdc\xb2\xc1\x21\xcb\xff\x93\x3d\xb3\xd7\x2d\x5b\x29\xf4\xa3\xe0\xc8\x42\xbc\x06\x91\x28\x30\xae\xfe\xf8\x2d\xd6\xe2\xef\xb8\x06\x3c\x71\x02\xcc\x45\x29\xf7\x11\x46\x41\x1e\x48\x89\xe4\x9f\x6e\x27\xff\xc4\xec\xac\x31\x99\x77\x72\x69\xc7\xb5\xa7\x4e\xd3\x70\x03\xea\xa0\x00\x7e\xab\xdd\x69\xd4\xef\x64\x85\x1f\x5c\x17\x28\x38\x84\x87\x40\x8d\xdf\xe2\xef\x58\x8b\x6a\x74\x9f\xd5\xa2\x1a\x7e\xbf\xdd\x51\x59\xd1\xc1\xc2\x1a\xf4\x0c\x80\xb9\x04\x0c\x04\x4f\xf0\x80\x01\x30\x9e\x76\x3f\x33\x2b\x44\xff\xe3\xa5\x10\xfd\xa0\x20\x5e\x52\x36\x4d\x46\x6e\x06\xa3\x56\xeb\xb3\x35\x9c\xc2\xa1\x7e\x1d\x90\xa0\x52\xc5\x99\x76\xc8\xcd\xb1\xa5\x09\x3b\x33\x05\x0e\xc7\xf9\x3a\xcf\x38\x47\x75\xbe\x78\x7d\x98\xc0\xbf\xc5\x31\xe5\x3b\xea\x32\x59\xbd\x2d\xdf\x68\x63\x2a\x2b\xf2\x4b\x8b\x38\xd0\xc1\x71\x61\x35\x2e\x84\xee\xca\xff\xcb\x74\x62\x49\x8c\x29\x21\xa3\xcb\xa8\x6f\x82\x2a\x23\xce\xbc\xe3\x5f\xa3\x11\xb8\xdc\xd7\xb5\x4a\xbc\xbd\x6c\x47\x9d\xa6\xcb\x56\x7e\xd7\x12\xc5\x22\x0e\x4e\xc1\x3d\xa1\x16\xc3\xa1\xbb\x12\x7f\x55\x38\x07\x50\x2e\x35\xac\x13\x62\x1d\xfb\x3a\x9f\x77\x4a\xf1\x07\x50\x2a\x88\x52\xc7\x75\xc2\x67\xbf\xd2\xed\xa3\x09\x1d\x60\x9f\x9f\xd8\x1b\x92\xba\xdc\x50\xe9\xfd\xcf\x94\xa0\x54\x92\xd2\xdf\x50\x09\x2c\x71\x5d\x02\xbf\x2b\xa5\xf7\xf1\x63\x18\x08\x11\x03\x21\x99\x81\xc5\x4a\xae\x53\x06\xed\x70\x55\x82\x2f\xe0\x9e\x52\xfa\xdb\x54\xa5\xf4\x3e\x04\x48\xba\x72\xbe\xc9\x0c\x4a\x90\x79\x39\xec\x70\x59\x09\xcb\x95\x9b\x24\x9c\xc3\xde\x29\xbb\xad\xe4\xc1\x28\x81\xb7\x95\xd5\x28\x83\xbe\xd8\x13\x7a\x62\x4f\x90\x0a\xf7\x60\x8c\x50\x0f\x3e\xbd\xa1\x00\x2c\x8e\x6a\x30\x4b\xd7\x2b\x44\x36\x94\x51\xad\xc5\xed\x8d\x8f\xd1\x63\xf3\xaa\x66\x2e\xbc\xca\xf0\xb8\x85\x96\x4e\x35\x3a\x3f\x22\xda\x4c\xff\xec\xa9\x61\x4f\xee\xfe\x67\xc3\x63\xba\x29\xfd\x40\x08\x3b\x76\x6c\xd6\xd8\x31\x63\x6c\x63\x98\x90\xf4\x2d\x91\xe3\xfe\x3c\x70\x32\x92\x6b\x4d\xe0\x07\x04\xd3\x46\xec\x20\xd4\xbc\xc6\xa8\x66\xf5\x19\x19\xbc\x8a\xe9\x5c\x24\x92\x56\x66\x64\xf0\x96\x0c\xce\x58\xc8\x17\x14\xd2\xd2\xf5\x46\xe8\x20\xda\xf8\x7f\x5a\xab\xd9\x13\xbb\xff\xd8\xf4\xe8\x8d\xc1\xf1\xe3\xb2\xc6\x8f\x18\x6e\x1b\xc1\x84\x66\x6c\x8e\x1a\xf5\xea\xf8\xc9\x08\xee\x48\x4c\x16\x0e\x5f\x43\x77\x9e\x11\x9b\x96\x12\xa1\xc6\xb1\xe1\xf1\x6c\xe0\xb6\x11\x6d\xfe\x74\x74\xe9\xd6\x16\xf6\xe1\x43\xdb\xc3\x9f\x7f\xc9\xfa\x85\x69\x2d\x39\xd0\xf4\x23\x4a\xd6\xaf\x6c\xe6\x82\x6b\xf8\xe7\xfb\x68\x93\x20\x26\x0a\xf9\x02\x53\x01\x6b\x2d\xab\x30\x96\x33\x8e\xf1\xa2\xb2\x0a\x93\xae\x8c\x33\x69\x78\x8d\x9a\x36\xb9\x18\x22\x94\x1f\x1f\x96\xc0\xae\xdc\x36\x68\xdf\x68\x3a\xaa\x2c\x78\x0f\xfb\xe4\x89\xed\xc9\x0f\x3f\x64\x3d\x61\xba\x40\x86\x54\x50\xe0\x29\xd4\x40\x0a\xf4\x87\x14\x2f\x85\xf7\x6b\x05\xf1\x11\xb5\x27\xa6\x7e\x1b\xeb\xda\x21\xc2\x05\x38\x5a\x15\x3b\x9d\x9b\x14\x33\x6b\xc5\xe2\xc9\xe4\x92\xc9\x91\x43\xd1\x8b\x1e\x56\xe3\x7f\x70\x2a\x7b\x78\xd2\x95\x45\x0f\x82\xae\x46\x7c\x9f\xf8\x9b\x96\x74\x65\xc1\x09\x89\xc2\xfb\x2c\xf4\x57\xe0\x54\x38\x21\x81\x63\xca\x6a\x43\xad\xb5\x92\xcd\x2d\x2b\x2a\x2c\xcb\x25\x73\xcb\xab\xf4\xe5\xcc\x9e\xfa\x8b\x7b\x38\x1f\x7e\xaf\xc4\x93\x87\x38\x67\x07\xc4\xc9\x1e\xc2\x0b\x90\x51\xf8\x02\x65\xf0\x42\x04\x2f\xc0\x7e\x50\x09\xfe\x82\x8c\xea\x7c\x81\x32\xc7\x0b\x51\xa7\xcc\x21\xa3\x30\xae\xeb\x63\x8e\x82\xf0\x7b\x2d\xa3\x3a\xe3\x50\xe6\x88\x13\xbd\x0e\x50\x10\x1e\x07\x95\x0e\x99\xcb\xad\xd1\x81\xff\x4b\xca\x21\xf3\xfe\x57\xd7\x67\xab\x44\xe1\x7d\x5a\xb0\x53\xe3\xa7\x86\xad\x58\xca\xa1\x0b\xe6\x10\xa6\x42\x53\x11\x5f\xc8\x17\x1a\x8b\x0a\x7b\x0c\x00\x37\x67\xc5\xf9\xbb\x61\x0f\x18\x98\x05\xfd\xa1\x3f\xcc\xfa\x3f\xd7\xcd\xaa\x4d\x2a\x93\x9a\x43\x17\xce\x21\x4e\x2f\x9d\xda\x32\x9e\xf9\x97\x8f\xb3\xa0\x3f\xf6\x87\x59\x0f\xee\xb6\x9c\x3e\xcf\x81\xbb\xde\xa8\x36\xaa\xd4\xf4\x7f\x15\xff\x97\x39\xd6\x67\xbf\x52\x98\x06\x53\x85\x69\xfb\x24\x4e\x3b\xd8\x65\x0f\x0d\x4a\x78\x4a\x61\xf7\xa1\x43\xb1\x3b\x4a\x86\x3e\x83\xee\xf9\x26\x9b\x29\x9f\xc5\x6c\xe8\x41\x84\x6e\x5d\x15\xbf\x8c\xc1\xee\x43\x7f\x05\x09\x48\x9e\xfd\x0a\xdd\xcf\x9d\x8a\x0f\xdd\xc7\x81\xbb\xd2\x98\x6f\xb4\xe5\xd3\xd0\xfd\xd9\x33\x90\x40\xf7\x67\x6f\xf4\x87\x62\xf7\x65\xab\x6a\xda\xb6\xb2\x98\x8d\x3d\x08\x93\xd6\x94\xc5\x6b\x79\xad\x31\x4b\xdb\x63\x00\xb8\x39\x6d\xfb\x4e\xd5\x9c\x63\xba\xc4\x25\x1c\xd8\x1d\x55\x7e\xca\x6a\x67\x34\x7c\x08\xb2\x2b\xcd\xe0\xdf\x9b\x87\x0f\x15\xde\xc7\x61\x84\xf5\x8a\x15\x46\xa0\x0c\xfc\xa5\x1d\xc2\x75\xe7\x6c\xaa\x24\x2c\x35\x38\x2c\x1d\xbd\xd7\x8f\x1a\xb5\x1e\xbd\xc9\x58\x75\x5c\xda\x76\x46\xab\x35\x5b\xb4\x5c\x58\x71\xda\xde\xe2\x96\x0b\xf0\x1e\x90\x40\xc2\x7b\x17\x48\xe9\xbc\x96\xe2\xbd\x69\xc5\x61\xa4\x73\x26\x08\x14\xe6\xa0\x7e\xf6\xf5\xd8\xba\xcd\x7c\x6c\xac\x7c\xfe\x7c\xe2\xdc\x40\xec\xde\x82\xbd\x18\x97\x1c\xaf\xe3\x75\x97\xfc\xbf\xfc\x0a\x82\x1c\xae\xc3\x75\x41\x0e\xbd\xc2\xa0\xfb\xb2\xbf\xb8\x2b\x57\xea\xea\xf8\xf6\xd8\x3a\xb9\x74\xeb\xec\xeb\xa0\x87\x1c\x62\xeb\xdf\x54\x71\x11\x5f\x9d\x51\x34\xea\x27\xdf\x37\xb8\x82\xaa\x0c\x3e\xb1\x28\xe3\xa7\x51\xbe\xd9\x79\xf9\x39\x76\x26\x3f\x1f\x66\x4b\x20\x05\x53\xa8\x37\xe8\x83\x23\x7f\xf4\x55\x15\x27\xf0\xaa\x0c\xf8\x45\xf9\xe3\x48\x5f\xe9\x4c\x10\x29\xf3\xf3\x2d\x79\x36\xae\x1d\xe6\x2f\x55\x0e\x15\x0d\x50\x0e\x95\x70\xcf\x20\x43\x02\x01\x5d\xb8\x76\x43\xc5\xf1\x4a\x18\xda\xfe\xaf\xfa\x9b\x36\x46\x8d\xf4\x85\x5f\x94\xe4\xff\x5f\x0b\x3f\xfd\x48\xf8\x80\xbf\x04\xa8\x84\xae\xf5\xec\xa3\x25\xc2\x4b\x47\x10\x05\xdd\xf0\x07\x02\x40\x04\x9e\xf0\x03\x1e\x80\x20\x42\x78\xe1\xdd\xe5\x32\x0b\xff\xa3\x70\x1e\xa3\x22\xc1\x17\xbf\xdd\x82\x1c\x9e\x02\xf2\x13\x22\x76\xfa\xc4\xf4\xf1\xcc\xf8\x89\x25\x75\xd3\x39\x20\x6f\x20\x07\xa7\xfe\x7f\x8c\xbd\x07\x78\x14\x55\xf7\x30\x3e\x21\x99\xe2\x08\x79\x21\xb3\x13\x93\x9d\x9d\x99\xd0\xa4\x89\x08\x46\x9a\x20\x01\xe9\xbd\xac\x48\x0f\x2d\xd4\x24\x84\xf4\x9e\x25\x7d\x4b\xfa\xa6\x12\xd2\x13\x48\x20\x24\x40\x68\xa1\x4a\x11\x31\xe8\xab\x10\x41\x50\x10\xec\x8a\x80\xaf\xa2\x67\x76\xcf\x24\xef\xff\xd9\x8d\xbe\xbf\xf2\x7d\xdf\xf3\xfc\x9f\xdd\x9d\x7b\xee\xb9\xa7\xdd\x76\xee\xdd\x3b\x33\xf7\xe2\xbd\x63\x41\xe8\x45\x8e\x04\x8d\x1e\x5e\x83\xb7\x2c\x66\x8b\x45\xfb\xaf\x31\x90\x0a\xe1\x0b\xe0\x0e\x0a\x49\x3f\xc3\x4b\xa0\xfb\x15\xc6\x9c\xf3\x5e\x8e\x7d\xe1\x18\xbe\x0e\xc7\xe0\xf5\xe5\xd0\x17\xc6\xac\x04\xdd\xcb\x3f\xe3\x4b\xde\xa8\x2d\x9e\x8f\x77\x20\x15\xc3\xff\xf5\x2d\xe9\x18\xc1\xb5\xf8\x96\x1e\x5f\x1b\x89\x1a\xc9\xbd\xca\xfc\xf7\xa1\xfa\xb0\x1c\x46\xc2\x69\xa5\x2f\xeb\x3c\xa5\xe8\xff\xf2\xe5\xec\x07\x14\x3d\x84\xaf\x64\x51\xaf\x74\xae\x64\x95\x4e\xd4\xaf\x64\x61\x80\xc8\xa5\x12\x63\x59\xf5\x26\x3c\xe7\x15\x8e\x6a\x39\x70\xa0\x45\x06\x5e\x2d\x42\x9e\xde\x7a\x20\xb8\x55\xd2\xb9\x25\xaa\x6d\x2b\x59\xee\x3a\xf1\xbf\xd9\xbe\xf6\x1b\xcb\x2a\x1a\xe5\x17\xfe\x63\xec\x03\x77\xbb\xf6\x76\x95\x63\x6f\xbc\x3b\x5b\x4a\x54\x8a\x0a\xe9\xd6\x83\x1d\xf0\x9b\x45\x82\xdf\xb2\x0e\xce\xde\xa2\xdd\xa3\x14\xd1\xaa\xec\xa6\x67\x51\x4f\x73\x17\x73\x1b\x45\xe5\x84\x9b\x43\x05\xb5\xf5\x40\x70\x8b\xa4\x68\x28\x2e\x64\xa8\x53\xb3\x7b\x95\x51\x04\xab\x8b\xa2\x81\xce\x0e\xb0\x76\x40\xa7\x26\xc4\xa6\xd7\xb9\x5d\xe4\xd5\x49\x54\x42\x62\x72\x42\x86\x8c\x59\x5d\x5d\xa4\x6a\x85\x49\xa2\xd2\x49\x9b\x69\x5f\x11\x3a\x6d\x56\x1e\xad\x5d\x7a\xb0\x52\x36\x2b\xea\x79\xcc\xb2\x75\x91\xa5\x19\x89\xd6\x04\x41\x9d\xd4\x65\xa5\xc6\xb0\x66\x5a\xed\x84\x49\x62\x77\x9b\x8e\xaa\x82\x10\xd1\xe6\x0b\xe1\x10\x22\xba\x9f\x60\x75\xd4\x17\xf6\x7f\xf2\x2b\xcf\x4d\x34\xaf\x5c\xa9\x0e\x56\x07\x79\x61\x22\x24\x2a\x83\x94\xc1\xe7\xce\x9a\xef\xaf\x3c\xe7\xbd\xf2\xec\x44\xf3\xca\x55\xea\x20\x75\xb0\x17\x0e\x87\xe1\xe8\x8b\xbe\xb8\x0b\x77\x05\xe2\xd7\x30\x1e\x2d\xde\xd8\x8d\xdd\x24\xce\x81\x39\x34\x74\x43\x37\x58\x70\x3c\x7c\xdd\x04\xbb\x60\x97\x37\xf8\x82\xaf\x83\x43\x19\xac\x0c\x3a\x7b\xce\xfc\xe5\xaa\x73\xde\xee\x55\x3a\xb2\xf6\x47\x97\x3f\x1f\xeb\xc8\x88\x47\xae\xb6\x2e\x5b\x2b\x0f\x6e\xc3\xbf\xc3\x17\xe1\x6b\x16\x5e\xfc\xe5\x7b\x70\x95\x14\x93\x27\xb8\x8d\xf8\x0e\x7b\x3b\x50\xbd\x1f\x3b\x50\x10\x81\xb3\x79\x4c\xc3\x97\x70\x73\x35\x92\xb9\xe3\xb3\x03\xb7\x65\xe8\xa3\xca\xa2\xf6\x46\x56\x66\x64\x67\x66\x67\x66\xc7\x54\x04\x59\xd7\x98\xd0\x35\x03\xfd\x23\x70\x0f\xf4\x65\x6c\x6f\xd0\xe0\xde\x74\x04\x5c\x25\xfb\x2f\xd4\x1f\xad\xeb\x90\x96\xbb\x46\xd1\x30\x2e\x97\x3f\x78\x66\xdb\xf9\xe5\x5b\x52\xd3\x1d\x1f\xc6\x36\x97\x7e\xfc\xf6\xdd\x31\x92\x0e\x5f\xa2\xc6\xbc\x3d\x79\x84\xdc\x35\x97\x4e\xcd\x4d\xc9\x4d\xcd\x5d\xde\xba\x6d\xc5\xc1\xd5\x1d\x93\xc0\x7d\x38\x2c\x9c\x82\x2b\xbb\x5e\xb7\x4d\xf4\x31\xc0\x2f\x4c\x9a\x05\xd6\xc2\x40\xed\xbe\x8c\xb2\x8c\xb2\x4c\x06\x07\x58\x70\x59\x9e\xd6\x80\xbf\xd8\x26\xfe\x89\x2b\x6d\xaf\xc3\xc2\x3b\xe0\xfe\x4b\xc7\x3d\xc6\xbd\xea\x5b\xc8\xb3\x37\xc3\x60\x97\x67\x90\x07\x83\x61\xce\x2d\x18\xec\x04\xf2\x60\xb0\xab\x5d\x63\xff\x9a\xc7\xc1\xea\x4c\x18\x4c\x29\x03\x94\x99\x7f\xc3\x78\xcf\x4d\x1d\x40\x61\x10\x06\x91\x10\x84\xf7\xec\xcd\x3a\xb7\xa6\xae\x16\x1a\x06\xdb\xfd\x78\x9d\xfd\x0d\x0a\x5d\xf0\x38\xa9\xc3\x58\x65\x00\x06\x41\x10\x0d\x41\x10\x44\xc2\x3d\x4a\x99\xa9\xcc\x24\xdd\x41\x66\x1f\xea\xc8\xe5\xae\xb6\x52\x08\xe2\x2d\x8d\x31\xfb\x77\x94\xec\x28\xde\x9a\x12\x15\xca\x2c\x9e\x61\x32\x9b\xb5\xb8\x16\x93\x93\x0d\xe9\x09\x99\x29\xc6\x64\x4b\x72\x56\x52\x6e\x62\xa1\xa1\x7d\x19\x44\x8c\xbf\x55\x5c\x97\xbb\xaf\xb4\xa0\x2a\xb7\xc4\x5c\x68\x81\xc3\x0c\xf4\x33\x67\x99\x25\x1c\x06\x39\x7c\x56\x4b\x74\x53\x50\x31\x33\xf6\x90\xc5\x62\xd6\x02\x8b\x27\x92\xf2\xe2\x85\x08\x4b\x94\x21\x21\x22\x78\x6d\x22\x0e\x29\x1a\x96\xbd\x33\x2f\xa4\x20\xae\x38\xa2\x32\xb1\xda\xc4\x94\x5a\xb3\x1e\x41\xb5\x0c\xbd\x8f\x9a\xcd\x66\x6d\xa3\xb5\xb2\x3e\xeb\x30\x63\xfb\x18\xcf\xf1\x39\xf5\x29\x55\x31\xa5\x06\x6b\x72\x36\x56\x7f\xc3\x20\x7b\xd4\x64\x31\x6b\x83\x0b\x77\x26\x47\x84\x84\xef\xca\xdc\xba\x6f\x57\xfb\x5b\x5e\xe0\x8b\x25\xc5\x31\xc5\xc9\xe5\x09\x35\xc6\x1a\xeb\x3f\x1b\x60\x18\x2c\x29\xbc\xc5\x74\xf9\xda\x7a\xf3\x69\xd0\x67\xab\xd2\x92\x51\x97\x56\x13\xb3\x37\x34\x6f\x72\x25\x5e\x18\xa7\x5f\x1a\x13\x93\x16\x9e\x1b\xc9\x98\x0b\x63\x15\x37\xf5\xae\x74\xf9\xf5\x93\x25\xa5\x39\x65\xb9\x27\x4b\xd2\x7f\x67\x6c\xc3\x91\xe0\x9d\x7e\x26\xe5\x36\xbe\x04\xef\xce\x6d\x0a\x2f\x0a\x37\x47\x27\x26\xa5\xa4\x18\x70\x3c\x86\x33\x53\x5f\x36\x99\xcc\xda\x98\x30\xd3\x8e\x8a\xa0\x8a\xa0\xe6\x84\xc6\x02\xc6\x64\x74\x98\x5d\x96\xdb\x90\x7f\xb6\x08\xae\x7e\x56\x9c\x53\x5c\x50\x51\x62\xad\x32\xd6\x31\xee\xd0\xe8\x3c\xb4\x1a\x8c\xac\x19\x26\xb2\xcb\x45\x88\x66\x39\xfc\xd5\x79\xd4\x80\xaa\x51\x35\xf0\x01\x4b\x83\xa6\x4b\xc3\x77\x69\x50\x63\xd3\x50\x76\x8d\x9b\xb9\x4b\xe3\x18\xd4\x69\xe7\x79\xae\xaa\x15\x35\x8a\x95\x52\x34\x6e\xff\x2f\x88\xe2\x48\x83\x62\xa5\x74\x76\xa2\xab\x93\x87\xcd\xa2\x5d\x0f\x1a\x9a\xc3\x5f\xbb\xf5\xf4\x31\xd1\x73\x24\x2b\x39\xea\x3f\xbf\x32\xa7\xba\x5a\x6b\xef\x5c\xcc\x76\x77\xd2\xa0\x71\xf8\x04\x9d\x8d\xa0\xb8\xb4\x5c\xd4\xa0\x95\xe6\xa2\xd7\x77\x77\xc2\x29\x51\x82\x2a\x11\xba\x59\x77\x68\x54\x34\x50\x20\xba\x1c\xd7\xd1\x87\x34\x0f\xed\xd6\x12\xbe\x1e\x7c\xc0\xa7\xe1\x2c\x6a\x1a\x02\x02\x50\x13\xb2\x2a\x04\x7c\xd0\xa7\x5e\x86\x1a\xa8\xe5\x6b\x61\x30\x0c\xaa\xb5\x42\x17\xfb\x87\x0f\x4e\x7b\x1f\x87\x0a\x38\x14\xa7\x2d\xee\xef\x03\x8f\xc4\x5a\xa9\xec\xcf\x67\x30\x14\x86\x80\xcb\x90\x52\x01\xea\xa1\x8e\xaf\x81\x41\x30\xa8\xb6\x00\xba\x58\x98\x85\xb3\xb0\xe6\x29\xe6\x08\x98\x83\x35\x43\x71\x16\xce\x92\xd3\xd2\x32\x52\x52\xb4\x61\x30\x08\x07\xd5\x48\x45\x10\x0b\xdb\xe0\x92\x00\x81\x20\x4f\x41\x0d\x4c\x90\x33\xf2\xac\x19\x05\x02\xd4\x42\x2d\x5f\xf3\x1f\xb5\x90\x83\x79\xaa\x0b\xc8\xf8\xa7\x80\x7f\xaa\x2e\x28\x63\x0e\xe6\xc1\x23\xb1\xa6\xa0\x20\x27\x37\x4f\x02\x7f\x88\x83\x2c\x20\xe1\x86\x00\x37\x20\x0b\x49\xf4\x87\x38\x39\x3d\xaf\x20\xa3\x40\x70\x87\x1c\x76\xb9\xe8\x62\x86\x78\xd6\x55\xd1\x78\x42\x10\x3b\x98\x55\x48\x71\x96\x68\xb3\xaa\x9a\x59\xa2\x13\xfc\xdf\x71\x9b\xb5\xcb\xca\xcf\x58\xb2\x64\x86\x64\xa6\x67\x2c\xb9\xfa\xa9\xac\x68\x68\xe8\x16\xcd\xf4\xa7\x57\x97\xcc\x90\x55\x0d\xad\x6a\x6c\xd6\x59\xa2\xc3\x0d\xf3\x8e\xf2\x47\xe2\x3b\x16\xac\xd0\xc6\x1a\xc5\x32\x16\xad\x34\x76\xba\x0d\x66\x41\x63\xd3\x7c\x27\xea\xec\x86\x5f\x59\x9d\x9d\xe8\xb9\x0f\x13\x2e\xde\x16\x4b\x44\x9d\xfd\x37\x28\xf5\xb0\xea\xc8\xa7\xc8\x02\xcb\x55\xe9\xc8\x67\x76\x77\x3e\xe9\xa3\xc0\x4b\xfa\xb6\xd4\xdc\xcc\x2c\x63\x52\xca\xba\x24\xff\x78\xff\x1d\x23\x57\x8d\x9b\x36\x6b\xe2\x94\x61\xfe\x48\x84\x4d\x8c\x19\x9f\xf1\xb6\x85\xb1\xac\xd8\x64\xda\x24\x84\xc5\x25\x86\x65\xca\x31\xe8\x16\x83\xae\xce\xab\x5b\xac\xf3\xca\xec\xca\xd8\x17\xbe\x5f\x80\x1c\xaa\x79\x7f\x5d\x73\xbe\x9c\x55\x76\x09\x9e\xe6\x54\x90\xcd\x79\xfb\xeb\x9a\x85\x93\x14\x34\xc3\x2e\xa0\xe0\xc1\x0d\xb9\xf4\x76\xf6\x27\x89\xd7\x18\x33\x8d\x7e\x70\x98\x87\x57\x26\x83\x1b\x0e\xb8\x24\xd5\xcf\x1e\x5a\xb1\x5e\x50\x7f\xa6\x36\x6f\x0f\x0e\x48\x93\x31\x5e\x67\x9f\x4a\x06\x67\x54\xef\x6e\x14\xe0\x0c\x55\x90\x9d\x9d\x6f\x91\xf7\x3e\xbb\x04\x7f\x96\xde\x61\x3a\x8a\xdb\x0e\xde\x10\xae\x5d\x33\x59\xae\xc9\x8f\x2c\x0f\x8b\xbf\x3c\x00\xaf\x5c\x7e\x02\xc4\x05\x18\xc1\x70\x8b\x1b\xee\x54\xdc\xbd\xaf\x75\x7f\xce\xb6\x38\xfe\x90\x2b\x0b\x6c\xcf\x79\xf5\x05\x6a\x77\x5c\x50\xe4\x5e\x19\x26\x63\x10\xb0\x98\xff\x05\x36\x31\xca\x52\x6a\x2e\x1c\x44\x77\xb0\xe2\xdb\x90\xc2\xec\x4d\x8a\x2a\x8c\x12\x94\xcb\x68\xe3\xc7\xc1\x26\x74\x83\x40\xec\x0f\x51\x99\x38\x2a\x1e\x87\xed\xc6\xc1\xc0\xe2\x92\x87\xb8\xe2\x22\x06\x9c\x03\xee\x38\xbc\x74\x08\x04\xe6\xa9\x6d\x25\xaf\xce\xa2\xa0\x41\x9d\x0e\x26\x35\xfb\x90\xda\xc4\x28\xef\x52\xab\x95\xb3\x18\xaa\xe4\xe2\x05\xe5\x35\xc6\x36\x47\xed\xe4\xa1\x7d\x33\x1c\x9d\x02\x35\x52\x43\xea\xee\x8a\x5d\x02\x22\x15\x19\x1f\x15\x99\x2b\x5f\xc4\x85\x2d\xb8\xa2\x1c\xd7\xc1\x3b\xf8\x04\xdc\x55\xb7\x93\x2a\xc5\x7c\x08\xe9\x47\xe0\x14\x34\x69\x9d\x2f\xc0\x02\xaf\xa3\xff\x0d\x1a\x57\x1d\x7d\x52\x39\xc1\x9b\x53\x0f\x06\xc2\x48\x29\xe9\x52\x4a\x58\x7c\x80\xc5\xe2\xfd\x2e\x0e\x48\xd8\x62\xd6\x1e\xba\x67\xae\x17\x74\xf6\x35\x37\xf8\x59\xb0\x04\x47\x3c\xc3\xf9\xed\x59\x25\x5e\x50\x45\xb5\x34\x25\x6e\x2c\x90\xaf\xe2\x19\x12\x66\xc1\xbf\x78\x98\x4e\x61\x69\x17\x4f\xe2\xdb\x14\x0a\x4a\xfe\xe3\xcd\x0f\xdf\x38\xfc\xaa\x77\xf9\x18\x18\xab\xcc\x25\x41\xee\xf2\xe4\x7f\xb7\x79\x92\x30\x91\x1a\xd8\xe5\x49\xe2\x44\xca\x66\xb5\x51\x7c\x38\xca\xf1\x05\x41\xa5\x9b\x8a\xde\x31\x79\xcf\x0d\xda\x15\x12\x74\x38\xf2\x6a\xb0\xfc\xf3\xda\x53\xfa\x69\x5a\x23\x7a\x23\xe9\x8b\xd3\x2c\x8c\xdf\xf4\xbd\xfb\x36\xcb\x35\x30\xa8\xda\x40\x86\x5e\x6c\x49\xf9\x58\x68\xbf\x50\x71\x62\x7f\x64\xd5\xdc\x26\x79\x7e\xd3\xf8\xf3\x96\x1f\x18\xe8\x67\x01\xfa\x6b\x18\x2f\x74\x5c\x48\x48\x3c\x24\x2b\x93\xf7\xf2\xa0\x75\x28\x7a\x95\x8a\xff\x2c\xbd\xda\xac\x0d\xc3\xc9\xe6\x68\xc1\x9c\x1a\xbb\x6b\x92\x84\xd3\x28\x30\x29\x0f\xc9\xe3\xe5\x8d\xc5\xc7\x04\xd0\x50\x50\x06\x9d\x9b\x59\xa5\x11\x35\x20\x64\x94\x96\x1c\x0a\x7c\x30\xfe\x51\xe0\xc1\x06\x78\x01\xd6\x14\xda\xce\x38\xef\x1c\xdf\x07\xfa\xc3\x03\x1f\x36\xd6\x37\x7e\xb9\xbf\xf9\xfb\xa3\xd1\x35\xd1\xed\x8d\xb7\x9a\x3e\x6d\x6c\x6c\xbc\x61\x3c\xfa\xc9\x81\xa6\x2f\xf7\x1f\x3d\x70\xa3\xf1\x8b\x03\x27\x13\x8b\xb2\xcb\x2a\xe1\x3e\x97\xfa\x78\xc4\x3b\xf6\xdf\x75\x6e\x07\x79\xac\xc0\x60\xa3\x3a\x0a\xaa\x30\x98\xd1\x8f\x1f\x16\x34\x44\xe0\x7a\xbd\x47\x10\xd8\x8c\xd1\x10\x0d\xcd\x70\x08\x9c\xa1\xec\x64\x79\xf6\x24\x48\xff\x40\x3e\x14\xc6\x43\x11\xfa\x5b\x54\x09\x8b\x71\x1d\x16\xc3\x3a\x8b\x22\x41\x11\xf8\x33\x87\x6a\xf9\x4b\x0f\x9e\x34\x3e\x13\xa0\x19\xa2\x31\x1a\x0f\xc9\x5c\x32\xd3\x23\x0c\xa3\xb1\x79\xe8\xd0\xc6\x4b\xe3\x25\xa8\x86\xa0\x0c\xe5\x35\xdc\x07\xc1\x8c\x2d\xa6\x6b\x0b\x1f\x9b\x59\x9e\x4a\x73\xbd\xdc\x08\x22\xbb\x3c\x93\xae\x8e\xe5\xcb\xe8\xf4\x44\x32\x83\x4a\x2b\x21\xe3\x33\x2b\x73\xe9\xbc\xc4\xbc\x12\x32\x37\x8a\x4a\x52\xe7\xf3\xce\x67\x3a\x4c\x66\xb3\x49\xc8\xcc\xcc\xa6\x9c\x1b\xc8\x39\x2e\xda\x64\xb7\x8c\x5c\xd2\x94\x9e\x59\x92\x47\x71\xc9\xbd\xfc\x88\x2c\x8b\xc9\x22\x58\x4c\xe6\xbf\x3e\xa6\xde\x83\x4d\x66\x93\x51\xc8\x49\x27\xb9\x01\xbd\x0c\x84\x0e\xff\xf1\x4f\x3e\xac\x2c\xba\x5e\xe2\xdc\x08\x3f\xa2\x76\xef\xbe\xba\xda\xb8\x8a\x30\xd9\xc9\xbb\x3b\x3e\x3a\x4c\xe6\xfa\x12\x7e\x84\x12\x74\x92\xe7\x3c\x88\x2a\x22\x2a\x29\x31\x3a\x53\xe6\xdc\x08\x1f\xe2\x53\xaa\x2a\x33\xb1\x28\x5a\xe0\xfa\x12\x3e\x04\x28\xfe\x0e\x31\x75\x75\x3d\x02\x42\x43\xe3\xa3\xc3\x24\x27\x2b\xd4\x79\x86\xed\x8d\xae\x93\x9c\x12\x6b\xcb\xf7\xd5\xd5\xc6\x3a\xe4\xfb\x10\x43\x89\xd0\xb8\x68\x27\xd4\x97\x80\x31\x6f\xf3\x59\x8e\x41\x51\xce\xb2\x58\x2c\x16\xd9\xe2\x80\x2d\x8c\x39\xcb\x01\x98\xb3\x4c\x16\x4b\xef\xc1\xa6\x2c\xb3\xc5\xe4\xf8\x98\x8d\x16\xc6\x19\x98\x4c\x66\x63\xef\x41\x26\x93\x23\x5f\x8c\xc9\x64\x32\x19\xb5\x0e\xd8\x6c\x74\xe4\xd4\xd8\x7b\xb0\x93\x5a\x32\x59\x1c\x45\x60\x72\x88\x17\x74\xf6\x0b\x39\xfc\x6d\xba\x66\x4f\x49\x94\xc4\x19\x08\x1f\x22\x3a\x21\x29\x4c\xf6\x0b\xee\x41\x45\x25\x26\x85\x49\x7e\x41\x20\xd0\x4e\xf3\x1a\xe3\xa8\xb2\xa2\xd2\xdc\x52\xa1\xaa\x2c\x39\xde\x2a\x57\x14\xef\xcb\x2d\x17\x0e\x99\xaa\x22\x77\x6a\x39\x03\xe1\x46\x8c\xa5\x41\xe7\x59\x4e\x27\xee\x49\x48\x8d\x16\x02\x82\x1b\xdb\x64\xce\x40\x30\x44\xdb\x81\xc6\x23\x15\xa5\x29\x49\x85\xd2\x5e\x9a\x73\x23\xdc\x88\x03\xb3\x29\x27\xfd\x2c\x1a\x86\xb5\xf1\xbb\xc3\x63\x36\x47\x44\xe5\x15\xc5\x49\x25\x35\x64\x6a\x61\x59\x6a\xa5\xc0\x25\x13\x24\x51\x59\x94\x57\x94\x9f\x9a\x13\x9b\x2d\x73\x0c\xe1\x42\x24\x66\x91\x81\x39\x71\x25\xd5\x0e\x55\x24\xd1\x50\x5d\xde\x5c\x5d\x91\x9e\x5c\x2a\x25\x85\x91\xb9\xc9\x71\x79\x31\x42\x5c\x72\x5a\x72\x72\x61\x66\x89\x51\x76\xb2\x97\x1a\xc9\x03\x19\xfb\x92\xc2\xb4\xe0\xb9\x9d\xe7\x92\x0d\xae\x7b\xd2\x92\xe3\x33\x92\x84\x6d\x49\x15\x4d\xf2\x07\xbb\x1a\xf6\xb7\x35\x6e\x3c\x13\xb2\x7a\x21\xcd\x25\x13\x84\x5f\x62\x4e\x72\x99\xe4\x80\x7c\x0a\xac\x59\xb9\x56\xb9\x20\x94\x74\xe2\x1f\x81\x17\x7f\xa4\x3e\x78\x83\x9c\x61\xce\xc8\xd0\xbe\x4c\x85\xe5\x96\x27\x57\x08\x5c\x2f\x82\xf0\x29\x29\xcb\xb3\x16\xc9\xa5\x11\x64\x42\x5c\x74\x7a\x94\xe0\x64\xde\x14\xbc\xff\x84\xec\x48\xed\x7b\x7c\xff\x81\xa3\x12\xbc\xee\xe9\x40\x33\x79\x05\xa6\xcc\x7c\x39\x79\x17\xc9\x19\x08\xa2\x57\x76\x5a\x9a\x25\x4d\x88\x4a\x4e\x8c\x90\xa7\x04\x81\xd0\x48\x3b\xb0\x4c\x9c\x33\xe8\x55\x9c\x5f\x54\x50\x2e\x34\x4e\xe7\xdb\xf6\x37\x9e\x94\x38\x3f\x97\x5e\xbd\x2a\x4b\xd3\x0d\xa5\x72\x42\x18\x59\x60\x30\xe4\x24\x0a\x9c\xc1\x8d\x20\xc2\x62\x63\x77\xef\x2e\x8f\xad\x95\x4b\x4c\x45\xb9\x45\x05\x0c\xc7\xb8\x11\x44\x69\x18\xe9\x4c\x4c\x4a\x48\xc8\x88\x12\xb8\x54\xa2\xaf\xc1\x7f\x57\x63\x9b\x0c\xc6\x59\x3c\xc7\x10\x84\xa1\x9c\x4e\x4c\x76\xd6\x4d\x50\x63\x5b\x5b\x63\x4f\xad\x58\xe5\xbd\x4e\xcd\x86\xc6\xd9\xd4\x2c\xda\xc9\xf4\x1b\xc8\xbc\x03\xd5\x37\xcf\x6a\xca\xcc\x73\xd8\xdd\x63\x72\xf4\x9e\xc4\x08\x47\x65\x10\x7d\xa7\x04\x83\x70\xa0\xc7\xe2\xbe\x3d\x16\x83\x0f\xca\x7c\x8f\xfc\x28\x61\x4b\x8f\xfc\xd6\x4a\xa7\xfc\x9b\x34\x67\xe8\x4b\x10\x07\xd0\x9d\x9a\x45\x9f\xad\xe4\xb3\xb2\x4c\x59\x82\xf3\x31\x2e\x13\xc3\x19\x86\x12\x8c\xc5\x64\x31\x5a\x4c\x8c\xc5\x68\x36\x3a\x9b\xaa\xd1\xd1\x54\x4d\x26\xa3\xc9\xc4\x70\x2e\x04\xe1\xe6\x04\x4d\x8c\xd1\x64\x34\x3b\x7f\xbd\x07\x19\x9d\x0d\xdf\x99\xda\xcb\x68\x31\x65\x59\x9c\xc7\x83\x39\x7a\x86\x39\x2b\xab\xf7\x60\x8b\x25\x2b\xcb\x22\x39\x79\x2d\xce\xc7\xbc\x98\xac\x2c\x8b\x45\x00\x55\xe7\xf6\x5d\x8f\xbf\xec\x50\xbe\xf9\xe8\x3c\xc4\x62\xc4\x77\xa3\x21\xfc\xe5\x5f\xa6\x7e\xe6\x61\xfe\xe3\x06\x0c\xf8\xb8\xf1\xc6\x71\xd8\x5e\x05\x85\x15\xb6\x97\x0f\xc0\xfc\x13\x37\xac\xc9\x0f\x60\x44\x07\xf7\xd9\xbf\xfd\xe0\x23\x9b\x99\xe7\x98\x8b\xc4\xc1\xc4\xa6\xf0\x4a\xa9\x32\x72\x77\xfe\x06\x21\x16\x43\xca\xa9\xe3\x0d\x05\xfb\x2a\x65\x07\x4d\x4d\x55\x49\xd3\x41\xad\x8e\xfa\xf5\x06\xcf\x31\xae\xc4\xc1\x88\xf2\x8d\x52\xd4\xcb\x15\xd4\xf1\xea\x7d\xcd\x32\xe7\x36\xde\x4f\x67\x5b\x36\x97\x5f\x15\xb1\x26\x60\xa7\xc4\xf9\x78\x11\x21\x3b\xb7\x18\x56\x0a\x8e\x84\x57\xe0\xd1\xcf\xd4\x1f\x9d\x33\x87\xc9\x8d\x38\x91\x87\x47\x37\xf0\x11\x0d\x05\xbf\xf2\x73\xd7\xac\x9b\xb5\x6a\x6b\xe5\xc9\x20\xe9\xf8\x31\x92\xf3\xa0\x88\xe0\xb2\xba\xf8\x26\x81\x73\x23\x0c\x07\xaa\x2a\x1b\x4a\xd3\x8a\x13\x0b\xe4\xd4\xdc\xc4\xdc\x50\x2b\xb3\xb0\x3a\xb2\xf6\xb4\xf6\xbd\x53\x6d\xef\xb7\x34\x27\x85\xee\x97\xb6\xfb\x93\x1c\x43\x18\x2a\x62\xe3\x0a\xa2\x84\x5d\x51\x71\x91\x31\x45\x7b\x8e\x26\xc8\x9f\x85\x54\x87\x2d\xd7\x42\xd3\x68\x3e\x21\x38\x2c\x7d\x97\x30\xf4\xad\x3b\x4f\x7e\xb9\xf7\xf9\x93\xfd\xb5\x69\x09\xfb\xe5\xb7\xe8\x86\x90\xf0\xa2\x40\x61\xe1\xea\x15\xf3\x66\x9f\x5e\xfd\xd1\x81\x9a\xa2\xfa\x7a\xf9\x2d\x5a\xe7\xf6\x89\xfa\xab\x73\x76\x65\xfb\x8a\xb2\x0f\x80\x29\xca\x35\xe8\x04\xdf\x67\x8c\x5a\x4b\x77\xfd\x60\x33\xf2\x43\x26\x4e\x1c\xe2\xf0\x99\x86\x21\x13\xbf\x7c\xf6\xec\x4b\xc7\x6f\xe2\x10\x19\x5e\xc1\xa9\xfc\x36\x0a\x07\xc0\xcf\x24\xe7\xc6\x10\x37\xa9\x6f\x31\xfc\x3b\x08\x27\x6f\x52\x07\xf0\x11\x0f\x8f\x60\xfe\x52\x7c\x71\x2a\xd0\xcb\x90\x1e\x0d\x2f\x2e\xa3\x61\x93\xe7\x68\xf0\x26\x93\xd1\x7b\x2e\x3c\xa2\x1c\xf2\x7e\xa1\x6e\x9f\xd8\x3a\x7f\x45\xc8\x8e\x55\x7b\x64\xce\xcf\x8d\x78\x8e\x3e\x24\xbc\x68\x9b\xcc\x7f\xb6\xf8\xda\x34\x49\xa7\x30\xd4\xb4\xc5\x8b\xa6\xca\x3a\xec\x4d\x4f\x7d\x7f\x51\xa7\xa4\xa3\x15\xaa\xf3\xfd\x6b\x9f\xc9\xee\x4a\x23\xd4\xb6\x6c\xbd\x7a\xe8\xd2\x9a\x4b\x6b\x2f\xbd\x7b\xe9\x0c\xac\xc6\x55\x97\xdf\xfb\xe6\x75\x18\x96\x7a\x79\x19\x30\xc8\x40\x0d\x6e\x81\x2d\xe8\x77\xd9\xff\xd2\x91\x7f\x2e\xbd\xe2\x61\xbe\x39\xfd\x2e\x4c\xae\x7e\xef\xc6\xe9\x8a\x8e\x8e\xf8\xca\xf6\x8f\xce\xdc\x80\x05\x37\x96\x77\x9c\x06\xd7\x41\x95\x47\x3f\x59\x72\x6b\xd6\x8d\xca\x1b\xeb\x3e\x3a\x58\x19\xf5\x91\x3f\x4c\xc3\x7e\x37\x67\xdd\x78\x49\x47\xbd\x7a\x03\xc4\x9a\x9a\x8f\x17\xc1\x7a\x9c\x73\xe3\xe3\xba\xa8\x7f\x16\x7c\xb4\xf4\x9f\xed\x7f\xea\x2f\x71\x33\xa6\xcb\x3b\x56\x7c\x5f\x05\x2f\xda\x7e\xe6\x4f\x02\x71\x0a\x09\x52\x39\xa0\xd6\xf0\xf8\xfa\x7b\x30\xe0\x12\xc5\x19\x0c\xbd\xdc\x18\xa6\x2f\x0e\x38\x0b\xe3\xa8\x4f\x27\x91\x1c\x91\xea\x45\xf4\x1a\x50\xf5\x95\x89\x7f\xfa\x27\x89\x41\x34\x2c\x81\xd1\x3c\x47\xf8\x11\x04\xe1\x47\x84\xc6\x18\xc2\x25\x8e\xc8\xec\x95\x4c\x10\xc4\xf8\x4f\xbe\xa2\xaa\xf7\x25\x87\xc9\x70\x3c\x87\x0f\x89\x4c\x8f\x90\x26\x52\x1c\xe1\xd7\x97\x20\x08\xe2\x83\xfb\x74\x65\x75\x46\xa8\x8c\x4d\xca\x16\x7e\xb7\x33\xed\xda\x7d\x8a\x23\x72\x37\xfb\x11\x44\x5f\x67\x92\xe2\x3f\x93\xe7\x08\x37\xc6\x41\x7e\x0a\x88\x93\x48\x90\xdd\x4d\x30\x8a\xe7\x88\xbe\xd3\x1d\xda\x90\xa0\xde\xc2\xf9\x63\x61\x3e\xd9\x1f\x0b\x29\x8e\xf0\x71\xda\x80\xbd\xa0\x90\x1c\x41\x71\x84\x1b\x41\x10\x6e\x06\x64\xb0\x96\xfc\x94\xaa\xbb\x46\x82\x40\xd5\x2d\x22\xc1\x0b\xb6\x51\x3f\xe1\x36\xf2\x0a\xf5\x13\x6c\x23\x71\xdb\x47\xb4\x72\x11\x8f\xf0\xff\x5c\x5d\xb5\x50\xe2\x88\xbe\x7e\x0e\x3e\xdc\x44\x39\xc1\x5e\x04\x31\x61\xcc\x9b\xdf\x92\x58\x82\xb5\xd4\xdf\x89\x60\xa5\x1e\x7c\xf7\xc5\x68\xb2\x47\x83\x0f\x01\x1e\xdf\x53\x9f\xc1\x8b\x31\xe0\x22\xe3\x49\xf8\x89\xc7\x57\x1c\xa4\x06\x87\xf2\xf7\x60\xe8\x25\x1c\x7a\x16\x5e\xa1\xff\xce\xc7\x15\x0c\xc2\x5a\x08\xa2\x75\xe4\x24\xd5\xcc\x27\x04\x6f\xcf\xdc\x29\xe0\xa4\x5a\x2a\x26\x7c\x6b\x5a\xb0\xa0\xd6\x7f\x4d\x15\x19\x2d\x7b\xa4\x94\xa1\x38\xed\x5f\x54\x52\x70\xa0\x29\x48\x88\xa4\xb8\x0d\x7d\x5d\x5c\x08\x82\x18\x83\x5b\xe9\x77\xdf\x27\x39\x37\x82\x70\x94\xa1\x7e\x31\xc9\xf9\xf4\x80\xf8\x58\x71\x87\x7f\x51\xe7\x96\xbc\x77\x95\x84\xc4\xff\x30\x34\x9c\x30\x46\x55\xc9\xd5\x10\x40\xef\x3f\x9c\x1e\x5b\x2b\x57\xc3\x27\x34\x97\x47\x10\x44\x7f\x82\x88\xa0\xb9\xc5\x0e\x8b\x0c\xc4\xbe\x8a\xe6\x9c\x3a\xe1\x6f\x3c\xcc\x88\xa0\xca\x6b\x1a\x73\xf7\x0b\x5c\xbf\x1e\xe1\xd0\xdb\x36\x91\xea\x5c\xfc\xc1\xdf\x0d\x79\xe1\x34\x59\x15\xe8\xbb\x30\x8b\x84\xc9\x54\xb5\x3f\xc9\xf5\xef\xef\x37\x9a\x20\x88\x93\x34\x47\xf4\xf2\x63\x0c\x04\x01\xab\xa8\x13\xc3\x4f\xfc\x42\xda\x18\xaa\xbe\x21\x23\xa6\x52\xae\xa6\x39\x82\x21\x9c\x49\x7e\x11\x14\x47\xf4\x22\x18\x3f\x82\xd8\x77\xe8\x68\x4e\xab\x00\x59\x54\x8d\x3f\xe9\x48\x77\xd4\xdf\x49\x58\xf0\x1f\xda\x3a\x7f\xf2\x24\xcc\x56\xdd\x69\x6e\x86\xc3\xd2\x25\x04\xce\xa5\xb6\x5f\x25\x97\x60\x14\x1d\xfa\x01\xb9\x8c\x0a\x5d\x48\xce\x1a\x63\x68\x9e\xeb\x1c\xcd\x08\xa2\x1f\x11\x8e\x07\x69\x6e\xaa\xc1\x09\x3f\xa2\xf3\x4d\xf9\xc9\xd2\x1e\x13\x39\x54\x3d\xd2\x4e\x73\x8e\xb6\x41\x30\x44\xd4\x1a\x12\x49\xea\x6f\x81\xd1\xa7\xc9\xb5\x18\xec\x90\xa6\x77\x48\x43\xd7\xae\x89\xd4\xb4\xf7\x17\xfe\xdd\x41\x3f\xe8\x94\xbb\x4c\xca\x26\xbe\x43\x6f\x5d\x21\xe1\xab\x58\x7b\xc3\xc1\xe9\x28\x59\xe2\xe9\x27\x34\xd7\xaf\xaf\xb3\xc4\x4e\x94\xa5\xac\x95\xd7\xdd\x78\x8f\x3e\x9c\x5a\xbb\xb5\x44\x6a\x2c\xde\xdb\xd8\xa8\xc5\x46\x65\x2b\xdf\xa1\x2f\x78\x57\xc2\x91\x16\x12\x6b\x3b\x9e\x7c\x4a\xdf\x8a\xdf\xb4\xc4\x22\xdf\xa0\xfe\x6e\x39\x17\xe9\x96\xb4\x9a\x2d\x25\x12\xc7\x3a\xbb\xc4\xe2\x03\xc5\xe5\x8d\x4d\x5a\xa5\x5e\xfd\x83\xc7\x11\x16\xf2\xef\xd6\x33\xe2\x32\x06\x62\x2d\x04\xd2\xea\x5b\xb6\x48\x7e\x0e\xd6\x7e\x44\xd9\xe6\xa8\xfd\x78\xf0\xc4\x49\x6f\xbc\xaf\xad\xae\xc8\x2e\x97\xe0\xc5\x2b\xe8\x49\xad\xdc\xb0\x5b\x2f\x23\x0f\x6f\x7e\xb1\x44\x1b\x19\x93\x11\x27\xa1\xc7\x12\xf0\xa0\xae\x9e\xac\xee\x90\x21\xe5\x1c\xdf\x53\x4e\xc4\xfa\x8d\xef\x21\xb9\xea\x8c\xb6\x7a\x5f\xf6\x3e\x09\xd8\x2b\xc8\x53\x2b\xd7\xff\xc5\x79\x6f\xa9\x36\x2a\x36\x3d\x4e\xc2\x7e\x4b\xa0\x1f\x75\xb0\x35\x7f\x7f\x85\x8c\x13\x6c\x4b\xf9\x39\xb8\x98\x42\x0a\x16\x93\x43\xd1\x4a\xa1\x0b\x58\xc9\xe1\xd4\x28\xdc\x4e\x06\x53\xef\x1a\x0e\x9e\xfe\xf1\x7a\xfc\x3f\x4d\xf2\xfb\xf3\xe9\x51\x1b\xd7\xbc\xe6\x7b\x6c\xed\xb7\xf2\x6d\x67\x9f\xd3\x52\xf5\xce\x3e\xe7\x4f\x81\x3b\xfa\x93\x9c\x9f\x63\x34\x26\x16\xff\x40\xb9\x2b\x8d\x4a\x1b\x0c\x2d\x83\x17\x3c\xcc\xa0\x51\x02\xe0\x15\x7b\x20\xbc\x02\x67\x40\xc3\xc5\xdb\x12\x6c\xac\xd2\x5b\x6c\x88\x6c\x3d\x7b\xb4\xf5\xac\x64\xab\x87\x61\x3c\x97\x7b\x22\x20\x6b\xbb\x14\x43\xa5\xa6\x67\xa4\x9a\xe4\x58\x9f\x83\x16\xf2\x42\x4b\xf1\x35\x19\x7e\xc7\x61\x4a\x6f\x71\x7f\x64\xeb\x19\x07\xb1\xce\x7e\x00\xa6\xc0\x39\x11\x7b\x91\x06\xd3\x9e\x14\x83\x30\x85\x82\xcb\x62\xa1\x00\xbe\x60\x61\x67\x52\xc9\x19\xf9\xd6\xbc\x2c\x6b\x56\x9e\xbc\x2b\x74\x5d\xdc\x56\x61\xf2\xaa\xf3\x77\x7f\xbe\xfd\xe8\xc9\x91\xe6\xb4\xed\x35\x32\x5c\x65\x95\xe1\x59\x7c\xa6\xd9\x68\x34\x4a\x58\xa0\xba\x91\x69\x19\xa9\x19\xa9\xc2\x5b\x54\x6a\x5a\x5e\x7e\xf1\xcd\x1f\x8b\xca\xe4\xd4\xaa\xc9\x10\x99\xab\xcd\xcf\xcb\xcf\x97\x6e\x53\x85\xd6\xd4\xe4\x6c\xf9\x24\x0e\xff\x03\x5e\x23\xf3\x72\xf2\x73\xf2\x85\xcf\xa9\xfc\xbc\xd4\x54\x59\xe9\x7b\xd6\x61\x06\x43\xa6\x1a\xd3\xd2\x52\x84\x09\x14\x37\x1b\x2e\x8b\x45\x02\xbc\x0e\x16\x96\xcb\xfc\xcb\x94\x6c\xab\x25\x4f\xde\x15\xb6\x2e\x6e\x8b\xd3\x14\x99\x5b\xec\xb0\xe6\x68\x73\xda\xf6\x6a\x09\xae\xb2\x30\x03\x86\xf2\x73\xd5\x91\xce\xbc\xec\x11\xe6\x50\x29\x69\xf9\xf9\xb2\x25\xeb\x86\xe2\x4b\xe6\x59\xf2\x72\xf3\x84\xcf\xa8\xfc\xbc\xb4\x14\x59\x67\x63\x50\xe0\xdf\xb3\x6e\xcf\x5b\x27\x44\x53\x69\x69\x3d\x65\x74\xc8\x42\x9e\x6c\xce\x3b\x5f\x20\xeb\xe8\x68\xa5\xc4\x31\xab\x50\x92\x1e\x8d\x85\x8a\x31\x4f\x7e\x3c\x0d\xaf\xc3\x63\x0f\x33\x68\xe1\xe7\x4f\x21\xf1\x2c\x14\xb5\xc2\xf0\xf7\x61\x38\x50\x30\xac\x09\x86\x42\x2f\xe8\x0f\x1a\xee\xc2\x73\x1d\x35\xd9\xd6\x87\xff\x22\xfa\x78\x40\x4a\x78\x66\xc8\x6e\x89\x5b\x4a\x60\x38\x9d\x56\x5c\x9a\x59\x26\x54\x55\x94\x54\x17\xcb\xa5\x75\xf9\x87\x4f\x6b\x95\xb9\x2d\xfc\x47\xc6\x98\x83\xdb\x85\xed\x31\x81\xb3\x33\x64\xe8\x45\xe9\x6c\x3f\xa1\xc0\xaf\x88\xdd\xbc\x3d\x44\x0a\x0b\xf4\x4f\x7c\x47\x98\x35\xb7\xaa\x72\x9b\xbc\x0f\x48\x32\xac\xed\xc3\xe8\x23\x42\x53\x79\x51\x65\x55\x4c\xc9\xbb\x15\xf2\x84\x03\x2b\x5b\xee\x6b\x4f\xed\x3d\x72\xb0\x5e\xaa\x6b\x3c\x5e\x72\x5e\xb8\x75\x21\x2a\xa9\x4e\x8e\x41\x37\x72\xef\xce\xb5\xe5\x6b\x85\xb0\x84\xe4\xd8\xa8\xda\xc4\x93\x71\xb2\x99\x7e\x10\x74\x7e\xdb\x38\x2d\x9c\x81\x9d\xfc\x5b\xb8\x92\xda\x5e\x12\x77\xa0\xb4\x2a\x37\xcb\x2a\x21\x4b\x67\xc4\x86\xa7\x6e\x16\x56\x6e\x2d\xac\x0c\x95\x83\x6b\xe3\x8f\x5e\xd1\xc2\xae\x05\x74\xf9\x6f\xa7\x0b\xf6\x01\x05\x7c\x15\x89\xc2\x63\x1a\xce\xa1\x8e\xcf\xda\x93\x62\x4e\x11\xb6\x86\xa4\x84\x47\xcb\xf8\x3e\x0e\x57\x76\xc2\x4b\x74\xe1\x32\xf2\x58\x49\x73\xf5\x71\xc1\x6a\x35\x19\x0b\x65\x94\xe9\x56\xfc\x86\x57\x76\xc2\x70\x75\x27\xad\x04\x42\x16\x3f\x3a\x6a\xd6\x46\x7f\x69\xed\x06\xfd\x9e\x2d\x42\x64\x58\x4e\x7e\xb8\x8c\x23\x68\x1c\x1e\x4a\xda\xbc\x69\xee\xc2\x73\xf0\xa2\x0a\xd6\x90\x47\x5a\x8e\xec\x3b\x21\xb4\xb7\xc6\x6e\x6b\x90\x1b\x03\xca\x16\xbe\xa9\x55\xb7\xc1\xaf\xbc\xff\xb6\xad\xfe\x12\xe7\xa7\xf1\xdf\xd6\x72\xf2\xe4\xe1\xc3\x27\x4f\x1e\xde\xe6\x2f\xdb\x3d\xd1\xc6\x1b\x4c\xdb\x4d\xa9\x12\x5a\xa8\xec\x40\x6b\xc4\xde\x44\x86\xbb\xf0\x3c\xb1\xb4\x32\xed\x80\x70\xe6\x44\x51\x65\xab\xbc\x77\x10\x19\xba\x65\x71\xfc\x3c\x61\xc6\x3b\xfb\x5a\xb7\xc8\x5c\x15\xb3\xe1\x58\x64\xc7\x57\x5a\x78\xe5\xde\x4f\xa0\xb9\x7e\x36\x62\xc3\x21\xe9\xe0\x86\xbd\x8b\xfd\xb4\xa0\xb1\xc9\x9b\x59\x68\x44\xeb\x17\xb0\x22\xb2\x3a\xd2\xc3\x66\xfd\xe2\x0b\xd0\x73\xad\x3a\xca\xd3\xe6\xc7\x73\x9f\x74\x35\x75\x4d\x25\xb1\xbf\x05\x1c\xbd\xb9\xbf\xc0\xb5\xce\x13\x65\x45\x1f\x23\x2a\x2f\x88\x8c\xda\xd4\xf5\x2b\xff\x84\x05\x5a\xb4\x27\xea\x28\x3f\x7e\xdc\x63\x43\x69\xa4\x25\xd1\xe0\xad\x8e\xc5\x7f\x93\xdc\xa9\x7c\x96\xe4\x5a\x4b\x8a\x2d\x95\x86\x52\xc6\xbd\x47\xc7\x74\xd0\xa0\x1b\xb8\xa5\xb3\x60\xf5\x80\x33\x2c\x68\x9c\xda\x1e\xd8\xeb\xd0\x97\x87\xd5\xec\xf0\x49\xf7\x7e\xb1\xe6\xe7\x5b\x25\xee\xbc\x35\x3f\x35\x79\xd2\x8d\xb9\xf7\x1c\xa1\xcc\x3d\x50\x9b\x95\x5d\xfc\x0f\xf0\xf6\x29\xd8\x01\x56\x2d\xf0\xe0\x0e\xcb\xa0\x0c\x96\x02\x33\x64\xc0\x39\x49\x09\xe9\x9e\xc5\x2b\x2f\x88\xe8\x3a\xdc\xab\x0d\xe7\xde\xc6\x57\xc0\x15\xfb\x31\x5d\x46\x0a\x87\x21\xff\xdf\xec\xff\xcb\xfa\x47\x3a\x32\x84\xef\x31\xd6\x61\xab\x57\x3e\xdb\x63\xa6\xb7\x3b\xfe\xfb\xa8\x68\xb3\x82\x15\x52\x44\x0f\x98\x20\x82\x95\xbb\xc0\x7d\xa5\x58\xc1\x97\x9f\x28\xda\xf4\xab\x45\xee\x42\xc7\x52\xb6\x4b\x4f\x73\x5f\x81\xd5\x73\xa2\xc8\x5d\xb0\xe9\xa7\x38\xe2\xce\xd8\x5f\xb0\xda\x66\x0f\xff\x8a\xe5\xbe\x3a\x1b\xb5\xe8\xd8\x72\x01\x3b\xa9\xe5\x8b\x36\xad\x8a\x92\x67\xe0\x9b\x24\x5e\x1f\xca\x72\x17\xe6\xd1\xdc\x57\x2f\xb3\x8f\xbb\xe7\x53\xd8\xeb\xd6\xe8\x6f\x24\xee\x82\xad\x93\xfa\xe6\xd6\x4f\xd0\x4b\xb6\xcf\x86\x08\x36\x48\x04\x5f\x18\x60\x9b\x00\xfd\xc1\x17\x7c\x44\x98\x0e\xe3\x94\x72\x18\x8e\x22\x0c\x87\x22\xd0\x70\xdd\x06\x9d\x5b\xa2\xb2\x91\xb7\xa6\xe4\xa7\x48\xf8\x22\x95\x92\x9a\x9a\x2c\xcf\xa0\xe7\xa3\x2e\xe4\x6d\x5c\x82\x3a\x18\x02\x6b\x61\x39\x78\x82\x00\x8b\xee\x43\x9f\xe0\xf9\xd2\x0c\x3a\x39\x3f\xd5\x2a\x71\x5d\x06\x60\xbf\x67\xc1\x85\x86\xd7\xb1\xf8\xf0\x50\xac\xc5\xf5\xb8\x1e\x6b\xf1\x00\x6c\xc4\x00\x68\x80\xfe\x10\x71\x01\xfa\x4b\xaa\x87\xfd\x75\x1e\xde\x11\x65\xae\xdb\xb0\x81\x95\xfe\xeb\xae\xbf\xec\x90\xd0\x47\x0c\x12\x61\x11\x48\xd8\x1b\x78\xdb\x60\x90\x61\xb8\xc3\xc8\x97\x61\xa4\x92\x08\x2f\xc3\x13\xd0\x70\x0f\x0c\xdc\x05\x83\x7d\xbd\x2d\x8b\xc7\x8d\xe8\x83\xb1\xb8\x16\x3d\xa7\x3e\x84\x61\x12\xf7\x95\x01\x2a\x61\x26\x4c\x80\x89\xe0\x71\xfb\x0d\x1c\x24\x71\x17\x0c\xca\x07\xd8\x87\x57\xfc\xf1\x3a\x5c\x57\xfd\xa1\xcc\xe1\xc6\xa6\x5e\x07\x57\xd0\x49\xf9\x79\x39\x05\x96\x02\x8b\x35\xb3\x20\x3d\x7f\xe3\x59\x2f\x43\x69\x54\x56\x42\x12\xf3\x2a\x52\x38\x68\x05\x0e\xf9\xcf\xe6\xd6\x7f\x80\x23\x90\xb9\x07\x06\xc5\x1b\x72\x30\x47\xf5\xc6\x03\x18\xb2\x6b\x96\x51\xde\x18\x57\xf4\x5e\xa9\xa5\x2c\xa7\x42\x86\xde\x8a\xdd\x92\x6b\x2a\xc8\xcc\xf6\xce\xc9\x4c\xcf\x4f\x17\x90\xa5\x52\x53\xf7\xa4\x98\x64\xc3\x32\x63\x34\xf9\x70\xe5\xc8\x73\xf8\x82\x80\x35\xb8\x1b\x8b\xf1\x16\xc6\xc3\x3f\xd0\x1b\x76\x82\x00\xc4\x9d\xbb\xd7\xe5\xec\x1d\x45\xbb\x2a\x22\x98\x6d\x4d\x67\x63\xae\x97\xe6\x5a\x4a\x04\x58\x9a\x07\xa1\xf0\x02\x74\x68\xdd\xab\x50\x03\x7a\x17\xd8\xce\xba\xea\xa8\x1a\x1d\x59\xc3\x63\x3f\xe8\x87\xfe\x16\xec\x8b\x1e\x18\x86\x11\x5e\x03\x7f\x07\x8a\xf5\xc6\x2d\xb8\xe5\x7b\xd1\xfb\xf9\x00\xf5\x99\xfa\x8c\x0c\x0b\x4b\xdc\xb9\x5d\x8b\xfe\x34\x6a\xd0\xda\x31\xcf\xb9\x99\x29\xf8\x53\xcd\x07\x4b\x6a\x6b\x65\xe5\x99\xf2\xec\xf9\x80\x3f\x44\xd8\x02\x5b\xfe\x25\x7a\x0f\xfc\x1d\x22\x20\x0c\x3c\xa0\xaf\x09\xfc\x1d\xc2\xbd\x75\xb8\x4e\x67\xaf\xe0\x51\x0f\x7a\x4a\xe9\x54\x3a\x41\x8f\x7a\xb2\xe7\x39\x93\x6e\x57\x1d\xb5\x08\x2a\xd9\x55\x6b\x23\x76\x6e\x93\xbb\x3c\xd4\x3b\xe4\xe2\x77\x76\x4c\x7e\x53\x8b\x93\x40\xc2\x41\x30\xf9\xe1\xad\xe6\x2b\x1f\x48\xd0\x0f\x68\x28\x53\x12\xee\xc2\x50\xa6\xb6\xbd\xea\xfc\x45\xed\xcf\xe3\xfe\xf9\x9a\xd4\xdd\xbf\xbb\x82\xc7\x88\x3d\xe8\xbd\x69\x2c\x86\x32\xe1\xc9\x91\x09\xa1\xc2\x06\xe4\x7f\xab\xdb\x22\xe3\x35\x18\x82\x35\xf0\x03\x1c\x85\x55\xb0\x02\x8e\xa4\x49\xa6\x9b\xd8\xeb\xc0\x2b\x77\xde\xfd\xd5\xdb\xbd\x4a\xd1\x80\xd5\x05\x36\xb0\x9a\x90\x38\x11\x34\xbc\x42\x89\x2b\xe1\x43\x56\xa1\xc4\x15\xc2\x8a\x88\xe8\xa0\xed\xf2\xb6\x0d\x2b\xfc\x87\x09\x43\x57\x9c\x3c\xbc\x51\x6e\xdc\x16\x51\xb1\x02\x3e\x64\x55\x4d\x9c\x48\xdb\xf4\x6e\xe0\x2e\x4a\xf3\x14\x3d\x5a\x55\x3d\x5a\xff\x67\x38\x8f\x6a\x62\x65\xd4\xd3\xe7\x6b\x2a\x1a\x9b\xe5\xc3\x6d\xe7\x4f\x3e\x15\x9e\x5c\x80\xab\x62\xb3\x7c\xf8\xf8\xf9\x93\x4f\x84\xa7\xe7\xe1\xaa\x78\xf8\xef\x94\xf3\xfe\xdb\xda\xe4\xa0\xc3\xd5\xd1\xe7\x05\x1d\x12\xf6\x36\xfe\x8e\xa8\x58\x3d\xff\xba\xb8\x83\x37\xab\x6a\xe0\x03\x51\xd5\x60\xa7\xda\xa9\x74\xaa\x7a\xb5\x93\x54\x3b\x8f\x89\xb4\x7b\x15\x1c\x66\x75\xd4\x45\x57\x9b\xd5\xa6\xe5\x6d\xd9\x60\x62\x61\x3b\x2c\xff\x1a\xfa\x83\x2c\x23\x2a\xad\xbc\x72\x5c\x3d\x41\x3a\xa2\x5f\xc3\x72\xd8\xae\x9d\x07\x9a\x5b\x62\x97\xd5\x66\xa5\x1d\x52\x51\xa3\x23\xd7\x2f\x15\xd5\x59\xd4\xae\xf8\xed\x91\x55\x32\xf4\xc1\x3e\xea\x66\x75\x33\x26\x40\x82\xa3\xf2\xd5\xfb\xea\x7d\x47\x25\x29\xbe\x8a\x2f\x24\x60\xc2\x1f\xa2\xad\x8f\xad\x8f\x83\x8a\xac\x8a\x6c\x2e\xdb\xaf\x75\xaf\x32\xc3\x78\x5b\x1d\x8c\x73\x31\xc3\x78\xfb\xbb\x30\x01\xbe\x83\x71\xae\x3a\xb2\xb7\xad\x93\xff\xf8\xbd\xb3\x37\x1a\x4f\x58\x22\x6a\x25\x13\x5d\x17\x5d\x1a\x5e\xb6\x0b\xf8\xa7\x5e\x91\x07\xa2\x9a\x43\xea\x18\x0b\x35\xe3\xfa\xf2\xec\xd7\xb3\x19\x1c\x92\x8b\x32\x72\x38\x54\x6b\xb0\x18\xb2\x0c\xd2\x75\x55\x50\xe6\xc0\x58\x4c\xd6\x62\xaf\x51\xb3\x07\x22\xe5\x07\xc4\x0f\xfe\x12\x3c\xc2\xb1\x61\xca\x18\x35\x54\xc0\x36\xb4\xe0\x3e\x3c\x82\xed\x10\x89\x95\x70\x09\x86\x81\x74\x18\x5e\xf8\x55\x36\x59\xca\xab\xf6\xd6\x16\xd5\x79\x8f\x83\x57\x22\xd6\x07\x05\x04\x6e\xf3\x36\xd3\x7e\xf3\x86\x46\xbd\x22\xe0\x4e\x1c\x05\x7a\xd8\x04\xef\xc2\x34\x58\x0a\xab\x20\xec\x4b\x64\x70\xd5\xe7\x32\xa6\xfe\xf8\x4c\x95\xe0\xb6\x00\xcb\x61\x22\xf8\xc0\x6a\x58\x81\x63\xbe\xc5\x37\xdb\x65\xbf\xaa\xf9\xe5\x21\xf7\x19\x63\x7e\xca\xfe\x3c\xe7\xd1\x75\x03\x74\x24\xfb\xbb\xab\x8e\x2c\x51\xa2\x79\x1c\x88\xbd\x5f\x46\x19\xe3\xdf\x86\x56\xf0\x9b\x2d\xc1\xc0\x65\x4b\x1e\xa0\xaf\x80\x3e\xa8\x41\x2d\xca\x38\x02\x5c\xd0\x07\xc6\x40\xef\x4f\x4e\xff\x71\x59\xbe\x86\x2e\x29\x31\x86\xd8\xa4\x38\x6f\x33\x3d\xf6\xed\x21\xa1\x3e\x02\x46\xe2\x10\x58\x02\x3b\x52\x65\x0b\x0d\x1b\x52\x61\x21\x2c\x83\x4d\x02\xfc\xb2\x0f\x2f\x60\x0a\x30\xf2\x9c\x83\x17\x27\xdf\x17\x6e\x7f\x7c\xe6\x0b\x93\x9c\x4b\x9b\x3e\x1b\xdb\xb0\xa8\x1c\xdd\x0f\xcf\x3c\x1e\x01\x3a\xe6\xaf\xe7\x3c\x5c\x9e\x3e\x7a\x7e\xfd\x64\xea\x86\x76\xc9\x4c\x57\xc4\x94\x85\x96\x45\xbe\x3a\xdd\xcb\x50\x95\xbc\x37\xba\x94\xb1\x50\x7b\x63\x02\x4d\x11\xc2\x9a\x80\x6d\xab\x33\x72\xa3\x2d\xe9\x72\xe5\xa2\x53\x89\x97\xe2\x19\xe8\xbd\x1d\xa8\x79\xd8\x5f\xfb\xbb\xad\xaf\x8f\x08\x8d\x10\x21\xda\xad\x30\x53\x74\x4d\x67\x6d\x1a\xfe\x43\x11\x06\xb1\x70\x18\x62\x31\x16\x0f\x4b\x36\xab\xe7\x87\xa2\xa4\x7a\x52\xf0\x1a\xbc\xf0\x2f\x58\x08\x01\x5a\x08\x18\x0c\x0b\xf1\x35\x78\x41\x52\x3c\xa9\xbf\x09\x65\xd0\x78\x82\xc3\xa7\x1d\xc3\x3f\xa4\x2e\x2b\xf5\x5f\xcf\xca\xc3\x31\x3c\x06\x7f\xc8\xf0\x3b\x2b\xf7\xdc\x0e\xb4\x5b\x41\xe3\xa2\xa3\x0d\xa0\x71\xb5\x69\xdc\xfe\x26\x90\xe0\x77\xf6\x6f\x01\xf2\x7f\x13\x20\x87\x8b\xaa\x95\xff\x6f\x26\x41\x13\xeb\xae\x34\xf6\xbc\x8d\x35\x92\x75\xcc\xa9\x8d\x22\xcc\x14\xb9\x3b\x06\x5b\xb6\xe2\xe8\xbd\x2c\x4e\x87\xd3\x2c\x4c\x87\x54\xf1\xec\x69\x43\xd4\x71\x19\x17\x63\x0e\xb9\x61\x67\xe3\xa2\x8b\x02\x7c\x4c\xe1\x42\xd0\xf0\xe0\x0a\x43\x49\xee\x07\x43\xeb\xc6\xfa\x15\xc5\xcb\x18\x68\xf7\xc4\x09\x54\xc2\x93\x75\xdf\xcc\xfe\xe8\x29\x78\x79\x29\xe1\x94\xad\x53\xd5\xf3\xf0\xce\xdf\xc2\x24\xee\x8e\xe1\x9b\x96\x7b\x57\xae\x4a\x60\x16\xb9\xc7\x06\x18\x27\xca\xdc\x1d\x83\x23\xd7\x66\x5c\x0b\x6b\xd1\x3c\x73\x6e\xdc\xae\x25\x12\x56\x2a\x83\xc8\xf2\xa4\xa8\xa2\x48\x01\xad\xd4\x1e\x16\x42\xa9\x87\xa8\x21\xd5\x59\xa0\x51\x35\x3d\x9b\xfa\x73\x3f\x18\x50\xc4\x79\xe4\xe1\x79\xd3\x2a\x27\x0b\xdc\x1d\xc3\x6a\xf6\xa4\x08\x91\xb0\x10\xde\x84\xa0\x26\x19\x56\x52\x95\x15\xd6\xf2\x62\x19\xfe\x50\xb6\xdf\x18\x46\xbe\x36\x61\x09\xbe\x88\x5e\x5a\xee\x07\xc3\x49\x11\xcc\xb0\x16\x8a\x59\xc9\xdd\x0c\x7a\xc5\x55\x84\x33\xec\x63\xe7\x03\x3a\x1a\x33\x58\x1d\x63\xbf\x19\x34\x9c\x4d\xd1\x40\xe7\x2c\xd1\x6e\xf5\x1c\xcc\xae\x55\x7c\xf8\x4d\xf9\x41\x5b\x37\x09\xdc\x9f\xdd\xed\xd4\xa6\xa0\x96\x63\xf9\xf2\x2d\x45\x43\x36\xe6\xd5\x57\x37\x09\xf6\xe1\x54\x53\x7d\x44\x50\x9e\x7c\x4b\xd5\x90\x18\xa9\x28\x7c\x48\x64\x64\x88\xd4\xa5\xa1\x38\xdb\xee\x88\xaa\x86\x86\xea\xaa\x7a\xd9\xa6\xa1\x1a\xaa\x22\x43\x64\x65\x50\xd7\x76\xfe\x7e\xfa\x07\x31\x5f\x48\x03\x94\x55\x24\xf8\x46\xe3\xa1\xc7\xf8\x93\x80\x3f\xe1\xa1\x11\xe8\x1b\x2d\x0f\x52\x57\x91\x31\x6f\xa6\x2e\x9c\xa0\x55\x9f\x81\x06\xde\x73\xcc\x46\xde\x13\x41\x43\x3b\x66\x50\xbd\xc1\x0f\x3a\x60\xca\x57\xe0\xf7\x15\x4c\x81\x0e\xf0\x73\x81\xb5\x30\x45\x47\x7a\xc3\x14\x57\x1d\x79\xd2\xa6\xe7\xdb\x03\x8e\xae\x96\xba\x96\x52\xab\x03\x36\xaf\x59\x73\x64\xf3\x19\xd9\xb6\x94\x3a\x73\xe4\x68\xbb\x0c\x3b\x3c\x51\xc5\xd3\x78\x0a\x11\x93\x70\x23\xf4\x85\x45\x48\x4b\x76\x1f\xea\xcc\x91\x23\x67\xda\x03\x8e\xac\x96\xbb\x77\x50\xf1\x97\x52\x2e\xbf\xaf\x05\x15\x4e\xc3\x29\x50\x21\x11\x36\x62\x5f\x5c\x04\xb4\xd4\xed\x43\xad\x0e\x08\x58\xbd\xe6\x48\xc0\x19\xd9\xbe\x83\x2a\xd3\x17\x2c\x5b\xac\x55\x68\x28\xe0\xcf\x04\x1c\x59\x2d\xe1\x62\x0a\x8e\xa0\x27\x1e\x83\x55\xf8\x50\x50\x57\xab\xa4\x4a\xa9\xab\x96\xe4\x2d\x2d\xd2\xcb\xe8\xe5\x60\x5d\xb3\xda\xc1\x0a\x4b\x28\x3c\x02\x9e\x70\x0c\x57\xc1\x23\x41\x59\xa5\x90\x0a\xa5\xac\xba\x9a\x76\xc5\x70\x49\x86\x97\x1c\xa6\xb4\xcb\xee\x6a\x12\x5a\x81\x01\x19\xfa\xd6\x40\x6f\xc5\x17\xfa\x2c\x06\x37\xa5\x16\x7a\x4f\x04\xca\xa3\x08\xa8\x56\xe8\x13\x08\xbd\x3a\xe0\xc5\xa3\xc0\x28\x13\x80\xf6\x85\xde\xdc\x47\xe1\xf6\x05\x3a\xb7\x74\xfe\x44\xe9\x35\x98\x7b\x59\x68\x2c\x08\x0c\x9d\x8d\x82\x4a\x06\x4d\x90\xf1\x85\x2a\x12\x17\x20\xf2\xcd\x86\xc3\x99\x87\x53\x77\x47\x87\x87\x47\x84\xee\x69\x4c\x3a\x60\x38\xc0\xe0\x29\xbb\x86\xaf\x29\x3e\xd8\x70\xe1\x2a\xce\x0d\x28\x91\xa0\x0f\xfe\x4e\x66\x85\x85\x64\x87\x09\x9c\x1b\x13\x1b\x63\x4c\x49\x90\x03\x7e\xc5\x3e\x70\xf3\x5f\xda\x49\x5d\x66\xbe\xe1\x64\x7b\xc3\xfd\x9f\x71\xd3\xec\x7a\xc9\x1a\x51\xb3\x34\x5c\x1b\x13\x1b\x11\x25\x71\x1e\x7e\xd3\x70\x05\x54\x77\xca\x5c\x5f\x03\x8e\xc1\x6f\xf8\x0b\xcd\x0f\x3e\x3c\x06\xe3\x71\xeb\xba\xd8\x90\xa4\x84\x77\x56\xde\x38\x1a\x2c\x45\xd7\x47\xd6\x45\xd5\x31\x51\x51\x89\xb1\x41\x5a\xec\x05\x03\x91\x03\xe2\xd3\x1b\x17\x3b\xf3\xcd\xf9\xc6\x7c\xa9\x64\xaf\x29\xbb\x58\xce\x79\x65\x3f\x92\x40\xa5\x30\xd9\xf9\xd5\x96\x0f\xb6\x5c\xbc\xae\x7d\x7a\xe7\xf1\xe7\x97\xa5\xfd\x55\x07\x4b\x0e\x15\x37\x97\xb4\x94\xd5\xd7\x1b\x2b\x33\x2a\x12\xf7\x32\xdc\x47\xe1\xa5\x49\xc9\xb9\xd1\xc2\x70\xbc\x93\x00\x23\x8b\xcc\x15\xc5\xb9\x72\x61\x51\xad\xa5\x54\x00\x12\x8e\xec\x9a\xfa\x95\x7c\x72\x93\x69\xcc\x32\x2d\xbe\xee\x8f\x43\x91\xc0\xde\x12\xba\x0d\x46\xcd\x12\x7c\x45\xc0\xcd\x38\x13\x28\x78\x77\x92\x9c\x78\x28\xe9\x70\x8b\x96\x6b\xf4\x45\x2a\x99\xc7\xad\x30\x03\xdf\x85\xa5\x6f\x4b\xdc\x47\xe1\x21\xb7\x6e\xc7\xdf\x11\x94\xd1\x50\x00\x1f\x2a\x83\x60\x44\x18\xe8\x70\x52\x9b\xdc\x06\x14\xb0\xf0\xe0\x0f\x2d\xc7\xfa\xfd\xa8\xbf\x3b\x0c\x5f\x43\x49\xdd\x80\xbd\xfc\xa5\x67\xdb\xf1\x75\xc5\x82\x3e\x02\xe7\x9b\x89\x2e\x2b\xde\x7c\x19\x49\xe8\x83\xdf\x1c\xc7\x17\xe5\x82\x88\xb0\xfc\x30\x61\xc2\xcb\x83\x27\x04\x96\xfb\x17\x05\xcb\xc8\x6f\x5b\xf9\x06\x7a\x6a\x1d\x4d\x5a\x03\x6b\x81\x81\x35\xca\x06\x58\x03\x93\x60\xa9\x8b\x19\x96\x83\x04\x3b\x61\x0f\xf8\x5f\x81\x9d\x60\x80\xf5\x30\x1a\xf4\xae\xb6\x7a\xa5\x8e\x9f\x94\xb2\x73\xd1\x4c\x01\x5d\xa2\x80\x00\x1a\xc6\x9c\xfa\xe2\xf6\x3f\x8f\xaf\x1a\x9b\x2f\x83\x3f\x0c\x60\xa1\x0f\x68\x60\x6b\x85\xac\x64\x79\x4e\x4a\xd9\xe1\xa4\x8b\xfe\x0f\xdd\xc7\x27\x56\x8d\xcd\x93\x61\xbd\x83\xae\x77\x0f\x1d\x8c\x84\x17\x79\xac\x4e\xc4\x17\xe6\x4f\x90\x92\xa2\x22\x52\x62\x13\x99\x35\xf3\xf1\x74\x4c\x4f\x6f\xbc\x56\x71\x7a\x81\x1c\x53\x1a\x59\x90\x50\xc1\x2c\x7c\x90\x00\x0c\x54\x6b\xa1\xaa\x04\x5e\xb8\xfe\x40\x2a\x29\xaf\x2e\xdc\x57\xc2\x9c\xbe\x0e\xd7\xca\xe1\x27\x01\x7e\x82\xd3\xb1\x6b\x3f\x94\xcb\x93\xaa\x0c\x25\xb1\xcc\xf5\x71\xa5\xc8\x60\x95\x16\xf4\xb6\x2c\x5e\xa7\x10\x3a\x3b\xa1\x63\x08\xca\xdd\x0c\xe1\x76\x3d\x84\xbb\x98\x21\x1c\x7c\xff\xeb\xe7\x6a\x0f\xb7\x0f\xe2\xa1\x01\x43\x21\x14\x1b\x24\x75\xf3\x50\x56\x67\xbf\xf8\x4c\x4c\x67\xa1\x8e\x86\xe1\xe0\x8e\xee\x38\x5c\x56\x53\x9f\x89\x8a\xc6\xee\xdc\x38\x7e\x28\xdb\xed\x46\xe3\x70\x74\xa6\x48\x58\x67\xb3\x52\x43\x58\x27\x5a\x3f\x48\x54\x36\x53\xd0\x00\xa1\x10\x0a\x0d\xb2\xbb\x52\x07\xc1\x2e\x66\xf0\x7c\x02\xab\x7e\x81\x35\x4f\xbe\x7e\x02\x57\x9f\x82\x87\xab\x8e\x94\x6d\x73\xf9\x83\xd1\x95\x3b\x25\x5c\x47\xed\x8c\x8a\xda\x29\x23\x45\xef\xac\x8c\x3a\x28\xc1\x3a\xea\x60\x45\xe5\x41\x59\x4d\x44\x86\x8f\x4f\x4d\x4d\x90\xf4\x54\x7c\x6a\x7e\x99\x0c\xb1\xb4\x93\x61\x38\xb5\x33\x0a\xfe\x25\xbe\x43\xc5\xa7\xfd\x85\x8d\xaa\xdc\x29\x8d\xa4\x76\x44\xc3\xbf\x44\x3d\x95\xe0\xa4\xcd\xa6\x6f\x9e\x69\xff\x54\x02\x4f\xea\xd4\xa1\xe8\x1d\xfb\xe4\x43\xfb\x0e\x55\x9c\x12\xc0\x9b\xba\xd9\xbe\x66\xba\x8c\xd9\xb4\xf2\xe8\x31\x3f\x63\xf5\xea\xe9\x12\x2e\xa3\xd6\x05\xed\xad\x8f\x96\x71\x36\x1d\x9f\x96\x16\x2f\xe9\xa9\x84\x94\xbc\x32\x59\x79\xd5\x21\xe2\xa6\x04\xe5\xd4\xcd\x33\x0e\x9e\x57\x69\xf0\x50\x54\x1e\x34\x03\x7f\x47\x8d\xd4\x7d\x85\x42\xcd\xc0\x81\xa8\x91\xbb\xaf\xd0\xa8\xf9\x7d\x20\x68\x24\xfb\x15\x0a\x34\xbf\xff\x0e\x1a\xd9\x1d\xee\x89\xdf\xb2\xf6\x21\xca\x72\x1e\x87\x28\x67\x70\x88\x7a\x86\x54\xfa\xe2\x6d\x7e\x3c\x7c\xac\x72\xf8\x31\x69\xc6\x0e\x1a\x3e\xb7\x5b\x49\x65\x3e\x05\x9f\x77\x5b\x49\x08\xb7\x87\xf3\x30\x06\x3d\xc1\x13\xc7\x48\xdd\x7a\x0a\xc7\xa0\x27\x7a\xe2\x18\xb9\x5b\x4f\xe3\x18\xf0\x44\x4f\x18\x23\xd9\xf5\x14\x8c\x01\x4f\xf0\x84\x31\x8e\x61\x18\x0d\x77\xe1\xcf\x46\x9d\xdb\xd9\xcf\x3d\xcc\x40\x82\x17\x50\xf0\x0f\x60\x90\x7a\xb2\xa8\xd1\xce\x01\x3b\xec\x29\x0c\x02\x0a\x7a\x01\xc5\x3d\x6a\xd5\x31\x84\x8d\xe7\x1b\xa2\x6b\x42\x73\x25\x5c\x04\x9f\x93\x39\x05\xd9\xd6\x42\x6d\x63\x68\x5d\x90\x45\xc2\x4d\x60\x27\xb3\xf2\xb2\xf2\xf2\xb4\x07\x77\xd7\x05\xc6\xc4\xa7\x24\x1a\x24\x75\x00\x55\xb2\x27\xbe\x20\x46\x70\x44\xf7\xc8\x5c\xbb\x9f\xea\x43\x95\x18\x1c\x98\xc0\xdd\xa1\x3b\xd3\xb2\x52\xb3\xd2\x65\x0c\xc0\x7f\x93\x51\xc9\x09\xd1\xe1\x46\x8b\xd1\xa8\xc5\xd5\xf8\x0b\x19\x92\x1e\x15\xbe\x4b\x1b\x52\x11\x5e\x9f\x26\xc1\x46\x54\x48\x63\x9a\x29\x3d\xd5\x89\x48\x97\xe0\x1d\xfc\x86\x34\xa6\x19\x53\x53\xb5\x3b\xeb\x43\x9b\xf6\x95\x15\x14\x17\x4a\xca\x40\x2a\xa9\x70\x6f\x0a\x3c\x66\x0b\x8a\x0b\x65\x65\x10\xc5\x19\x72\x0d\x85\x65\xa9\x7b\x85\x83\x75\xf5\x4d\x79\xa6\x5c\x63\xae\x0c\xef\xc0\x77\x64\x7d\x6e\x45\x4d\x83\x36\xcf\x94\x67\xcc\x93\x60\x03\x28\x24\xf7\xa8\xb5\x3e\xb7\xb2\x66\xbf\xb6\x3b\xa8\xeb\x18\x6f\xdd\x93\x90\x1f\x2f\xc4\x27\xa4\x26\xef\x91\xb9\x4b\x06\x54\x29\xf8\x19\xfe\x24\x61\x20\x05\x3f\xe3\x9f\xa4\xce\x7e\xc5\x76\x91\x87\xe5\xf0\x6d\xa1\xa5\x30\xdb\x9a\xe7\x0d\x8b\x70\x39\x89\xcf\x68\xce\xe6\x87\x8b\x71\x75\x7a\x56\x7a\x76\xba\xc5\x1b\x37\x83\x4a\x66\xe5\x9a\x73\x73\xb5\xb9\xe6\x1c\x53\x8e\x64\xeb\xb6\xd5\xf1\x7b\x0a\x4b\xd2\xca\x84\xb2\x92\xbc\xc2\x42\x19\x0e\x51\xea\x79\x5c\x83\x4b\x61\x0d\x69\xbf\xa3\xc3\xe9\xfc\x14\xaa\xfc\x5e\xc7\x2c\x63\xa6\x31\xc3\x94\xe1\xdd\xdf\x53\xdd\x44\xcd\xef\x80\xb3\x70\x0d\x72\xb1\x82\xc4\x5e\x6a\x10\x9f\x6e\xca\x30\x66\x18\xf1\x11\x3c\xf6\x52\xa6\x50\x73\xf1\x43\xb2\x7b\x82\x3f\x9f\x96\x97\x9a\x93\x9c\x9d\x91\xe7\x05\xdf\x28\x2f\xd0\xe8\xb0\x32\x50\xd1\xf0\xb0\x9b\x86\xd1\x30\x11\xae\xe3\x67\xf3\xe6\x90\xea\x0f\x9e\xa6\x1c\x63\x8e\x31\x07\x26\xc1\x0c\x2f\x5c\x42\xe3\x78\xdb\x47\x3c\x8c\x7f\x9f\xc4\x6a\x1a\xa7\xc0\x0c\x32\xb7\x20\xbb\xb0\xc8\x79\xd3\x8e\xdb\x4c\xc0\xf2\x4f\x79\x88\xba\x0f\x61\x68\xc0\x73\xf8\x31\x8e\x84\xd1\x64\x8e\x82\x3c\xb7\xa1\x35\xc7\x92\x6d\xc9\xb6\xc0\x32\x5c\xeb\x85\x1b\xa6\x92\x50\x4e\xdb\xb9\x2a\x5e\x9d\xa4\xbe\x83\xdb\x21\xc2\xe6\x02\xe1\xa4\xfa\x8a\x6a\xe0\xe1\x43\xfc\x02\xcf\xe2\x35\xec\x80\x5b\x64\x40\x36\x8f\x3a\x1c\x48\x42\x2b\xad\xc4\xaa\x59\xfc\x09\x7f\x72\x2c\xa5\xb8\x2b\x3a\x5e\xe9\xa5\xfc\x83\x34\x5b\x4c\x66\x29\x3b\x1d\xbd\xba\xdc\xc8\x3f\x6c\x32\xaf\x12\xaa\x3b\x7e\x08\x5f\x28\x73\x94\x4d\x0e\xab\x73\x4d\xde\x10\xa8\xf6\x26\x4d\x66\xb3\x49\x6b\xc8\xde\x93\x9b\x22\xe9\x50\x0f\x7d\x79\x1c\xb7\x18\xc6\xc1\x61\x52\x87\xbb\xdc\xb0\x85\xc6\x71\xd0\x42\xea\xdc\x1e\x7a\xde\xa7\xd0\x13\xa3\x48\x78\x0b\xce\xf1\xe9\xc6\x74\x63\x7a\xe6\x5b\xf7\xbd\x80\x57\x14\x98\x82\x67\x49\x53\xba\x31\x3d\x4d\x9b\x6e\xc9\xb0\xa4\x4b\xee\x20\xb3\x3a\xb7\x4f\x60\xba\xab\xed\x17\xb7\xae\x26\x1a\xa7\x81\x84\x43\x61\xba\x64\xab\xa2\x60\x3a\x48\x30\x14\xa6\xc9\x3a\xf2\x3c\x8d\xcf\xd1\x4e\x76\xc5\x52\x38\x1d\x25\x1c\x86\x53\x65\x9d\xdb\x27\x5d\xe9\x7c\x57\x11\xb5\x70\xd5\x85\x0f\x64\xc5\x40\x7f\x70\xf6\xfc\x07\x92\x12\x4d\x7d\x70\x76\xc5\x42\x59\x9d\x4c\xbb\x17\x45\x7e\xcb\xda\x27\xea\xc8\x1d\x7c\xb1\x7e\x69\xfe\x52\x41\x7d\x13\x7f\xc6\xc7\xea\x9b\x8b\xf3\x17\x97\x2c\x91\x61\x8c\x32\x09\x1e\xc1\xf7\xca\x9b\xf0\x06\x03\xd5\xf8\x22\xaf\x16\xe2\x2b\xea\x20\x75\x28\x0e\x53\x8b\x4e\x2c\xb8\xf8\xce\xfb\x6b\x61\xa8\xb2\x57\x19\xa6\x8c\x50\xca\x60\xc4\x9a\x6b\xfa\x0b\x0b\x4e\x30\x5d\xbb\x75\xf6\x0f\xf9\xeb\xbb\x6f\xc4\x7e\x9c\x0c\xaf\x2b\x02\x7c\x08\x37\x14\x2d\xf8\x26\x7f\x1c\xf3\x51\xc8\x75\x35\x08\x47\xab\x8c\xca\xe2\xab\xea\x2e\xc6\x7e\x7e\x09\xbf\x13\xfa\x05\x40\xdf\x75\xd0\xe7\xc2\xa3\xc3\x4f\x4a\x9f\x61\x1d\x0e\xc1\x08\x8c\xc4\x97\xb1\xfe\xb7\xb2\xa7\xad\xdf\x5c\x82\xde\xeb\xe0\x1f\x01\xd0\x77\x27\xd3\x33\x94\x8d\x8b\x07\xd1\x1e\x00\xa2\x87\x59\xc7\x10\x5c\x88\x8e\x0e\xd0\xb9\x45\xf3\x5f\xe2\x40\x9c\x76\x1a\x27\x08\x28\xa0\xbc\x6b\x32\x92\xf2\x5d\x24\x51\xde\x8f\x82\x80\x13\x70\xda\xda\x89\x38\x50\xe6\x5a\x71\x94\x0e\x19\x32\x97\xfa\xf6\x7e\x55\xcb\x97\x32\x17\x72\x05\xfa\x81\x67\x33\x48\x02\x0c\x80\x97\xd6\xbc\xfc\xab\xfc\xeb\xaf\xf0\x52\x3b\x0c\x10\x40\x02\xcf\xed\x4b\xa1\x9f\xcc\xb5\x06\x7c\xf5\x45\xf4\x8f\x02\x17\xd2\x25\xc1\x11\x1e\x45\xec\xb3\x6d\x1a\x32\x72\x27\x32\xd8\xe7\x30\x8a\x02\x2e\x45\xcf\x15\xd3\xd1\x4f\xe6\x5a\xa1\xaf\x3d\x8f\x3c\x0f\x6e\xe0\xdd\x00\xff\x10\xc0\x07\x5e\xf2\x1f\xfe\x9b\xfc\xcb\x6f\xf0\xd2\x49\xf0\x11\xe0\x1f\xe0\x1d\xb2\x02\xdc\x64\xe8\xdb\x9d\x47\xde\x44\x3f\xf4\x3c\x8f\x4b\x05\x2e\xe4\x58\x33\xbf\xc9\x82\x5e\xd9\xc8\x6f\x43\x72\x86\xf7\xa7\x48\x22\x7f\x10\xbd\x04\x9c\x88\xde\x9b\x17\xe0\x08\x19\x28\xfb\x54\xf2\xc4\xef\xd0\xbb\x06\xdc\x04\x18\x0e\x2f\xae\xf6\x79\x2e\xff\xfa\x1b\x50\x67\x61\x50\xb6\xa3\x54\x5e\x83\x8d\x3a\xb7\x1f\xa3\x5c\x60\x37\x6c\x81\xb5\xdf\xff\xf5\x7d\x07\x0a\x5c\x75\xe4\x97\x30\x81\x0f\x09\x0f\x0f\x91\x5e\xa5\x42\xc2\x6b\x1a\x64\xdb\x6e\x7a\x7f\x4d\x4d\x83\xf4\x23\xd5\x50\x13\xbe\x4b\xc6\xd6\xae\xdd\x30\x57\x54\xf6\xc3\x42\x16\x4f\xa9\xfb\x1d\xf0\xd4\x1e\x78\x2a\xcc\x15\xa1\x1b\x16\xb2\x3a\x32\x13\x03\x79\x98\x8f\x1c\x8c\xc5\xd9\x27\xa5\xc2\x63\x39\x6d\x6d\x5a\xb8\x84\x26\x30\xe1\x25\xcc\xc5\x10\x9c\x8a\x99\x8b\xa4\x13\x2b\xe7\xd5\xce\x11\x70\x04\xfe\x03\xff\x81\x23\xc2\xb2\x43\xf3\xc3\x64\xf4\x99\xf3\x1a\x0e\xc0\x51\x5a\x0c\x85\x39\x38\x1b\x76\x4b\x3a\xb7\x2f\x29\xd8\x0d\x73\x60\x36\x84\xca\xee\x99\x91\x90\x0f\xf4\x9b\x30\x74\x1b\xd0\xbb\x7f\xd8\x01\x74\xc4\x97\xbb\x81\xde\x0e\xba\x99\x40\x83\x5b\xcb\xb9\x67\xc0\xb6\xb4\x3f\xf3\x30\x3f\x3b\xd9\xba\x15\xa8\x76\xa0\xeb\x61\x28\x72\x40\xb7\x03\x35\x0e\xd6\xce\x04\xaa\x06\x06\x61\x6f\x47\xdc\x81\xda\xda\x7a\xf2\x19\xd7\x74\x61\xd8\x8a\xc5\xac\x9b\xce\x9e\x4b\xdb\x2c\xf8\xbd\xad\x1c\xbe\x27\x75\x64\x08\x3d\x44\x67\xff\x94\xef\x1a\x87\xed\x5d\xc3\xa0\x9d\xb4\x8f\xd1\x91\xe3\xe9\x67\x6e\x3a\xfb\x07\xb0\x56\x47\x8e\xa7\x74\xe8\xad\x66\xf0\xf0\x6f\x71\x87\x1b\x37\xdc\x30\x98\x70\x42\xff\xe3\xc2\x7d\x36\x95\x20\xea\x77\xf1\xcf\xd7\x96\x1d\x1a\xd0\x4e\x42\x9f\x91\x0e\xb0\x79\xc0\x69\x12\x7a\xff\x17\xd8\xe7\x55\xfe\xf7\x35\x65\xcd\x03\x4f\x93\x30\x69\x2d\x5f\xb6\xfd\x79\x7b\xfc\x21\xb2\xb1\xd4\x01\x9d\x8e\x6f\x26\x9b\xfe\x03\x35\x96\xf0\x65\x3b\x9c\x50\x77\xb3\xce\x6d\x0f\x28\x22\x8c\x6d\x79\x4f\x84\xb1\x70\x57\xe4\x08\xe6\xde\x43\x67\x54\x87\x33\xf1\x0a\x7f\xb7\x05\x69\xa4\x5b\x29\x48\x05\xda\x41\xd2\xc2\x23\x45\x71\xef\x6c\x58\xf5\xc9\x56\xa0\x68\xd0\x88\x8e\x6f\xbf\x49\x7c\x2b\x44\x8b\x5b\xef\x52\x18\x05\x47\x44\xdc\xfb\x7f\x5e\xd4\x1f\xde\xe4\x61\x2a\xf8\x80\x0f\x4c\x05\x3f\xf4\x81\xfe\x38\x15\xfd\xb0\x3f\xf6\x47\x3f\x9c\x0a\xfd\xd1\x07\xfc\x64\x9c\xa0\xf4\xe3\xbf\xfe\xb5\xfa\x93\xab\xc7\xa3\x22\x2f\x48\x41\x4b\xc8\x4c\xaa\x39\x62\x7e\xd1\x16\x21\x70\x7a\xda\x3a\x79\x2a\x54\x83\x0b\x4e\xd0\xfa\x22\x11\x35\x7b\xc1\xaa\xc2\x83\x2b\xa4\xa6\x0f\xc9\x6c\x6a\x43\xd5\xb5\xe4\xe3\x42\xe3\xfd\x9c\x53\xf2\xb7\x58\x81\xae\xf0\x8a\x73\xf2\xd9\x5f\x47\x69\x5d\xcc\x70\x5b\x47\xc6\xc3\x6d\x57\xdb\xef\x8a\x85\xc7\x61\xd8\x07\xfb\xe0\x70\x47\x08\x7d\x60\x18\x0c\x87\xff\x84\x0e\xbc\x64\xfb\xdd\xc2\xe3\x70\x27\xd1\x30\x47\x08\x7d\x60\x38\x0c\x83\xff\x84\x0e\xbc\x04\xb7\x6d\xe7\xf8\xf7\x57\x9f\x59\x24\xa9\x6f\x53\x8b\x57\xad\x5e\x2c\xe3\x1b\x5d\xe9\xf0\x06\xfd\xfe\xaa\x33\x8b\x1d\xb8\x45\xab\x57\x2f\x96\x75\xf6\xb3\xf4\xe2\x33\xab\xaf\x49\x3a\x7a\x28\x75\xed\xcc\x99\xf7\x1d\xb3\x8a\x63\xd0\x1b\x7b\xc3\xab\xca\x32\x20\xbe\x83\x01\xf0\xda\xef\x1e\x66\xf0\xd3\x91\x9e\xcf\xe1\x32\x4c\xe4\x92\x74\x64\x91\x7d\x01\x6f\xa6\x4d\x16\x8b\xc9\xac\x85\x12\x5c\xcf\x07\x6c\x4e\xdf\x13\x20\x67\x57\x5b\xaa\xab\xb5\x90\x8f\xcb\x60\x11\xe6\xa3\x3b\x7a\xac\x1e\x35\x51\x4a\x4a\x4c\x8c\x8f\xd1\x46\xed\x8d\xab\x94\xf6\x3f\x02\x16\xde\x12\x60\x2b\x8c\xc3\x57\x71\xbb\xbc\x29\x76\xf3\x16\x6d\x48\x6d\x78\x83\x74\xe4\x72\xeb\x65\x01\x3c\x9e\x8c\x40\x0e\xc5\x97\x7d\x51\x2b\xab\x4b\xf1\x45\xdb\x7e\xf5\x3b\x81\xbb\x80\xf5\x18\x88\xeb\x70\x3f\xee\x87\x48\x5c\x02\x95\x30\x0d\x96\xde\x07\x0a\x5e\x92\xf7\xed\x3d\xde\x52\xa7\xad\x88\xdb\x1b\x1d\xbd\x75\x73\x62\x8c\x34\x09\x7b\xe1\xa8\xa5\xa8\x13\x70\x13\xfa\x02\x0f\x3b\x64\x2e\x09\x36\xc1\x10\xe0\x61\x9d\xa4\x54\x3c\xe9\x3a\xa6\xec\x17\x60\x33\x4c\x82\x51\xb0\x15\x56\xe1\x78\x18\x8c\xcb\x65\x77\xf0\x12\x75\x6e\x17\x6d\x9d\xfc\x3d\x11\x35\x14\x6c\x16\x15\x17\x96\xae\x61\xb9\x15\x3f\x88\xce\x13\x47\xd2\x44\x09\x35\x30\x44\x0c\xde\x26\xab\x9d\xeb\x45\xf0\x12\x8d\xa2\xad\x93\x8f\x4d\x8d\x4b\x4a\x92\xd0\x8a\x56\x32\x29\x29\x0e\x0e\x88\x4a\x3f\x91\x4c\x2a\x4e\xdd\x5b\xae\xf5\x13\xcb\xf7\xa6\x26\x15\x4b\xdc\x0a\x18\x82\x2f\x93\x70\x9a\x76\xc8\x38\x4d\xc3\x10\x78\x59\xf1\x10\xf3\xcb\x05\x98\x2d\xca\x5d\x9a\xf5\x22\x34\xda\xac\x60\x10\x75\x0c\xe1\x0a\xdb\x6c\x56\x1e\xee\x50\x70\xb1\x6b\x24\x09\x4b\x7c\x78\xfc\x97\xad\x84\xb4\x2d\xa4\xba\xee\x80\x86\xc7\xa7\x14\xb4\x29\x1a\x12\xca\x28\x65\xa7\x0e\xb7\xf2\x70\xd1\x36\x92\x84\x3b\x94\x0e\x93\x40\xc3\xc3\x7a\x47\x5a\x03\x05\xeb\x55\x0d\x09\x83\x3d\x71\x7d\x0f\x2d\xb4\xa9\x1a\xd2\xb9\x17\x72\x79\x52\xb4\x35\x4a\xd0\xa1\x81\x8a\x8a\x4e\x8e\x4d\x92\x55\x8d\x6a\x8d\x0e\xcb\xda\x56\x15\xee\x6d\xd7\x77\x5b\xc9\xc4\xe2\xf2\xd4\x7d\xc2\xbe\xf2\xfc\x92\x62\xd9\xae\xb7\x5b\xab\x6a\xb2\x0e\x47\xd7\x7a\xf7\x9c\xd0\xe2\x82\x2e\x30\x24\x00\x86\xa0\x0b\xb8\x98\x1d\x5f\x27\x04\x19\xac\x19\x34\x1e\x70\xc6\x11\xdc\x15\xcd\xa0\xe1\x4c\x57\xb8\xfc\x2b\x3a\x9a\x8b\xe6\xb9\x01\x57\xc6\x8f\x1f\xff\x60\x8f\xe8\xfd\xff\x23\xe0\xf2\x9d\xc4\xa3\x47\x2b\x2e\x6c\x5d\xe8\x31\x73\x5d\x9d\x77\xbb\x48\x72\x73\xaf\x3c\x18\x4f\x82\xc4\x72\xf9\x57\x1e\x3c\x78\x30\xfe\xbb\xef\x82\x44\x07\xb1\x79\xba\xce\x76\xef\x08\xdf\x2e\xf6\xa4\xfe\xb7\xa4\xf1\x13\xc6\xdf\xdf\x23\x7a\x47\xc7\x38\xca\x1c\xb6\xc0\xc7\x35\x87\xe3\xce\x6c\x2a\xf5\xc6\x19\x57\x49\xb8\x40\x73\xe6\xd9\xa8\xa1\x38\xd3\x29\xd0\x64\xb2\x68\xed\x79\x6e\xdc\x3c\x08\x35\x34\x97\x36\x1d\x35\x78\x81\xc2\x19\x4b\x36\x25\xc4\xad\xae\xd9\xe6\x0d\x5b\xf0\x63\x12\x4f\xd3\xf3\xe6\x39\x45\x72\xa6\x2b\x0e\xe1\x4e\x0b\x49\xce\x3c\xbd\xc7\x4a\x46\x19\xa2\x73\x0b\xe2\x39\xf3\x20\x70\xc8\x3d\x00\x1a\xc5\xda\xa3\x85\xe6\xcc\xd3\x15\x17\x96\x52\x35\xa0\x51\x35\xa8\x21\xdd\x83\x44\x17\xe8\x7c\xa2\xdc\xfc\xc9\x55\xe9\xf4\x44\x0d\xbc\xc5\xce\x7b\x8c\x1a\x12\x7c\x55\x3d\x3f\x42\xd1\x3f\x76\xb4\xb5\x0e\xf2\xa0\x42\xf1\xa6\x64\x53\xb2\x31\x39\x2d\x25\x3d\x3b\x23\x89\x99\xbe\x3b\x49\x3f\x1a\xf9\x16\x78\x71\x83\x90\x44\x6d\x68\xc1\x17\x91\x17\x46\x27\x5d\xba\xb9\x5b\xce\x28\x4e\xcf\x4c\x2b\x30\x5a\x4d\x56\x93\xd5\xb9\x4d\x6c\x16\x93\x6f\xbd\x65\x29\x13\xae\xbc\x97\x62\xb8\x2c\xe7\x1b\xf3\xcd\xf9\xf9\xf9\xe6\xfc\xde\x83\x8a\x2e\xbf\x57\x70\x45\x28\xbb\x65\x4a\xb5\xca\x59\x46\x8b\xd1\x62\x64\x14\xdf\x6e\x57\x1e\x66\x06\x42\x35\xce\xfa\x51\xba\x0f\x11\x24\xee\xa0\xf6\x5d\xc8\x7f\x2f\xfd\x3d\xe6\x68\x01\x8c\x3a\x78\x59\xfb\x3e\xbe\x75\x70\x53\x81\x14\x79\x7b\x25\x50\x2b\xde\x67\x6a\xa2\x42\x4b\x03\x17\xad\x5e\xb0\x68\xd1\xea\xeb\x8b\x84\xc0\xd0\x84\xf0\x28\x79\xc5\xe2\x95\x48\x45\xfa\x31\x9b\x52\xf0\xad\x9d\x8b\xb5\xcb\x60\xd4\xce\xa3\x29\x92\x69\x8f\xc9\x60\xd0\xfa\x17\xac\x2f\xdd\x28\xe1\x0e\xea\x3b\x0c\x21\x71\xe1\xe8\x9d\xd8\x80\x73\x20\x5e\xec\x59\xf8\x43\x0e\xb8\xc7\xec\x51\x11\x35\xe0\x23\xf6\x2c\xfe\xed\x37\x70\x3b\x0d\x3a\xa6\x4b\xc9\xe4\x23\xe0\x1d\x1c\x06\xbe\xb8\xec\xf0\x90\x8a\x91\x71\x13\x37\x23\x0d\x7e\x5e\x30\x0b\x2e\xb3\x2f\x53\xb1\xb1\xa9\x49\x49\x32\x52\x48\x91\xdc\x7e\xc3\x8c\xe7\x7f\xaf\xd4\xe5\x51\x81\x41\x11\x81\xe9\xf2\xa6\xd4\xa6\x6d\x47\x85\xbf\xd6\xec\x90\xa6\x54\x2b\xc5\x1d\x33\xb4\xac\x45\xea\x07\x0c\x17\x50\x43\xed\x61\x3b\x28\xf0\xf8\x75\xe3\xcc\xcf\xe5\xb0\x75\x64\xf9\xea\x15\x85\xcb\x85\xff\xb9\x7c\xf7\x89\x19\xac\x54\xcb\xfe\xc6\x16\x98\xfe\x05\x8c\x06\x8f\xe7\xf2\x4d\x1f\x92\xdb\x6a\x18\x3c\x6a\x11\x8a\x7b\xf1\x15\x86\xdb\x69\xa8\xc6\x1d\x30\x13\xa7\xc0\x8e\x04\x86\xdb\x6f\x80\x83\x31\x10\x03\x86\x9d\xd0\xcc\xe8\x94\xcb\x2a\xc3\xff\xd7\xfa\xe5\xc1\xc6\xf4\x94\x03\x32\x0e\xc1\x46\x43\x94\x25\xac\x28\xda\x3b\xba\xb8\x2a\xa9\x5a\x80\x8f\x29\x85\x62\xc3\x45\xcf\xbf\x28\x9d\x0b\x93\x32\x98\x45\x18\x27\xc2\x3b\xac\xec\x0e\xa3\x59\x17\x33\x68\x5c\xc3\x45\x4f\xd0\xa1\x7f\x07\xbe\x75\x40\xda\x96\xb7\x23\x3c\x6d\x5b\xda\xb6\x9a\x1d\x87\xd3\x60\xe3\xd6\xab\xcb\xb2\xf7\x30\x5b\xf7\xa0\xfe\x55\x95\x15\x54\x16\xf5\x3f\x36\xef\x91\xb3\x8b\xaf\x5e\x86\x8d\x2d\x87\xf3\x6a\x0e\xa5\x1d\x4e\x3b\xbc\xa3\x66\x5b\x1a\x83\x6f\x05\xa3\xff\x3c\xd4\x69\x71\xba\xe2\xf2\x26\xfc\x00\x3f\x28\x2e\x5f\xc0\x74\x49\xd5\xd8\x35\x3c\x9c\x64\x55\x0d\xb5\x4d\x94\x55\xcd\x28\xb1\x43\xd5\xc0\xfb\xa2\xa2\xe9\xa0\x7d\xc5\x11\x36\x6b\x3c\xeb\x5e\xb5\x4a\xd4\xd1\x84\xab\x51\x54\xac\x7c\x58\x44\x69\x95\x41\x5e\x06\x6e\xf8\xb2\x1a\x43\x86\xa4\x84\x46\xef\x12\x60\x1b\x1b\x1c\x5a\xd1\x90\x22\xe1\x52\xdb\xa8\x19\xd8\x4c\xee\x4a\xdd\x1d\x15\x2c\xa8\x24\x55\x94\x54\x90\x9a\x65\xb2\xb9\xa9\x4f\xbd\x92\x8a\xf7\xa6\xed\x15\xf6\xee\xcd\x2b\x2e\x96\x6d\xae\xca\x2f\x59\x59\x05\xf9\xc5\x25\xde\xb0\x49\xf1\xe3\x0f\xb3\x48\x9f\x1b\x70\xf1\x4d\x59\x79\x93\x02\x46\xd9\x4c\xee\xcf\xaf\xab\x3c\x20\x34\xd6\x45\x87\x14\xc8\xb0\xa2\x6b\x1a\xf0\xca\xb4\xfc\xfa\xea\xf2\x86\x6c\xef\xba\xac\xfa\x84\xa2\x70\x70\xc5\xdd\x5e\x0a\x49\x5d\xfc\xe2\xdc\x73\xa0\xb5\xee\x6a\x52\xcf\x0a\xb2\xc6\x45\xb1\x42\x14\x9b\xce\xda\xf5\x3c\xfc\x88\xed\x50\x8b\xbf\x6e\x96\xb0\x26\x08\x03\x31\x2c\x02\xeb\x42\xf1\x53\x88\xc7\x6a\xb8\xbc\x83\xc1\x12\x0c\xdf\xc5\x42\x38\x86\x53\x29\x2c\x84\x43\x38\x3d\x5d\xc4\x70\x28\xa1\x3a\xc5\x6e\xab\xe7\x0c\x76\x35\x0b\xcb\x44\xc9\xfd\xb2\xa8\x7a\xa8\x1e\xe4\xbd\x61\xd8\xaf\x1d\x75\xc2\x4d\x11\x74\x6b\xa0\xdf\xa4\x27\xb2\xe2\xa1\x70\x24\x96\x4d\x67\x15\xdf\x68\xb6\x5b\xa3\xb3\x1b\x46\xb1\x6a\x52\x90\x98\xce\x82\xc6\xc5\xdc\xca\x6a\xc6\xdb\x6e\xea\xdc\xae\xf0\xcf\x3f\xb8\xff\xb8\x0d\x18\xa6\xaa\x20\xae\x3a\x42\x58\x48\x45\x1a\x52\x92\xd2\x65\x94\x97\xa0\x38\x1c\x5f\x17\xf0\x75\x14\x7f\x01\x79\x89\x5c\x9c\x6e\x28\x48\x14\x66\x52\x11\x71\x11\x91\x05\x72\x1b\x32\xf7\x47\x3c\x5f\xc8\xe0\xd2\x91\xe8\x85\x2b\x30\x52\x0b\xd3\xd9\x75\x2c\x78\x51\x9d\x22\x44\xa2\x17\xac\xc0\xa5\x3f\x49\x98\xdf\xbd\x62\x14\xeb\xd4\xa9\xb2\x8a\x15\xf2\x58\x57\xbb\x55\x47\x3e\xfc\x5a\x44\xea\x7b\x1c\x7e\x0e\xc7\x46\x7b\x63\x4d\xa0\x23\xf3\x91\x8e\xcc\x7f\x02\x09\x58\x0d\x97\x76\x30\x2b\xc4\x2a\x27\xd7\x04\x56\xd1\x80\x46\xd1\x80\x55\x74\xb2\x91\x77\x87\x61\xbf\x33\x8e\x11\x54\x87\xfd\x56\x4f\x1e\x26\x2f\xbd\xfc\xdd\xd3\xe2\x12\x53\x55\x62\x91\xf7\xea\x93\x89\x45\x51\xa6\xa4\x44\xef\x37\x46\xf6\xff\x93\x04\xef\xed\x22\xb6\xbd\xc1\x62\xdb\x74\x16\xb4\x34\xb8\xa2\xdb\x00\xa4\x93\x12\x2d\x91\x25\x06\xef\x33\xfe\x25\x86\x4a\x4b\x71\x89\xf7\xaf\xe0\x7a\x61\x39\x39\x79\xd8\x6a\xec\x87\x3a\x47\x16\x56\x88\x55\x66\xd0\xe8\xdc\xae\x45\x7d\x0e\x1a\x0f\xc5\x0a\x1b\x44\xee\x37\x1d\xd5\x6d\x4f\xe1\x23\x60\x3f\xee\x86\x08\x6c\xa8\x47\x9f\x52\x7c\x69\x4b\xff\xe9\xfd\x6f\xe2\x4b\xad\xe8\x93\x80\x0d\xbb\x71\x37\x46\x44\xe0\xfe\xff\x77\xfd\x29\x56\x0c\x9f\xfe\x3f\xea\x11\x2e\x1f\x82\x78\xa8\x0e\x85\x4f\x99\x6e\x0f\x54\x61\xac\xc8\xfd\x8c\xee\xab\xb0\xd7\xa4\x89\x12\x76\xa2\xc0\x73\xbf\xc1\x32\x51\xe6\x7e\x81\x06\xf6\xb3\xc8\xad\x37\xe0\x37\xf1\x2a\x8a\x8f\x07\x49\x5b\xe7\x4e\x8d\x9c\x24\x28\x9d\xaa\x86\x57\xad\x50\x42\xfd\x54\xf8\x75\xf3\xed\x73\xb7\x57\x7e\xbd\xfd\xa7\x3d\x4c\x07\xf4\xe5\x27\x4d\xad\x6a\x99\x2b\x73\xbf\x3d\xfe\xed\x2a\x5c\x14\x6f\x7c\x06\xab\x44\x18\x86\x05\xc0\x39\xea\xbe\xe7\x55\x29\x8d\x87\x05\x38\x45\x03\x79\x3d\x1b\xcf\x69\x40\xc3\x7d\x75\x71\x31\x6b\x7f\xfe\xb5\xf8\xda\x2d\x24\x4f\x63\xdf\x3c\xef\x88\xeb\x81\x57\x36\x9d\x83\x7c\x28\xf0\x82\x7e\xec\x53\x96\xe4\x2e\x5c\x44\xda\x59\x6f\x6f\x44\x63\x7d\x20\x06\x61\x74\x0c\x36\x44\xe2\x5d\xc8\xc2\x3a\xf8\x24\xee\x6b\xcc\x82\x3c\x9c\x02\x47\x8f\x41\x66\x33\xac\x82\x65\xc7\x21\x03\xfa\x8b\xdc\x57\x17\xbf\x64\x55\xab\xea\xcb\x3b\x04\x84\xe3\x04\x5c\x80\x3b\x77\x48\xc6\x0a\x63\x45\xa5\x16\xc2\x61\x02\x2c\x80\x9d\x87\xa4\xac\xe8\xac\xe8\x28\x2d\xf7\xd5\xc5\x6e\x8d\x67\xae\x08\xc5\x2c\xcc\x85\xd1\xe8\x82\xa3\x3f\x95\xb0\x7a\x15\xae\xc7\x24\x3c\xac\x8d\xb2\x44\x65\x45\x4b\x18\xdc\x88\x93\x61\x11\x44\x6a\xed\xfa\xae\x4e\x1e\xe7\xe2\x68\x70\x81\xd1\x33\x64\xa8\x3e\x0b\xeb\x21\x09\x0e\x6b\x2b\x4d\x95\xc6\x0a\x09\x82\x83\x60\x32\x2e\xc2\x48\xed\x6a\x56\x72\x87\xc6\x20\x11\x78\xe0\xb0\x2f\xf4\xb5\x6b\x80\x03\x1e\x7c\xc4\xe5\x62\xcf\x5d\x9e\xef\x9d\x25\xc1\x3d\x78\x78\xec\x7f\x37\x35\x16\x7b\x6d\x5d\x38\x4a\x46\xea\x0e\x0e\x6c\xc5\x91\xe1\x68\x09\xc0\x55\xb8\x66\x3b\x66\xad\xc1\xaf\x20\x05\xdb\xe0\xe3\x6d\xcc\x3a\x96\xe2\xce\x3f\x04\x2f\xfa\xa7\xc2\xaf\x0f\xdd\x3e\xc7\x70\x0f\x1e\x02\x35\x05\x06\x6e\x81\x57\x6a\x20\xad\x05\xde\x75\x94\x46\x6a\x23\xbc\xbd\x0a\xc6\x0d\x83\x7f\xfc\x5d\xaa\xdc\xb9\x87\x5d\xd6\xee\x27\x30\x56\xfc\xbb\xea\xbb\xac\xf0\x11\x0f\x0d\xec\xed\xc8\xad\x1d\xf0\x9b\xf8\x3e\x8a\x3f\x0f\x92\xb6\xce\xf3\x8b\x9c\x24\x38\x9b\xc3\x83\x87\xf6\x4e\x55\xcf\x4f\xf2\xab\x6a\x99\x27\xff\xfc\xdb\xfb\x70\x51\xec\xb8\x0d\xab\xc4\xcb\x22\x6e\xc7\xed\xf0\x8b\x08\x03\x59\xf0\x43\xbf\xc9\x93\xff\x2f\x4e\xe1\xee\x3d\xf0\xc1\xfe\xd0\x28\x16\x17\x9b\x2b\x93\x4a\xbc\xd1\xf1\x67\x62\x3b\xec\xf8\x3f\x1d\x45\x26\xeb\x74\x14\x4e\x77\x65\xd3\xd8\xfb\xf2\xe0\x05\xbe\x8e\xa6\xeb\x0b\x13\xa8\x1f\x46\xfd\x37\x11\xeb\x60\xed\x1e\xd1\x1b\xd7\xe1\x5a\x28\x11\x7f\xf8\x81\xc4\x09\xe8\xbb\x8b\x05\x5f\xf4\xa2\xf0\xf2\x0e\x8c\xc7\xea\x3a\xfc\xb4\x1a\xeb\x20\x10\xc3\xa0\x26\x88\x81\x5f\x37\x43\x3b\xd4\xc2\x8f\x5a\x38\x8b\xe1\x90\x89\x6d\x07\xa5\x79\xdd\xb9\xa3\x9c\x7b\x27\x3b\xfa\xfa\x23\x56\x47\x07\xd9\x5c\x78\x6c\x87\xf6\x9e\xb7\xa8\xbd\xd7\xad\x83\x1f\x45\x6f\x58\x80\x0b\x48\x6c\x87\x70\x58\x20\x62\x38\x7a\xd1\x3b\xe0\x32\x56\x43\x3c\x7e\x1a\x8a\x75\x11\x18\x86\x81\x41\x58\xc3\xe0\xaf\x9b\xa1\x16\xdb\xe1\x47\x01\xce\x42\x26\x84\x43\xdb\x41\x19\xbc\xfe\x76\xa3\xed\x34\x2e\xc0\x05\x0e\x69\xa7\xd6\x15\x27\x56\x99\x1d\x3e\xbe\x1d\xda\x61\x8c\xe8\xad\xb3\xdf\x52\xf7\x38\xf2\xae\x23\x0d\x7f\xf9\xc8\x10\x87\xa7\x06\x33\x0b\xd3\x59\x55\x99\xce\x2a\x0a\xdd\x29\xaa\x9d\xaa\xde\x41\x65\x86\x2b\xa2\xab\xdd\xaa\x74\xf2\xab\x59\x74\xde\x9e\x03\xf3\x0c\x56\x02\x8d\x27\x38\x0f\x56\xc7\x9b\x37\x45\xc9\xbd\xca\xbd\xca\xdd\xb6\x08\x4a\x20\x08\xe2\x5d\x74\x64\x3f\x48\x71\xd5\x91\x07\x61\x38\xab\xb3\x37\x51\x6b\x02\x02\xd6\xc8\x3a\x7b\x13\xbd\xe6\x48\x40\xbb\x64\x0b\xbb\xcc\x2a\x02\xd5\x7e\xe4\x48\xbb\xac\x23\x97\xd3\xed\x01\x47\xd6\x48\xee\x6a\x12\x3c\x82\x09\xb6\x7f\x3b\xef\x7c\x2f\xb0\xfd\x0e\xf1\xae\xf6\x29\x6e\xf8\xd2\x05\x5c\x06\x03\xd7\x4b\xa6\xdc\x7c\x63\xae\x70\xa8\xe2\x87\x7a\xb9\x69\xd2\x47\xc0\x6b\xa1\x0a\xd6\xc3\x52\x28\x87\x28\x98\x84\x3c\xee\xc1\x19\xd3\xf1\x21\xc6\x8e\x9f\x7e\xed\x91\x04\x1e\xdf\x80\x3b\x78\x6a\xef\xad\xeb\x18\x87\xd4\x0c\xd4\xbc\xbc\x2c\x7f\x41\xdd\x0a\x69\x2d\xae\x1a\x89\x67\x70\xbd\x76\xbe\x75\x41\xde\x7c\xc9\xba\xa7\x34\x17\x26\x41\x6c\xda\xa9\x3b\xf0\x9e\xf7\xe4\xb6\x3f\x36\x7c\x25\xc0\x9f\xf0\x3a\x3c\x81\x0e\xf8\x0a\x8f\x42\x20\x7e\x8c\x3f\xe3\xf7\x18\xad\x92\xb2\xfb\x48\xf0\x30\x44\xea\x48\x06\x3c\x3c\xf6\x83\x87\xce\xed\x47\xf0\xe0\xa2\xed\x41\xca\xfb\xfc\xee\x95\xc3\x83\x84\x94\xd4\xec\x9c\x54\x79\xd9\xfe\x55\x07\xd6\x9e\x0c\x68\xd9\xf0\x5e\x44\x3b\x93\x99\x6b\xcc\xcd\xad\xf9\xe4\xc4\x11\x6d\xe1\x0a\xd0\xa5\x96\x4b\xf5\x7b\xd2\x0b\x42\x12\x93\xb2\x93\x84\xc8\xb8\x94\x84\x78\x79\xf5\xba\xb0\x35\xc6\x39\x4c\x0a\x6d\x9a\xd9\x3c\xf3\xc8\xb2\x47\xc8\x7d\x8b\xae\x30\x70\x2e\x13\x75\xe2\xe9\x86\x33\xc2\x95\x1f\x5b\x2e\xd7\xc8\xd6\x9a\x82\xfd\x75\xda\x1c\x73\x9e\x31\x57\x2a\x4e\xc5\x71\x0f\x63\x05\xee\x14\xfa\xab\x0d\x3c\xba\x63\x9f\xd6\x8f\x07\xcb\x98\xfe\xd6\x3d\x48\x20\x27\xff\xb9\x01\x78\xf0\xd2\xc2\x53\x38\x0c\x87\xe1\xa9\x23\xc4\xc3\xf8\x14\x9f\xa2\x33\x94\x74\xe4\x16\x37\xd5\x17\xbf\xc7\xef\x55\x5f\x14\x5b\x51\xb8\x89\x2f\xc8\xa8\x53\x87\x91\x5c\xb4\xf2\x06\x68\x49\xee\xd4\x02\x70\x03\x8f\x9d\xc0\x09\x8a\x2f\x7c\x0f\xdf\x2b\xbe\x8a\x2f\x7e\x0f\xdf\xab\xbe\xb2\x7b\x95\xf9\xf1\x88\xbf\x9d\x68\x0b\xab\xa3\x7c\x1e\x73\x49\x06\x67\x34\x99\xed\xb6\x2a\x56\x48\x66\x95\x36\x55\xcf\x97\xb3\x3a\xdb\x43\xbb\xfe\xbf\xa2\x8a\xd5\xad\x9c\x7d\xdc\xd5\xc9\xeb\x6c\x84\xaa\xa1\xb8\x0b\x86\x38\x91\xb2\x6b\xdc\x9c\xd1\xff\x09\xf6\xac\x9e\xb5\x3d\x06\xeb\xe3\xc7\x2e\xe1\x22\x58\x5d\x6d\x7a\x9b\x86\xaf\x66\x37\x88\xb2\x5d\x8f\x1a\x1e\x9e\x43\x1a\x8b\x7a\x6a\xa6\x28\xe3\xf3\xbf\xcf\x47\x7e\x4e\x1d\x65\x25\xd0\x87\xf6\x9c\x71\x0b\x73\xd9\xee\x4e\x0c\xe7\x41\x4f\x43\xb7\x08\x61\x54\xc7\x52\xbf\x83\x63\x85\x38\x43\xea\x9e\x24\xd9\x6f\xd8\x2b\x6b\xd0\x43\x40\x8f\x57\xda\x6f\x0f\x03\x3f\xf1\xda\xf5\xd2\x96\xb3\x32\x24\xa3\xb5\xe7\xf5\x4b\x77\x68\x74\xcc\xb2\xe0\xbf\xeb\xbd\x8e\x9d\x3c\x64\x41\x16\x99\x97\x97\x5d\x60\xd5\x16\x64\x16\xa4\xe5\x49\xa8\x03\x1d\x99\x97\x96\x92\x9d\x22\x24\xa7\x64\xa6\xa5\xc9\x98\xe5\xf8\x38\xa8\xd2\x52\xb2\x93\x85\x94\x1e\xa4\x0e\x75\x64\x5a\x5a\x66\x4a\x8a\x36\x39\x3b\x25\x2f\x4d\x82\xac\x1e\x3a\x27\x32\x59\x9b\xd2\x83\x74\x52\xe5\xc1\x75\xd1\x5a\x90\x9d\x97\x27\x3b\x94\x81\x93\x28\xaf\x20\xd3\x2a\x14\xf4\x20\x9d\x0a\xf3\xb2\x0b\x0a\xb4\x56\xa7\x05\x5d\x49\x90\xc5\xe3\x1c\x98\x43\x86\xd5\x26\x1e\x6a\xd6\x9e\xa9\xaa\x3f\x74\x50\xca\x89\x8e\xce\x8a\xfe\x2b\xb3\x53\x46\x0c\x5b\x8b\xfd\x04\xec\x37\xec\xf4\x9d\x11\xe0\x27\x96\x95\x59\xb2\x4a\xe5\xf1\x0f\x9c\x0c\x87\xb4\xcd\x25\x87\x6a\x6b\x1d\xa3\x45\x55\x24\x58\x8f\xb0\x4a\x67\x87\x5d\x03\x56\x57\xb0\x2a\x56\xde\xa6\xaf\x16\x75\xe8\x07\x56\xb0\x2e\x66\x95\x7e\xa2\xa2\x8f\x66\x75\x68\x80\xce\x38\x56\xe7\x76\x11\xad\xbc\x0e\x0d\x8a\x86\xfa\x41\xb4\xe9\x29\x45\x23\x42\x26\x2b\xbb\x2b\x9d\xa0\x87\xed\xec\xb7\xec\x62\x16\x2a\x59\xb4\x52\x78\xa7\xcb\x4a\xaa\xee\x14\xde\xb1\x59\x49\xb4\x52\xa0\x57\xf5\x24\xea\x51\x0f\x0d\xd4\x25\xc7\x7f\x82\xfb\xa8\x57\x46\x51\x60\xeb\xea\x04\x9b\xad\x93\x54\x46\x81\x1e\xef\x53\x97\xc0\xf1\x17\x1a\xf4\xa8\xa7\xd4\xce\x2e\x2b\x8f\x04\x58\x49\x08\xa4\xdc\xab\x23\x95\x5b\xa0\x87\xfb\x8e\xe9\xb8\x3e\x9d\x05\xbd\x6b\x99\x88\x9d\x3a\xfb\x45\xbe\xff\x1b\x8f\xfe\x78\x2c\x36\xb1\xb2\xd2\xa9\x74\x3a\x6d\xb3\xa6\xb3\x94\xbb\x05\xc2\x70\x5d\xa4\x72\x0c\xc2\xe1\x3e\xeb\x61\x06\x5f\xa5\xcd\xb9\x2f\x8e\x86\x4b\x2c\x13\xbb\xda\x74\xf6\x87\xd7\x44\xc5\x57\x69\xe3\xd5\x36\xc5\x4a\x71\xe7\x95\x36\x4a\x69\xeb\x6e\xbb\x26\x82\x13\xd9\xa9\x58\x95\x4e\xca\xbd\x0a\x59\x1d\xf9\x4b\xa6\xa8\xfc\x64\x7f\xc6\x5b\x8c\xd9\x26\x8b\xa4\x16\x80\x95\xcc\x4f\x48\x28\x88\x13\x42\x92\xc2\x43\x65\x1d\x5a\xe8\xa0\xea\xad\xfb\x13\x24\x25\x00\x13\xc8\xf4\xc2\xa2\xcc\x62\xa1\xb9\xec\x40\x93\xdc\x61\xbf\xc2\xab\xbf\xd0\x4a\x13\x56\x90\xca\x4f\xb6\x6f\x79\xb5\xb5\xdb\x45\x59\x80\x21\x64\x4a\xe9\xde\xf4\x72\xe1\x50\x45\xcd\x21\x39\x53\xe7\x56\xc4\x67\x1b\xb3\x8c\x16\x49\x3d\x02\x35\x64\x4e\x4a\x72\x56\xb2\x10\x19\xb5\x27\xc6\x20\xe3\xe7\x6a\xad\xa2\xed\x72\x27\x8f\x75\x28\xa5\xb6\x2f\x72\xb4\xee\xed\xac\xd2\x87\xd7\xd9\x09\x9d\x9d\x58\xcc\x52\xee\x4a\x35\x66\xd7\x9d\x3b\xbf\xe2\x7a\x38\xec\x58\x73\xb1\xe9\xfc\x46\x20\x60\xc8\x89\xcd\x27\x77\x1c\xcf\x39\x76\xf4\xbd\x4f\x8e\x6d\xbd\x0d\xab\x8f\x7d\x75\x19\xe6\x7f\xf9\xe0\x6b\x8f\x6f\x2e\xde\x69\xbb\x03\x43\xb1\xcf\xa1\xe4\xa6\xec\x4b\x2d\x0d\x20\xb6\xc2\xc0\x36\x88\x6a\x87\xa0\x33\x70\xff\x42\xd1\x85\x9c\xc6\xe4\xe6\xaf\xae\x6d\x3c\x52\x7d\x22\xfc\x1b\xae\x6e\xd6\x6f\x5d\x43\x39\x0f\x82\x20\xfa\x2a\xa1\x28\xf3\x45\xf5\xf1\x67\x76\xa6\xed\x48\x7b\x6b\x59\x56\x20\xc3\xb9\x39\xf0\x59\x61\x27\xc2\x0f\x17\xd7\x15\x1e\x38\x50\x58\xc5\x70\xbd\xbc\x89\x5e\x3e\x3a\x72\xb2\xa7\xa1\xbe\xec\x4c\x53\xda\xa1\xb4\xbb\xcb\x32\x03\x4d\x61\xfe\xe1\xdb\x8b\x77\x17\x06\x1f\x48\xae\x62\xce\x80\x0b\x1f\x79\xa2\xe5\xee\xa5\x54\xe6\x6a\x1a\xf4\x7b\x7d\x8e\x76\xfd\x92\xe0\x85\xe5\xd2\xba\xe2\xe9\x17\x63\x5a\x18\x9d\x7d\x83\x67\xf5\x89\xad\x77\xf5\xa9\xcc\x92\x34\x74\x26\x5f\x0d\xfe\xa0\x5c\x3a\x55\xfc\xe9\xc5\x7d\x2d\x8c\x2d\xd8\xae\xf0\x7f\x3c\x7a\x73\xe8\xd0\x37\xde\xec\xdf\x7f\xec\x17\x4f\xcb\xb2\x4a\xb2\x4b\xe5\xd0\xbd\x8d\x31\xcd\xc2\xf9\xb6\x23\xed\x32\x47\x08\x56\xc2\xd0\xba\xfb\xe0\xb6\x22\xa9\xb0\xa6\x3e\xb7\x41\x80\xcb\x10\xcc\x27\x40\x25\xe2\xfe\x57\x71\x33\x4c\xf8\x0e\x26\xef\x04\x2f\x1c\xcc\xd8\x92\x75\x38\x8c\x4f\xcf\x4b\x32\x27\xa4\x1b\xf6\xc5\x97\xc7\xef\xcd\x2d\x37\x95\xa5\xe5\xa5\xe6\xc5\x1b\xe3\x52\x62\x8b\x23\x8b\x23\x0b\x99\x7d\x69\xa5\x29\xb9\x92\x21\x2f\x22\x23\x26\x26\x32\x3b\xd2\x1c\x9d\x9e\x90\x99\x94\x9a\x94\xcc\x58\x6a\xcd\xb5\x75\xda\xdc\x7c\x8b\x25\x57\xbe\x51\x74\xf3\x74\xf9\xed\xdc\x3a\x4b\x7d\x6a\xa3\xe1\xdc\x86\x03\x9b\xf6\x66\x56\x87\x36\x85\xe4\x85\xe4\x45\x87\xa5\x45\x31\xe9\x19\xe6\x0c\x21\xd6\x18\x9c\x9e\x10\x67\x34\x1a\x33\x4d\x99\x51\x59\x91\xd9\x91\x59\x85\xf9\x85\x79\x45\x39\x95\xcd\xcd\x05\x6d\x16\x26\xc7\x9c\x9d\xad\xe5\x7a\x11\xfd\x08\xe2\x56\xd6\xd7\x95\xc7\x4e\xb5\x9f\xcf\xff\x3a\xe5\xa3\xe4\x8e\x90\xdb\xfa\xa3\x81\xd5\xab\xa2\x33\x02\x8c\x31\x99\x4b\xe3\x92\x19\x13\xc5\xb9\x11\xaf\x11\xc4\xae\xf8\x77\x2d\x1b\x73\x03\xbe\x59\xfe\xf9\xec\x2b\x58\x04\xbb\xf1\xdf\x11\xd8\xb2\x88\xe1\xf2\x09\x1f\x82\xe8\x8c\xbd\x17\xff\x49\xf0\xf0\xe4\x61\x3b\x7c\xfd\x97\x05\x2f\x0c\x58\xeb\xbf\x66\xad\xd7\xa5\x82\x0b\x45\x97\xd2\xb7\x46\xed\x0c\x0d\x0a\x66\xb8\x8b\x04\x41\x30\xc1\xa6\xe0\x9c\x18\x6b\x9c\x35\xf3\xaa\xb1\x3c\xe3\xe8\xaa\x7d\x81\x91\xfa\xcd\x21\x7e\x29\x73\x19\xae\xaf\x23\x39\x79\x4e\x81\xef\xe9\x15\x4c\x4f\x13\x38\xb6\xee\xbb\xe8\x4e\x23\xc3\x11\xb9\x84\x1f\x61\xca\x30\x67\x66\x6a\x8f\x19\x0f\xa6\x54\xec\x28\xca\x28\x4c\xb3\xa6\x46\x19\x23\x33\xa3\x8c\xa6\x2c\x63\xb6\x31\x8b\xe1\x08\x3f\xa2\x2f\x91\x58\x1e\x9c\x13\xe3\x88\xf8\x10\x0c\x91\x91\x6e\xce\x10\xd2\xaa\x62\x6a\x77\xa5\x86\xa6\x86\x04\x65\x46\x04\xc4\xad\x0f\x4e\x5a\xc9\x70\x2e\x7d\x09\x03\x91\x16\x6c\x0e\xc9\x0b\xdd\xeb\x77\x73\xdd\x8d\x24\xc6\x98\x9f\x6b\xce\x13\x42\xcd\x61\x61\xda\x24\x6b\x62\x7e\x62\x76\x74\x6e\xa4\x39\x32\x33\x66\x5f\x64\x4e\x52\x1a\x93\x92\x9e\x9e\x10\xa3\xed\x31\x23\x62\x4f\x54\x52\x6c\x12\xc3\x11\xd3\x89\xf1\x44\x5c\x41\x5c\x56\x6a\x5a\x5a\x9a\x39\x3e\x27\x36\x3e\x2e\x21\x2e\x29\x3a\x21\x37\xd1\x9c\x91\x96\x9e\x9a\x17\x53\x18\x9b\x91\x68\x4c\x34\x25\x18\xf1\x05\x78\x13\x7b\xff\x99\xc1\x70\xc4\x20\xc2\x8b\xe8\x30\x76\x1c\x6a\xba\xac\x8c\x8b\x51\xc6\x67\x2b\xe3\xcb\x1a\x97\x75\x6c\xef\xc8\x06\x22\x07\xde\x84\xde\x99\xf0\xc2\x5f\x92\x4b\x33\x4b\x32\x4a\x24\xce\xc5\xcd\xb0\x8d\x28\x2c\xcf\xdb\x97\x9e\xcf\xe0\x7e\xfb\x7c\xbe\xba\xae\xa0\x21\x44\x6a\x5b\x5f\xea\x93\xb1\x39\xfe\xdc\x8e\x2b\xf3\xea\x98\x9c\xa2\xdc\xca\x1a\xed\xe4\x21\x3c\x30\xe2\xbe\xec\xea\xbc\xe2\xe2\x5b\xe1\xcd\x93\x72\x26\x65\xec\x49\xdd\x93\x9a\x12\x19\xb1\x35\x7e\x53\x0a\xc3\x11\x06\x62\x3d\xb1\xf7\x5e\xfc\xe3\xd5\x57\x19\x60\xc4\x1e\xc9\x5b\x32\x9c\x2f\x44\xb9\x11\xe7\xfd\x6b\x5e\x8e\x18\xcd\x18\xe3\xe3\x4d\x89\x82\xa3\x9f\xf5\x22\x52\xbf\x8c\xb9\xbf\xeb\x0e\x63\x2a\xdd\x6b\x2e\x15\x74\xb6\x6f\x27\xf0\x19\x47\x4b\xfe\x3c\x7e\x82\xa9\x6f\xa8\x4f\x89\xd0\x86\xe7\x46\xe5\x18\xa4\x79\xa1\x3b\x96\xc6\xaf\x64\x5a\x06\xf3\x9c\x0f\x41\xb8\x11\xa9\x05\x69\x85\xe9\x85\xb9\xf7\x0e\xfd\x7f\x6c\xfd\x07\x58\x14\x57\xf7\x38\x8e\x83\x30\xc5\x89\x41\x65\x76\x0c\xec\xec\xcc\x68\x62\x47\xac\x68\x34\x6a\xc4\xde\x0d\x1a\xc4\xde\xc0\x02\x22\x2a\x45\x40\xe9\x9d\xdd\xa1\x33\xf4\x22\x62\x45\xec\x62\x6f\x18\x93\x58\xb0\x8b\x31\xcd\x44\x63\x34\x05\xa3\x26\x31\x9e\xd9\x3d\xb3\x7c\xfe\xcf\x2e\xbe\x79\xdf\xe7\xff\xfd\x3d\xb3\x3b\x77\xee\xb9\xe7\x9e\x7b\xe7\xce\xcc\xb9\xe7\xcc\x9c\x7b\xce\xb7\xf7\x6a\x69\x56\x61\x06\xa7\x4d\x29\x49\xd8\x96\x56\x95\x69\x6b\x53\xa6\x80\x16\x16\xcd\x8e\xf5\xa8\x18\x15\x50\xb8\xa6\x2c\xb2\x96\x86\x89\x73\xb9\xd8\xd8\xac\xec\x2d\xd2\x96\xdb\x45\x5f\xed\xba\x40\x9b\xa8\x93\xd5\x55\x05\x55\x05\xd5\xb9\xee\x2b\xc7\x85\x8d\x4c\x1e\x41\x5b\xe6\xad\xe4\xce\x9a\xce\xca\x67\x32\x4d\x53\xc3\x90\xf2\x09\xd9\x94\x98\x9a\x97\x51\x9b\x74\x23\xfd\x46\xfc\x0d\x5a\xa6\xf0\x80\x99\xe3\x60\x00\xb0\xe8\x8a\x03\x70\x20\xb6\xa5\x03\xd0\xee\xa6\xdf\x06\x07\x57\x18\x20\x41\xb4\x95\xe5\x72\x36\x17\xe3\x7b\x51\x69\xcb\xe3\xdf\xcf\xf4\xdf\x1a\x5b\x6c\x04\x97\xac\x6a\xda\x44\xdd\xc9\xba\x2b\xdf\x31\xd1\x58\x83\x8b\xb8\x45\xf1\xdd\x8c\x8b\x6a\xc2\x8b\x8a\xa0\x57\xc1\xfe\xbb\xd9\x77\xe5\x7b\x59\xb4\x89\xca\x5d\x57\x88\x43\xb6\x24\xd3\x9a\x08\xb3\xb9\x93\x39\xa7\xb2\x4f\x66\xd1\x32\x95\x3c\xc7\xf8\x41\x6a\x70\x46\x58\x82\x1c\xa5\x7c\x74\x30\xf2\xb7\xad\xcd\xb4\xad\x75\xce\x94\x63\xca\x35\xe6\xec\xc9\xdd\x93\xb3\x27\x27\x3f\xa2\x30\xb2\x24\x92\x66\xbb\x3a\x38\x26\x3a\x1c\x9a\x01\xae\x93\x72\xff\xa9\xf5\x05\x5d\xd1\x85\xbc\x2f\xf2\xea\xe4\xe2\x33\xa7\x62\x6e\x65\x9d\xcd\x3d\x96\x73\xc0\x54\xb6\x37\x37\x3a\x27\xbc\x28\xfa\xe8\xa8\x3f\xee\x1f\x00\x17\xba\x3e\x73\x5f\xc6\xbe\x4c\xba\x6d\x29\xb6\x6d\xe4\x4c\x99\x26\xa3\x29\x03\xde\x30\xc6\xd8\xb2\x84\xaa\x54\x9c\x80\xe3\x70\x12\x7a\x60\xce\x04\x8c\xff\x1a\xa7\xc2\x07\x38\x0c\xc6\x6d\x2d\xa8\x28\x36\x56\xd1\x1f\x5a\x69\x2e\x6e\xea\x94\x65\x53\x73\x68\x96\x76\xa0\x1d\x1c\x26\xe4\xf4\xbc\xbc\xf8\x5e\x12\x50\xe0\x0d\xce\x3f\x84\xd9\x9e\xb6\x76\x0e\x0e\x9f\xc5\x9c\xe9\x53\x33\x14\xde\x30\x89\xa6\x24\x63\xb2\x98\x03\x63\xb8\xe4\x6d\x09\x3b\xe3\x76\xd0\xac\x83\xb3\x43\x27\x07\xe3\x39\xf9\x5c\xd6\x39\x3a\x8b\x2c\xca\x2f\x2e\x2c\x2c\xda\x9e\xbf\xbd\xb4\xb0\xbc\xa0\x3c\xa1\x64\x4b\x51\x56\x8e\x9c\x93\x95\x03\x6f\x98\xa2\xdc\xe2\xdc\xc2\x3c\x9a\xed\xea\xe8\xeb\x50\x63\x0f\x7b\xe3\xd8\x13\x3e\x18\x83\x86\x15\xe8\xf6\x09\x76\x1a\x9f\x79\x2c\xe1\x44\xc2\x3e\xfa\x36\x7e\xc4\x99\x64\xd9\x24\x66\x51\x59\xb2\x2c\x4b\xd0\xe5\x3b\x10\xae\x43\x9f\xe3\xc7\xa3\x8f\xc5\x9c\x88\x2b\xcc\x94\xe5\xc2\x9c\xc6\xf2\x0b\xd5\xe7\x6b\xa1\xff\x72\x10\xc7\x82\x61\x94\xd6\x39\x5e\x73\x35\x6a\xae\xe5\xb4\xc1\xb9\xe6\x14\x87\xee\xf7\x50\xb8\x82\xdd\x8f\x43\xb7\xfb\xd0\xf9\x15\xb4\x07\xc7\xc2\x74\x25\xa3\x38\x93\xce\xcc\xca\xc8\x32\x8a\x5b\x92\x12\xe2\x0b\x62\x0b\xe3\xb6\xc7\x6d\x4f\x57\x92\x8a\x92\x8b\xd3\xe8\xf9\xa6\xf9\xc6\xf9\x62\x56\x56\x5c\x78\x62\x58\xca\x26\xf7\x84\xb5\xf1\x4b\x33\x57\xd0\xaa\x21\x82\x5b\x3c\xbe\xe7\x27\x13\x32\xa7\x66\x4e\x39\x11\x77\x83\x36\x2a\xa6\xa2\x62\x7d\xcd\xe3\xb3\x7f\x5c\xac\xf8\x71\x07\x78\xa3\x73\x22\x52\xb4\x8b\x5a\x67\x99\x06\xc3\x1c\x65\x7b\x90\x70\xe2\x75\x18\xf7\x6c\xdc\xfd\x81\x03\xc7\x8e\x1d\x38\xf0\xfe\xb8\x67\xcf\x9a\x9b\x9f\x89\xd6\xa4\x2e\xcf\xc6\xde\x1f\x38\x70\xdc\xd8\x81\x03\x9b\xc7\x3d\x7b\x76\xdf\x06\xab\x30\x10\x5f\x71\xd0\x09\x67\xdd\xc2\xbf\x0c\xce\x09\x95\x06\xe7\x43\x55\xd6\x8d\xf8\x3d\x06\x69\x24\xad\x3e\x37\x7b\xa9\x61\x90\xde\xda\xcc\xb7\x36\x63\xdd\x29\x68\xc2\x33\xf6\xf8\xf4\x4d\x4d\xa0\x98\x75\xf5\x6a\x04\xe8\x9a\x9a\x1c\x65\x5b\xb6\xa9\xc9\xee\x56\xcf\xd7\x76\xe4\x64\xd1\x19\x88\x46\x4e\x5d\xa6\xb6\xd7\xda\x6b\xcb\xb4\x65\xda\xbf\xa9\xda\x5e\x5d\x66\x83\xdb\x52\xa9\xa9\xcd\x43\x95\xd6\xdd\xda\xcc\x05\x93\x40\x09\x5a\x44\x9b\x05\x7e\xfd\x33\x46\x8d\xa0\x64\x46\xed\x3e\x9d\x0b\x14\x16\xef\xf4\x3f\xbc\x49\x42\x72\x02\x03\x24\x75\x78\xdb\xce\x86\xd3\x7a\x38\xc1\x98\x95\xb6\xc8\x15\xcf\xb5\x51\xda\x28\x78\x8e\xcf\xe1\x08\x03\xcf\xd5\x51\x1e\x36\xe1\x57\x8b\xe0\xa0\x5a\x10\x3d\xce\x33\x2d\x6f\x43\xeb\xbc\x0d\x37\xec\x71\x9e\x31\xbf\xb6\xea\x38\x4f\x46\x6c\xd5\x3d\x65\x54\x05\x1a\x18\x8b\xae\xfc\x3f\x76\x9e\x41\x8c\xaa\x03\x5f\xd0\x41\x57\xc1\x6e\x36\x2a\x83\x8e\xb5\x18\xa8\x44\x8b\xc2\x19\xcc\x89\x56\x05\x6a\x04\x08\x62\x38\x98\xc3\x18\xd4\xc6\x7e\x02\xab\x59\x7c\x17\x09\x06\xca\x7b\x0e\xc3\x5a\xb0\x01\x74\x9a\x8e\xb2\x69\xaf\x1c\x9c\x60\xc0\x0b\x24\xc1\xa0\x36\x2e\x61\x5a\x7d\x29\x56\x1b\x72\x6f\xfc\x13\xd1\x40\x79\x2f\x64\xc0\x8b\x02\x9a\x91\x5c\x4c\x82\x4d\x80\xe4\x8c\x82\x59\x31\xa0\x03\xc9\x6a\x06\x2a\x71\x7a\x5f\xe1\x2d\xd8\xa2\x33\x2b\xad\xba\xff\x7f\xa8\xaa\x98\x15\x4d\xf9\x1f\x28\xab\x19\xe8\x44\x8b\x6f\x5f\x41\x4b\x00\x89\x91\xd3\x19\x27\x83\x73\x88\x9a\xc4\xb5\x2a\x16\x85\x28\x4d\x88\xc9\xdf\xc2\xa7\x24\x1b\x33\x53\xa5\xf0\xa4\x98\x88\x50\xbd\xc1\xd2\x15\x36\x32\x70\x1d\xae\xc3\xa7\xda\xfc\xb2\xe0\x43\x31\xfb\xca\xdc\x61\xe2\x57\xf5\x65\x15\x87\xe2\xf6\xb9\xe3\x12\x75\x23\xa1\xba\x92\x20\x08\xb4\x8b\x35\x21\x93\x31\x2b\x30\x49\x70\xf4\x13\x9c\xcc\xcd\xd0\x97\x69\x02\xdd\x74\x12\xa7\xa0\xdb\x3c\xcf\xf1\xd2\x6f\xe3\xd1\xed\x02\x4e\xe1\xa7\xa3\xae\x89\x84\x40\x70\xf0\xc6\x3e\x92\xe6\x05\xbf\x31\x5a\x03\x85\x7d\xd0\xc1\x1b\x03\xc5\xb6\xc2\x29\xe0\x76\xe1\xb7\x7b\x92\xe7\x3d\x70\x9b\x07\x53\xf8\x36\x32\x81\xe8\xf0\x15\xf4\x91\xec\x42\xa7\x23\xa3\x7a\x51\xd0\x07\x1c\xbe\x82\x40\x9b\xcc\x9d\xc9\xd8\xed\x4c\xdb\x5e\x53\xfd\x2e\xfc\x27\xd3\x55\xf8\x2f\x58\x79\x6b\x95\xcb\x1e\x28\xa9\x61\x1d\xbd\x7d\x0c\xb4\x03\x5c\x11\x54\xdb\x15\x60\x1d\x32\xbd\x51\x67\x40\x07\x8a\x75\x0c\x74\xb0\x5d\x14\x1b\xb0\x5b\x27\x07\xd0\xb5\x2a\x24\x5b\xd3\xdb\x01\x34\x81\xf5\xa6\xbd\x41\x67\x14\x28\xb6\xc6\xc1\x07\xed\xee\x81\xd8\x6e\x0e\x5d\x51\x67\x51\x48\x5b\xd9\x11\x81\x03\x1d\xc9\x76\xa5\x1d\xb0\xad\x32\xda\xa3\xfa\x83\x8e\x63\x1d\x69\x07\x5b\x91\x43\xa6\xb7\xca\x0a\x14\xeb\xe8\xe0\x0d\x3a\x83\x25\x91\xb3\xd5\x0f\x11\x48\x76\x67\x90\x0f\xe8\xc8\x08\xa1\x8b\x01\x1d\x54\x47\xc6\x62\xeb\xaa\xce\x28\x84\x08\xad\x0a\xea\x48\xd8\x26\x80\x0f\x63\xd5\x59\x74\x1c\x2b\x52\x89\xa0\xb4\xea\xac\x8a\xaa\x43\xc5\x76\xc5\x29\x03\x26\x6a\x3a\xdb\x65\xd6\x69\x0a\x65\x83\x72\x56\x9b\x12\x79\x85\x01\x85\x74\x51\xff\x1d\x98\x23\x42\x88\x20\xc3\x0a\x41\xb6\xdb\xe1\xfe\x77\x64\x6c\xc3\xf2\xbf\x47\x2b\xec\xdf\xbb\x0a\x76\xce\x61\x1d\xbd\x09\x43\x7b\x07\xb3\xc2\xbd\x1d\xa2\x44\x1d\xb6\x1d\x78\x77\x02\x5b\xe2\xd3\xdb\x76\xe3\xda\x34\x50\x87\xf7\xbb\xa2\xae\xd5\x06\x5b\xf8\xef\xe0\xb5\x9b\xe0\x00\x3a\xab\x8e\x64\x19\xc6\x3e\x78\xdd\xdb\x25\xda\xd0\x6d\x43\x53\xe3\xe8\x6d\x1f\x4e\x87\x09\xa0\xb3\xd8\xf2\x0e\xc4\xdb\xe1\xec\xd1\xae\x9d\xdd\xd5\xd2\x11\x81\x63\xdb\xb5\xb3\x8f\x59\xbb\x09\x0e\xf6\x31\x73\x18\xe7\x60\xd5\xa9\x0a\x67\x6b\x4c\x75\x64\x48\xd6\xc1\xbb\x2b\xda\xca\xbd\x3b\x19\xd0\x01\x74\xf6\xb1\x6f\x67\xbb\x1c\x14\xdb\xdd\xe1\x7d\xdb\xb0\xe9\x5a\x15\xdb\xc4\xed\x6c\x43\xb3\x37\x66\xeb\x76\x57\x07\x6f\xa3\xd0\x85\xed\xee\x50\x03\xbf\x31\x14\xcb\x38\xf4\x6e\x55\xba\xa8\x8e\x0c\xc5\xb6\x4b\xd4\xc1\xc7\x8c\x0d\xc7\xd1\xc1\xd9\xa2\x23\xd9\xc2\x77\xd6\x86\x08\x56\x9d\xad\x79\x4d\xa7\x29\xe0\xc3\x18\x05\xd4\x81\x0f\xc3\xe6\x2f\xf4\x0c\x11\x38\x95\x15\x5a\x75\xa0\x0b\x11\x6c\xa7\x05\x57\x18\xfb\x2e\x44\x20\x5d\x56\xd9\xae\x60\x03\xb7\x5a\x10\x55\x2f\x8b\x17\xfc\x22\x18\x2c\x8d\xe0\x29\x58\xbc\x48\xfb\xa3\xae\x75\xa6\xce\x28\x17\x77\xd6\xd5\xc1\x0c\x98\xe1\x56\x57\xb7\xf3\xa2\x72\x86\x76\x09\xb1\x3d\xaf\x9f\xdb\x76\x3a\x27\x03\x11\x0d\x0a\x97\xb6\x25\x79\x4b\x6a\x2a\xce\xc4\x99\x6e\xa9\xa9\x5b\x92\xb7\xa4\xd1\x90\x05\x59\x14\xee\x03\x1d\xe7\xb7\x7c\xb9\x9f\x84\x0d\xad\x3a\xa3\x60\x14\x5a\x6d\x3c\xc4\xe2\x05\x43\x98\xb7\x0d\x29\x64\xe3\xfd\xbd\x87\x0e\x49\xb6\x06\x88\x43\x87\xf6\xde\x6f\xd4\xbb\xa8\x75\xea\x62\x98\x8b\x53\xa1\xeb\xb7\xc0\xd9\x57\x7b\x3e\xbf\x68\xee\x7d\x1f\x56\x43\x00\x64\x80\x8e\x8d\x33\x50\x5b\xd5\x03\xdc\x81\xf0\x5d\x21\xf9\x62\x56\x46\x72\x56\x3a\x8f\x9e\xd8\x15\x3c\xc9\x3c\x25\x2b\x2b\x57\xaa\xcb\xdf\xbe\xf3\xa0\x7e\x33\x04\x71\x07\xc2\xb7\xaf\xcf\x13\x33\x53\x6d\x18\x12\x72\x20\x91\x79\x05\x72\x56\x8e\xc4\x66\xee\xc9\xdb\x5e\x7b\x40\x6f\xc0\xe9\x38\x9c\xc3\x0e\x63\xfb\x62\x81\x28\x63\x3f\x19\x3b\xec\x13\xc1\x99\x5a\x73\xff\xeb\x88\x6f\xf8\x5f\xce\x5f\xfa\x4a\x82\x2b\x10\x8d\x57\x28\xf3\x52\x9c\xc1\x75\xdd\xd8\x33\x43\xd6\xe3\xeb\x98\x5e\x20\x41\x0f\x3d\xf4\x78\x09\x12\xbc\x8e\x11\xe5\x57\x19\x6f\x36\x8a\xe8\x4c\xf9\xed\x9a\xb6\x63\x44\x3e\x8d\xdd\x8b\x87\x4e\xc4\x4e\x7a\xec\xf4\x78\x22\x74\x2f\x16\x1f\xe6\xdf\xd8\x79\x61\x17\xcd\xc6\x21\x41\x99\xc3\x80\xe2\xd8\x6d\x1f\x8d\x9f\xd7\x57\xd4\x12\xd4\x02\x75\x11\xa9\x14\x9b\xf2\xf9\x47\x19\xd7\x96\x8d\xd1\xfb\x2c\x9f\x3f\x3a\x51\xcc\xa4\xd8\xb8\xc7\x69\x37\x16\x8d\xd5\x83\xce\x9c\xf3\x54\x30\xa8\x0e\x24\xeb\xbf\x41\x50\xeb\x60\x00\x03\xcf\xaf\x40\x30\x24\x43\x35\x24\x43\xb0\xca\xc2\x73\x27\xf3\x0b\x38\xc3\xa1\xd4\xd8\x1b\x78\x18\xac\x87\xc1\x2f\x80\x07\xe9\xa2\x68\x9d\x4a\xa9\x59\xf0\x82\xc3\xc1\xbd\x91\x47\x69\xae\x68\x9e\x46\x81\x34\xf7\x05\xf2\x38\x58\x0f\xc1\x5d\xe0\x6b\x2c\x87\x72\xfc\x1a\x1f\x60\x05\xda\x53\xa8\xc0\x0a\x78\x00\x5f\x43\x39\x54\xc0\x03\x51\x65\x53\x39\xfc\x13\xef\xe1\x61\xfc\x4b\xc4\x8b\x24\xbe\xc1\x93\x70\x18\xfe\x54\x5d\xe1\x24\x54\xc2\x1b\x09\x2e\x92\xf0\x17\xdc\xc3\x4a\xcd\x55\x82\xe7\x66\xfd\x4a\xe6\x1f\xe6\xa8\xe0\x51\x21\xb4\x36\x27\x32\x96\xe6\x66\xc6\xd2\x0c\x93\x05\xbb\xb3\x30\x4b\x33\x37\x9f\x69\x6d\x6e\x8b\x67\x6b\x69\x5e\xc8\x68\xf6\x69\xf4\xbf\x30\xf0\x02\x1d\x7a\xfd\x4f\x35\xf4\x02\x1d\x65\x67\x0b\x10\x01\x0d\x90\xc1\x54\x80\xb3\xab\xdc\x64\x56\x9a\xda\xde\x44\xd9\x8e\xd8\x97\x89\x06\xb2\xd1\xd2\xcc\xa9\x3a\xab\x2f\x61\x55\xc8\x56\x9d\xd9\xf7\xdf\x8c\xc1\xf9\x98\x45\xc7\xa9\x09\x41\x82\x96\x40\x7e\xb5\x71\x62\xe3\x87\xfc\x87\x13\xfd\xbc\x37\x4a\x5a\xc2\x20\x46\x4d\x20\xab\xe7\x9e\x58\x76\x31\x9a\x36\x58\xfe\xd1\x5e\x6f\x60\x60\x0a\xc3\xba\x3a\x0c\x63\xd8\x5a\x87\xd5\x8c\xf6\xda\x40\xbc\x43\x5e\xac\x3e\x71\xa2\xfa\x22\x8d\x53\x63\x38\xf8\x91\x59\xb6\x66\xcd\x32\xc9\xd2\xdc\xea\xcc\xc9\x14\xac\x67\xc0\x24\x88\xec\xcb\x44\xf8\x10\x0e\x3f\x04\x7f\xc9\x80\x0e\x5d\x58\x57\x07\x58\xcf\xd8\x80\x26\xe1\x2d\x5c\x74\xe9\xce\x68\x7b\xad\xf3\xb9\xb0\xe4\x2d\xe1\x1b\xf5\x6d\x6e\x82\x61\xe9\x18\x58\x8e\x5b\x35\x47\x7d\xab\x42\xaa\x8e\xb0\x1c\xb6\xc2\xd2\x07\xe2\x73\xa6\x3b\x83\xba\x2e\xcb\x32\x97\xa7\xf9\x8b\xad\xc9\x64\x5a\x43\xe6\xf1\x13\x7a\x8b\x62\xb0\x38\x70\xad\x0a\x09\x08\x0b\xa1\x0a\x16\x7d\x27\xc2\x16\x12\x16\x8d\x84\x85\x58\x85\xa8\x77\xb1\x57\xc2\x9e\x6b\x91\x9b\x87\x8e\xa2\xf5\x77\x72\x1e\x38\xae\x05\x0e\x7a\xea\x2d\x8b\x0c\xe8\xcd\xb5\xbe\x4f\xde\x87\xb9\xe0\x0e\x02\xb8\x5f\xa4\x6d\x75\xdd\xe7\x82\x3b\x0a\xf7\x71\x2e\xfd\xff\xd5\xbb\xc7\xc1\x3f\x4d\xbe\xeb\x41\x5b\x7d\xc8\xbb\x2d\x3f\xdd\x7a\x5c\x4f\x3f\x67\x50\x01\xdf\x47\x91\x06\xc2\x1b\x7c\x7f\x66\x0c\xc4\xa3\xe9\x7f\x32\x06\x4b\x6d\x13\x67\x70\xd6\xc8\x68\x78\x8a\xbb\x61\x2a\xce\x00\x17\xb0\xfd\x77\xc3\xd4\x6a\x78\x4a\x1b\xd0\x99\xac\xc6\xa7\xb0\x1b\xa7\xc2\x0c\x74\x41\xdb\x7f\x37\x4e\x8d\xc6\xa7\xb4\x81\x58\x6a\x20\x1d\xfe\x64\x5c\x42\x04\x8b\x33\xe8\xea\x41\x37\x1d\x74\x1e\xf6\x75\xa1\x5d\x05\x88\xa8\x97\x41\xd7\x52\x0f\x4a\x3d\x44\xd4\xb7\xb4\x89\x29\x4f\x22\xd8\xcb\x11\x66\x05\xae\x08\xb9\xb9\xb2\x29\x4f\xba\x99\x7a\xc6\x67\x8a\x1e\x5d\xea\x6d\x3c\xb0\x29\x02\xb6\x31\x85\x85\x26\x53\x81\xd8\x98\x78\x70\xa1\x9f\x1e\x3b\xd7\xd7\x53\xec\x13\x1b\xb8\xe9\xcc\xbc\x19\x22\x9a\xa8\xd0\xcc\xd0\xd4\x30\x91\xfd\x49\x45\x07\x6d\x0a\x91\x1a\x96\x19\x1a\xaa\x0f\xa3\x3c\x19\xd1\xaa\x23\x03\xd7\xef\x39\x70\x34\x69\xdf\xfa\x3d\x12\x5e\x83\xb3\xc4\xa6\x6d\xf1\x7b\xf6\xea\x21\x82\x82\x6d\x8c\xc8\xde\x8b\xb0\x91\x90\xd0\x9b\xaa\x0f\x21\xd4\xb1\xd4\x7f\x68\xf6\xb7\x37\x7d\x39\x02\x68\x46\x04\x9d\xf3\xb4\x99\xe1\x4b\x17\x4b\xec\xbd\x88\xb2\x75\x6b\x0b\x82\x78\x74\xed\xd6\x07\xd9\x14\x29\x2b\x3d\x5d\x4e\x53\xdf\x11\x30\x82\x9a\xba\x67\xfa\xe9\xa5\xb6\x1e\xc0\x15\x3c\x4b\x60\xbb\x6f\x06\x02\x29\x9a\x75\x64\xba\xb0\x5d\xae\xcd\xdf\x2e\xd9\xfa\xeb\xa8\x4e\x21\x0a\x0f\xe4\x1d\x3a\xa8\x07\x13\x05\xee\xdd\xa0\x1d\xea\xa3\xa2\x8c\xe9\xd1\x22\xdb\x14\x71\x7d\xe9\xb8\xc3\xa3\xf8\xe5\xcb\x13\x36\xad\x96\xd8\xcb\x11\xfb\x96\xcf\xab\x9c\xcb\xdb\x9d\xa5\x46\x33\xa0\xd8\xbf\xf5\xe8\x64\xb5\x93\x6d\x00\xff\xf3\x03\x1d\xfb\xf7\x23\xb6\xe5\x91\xc5\x19\xfa\x32\x57\xcf\x2d\x98\x29\x59\xbb\xd7\xab\x3b\x28\x16\x1e\xc1\x36\x3b\x40\xd4\x76\xd4\xc3\x0e\xea\xdf\x5c\x3a\x15\x65\x8c\xca\x8c\x16\xc7\x68\x7d\x88\xa5\xc9\x01\x6b\x97\xf0\xd6\x09\x64\xc0\xaa\xea\xfa\x70\x09\xfe\x61\xee\x7c\xfe\xc5\xdd\xa3\x87\xa3\x83\xb7\x8b\xd0\x1f\x57\x10\xa0\x50\xea\xff\xd4\xdd\x51\x6f\xee\x4e\xb1\x2d\x36\xd2\xb6\x21\x19\x34\x7c\xfe\x47\xfe\x12\x0b\x8f\x72\xe2\xe2\xb2\xe2\xd4\x77\x04\x6d\x12\xb5\x3d\x70\x7e\xd1\x0a\x1e\xdf\x47\x12\x29\xec\x06\xd9\x8c\x79\x02\x09\x0e\xbf\x7e\xfd\x4f\xb5\xf4\x40\xed\x4d\xe4\xed\xca\xd9\xbd\x5b\xaf\xa6\x53\xd0\x15\xdb\xbf\x41\x29\x45\xac\xa4\xc0\xcd\x1e\xd2\xd3\x2d\x2e\xce\x94\x19\x27\xb2\x2d\x8f\xbe\xf7\x1f\x7e\x7e\x10\xef\x52\x63\x9b\xcc\x76\x6f\x80\x11\x82\x6d\x86\xa8\x07\x9d\xed\x74\x0b\x40\x07\xd9\xb6\x73\xaf\xaf\x87\x06\xd0\xb1\x17\xce\x5a\xbe\x40\x1d\x77\xed\x5a\x61\xf9\x65\x09\x7e\x79\x44\x00\xb9\xfb\xbb\x3f\x81\xd1\x9b\x07\xaa\x0c\xa3\xf5\x20\xad\x34\xa4\x10\xc5\xeb\xd7\xe5\xaf\xe3\xfd\x99\x6e\x37\x3c\x5e\xac\x96\x4e\x6c\x21\x90\x20\x81\x15\x20\x5a\x80\x6e\x12\x94\x91\xe9\x49\xf2\xc6\x44\x3d\xfb\x63\xec\x80\xc6\x0f\x1f\x06\x88\xe9\x54\x60\x61\x60\x79\xb0\xe8\x71\xfc\xdb\xa5\x7f\xf3\xa0\x33\x2f\xe2\x7c\xa9\x29\xa7\x7d\xae\xc7\x89\xf8\x0c\xfb\x13\xa9\x71\x31\x99\x31\xfc\xcc\x05\xe7\xae\x9e\xd8\x79\xf4\x68\x95\x04\x1f\xde\x27\xd4\x0d\x98\xca\x2d\x0b\x0d\x08\xd8\x2c\xe2\x6b\xf4\x22\xd2\x93\x62\x32\x12\xf8\x29\x4b\xce\xdc\x78\x70\x65\xfb\xe5\x5d\x12\x1c\x07\x37\xa2\xa0\xac\x22\xa7\x82\xb7\x5f\x27\x8c\x35\xa7\x72\xb7\x49\x74\xea\x41\xac\xdf\xb8\x65\x65\x80\x1e\x17\x52\x18\xd7\x8d\xd0\xea\xc9\x09\x73\x3e\xbf\x2b\xb1\x3f\x9e\xb5\xdd\x79\x66\x5d\x13\xa9\xd5\xc2\x62\x62\x61\xf5\xda\x33\x8d\xfa\xbb\x5f\x7c\x7e\xa7\xa2\x3c\x33\xbd\x5c\x64\x7f\x8c\x55\xc1\x80\x34\x37\x90\x84\x6b\xd0\x8d\x38\x5f\xbb\xef\xc2\x25\x3d\xfb\xe3\xd9\x3b\xf3\xaf\x4c\x2c\x16\xd9\x0b\x67\x0f\xec\xda\x76\xec\xa4\x1e\x56\x06\xe3\x4a\x6a\xd6\x02\xdf\x99\xb3\xe6\x9f\xba\x2a\xc2\x59\x6a\x6f\x69\x5d\x6d\x8d\x08\x06\x70\x25\xe0\x0a\x09\xef\x32\x92\x75\x20\xe5\x13\x30\x7f\x4e\x9c\x88\xbf\x0c\x23\xe2\x17\xf8\xa5\xcd\xe3\xdb\x6c\x92\x74\xaa\xee\x77\xfb\xed\xa6\xbb\xc0\x58\x74\xf0\xcc\x26\x9f\x27\xc0\x56\xa6\xf5\x53\x72\x2f\x23\x05\x53\x53\x6b\xa7\x1d\x9b\x2f\xa2\x5b\x31\x38\xf5\x00\x77\xde\x3c\x8e\x5c\x81\x3a\x42\x1b\x5e\x24\x04\xc3\x49\x41\x54\x8f\x93\x70\x04\x3f\x20\x70\xa2\x3d\xa7\x23\xa1\x95\x01\xa0\xa0\x8b\x3f\x74\xfe\xf8\x6f\x51\xbb\x6d\xde\x46\xdc\x58\x34\xfa\xc8\x47\xbc\xb9\xc8\x60\x6e\xb4\xa9\x35\x9a\xee\x29\x03\x0b\xa8\x83\x91\xfb\x82\x2b\x45\xbc\x03\x83\x89\xbc\xe4\xa4\xec\x24\x5e\xfb\xe2\x29\x53\x4f\x3d\xb9\x77\xef\x89\xa8\x7e\x42\x36\x1c\xda\x75\xa4\x54\x6a\x02\x5f\x22\x47\xc9\x2e\x2e\xd2\x2f\x16\x06\x92\x56\x1d\xf9\xc9\xdc\xe3\x5f\x26\x4a\x19\xd5\x59\x5b\xab\xf5\xbf\x08\xe6\xe6\x7a\x6b\x33\xb9\x62\xf5\x06\xff\x78\x29\xf0\xb8\xe9\x50\xa3\xfe\x17\xc1\xf2\x29\xd9\x70\x38\x2a\x78\xbb\xa4\xde\xb1\x6e\x23\x2e\x8f\xd8\xd7\xb3\xa7\xbe\xed\x54\x27\x09\xe6\x09\xa0\x5b\x64\x53\x9d\x88\x4e\xa0\x83\x54\xd0\xb1\x3f\xa8\xcb\x50\xe1\xcc\xd3\xc8\xcf\x2e\x56\xed\x3b\x21\xa9\xb9\x6a\x27\xe2\xc6\xb9\x86\x6f\x7e\xd4\x43\x57\xa4\x81\x40\xe9\xfd\xd9\xb3\x3f\x19\x29\x42\x47\x55\x21\x72\xb7\xe6\x6c\xad\xd6\x43\xc7\xc1\x7f\x63\xc7\x32\x11\xe8\xe8\x3e\x8f\xf1\x1d\x1e\x9d\x3c\xc6\xa0\x43\xa8\xd4\x5d\xf3\x1e\x0e\xaf\x08\xf6\x05\x38\x84\x7a\x3c\x40\x27\x1e\xe9\xbe\x23\x91\xd8\x24\x61\xc7\x78\xcf\x1e\xd8\x49\x1f\x9d\x1d\x9d\x17\x2d\x02\xad\x85\x12\x79\x9b\xe4\x4d\x11\xfa\x35\x79\xab\x0b\x03\xc5\x57\x5a\x0f\x82\xfd\xa1\xd7\x8e\x9f\x27\xfe\xc5\x9b\xdd\x8f\x0a\xdc\xf5\x53\x7e\x33\x92\x4d\x49\xc6\x64\x09\xfb\x5a\x9d\x89\x9d\x24\xd0\x6a\x24\x71\xae\xe4\xe4\xc1\x0b\x7c\xd3\x69\xbf\x99\x49\x46\x5b\x59\xd2\x72\xe4\xb4\x5d\x29\x7a\x8c\xa2\xe0\x32\x6c\x21\x2a\xb7\xed\x52\x76\xf3\xb7\xbf\xf0\x9d\xb8\x7c\x93\x7f\x50\xa8\xa4\xe5\x6a\x1d\x89\x2d\x9b\x36\x26\x6f\xe4\xad\xd3\xc8\x65\xab\xea\x8e\x27\x4a\xbd\xd4\x1e\xb1\x5f\x14\x7d\x11\xf7\x85\x3b\xd2\x6a\x18\x61\x2c\x34\x29\x8a\xfe\xea\xf9\x73\x57\x2f\x9c\x5c\xb9\xb0\x44\x7c\xa1\xf5\x23\x76\x92\xe8\xa6\x9e\x20\x8c\x8a\x49\x29\xd2\xb3\x2f\xae\x9e\x39\xdf\x74\xfe\xe4\x9a\x05\x25\x22\xf4\xd0\x5e\x10\xc0\x92\xec\x0f\x30\xdc\xfc\xb1\xbd\x3b\xe7\xff\xc3\xba\xea\x6d\xc3\xaa\x1b\x09\x3a\x78\x6d\x63\x5e\x4a\x7d\xb0\x9d\x75\xa1\xaf\x9d\x85\xf9\x82\x8e\x7d\x5a\xc9\x3e\x5d\x67\xd6\x41\x5f\xa6\xf9\xb3\x99\xe3\x25\xed\x66\x7d\x8b\x4d\xc9\xb4\x65\xc4\x41\xf5\x4d\xff\xb2\xe4\x59\x14\x7b\xa3\xb2\x9e\x5c\x2d\x7c\xd6\xb0\xc8\x4f\xc4\x10\x6a\x5a\xca\xb4\x98\xe9\xe2\x00\xcd\xf9\xad\x3d\x8c\xd5\xff\x2d\x2b\x63\xef\x57\xc2\x3f\x0c\xfb\x4b\xe5\xed\x4b\x5f\xde\x39\x76\x34\x72\xed\x0e\x11\x3c\x70\x29\xa1\xea\x28\x55\xa1\xde\xb2\x74\xa8\x17\xb4\x13\x54\xed\xca\xa5\x25\x4b\x78\xec\x8a\x24\xd2\xd8\xd5\xc6\xb1\xfc\xc9\x27\x5f\x5f\x7e\x54\x23\xfd\xa2\x3a\x13\xec\xd3\x75\xd5\xf7\x95\x07\x5f\xe9\xd9\x5f\x2a\x21\x84\x82\x4e\x7d\x5e\xa3\x6b\xf4\x66\x1b\xc7\xfe\x6c\xe9\x94\xfa\xf1\x7c\x50\x50\x6a\xdc\x3a\xe9\xc4\xe2\x59\x3b\xa6\xf1\x89\x49\x26\x53\xa2\x04\x1b\x29\x78\x1f\x09\xe8\x80\x1f\x88\x6d\xaa\x55\xb0\xaa\xab\x27\x41\xd1\x74\x5c\x30\xc9\xde\xaf\x54\x75\xf5\xb6\x13\x69\x03\xa8\x3a\x92\xfd\xa5\xb2\xde\x1e\x81\xaf\xc1\xc6\xd5\x22\xea\x21\xbb\x8d\xcf\x45\xd8\xb8\xde\x47\x36\xd6\xaf\xdb\xb0\xdb\x4f\x60\x21\x82\xc5\x08\x03\x41\x5b\xde\xe5\x58\x78\xfd\x30\xe0\xc3\xc6\x01\x7c\x4c\x8c\x31\x33\x46\x82\x32\xaa\x56\xf0\x67\x44\x24\xa8\x2d\x27\x88\x17\xab\x3d\x6e\x74\xe3\xfd\x99\x75\xf9\xeb\x8a\xd7\x4b\x90\x62\xa5\x09\xad\x07\x95\xca\x88\xe6\x81\x24\x30\x7f\x7e\x07\xe4\x6e\xe9\x11\xfc\x42\x94\x5f\x2e\xbc\x76\x4d\x0f\x13\x29\x16\x23\xfe\x5e\xfa\xad\xc7\x71\xb1\x62\xed\xea\x82\xd5\x3c\x0b\xeb\x70\x5d\x01\x67\x63\x53\x31\x99\x31\xa9\x71\x12\xf6\xc7\x67\xc4\xf5\x38\x9f\xd3\x53\x78\x5f\xf2\x2e\x0c\xb8\x0f\x1f\x12\x47\xab\x8e\xee\x3c\xc1\x43\x28\xf2\xdc\x8d\x33\x4b\xa6\x24\x64\xc4\xa4\x27\x49\xe8\x85\xaf\x89\x80\xcd\x01\xa1\xcb\xec\xdc\xb1\x22\xa7\xa2\xa0\x4c\x02\x37\x38\x4e\x5c\xde\xb5\xfd\xca\x03\xde\x80\xe1\x80\x9c\x6d\x92\x69\x3c\xb3\x76\x61\xb5\x08\x8b\xb5\x5a\xa2\xc9\xac\x23\x81\x66\xe0\x5d\x46\xd4\xea\xa9\x6e\x18\x47\xe0\x42\x92\xc5\xe7\x01\x2b\xb7\xac\xdf\x28\xf5\x40\x27\xe2\x36\x85\x59\x66\x91\x48\x2f\xcf\x2c\xaf\xd0\x5b\x0e\x19\xb0\x2b\x67\x1d\xd8\xc6\x26\xe1\x0a\x05\xae\x60\x20\x6a\x6b\xea\x4a\xf7\xf2\x70\x96\xbc\x7a\x6a\xfe\xac\x99\xbe\x0b\x66\x49\xb8\x32\x98\x64\xe1\x35\xac\x24\x4f\x1e\xdb\x76\x60\x97\x34\xb1\xf8\xca\xfc\x3b\xfc\xa5\x0b\xfb\xce\xd7\x4a\xd0\x0d\xae\x11\x03\xa9\x79\x69\x7e\xf1\x0b\xc4\x61\xf8\x0b\xc1\xe2\xf3\x39\x71\xf3\x03\x7c\x78\x17\x58\x5a\x13\x69\x7e\x04\x53\x1c\xe1\x21\x2c\x74\x32\xff\x61\x89\xe0\xaa\x62\xcb\xb6\x88\xd6\xfd\xbd\x19\x6c\x4f\x6d\x59\x22\x88\x70\xce\xda\x08\xc7\x05\xe0\xc9\xca\xb2\x2c\xc1\xdc\x08\xe7\xa9\xca\xf2\xb2\x4a\xc9\x52\x0b\x1d\xb8\x0a\x53\x5c\xe9\x16\x1e\xbb\x91\xf1\x89\x29\x89\xe9\x12\x86\x6a\x95\xa9\x31\x69\x9b\x53\xb7\xb8\xa7\x55\xa6\x56\xa5\x56\xe0\x46\xb5\xd2\xad\xd8\x6e\x88\x84\xef\x93\x31\x71\xf1\x31\x26\x69\x74\xeb\x5c\x22\x39\x27\x25\x3f\x55\x6c\x73\x94\x0e\x3c\x59\x51\x56\x5a\x91\x25\x9d\x54\x7f\x02\x1f\x6d\x0c\x91\x90\x5f\x9c\x5a\xc2\x43\x07\xb2\xb4\xb8\xa0\x24\x4f\x82\xd9\xea\xe8\x53\xda\x23\x22\x26\xab\x2c\xbe\x82\x07\x3d\xa9\x14\xc2\x64\x26\xbf\x20\xa7\xd0\xa4\xd8\x43\x4f\x81\x97\xfa\x17\x4c\x85\xfd\x30\x05\x22\xe0\x99\xa0\xea\x60\x21\x34\xc2\x12\xd5\x1d\xbc\x9c\x2c\xbb\xcc\xf7\xb9\x41\x0b\xe6\x0d\x11\x71\x18\xec\x87\x8e\xe4\xed\xdd\xa9\x89\x5b\xa5\xa3\x9b\xb6\xfa\xcf\xd6\x5f\xc0\xc3\x5c\x66\x7e\x66\x5e\x66\x1e\xfd\xfc\xcc\x95\xbf\xa1\xa3\x1e\x0c\x13\xc1\x09\x89\x63\x62\xf9\xca\x25\xca\xfb\x3c\x9e\x6e\x5b\x82\x06\xfa\x0f\x05\xf8\x0b\x06\x50\xe0\xa7\x39\x12\x89\x79\xc5\x69\x25\x3c\xf4\x23\x8b\x8b\xf3\x8b\xf2\xa4\x7c\x45\x2e\x49\x2f\xa2\xb5\x5e\x06\xe7\xc3\x6f\x04\x8b\xce\x1a\xc1\xfd\x1b\xee\xc8\xde\x3b\x03\xd1\x08\xcf\x04\xdb\xde\xcb\x49\xfd\x13\x2e\x71\xea\x3b\x0c\xf4\x82\x1e\xb0\x00\xdc\x05\xdf\x4b\xc3\x61\x1d\x53\x64\x2c\x4a\xcb\x4d\x3e\x39\xc2\xad\x20\xd1\x18\x9b\x92\x44\x67\x64\x0c\xee\x85\xc3\x79\x33\xd3\xc5\x86\xdb\x1b\x7a\xc0\x7c\x70\x17\xe6\x5e\xfa\x10\xd6\x31\xc5\x46\x25\x2d\xcf\x86\x9b\xff\x1f\xdc\x21\xbd\x70\x04\x8f\xbf\x58\xbe\x78\x23\x80\x57\xdb\x7b\x3a\x17\xa8\x0b\x36\x10\xde\x8e\x4d\x06\x2a\xd1\xc9\x1c\x61\x8e\xe0\x3c\x3c\xe0\x18\x1e\xc5\xb9\x38\x57\x8b\x50\xed\xdb\xbd\xf1\x2d\x2d\x38\x0a\x46\x59\xbd\xac\x5e\x66\x2f\xab\x17\x5c\x61\x08\xf0\xb5\xf8\x72\x9a\x4e\x25\x04\x4d\xd7\xd2\x82\xc7\xe0\x28\xcc\x85\xb9\x6a\x84\x66\xdf\xc6\xdf\xf3\xf0\x80\x51\x38\xca\xec\x65\xf6\x22\x5c\x8e\x33\xe6\x15\x30\x8d\xd3\x16\xaa\xf6\x0d\x58\xd4\x79\x79\x05\x1c\xc5\x7a\xac\x87\x7a\xac\x6f\x69\x41\x5f\xf8\xf4\xc9\x13\x42\xa6\x6c\x59\xe2\x27\xac\xe0\x90\x05\xf6\xa7\x27\x47\x03\xc0\x8e\x01\xf5\x1e\x1e\xe0\x8b\x9f\x12\x32\x35\x64\x08\x21\x53\x36\x08\x6c\x87\xed\xea\x42\x6d\x21\x01\x15\x19\x5c\x2e\x33\x50\x10\x5d\xd4\xba\x35\xe0\x34\x3b\x12\xaa\x1f\xbd\x80\x4f\x5e\x3c\xfa\x1c\x36\x7f\x00\xce\xd0\xee\x77\xd7\x3c\x70\x86\x09\x8f\x1f\xc1\x27\x40\x3e\x82\x39\xe0\x2c\x83\x33\x4c\x7f\xf4\x08\x7c\x80\x78\x0c\xd3\xc1\x99\xdd\xff\x6d\xa3\x59\x52\x0f\x72\xe7\x57\x1c\x9b\x3f\x6f\xc5\x8a\xf9\xf3\x8e\xad\xb8\x70\xfe\xd8\xb1\x0b\xa2\xc1\x39\x39\x8b\xbb\xb0\xa2\x61\xde\xbc\x15\xfe\xf3\x6c\xd0\x0b\x36\x68\xeb\x0e\x13\xd7\xd5\x6b\x68\xb7\xae\x43\x1f\xbf\xf9\xe7\xf1\x4f\x6f\xfe\xf9\xc9\xab\x9b\x68\x70\x4e\xca\xe2\xba\x0e\x85\x57\xc2\x63\xaf\x6e\x62\x6b\xa3\x89\x03\x4f\xec\x04\x9d\xb1\x3f\xf6\xc7\xce\xd8\x19\x3d\xb1\x3f\x74\xc6\xce\xd0\x1f\xfa\x43\x27\xe8\x0c\xfd\xdb\xa8\x43\x7f\xec\x0c\x9d\xb0\x3f\x7a\xda\xe3\xf7\xf5\xb7\x63\x75\x02\x4f\x91\x75\xa2\x1d\xa0\x3f\x74\x86\x4e\xd0\x5f\x62\xd3\x12\x1d\x5a\xe7\x67\x72\x58\x88\x01\x18\x80\x85\x22\xeb\xed\x90\x88\x05\x18\x00\x01\x50\x08\x85\x60\x4b\x0b\x6c\xa9\xad\x50\x32\x0f\x54\xef\x70\x78\x35\x19\x65\xcc\xc7\x26\x3d\xdc\x51\x3b\x0b\x78\x27\x4b\xbc\x0b\xc3\x61\xf9\x11\x58\xc1\xb3\xa9\x0e\xde\xb0\x02\x66\xad\x1c\x0f\x23\x24\x35\x5c\xbb\x63\x23\xec\x6f\xab\x6b\x6b\xc0\x46\x53\x64\x93\x33\xbd\xdf\x12\xb6\x35\xe0\xdf\xd6\x6a\xb2\xb3\x03\x56\xab\xd7\x38\x78\x0f\xe7\xe3\xd6\x87\xf8\x25\x8f\x5f\xe2\xe1\x11\xf8\x1e\xce\x97\x34\x47\xf2\xf2\xc4\x13\x9e\xc5\xd3\xe8\x49\xfd\xfc\x91\x46\x57\x3d\xde\x81\x22\x54\xe0\x36\x4c\x81\xa1\x0f\xa1\xcb\x6b\x3b\xd1\xe3\x0b\xee\xf6\x2c\x5b\x4f\x3f\x84\x8e\xa7\x2f\xc9\x7a\xe4\x5e\x83\xd7\x08\x98\xc2\xc3\x6d\x28\x02\x05\xee\x80\xab\x3f\xd0\x93\x7e\x97\xd8\xe1\xe1\x89\xc5\xd7\x4f\xfc\x76\xf9\x0e\xed\xa2\x25\xc0\x4e\xd8\xf8\xea\x68\x3a\x6c\x51\x3f\x85\x2d\xae\x30\x0b\x62\xd4\x39\x10\xc3\x8e\x32\xeb\xcc\xed\x39\xc8\xb1\x07\xf6\xcf\x81\x5c\x5c\x0e\xcb\x30\x07\x73\x70\x39\x2e\xc3\x5c\xcc\x81\xe5\xb8\x0c\x72\x24\xf3\x08\x67\xe8\xf8\xb2\x17\x76\xc2\x8e\xbd\x7a\x61\x47\xec\xd8\xeb\x25\x74\x84\x4e\x2f\x5f\x42\x47\x89\xfd\x5e\xdd\x6a\xdd\xc8\x85\x9e\x9f\x70\xdc\x73\x2c\x2d\x23\xdb\x13\x57\xe0\x0a\x64\x5f\xc9\xa2\xe7\xfd\x09\xcb\x43\xe7\x2f\x1b\x74\x6e\x39\x90\x63\x9f\xcf\x04\x7d\xc4\xe3\xe4\xf1\xe3\xdd\x7a\xf4\xec\xdb\x67\xf2\x64\x7f\x7f\x79\x6a\x43\x40\x49\xbc\xdb\xd1\x80\x1b\x72\xc3\x51\xd8\x0a\x35\x6e\x7f\xf6\xf8\xa3\xcf\xcd\xc9\x0d\x76\x40\x49\xa9\xdb\xd1\xa3\xf2\x8d\x80\x06\xdc\x0a\x5b\xdd\xc6\xdd\xfb\x49\x01\xb7\xed\x2d\x57\xdc\x81\xbc\x7f\xee\xf8\xb2\xa7\xb4\x4b\x88\xa0\xd6\x3f\x37\x1b\x40\xf7\x33\x63\x19\x62\xf1\xe1\x9e\x4c\xb8\x3b\x64\xc8\x84\x09\x43\x86\xdc\x9d\xf0\xe4\xc9\xdd\xbb\x4f\x44\x58\x8b\xff\xc7\xd5\x4f\x5f\xb3\xee\x23\xbf\x49\xcb\x3c\xb7\xcc\x4c\xbb\x30\xcf\x0d\x3e\xc5\x39\x7b\xd6\xcb\x8b\xd7\xaf\x77\x4f\x4e\x5e\xbf\x7e\xb1\xbc\x7e\x8f\xfb\xc2\x33\x13\xef\x8c\x6f\xc6\x4f\xf1\x53\xb7\x36\x48\xb2\xe2\xb6\x7e\x8f\x7c\x7a\xcf\x9e\xb3\x67\xee\xdc\xb9\x77\xef\xfc\x05\xb7\x59\xf9\x1e\x95\x93\x4e\x7c\xd4\xb8\x66\x6f\x7d\x53\xd5\xc1\xf3\x7b\x6f\xfa\xd1\xf2\xb3\xf1\xd0\x13\x7a\x3e\xbb\x27\x8b\x37\x1b\xcf\xaf\xab\x5a\x43\x2f\x84\xff\xe3\x70\x32\xf6\xc0\x1e\x38\xd9\x96\x42\x0f\x98\x0c\x93\xe1\xdf\xd4\x06\x17\x55\x1f\x18\xde\x55\x98\x8f\x3a\x1f\xc6\x55\x86\x5f\xf0\x17\x03\x79\x12\x7f\x86\x9f\xd9\x1a\xf6\xb6\x81\x14\xec\xf6\x4f\x09\xe4\xb0\x09\x13\x86\x49\x5a\x05\xa5\x85\xab\xac\xe6\xaa\x86\xa9\x1b\x55\x56\x75\x55\xc3\x45\xb5\x82\x7a\x3c\xf9\x8e\x97\x68\xf5\x6d\x3d\xcb\x85\x84\x94\xd4\x44\x4a\x5a\x1f\xd5\x8d\x88\xd8\x16\xbf\xb7\x5e\x7f\xbd\xb1\xf1\x7a\xdd\x9e\x84\xc8\x6d\x22\x3c\xc0\x6b\xf0\x00\xae\x11\x35\xdb\xf6\x94\xec\xe5\xaf\x37\xfa\x4d\x0b\x8e\x5b\x17\xb1\x49\xd2\x7a\x6b\x6e\x44\xe4\xa6\x90\x84\x10\xde\x45\xad\x33\x10\x5e\x67\x17\x9d\x73\x95\x0d\xed\x1d\xd8\xe5\x6c\x8d\x81\xf8\xaa\x3b\x27\x9f\x95\x65\x11\x3e\x51\xc7\xc0\x01\x73\xf7\xa7\xb0\xf2\xc8\x93\x2b\x17\x5f\xe5\x64\x9d\x70\x63\x97\x9b\xb2\xb5\xe5\xb9\xc4\x16\x39\x2a\x5e\x7f\xc4\xf4\x72\xf3\xde\xe1\xda\xcc\xd6\x6c\xb7\xc8\x73\xb8\x42\x5d\x1c\xf1\x05\x04\xa9\xb3\xdc\x4e\xdc\xfa\xf1\xf8\xf7\x39\xf4\x59\x6a\xb9\x09\x53\x65\xf4\x32\x99\x12\xb2\xc2\x4d\xf1\xd0\x39\xf3\xd4\xfa\xe0\xb1\x34\x5b\xb3\x08\x89\xf7\x71\x4d\xd4\xca\x19\xe0\xb6\xe2\xd5\x64\xe8\xbe\xee\xc6\xcd\x9d\x77\xb2\xe9\xd3\x94\x56\x94\x45\xb0\xcb\x23\xe5\xf8\x18\xfd\x5d\xd3\xef\x69\x07\xa6\x9f\xf7\x84\xa1\x5a\xa7\x73\x3d\x66\xe0\xbb\xd8\x1f\x8f\xcc\xed\x3a\x0a\xc6\xe1\x69\xf3\xb8\x51\x30\x39\xe8\x2b\x78\xf7\xc4\xed\x5c\x9a\xad\x39\xa7\x7d\x47\xc5\x66\x85\x25\xea\xd9\xe5\xbf\x65\x81\x80\x03\x1b\x3c\x60\xb4\xd6\x15\x26\x6a\x06\x18\xad\x49\xb4\xa9\xd1\x94\x95\x25\x82\x13\x44\x01\x07\x29\xd0\x1e\x36\xc3\x19\xeb\x74\x37\xdb\x8c\xd1\x62\x8e\x02\x17\xf3\xfb\x51\xaf\x5b\x1c\xe5\x16\xf3\x06\x70\x31\x27\xb4\x38\x59\xa6\x9a\xdf\xe3\x0e\xac\xab\x0d\x0e\x0c\x5f\xb7\x36\x68\x6f\xf8\xbe\x03\xb5\x7b\xf7\x89\xe5\xb3\xb9\xc4\x68\x6d\xba\xd6\x67\xc9\x72\xf8\x53\xfd\xda\xad\xa4\x46\x9d\xa6\xf6\x3a\x7d\x82\x86\x73\x5a\x2d\x77\x3a\xfd\x74\xf2\x29\x71\x4e\x3c\x91\x6e\x4a\xca\x2d\xd0\x17\x66\xe5\x2b\xd9\xe2\xa5\x12\x7f\x18\xd7\x0d\x3c\xb1\xf7\x4b\xf7\x84\xd4\x8d\xf3\xe2\xf8\xd4\xf4\xfc\x82\xc2\xfa\xd3\x05\x45\xd2\x5d\x24\xf1\xbd\xc3\xa8\xe7\x65\x6a\xe9\xd2\xf4\x94\x65\x52\xf9\x54\x22\x2d\x2b\x23\x29\x95\x4f\x4d\xcb\x2e\x34\x4a\xb1\x37\x71\x42\x00\x0e\xe8\xda\x03\xfb\xb8\x97\xa4\x34\x6e\x8c\xd3\xa7\xa6\xa5\xa7\xa6\x2c\xda\x97\x9f\x24\x4e\x40\x62\x15\xba\xa1\x5e\xbf\x38\x6f\x89\xb2\x44\xbc\x55\x4e\xe4\x67\x15\x65\xa4\xea\x53\x8d\x69\x29\x46\x71\x52\xec\x31\x9c\x08\x8e\x38\x00\x3c\x7a\xb9\x97\x28\x75\x97\xcb\xf8\x82\xfc\xb4\xd4\x94\x55\xbe\x69\x49\xd2\x64\x70\x06\x6e\x35\xbc\xc7\x9f\x3d\x9b\x57\x74\x46\x8a\xb9\x45\xe4\x99\x72\x8b\x0a\xf8\xc2\x7c\x53\x72\x96\x54\x31\x05\xc6\x1d\x07\x4f\x70\x78\x01\x7d\xdd\x13\x0a\x16\x6f\x2f\xd5\x17\xe4\xe7\x17\x14\x1e\x0b\x49\x2f\x12\x6f\x81\xd3\x41\xe0\xe0\x3d\xfd\xa3\x2e\xda\x2c\xb4\xa0\x45\x9b\x65\x4b\xc1\xa2\xce\x52\x67\xc1\xbf\xa9\x0d\x2e\xb6\x74\x69\x9b\x4f\x8e\x33\x96\xce\xb0\x95\xc1\x4a\x13\x16\x23\x83\xde\xb8\x16\xf6\x68\xa3\xdc\x6e\xc3\x42\x58\x0c\x0c\xac\x4e\x30\x6f\x59\xe9\x36\x06\xfa\xe2\x3b\xf0\x1e\x0e\x7a\x86\xef\x3f\xc4\x81\x47\xd0\xd3\x44\x5b\x13\xb4\x3e\xdc\x00\xec\x36\x17\x47\xe3\x54\xbd\xe6\x0b\xdf\x6b\x94\x3a\x76\xaa\x08\x5b\xd4\x79\xb8\x72\x25\x2e\x01\xb2\x1f\x7c\xe2\x8e\x4f\xcd\x1e\x84\x81\x1c\x8c\xa3\x39\x2d\x3b\x14\x04\xf4\xca\xc6\x18\xa4\x70\xa2\xbb\xd6\xc7\xea\x04\xa3\x92\x61\xec\x21\x18\xf4\xcc\x5d\x75\x83\x08\x18\xa4\xae\xc5\x41\x6a\x6f\xda\xfa\x75\x14\x87\x23\x91\x47\x1e\x47\xe2\x48\xe0\x91\x87\x91\x30\x12\x78\xb0\xa7\xc8\x03\x8f\x23\xed\xf2\x84\x81\xbc\xaa\x1d\x83\x77\x5d\x2d\xed\xeb\xd5\x4d\x7f\xb0\x87\xd8\x8d\x16\x1e\x15\x4e\x2d\x50\x39\x75\x8e\xea\x9d\x26\xa5\xa9\xde\xb8\x06\x6a\xf0\xc5\x2b\x98\x81\x7d\xfe\xc2\x82\x28\x8c\x58\xf5\x6a\xfc\xa9\x0f\x4e\x3e\x19\xf7\x35\x96\x0c\xc1\x71\x43\x70\x3c\xbe\x42\x3f\x2c\x86\xb5\xf0\x71\xec\xeb\xcf\xbe\x85\xce\xf4\xaf\xc9\x65\x17\x65\x3d\x7b\xa8\xf8\x64\xd0\x99\xa1\x79\x5e\x79\xcb\x3e\xc2\x4e\x91\xe8\x1c\x8d\x0e\xaf\x4e\x02\x09\xd2\x14\xb7\x58\x98\x4d\x00\x5b\x7b\xfa\xba\xac\x3f\x78\x2e\xe7\xca\xe6\x22\x9f\x5c\x74\xce\x1a\x57\x9b\xf8\x33\xb8\xc1\xf8\xcf\xcf\x60\xdf\x4c\xfc\x64\xf8\x6c\x74\xda\x52\xdb\x35\x3d\x6e\x73\x31\xec\x77\xc3\xfd\x58\x80\xae\xda\x3d\x18\x8c\x48\xe3\x03\xe8\x06\x97\x31\x52\xed\xc2\xdb\xe5\x22\xc6\x40\x7c\x17\xf5\x35\x30\x99\x82\x81\xb8\x6f\x20\x0c\x1c\x0e\x86\x6e\xb8\xf2\x31\x46\x67\xd1\x26\x93\x6c\xe2\xb5\x14\xad\x87\xd6\x43\x4b\xd1\x36\xa9\x2e\x9a\x41\xdd\xb0\x49\x32\x95\x95\xcb\x65\x3c\x6c\x86\xd5\x8f\xe1\x7d\x18\x2c\x4d\x7c\x1f\x3b\x06\xe0\x7b\x3c\x06\xa1\x0f\x38\xc2\x70\x74\x93\x3c\xa0\xc3\x14\xf8\x38\x1d\xfc\x68\x59\x3e\x26\x8b\x79\xe0\x77\x13\x3e\x6e\x81\x0e\x34\x0c\x07\x37\xb0\x61\x05\xf1\xf0\x1e\x74\x0c\x98\xf8\x5a\x82\x0b\xd6\x81\x1c\x94\x60\x3b\x88\xc3\x09\x30\x5c\x3c\x36\x69\x4c\xed\x47\xfc\x80\xa1\x21\x7e\x63\x24\x58\xe6\x0d\x7d\xb0\x08\xbf\xd4\xe3\x65\xec\x8b\x45\xb8\x6c\xac\x38\xf7\xc1\x4f\x21\xbf\xf0\xdf\x7e\xb5\xad\xe1\x96\x04\x93\x60\x38\x38\x43\x3c\x94\xe9\x5d\x6a\x30\xf5\x9a\xd9\x0b\x36\x9a\x3b\x46\x3d\x7d\xe9\x28\x83\xce\x40\x7e\x74\xc2\x29\x46\x50\x5b\x38\x30\x04\x02\x3f\x15\xde\x11\x0f\x3f\x3e\xf4\x77\x8b\x1e\xa6\xa3\x74\x15\x87\xa1\x01\xc7\x7e\x32\x07\x3b\x89\x59\xb1\xb1\x72\x2c\xaf\xbd\x83\xdf\x62\x89\xd6\xee\x43\x09\x1c\xc0\x05\x3e\x82\x8f\xc0\xf3\x06\xce\xc1\xd1\x38\x0c\xd7\x62\x47\x0c\x5f\xef\x37\x1d\x99\x98\xd9\x74\xd8\xe0\xa8\xfe\xfd\xf5\xe8\x75\xbb\x3b\x8c\x82\xce\x30\xe8\xcb\xcf\xc1\x59\x9c\x0b\xed\xa0\xe3\x7a\xe8\xc8\xc3\xaf\xf0\x05\x04\xc3\x7d\x20\x25\x6d\x24\x89\xc4\x14\xec\x3c\x1d\xbb\xf0\xe8\x8b\xe3\xa1\x3b\x2c\x92\x0c\xce\x09\x64\xde\xfe\xec\x03\x07\xf4\x13\xcd\x3a\x6e\x62\xe8\xc8\xb0\xa9\xe2\x00\xe8\x8d\x12\xd0\x38\xec\x1a\x7d\xf0\xab\xdf\xf7\xff\xc8\x43\xbb\xef\x26\xa1\xb3\x64\x30\x7f\x69\x40\x0f\x0e\x1c\x2e\x80\xee\x54\x8b\x78\x15\x27\x83\x2b\x7a\xc2\x87\x1e\xf4\xf2\xd1\xbd\x03\x06\xf3\x48\x4e\xba\x06\xb4\xa4\x66\x99\x97\x70\x30\xb7\x00\x46\x83\x04\x3e\x3c\x7c\x02\x1f\xa3\x84\x73\x0b\x24\xeb\xba\xb7\x26\x90\x3a\xd0\xa9\xb4\x00\xd1\x36\xdd\x58\x67\x88\x11\xa0\xa1\x42\x80\x3a\xc6\xe2\x4b\x55\x96\x97\x57\x8a\x06\xd2\x1b\x42\x05\x83\xd9\xfe\xe9\x75\x8d\x60\x8e\x40\x1d\xbe\x1e\xc4\x98\x9b\x83\x04\x7c\x0d\x3a\x73\xc4\x35\xa6\x26\x40\xd8\xf6\xd4\x40\xba\xfd\xe1\x04\x22\xf4\x65\xa6\xcf\x9b\x37\x5d\x32\x58\x7e\xa5\xa6\x5f\x98\xd7\x24\xc2\x0e\x12\x3f\x80\x41\xfe\xb0\x7e\x21\x6c\xfe\x04\x0e\xcc\x80\x72\x18\x00\x29\x87\x2e\x1d\x3b\x77\xfa\x38\x6d\xc9\xe8\xd2\x3c\xee\x8a\xc7\x29\x64\xb4\xc0\x5e\x6e\xf3\x5f\x8c\xfe\x01\x3d\x83\x3f\xdc\xfc\xe9\xa2\xb0\x79\x21\xd3\x63\xc7\x37\x63\xcb\x3d\xfc\xfd\xf8\x27\x17\x97\x9c\x58\x75\x27\xea\x51\x15\xf4\xab\x3f\xfc\x26\x1f\x9c\xd4\xa0\x57\x6e\xc5\x98\xe9\x8d\x73\xd0\x0d\xdf\xa3\x61\x12\xd9\x74\xe1\x42\x93\x64\x20\xdc\xa8\xa6\x79\x17\xa6\x8b\x2e\xa8\xbc\x06\x67\x70\x98\x16\x09\xab\xc1\x41\x8d\x05\x27\x70\x05\x87\x37\x7f\x3d\x84\x76\xae\x65\x7f\x43\x9f\xbf\x7f\x82\x76\x6a\x1c\x38\x41\x47\x70\x4c\x2f\x65\x2f\x44\x1b\x88\xcd\x89\x5c\xa1\x52\x50\x11\xbc\x8f\x96\xa9\xf8\x92\xc4\xc2\xe4\xec\xa4\x9c\x14\x63\x6a\x6a\x5a\x9a\xdb\xb4\x69\x63\xe6\x7f\xb8\x86\x5e\x3d\xa4\x7f\x74\x3f\xde\xa3\x7f\xf5\x21\x2f\x69\xd8\xc1\x31\xe7\xa7\x5d\x9f\x7c\x6b\xfe\x83\xb5\x0f\x83\xbf\x4d\xba\x9c\xb1\x95\xb6\xfb\x91\x17\x33\x6a\x23\xb3\xd7\xa5\xc7\x1b\x57\xa6\xe5\x6e\xa0\x65\x4a\x99\xb6\x75\xc6\x8e\x59\x0d\x7d\xbf\xf4\xfa\x6a\xec\x7d\xef\x27\x3e\xcf\xfd\xe9\x15\x2f\xdf\x6c\x82\x76\x3c\xb4\xfb\x67\xdb\xb1\x57\xd2\xf3\x86\x9f\xbe\xfc\xea\x2b\x5a\xce\xcd\xcd\xce\x16\xb5\x75\x2a\x72\x65\xe5\xf1\x95\x09\x25\xd1\xd5\x9b\xf3\x12\x13\xa7\x4d\x73\x9b\x76\x83\xc8\xc9\xc8\xc8\x4e\xe7\x93\x93\xd2\x12\x12\xa4\xa8\xa8\xf4\xb8\xe2\xc4\x1b\x53\xdd\xa6\x4e\x23\xd2\xd3\x32\xd3\xd3\xf4\x09\xc5\x89\x05\x69\x62\xb6\x91\x48\x2c\x2e\x4e\x57\xf8\xc2\xbc\x9c\xec\x6c\x29\x2f\xef\xd2\xa5\xbc\xbc\xab\xb3\xdc\x52\xf3\xf3\x33\x0b\xf8\xa2\xe2\xfc\xe2\x62\x69\xd7\xae\xf8\xf2\xd4\x82\x19\xd7\xdc\x6e\xdc\x20\xd4\xe0\x39\xdc\x77\x31\x0f\x42\x9a\xc5\x90\x3b\x2b\xae\xce\xbd\x38\xf7\xe2\x8c\x63\x13\xeb\xe8\xbd\xe3\x3f\x2e\x1f\xc5\x8f\x1c\x19\x13\x32\x41\x9a\x13\xde\x77\xe6\xa7\x3e\xb4\x49\x8d\x32\x5f\x20\xeb\xe4\x86\xb2\x52\xf9\x58\x88\xd4\xea\x48\x86\xc7\x45\x6d\x96\xac\xa3\xa8\x4d\xbb\x62\x77\xa4\x89\xe7\x12\x8b\x2b\x4a\x2a\xb3\xb3\xdd\xaa\x77\x7d\xfe\x65\x56\x16\xfd\xf4\x29\xbc\x7b\x0e\x38\x1e\x38\xe8\xb0\x60\xd0\x53\xe9\xd9\xc0\x73\xd8\x01\x75\x7a\x64\x17\xe0\xbb\x83\x06\x89\xec\x85\xd7\x83\x07\x63\xa7\xf9\xa8\xe3\xbd\x86\xd7\x9e\x18\x2f\xa9\x83\xa8\xcf\xb6\x5f\x3e\x7a\x52\xbc\x70\xea\xda\xee\xdb\xfc\xcd\xab\x61\x4b\x4e\x49\xa7\x96\xee\x9c\x35\x4d\x8f\x22\x3a\xa2\x03\x4a\x62\xe8\xc2\x12\x23\xbf\xa1\x30\x61\x55\x46\x7c\xec\xc2\xda\xa4\x3c\x23\x1d\x7f\x62\x4f\xe6\x11\x1e\xe6\x81\x17\x0c\x81\xf9\xe0\x87\x43\x60\x30\xce\xf7\x18\xb4\x7a\xea\x14\x69\xda\x8c\xc0\x61\xc6\x0f\x69\x23\x95\x24\x63\xd6\x47\x7a\x13\xb9\xa6\x61\xf5\xd5\xf0\xa6\xe4\x1d\x9b\x32\xd6\x27\x27\x64\x04\x24\x28\x1b\xe8\x2c\xd2\xa8\x84\xe5\xc7\x8b\x7b\x26\x1e\x9b\x79\x71\xee\xc5\xb9\xd7\x56\xdc\x09\xa1\xd7\xdd\xfb\x3a\xf6\x5b\xfe\xdb\xaf\xcb\xf7\xde\x93\xee\xd4\x5d\x3b\x76\xf1\xe2\xc5\x8b\xc7\xae\xd6\xdd\xa1\xeb\xee\x55\x7c\xfd\xad\x7e\x9d\xfa\x0d\x37\xf9\xba\xf7\x99\x01\x47\xe8\x63\xbd\xba\x6e\x43\x47\xfe\x7d\x74\x8e\x5c\x33\x42\x4a\xce\x4c\x4f\x35\x26\x99\x92\x73\xe2\xf3\x63\xf2\xe2\xcb\x82\x76\x16\xd1\xf5\x3f\xfe\x5a\xf9\x88\x6f\xf9\x75\xf3\xaa\x9f\xa4\x3b\xeb\xaf\xaf\xb8\x37\x93\x4e\xcf\xcb\x33\xe6\xf3\x65\xa5\x65\x25\x25\x12\xfb\x63\x74\xf5\xb6\xd2\xaa\xe8\xca\x36\x05\xb9\x1f\x24\xdf\x8c\x82\x02\x55\x80\x99\x50\x07\x26\x57\xf8\x1b\x7e\x83\xa7\xf0\x04\x6e\x3e\x66\x7f\x34\x90\x1d\x2f\x73\xd6\x28\xfc\x4b\x5b\x0a\xa7\xf0\x14\x4c\xda\x5c\xb2\x2e\x6e\xd7\x3a\x1a\x99\x3f\xa0\x19\x8f\xa8\xc3\x78\x75\x18\x64\x43\xf4\xd1\xbd\xd2\xde\xa3\x11\xb5\x21\xb1\x34\x04\x00\xc5\x45\xed\xec\x99\x3b\x23\x75\x46\x8a\xc7\x4a\x25\x82\x66\x2f\xe4\x26\x2b\xb9\xc7\x73\x4f\xe4\x82\x4b\xc5\xce\xb5\x3b\x83\xa6\xa1\x57\x42\x68\x42\x68\x45\xea\xb6\x2a\x9a\xfd\xb1\xa6\xf2\xf0\x89\x9d\xd7\x68\xf6\xc2\xce\xa6\xf2\x27\xb1\x5b\x69\x4d\x54\x3f\xe1\xd4\xc7\xd4\xab\x3e\x10\x8d\x7f\xe3\x6b\xfc\x04\x37\xe2\x02\x11\x4e\x6f\x24\xae\xc3\x42\xe8\x27\xcb\x7a\xe8\x97\x84\x1d\x37\x4a\xc8\x52\x38\x2f\x55\x8b\xf2\xd5\xfa\xe9\xd9\x1f\xb5\x69\xea\xb9\xcd\x30\x15\x0e\x8a\x05\x89\x85\x09\x45\x49\xb4\x7c\x73\xe2\xcf\x1f\x8a\x10\x05\x11\x84\x8c\xdc\x2b\x68\xa7\xb7\x7a\x45\x72\x30\x1b\x96\x1e\x06\x3e\x57\xc4\x61\x14\x36\xe3\xd3\x33\xb0\x4c\xef\x02\x5e\x8c\xea\x6b\xb7\x7a\xf1\x82\xd7\x17\xfe\x5d\x45\x03\x3a\xf8\x47\xf0\x61\xe0\x9a\x80\xba\x16\x32\x94\xd1\x74\x2d\x54\x28\x83\x3a\xca\x5f\x88\x10\x36\x0b\x46\x81\xfa\xd6\x06\xe3\x60\xa7\xd0\x43\x10\x4b\x99\xb2\x2a\xc9\xaa\x40\xc3\xff\xe6\xd3\x19\x03\x7a\x73\x06\x4b\xa2\x45\x89\x10\x48\xab\x4e\xf3\xe5\x20\x02\x66\x30\x18\xf1\xff\x2e\x08\xfb\x6f\x37\x4c\x4c\x3a\xa3\x7a\x41\x57\xa6\x55\xd1\x22\x3e\x10\xc0\x8b\xb1\x28\x26\xc6\xd2\x02\x1e\x5c\xdb\x42\x0d\xf4\x01\x1f\xdb\x8c\xe5\x63\x0f\x31\x57\xe2\xbe\xe4\x54\x82\x3d\xca\x9c\x3b\xfa\xd8\x36\xf0\x81\x0f\x18\x98\x8d\x3e\x38\x1b\x7d\xa0\x54\x00\x1f\x98\x0d\x3e\x38\x1b\xea\x04\xa2\x35\x18\xeb\xff\x25\x69\x20\xde\x53\x6f\xb7\xc5\xa9\x2b\x59\x72\xca\xad\x8d\x88\xe6\xa3\xf9\xb8\xe1\x46\xd8\x68\x23\xd2\x80\x0d\xa5\x09\x5b\xe5\xd2\x12\x77\x55\x51\x15\xc2\x80\x41\x56\x9f\x0f\x84\xe3\xb6\x8e\x6e\x65\x20\x85\x31\x98\x13\x07\x08\x06\x32\x71\x20\x63\x70\x4e\x84\x2a\x46\xed\x08\x55\x8c\xa5\x63\x34\xe3\x62\x4d\x30\x10\xcb\xe1\x99\x00\x11\xa0\x38\xa9\x8a\xea\xcb\x2d\x5b\x9e\x57\xe4\x2f\x59\x3f\xc8\x15\xcc\x1f\x50\x49\xfe\xcb\xd3\x97\xf1\x96\x66\x67\x20\x18\x3c\x08\x9b\x71\x33\x1c\x84\xd9\x0c\xa4\x32\x12\x46\x38\xe3\x10\xe4\x90\xc3\x21\xf0\x3d\x03\x7e\x30\x18\x06\x83\xdf\x0c\xa6\x97\xe0\xf2\x9a\x31\x2b\xa0\x38\x19\xc8\x3b\x06\xe7\x07\x1c\x76\x83\x6e\x44\xd5\xe6\xb0\xa2\x30\x5e\x53\x9a\xc8\x41\x02\x0c\x12\xa4\xe9\x5a\x33\xe5\xc9\x48\xa8\x0c\x10\x60\x0a\xb3\x63\x47\x51\x55\x95\x04\xdd\xa0\xdb\x9f\x82\x7b\xeb\xaa\x56\x0f\x4e\x53\x72\x05\x55\xa1\xd4\x66\xd5\x97\xd3\x9a\xc1\x17\x15\xf4\xd5\x14\x32\x2c\x2c\x69\xf3\x66\x09\xbb\x61\xb7\x67\x82\x3b\x74\xc3\x6e\xe0\x27\x18\x08\x6f\x18\x29\xb8\x40\x5d\x85\x3d\x46\x9f\xda\xd0\xa4\x36\x37\xa9\x0d\xf6\xd0\x35\xf6\xf0\xa6\x9b\x4b\x36\x65\x47\xa5\x68\x1a\x9a\xdc\x34\x0d\x4c\x31\x05\x31\x72\x4c\xaa\xbb\x55\x87\x0a\x11\x9e\x1c\x13\x1e\xaa\x37\x58\x12\xa9\xc8\xe2\xa8\xca\x04\x31\xb5\xb8\x24\xa3\x94\x2f\x2c\xcc\xca\x2d\x94\x54\x0d\x4c\xaa\x86\xa6\x8a\xd4\x0a\xb9\xa2\xc0\x5d\x75\x14\x88\xed\x4a\xc5\xf6\x9d\xfa\x08\x81\xaa\x49\xdc\xba\xa5\x44\x34\x58\x34\xe4\x39\xb5\x19\xb7\x10\x06\x64\x28\xad\x19\xb6\x10\xda\x6b\xcb\x61\x4e\x6d\x80\x90\x36\x50\x03\x86\x10\x31\x02\x2c\xe7\xec\x47\x06\xe7\x37\x94\xbd\xcc\xe5\x38\xa3\x2a\xb0\x95\x69\x64\x0c\xce\x8f\xba\x34\x32\xad\xaf\xbb\x4c\x12\x24\xf8\x41\x48\x28\x48\x2c\x4e\x13\x55\x05\x15\xc2\x98\x9b\x67\xca\xe3\x3f\x66\x0c\x44\x23\x55\x92\x5a\x9c\x98\x2f\x6a\x0a\x28\x44\x76\x46\x7a\x56\x3a\xef\x52\x53\x13\xe9\x68\xd6\x01\x30\x66\x9d\x59\xc7\x41\x08\xf3\xf6\xf7\x46\xeb\x01\x47\xb4\x14\x9b\xe8\x85\x47\xf0\x0d\xce\x03\x17\x1c\x07\x9f\x62\x7b\x31\x14\xd7\x78\x2f\x9e\xe1\x93\x90\x98\x90\x94\x1b\x43\x03\x2d\xe4\xc6\x96\x27\x56\x64\xd7\xe5\xec\xc9\xdb\x95\x07\xde\x87\xa0\xcf\x37\x40\x02\x49\x27\xdc\xbc\x9b\xd6\xcc\xab\x29\x6a\x0f\x38\x02\x6f\x24\x97\x9a\xb6\x35\x42\x8a\x3d\xa0\x94\x0e\x14\x58\xce\x80\x4e\xf7\xc8\xde\xee\x38\x41\xd5\x75\x79\xbb\xd3\x14\x55\xd9\xcd\xc0\x3f\x5a\x0f\x38\xaa\xa5\x88\x32\x65\xef\xc3\x51\xfc\x67\x2b\x63\x4d\x40\xd9\x40\xbe\x70\x94\x2d\xb6\x9b\x0c\xfe\xe0\xb4\x9f\x29\x55\x81\xb3\x84\xfa\x84\xd2\x14\x3c\x43\x68\x0a\x9c\xe1\x64\x4a\x55\xf0\x8c\xa6\xa0\x1d\xae\x2a\x96\x77\x38\x7b\x46\x7b\xf2\x5f\xe4\x27\xce\xea\xdb\x72\x7b\x3d\x97\x1a\x03\xe1\x1d\xe5\xf8\xd0\x40\x2e\x76\x32\x90\xfb\x2d\x39\x5c\x11\x04\x8e\x02\x47\x1c\x99\x87\x91\x05\xe8\x89\xec\x48\x2c\xa7\x2b\x8f\x1d\x55\x8e\xf0\x0f\x0f\x2e\xe9\x9f\x2c\xa5\x7f\xba\x66\xc4\x64\x74\xa0\xd1\x61\xd2\x7c\xbf\x20\x7e\xd9\xca\x1f\xe0\xa3\xd5\x52\xc2\x99\x08\xe8\xbc\x0e\x16\x87\xc0\xcc\x8f\x1f\x23\x9b\x30\x37\xfd\xa3\xc5\xdd\x3c\x47\x4d\x1a\x35\x7e\xe4\x84\xaf\xfb\xb8\x9d\x6f\x3e\xb6\xa3\x84\xbf\xd4\xe8\x85\xe3\xcf\x48\x27\x70\xa8\xfd\xe7\x45\xe3\xf8\xeb\xdf\x0d\xf9\x9d\x87\xfe\x30\x0b\xba\xc3\x51\x08\x93\x60\x2d\xec\x01\x27\x08\x29\x80\xc1\xb4\x0b\xea\xa0\xbd\xc1\xf9\x36\x7c\xf2\x33\x03\xe7\x05\x6d\x5e\xeb\x4b\x0e\xef\xe0\xe7\x78\x07\x3e\x87\x50\xf3\x3b\x18\x0a\xe7\x08\xb3\x0b\x89\xa1\x78\x8e\xb0\x21\x47\x98\x75\xcf\xfb\xc2\x6c\x28\x81\x08\x57\x19\x1a\xa0\x01\xde\x3d\x62\xe3\x75\xd0\xc0\x5e\x80\xf3\x82\x95\xc6\x66\xee\x77\xb2\xb1\x85\xa8\x27\x1b\x3d\x88\xdf\xc9\x92\xb5\xde\xc3\x09\xf6\xc7\xbd\x48\x86\x85\x75\xfd\xbc\xeb\x9c\xb0\x1d\x7b\x81\xf4\xfe\x81\xc0\x42\xec\xc2\xcd\x30\x06\x7d\x22\x8d\xa4\x52\x12\x52\x8b\x44\x88\x21\x57\xa1\x8e\xc0\x4f\xb5\xf7\xc8\xa8\xd4\xcc\x2a\xa3\x08\x7d\xe2\x88\xa1\x9a\xef\x13\x8a\xbd\xd0\x5c\x40\x54\x65\xe7\xe5\x57\xeb\x55\x57\xaa\x30\x49\x4e\x12\xc7\x80\xae\xe5\x1e\x09\x1f\x3f\xbb\x03\xe3\xa0\xfd\xeb\x0d\xe8\x29\xe2\xb8\x48\xa2\x29\x2b\xa6\xdc\x9f\x57\xff\xb6\xde\xe1\xf0\xf5\x63\xf2\x8e\x42\x54\x65\x17\xe6\x56\xeb\x55\x92\x2a\x4b\x52\xe2\x73\xc5\xe1\xdb\x6a\x5f\x11\xb0\x5b\xab\x24\xa3\x92\x8d\xd5\x99\xe2\xc5\x64\xc2\xa5\x06\x07\xc2\x1c\x18\x0e\x1f\xc0\x40\xc1\x3c\x89\x83\x76\x83\x7f\xc6\x76\x9f\xce\x8f\x58\xb5\x46\x44\xc3\x6f\x38\xed\x32\x2e\xc9\xff\x5b\x5d\xe7\x06\x3f\x8d\x25\x46\xdc\x9c\xf2\xf0\x87\x9b\x37\x7f\x78\x38\xe5\xe6\xf0\xd9\xf3\x83\x16\x85\x8b\x1a\xf1\xfd\xe6\xdc\xe8\x84\x8c\xcd\xee\x48\x6b\x55\xb8\x38\x15\xa7\xcc\x42\xde\xd3\xfd\xc8\xea\xf9\xdb\xe7\xf0\xd8\x6e\xf0\x60\x6c\x37\xea\xd4\xe4\x9b\x6b\xa5\xd4\x90\x8c\xe0\x60\x3d\xde\x06\x33\x2a\xea\x74\x75\x06\x98\x41\x81\xdb\xfb\x32\xea\x53\xf6\x8a\xd7\xf7\x9d\xb8\xf9\x8d\xde\x60\xa9\xc5\x45\xdc\xc3\x9b\x37\x1f\xfe\x70\x73\xca\x88\xe1\x53\xa6\x0c\x1f\x31\xe5\xe6\x0f\xa2\xf9\x3c\x02\xd7\xaf\x1f\x4e\x4f\x9d\xcb\xcf\xc5\xe9\x05\xbf\xf7\x93\x62\xcb\xe5\xda\xf2\xb2\xb2\xb2\x5a\xb9\x2c\x8e\x9e\x75\x19\xb8\xc8\x5f\xf8\x5f\x80\xab\xb9\x72\x59\x6a\x03\x96\xc7\xca\x9b\x62\x63\xe9\x4c\x58\xc1\x0d\x9f\x72\xf3\x87\x87\xb6\x3e\xb7\xd1\x1c\x21\xb9\xd4\xa8\x69\x70\x57\xed\x08\xbf\xbb\xde\x36\x90\x91\x06\xcb\x22\x68\x66\x1f\xb1\xb7\x6f\x9b\x37\x73\xe0\x09\x61\x50\x0b\xeb\x55\xa6\x94\x96\xd5\xae\xf2\x6a\xad\xa3\x68\xed\x48\xd6\x02\x7f\xe2\x9b\xcf\xef\xe1\x76\x74\xc5\xd1\x18\x9a\x8b\x8f\x73\xb0\x18\x26\x61\x15\x14\xf6\x81\x8b\x48\xa9\x5d\x7e\x86\x31\x7f\xd1\xea\xbb\x14\xfb\x08\x4f\xe2\x72\xeb\x88\x98\x74\x75\x25\x6d\x31\x83\x0f\x09\x43\x36\x40\xcf\x31\x20\x88\x50\x85\xbd\x31\x1f\xba\xe3\x65\x5e\xcb\xc9\xc2\x83\x9a\xeb\x3c\x6d\x30\xed\xa2\xd6\xa1\xee\xb0\xfd\x93\x8c\x53\xbd\xf3\x5b\xab\xc8\xc6\x85\x8c\xfa\xda\x00\x0e\x94\x59\xa7\xe9\x38\xd5\x6e\x9a\x66\x77\x4a\xc0\x81\xdd\xff\x01\x69\xa0\x96\xc3\x35\xc1\xa0\x7a\x2f\x61\x30\xc2\xd0\xde\x01\x22\x40\x12\x6c\x62\xc8\x5f\xe6\xfd\xe0\xab\xfe\xf1\x97\xa3\xfc\x97\x81\x70\x6f\x71\x32\x90\x03\xc1\xc4\xa1\x8c\xdd\xb0\x02\xfb\xe1\x21\x5e\x9b\x86\x00\xa0\x4e\x53\xa7\x81\x3d\x85\x6d\x90\x8d\x3c\x46\x42\x2f\x09\x83\xb1\x33\x01\xdd\x7b\xe2\xf0\x47\x38\x9e\xc7\xf3\x98\x86\x69\x78\x1e\xcf\x41\x1a\xa6\xc1\x79\xf0\x81\x71\x7f\x80\xd7\x1f\x12\xac\x47\x27\x42\x3b\xaf\x76\xe3\xcc\x5e\xaa\x40\xc0\x97\x38\x1c\x8f\x83\x1f\xbe\xfe\xaf\x32\x99\xa2\xf6\xd0\x7a\xa8\x29\x2a\x69\x57\x96\x1e\x41\x3f\x09\xa7\xc0\x9f\x1c\xb8\x24\x81\x2f\x3a\xf1\x68\xc0\xd7\x2d\xe0\x45\xda\x58\x83\x6f\x94\x63\xbd\x81\x6c\x74\x32\x10\x85\xe6\x5b\x1c\x3c\x56\xf7\x13\xd6\x16\x72\x00\x7a\x10\x5a\x3f\xab\xc4\x59\x62\x20\xc6\x80\x2b\xcc\x31\x84\xf5\x05\x65\x70\x3e\x5a\xcd\x69\x9c\xd6\xaa\xee\xc1\x27\x84\xf9\x05\x85\x33\x80\xe6\x5a\x63\x30\x06\x55\xed\x16\x61\x6e\x21\x5d\x6a\xcc\xca\x5b\xb9\x63\xf4\x29\x18\x0d\xff\x08\x66\x9d\xba\x83\x03\x86\xe9\x02\x0c\x13\xcc\x5d\x61\xd0\x19\x75\x66\x67\x78\x47\x80\x49\x0c\x55\xb3\x21\x3d\x5e\x04\x77\xaa\x60\xcf\xde\xbc\xba\xc3\x07\x62\x0f\xf1\x15\xdf\xe7\x6e\x97\x60\x35\x25\x33\x9b\x03\x63\xd7\x05\xad\x2c\xf7\xe7\x37\x6c\xc8\x48\xdb\x28\x55\x52\xd5\x4a\xe9\xd6\x1a\xbb\xef\xb5\x90\xb0\xb0\x90\xc8\xd2\xa8\xea\x64\x51\xe3\xa9\xf8\x0d\x79\x91\x12\x4c\x62\xe0\x1d\xc1\xea\x8c\x3a\x70\x86\xa9\x8c\x35\xd5\xac\x83\x66\xaa\x45\x10\xb1\xd9\x6c\xb7\x48\xaa\x89\x84\xa7\xc2\x5b\x6b\x64\xfa\x95\x79\x03\x87\xcd\xe0\x9b\x9c\x1f\x9f\x95\x94\xe6\x9e\x94\x96\x96\x94\xa0\x47\x5d\xeb\x0b\xaa\xfe\xdc\xae\x2f\xb7\x5f\xa2\xc1\xe1\xcc\x59\x70\xba\xc3\xbf\x21\xbd\x77\xdd\xf1\xfb\x91\x87\x62\x61\xe8\xe3\x6e\x6d\x86\x48\x5d\x49\xf4\x9c\x84\x83\x50\x9c\x29\x75\x5d\xbc\x10\xdb\x4d\xe6\x3f\x20\xa1\xdd\xfa\x5e\x0f\xf1\x1d\xfe\x3f\x16\x08\xf0\xce\xcb\x87\xd0\x6e\x8f\x04\x1a\x79\xeb\x2c\xb6\xeb\x7a\x5a\x42\xf1\xea\x6d\x1c\x04\x9e\x7c\x8b\x07\x1c\x17\xc0\x97\x81\xe6\x4f\x05\x6c\xee\xcd\x78\x78\x50\x13\x17\x82\x13\x38\x2c\x92\xc2\x2f\x6d\xfc\x32\xf8\x1c\x6d\x7e\x81\x3a\x32\x21\x3f\xa9\x28\x4d\xcc\xcc\xcb\x37\xe5\xf1\xf9\x79\xd9\x39\x79\x12\x34\x83\x2f\x51\x94\x97\x5f\x5c\xac\x2f\x4e\x2b\x4e\xca\x13\x5d\x6a\xcc\x3a\xd8\x96\x29\x18\x9c\xe3\xcd\xe5\xdc\x57\x9f\x5c\xf6\x16\x65\xcc\xc7\x6d\x90\x2f\x53\x5f\x5d\xbe\x7c\x5f\x82\xc9\x5d\x70\x2c\x76\xc5\xae\x38\xae\xad\x04\xa7\x58\x74\xea\x44\x99\x82\x71\x60\x87\x4a\x6a\x00\xea\xff\xfd\x00\xd1\x02\x9e\x6a\x01\x0c\x80\x3c\xf0\x74\x94\xc1\xd3\x40\x34\x83\xe7\x73\xf0\xfc\x0b\x3c\x9d\x0c\x64\x88\x3a\x8d\xfb\x60\xd8\xb0\xf7\xc5\xd6\xbd\x24\x76\x43\x0a\x48\x9b\x28\x02\xf6\xf4\x56\xd3\xc6\x45\x67\xa4\xba\x90\xb3\x72\x5d\x5d\x5d\x9d\x7c\x36\xa4\xce\xef\xc2\xb4\x83\x13\xab\x68\xf0\xba\x07\xc3\xde\xc0\x14\x1e\x72\x61\x39\x2e\xc7\x9c\x85\x29\x8b\x62\x97\x48\xf1\x01\x35\xcb\x1b\xe2\x68\x63\x61\xa1\xa9\x90\xaf\xaf\xdb\x5a\x5f\x24\x15\xd5\x15\xee\xcd\xdb\x4b\xdf\xd9\x78\x7e\xf2\x48\x3d\x78\x76\x81\x0f\x91\x06\x01\x3d\xf7\x89\x70\x39\x04\x4b\x21\x0d\x6f\xf1\x58\x86\x31\x38\x0a\x33\x87\x4b\xb8\x60\x3d\xf6\xc3\xd1\xb8\x42\x8f\x9b\x60\x3a\x4e\x87\x48\xd1\xb2\x97\x84\xd9\xd0\x1f\x3c\x61\xb6\x04\x39\x5d\x80\x5c\x0b\xed\xa6\xff\x26\x86\x1f\x58\x54\x14\x18\x1e\x18\x9e\xbc\x78\x7b\x20\x7d\x7a\xd2\xf6\x8f\x86\xeb\x3f\x0c\x1f\xb9\x78\x92\x18\x1e\xa8\x2c\x3a\x10\x41\x27\x97\x96\x67\x94\xf3\x32\xb5\x63\x7b\xf1\xb6\x72\xa9\xe9\xf7\x7d\xd0\x0e\x48\x3d\x28\x5d\x60\xc8\x12\xf0\x1c\x02\x5d\xc4\xf0\x83\x8b\x95\xc0\xf0\xc0\x88\xa4\x45\xdb\x03\xe9\x3b\xef\x1f\xc6\x4e\x36\x45\x4c\xb7\x0a\x3b\x4d\xec\x26\x86\x07\x16\x2d\x3e\x10\x6e\xa7\x52\x66\xa7\x52\xb2\xad\x5c\x7a\x02\xef\x9d\x02\x4f\x18\xa2\x77\x41\x05\xae\x1a\x9c\x6b\xe0\x82\xe3\x41\x03\x71\xd2\xc9\x40\x7c\x1f\xcf\x41\x07\x8f\xe7\xd8\x01\x3b\xf4\xed\x8b\x1d\xf0\x9d\xe7\x7d\xa1\x03\x74\x68\x79\x0e\xef\x88\x18\x07\xfb\x39\x98\xb9\x05\x96\x68\x01\xd0\x5f\xc4\xcf\x5e\x6e\xfc\xf1\x96\xfe\x66\x13\xb4\x83\x1e\xa2\x0c\xdd\xe5\x7d\xab\x45\xdc\x0b\x33\x2b\xcf\x9d\x07\xe1\x28\x0c\x85\xa1\x38\x18\x12\xb4\x0f\xb5\x0f\x71\x14\x16\x62\x1e\xe6\x42\xbb\x9e\x70\x12\x45\x11\x4e\xa2\x00\xba\xb9\xe8\xa4\xc7\x76\x48\x8e\x45\x0f\x51\x46\x0f\x79\xfa\x65\xb1\xf6\xb4\xbc\x5f\xd6\xef\x0b\x85\xa1\x36\xe1\x3a\x04\x47\xce\x5f\xf0\x83\xd6\x41\xdd\x03\x23\xc1\xa5\xee\xcc\x53\x31\xb2\x21\xe1\xcc\x59\x3d\x0c\x06\x06\xba\x40\xbf\xad\xa2\x4b\x80\x60\xf6\x05\x9d\x93\xd9\x17\x5e\x73\x1f\x31\xa8\xf4\x13\xd4\xe6\x45\x02\x28\x73\x18\xad\x99\x52\x7d\xbb\xfc\xbf\x30\x1d\x34\x70\x5d\x99\x68\xbb\xb0\x6c\x97\x84\x22\xca\x84\x16\x88\xe0\x80\x11\x34\x5d\x17\x60\x04\x97\x55\x8c\xa5\xd9\x4e\x4e\x6b\x6e\xab\xaa\x36\xbf\x25\x67\xaf\x6a\x9b\xe4\x2d\xcd\x6d\x0e\x37\x2d\xcd\x65\x02\x36\x40\x04\xa7\x36\x43\xbc\xf0\xa9\xa0\x35\xf7\x66\xb4\xe6\xee\x82\x4b\x4d\xc4\x5b\xaf\x15\xcf\x18\x27\x03\xf9\x10\x74\x9c\xc1\x3c\x89\x0c\xc4\x1b\xc6\xcd\xf9\x9b\x4b\xe2\xdc\xe3\x4b\xaa\x52\xaa\x78\xa8\x11\xaa\xaa\x0a\x4b\x4b\xa4\x92\xb2\xfc\x2a\x63\x15\x8d\x3a\xb8\x22\xd4\x67\x6c\xdc\xb1\x96\x47\x05\x75\xa4\x8f\x20\xb6\xb9\x99\xa1\xec\x47\xa8\x50\x6b\x37\x86\x05\x67\x48\x43\xad\x15\x84\x81\xdc\x47\x6a\x6b\x2d\xbe\x1c\x04\xc2\x73\xe1\x90\x20\xa2\x42\x41\x80\x00\x0a\x05\xae\x4c\xdb\x71\x9b\x95\x49\x84\xda\x00\x8a\xda\x6c\xeb\x4e\x03\x44\xd8\x4e\xd9\xc9\x40\x25\x9a\x15\x7b\x98\xd5\x34\xe6\xf3\x39\x77\xa5\x72\x12\x28\x6b\x5f\x62\x56\x71\xe3\xd2\xab\xbc\x51\x20\xaf\x36\x9e\xbc\x52\x2c\x01\x65\xee\x4b\x94\x93\x40\x33\x77\xe7\x7c\x3e\x41\x32\x58\x56\x59\x1b\x38\xa3\x49\x36\xf2\x6b\x37\xec\xdc\x97\x29\x05\xab\x5e\x99\x07\x76\xed\x3d\x90\xe3\x7e\x20\x67\xef\xc6\x9c\xc0\x7a\xcd\xcb\x2d\x27\x70\xe3\xba\xc0\x4c\x5a\x1d\xd0\x04\xf3\x19\x55\xa7\x79\xc1\x7c\x06\x5e\x6b\x23\xb8\xb5\x99\x1b\x42\xd7\xda\x2b\x07\xe6\x6c\xdc\x9b\x73\xa0\x5e\xf5\x72\xcb\x39\xb0\x77\xd7\x81\xcc\x03\x99\xbb\xd6\x65\x06\xd2\x06\x5c\x6c\x3e\xc6\x7d\x59\x76\xbe\xe1\x32\x0f\x23\xc9\xc1\x0c\x34\x0b\x30\x92\xbc\x7c\xde\xdf\xa7\x4c\xfa\x55\x1b\x48\x80\x1b\xd9\x53\x9d\x49\x40\xfb\xd0\xee\x0f\xb1\x03\x8f\x23\x6d\x5a\x48\x0a\x83\x23\x49\xec\xd0\x7d\x04\xb6\x0f\x95\x7a\x6a\x33\x6d\x58\x2e\x35\x76\xdb\x4e\x05\x1a\xda\x26\x0e\x4b\xb8\xaa\x70\x58\x40\x36\x81\x42\x40\x01\x69\xf6\x85\x2c\x2e\xbb\xc8\x58\x94\x56\x48\x17\xa4\x25\xe7\x25\xf1\xd8\x04\x3c\x83\x05\xb6\xdd\x77\x64\x6c\x7c\x52\x5c\xa6\xf4\x29\x46\x64\x26\xe5\x24\xe5\xa7\xb8\xa7\xe6\x2b\xe9\x45\x3c\x34\x91\xd3\x51\x21\x6c\xe5\x09\x49\x71\x19\xb6\x72\xd8\x2d\xbc\x2d\x19\x8d\xd7\x61\xb7\x50\x94\xae\xf0\xb0\x89\x2c\x2b\x2d\x2a\xcb\x95\xbe\x87\xef\x6d\x6d\xfd\xa7\xa4\x88\x87\x88\xff\x2d\xf9\x8e\x2c\x2f\x2d\x2a\xcb\x91\x2e\x41\x44\x4e\x51\x66\x51\x5a\xa1\xfb\x7f\x7a\xd2\xd6\xcb\xef\xc8\xf2\x12\x1b\xf2\x25\x88\x20\x6c\x0f\xa9\xab\x81\x74\x06\x57\xc7\x37\x06\xa2\xaf\x93\xf9\xa1\x1a\xc5\x99\xf0\x1c\x21\x53\xd0\x07\xfa\x10\xd8\xc7\x2c\x73\x32\x95\x85\xe7\xa0\x37\xf4\x26\xb0\xbe\xf5\x32\xa7\x02\x85\x85\x58\xd8\xff\x57\x68\x86\xfb\x84\x4c\x61\x33\xdc\xff\xf5\x57\x28\xc4\x42\x42\x05\x4a\x5d\xa9\xad\xc4\x2f\xf1\x4b\xf8\x12\xbf\x24\xa0\x10\xbe\xe4\xcc\x0b\xb1\x16\x66\x69\xbc\xc6\x63\x2d\xce\xb2\x2e\xb4\x2e\x84\x5a\x9c\xa5\xf2\xa2\x4c\xa9\x3c\xd4\xc2\x2c\xf3\x42\xc9\xc5\x9a\x00\x12\xa3\xce\x06\x0f\x27\xf5\x57\x20\x38\x99\x82\xe7\x14\x8c\x45\x6f\x02\xc7\xaa\x07\x38\x78\x4e\xc9\x6f\xb3\xdd\x10\x38\x50\x41\xd5\x0e\xaa\x87\x08\xeb\x22\x0a\xcf\xc1\x59\x74\x40\x07\x95\xd6\xda\x13\x32\xa5\xd1\x5a\x7b\xfb\x52\xa2\x73\x70\xd6\x56\xac\xda\xd0\x6c\xb2\xf3\x36\xc1\x87\x69\xb5\x3b\xca\x56\x6c\x9b\xab\x6c\x87\x58\x95\xb6\x2c\x3b\xce\xc1\x28\x80\xf2\x25\x63\x55\xcc\xca\x97\x8c\x45\xb1\x2a\xdc\x0a\x61\x1b\x23\xb2\x75\x89\x1e\x96\x66\x8e\x35\x38\x0c\x12\xd0\x8b\x8c\x8a\x4e\x8a\x49\x90\xd8\xba\xc4\xd6\x06\x83\x25\x91\x48\x49\x4c\x8f\x8f\x83\x35\x0c\x78\x91\x5b\xab\x8b\x2a\x4a\x24\x4b\x43\x84\x40\x14\x16\xe7\x95\x96\xe9\xad\x5e\xd8\xcc\xad\x10\x44\xd6\xe0\xf0\x13\x53\x83\x33\x0d\x64\x58\xa6\xf0\xb7\xf9\x2e\x27\x53\x32\xd5\x13\xaf\x24\x6f\x28\x5a\xb7\x7d\xb3\xbb\x59\xb5\x32\x04\xfe\x60\x91\x39\xf8\xa1\x55\x26\x6c\x85\xf0\x83\x45\x26\xac\x2f\x54\x95\x4b\xdc\xbb\x4c\x4e\x5c\x87\x0b\x35\xd5\x4d\x56\xfd\x29\xcb\x9b\x2e\xb6\x72\xeb\xbe\x56\xd9\xac\x9a\x99\xed\x55\x45\x7b\x93\x77\xbb\xf7\x84\x2b\x1c\x2e\x54\xd5\x36\x64\x77\x1b\x36\xa1\xfa\x93\x2e\x35\xea\xc7\xb0\xd7\x51\x6d\x68\x71\x52\x75\x66\xfb\x0b\x0b\x2f\x8c\xa0\xcc\x23\xf0\x11\xb7\x6e\xd2\x88\xcd\x5e\x3c\xae\x34\xe1\xc8\x6f\xd0\xf1\x85\xa9\xc5\x0d\xe8\x41\x30\x66\x24\xcc\xcd\x7a\x9c\x75\xb7\xe0\x71\x1d\x3d\x80\xd2\xbe\x81\x47\x9c\x4d\xe5\xc0\x08\x4a\x55\xea\x39\x75\x94\xd6\x03\x9e\xbf\x55\x1c\x9f\x6b\xa3\x90\x3d\x88\x1d\xae\xbd\x2f\x7e\x3a\x7d\xed\xa8\xa1\x7a\x5c\x05\x0b\xf1\x63\x30\xc2\x47\xd0\xfd\x1b\xa0\x1e\x88\xd5\xa6\x6a\xb9\xba\xba\x5a\xae\xee\xd0\x1d\xa9\x07\xd0\x7d\x34\x7c\xc4\x83\x11\x16\xc2\xc7\xb0\xea\xf1\xda\x6f\x3f\x6d\x92\xae\xbd\x3e\x08\x1d\x80\xd5\xbb\x84\x08\x90\xf6\xef\xab\x1a\x56\xed\x0e\x3a\xbb\x1e\xc9\x43\x9e\x3a\x14\x7e\x03\x1e\x74\x4e\x6a\x89\x99\xe0\x30\x0f\x75\x90\x47\xaa\xac\x33\xe6\x21\x0b\x79\xa4\xd9\xa4\xe9\x38\xfc\x4d\x26\x51\x07\xbf\x51\xaa\xce\xd9\xea\x85\x3a\xb3\x97\x0d\xc3\xea\x85\xac\xd9\x8b\x04\xde\x1a\xca\x25\x26\x27\x27\x8a\x06\xec\x4d\x26\x26\x2b\xc5\x92\xc1\xf9\x6b\xaa\x58\x51\x8a\xc5\x7a\x52\xb5\xdd\xfe\xab\x61\x0c\xac\xc6\x31\xaa\x0b\x28\x84\x5c\x4f\x15\x2b\xc9\x89\x92\x01\x7b\x53\xd6\x16\xcb\xef\x1c\x86\x42\x5f\x42\xed\x4b\x82\x11\xfb\x72\x38\xf3\x6d\xe6\x51\x14\xf7\x70\xea\x8d\x11\x76\x9a\x23\xa6\x4e\x1d\x61\xc7\x1f\x71\x63\xea\x43\xd1\xe0\xfc\x35\xf9\xf0\xc6\x8d\x87\x92\x4b\x4d\x22\x50\x06\xa2\x1d\xf4\x75\x85\x5e\x8c\xc1\x1c\xf5\xda\xe0\x9c\x03\x2e\xec\x23\x8b\xce\xbc\x92\x7b\x86\x63\xc1\x0b\x2b\x80\x18\x06\xc4\x87\xd0\x71\x26\x96\x82\x33\x96\x81\x33\xce\x81\xbb\xe8\x0a\x69\x7d\x61\xe6\x70\x18\x8d\x53\xa1\x33\x2d\xe3\x24\x78\x0f\x16\x79\x8a\xec\xd7\xf0\x18\x07\x43\x7b\x8c\x07\x16\x53\x69\xf6\x11\xbe\xd4\x8e\x72\xa0\xe1\x11\xf8\x1d\xde\x85\x81\x95\xb0\x1f\x0f\xbb\xfd\x4d\xe2\x03\xf8\x8e\x60\xbf\x86\xf9\x46\xd5\xc7\xe0\xfc\x8f\x41\x35\xf2\xb0\xd2\xba\x21\x0a\x7f\x07\x2b\x1e\xa1\x5d\xc0\x8b\x69\x02\x2f\xb3\x52\xaf\x3a\x09\x4d\xe0\x2f\x18\x88\xa5\x16\x27\xae\x30\x30\x32\x28\x28\xa5\x5b\x58\xef\x4d\x7d\x12\x73\xf1\xd9\x21\xcf\x63\xe8\xa0\x44\xba\x95\xae\xdd\xb2\x7a\x6d\x3c\x9d\x99\x9a\x62\x4a\xe1\x43\xc3\xcb\x77\x26\x49\x29\x5b\x37\xdc\x0b\xbd\xb9\x05\x3a\xb8\xaf\x20\xb7\x60\x87\xd0\x29\x1b\xc6\xa7\x44\xb9\x85\x26\x85\xc7\x86\xf2\x29\x29\x59\x39\xa9\xd2\xda\xd2\x2d\x87\x4a\xf7\x29\x35\x6e\xc7\xc0\xe1\xd0\x6f\xb9\xf0\xac\x4f\x71\xef\x6d\xdd\x76\x04\x15\x46\xee\x2f\x3c\x50\xb8\x7f\x7f\xcd\x81\x14\x3a\x08\x3e\x80\x2e\x1b\x40\xc7\x83\x0e\xba\xec\xde\x0f\x1f\x48\x07\x0a\xf7\x47\x16\x06\xd1\xf8\x17\xf4\x98\x2c\xd8\x3d\xe9\xa8\xee\x78\x0b\x6e\x69\xee\x9a\x3b\xde\x42\x7b\x0a\xb7\xf0\x96\xea\xae\xba\xc3\x2d\xb8\xa5\xba\x8b\x56\x5f\xb3\xc2\xa9\x23\xe1\x0f\xfc\x43\x1b\xa9\x8d\xc4\x7f\x53\xf8\x43\x1d\x09\x3e\x82\x64\xd1\x59\x95\xff\x9a\xea\xa0\x02\x7e\x5f\x45\xaa\x87\x20\xc8\xf1\x16\xcc\x33\xfb\x80\x9f\x93\x81\xa8\x36\xaf\xe1\x36\xd5\x86\x14\xaf\x33\x6a\x54\x94\x1b\xac\x80\xd8\x3d\xfb\x0b\x4e\x24\x1d\x71\x4f\xdd\x15\xbb\x33\xb4\x9c\x96\x4d\xb2\x16\x03\x07\xc5\x80\xed\x0b\xd2\x83\xd6\x61\x0a\x06\xb9\x2d\x5f\x99\x31\xe5\xc8\xb2\x23\xcb\x6e\x66\x9c\x38\x0a\x53\x61\xa8\x1b\xf4\xf1\xc2\x4a\x6c\x44\xc7\xcd\x7d\x16\x7c\x3c\xce\x1d\x04\x14\x89\xcf\xaf\x3d\x3c\xf0\x8c\x87\xb9\x30\x08\x07\xa1\xdf\xa0\xc0\xe1\x9f\xce\x94\x40\x40\x81\xf8\xe5\xf9\x25\x78\x0f\xba\xeb\x1f\x47\x3d\x0c\xbc\x27\xc2\x07\x85\x81\xda\xd8\x8c\xd9\xc7\xe7\x7d\x99\xe1\x6e\xca\xc9\x91\x73\xf8\xcf\x4e\x1d\xbb\x94\x27\x9d\x50\xcf\xe4\xd4\x25\xd6\x45\x6e\x73\xc7\x85\xea\x12\xee\xc5\x77\xdf\xbe\xf8\x63\xe4\x77\xbd\xfb\x8c\x1c\xd9\xa7\xf7\x77\xa3\xfe\x90\xac\x94\x01\x7b\x72\x38\x17\x07\xc1\x20\x98\xdb\xbc\xed\xd6\xe1\x4b\x12\x4a\x20\x11\xe3\xfa\x2f\x47\x1a\x59\x3d\x36\x42\x26\x66\xc2\x45\x70\x85\xf6\xc7\x9b\x7f\x11\xed\x85\xab\x3e\x9d\x1c\x31\x9e\xb7\x3d\x71\xdd\x21\x42\x6d\x82\x25\xf0\xf6\x69\x53\x77\xb4\xd9\x5f\xef\x00\x9d\x93\xc5\x19\x7e\x9e\x23\xc8\xe8\x45\xf5\x12\xd0\xeb\xa5\x00\x8a\xb9\x3b\x07\xe3\x70\x06\x74\xc1\xe1\xa2\x4c\x61\x3f\xa4\x66\x20\x37\x42\x4a\x8e\xcb\x89\x2e\x4d\x02\x87\x11\x6e\x19\x79\x05\xc6\x02\xbe\x48\xc9\x2d\xcc\x97\x0e\x9d\xaa\xd9\xb6\xad\x9c\xae\xa8\x3d\x54\x7c\x80\xbf\xd1\xbc\x7c\xf6\xd2\xd5\xd1\x9f\x6c\x90\x26\x04\x0f\x59\x89\x1d\xf5\x93\x5f\x0a\xf5\x54\x7d\x7d\xf5\x85\x3a\xb1\xb9\xe1\xc5\x25\x78\x5f\xaf\x39\xab\xbe\x1c\xcc\x15\x56\x30\xd2\x7f\x83\xf6\xc0\xbb\x02\xfe\x5f\x7e\xa4\x5a\x55\xaa\x86\xc3\x7c\x47\xd8\x01\x09\x30\xfb\x84\xfa\xfb\x5e\x27\xb5\x9d\xc1\xf9\x2a\xf7\xf8\xf6\x9d\xc7\x8f\x26\xdd\x19\x3a\x74\xe2\xc4\x61\x43\xef\x4c\x7c\x2c\xa9\x67\xac\x5d\xb8\x22\x63\x51\xba\x22\x66\x65\x65\xe6\x64\x14\x64\xe4\xa7\xe5\xba\x6b\xa3\xd4\x2a\x42\xa6\xb6\x47\x07\x55\xcc\xe5\x67\xad\x49\x0a\x8f\x91\x64\x4a\x36\x19\xd1\xa6\x5a\x9f\xc2\x0b\x84\xb1\x6c\xd4\xad\x62\x51\xbe\x5b\x1c\xff\xa3\x18\x08\x61\x8f\x60\x78\xba\xe6\x45\xe0\x3c\xed\x85\x31\x46\xd6\x67\x86\x94\xcc\x3f\x16\x5d\x1f\x5b\x97\xde\x50\xb3\xbf\xe2\x08\xd0\xa7\x41\x4f\xcb\x5f\x41\xc0\x63\xc8\x11\x4d\xf0\x06\x5d\x40\x22\x12\x4b\x0b\x0a\x65\xbd\x5c\x52\x52\x11\x2a\xaa\x4e\xda\x34\x62\xe7\x32\xa0\xc2\xc1\x41\xaf\xf5\xc2\xbe\xdc\x40\xcc\x87\x4e\xf8\x77\x76\x72\x4e\x4a\x4e\x8a\x7b\x96\x4c\x56\x04\x7d\xb1\xf0\xde\xb1\xe6\x63\x0b\xfe\x59\x7f\x9f\x96\x87\xc2\x5c\x0f\x28\x14\xcd\xd7\xb5\x9f\x39\xf9\x7d\x18\x8f\x57\x54\x59\x4c\x49\x4c\x96\x45\x39\x31\x39\x2d\x5b\x84\x6b\x5a\x3c\x10\x38\x46\xd6\xd7\x04\xe5\x07\x56\x97\x14\x17\x6c\xde\x1e\xb9\xcf\xa6\xb7\x43\x34\xac\x47\x17\x58\x0f\x27\x61\xbd\xab\x79\x18\xec\xbf\x0f\x39\x90\x0b\xf9\x2d\x97\xa1\xe3\x15\xe8\x70\x85\x4d\x48\x54\xb3\xd4\x23\x1c\x7c\x0c\x55\x59\x58\x45\x98\x5b\x5e\x70\x1f\x8c\x1d\x88\x9d\xc5\x79\xaa\xdb\x45\x12\xdc\x9b\x46\xa0\x93\xa4\xdd\x55\xdf\xe5\xaa\x63\xcb\xa3\x45\x7c\x44\x26\x26\xa5\x27\xa7\x49\x5a\xa3\xd5\x48\x6c\xda\x52\xb1\x6e\x37\x0f\x5b\xc9\xe2\xe2\x7c\x25\x5f\xfa\xec\x7b\x02\x4e\xcc\x24\xa3\xcb\x63\xab\x44\x58\x47\x56\x95\x97\x57\x4b\xe6\x9b\x6a\x47\x0e\x2a\xd0\x17\x7a\x63\xa9\x88\x35\x64\x74\x6c\x6c\xb4\x64\xcd\xa4\xd8\x7d\x0e\xd1\xe5\xb1\xd5\x22\x9b\x90\x08\xb5\x24\x14\x83\x2f\xf4\x85\x0a\x09\x06\x9a\x38\x39\x03\xd2\xb1\x37\x8c\x16\xd9\x83\x89\xcb\x49\x10\x30\xd0\x88\x0b\x65\xbd\x9c\x89\x79\x68\xc0\x61\xe2\x79\x12\xfa\x81\x99\x81\x19\x30\x5c\xf8\x0f\xc0\xd3\x06\x98\x6a\x03\xf0\xff\xc5\x70\xc1\xff\x43\xc5\x40\xfe\xe5\x68\x56\x60\x19\xa3\x5a\xd1\x93\x0b\x1a\xb4\x60\x7d\xa2\x98\x16\x1b\x6b\x8c\xe5\xd7\xae\x55\x94\x60\x09\x87\x9f\x5d\xf9\x72\x1a\x74\xa3\x27\x82\xc7\x16\xe8\x0e\x23\xf4\x30\xa2\x12\xba\xdf\x01\x0f\xf1\x3a\x74\x3b\xf2\x12\x86\x9f\xa5\x95\xfa\x7d\xca\x3e\xbe\xbc\xdc\x98\x56\x2e\xed\x49\x7c\xba\x20\x48\x1f\xee\x87\x1f\x27\x06\x88\x69\x61\x46\xff\xe8\xcd\x74\x42\x7c\xa4\x71\xcb\xe2\xc5\xc5\x8b\xf9\xb8\x48\x53\x52\x82\x14\x13\x9f\xb2\x34\x2d\x8a\x0e\x1f\x1e\x3f\xcc\x4b\xef\x55\x3a\x6c\xfb\x70\x31\x3f\xaa\x70\x69\x45\x3c\x9d\x54\x52\x63\x2a\x3b\x7d\xba\xf8\x34\x5f\x59\x63\x4c\x28\x95\xaa\x37\x67\xfb\xe7\x87\xd1\xc5\x01\x8d\xf8\x71\xb8\x1e\x86\x58\x7a\x70\x15\x15\x05\x25\xa5\xd2\x99\x33\xbb\xae\xdf\xd2\xdf\xda\x78\x7d\xd1\x19\x31\x49\x08\x0b\x33\x05\xec\x0c\xa3\xb7\x87\x95\x06\x07\xe9\x83\xe2\x83\xc3\xc3\xc5\xd0\xb0\x2c\xff\x1d\x61\xf4\x61\x01\xa6\xe2\x54\xae\xa2\x32\xbf\xb4\x44\x7a\xfe\xbc\x11\x74\x20\xe8\x41\xf0\x03\x5d\xdf\xe7\x62\x92\xf0\x4a\xa0\xef\x8d\x3b\xea\xd1\x5d\xdf\x3d\xc0\x63\xfc\x38\xf1\x95\x40\xc7\x97\x54\xa4\x55\xf2\xff\x53\x09\x7a\x40\x8f\xef\x60\x2e\xac\xd0\xc3\x8a\x91\x30\x17\x7b\x40\x8f\xb6\x8a\xd0\x01\xdf\xbd\x89\x43\x71\x8c\x1e\xc7\x4c\xc1\xa1\xd8\x01\xdf\xfd\x2f\x01\x17\xb5\x8f\x5c\x0f\xcd\xf5\x36\x71\x9e\x71\x94\x41\x61\x54\xdb\x91\x13\xf8\xc2\xeb\x1a\x41\x55\x9c\x23\x18\xb3\xa2\x29\x35\xf6\x17\xba\x6f\x01\x06\x73\xa3\x01\x97\x1b\x19\x1b\x88\xfb\x67\xe8\xe3\x6e\xd3\x04\xd1\x28\xb4\x2a\x70\x98\x91\xa9\x69\x82\x64\x55\x2c\xca\x7a\xe1\x7f\x21\x36\x4c\x23\x63\xff\x78\xf5\x50\x00\xfb\xae\x01\x74\x2d\xa0\x7b\x10\xe5\x2a\xc3\x43\x61\x16\xe8\x7e\x05\x5d\xb0\x0d\xae\xb3\x2f\xb6\x79\x01\x3a\xf6\xff\x42\x40\x87\xbe\x07\x05\xf0\x05\xdf\x83\xc2\x49\xd5\x91\x1b\x34\x08\xb6\x09\x4f\x9f\x12\x3f\xc0\xee\x83\x82\x79\x1e\x34\x83\xcc\x80\xb3\x30\x91\x41\xc6\x6f\xd6\xcc\x09\xe2\x94\x8f\x3f\x1e\x82\x43\xf5\xfe\x8c\xc8\xae\xcc\xf7\x64\x24\x36\x75\x62\x7f\x61\x1b\x03\xc4\xb9\xcf\xaf\xdd\x13\x6f\x7d\xfb\xcd\xcf\xf0\x91\x5e\x2b\x41\xdd\x41\x7b\xfb\x1c\xf8\xe1\x60\x18\x8c\x7e\xe8\x87\x83\x71\x30\xfa\xd9\xaa\x81\xb3\x00\x9d\x5e\xb5\x19\x9e\xf5\xc2\x4e\x10\x20\xa8\x22\x1c\xe3\xe6\x82\x34\x00\x5c\xb0\xc3\xd3\x0d\x35\x01\x69\x9b\x36\x44\x6e\xc8\x0f\xd8\x1d\xf9\x6a\xcc\x37\x3d\x4e\x62\x7b\x3a\x54\xd9\x11\xbb\x83\x2f\x2c\xcc\xca\x29\x90\xf6\x95\x56\x1e\x8a\xdf\x47\xc3\xea\xef\xb9\x49\x30\x09\x19\x18\x88\xfd\x81\xa2\x59\x7d\xdf\x0d\x35\x01\xe9\x91\xeb\x23\x37\xe4\x05\xec\x89\x04\x7d\xcf\xbf\xd0\x70\x19\x07\xd2\xa1\x45\xdb\x63\x77\xf2\x85\x05\x59\x39\x85\xd2\xbe\xd2\x8a\x43\x09\xf6\x07\x5e\x75\x12\xa6\xdb\xbd\xd6\x4c\x07\x5f\x74\x06\x5f\xd7\x2c\x03\xfd\x7f\xec\x4a\x4b\xa5\xda\xcc\x05\x9a\xd6\x46\xc5\x04\xd1\x4b\x37\x2d\xdb\xb0\x80\x5f\xb7\xbe\x78\xeb\x26\x29\xa9\x90\x08\xdf\x96\xb0\x6f\xbf\x1e\x68\xe6\xdc\x89\x0d\x4b\xb7\x89\x15\x41\xfb\xa2\x0e\x98\x68\xf5\x3a\xe8\xb8\x40\x61\xc1\xb2\xdd\x27\x37\x89\x31\xfb\xd7\x6e\x0d\xcc\x3a\x90\xb5\x6f\x6b\xc5\x7e\xfa\xe4\xb6\x13\xbb\xcf\xf1\x7b\xf7\x24\x46\x6d\x93\x8a\x52\x88\xed\x9b\x4a\xd6\x06\xe9\xb5\x8f\x21\x94\xdb\x7e\x26\xea\xf3\x45\xdb\xe9\x7d\x93\xc7\x56\x8e\xe1\xd9\x1d\x41\x6b\x33\x53\x83\xa5\xd3\xbb\x2f\x6e\xfd\xa2\xa0\x31\xff\xd0\x99\xd4\xc6\xb4\xc6\x45\x87\xfc\x52\x7b\x27\x0c\x5a\x33\xda\xaf\xfe\xf4\xd1\xe3\x27\x0f\x37\xec\xcf\xbf\x1c\xd4\xb0\xb6\x61\x56\xbe\x7f\x10\x8d\xc3\xd0\xbd\x07\xce\x8e\x40\x7f\xec\x8d\x5b\xdd\x70\x15\xbe\xb3\x7e\x4b\xe2\xea\xf2\x75\xee\xe0\x85\xcd\xc4\xa6\xe2\xda\xf8\x5a\xbe\x48\xc9\xce\x2b\x92\xd8\x95\x90\x02\x1d\x08\x76\x1f\x1c\xdf\x58\x6e\x2a\x33\x95\x1b\xdd\x65\x2a\x3b\x5b\xce\x96\x65\xb9\xc3\xfb\xd0\x11\x88\x7b\xe0\xd4\x28\xd5\x9e\x89\xfc\x7c\x51\x2d\x9d\x9f\x10\x9f\x13\xc7\x97\x95\xe6\xe4\x97\x48\xec\xca\x33\xb5\x35\x9f\x47\x9c\xa1\xc1\xc9\x0f\x89\x7b\xd8\x91\x67\xd7\xa5\xa5\x9a\xd2\xf8\xe2\xbd\xfb\xf2\x0f\xf0\xec\xca\xd3\x27\x93\x22\x8f\x49\xa7\x23\xbe\xd8\x5a\x7b\x9a\xb6\xcc\x03\x2f\x6e\x5b\x62\x44\x69\x04\x9f\x94\x6c\x4c\x4f\x92\x30\x05\x3b\xe0\x89\x5d\x71\x59\x71\x59\x71\xd9\xee\x26\xd2\x68\x94\x8d\xf6\x36\xb1\x23\x12\xe3\xd1\xc9\x4f\x8a\x58\x54\x33\xe7\x4c\x04\x9d\x56\x52\x9a\x59\xc6\xc7\xc5\x67\xa6\x25\x48\x8b\x22\x22\xe7\xd4\x2e\xa2\xd1\xa9\x11\x88\xf1\xd0\x31\xbf\x20\x2b\x9f\x4f\x5c\xb7\x36\x2d\x90\x5f\xbc\xb4\xa8\x66\x85\xb4\xb8\x76\x76\x54\xc4\xe2\xf0\x45\x5b\xe7\x9c\x09\xa7\xd7\xde\xba\xbf\xe5\x01\xbf\x7f\x5f\x4e\x41\xbd\xb4\x78\xc3\xdc\xa8\xd9\xa9\x7e\x69\xab\x17\x15\xf8\xd1\xac\xef\xa2\xfc\x86\x35\x67\xf8\xdc\x5c\x39\x2b\x57\x62\x57\xbe\x28\x79\x7a\xf0\x9b\xc6\xe0\xc5\x01\xcb\x97\xae\xf2\x0f\x4a\xfb\x64\xbf\x3f\x1d\x51\xbd\x2b\x61\x37\x5f\xb3\xad\xa0\xbc\x4a\x82\x61\xe0\xfe\x27\xcc\xae\x05\x7f\xe8\x0d\x5b\xdd\x58\x5f\x58\x05\xef\xec\xa9\x2c\x3e\x14\xbb\xd7\xdd\xa5\xc6\xd2\xd0\xe2\xa8\xbe\xf7\xab\xd9\xf7\x85\x93\xa5\xc1\x26\xf8\x77\xea\xf9\x12\x3b\x62\xc7\x9e\xb6\x5b\x37\x59\x80\x6a\x01\x56\x0a\x18\xaa\x36\x73\x70\x17\x8a\xb1\x18\xef\xe2\x47\xa3\x07\x4f\x1e\x25\xcd\x18\xbf\x60\x0e\x12\xfa\x54\x21\x70\xfd\x9e\x03\xde\xc2\x74\x01\x86\x7e\xfd\xe4\xe6\xd7\xe2\xd5\xbb\x8d\x57\x80\xd1\x43\x77\xc1\x56\xfd\x2e\x14\x43\x31\xdc\x15\x31\xd3\x1a\xc0\x69\x0f\xb4\x07\x31\x31\x72\x68\x45\x8c\x3b\x8c\xc2\x51\x15\x31\x3b\xe5\x8a\x0a\x77\xf5\x81\xfa\x80\x30\x1f\x34\x38\xef\xe4\x62\x2a\x42\xe5\x2d\x31\x18\x80\x01\x6e\x03\x07\x3e\x9e\x78\x63\xc8\xf1\x5e\xee\x77\xef\xee\xdc\x01\x71\x10\x57\x51\x29\xef\x8c\xa9\x70\xb7\x69\x67\x3e\x06\xe7\x74\x98\xe3\x68\x20\xa6\xc0\x0c\x27\xf3\x1b\x4b\x3e\xb7\x3f\xa3\xce\x7f\xf3\x96\xb4\x94\x18\xb1\xaf\xaf\x3f\x4a\x1f\xe8\x27\x6e\xef\xff\xb8\xa8\x38\x2b\xab\x48\x2c\xcf\x92\xe5\x9c\xb2\x9a\x97\x5b\x5f\xd6\xbc\xa4\xf3\xf7\x16\xec\xad\xd7\xab\x5b\xb4\x51\x5c\x5a\x4a\x6a\x9a\xc9\x28\x67\x99\xc4\xa2\x65\x2b\x0b\x97\xf1\x1f\x79\x87\xaf\x99\x20\x25\xa7\x67\x66\x18\x93\x13\x97\xa5\x2c\x4d\x5c\x46\x63\xdf\x95\xe8\x8a\xd3\x70\x2c\x8f\xed\xc7\x7d\x07\xf4\xd5\x06\x70\x79\x70\xec\x7c\xc4\x86\xbd\x52\xb6\x31\x2f\x23\x43\x6f\x4c\xef\x35\xcf\x4b\xbf\xb1\x34\x6a\xcf\xcd\x0b\xbf\x7f\x56\x2e\x16\x1d\x2a\x39\x96\x7b\x98\xce\xca\x96\xb3\xb2\xf5\x79\x91\xc6\x0c\x9c\x87\x04\x38\xc0\x7c\x98\x09\x1d\x60\x13\x2c\x38\x20\xe6\x6c\xab\xcd\xa9\xe5\x61\xd0\xa3\xb1\x38\x04\x9d\xd6\xf4\x8b\xe9\x2a\x65\x1b\x89\xa3\x77\xee\x1f\x7a\xc8\x2b\x95\xe9\x99\x85\x52\x65\xea\x7d\x6c\xbf\x59\x0f\x33\xd4\xad\x5d\x05\x4c\x44\x05\x16\xaa\xa3\x21\x3a\x11\xc2\xd5\xad\xb0\xc2\xf5\x10\x44\xe2\x52\x78\x00\x1a\x34\xb0\xdf\xb2\x5f\x99\x63\x0d\xce\xb7\xb8\x85\xc9\x0b\x93\x16\x89\xc1\xd8\x3f\x18\x07\x04\x63\x7f\x3a\x30\x65\x55\x61\x08\x8f\x6e\xab\xa1\x3b\x38\xc0\xb0\xab\x10\x0c\x1e\x3f\x48\x65\xdb\x77\x29\xbb\xf8\xa6\xbc\x25\x7e\x92\x39\xdd\xda\x9d\xdb\x8d\x14\x4c\x0d\x2d\x12\xf3\x12\x36\x14\xc6\xf3\xa8\x43\x72\xf6\x2c\x74\x90\xd8\x6f\x33\x73\x88\xed\xf0\xe1\xe7\xd0\x1f\x46\xea\x41\x46\x37\x20\x30\x5d\x64\x8f\xaf\x09\xcc\x4c\x0b\x94\xf0\x0b\x3f\x9c\x85\x7f\xe2\x11\x3d\x5e\x82\x09\x38\x0a\x2e\xe6\xd7\xe7\xa6\x88\xc9\x14\xba\xc4\x8c\xc3\xe3\x38\x84\x5f\x1a\x55\xdf\x00\x3c\x0c\xf8\x2e\xbb\x50\x62\xbf\x3a\x66\xc2\xa1\x8d\xfe\x3c\xb6\x9f\x81\xb3\xfb\x4a\xec\x69\x9c\x0c\xce\xd8\x09\xa6\xc1\x56\x98\x07\xfb\x21\xee\xb2\x58\x79\xab\xe4\x4e\xd5\x2d\x9a\xfd\x36\xb7\x2c\x27\xbf\xac\x80\xbe\x04\x4e\x40\x1d\x82\xce\xfc\xed\xcb\x9b\x93\x6e\x49\xf9\x26\xa2\xa8\xb4\xa8\x48\x72\xe9\x1a\x0c\xbe\x8e\x06\xe2\x38\xcc\x75\x32\xdf\x33\xff\xcd\xad\x5f\x1f\x1f\xb6\x59\x5a\xbb\xac\x78\xe6\xa9\x75\x30\x0b\x3b\xbb\x6d\xde\x15\xeb\x1f\x62\x34\x66\x19\x79\x0c\x39\xa4\xf9\xb6\x10\x59\xa9\x69\x59\xa9\xfc\x12\xff\xb5\x8b\x52\xa4\x94\xf9\x87\x97\x9c\x8b\x87\xbf\x3d\xdd\xb4\x4d\x97\x89\xcc\x0c\x39\x93\x5f\xb4\x2c\xd8\x56\xe0\x7b\x64\xe1\xc5\x34\xb5\x6a\xba\x9b\x36\xcb\x44\xcc\x5b\xb2\x72\x5e\xa6\xe4\x9b\x79\x62\xc9\x67\xbc\xea\x4b\x62\x69\x30\xb1\x20\x6d\x45\xc0\x02\xfd\xdc\x13\x2b\x2e\x88\x76\x99\x1b\x5e\xd7\xab\xdb\x2f\x1d\xcf\xdb\x5f\x5f\x78\xcc\xfd\x9e\x3a\xa8\xe0\x70\xe2\x91\xb0\x3d\xee\xd8\x13\x3e\x0e\x3e\xb4\x7a\x9f\xff\x2e\x77\x0c\x83\xde\x44\xc9\xe6\xa8\xfc\x48\x7e\x22\x2e\xe5\xd6\x6f\x8d\xda\x9b\xb6\x3f\xed\x40\xe1\x81\x9a\x3d\x39\x39\x39\xd9\x39\x39\xf8\x3e\xf4\x72\x0b\x3c\x34\xa7\x28\x60\xdd\xf2\xb5\xa9\x9f\xec\xf5\xcf\x36\x66\x65\x66\x1b\x21\x19\xcb\xdd\x0e\xae\xca\x33\xc2\xfa\xff\x1f\x73\xff\x1d\x17\xc5\xf5\x3d\x8c\xe3\x0b\xec\xcc\x0e\x73\x75\x05\x76\x87\xc0\xee\xce\x0c\x2a\x62\xef\xe4\x6d\x43\x83\x35\x1a\x62\xc3\xd5\x88\x68\xec\x02\x0a\x2a\x4d\x7a\xef\x2c\xb0\x94\xa5\x49\x6f\x76\xb1\x61\x49\x14\x45\x63\x8a\xd1\x14\x95\x14\x4d\x8c\xa9\x9a\xa8\x49\x34\xd1\x9c\x59\xce\xe2\xfb\xf7\xda\xc5\xbc\x9f\x77\x7e\xcf\xf3\x7c\x5e\xdf\x3f\xbe\x7f\x7c\xb7\xcc\xbd\xf7\xcc\xdc\x3b\xf7\xde\x73\xee\xb9\xe7\xb6\x73\xb6\x50\xe6\xa5\xd2\x17\xdc\x85\xdc\xf5\xa7\xdf\xd0\xea\xf3\xd7\xad\x29\xd2\x57\x62\x94\x5b\x61\xc8\xea\xe4\x84\x03\x5e\xb0\xd2\x0d\x97\x4b\x13\xa3\x3a\x17\x37\xae\x0a\x77\x5f\x13\x99\xbc\xb4\x3e\x10\x74\xf8\x93\x1b\x66\x49\x93\xc3\xcf\x2c\xad\x5f\x13\xe9\xbe\x2a\x3c\x61\xd1\xde\xd5\xb0\xdb\x12\xe8\x86\xf5\xf0\x74\xdb\xc9\x25\xd5\xeb\xc2\xdc\xd7\x84\xa6\x2d\x3c\xb4\x16\x52\xf0\x9a\x5b\x73\xf3\x81\xea\xc3\xda\xbd\x6d\x19\x89\x4d\x22\x44\xe0\xb0\xd3\xdb\x8f\x07\x1f\xde\xe4\x0e\x5e\x38\x63\x4f\x68\xd5\xe6\xfc\x8d\xee\xcf\x2e\xb6\xd7\xb5\x1c\x28\x3b\xe6\x7e\x16\x76\x94\x9f\x35\x76\xe6\x9e\x73\x57\x36\x36\xee\xea\x99\x03\x9b\xec\x74\xf2\xa3\xe0\xe9\x00\x3f\xc0\x7c\xae\xb8\xb8\xb8\xb8\x04\xff\x05\x67\x93\xda\xc4\xd4\x86\xf8\x86\xe4\xfa\x96\xa3\x6d\xed\x7b\x0f\x43\x94\x65\xbc\xdb\x33\x0c\xa0\xd2\x8b\xc1\x7d\x43\xad\xb6\xa4\xb8\xb0\xac\xc4\xe2\x62\x5e\x16\x7d\x5c\x6c\x6b\xd9\xd3\xbc\xaf\x51\x5a\xdd\x7b\xc7\x2d\xdd\x78\xa6\xb0\x42\xdb\xb4\x37\xaf\xb8\x49\x2c\x2e\x30\x16\x15\x6b\x4a\x2d\xe1\x3d\xb2\x94\x66\xe1\x60\xdd\xa1\xdd\x87\xab\x33\x33\xdd\xa4\x25\xbd\x1f\x5c\x45\x02\x4e\x18\x47\xa5\x95\x54\x64\x55\x6a\x6b\x7f\xea\xaa\x68\x10\x2b\x4a\x4a\x2a\x2a\x35\x75\xa3\x60\x6a\xe2\x1e\x01\xd6\x7d\x0f\xb3\x60\x2c\x10\x58\xcc\x54\x35\x94\xb6\xb4\x6a\x5a\x33\x5b\x92\x1b\x04\xb8\x84\x7a\xfc\x1c\xd6\xe3\x73\xad\xdf\x6b\x59\xc9\xaf\x8b\xe8\x04\x71\x54\x79\x56\x6a\x49\xaa\x36\x6e\xfc\x8a\xd4\x18\x31\x2d\x2b\x33\x35\x45\x13\xf7\x00\xa7\xee\xde\x29\xe0\x82\x19\x38\x16\x5d\x91\xc1\x09\xcc\xf6\x4d\x41\xeb\xdf\xd0\x44\x94\x46\x56\xc7\x08\x9f\x21\x01\x47\x54\x83\xe3\x74\x26\xbf\xb0\x30\xbf\x50\x6b\xbe\xf1\x84\x03\xea\xee\x47\xe0\x0e\x03\x35\x30\x20\x00\x1c\x27\x7c\x2b\x80\xff\x2b\x30\x01\x07\x81\x03\xbe\x82\x76\x38\x1d\xc7\xa0\x07\x2e\x7e\x85\xb1\xd8\x9b\x97\x73\x6d\x4d\x4d\x6d\xe0\x03\x3a\xd4\xa1\x4f\x78\x74\x74\x78\x78\x74\x53\xdb\xa5\xe8\xae\x4d\xc7\x85\xe3\x9b\x56\x34\xe9\xb5\xd6\xb0\x28\xd9\x5f\xe3\xf2\x72\x33\x4b\x29\xa5\x25\x65\x10\x38\x9b\xaf\x00\x27\x39\xc7\xd8\x19\xe0\x25\xf3\xc8\x0b\x37\xc1\x0d\x74\xf7\x1d\x7a\xda\xa5\x59\xdc\xcd\xe4\xee\x1d\x1f\x0b\x5b\xa2\xd6\xc7\xaf\x4d\x67\x9a\x56\x94\x2f\xf3\xd7\xd8\x94\xb3\xfa\x61\x2c\xc6\xe2\x54\xf0\x83\x28\xd8\x09\xd3\x60\x05\xc4\x9c\x3b\x97\x1e\x7b\x46\x28\x3e\x5d\x7d\xaa\xe1\x38\xd3\xb8\x74\x61\xf9\x42\x2d\x5e\xc4\x28\xcc\xc1\x4e\x1c\xdc\x89\x2e\x8f\x06\x89\xe8\xf0\x18\xb8\x00\x18\xa6\x85\xe1\xa0\x3e\x0f\xf6\x8f\xc5\x47\x4f\x3b\xc1\x05\x06\x6b\x70\x1d\x2c\xe5\xc0\x21\x16\xec\x83\x9e\x0a\x45\x21\x86\xe0\x10\x0d\x36\xae\xb0\xf8\xe1\x49\xb4\x17\x72\x1b\x1a\xf3\x1a\xb5\xd5\x05\x14\x84\x82\xee\x09\x6c\x81\x62\x8d\x1e\xbe\xe6\x52\x61\xe8\x3c\xd8\x80\x2e\xdf\xde\x41\xf1\x26\x0e\xbb\x80\xa3\x19\xc8\xc5\x35\xdc\x5f\x9f\xff\xf2\xd3\x51\xb1\xf6\x54\xe9\x9d\x33\x9a\x1f\xa3\x7f\x7a\xe3\x33\x21\xd8\xf7\xb5\x85\xd3\xa2\xf5\x89\x8b\x62\x36\x6c\x62\x82\x82\x23\xfd\x02\x35\x1b\xaa\x36\x37\x85\x08\x20\x1c\x84\x61\x4f\xde\x05\xd7\xbc\x84\x94\xf0\xcc\xa4\x25\x83\x91\xf3\x1e\xb2\x8c\x59\x7f\xea\xd2\xd6\x2b\x5a\xe5\x71\xde\xc5\x00\x5f\x4b\x6b\xbf\xcf\xab\xd8\x73\x0e\x0a\xe0\x8e\xea\xd3\x9e\x76\x29\x83\xc3\x75\x38\x16\x27\xe1\x06\x41\xf5\x33\x6e\xc0\xb1\xf0\x2f\x58\x0f\xeb\xad\x8c\x0c\x36\x9e\x3a\x99\x99\x74\x42\x4c\xda\x99\x16\x96\x1b\xc6\x54\x85\x6e\x2d\x09\xd1\xe2\x38\x54\xa0\x3b\x8e\xc4\x31\x40\xa3\x0b\x8c\x17\x55\x9f\xc2\x38\xa0\xc1\x05\xc6\x1c\xcf\x3a\x9e\x70\x44\xdc\x5f\xb2\xaf\xb2\xad\x86\xa9\x5f\x6d\x0a\x08\xd0\xe0\x3c\x00\xae\x75\x76\xd5\x2b\x33\x34\x38\x73\x0e\x7a\xe2\xb0\xd1\x42\x1a\x9d\x94\x54\x50\x98\x24\x42\xe0\x17\x47\xe0\x22\x2c\xd4\x34\x1b\x5a\xf2\x5a\x04\x83\x3c\xe8\x69\xc0\x93\x65\x0f\xee\xe8\x2f\xe1\x88\xe2\x11\x0c\xfc\xf0\x94\x0b\xcd\x5e\x96\x12\x26\x2c\x8c\x78\xe3\xb5\x59\xda\x75\x9b\x9b\xf7\x6d\x17\x55\xdd\xef\x1e\x84\xe1\x8f\x4a\xbe\x62\x54\x3f\x6f\x1c\xef\x35\x77\x54\x34\x93\xd8\x9c\xbe\x67\x8f\xe6\x97\xeb\x47\x6f\x37\x09\x97\x76\x9f\x39\xd5\x72\x9e\x39\xb2\x72\xf7\xc2\x45\x1a\xb8\x03\x53\xb8\x11\xec\x73\x3d\xad\xfa\x74\x18\xff\x5c\xaf\xc0\x89\xc0\x21\x07\x13\x85\x1e\xbd\x17\x6f\xed\x16\xcf\xf5\xac\x80\x03\x3f\xb2\x3a\xf9\xbf\x25\x37\x6e\xcd\xc0\xf8\xd0\x6c\x21\x2a\xdd\xb8\x3e\x38\x3c\xa2\x6c\xe7\xc0\xc8\x51\xa8\x42\xe5\x8e\x07\x83\x76\x46\xa4\x47\x68\x83\x8c\x27\x5b\xd2\xc5\xd0\xe2\x81\xb5\x6f\xc1\x25\xbe\xa8\xcc\x58\x66\x3a\x83\xce\x19\x57\x34\x7b\x0f\xd4\xb4\x0a\x8d\x75\x89\xcd\xda\xe2\x62\x43\xa1\x51\xcc\x3b\x96\x7b\xec\x98\xa6\xbd\xf0\xec\xee\x03\x02\x90\x4b\x0f\xde\x02\x67\x2d\xd0\x3f\x2f\x1a\x7c\x56\xdc\x1d\x5a\x18\x18\xac\xd9\x9c\xbb\x39\x6f\xb3\x90\x6f\x34\xe6\x1b\x9b\xea\x6a\x9a\xb5\x2d\x87\xe2\x77\x8a\x7e\xe8\x6c\x7a\x53\x93\x6e\xcc\x28\xca\x10\x8e\x4d\xfa\xf4\xf5\x7b\x31\x4c\x75\x6e\x59\x5a\x92\x06\xca\xa1\x98\xf3\x60\x3d\x36\xf2\xbb\x75\xf4\x06\x07\xf3\x8f\x30\x82\xc5\xc0\x3c\x1c\x3e\x6f\x22\xfa\x33\x51\xab\x72\x66\x2c\xd7\xf8\x15\xbf\x6e\x7c\x5d\xc8\x4e\x4b\xcd\x4b\xdd\x14\xda\x16\xaa\x0d\x5e\x13\xb1\x49\x1c\x03\x6f\xd6\x4c\xd2\x24\x66\x25\x65\x25\x09\xab\x07\x8d\x19\xe2\xb1\x36\x3c\x35\x3c\x6b\x47\x16\x13\x97\x93\x96\x1c\xa7\x79\x15\x66\xee\x78\x2b\x53\xd8\xd6\x18\x3f\xf3\x9d\x23\xa7\x76\x9f\xd1\x36\x36\xe6\xe7\x34\x8a\x31\xc0\x9c\xb1\xca\x0b\x5a\x78\xe3\x04\xa8\x1b\x80\x88\xc6\x86\xc6\x82\xc6\xd3\x1d\xc9\x1d\xda\xae\xc4\xee\x03\x0d\xe2\x5b\xa5\x30\x73\xef\x27\x9a\xba\xb4\xaa\x38\xa3\xb0\xa3\x24\xbc\x24\xbc\x02\x65\x67\xc6\x3d\x0e\x7c\xca\x64\x55\x67\x55\xef\xbe\x0b\x6b\xe2\x1e\x6a\x4e\xac\x6a\x09\x11\x82\xc2\x76\x06\x69\xd3\x53\x8b\x8c\x19\xa2\xf1\x6a\xf1\x87\x57\x35\x17\x73\xbe\x88\x3a\x27\xf8\xc2\xbf\x70\xf8\x63\x9c\x9f\xc7\xf4\xe1\xe0\x0d\xd8\x6f\x1d\x05\xf5\x98\xc0\xe4\x90\xc7\x4b\x6e\xdc\xea\x81\xf1\xdb\xb2\x85\xa8\x8c\xa2\xf5\x21\xe1\xe1\xa6\x70\x8f\xbf\x31\x31\x30\x3c\x22\x2d\x5c\x1b\x6c\xc3\xc4\xb6\xe2\x81\xb5\x6f\xc3\x25\xde\x58\x56\x64\xc5\x84\x93\x15\x13\xfb\x6b\x5b\x85\xc6\xfa\x84\x26\x6d\x71\x71\x41\x41\xb1\x98\xdb\x87\x89\xa2\xb3\xbb\x0f\x0a\xc0\x5e\x7a\xf0\xb6\x15\x13\x8a\xfb\x36\x4c\x6c\x2b\x0c\x0c\xd1\x6c\xce\xdb\x94\xfb\x02\x13\xcd\x75\x35\x4d\x7f\x63\xc2\xc9\x8a\x89\xa2\x0c\xa3\x0d\x13\x7e\xf7\x62\xff\xc6\x84\xc9\xbc\xd3\x83\x97\xf6\x43\x3b\x6b\x5b\xe8\x75\x94\x41\x03\x3b\x78\x1d\x7a\xf8\xe3\x22\x4c\x60\x0c\x0a\x5c\x88\x09\x1e\x98\x1b\x1b\xc2\x18\x62\x42\xa6\xe0\x60\xe1\x55\x88\xc4\x0a\x83\x41\x83\xe5\x98\x8a\x73\x2d\x85\x58\x27\x62\x92\x1e\x05\x83\x41\x93\x93\x97\x97\x23\xe6\x17\xe4\xe7\x6b\x9a\x43\xef\x8f\x84\x94\x22\xc6\x08\x07\x21\xe1\x7b\x38\xaa\x85\x95\x60\x9f\x98\x7e\x56\xac\xcf\xa9\x37\x99\x6a\x61\x05\xfc\xea\x56\x56\x9d\x5d\x9b\x54\xc6\x14\xe4\xe6\x16\xe6\x68\x27\x54\x62\x70\x13\x4e\xde\x89\x21\xc1\x73\x03\xb1\xd6\x8b\x31\x04\x44\x0c\x0c\x16\x20\x08\x5c\xee\x77\x19\x34\xe0\x0f\x14\xec\xb8\x08\xe1\xe9\xe7\x7e\x79\x1f\xec\x4e\xee\x3d\xb5\x17\x46\x7f\x7c\xf2\xdb\x93\x77\xeb\x60\x66\xcb\xe9\xd6\x53\x07\xc0\x03\x4e\xc3\x72\x46\x29\x7d\x02\xa2\x9d\xe1\xfd\xf3\xdd\x52\x25\xf0\x52\x55\xf7\xf9\xf7\x1d\x74\xd4\x08\xb3\x9a\x6b\xcb\x6f\xcb\x69\x15\x30\x2d\x09\xa2\x6e\x25\x77\xc6\x9e\x0d\x3f\xe5\x8e\x21\x83\x61\x2e\x4c\x0c\xed\x08\x3a\xb2\xf1\x80\x3b\x4e\xc0\x79\x7f\xc0\xd6\x75\x6d\xab\x1b\x02\xaa\xdc\xa7\x63\x74\x35\xa4\x51\x11\xc6\x88\xc2\xf0\x88\xf0\xbc\xc8\x7e\x9e\x55\x98\x3a\x03\xa2\x02\x92\x57\xc7\xac\x8b\x70\xff\x03\xb7\xe1\x04\x98\xb7\x31\x34\x28\x28\x74\x83\x3b\xcc\xc5\x89\xb8\xf5\xcf\x88\x75\x31\xab\x93\x03\xdc\x21\xda\x07\xd3\xab\xa9\xdc\x88\xbc\x70\x43\xb8\x21\xbc\x30\x22\xa2\xdf\x10\x48\xab\xc6\x28\x9f\xaa\x80\x86\xd5\xad\x6b\xdd\x61\xeb\x9f\x38\x0f\x27\x1c\xd8\x70\x64\x4b\x47\x98\x3b\x8c\x87\x79\x9e\xb8\xed\x54\xf8\xdb\x31\x9d\xc9\xee\xb7\x60\x57\x12\xa6\x53\xad\x39\x6d\x79\xad\x6d\xad\x85\xad\xfd\x3c\x93\x20\xf3\x36\xc6\x76\x56\xbf\x5d\x7f\xaa\xcd\xdd\x13\xb6\xc1\x78\x9c\xd7\x71\xe0\xc8\x91\xfd\x1d\xee\x38\x17\x26\xc0\x56\xcf\xd6\x53\x0d\x6f\x57\x9d\x77\x37\x28\x30\xea\x16\xa4\x26\x51\xc6\xd6\x82\xd6\x36\xcd\x7e\x57\xfc\x12\x77\x63\x0d\x7e\x8e\x5f\x60\x35\xd4\xc0\x97\x70\x0b\xac\xee\x17\xf0\x39\x58\xe1\xb7\x84\x6e\x49\xc5\xf5\x0e\x91\x54\xbd\x43\x2c\x2a\xaa\xb7\x54\x61\x1e\x62\x51\x99\x87\x48\x2a\xaa\x77\x88\xe5\x75\xae\x77\xa5\x34\x8e\x32\x5f\x55\x98\x57\x4a\x63\xcd\x2b\x2d\x63\xa9\xde\xab\x8a\xf7\xcd\xbf\x73\xbd\x26\x49\xdf\x6b\xb2\xe8\xa9\xe7\x6a\x85\xd9\x64\xd1\x9b\x4d\x92\x9e\x52\x7a\xa0\x7b\xb7\x8e\xd2\xdc\xb4\x33\xdc\xd4\x51\x8f\x6f\x3a\xc0\x7d\x1d\xe5\xc5\xe1\x62\x1c\x85\xa3\x71\xb1\xd8\x5b\xa9\xc0\xc5\x30\x0a\x47\xc3\x62\xe1\xcc\x4d\x7a\xeb\xd6\xbc\xd2\x6d\x22\x3a\xb5\x8d\x07\x07\x70\xd1\x98\x2b\x15\x30\x14\xfa\x41\x7f\x18\x2a\x98\x47\xd3\x6d\x37\x29\xf0\x86\xed\x9c\xc5\xe9\x79\x07\x2e\x96\xee\x50\x18\x4b\xc3\xb1\xde\x70\xaa\x2a\xa4\x34\x28\x48\x13\x94\x19\x9c\x1c\x22\x6c\xf6\x9c\xb3\x08\x1d\xe2\x18\x7c\x43\x01\xe7\xca\xc0\x0e\x8a\x7e\x82\x4c\x69\x97\x8e\x52\xba\x41\x8c\xe5\x12\x07\x83\xc7\x83\x1b\xea\xde\x12\x22\xe6\x53\x7f\x6d\xbe\x39\x04\x69\xcd\xf3\xe6\xde\xa9\x8a\x94\xf0\xf8\xa8\x84\x48\xc6\x7c\x84\x56\x36\xa2\xe9\x10\x54\x1f\xfe\x13\x32\x20\xf0\x50\xc6\x21\x29\x12\x46\x9d\x88\xd9\x07\x4e\x2e\x06\xd8\x07\xe9\x87\x60\xe0\x01\x13\x38\xc5\x1c\xca\x3e\x08\x83\x0e\xc2\xa0\xfd\x3f\x1c\x80\x71\xfb\x54\x37\xee\x77\x99\x7f\xd6\xc9\xaf\x72\xed\x51\x1d\x9b\x36\x46\x6f\x08\x0e\x6a\xda\x78\xe2\x78\xf3\x89\x23\x02\x4e\xd6\xf5\x34\x72\x1b\x43\x43\x36\x6e\x0c\x6b\x3f\x2e\x00\xad\x50\xa5\x5d\x4c\x3d\xbe\xff\xf0\x09\xc1\x1a\xeb\xc4\x81\x90\x4d\x22\xd2\x0a\xf0\x75\xdd\x14\x16\x0c\x3b\xd8\xfd\x21\x9b\x04\xa4\x15\xaa\x71\x8c\x0c\x66\xb9\xaa\x18\x59\xea\xc6\xd0\x10\xd8\xc1\x1e\x78\x01\x67\x64\x5d\x30\xcb\x75\x53\x68\xf0\xc6\x8d\xa1\x7d\xe9\x1d\x3f\x70\xf8\xc4\x89\x17\xb7\xa1\xd1\xec\xcb\xa5\x61\xc0\x44\x7c\x03\x47\xa1\x8a\x39\x14\x1f\xdc\xbc\x59\x1b\xbc\x35\x26\x2c\x4e\xdc\x1f\xbb\xb5\x21\x58\x1b\xbc\x55\x62\xf9\xa0\x6d\x12\xcb\x6f\x0a\x89\x0a\x89\x13\x71\x12\xf0\xde\xb0\x0d\x82\x34\xa0\x3b\x0c\xba\xeb\xc0\x0a\x49\xfe\x99\x4b\x97\x68\xf0\x73\x88\xc2\x73\x70\x0f\x32\x60\x13\x8c\x82\x8d\x20\x13\x70\xc4\x3e\x6e\x67\x56\x78\x66\xb8\xb0\x6e\xd1\xcc\x9d\xbe\x5a\x5c\x87\xfd\xe0\x35\x58\xfa\x68\xff\xa3\xae\xaf\xc5\xf8\xf9\xc9\xaf\xce\xd3\xe0\xc8\x4f\xc6\xc2\x84\xce\x73\xa6\xf2\x4e\xa1\x68\x77\x4d\x51\x8d\xb6\xb3\x29\x22\x40\xb4\x2c\x32\x0f\xe5\xfc\xd6\x2e\x98\x37\x6f\xed\x47\x57\x3f\x3c\xfd\xd1\xa7\x9f\x9e\x5e\xf0\xba\x60\x76\xc4\xfb\x1c\xea\x96\xa0\xe8\x35\x4e\x28\xda\x5d\x50\xb3\x5b\xf3\x49\xf0\x89\x79\x71\xf1\xb9\xb9\x71\x42\xda\xea\xd5\xe9\x81\x5a\xf4\x58\xf1\x25\xb8\xff\xd0\xfc\xa8\xf5\x1b\xf1\x8b\x1b\xbf\x75\x3d\xd3\xaa\x9c\x18\x19\xac\x85\xfe\xf8\x1a\x2e\x11\x6d\xf5\x71\x10\xc3\xb8\x9f\xe3\xa1\xff\xac\x6b\x42\xcb\xce\xa0\xd6\x2d\xda\xc8\x5d\x29\x71\x89\x62\x24\x0c\x7e\x1d\x04\xb4\x7f\xc4\x94\x94\x96\x97\x95\x6b\xea\x36\xd6\x27\x16\x0b\xa6\xf2\x23\x87\xab\x34\xc6\xbc\xe2\xdc\x22\xe1\x48\xd0\x8a\xc6\x95\x5a\xfd\x8a\xa8\x0d\x9b\xc5\xa2\x98\x5d\x05\xbb\xb4\xb8\x08\x67\x0e\x43\x4f\xa4\xc4\xe0\x37\x93\xc3\x76\xac\xcd\x4e\x4b\x4e\xcb\x4c\x4f\x8c\x4f\x8a\x4b\x8e\x65\xda\x13\xb7\xd7\x6e\xd1\x62\xc2\x1c\x8b\x2b\xce\x0a\x30\xbe\xde\xb0\x5a\x3c\x39\x14\xfa\x23\xf7\xe5\x0c\x26\x6c\x95\x7f\xc2\x52\x6d\x64\x64\x61\x71\x94\x78\x7a\xd1\xb5\x35\xdd\x31\x21\x29\x41\x99\x41\xf9\xcc\xca\xf7\x3e\xdf\xfe\xa5\xb6\xfb\x93\xd6\x53\x97\xc5\xc5\x47\xf5\x1f\xb5\x1f\x6a\xd8\x5f\x27\x84\xd5\x1f\x8c\x39\xa2\xb5\xf9\xc5\xb0\xfa\x43\x31\xed\x5a\x15\xe5\x24\xb3\x86\xeb\xc5\xb0\x3a\x6b\xf8\xdd\xd3\x9d\x97\x45\xa0\x15\xc6\x02\x70\x3c\x04\xbb\x40\xf5\xd5\xf7\xee\xdf\x3f\x3c\x01\x89\xe0\xa2\x51\x9e\xe3\x1f\xfd\x18\xb2\xe0\x86\x30\xd8\x8b\x3a\xb1\x61\x59\xfd\x32\x2d\xba\x0f\x44\x7b\x74\x43\xb7\x67\x68\x0f\xee\x8f\x7f\x7f\xef\x59\x8d\x88\x61\xe0\x06\xcf\x69\xe3\xae\xc2\x5d\xd1\xa0\xe5\x2f\x71\x1e\x2c\x88\x2c\xcc\x01\x6f\x87\x25\x6c\x8f\x89\x9b\xc8\x87\x8c\xde\x96\xb1\x41\x48\x5d\xbe\x2c\x53\xaf\x9d\xe8\xbd\xbf\xea\x65\xb1\x7c\xc1\x82\xe2\x05\x5a\x54\x20\x13\x17\x8e\x72\xf1\x13\xc5\xdd\x43\x97\xee\xfc\xa4\x81\xfe\xc3\x7f\xc5\xfe\xd8\x7f\xf8\x70\xec\x3f\xfe\xd2\x94\xbb\x5b\x05\x5d\xcf\x3e\xf0\x86\x7b\x8a\xbd\xd0\x0f\x54\x0d\x30\x00\xa6\x82\x6a\x09\x8c\xd0\x82\x03\xf4\x6b\x38\xf8\x97\xb8\xaf\xac\xa1\xf9\x80\x46\x29\xed\xc7\xd9\xa0\x9e\x08\x6a\xa8\x79\xb1\x2e\x67\xb2\xcd\xc1\x3d\x04\xb5\x8b\x01\x38\x70\x01\x4e\xf2\x03\xb5\x39\xc9\x0a\xb2\x05\x55\xa7\x25\xd0\x4b\x6a\x0e\x7e\x67\x75\xd4\xc5\x77\xb9\xd1\xdd\x0b\xd1\x19\x89\x36\x25\xba\xc0\x94\x2e\x16\x6d\x0d\x5b\x1f\xb5\x2b\x78\xeb\xda\xc4\x40\x63\xd4\x0c\xef\xf5\xbe\x6d\xcc\xb6\x6d\x81\x89\x6f\x6a\xbd\x7d\x2e\xbc\xb7\x48\xc4\x4e\x38\x43\x1d\x0e\xde\x98\xb5\x56\x2b\x75\xc0\x58\x85\xea\xac\x04\x13\x60\x02\x75\xf2\xe4\xe5\x96\xf7\xb4\x1f\x7f\x5e\xb1\xed\x8a\x88\x73\x71\xc3\xf4\x71\x06\x74\xfb\x62\xac\xfb\x5f\xa8\x86\x80\x5c\xb0\x07\x67\xc6\xfa\x5e\x67\xf0\xf8\x69\xf4\x97\x83\x6e\x7b\xba\xc3\xc4\xa5\x5c\xd6\x85\xa8\xb3\xa1\x27\x56\x7d\x18\x78\x2d\xe0\xca\x96\xd3\x1b\x4e\x6d\x3e\xdd\x78\x6d\xd2\xd9\x35\x2b\x71\x39\x6e\x77\x5b\xb2\x60\x50\x81\xff\x27\x41\xa7\x0d\x57\x8e\x9e\x86\xcd\x90\xe3\x76\xf2\xc8\xc5\xd6\x77\xb4\x30\x8d\xbe\xfa\xe1\x8e\xc0\x93\x22\x8c\xc7\xf9\x94\x2a\x46\xfa\xd9\x62\xa2\x41\xef\x0a\xbf\xb3\xa0\x97\xba\x83\x58\x04\x1a\xdc\x50\xe1\x03\x4e\xe8\xaf\x55\x9d\x96\x70\x1a\xfd\xda\xeb\x31\x41\x2b\xc4\x23\x2b\x5e\x6f\x78\x4d\x8b\x8e\x34\xce\x9a\x86\x32\x64\x90\x11\x2d\x53\x5e\x66\x7b\xbd\x15\xaa\x18\x69\x02\x0b\x3d\x34\x9c\xc0\x76\x18\x80\xfd\x61\xd1\x54\x98\xf2\xb3\xfb\x8f\x59\x3f\x9e\xbc\x74\xfd\xb3\x9a\x8f\xce\x9e\xfa\xf0\x7e\xd5\xed\x77\x8f\x7c\xcf\x48\xf3\x68\xd5\x59\xc9\x9b\x57\xc2\x62\x16\x36\xea\xa8\x0d\xb0\xd1\x21\x81\xef\xa1\x39\x53\x8e\x29\xb3\x44\x18\x74\x3f\xbf\xc2\x52\x2f\x39\x33\x67\x16\xa2\xfc\xf1\x64\xed\x64\x74\x18\xba\xe6\x75\xd1\x52\x6f\x71\xce\x4f\x1d\x34\x96\xc9\xcc\xca\x49\x4f\xd7\x3c\xdf\x72\x91\xb5\x7c\x20\xf1\xdc\xf2\x99\xe8\x82\x0a\x74\xd3\xe2\x4b\x38\x00\xa8\x77\xa6\x8b\x38\x0e\x28\xb4\xbb\x3d\xed\xfd\xa4\xf2\xdc\x86\x8a\xea\x63\x17\xdc\x2a\xaa\x1b\x8a\xaa\x53\x6f\x2f\x05\x99\x0f\x8c\x43\x8a\x79\xf3\x0a\xc8\x87\x7e\xa3\xfd\x06\xe4\xbf\x9f\xb9\x22\xc2\x38\x90\x83\xec\xab\xdb\xef\x56\x57\x34\xe4\x56\x24\x1d\x7b\xc3\xad\x22\x29\x37\x26\x29\x6d\xda\x62\xb4\xf3\x41\xeb\xf3\x36\x55\x18\x26\x50\x67\xb3\xb6\x15\xc4\x4b\x66\x07\x2e\xb5\x3a\xa6\x28\x29\xf5\xd5\xe5\xc3\x7d\x71\x28\x52\xcc\xe6\x80\x61\x63\xe6\x6a\x0d\xf9\x06\x83\x21\xdf\xd0\x6f\xd0\xdc\x61\x3f\x1f\x0b\x10\x71\x10\xd8\x8d\xfc\xec\xd5\xae\xa4\xca\x5d\xb9\xa9\x89\x5b\xde\x70\x4b\x4d\x2a\x8a\xad\x4e\xfd\xf5\x15\x88\xc0\x57\x2a\xd2\x99\xa5\x37\x1e\xfa\xfc\xa9\x35\x14\x18\x0c\x42\x01\xfd\x67\xfe\xc3\xaf\x6e\xbc\x5b\x5e\x06\xf1\x30\xf7\xf7\x5b\x55\x15\x45\xf5\xa9\xd5\x0c\x8c\xec\x1d\x57\xc3\xeb\x7a\x7c\x53\xd9\x1e\x6f\xc5\xef\x3f\x27\x66\x48\x1b\xa1\x87\x39\xde\xf9\xdb\x2f\xd7\x6d\x11\x0d\x05\x86\x7e\x83\xae\xff\x36\x7a\x53\xa7\x28\x6d\xc4\x9e\xc4\xb2\xdf\xc7\x30\xcf\xbd\x6d\x3a\xdc\xb8\x23\x89\x87\xc3\x5b\x04\x5c\x0d\x8b\xd0\x08\x73\xd1\x0d\xec\x98\x77\xe7\x8e\xf8\x6a\xb0\xd6\x96\x49\x6b\x36\x07\x8f\x98\xb6\x74\xae\x88\x83\xd0\x11\x53\x71\x0a\xae\x47\x7f\x26\x3c\x32\x31\x24\x48\xf3\xdc\x1b\x4a\xf8\xea\x5d\x2e\xe6\xc6\x03\x59\xd5\xc5\x6d\xdf\x37\xdd\x6d\x00\xc7\x2a\xd5\xc7\xf0\x4d\x01\x17\x08\x29\x10\x8a\x21\x87\x31\x95\x6a\x49\xe1\xb6\x40\x01\x74\xc1\xb6\x0a\xcc\xa3\x2c\x77\xa4\xc9\xdc\x02\xb8\x01\x79\xb8\xee\x2c\x7e\x45\x35\xa7\x72\xab\xe0\x1e\x3c\x85\xd5\xd5\xf8\x25\x75\x00\xa3\x39\x55\x63\x65\xd1\x27\x69\x65\xc2\xbf\xae\xdf\xba\x40\x95\x95\xe4\x54\x97\x69\x54\x5d\x7f\xf8\x14\x62\x06\xd5\xdb\x61\xee\xe6\xc6\x49\xaf\xc1\x41\x9c\xf9\x89\x65\x33\x65\x6e\xb0\x6c\xe4\x30\x04\x67\xe4\x41\x26\xc4\xc3\x64\xaa\xb7\x12\xc2\xb9\x79\x52\xa8\x34\x0d\x26\xd5\x5b\x16\x52\x52\x94\xe5\x1d\x6e\xfe\xdb\xa5\x40\x0a\x8a\xf2\x8c\xb9\x85\xee\xe8\xf9\xa0\xf0\x29\xec\xc2\x41\x14\xbc\x32\x9a\xc3\xe9\xa8\x69\x80\x58\x78\x15\xd4\x14\x6e\xb7\xb8\x73\xc6\xdc\x62\x83\xb1\x08\x96\xc1\x68\xb7\xc2\x82\xc2\xa2\x22\x4d\x51\xf3\x21\x88\xce\x2b\xcd\x2f\xca\x2b\xcc\x2b\xc4\x3c\xd0\xba\xa9\xea\x73\x0b\x73\x0c\x39\x79\xb8\x01\x5d\xdc\x72\xf3\xf2\x72\x72\x35\xb9\x68\x3f\xe9\x9d\xdc\xc2\x6c\x43\x6e\x9e\x3b\xf6\x9f\x99\x0d\x03\x28\xeb\xdb\x0a\x04\x74\xf9\x16\xd8\x0f\x28\x63\x61\xa1\xd1\xa8\x89\x91\x36\x52\x45\xb9\xc6\xdc\x42\x01\xaf\xc3\x68\xaa\x20\x37\xd7\x90\xa7\xb5\xcc\x45\x6d\x76\x5e\x6e\x76\x41\x96\xfb\x43\xcb\x96\xa2\x14\x60\x26\xd5\xa4\xb8\xab\x1a\x47\xbf\x99\x9d\x9b\x97\x5d\x90\xe3\x7e\x13\xff\x2c\x4c\xfb\x7a\x4e\x65\xaa\xbb\xaa\x6b\xd1\x96\x5c\xeb\xa3\x39\xee\xc5\x11\xe7\xd0\x50\x9c\x0d\xb1\x98\xed\x56\x98\x57\x64\x28\xca\x67\x0a\x0b\x0b\x0a\x0a\x45\x78\x0b\x92\xa9\xa2\xc2\x82\xa2\x22\x4d\x26\xbc\xfc\xeb\x64\x63\x6e\x89\xc1\x58\xe4\x0e\xc9\xb0\xf8\x05\xb8\x0c\x1c\x29\xa5\xc7\xdf\xea\x29\xd1\xef\x2c\xd4\xd8\x76\x7e\xfc\xa0\xda\xa7\x93\x1f\x83\xf3\xdc\xb0\xd7\xe6\x4c\x13\x2c\xdd\xf4\xb4\xd7\x6e\xfc\x06\x73\x4f\x41\x00\xcc\x13\xb7\x5d\xfa\x5c\x7f\x47\x7b\xe7\xf3\x4b\x07\x2f\x89\x30\xef\x14\x06\xe0\x5c\x11\x67\x4a\xf7\x38\x1c\x8c\x8e\xc8\xe0\x60\xab\x0b\x0c\x0c\x06\x4f\xe8\x73\x07\x83\x15\xee\x29\x98\x9d\x2c\x47\xfd\x79\x2b\x97\x9c\xc4\x83\x7e\x19\x3f\x92\x56\x7d\x09\x6a\x58\xc1\x82\x5e\x51\x97\x54\x1d\xf7\x0d\x5f\x57\x5d\x5d\x27\x2a\x3d\x72\xd9\x17\x9b\xe4\xed\x5e\x98\x20\x72\xe8\xa9\xea\x71\xe2\xc0\xd3\x9a\x70\xdf\x0b\xac\x09\xa2\x2d\xe1\xbe\x17\x58\x5f\x24\x04\xe2\x4e\x6e\xd3\x82\xf9\x81\x3e\x5a\x9f\xf9\x67\x8f\x2f\x10\xb3\x69\x5c\x14\x86\x49\x38\x70\x52\xd7\xcb\xf7\x45\xa9\x9b\xbe\xdf\xf5\xdd\x5d\x18\x1a\x06\x31\xb8\x4c\x34\xfb\x82\x89\x03\xbd\xa2\x36\x71\x77\xfc\x37\x3c\xbc\xc6\x5a\x33\x46\xbf\x70\x23\x58\x34\x3d\x37\xd5\xf0\x3a\xf4\x4d\x65\x75\x54\x57\x37\xab\x93\x77\xc1\xab\xbc\xcd\x50\xbf\xc9\x5a\x5f\x35\x27\xaf\xdb\x2a\xce\x24\x39\xb1\x10\xcb\x4a\x76\xbc\xea\x6e\x8f\x49\x1a\xce\x79\xfb\x2f\x9c\x23\x58\x4c\xf4\x1c\xff\x2b\xdf\xc3\xd8\x63\xe0\x0b\x13\xc4\x1d\xe7\x3e\x0a\xec\xd6\x76\x7f\x74\x76\xef\x39\x11\x26\x1c\x43\x5f\x1c\x2b\xe2\x78\xa9\x96\x53\x79\xa2\xcb\x10\x2f\x74\x46\xe7\x21\x8f\xc1\x05\x9c\x9f\x3c\x01\x67\x41\x75\x17\x9c\x9f\x0c\x41\x67\xb1\x67\xbc\xa5\xc4\xb6\x15\x6e\x3f\x2b\x75\xfb\xb3\x7e\x0a\xa8\x92\xc7\x24\x24\xc4\x08\x96\x6b\x74\x4c\x42\x4d\x83\xf8\x8e\xa2\xa1\xa6\xa6\x41\x90\xae\xd1\x0d\x35\x09\x31\xe2\x32\x05\x14\xcb\x55\x53\xfb\x36\xcf\xa9\xee\x46\xff\x1d\xcb\x04\xdd\xdc\x4a\x56\x67\xf6\x0d\x65\xe1\xe9\x43\x7a\x26\x3f\xd2\x6c\x7a\xf8\x0a\x3b\x12\x9e\x2a\x36\xb2\x2f\x0e\x29\x4a\x6a\xf8\x9e\xef\xab\xf1\x15\xbc\xd9\x04\x31\xac\xad\x34\x30\x76\x33\xf8\xe2\x04\x61\xc7\xaa\x05\x81\xb3\xb4\xb3\x16\x9c\xdd\xbb\x4a\xc4\x09\x9b\xad\x25\xf0\xbe\xbc\xf0\x86\x28\x99\xe8\x1b\x97\xaf\x7c\xdf\x57\x1a\x70\x1e\xf2\xc4\x56\x96\x21\xe8\x8c\x2e\x4f\xbc\xc0\x19\x9c\x9f\x3c\x06\x17\xa1\x67\xbc\x65\x29\x78\xb0\xf0\xa9\xbc\x21\xa1\xe6\x45\xf6\x6d\xf9\xb5\x19\x31\xb4\x65\xbf\xa6\x41\x84\x4f\xe5\x43\x59\x4b\xf7\x78\x56\xea\x86\x1b\xec\x73\x75\x0d\x8f\x4f\x1f\xc2\x42\x7e\x64\xaf\xe9\x21\xbc\xce\x8e\xc4\xa7\x8a\x16\x2b\x1e\xba\x59\x1d\x6d\x45\x86\x0e\x7d\x15\xa0\xd6\xc9\xbb\xfe\x2e\x9c\x8e\xee\xfa\x90\x05\x6f\x56\xea\x78\x68\x36\x81\x29\x97\xd7\x51\x7f\x42\x00\x87\x2b\x51\xc4\x38\xe4\xb0\x52\x8b\x95\x18\x07\x1c\xac\x44\x51\x6c\x83\xc5\x5f\xc0\x54\x98\xd1\xcc\x8c\xfc\x01\x54\x8b\xc0\x43\x0b\x1e\xa0\xfa\xe0\xe1\x0f\x22\xcc\x88\xfa\x02\xa7\xb6\xe1\x62\x06\x73\xcc\x8b\xb9\x14\x56\x32\xa1\x89\x33\xb2\xff\xd9\x40\x9d\x2e\x0d\xb1\x78\x49\x19\x52\xa6\xe4\x29\x0d\x95\xd2\x04\x65\xa3\x8e\x4a\x85\x0d\x7c\x8f\x1a\x1a\xfe\xd7\x53\x69\x92\xa7\x65\xa8\x94\x29\x65\x49\x83\xa5\x61\x52\xaa\x91\x15\xa5\x7f\xeb\x7a\xde\xe2\xe0\xd5\x20\x6f\x18\x86\x7e\x5a\xa8\x61\xd1\xcf\x1b\x87\xe1\xab\x41\xe2\x18\x50\x2f\x83\xf1\x30\x43\x03\x4b\xf8\xbf\x77\x6c\xe0\x8c\x65\x38\x7e\x0c\xaa\x05\x4c\x31\x6b\xb9\x14\x56\xd9\xa7\xb6\xca\x74\x81\x85\xdb\xac\x83\x4e\x7e\xcc\x9c\xc9\x75\xde\xde\xf7\xf3\xef\x1a\x68\xc7\x78\x88\xc7\xf6\x0f\xf9\xa1\xfb\xc6\x74\xfa\x08\x38\x70\x03\xae\x40\xd1\x12\xa8\xc1\x0d\x30\x1a\xa7\xc1\x12\xc1\xfc\x80\x86\x25\x30\x1a\xa6\xc1\x06\x29\x10\x57\x80\x88\x03\x3b\x44\xcb\x5c\xb3\x27\x27\xa9\x79\xf4\x3d\xca\x63\x30\x3c\xe2\x21\x18\x1c\x58\xe9\x15\x5d\x8f\x8c\xeb\x7d\x40\xa3\xe3\x48\xb0\x03\x1d\x7c\xf2\x0c\x02\x60\x55\xb9\xe8\xf3\x13\x38\x06\xf6\x9d\x3c\x74\x3c\x7b\xfb\x27\x11\x56\xa5\x3d\xc3\x00\xfc\x44\x83\xba\x91\x68\x87\x8e\x82\xd2\x92\x92\xcb\xc2\x26\x9b\x12\x59\x87\x1e\x13\x1c\xe0\x60\xdc\x26\x98\x89\xe3\x85\x35\xab\x16\x6c\xb7\xd2\xcf\xbe\xb7\x56\x89\x38\x7e\x13\xce\xc4\x71\x2f\x5f\xf6\x7b\x41\x3f\x57\xbf\x13\x71\x8c\x54\xc3\x81\xb3\xe7\x13\x54\xa1\xca\xd3\x46\x3f\x7f\x78\x81\x0a\x54\x7f\x58\xe9\x07\xda\x9f\x3b\xd7\xf0\xcf\xf5\xd6\xb6\xb8\xae\xc7\xa4\xeb\x69\xb4\x22\xde\xa6\x6d\x12\x9f\x8e\xa4\xe1\x3a\xff\x10\x9f\x2a\x96\xb1\xba\x1e\xdf\x20\xbe\x47\xff\x21\x6b\xa3\xe9\x6e\xd0\x83\xfa\xe0\xc1\xab\xa0\xbe\x65\x3b\x79\x63\x36\xc1\x13\xb6\x47\x0d\x5f\x72\xb3\x02\x97\x2c\x11\x2c\x33\xe8\x25\x81\xef\x75\x83\xdb\x41\x18\x05\x6e\xe2\xc6\x13\x97\x22\x3f\xd0\x7e\x70\xa9\xe5\xc4\x09\x11\xdc\x0e\xe2\x28\x74\x13\x51\x2d\x2d\xe1\xe0\x4b\xf6\x21\x2f\xf4\x98\x2c\x51\x5c\x05\xeb\xa7\xb0\xa8\xc1\xc4\x4d\x65\xb1\x9b\x8e\x4b\xaa\xae\x13\xaf\x6e\x65\xfd\x14\x92\xda\x35\x2e\x29\x29\x4e\x40\xfd\x0b\x20\x5c\xb0\xb5\x3b\xb9\x35\x82\xce\x9c\x0a\x4f\xb9\x87\x81\xbc\x8e\xee\xf2\x67\x47\x2a\x40\xfd\xf0\x9f\x04\x6b\xcd\xeb\x14\x9b\xc6\x64\x6b\x2e\xa3\xac\xbe\x72\xde\x96\x4f\x70\xdb\x06\xa3\xd0\x4d\xd8\xb8\x51\x1f\xb9\x48\xbb\x48\xdf\x72\x62\xa3\x88\x6e\xdb\xac\x79\x9b\x75\x76\xc9\x7b\xa2\x34\x83\x7e\xef\xec\x7b\xdd\xb6\x7c\x6e\xe7\x7b\x4c\x16\x6f\x7f\xbe\x57\x3f\x9e\x35\xeb\x27\xf1\x16\x35\x74\x73\x56\xb6\x2a\x60\xf7\x78\x16\xf4\xac\xa4\xbe\x0a\x93\x59\xbf\xdf\x59\xe8\x96\x0f\x65\xfb\x1e\x83\x1b\x6c\xaf\x95\xcd\x99\xad\xf2\xc2\xd3\x04\xfe\xf9\xd3\xff\x43\x8b\x6a\x44\x13\x14\xed\x80\x71\x28\xdb\x25\x69\xc1\xd7\x7c\x0d\xc6\xb9\xec\xd3\xd1\xef\xa9\x7c\x74\xf2\xfb\xe6\x34\x0e\xa7\x45\xa3\xf6\xcd\xa1\x82\x6a\x35\x38\x4e\x1f\x71\x1f\x97\x69\x55\x3e\xa8\x1c\xb5\x71\xe5\x12\xf1\xdc\x08\x4a\x55\x5b\xd9\xba\xc7\xb8\x47\x0b\x83\xba\x71\x00\x2a\xaf\x88\x06\x45\xca\xc6\x75\xd9\x81\x5a\xec\x42\x57\x08\x96\x26\x8a\xaa\xd5\xd2\xcb\xe0\x0a\x5b\xa1\x0b\xde\x05\x57\xdc\x6a\x79\x59\x50\xf9\x48\x9a\xde\x7e\xdc\xf2\xac\xa0\x79\xe3\xb5\x53\x96\x5c\xfe\xce\x5f\x54\xd5\xc2\x5c\xe0\x41\x09\x21\xb0\x5b\x23\x6d\xb5\xbc\x04\xd7\x2d\x23\x2d\x83\x2d\x3a\xbc\x69\x09\xb6\x6c\x92\xb4\x78\x53\xf2\xbc\x7e\xdd\x54\x77\x4d\x30\x28\x50\x73\xfb\x4f\x54\xc0\x2a\x2d\x7c\x75\x04\x2e\xde\xcc\x14\x95\xd2\xfe\x60\x70\xd3\xc9\x7f\x8a\xb1\x33\x80\x93\x79\x04\xf8\x41\x0d\x38\xde\x85\x61\xd2\x2f\xe0\xe2\x20\x05\x78\x71\x87\x57\x9d\xd9\xd5\x2c\xac\xb8\xf8\xe6\xc5\xcd\xd7\x98\xf1\x30\x66\x2b\x78\xc3\x5c\x0d\x4c\x39\x0c\x83\xbe\x85\x41\x42\xc7\xa7\xe7\xdf\xbd\x74\x99\xa9\xaf\x3f\xdd\xb1\x5f\xd3\x16\xde\x10\xb1\x74\x38\x52\xeb\xb6\x0a\x38\x18\xfd\xe6\x62\x20\x26\x6a\xb0\xf0\x53\x8c\x87\x71\x18\x20\x1c\x5e\x77\x73\xd2\x3b\xc9\x8c\x41\x91\x6f\x2c\xce\x33\x6a\xf7\xb6\xb6\xed\x15\x75\xd4\x2b\xa0\x09\x62\x9f\x7f\x44\x6f\x8a\x08\xdd\x32\x86\x17\x7b\x3e\xa2\x8f\xb7\x1e\x38\x2a\xe2\x36\x09\x38\x10\x83\x7e\x1f\xf1\x87\x50\x9b\xf0\x46\x57\x84\x36\x2b\x27\x37\x53\x8c\x38\xb1\xea\x4d\x4d\x58\xcc\xae\xd0\xc0\x94\xa7\x87\xb2\x84\x48\xf0\xd8\xfe\x18\xc5\x8f\x98\x9a\xad\x1b\xaa\x82\xb4\x29\xdb\x73\xe3\xd3\x2a\x32\xcb\x72\xc4\xba\xd4\x3d\xc1\x15\x71\x4c\x7d\x68\x49\xf8\x16\x5c\x86\x19\x38\x0b\x03\x35\xe8\x03\x8e\xa8\x81\x31\xcb\x04\x83\x22\xaf\xb8\x39\xbd\x58\x6b\x32\x15\x57\x54\xa4\x17\xa4\x17\x89\xc1\xd5\x51\x75\xbb\x0e\x30\x21\x9d\x19\x9d\xef\x83\x3b\xf8\xb5\x80\xfb\xf9\x6d\xbb\xab\x35\xa6\x22\x83\xe9\xd0\x5b\xfa\x9d\xd5\x82\x29\xb6\x20\x6b\xd7\xf6\xdc\xb0\xed\x9a\x75\xf5\x5b\xdf\xde\x73\xbc\xe6\xa0\xd0\x9a\xd8\xdc\xa2\x29\x32\x14\x16\x55\xb7\x6e\x4b\x2b\x15\x5a\xb6\x54\xac\x5a\x8b\x1a\x54\xce\xdb\xae\x49\xdf\x9d\x5e\x66\x2a\x2f\x2e\x2e\x13\xba\xf6\x7c\xfc\xe1\xa1\x73\xcc\xd9\x1b\xf5\xb7\xee\x6a\xcc\x41\xdb\xb9\xc6\xfc\xa6\xfc\x46\x21\x11\x22\xfc\x61\x21\x6a\x60\x3e\xf3\x76\xf0\x28\x50\x2e\xd0\x46\x84\xef\x8c\x08\xea\x7c\xb3\x39\x52\xbc\x31\xf3\xed\x85\x67\xc6\x32\xdd\x38\xbc\x01\xdd\x71\xb2\x06\x03\x97\xe0\x1c\x74\xc2\x71\xc2\xf6\x2d\xe8\x88\x76\x21\x9a\x5d\xad\xe1\x8d\xf7\x40\x80\x95\xd7\x4f\x0a\xf7\x60\xe4\xdb\x30\x07\xe6\x68\x94\xa7\x58\x9d\xbc\x0d\xe2\xb8\xd4\x55\xdb\x53\x36\x34\x63\x14\x4c\x71\x43\xd9\x60\x2a\x25\x25\x2d\x2d\x4a\x5b\x03\xb1\x14\xdc\x62\xa5\x89\x12\xa9\xab\x89\x36\x45\x26\xb8\x5b\xca\xf1\x0b\x0c\xff\x34\x70\x77\xfe\xa1\xf7\x9a\xdd\xcd\x4f\xe1\xbb\x13\xbb\xdb\x23\x93\x17\xb9\x4b\xab\xb1\xfd\xc5\x11\x87\xf9\x7c\x8f\x88\xea\xe7\xe2\x20\x76\x3e\x6f\x16\x51\xdd\x6b\xf3\x49\x22\xaa\x2d\x36\x1f\x88\xa8\x46\x71\x10\xdb\x9b\x02\xe3\x59\xb3\xfa\x08\x6b\xeb\x29\x0d\xa0\xf6\x03\xbd\xaa\xb7\xd1\xac\x06\x3d\xf7\xe7\xbf\x7e\xf0\xf0\xf8\x97\xf7\xa0\x4b\x2c\xa8\x5d\x71\x2e\x0e\x96\xec\x79\x9c\x2b\xa9\x59\x98\xfb\xb4\xf3\xfe\xad\xf7\x04\xb3\x49\xf1\x90\x17\x7a\x4d\x8a\x5b\x4b\x3a\xc7\x0e\xd2\xa8\xd2\x7d\x41\xed\xaa\xa2\x52\x41\xb9\x0a\xec\x7d\xbe\x16\xcc\x81\x0a\x2b\xcc\x1a\x05\xe7\xbe\x48\x40\xe8\x0d\x54\xf8\x4c\x5d\x85\xf6\xa8\xec\xe2\x55\x54\xaa\xcd\xd0\x9c\x08\xbd\x3c\xea\x69\x55\xba\x0c\xd5\xa0\x57\x48\x6a\x39\xea\x51\x4d\x5b\x23\xeb\xe9\xff\x84\x62\x3d\x40\x4f\x2b\x61\x38\xa8\x7f\xe3\x5f\xc8\x2a\x66\xd3\x6f\xbc\xea\x60\xb9\x8e\xaa\xd6\x51\x0a\x6e\xca\x1d\xa0\x59\xf7\xb5\x6b\xd1\xfe\x7b\xf4\xaa\x47\x97\x95\xee\x0f\xc7\xa0\xeb\xfb\xe8\xa9\x85\x03\xac\x0e\x65\x60\xca\xe3\x15\x7e\xfc\x27\x57\x76\xae\x7d\x4b\x98\x89\xee\x95\x38\xed\x11\x2a\xd7\xae\x75\xbb\xc7\xdf\x99\xe2\x56\x95\xdc\x60\xa8\xaa\x32\xd3\x66\xda\xed\x09\xcf\x4c\xc0\x1a\x6e\x21\x0f\x26\x54\x73\xbe\x7c\xfb\xf6\x7d\xc1\x69\xb6\x21\x10\xb7\x90\x57\xc9\x47\xf4\xaa\xcf\xb1\xa0\xf7\xe3\x40\xce\x83\x03\x0f\xdd\x57\xad\x60\x46\x6f\x03\xff\x9f\x62\x38\x0d\xb3\xa8\xd1\xf4\xbf\x81\x3d\x96\x58\x6c\x31\x5c\x17\xf2\x2a\x5f\x0f\x54\x9f\x63\x55\xa9\xbe\x56\x47\xd9\x28\x99\x20\x84\x85\xab\x3c\xa8\xe1\x07\xde\xea\x76\x83\x5a\x95\xea\xeb\x71\x82\x97\xf4\x9c\xae\x47\x86\x7a\x1a\xe9\x4e\xaf\x5b\x73\x04\x5c\xa4\x88\xae\x8e\x83\xcd\x7c\x5d\x93\xa8\x4a\xf5\xf0\x00\x7b\x45\xd2\x89\x53\x19\x67\xb4\x66\x13\x7d\xe6\x54\x59\xf5\x09\x11\x59\x85\xaa\xeb\x53\x59\x06\x0b\x2b\x14\xb7\x6e\x74\x3e\x06\x5a\xa3\xf2\x60\x64\xcf\xf5\xd2\xd3\x24\x5e\xe5\xa4\x96\x5d\xfd\x93\x55\x31\x8c\x0c\x42\x79\x95\xdc\x49\x06\x6a\xd7\xad\xbc\x8a\xb1\xef\x0b\xcb\x6d\x8e\x3d\x23\xeb\xe9\xb6\x98\xfc\x79\x5d\x8f\x47\x9f\xc2\x3b\x41\x25\xb7\x93\x1d\x3e\x90\x1c\xdd\x2c\x6e\x99\x5f\x32\xe9\xec\xa2\xe8\x68\xb7\xac\x2c\x43\x5a\x49\xd6\xc9\xf5\x6e\x25\x59\xe5\x86\x92\x12\xf8\x18\x3e\x76\x2b\x29\x31\x94\x67\x95\xac\x3f\xe9\x96\x55\x92\x66\xc8\xca\x62\x54\xf6\xf6\xb2\xe8\x68\xfd\xa9\x99\xa6\x85\x11\xee\x67\x57\xbf\xb6\x7f\xb6\x16\x0e\xf2\xbd\x6a\x85\xca\x4e\x2e\x1b\x39\xde\xca\xa3\x27\xf1\xcf\xd5\x92\xc9\xc6\xed\xad\xfd\x50\x5c\x75\x52\x9d\x55\x94\x16\xfc\xae\xfe\x07\x76\x86\x17\x54\xf6\xb2\xd4\x33\xfc\x48\x76\x14\x2b\xa8\xec\xec\x7c\x6d\xb9\x56\x82\xc8\x16\x80\x0a\x5c\xc1\xd5\x5c\x0a\x6a\x70\xb1\x76\xdc\xbb\xe0\x11\x07\x5a\xb4\x3b\x84\x0a\x54\xa0\xdd\x56\xd4\x2e\x28\x5d\x50\xfe\x9a\xb0\x7b\xf0\x6e\x8f\xd6\x21\xcc\xac\xba\x4f\xe2\x3f\xd2\x7e\xf4\x49\x6d\x77\x9d\xd8\xfa\x64\xf7\x5f\xbb\xff\x64\xca\xaf\x95\x7e\xf4\x91\x46\x3a\x2e\xf9\x70\xd2\xeb\x16\x05\xfc\x65\xf1\xdf\x21\x58\x5e\x8a\xc4\x6b\x78\x3d\xd6\xf2\x52\x3c\xfe\x02\x1b\xf1\x1c\x74\x22\x53\x91\x5d\x55\x9e\x57\x99\xd3\x94\xdb\x94\xd3\x92\x57\x93\xb7\x3b\xaf\x3a\xbf\x38\xb7\x38\xbb\x10\x37\xff\x89\x43\x60\x5b\x1e\x14\x32\x79\x70\x0f\x9a\xa0\x03\xee\xd5\x31\x12\xd5\x00\xef\xe1\xdb\x16\x3b\x0d\x16\xa2\x27\x86\xe2\xa6\x81\x42\x76\x5e\x6e\x4e\x7e\x56\x5e\x62\x5e\x42\x5e\x42\x4e\x54\x6e\x74\xee\xae\xbc\x94\xca\xb4\x0a\x23\x03\x47\x81\x82\xd5\xb0\x1f\xbe\xd4\x58\x8e\x1f\x4c\x64\xa1\x63\x1b\x07\xa7\x31\x07\x92\xf1\xed\x24\x01\xeb\x52\x30\x14\x23\xb2\xb0\x3e\x17\x67\xdc\xc6\x91\xe0\x34\xb2\x3c\xa3\xba\xb4\xb0\xb2\x68\x5f\xd9\xa1\xba\x03\xc6\x92\xfc\xb2\xac\x92\x7f\xdd\x0a\x00\xa6\x0a\x5c\x6a\x61\x1e\x78\x82\x17\xcc\x6d\x60\x20\xa1\x15\x02\x70\x01\xee\xd2\xa0\x3c\x70\xe8\x2b\x73\x85\xac\xac\xfc\x0c\x63\x56\x5d\x68\xd9\xd6\xa2\x1d\x85\xc9\xd5\x99\xe5\x65\x0c\xf4\xff\xf9\x36\x0c\x83\x29\x1a\x65\x23\xaa\x8f\xb1\x79\xbc\xcd\xf6\x16\xa8\x39\xb3\x29\x8f\xef\x35\x29\xc0\xd4\xf3\xf4\x30\xdf\x88\x6a\xc9\x04\xe3\x78\x88\xb2\x76\xaf\x3d\xbe\x6b\x58\xd4\x43\x09\x0f\xfb\x25\x67\x5b\xeb\x34\xbf\x18\x4d\xdc\x61\xad\x63\x8c\x3b\xac\xea\x2f\x30\xb9\x4a\x26\xb3\x49\xa1\xea\xb1\x58\x13\x91\x4c\x1c\x3c\x05\x91\x1f\x69\x7d\xb6\xd7\x44\x83\xc9\xfc\x94\x5b\xc9\x3e\xd7\xaf\x61\xf1\xa9\xe5\xa9\x42\xf5\xd7\x32\x9b\x0e\x91\x1e\xfd\x2a\x16\x9e\x4a\x36\xe9\xbe\x11\xd5\xf0\x9d\xb9\x07\xbe\xcb\xe5\x75\xf2\x4a\xd8\xc6\x25\x27\xc7\x18\x92\xab\x30\x09\x92\xdc\x30\x09\x93\xfa\x82\xee\xe8\x05\x5e\xc9\x55\x86\x86\xaa\x2a\x77\x48\x82\x24\xeb\xed\xbf\x83\x5e\xe0\x55\x55\xd5\x60\xa8\x4a\x76\xef\x83\x43\xd2\xdf\x41\x2f\xf4\xaa\x4a\x36\xc4\x24\x27\xbb\xa3\xed\x0e\x26\xbd\x08\x4a\xdb\x7a\xc8\x61\xbe\x11\x6e\x5b\xe5\x2e\x93\xad\x3a\x74\xf2\x5f\xa4\xe9\xdc\x13\x1e\xa7\xc3\x74\x37\x98\x0e\xd3\x9f\xf0\xb6\x97\x5a\xf9\x0f\x4e\xb7\x7e\x61\xba\xcd\xef\x85\x5e\xf7\x78\x77\x98\xde\x07\xb4\x7a\xbd\xd0\xeb\x19\x6f\x8d\x62\x05\x3e\xe3\xad\x19\xa2\x9e\x27\x61\x27\xd7\x63\xca\xe3\x9f\xff\x5d\xbb\xa7\xd8\x9e\x4b\xd0\xc3\xf5\x0e\xa2\xe1\x3d\xe9\x03\xca\x3c\x88\x96\xbc\xff\xc3\xdc\x9b\xd1\x04\x6b\xcd\x49\x30\x01\xc7\xd6\x3c\xe8\x2a\xba\xb8\x01\xa8\x6f\xe0\xa5\x8b\x87\xae\xc7\xbc\x07\x82\x8b\xf4\xfd\x1e\xa0\x3f\xb8\x7c\xb1\xa8\x6b\x2d\x8c\x1f\x71\xac\x19\x96\xdd\x7d\x57\xb5\xd7\xec\xab\xa3\x48\xcf\x19\xee\xfd\xf9\x13\x22\x77\x1e\xda\x71\xe8\xc2\x07\x07\x83\x18\x8b\x07\xe6\x73\xe5\xe5\x86\xda\xb4\x72\x46\x45\xcb\x52\x53\x2b\xe2\x0d\x69\xa9\xa9\x69\x86\xf8\x8a\xb4\xf2\xd4\x5a\x43\x45\x05\x03\x53\x66\x72\x35\x35\x86\x3d\x09\x35\x9b\x8f\xbb\xc5\xd7\xec\x34\x24\x24\x04\x07\xbb\x25\xc4\x1b\xc2\x6b\xe2\x19\x6b\xb2\xc7\x36\xd7\xc6\xef\x31\xd4\xd4\xba\xb7\xb7\x53\x68\x07\xae\x5c\x45\x85\xa1\x36\xb5\x9c\x51\x65\xfb\x76\xa5\x55\xc4\x1b\x52\x53\xd3\xd2\x0c\xf1\xe5\xa9\x15\x69\xb5\x86\xf2\x72\x46\x1a\xfa\x2b\x77\xfa\xee\xeb\xe7\xd6\x75\xcc\xbb\x36\x6f\xef\xf4\xf1\x3e\xe3\x3b\x07\xdf\x7c\xe3\xe6\x4a\x60\xdb\xcf\x7c\xcb\xd8\xa6\x8d\xd7\x58\x76\x71\xbb\x50\x8d\xf5\xf0\xfa\x34\x98\x18\xea\xe7\x3b\x12\x9d\x7d\x5f\xc7\x15\x78\xde\xe2\x38\xb2\xcb\xe7\xf4\x33\x20\x1f\x5e\x67\x0a\xc3\xdb\x97\x1b\x34\x6b\x60\x08\x0c\x80\x79\x87\xde\x67\x0c\x17\x6a\x8b\x3e\x12\x8c\x8f\x17\x7f\xf6\xe6\x69\xe6\xe0\xe6\xb2\x25\x2b\x34\x06\x03\x0a\xdb\xab\x85\x75\x05\x11\x69\x43\x23\x99\xe3\x85\x8d\x71\x06\x4d\xe4\x96\x95\xab\xfd\xc3\x27\x6f\x8a\xfc\xf2\x54\x67\x79\x65\x79\x79\x79\x59\x56\x69\x8e\x29\xbf\x82\x01\x86\x8f\xfc\x13\xe6\xc1\x90\x27\xc7\x19\x03\x38\x83\xdf\xad\x76\xa1\xba\xba\xa5\xd6\x54\xfc\x1a\x50\x49\x30\xb1\xee\x54\x5e\x5e\x7e\x5e\x7e\xee\x9e\x2b\xd7\xb3\x1a\x36\x30\x15\x91\x85\xa1\x51\x1a\x43\x60\xd1\x3a\xbd\x70\xbc\xbe\xd3\x60\xd0\x54\xa5\xd6\xec\x32\x68\xa2\xd7\x87\x78\xb7\x8c\x69\x9c\x7a\x73\xf3\x85\xec\x57\x8e\x4d\x00\x87\xbb\x30\xe4\xd8\xb5\x5b\x47\xbf\x4a\x07\x79\xf2\xd7\x43\x92\x51\x9e\xf1\xea\x06\xff\x65\xa1\x8c\xa1\x2a\x28\xe9\x4d\xe1\xf0\xba\x82\xc8\xfc\x28\xc6\xb0\xae\x74\xfd\x76\xe1\x51\xf3\xf9\x35\xe7\xbc\xeb\xb6\x7e\x93\x97\xbe\x94\x51\xf9\xda\xcb\x20\x03\xc6\x70\x52\x86\xc5\x4b\x1a\x62\xc9\x10\x54\x8c\x5c\x66\xc9\xb0\x78\xbd\x38\xf6\xea\x65\x3b\xf6\x9a\x21\x79\x49\x43\xa4\x0c\x51\x89\xb9\xe0\x68\x0e\x00\xc6\xfc\x1a\x38\xda\x41\x31\xd4\x3b\x48\xbb\x75\xd4\x02\xae\xb5\xb0\xba\x43\x90\xce\xd0\x0f\x2f\x4c\xc6\xb1\xc7\xc5\x83\xe8\x44\xfd\x4c\x1b\x6a\xe1\x59\x35\x8c\x16\x30\x65\x27\x8a\x06\x83\xa6\xd7\x9f\xb6\xf4\xab\xa4\x86\x28\x40\x15\xf9\x63\x7c\x6b\x4c\xd1\x64\xf7\x0a\xcc\xc9\xb5\x78\x19\x34\x86\x3c\xcb\x90\x2c\xcc\x16\xf2\x67\xed\x0c\x9f\x10\x8f\xaa\x08\xb7\x21\x0a\xa9\x5f\x25\x65\x66\x68\x03\x0c\x34\xc0\x9d\x14\xa1\xf4\x87\xb3\xd2\xc0\xd2\x53\xcc\x04\x7a\x0c\x86\x52\xf8\xca\x4c\x94\xa5\x60\x3f\x2d\x9a\x69\xec\xe7\x7f\xee\x4f\x51\xea\x52\x40\xfd\x77\x19\x06\xf1\xe3\xfc\x8e\xa8\xc6\x51\xfb\x50\xe5\xf6\x07\x9d\x09\x37\xab\xe1\x73\xca\x93\xde\x8a\x83\xa2\xc7\x26\x45\x8e\xce\x75\x37\xa0\x32\x05\x13\x0b\x05\xe5\x2a\x1e\xe6\x83\xb2\xe3\x2f\x98\xfc\xec\x24\x28\x8f\x81\x63\x87\xf5\xc7\xc2\x7c\x87\x9e\x31\xe6\x18\xee\x48\x49\xf3\x5a\x01\xaf\x28\xce\xe4\x67\x1e\x3a\xa2\x81\x4f\xbf\xe3\x1a\x8c\x7b\x76\x46\x1b\xb7\x26\xe5\xe5\xa0\x67\x59\xac\x90\x55\x54\x9c\x5b\xa2\xdd\x97\x75\xa8\x41\x7c\x7e\x0a\x15\x9c\x14\x0a\x4a\x4b\xa8\x02\xae\xb9\xc2\x4d\xc5\x3a\xbc\x49\xbd\x42\xbf\x09\xd7\x28\xbc\xe6\x21\x85\xc2\x04\x45\xe5\xac\xf2\x99\xe5\x33\xf7\x42\xb8\x1b\x4c\xb4\x84\xd2\x70\x13\xde\xe5\xf0\xab\x8e\x26\xbc\x21\x48\xa1\xf7\x14\xd7\x7e\x2f\x99\x5c\x23\x96\xec\xc8\xdf\x16\xa6\x81\xeb\x18\xc0\x2d\x4d\x5f\x36\x6b\x6b\x54\x45\xeb\x2e\x21\x33\x8c\x42\x7b\x29\x14\x1c\x71\x0c\xdd\xd2\xd4\x54\x7e\x48\x7b\xbb\x68\xb5\x9f\x88\xee\x0a\x98\x6f\x0e\xb7\x32\x46\xb4\x8e\x3b\xe4\x5d\x1f\xb2\xd2\x70\x2c\xfd\xcb\x1c\xdd\x28\xcd\x04\x1a\x76\xc2\xbf\xec\xa0\xe7\x41\xcf\x1f\x3f\x49\x6e\xb7\x1c\x74\xf2\x18\x0c\xe0\xb0\xf3\x6d\xcc\x86\x50\x6f\x38\xc2\x18\x14\xef\x27\xdf\x8a\x3b\x9a\xc5\x80\x03\x5e\x83\x3b\xb8\xdc\xa0\x31\xe6\x15\xe5\x1b\xf3\x99\x5e\x4e\xfa\x83\x4b\x3f\x9a\x7d\x2c\xf7\x38\x63\x50\xd4\x5d\x3f\xf2\xe3\xc7\xd7\x18\x43\x29\xbe\x71\x19\x5f\x11\x96\x9a\x9d\x39\x43\x76\x40\x61\x98\x90\x94\xb6\x33\x6a\x6b\x70\xe3\x85\xd6\xce\x03\x6f\x31\x06\x85\x8e\xaa\xb3\xcc\xe3\xf0\x0a\xce\xc5\x46\x34\xa1\xab\x60\x50\x2c\x89\x9d\x98\x88\x4c\x3d\x63\xb0\xd0\xbf\xe0\x30\x78\x24\xc0\xd8\xdc\x77\x8d\x7f\xee\x06\xef\x66\x78\xf9\x14\x78\x7d\x72\xb6\x29\xf7\x72\xd6\xc9\x8c\x0b\x5b\x72\xd7\x87\x31\x06\xfc\x0e\xd3\x2d\xaf\x35\x08\xaf\x80\xeb\x56\xe8\x36\x68\xc0\x07\x06\xc3\x8c\xdf\xe0\xb7\xed\x05\x6d\x15\x77\x47\x19\x19\x83\xc5\xe9\x0c\x86\xe0\x02\xa1\xfc\xe3\xea\x0b\x8d\x1d\x0c\x38\x83\x08\xaf\x7d\x01\xab\xb5\xd2\x1c\x78\x8a\x7f\x59\xe6\x8b\x9f\x1d\xe5\xda\xe1\x7b\xf4\x86\xcf\xf1\x2c\x8c\x61\x0c\x0a\xfc\x00\xbc\xb1\x2b\x08\x2f\xe3\xa0\x35\xbb\xe2\xa3\xe3\x42\xd6\x4f\x8f\x9c\x99\xb8\xf0\xe5\xc1\x0b\xd1\x69\x07\xf2\xeb\x66\xad\x1f\x95\x8e\x4a\xc6\x90\x1b\x5a\x90\x2f\xe0\xe0\x3a\x9c\x7a\xcf\xa0\x39\xba\x04\x82\x67\x7f\x10\xc5\x18\x4a\x2d\x83\xa0\x0c\xb5\xc2\x9a\xeb\x19\x95\x06\x8d\x01\xdd\x21\xa7\x19\xe6\x0b\x45\x45\xf9\x45\x5a\x84\x47\xf0\x39\x56\x49\xce\xda\xd6\x96\x82\xc2\x16\xf1\x72\xd6\x25\xe3\xf9\xba\xbd\xa6\xbd\xb5\x6d\x75\x70\x0c\x26\x82\x33\xcc\xfa\x09\x1a\x9a\xae\x55\xdc\x2e\xfd\x84\x51\x36\x62\x01\xd8\xe9\xe4\x1f\x5c\xfa\xb1\x0a\x5e\x82\xb1\x76\x47\x4f\x3c\x3c\xa5\x93\x87\x83\x1c\xa2\xaf\x39\xe8\xa8\xe9\xe6\x4c\x2e\x78\x79\x1e\x2c\xc7\x5d\x77\x91\x3f\xef\x1b\xd2\xde\x75\xe4\x22\x8c\x2d\x81\xfe\x53\x41\x39\xb5\x03\xf9\xe0\xe5\x0c\xfc\xdb\x72\x83\x33\x35\x67\x17\xc6\x45\x58\x62\x7a\x67\xe8\x30\x48\x32\x40\x90\xf9\xe9\x56\xb4\xdf\x36\x23\x17\x15\x3b\x9f\x6b\x75\x72\xc4\x39\x70\xc4\xfc\x3a\x83\x19\xd2\x72\x0e\x8e\x60\x2c\xc4\xe3\x61\x3c\x8c\xb1\x18\x8f\x47\xf0\x08\xc4\x62\x3c\x1c\x86\xc3\x10\x0b\xf1\x70\x44\x80\x13\xd0\xc1\xe5\x5e\x0e\x04\xf9\xfa\xab\x96\x4a\x73\xab\xae\xc7\x68\x29\x84\x7b\xcf\xbf\xc3\x49\x3d\x77\x75\xd4\x79\x38\x0f\x52\xef\x39\x66\x21\x3e\xe0\xe2\xf1\x3e\x36\xa1\x3f\xee\x79\xc5\x7c\xa7\x7a\x87\x4e\x7e\xa3\xb7\xaa\x8d\xc9\xd9\xd0\x94\x5e\xac\x85\x4f\xbd\x21\x19\x13\xe2\xf1\x1e\xa3\xb4\xed\xad\xbe\x0a\xde\xff\xe7\xab\xcb\x55\xdb\x14\xbf\x5a\x75\xe0\x28\xe8\xc1\xc4\xa1\x9c\x56\xf9\x7a\x34\xb2\xaa\x46\x8f\x1b\xac\xca\xc9\xea\x1b\x66\xf5\xc9\xad\x3e\xd6\xea\xb3\xb3\xfa\xec\x1b\x6f\xb0\x2a\xd9\xba\x46\x56\xe5\x7b\xf4\x6c\x02\x6d\x33\x22\x05\x72\xba\xa7\x1b\x3a\x60\x22\xdb\xdb\x7d\xd5\x2a\x1d\xf8\xb0\xe6\xee\x99\x56\xc1\x37\x13\xb2\x78\x55\xaa\xd3\x25\x5e\xb5\xc4\xa9\x85\xaf\x39\xab\x68\xe1\xa1\x43\x6e\x60\x55\x1e\x56\x98\xfa\x9f\x30\xc6\x0a\xa3\xfe\x09\xb3\xb7\xc2\xec\x96\xfc\x03\x26\x2b\xbe\xc4\xab\x64\x7f\xc3\x94\x1e\x20\xb2\x10\xcb\x3a\xe8\x68\x41\x9a\xc4\x7d\x53\x1b\x01\xce\x93\x13\xf0\xc3\x85\x6e\xd8\x02\xe3\xc1\xfa\xff\x70\x21\x95\x6f\x2c\x36\x18\xb5\x5f\x54\x80\x7c\xb7\xaf\x88\xd3\x0e\xc1\xa2\xbf\xf6\xd7\x56\x9c\x88\xdb\xef\x1e\xb7\x7f\x53\x45\x58\x1c\x2e\x1a\xe8\x76\x09\xbc\xf7\x7e\x85\xca\x8e\x9d\x3e\xee\x43\xb0\x0b\x5b\x70\x1c\x05\x1f\x29\x60\x13\xa4\xbf\xf3\xe1\x88\x6f\xf5\x7e\xee\x28\x47\x35\x05\x5b\x7f\xe1\x71\xab\x02\xe5\xa0\xd6\x5f\x1d\xf1\xaf\x77\x5e\x77\x87\x4d\x98\x4e\xe1\x47\x0a\x6c\x81\x71\x43\xa0\x6b\xe7\x6d\x54\x6e\xd8\x3b\xcd\xfd\x12\x7a\xe3\xa2\x67\x61\x75\x9b\xd2\xe2\x42\xdd\xe3\xc2\x2a\x36\xee\x8f\x87\x45\x1e\x6e\x38\x6d\x2b\x95\xe8\x5b\x81\xf2\x2f\xb4\xc6\x62\x43\x81\x51\x84\x0f\xaf\x40\x0b\x8e\x47\xeb\xff\xc3\x2b\x93\x6b\x22\xd0\xf9\x9b\x78\x77\x98\xb6\x15\x17\x79\x84\xc5\xa7\x6e\xac\x0b\x73\xaf\x0b\x3b\x9e\xba\xbf\x0e\x16\x3d\x73\xd3\xa3\xf7\x8e\x69\xa0\xdc\xb0\xe7\xb6\xfb\x13\xe8\x82\x16\x18\x67\x7b\xf3\x26\x4c\x5f\xf6\xfa\xa3\x7f\x5d\xba\xea\x0e\x72\x50\x53\xb8\xd5\x76\xa4\x77\xab\x02\xe4\xa8\xbe\xe4\xf7\xe8\xdb\x65\x1f\xba\xe3\x26\x48\xb7\x95\xa7\x05\xc7\x3d\xc1\xae\x3d\x3e\xa0\xec\xd8\xf1\x95\xbb\x1e\xbc\x61\xd1\xc0\xfd\x71\xc7\x2b\xea\xf6\xbb\xd7\xed\x4f\x3d\x11\x56\x8b\x8b\xfe\x72\x53\x3e\x65\x81\x81\x35\x3a\x79\x26\xac\x71\xd0\x51\x17\xa5\x3f\xb9\x78\xbc\x81\x07\x31\x03\x3f\xa9\xc7\x1b\xf5\x98\x07\x75\x75\xd0\x5d\x07\xd7\xe1\x20\x64\xc2\x27\xb1\x70\x3d\x16\xf2\xb0\x2e\x0e\xbb\x19\xb8\xd9\xf3\x32\x87\xdf\xad\xc5\xef\xd7\xe2\x77\x6b\x2d\xf2\x00\x3c\x86\x9d\x51\x16\xc7\x64\x8c\xf8\x16\x43\x61\x22\x8e\xc5\xdf\xf1\x77\x37\xf8\xee\x74\xdf\x4f\x72\xe8\x84\xe3\xd0\xd9\x24\x31\xd5\x10\xf1\x32\x84\xe2\x44\x18\x0b\x4f\xe0\xb1\x4d\x9d\x26\xc8\x75\xb4\x07\xc8\xed\x0c\x2f\x3c\x0e\x3d\xf3\xa5\x62\xee\xdd\x88\xc6\x4e\xcc\x7c\xb2\x6b\xd5\xad\xad\xf8\xaa\x85\xa5\xce\xd1\xf0\x0a\xfc\x01\xb3\xf1\x0f\xea\x3c\x6d\x39\xd3\x33\x9a\x43\x57\xbc\x0c\x97\xd1\x15\x5c\xe1\x32\x75\x42\xcf\x0d\xc1\x4c\xc8\x18\xf2\x07\x64\x50\x1d\xab\xb9\xa9\xe8\x0f\xfe\x53\xef\x80\x3f\x05\x17\xd7\x72\x96\x39\xf8\x14\x9f\x5a\xe6\x58\x5d\x78\x2a\xcd\xb1\xb2\xb0\xbf\x5d\x2b\x5c\x00\xb9\x2b\x7c\xc6\xc3\x2b\xbc\xa0\x84\xe1\x68\x7a\x9c\x08\x93\xa5\x3f\x61\xc7\x6c\x13\xcc\x04\xb7\x8f\x81\xbd\x0b\x63\x5d\x8e\xc2\xe8\x4a\x28\xf2\x04\x46\x1a\xf4\xdb\x41\x18\x05\xb3\xe0\xe5\xfb\xc0\xa9\x1a\x12\x75\xd4\xbf\xe0\x12\x57\x3d\x1a\x5f\x6d\xdf\xd8\xe0\x77\x70\x53\x77\xcd\xcd\xaa\x8b\xc0\xc2\xce\xe2\x43\x4c\xbb\x31\xae\x28\x55\x9b\x58\x90\x9a\x99\x18\x9d\x1c\x83\x43\xf1\x42\x72\xc4\x06\x9f\x81\x55\x95\x5f\x15\xb5\xfc\x02\x5b\x8d\x87\x8b\x1a\x72\x9a\x62\x2a\x62\xca\x23\x13\x32\x53\xd2\xe2\xd1\x0d\xff\x4c\x0a\x67\x22\xde\x8c\x48\xda\x94\x37\x2e\xfb\xd5\x2f\xf7\xff\x5c\x75\xf2\x07\xf8\xf4\xcc\x57\xfb\x2f\x7e\xd3\x71\x39\x62\x7f\xf2\xc9\x5d\x95\x59\x7b\x93\xf7\xb7\x57\x96\x1f\xd8\x53\x5f\x7d\x2a\x93\xd9\x97\x53\x1b\xd3\xb4\xab\x2e\xae\xaa\xa2\xbc\xa4\xc6\x54\x59\xf6\x76\xfe\xb9\xfc\x77\xe2\x2a\x27\x55\x8d\xc6\xc9\x98\x5d\x81\xf2\x32\x1f\x70\x7b\xa7\x62\x36\xf3\xdc\x0f\x43\xb9\x9c\x86\x98\xca\xd8\x9c\xd8\x9c\x94\x18\x63\xac\x31\xa6\x3e\xa5\xde\xc8\xa8\x9c\x52\x1b\x8c\x95\xf5\x39\x0d\x8c\xf4\x31\xd6\x70\x89\xcd\xa1\x25\x51\x09\xd1\x09\x59\xa1\xbb\xa3\x6a\xa2\x0e\x64\x35\xd7\x34\xd5\x94\x1c\x48\x68\x66\x7a\x6b\xcd\x5d\x5c\xcb\x91\xf4\xb3\xc1\xad\xc1\x2d\x81\xe9\x91\x41\x91\xc1\xa6\x55\xed\x91\xed\x11\x67\x4d\x2d\x47\x18\x5b\x3d\xb0\xbd\x53\x38\x95\x53\x6a\xf8\xd1\x80\xf2\x2d\xe1\x41\xe1\xe9\x2b\x5b\xb7\x58\x6f\xb4\x6e\xe9\x4c\x3f\xda\x7a\xb4\xcd\x74\x3e\xe2\x28\xa3\x1a\x28\x03\xb9\xf4\xd8\x5a\x71\xc0\xfc\xb6\x01\xfc\xd1\xf3\x74\x3d\x18\x31\x0b\x16\x60\xea\x74\x5c\x09\xa3\xf0\x24\xda\x4f\xc4\x44\x5c\x18\xee\x85\xc1\xbf\xe1\x64\x46\xe5\x21\xc7\x57\xd0\xfb\x3b\x3c\x0d\x71\x9b\x0b\xfd\x6b\xfd\x0f\x07\x3c\x40\x11\x16\x85\x00\xff\xc0\x68\x2c\x2e\x32\x16\x81\x33\xca\x61\xcd\x07\x27\x61\xca\xa7\x79\x9f\xd6\x7f\x70\x8a\x51\x39\xc9\xad\x92\x1f\x04\x8e\x85\x91\xcc\x73\xc9\x3c\x8c\x8b\xdb\xb3\xa5\x24\x3c\x6e\x67\x6c\xd6\x96\xba\x9d\x75\x3b\x8f\x66\xb5\xd5\xed\xa9\x2f\x39\x1a\xb7\xc7\x9a\x41\x98\x08\x87\xb9\x9c\xe6\xe8\xea\xe8\xec\xe8\xec\xa4\x68\x63\x74\x71\x54\x53\x52\x53\x71\x53\x71\x75\x53\x76\x13\xa3\x93\x37\x3f\x9f\xcf\x65\xb7\x85\xd7\x86\x67\x87\x67\xc5\x87\x97\xec\x2c\x0e\x6f\x8b\x6f\x2b\x69\x2b\xae\x6d\xcb\xda\xc3\xf4\x8e\xea\x71\xe6\x54\x8b\x56\x47\x1f\x5d\x5d\x19\x14\x1d\x14\x9d\x12\xd8\xb4\xa5\x31\xe8\xed\x94\x23\x4d\x47\x9b\x2a\xce\xee\x3a\xc2\x98\x93\x7b\x3d\xb9\x9c\x86\xd8\xca\xd8\x9c\x18\x6b\xc5\xc7\x18\x63\xeb\x93\x1b\x8c\xf5\xc5\x55\xf5\xd9\x0d\x0c\x2e\x83\x2c\x2e\x66\xff\x86\xb2\xed\xbb\xc2\x76\x65\x6e\x68\x08\x6b\x08\xeb\xc8\xdc\xdf\xb0\xaf\xb1\xb4\x23\x66\x3f\x63\x33\x77\xfe\x7f\xfb\xee\xdc\xa3\xa3\x7c\xf7\xd0\xa0\x66\x41\x4d\xac\x7d\x41\xbf\x7e\xb6\x6b\x7f\x1d\x2d\x53\xeb\xe8\x87\x5c\xbb\xca\xee\x91\xbd\xcc\x4e\xd6\x5f\xa6\x95\x1d\x95\x75\xd9\xb9\xdb\x0d\xb6\x1b\x6a\x37\xd2\x6e\xac\xdd\x04\x3b\x1f\x3b\x5f\xbb\xb9\x76\xaf\xd9\x2d\xb6\xdb\x68\x17\x64\xb7\xcd\x6e\x87\x5d\xbc\x5d\x8a\x5d\x86\x5d\x8e\x9d\xd1\xae\xcd\xee\x5d\xbb\x2b\x76\xd7\xed\x3e\xb3\x7b\x60\xf7\x9b\xdd\x1f\xf6\xb3\xec\xe7\xd9\xbf\x66\xbf\xc8\xde\xdf\x3e\xc0\xfe\x4d\xfb\x50\xfb\x38\xfb\x1c\xfb\x32\xfb\x76\xfb\x13\xf6\xa7\xed\xcf\xdb\xbf\x63\xff\xbe\xfd\x27\xf6\x37\xed\xbf\xb0\xff\xce\xfe\x67\xfb\x5f\xed\xff\xb0\x97\x1c\x88\xc3\x00\x07\xb5\x83\xbb\x03\xef\x30\xc6\x61\x8a\x43\x97\xc3\x17\x0e\xdf\x3a\xdc\x73\xf8\xcd\xe1\x99\x83\xd9\xa1\x57\x2e\x97\x2b\xe4\x4a\xb9\x97\x7c\x8c\x7c\x8a\x7c\xba\x7c\xa6\x7c\x9e\x7c\xa1\x7c\xa9\x7c\x95\x7c\x83\x7c\x8b\x3c\x4c\x1e\x29\x8f\x91\x27\xc8\xbb\xe4\x1f\xcb\xef\xc9\x1f\x52\x0e\x94\x2b\xa5\xa1\x04\x6a\x0a\x35\x8b\x7a\x8d\x5a\x44\xf9\x53\x01\xd4\x9b\x54\x34\x95\x45\x19\xa8\xf7\xa8\x4f\xa8\xcf\xa9\xbb\x34\x4d\x8f\xa6\xe3\xe9\x0c\xba\x90\x2e\xa7\x1b\xe9\x36\xfa\x00\xdd\x4e\x77\xd0\xb7\xe8\x07\xf4\x6f\xf4\x9f\x0a\x1f\xc5\x42\xc5\x72\x45\xa0\x62\xbd\x22\x48\xb1\x43\x11\xa9\x78\x4b\x71\x49\xf1\xbe\xe2\x9a\xa2\x5b\x01\x8a\x7f\x33\x83\x98\x09\xcc\x14\xc6\x97\x99\xcb\x2c\x62\xde\x64\x76\x32\xb1\x4c\x32\xf3\x36\x73\xd7\x51\xed\xa8\x71\xf4\x70\x5c\xe1\xb8\xca\x71\xad\x63\xa1\x63\xb9\x63\xad\xe3\x27\x8e\xdf\x38\x3e\x71\x7c\xce\x3a\xb0\x8e\xac\x92\x75\x66\xdd\xd8\xb1\xec\x0c\x76\x1e\xbb\x83\xcd\x65\x6b\xd8\xc3\x6c\x07\xfb\x16\xdb\xc9\xfe\xc2\xfe\xc1\x9a\x89\x1d\x51\x10\x81\x78\x91\x51\xc4\x97\x6c\x26\x91\x24\x81\xa4\x90\x2c\x92\x4f\x8a\x48\x29\xd9\x4d\x9a\xc8\x7e\x72\x84\x9c\x26\x5f\x91\xc7\xa4\x87\x3c\xef\x67\xdf\xcf\xa5\xdf\x4b\xfd\xb4\xfd\x3c\xfa\x8d\xee\x37\xb5\x9f\x5f\xbf\xe5\xfd\x36\xf6\x0b\xea\x17\xda\x2f\xba\x5f\x62\xbf\xf4\x7e\x39\xfd\xf6\xf5\x7b\xbf\xdf\x9d\x7e\xcf\xfb\x3b\xf4\x17\xfb\x8f\xed\xbf\xb8\xff\x8a\xfe\xab\xfa\xaf\xeb\xbf\xb5\xff\x8e\xfe\xd1\xfd\x13\xfa\xef\xee\x7f\xaa\xff\x67\xfd\x9f\xf6\xef\x55\xb2\xca\x97\x94\x5a\xa5\x97\x72\x8e\x72\x83\x32\x52\x99\xac\x34\x2a\x4d\xca\x2a\x65\x83\xb2\x55\xb9\x4f\xf9\x96\xf2\x82\xf2\x13\xe5\x4d\xe5\x2d\xe5\x5d\xe5\x4f\xca\x87\xca\xdf\x95\x7f\x0e\xa0\x06\xa8\x06\x8c\x1e\x30\x7e\xc0\xe4\x01\x33\x06\xcc\x1d\xe0\x37\x60\xf1\x00\xfd\x80\xb0\x01\xd9\x03\x2a\x06\xec\x19\x70\x78\xc0\x99\x01\x17\x06\xbc\x37\xe0\xea\x80\x4f\x07\x74\x0f\xb8\x3d\xe0\xe7\x01\xbf\x0d\xe8\x71\x62\x9c\xfa\x39\x39\x3b\x69\x9c\x3c\x9c\x86\x3b\x8d\x71\x9a\xe4\xe4\xe3\x34\xc7\x69\xa9\x53\x80\xd3\x76\xa7\x48\xa7\x3c\xa7\x06\xa7\x43\x4e\x6f\x39\x5d\x70\xba\xec\xf4\xb1\xd3\xe7\x4e\x77\x9d\xee\x39\xfd\xea\xf4\xc4\xe9\x2f\x27\x74\x76\x72\x1e\xe2\x3c\xd5\xd9\xd7\x79\xb9\x73\x88\x73\x82\x73\xa1\x73\xbd\x73\x8b\xf3\x41\xe7\x23\xce\x1d\xce\x6f\x3b\x5f\x70\xfe\xc0\xf9\x2b\xe7\x47\xce\x7f\x38\xff\xe5\x8c\xce\xff\x76\xa1\x5d\x88\x8b\x93\x0b\xe7\x22\xb8\x0c\x72\x19\xea\x32\xca\x65\xbc\xcb\x6c\x97\xe5\x2e\xab\x5c\x42\x5d\x92\x5d\x8a\x5d\xaa\x5c\xea\x5d\xf6\xba\x1c\x73\x39\xed\x72\xc9\xe5\x7d\x97\x6b\x2e\xd7\x5d\xbe\x77\x79\xe8\x02\x2a\x46\xe5\xa4\x12\x55\x9e\xaa\x61\xaa\xd1\xaa\x09\xaa\x59\xaa\xf9\xaa\x25\xaa\x75\xaa\x20\xd5\x36\x55\xb4\x2a\x41\x95\xa2\xca\x52\xe5\xab\x4a\x54\x15\xaa\x7a\xd5\x1e\xd5\x21\xd5\x09\xd5\xdb\xaa\xf3\xaa\xcb\xaa\xab\xaa\xeb\xaa\x2f\x54\x5f\xab\xbe\x53\xdd\x53\x3d\x53\xcb\xd5\xfd\xd4\xce\x6a\x9d\xda\x53\x3d\x4a\x3d\x41\x3d\x53\xbd\x44\xfd\x86\x7a\x95\x7a\xad\x7a\x93\x3a\x42\x1d\xa3\x4e\x52\xe7\xa8\xcb\xd5\x2d\xea\x83\xea\x0e\xf5\x5b\xea\x0b\xea\xcb\xea\x6b\xea\xeb\xea\x5b\xea\x6f\xd5\xbf\xa8\x9f\xa8\x7b\x38\x3b\x8e\xe6\x08\xe7\xc6\x89\xdc\x48\x6e\x32\x37\x97\x5b\xcc\x2d\xe7\x02\xb9\x0d\x5c\x08\xb7\x9d\x8b\xe2\xe2\xb8\x64\x2e\x93\x2b\xe6\x6a\xb9\x7d\xdc\x21\xee\x38\xd7\xc9\x5d\xe1\x3e\xe3\xee\x70\x3f\x71\x0f\xb9\x3f\x39\x74\xb5\x73\x75\x74\x1d\xe0\xaa\x72\x75\x77\x15\x5d\x3d\x5d\x87\xbb\x8e\x71\x9d\xe8\x3a\xd9\x75\xb6\xeb\x22\xd7\x00\xd7\xb5\xae\x9b\x5c\x77\xb8\xc6\xbb\x66\xb9\x16\xbb\x56\xb9\xd6\xb9\x36\xbb\xee\x75\x3d\xe4\x7a\xec\x3a\x2b\xf9\xc0\x23\x78\x24\xf9\x08\xca\xd9\xac\x1f\x3d\x8f\x17\xfd\xb6\xf1\x57\x23\x58\xa2\x98\xbe\x23\x60\xd6\x34\xcd\xff\xf3\x99\x5e\x0f\xdb\x4c\xaf\xef\x3f\x66\x7a\x3d\xfe\xc7\x99\x5e\xdf\xff\x79\xa6\xd7\xe3\x1f\x33\xbd\xc5\xa0\xa7\x95\xd8\x85\xb9\x98\x8b\x5d\x30\x8b\x17\x20\x6a\x38\x9b\xcb\x2e\x61\xe1\x28\x6f\x5b\x8e\x8b\xe2\x61\x04\xfb\x30\x84\xd7\xf5\xf8\x7e\xcc\xd3\x16\x1a\xe6\x62\x23\xac\x44\x57\x01\x57\xa2\xb5\x04\x8d\x16\x5a\x33\x92\x8e\x4b\x4a\x8a\x13\xfd\xa0\x95\xbd\xaa\x18\xc3\x0a\x23\x69\x89\xc6\xb9\xd0\x88\x2b\xc1\x55\x80\x95\xe0\x0a\x73\xa1\x51\xa2\x35\x64\x09\xff\xc2\x82\x07\x19\xc9\x0a\x64\x0c\x2b\x10\x7a\x28\x4f\x5c\x3d\x58\x98\x88\x1c\x70\x38\x51\x20\x71\x6b\x78\x52\x57\x5d\x5d\x47\x82\xb7\x6f\x0f\x26\x75\x49\xd5\x71\x84\x43\x03\xae\x81\x35\x60\x00\x03\xf4\xb9\x91\x3c\xed\xcd\x13\xfa\x7d\x96\x8c\xe1\x05\xb2\x9a\xc7\xee\x09\x3c\x74\xcf\x64\x49\x5c\x52\x01\x4f\x66\xb1\x22\x19\xc5\x8a\x64\x1e\x2f\xa2\x7e\x1b\x4f\xb8\x59\xbc\x64\x72\x9d\xc5\x43\x13\xcf\xad\x67\x61\x39\x2f\x80\x7a\x38\x6b\x5b\x79\xf3\x7b\xb1\xf0\xa6\xb0\xcd\x7b\x5e\xa5\xeb\xaa\x93\xe2\x44\xd0\xcb\x17\xf1\x64\x08\x2f\x90\x1c\x16\xd4\x8a\x1c\x9e\x28\xa6\xf3\xb6\xfc\x08\xd8\x67\x25\x4c\x04\x75\x38\x8f\x6a\x05\x99\xc7\x8a\x44\x31\x93\x27\x5c\x20\xfb\x77\x26\xe7\xb2\x82\x64\xea\xed\xe6\x0e\x27\x1d\x8a\x6a\x16\xf0\x21\x3c\xa4\xbe\x06\xc7\x53\xe0\x01\x83\x34\xff\xb7\xa3\xf7\x30\x08\x3c\x4e\x7d\x0d\x8e\x02\x3c\xc4\x07\x60\xe6\x09\xbd\x90\x25\xf4\x68\x96\xac\x66\x05\xa2\xc8\x60\x49\x31\x5f\xc9\x36\xf0\xa4\x76\xf7\xee\x5a\x42\x65\x65\xe5\xa4\x67\x68\x32\x8c\xe9\x25\x59\x02\x19\xcf\xeb\xcc\xa9\x3e\x7d\x4a\x26\x09\x8c\x63\x47\xf6\x19\x97\x7d\x78\x8f\x25\x56\xb4\x02\xc5\x43\x2e\x74\x91\xef\x78\x0b\x2f\xa9\x58\x89\xa7\x4a\xb2\xd2\x8d\x19\xda\xf4\x8c\x3f\x79\x69\x8b\x65\xcb\x3e\x96\x58\xcb\x4c\xb6\xf0\x22\x59\xcb\x43\xf7\x20\x9e\x8c\x66\xc7\xf0\x44\x47\xcb\x6c\x25\x06\x39\x4f\xe8\xd9\x3c\xd9\xc9\x8a\xa4\x6f\x55\x50\x3f\x8c\x25\x90\xce\x67\xf1\x02\x19\xcd\x5f\xa5\xc9\x8a\x53\xeb\xba\xc8\x0f\xb3\x6f\x4e\x14\xc8\x8b\x75\x43\x7d\x1f\x39\xa0\xfe\x77\x96\xd0\x1b\x59\x52\xca\x5b\xb3\x9e\xb8\x3b\x9e\xd0\xcb\x58\x82\x6e\x23\x77\xb0\x0f\x47\xd2\x19\xec\xc3\x87\x8a\x39\xfc\x48\x2b\xfa\xf4\x13\x78\xd0\xcf\x64\x89\xa9\xe1\xe4\xef\x75\x9a\xc2\xfc\xa2\xdc\x42\xa1\x34\xc5\xe3\xc3\x6c\x6d\x56\x5e\x48\x48\xd8\xa6\x1d\x9b\xdc\xd3\x0a\xd2\x0a\xd2\xd2\xd2\xf2\xd3\xfa\x79\xee\x4e\xf3\xfd\x2d\x59\x9b\xed\xe1\x97\x95\x22\xe6\xe6\xe5\xe7\xe6\x69\xe2\x4f\x7a\x99\x62\x84\x94\x84\xb4\xb8\x8c\x38\x26\x26\x0f\xb9\xa4\x44\x0d\x7a\x28\x12\x81\x4b\x6a\xc8\x13\xca\x62\xcb\xe3\x2b\x13\x98\xf4\x98\xf5\x5e\xf1\x9a\xbc\x82\xdc\xa2\x3c\x21\xb3\xf2\x2f\xbf\x62\x6d\xd5\xe7\xbf\xef\x2e\x17\xcb\xf3\xcb\xf3\xcb\xcb\xcb\x0b\xca\xfb\x79\x26\x96\x7f\x3e\xb4\x4a\x4b\xf0\x19\x9e\xc0\x13\xf8\xcc\xea\x42\x20\x0f\xcf\xc0\xea\x10\x1c\x68\x9b\xd8\x1e\x48\x7e\xb8\x79\xf3\x07\x91\xf4\x99\x63\xdc\xc1\xaf\xe2\x75\xb4\xcc\x81\x5c\x5d\xc6\x13\x6e\x3c\x4f\xee\xf3\xa0\xde\xcd\x92\x71\xac\x32\x90\x87\x6e\x7f\x96\x64\x95\x08\x01\x9d\x6f\xf0\x96\x2d\x96\x2d\xaf\xb2\xd6\x3a\x5f\xce\x77\x76\x96\xb3\x64\x0d\xab\x43\xdf\x20\x9e\xc4\xb0\x3a\x85\x0c\xf4\xdc\x7c\x96\x70\xcb\x59\xa2\x78\x9f\x25\x13\x67\xcf\x9e\x48\x56\xb2\x7e\x6b\xd8\x91\x84\x9e\xc1\x12\x70\xe2\x7b\xf4\x10\xc0\x12\xa8\xe4\xe1\x2e\x2f\x92\xab\x81\x3c\xb9\xe1\x7f\x79\x4e\x30\x4f\x1a\x4b\xf8\x5c\x9e\x28\xc6\xf3\x44\x71\x9c\x25\x3a\x79\x17\xe8\xed\x0c\xa0\x77\x90\xf4\x3d\xdd\xaf\xf2\x3d\x17\x2c\xdd\x1c\xe4\xf0\xbd\x6b\xcd\x6f\x52\xe7\x57\x8e\x38\x31\x47\x6b\xf1\x7e\xcc\x5a\xbc\x15\x73\x4e\x8c\x38\x1f\x20\x98\xd7\xf6\xae\xa3\xa2\x9a\xe1\x25\xbe\xb9\x45\x94\x52\xa4\x54\x78\x83\x25\x1c\xa8\x78\x54\x80\x02\x06\x82\x8b\x35\xf4\x5f\xb6\x85\x61\x33\x6b\x33\x13\xe1\x24\x10\x30\xb5\xb2\x04\x14\xac\x60\xd1\x4b\xfa\xc3\x2c\xbc\xc4\x8a\x16\xbd\x45\x6f\x62\x7b\xd4\x21\x6c\xe6\xdf\x1b\x03\x9a\x58\x49\xcd\x43\xae\xb5\xa9\xb7\xb0\x64\x31\x2b\x92\x20\xf6\xb9\x7a\x16\x0b\xde\xbc\x28\xe9\x2d\xfa\x36\x1e\xa6\x5b\x7d\x92\xfe\x63\x96\xc4\x55\x27\xd5\x09\x57\x27\x59\xab\xda\xa6\xf2\x8c\x04\xf3\x73\x88\x4e\x9e\x4a\xa6\xb2\xa8\x1e\xc5\x13\x34\x59\xe5\xa9\x17\x27\x9d\xaf\x5b\x5b\x35\x28\x79\xc1\x16\x22\xff\x4b\x3b\xad\xa4\x86\x67\x3c\x31\x65\x96\xa6\x0b\x84\x83\x79\x38\x00\xc6\xe2\xac\x0e\x61\x4f\x47\xf5\xd9\x73\xb0\x97\x5d\xb4\x24\x7a\xe3\x1a\x01\xf4\x3e\xb8\x18\x5c\x70\x93\x16\x28\x36\xa9\x20\xa9\x20\x51\xc4\xf1\xb3\xbc\x70\x02\xce\xea\xe2\x7b\xba\xe9\xef\xd9\xa9\x3c\x74\x28\xa0\x8d\x27\x2f\xb3\x68\x1a\xcb\x13\x29\xc3\x32\x44\x1a\x62\xc9\x20\x5f\xb0\x01\x01\xff\x68\x84\x52\x5f\xe3\x82\x61\xac\xb4\x45\xda\x42\x95\x94\x18\x4d\x65\x1a\x82\x17\xf1\xd2\x45\x60\x70\x8a\x88\x33\x14\x38\x10\x1e\xa1\x02\x8e\xb3\xf5\xac\x00\x33\x14\xc8\xe0\x14\xbc\xb4\x1c\x2f\x6a\xc9\xab\xc0\xa2\xea\x11\xfa\xb6\x32\x50\xca\xaf\x58\xb7\x6e\x45\x52\x51\x72\x71\x8a\x80\x75\x9b\x70\x22\x6e\x41\xbd\xc6\x12\x83\xbe\x18\x85\xc3\xd0\x59\x88\x2c\x8d\xae\x8c\x11\x70\x11\xbe\x9c\x9c\x9a\x1f\x53\x91\xe4\x7e\x77\x64\x45\x52\x63\x7e\x55\x85\xbb\x4e\xb1\x44\x47\xaf\x20\xd5\x6c\x5a\xaa\x21\x2d\x9d\x27\x54\x4a\x4a\x66\x42\x3c\x04\xb1\xe4\xef\xec\x4c\x65\x7b\xf5\xfb\x59\xb3\xde\x9f\x25\xb0\xe6\x2a\x4f\xac\xac\x8f\xb8\x56\xf2\x84\x86\xf9\xbc\x15\x2b\x16\x7d\x1f\x56\xc0\x13\x3d\xf1\x5b\xfc\xf6\x55\x16\x68\xa4\x97\xf3\xf0\x2d\x7c\x6b\x85\x5d\x61\x89\x35\x7b\x2b\xd6\x9d\xea\xea\x3a\x25\xb9\xb0\xeb\x56\x08\xe4\x59\x36\x4f\xac\x74\x42\x70\x2d\xb8\xe1\x02\xd8\x80\x8e\xe2\x6a\x9c\x36\x7b\xf1\xeb\x73\x12\xe3\xe2\x13\x8b\x23\x18\x83\xc1\x90\xaf\x89\x2e\xae\x4b\x68\x28\x28\x34\x14\x6a\x8f\x17\x1f\x2f\x3d\x52\x0e\x33\x4f\xc3\xb8\x3b\xf0\x12\x30\x4c\xf6\xdb\xe7\x72\xcf\xfd\x97\xd6\x53\x50\xf0\x09\x81\x0a\x50\xf0\xdb\xfa\x18\x19\xb1\x92\x8f\x2f\x04\x13\x1b\xdf\x25\xf1\x89\xbb\x6b\x45\xab\x48\x5d\xc6\x93\xd6\x88\x13\x86\xd6\x56\x77\xc2\xed\xe5\x09\x27\x79\xc3\x53\x4c\xc6\x03\x78\x00\x9f\x62\xb2\xc5\x7b\xdd\xda\xa2\xe2\x75\xa2\x7f\xc9\xba\xcd\x53\x66\x8f\xf5\xf7\x5a\xef\xde\xf6\x56\xeb\xa5\xfa\x1b\x7b\x1e\xba\x79\x77\x52\x38\xf3\xd7\xa1\x30\x08\x86\x6b\xe0\x00\x3c\x85\x64\xc9\x5b\xe8\x51\x5b\x4c\x1c\x59\xce\x5b\x11\x58\xce\x92\x51\x7c\x34\x4b\x06\xbe\xfc\xf2\x40\x32\x9d\x95\xd4\xf2\xe9\x2c\x81\x23\xbc\xa5\x43\xea\xf8\x80\xc7\x0e\x8b\x5e\x31\x9a\x15\x2d\xea\xb1\xbc\xa4\xc7\x0e\xfa\x26\x2b\x75\x48\x1d\x1f\xb3\x84\xaa\x4c\x49\x28\x8d\xd7\x12\x78\x0b\x5f\x85\xd9\x78\x01\x67\xe3\x64\x14\xa6\xfb\x08\xb7\x7c\x70\x32\x08\x38\x5b\x8b\x17\xf0\x55\x9c\x8d\x6f\x91\xff\x52\xa2\xac\x06\x0f\x9e\x80\x7a\x05\xbf\x82\x27\xb6\xad\x1c\x26\x12\xbf\x3b\xb1\x96\x04\xf0\x66\x35\x76\x07\xf0\x04\xc6\xf0\xbd\x53\x8d\x7c\x14\xdf\xc4\xf7\x4e\x7d\x8f\x27\x07\x21\x89\xc5\x6e\x1a\x07\x78\x79\xe1\x00\xf1\xb9\x5e\x41\x60\xb1\x95\x85\x38\x10\x18\xca\xef\x6b\x27\xc2\xeb\x5b\x90\xcf\xdf\xbc\x88\x49\x57\xc4\x17\xc6\x15\xc4\x0b\x8f\x1f\xd7\x3d\xd6\xc2\x60\xf0\x88\x36\xc2\x20\xf1\x70\x01\x55\x58\x5e\x50\x6e\xd2\xd4\xe6\xd6\xe6\xd5\x08\xd3\xdb\xc7\x97\xbc\x72\x9c\x89\xfe\xac\xf2\xeb\x2f\x35\x84\x7b\xc2\x5b\xb6\x48\x5b\xdc\x80\x66\x03\x02\xdc\xee\xf1\x56\xca\x76\x93\x54\xec\x3d\xde\xbd\x33\xe0\x99\xad\x76\x28\x82\x6a\x78\xf0\x23\x6b\xee\x94\xf6\x71\x78\xc3\x0b\xbe\x54\x60\x8d\x94\x46\x41\x3f\x1a\xc6\xe2\x35\xca\xd0\xbc\xa6\x7e\x8d\xd0\x70\xba\xe5\xac\x41\x03\xe3\xe1\x1a\x05\x72\x5a\x5a\x4f\x92\x78\x18\xc3\x12\x54\x73\x0b\x79\x02\x0b\xb1\x15\x03\xf0\x34\x85\x6a\x9c\x06\x15\x34\x8c\x85\xa2\xf2\x1a\x53\x4d\x49\xa5\x7b\x51\xa9\xb1\xb4\xb0\x94\x29\xa2\x0b\x33\x8b\x32\x4b\x32\x5b\xd6\xbb\xc1\x44\x2c\xa6\xa0\x80\x26\x8a\xa9\x3c\x39\xc0\x83\x9a\x64\x67\xe7\xe7\x66\x8b\x96\x28\x34\x51\x69\xd9\x99\xa9\x29\x1a\x5d\x8f\x6f\x1c\x5b\x5c\x5c\x50\x54\x2c\x48\x51\x60\xa2\xca\x8b\x4b\x2b\x2a\x35\x3a\xaa\x0b\xb2\x58\x12\xc4\xeb\xa8\xae\x55\x2c\x19\xf8\xdd\xcb\x75\xac\x40\xa4\xfb\xb8\x1a\x12\x61\x35\xbc\x42\xc3\x2a\x50\x82\x0c\xe6\xde\xed\xce\xca\x6d\x14\x70\xa3\x02\x95\xf9\xd4\x88\xb8\x37\xe7\x8b\x38\x0c\xe2\x14\x61\x98\x48\x61\xa0\xe5\x3e\xd9\xce\x82\xc9\x75\x39\x6b\x33\xb5\x36\x91\x25\x8a\xa2\x4c\x63\x56\x49\x96\x79\x55\xef\x2a\xb7\xd6\x88\x06\x53\xbb\x86\x70\x73\x97\x2e\x9d\x3b\x77\xe9\xbb\xd7\x61\x23\x4b\x86\xf2\x33\x78\x62\x60\x61\x1c\x4b\xda\x78\x6f\x9e\xac\x62\x95\xb4\xcd\xf6\x31\x51\x00\xcf\x5a\x4c\x16\x93\xdb\x63\x5e\xb2\x3a\xc9\x95\x35\x59\x1f\xb1\xa4\x56\x5b\x66\x2a\x2c\x2a\x13\x9b\xcb\x6b\x9a\xdb\x34\x84\xaa\xac\x2c\xad\xa9\xd5\x90\xef\x7f\x06\xa7\x4e\x78\x49\x0b\xed\x10\x8f\xb6\x5d\x5a\x38\x11\x87\xde\x04\xd5\x70\x31\xbb\x34\xdd\x98\x5e\xc0\xa4\xa7\xe7\x66\x65\x8a\xe4\x67\x16\x4d\x68\xea\x6b\xf1\x1a\xf0\xe6\x05\x68\xe2\xaf\x58\x47\x9e\x23\xf9\x7f\x1a\x8f\x97\x7c\xc8\x7f\xcd\x1b\x5a\x85\x40\x39\x4d\xc6\x58\x19\xb0\x40\x60\x3a\x2b\x10\xf9\x6c\x96\x70\x38\xc5\x3c\x08\x07\xd0\xa8\xc7\x85\x77\x5e\xbe\xf2\x6e\x55\x55\x59\x79\x71\x99\x7b\x69\x25\x55\x98\x40\xa7\xe5\x27\x27\x6b\x2c\x73\x70\x1a\xd2\x52\x88\x82\xdc\x61\xad\xd4\xf2\x06\x4f\xbc\x79\x30\xc5\xb2\x04\xac\x6c\x1b\x07\x92\xeb\x4b\xdf\x9d\x2b\x90\x36\xf6\x9b\x6f\xbe\x99\xfc\xff\x7f\x25\xd0\x11\xcb\x82\x9c\x25\x65\x39\x10\xc2\x13\x74\x43\x93\x22\x8d\x35\xab\xe9\x1f\x78\x34\x81\x1b\xdd\xcd\x13\xee\x1c\x38\x16\x19\xcb\x4a\x4a\x0a\xdc\xe1\x3a\x5d\x9c\x6f\xca\x2a\xca\x39\x8b\x8e\x6e\x52\xd4\x36\x7f\x1e\xaf\xd0\x73\x61\x1a\x45\xfa\xcc\x49\x77\xfb\xb0\x36\xc1\xef\x65\x56\xd7\x93\x3a\x96\x27\xe0\xc0\x2a\xfd\x79\x03\xea\x09\x78\xb1\x0e\x84\x6e\x66\x09\xdd\xc2\x93\xb3\xac\x6d\xfd\x9a\x4c\xe4\xe1\x25\x56\x20\xb6\x3e\xc2\xda\xec\x4c\xb0\x98\x27\x36\x13\xda\xa0\x26\xad\xa6\xda\x96\x3d\x9a\x3d\xf1\x2d\x11\x26\x01\xdf\xfc\x02\xd7\x41\x83\x64\xa7\xe9\x31\xd1\x16\x3b\x5c\x87\x0d\xf8\xe6\x2b\x82\x72\x84\xcf\xed\x47\xa6\xd2\x52\x93\xa9\x34\x33\xdd\xe7\xda\x6b\xb7\xad\x2e\x99\xc1\x83\x86\xc6\x32\x2c\x25\x8a\xfd\x3c\xa1\xf7\xf0\x84\xd3\xf5\xf8\x0e\x63\x51\x0d\xad\x2c\xa8\x97\xf1\x24\x8a\x95\x4c\xe4\x6a\x12\x4f\x1a\x41\x64\x49\x23\x9a\xe0\x3c\x6b\x67\x80\xf3\xac\x03\xf9\x7b\x51\xf7\x79\x37\x94\xf0\xdc\x68\x56\xe8\x35\xd9\x4c\xf6\x5f\x64\x2d\x26\x85\x55\x14\x06\x57\x3e\x29\x4e\x24\x2f\x54\x79\xf7\x69\xe2\x26\x4d\xac\x48\xb0\x63\x18\x4b\xf0\x08\xc6\x61\x1c\x1e\x21\xc9\x55\x31\x86\xe4\x64\x52\x9b\x59\x93\x52\x49\x6e\x5c\xbe\x7c\x83\x28\x24\x1e\xfa\x53\xd5\xc5\xa6\xca\x6a\x0d\xa8\x15\xe5\xd9\xe5\x19\x25\x42\x46\x49\x6a\x61\x7a\xae\x85\x20\xe3\x46\x20\x90\x15\x24\x8a\x2d\x35\x89\x10\xa5\xb0\x96\x4a\x78\x48\x5b\x0b\x24\xda\x74\x93\x91\x3e\x8b\x76\x3a\xb4\x96\x44\xaf\x88\xaf\x4e\xac\x93\x94\x3c\x51\x60\xd2\x1c\x2a\x29\x3b\x3d\x25\x49\x83\x6a\x45\x5a\x71\x5a\x59\x96\x90\x53\x52\x92\x57\xaa\x2d\x2a\x32\x14\x14\x89\xe4\xc6\x65\xff\x39\x04\x5d\x51\x39\x0a\x5d\x42\xc5\x41\x96\x49\xd4\x0e\xba\x4f\x78\x10\x2d\x6a\x4f\xfe\x21\x71\x48\xe0\xcd\x6a\x38\xc2\x4b\xce\xfc\x07\x3c\xaa\x49\x65\x79\x41\x61\x99\x58\x62\x2c\x30\x6a\x73\x15\xa9\xe9\xd9\xd9\x19\x69\x19\x29\xee\x16\xca\xd2\x46\x8d\x97\xbe\x56\x10\xd4\xcc\x61\xbf\x66\xc9\xd7\x56\x2a\x4d\xe5\xfb\x66\x54\x72\x6c\x7b\x3b\x08\x0c\xf4\xe3\x09\x94\xb3\xfb\xda\x49\x7c\x42\x66\x4a\x0a\xe1\xe0\x81\x42\x52\xc3\x64\x0a\x3f\x56\x58\xf4\xb0\x9b\xb3\x0c\x83\x99\x92\xed\x8f\x33\x29\x02\xfb\xc3\x6c\x7b\xfa\x1c\x74\x8c\xcc\x55\x27\xa5\x46\xf1\xa8\xd6\xf5\xc8\x74\x8c\x8c\x26\xc7\x9a\xda\x3a\xde\xb6\x72\x0d\x3f\xae\x29\xa5\x31\xb6\x52\x88\xad\x88\x2a\x88\x49\xcb\xcc\x49\xcd\x4a\xce\x64\x08\x7d\x0b\xae\xf5\xa9\x20\x74\x2f\xcd\x4a\x2b\x4e\xd7\x62\x94\x4d\xf1\x60\x8e\x38\x15\xbf\xa6\xc8\x7b\xd6\x11\x12\xc4\xf0\xca\xb6\x84\xe6\xa8\x72\x21\xb2\x7c\x47\x76\x5c\x2c\x49\xae\xac\xcd\xaa\xd1\xf6\x69\x8d\x21\x55\xbc\x1d\xf1\xe7\xfb\x76\xaa\x4e\xe2\x89\x62\xcf\xe2\x05\x95\x0b\xb4\x68\x87\x41\x2b\x71\x20\x0e\x84\xa0\x95\x60\x07\x76\x10\x74\x1e\x06\x8a\x84\x86\x2d\xf1\x28\x07\x27\x5c\xad\xc5\xd7\xd0\x13\xa7\x60\x2d\xd6\xc3\x4b\x38\x15\x42\x61\x26\x49\xae\x8c\x31\xa4\xa4\xb8\xaf\x59\x93\x92\x62\x88\xa9\x4c\x76\x27\xd8\x8e\xf1\xf0\x19\x2b\xc9\x59\xc2\x85\xfd\x1a\x36\x7c\x78\xd8\xaf\x61\xfb\x87\xef\xff\xf5\xd7\xfd\x14\xb1\x83\x5c\x9e\x18\x12\x78\xf2\x2a\xdb\x19\xb0\x9c\x27\x13\xf9\xd1\x2c\x89\xe2\x39\x1b\x1d\x9a\x60\x3d\x0b\xc1\xbc\xa4\x86\x6e\x07\x02\x8b\xf8\x7b\xe3\xc8\x7f\x5b\xd8\x37\x80\x9a\xf8\xfd\xcc\x93\x30\x1e\x0e\xb3\x64\x24\x0d\x0a\x9e\xe4\xb2\x30\x7c\x17\x59\xc2\x82\xda\x81\x70\xab\x79\xd2\x98\x6b\x65\xec\x10\x25\x79\x83\x49\xf2\x96\x94\xac\xfa\xdb\x6c\x96\x5c\x65\xad\x8d\x53\x47\x75\xcd\x64\xf1\x16\x41\xc7\x51\xa3\xd0\x11\x1d\x47\x3d\x00\x47\x70\x7c\xd0\x77\x1d\x85\x8e\x02\xe1\xf4\xac\xad\x3b\xbc\xc0\x12\xd8\x60\xe5\x5a\x3e\x6c\x8f\x75\x2c\x00\xdd\x74\x5d\x35\x51\xcc\x63\x89\xd9\xda\x38\xf7\x26\x51\x51\x6f\x75\xa5\xbc\xa7\x85\x31\x30\xf2\xce\xe1\xab\x62\xa9\xb1\xa4\xc8\x58\xc8\x10\xee\x47\x30\x53\x15\x45\x0d\x35\x95\x5a\xb3\x89\xae\x6c\x48\x48\x2d\x12\x7f\x44\x33\x45\x60\xdd\x3f\x0e\xff\x12\xc9\x89\x37\xf4\xf5\xb8\xb6\xfd\x57\xc4\x97\x07\x85\xb5\x15\x9d\x83\x28\xcc\x85\x8e\x6d\x02\x69\x8d\x30\x6c\x8c\x88\x20\x68\xd3\xf8\x4b\x8c\x25\x25\x22\xd1\x51\xbe\x34\x51\x7c\xc0\x92\x19\x2c\x7c\xce\x93\xd8\xb8\xec\x1d\xe5\x51\xee\x91\xe5\xcd\x09\x6d\x5a\xb2\x8c\xf7\x1b\xc6\x12\xc9\x85\x2f\x85\x87\x6c\x66\x4a\xa5\x48\x14\x7b\x9a\x9b\xf7\x08\x8f\xe9\x3d\xcd\x51\x3b\x45\xf2\x94\x35\x10\xee\x33\x9e\x26\x70\x04\xe2\x20\x0e\x8e\x10\xec\x50\x4c\x65\x89\x75\x60\x6d\xa5\x42\x02\x56\x3a\xc0\x39\x68\x95\xb8\xe6\x10\xc8\xe6\x45\x42\x35\x37\x57\x1f\x3a\xac\x21\x1c\x7c\xc4\xef\xdb\xd7\xde\xbe\x6f\x7b\xb0\x40\xbc\xf8\x1e\xbd\x62\x04\x4b\x4a\x0d\x25\xf9\xa5\xe2\xcb\x52\x2e\xfc\x1b\xfe\xa2\xaa\xaa\xaa\x6a\xeb\x34\xca\xf4\xcc\xcc\x74\x02\x27\x9e\xf9\xd2\x6f\x83\x27\x05\x39\xf4\xdb\xe8\x49\xf9\x0e\x84\x0e\x9a\xfc\x7d\x74\x1e\xa6\x01\x0f\x3c\x4c\x6b\x6b\x8a\x0e\x17\x88\x62\x0b\x2f\x40\x37\xdc\x67\xfd\x7c\xd8\xff\x92\x44\xd4\x3b\x09\x94\xf1\x60\x22\x60\x7a\xc0\x12\xf0\xe0\xfb\xc0\xa4\x95\xbf\xfe\xee\xd2\xb9\x02\x89\x7a\xb1\xcf\x9b\xa0\xd3\xef\x43\xc1\x89\x44\x44\x6c\x34\x44\xb4\x12\xcd\x04\x96\x18\x0c\x06\x83\x35\x25\x3d\xe1\x96\xe9\x37\xbd\x36\x6a\xcd\x07\x37\x3f\x3b\x7d\xf9\xfa\x57\x1f\x7b\x4f\x11\x2c\x7f\x91\xf5\x42\x44\x4c\xcc\xae\xb8\x88\xa7\x63\xdd\x2a\xaa\x2a\xab\xab\x2a\x98\xc6\x56\x32\x6c\xce\xac\x21\x9e\xdd\x33\x1f\x0b\xf7\x3f\xfc\xb8\x40\x5b\x5a\x56\x6e\x2c\xcf\x27\x43\x58\x49\xed\x4a\x8e\xe3\x13\xe9\xf9\xba\x5b\x42\x43\x6a\x74\x55\x94\x36\x2a\x3a\x39\x26\x55\x24\x1b\x05\xd5\xcf\xf7\x53\x37\x86\xb6\x1f\x17\xff\x3e\xe6\x47\x14\xe1\x35\x51\x2d\x69\x42\x6e\xa9\x29\xaf\x4c\x6b\x1d\x47\x10\x2b\x29\xcf\x03\xf1\x53\xe0\x2f\x81\x87\x83\x8e\x9a\x45\xd0\x9b\x4e\xcf\x2c\x35\xb5\xf0\xe0\x6d\x63\x6e\x04\xd4\xac\x03\x81\x43\x56\x1e\xab\x26\xb0\x82\x55\x46\xc2\x83\x3e\x09\xcc\x81\x98\xad\x30\x0e\xee\xf2\x50\xc9\x0b\x84\x9b\x4b\x63\xbc\x79\x04\x85\xff\xa2\x31\xbe\x77\x04\x35\x77\x20\x51\xe0\x40\xf4\x44\x05\xce\xb1\x62\xad\xde\xda\x95\x54\x5b\x39\x12\xfd\x23\x4f\x26\xf1\xa8\x27\xdc\x8f\x3c\x91\xba\xad\x6c\x9c\xf8\xb3\xd8\x41\x38\x38\xc2\x12\x8b\xfa\x65\xab\x00\x89\x71\x60\x65\xd4\x8a\xd9\x2c\xb9\xca\x8d\x61\x49\x8f\xb5\x76\xd1\x17\x83\xff\x29\x0e\xda\xda\x9c\xe2\x7f\xeb\xb9\x39\xa8\xe1\x09\xfd\xd9\xb5\x1d\x93\x44\xb8\x82\xd7\xb8\xd4\xbc\xf4\x8c\x54\x2d\xd1\xd7\xe9\x0f\xad\x15\x25\xb5\xc5\x44\xbd\x7e\xf6\xcb\x4d\x5f\x69\xc9\xa9\xe0\xc3\xeb\xd7\x07\x87\xac\x5b\xdf\x1e\x7c\xf2\x64\x7b\xfb\x49\xc1\xda\xce\xad\xfd\x10\x19\xcb\x47\xf1\x21\xac\xb5\xa4\x36\xc4\x5a\xe5\x7e\x54\x2b\xac\x18\x57\xc3\x17\x2c\xe9\x53\x4e\x65\xbd\x12\x78\xc4\xee\x23\x92\x33\xbb\x8f\xc0\x1a\x30\x90\xb4\xba\xfa\x9c\x06\x6d\x43\xbd\xb1\xbc\x4e\x94\xf4\x10\x45\x1c\xce\xa0\x82\x83\x31\x3c\xf9\x5b\x3d\x20\xdc\xe4\x89\xcf\x54\xb4\x5f\x85\x4a\x2d\x2a\xd1\xfe\xdc\xed\xa9\x62\x5f\xb1\xbe\xe7\x89\x62\x22\x9f\x94\x98\x9d\x9e\x2a\x58\x0e\x59\x66\x52\xe4\xaa\xb5\x61\x2f\x61\x39\x32\x71\xf6\xcd\x1f\xc8\x95\xce\xce\x2b\xc4\x24\x74\x14\x15\x2f\xda\x90\xcd\xac\xcf\x5e\x93\x6b\xd0\x10\xb8\xca\x8e\xbb\x47\x3c\xad\xa2\xdb\x24\x9e\xec\xa0\x07\x49\x93\x28\x70\x09\x45\xe5\x03\x74\xd5\x12\xdb\x04\xd7\x6d\xa2\x69\xe6\x49\x6e\x99\xd6\x68\x2c\x28\x30\x8a\x44\x67\xee\x4a\x65\xc9\x87\xbc\x48\xba\x59\x1d\xed\x4b\x0c\x70\x8f\x25\x79\x36\x9a\x25\x70\x92\xb7\xd2\x67\x8f\x09\xd5\x0a\x02\x1d\xd0\x8d\x1d\x0a\xc2\x59\xc7\x8e\x44\xf2\x91\x7c\xe0\x11\xa1\xe3\x92\x12\xe3\x45\xa2\xb8\xcf\x13\xb0\x56\x11\x89\xcf\x4a\x48\x49\x11\x6c\x83\x6c\x81\x4c\x14\x7a\xbb\x69\x82\x9e\xe0\x49\xe6\x5c\xf6\xbf\x41\x6c\xa4\xa3\x08\xd9\xb3\xf3\xb0\x00\x32\xfa\xf0\x9e\x3d\x87\x45\xb2\x1b\xb9\xea\x98\x42\x21\xa3\x2e\xad\x2e\xa5\x86\x21\x50\xd6\xd7\x43\x29\xc0\x8e\x25\x8a\xb9\xef\x2e\xbd\x2e\x80\x3a\x8e\x27\xd0\xc1\x9a\x4d\xbb\x59\x62\x28\xd7\xc2\xf8\x6a\x96\x8c\x63\xe1\x73\x96\x6c\x59\x88\xae\xbe\xc8\x6a\xb7\x86\x95\x54\x85\x8b\xa4\xa2\xa0\xa0\x69\xb7\xf6\x0b\xba\xac\x24\x23\x23\x5f\x24\xa3\x78\xf0\x0e\xe4\xc9\x15\x56\x29\xa9\x25\x35\xd1\xa1\x2f\x4d\xb4\x2b\xa3\x62\xc3\x42\xc4\xe0\x0d\x6f\xac\x1d\xae\x25\x14\x08\x3c\xf1\xb7\xb1\x23\x2a\xaa\xc5\x3a\x9a\x6f\x16\x09\x37\x35\x9f\xb2\xa8\x14\x55\xf1\xad\x09\x75\xa9\x24\x8b\xc9\xca\xca\xc8\x49\xd7\xa2\x9a\x8e\x4f\x22\xfe\x3c\x76\xd3\x43\x78\xc2\xe1\x00\x89\x82\x01\x34\x99\x64\x25\x63\x73\x14\x37\x9b\x25\xc3\x58\x8c\x22\x92\x9c\xb5\x0a\x9e\x04\xd4\x56\xb9\xce\x04\x6a\x88\x65\xc9\x01\x76\xe0\xcb\xdf\x3d\x23\x06\x45\xdf\x97\x40\x6c\x9f\xe4\xa4\xc0\x01\x8f\xbd\x60\x80\x40\x86\xf0\x71\x49\xd5\x75\xd6\xfa\x31\x11\x1d\xa6\x72\x64\x6d\xd0\x91\xd3\xa7\x8f\x58\xff\x41\x6b\x09\xa4\xf0\x92\xbd\x95\xe5\x58\xd9\x48\xb6\xad\xff\x40\x32\x62\x3c\xca\xd1\xe1\xd1\x38\x20\xa4\xf8\xaf\xab\xa5\x95\x62\x51\x61\x41\x61\x91\x86\x18\xc0\x24\xd9\xf1\x10\xcc\x13\x3b\xc3\x09\xde\xc1\x4a\x4c\x67\x59\x42\x77\x9d\xb2\x4a\xd2\x60\x92\xd4\x60\x22\xa8\x0e\xe3\x49\x81\x75\x9c\x4e\x6a\xb5\xb5\x35\x04\x4c\x74\x3b\x41\x43\x20\x2b\x92\xab\x86\xff\x7c\xc9\x24\x03\xa8\xef\xde\x35\xa0\x7a\x92\x96\x68\x0d\x0a\xa0\x41\x7e\xf6\xd4\x57\x22\x39\xca\x3a\x10\x85\x1f\x2f\x5c\x25\x66\x13\xfd\xf7\x2c\x4f\x4f\x83\xdd\x4f\x3a\xfa\x75\x07\x1d\x5d\x46\x2c\x6a\xc9\x44\xc5\x37\xa5\xef\xd9\xab\x21\x8c\xca\x49\xc6\xc8\x64\x2f\x7a\x47\x07\x62\xb6\xb6\x72\x02\xa3\x73\xa0\xca\x4a\xb0\xb6\xc3\x9c\x76\xe4\xb8\xad\x6b\xe9\x6b\xc7\x76\x24\xa7\x2c\xab\x44\x24\x56\xb6\x6e\x9b\x15\x23\x19\xe9\xb9\x59\x59\x04\xd4\xa8\xb6\x0e\x47\x9e\x91\xc3\xda\xc3\x87\x08\xc4\x43\x3b\x19\x49\xa7\x67\x12\xf4\x0a\x43\x0e\xed\x71\xac\x96\xe0\x10\xfc\x23\x0a\xdb\x34\xc9\x85\x04\xfa\xc1\x68\x70\x80\x5a\xe8\x47\xe0\x86\x15\x4b\x8a\x66\x5e\x20\xb8\x1a\x3d\x61\x10\xbc\x01\x7a\x22\xd7\xe1\x08\x2c\xd3\xc9\x3f\xa7\x09\xdd\xbe\xaf\xd4\x64\xda\x5e\x1a\x2c\x92\xbf\xb5\x5d\x43\x14\xc1\x7f\x37\xee\x82\xe3\x3c\x71\x31\xd8\xda\x3a\xdd\x4e\xac\x43\x78\x62\xe1\x2d\x3c\xc1\xc1\x30\x98\xc8\x64\x32\x99\x9d\xcc\x45\xe6\x20\xfb\xef\x0f\x23\x53\x58\x9d\x7f\xff\x5b\xc6\xfe\xc7\xe7\xf8\x1f\x9f\x03\x1d\x6c\x57\x2c\xa3\x64\x32\x79\x81\x7c\xa2\x4c\x26\xcb\xee\x73\xed\x23\x65\x32\xbb\x7c\xd9\xff\xf0\xd9\x19\x17\x11\x29\xf3\x95\x79\x3c\x93\xd1\xb2\x7f\xcb\x64\x32\x5a\x66\xd7\xf7\xfe\xbf\x3f\x1e\x32\x0f\x9b\xeb\xd0\xf7\xb7\x1b\xf4\xe2\x9e\x4e\xe6\x60\xf5\xd9\x0d\x92\xc9\xec\xe8\xff\x4a\xd0\xee\x1f\xb1\xff\x01\xfe\xff\xc2\x87\xed\xe7\x48\xd1\xc7\x15\xcc\x89\xff\xb7\x13\x96\xdb\xf5\xc8\x64\xb2\x58\x99\xaf\x8c\x92\x4d\x96\x79\xc8\xf6\xcb\xda\x65\x1d\xb2\xf7\x64\x5f\x0e\x1c\x34\x48\x18\xf4\xff\xa3\xc5\xda\x62\xe3\xb8\xca\xf0\xb7\xb3\x73\xad\x63\x9f\xa1\x34\xa5\x6a\x21\x4c\x21\x51\xd2\xa8\xd9\x75\xa2\x5e\xc0\x8a\xa2\x75\x9b\xb8\x0f\x14\xdb\xb5\xdc\xaa\xaa\x68\x9a\x8d\x3d\x1b\x2f\x59\xef\xac\x66\x27\xae\x8c\x50\x34\xe2\x9d\x28\x2f\xbc\x80\x14\x45\x3c\xf1\x14\x45\xa8\x88\xcb\x43\x09\x12\x6f\x15\x51\x04\x85\x52\x28\x26\xe5\x56\xae\xe6\x9c\x81\x00\x4f\x19\x34\x67\xce\xcc\x9c\x19\x4f\x93\xbe\x34\xd2\x9f\xf3\xcf\x7f\xbf\x9e\x99\xf5\x29\x3a\x45\xf7\xd0\x63\x74\x9e\x9e\xa4\x3d\xda\xa7\x43\x7a\x9e\x5e\xa0\x97\xe8\x15\xfa\x6d\x7a\x9d\x6e\xd1\x6d\x7a\x9b\x4d\xb1\x3d\x6c\x3f\x3b\xc0\x5a\xec\x18\x9b\x67\x27\xd9\x90\x9d\x67\x17\xd8\x25\x76\x85\xbd\xce\xae\xb3\x2d\xb6\xcd\x6e\x47\x53\xd1\x9e\xe8\x58\x34\x1f\x9d\x8c\x86\xd1\xf9\xe8\x42\x74\x29\xba\x12\xbd\x1e\x5d\x8f\xb6\xa2\xed\x5b\xc9\x1c\x24\xfd\xfa\x56\xc5\x33\xa8\x4d\x1f\xa6\x1d\xba\x48\x4f\xd1\x33\xf4\x8b\x74\x44\x43\x7a\x91\x5e\xa6\x57\xe9\x35\x7a\x83\xde\xa4\x94\x81\xd9\xcc\x61\x07\xd8\x23\x6c\x9a\x75\xd8\x22\x3b\xc5\x46\x2c\x64\x17\xd9\x65\x76\x95\x5d\x63\x37\xd8\x4d\x46\x23\x44\x76\xf4\x70\xd4\x89\x16\xa3\x53\xd1\x28\x0a\xa3\x8b\xd1\xe5\xe8\x6a\x74\x2d\xba\x11\xdd\x4c\x3c\xc7\xef\x02\xf1\x17\xe2\xe7\xe2\xd9\x78\x7a\xeb\xbd\xad\xaf\x6d\x2d\xd9\x93\xf6\x2e\xfb\x1e\xdb\xb2\x4d\xdb\x00\x6c\xd5\x6e\xda\x8a\xdd\xb0\x41\x62\x72\x8b\xfc\x9b\xfc\x8b\x44\x84\x11\x4a\xfe\x39\xf5\x0e\xd9\x26\xff\x20\x7f\x27\x7f\x23\x7f\x25\x7f\x21\x7f\x26\xef\x91\x3f\x91\x3f\x92\x3f\x90\xdf\x93\xdf\x91\x77\xc9\x4d\xf2\x5b\xf2\x1b\xf2\x0e\xf9\x35\xf9\x15\x79\x9b\xfc\x92\xbc\x45\x7e\x41\x7e\x4e\xde\x24\x3f\x23\x3f\x9d\x78\x8d\x8f\xd5\xc6\x1d\xba\x72\xf2\x43\x1b\x24\x1d\xbb\xd0\xc4\x04\x14\x1e\x83\xda\x78\xe3\xad\x7d\x5f\xfe\xc9\x2b\xe4\xe8\x2d\x34\xf9\x52\xe2\x8d\x85\xa3\xd3\xc9\xf9\xe6\xe1\xb5\xef\xc7\xf1\xed\xd8\x6a\xe8\x0d\xbe\x43\x4a\xb1\x12\xe9\xce\x59\x49\xfd\x62\xab\x51\x5d\x12\xe5\xb5\x66\x88\x51\xe3\x1a\xa0\x87\xd8\xd0\x42\x40\x05\x5e\x49\xac\xd7\x41\xc2\x17\xf8\xcb\xc9\x42\xea\xc5\x33\xc7\x13\xd0\x92\xe7\xb0\xcc\x33\x80\x4d\x2d\xc4\x30\x93\xd1\x33\x1d\x61\x53\x0f\xf1\xa0\x2e\x9e\x8d\x10\x47\x32\x99\x3a\x48\xf4\xd4\xd4\x76\x27\x91\x6b\x8a\x67\xee\x3b\x2c\xec\xa6\x31\xc4\xb1\x96\xc5\x29\xc9\xa8\x92\x7f\xe3\x6e\x20\x62\x51\x51\x9c\x72\xbe\x46\x99\xf6\x25\x4d\x8e\x5d\xe2\xeb\x0a\x8f\xe5\xeb\x1a\xf0\xd2\xfb\xe5\x56\x03\x1d\x61\xe7\xf1\x04\x8c\x82\x3e\x29\xd7\x43\x0b\x77\xf6\xa9\xd4\x9b\xf4\x7c\x89\x43\x28\xc5\x9e\xd6\xaf\x63\xf0\xcb\xbf\x5c\xe3\x2c\x77\xc9\x27\x9a\xa1\x94\x7b\xd1\x87\x3c\x57\xf9\xd4\x44\xad\xb5\x82\xff\x68\x32\x5b\xba\xd4\x0f\x2d\x2c\xf9\xeb\xe8\x88\x63\x39\xe6\xf7\x85\x10\xbb\xe5\xbc\xf5\xba\x9e\x85\xb0\xc5\xd9\x93\xea\xa2\xea\x3b\xf3\x24\xa5\x1c\x42\x3c\x64\x64\x75\x17\x60\x09\x9b\xaa\xe8\xa5\x12\xa2\xa3\x88\x1a\x66\x34\xb5\x12\xb7\x01\x1c\x90\x63\x92\x6b\x27\xcf\x8c\x21\xd5\x42\xea\x63\x47\xae\x4f\xce\x0b\xd3\x5e\x89\xbc\xf2\x18\x55\xe0\x90\x0a\x4c\xaa\x21\x3e\x9f\x80\x12\xe2\x90\x12\x16\xcf\x99\x0f\x55\xec\x8b\x5e\x9e\xdf\x8e\x5e\x9d\xe9\xca\xec\x48\xbb\x99\xf1\x3a\x62\xff\x26\x8d\x10\x87\x32\x5d\x4d\xaa\x49\x72\x2a\x29\x9c\xd6\x01\x2d\x81\x6c\xf6\xd4\x54\x76\x52\x2b\xeb\x39\x75\x7d\x17\x35\xd9\x95\xed\x7d\x46\x6b\x84\xa5\x5a\x3f\x9e\xd1\x55\x69\x57\xef\x04\x52\xdf\x0e\x35\xbf\x02\xa8\x4d\x71\x77\x81\x9f\x9f\x91\x66\xed\x93\x09\x18\x48\x41\xcf\x40\xba\xcb\x74\xe0\xa1\x9d\xb3\x8c\x89\x6a\x1e\xc2\xef\x71\xbd\xf8\xd8\xc9\x6a\x99\xd7\x4e\xc8\xe9\xb9\x1e\xf0\xa8\x38\xf3\xbc\x0c\xe0\xa0\x8e\xfc\x0e\x74\x8c\x30\xdd\x9b\x7c\x56\x80\xdd\x35\x3b\x93\xef\x6c\x22\x63\x56\xee\xe2\xec\x0e\xb0\x52\xf9\x75\xbd\x3a\xcf\x42\x36\xbb\x27\x8c\xff\xe0\x91\xea\x2e\x89\x38\xb3\x7b\x99\xe7\x65\xc9\x3a\xc5\x69\x9b\x05\xdd\xc9\xfa\x61\x7d\xf0\x7b\x31\x81\xfd\x59\xcc\x22\xfe\x64\x7e\xee\x95\x7c\x1c\x17\xf1\x7c\x36\xa1\x17\x72\x71\x2c\xc5\x7c\x4c\x03\x1e\xd0\xeb\xee\xbe\x32\x24\x1f\x18\xab\x3a\xf0\xbc\x88\xfb\xa0\xf0\x63\x1a\xc0\xa7\x2d\x11\x7b\x15\x4c\x60\x2a\x01\x2d\xac\xb7\x6f\x56\xce\xac\xbe\x52\x1f\x38\xae\x01\x13\x66\x25\x7f\xb3\x82\x9b\x55\x5c\xf4\x57\x3c\x7f\x54\x97\x6c\x8a\x19\xcf\xfa\x55\xb9\xf3\xe3\xd8\x94\x78\xc2\x7f\xbe\x1b\x46\x8d\x9e\x59\x89\xa1\x3a\x13\xe6\xff\xb0\x64\x89\xe7\xba\x3a\x65\xb3\x6d\x56\x66\x20\xe3\x1b\x77\x99\x0d\xa3\x12\x47\x3e\x03\xdf\x29\xf1\xf2\x79\xd4\x00\x97\xeb\x7e\xaf\xb0\x6f\xd4\xf7\xe6\xfe\xe4\x5d\x6b\x00\x1f\xaf\x93\x11\x77\xf8\x3e\xb3\x9e\xbe\x54\x89\xef\x84\x55\x9e\xd5\x6a\x6e\x7b\x77\xe6\x95\xf6\xc2\x48\x77\xe4\xac\x0a\x1c\xc8\xe8\xd5\xf7\x9e\x9e\xcd\x7b\x88\xfd\x16\x8a\x1d\x97\xfd\x70\x7e\x8c\x7d\xd9\x3b\x48\x2b\xdf\x0f\x44\x9e\x11\xbd\xfc\xee\xdf\x67\x95\x7d\xdd\x57\x99\xaf\x1d\xb3\x21\xd1\x3f\x61\x49\x75\xa9\x82\x51\xf3\x0e\xaf\xd6\xd3\x50\xa4\x59\x0f\x31\x6d\x64\xb5\x0a\xd1\x92\xde\xf9\x7b\x8d\xbb\x7e\x52\x2f\x42\xf9\x11\x47\x3e\xd6\x78\x30\xff\x16\x6e\xe7\x3f\x1e\x1b\x98\x40\x5b\xe0\x4d\x7c\x04\x33\x02\x57\x25\xba\x86\x7b\xf1\x39\x81\xeb\x12\xdd\xc0\x73\x78\x59\xe0\x26\x76\xe1\x8a\xc0\x2d\xdc\x83\x1f\x08\x7c\x02\xbb\xf1\x63\x81\x4f\x61\x0f\xde\x4e\x7e\xe1\xaa\x16\xff\x15\xf1\x5f\x81\x37\x70\x7f\xe3\x79\x81\x2b\x98\x6a\x9c\x15\x78\x13\x9f\x6a\x6c\x0a\x5c\x95\x64\x34\xec\x6d\x7c\x43\xe0\xba\x44\x37\xf0\xcd\xc6\x0f\x05\x6e\xe2\x01\xa5\x2b\x70\x0b\xf7\x29\x99\x9d\x09\x1c\x54\xbe\x2a\xf0\x29\x1c\x55\xbe\xfb\xb4\x37\xda\xf4\xfb\x67\xd6\x02\xe7\x78\x77\xc3\x75\x9e\xe9\x0e\x57\x37\x9d\x23\xd3\x87\x9f\x68\x39\xb3\x83\x81\xc3\x59\x63\xc7\x77\xc7\xae\xbf\xe1\xae\xb6\xe6\xbc\x61\x30\xfb\xaa\x3b\xf6\xd6\xdd\xb9\x85\xf9\xe5\x67\x67\x9f\x9a\x59\x58\x9e\x3b\xf1\xe2\xe2\xc2\xd2\xf2\x0b\xae\x3f\xee\x7b\x43\xe7\xb1\xd6\x93\xad\x69\x6e\x63\x71\xe0\x76\xc7\xae\xe3\xbb\x3d\xd7\x77\x02\xcf\x09\xd6\x5c\xa7\x70\x38\x76\x57\x82\x44\xbe\xe7\xf9\x9c\xd3\xf3\x86\x81\x13\xf8\xdd\x55\x77\xbd\xeb\x9f\x75\xba\x41\xe0\xf7\x4f\x9f\xe3\x22\x43\x2f\xe8\xaf\xb8\xe3\xd6\x9c\xe7\x07\x8e\xf0\x5f\xc4\xbb\x16\x04\xa3\x99\x76\x3b\xd1\xef\xa6\xbc\x56\xdf\xab\x25\xb6\x07\xfd\x15\x77\x38\x76\xdb\x78\x1a\x1e\x46\xd8\x84\x8f\x3e\xce\x60\x0d\x01\x1c\x1c\x47\x17\x1b\x70\xe1\xe0\x19\x74\x31\xc4\x2a\x36\xe1\xe0\x08\xa6\x71\x18\x4f\xa0\x05\x07\xb3\x18\x60\x00\x47\xd2\x1a\xf3\x27\x17\x63\xb8\xf0\xb9\xf6\x2a\x5a\x98\x83\x87\x21\x02\xcc\xe2\x55\xce\xf3\xb0\x0e\x17\x4b\x70\x71\x06\xe7\x30\x40\x17\x3e\xe6\xb0\x80\x79\x2c\xe3\x59\xcc\xe2\x29\xcc\x60\x01\xcb\x98\xc3\x09\xbc\x88\x45\x2c\x60\x09\xcb\x78\x81\xdb\x1c\xa3\xcf\xad\x39\x78\x0c\x2d\x3c\x89\x16\xa6\xa5\xa8\x16\x31\x80\x8b\x2e\xf7\x9f\x46\xd2\xe3\x5a\x0e\x02\x78\xfc\xff\x35\xce\xa9\xcb\x37\xd1\x59\x41\x90\xdb\xef\xc1\x13\x9a\xa9\x4e\x4f\x64\x91\x50\x7c\x74\xb1\x0a\x17\xeb\x3c\xf6\xb3\x70\xd0\x45\xc0\xe9\x7d\x9c\xc6\x39\xc9\xca\x10\x1e\x7f\x5a\xe1\x99\xa7\xb5\xf0\xb9\x95\x72\x35\xea\xaa\xbd\xc6\x6d\x8e\x30\x83\x36\xda\xb9\xff\x6e\x49\xaf\xc5\x3d\x7d\x70\xc9\x36\x06\x22\x9a\x21\xcf\xb8\x9d\xfd\xe5\xe9\x0e\xff\xfe\x1f\x00\x00\xff\xff\x31\xa1\x82\xc2\x98\x0e\x02\x00"), }, "/static/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.eot": &vfsgen۰CompressedFileInfo{ name: "fontawesome-webfont.eot", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 165742, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xcc\xfd\x0b\x78\x54\xd5\xb9\x3f\x8e\x7f\xde\xb5\x6f\x33\x93\xb9\xef\xb9\x24\x93\x49\x32\xd7\x3d\x81\xc4\x00\x73\x8d\x5c\x92\x11\x91\x5b\x02\xa2\x52\x45\x44\x8c\x16\x14\x05\x14\x15\x04\xa9\x97\x6d\xa5\x16\x95\x2a\x22\x5a\x6a\xad\x8d\xd7\xc2\x39\xd6\x72\x5a\xed\xd1\x16\x3d\xd3\x9b\xb5\xad\x5a\x5b\x39\xd6\x5a\xdb\x93\xb6\xda\x7a\x2a\xda\x80\xd6\xa3\x90\xd9\xf9\x3f\x7b\xef\x99\x64\x12\x40\xdb\xd3\xff\xf7\x3c\xbf\x79\xb2\xf7\x5e\xf7\xf5\xbe\x6b\xbd\x6b\xad\xf7\x7d\xd7\xbb\x56\x2e\xfd\x3c\xc3\xa3\x37\x31\x10\x18\xc6\xfe\x08\xdb\x49\xff\xf6\x2e\xc2\x51\x31\xe6\xef\xec\x4d\x3f\xdf\x8e\xa3\x7e\x01\xcc\xc6\x65\xb8\x14\xeb\x71\x12\x36\x62\x25\xae\xc4\x65\x58\x8b\x95\x00\x9c\x38\x1d\x2b\x71\x11\x36\x60\x0d\xce\xc7\x15\x00\x12\x38\x13\x2b\x71\x05\xae\xc4\xc5\x46\x9e\x08\xb2\xe8\x40\x01\x1d\x98\x8c\x08\xd2\x98\x8c\x29\xc8\x7f\x6c\x99\x15\x70\x1c\x50\xc1\x61\xd1\xec\xd9\x8b\x17\xac\x7e\x66\xce\x53\x60\x37\xe9\x90\x85\xe7\xcc\x3a\x65\x36\x1b\x04\x0f\x76\xd3\x3a\x00\x91\x53\xcf\x98\x94\xde\x9a\xde\x5c\x04\x68\x09\x80\xbe\x4f\xaf\x3d\x7f\x9d\xed\x3f\xa6\x5e\x0f\xd8\x77\x03\xec\xd0\x45\xe7\x5f\xb9\x6e\x78\x18\x1c\xd8\x4d\xab\x00\x58\x2e\x5a\x73\xf5\x85\xb7\xff\xcf\x63\x0b\x80\xd0\xa3\x60\xbd\xfb\x56\xad\x3c\x7f\x85\xfb\xe6\x37\x4f\x00\xf0\x3a\x80\xfc\xaa\x55\x2b\xcf\x77\x71\xb6\x27\x00\xf2\xe9\xe8\xac\x5a\xbb\x7e\xd3\x29\x57\xd7\x7f\x0e\xa0\x27\x01\xdb\xe0\x9a\xcb\x3e\x7d\x3e\xfb\xdb\x03\xcb\x00\xd7\xbd\x40\x9d\x7b\xed\xf9\x9b\xd6\x71\xed\x2c\x0c\x50\xa7\x0e\xcf\xa5\xe7\xaf\x5d\xf9\xc7\x2f\xde\xfa\x28\xd8\x45\xab\x00\xfe\xa6\x75\x97\x5d\xb9\xfe\x1b\xb7\x7f\xf9\x7e\xb0\xd5\x83\x40\x68\x83\x81\x1b\x4f\x3f\xdb\xfe\xf3\x4d\x67\x9f\xe7\x9a\xfe\x37\xd4\x49\x06\xca\xfb\x33\x2f\xa4\xab\xdf\xe1\xe1\x61\x58\x49\xd4\xbd\x16\xb0\x4a\xe7\x10\x20\x62\x18\x80\x15\xc3\xc3\xc3\xc3\x56\x1a\xe9\xb4\xca\x8f\x3d\xa1\x87\xb0\x1f\xb0\x06\xa4\xcc\x00\x23\x97\x9e\xaa\x58\x49\xc2\x89\x17\xd3\x76\x08\x00\xbf\x8d\xcf\x00\xb8\xc9\xfc\xb2\x2b\x01\xba\x05\x1f\xf3\x5b\x77\xf5\x15\x57\xa2\x88\xc8\xdf\x2a\x30\x88\x66\xe5\xb5\x10\x44\x40\x9c\x8a\x75\x46\xc5\x9f\x02\xa8\x04\xe8\x98\xfd\x1d\xcf\xb9\x3a\xa6\xa2\x3a\x1a\xa6\xbb\xf5\x47\xd0\xfd\xea\xd8\x38\x09\xb8\x5a\x50\x71\x69\x35\x8d\x58\xcd\x03\x40\x30\xc3\x42\x62\xc5\x2f\xa9\x48\x57\xd3\x1c\xeb\xd1\xf3\xf1\x66\xd9\x45\x3d\x1d\x57\xf1\x1b\x75\xab\xa3\xe5\x56\x60\xb0\x09\x55\x38\x6b\xd2\xf0\x35\xf5\x7f\x22\xae\x15\x58\x78\x8c\x7e\x6b\xf1\x95\xc6\x86\x6d\x16\x6a\x61\xaf\x89\x17\x19\x48\x00\xee\x11\x80\xa5\xc7\xc3\xed\x18\x4f\xb1\x52\x4e\x4e\x7f\xa4\xd1\x70\x87\xa0\x8e\xb4\xdd\xe6\xda\xb6\x11\xc6\xb6\xbb\x5b\x18\xd7\x17\x95\x74\x4b\x8d\x47\xad\xc1\xc3\x6c\xcb\xa2\x64\x10\xf0\xd8\xf6\xae\xb6\x43\x4d\xfd\xe0\xd4\x9a\x76\x18\xed\x93\x11\xbc\x6b\xbf\x55\x58\x85\xd1\xf8\x76\x1e\x38\x4f\xac\xe9\x1b\x41\x1d\x53\x9f\x8e\x37\xab\x85\xf9\xb8\x8f\x0a\x7f\x05\x6f\x61\x5c\xdf\xbb\x2b\xdf\x2b\x25\x80\x2a\x69\x78\xf1\x68\xdc\x5c\x63\xe0\x56\xd1\x28\x55\xdb\xbd\xf2\x58\x2b\x65\xf2\x95\xbe\x64\x2a\x8a\xac\xd2\x6e\xd5\x30\x7e\x1c\xac\x12\xd0\x5a\x4b\x47\x9c\x6a\xc2\x30\x9e\x66\xa4\x1a\xfc\x6b\xfa\xae\x58\xdb\x26\x23\x71\xaa\xd9\x3f\x15\xbc\x46\x60\xe4\x81\x13\x78\xc0\xc1\xab\x58\xa0\x3f\x4c\xc5\x09\x4c\x1d\xf5\x57\xeb\xe0\x2b\xe3\x45\x1c\x4b\xbf\x45\x71\x3c\x4d\x8f\xa3\x97\x9a\xb1\x59\x8d\x2b\x56\xc6\x9f\x43\x52\x71\x42\x25\x2f\x13\x54\xb0\x6a\x9b\x54\xbe\x7d\x7a\x3b\x31\x15\x17\x88\x80\xa0\x3f\x92\x0a\x12\x2b\xb0\x08\x2a\x1c\xd5\xf1\x29\xa8\xe0\x44\x15\x89\x63\xf5\x77\xa5\x5d\xec\xd5\xb1\x5f\x0d\x23\x75\x4c\x7b\xe7\xab\xe1\x3c\xc0\xe9\xcf\x27\x8d\xaf\x9a\xbe\xcb\x72\x9f\x05\x78\x0e\xbc\x50\x1d\x47\x40\x67\x0d\x8d\xc5\xf4\x47\x82\xf9\x88\xd5\xa7\x66\x3e\x13\x81\x46\x9d\x06\xc7\xd1\x70\xdd\x78\x3c\x2a\xf5\xce\x32\xc6\x10\xc0\xe9\x4f\xa5\x3d\xab\xe3\xb9\x9a\x6e\x24\xaf\x00\xb4\x57\xbe\x23\xf3\x90\x54\x09\xab\xf4\x43\x44\x52\x87\x87\x6b\xe7\x54\x01\xf0\x1f\x63\xac\x8c\x8c\x55\x3d\x8d\x65\xdc\x7c\x5c\x1d\xfb\x56\x33\xfd\x5a\x71\x3c\x4d\x57\xd2\x56\xe7\x07\xe9\x03\x4c\x18\x3f\x9e\x2a\x70\x56\xe7\x66\x03\x2f\x6b\x6d\x9e\xd1\xaf\xdb\x32\x1a\x1e\xa9\xf6\x87\xf5\xef\x9f\x1b\xf5\x27\x55\x85\xb9\x02\x7f\x44\x02\xe4\x9a\x3a\x66\x55\xe0\x39\x51\x02\xbc\x35\xe9\x6a\x61\xee\x12\x80\x7a\xf1\x58\x73\xde\xd8\xa7\x41\x02\x56\x88\xc0\xd9\x15\xb8\x27\x56\xca\xb1\x4a\x40\xca\x5a\x81\x7d\xfc\x63\x01\x9c\xfa\x23\xa8\xc7\x2e\xdf\x32\xee\x5b\x6d\xdf\x9a\x7e\x30\xdc\x02\x50\x67\x19\x87\xbf\x65\x9c\xdb\x32\xde\x5d\xe9\xdf\x8a\x5f\x16\x6b\xca\xac\xd0\x38\xab\xd2\x55\xcd\x7c\xcb\xf4\x31\x6a\x01\xc4\x4a\x1c\xb3\xc0\x1c\x17\xc2\xb8\xf6\x13\x6a\xca\xb2\x8c\x83\x61\x3c\x4d\x58\x3e\xc4\x62\x6b\xc5\x7f\xac\x76\xaa\xd2\xb6\x65\x1c\x0d\x54\xe3\xa5\x4f\xa0\x0d\x69\x1c\x1c\x23\x34\xf0\xc4\x98\xb8\x11\x7a\x14\x80\x0b\x8d\xbc\x4f\x8e\x96\x3f\x82\xff\xd8\x3e\x09\x88\x80\x53\x02\x9a\x8e\x45\x17\x95\x79\x3c\x69\x39\x76\xf8\xe9\xe3\xe0\x3b\xc5\x3a\x96\x56\xc7\xe3\x96\x38\x16\x5e\x95\xb2\xa3\x22\xb0\x9a\x07\x5a\x2b\xe1\xdc\x78\x1e\x46\xac\xd2\xbb\x6a\xd0\x23\x57\x1d\xe3\x95\xf2\x47\xd2\x0b\xc3\x48\x8a\x95\xf5\x48\x18\x3b\x3f\xb8\x6a\x69\x44\x1c\xbb\xe6\x27\xad\x63\xeb\xf2\x8f\xa3\xaf\xa3\x68\xa3\x26\xbc\xc9\x5a\xd3\x2e\xe3\x9f\x1a\xde\x82\xc6\x8f\x8b\x91\x87\xd5\xd0\xba\x8a\xc9\x7a\x9b\x57\x60\x9c\x54\xc3\xa3\x28\x12\x3e\xf1\xc7\x55\x9e\x70\x85\x21\x3e\x00\xce\x70\x85\xc1\xd3\x4b\x3a\xe3\x8c\x22\x04\x43\xf4\xd9\x83\xc7\xf0\x38\x9e\xc5\xab\xd1\x58\xac\x39\xd6\x37\xe8\x1c\x6c\x1e\xec\x1a\x5c\x38\xb8\x7c\xf0\xd2\xc1\xeb\x06\x6f\x1b\xbc\x6f\xf0\xb1\xc1\x6f\x0e\xbe\x38\xf8\xbb\xc1\x77\x07\xb5\x83\xce\x83\xcd\x07\x3b\x0e\x76\x1d\x5c\x78\x70\xf9\xc1\x4b\x0f\x5e\x77\xf0\xb6\x83\xf7\x1d\x7c\xec\xe0\x33\x07\x5f\x3c\xf8\xbb\x83\xef\x1e\xd4\x0e\x39\x0f\x35\x1f\xea\x3a\xb4\xf0\xd0\xf2\x43\x97\x1e\xba\xee\xd0\x6d\x87\xee\x3b\xf4\xd8\xa1\x67\x0e\xbd\x78\xe8\x77\x87\xde\xfd\x1b\x86\x87\x0d\x7e\x7c\xf7\xb8\x1a\x31\xe8\x1e\x8c\x0e\x16\x07\x17\x0d\xf6\x0d\xae\x1b\x54\x07\xb7\x0f\xf6\x0f\xee\x1d\x2c\x0d\xbe\x34\x38\x30\x38\x78\x10\x07\xdd\x07\x23\x07\x27\x1f\x2c\x1e\x5c\x74\xb0\xef\xe0\xba\x83\xea\xc1\xed\x07\xfb\x0f\xee\x3d\x58\x3a\xf8\xd2\xc1\x81\x83\x83\x87\x70\xc8\x7d\x28\x7a\xa8\x78\x68\xd1\xa1\xbe\x43\xeb\x0e\xa9\x87\xb6\x1f\xea\x3f\xb4\xf7\x50\xe9\xd0\x4b\x87\x06\xf4\x1a\x87\xff\x38\xbc\x6c\x78\xc9\xf0\x19\xc3\x33\x87\xa7\xfc\xee\xad\xdf\xbe\xf3\xdb\x47\xdd\x0e\xb7\xdd\x6d\x73\x5b\xdd\x16\xb7\xe4\x16\xdd\x82\x9b\x77\x73\x6e\xe6\xfa\x9b\xeb\x7d\xd7\x7b\xae\x43\xae\x83\xae\x41\xd7\x5f\x5d\xef\xba\xde\x71\x1d\x70\xbd\xed\xfa\x8b\xeb\xbf\x5d\x6f\xb9\xfe\xec\xfa\x93\xeb\x4d\xd7\x1b\xae\x3f\xba\xfe\xe0\xfa\xbd\x6b\xc0\xf5\x3b\xd7\x6f\x5d\xaf\xbb\x7e\xe3\x7a\xcd\xf5\x6b\xd7\xab\xae\x5f\xb9\x5e\x71\xfd\xa7\x6b\xbf\xeb\x65\xc7\xf7\xc7\xcb\x3e\xff\x17\x3f\x5d\x20\xab\x56\x4b\xac\x22\x5f\x8d\x13\xa2\x39\xfc\x7f\xe3\x27\x0a\x36\x89\xb7\x5b\xac\x75\xff\xaf\x2a\x68\xff\x5f\x3c\xdb\x4d\x99\x9a\x76\x01\x6c\x3d\xc0\x5e\x02\xb8\x5e\x80\x1b\x04\xf8\xc5\x80\x98\x00\xc4\x01\xc0\xb2\x06\xb0\x6e\x02\xac\x2f\x01\xb6\xc5\x40\x5d\x2b\x50\xb7\x1f\xb0\x6f\x01\x1c\x2b\x00\xe7\x6e\xc0\xb5\x1f\x70\x6f\x01\x3c\x00\x3c\xf7\x02\xde\x35\x80\xdc\x0e\xc8\xaf\x02\x3e\x15\xf0\x0d\x01\xfe\xed\x40\x20\x0b\x04\xdd\x40\xfd\x0a\xa0\xfe\x79\xa0\x61\x1d\x10\x9a\x0b\x84\x76\x02\x8d\x09\x20\xbc\x02\x68\x6a\x07\x9a\x2d\x40\xf3\x7a\xa0\xa5\x15\x88\x6c\x03\x22\x83\x40\xb4\x1f\x88\x4d\x06\xe2\x11\x20\xd1\x0e\x24\x06\x00\x65\x16\x90\x7a\x03\x68\xbd\x17\x98\xb0\x18\x98\xa8\x2f\xdd\xfb\x80\x76\x37\xd0\xfe\x3e\x70\xc2\xab\x40\x47\x11\xe8\x78\x15\x98\xd4\x07\x4c\xda\x07\x4c\xf6\x01\x93\x1f\x02\xa6\xec\x04\xd2\xdb\x81\xcc\x0a\x20\x9b\x05\xb2\x3b\x81\x5c\x04\xc8\xa9\x40\xee\x49\x20\x1f\x01\xf2\xcb\x80\xfc\x3e\xa0\x30\x17\x28\xec\x06\x3a\xed\x40\x67\x1f\xd0\xf9\x38\x70\x62\x2f\x70\xe2\xe3\xc0\xd4\x55\xc0\xd4\x03\xc0\xb4\x12\x30\x7d\x1d\x30\x63\x1d\xd0\x35\x1d\xe8\x7a\x03\xe8\x5e\x05\x74\xbf\x0a\x14\xe7\x02\xc5\x7d\xc0\x49\x93\x81\x93\x9e\x04\x66\x2e\x01\x66\x7e\x08\x9c\xbc\x02\x38\xf9\x5e\x60\x56\x2f\x30\xeb\x0d\xe0\x94\x27\x81\xd9\xf7\x02\x73\x26\x03\x73\x5e\x07\xe6\x1e\x00\xe6\x6d\x03\xe6\x77\x02\x3d\x8f\x02\xbd\x6f\x00\x0b\x56\x00\x0b\xdb\x81\x85\x2a\xb0\x70\x3f\x70\xea\x5e\x60\x51\x1f\xb0\x68\x37\x70\x5a\x16\x38\xad\x1f\x38\xdd\x0e\x9c\xbe\x06\x38\xa3\x1d\x38\x63\x17\xb0\xb8\x0f\xf8\xd4\x64\xe0\xac\x41\x60\xc9\xeb\xc0\x52\x0b\x70\x4e\x11\x38\x67\x1b\xb0\x6c\x3a\xb0\xec\x43\xe0\xdc\x5d\xc0\xf2\x56\x60\xf9\x1b\xc0\x79\xfd\x40\xdf\x3a\xe0\x82\x76\xe0\x82\xf7\x81\x15\x3c\xb0\xe2\x00\xb0\x72\x11\xb0\xf2\x25\xe0\xc2\x1f\x02\x17\xf5\x01\x17\xed\x06\x2e\xee\x05\x2e\x2e\x01\x97\xcc\x02\x56\xdb\x81\xd5\xfb\x81\x35\x2a\xb0\xb6\x08\x5c\xda\x0e\x5c\xd6\x0b\xac\xdb\x02\x5c\xfe\x10\x70\xc5\xeb\xc0\x95\x9b\x80\xf5\x6e\x60\xfd\x6e\x60\xc3\x2c\xe0\x33\x7d\xc0\x35\x00\xae\xd9\x07\x5c\xeb\x06\xae\x7d\x08\xb8\x6e\x2b\x70\xfd\x4e\x40\xdd\x07\xdc\x50\x0f\xdc\xb0\x0d\xb8\x71\x2e\xb0\xc5\x07\x6c\xd9\x0f\x7c\x6e\x37\xf0\xb9\x37\x80\x9b\xd6\x00\x9f\x2f\x02\x5b\x77\x01\x37\x97\x80\x5b\xdd\xc0\xb6\xe7\x80\x2f\x6c\x03\x6e\x5b\x03\xdc\x3e\x17\xd8\x1e\x01\xb6\x97\x80\x3b\x16\x03\x3b\xec\xc0\x8e\xb9\xc0\x8e\x2d\xc0\x8e\x12\xb0\x63\x08\xb8\xb3\x0f\xb8\xf3\x39\x60\x27\x0f\xec\x2c\x02\x3b\x07\x81\xbb\x54\xe0\xee\x04\xf0\xc5\x65\xc0\xae\x25\xc0\x97\xc2\xc0\x3d\xb3\x80\x7b\x9e\x04\xbe\xbc\x0b\xb8\xb7\x1f\xf8\xca\x62\xe0\xbe\x25\xc0\x7d\x1f\x02\x5f\xbd\x17\xe8\x9f\x05\xdc\xbf\x08\x78\xa0\x1d\x78\xe0\x21\xe0\xc1\x4e\xe0\xc1\xdd\xc0\x43\x2b\x80\x87\x97\x01\xbb\xb7\x03\xff\x6a\x01\x1e\x0d\x03\x8f\x1e\x00\xbe\xbe\x1d\xf8\xfa\x5b\xc0\x63\x2a\xf0\x8d\x7a\xe0\x1b\x7b\x81\xbd\x73\x81\xbd\x03\xc0\xbf\x6d\x02\xfe\xed\x79\xe0\x9b\x11\xe0\x9b\xeb\x81\x6f\x3e\x07\x7c\x6b\x09\xf0\xad\xf7\x81\xc7\xd7\x01\x4f\x00\x78\x62\x05\xf0\xed\x30\xf0\xed\xfd\xc0\xbf\x3f\x0e\xfc\xfb\x20\xf0\xe4\x26\xe0\xa9\xf5\xc0\x53\x1f\x02\xdf\x79\x7e\xf4\xf9\xee\x6e\x60\xdf\x16\xe0\xe9\x22\xf0\x0c\x0f\xfc\xc7\x73\x40\xe9\x87\xc0\xf7\xed\xc0\xf7\xb7\x01\x3f\x58\x06\xfc\x30\x02\xfc\x70\x1f\xf0\x23\x37\xf0\xa3\x27\x81\x67\x77\x02\xcf\x4d\x06\x9e\x1b\x00\x7e\xb2\x02\xf8\xc9\xf3\xc0\x4f\x77\x03\x3f\x53\x81\x9f\x0d\x00\xcf\xbf\x0f\xbc\xb0\x13\x78\x71\x13\xf0\xe2\x5b\xc0\xcf\xf7\x02\x2f\x6d\x03\x7e\xd1\x0e\xfc\x62\x2b\xf0\x4b\x0b\xf0\xcb\xad\xc0\xcb\x76\xe0\xe5\x6d\xc0\xcb\x07\x80\xfd\x9d\xc0\x7f\xb6\x03\xff\x79\x2f\xf0\x4a\x1f\xf0\xca\x5b\xc0\xaf\xd6\x00\xaf\xce\x05\x5e\x7d\x1c\xf8\x75\x1f\xf0\xeb\x1f\x02\xaf\x2d\x06\x5e\x7b\x12\xf8\x4d\x3d\xf0\x9b\x9d\xc0\xeb\x45\xe0\xf5\xe7\x80\xdf\xae\x01\x7e\x3b\x08\xfc\x6e\x0b\xf0\x5f\xf5\xc0\x7f\x3d\x0a\x0c\xec\x03\x7e\xbf\x06\xf8\xc3\x3a\xe0\x8f\x11\xe0\x8f\x6f\x00\x6f\xa8\xc0\x9b\xcf\x01\x7f\x2a\x01\x7f\xae\x07\xfe\x7c\x00\x78\xeb\x0d\xe0\xbf\x5f\x05\xfe\xf2\x2a\xf0\xf6\xab\xc0\x81\xfd\xc0\x3b\x2f\x01\xef\xbe\x0e\xfc\xf5\x0d\xe0\x10\x0f\xbc\xf7\x3e\xf0\xbe\x0a\xfc\x2d\x0b\x7c\xe0\x06\x3e\xb8\x17\xf8\x9f\x7a\xe0\xc3\x25\xc0\x87\x25\xe0\xa3\x04\x70\x78\x0d\x70\x64\x1f\x30\xd4\x0a\x0c\x3d\x09\x94\xed\x40\xb9\x0f\x28\x3f\x0e\x68\x16\x40\x7b\x12\x18\xb6\x80\xe0\x03\x09\x8f\x83\xc4\xf7\x41\xd2\x87\x20\xcb\x4b\x20\xeb\x0a\x90\xcd\x0d\xb2\xed\x02\xd5\xd5\x83\xec\x3c\xc8\xfe\x10\xc8\xd1\x0e\x72\x02\xe4\xda\x0a\xf2\xb4\x83\x3c\xfd\x20\xef\xf3\x20\xb9\x13\x24\xbf\x01\xf2\x6d\x07\xf9\x5b\x41\xfe\x87\x40\x81\x25\xa0\xc0\x10\x28\x58\x02\xd5\x6f\x01\x35\x6c\x02\x85\xae\x01\x35\x2e\x06\x85\xf7\x83\x9a\x8a\xa0\xa6\xfd\xa0\xe6\xed\xa0\x16\x1e\xd4\x72\x0d\x28\xf2\x10\x28\x5a\x02\xc5\x36\x81\xe2\x16\x50\x7c\x0d\x28\xc1\x83\x12\xcf\x83\x52\xab\x40\xad\x6f\x81\x26\xf6\x82\xda\x17\x83\x3a\x7a\x41\x53\xd6\x83\xa6\xbc\x0f\x4a\x0f\x80\x32\x93\x41\x99\xbd\xa0\xec\x6e\x50\x6e\x3d\x28\xbf\x18\x54\x48\x80\x3a\xed\xa0\x13\xe7\x82\xa6\xba\x41\x53\x07\x41\xd3\xb6\x83\xa6\x6f\x01\x4d\x7f\x15\xd4\xbd\x04\x54\x0c\x83\x4e\x2a\x81\x66\x3e\x07\x3a\xf9\x39\xd0\xac\x7b\x41\xa7\xcc\x05\xcd\x9e\x0b\x9a\xb3\x0e\x34\x77\x2e\x68\xde\x26\xd0\xfc\x08\x68\xfe\x1b\xa0\x9e\xfd\xa0\xde\x7e\xd0\x82\x7a\xd0\xc2\x22\x68\x51\x11\x74\x5a\x3f\xe8\xf4\x01\xd0\x19\xb3\x40\x8b\x23\xa0\x4f\xf5\x82\xce\xec\x03\x9d\xb9\x1f\x74\xd6\x12\xd0\x92\x2c\x68\x49\x3f\x68\x29\x0f\x5a\xba\x15\x74\xce\x0a\xd0\x39\x03\xa0\x65\xd7\x80\xce\x7d\x15\xb4\xbc\x1f\xd4\xb7\x13\x74\xfe\x5c\xd0\xf9\xfb\x40\x17\x0c\x82\x3e\xbd\x04\xb4\xe2\x51\xd0\xca\xf5\xa0\x0b\x57\x81\x2e\x7a\x1d\xb4\xea\x71\xd0\xc5\xcb\x40\x97\x6c\x02\x5d\xba\x05\xb4\xae\x08\xba\x72\x00\x74\x95\x1b\xb4\xf1\x39\xd0\xa6\xed\xa0\xab\xb7\x82\x36\x6f\x03\x7d\x66\x15\xe8\x9a\x6d\xa0\x6b\xc3\xa0\x6b\x1f\x02\x5d\xbf\x0c\x74\xfd\x2e\xd0\xf5\x1f\x82\xd4\x35\xa0\x1b\xd6\x83\x3e\xbb\x1d\x74\x63\x16\x74\xe3\x43\xa0\x2d\xcf\x81\x3e\xb7\x17\x74\xd3\x43\xa0\xad\xeb\x41\x37\x6f\x03\xdd\xd2\x09\xba\x55\x7f\xfa\x41\xb7\xf5\x82\x6e\xdb\x0d\xba\x7d\x31\x68\xbb\x1b\x74\x87\x0f\x74\xe7\x76\xd0\x4e\x1f\xe8\x2e\x1e\x74\xd7\x10\xe8\xee\x0f\x41\x5f\xec\x07\x7d\xe9\x1a\xd0\x3d\xcf\x81\xee\x75\x83\xbe\x62\x01\x7d\xe5\x55\xd0\x7d\xd7\x80\xbe\x5a\x0f\xfa\xea\x5b\xa0\xfe\x1f\x82\x1e\xb0\x83\x1e\xcc\x82\x1e\xda\x04\x7a\x78\x2f\xe8\x11\x15\xf4\xb5\x5e\xd0\xee\x30\x68\xf7\x76\xd0\xee\x03\xa3\xcf\x9e\x25\xa0\x7f\x69\x05\xfd\x6b\x04\xf4\xaf\xcf\x83\x1e\x7d\x14\xf4\xf5\xdd\xa0\xc7\x22\xa0\xc7\xb6\x82\xbe\xc1\x83\xbe\xb1\x1b\xb4\xb7\x08\xda\xbb\x15\xf4\xed\x7d\xa0\x7f\x5f\x03\x7a\x72\x00\xf4\xd4\x7a\xd0\x77\x78\xd0\x77\x76\x82\xbe\x9b\x00\x7d\xf7\x21\xd0\x3e\x0b\x68\xdf\x26\xd0\xd3\xbd\xa0\x67\xf4\xe7\x21\xd0\x7f\x44\x40\xa5\xb9\xa0\xef\xd5\x83\xbe\xf7\x43\xd0\x0f\x78\xd0\x0f\xde\x00\xfd\xb0\x1f\xf4\xa3\xc5\xa0\x67\x5b\x41\xcf\x1e\x00\x3d\x67\x07\xfd\xc4\x0e\xfa\xe9\x56\xd0\xcf\xfa\x41\xcf\x7f\x08\x7a\x31\x0c\xfa\xf9\x4e\xd0\x4b\x6b\x40\xbf\x58\x01\xfa\xe5\xeb\xa0\x97\x17\x81\x5e\xfe\x10\xf4\x9f\x5b\x40\xaf\x6c\x02\xfd\x6a\x1d\xe8\x57\x43\xa0\x57\xdf\x07\xbd\xf6\x28\xe8\x37\x8b\x41\xaf\x2f\x06\xfd\xd6\x0e\xfa\xed\x20\xe8\x77\x5b\x41\xff\xd5\x0b\xfa\xbd\x0a\xfa\xc3\x87\xa0\x37\xea\x41\x6f\xda\x41\x7f\x9a\x0e\xfa\xf3\x5c\xd0\x9f\x77\x83\xde\x4a\x80\xde\xda\x0f\xfa\xef\x35\xa0\xbf\x84\x41\x7f\xd9\x0f\x7a\xfb\x0d\xd0\x81\x2c\xe8\xc0\x93\xa0\x03\xef\x83\xde\x19\x04\xfd\xd5\x02\xfa\xeb\x43\xa0\x41\x1e\x34\xf8\x3c\xe8\x60\x04\x74\x68\x11\xe8\xbd\x35\xa0\xf7\xde\x02\xfd\xcd\x0e\xfa\xa0\x1d\xf4\x41\x09\xf4\x3f\x9b\x40\xff\x33\x00\xfa\x70\x1d\xe8\xa3\x76\xd0\xe1\x4d\xa0\x23\xeb\x41\x43\x76\xd0\xd0\x0a\x50\xd9\x0e\x2a\x6f\x03\x69\x59\x90\x3e\x5f\x0c\xbf\x04\x46\x59\x30\x16\x06\xe3\xda\xc1\xf8\x55\x60\xc2\x7e\x30\x69\x11\x98\x35\x0b\x66\xdb\x0f\x66\x1f\x00\x73\x0c\x82\xb9\xea\xc1\xdc\x59\x30\xcf\x1b\x60\xf2\x74\x30\x5f\x3b\x98\xbf\x1d\x2c\x90\x05\x0b\x4e\x06\xab\xef\x04\x6b\x48\x80\x85\xb6\x82\x35\x76\x82\x35\x3d\x0e\xd6\xbc\x18\xac\xf9\x79\xb0\xc8\x35\x60\xd1\x55\x60\xb1\x47\xc1\x12\xbd\x60\xc9\xc9\x60\xca\x5c\xb0\xd4\x56\xb0\xd6\xf7\xc1\x26\x6c\x03\x9b\x38\x19\x6c\xe2\xeb\x60\x6d\x3b\xc1\xda\x5f\x07\xeb\x48\x80\x75\x1c\x00\x9b\x7c\x00\x6c\xca\x16\xb0\x74\x11\x2c\x3d\x04\x96\x79\x12\x2c\xbb\x1e\x2c\x97\x00\xcb\xbf\x0f\x76\x62\x04\x6c\xea\x36\xb0\xa9\xfb\xc1\xa6\xd9\xc1\xa6\x6d\x05\x9b\xde\x0a\x36\xfd\x55\xb0\x19\x59\xb0\xee\x27\xc1\x8a\xbb\xc0\x4e\x1a\x00\x3b\xb9\x1f\x6c\xd6\x10\xd8\xec\x5d\x60\x73\xfb\xc0\xe6\xbe\x0f\x36\xef\x79\xb0\xde\x7d\xff\xdc\x83\x75\x00\xe7\x16\x75\xe6\x5f\x02\x0a\x51\x4f\x94\xf3\x44\x3d\x03\x54\xd2\x8a\xeb\x58\xff\x3a\x21\x72\x78\x9d\x88\xc3\x15\x09\xe1\xdc\x61\x88\x0f\x0a\x2a\x9a\x74\x5e\x58\x22\x4f\x34\x1d\xf0\x89\xf1\x68\x4c\xc9\xe6\x33\x51\x0f\x29\xb9\x6c\x17\x65\xa2\xe9\x66\x12\x1f\x6c\x2b\x6f\xa5\x62\x48\x51\x42\x43\xaa\xfe\xa6\x62\x79\x6b\x5b\xa2\x35\x28\xa8\xc1\xd6\x84\x30\x3b\xde\x56\xde\x5a\x86\x92\x55\x94\xac\xc2\x81\x6d\x6a\x8b\x07\x1b\x2d\x96\x46\x43\x0a\x19\x86\xa8\xcb\xed\x6d\x00\x79\x7c\x4e\x16\xeb\x60\xd9\x2e\x96\x49\x07\x3d\xc2\x58\x6f\x36\x5f\xa0\x7c\x26\x1d\x10\x31\x6b\xd5\x45\x4b\x2f\x5a\x35\x6b\xd6\xaa\x8b\x4e\xb8\xf8\xac\xf2\x58\xaf\xd2\xcc\x15\xed\xee\xd6\x4e\x21\x72\xa4\x3f\xbd\xb0\xcd\xef\x6f\x5b\xb8\x62\x61\x9b\x3f\xc5\x1a\xde\x29\x4f\xab\x0d\xe0\x7e\xdc\x92\xb1\x11\xf8\x4e\x5d\x32\x1a\x86\xa8\x0a\x2a\x24\x44\x01\xb8\x11\xd1\x1f\xf2\x89\xf1\x58\x8a\xc4\x78\x2c\xa1\x30\xb7\x37\x9f\x88\xf0\x01\xaf\xdf\x27\x51\x80\x57\xb5\x8f\xb4\xdb\xb4\x8f\x48\xa2\x2b\x38\xa9\x37\x9b\x4f\x68\x7b\xbe\xf5\xfa\xed\xda\x91\xa7\x2f\xbb\xec\x69\x12\xa8\x99\x84\xa7\x2f\xbb\x86\xce\x4a\x32\x89\xae\x20\xc9\x4c\xac\xa9\xd9\x5e\x85\xce\xbc\x66\x34\xc5\x65\x4f\x6b\x47\x6e\x7f\xfd\x5b\xda\x9e\xa4\x21\x8a\x0d\xab\x12\x04\x20\x84\x19\x58\x00\x24\x3d\xa2\xc4\x4b\x4e\xd6\xc6\x62\x1d\x94\x52\x92\x4a\xca\xe3\x0b\x64\xa2\xe9\xbc\x67\x3a\xeb\xe0\xe2\xd1\x98\xe8\xf7\x05\x03\xc1\x66\x7e\x1a\x4b\x77\x71\x85\x7c\xa1\x8b\x0a\x1e\xb3\x73\x72\x1e\xbd\x7b\xd2\x01\x51\x8d\x24\xb5\xf7\xef\xcb\x14\xd7\x4e\x26\x9a\xbc\xb6\x98\xb9\x4f\x7b\x3f\x19\x91\x1d\x42\xc9\x21\x93\x20\xda\x2d\x87\x8b\x0e\xf9\xce\xef\xbd\x24\x4e\x8d\x15\x3a\x7c\x44\xbe\x8e\x42\x6c\xaa\xf8\xd2\xf7\xf2\xe7\xaa\xcb\x67\x1e\x2e\xce\x5c\xbe\x7c\xa6\x50\x9a\xb9\x3c\xc2\x21\xd1\xfc\xe2\x96\xb6\xc9\x53\xa6\x4c\x6e\xdb\xf2\x62\x73\xa2\x0c\x87\x2c\xf3\xad\xcc\x6b\xf5\x58\x6c\x82\xec\xd8\xbd\x7e\xd7\xc3\xc2\x94\x50\xd2\xeb\x4d\x86\xa6\x08\x0f\xef\x6a\xbb\xa3\xef\x48\x49\xcf\xcd\xeb\x65\x98\x7d\xac\xe3\xa6\x22\x0c\xf0\xb1\x14\x75\xf0\xb9\x6c\x3e\x93\x6e\x66\xc1\x2e\x2e\x93\x0e\xe8\x6d\xca\xdd\x93\xf5\x96\xb7\xdb\xe2\xbd\xd3\x27\x69\x03\x5d\x37\x5c\xb6\x28\x91\x58\x74\xd9\x0d\x5d\x03\xda\x9b\xe5\x3b\x54\x2f\x5b\x6a\x49\x9c\xb7\xe2\xb6\x93\x5f\xff\xb0\x6d\x5e\x31\x91\x28\xce\x6b\xfb\xf0\xf5\xdf\xbe\x59\xde\x6d\x96\xfd\x75\x51\x15\x06\x10\x33\x69\x54\x0e\xf8\x8d\x7e\x4b\x0a\x62\x3c\xa6\xe4\xb2\x05\x59\x27\xd3\x42\x52\xce\xa7\x83\xb2\x10\x10\xd5\x90\x76\xd7\x99\xe4\xf7\xc9\x7e\xad\x5b\xeb\x0e\x78\xfd\x7e\x76\xa6\xb6\xb3\xa1\x93\x3e\xf8\xbd\x3c\x5d\xfe\x3d\x7d\xd0\xc9\x5d\x1d\x08\x69\xf7\x69\x76\xc9\xe1\x6f\xb2\x1f\x38\x60\x6f\xf2\x8b\x4e\x7a\x9f\x2e\x68\xf4\x27\xad\xf3\xe8\xc7\x13\x26\x68\x27\xce\xb3\x56\x76\x2c\x2b\x75\x5b\x75\xea\xb5\x52\xb2\x8e\x04\xe2\x92\x42\x15\x8e\xe3\x83\xc1\x5f\x4e\x69\x6d\xe9\xd3\x4f\x6b\x4b\x29\x3d\x8f\x36\xd3\xd5\xf4\x63\x03\xae\x09\xc7\x07\x8b\xf9\x68\x42\x17\x5d\xa7\x7d\xb6\x4b\xfb\x95\x76\xce\x8f\x7f\xcc\xd9\xaa\x60\xa6\x3f\x06\x4a\x1d\x46\x55\xd0\xdb\xde\xaf\x8f\xe2\x64\x85\x42\xb2\x5d\x5c\x26\x10\x29\xa4\x9b\x39\xb8\xc5\x88\xe2\xce\x47\x04\x5c\xbb\x64\xe8\x5f\x96\x5c\xeb\xe9\x98\xb3\xa1\xf7\x46\x5a\x73\x63\xef\x86\x39\x1d\x9e\x61\xfc\x5e\xfb\xfe\xef\x7f\x4f\x5d\x37\xaf\xbd\xf7\xde\xb5\x9f\xfa\xe2\x97\xd6\x9e\xa2\xaa\xa7\xac\xfd\xd2\x17\xb9\xef\x99\xe1\xbf\x07\x50\xa7\x8f\x1f\x49\x1f\x3f\x2e\xb4\x60\x12\xba\x71\x2a\xce\xc3\x65\xb8\x1e\xb7\xe3\xab\xf8\x06\x20\xe4\xb2\x4a\x1b\xc5\xc4\x26\xf2\x05\xa6\x51\x3a\xef\xf9\x04\x3f\x79\xb2\x8a\x41\xe1\x15\x92\xa7\xf1\xf1\xff\x60\xfa\x4f\xaa\x6f\xfc\xc0\x21\x55\x09\x19\xb3\xd8\x71\x5e\x3c\x94\x50\x19\xba\x87\x43\x48\x19\xc2\x68\x8c\x50\x93\x53\x53\x6b\x53\x7d\x52\x99\xea\xf2\x99\x1f\x19\x83\x46\x2c\xce\x5c\x5e\x1c\x89\xa2\x7b\x8e\xe5\x2c\x87\x98\x51\xb0\xa6\xbf\xf9\xd1\xf0\x23\xa3\x4e\xae\x36\x89\x76\xcf\x27\x14\xf8\x9d\xc3\x46\xdd\x82\x31\x60\x79\x43\x27\x53\xdb\x9f\xfa\xcc\x3c\xa6\x85\x1a\x68\x5c\x8b\x7d\x42\x3c\x87\xde\xac\x86\x6c\x6f\x6f\x96\x19\xef\x51\x37\xa7\x1e\x2f\x86\x41\x9f\x32\x7b\xb3\xa4\xbf\xd9\xf3\x35\x9e\xa1\xe7\x8f\x17\x63\x28\x70\x61\xcc\x35\x47\xd3\x22\xc8\x6f\x42\x35\x83\x4c\xa8\x3c\xe3\xfc\xf4\xff\xd8\x3f\xbe\x3e\x86\xce\x56\xad\xd4\xda\xd9\xd9\x4a\x45\xfd\x3d\xea\x66\x6a\xad\xaf\xac\x1e\x3f\xee\xef\x4f\x59\xeb\xa6\x88\xe1\xd4\x5f\xf4\xea\x88\xb3\x3c\xea\xe4\x8e\x19\xfa\x89\x09\x6a\x0a\x33\x15\xd6\x47\xf7\xc5\xff\xdf\x7b\xe1\xef\x6f\x55\x01\x9d\xad\x43\x46\x18\x57\x6a\xed\x3c\x82\xe3\xc7\xd5\xba\xff\x97\x6d\x35\xa6\x29\x40\xb8\x1a\x4e\xf1\xf3\xfc\x37\x11\x00\xe0\x93\x48\x12\x63\x93\x88\x94\x6c\x37\xe5\xd3\x41\x2b\xe5\xd3\x2d\x24\x7e\x3e\x5c\x6e\xdf\x1a\x5e\x14\xde\xaa\xdd\x1d\x0e\xeb\x0e\x52\xd8\x76\xdd\xcf\x1d\x5a\x64\x44\x85\xb7\xd2\x25\xba\x3f\x1c\xd6\x7e\xcd\xee\x08\x87\xb7\x82\x70\xe9\xf0\xbb\x82\x97\xdf\x81\x38\x90\xf0\xb9\x48\x8c\xa5\xac\xa4\x97\xad\x64\x0b\xd6\xb1\xe5\x07\x7c\x92\x95\x04\xaf\x51\xb2\xf6\x9a\xf6\x9a\x59\x12\x29\xda\x6b\xd5\xda\x48\xa9\x94\xfe\x1a\x29\xda\xc7\xc6\x86\x47\x4a\x31\x79\x17\x73\xbe\x88\xa3\x0d\xb3\xcc\x1e\x6e\x33\x5f\x7a\xb7\xc4\xcd\xbe\x99\x46\x39\xfd\x95\x0e\x34\x51\x26\xdd\x4c\x15\x2e\x0b\xc7\xe3\xb2\x78\xc8\x8e\x01\xd9\x51\x74\xc8\x03\x0e\xb9\xc6\x39\x86\xf7\xea\xc9\x1d\x8f\xf7\x62\x03\x47\xe5\xd4\x9d\x7f\xaa\x61\xc8\x9e\xb8\xa4\xe7\x38\x0c\x59\x2d\x4e\x2e\x04\x31\xf9\x28\xaa\xfd\xfb\xe0\x2f\x97\xf4\x5a\x59\xf1\x1f\x83\xda\x80\xf7\xef\x86\xb4\xb2\xc6\x8b\xfa\x70\x9b\x80\x9c\xce\x05\x31\x91\x8f\x24\x14\x96\xcb\x7a\x0b\xf9\x40\x30\x20\x4a\x4e\xf2\xfb\x9a\x59\xba\x8b\xe5\xb2\x4a\xaa\x83\x0a\x5d\x14\x0c\x78\xf5\x39\xdb\x9c\xa1\x75\x9e\x7a\xf3\x8b\xda\x1b\xda\x73\xda\x1b\x2f\x6e\xbe\x7f\x47\xdb\xc5\x2d\x11\xd7\xc4\x0b\x56\x9f\x76\xcb\xd3\x2f\x3d\x7d\xcb\x69\xab\x2f\x98\xe8\x8a\xb4\x5c\x32\x71\xc7\xfd\x65\xb5\x77\x55\x6f\xef\xaa\x5e\xa6\xde\xab\xa7\xdc\xfc\x22\x85\xef\xfd\x36\xcd\x5c\x1b\x71\xb6\x4d\xbc\x38\x32\xff\x95\xab\x57\x3d\x7d\xcb\x69\xa7\xdd\xf2\xf4\xaa\xab\x5f\x99\x1f\xb9\x78\x62\x9b\x33\xb2\x56\x7b\x86\xcd\x2f\x1b\x13\x34\x33\x26\x68\x73\x83\xac\xc2\x0f\x8e\xce\x0b\x48\x8e\x90\x8b\x49\x24\x49\x8f\xe9\xd7\xe1\x3b\x96\x9f\x3e\xc9\x0f\xaf\xb3\xe4\xf4\x1a\x2f\x52\xff\x31\x77\x5f\xd5\xe1\xbd\x42\x33\x9c\x54\x74\x7a\xbd\x87\xca\x86\x9b\xe9\x6e\xba\x62\x48\xff\x38\x39\x3d\x88\x0e\x1d\x36\x3c\x82\xee\x19\xed\x0f\x43\x9e\xb8\x14\x40\x56\x89\x89\xbe\x40\x5a\xa7\x20\x17\x89\x52\x20\x18\xf0\x49\x4e\x8a\xc7\x26\x91\x28\x89\x92\x01\xf5\x24\x52\x52\x92\x4e\x48\x4a\x4a\x67\x13\xbb\xa8\xa0\x4c\xa2\x0e\xd2\x1b\xa3\x9b\xf2\x85\x6a\x68\x26\xdd\x42\xf9\x42\xbe\x60\x60\xd8\x42\x81\x60\x21\x9f\x49\x07\x03\x41\x9d\x85\x76\x92\x14\x68\xa1\x66\xe2\x71\xf7\xfe\xbb\xef\xde\xcf\xee\x76\xdb\x9f\x92\x7d\xf1\xb9\x36\x6b\xe3\xf6\x80\xdd\x79\x4b\xfb\x24\xb7\x43\x6a\xfa\x9d\xd3\x4f\xe1\x29\x13\xbe\x60\x73\x39\xeb\xae\x4b\x49\x16\xd7\x5c\x6f\xa3\xf3\xdf\x1d\x6e\x77\xdd\x77\x9c\x0d\xad\x27\xdb\xac\xa1\x3b\x02\x0e\xc7\xd8\xc4\xb7\x59\x5d\x0e\xfb\x0d\x09\x23\x71\xc8\xf5\xef\x0e\x37\x0b\xe8\x35\xdc\x4d\x6b\x7f\x67\x0f\xb0\x70\x3e\x99\x5e\x62\x0f\xd9\x92\xb7\x59\xd7\x04\x5d\x5b\xd3\x61\x8f\xe3\x49\xb7\x7f\xb5\xb5\xee\x8a\xbc\xcd\x61\xaf\xf3\x9f\xd3\x90\x9e\xd2\xc8\xfc\x0e\x23\x6d\x47\xc7\x89\xa7\xd9\xed\x36\x47\xe2\x76\xdb\xea\xda\xc4\xb6\x8d\x19\x8b\xd3\x4c\x3c\x39\xcc\xfc\xc6\xda\x31\xac\x0a\xa3\x3c\xc8\x34\x9c\x8c\x8b\x4c\x3e\xa4\xb6\x97\x85\x4f\xf0\xcb\x9e\xa8\xc7\xd7\xac\xcb\xa8\x5d\x44\xd1\x94\x92\x8a\x8a\x92\x60\x50\xda\x08\xc3\x12\xaf\x8e\xe9\x82\x21\xcb\x06\x5a\xc8\x58\x43\xbc\x4e\xa3\x4f\x8b\x4e\x2f\x1d\xc7\xad\x0e\xa9\x4e\x17\xc7\x15\x39\x97\xb3\xdc\x47\xa5\xc9\x92\x4d\xfb\x81\x4d\xe2\x2e\xf3\x3a\xfb\x96\xcf\x1c\x2a\xcd\x5c\xde\x67\x90\x4e\x6e\xb6\x6b\xa1\xbe\xc2\x2c\x74\xcd\xa6\x9c\xd3\xcb\x45\x6a\xc8\xc8\x79\x1c\x77\xb9\x99\x7b\x7c\xa8\x37\x90\xf4\x78\x92\xfc\xfc\x0d\x56\xc6\xac\x77\x15\x9d\xde\xa1\xde\x33\xae\xde\x70\x06\xf7\xa4\x51\xfb\xd7\x92\xd9\x6c\xf2\x6b\x5e\x73\xfc\x87\x00\xf1\x42\x81\x83\x6c\x8c\x7f\x03\x35\x4f\xd4\x53\xe1\xbf\x72\x56\x0a\x14\x24\x51\x8a\x1b\x2b\x43\x4a\xa7\x35\x5d\x92\x4e\xb7\x54\xe7\x63\xbf\x27\xd8\x4c\x3a\xe7\xaa\xa9\xc3\xd0\xd4\x90\x42\xac\x9b\x75\xd3\x7f\x75\x59\x1c\x9c\xc3\x52\xee\x2d\xf7\xda\xed\x0e\x4b\x97\x85\xd9\xd8\xcf\x23\x4b\x22\xef\x1b\x43\xe3\x37\x36\xc6\x22\x5a\x44\x67\x6c\x75\x46\x97\x06\x88\x27\x7a\x4d\x53\xd8\x49\xf3\xad\x4c\x62\x27\x95\xff\xc3\x42\xcc\x3a\xdf\xd6\x68\x61\x67\x85\x42\xcf\xff\x40\xc7\x4d\x5b\xf5\x6d\x5d\xe6\x37\xe7\x56\xbd\x8b\x65\x84\xf4\x75\x8b\x9a\xc9\x3f\x8e\x81\x0c\x4a\x9e\xa8\x92\x22\x85\x4c\x2c\xa2\x1e\x61\x5f\xb8\xb5\xb3\xf5\xb0\xb1\xa6\x72\x6a\x6b\x5f\x78\x0b\x6d\xb2\xd9\xb5\x1f\xdb\xe9\xd3\x5a\x5f\x6b\x67\x19\xfc\x96\x70\x5f\xeb\x11\x55\x8f\x17\x8b\xad\x9d\xad\xe1\x59\xda\xd6\x26\x3b\x9d\x68\x3f\xec\xe5\xd1\xd9\x4a\xfd\x87\x2b\x3b\xe0\x95\xb1\xe9\x43\x04\xed\xa3\x9c\xad\x39\xef\x54\xc8\x06\xee\x0e\x8a\x38\xc9\xdd\x4c\x91\x3c\xdc\x8c\x8f\x24\x98\xdb\x9b\x88\xf0\x9c\xea\x75\x9a\x33\xc2\x80\x49\x0e\xfd\x3b\x0e\x6b\xaf\x1e\xde\xb1\xe3\x30\xb5\x1e\xa6\x2b\x5e\xd4\xbe\xaa\x2d\xd7\xbe\xfa\xe2\x8b\x74\x3e\x3d\x40\xe7\x73\x03\xda\x08\xdd\xe8\xb4\x50\xd6\xa8\x55\x4f\x6b\xe4\x60\xe7\xd5\x26\x7d\xf1\x45\xa3\x1f\xd3\x80\xb4\x50\x00\x3c\x38\x19\xa0\x1c\xd7\x41\xba\x98\x22\x71\x7e\xd1\x94\x73\x7c\xf1\x68\x3a\x9f\xe2\x3a\x48\x97\x76\x24\x4e\x0c\x64\xa2\xb1\x5c\xb6\x40\x3a\xe5\xc6\xf4\xc9\xc5\x48\xa6\xcf\x1c\x71\xbd\x0d\x29\xc0\x9f\x55\x4f\x3e\xc7\x77\x1c\x3e\xaa\x27\xaf\xfd\x7d\xbb\x97\x7d\xd0\x51\x2e\x3a\xbc\xe4\x23\x9f\x43\x1b\x74\xf8\xc8\x47\x5e\x47\xb9\xd8\x11\xa2\xfb\x2d\x09\x1f\x9d\xe1\xf0\x91\x8b\xbc\x8e\x47\x1c\x5e\x72\x91\xcf\x41\x67\xf8\x12\x16\xba\x3f\xc4\xc2\x3c\x19\x2b\x93\x56\xe2\xed\x6e\xb7\x76\xe2\x3c\xd9\x41\xd0\x03\x86\xe1\x90\xe7\xe5\xbb\x78\x9f\x1c\x96\x1d\xe6\xbc\xe9\x90\xc3\xf2\x91\x03\x5d\x55\x39\x42\xd4\x99\x40\x17\x92\x98\x01\x24\x2a\x73\x61\xf5\x2b\x8f\xe9\xf6\x60\x20\xdd\xad\x8f\x3e\x0a\x48\x3a\x1f\x43\x4a\x21\x9f\x89\x56\x08\xc2\xef\x89\xa6\x05\x53\x83\x44\x8a\xf1\x79\xa4\xb3\xf5\xb0\xc1\xa4\xd1\x2f\x3e\x3f\xf5\xde\xa9\x5b\xe9\xa5\xd6\x4e\xed\xbb\x9e\x16\xad\xe8\xcd\x7b\xb5\x62\x8b\xc7\x33\x91\xa0\x84\x48\x17\xbe\x30\xf1\x91\xac\x99\x4b\xff\xa3\xc8\x28\xdf\xb7\xb5\xb3\x73\x6b\x27\xf3\x4c\x68\xd2\x8a\xb2\x4c\xa5\xa6\x09\x29\x2a\x19\x72\x53\xb1\x86\x56\xea\x91\x30\x78\x00\xdf\x08\x5c\x23\xa4\xe2\xf7\x64\xd2\x01\x56\x21\x96\x2e\x72\x2b\x7c\x0d\xbd\xf0\x7d\x36\xed\x7b\x75\xf5\x75\x5a\xc9\x65\xb1\x04\x4a\xc6\xc0\x29\x39\xbd\xcf\x8f\xd0\xcc\x8e\x1d\x47\x51\x0d\xeb\xb3\xdb\xb5\xef\x59\xad\x54\x74\xcb\x3e\x83\x6e\x9c\x5a\xbf\x97\xa5\x6b\x28\xed\xe9\xa3\x48\xe7\x18\xb0\x9a\x73\x9c\x39\x19\x9a\x2a\x08\x9d\x13\xa4\xe3\xc3\xba\xbc\x06\x42\x1b\x75\xd7\xd5\xd7\x51\xd1\xf5\xcb\x8f\x05\x75\xa7\x4f\xeb\x37\x26\xb9\x3e\xaf\xd3\x6e\xa7\x6e\xab\x55\x2b\xb9\xe9\xa3\x8f\x01\xd5\xb0\x42\x10\x75\x16\xc0\x61\x8c\xfc\x68\x07\xa5\xb8\x28\xe7\x24\x29\x1a\x8c\x26\x47\xa9\xa1\x20\x9b\xb3\x71\x50\x0e\x70\xc3\x34\x9d\x38\xda\x5f\x9e\xbe\x9f\x38\xa2\xe9\xe7\x51\x91\xf5\x29\xa1\xc3\x6a\x48\x69\x78\xd7\x96\x0b\x71\xc5\x50\xce\xf6\x6e\x03\x2b\x72\x75\x8c\x06\x35\x37\x57\xc7\x4a\x0f\x68\xcd\x86\x16\xf2\x0f\x5d\x33\x58\x6b\x43\x2c\xd6\x50\x7e\x75\x46\x4d\x1b\xb9\xd0\x68\x58\x9d\xeb\xfd\xa9\x2f\xba\x7a\x85\xf9\x20\x05\x8e\x33\xec\xf9\xfe\x48\x79\xc0\xe5\x71\xbb\x23\x91\x68\x0b\x8b\x7c\xec\xa0\x67\x0f\xcf\xf7\x6a\x25\xab\x45\x4e\x32\x35\x29\x7b\x65\xad\xf4\xb3\x8f\x1b\xf5\x34\x02\x53\x66\x64\x2e\x4a\x29\xdd\xa4\xc4\x63\x4e\xe6\x6b\x66\x99\xb4\xbe\xde\xa7\xf5\x85\x5d\x12\xf9\x11\x26\x33\x93\xe6\x83\x85\x7c\x30\x20\x42\xa7\xd4\x89\x1e\x4f\xcb\x2d\x3b\x7f\x52\x65\xbe\x36\xee\x9f\x27\xb9\x5d\xb6\x9b\xad\x64\x59\xab\xfd\xf4\xd1\x51\x56\xed\x4e\x92\x57\x7f\xb6\x69\x42\x4a\x80\x56\x0c\x29\xad\xa9\xe6\x5b\x6e\xae\xb0\x78\xab\xce\xb3\x31\xeb\x2d\x96\x06\xdb\x96\x3b\xf4\x94\xd4\x49\xe1\x17\x37\x5f\xb6\xf2\x86\x16\x8f\xa7\x96\x9f\x49\x60\x8e\x31\x0a\x18\xa2\xb1\x44\x4a\x12\x47\xe7\x6b\x9f\x8b\x9a\xc9\x04\xb6\xb2\xf0\x56\x14\xc5\x06\x2a\x23\x7c\xce\x0c\xf2\x22\x6a\xc0\x9e\x0e\x08\x7f\xa6\xa2\xb6\x4a\x7b\x77\x87\xf6\xd7\xd5\x37\xc8\x59\xbd\xbb\x4a\x21\x45\xbe\x79\xce\xe3\xe7\xdf\xf4\xd6\xec\xba\x89\x96\x40\xc9\x21\x37\xe8\xf8\x85\x14\xf9\x96\x9d\x3f\xa9\x04\xfe\xd8\x21\x9f\x44\xf7\x90\xbc\x83\x7c\xab\x3f\x2b\x67\x15\x1a\x10\x98\xf6\xbe\xf6\xad\x4b\x2f\xbc\x41\x36\x8b\x50\xb2\xf2\xcd\x33\xe7\x7e\xf6\x0a\xcf\x8a\xa0\xcc\xc9\x7a\x76\x25\x2b\xdf\x72\xb3\x19\xe0\x90\xc8\x4e\x0b\x2e\x5b\x79\x83\xac\xa0\x62\x6c\x75\x6c\x7d\x01\x68\x1c\x47\x9a\xfb\x04\xff\x78\xb9\x34\xf7\x09\x7e\x79\x9c\xd6\x4a\x3e\x4a\x0b\x65\x0a\x02\xc7\x7b\xf1\xaa\xec\x18\x32\x3c\x9c\x21\x66\x1c\xdb\xad\xca\x8e\xc3\x86\x47\xd0\x3d\xb5\x7a\x5d\xea\x1b\x29\xee\xbd\x63\xb8\xca\xef\x7d\x7c\x74\x86\x33\xdc\x43\x7a\x7d\xfc\x82\x5a\x85\xaf\x31\xc6\x79\x53\x9f\xde\xa2\x8f\xf1\x9c\x3e\xdb\xfb\x6b\x75\x44\xba\x2c\x88\x08\x74\x49\x30\x40\x45\xa6\xb3\xac\x5c\xb1\x2a\x74\x47\xc8\x42\xeb\xc8\x12\x69\xed\xe4\x50\xba\xe4\xee\xbb\x2f\xd1\x06\xca\xc6\x7c\xcd\x8a\xad\x9d\xa5\x27\xc9\xa2\x7d\xf8\x64\xa9\x53\xa7\xcb\x62\x45\x8e\xf0\xa0\x60\xd0\xe5\xc8\x84\xa7\xe4\x74\xa9\x46\xe7\x06\x75\xae\xba\x83\xc5\x63\xa6\x1e\x56\x1f\xe7\x3a\xcf\x1c\x08\x06\x32\xe9\x2e\x66\xd4\x5e\x34\x10\x2a\xf6\x5c\xd2\x23\x94\x1a\x1a\x7f\x75\xcf\x8c\x6b\x97\xdd\x3a\xaf\xa4\x0d\x7a\xdc\x21\xa5\xc5\x3f\xf5\xc0\x53\xab\xbf\x73\x9d\x92\xce\x5f\x7f\xee\x19\x8e\x90\x22\x60\xae\x72\xc4\xa9\x23\xce\x1f\x52\xe6\xe6\x7a\x7a\x36\x94\x85\x86\x46\xe7\xfa\xf6\x6c\xfb\x0e\xab\x12\x62\x7f\x8a\x04\x9d\x4d\x9b\xa6\x4e\x93\x27\x66\x27\x2a\xd5\x33\x27\x86\x1c\xd9\xa3\x43\xe8\x62\x4e\x8a\xfb\xc7\xf2\xa8\x4d\x94\xd6\x19\xf9\x5c\x96\x25\x22\x3c\xf3\xfb\x5a\xf4\xe5\x7c\x84\x35\xab\xd2\x58\x4c\x99\xc4\x94\x5c\xb6\x22\x60\x8a\xea\x74\xdf\x53\x81\x9b\x97\x8c\x72\xa3\x73\xae\x8a\xcd\x6a\xda\xab\xfd\x4a\xfb\xa6\xf6\xab\xbd\x4d\xb3\x62\x57\xcd\x19\x8d\x5b\x72\x73\xe0\x29\xdf\xf4\x9b\x06\x28\x4b\xbd\x94\x1d\xb8\x89\xdd\xf2\xc8\xce\x29\xd1\x33\x56\x47\x46\x99\xcf\xc8\x9c\xe9\xf6\xf3\x2e\xd8\x49\xe2\xbd\xf7\x6a\x87\x77\x5e\x70\x9e\x7d\xfa\x9c\xc8\x28\x53\x1a\x59\x7d\x46\x74\xca\xce\x47\xbe\x48\xf5\x2f\x6c\xde\xfc\x82\xf6\x96\x89\x57\x84\x03\x3f\x00\xd9\x9c\xb7\x62\x29\x1a\xa1\x5d\xca\xa7\x03\x1c\x94\xac\xac\x7d\x4b\x3b\x6c\xcc\xc3\x22\x2d\x90\xb3\x0a\xdf\x7f\x44\x1f\xe1\xb4\x40\x09\x91\xce\x66\x2e\x30\xc7\xa0\x4e\x2f\x11\x5e\x35\xca\x3a\xe1\xd8\xa5\xc1\xec\x48\x43\x71\x9d\xed\xe0\x8c\xed\x83\xe0\x31\xeb\x20\xf5\x53\xb3\x6d\xae\x90\x52\x1f\x8b\xd5\xeb\x8f\x12\x72\xd9\x66\x1f\xa3\x62\xcd\xbb\xeb\xc6\xb0\x90\x6c\xf4\x37\xf9\x1b\x26\xcd\x9c\xd4\xe0\x6f\xf2\x37\x26\x85\x46\x98\x86\x99\xc3\x4f\x89\xaa\x30\xc7\x80\x67\x1e\x56\xff\x23\x30\xf1\x6e\x56\x09\x35\xf6\x64\xb2\x8a\x29\xd2\x8d\x8f\xeb\x22\x9d\x10\xbd\x6e\x96\xd2\x05\xf2\x91\x14\x7f\x37\x46\xf4\xa9\x7f\xd9\xe6\xb0\x37\x2a\xa9\x4e\xdf\xfc\x33\xce\x98\xef\xeb\x4c\x29\x21\x87\x63\x1b\xfd\x8b\xf6\xb2\xc3\x11\x52\x52\x52\x8b\xd4\x91\xf8\xcc\x2d\xb7\x7c\x26\xd1\x21\xb5\x48\x46\xe4\xcb\x7f\x7f\x2b\x14\xb4\x17\xb5\xf2\x34\x41\x09\xa5\x7c\x4d\xae\xfc\x83\x4f\x3e\x98\x77\x35\xf9\x52\x21\x45\x98\xf6\x6d\x2d\xab\x5d\x7f\x8e\xa0\x84\x12\x41\xde\xc1\x37\x84\xce\x21\x37\xa5\xc9\x7d\x4e\xa8\x81\x77\xf0\xc1\x44\x48\x11\xce\x81\xdd\x10\xf2\x75\x9a\xe7\x20\xa1\x0e\x2e\xc8\x08\xa2\x11\x2d\x88\x63\x12\x32\xc6\x58\xf5\xc7\x73\xb2\x3f\x9e\x8b\xfa\xe3\x39\x32\x64\x15\x4f\x54\xff\x92\x27\xea\xa1\x4a\xb8\xec\x89\xe6\xe2\x9e\xb8\x27\xea\xcf\xe4\xc8\x4c\xe2\x21\x55\x55\x55\x4e\x55\x87\x54\x5d\xec\xd0\x1f\x0e\xfa\x7b\x18\x65\x95\x57\x55\x3d\x5a\x53\x8d\x6f\x59\x2d\xab\x82\x5a\x36\x82\x38\xe8\xd9\x86\x88\xae\xa7\x4a\x3e\x3d\x96\xa9\x9a\x11\xce\xa0\xe9\xb9\x98\x91\x50\x0f\xd6\x1f\x18\xfb\x80\xd5\xb5\xe1\x68\x3c\x52\x68\xab\xe0\x32\x0d\xdd\x40\x26\xee\xc9\xc8\xff\xc4\xd3\xdd\xdd\xdd\x1d\x89\x2c\x6f\x69\xf9\x4a\x4b\xcb\x57\xba\xba\xae\x6b\x69\xe9\x36\xfe\xbe\xd2\xdd\xfd\x95\xee\xee\xeb\x8c\xbf\xe5\xdd\xdd\x4f\x2f\x5f\xae\x27\xeb\xee\x16\xd4\xc3\x37\x08\xd7\xff\xaf\x1e\xbd\x5f\xcc\x35\xfd\x2e\xe1\x6d\x63\x8e\x6e\xaa\xd1\x51\x54\x38\x22\xea\xa0\x11\x49\x8c\x02\x54\xea\xb9\xa4\xa7\xe7\x12\xfe\xaa\xa4\xe6\x4f\x65\x73\xc9\x72\x4e\xc9\xf5\x66\xa9\x3f\xa7\x2a\xec\x67\x49\xbe\x4e\x8f\xec\xd1\x8a\xb9\xa4\xe6\x4b\x26\xd9\xf3\x49\x35\x47\xfd\xd9\xde\x9c\x52\xce\xa7\xaa\xbc\xe9\x5d\xd2\xea\x4a\x5d\xb9\x4f\xaa\x4d\x30\x43\x95\x14\xe5\x73\x59\x3d\x2e\x9e\xf9\x3b\xa0\x20\xd5\x08\x4e\x74\x34\xd3\x2b\x49\x3d\x4e\xcd\x0d\xfc\x1d\xf0\x65\x8d\xc0\x70\x0b\xbd\x92\xcc\x65\x53\xec\xa7\x4a\xce\x04\x9b\x83\x6d\x58\x15\xaf\x16\x54\x2c\xc6\x0a\xac\x07\x74\x99\xc4\xa9\xcb\x5d\x4a\x4a\x29\x64\xf3\x85\xbc\x52\xe8\x62\xc6\x30\x56\xf4\xf7\x78\x07\x2b\x74\x89\x41\xc9\x40\xa9\x92\x4f\x12\x83\xc6\x32\x5f\xa0\x7c\x2a\x20\x88\x86\xbb\x9b\xf2\xca\xa8\x28\x57\xe3\x17\x2f\x6a\x0d\x68\xef\xc8\x57\x9e\x34\xb4\x72\xc1\xed\xe1\xfa\x80\x48\x64\x21\x66\xf7\x8b\xc1\x76\x0b\x27\x30\x2e\xcc\xf9\x27\xf2\x24\xf1\x7c\x82\x97\x27\xf1\x64\x61\xcc\x19\x10\x2d\x1e\x87\xec\x8b\xa6\xc2\xa4\x38\xd8\x47\xf3\x17\x05\xb4\x77\x13\x73\xce\x1d\xfa\x72\x63\x5d\x9d\xad\x7e\x13\xf7\xe5\xa6\xbc\x85\xda\x25\xa6\x1c\x79\x87\xb7\x3b\x59\x9f\xa3\x81\xf7\xf3\x76\x67\xb9\xdf\xd1\xc0\xaf\x3a\x2a\x84\x8f\x9d\x38\x77\xe8\xaa\xe2\x59\xab\x17\x9e\x3c\x9d\xef\x70\x5a\x1a\xc5\x3a\x5f\xa3\x4d\x59\xad\xd8\x5a\x2d\x75\x31\x31\xb1\x2e\x66\xed\x10\x1c\x71\x21\xb4\x41\xb1\xc4\xad\x16\x5f\xc8\x62\x4f\x46\x53\x0d\x01\x12\x39\xeb\xba\xf9\x43\x57\x6d\x3c\xc5\xe5\x6e\x9c\xdd\x12\xe2\x7e\x13\x88\xbb\x9a\x47\xd8\x16\xad\x34\xe2\x34\xf7\x6e\xbf\x28\x54\xf6\x85\x29\x1d\x34\xb5\x00\x86\x1a\xcc\x6a\xd0\x85\x49\x16\x85\x7c\x86\xdf\x16\xf4\x47\x53\xa9\xa8\xdc\x30\x39\xae\xcd\xd1\xe6\x24\x26\x99\x7e\x7f\x50\x50\xad\x8e\xce\xd8\xe1\xff\x89\x75\x3a\x2c\x11\xda\xad\x2d\x89\xea\x7e\xc1\x1a\xeb\x74\x58\xab\x73\xb9\x2a\x9a\x73\x91\x1d\x3e\x4c\x07\x26\x98\x93\x89\xa1\xf7\x89\x56\x49\xb1\xe0\xa9\xa8\xac\x4d\x0e\x2d\x5e\x5d\x9e\x2b\x64\xd9\x62\xa8\x28\x74\x76\x41\xe5\xd4\x21\x95\x53\xfb\x5b\x3b\xf5\x19\xc7\x14\x44\x65\xc7\x80\xc9\xbb\x0c\x38\xe4\xcb\x4f\x2d\x76\xb6\xb2\xfe\xd6\xbe\xf0\xae\x70\x6b\xf1\xd4\xcb\x09\xfa\x9c\xd3\xd9\xda\x5f\x36\x65\xcf\xa2\xd6\xe7\x90\xfb\x75\x6e\xa6\x5f\x76\x50\xff\xa9\x97\xb3\x48\x6b\x67\x6b\x78\x57\xb8\xaf\x75\x18\x97\x57\xec\x00\x4c\x99\x39\x8a\x09\x00\xd2\x01\x9f\x18\x53\xb2\x15\x66\x60\x94\x81\x1a\x51\x57\x55\xf4\xd0\x6e\x6e\xde\xbb\x7b\xf6\xbc\xbb\x87\x1b\xd0\x59\xa6\xc3\xaa\xfe\x1e\xc8\xc8\x2b\x73\x0c\xb9\x95\x72\xa6\x7c\xd1\xa8\x3e\x99\xeb\xdb\xa3\x27\x65\xf3\xee\xbe\x64\xc8\x48\xc7\xa9\x97\xdc\xbd\x75\xca\x9c\x39\x53\xb6\x1e\x51\x69\xc4\x66\x61\x54\xb7\x6c\xf2\x72\x8b\x00\xe2\xd2\x81\x4c\xba\xa0\x50\xa1\x8b\x2f\xc8\x34\x8d\x74\x01\xcd\x1b\x6c\xa6\x60\xc0\x78\xf9\x7d\xa2\x3f\xa6\xc4\x63\xbc\x94\xed\xa6\x74\x97\x90\xcb\x76\x50\x2a\x29\x32\xbf\xaf\x99\xcb\x04\xfc\x3e\x49\x8f\x14\xe3\x22\xfb\xcf\x7f\x89\xfe\xfc\x44\x59\x39\x6b\xe8\xa7\x2c\x38\x73\x72\x46\xb1\xbf\x43\xf5\x3d\x39\x0b\xf7\x42\x74\xc7\x04\xd7\x99\x4d\x3e\x97\x7c\x8b\x4b\xa4\x6e\xad\xd8\xab\xfd\x25\xc5\xdf\x48\x41\x8b\xdf\xea\x10\xba\x4e\x27\xad\x2b\xb4\x32\x3c\x4d\xe9\xe5\x88\x4d\xfd\xef\xa9\x96\x24\xb7\x88\xfb\x85\xd6\xc5\xb3\xf2\xd0\x55\xa7\x4a\x75\x36\x39\xd5\xc2\x56\xb1\xfd\x4e\x49\x8b\x2c\xd4\xbe\x74\x5e\xec\xb7\x53\x4f\xb0\xbb\x9a\x44\x45\x16\x3c\xbc\xdb\x49\x6d\xf1\xb0\xc0\x24\xd1\x66\xb7\xb8\xef\xff\x3e\xc7\xa6\x6a\xef\x34\x04\x5a\xbc\x56\x8b\x9c\xb2\x7a\x7d\x16\x67\x45\x8e\x36\xd6\x2e\x3f\xda\x70\x3e\x90\x0c\x64\x22\x9e\x6c\xaa\x83\x8f\xc7\x24\x9f\xe8\xf7\x89\xcd\xc4\x19\xbc\x63\x2e\xab\xb3\x95\x92\xcf\xc0\xd9\x67\x0c\xfc\x2e\x7e\x3a\xe5\xdc\xa9\x0e\x7e\x12\xe9\x22\x5a\x20\x93\x6e\xe6\xfc\x3e\x27\x27\x35\x93\xfe\x89\x1b\x2d\xc3\xda\xe6\xcf\xa4\x4d\x13\x1a\x4f\x99\x79\xde\xbc\xa9\xf3\xc2\xc4\xc8\x22\x4e\x3c\xf9\xf4\xcd\x17\x64\xa6\xae\x58\x3f\x33\xbd\xc8\x42\xe5\x37\x98\x6b\x5b\x42\xaa\x13\x05\x0a\xf0\x89\x5c\x47\x46\xe0\x2f\xa0\x37\x6e\x0c\x2e\x0d\xce\xfe\xdc\x35\xcb\x3a\xa3\x27\x2c\xee\xca\xdd\xf3\xc2\xec\x0d\x5f\xdd\xbd\xac\x7d\x6f\xfb\x25\xda\xa5\xae\x08\x9d\x7a\xc5\xcc\xf6\xe9\x51\x0f\x6f\xcb\xed\xcf\x5a\x36\xce\x3f\x97\xbd\x22\x85\xba\xd7\x2f\x9e\x7d\xf1\xb4\xb0\x23\xfd\xd3\x4c\xe3\x25\xa1\x8e\xa1\x75\xcb\xf9\x7a\x97\xbd\x39\x19\x9e\xe4\x4f\x0b\xdc\x2b\x6d\x16\x87\x55\xe0\xe9\x0c\x26\x53\x68\xea\xe2\x6b\x7b\xb2\x67\x9d\x38\x35\x52\x1f\x7f\xf6\xae\x15\x5f\xbd\xf0\x94\xb0\x18\x30\x65\x53\x5e\x1f\x9f\x53\x01\xbf\x3e\xa7\xe5\x0b\xf9\x10\xa5\x72\x1d\x2c\x55\xd0\x45\xd3\x2e\x2a\x88\x92\x93\x24\x27\x27\x89\x4c\x72\x72\x2d\x14\x08\x8a\x52\x4c\x9f\xbc\xe3\x7a\x3f\x7b\x02\xa7\x9e\xd4\x18\x76\xd0\xe6\x4b\xa8\x7e\xc6\x42\x59\x8e\x3e\x76\xed\xd4\xc9\x2b\xbf\x10\x16\x9c\xcd\xb7\x27\x2d\x76\xd1\xca\x1a\xaf\xf6\xb0\x80\xd7\x49\xe4\xd9\xcd\x39\xea\xda\xea\x9a\xd6\x87\x6f\x99\x95\x79\xf2\xba\x4f\x49\xb2\xec\x8c\xcf\x94\x58\x96\xd5\xc5\x1b\x1c\x75\x02\x77\x11\xb3\x0a\x82\x95\xa5\xd2\xb6\xa4\x4b\x9e\x14\x9d\xea\xd8\x59\xfe\xfd\x62\xeb\x05\xa7\x7f\xca\xe5\xe5\x1b\xdb\x0b\x9c\x8f\x79\x47\xe9\xf5\xb0\xa0\xa2\x11\xd7\x02\xc9\x74\xc0\x65\xee\x86\xe9\x63\x39\x1e\x53\xba\xcd\x9d\x30\xb1\x8d\x3c\xa4\xcb\x00\xba\x2c\xa0\x0f\xa3\x2e\xd6\x4d\xe9\x80\x41\xa2\xa2\xa4\xa4\x3a\x58\xaa\x83\xd3\xf1\xd0\xe7\xe2\xa0\xcf\xeb\xf7\x89\x55\x02\x77\x91\x98\xd0\x69\x58\x99\x41\x7a\x8b\x78\xb2\x4c\x17\xe8\x74\x3a\x37\x04\x5d\x27\x93\x94\x94\x47\x7c\x29\xea\xf5\x5d\xe7\x9b\xea\xbb\xce\xe7\x8d\x2e\x5a\x54\xeb\xf9\xe8\x17\x79\xfb\x8f\xdb\xf7\xb6\x27\x6e\x4f\x50\x52\x6c\xae\xf3\x3b\x2d\x13\x79\x1f\xcf\x84\x54\x53\x43\x13\xe7\x76\x90\x68\x97\xa5\x26\xe6\xf9\x74\x7a\x61\xc4\x4a\xbc\x20\xd8\x5a\x77\x27\x04\x2e\xd6\xab\xbd\x71\x52\xfa\xa7\x19\xce\x73\xf6\x9a\x7a\x59\x24\xc6\x73\x75\x5f\x8c\x6e\xf2\xc9\xcd\xd1\xd0\x44\xa7\x9a\x0c\x3d\x10\x0a\x3d\x10\x4a\xf2\xa8\xba\x86\xc0\x0f\x37\x0a\x3c\x11\x09\x8e\x3a\xa2\x75\x03\x8b\x9a\x9c\x7c\xfb\x62\xeb\xc2\x53\xc8\x62\xe5\x18\x11\xcf\x9f\x56\x58\x5e\x7e\xfc\x7e\xf7\x65\x73\xa3\xfe\x36\x77\xab\xcd\xe9\x22\xe6\xf3\x66\xc8\xda\x18\x09\x39\x27\xd2\xa7\x56\xd2\xce\x95\x1b\x58\x63\x30\xec\xe3\xed\xf5\x4e\xc7\xc6\x8b\x58\xc8\x4b\xd7\x9b\x6d\xcc\x19\xfa\x80\xf3\x71\x17\x20\x57\xda\x31\xc1\x07\x03\xe3\x1a\x31\xa7\xe8\x8d\x62\x34\x62\x0b\xe5\x7c\xfa\x30\x38\x4e\x3b\x76\xb1\xac\x92\xcb\x1a\x06\x65\x63\x5b\x92\xd2\xcd\xcc\xd8\x30\xe1\xe2\xb1\x0e\xca\xe6\x73\x51\x5f\xc0\xe7\x24\x5d\xa8\x4b\x29\xd9\x42\x17\x97\x49\x37\x93\x4f\xf4\x47\xb3\x4a\xb6\x8b\x4e\x33\xdb\x76\x36\x9d\x4f\xd8\x18\x0d\xd6\x36\xac\xd3\xe6\x11\x66\x34\x5f\xb7\x68\xcd\x44\x2b\x11\xa3\x63\xb6\xab\x64\xe5\x48\xd0\x5b\x8c\xaf\xfb\xe2\x84\xf7\xdd\x66\xdb\x0a\xcd\xf6\xe9\x85\x22\x1f\x0a\xf1\xc5\xc2\x74\xbb\xc3\x25\x70\x43\xe0\x04\x97\x63\x7c\x28\xaf\x87\x0a\xd7\x37\x0a\x3c\x23\x9e\x22\x35\x4d\xbe\x60\x36\x39\x44\xc6\x78\xe1\xb4\xc2\xae\x6c\xe1\xd9\x07\xe6\x1e\xbb\xc9\xdd\xeb\xbf\xf1\xf9\x47\x39\xa9\xc9\x22\xcd\x9f\x7b\x5a\x5e\xb0\x37\xd6\xd9\x37\xae\x32\xda\xfc\xf0\x70\xaa\x3d\xcf\xf9\x3b\xfd\x5c\xbe\x3d\xe5\x4f\xb4\xc4\x19\x8b\xb7\x24\xfc\xc7\x0c\x34\x0f\x96\x8d\xd5\x69\x18\xbb\x6b\xff\xcc\x1e\xbb\x04\x25\xf4\x91\x61\x2d\x22\x56\x2c\x5b\x8e\x18\xd6\x25\x82\xa1\x5c\x55\x42\x87\x0d\x9f\x88\x4a\x9c\x91\x92\x57\x43\x4a\x69\xd4\xd8\xe4\xc2\x4f\x70\xfe\x1f\xc1\x6d\x9a\x27\x72\x6a\x05\x6e\xc3\x27\x54\xad\x75\x0c\x1f\xfb\x7f\x00\xb7\xe7\x1f\xf4\x8f\x85\xbb\xb6\xb5\x6b\xdb\xfa\x7f\xdd\xd2\xff\x27\x30\x7f\xb2\xfb\x1f\x84\xf9\x63\x74\x75\xe3\x77\x8f\x3d\x9f\xe0\x3f\x16\xdd\x7c\x5c\xfc\x27\xe1\x4e\x90\x1d\x06\x6b\x7b\x9c\x97\x08\xd9\x71\xd8\xf0\x08\x45\x87\x7c\x18\xc7\x8b\x39\x9e\x7b\x60\xa4\x34\xba\xf2\x58\xce\xa1\xf7\x46\x9c\xfc\x31\x43\x8f\x9d\xcd\x3c\xac\x3a\xbe\x4d\x4d\x3d\x74\x2c\x45\x4a\xd6\xb4\xb8\xa5\x7f\x92\x32\x48\x95\x1d\x4e\xab\x36\x60\xb5\x52\xc4\xea\x74\xc8\x82\x2a\x3b\x3e\x32\x30\x14\x0d\x50\x8e\x18\x6f\xbe\x38\xde\x3d\x9a\x86\x1b\x28\x97\x1c\xb2\x9e\x3d\xac\xbf\x3e\x19\xb3\x5a\x24\x8f\x89\x63\x45\xf7\x6f\xea\x73\xd2\x41\xeb\x3f\x8d\x63\x9f\x8e\xa0\xa1\x19\x74\x5a\x29\x22\xec\xf9\x47\x51\x64\x2f\x86\xf5\x12\x4c\x73\x11\xab\x36\xa0\x59\xff\x01\x14\x4d\x3d\xa3\x61\x3f\xdc\x62\xf4\x9f\x21\x45\x55\x71\xaa\x0a\xd7\x4d\x44\x86\x96\x49\x42\xca\x61\x6f\xf4\x6a\x6b\xf7\x6c\x2c\x17\x37\xee\xd9\xb3\x91\x95\x36\xee\xa1\x3b\xbd\x8d\x76\x47\x8a\xef\x3f\x52\x9a\xe8\x11\x64\xba\xf3\x91\x6a\xcc\x9e\x8d\x0f\xd3\x0e\x59\xf0\x8c\xc8\x53\x92\x29\x0f\x38\xd1\x8c\x0e\xbd\x25\x75\xf9\x24\x9f\x26\x4f\x34\x47\x41\x2b\xd5\xa8\xb4\x73\x9e\xac\x12\x1c\xa7\xd6\x66\xea\xba\xfe\x75\xeb\xfa\xf9\x75\x87\x55\x2a\xf6\x33\x30\x7c\x64\xe0\x21\xea\x2d\x71\x67\xad\x15\x24\xef\xd6\x13\xae\x2b\x97\xb4\x62\xc9\x48\x4a\x11\xd9\x71\xc4\x68\x30\xbe\xe4\x90\x23\x47\x0c\x55\x36\x5f\xaa\xd8\x2c\x0e\xab\xc2\xdb\xc2\x6a\x88\xf0\xa1\x01\x49\x20\x5a\x48\x49\xfe\x8c\x9f\xb2\xf1\x98\x44\xa2\xdf\x97\x49\xeb\xa2\xb7\x95\xa2\x1e\xf2\xb9\x88\x0a\xf9\x8c\xce\x09\xd2\xea\x73\xde\x3e\x47\x65\x57\x05\x6c\x52\xf9\x0f\x52\xc0\x26\xb1\x66\x29\x4f\xfd\x43\x25\xad\x4f\x78\x3b\xf9\x88\xd6\xf7\x48\x22\x9f\x53\xde\x4e\x9e\xf3\xf6\x39\xab\x55\xae\x3f\xa0\xa7\xb2\x05\xf4\x54\x3f\xd5\xfa\x86\x4a\xd4\xcf\x06\x72\xc9\x47\xa8\xff\x61\x45\xf9\x4b\xaa\xc2\x7f\xf2\xa6\xed\x47\x70\xac\xa6\xc3\x49\x31\x25\x45\x8a\xa1\xf8\xe6\x4c\x23\x0d\xba\x3b\xaa\xed\x74\x77\xcf\xed\x76\x69\x77\x46\xa9\x9d\x76\x53\x3b\x57\xb1\xad\xc0\xda\xd9\x43\x87\xa3\x8a\x12\xe5\xc4\xd9\x6b\xf7\x53\xbb\xb6\x7f\x8c\x5d\x89\x0c\x24\x3d\x31\x63\xaf\x6a\xcc\x06\x35\x76\x1e\xde\xb1\xe3\x30\xb7\x73\xdc\xae\x54\x1f\x5f\x34\x77\xa0\xd8\xc1\xa3\xf7\x0e\x4d\x7d\x3d\x84\x12\xfc\x86\xfe\x35\x9b\xea\xe0\x52\x4a\xcc\x60\xeb\xfd\xbe\x40\x3a\x9f\xf4\x21\x82\x9c\xce\x6c\x15\xba\x28\x1d\x08\x36\x73\xc1\x00\x83\x8f\x9a\x02\x61\x89\x8f\xf1\x52\x38\xd0\x44\xbe\x9e\x4b\x7a\x18\xb4\xfd\xda\x12\x6d\xff\x69\xe2\xe5\x67\x5f\x1a\xb6\xa6\xb3\x19\x4b\xf8\xd2\xb3\x2f\x17\x4f\x23\x35\x11\xa5\xb6\x68\x21\xe8\x76\x07\x0b\xd1\x36\x8a\x26\x72\x3d\x3d\x4f\xec\xd7\xf6\x53\xfb\xfe\x3b\x3e\x6b\x7d\xf0\xd6\x5f\x9f\xdb\x1c\x8b\x35\x9f\xfb\xeb\x5b\x1f\xb4\x5e\x6f\x8e\x57\xf1\x43\x41\x85\x08\x27\x4e\x44\x17\xe6\x02\x64\xf6\x26\x14\x89\xc4\x40\x81\xe4\xb1\xa4\x1d\x0c\x04\x75\x46\x3f\x35\x66\x43\x65\x06\x65\xbb\x29\x1f\xe0\x8c\x2e\x97\xa8\x60\xda\xc0\x71\x9b\xd6\xef\x5a\xdf\xc7\x10\xf1\x68\x0f\x78\x22\x1e\x5a\x7e\xda\x9e\x8d\x43\x06\x95\x73\xc5\xee\xbc\x8b\xe3\xec\x53\x9c\xde\x60\x60\xc8\x20\x43\xae\x38\x73\xb9\xb5\xe8\x6a\xed\xa3\x48\xb9\x4f\x1b\xe0\x97\x2d\xd3\x06\x96\x85\x17\x85\x77\x85\xa9\x6f\xfd\xae\xf5\x9d\x7d\xac\x34\x52\x4e\xf9\xe7\xcf\x98\xa5\x6c\xdc\xd3\x20\xb9\x3d\xf6\x29\x4e\x51\x34\x0d\x41\x96\xcf\xbc\xce\x61\x2d\xba\xdc\xec\x05\x6d\xa0\xdc\x47\x11\x16\x5e\x46\x91\x65\xe1\xf0\xae\xf0\xa2\x91\xf6\x37\xf6\xc9\xdb\xb0\x74\xbc\xad\xed\x94\xb4\xc9\x4e\xeb\xcb\x53\x2d\x66\xba\x2c\x16\x0c\xc8\xe6\xfe\xe5\x0c\x8a\x47\x24\x51\x0e\x18\xa3\xbe\x83\xcf\x65\xbb\xa4\x69\x94\xcb\x1a\xd6\x41\x14\xf0\x09\x6a\x15\x45\x0c\x3b\xe4\xd0\x82\x4e\x9b\xb8\xae\x8a\x9d\x37\x1c\x72\xcb\xfe\x77\x34\xd5\x18\xfd\xfd\xda\xd3\x57\x6e\x3c\x81\x0b\x5a\x78\xb7\xcd\x16\x38\x71\x62\x5c\xf2\xc7\xa7\x2d\xbc\xec\x96\x27\x2e\xe9\x4f\x39\xec\x21\x99\x54\x99\xc5\xb5\x72\x15\x4f\xd9\xd1\x28\x84\x62\x7c\x15\xcb\x57\x64\x9b\xa3\xde\x6d\xb1\xd2\xeb\x9a\x2a\x0b\x9e\x89\xa5\x1b\x6f\xd6\xf6\x06\xeb\x98\xc3\x19\xbb\xa8\x6f\x4b\xe7\x94\xc5\x7d\x8b\xce\x38\x69\x6a\x2a\x60\x4c\x30\x9a\x2a\x67\xab\xb8\x5f\x2f\xa8\x98\x64\x58\x0e\x7a\x8e\xd5\xad\x3a\x8a\x47\x77\xac\x3e\x93\xc9\xe6\x7e\xfc\x58\x2b\xc7\x51\x74\x47\x7a\xd4\xe6\xe0\xc4\xb1\x7d\x6a\x73\x88\xa2\xef\xcf\x43\xbf\xac\x9f\x59\xaf\x9d\x5e\x5f\x7f\x69\xfd\xcc\x7a\x92\xd8\xe7\xeb\x67\xd6\x5f\x5a\xcf\x96\x6b\xdf\x1f\xdb\x95\x36\x36\xd2\x95\x9a\xc3\x5a\xb4\x71\x16\xda\x3f\xf4\xcb\xfa\x7a\x7a\xcc\xc8\x50\xaf\x7d\xc4\x3e\x6f\x14\x52\x39\x59\x3f\x0c\x09\x22\x70\x72\x65\x9d\x31\x54\x4d\x9e\x4c\x3a\x50\x35\x20\x30\x54\x4b\x51\xbf\x4f\xac\xae\xb2\xfa\xe4\x6c\xe8\xa4\xaa\xdb\xf4\x86\x8d\x52\x34\x97\xd5\x3d\x12\xe4\x61\xc8\x59\x45\x53\xd5\x90\x62\x38\xf5\x97\x12\x52\x35\x55\x31\x9c\x32\xc1\xd8\x28\xd0\xa3\x75\xa7\xfe\x52\x42\x2a\xe9\xd1\x04\x76\xcf\x3f\x96\x5e\x1e\x5b\x5b\x8d\x1e\xa0\x09\xa0\xbc\xa1\x87\x4a\x91\x92\x1a\x67\x6b\xe5\xf7\xe4\x0b\xdc\xcb\x72\x28\x24\x97\xa7\x5a\xf9\x1a\x6b\x79\xab\x70\xa5\x6c\x0f\x1d\x2e\x86\xec\x32\x7b\xd6\x6a\x2b\x2f\xad\xf2\xdc\x4a\xa8\xbc\xd4\x66\xad\x39\x1f\xd2\x36\xbe\xfc\xe3\x54\x63\x24\xca\x17\xc4\x91\xda\x8e\xae\x93\x3d\x2b\x87\x8e\xaa\x79\xea\x71\x40\x60\xcf\xca\xf6\x50\x79\xaa\x01\xcb\xe6\x8a\xbe\xab\xe1\x18\xb0\x64\x47\x6a\x3e\xa3\xb6\x66\x59\xfe\x98\xda\xe4\xac\x3c\x5a\xbc\x81\xeb\x35\xc2\xf5\xc2\x16\xd4\x01\x56\x12\x0d\xb4\x8c\x31\xba\xea\xf0\x4b\xc1\x68\x34\x28\x4c\x0e\xb2\xf3\xcb\xcd\x0e\x5f\x48\x28\x85\x7c\x8e\x72\xb3\x23\x81\x31\x36\x85\xae\xca\x0a\x3f\x66\x51\x15\xc6\x1f\xfd\x41\xc5\xf2\xdf\x38\x05\x30\xa4\xd6\xfa\x84\xe2\xa8\xd4\x53\x2b\x01\x29\x55\xda\xad\xd6\x73\x54\x2d\xe2\x18\x89\x69\x4c\x39\xa3\x79\x45\xb3\xed\x82\x23\xa8\x05\x2b\x18\x4a\x06\xb6\xa2\x74\x82\xde\x74\xec\x59\xbd\xe9\xd8\xb3\xb2\xde\x7c\x21\xde\xaa\xb7\x9c\x50\x0a\xd9\xf5\x36\xb5\xb1\x67\x0d\x87\x9c\xd5\x5f\xf6\x10\x7b\xd6\x66\x1d\x29\xbf\x4a\x27\x47\x95\x1f\xf4\x8c\xdd\x32\xd5\xab\x3a\x56\x8d\x63\xc9\xe4\xf8\xb5\x5b\x6d\xec\x91\xd1\x06\x62\x8f\xd8\xac\xb5\xc0\x8c\x19\x13\x63\x61\x19\x0f\xc4\x48\xed\xb5\xf5\x8e\xad\x71\x5c\x45\x46\x7f\x13\x20\x92\x20\xa2\x0e\x8d\x80\x6c\x4e\x0a\x46\x6f\x50\x4d\x8f\xe8\xf5\x38\x47\x69\x4c\xa7\x3d\xe1\xd9\x9a\x6e\x61\x27\x54\x9b\x38\x54\xfe\x93\x69\x0b\xa5\x84\x86\x11\xaa\xf4\xd7\x3d\xc3\xf7\xf0\x8f\x08\x7f\x82\x0f\xb0\xb2\x80\x69\x3d\x5e\x99\x8f\xf4\x89\x94\xbf\xb3\xfc\x0e\x93\x65\xf9\x11\xbd\x27\x42\xb2\xcc\xfe\x24\x67\xe5\x47\x64\xfe\xe5\xf2\x3b\xe5\x77\x0c\xa7\x19\xc4\xfe\x64\xa4\x31\xcb\x5c\x3a\x7c\x0f\x7f\x61\xa5\xcc\xa3\x0c\xd1\xf5\x42\xcf\x28\x87\x2a\x79\xe5\xf2\x3b\x66\xe1\xec\x4f\x32\xbb\x53\xaf\xc1\xf0\xc8\x4c\x36\x13\xe8\x09\xc7\xd0\x7e\x1c\x93\x00\xca\x65\x95\x78\xd4\x63\x1e\xe1\xf1\x7b\xa2\xe6\x39\x9e\x4c\xd4\x63\x1e\xe6\xc9\x79\xa2\xe9\xb1\xd6\x3b\x25\x1d\x65\xa3\xdd\x87\x0d\xfc\xc9\xf4\x18\x86\x61\xc5\xf1\xe6\x3b\xc5\x4a\xcc\xd1\x79\xa8\xed\x68\x5b\xa6\x1a\x7b\xa2\x0a\x5c\x55\x68\x8e\x86\xa1\xe6\x2c\xd0\x31\x6b\xad\xc8\xbc\x6d\xc7\xb0\x0b\xac\xd6\xd3\x66\xec\x9d\x66\x27\x51\x21\x9f\xcb\x4e\x22\x25\x1e\x73\x19\xca\x32\x97\xce\xdf\xb6\x90\x64\xbc\x03\x99\x74\xb7\xa1\xdb\xec\xa6\xb1\x30\x5c\x2b\x3f\xf1\x84\x2c\x2f\x95\x1b\x43\xba\x23\xd4\x28\x2f\x95\x8f\x0e\xa1\x1b\xc7\xc1\x46\xf7\x7d\x5c\xf2\x4a\x08\xbd\x78\xdc\xb6\x09\x1a\x76\x5e\x3a\xb4\x31\x89\x52\x8a\x09\x6b\x50\x87\xb2\x40\x5d\x54\x03\x9f\xc0\x7b\xcf\x91\xb3\xb2\xb6\xea\x0f\x72\x56\x3e\xc7\xeb\xa5\x4b\xf4\x2a\x58\x8b\x77\x68\xbc\x5d\x65\x2c\xec\x5d\x2a\xcb\xda\xc5\x7f\x90\xe5\xa5\xde\x70\xa3\x57\xbb\x5b\xd6\xd3\xcd\x1f\x07\x43\xad\xbd\xd7\x54\xcc\x06\x92\xe3\xcf\x8d\x65\x3b\x28\x1e\x93\x44\xa3\xcd\x2a\x86\x21\x7e\x9f\x28\x39\xa9\x9a\x22\x97\xcd\x17\xba\xf8\xc4\x38\x13\xd0\x11\x9b\x71\x5c\xf6\xc8\x59\xef\xa9\xae\xe0\x16\xc9\xee\xb6\xe6\xa2\xb1\xec\xe4\x9e\xd6\xc9\xdd\x17\x1b\x91\x6d\xd1\x48\x6c\x6a\x4b\x03\xa9\xe3\xa0\xef\x1f\x31\x2e\x67\x8f\x2d\xb9\xfb\xf4\xff\xac\xf7\xae\x10\xed\xb3\xea\xeb\xb3\x51\xa5\x23\x10\xde\x70\x72\x42\x8f\x96\x67\xc8\x5e\xff\x94\x49\xf3\x67\x8c\x27\x86\x51\x9c\x74\xd9\x6b\x6a\x15\x27\xcf\x28\xe9\x19\x7a\xee\x11\x22\xe4\xc6\xa1\x3c\xc6\xe2\x0f\x5e\x67\x5f\xd5\xa0\xb5\xcf\xb4\x56\x2e\x39\xbd\x35\x08\xb2\xa3\x80\xef\x77\x7a\x19\xf4\xd8\x7e\xa7\x57\x2b\x19\x1f\x2f\x77\x5b\x7f\x25\xc4\xfb\xbd\xf1\xf0\x8e\xd2\xc1\x24\xe3\xec\xcf\xc8\x59\x90\x0e\x4a\x8d\xe8\x5c\x9c\x24\x65\x74\x06\x48\xf7\x37\x53\x70\xe4\x98\x48\x17\x99\x7a\x19\x27\x49\x23\x69\x3b\x28\x35\x52\x46\x17\x15\x46\xd2\x36\x53\x30\x93\x0e\xf0\x5f\x5f\xab\x0f\xa4\xb5\x91\xfb\xd7\x18\xc3\x69\xcd\xfd\x91\xf1\x01\x74\xa5\x12\xba\x3d\xf9\xf6\xfd\x86\xf7\xfe\xb7\x93\xb7\xeb\xf1\xe3\x02\x18\x8e\x97\x7b\x24\x80\xda\x8f\x9f\xbd\x12\x30\xd6\x2e\x33\x6e\x58\xb1\xc3\x3c\xf8\x23\x99\x13\x63\x37\xa5\xcc\x89\xb1\xa5\x2a\x9d\xb8\x28\x18\xf0\xe5\x8f\x67\x87\x38\x6f\x87\x2d\x64\xbb\xf9\x66\x5b\xc8\xb6\xc3\xa6\x7f\x6d\xe3\xfc\x2f\x7c\x9c\x65\x22\xfd\xe4\xd8\x99\x46\xfc\x0d\x1f\x6f\x9e\x7c\xb4\xed\xb4\xb5\x86\xfb\x6e\xa1\xca\xa2\x71\x5c\x23\xca\x3b\xb5\xa5\xfa\xf0\x7e\x4d\x96\x2f\x94\xb3\xf2\x9d\xa4\x4f\xf2\x17\xca\x9b\x3f\xd6\x98\xf2\x65\x6d\xa9\x2c\x93\x62\xa4\x34\xb2\xe8\x79\x0f\xff\x9d\x70\x7e\x0e\x56\x78\x8d\x73\xc1\xd9\x14\x19\x7b\x76\x82\x61\x57\x49\x7e\x1f\xdc\x95\x33\x32\x95\x13\x3b\x42\xe4\xac\xb2\xf3\xe6\xfe\xcb\x7e\xb2\xe3\xcc\xa1\x06\xf6\xde\xe7\x1f\xde\x79\x78\x87\x10\xd9\xfc\x82\xf6\x47\xed\x39\xed\x8f\x2f\x6c\xde\xfc\x02\x35\x51\x27\x35\xbd\xc0\x6e\xbc\xff\xa6\xb2\xeb\xec\xb3\x76\xfc\x6c\x1f\x3b\x74\xce\x8e\xa1\x9d\x0f\x50\xb7\xf6\xac\xf6\x07\xc3\xc2\xb2\x99\xa6\x52\x93\xee\xd2\xd7\xc1\xe2\x70\x4e\x84\xd0\x83\x48\xf5\xec\x90\xd1\xbb\xa6\x5e\x2d\x67\x2a\xd6\x8c\x23\x59\x64\x30\x56\x27\x65\xcb\x45\x4a\x2a\x4a\x4f\x32\x97\x4d\x95\x37\x24\x93\xec\x56\x25\x97\x55\x7a\x14\x45\xfb\x0d\x2b\x65\x4f\x62\xaa\x9a\xeb\xd1\x5e\x4b\xac\x49\xf4\x26\x93\x6c\x9b\x61\xac\x70\x8b\xa2\xcc\x57\x2e\x51\xb4\xdf\xf4\x98\xfc\x48\x4e\x28\x55\xea\x33\x75\x5b\xc6\xd2\x4b\x23\x3a\x2a\xb3\xa3\x0c\x89\x50\x28\x25\xcb\x1b\x52\xd9\x4c\xaa\x47\x51\x28\x59\x2e\x66\x4f\x3a\x29\xcb\x4a\xda\x6f\x14\xa5\x47\xc9\xe6\x14\x76\x6b\x92\x15\xf3\x49\x1d\x8c\x1e\xe5\x12\x85\x92\x3d\x39\x35\xd7\x43\x4a\x62\x4d\xa2\x47\x51\xca\x1b\xf4\x09\x1d\xb9\x61\x55\xec\x11\x8a\x88\x1a\x76\x6d\x26\x62\x23\x5c\x8f\xb9\xf0\x57\xd0\xd4\x19\x97\x9e\x64\x8f\x92\xcb\x27\xb4\xd7\x8c\xa2\x0c\x44\x7a\x14\x85\xdd\x1a\x2f\xe4\x93\x7a\x75\xb9\x8f\x81\x45\x87\xd5\xe4\x2d\x72\xc3\x4f\x88\x3d\x82\x5a\x3d\xeb\x5d\x6d\xcc\x0a\x5a\x23\xbc\x57\xa5\x6d\xc5\x1e\x03\xcb\x5c\xb2\xbc\x41\x51\xe6\xeb\x0e\x52\x7a\xb3\x6a\xb6\x97\x14\xbd\xfd\x7a\x92\xac\x94\x4b\x96\xd7\xeb\xed\x99\xc8\xe7\x94\x9e\x64\x52\x7b\x8d\x95\xb2\xbd\xbd\x7a\x5f\x28\xc9\x64\x4f\x6a\x94\xe7\x2c\x19\x77\x82\x99\xb2\x5c\xce\x13\x8f\x39\x05\xbf\x2f\xe8\xab\x9c\x35\xef\x60\x29\x96\xcb\x16\xbc\xd1\x8c\xa7\x2a\xaf\x69\xba\x04\x35\x70\xc1\x97\xbf\x74\xf9\x05\x5d\x71\x41\xf0\xb8\xdc\x76\xc9\xee\xe2\xae\xcf\x3d\xc0\x7e\x32\xa0\x64\x65\x06\xee\x9e\xac\x9e\x4a\x67\x2d\xec\x2d\xf9\x4f\x6d\xe8\x5f\x59\x98\x25\xc6\xad\x2e\x9f\xc7\x1a\x8a\x49\xd4\xf4\xc8\x8f\x6f\xa2\x3b\x75\x4e\x44\xd6\xc6\xf0\x00\x41\x9d\x07\xd2\x21\x09\x06\x46\xb9\xf3\xea\xf0\x33\xec\xd4\x26\x51\x95\xef\xd2\xa7\x17\x53\xe9\xf6\x9e\x4d\x7b\x7c\xbb\x6c\x1a\xd3\x2a\x59\x79\x3b\xf5\xda\x42\xb6\x2b\xb8\xa0\xee\xd6\x1e\xd7\xdd\x36\x1b\xf5\x6e\xaf\x58\xd0\xd2\x3b\x21\x23\xfd\x88\x51\xae\x9e\xde\x76\x05\x37\xcf\xb0\xc5\xd5\x33\xd8\xae\xb0\x85\x8c\x0c\x59\xa5\x62\xc3\xe7\x18\xfe\x82\xf0\x9e\x70\xa5\x09\xdf\xf1\xe0\x38\x1e\xdc\x86\xdd\xdb\x31\x00\x39\x0e\xdc\xac\x78\x4c\x40\xd8\x9d\xc7\x04\x7b\xe4\xee\x6f\xc1\x3c\xa3\x58\x19\x8f\x23\xc4\x3a\x32\x42\x46\x08\x48\x97\xa8\xd4\xce\x56\xad\xcf\x38\xbf\xa9\xf5\x19\x87\x05\xfa\x0d\x0f\xf5\xb7\x76\x72\x91\x63\x85\x1a\xe9\x2b\x75\x31\x08\x2a\x67\xca\x50\xe3\xf4\xc4\x7a\xb9\x47\x0c\x33\x57\xbe\x54\x29\xa9\x7a\x48\xd4\x94\x3d\x75\xf9\x29\x67\x9c\x89\x71\x91\x93\x52\xa3\xe7\xde\x04\xd1\x3c\xba\x73\x02\x75\x50\x37\x75\x51\x50\x18\x81\x37\x99\x0f\xe8\xf4\x2e\x09\xc2\x4f\x3b\x1a\x43\xc5\xd0\x45\x1d\xda\x07\x06\xa5\x6b\x1f\x74\x5c\x14\x2a\x86\x1a\x3b\xc8\xa6\x7d\x50\x89\x22\x9b\x39\x08\x6c\x95\x28\xed\x03\xfa\x53\xe8\xa2\x8e\x4b\x3b\x1a\x43\x5f\xd2\x5e\x30\x8e\x52\x67\xbe\x14\x6a\xec\xb8\xb4\xe3\xa2\xd0\x3d\xf7\x54\x63\x28\x63\x9c\xce\x7e\x61\x24\xa6\x76\x3d\xd0\x65\x94\x13\x0c\x2b\x4e\x6f\x75\xc6\x1f\x7f\x06\x9f\x93\xb3\x29\x3d\x40\x12\xfd\xb2\x19\xc2\x26\x99\x53\x76\x75\xca\x67\xdf\xf4\x3a\x4a\x0e\x9f\xcf\x51\x72\x78\x99\xd7\x66\x73\xbe\xee\xb4\xd9\x3c\x3e\xe7\x53\x4e\x59\x18\xcf\x87\x1c\xf9\xeb\x33\x4e\xd9\xe7\x78\xc6\xe1\x93\xe9\x42\xb6\xd6\x2e\x5a\x2c\xa2\xbd\x7c\xa7\xcd\xe5\xaa\xee\x6d\x89\x10\x8a\x70\x20\x80\x16\xcc\xd7\xb9\x24\x4f\x2e\xea\xf7\xf8\x2b\x7c\x5f\xc6\xd8\x61\xf6\x05\x12\x59\x83\x79\xce\xa4\xcd\x73\x63\xb5\x67\xc2\x4c\x09\xcb\xb8\xe9\xc4\x58\x9d\x33\xe6\xd5\x27\xe9\x00\xd7\xaf\x95\x12\xe1\x52\x38\xa1\x75\xfe\xe0\xba\x50\x5b\x6b\x67\x27\x7b\xb5\xb3\xb5\x2d\x74\xed\xf7\x5b\x69\xaf\xd7\xd9\xd7\xd9\x7a\xa4\xd4\xda\x69\x72\x53\x4f\x9e\x7b\xe3\x8d\xe7\xae\x9e\xa1\xaa\x33\x56\xeb\x2e\x7a\xd2\xe9\x7d\xbc\x93\xf6\x97\x4a\x5a\x7b\x67\x43\x63\x23\xb7\xf2\xfe\x96\xce\x45\x9d\x9d\x8b\x3a\x5b\xee\xef\xd7\xd9\xb0\x2a\x4d\x99\x27\x0e\x6f\xfc\xce\x8d\x0b\x1e\x7e\x78\xc1\x8d\xdf\xb9\xd1\x6b\xea\xc9\x24\xf3\x1e\x87\x85\x86\x5e\x39\x1e\xe3\x45\x43\x3f\x9b\x49\x1b\x46\x67\x89\x4c\x9a\x7c\x92\x08\x53\x07\x48\xf1\x98\x93\xc5\x63\x4a\xaa\x83\xcb\x65\xcd\x73\x9f\x8a\xee\x28\x74\xf1\x85\x2e\x3e\x93\x6e\x66\x02\x94\xd0\xa3\xda\xeb\x7f\xdc\x2c\x2b\xa1\x7a\x7f\xe3\x72\xdf\xcd\x24\x7d\x3b\xc4\x14\x5f\x87\xf6\xf6\x6f\x5e\x19\xd8\x79\x8b\x6b\x47\xd0\x3d\xa9\xad\xab\xa9\x6d\x42\x03\xb3\x70\x5c\xd7\xfc\xae\x30\xb3\x9e\xf5\xc5\x67\xd6\x16\x1e\xff\xd6\x37\xef\x4a\xd9\x52\xbe\x58\xaa\x3e\xd5\x1d\x71\x73\x4a\x56\xf9\xf4\x9e\xcf\xfb\xeb\x43\x8a\x5c\xbf\x5c\xbe\x66\x15\x89\xe7\x5d\x30\xa0\x7d\x7f\xed\x9a\x49\xc2\xfc\x62\x6f\x31\x3e\x91\x77\x8a\x0e\x29\xbe\x20\x3f\x55\xe6\x67\xd9\x32\xb9\x2b\x7f\xf9\xd5\x8d\x09\xaf\x8b\xb3\xa6\x92\xb6\x94\x27\x68\x5d\xb6\x65\x7d\x55\xc7\x01\x41\x15\x01\x17\x32\x80\x30\x7e\x87\xc5\x67\x4c\xba\xa9\xa0\xa1\xe0\x14\x72\xd9\x54\x30\xd5\xcc\x0b\x6a\xed\x3e\xd9\x30\xa6\x9c\xda\xd7\x77\xea\x94\x93\x79\x5a\xba\xed\xe6\xa5\x05\xd3\x37\x93\x33\x7d\xfd\x23\xd6\xeb\xbc\xbc\x70\xcb\xb9\x67\xcc\x9d\x7b\x4e\xa6\x4f\x25\x9a\xb0\x78\xfd\x0d\x8f\x5e\x50\x0d\x59\xfe\xd9\x4a\x48\xf5\xc6\x54\x48\xe0\x55\x78\x10\xc5\x14\x80\x94\x54\xc0\x5f\xd1\x87\x8b\x52\x80\x8f\x24\x8c\xbe\x30\x15\xe5\x86\x15\x2f\xf4\x5e\x88\x20\xa5\x64\x0b\x79\x44\x10\x14\xd5\x5d\x6f\xce\x30\x0d\xaf\x66\xbc\xb9\xeb\x73\x74\x07\xed\xa7\x3b\xca\x4f\x84\x7d\xd7\x7e\x2b\xdc\x1a\xde\x7c\xa6\x8f\x5b\xe3\xdb\xa6\xa5\xca\x87\xb4\xd4\x36\x9f\x6f\x1b\xfd\x9a\x39\xe9\xd7\xdb\x58\xf1\xc0\x86\x55\x57\x3f\xa5\x7d\x44\xd2\x53\x57\xaf\xda\x70\xe0\x85\xf7\xde\x63\x27\xb6\x86\xbf\x75\xad\x2f\x1c\xf6\x9d\xb9\x59\xfb\xe5\xac\xf8\x9f\xb4\xb7\x29\xf0\x66\x7c\x56\xfc\x4d\x0a\x68\x7f\x79\xd3\x38\x57\xdb\x2f\x81\x1f\x80\x15\x0d\x98\x81\x93\xf1\x29\x20\x59\xe8\x20\x03\x54\xef\x78\x38\x93\x3a\x9c\x15\xed\x6a\x2e\x5b\xe8\x20\x13\xe2\x68\xda\x38\x55\xda\xcc\x05\x03\xb2\x4f\x94\x28\xc0\x1b\xea\x67\x3e\x5e\xc8\x27\x0a\x4a\xaa\xd0\x4c\x41\xd6\xb6\xf0\xac\x0b\x66\xbc\xb9\xeb\x6b\xec\xe6\x51\x2c\xe8\xf3\x74\x89\xb6\xec\xe2\x29\x36\xaf\x7d\xb3\xbb\xfd\xf6\x83\x4b\x7c\xbe\x2f\xd1\xb3\xe4\x38\xfb\x9c\xbc\xcd\x2b\x84\x12\xcd\x51\xce\x9d\xbc\xef\xb3\x54\x6f\xa1\x92\x2f\x35\xfb\x6e\x6d\xc3\xef\xe6\xef\xa7\x8b\xaf\xbe\xf2\x6b\xdd\xe7\x7d\xe3\xc4\x9f\x7c\xa1\xbb\xb4\x5a\xc7\x53\xd3\xd8\xa5\xa3\x68\xfe\x55\x62\x4f\x97\xed\xfb\xce\x76\xcf\xb6\x79\xed\x3d\x27\xbd\x7a\x73\x4b\x6f\xcb\xdb\xe4\xf6\x9c\xef\xb6\xcb\x5e\x99\xd9\xb4\xc9\xb7\xbe\x99\xa6\x0f\x4e\xd8\x32\x3b\x56\x3c\xed\xd1\x67\xb6\x78\xdf\xdd\xf7\xad\x2b\xd7\x15\xbf\x79\x9e\xd9\x77\xee\x61\x55\x1c\x34\xe8\x29\xaa\x53\x54\xf2\x13\xe7\x24\x8e\x02\xd2\x88\x95\x27\x75\x51\x3a\xc0\xd7\xec\xd5\x32\xaf\xcd\x51\xf7\x7a\x9d\xa3\x32\x2b\x39\x38\xc4\x93\x9e\x69\xb1\xc3\x88\x4d\xf3\x24\xe3\x1c\x3c\xd3\x67\x4f\xbf\xff\x19\xa7\x2c\x3b\xf5\x17\x6d\xa1\x9f\xd9\xa5\xba\x3a\xc9\xa9\x15\x6c\x0e\x07\xb7\xf7\xb0\xda\xdd\xdd\x14\x8b\x35\x75\x77\x0b\x6a\x4b\x22\x51\x59\x93\xd6\x08\x6b\x90\x06\x28\x20\xba\x48\xae\x6a\xbb\x53\x56\x32\x34\xdf\x6d\xa4\x4c\x62\x4a\x4a\xe9\x36\x59\x1a\x2b\x99\xee\xa0\x50\xe8\x22\xa1\xaf\xbd\xd8\x7b\x7f\xbf\xe0\x51\x25\x3b\xcf\xb9\x44\xed\xbf\xb5\x72\x4e\x70\xf4\x59\x9d\xcc\x65\x7d\x7a\xa8\x8e\x91\xad\xcf\xea\x14\xd9\xf7\x89\xd3\x78\x27\xc7\xea\x54\xa7\x9b\x7d\xa9\xbf\xb7\x24\xf4\x65\x4b\xbd\xf7\x97\xe7\xca\xce\x3e\x91\x38\x07\x0d\x69\xe5\xef\x7b\x9c\x7d\x56\x56\x37\xf4\xb4\xe4\x76\xd8\xcf\xb7\x52\x8e\x38\x0a\x5a\xdc\xee\x3a\xd5\x21\x7c\xb5\xbf\xb7\xa8\xaf\x64\xc3\xe6\x1e\xc5\xd1\xb6\xd0\x55\x2b\xe8\x53\x71\x25\x10\xac\x58\x72\x27\xc7\x7d\xa9\xd6\x3f\xa2\xbc\xa9\xcc\xc7\x35\xe9\x0a\xe3\xe2\x92\xe3\x4e\x8d\x54\xc4\xbd\x68\xcd\x5d\x02\x01\x95\x22\xda\x00\xf5\x51\x51\x2b\x69\xfd\xe3\xdd\x6c\xc0\x70\xab\xfa\x9b\x83\x1e\x62\xba\xb5\xfe\xd1\xa3\x34\x6c\x60\x34\x9c\x8c\xd2\x22\xa3\x91\xa4\xf6\x66\x0f\x1b\x27\xd8\xd5\xe5\x33\x8b\x33\x97\x93\xf9\x51\xb3\xbd\x66\xbd\x91\xa2\x91\xad\x58\xa4\xc8\x10\x28\x42\x25\xf3\x5b\xa4\x22\x8b\x50\xc4\xb0\x7a\x1d\x70\xc8\xf2\xd0\xd7\x8d\x24\x7a\x86\x52\x4d\xf0\x82\x23\xc6\x85\x27\x02\xb2\xbd\x7d\x33\x97\x2f\x9f\xd9\x67\xbe\x7b\x2b\x72\x4c\xbf\x04\x61\x00\x5e\x14\x70\x39\x40\xa2\xd4\xc1\xd7\x98\x29\x54\xf7\xb0\x67\x50\xcc\x49\x1d\x62\x2a\x5f\x68\xe6\x33\x51\xf3\x28\x01\x79\x47\x22\xa3\x31\x27\x93\x44\xc9\x59\x6b\xe1\x60\x18\xf3\x75\x89\x23\xa9\xd9\x3d\xd3\x17\x04\x9a\x33\x99\x9e\xf6\x01\xe3\x78\xeb\x61\x41\xb4\x6a\x25\xab\xd3\x21\x47\x2e\xe9\x5c\x9a\xed\x4d\xcf\xcc\x4e\x6d\x9c\x56\x49\x42\x18\x3d\xee\xa7\x27\x19\xc6\xe4\x85\xd3\x27\xd6\x47\x3a\x9a\x26\x9c\x3c\xe3\xac\x73\x37\xcd\x32\xcb\x18\x17\x58\xcd\xc5\xb7\x2c\x7b\xe2\x84\xc2\xdc\x09\x4d\x86\x8a\x61\xc8\x19\xd6\x4b\x91\x1d\x25\x22\x4e\x72\x06\x63\x1d\x33\x52\xe7\x3e\x6e\xc4\x97\x9c\x5e\x9b\xf6\x3d\x6e\x63\x35\x41\xf3\xf4\xee\x8e\xae\xb5\x33\x97\x6e\x5a\x74\x66\x26\x6a\x64\x1e\x13\x62\x26\x1f\xdd\x7f\x11\x00\x9d\x35\x75\x33\x3e\x1e\x4b\x89\x82\x28\x89\x4a\x2a\xa7\xe4\x15\x7d\x11\x14\x0a\x0a\xcb\x65\xbb\x28\x91\x49\xf3\x12\x06\xb5\x15\xef\xcf\xee\x79\x56\x3b\x3c\xe5\x24\x4f\x23\xcf\x09\x64\x63\x76\x26\x4d\xf6\x4f\xa8\x6f\xae\xfb\xca\x13\xb7\x0d\x52\xef\xb7\xdf\xa7\x7b\xb9\x0e\xed\x21\xed\xd7\xff\x6a\xf9\xc6\xc9\x4e\x0b\x0b\x78\x89\x77\xf3\x2e\xce\xc9\x2c\xb9\x60\x67\xc7\xdc\xd6\xb3\x49\xbc\xfb\xb3\xef\x3c\xba\xf2\x5f\xc7\xca\xfc\x19\xe3\x24\xaf\xdf\x67\x70\x45\xd5\x95\xac\x89\x7c\xcd\x5c\xba\x8b\x1b\x59\xd9\x3e\x51\x9b\xff\x23\xed\x7e\x6d\xae\x76\xff\x8f\xcc\x93\x1b\x93\xa6\x9f\xde\x31\xb1\xe3\xf4\xe9\x93\x4c\xef\x10\x94\x90\x66\xde\xba\x56\xb9\x9c\x68\xd4\xc7\x4a\xea\x4f\xb4\x67\x9e\x78\x82\x66\xfe\xc4\x54\x31\x66\x7b\x95\x00\xcf\x07\x74\x41\x28\xa4\x28\xec\xc2\xd1\xa4\xb5\xd9\x2a\xfa\xe1\xa5\xf0\x8b\x8f\xf0\x11\xf8\x80\xa4\x54\x7b\xb3\x48\x75\x8f\xea\x4e\x43\x35\x7c\x94\x36\xf8\x85\x87\xab\xda\xdd\x87\xe5\x9c\xcc\xde\x94\xe5\x72\xa3\x9c\xab\xea\x87\x07\xc4\x47\xb8\xb7\xab\xfa\xe1\xa3\x76\xef\xc4\x3b\x0d\xfd\xf0\x51\xda\x60\xf6\x6a\xb9\x51\xd6\xcb\xca\xc9\x0f\xcb\xb2\xa9\x98\x7e\xd8\x28\xd4\xe4\x8d\x54\x5e\x45\x12\x3d\xd5\x3b\xae\x3a\xb8\xe9\x34\x83\xc6\x9c\x7c\x35\xcf\xfd\x47\x8d\x5d\xff\xea\x46\x5c\xce\xdc\x89\x33\xa5\x55\xe3\x62\x0f\x2e\x4c\x4d\xe4\xc9\xa4\x03\x02\x64\xc7\x50\xd1\x52\x27\xf1\xac\x14\x52\x5c\x54\x94\xa7\xcb\x54\x74\x29\xa1\x12\x2b\xba\xad\xfd\x12\x53\x5d\x5a\xc9\x37\xd5\xa7\x95\xf4\xb0\x72\x49\x0f\x93\x1d\x5c\xa9\x9a\x23\xe2\x90\x79\x9b\xe8\x11\x7d\xd4\x4f\xfd\x4a\xa8\xde\x43\x6a\x20\xa0\xa9\x9e\xfa\x90\xa2\xa9\x75\x25\x1b\xdd\x55\xef\xd1\xd4\x60\x90\x8c\x20\x52\xed\x25\x6b\xdd\x68\x16\xad\xaf\x46\x7f\xa4\x0a\xe6\x19\xea\xa9\x40\xa2\x62\x6d\xc1\x57\xbe\xb2\xc7\x27\x4a\x42\xc0\xef\x93\x46\x2e\xe7\x33\xf8\x3c\x2e\x6e\xde\xd2\x97\x6e\xe6\x83\x86\xd5\x85\x71\x73\x07\xf7\xbc\xf1\x79\x3e\x5a\x7f\xe4\x80\xa3\x9e\xdb\x65\x5c\xd8\x87\x90\xe2\x76\x37\xb2\x7f\x7b\xde\x54\x74\xbb\x1b\x9c\x76\x5e\x22\xfe\xdf\x42\x4a\xd6\xb8\xed\xc3\xfc\xe3\x4a\x1a\xea\x93\xdc\xe6\xe9\x36\xf7\x64\x45\x97\xb0\xea\x26\xb4\x4c\x11\xb8\x82\x92\x55\x1c\xde\x16\xbf\x22\x29\x18\x73\xde\xcd\x77\xf4\xfe\x51\x93\xa1\xeb\x50\xb7\x2c\x3b\x52\x5c\xb6\x65\xcb\x32\x2a\x2e\xdb\xc2\xfa\x97\x6d\xe1\xfa\xcb\x86\x9f\x2b\xe9\xef\xc8\x96\x91\x3d\x71\xe9\x2c\x41\x85\x8c\x89\xa6\xb4\x6f\xae\xcb\xd5\xe3\xee\xe9\x00\xf9\xa3\x31\x51\x22\x29\x3b\xb6\x7c\xe9\xac\x16\x6d\x6f\xdb\x97\x67\x1e\x29\xc5\x72\x2d\xb4\xa8\xed\xcb\x33\xf9\x62\x2c\xa7\xed\x19\x2a\x2d\x7f\x71\x86\xf6\x0d\x81\x2a\x15\x47\x96\x6d\x61\x73\x5b\xe2\xda\xfa\xcc\x9c\x50\x73\x4b\x9c\xb6\x65\xe6\x84\x68\x6a\xff\x79\x73\xb5\xf5\x22\xef\xe1\x6b\x80\x21\x14\x87\xc1\x4a\xa2\x61\x5b\x03\x83\x88\xc6\x6f\xe5\x8e\x6e\xdc\xb2\x92\x12\x1a\xbf\x4d\x5b\xb3\xcd\xca\xbf\x96\xd5\xc7\x6b\xcd\x2e\x2c\x8f\x91\x4d\x57\xb3\xfd\xa8\x28\x81\x2b\x99\x75\x55\xf7\x8e\xc7\xef\x14\x8f\xdd\x17\x3e\x66\x81\xa3\xbb\xbe\xe3\x76\x79\x2b\xbb\xba\x95\x7b\x58\x2c\xd5\xf3\x4d\x0e\x78\xe0\xd7\xfb\x2c\xea\x31\x4f\x61\x45\x3d\x19\x4f\xd5\xc7\xd4\x61\xe8\x8f\x80\x0f\xa1\x0a\x30\x3d\x4c\xd5\xc0\xc0\x30\x04\x1e\x47\x54\x55\xc4\x61\x95\x53\xcb\xe0\x40\xea\x11\x7d\x34\x8e\xea\x2c\x26\xa3\x68\xac\x5e\xf9\x82\x28\x99\x4c\x68\xb0\x83\x52\xfa\x47\x49\xf9\x7d\x81\xa0\xce\xf3\x34\x93\xf1\x09\x64\xd2\x5d\x5c\x2e\x9b\xca\x1f\x35\x29\xa2\xf3\xa4\x59\x0d\x27\x9d\x32\x63\xd9\x59\x9f\x11\x6e\xf8\xc3\xa9\x4d\xe7\x4c\xca\xad\x98\xd7\x14\x70\x84\xfc\xab\x67\xad\xbf\x23\x54\xbf\xf3\xb1\x75\x3f\xdc\xb6\x72\x0a\x75\xd3\xc4\x3d\x1b\x87\x0c\xbb\x26\xae\xb4\x71\x0f\x77\x5f\x83\xb5\x75\x81\xe2\x98\xf9\x99\xb3\x9a\x64\x69\xfd\xf9\xe9\xce\x2b\x66\x50\x03\xeb\xd9\xe0\xb4\xf0\xdd\xa7\xd3\x52\x6e\xf9\x9c\x8d\x5f\xde\xb3\xd8\x6b\x3d\x81\xd8\x68\xae\x3d\x63\xf6\x42\x13\xc0\xc8\xa6\x9e\x27\x53\x88\xeb\x53\x45\x21\xa7\x18\x7a\xf6\xb8\x3f\x53\xbd\x69\x23\xc3\x0f\xe8\xf9\xf7\xfd\xb8\xf9\xcd\x49\xb3\x36\x77\x5f\xb9\xf5\xc1\xe7\x9e\x2b\x1f\xd0\x83\x0c\x93\x84\xe2\xc6\x3d\xec\x8c\xb7\x76\x76\x76\xd2\xcf\xad\xfd\x3b\xfe\xf5\xad\xf2\xd7\xcd\xba\x4c\x11\x63\xf4\x4e\x1c\x9d\xaf\x8a\x23\x85\x0e\x74\x55\x24\xbd\x1a\xae\x3d\x5f\xb5\xb6\x8a\xe6\xa2\x70\x2b\x11\xd1\x1d\x88\xe8\x6e\x2e\x3a\x83\xa2\x52\xed\x11\x7a\xf3\xe2\xb5\x7e\xaf\x73\xe6\x72\x6f\xd8\xdb\xd9\xea\x3c\x64\xd8\x1c\x0d\xdd\x2d\xe2\x30\x78\xb5\x72\xb1\xdf\xd0\xef\x49\xd5\xf4\xce\x1b\xfa\x61\xb1\x7c\x8d\xa8\xf6\xe4\x0e\x23\xd7\xd3\x93\x13\x91\xeb\x61\xdf\x0c\x7b\x97\xcf\xd4\xd7\xf2\xd6\x4e\x8b\x61\x96\x34\xf4\x7d\x95\x5a\xa8\xeb\xf7\x7a\x66\x9e\xa9\x5a\xe9\xaa\x5b\x54\xf5\x88\x91\x41\xd0\xdf\x46\x9f\xcf\x15\xef\x34\xe4\xd4\x39\x15\xfb\x27\xbd\x9b\x0d\x71\x5b\x47\x41\xef\x60\xe3\x66\xcd\x0e\x96\x92\x82\x15\x05\x9a\x69\x89\x97\xf5\x26\x2a\xb7\x41\x16\xaa\xc7\x29\x9b\x79\xae\xb8\xae\x7f\x9d\x3c\x61\xe2\xa2\x75\x95\x2f\xf7\x83\x0b\x3c\xd6\x54\xac\x8d\xeb\x7b\x3d\xbc\x70\x62\x6b\xb8\x7c\xfe\xde\xa7\x1f\x7c\xe1\x19\x4a\xf7\x3f\xf8\xc2\x8d\xf4\xe9\x3e\xae\x23\x16\xb9\xc0\xe3\xb0\x89\x8b\x16\x9f\x7d\x22\xb7\xb7\x7f\xdd\xba\x45\x13\x27\xc8\xeb\x2a\x5f\x0d\x9e\x0b\x22\xb1\x0e\x3d\x73\xeb\xc4\x85\x61\xf6\xd5\x1b\x5f\x78\xb0\x9f\xd2\xcf\xbc\xf0\xe0\xd3\x7b\xb5\xaf\xf4\x71\x6d\xb1\x94\xd5\x73\x81\x4d\x5c\x70\xfa\xd2\x99\xa6\x1a\x01\xc3\x2e\x49\x15\x06\x21\xc1\x83\x46\x5c\x8f\xa7\x71\xa4\xc6\xae\xcb\xc4\x2f\x90\xce\x7b\x46\x5c\x35\xf7\xfc\xf8\x3f\xe6\xa2\x9f\x7f\xfc\x9a\x9f\x9a\x4b\x7e\xc8\xb0\x09\x32\x2c\x83\x74\x21\x5f\x8c\xa5\xf4\x7a\x8c\xec\x4a\x4a\x31\xcd\x83\x8c\xb2\x58\x26\x1d\x08\xe6\xd3\xc1\x7c\x37\x99\x25\x04\x82\x01\xcf\x3f\x93\x99\x53\x0d\x2a\xe2\xee\xee\x5d\xd5\xdb\x73\x49\x8f\xf9\xd6\x54\xa7\xf5\xcb\x75\xfe\x58\xa7\x24\x05\x37\xca\x75\xb6\x2b\x93\xad\x75\x76\x29\xf8\x9d\x3a\x2f\x05\x63\x13\xae\x92\x1c\x75\xb6\xed\x92\xad\xcb\x1d\xb4\xef\xb2\x39\x47\x92\x06\x36\xe9\x49\x63\x6d\xb5\x49\x2d\x76\x3d\xa9\x7d\xba\x2b\x58\xb7\xcb\xe6\x64\xea\x5d\x76\x6f\x86\xdf\xcc\x2c\xbd\x4e\x9f\xcf\xe7\xec\xb5\xb0\xcd\x7c\xc6\x6b\xbf\xeb\x2e\x87\x27\xc3\xf3\x5d\x9d\x95\x88\xcc\x04\x91\xdf\xc4\x67\x3c\x8e\xbb\xfe\xd1\xf4\x95\xab\x8c\x86\x0d\x26\x3c\xd7\xd3\xc3\xe7\x2a\x0e\x6d\xfb\x53\x36\x99\xea\xe3\x13\x26\x9f\x5c\x67\xb5\x4b\xcd\x1b\xa5\xa5\xb2\x7d\xcd\xa4\x7a\x97\xed\x4b\x36\xff\xd9\x92\xe5\x73\x8d\x56\x9b\x73\x61\xa0\x5d\xa9\x27\x4f\x5d\x6d\x52\x4b\xf3\x55\xd2\x52\xaf\x73\x4d\x47\x4d\x52\x4b\x9d\xbb\x37\x30\x39\x16\x64\x9e\xf2\xc0\x36\xb7\xab\xb1\xe1\xf2\x06\x9e\x9b\xb3\xdc\xcf\x98\x7f\xf9\x1c\x8e\x6f\xb8\xbc\xa1\xd1\xe5\xde\xe6\x76\x35\x05\xf5\x08\x96\x88\x9c\xeb\x67\x6c\xce\x04\x36\x5b\x8f\x0b\x36\xb9\xb8\xc1\xff\x4d\xae\x11\xbb\x11\x83\x17\x4e\x1a\x56\xaf\x6e\xd1\xe0\x86\x8d\xeb\x80\x94\x94\x92\xed\x12\x0a\x5d\xbc\xa1\x22\xc8\x27\x22\x3c\xf9\x44\xa9\x99\x0f\x36\x8b\x3a\xa5\xa5\x94\x94\x92\x12\xe3\x11\x7d\xc4\x26\x0a\x5d\x94\xcb\xa6\x9a\x49\x50\xf7\x69\xdf\xfd\x8f\x33\x97\x5e\x73\x4f\x22\xcd\xd5\xc9\x8c\x88\x63\x02\x27\x92\x90\x70\x37\xf9\x6d\xd7\xdc\xb6\x8f\x4e\xa1\xeb\xe8\x14\x36\xfd\xb6\x6b\x6c\xfe\x26\x77\x42\x20\x91\x13\x18\x47\xc4\xf9\xec\xe9\xc4\x3d\xd7\x2c\x3d\x53\x3b\xf8\x93\xa9\xcd\xf7\x53\xeb\xfa\x6b\x6f\x0a\xde\x70\x37\x77\xab\xf6\x97\x03\x37\xbb\x97\xb4\x5a\x25\xb7\x83\x93\x44\x91\x97\x38\x89\x44\xc5\x9f\x6c\xad\x9f\xfb\xcb\x8d\xb7\x1e\xb8\xf9\xe6\xf2\xcd\x9b\x7e\x31\xb7\xbe\x35\xe9\x57\x44\x92\x38\x89\x17\x45\x89\x73\xba\x49\xb2\xb6\x2e\x71\x6f\xe1\x97\x2e\x5e\x36\x78\xd3\x82\x9e\x39\xaf\x8c\xf0\xdd\xc6\xd9\xb9\xe9\x58\x3b\x7a\xdb\x0c\x65\x95\x78\x34\x9b\xcf\x65\x95\xf8\x88\x24\xe4\xc9\xe8\x9c\x91\x2e\x62\xe6\xb2\xa9\x2e\xca\xa6\xf4\xe8\x54\x17\x15\x7c\xc6\xc8\x30\x1e\xb1\x8d\xe9\x8d\x34\x3a\x9f\xea\x83\x52\x97\x9c\x32\xe9\x66\x7d\x04\x66\xd2\x01\x32\xaf\xa4\xe1\x1f\x59\x98\xd6\xfa\xfb\x8a\x7d\xa1\xfa\xe4\x84\x40\x81\x57\x1a\xda\x13\x13\x52\xee\x48\xc4\x91\x6c\x9a\x14\x9c\x2c\xbc\x7c\xe3\xd5\x25\xa1\x39\xee\xcd\xf9\x5c\x91\x36\x75\x8a\x55\xe1\xa6\xd3\xa3\x5f\x48\x9c\xdb\xf7\xdd\xcf\xac\x0f\x68\x03\xfa\xfc\x49\xde\xc4\xca\xa9\x53\xea\x83\x4a\x5b\x2a\xb3\xf8\xa6\xd9\x93\xf7\xae\xda\x65\xde\x59\xc3\xd4\xcc\x82\xa9\x3f\x9b\x76\xc1\xf2\xd0\x55\x9f\x6b\x0b\xce\x12\xd2\x91\x5c\x3c\xe1\x2d\xab\xa2\xe4\xb2\x78\xd8\xbc\xaf\x85\x9a\xdd\xf3\xe6\x47\xd2\xa7\x34\xcc\xf0\xd0\xb2\xc4\xd9\xf3\xa3\x89\x05\x27\xfb\x03\x2b\x17\xdc\x7a\xff\x09\x6d\xad\x3d\x39\xa6\xe6\x7a\xea\x6f\xec\xc9\x35\x5c\xbd\x65\x62\xf2\xa4\x5b\x36\x9c\xfb\xe9\x5d\x18\xb9\x83\xc9\xb0\x25\xed\xd2\x65\xcb\x9a\x19\x2d\x65\xf4\xb5\xd1\x1e\x79\x53\x63\x22\x39\x05\xb3\xc5\x84\x60\x20\xd8\xcc\x82\xfa\x44\xae\xe4\xa2\xe9\x7c\x41\x5f\x11\xab\xd3\x9c\x61\x36\x9a\x52\x52\xa3\xcb\x4f\xa1\x8b\xf4\x29\x4c\xf2\x8f\x34\xe9\x48\x7b\xb5\x45\x5c\xbe\x9c\x37\xde\x2c\x5c\x70\x96\x7a\xe3\xcb\xc2\xe4\xe0\xa4\xa6\xa4\x23\x12\x71\xa7\x26\x24\xda\x1b\x14\xbe\x10\x98\x90\xac\x0f\xf5\x15\xfb\xa8\x2f\xbd\x50\xdd\xb5\x6a\xef\xe4\x78\xfc\xa6\xc5\x99\x54\xac\xb5\xae\x5e\x9e\x3c\x6d\x65\x42\x7b\xd7\x68\xb4\x48\x60\xbd\xfa\xcc\xc5\xeb\xb6\x7d\x9d\xa6\x73\x8a\x75\x0a\x6f\x1e\xb2\xd4\x10\x5f\x46\x9e\x19\x0d\xa7\xa4\x5b\x94\xe4\x3c\x77\x73\xe8\x53\xa7\xcf\x63\x1e\x8b\x4b\x12\xcb\xaa\x37\x11\xcf\x45\xd2\xc2\xac\x60\xdb\xe7\xae\x0a\x2d\xbf\x60\xda\xcf\xa6\x2e\x48\x5f\xb4\xeb\xd3\xe7\x5e\x35\xeb\x94\x93\x92\xd1\x0b\xce\x38\xd3\x9f\x5e\x70\x63\xbd\xd9\x6e\xad\xed\xed\xf7\xdd\x2c\x2c\x58\x19\xf0\x9f\xbc\x20\x11\x9d\x57\xe1\x09\xbe\xce\x15\x0d\x99\x1c\xe4\x39\xea\x76\x5f\xae\x38\xfe\xf6\x5e\x61\xe0\xf0\x8f\x8e\xbe\x9e\xb7\x76\x6c\xaa\x08\xe3\x44\x80\xb2\x1d\x9c\x21\xa9\xeb\x0d\x19\x73\x72\x7e\x9f\x2e\x13\x15\x2a\x7c\xe6\xb8\x3b\x93\x45\xb5\xed\xe4\xbe\x65\xab\x36\xad\x9c\x5b\xef\xed\xf2\xd6\xcf\x5d\xb9\x69\xd5\xb2\xbe\x93\xdb\xbe\xcb\x4e\x61\xb3\xf6\xa9\x6f\x96\xef\xf0\x1e\xe7\x3e\x65\xee\xd1\xd3\xae\x99\xd7\xe1\xce\x2c\x38\x39\x1c\x08\x84\x4f\x5e\x90\x71\x77\xcc\xbb\xe6\xb4\xdd\xdf\x2d\xbf\xc4\x26\xed\xdb\xfd\xdb\x37\xcb\xbb\xbd\xc7\xba\x6e\x79\xd4\x4e\x35\x22\x00\xad\x3a\x3f\x97\xf4\x05\x9c\xac\x96\xd7\xf0\x57\x02\x2a\x76\x9a\x53\x59\x33\x37\xb2\x63\x36\x92\xcc\xdc\x21\x63\x2a\x23\xc1\xe5\xd0\x0c\x2b\x4d\x2a\x3a\xe4\x8a\x77\xe6\xf2\xe5\x33\x29\x42\x3e\xd1\x23\xda\x78\xae\x5f\x2e\x0f\xc8\x59\xc5\xd8\xfb\x09\x51\x49\xc9\xca\x2c\xd2\xc7\x47\xfc\x21\x87\x69\x98\x2e\x3b\x0c\xcf\xf2\x99\xe5\xe2\xcc\xe5\x8c\x97\xea\x58\x3a\xab\x67\x51\x42\x14\xa9\xdc\x71\x10\x09\x29\x72\x79\xa0\x7a\x0e\xd8\xe4\x75\x5d\x48\x22\x07\x14\x32\x9e\x78\xa1\x83\x8c\x55\xdb\xdc\x15\xf0\xe8\xbc\x96\x94\xc9\xc5\x03\x5c\xc6\x63\x2e\xc4\xfe\xf1\x6c\xe8\x3b\x7f\xfe\xf3\x07\x34\x7b\xfd\xbc\x39\x27\xd2\xb4\xb9\x6c\xde\x9f\x77\x6c\xda\x3a\x8f\xfd\x99\xe3\xfe\x2c\xb9\xa6\xb7\xaf\xa7\xfd\xb5\xac\xe7\x66\xf6\xed\x57\xb2\xb3\x66\x65\x33\xa7\x9c\x32\xf4\x35\xba\xed\x9e\xfb\x36\xac\x9c\x59\xde\x46\x5b\x14\x6f\x7c\xca\x57\xd8\x95\xb5\xdc\xa6\xa1\xfb\x36\xee\x4c\xa9\x43\x87\x4e\x59\x06\x3b\xe1\x31\xf8\x09\x1d\x00\xce\x49\x6d\x14\x4b\x71\x86\x04\x94\xcf\x78\x2a\xc2\x9d\x2e\xf1\x79\xd2\x01\x1a\xf0\x86\xbd\xde\xb0\x97\xf5\x2b\x21\xed\x8c\x0c\xf3\xd8\xa9\x51\xe8\xd5\xd6\x84\x94\xaf\x7c\x7a\xe4\xea\xc5\xec\xa7\xbf\xc2\xfa\xc9\x30\xed\x30\xee\x25\xd3\x1e\x0b\x29\x5a\x93\xdd\xd3\x48\x6f\x2a\xa1\xcf\xfc\x88\xc1\x94\xf3\x34\xfc\x68\x44\xfe\x32\xfe\xcf\xe0\xb1\xee\xff\x6d\x32\xef\xf7\xad\x35\xf4\x1f\xb9\x85\xf1\x58\xfb\x7e\xa3\x26\xb9\xcc\x00\xa0\x5c\x1c\xb1\x3f\x36\xae\x47\x53\x95\xac\xbc\xb7\xbc\xde\xdc\xfe\x63\xdb\xf6\xca\xa6\xa9\x22\xeb\xd3\x4a\x55\x43\x5c\x23\x61\xd5\x08\xd7\xb8\x90\x91\x3b\x5d\x43\x48\x31\xf2\x19\xbb\x80\x7a\xbe\xac\xa2\xd4\xdc\x31\x15\x34\xfe\x97\xf0\xb1\x69\xd0\x3a\x82\x53\x56\xe9\x62\xd5\xd3\x0a\xf1\xe8\x44\xa6\x33\x9f\x66\x50\x80\x3f\x16\x09\xd2\x95\x7b\x36\x6a\xa5\x0a\xcd\x92\x81\x89\x36\x50\xa1\xd9\x4a\xd8\xc6\x3d\xba\xf8\x75\x2c\x52\xa4\x4c\xb9\x58\x43\xb9\xac\x64\x52\xae\xc5\x24\xeb\x11\x79\x5f\x85\x08\x07\xe6\x01\xa4\xe4\xa2\x7e\x5f\x20\x99\x8b\xfa\xa4\x2e\x2a\xf8\x7d\xe6\x0a\x46\xc6\xc6\x4f\xb5\x1f\xcc\x3d\x12\x63\x56\x4e\x29\xa9\x8e\x8a\x62\x29\x57\x23\x15\xd3\x4f\xe7\x0f\xe3\x69\xfe\x07\xc3\x98\xff\x85\xa7\xd5\x33\xbe\xf0\xc2\xe5\x13\x73\x4a\xd3\x8c\x93\x7b\x36\x78\x9d\x43\x25\xa7\x77\x43\xcf\xc9\x33\x9a\x94\xdc\xc4\xcb\x5f\xf8\xc2\x19\x9d\xad\x14\x59\x3e\x93\x15\x67\x2e\xa7\x48\x6b\x27\xfb\xc2\x03\xbf\xe8\x5b\xb8\xfb\x83\xbe\x5f\x3c\xd0\xb4\xfb\x45\x75\xce\xf6\xf5\xa7\x0a\xf9\x09\xb1\x05\x99\xfc\xfc\x73\x4e\x31\x6f\x98\x39\xe5\x9c\xf9\xf9\xcc\x82\xd8\x84\xbc\x70\xea\xfa\xed\x73\xd4\xd6\x4e\x53\x87\xd9\x69\xfe\x43\xbd\x91\x33\x0b\xba\x64\xd3\x82\x14\xda\x91\xc6\x0d\xb8\x03\xa0\x7c\x4a\x91\xc4\x60\xc0\x7c\x17\xf2\xa9\x8a\x3f\x98\x57\x52\x8a\xf1\x35\xfc\xcd\x94\x8d\xc7\x7c\x05\x3d\x24\x4f\x59\x44\xe0\xf7\x79\x83\x01\x5d\x96\x70\xb2\x0e\x32\x10\x36\x56\xe4\x60\x33\x19\x17\x50\xe9\xfd\x57\x50\x0a\xf9\x40\x8b\x2e\x91\x77\xb1\x60\x40\x5f\x7b\x9c\x9c\x64\x1e\xd5\x0e\x14\xf2\xde\xf1\xf4\xcc\x24\x5e\xb2\x0a\xbc\x64\x0d\x0a\x92\x28\x4a\x82\x38\x89\x49\x12\x71\x92\x25\xc0\x88\x13\x2d\x82\x78\x0e\xab\xb3\xf2\xac\xce\xda\x61\xb7\xcd\x60\x01\xc6\x7c\xec\xb3\xe6\x59\x87\x1f\xde\xe3\xf5\x90\x28\x67\xdb\xdb\x2c\xc1\x18\x13\xea\xb8\x3a\xa7\xe8\x9d\x68\x77\xb7\xb5\x47\x9c\x52\x68\xca\xfc\xb9\xa9\x5c\x7d\x93\x3c\xa7\x21\x34\x75\xdb\xd4\xba\x78\xaf\xdc\x54\x9f\x0b\xb7\x15\x67\x28\x71\xf2\x78\xef\xf9\x21\xa1\x76\xbe\xa0\x45\xa2\x24\x09\xa2\x24\x75\x48\x1c\x6f\xb1\x70\xfc\x14\x9e\x67\xbc\xc0\x31\x99\x24\x26\x59\x24\x71\x8e\xc4\x73\x92\xc4\x73\xbc\xdb\xed\x92\x78\xc9\xc2\xd3\x29\xc6\xd1\x90\xfd\x5f\xd3\xfe\x96\xe5\xdc\xf6\x6c\x1b\x71\x64\x6d\x09\x4d\x73\x91\x50\x67\x91\xf8\xc6\x40\x38\x2c\x89\x93\x02\x62\x43\xee\xd3\xb3\x4f\x9d\xda\x35\x5f\x6c\x74\xbb\x3d\x9e\xff\x1f\x73\x6f\x02\x27\x47\x55\xee\x0d\x9f\xe7\x9c\x5a\x7a\xab\xea\xee\xaa\xde\xa6\xa7\xa7\xa7\x7b\x7a\x7a\x99\x3d\xe9\x75\x26\xb3\x75\x26\x7b\x66\x92\x4c\x56\x02\x09\xc9\x90\x8d\x30\x6c\x09\x10\xc2\x92\xa5\x84\x08\x84\x20\x5b\x24\x44\x14\x33\x20\x0a\x88\x5c\x11\xaf\x0b\x1a\xb4\x55\x44\x5f\x11\x24\x5c\xb8\xb8\xa0\x77\x50\xaf\x17\x15\x94\x57\x2f\x2a\x99\xe9\x9a\xef\x57\xa7\x7a\x9b\xce\x84\xe0\xfd\xbe\xf7\xfd\x7d\x90\xe9\x3a\x55\x75\xaa\xea\x9c\x53\xa7\xce\x79\xce\xb3\xfc\xff\xbc\xcb\xcf\x2d\xed\x9b\xb3\xa2\xeb\xbc\x54\xa3\x8d\xa9\xcf\xc6\xb6\x60\x8b\x8d\x24\xc1\x8c\x6f\xad\x1c\x93\x8a\xd8\x09\x39\xfa\xee\xe8\x38\xf0\xc1\xf8\x7d\x14\x68\x33\x9d\xd1\xba\x9b\x6e\x5f\xd7\x4f\x05\x1b\xa2\x91\x82\x0a\xee\x6c\x08\x7e\x4f\x38\xb7\xf6\x02\xea\xdd\xea\x84\x27\x28\x88\x5f\xf3\x14\xd2\xfd\x54\xa7\x50\xb3\xdd\x5e\x0f\x39\x29\x2d\x41\xae\x3e\x72\x16\x10\xbf\xce\xc5\x8b\x3b\x3b\xf1\x48\xac\xf8\x99\xc6\xa2\x7e\xc8\xc9\xb2\x9a\xf5\x97\xe6\x59\x76\x8a\x55\xd0\x6c\xb4\x55\x9b\x67\x69\x68\xb2\x26\x0f\x52\x33\x30\x0d\xcb\x17\x41\xfb\xaa\xb0\x93\xba\x74\x38\x8a\x81\xe1\x9a\x00\x23\x65\x1c\x58\x07\xfa\xd1\xf3\xd2\x0b\x75\x1d\x9b\xee\x31\xa8\xe7\xa5\x5d\xcb\x8f\xdd\x7e\x60\x0f\x8a\x66\x8b\xc9\x60\x32\x31\x46\x79\xb9\xa3\xe7\xad\xee\x96\x8b\xe7\x75\x1e\x9e\x3b\x72\x70\x76\x8d\xcb\xe3\xf2\x5c\x54\xd3\xf5\x66\xd7\x57\x2e\xfe\xc8\x6b\x7b\x95\x3b\x26\x3f\xb9\xef\x47\x5d\xbf\xee\xf4\x5c\x54\xb3\x64\xbb\xab\xa6\x71\x89\xb2\x6e\xf9\x03\xdf\xbd\xa1\xe7\xbf\xe6\xc8\x43\x8e\x95\x4b\x4d\x0c\xb1\x60\x9b\x84\x9f\x6f\x3d\x52\xeb\xf7\xb5\x79\xdd\x1b\x5c\x61\x09\x8c\xb3\xdc\x1e\x57\x7a\xf6\x92\xdf\xff\xf9\x23\xb1\xb1\x26\xf7\x79\xad\x75\xae\xfa\xc6\xb6\xd7\xc1\x71\xe4\xb3\xea\x37\x27\x32\xad\x75\x75\x57\x2e\xf1\xac\x77\xc7\x1e\x6a\xba\xf2\xb5\x97\xbe\x3a\xb7\xbb\x77\xf9\x2c\xd3\xf6\x35\xee\x0b\xdc\x82\xc7\x18\x60\x62\x0f\x56\xfa\x42\xac\x40\x48\x13\xf9\x75\x90\x2c\x2a\xbc\x21\xed\x73\x62\x0a\xe0\x45\x14\x5b\x56\xab\x13\xd6\x86\x9d\x42\xf5\xdc\x7e\xa2\x43\x67\x69\x49\xec\x76\xb9\x5d\xac\xe2\x30\x3b\xb7\x6f\xda\x58\x9b\xec\xaf\x1f\x36\x6e\x59\x76\x50\xfd\xd3\x8a\x59\x21\xe2\x37\x4b\x7c\xa2\x33\x5e\x73\x5e\xad\xc8\x4b\x21\x73\x24\x60\x25\x75\x62\xd7\xbc\x2e\x13\xef\x84\xa1\xe7\x0e\xe3\x06\xb1\xd6\x28\x75\xc6\x7b\x1c\x62\x5d\x33\x53\xd3\xb5\x50\x5e\xc8\x11\x88\xd5\x9e\x57\x13\xef\x4c\xf0\x92\xd9\x4f\x42\xb3\x56\x80\x74\x70\xd9\x16\xe3\x70\x7d\x7f\xb2\x76\xe3\xa6\xed\x4e\xb3\x83\x70\x0b\xe5\x85\x5d\x35\x4c\x73\x9d\xe8\xe8\x89\x77\x4a\xc6\x5a\xb1\x01\x1f\x7e\x6e\x08\x9c\xbc\xa9\x6b\x5e\x97\x58\x47\xac\x81\x88\x39\x24\xf1\xc5\x39\xac\x84\x21\x8b\xce\x15\x98\xc6\x8c\x94\xe3\x43\x36\xfd\xaa\x1c\x42\xb2\xf7\x71\x16\x15\xe7\x1d\xed\xdc\x58\xf9\x84\x3e\x6f\xeb\x18\x26\x9c\x8e\x67\x68\x87\x8c\x1b\xe4\x0f\x04\x33\x51\x26\x11\x3c\x7a\xfe\xf9\xf0\xa8\xe5\xac\xa8\x26\x68\x22\x02\xc7\xd6\xae\x55\x47\xd9\x0b\x3e\x18\xdf\xa4\xac\x63\x5b\x84\xce\xa3\x32\x24\x13\x6d\xc7\xba\xf1\xbf\x1d\x47\xdb\xa1\xe4\x00\xa0\x25\xd9\x50\x83\x8e\x05\xcd\xb8\x5d\xc8\xed\x67\x29\x60\xdf\x99\x8a\x36\x26\x30\xbb\xbd\x8d\x63\x7d\x2e\x93\xb5\xa5\xb1\x49\xe0\x65\x8b\x8b\x6c\xbd\xb3\x13\x0b\x1c\xdf\x34\xbb\xc9\xe4\x20\xc4\xe3\xad\x75\x9b\xcc\xb3\x52\xed\xf3\x59\x56\xe0\x25\xdc\x03\x5d\x8f\x70\xb3\xa4\xa6\x9a\x46\x5b\xd7\x51\xa7\xab\x6a\x58\x3b\xcf\x6c\x72\xd7\x7a\x3d\x84\x38\x4c\x4d\xb3\x9b\x78\x4e\xc0\x99\xbb\xb6\x12\x97\x45\xe6\x85\xa6\xc6\x16\xab\xc9\xe5\x63\xb9\xb6\xf6\xd9\x01\xc6\xe5\x3c\xda\x65\x6b\xac\x69\x92\x66\x71\x8f\xa8\x3f\xe8\xc1\x12\x2f\xb0\xec\xfc\xf6\x14\xe9\xaa\x1c\x97\x00\xb5\x22\xc4\xad\x61\x11\xb5\xc7\x53\x4d\x06\x16\x81\xd1\x57\xaa\x99\x76\x28\x6c\x7a\xc1\xe5\xa6\xb6\x6f\x17\xe3\x2e\xe0\x6b\xa5\x33\x1c\x9f\xe6\xd6\xcc\xdb\x0c\x43\x9f\xfc\x77\xf5\x95\x2f\xa8\xff\xfb\xcd\x50\xcb\x9b\x4f\x5d\xf2\xb9\xfa\xa0\xaf\xa5\x79\xd7\xd1\xf9\xcb\x07\x96\xb7\x5e\x0f\x1b\x9e\x37\x3c\x7b\xcb\x1d\x23\x97\x8f\x84\x2f\xb9\x90\xd9\xb9\x65\x81\xe8\xbb\x49\xcd\xff\xe9\x6b\x97\xdf\xc3\xdc\x8e\xf7\x5f\xc4\x9a\xdd\x5f\xda\xc3\x44\x48\xeb\x9d\xab\xd7\x0f\xde\xf7\x65\x53\xa4\xf1\x96\x67\x77\x38\xbb\xae\xee\x37\xd1\xf5\xc1\xe6\x29\x85\x7c\x9b\x43\xba\xfe\x9b\x6a\x08\x83\x24\x64\x0f\xda\x43\x76\xdd\xd6\x46\xbe\xfd\xe0\xba\x1e\x08\x47\x55\xf5\xa5\x29\x34\xf5\xf2\x93\x47\xd9\xff\x56\xff\xb1\x78\xf1\xb3\xea\x4f\xf3\x46\xfc\x77\x88\xfd\xfc\x1b\x2f\xea\xb1\xce\x53\x8f\xd2\xf7\xba\x06\x6d\x44\xdb\xd0\xa5\xe8\x6a\x74\x03\xba\x09\xdd\xa6\x7b\xd9\x38\x1d\x88\xe7\xf4\xa1\x28\xda\xc7\x68\xab\xb5\x68\x84\xb3\x42\xa4\x81\x6f\xc7\x3c\xe7\xd6\x86\x22\xe2\xd6\xc4\x84\x86\x48\xb4\x1d\x3a\xa0\x81\xf3\x43\x3d\xd0\x3f\xd2\x0f\x74\x90\x8b\x46\x50\x2a\x29\xc9\xa5\x29\xb7\x72\x3b\x6d\x57\x9b\x9a\x93\x7c\x83\xd3\x91\x89\x67\xb4\x73\x45\xc7\x1d\xf5\x17\x6f\xd5\x7a\x21\xd9\xb5\xe1\xa2\xb9\x4d\x2b\xc2\x6d\xbe\xd1\x68\xe4\xc2\xe7\x2f\xb4\xa5\xae\xf2\xb5\x85\x57\x34\x65\x2f\xda\xd0\x15\x35\x39\x67\x0d\xcc\x75\xcb\xdd\x0e\x87\xd3\xc6\x59\x78\xde\xd5\x62\x32\x09\x7d\x8b\xe7\xb9\xdc\xe0\xad\x7d\x4b\xfd\xc5\x4b\x6b\x89\xc9\x44\x88\xc9\x18\xe2\x8d\x26\x8e\x37\x9a\x1a\x8d\x46\x83\xd1\x28\xc5\x0d\x16\x8b\xc1\x28\x58\xe6\x12\x9b\xd5\x60\xb7\xce\xb3\xdb\xec\xb6\x39\xd8\x66\x63\x02\xd4\x13\xe8\xd4\x84\x7a\xe5\x32\xd6\x23\x91\xa3\xbd\x17\xb5\x71\x9e\xf4\x8a\x9b\xd7\xee\x3d\x6f\xc3\x6e\x63\xcc\xe3\xf1\x7a\xcd\x81\x36\xe3\xee\x0d\xe7\xed\x5d\x7b\xd3\x70\xda\xc3\x35\xce\x33\x99\x5a\x9a\x02\x31\x86\x18\x45\x91\x65\x4d\x9d\x6e\x77\xa4\x43\x00\x86\x89\x6c\x67\x24\x0f\xbb\x0c\xee\x99\x38\x05\x17\x4d\x1e\xe4\x59\xc2\xf2\x2c\xe7\x65\xcd\x46\x8e\x35\x9b\x22\xbc\x45\xe0\x59\x6f\xa3\xc1\x6c\x31\x1a\xcc\x16\x9b\x99\x65\x5c\x0c\xc7\x0b\xd8\x2c\x60\xa7\x19\x13\x8f\x61\x9a\xad\x23\x3c\x0d\x99\x3a\xa2\xbd\xf4\xc4\x74\xbc\x1e\x4d\x1a\x43\x01\xc4\x29\x11\x6f\xd6\x1b\x39\xf6\xea\xb1\x91\x32\xc9\x00\x1e\xd3\x31\x77\x48\xae\x18\x6b\x30\x7a\xec\xd8\x68\xae\x33\x56\x81\x7a\xf8\x0c\xf0\xea\xfb\x25\xec\x74\x7d\x4c\xab\x29\xe0\x90\xa1\x2a\x6c\xa0\x84\x93\xf6\xba\x54\x32\x12\xb2\xd3\x78\x08\x6d\xd0\xcb\xa4\x82\xce\x44\x2a\xe8\xe4\xc6\xb5\x71\x4c\x0f\xb2\x15\x64\x4e\x91\x05\x41\x7e\x5f\x91\x85\x11\x40\x0a\x28\xac\xb2\x69\xa0\x1c\x56\xab\xc8\xc2\xf8\xb8\x20\x4f\x20\x59\xc0\x23\xf9\x31\x41\x56\xb4\xff\x74\x9f\x18\xb6\xc8\x97\xd4\x5b\x11\x01\xec\xd2\x95\x9c\xda\x34\x42\xb5\x9a\x99\x74\x37\xb8\x18\xb7\x4b\x62\x4b\x67\x30\x6a\x2c\x9f\xb3\x50\x1c\x7a\x3d\x20\x18\xef\xc2\xb2\x54\x77\x6b\x4d\x23\x76\xa9\xdf\xfc\xcf\x9a\xa0\xd3\xee\x65\xc7\xa0\x71\xf7\x55\xb7\x62\x01\x3b\x24\xdf\x5d\xde\x30\x58\x9e\x56\x7f\xa3\xee\x7f\xbd\x26\xe4\x90\xbc\x04\x38\xf8\x8f\x6f\x7c\xf3\xdf\x41\x8f\x12\x56\xbf\xef\x73\x38\x83\x35\xff\x09\x0b\x5c\xb8\xb1\xe6\xd6\x3a\xc9\x2e\xdc\x7a\xd5\x6e\xf5\x8d\x87\x6b\x1d\x8e\x50\xcd\xeb\x70\x33\xd4\x3d\x2d\x40\xb8\xe6\x2e\x9f\x24\x09\xff\xfe\xcd\x6f\xa8\xc1\x42\x9c\x29\x2a\xd8\xd6\xea\x51\x93\x26\xe1\xa0\x2a\xfb\x9a\xbb\x9a\x5b\x26\x58\x84\x5f\x86\x19\xd1\x6a\x19\x5b\xc7\x40\x47\xc7\x00\x74\xd0\xcd\x89\xca\x80\xe5\x89\x38\xf3\xa9\x07\x19\x8f\x38\xf9\x17\xd1\xc3\x30\x5f\xd2\x5b\xda\xf6\x7d\xfb\xc6\x0c\x11\x33\x1b\xed\xdf\xb7\xc1\x45\x03\xfa\x65\xda\xbf\x77\xa1\x8c\x98\x05\xef\xc0\xaf\x05\xbb\x5d\xc8\x1f\x28\x2c\x91\xb3\x35\x71\xbc\x29\x35\x30\x90\xca\x3f\x1c\xa7\x73\xc0\xcd\x54\x8f\xd0\x8e\x92\xb4\x37\x68\xab\x42\x07\x17\x42\x61\x11\x5c\x6e\x11\xfc\xd8\x2d\x82\x36\xaf\xa7\x33\x25\xb4\xf3\x80\xd6\x69\x88\x1d\xb1\x76\x86\x53\x52\x83\x83\xa9\xa1\xa4\xba\x59\xdd\x33\x67\x80\x89\x38\x38\x69\x76\x47\xa4\xee\xb3\x5f\x68\xe7\xdb\xe4\x5a\x62\xb2\xdf\x40\x9f\x39\x0e\x5f\x86\x17\x93\x43\x8a\x7a\xad\x7a\x3b\x5c\x4f\x14\xaa\xf7\x4d\x0e\xc1\x86\xa0\xbc\xe9\xd2\x68\x70\x6e\xa2\xbb\xc9\x3f\x27\x5e\xdb\xec\xfe\x48\xcf\xb5\x6b\x76\xa7\x37\x0d\xe4\x06\x36\x81\x32\x94\x9c\x6c\x24\xdf\x50\x5f\x69\x52\xff\xd2\x4c\xf5\x4e\xd9\x29\xc4\xe5\x38\x84\xcc\xa8\x06\xcd\x45\x88\x49\x52\x99\xaa\x41\x5b\xcf\x40\x10\xd9\x93\xed\xb8\x41\xc4\x4e\x1b\x5d\xd8\x50\x82\x02\xad\x89\xb5\x31\x4e\xca\xe8\xa8\x9e\x4e\x07\xef\x92\xb4\x01\x8e\xdc\x6d\xeb\x5e\x1b\xb8\x78\x49\xfe\x5a\xd6\xa1\xfe\x6d\xd6\x05\x9f\xf8\xc6\x27\x2e\x98\xc5\xe4\x86\x92\x6a\xf6\xd8\xab\xc7\xd4\x6c\x72\x28\xbe\x6a\x7d\x6f\xf4\x0f\xdf\x32\x74\x0e\x77\x1a\xbe\xf5\x87\x68\xef\xfa\x55\x4f\x05\xd6\x76\xdb\x6c\x4b\x2e\x86\x59\xd0\x8a\x1d\x89\xcb\xb6\xf4\xf7\x6f\xb9\x2c\x91\x7f\x5b\x7d\x35\x39\xa4\x7d\x75\x43\xc9\xe6\x8d\x47\x3f\xff\x97\x23\xc7\x81\xf5\xc9\x0e\xed\xf3\x73\xc8\x3e\x75\xe2\xf8\x91\xbf\x7c\xfe\xe8\x46\xfa\xcd\xe3\x29\x85\x55\xd9\xfd\x74\x6d\xe6\x76\xf1\x9c\x95\xfe\x76\x80\x2e\x45\x69\xdb\x68\x44\xff\xed\xa7\x2a\x54\xed\x37\x93\xd6\x7f\xeb\x29\xea\xa3\xf6\xeb\x76\xe9\xbf\xda\xd5\x6e\x17\xcf\x8e\xdc\xee\x37\x59\x62\x27\x53\x96\xfa\xba\xa6\x6f\xcc\x32\x35\x59\xf8\x7a\xc7\xad\xb7\xfa\x9a\x9b\x4c\xb3\xbe\xd1\x54\x57\x6f\x49\x9d\x8c\x59\x4c\xfe\xdb\xab\x72\x35\xd5\xdd\x7a\x6b\x5d\xd3\xf4\x3c\x58\xa9\xba\x0c\xbb\xb4\xcb\xcc\x4d\xe5\xcb\x9a\x7d\xd3\x6f\xdd\x64\xb2\xd4\x1f\x39\xe2\x37\x9b\xa6\xe5\x29\x71\x92\x69\xdf\x79\x0a\xed\xac\xd6\xa7\x52\xaf\xc2\x50\x03\xcf\xf1\x05\xeb\x86\x5d\x93\x09\x13\xd3\xf4\xa9\x45\x15\x21\x57\x50\xa8\x16\x22\x79\x8b\xb2\x46\x1f\xab\xc9\x99\x8c\x6e\xf5\x09\x96\xb4\xa9\xec\xe7\x96\xc7\xf3\x39\x7f\xa3\xff\xfc\x45\x9e\x01\x8f\x10\x5b\xbc\xc8\xbf\x60\x51\x20\xb0\xf8\x5b\xdf\x5f\xf9\x6c\x41\x8b\x0a\x83\xc9\x21\xe5\xfe\x4b\x1e\x67\x82\x54\x93\xfa\xd1\x67\x1f\xe9\x2e\xa8\x51\x03\x26\xb7\xc7\x59\x2b\x7a\xf0\xdc\x90\x10\x6b\xe8\xe8\x8f\xec\xff\x8c\x0b\xae\xad\x54\xa6\x3a\xba\x52\xab\x5b\xe6\xf5\x1e\x69\x75\x66\x57\xae\xac\xe9\xca\x2b\xd9\x6c\xa5\x12\x75\x28\x75\xc9\xf1\xbe\x2e\x5d\x83\xba\xa0\x5b\x57\x04\x1a\x65\xbb\xcf\xea\x23\x4b\x33\xce\x55\x7d\xd9\xd0\x2d\x37\xcc\xef\x39\x8e\x2a\xda\x27\x85\x7a\xd1\x6e\x84\xc2\x09\xbb\x8e\x4b\x44\xff\x6f\x67\xa8\xe1\xce\x8f\x9d\x94\xac\xcd\x95\x08\x6a\xa2\x97\x9b\x73\xb8\xdc\xba\xdb\x66\x1f\x54\x2d\xa3\xe8\x2a\xa3\x1f\x74\x43\x8c\xbe\xd4\x48\x04\x75\xd1\xc5\x4f\x34\x51\x9c\xa3\xf2\xd9\x48\x20\x10\x9a\xdb\x13\xab\x33\x30\x8b\x63\xa2\x07\x64\xc9\xe5\x34\x2c\x3a\xdf\xdf\xe8\xcf\xe7\xe2\xcb\x87\x92\x30\xa8\x6b\x56\x99\x8b\xce\x5b\xf3\xfc\xb7\x60\xa7\xbe\xd4\x1a\x4c\xa9\xe3\xdd\x8f\x7c\xeb\xe0\x9d\x4f\x01\xf4\x92\x20\xf3\xf8\x25\xf7\x1f\xdf\x09\xd7\xba\x3e\xb3\x3f\xd2\xdf\xd1\x10\x13\x42\x73\xb1\x47\xac\x75\x7a\xdc\x26\x08\xa4\x06\x15\xac\x78\xe2\xcd\x41\x23\xbb\x32\xeb\x6a\x27\xd1\x60\xc4\xdd\x3b\xaf\x65\x75\xaa\xcb\xb1\x2c\x91\x1c\xa2\x8a\xd5\xc0\xd2\x25\x36\x4f\x60\xed\xaa\x6c\x36\x52\x68\xd8\xbc\x92\x1a\xec\x5e\xf0\xc9\x3b\xd8\xa1\x1d\x2e\x67\x57\xdf\xf1\x4b\x2e\x3e\xde\x33\xff\x86\x5b\x42\xd9\xbe\x55\xce\xcc\x52\xe2\xb3\xfa\xec\xb2\x71\x10\x55\xe2\xff\x17\xfa\x15\x53\x6c\x86\x64\xa8\x81\x6f\x87\x06\x6a\x23\xe6\xed\xba\xe5\xd3\x4e\xe1\x7b\x75\xb6\x3b\xfa\x3f\x9d\xda\xa8\xa2\x9e\xab\x98\xf5\xda\xd9\xc2\xca\x25\xad\x73\x05\x52\xe5\x88\xcb\x4d\xa5\xbe\xe2\xb2\xf3\x73\xd3\x5e\x73\xf2\x8c\x9e\x80\x95\x6c\x56\xd1\x5e\x79\x7e\xe6\x57\x7e\x71\xb9\x63\x5c\xa0\x53\x19\xf6\x54\xf6\xc7\xb3\x75\xda\x75\x1f\xa2\x77\x96\xba\xf2\xb4\xf6\x49\xa2\x1e\xb4\x8b\x4a\xf5\x40\x9d\x00\xa8\xee\x47\xfb\x5f\x64\xf4\x1e\x84\x13\x76\xba\x58\x4d\xd9\x35\x99\xd7\x15\x4f\x67\xb4\x3d\x5c\x42\x9d\xe0\x3a\xe8\xda\x83\xe3\xa9\x9d\x35\x92\xb2\x17\x01\x6b\xa9\xf7\x57\x45\x14\xa9\xb6\x8a\xcb\x66\xf3\x1f\xf0\xd6\xdb\xbb\xca\x2f\x5d\x29\xac\xe2\x0b\x2f\x3b\x3d\x57\x7b\xd9\xe9\xa5\xd7\xdf\x5a\xf5\xb2\xe9\xb7\xd3\xbd\x00\x67\xd7\x3c\xff\xad\xc5\xe7\xea\xb5\x21\xbd\xd3\x92\x5e\xda\xb4\xf9\xf9\x7a\x4f\xf5\xf3\x1f\xdc\x53\x0b\xfd\x7a\xfa\x5a\xa8\x9e\x4a\x45\x34\x1e\x33\x93\x2e\x84\x1e\xf2\x9c\xa3\x1e\xc0\x15\xef\x07\xed\x48\x55\x7c\x26\x8b\x22\x5e\xd5\xf4\xac\x2c\x6f\x90\xd2\x92\x7a\x6c\x83\x24\x6d\x80\x51\x29\x2d\x6d\x90\xa4\x67\xe1\x6f\xde\x08\xa0\x99\x22\x36\x9f\xd5\x03\x15\xb5\xfc\x69\x69\x83\x7a\x4c\x92\xb4\xc4\xb3\x1f\x1c\xc3\x49\xcb\x86\x92\x1d\x00\x34\x16\xd2\x51\x0f\xa5\x98\x51\x5a\x44\x57\x3c\x03\x99\xca\x88\x43\x96\xa5\xf7\xd6\x0b\xa3\x9a\xa8\x84\xf8\xb7\x42\x51\x61\x74\x03\x08\xd5\x45\xdb\x9e\xa6\xa5\x2f\x14\xc6\x5b\x2e\x28\x8c\x6e\x50\xcf\x1a\xa7\x59\x28\x57\x54\x8f\xd1\x04\xbd\x28\xfd\x50\x8a\xaa\xa5\xe4\x0c\x8d\xd3\xe3\x35\xcf\xa8\x79\xe9\x61\x20\x56\x97\x6a\x07\x2d\xad\x74\x96\xba\xe4\xcf\x55\xae\x0e\xda\x5c\x25\xe7\x50\x3d\x90\xd4\xe1\x06\x5a\xac\x69\x18\x28\x2c\x33\x63\xcd\x25\xda\x2a\x67\x96\x6b\x5b\xf9\x2d\xcf\xd0\x07\xd0\xd4\x07\xc5\xc1\x99\xe1\xa7\xd8\x53\x15\xf7\x20\x02\x1f\xd7\xd1\x9d\x33\x69\x77\x24\x9d\xe9\x83\x7e\xe0\x22\x51\x07\x9f\x8c\x70\xd1\xe2\x92\xbc\x41\x84\x50\x44\xc4\xbc\x08\xbc\xb6\xd2\x4a\x47\xa2\x09\x7a\x8a\xe7\xfc\xe0\x74\x69\xd3\x83\x76\x8a\x73\xb9\x5d\x22\xb6\x6a\x97\x47\xa2\x11\x5e\xfb\xd3\x72\xf7\x41\x2a\x9d\xe9\xc3\x21\x17\xf5\xfb\xf7\x43\xc2\x95\x8e\xba\x68\x0e\xce\x1d\x11\x41\x7b\x42\x83\x76\xcb\xb4\x76\x43\x2a\xfd\xb9\x78\x6d\xe4\x70\xf1\xda\xda\x58\x5b\x0c\x46\x34\x61\x84\xba\xe0\xf0\xfa\x4d\xdc\x19\x97\x3b\xc2\x73\xbc\x8b\x6f\xc7\x51\x6d\x4a\x77\xb9\xfd\x38\xe3\xe2\xd3\x54\x3a\xd1\xca\xe5\xca\x34\x70\x0e\xde\xcd\xb9\x32\x5c\x41\x29\x04\x6e\xce\xc5\x37\x70\x21\xaa\x07\xca\xa4\x75\x20\xeb\xb8\x1f\xf3\x1c\x3d\x1b\x8a\xbb\x74\x6d\x11\xc5\xfb\x8b\xa7\x29\x15\x55\x46\x3f\xa7\x2d\xc4\x5d\x99\x74\x8a\x8b\x26\xdb\x71\x3a\x11\x4f\xd3\x6b\xb5\x56\xe2\x9c\x0d\xd1\x3e\xc8\xf4\x91\x08\xd5\xc7\xf1\x9c\x76\x46\x1b\xee\xe9\x51\x70\x51\x27\x89\x90\x2b\xad\xad\x49\x23\x19\x57\x86\x3e\x3c\x9d\xa1\x13\x43\x1f\x44\x3a\x20\x99\x8a\xb6\x83\x6e\xa5\x8d\xc6\x33\x0d\xed\x10\x4a\x6b\x97\xba\x32\xfa\x26\x9d\xa4\x2f\x24\x1d\xa2\xea\xe6\x48\x34\xad\x6d\x23\x24\x4d\xdd\xdf\xa3\xe9\x02\xee\x23\x2f\x12\x77\x24\xda\x8e\x29\xba\x65\x24\x1d\x8d\x88\x8c\x96\x6a\x87\x94\x9f\x4a\x7b\x3c\xe7\x76\x70\x6e\x47\x75\x04\x0b\x99\x8f\xad\x1c\x66\x59\xe0\x6c\x62\xa4\xc1\x8e\xdd\x84\x78\x08\xb6\x98\x81\x33\x8a\xd8\x64\xe2\x00\x5b\x31\x10\xc2\x72\x06\x1e\x08\x47\x38\x4c\xcc\xc4\x6a\x33\x71\x46\xc2\xb3\x60\x75\x10\x43\x92\x67\x81\x07\xc1\xc7\x10\x2f\x61\x79\x1e\x03\xc7\x32\xc4\x2c\x33\xbc\xd1\xcd\xb1\x8d\x35\x41\x8e\xe3\x2d\x04\x13\x23\x58\x78\x12\xb2\xb2\x02\x63\x34\xc9\xac\x48\x8c\x16\x23\xc3\x58\xac\x06\x13\xd8\x6d\x06\x30\xb2\x06\x03\xf1\x99\xe4\x5a\xbe\x96\x63\xc1\x6c\x12\xb0\xc8\x61\xc1\x04\x84\x63\x59\x03\xe1\x03\x26\xc6\x63\x67\x19\x06\x08\x23\x92\xf6\x59\x1c\xc7\xda\x70\x83\x81\x15\x39\xde\xed\xc0\x3c\x66\xac\xa2\xc1\xc6\xdd\x7b\x3e\xcf\x32\x98\x98\x8c\x1c\xb4\xc8\x98\x08\x60\x03\xc2\xf3\x3c\x0b\x98\xd8\x05\x21\xc8\x61\x22\x59\x18\xc6\x62\xc0\x6e\x00\x02\xa4\x86\x00\x66\x38\xec\xb5\x62\xc2\x62\x6c\x30\x72\x40\x4c\xa2\x03\x73\x36\x83\xd1\xc5\xb1\x1c\xc6\x82\xc5\x41\xd8\x5a\x83\xc9\x62\x67\xad\x3e\xbe\x51\xc6\xac\x99\xc7\xac\x97\xe5\x80\x38\x0c\x62\xbd\xc4\x12\x8c\x19\x23\xe6\x00\x1c\x98\x75\xb1\x44\xc0\x40\x30\x18\x39\x6c\xb6\xc8\x3c\x30\x1c\xc7\x37\xf0\x82\xcc\x02\x47\x2c\x0c\xd6\x0a\x0f\x84\x00\xdf\xc2\x59\x79\x16\xb3\x1e\x52\xc3\x12\x03\xe1\x59\x13\x36\x1b\x78\x03\x68\xff\x59\x79\x93\x09\x44\x3b\xe3\xe4\x78\x06\x0c\x3c\x18\x79\x96\x65\x8d\x16\x03\xcf\xd6\x13\x1e\x13\xc6\x85\xed\x84\x48\x82\xc9\x46\x2c\x46\x62\xc7\x56\x97\xfd\xd9\x97\xee\x21\x32\x91\x38\xe0\x8d\x36\x82\x4d\x8c\x99\xe3\xb5\x57\x85\xc1\x69\x65\x2d\x46\x33\xc7\x62\xe0\x45\x96\x58\x8d\x22\x23\x60\xc2\x61\x2c\x63\x86\xf0\x72\x2d\x66\x6c\x36\x38\x23\x40\x49\xfd\x3e\xd8\xc1\x64\x01\xde\xc0\x71\x06\x19\xbb\x00\xb3\xac\x0b\x6c\x02\xe6\x78\xcc\x00\x31\x7a\x08\x6b\x61\x30\xcf\xb1\x26\x13\x06\x60\x01\x63\x60\x39\x06\x18\x1b\xc7\x18\x0d\x98\x35\x32\x9c\x51\x26\x9c\xc8\xf2\x76\xc1\x60\x63\x0c\x4e\x8e\xda\x01\x30\xeb\xb2\xd6\xb0\x06\xa3\x20\x18\x59\x10\xad\x84\x73\x6b\x2f\xd6\x6a\x61\xac\xac\x87\xe5\xc0\x04\x1e\x03\x48\x3c\x66\x8c\x0c\x03\x6e\x8b\x19\x6a\xc0\x6a\x10\xc1\x62\x65\x30\xcb\x1b\x79\x86\x01\x13\x03\x2c\x83\x19\x07\xc3\xd6\x30\x46\x02\x0c\xe6\x0d\x16\x06\x13\x01\x5b\xbd\x80\xb1\x11\x44\x9e\xb5\x19\x19\xc2\x71\x16\x8e\x88\x06\x80\xe1\x3b\x79\x00\x1b\xc7\x19\xcc\xe0\xb3\x33\x66\x1e\x8b\x84\xad\x85\x40\x94\x01\x4b\x1b\x21\x31\x03\x60\xb3\x91\x63\x43\x1c\xe7\x33\x62\x5e\xd4\xae\xc1\x8e\xe6\x1a\x86\x75\x32\x84\x61\x80\x77\xda\x5c\x98\xab\x75\x1a\x0d\x8d\x1c\x2f\x70\x26\x8c\xed\x84\x61\x01\x37\x30\xb2\x01\x04\xc9\x4c\x38\x89\x63\x58\x83\x07\x93\x3a\x6b\x10\x8c\x06\x23\xc7\x4b\x8c\xc1\x43\x8c\xd8\x00\x46\x0c\xa4\xce\xc0\xd8\x04\x0b\x0f\x20\x13\xab\x81\x10\xcc\x18\x9a\x6d\xa6\xa0\xdd\x86\xad\x04\x00\x18\x06\x30\x21\x46\xce\x2c\x80\x9d\xad\x95\x08\x43\x30\x8f\x09\x2b\x9a\x62\x0c\xc1\x76\x33\x6f\x30\x1a\x0d\x44\x92\x8d\xc0\x1a\x18\xd9\x66\xe4\x18\xd6\x4c\x6c\xd8\x62\x32\x18\x78\x9e\xc3\x06\x1b\xc3\x1a\xc0\xcc\x60\xc1\x6c\xe4\x78\x0c\x80\x4d\x1c\x3b\x79\x53\xe3\x27\x08\xc1\x3c\xf0\x16\xad\xb4\x06\xc2\x61\xad\xa7\x11\xb0\xb3\x60\x64\x31\xc7\x3a\x08\x5b\xc3\x71\x84\x33\x63\x23\x61\x6c\x84\x61\x89\x29\x2e\xd4\xdb\x6b\xac\x2e\x86\xaf\x35\xd0\xe8\x08\xe7\x94\x93\x3b\x40\xd7\x4c\x4e\xd4\x51\x5e\x33\x19\x0b\x11\xb9\xa9\x64\x06\xfc\x00\xba\xc7\x04\xb2\x21\xca\x45\xe1\xe0\x59\xa7\x5b\xa7\xa3\xd0\x45\x2b\xfc\xf9\xfc\xba\x70\x2a\x19\x1d\x8d\x44\xf0\xe3\xd1\xfb\xf1\x1b\xee\x8e\x3f\x7e\x4c\x0f\x06\x9a\x73\xb0\xd5\x66\x53\x7f\xf1\x1d\xf6\xe3\x37\x1a\xad\xf6\x82\x2d\xe4\xb7\xf9\x75\xe1\xf0\x65\x8d\xe9\x54\x04\x3f\xbe\xe5\x7e\xb8\x23\x3a\xef\x96\x47\x75\xa5\x52\xd0\x6f\x6e\x30\x3f\x3e\x7e\x29\xd9\xb0\xc8\x81\x2a\x39\x39\xf5\x38\x8e\x5a\xd4\x82\xba\x11\x0a\x07\x53\x41\x28\xfe\x9d\x83\xcb\xb5\x7a\x9f\x41\x9a\xec\xaf\x2a\x0c\x9a\x44\x98\xe2\xeb\xe3\x0f\x85\x04\x49\x61\xfa\x41\x51\x26\xb3\x45\xb5\x97\x37\x12\x81\xdf\x9d\x6d\x47\x5b\x7b\xb3\x53\x0a\x7b\x23\x8b\xa8\x9f\xaa\x8b\x2f\xc1\xdc\x45\x52\x76\x9d\x2b\x2a\xce\xde\x68\xaf\x57\x65\x8a\x6e\x37\x85\x64\x55\xae\xb7\xdb\x9b\x59\xd4\xcc\xfc\xac\xa9\x4e\x95\xf3\x5e\x0a\x6c\x87\x64\x2f\xfc\x0e\xde\xa9\x6b\x8a\x96\x71\x30\xe9\x9b\x73\xa3\x5a\x1a\xbb\x3a\xad\x0d\x82\xce\x22\xe6\x54\xc8\x19\xa4\x3c\x04\xd5\xa6\x55\xac\x60\xa4\x22\xa6\xc0\xad\x82\xc7\x22\x5e\xc8\x7a\x23\x23\x53\x88\x41\xef\xa3\x4d\x03\x30\xa2\xab\xf0\x60\x64\x60\x13\x8b\x94\x3c\x52\x03\xba\x3a\x65\x4c\xab\xda\x98\xa2\xc0\xb8\xaa\x80\x32\xb0\x49\x07\x05\xdf\x54\xe9\x77\xba\x08\x21\x23\xce\xa4\xdd\x45\xf5\x5e\x34\xd2\x0f\x46\x3a\x03\x15\x15\x4f\xe9\x7a\x30\x02\x5f\x24\x31\xd2\x31\xb3\xac\x60\xa4\xda\x86\x82\x68\x4f\xcf\xb2\x44\x7d\x10\xb6\xde\x5d\xd7\x14\x2d\x12\x06\xdd\xad\x3e\xa8\x3e\x78\xb7\xd6\x40\x05\x32\xa0\xbb\x61\xab\xfa\xe0\xdd\xb2\xd7\x62\x89\x45\xbc\x90\xa3\x79\x60\x2b\x6c\xa5\x79\x20\xe7\x8d\x50\x04\x30\xf2\x9b\x99\xaf\xf3\x47\xab\xae\x92\x59\xfd\x2a\x2d\x07\x7d\x36\xcd\xa1\x3d\x9b\x95\x75\xbf\x4a\x44\x71\xce\xed\x68\x36\xea\x42\x73\xd1\x6a\xb4\x81\x6a\xf3\xb5\x05\x8a\x4d\xd7\x24\x64\x38\xa7\x03\x4a\x3e\xed\x6c\x22\x4e\x39\x2c\x13\x71\x3f\x5b\xd4\xd2\x15\xd9\xab\x29\x74\x04\x75\x57\xa2\x0e\xc4\x90\x88\xe3\x42\x0e\xbc\xf2\xe1\x8b\x6f\x59\xb5\x6b\x1f\x37\x78\x5d\xf7\xbc\x01\x96\x51\xee\xbd\x7e\xf2\xd8\xf5\xf7\xf2\xce\x40\x7a\xe1\xf6\x5e\xd3\xc0\xf0\x2d\xb7\xdd\x32\x3c\x60\xea\xdd\xbe\x30\x1d\x70\xf2\x93\x3a\x2e\x1f\x59\x57\xf0\x8e\x25\xc1\x5d\xab\x6e\xb9\xf8\xe1\x95\xec\xc0\xbc\xee\xeb\x06\xb9\x7d\xba\xf3\x23\x56\xd8\x1b\x57\x2e\x87\x8b\x9a\x5b\xdc\xe1\xba\x23\x79\xf1\xba\x23\x47\xae\x4b\x6d\xdf\xb3\x6d\xf3\xbc\x58\x4b\xaa\xa5\x25\xd5\x12\x9b\xb7\x79\xdb\x9e\xed\x6c\x9c\xfa\x16\xaa\xf5\x05\xaa\xec\xfc\x89\xe5\x2b\x6f\x64\xf7\x1c\xa9\x0b\xbb\x5b\x9a\x61\x94\x9e\x2c\xc6\xa9\xdd\xcd\xed\x62\xdf\x45\x41\x34\x0f\x5d\x52\x40\x4b\x09\x35\xf0\x7e\x86\x2e\xdb\xda\x49\xb4\x0c\xec\x92\x86\x22\xf0\x4b\xf1\x58\xa6\xe8\x1a\x44\xdc\x69\xa4\x47\xe2\xeb\xe3\x4c\xb4\x80\x01\x50\x08\x1e\x73\x39\x1d\xbc\x9b\xa6\xd8\xa7\x7c\x2f\xfb\x62\xcd\x7e\x12\x30\xcb\x7c\x67\xcc\x5a\xe3\xb5\xd4\x93\xa0\xef\xa5\xda\xa6\x98\xef\xa8\x2f\x3f\xd7\xf7\x92\x2f\x16\xad\x3b\xea\xf3\xbd\x5c\xdb\x54\x9d\x8b\x1c\x5c\x7b\x74\xf5\x75\xd7\xaf\x7e\x69\xf5\xfa\xf5\xeb\x6e\xb8\x6e\xcd\xcb\x6b\xaa\xf6\x21\x1b\xf3\xbd\xec\x0b\x90\x7a\x8b\xb7\xc6\x1a\xeb\xe4\x65\x73\x80\xd4\x37\xc7\x7c\x3f\xa9\xf5\xde\xeb\xc3\x6f\xc5\x7c\x3f\xf1\xd5\xde\xeb\x8b\xc6\x7c\x2f\xd7\xd6\x4f\xcf\x94\x7f\xf3\xdd\xd5\xf7\xae\x5e\xfb\x93\xd5\xd7\xdd\xb8\x6e\xfd\xfa\x35\x2f\xaf\x99\xbe\x5b\xc0\xb8\x54\x28\xb6\x37\xd2\xfb\x05\x4a\x25\xa9\xaf\x2a\x4a\xc4\x19\xb7\x6e\x86\xe5\xfd\xc0\x2b\x6f\x9e\x98\xc8\x3d\xa3\xbe\x7f\xe7\x35\x18\x5a\x5f\xfd\x34\x40\xf7\xc2\x91\xd1\x63\x4d\x1f\x79\x0c\x94\x13\x6f\x02\xff\xcc\xa1\x5f\xa4\x7d\xd6\x57\xa1\xf5\xa9\x3b\xfb\x8e\x8d\x0e\xf6\xfb\x4f\x21\x8c\xae\x9e\x52\x38\x81\xc6\xd7\x07\x11\x0a\xeb\x50\x4b\x19\xdd\xb3\xbf\xe0\x69\xd3\xa2\x4d\x03\x41\x88\xa6\xec\x21\xbb\x93\xfd\x7b\xe7\x82\xd1\x09\x65\x74\x41\x27\xfc\x3d\x5b\x84\xd6\x8a\x78\xb3\xea\xdb\xea\xbb\xf8\x87\xea\xbb\x0e\x65\xfd\xf9\x07\x0f\x9e\x4f\x6a\xe0\xae\x82\x4f\xda\xee\xf9\xea\x6a\x78\xb2\x3e\x0c\x77\xa9\xbb\xc3\xfa\xb0\x03\x05\xdf\x4c\x1e\x2d\x47\x1b\xd1\x28\xba\x0e\xdd\x82\xee\x28\x63\xfe\xb3\x40\xf5\x8b\x74\x8c\xa3\xc2\xb9\x58\xf8\xd4\xa9\xcc\x9e\xa0\x8e\xb9\xd4\x47\xb3\x81\x72\xc8\x50\x73\x34\x95\xb6\x79\x57\x3d\x14\x5e\xba\xdb\xc5\xb3\x69\x0a\xc3\x4d\x97\x13\x89\x38\xe9\xa3\x90\x41\xbc\x48\x31\x82\xc0\x9d\x4a\xf6\x43\x94\xa2\xb8\x03\x5f\x0f\x10\x05\x27\x4f\xc1\xfc\xeb\x01\x32\xda\x53\x89\xae\x38\x83\xcb\x60\xc2\x47\x58\xbf\x22\xd8\xec\x62\x7e\xf9\x15\x06\x46\x64\xf8\x2d\xab\x0f\xdd\x73\xdb\xba\x0b\xcc\xfc\x96\x55\x87\xee\x5d\x3d\xdf\x28\xdc\x70\x83\x60\x9c\xbf\xfa\xde\x43\xab\xb6\xf0\x6c\x53\xcb\xda\xc3\xf7\x1c\x5a\xbd\x85\x67\x44\xc6\x70\x05\x7e\x5a\xb4\xdb\x04\xc5\xcf\x12\xdf\xc4\xc6\xf6\xf8\xca\x8d\xdb\x96\x46\xf5\x4d\xfb\xca\x78\x7b\x74\xe9\xb6\x8d\xfa\x06\xc4\x91\xa0\xb8\xc2\x4b\x44\x16\x33\xf0\xfa\x08\x1e\x57\xf2\x68\xcc\x88\x59\x46\x64\xbc\x64\x44\xc9\xff\xe3\x4b\xd8\x8c\xf5\x49\xd2\xab\x5e\xe5\x68\x0c\xd9\xb2\xbc\x01\x6e\x1e\x60\x60\xf6\xac\x65\x1f\x4b\xad\x59\xbe\xe6\xc6\xa1\x3b\x53\x6b\xea\x05\xe3\x92\x25\x46\xa1\x7e\x4d\xea\xce\xa1\xee\xcb\xa2\x2b\xd6\x24\xef\x5c\x36\x6b\x36\x30\x03\x70\xb3\x81\xcf\xda\x42\x8d\x8e\xdb\x9b\x0f\x25\xba\x1b\xb5\x9f\x7c\x77\xe2\x50\x73\x23\xfd\xc1\x63\x73\xcc\x8d\x0e\x43\x87\x97\xd8\x18\x4c\xe0\xf7\x01\x9c\xcd\xaa\x2b\x77\x8f\x18\x30\xc3\xd8\x18\xaf\x9a\xcb\xc2\xf1\xdb\x09\xa3\xdb\x61\xf4\x79\xa3\x1e\x35\xa0\x30\x4a\xa0\x9e\x2a\x3b\x4c\x61\x86\x2c\x46\xab\x38\xed\xe9\x04\x0f\x41\x23\x04\x65\x6d\x12\x29\x50\x74\x26\xd3\xa5\x1d\x6e\xac\x68\x11\xca\x8f\xc7\x3a\x63\x3e\x38\xee\x1b\x89\xc1\x58\xac\x73\x7e\x8f\xa2\xbe\x06\x2d\x79\xfa\xfb\x1c\xf4\xa8\x14\x99\x00\xa3\x18\xf9\xa9\x9e\x64\x4a\x90\x02\x10\x28\x70\x4f\xc0\x71\x5f\xac\x33\xa6\x7e\x3d\xf6\x9a\xfa\x1a\x7e\x42\x7d\x4d\x7d\x04\x7a\x60\x8c\x12\x65\x2a\x80\x62\x23\x93\xff\x60\x14\x7d\x8f\xea\xb4\x99\xa9\x43\xec\x3e\x76\x1f\x45\x81\x76\x14\x51\x35\x74\xe4\x8e\x82\x83\x7e\x21\x6a\x03\xa8\xb2\x29\x59\xb1\xef\xac\xca\xcf\xee\xfb\xf4\x9e\x5b\xb7\x4d\xfe\x7d\xf7\x1b\x27\x3e\x7d\x35\xbe\xd0\xd4\x6b\x13\x4c\xf9\x87\x57\xec\x18\xbd\x77\x88\x18\xfa\x57\x65\xd7\xf4\xe7\xbf\xe9\x6d\xa8\x8b\xd4\xc0\x03\xa6\x3e\x9b\xc5\xa4\xee\xe8\xbf\x6a\xd5\xfa\x5e\xbc\x60\xdb\xfd\x7b\x3e\xbd\x8d\x18\xae\xfe\xd4\x89\x5f\xed\xce\x3f\x6c\xb2\xd8\x7a\x4d\x78\xf3\xb2\x63\xa3\x97\x0c\x4d\xfe\xbd\x7f\x4d\x76\x55\x3f\x5e\xe0\x89\xd4\x05\x6a\xd5\x1d\x26\x8b\xad\xcf\x04\x0f\xf4\xae\x5f\x75\x55\x7f\xfe\x9b\x5b\xa6\xf9\xf6\x05\xd1\x6c\xb4\x40\xe7\xf8\xa0\xfe\x7c\x94\x3f\xa6\x1c\xd7\x6f\x4f\x14\x55\x5e\xd5\x31\xa8\xd5\x31\x77\x6e\x4d\x4a\x53\x08\xca\x23\xa2\x28\x0e\x93\xfa\x5f\xa6\x59\x56\xdd\x22\xa7\x28\x9d\x31\x92\x8d\x75\xaa\x4a\x45\x64\xb0\x52\xe2\x26\xa5\xcd\xef\xf1\xc5\x28\x39\x91\x22\xce\x36\x41\x8d\xc9\x51\x0c\xec\x9f\x40\x3a\x52\x04\x46\x15\xd6\x1d\x79\x92\x9e\x65\x29\x6b\xa9\xfa\x96\x6f\xe4\xdc\x38\x7c\x95\xe6\x75\x66\x64\x7a\xd8\x8a\x6e\x9f\xa3\x76\x2d\x1d\xef\xf8\x9f\x46\xf6\x9e\x8e\xf3\x77\xb6\x74\x05\x7a\xf7\xef\x66\x4a\xd2\x39\x3e\xc7\x23\x36\x5b\xb0\xaf\x45\x51\x46\x93\x68\x8a\x11\x6c\x52\xd1\x6a\x58\xf5\x74\x74\x96\xe3\x67\xa2\x4a\x53\xbb\xa1\xfe\x8f\x7d\xb7\xd2\xd2\x76\x5a\x99\xe1\x60\x65\xfa\x65\x7a\x19\xdc\xad\x03\x0c\x8f\x95\x80\x94\xc9\x6f\xaa\x8f\xc0\x5f\x2b\x50\x96\xb5\x66\xb5\xd2\xd8\xd2\xbf\x23\x3f\xea\x41\x43\x68\x23\xba\x0c\xed\x43\x88\xa5\x5f\x41\x46\xff\x3a\xf8\x68\x1f\xce\xa4\x1a\xb8\x10\x25\xb2\xe2\xfd\x20\x3b\x83\x54\xe9\xaa\xdb\x4b\xa2\x7d\xd4\x38\xec\x10\x31\x9f\x48\x9d\x09\x44\x1e\x4c\x25\x92\x9a\xb4\xc9\xf1\xd1\x4c\xc2\x7e\xce\x46\xd8\x7f\xf9\xca\xd1\x81\xae\xd9\x5d\x75\x2d\x97\x78\x0d\xb3\x1b\x65\xdb\x5c\xdb\x28\x2c\xdb\x9c\xe8\xc1\xea\x31\xae\x63\x60\xa0\xa3\xae\xa6\x3d\xb4\xd6\xb3\x79\xce\x92\x6d\xf3\x57\x2d\x80\x83\xec\x1f\xf4\x76\x90\x44\xbd\xa1\xd4\x2f\x5d\x0a\xd8\xd0\xbc\xe8\xb6\x51\xf6\xed\xca\x33\x95\xad\xb5\x66\x78\xe3\xc0\xfa\xb6\x3a\x5f\xd6\xd0\x69\x9a\xd7\x24\x01\x4e\x1d\x5f\x7f\xb5\x65\x29\xce\x9e\x68\x94\x12\x6b\x92\x2d\xad\xee\x9a\xda\x39\xdd\x89\xae\xd5\x8b\xe2\xab\xdb\x33\x35\x3d\xea\x77\xf4\x36\x13\x25\x99\x5c\xbb\x75\x6b\xd3\x43\x4d\x16\x7b\x78\xe8\xa0\x7a\x99\xba\xbf\x74\xa2\xaa\x5d\x49\x45\xfc\x53\x0a\x6d\xa7\x63\xe9\x34\xe7\xc6\xb0\x1e\x1c\x93\xd6\x41\x61\x75\x02\x89\x0e\x28\x4c\x6c\x25\xe3\x00\x09\x16\xd0\x72\x8b\xd6\x38\x3d\xa0\x45\x93\x9b\x53\x19\xdd\x5b\xc9\x5d\xc0\x7a\x4b\x25\xa3\x11\x8e\x06\x2a\xbf\x4f\xbd\x18\xe1\x7b\x3e\xf7\xac\x5b\x3e\x0a\x4c\x7c\xcf\xc0\x95\x26\xb3\xc8\x5a\xd6\x88\xf1\xd4\xfa\x1b\xae\x9a\x3f\x6f\x60\xe0\xb5\x05\x3b\xe7\x84\xdf\x86\x4f\xf2\x4d\xee\x59\xe1\xc5\xc3\x4b\x86\x6f\xbc\x6a\xe5\x1d\x5d\x56\x83\xb6\x6e\xdc\x61\xf5\x5b\xd9\x50\x5b\x4b\x5f\xf7\x92\xec\xe0\xb2\xb6\x8e\x95\x0d\x58\x29\x73\xef\x65\x43\x6d\x5b\x2e\xf8\x8a\x72\x50\xb6\x34\x46\x86\x6f\xec\x91\x6a\x09\x87\xef\xeb\xdc\xd0\x3d\x67\xfd\x92\x79\xf3\xfa\x1c\xed\x3e\xcf\x14\x8a\xa6\xae\xdc\xde\x39\x2b\xd4\x3e\x4b\x72\xba\x63\x36\x8b\x41\x14\x2e\x9b\xe5\x8f\x84\x5b\x71\xc3\xd2\x88\xa1\x2b\xdc\xe8\x74\xd5\x7a\x7b\x7a\xe7\xaf\x59\x52\x57\xa1\x17\xdd\x8a\xae\x46\x48\x8e\x74\xe8\x40\xb8\xb4\x4e\xf1\x0c\xef\x76\x72\x7a\x83\xb8\x9c\x6e\xb9\xa2\xb6\x7a\x8d\xdb\xf5\x26\xb3\x42\x34\x93\x70\xbb\x32\xee\x52\x63\x69\xf9\x5d\xb2\xab\xdc\x72\xba\x0d\x2b\x65\x4f\x46\x23\xd5\xb8\x86\xb3\xc2\x06\x22\xd4\xf6\x24\x0f\x35\xac\x5b\x75\x8d\xbf\xd3\x0f\xb8\x27\xdb\x23\x0b\x00\x22\xd7\x16\xea\x5d\x7f\xfe\xce\xf3\x3a\x5b\x66\xd9\x1b\xed\x4e\xde\xca\x31\xac\xdc\xd0\xb2\x4d\xc4\x6b\x5e\x1c\xba\x4e\xe2\x98\xb6\xe8\x12\xce\x4a\x0c\x22\xe7\xb4\x7a\x23\x4b\x07\x2f\xbd\xfc\xde\x47\xf7\xec\xed\xe9\x75\xd9\xec\x35\xec\x3a\x49\x2c\xd3\xa8\xb3\x41\x8c\xd7\x03\xc3\x13\x06\xb0\x98\x35\x1a\x6b\xc4\x6b\x85\x28\xf7\x9f\xea\x5b\xfb\x96\x77\x07\x3b\x7c\x52\xb0\xd1\xd7\x39\x67\xc9\xa7\x56\x6c\x39\xba\xae\x7b\x9e\x33\x04\x98\xac\x33\x11\x01\x47\x04\xde\x63\x01\x33\x67\xf5\xf2\x31\xb3\xac\xde\xfa\xbd\xcb\x87\xda\xe7\xce\xe9\x0a\x04\xdb\x3b\x06\x87\xf6\x0e\x3f\x08\xcb\x4e\xd6\x34\x9e\xbe\xa9\xf8\x6e\x24\x84\x4c\x25\x1f\x8e\x6a\x4e\x81\xbb\xd0\x09\x1d\x31\xa2\xb2\xee\xf6\xaa\x7d\xf8\x3f\xbc\x5f\xfd\xbc\x6a\x8e\x50\x8c\x8a\xf8\x7d\xd4\x23\xba\x22\x3d\xfd\x8c\x8a\xce\x7e\xee\xc3\xe7\xac\x4c\x6b\xcb\x5d\xea\x8b\xc0\x66\x07\x36\x95\x31\x0d\xe1\xce\x52\x52\x2d\x27\x89\x38\xd3\xd1\x73\x66\xa8\xb8\x19\x2c\xaf\x64\x18\xd5\xc6\xe1\xda\xa9\x4f\x16\xf0\x28\x64\x1a\x2f\xd9\x82\x12\x08\x19\x21\x0a\x8d\xd4\xdf\xbb\xa3\x84\x63\x1a\x76\x6b\x23\x45\x3f\xc0\x59\xb6\xcc\xe7\x20\x7c\xa9\xfa\x0b\xdc\x2c\x9d\x3e\x2d\xa5\xa5\xe7\x25\x89\xe5\xb4\xed\xe9\x17\xb6\x6c\xf1\xfb\xb7\x6c\xf1\xc3\xbe\xe7\x9e\xeb\xe9\x79\xee\xb9\x1e\xf2\xab\xc2\x91\xfc\xa7\x0b\x09\xf2\x4d\x7a\xed\x6b\x69\xed\x5a\xe9\x79\x29\xad\x5d\x2b\x3d\x7f\x0f\x3d\xe9\xdf\xa2\x4e\xd2\xeb\x7a\x9e\xcb\x6f\x2a\x1c\xc1\xfe\x42\x82\xea\x1e\xb2\x25\xf9\xdf\x86\x3c\x68\x59\x85\x85\x3d\x68\xd7\x97\x78\xa5\xb0\x1c\xbb\x43\x64\x22\x21\xdd\x21\x82\xfe\x86\x1a\x38\x7d\xe1\x67\x4f\x46\xfa\x48\x3f\xf4\x01\x85\xc7\x48\x94\x83\xbd\xd5\x1f\x83\xf2\x69\xc1\xf8\x3d\x23\xab\xbb\xf6\xc3\x90\x41\x16\x83\x96\x28\xd1\x16\xa5\xda\x4a\x36\x4b\xa2\x96\xa0\x28\x1b\x22\x5e\x00\xc6\x28\x0b\xcf\xcb\xfd\xb5\x63\x11\x2f\x83\xbc\x11\x3d\x16\x00\x2b\x80\x8c\xdf\x33\x0a\xf9\x7f\xa1\xbb\x4c\x6e\x12\x59\xdd\xa2\x91\x00\x8c\x1e\x3b\x36\xaa\xfd\x01\x10\xa3\xe8\xb6\x7a\x23\x90\x35\xa4\x5d\x1d\xb5\x0d\xc2\xf3\xb2\x37\xa7\x03\x08\x94\x65\x98\xa5\x25\x1c\x06\x6d\x20\xd2\x96\xf6\x7d\x90\xa2\xe0\x9b\x22\x71\x3a\x5c\x6e\xdd\x08\x51\x60\xc1\xd4\x45\xca\x48\xa6\xe0\x5f\xa0\x0d\xee\x84\x73\x47\x70\x2a\x29\x35\x06\x18\x0e\xbd\xa4\x9e\x38\x75\xe5\xa5\xdd\xb2\xb1\xcd\x31\xda\x7b\xfd\xb7\x76\xee\xfd\xf5\x9d\x97\x7c\xf5\xe0\x86\x96\xe1\x65\x7e\x03\xb6\x60\xce\x9e\x38\xf5\xf8\xfd\x8f\x1f\xbe\xb4\x77\xa9\x68\x08\xbb\xd3\xf1\xbe\x75\x35\x5b\xed\xcc\x4b\x6a\x11\x3d\x74\x25\xd5\xd3\x06\x2e\x5c\xd4\xf0\xa5\x68\xd7\xe1\x77\x8f\x5d\xf5\xc3\x03\x73\x46\xf6\xdf\x32\x6f\xe7\xa7\x03\x96\x00\x3f\x8b\x73\x3b\x7a\x2f\xb8\xff\x67\x8f\xdc\xfc\xf9\x3f\x9d\xd7\x1b\xda\x73\x7e\x7d\x7c\xe0\xaa\xb5\x4b\x66\xab\x9b\x16\x5e\xba\x01\xf6\xfd\xfe\x94\x6e\x05\x2a\xd7\x6d\xa8\x42\xee\x2f\xd6\x4e\xd2\xc9\xc1\x0a\x95\xa3\x83\xef\x07\x56\x2e\x34\x2d\x7e\x38\xdf\xb2\xd6\x6d\x6c\x75\x5e\xd2\xf3\x95\xff\x5c\x78\xe3\x57\x47\x77\x7e\x65\xff\x05\x2d\x2b\x96\x09\x4e\xc6\xc4\x72\xf6\xf8\x4f\x1e\xbd\xef\xd1\x5b\x47\x7b\xb4\xca\xb9\x52\xb3\x7b\xd7\x7a\xb6\x78\xec\x5f\xab\x8c\x31\xbe\x61\x7d\xc3\x17\xa3\x9d\x10\xfd\xf5\x9a\x07\xaf\x5f\xd2\x35\x72\xe3\x47\x07\x76\x7c\x2a\xc0\x9a\xc4\x56\xbb\x5b\xee\x5b\x7f\xec\xb5\x87\x3f\xf2\xd8\xdb\xe7\xf5\x34\xec\x39\xaf\x7e\xf6\xdc\xdd\xab\x17\xcf\x56\xb7\x6c\x7b\xa0\x14\x88\x5c\xb6\x6d\xd5\x52\x79\x0d\x41\x32\x1a\x74\x26\xc4\x02\x9c\x40\xdc\x9d\xd1\x4a\x6d\xd3\x04\x9d\x70\x22\x15\x4a\x85\x9c\x21\x67\xc2\x99\xa8\x96\x50\xc9\x7d\x9c\x7a\xec\x67\xa4\x76\xd6\xda\xf4\xd6\x3b\xee\xd8\xba\xb1\x77\xe7\x65\xf7\x8d\x8d\x8f\x8f\x7d\xf6\x05\x38\xff\xf2\xcb\xaf\xb8\xe2\x8a\x2b\x40\xaa\x94\x61\xf1\x5e\x6f\xe4\x90\x27\x99\x0e\xdd\xf9\xc3\x3b\xbb\xb7\x6f\x7b\x53\xfd\xee\x9b\xaf\xec\xd5\xb2\x5d\x81\x3f\x3a\x4d\xba\xd5\xe6\xbf\xcf\x18\x11\x7b\x61\x01\x0b\xd8\x81\x2b\x48\xb1\x03\x6e\x9e\xba\x72\x3b\x68\x0f\x23\x99\x60\x2a\xe8\x0a\x3b\x35\x31\x2c\x94\x4a\xa4\x12\x4e\xf6\xc1\x7f\x51\xbf\xf5\xf2\x7d\xea\xbb\xcf\x5d\x73\xcd\x73\x60\xbb\x0f\xfc\x2f\xfe\x60\xcf\x17\x6f\x3c\x75\xc3\x0d\xa7\x6e\x5c\x7d\xe4\x82\x79\xf5\x9c\x3a\x82\xff\xd5\x42\xb6\x9e\x7a\xe5\xd4\xa9\x57\xf0\x95\x2f\xab\xdf\xfc\x9a\x96\x11\x9a\xc1\xf6\xdc\x35\xb9\x6f\xef\xde\xf7\xda\xe4\x6b\xfb\xda\x17\xac\x5f\x1e\x9a\xec\xef\xd7\xf2\x9c\x3a\x55\xd2\x21\x2a\x2c\x42\x16\xe4\x43\xad\x74\x25\x48\xa9\x4b\x79\x77\x3a\x93\xb0\x87\x1a\x1d\x22\x6e\x68\xc7\xc9\x3e\x1c\xf7\x03\xd8\xf5\x2f\x38\x64\x8f\xbb\x9c\xc1\xe4\x19\x23\x3a\x41\xa0\x28\x57\x7d\x7c\x59\xb3\x80\x15\x8c\x9a\x97\x1d\x38\x76\x60\x59\xb3\xbe\xc1\xcd\xa3\xc7\x26\x14\xed\xbb\x63\x94\x63\x7f\x88\x78\xdf\xa7\x1a\x07\x1e\x79\x23\xa0\x8c\x40\xee\xf0\x70\xd8\xa1\x8e\xff\xee\x8e\xbb\xf7\x2d\x5f\xbe\xef\x6e\x7d\xa3\x36\x63\xa4\x5d\xa0\xd2\x5f\x92\x2d\xf3\x05\x45\x0a\x58\x03\x0c\x22\x0a\x12\x8a\x51\x32\x14\xcf\x20\x11\x8c\x33\x48\x56\xb3\x72\x52\xfb\xa1\x64\x49\xe4\x02\x9a\x96\x21\x27\x27\x8b\x38\x0f\x80\x18\x44\xb2\xfa\xb5\x3a\xd7\xb7\xee\xe4\xcf\x20\x9d\x65\x89\x66\x96\x21\x07\xd4\x57\x42\xd6\x1d\xf2\xf5\x6b\xb3\x48\xc1\x0a\x43\x9f\x5b\x60\xd6\x2d\x40\x1b\x68\x2b\xfb\xf2\x83\x98\x6c\xe5\x7d\xe4\x22\x9f\xb2\x82\xb3\x4c\x45\x99\x75\x20\x41\x37\xe0\x2c\x2d\xb3\xfe\x2c\xfc\x40\xb9\xf0\x91\xc2\x73\xa7\xc7\xd6\xd4\x21\x94\x08\x52\xdf\xc8\xb0\x3d\x68\x9f\x61\x6e\x1d\xc3\x23\x79\x45\x66\x2f\xcf\x2b\x78\x44\xa7\xce\x2e\xcd\x77\x8c\x32\x31\x26\xc8\x01\x66\x64\x42\x91\x99\x17\x2b\x79\x48\xb4\xfe\x99\x63\x74\xec\xb9\xda\xea\x56\x95\xaa\xda\x69\x7a\x1b\x47\xaa\x9a\xed\xe7\x15\x2d\x31\x43\x1b\xd2\xe7\x60\x74\xee\x77\x37\xed\x46\x85\x6b\x09\x2a\x94\xf1\x1c\xef\x8e\x54\x3f\xb7\x1c\x4f\xec\x45\x73\x2a\x57\xa6\x2e\x37\xe3\xf6\xe3\x6e\x4c\x6d\xdf\xe1\xb4\xec\xe0\x78\xc4\x8b\x4c\x0b\xa6\x81\x05\x8d\xd4\x8a\x5b\xa0\x89\xd2\x15\xe5\xad\x5d\x30\x7a\x6b\xd7\xa2\x6b\x13\x00\x89\x6b\x17\x75\x7d\x1e\x16\x77\xb5\x6c\x59\xa2\xde\xb6\xd1\x34\xb7\xa5\x37\xed\x06\x70\xa7\x7b\x5b\xe6\x9a\x36\xa8\x9f\x6f\xe8\xbb\x62\xf5\x32\x36\x37\x77\x33\x99\x33\xf9\x3b\xea\x85\xef\x9d\x1d\xf9\xdb\xd6\xe6\x8e\xd9\xb3\x3b\x9a\x6f\xfc\x55\x14\xd6\xad\xb8\x3b\xa1\x4e\x64\xf9\x8e\xba\x46\x49\x6a\xac\xeb\xe0\xb3\xef\x78\x9a\x8f\xf6\x2f\xdf\xb9\x89\xbe\xf3\xa7\x38\xc4\x5e\x46\xe3\xfe\x5a\x0a\xf8\x16\x2e\xdd\x55\x37\x99\x8e\xbb\xa8\x46\x5f\xa7\xa8\x77\xda\x83\x92\xad\x03\x82\xce\x10\x0d\xb1\x84\x0b\xd5\xaf\xc2\x66\xb8\x78\x0d\x5e\xb5\xed\xe2\xcf\x6d\x63\xee\x52\xbf\xb6\x72\x5d\xff\x5a\xa7\x59\xfd\x1a\x06\x80\x25\xd8\xd1\xbc\xe8\xe2\xfe\x27\x5e\x26\x77\x4d\x06\xc9\x7f\x40\x7c\xc9\x96\x2d\x4b\x96\x5e\x74\xd1\xe4\x2f\xf3\x3f\xc4\xd2\x25\x7b\x17\x24\xfc\x89\xfc\xeb\x70\x17\xbc\x3b\x6b\xd6\xdd\x81\x59\x9d\xf5\xbf\x99\x8e\xaf\x9f\xa4\x73\x22\xe5\xf4\x8f\x46\xd2\xfd\x90\x4e\xb8\xdc\x74\xdc\xc2\x74\xee\xe0\xf8\x2a\x35\x3f\x25\xfd\x77\x71\xe8\x86\x97\xd4\xdf\x7e\xea\x0b\xea\x8f\x2e\xe7\xc1\x70\xd8\x64\xb5\xf1\x4b\x5e\xdd\x5b\x64\xfe\xdf\xf2\xaf\x0b\x0f\x57\x68\xe6\x6f\xba\x14\xe4\xa3\x9f\x02\xdf\x4b\xc4\xa7\xfe\x50\xfd\xed\x4b\x37\xdc\x73\xc8\x54\x63\xb8\xdd\x88\x4d\x9b\x77\x16\x88\xff\x17\x0d\xdc\x5e\xa1\xb9\xff\xc8\xf6\x2b\x6f\x78\x09\x01\x8a\x4d\x39\xb9\x3f\xb2\x3f\x45\xbb\x11\x0a\x4e\x03\xad\xe5\xb9\x86\xa8\x9f\x73\x3a\x78\x91\x2d\x1c\xeb\x63\x68\x38\x34\xeb\x2e\x74\xa1\x76\x2e\x95\xcc\xf4\xb1\x05\xdd\x91\xc8\xd0\xd0\x12\x36\xea\x72\x58\xa1\x88\x05\xfb\xc7\xf0\xa5\x94\x77\xf7\xbe\x48\xcb\x14\x3a\x20\xc6\x44\xec\x64\x6c\x8c\x81\xf8\x48\xad\xd9\x2b\x79\x85\x98\x4f\xdd\xe9\x33\x1a\x5d\x66\x3f\xf1\x47\x4c\x36\xbb\xc9\xce\x39\xb0\x28\xc2\xc6\x99\xb2\xc2\xf1\x19\xb2\x1e\x00\xd4\x92\x4a\x46\xe1\xd2\x70\x2a\x7c\x59\x38\x0c\x97\x35\xa6\x53\x2d\x80\x0e\x88\x22\x76\x70\x76\x93\xdd\x66\x8a\xf8\x89\xdf\xec\x32\x1a\xa9\xa6\x4c\xf0\x4a\x5e\x73\x2d\xf1\x11\x03\x63\x63\x9c\x58\x8c\x69\xcf\x3a\x33\xab\xba\x73\xa6\xac\x07\xa6\x50\x4b\x58\xbd\x2f\x5a\xc6\xf0\xd0\xfd\x89\x83\xa8\x89\x5a\x36\x06\xcb\xb1\xd5\x25\x61\x4e\x4e\xb7\x03\xc7\x13\x91\xfa\x7b\xa4\x33\xe9\x48\x63\x55\x8e\xa2\x47\x1c\xd8\x78\xdd\xee\x63\x2f\x32\xbf\x83\x42\x59\x90\xc1\xac\x6f\xfe\xbe\x9d\xab\x8d\xb7\xf3\xdb\x7b\x36\xd9\x1c\xc3\x0f\xdc\xee\xb0\xb5\xe2\x2d\xf4\x4c\xfe\x05\xba\xc1\x85\x7c\x47\x3e\x26\x87\x4e\xdf\x12\x92\x3f\x76\xe7\xbb\x30\x04\x97\xc1\xd0\xbb\x77\x02\x3d\x33\x88\x0b\xf4\xc8\x27\xe0\x80\xb7\x4d\xac\xf5\xaa\x37\xb1\xcb\x7a\x96\xdd\x1e\x1b\x5e\xd6\x73\x95\xa8\xe7\x78\x81\x6e\xf6\xe8\xf9\x72\xea\xc4\xaf\xea\xea\x7e\x09\xdc\x57\xb5\x9b\xdc\xf9\xae\xfa\xaf\x25\xec\x46\x5a\x77\x97\x36\xff\xa1\x00\xa3\xad\x29\xeb\x81\xe7\xf8\xb4\x8e\x46\xdf\x98\xb6\x45\x98\x32\x18\x57\xa8\xa1\x1a\x8d\x8b\x82\x44\x0f\xa9\x3b\xd5\x07\x4f\xdd\x75\xd3\x79\xb5\x9e\xf6\xe3\x37\xb6\x74\x2d\xe8\xfd\x31\x6c\x3d\x75\x0a\x56\x56\x60\x74\xb1\x56\xcf\x19\x20\x5d\xef\xc2\xa7\xe0\x2d\xf8\x14\xa3\x1c\x79\xfb\xf0\xae\x17\x96\xc6\x47\x36\xac\xec\xbf\x2c\xc2\x19\x8e\xbc\x0d\xd2\xdb\x3f\x28\x03\x77\x39\xed\x33\xe0\x76\xfd\x0b\x44\x9f\x78\xa2\xac\x83\x40\xc8\x81\xe6\xa0\x6d\x95\xb5\x28\xd5\x21\x19\xd1\xde\xc2\x07\xa0\x28\xc0\x07\xe3\x27\x38\x1d\x1c\x39\x5f\x7d\x49\xfd\xdb\x83\xa3\x23\x17\x85\x1a\x7c\xad\xa9\xe5\x83\x9f\x00\xd3\x83\x0f\xe6\x3f\x0d\x07\x60\xc1\xc9\x73\xa0\x2b\xb0\x73\x3e\x14\xaa\xc2\x9d\x8c\xb2\xf3\xe9\x1d\xab\x8e\x77\x76\xae\x71\xc8\xf5\x26\x71\xe7\xd3\x3f\x7e\xfa\xad\xc3\x6f\x9f\x03\x6a\x61\xe2\x1f\xe7\x46\x59\xb8\xf1\xba\x53\x08\x10\x4c\x21\xb2\x8f\x55\x28\xf6\xb3\x8b\x2f\x84\x37\x65\x64\x56\x37\x4e\x14\x9c\xe1\x9d\x0e\x9e\x84\xd3\x89\x38\xd9\x23\x99\xf3\xbf\x15\xea\x18\x93\xdd\xce\x7c\x5f\x1d\x65\x0c\x92\x20\xb1\xff\x8b\xf1\xd8\x60\xb1\xec\x65\x9f\x80\x3b\x0c\x8c\x4c\x7e\xe4\xf0\x4c\xdc\x58\x83\x59\x9f\x8d\xc4\xb6\x83\xd9\xea\x21\x5d\xa2\x54\x63\x37\x98\xd4\xd9\x5b\x70\x25\xf7\xc7\xda\xe9\xfa\xd0\x6e\x48\x05\x9d\x89\x6a\x72\xe4\x19\x8f\x51\xc3\x6d\x68\x3a\x79\x46\x0b\x38\x83\x05\x14\x41\x1e\x75\xc6\xf4\x90\xc2\x11\x15\x51\x8d\xec\x8c\x7b\x43\x49\xac\xef\xd3\xc0\xc3\xd8\x08\x46\xc9\xa1\x91\x58\x67\x65\x38\x62\x2e\x57\xcc\x3d\xc3\x5e\x72\x28\x57\xbc\x56\x3b\x9a\x1b\x4a\xe6\x3a\xcb\xb2\x49\x0e\xc9\x68\x05\x3a\xbf\x20\x17\x15\x1d\xde\x5d\xf1\x74\xca\x9e\x8e\xeb\x5a\x46\x6d\xd9\xc4\x15\x4d\x41\xed\x10\x6d\x87\xaa\x5d\x3a\x99\xe9\xb8\x04\x69\xa4\xcd\x1a\x7e\x70\xbb\xc0\x19\x69\xe0\xe9\xed\x88\x72\xfc\xe5\xe3\x91\x64\x64\xf9\xb6\xe5\xc1\x3e\x12\x94\x05\xb3\x65\xf6\xfa\x39\xf3\xaf\x6b\xe1\x9d\x8c\xd9\x2e\x99\x19\x27\xdf\xb2\xf7\xb6\xbd\x74\x57\xb2\xd3\xdd\xeb\xe6\xcf\x59\x3f\xdb\x62\x16\x64\x68\x43\x53\xb0\xf6\x5b\x77\x80\x30\xfe\xd9\x20\xe4\x51\x73\x6b\x73\x24\x19\xc1\xcf\xe5\x4f\xee\x3c\x7e\x7c\xa7\x26\xc2\xc4\x97\x2f\x8f\xe3\xf9\xe6\x88\x20\x9b\xda\xdb\x97\xf6\x98\x1a\x39\xbb\x9d\x6b\x34\xf5\x2c\xad\x4c\xb7\xb7\x9b\x64\x81\xc5\x5f\x03\xfb\x6d\xc3\x47\x7f\x73\x3b\xc6\xaf\x6c\xc1\x78\x8b\x26\x94\x32\x25\xbb\x8a\x01\x79\x50\xad\xb6\x02\x61\x83\xba\x2d\x25\x78\x86\xb2\x24\x58\x8a\xe1\xee\x9d\x4e\x8a\x42\xb5\xf7\x04\x11\x6a\xe3\x50\x15\x40\xb2\x90\xa7\xda\x4c\x9c\x13\x64\x40\xd0\xa2\xbe\x86\x51\xd9\xd8\xd2\x19\x63\xb2\xb1\x4e\xa7\x55\x9b\x0b\x14\xac\x74\xc6\x60\x0c\x02\x25\xac\xd8\xfc\xe5\xd0\xa2\xae\xcd\xd3\x77\x3e\xa6\xab\xe9\x3b\x63\xea\xd7\x05\xab\xba\x93\xaa\xea\xf5\x77\x47\xb9\x60\x6c\x28\x86\x36\x52\xdb\x24\x0d\x2b\x2f\xac\x99\xfc\xe0\x2e\x44\x35\x38\x74\xa6\xec\x44\x9a\xae\x77\x33\x0e\x5e\xc4\x65\xb4\x11\x6d\x65\x48\x03\xb6\xe8\x9b\x2b\xfe\xb5\x63\x1d\xb8\x37\xee\xc7\x78\x5c\xf6\xca\x97\x25\xb5\x72\xc5\xb7\x0e\x8e\x2d\xb8\xf2\xd6\xdb\x6f\xbd\x72\xc1\x7c\x53\x93\x49\x11\x7e\x2b\x28\xa6\x26\xd3\x7c\xe5\xe2\xb6\xee\x1e\xa6\xa3\xa6\xa6\x4d\xe8\x6f\x77\x0c\x6f\x1a\x76\xb4\xf7\x0b\x6d\x35\x35\x1d\x4c\x4f\x77\xdb\xc5\xe7\xdf\xf3\xb5\x6f\x7d\xed\x9e\xf3\x09\xd5\xbc\xb6\xc7\x65\xaf\x1c\x18\x4a\x2e\xde\xb7\xa2\xad\x6d\xc5\xbe\xc5\xdb\x57\x98\x5b\xcd\x9f\xb8\xe7\x9e\x4f\x98\x5b\xcd\x2b\xb6\x7f\x72\xf7\xec\xa1\xab\xe3\xbe\x74\xb8\xb6\x36\x9c\xac\x73\x7b\xda\xe3\xad\xc9\x64\x6b\xbc\xdd\xe3\xae\x4b\x6a\xc7\xd2\xbe\xf8\xd5\x43\xb3\x77\x7f\x72\xeb\x13\xbb\xe7\xce\xdd\xfd\x04\x1d\xff\x75\xec\x59\x2f\x8d\x41\xa1\x6a\xea\xb2\x6d\x48\xe7\x91\xa4\xee\x12\xb6\x0a\x5c\xca\x48\x39\x50\x5d\x87\x33\x13\x4e\x8f\xc9\x82\xc5\xa2\x7e\xc7\x68\x84\x2c\xa5\x8a\x1c\x11\xe4\x02\xca\xe4\xe9\x31\x8a\xf2\x3b\xa2\xa3\x48\xc2\x48\x4e\x90\x73\x82\x6c\x82\xac\x51\x10\xb5\xdc\xb2\x90\x93\x71\xb0\x08\x16\x49\x55\xcb\x25\x48\xc8\x22\x46\x20\xe5\x26\x4a\xd1\x18\xe0\x96\xb2\x05\xa8\x68\xcb\x8a\x67\x20\xcd\x7e\x80\x5d\x99\x45\x92\x38\x4e\x6f\x3c\x2e\xc8\x46\x18\x31\xfa\x8c\xb0\xd9\x84\x8b\xd6\xe6\x3b\xae\xc5\xd0\xfa\xea\xa7\x80\x74\x2f\xda\x3c\x7a\xac\xe9\xa6\x47\xf1\x88\x28\xc1\x08\xb5\xf3\x8c\x51\x06\xcc\x31\xa3\x11\x36\x5b\x5e\xa5\x36\xe8\x9b\xde\xc8\xf8\x85\x57\xa1\xf5\x5f\xee\xee\x3b\x36\x3a\xd4\x57\x7f\xea\xcc\x32\x46\xa9\xe3\xb2\x8e\x4f\x51\xf2\xc3\x4d\x14\x10\x21\xce\x5a\x46\xed\x31\x3e\xa3\xfa\x90\xa9\xa2\xb0\x1f\x50\xc6\x31\x51\xab\x89\x51\x7d\xc8\x62\x11\x25\x95\xb6\x31\x8c\xc8\xea\x3b\x67\x29\x24\xaa\xe4\x48\xe7\xd1\x7a\x34\x52\xb6\xe8\xb0\x25\x5f\x0d\x92\xe1\xea\x80\x82\x14\xe8\xa0\x04\xa9\x64\xc6\x15\xc8\xb8\xea\x28\xf8\x6e\x11\xcd\x2c\x4a\x87\xa3\x69\xfb\x91\x68\x32\xdd\x8e\xa3\x7e\xa6\xe4\xd8\xa1\x9b\x7a\x99\x88\xee\xb6\x61\x0e\xcf\xd9\x39\xdf\x35\x67\xe1\xae\xb1\x5d\x8b\xba\x6a\x0e\xc1\xc2\x43\x35\xa3\xc7\x02\x9d\xc3\x9d\x81\xa1\x9d\x43\x74\xbb\xa0\x1b\x80\x31\x19\xe6\xef\x9c\x13\x36\xab\xb9\x82\x1b\xc7\xcf\xa9\x09\x7b\xff\xf5\xb7\xdf\x7e\xfd\xfc\x03\xc7\xae\xde\x60\x4d\xce\x7f\xc1\xb1\xad\x77\x78\xd7\xae\xe1\xde\x6d\x8e\x17\xfa\xea\x77\xee\xac\xef\xcb\x1e\x1b\x3d\xbf\xae\x59\xfb\xb8\x9b\xeb\xce\x4f\x0e\x0d\x25\xcb\x7b\xf3\xf7\x36\x98\xe6\xd6\x27\x9b\x65\xeb\x86\xab\x8f\x1d\x20\x3f\x2d\x38\x74\x94\x62\xcb\xf5\xb6\x58\x56\x96\xf4\x32\x0e\x8e\xb7\x3b\x98\x40\x63\x2f\xe8\x71\xbf\x89\xb8\x9b\x9a\x7d\xe8\x17\x61\x77\xb8\x02\x69\xdd\x17\x9f\xea\x84\xf4\xb7\x67\x77\x70\xbc\x53\x3f\x43\x25\x89\x78\x29\x6c\x61\x51\x97\x0e\x1f\xfd\xc8\x1b\x11\x2f\x67\xb2\xf7\x84\x52\x83\x83\xa9\x60\xfd\x49\x30\x9c\xac\x0f\x6a\xe9\x50\x8f\xdd\xc4\x79\x23\x6f\x3c\xa2\x1d\xea\x5a\xb4\x6b\x6c\x17\xd1\x9d\x0e\xb2\x7d\x5b\x9c\xea\x9e\x13\x6f\xbe\x79\xe2\x90\xe3\xa7\x77\x53\x48\x0d\x7f\xe3\xe0\xe8\xa0\xa4\x5e\x41\xb5\x77\xf7\x4a\x83\xa3\x83\x8d\x7e\x1c\xf1\xaa\xe8\xee\x9f\x3a\x0e\xd1\x83\x47\x9c\x5b\xfa\x86\x77\xed\x2a\x70\x7d\xea\x76\x55\x6d\x35\x1b\xd6\x7d\xa3\xd8\x32\x3c\xba\x3d\x68\x4f\x94\x5c\xa1\x0a\x18\xea\x89\xa2\x47\x94\x3a\x46\x51\x1d\x99\xb1\x49\xa4\xe8\x2e\x50\x18\x1d\xda\x98\xcd\x6e\x3c\xc4\x28\x8a\x32\x81\x0e\x6d\x24\xd9\x8d\x87\x26\x10\x8b\x74\xcf\xa7\xf1\xc9\xdc\xc6\x43\x2c\x3a\x84\x70\x45\x8c\x58\xa2\x2a\x42\xec\xc3\x47\x85\x91\xec\x87\x0c\x04\xfb\x50\x81\x5f\xba\x6c\x98\x2d\xc8\xf6\x0d\xf4\x4d\xd3\xca\x42\x50\xef\xf4\xc8\xa6\xc9\x12\xd3\x34\x08\x9c\xb2\x6b\x38\x9b\x1d\x7e\xff\x5d\x1e\x1d\x1b\x9d\x40\xa3\xc7\xf8\xec\x9b\x27\xb2\x87\x36\xe6\xb3\x1b\x0f\x45\xbc\x8c\x72\x82\xcc\x1a\xdb\xa5\x2a\xf9\xdc\xe8\xb1\x63\x8c\x51\xfd\xee\x9b\x01\xad\xbd\xf0\xb8\x37\x52\x89\x85\xde\x86\x06\x74\x69\x80\x2f\x45\x98\xea\x5d\x8a\x76\x19\x97\x8e\xbd\x32\x3d\xcd\x96\x72\x86\x2a\x79\x57\x17\x75\x51\xe0\xff\xae\x45\x95\x30\x0a\x91\x64\x84\x20\x7a\x7c\x5c\x90\x4f\x1e\x02\xe4\x8d\xb0\xb9\xbc\xd2\xbb\xcd\x31\xf9\x9e\xf6\x11\x10\xb3\x63\x5b\x2f\xd6\xe1\x61\x47\xa8\x33\xde\x58\x75\xfa\x7d\xca\x99\x81\x91\x2c\x90\xc0\xa1\x93\xba\xdd\x57\x8f\x5f\x91\x91\xb7\x80\x81\xbb\x9a\x32\x1a\x38\xab\x8d\xec\xbc\x3d\x18\x89\x42\x04\x0a\x33\xbc\x1d\xa6\xc1\xcb\x44\x52\x6c\x95\x15\xb0\xda\x2a\xc8\x9e\xf4\xc5\x4a\x96\x77\x25\x36\xe2\x3b\x04\xd7\x99\x2c\xea\x0f\x2c\xb0\x95\xba\x37\x20\x40\x92\x58\x84\x9c\x11\x25\x3c\x5e\x4c\x55\x1e\x95\x44\xe6\x90\x6f\x24\x36\xa1\x68\x77\xe1\xa8\x15\x7e\xbe\x7a\x5b\x9d\x05\xba\x2c\xa7\x25\x06\x69\xe2\xc0\x69\x44\x46\x8a\x46\x23\x71\xac\x6c\xdd\x9b\x42\xe5\x34\x72\x54\xe0\xd7\x9f\x69\x4b\xfa\x22\xfa\x36\xfa\x09\xfa\x0f\xf4\x67\x34\x05\x56\xa8\x87\x36\xe8\x3d\x93\xb7\x3a\x55\xb5\xcf\x56\xed\x87\x67\xe0\xa9\xfe\xa0\xf3\xe1\xff\x9f\x5d\x7f\xae\xfc\xd5\xf5\x05\x6d\x88\x29\x7a\x5b\x9e\x81\xc5\x04\x4a\x19\xa5\xbb\x02\xaf\x1b\x95\xd3\x53\x15\x69\x72\x96\xe3\x53\xff\x17\xf3\xe3\xb3\x1c\x9f\x5e\x66\x50\x26\x14\xad\x6e\x14\x18\x0b\x55\xb2\xbf\x8f\x97\x6a\xfa\xd7\x33\x2b\x5e\x71\x2c\xff\xd7\x19\x0e\xfe\xf5\xff\x60\x46\xf5\xaf\x1f\x58\xb2\xd3\x47\x39\x74\x1a\x8d\xeb\x02\x5c\x85\x3b\x30\x12\x3e\xf0\x9b\xf9\x1a\xfa\x05\x7a\xef\xff\xfe\x57\xf2\x3f\xe9\xa5\x25\xbf\x8c\x8a\xfe\x5a\x03\x45\xbe\x81\x50\x6a\xba\xb7\x51\x2f\x24\x9c\x67\xe2\xdb\x27\x82\xa5\x15\xcc\xff\x91\xde\xfd\x61\x7b\xdf\x94\xb6\x12\xce\xc6\x3a\xb5\xb4\xde\x0b\xe9\xa9\x8a\xf2\x28\x85\xfb\x15\xfb\x26\x64\x3b\x63\x90\x8b\x75\x42\xf6\xff\xb3\x3e\x7a\x8e\x1e\x35\x79\x94\x51\x02\xda\x80\x1d\x98\x50\x68\xbf\x22\x39\xbd\xa0\x23\x23\x25\xc7\x2a\x3d\xdd\x56\xfe\x7c\x80\x5e\xa1\x8e\x47\x10\x4b\x6d\xaf\xba\xdc\x66\x43\x1e\xd4\x83\xb6\x4e\xb7\xbe\x52\x08\xd7\xa2\x38\x27\xd3\xd7\x57\x62\x8f\x08\x15\x29\x24\x9c\xa5\xb7\x19\x4f\xeb\x00\x10\xd3\x0c\xb4\x11\x6a\x9d\x4d\xeb\xb6\xd9\xd2\x34\x4c\xd5\x6e\xea\x0b\xa0\x7c\x5a\x34\x7c\x8f\xc7\x2c\xa2\x07\x5e\x90\xc4\x71\x6a\xea\xd6\xb1\xf3\x8b\x49\x40\x11\x6f\xae\x68\xaf\xa5\xdf\x8d\x57\x7e\x5e\xce\x7a\xc7\x74\x2b\x4e\x41\x85\xa7\x00\xc2\xfc\xf7\x2c\xa6\xfc\x93\x74\x9f\x04\xce\xb8\x8f\x96\xc4\xed\x13\x8a\x37\x52\xb4\xdc\x46\x92\x11\x18\xf3\x66\xe5\xe7\x65\xea\xaf\x1e\x29\x62\x4b\xe8\xb8\xf5\x51\x34\x1b\xf5\xd3\x18\xf7\x0f\x53\xf5\x0f\x25\x15\xd2\xd5\xd3\x0c\x55\xcc\xeb\xd2\xa2\x42\xa5\x1f\x26\x37\x91\x1b\x2b\x4b\x8b\x81\xc0\xc6\x43\x30\x36\x73\x6d\xfe\xf4\x81\x42\x64\x11\x9f\x83\xe2\xc2\xcf\x41\x08\x38\x01\xf8\x90\x2e\x82\xb7\x90\x54\xc2\x1e\xe2\x43\xd1\x54\x22\x95\x48\x45\x53\x99\x54\x28\x15\x4a\x65\x12\xee\x84\x3d\x94\xea\xc6\xba\xaf\x2f\x24\xdc\xac\x1f\xdc\xbc\x02\xea\x9b\xea\xd8\x78\x56\xfd\xc5\x02\xad\xf9\x47\xc6\xb2\xd9\xb1\xdc\x48\x20\xa0\xe4\x72\x4a\x20\x30\x92\xd3\xf6\xa9\x30\xb4\x00\xc2\xd9\x71\x18\x51\xee\x36\xe0\x6c\x20\x1b\xc8\xaa\x63\x46\xd1\x18\x80\xb1\xf1\x40\x2e\x60\xf0\x28\x1e\x43\x20\x17\x18\x87\xb1\x80\x51\x5b\x08\x66\x03\xbe\x59\x26\xba\x7e\xc8\x16\xfc\x4f\x38\xe4\xd1\xad\x13\x9a\x98\xeb\x0c\xa6\x32\xb4\x3d\xa3\x99\x60\x26\xe8\xe6\x29\x00\xf7\x60\x8a\x51\x26\x14\x45\x39\xf1\x66\x36\x00\xe3\x01\x92\x0b\x64\xb1\xa2\x7d\xad\xa9\x41\x35\x9b\xcb\xe5\xde\x3c\x01\xd9\xac\xa2\xe4\x02\x93\xe3\xd3\x38\x53\x13\x08\x85\xcb\x74\xa9\x55\x7e\x8f\x3a\x3c\x08\xc5\x3f\x3c\x03\x07\x88\xfa\xf1\xa9\xa8\xcc\x5b\x8b\x8b\xcc\xa9\x95\xb6\xdb\x9c\x6e\xbb\x52\x73\xb4\x1b\x51\xf3\x91\x36\x20\xa8\x39\x6f\x24\x42\xbe\x51\xe5\x9b\x58\x55\xae\x0f\xc3\xe5\x3a\x53\xb9\xd4\x9c\x5e\xb6\x9c\xfe\x2c\xbd\x54\xd9\xea\x92\xe9\x64\xae\x59\xbd\x74\xd3\x2f\xc0\x73\xa6\x17\x0c\xa3\x36\xb4\x8c\xfc\x95\x49\x20\x07\x6a\xd2\x56\xb4\xd5\x5c\xb8\xbc\x11\x98\x99\x0e\xe2\xab\x4d\x71\x93\xd7\xa4\xb6\x9b\x4c\xf0\x8a\xc9\x6b\x8a\x9b\x4c\xea\x5e\x38\x0c\xb7\xcf\x78\xf8\x49\x9a\xa2\x47\xe0\x15\x93\x9e\x65\xaf\xba\xd7\x34\xf3\x61\x9d\x57\x0d\x2d\x23\xff\x56\x2c\x17\x2a\xfb\xb6\x94\x39\x75\x99\x99\x0e\xe2\xd5\xda\xc3\xf5\xfb\x1e\x56\xf7\xea\x37\x85\x57\xe0\xf6\x19\x0f\xe3\x65\x7a\x59\xe9\xde\x61\x38\x5c\x28\x71\xbb\x69\xe6\xc3\x5a\xb9\x96\xa1\x8f\x31\x09\x66\xf5\xb4\xf6\x9a\xce\x0f\x21\xcd\x74\x90\x49\x9c\xab\xd6\xd3\x0e\xbf\x73\x46\x51\xb5\xe7\xc3\xb5\x33\x1e\x46\x7a\xb9\x9e\x64\x12\xcc\xd5\x95\xed\x55\xc5\x31\x21\xcd\x74\x90\x49\x9c\xbd\xba\x33\x1c\xc6\x4f\x9e\xf9\x72\x4d\xa6\xb8\x56\xb0\x19\x0e\x6b\x63\x51\x1b\x5a\x86\xaf\xa6\xef\x51\x2b\x95\x11\xaa\xe9\x96\xf1\xd5\xc5\xdc\xd3\xfa\x0d\x79\x67\xe6\xc6\xa2\xe3\x9b\x80\x96\xe1\xd5\xa5\x7b\x7e\xe8\x4e\x70\xb6\xb7\x4d\xef\xb9\x0c\x04\x26\x41\x56\xeb\xf7\xfc\x27\x5e\x20\x5c\x7e\xb6\x77\xa2\xdd\xb3\x8d\x49\x90\xab\xcb\xe5\xfc\x90\x8d\x4f\xda\xce\xd2\x9c\x05\x3b\xb4\x2e\x37\x76\xe8\x78\xa9\x95\x28\x3d\xba\x2d\xdf\xe1\x2f\xad\xc8\x93\x7d\x90\xaa\x18\x43\x78\x24\x0b\xef\x53\x11\x81\xcb\x52\xdb\x7e\x7e\x3c\x10\xd0\x49\xd2\x03\x81\x3c\x85\x48\xe2\xb2\x03\x9b\x70\x80\x50\x99\x62\x92\xfa\x06\x2f\x9b\xc8\x0d\x6c\x0a\xaf\xec\x15\xb4\x31\x44\xec\x19\x8e\x94\xdd\xd1\x2a\x7c\x40\xac\x34\x62\x5d\x1b\xdb\xa6\x5b\x1a\x42\x50\x81\x3d\xa7\x95\x55\x13\x01\x0b\x32\x63\x82\x8d\x27\x5b\xa0\xc1\x91\x80\xb1\x92\x93\xdb\xc0\xc4\x98\x2c\x30\xf4\xf1\x13\x39\x41\x66\x47\xc6\x74\xd8\xa6\x31\xb2\xcb\x66\x1b\xb3\xd9\x00\xe9\xe8\xa1\x3a\xfa\x2d\x19\x29\x2b\xb8\xe5\xc9\xd5\x54\x59\x3d\x32\x12\x08\x94\xfc\xc1\x19\x5d\xd6\x71\xa3\x68\x59\xce\x09\xcf\xd8\x6a\x95\x2a\x03\x1d\xe7\xe1\x73\x85\x16\x10\x88\xde\x58\x65\x2c\xbc\x1d\x54\x81\x30\xae\x6b\x94\x27\xb5\x12\x90\x17\xa7\x39\xea\x31\x7a\x01\xa8\xde\xc4\xad\x7b\xa3\x9f\xed\xe9\x98\x36\x41\x37\x54\x53\x18\xc0\xcb\x14\x10\x09\x4d\xc9\x82\x8a\x68\x1d\x91\x20\xe7\xb4\x26\x18\x83\x59\x43\x49\x15\xe9\xda\x87\xe4\xd0\x66\x1d\x37\x89\x36\x81\xae\xef\x27\xcb\x02\x81\xc0\x24\xcd\xc0\x68\xbf\x95\xf3\x8f\x19\xb9\x11\x42\x05\xa6\xda\x3e\xd0\x8d\x93\x25\x96\xe7\x8f\x97\x48\x69\xef\xbd\xf7\x0c\x5a\x5a\x66\xac\x82\xb4\xf6\xd9\x99\xb0\x1e\x0a\x73\x7a\x90\xb2\xff\x94\xeb\xd3\x87\xbb\xa1\x48\x74\x5c\xa2\x21\xab\xa4\xfb\x99\x39\x03\x41\xbb\x86\x55\x65\x78\xd7\xca\xdb\x9f\xdd\x49\x67\xb3\xec\xe8\xb1\xce\xd8\xf8\xf0\x2e\xa2\x9c\xe5\x04\xce\x6a\x87\x77\x0d\xe3\xdc\xce\x67\x6f\x5f\x49\xa7\xbe\x63\xa3\x81\x58\xa7\x9e\x7d\x86\xe3\x68\xc6\x72\x8b\xb8\x62\x99\x93\xee\xd5\x97\x33\x95\x34\x45\x1f\x9c\x81\xa0\x33\x0a\xb6\x6b\x18\x14\xad\xdc\x67\x39\xc1\xe4\xf2\xd9\xea\x12\x03\x2d\xf1\x59\x8e\x23\x8a\x95\x97\x9d\xca\x52\x7d\xa1\x11\xd9\x29\x2a\x9a\xf6\xfd\x75\x17\x62\x0d\x74\x1c\x9d\x78\x29\x62\xb0\x18\x5d\xe0\xd0\xd5\xaf\xe5\x78\x83\x99\x73\xe8\x5e\x7b\x58\x1c\x4c\x25\x87\x06\x47\x71\xaf\x6e\x5c\x3f\x42\x37\x4c\x9e\x52\x05\x8c\x0e\x4e\xf6\x6c\x3a\xb4\x69\xd3\x21\xe6\xdd\x82\xe9\x5d\x07\x34\xbb\xe9\xd0\xc6\x0b\x6f\xbe\xf9\xc2\x8d\x87\xbe\x37\x3a\xa8\x65\x54\xff\x4b\x97\xd6\x75\x43\x7a\xfe\x4e\xed\x86\x83\x83\xe4\x7f\x6b\x97\x6e\xca\x7f\x46\x3f\xa9\x87\x24\xa8\x57\xe9\x57\x1e\x9a\xee\x33\x62\xd6\xfd\x28\x8b\xbd\x94\xab\x46\x25\x29\xf8\x36\x56\x74\xc6\x69\xfc\xb5\xe0\x20\x22\xe6\x8b\x20\xa6\xe9\x54\xb2\x9d\x6d\x99\xee\x7f\xe5\xb4\x27\x02\xb2\x8b\x47\x07\x89\xd5\xc2\x5b\x6c\x56\x3b\xcb\x86\xfa\xb6\xec\xfe\xc4\x27\xb7\x8c\x47\x28\x5d\xad\xb6\x86\x4c\x46\xc6\xf1\xff\x7a\x38\x05\x63\x9f\x53\x7f\xc3\x37\x78\x8d\x76\x87\xd5\x18\xe2\xe6\x67\xb6\x8f\xed\x59\x9b\xae\xb7\x4c\x21\x6f\x84\x66\xd3\x7e\x22\xde\x29\xa4\x5e\x7e\x4b\x09\x4b\x16\xd1\xef\x6e\x36\x5a\xaf\xcd\x04\x22\x34\xb4\x43\x92\xb2\xec\x55\xa4\xdd\x3a\xaa\x54\x43\x54\xf7\x8f\xf4\x93\x6e\x88\xf7\x11\xd9\xc1\x8b\x4c\xa8\xa1\x9d\x89\x16\x2d\x63\xba\xde\xdc\xdd\x07\x09\xaa\xfc\xc5\x4a\x4d\xef\x9a\xde\x1a\xed\x07\x7f\xa2\x94\x7c\xe6\xf6\x6b\x9b\x1e\x58\xf4\x85\x45\xc7\x5b\xae\xbd\x3d\xbb\xe5\xde\x5b\x56\x3d\xb6\xea\x96\x7b\xb7\x64\xc7\x7b\x23\xb7\x1e\xfd\xce\xb1\x8d\xcb\x95\x47\x6f\xbf\x6d\x34\xd8\x77\x5b\x6d\xe2\xb2\x47\x2e\x3d\xfa\xf0\xc7\x0f\x5d\xf2\xc8\xa5\x89\xda\xdb\x60\xe7\xf0\x9a\xf9\xf3\xd7\x4c\xff\xd9\x77\xdd\x63\x4e\xb3\xd9\xf9\xd8\x75\xeb\x6f\x1e\x6c\x13\xc5\xb6\xc1\x9b\xc1\xf0\x93\x7d\xcb\x76\xf5\x84\x8c\x9c\xdc\xd4\xb7\x6d\xee\x8d\x2f\xbf\x73\x62\xd5\xfa\x6b\x76\xac\x58\x13\x0a\xac\x5a\xbe\xe3\x9a\xf3\x56\x8e\x4d\xff\xae\xdc\xda\x5b\x28\x8c\x7b\xda\x57\xf3\x81\xa3\xaf\xce\x96\x84\x3a\x63\xf9\x6c\xd9\xfc\xcc\xe4\x62\x9d\x67\x10\x28\x8d\x63\x7a\x2e\x5b\x82\x14\xc4\x6f\x55\x33\x2a\xe9\x3c\x96\x7b\x58\x05\xd9\x51\x14\x2d\x40\x08\x92\x3a\x88\x1d\xe7\x74\x50\xd0\x5e\x48\x87\x83\xa9\xea\x82\x41\x1f\xb0\x65\xe6\xa5\xca\x72\x51\x8b\xb9\xdb\xc5\xbd\x97\x9a\xc8\xc5\x36\x78\xd5\x9f\x4b\x29\x26\x1b\xdb\x58\x03\x11\x69\xe2\x08\x41\x45\xec\x42\xad\xd0\x80\x5a\xef\x66\xbb\xda\xd5\x9f\xb5\xdc\x3b\x6f\x22\x57\x2a\x77\x60\xe3\xa1\x5c\xfa\x02\x97\x15\x5f\x18\x6a\xa9\x57\xef\xf3\xd8\x42\xad\xf5\x70\xa9\xeb\x5f\xc7\xca\x55\x79\x02\xba\x53\x0b\x3e\xd3\x37\x47\xbd\x2f\xb5\xa0\x5c\x99\x8d\x63\xb3\xdb\x03\x25\xfe\xa2\x02\x1f\xb9\x0f\x35\xa2\x24\x65\x19\xa2\x26\xd4\x08\x85\x1b\xa1\x78\xd0\x7d\xe0\x87\x6a\x50\x3f\x64\x6b\xc7\x01\x11\xdb\xfc\x38\xd0\x07\x52\x25\x49\xf9\x15\xe1\x1f\xa9\x3f\x0a\x1b\x3c\xde\x9a\x0e\x43\xcd\xad\x8f\xdd\x5a\x63\x98\x15\xf7\xa8\x26\xdd\x97\x66\x50\xf7\xa5\x19\xdc\xf1\xc4\x3b\xea\xe4\x3b\x4f\xec\xd8\xf1\xc4\x3b\xc0\xbc\xf3\xc4\xef\xaa\x89\xd6\x5f\xbc\xfe\xe3\x1f\xbf\xbe\xa6\xc3\x60\xf0\x78\x87\xb7\x6e\x1d\xf6\x7a\x6c\x1d\xf0\x93\x51\xfd\x6a\xfa\xe9\xab\xda\x65\x3b\xca\xb7\xc1\xd9\xea\xef\x76\xe6\xba\xb9\x28\x8c\x9f\x6e\xef\x8f\xb6\x43\x46\xfb\x5c\xfe\x89\xba\x19\x3c\xf1\x59\x85\x5a\x75\xd4\x78\x3d\x06\xad\xae\x6a\xe6\x9f\xab\x5b\xa2\xa6\xc3\x56\xac\x96\xc1\xd0\x51\x73\xfd\xc7\x3f\x8e\x8d\xff\xd3\xba\x99\xa9\xef\x7e\x0b\xca\x94\xfd\x10\xb5\x2e\xf6\xe1\xab\xa4\x44\xbc\x79\xba\xde\xc4\x8a\x57\x8d\xfc\x73\x35\xd1\x8d\x82\xf0\x95\x7f\xaa\xf0\x05\x39\x8f\x41\x85\x59\x66\xde\x87\xd3\x90\x30\x55\xfe\x5d\x8d\x36\x14\x6a\x88\x86\x38\x1d\x02\x22\x18\x27\x59\x49\xcc\x49\xa2\x22\x4a\x7a\xc4\x43\x31\x89\xb3\x85\xca\x14\x36\xea\xab\xaf\xe6\xee\x7d\xe3\xde\xdc\xab\xea\xab\xd0\xfa\x2a\x51\x5e\x85\xdc\x19\xd7\x68\xc9\x8b\x69\x75\x0a\x1e\x5e\x14\xa7\x5c\x51\xa0\x15\x1e\x83\x56\xa4\x49\xa8\x45\xbd\x88\x36\x16\x87\x50\x07\x9d\x2b\x57\xa3\xcd\xe8\x52\xb4\x17\xdd\x4c\x35\xaf\x9f\x41\x5f\xa6\x56\xfc\x16\x68\xe8\x85\x64\x37\xc4\x33\x15\xe9\x68\x45\x1a\x9c\x8e\x50\x50\x4b\x27\x82\xf1\xf0\xd9\xf3\x9c\xf3\xf8\xd9\xd2\x6c\x65\xda\x5e\x4a\xa7\xb4\x7d\x99\xb2\x93\x55\xdb\x04\x6c\x23\x36\xdb\x88\x4d\xb1\x8d\xdb\x6c\xe3\xb6\xc2\x1e\x83\x6c\x93\x63\x36\x1b\x19\xb1\xe5\x4b\xe7\xe9\x06\x66\xde\x2d\x6e\x55\x54\xd8\x2f\x6f\xc7\x6d\xb6\x5d\xda\x05\xef\x2b\x3c\x1a\x4c\xbd\x4f\xb1\x33\x39\x25\x35\x08\xbb\x68\x8e\x77\x2b\x7e\xf3\xef\x9e\x71\x48\x9d\x61\xa7\xb0\x01\x7d\x53\xf8\xa7\x8e\xd1\x7c\xb6\x3c\x22\xca\xa4\xa2\xfd\x69\x0f\x22\xda\x2f\x2a\xe0\x68\xea\xba\x3a\x17\x6a\x46\xeb\x34\x69\xad\xe8\x1b\xc4\xdb\x29\x4f\x08\xc5\x06\x80\x2a\xb3\x61\xc1\x3a\x58\x8c\x8e\x6b\xc7\xa1\x06\xa6\x84\x1e\x91\xa1\x6e\xaf\xc5\x88\x31\xb7\x8b\x53\x1e\x3f\xbc\xaa\x7f\xdb\x63\x9b\x9e\xfc\xdd\x7b\x27\x33\x17\x6d\xcd\x64\x7c\xad\x5d\xd7\x4d\x5c\x1e\xaa\xa3\xf6\xae\xba\xd0\xe0\xe8\x20\x9b\x0b\x99\xf8\x9f\xdf\xbf\x7e\xa1\x2f\xbb\x70\xd7\x9c\x1d\xea\x7b\x9b\xad\x92\xcd\x16\xa8\x0f\x9d\xf7\xb1\x47\x96\xec\xfa\xee\xae\x48\xe2\x86\x93\x2e\x63\x7d\x7d\x3d\xfc\x11\xef\xdc\x10\x98\x9d\x39\x98\x7f\x7c\xb7\x35\x5c\x53\x2b\xba\xc8\xee\xd0\x1c\xfb\x84\x48\xed\x6f\x7f\xb1\xcf\x09\xa5\x06\x07\xf7\xe4\xd9\xa8\xc4\x32\xd7\x84\xc4\xa0\xdf\xb7\x7e\x8e\xd1\x20\x87\xf1\xef\x42\x0e\x67\x4b\x6f\xa4\x2f\x23\xef\xb2\xb0\x36\xc9\x81\x10\x57\xaa\x3b\x8b\xcc\xa8\x19\xc5\xd1\x42\x74\x95\xf6\x1d\x72\xbc\x33\x2d\xd3\x5f\x48\x71\xd1\x54\x24\xda\x6e\x0c\x35\xf0\x4e\x5a\x29\xb7\xd3\x95\x88\xcb\x29\xad\xae\x4e\xd7\xff\xab\x66\x21\xd9\xaf\xbc\xf0\xe2\x97\xbf\xf0\xea\xeb\xe4\xf7\x7f\xbc\xcf\x21\xb3\x9d\x42\x5c\x6e\xf7\xb6\x86\x5a\x5d\x6e\xaf\xbc\xe3\x2b\x97\xca\x8e\xe6\xd9\xd7\x3d\xf9\xf8\xe1\xb6\xe0\xc7\x27\xbe\xf0\x3f\x6a\x2b\xec\xc9\xd9\xb6\x3f\x33\x02\x4f\x7d\xdf\x70\xed\xb3\x57\xaa\x9d\x5f\xbf\xa6\x6d\x9c\x33\x12\x1f\xe7\xe1\x65\xce\xcc\x30\xe4\x57\x73\x52\x46\xee\xa4\x1d\xf3\xcf\x6e\x30\x3c\xd7\x0c\x7f\xfa\x9f\x35\x24\x46\x82\x26\x97\x50\xfd\x41\xa3\xce\xc6\x59\xa5\x3f\x70\x39\xaa\xe3\x4f\xf1\x92\x99\x14\x0a\x26\xa6\x4d\x12\x27\xa9\x21\x94\x68\xa3\x56\xd3\xcc\x5a\x14\xb5\xad\x22\xf2\x4e\xeb\xc3\x6d\x53\x47\xf9\xd5\xcc\x3b\xf4\xf9\x5d\x05\x8e\xd1\xe9\xea\x35\x97\xc3\x08\x22\x74\x40\x3b\x64\xa0\x8f\x42\x58\xcf\x58\x4c\x7c\xc9\x4c\xda\x36\x13\x5e\xa0\x1e\x61\xdc\x96\x3e\x41\x60\x60\x8f\x9e\xc0\x1f\x9b\xb1\x02\x87\x67\xd6\x44\x31\xc1\xd3\xef\x09\x02\x63\x67\xdc\x02\x6b\xd6\x13\xf9\x9d\x33\x57\xae\xec\x1b\xff\x4d\xe4\x44\xdd\x74\xf4\x2c\xc0\xd3\x68\x15\x72\xbb\xea\x80\x02\xd6\x39\x44\x52\x00\x71\x90\xa2\xed\x10\xad\xca\xe4\xb4\x33\x6e\x17\x56\x28\x82\x8d\x2e\x6e\xd7\x35\x45\xd5\xab\x65\x99\x13\x1a\x5a\x52\x3e\xce\xe0\xe0\x48\x0d\x6e\xb9\x2f\xfb\xda\x43\xd3\xf3\xc0\x27\x4f\x3e\x0e\xcf\x2f\x6c\xb6\xb3\x45\xd9\xbb\xde\x6e\x6f\x5e\xa0\x5e\x25\x27\x65\x75\xd9\x9c\xfb\xf7\xef\xef\xb4\xd8\xc1\xe0\x85\xbb\x3f\xbb\x68\x85\x30\x51\x95\x4f\x3d\xed\xfb\xce\x93\xba\xac\x8a\xa7\x9e\xe4\x0e\xb0\xe3\xc8\x84\x62\x08\x41\x1b\x74\x00\xb1\xbb\x59\x12\x35\x82\x4c\xf1\x5b\xc3\x94\xf3\x28\x23\x43\x24\x9d\x09\xcb\x9a\x04\x2e\xb3\x7e\x60\x1e\x06\x50\x3f\x35\xe0\x3f\xd1\x0d\x7d\x3d\x16\x78\x4f\xbd\x6f\x1d\xeb\x72\xdb\xdd\x6a\xbf\xda\xef\xb6\xbb\x5d\xec\x3a\xf5\xe3\x01\xa9\x0d\xfe\xf6\xa6\xa3\xce\xe7\x7c\x13\xfe\xd6\x26\xe1\x79\xa7\x93\xa6\x1e\x18\x98\xec\xad\x7f\x0c\xb6\x0e\x40\x4a\xfd\xb4\x6a\x09\x86\x2d\x6f\xbf\x6d\x09\x07\xe1\xbf\x61\x4b\x20\xc3\x2f\x81\x1f\x34\x35\xa9\x5d\x4b\xf8\x4c\x09\x7b\x57\xa1\x3e\xc6\xa8\x0c\xaa\x1f\x6c\x68\x87\x34\x75\x30\x73\xfb\x81\xbd\x3e\xaf\xd8\x63\xac\xc9\x55\x9b\xcf\xb9\x42\x26\xc9\xc1\x22\xc1\x56\x2b\x59\x79\xe6\x33\x13\x28\x84\xd9\x90\x0b\x67\x6b\x5b\x63\x26\xac\xf0\xb2\xd8\x54\xc4\xda\xd4\x64\x73\x8c\x58\xd4\x49\x11\xfc\x8d\x10\xd4\x2d\x80\x25\x33\x5f\xb0\xe0\x4b\xa1\x2f\x74\xcb\x24\xd4\x99\x74\xdc\xed\x72\x58\x75\xa7\x97\x36\xbc\x3a\xaf\xe0\xd5\xf9\x27\x19\xa5\x68\xaa\x98\x1c\x9b\x66\xb9\x20\xab\xff\x66\xf2\x9a\x8c\xc6\xbf\x53\xc3\x0e\x5e\x9d\xff\x39\x5e\x9d\x1f\xa9\xb0\x6e\x90\x91\x0a\x0b\xc7\xdf\x8d\x46\x93\xd7\xf4\xb7\xc9\x27\x25\x54\xe0\x2f\x62\xca\x3c\x2a\x83\x65\x3d\x8a\x54\xe5\x33\x9e\x71\x70\xbc\xce\x11\x53\x07\x54\x01\x46\x97\x7b\x99\xe2\x38\xe7\xd4\xc6\xbe\x74\xa6\x8f\x4d\x15\x0e\x40\xa0\x73\xb8\xb3\xf8\x0f\x7f\x9d\x6e\x8e\x27\x5b\xf1\xf8\xbc\xdb\x94\xd5\xad\xc9\x5d\x63\xbb\x92\xad\x85\x4d\x7a\x5b\x66\xee\x50\x73\xd4\x4e\x77\x3d\xf4\x12\xe6\xeb\x74\xb3\x98\xfe\x8e\x24\xcf\xaf\x51\xdf\x3c\x18\x69\x89\xf5\x2d\xf0\xd6\x9c\x9f\xd4\x16\xee\xc9\xf3\x6b\x48\xb2\x9c\x56\xad\xde\x7a\x7b\x4d\xb8\xb9\x67\x45\xe1\xa0\x8e\x75\xaf\xd0\x58\x4e\x01\xd5\xa0\x30\xca\xa2\x8d\x68\x27\xba\x06\xdd\x54\x60\x08\x2e\x68\x1e\x5d\x0e\xb7\xee\x13\x4b\x7d\x5c\x22\x15\xf2\x22\x5b\x8a\x51\x88\x66\xc0\x0f\xfd\x40\x21\x2a\x32\x2e\x37\xb8\x80\x2f\x81\xe5\xb8\x81\x8f\x50\x67\xc4\xfe\x42\x20\x02\x53\x71\x0b\xa8\xb8\x35\x3b\xed\xa1\xf0\xb5\x29\x64\xf6\x98\x8d\x46\x40\xda\xcb\x1b\xd3\x99\x96\xc6\x2b\x62\x61\x59\xac\x43\xe0\xa8\x4f\x3b\x9d\x7f\x06\x7b\xed\xaa\xda\xa3\x3e\x9f\xfa\x27\x29\xe4\x84\xe1\x35\xf9\xfb\xff\xac\xfe\xb9\x00\xa7\x03\x92\x14\x72\xaa\x4f\x15\x10\x73\x60\xb9\x13\xdf\x59\x71\x9b\xfc\x5f\xf4\x5b\xc3\xfd\xd3\x1e\x08\xc6\x29\x44\x7b\x02\xd0\x4d\xa2\x22\x1c\x77\x9c\xe6\x1f\xbb\x6e\xf5\xbd\xab\xd7\xc2\x0a\x67\x48\x52\xff\x54\x0b\x3a\xb8\x0e\xc8\x7f\x76\x3a\xd5\xa7\xd6\xe1\x4d\x12\x48\x05\xc0\x1d\xf5\x4f\xef\x3a\x9d\x30\xbc\xee\x5a\x7a\x81\xfa\x25\xe7\x25\x3a\x69\x14\xaa\xb8\xe5\x67\xa7\x3d\x4c\x1b\x0f\x46\x10\x22\x93\x54\xaf\xd9\xa3\xfb\x75\x4e\xb3\x7c\x6b\xa3\x99\x58\x79\x94\x3a\xba\x17\x60\xa1\xe9\x5c\x0a\x19\x29\x18\xf7\x63\x9c\xf3\xd8\xde\xb5\x79\xe8\x0f\xf4\xd4\x47\x17\xb5\x46\x9b\x32\x1e\xdb\xbb\x56\xe7\x4d\xcb\xbb\xe3\x17\xf6\xce\x6d\x09\x2d\x16\x24\x8b\xf0\x88\xc0\x1a\xc6\x60\xd6\xf0\xc3\x37\xad\x02\x4f\xf1\x02\x0f\x5e\x9c\xde\xd4\xdd\x53\xeb\x72\xaf\xa9\xb1\xd7\x87\xe5\xb6\xd5\x47\x43\xb5\x73\x3a\x9a\xb3\x75\x35\x17\xd8\x0c\xfb\x4d\x7e\x01\x4c\x7d\x3b\xef\x2f\xae\xb5\xb1\xf6\x3d\xfb\x51\xfb\x74\xe4\x0b\x9d\xa6\xb7\x38\x91\x39\xb5\x6f\x96\x54\xcf\x6e\x8a\xae\x03\x8e\x78\xb3\xd9\x22\x15\x76\xd6\x1b\x51\x74\x2e\x1a\x1d\x88\xac\x04\x7b\x01\x4a\xc1\x30\x96\xcf\x45\x98\x1d\xd4\xb0\xa4\x07\xbe\x62\xb4\x05\x21\xec\x2f\xf1\x8e\x54\x3d\x44\x26\xfa\x7a\x3a\x4a\x22\x85\x18\xee\xca\xdb\xfb\x7d\x10\xd5\x76\xa3\xe0\x83\xb0\x17\xb2\xde\x30\x04\xc6\xb5\x93\xda\x0f\xc3\xe5\x69\x46\x42\x01\xd1\xb4\x11\x0b\xb1\x2a\x7b\x29\x0a\xa3\xa5\x5a\x5d\x43\x1d\x10\x89\x52\x8a\x43\x2b\x04\x53\x09\x99\x84\x52\x41\x0a\x79\x90\x48\xf7\xe3\xa0\x33\x44\x64\x70\x06\xa9\x3b\x31\x53\x7c\x47\x51\x9d\xc3\x86\x46\xea\x24\x52\xe4\x23\xff\x38\xe1\x31\x10\x02\x84\x01\x93\xf5\x93\xaa\xaa\x7c\xff\x99\xc3\xe0\x38\x82\x9d\x06\x42\x88\xa1\xe6\x0e\x80\xfd\x5f\xff\x31\xfe\x43\x5e\x25\x4c\x72\xf9\x05\xcb\x93\xdd\x4d\x89\x76\xd1\x75\x89\x37\xbc\xfa\x92\x2b\x6e\x9b\x3d\xb8\x7e\x28\x43\xde\x7a\xf4\xd1\xc9\x66\xa3\x85\xf0\x46\xec\xf0\x9c\x7e\x14\x42\x60\x7b\xec\xb7\x4c\xc4\x68\x31\x5a\x9a\x7f\xfb\x98\xfa\x9e\xfa\x53\xfc\xe8\x4b\xb5\x3e\x29\x3b\x3a\xaf\xbf\xbd\x2f\x18\x99\x1d\x35\xd7\x6e\x0c\xd7\xcd\xdd\xbb\xb5\x73\x53\xf7\x9c\x96\x9e\xe0\xb0\x3e\x0f\xb1\x53\x88\x43\xe4\x26\x14\x46\x4b\x3e\x5c\xdd\xd8\xb3\xd7\x8d\x7c\xf8\xba\xbd\x9d\x57\x19\x32\xbd\x6e\xc3\x97\x5d\x71\xdb\x82\xad\xdb\x96\x32\xe7\xae\xda\xcf\x5e\xaa\x6d\x83\x33\x6b\x36\x70\xc9\xbc\x39\xf3\xa3\xc3\xb4\x5e\x80\x10\x7f\x90\xd5\xf1\xe6\x50\x18\x82\x46\x70\x71\x3c\xd0\x1e\x12\x8d\xd0\x79\x2c\x18\x77\x11\x05\x86\xf3\x48\x7d\x8a\x7b\xcf\x6a\xae\x99\x54\x22\x73\xf2\x28\xd2\x6f\xb3\x9a\x6b\x88\x12\x99\x43\x50\xa4\x9f\xe2\xec\x31\xa9\x86\x41\xdf\x24\x6a\x6d\x6a\x68\x18\xf4\x31\xa8\xb5\x49\xd7\xf7\xbd\x41\xc7\xd2\x9d\x3a\x46\x16\x45\xcf\x76\x3a\x5c\xbc\xb3\x81\x17\xb1\x8e\xfe\x5c\x8a\x3d\xf6\xe3\x82\xf8\x41\x39\x42\xa2\x0d\x29\xbb\x1f\xeb\x82\x6e\x2a\x49\x29\x92\x0a\x40\x25\x14\x6c\x3a\x9d\x71\x6a\xcd\xef\x74\xb8\x75\xe4\xe9\xb8\x8b\x53\xce\x5f\xd1\xb4\xa4\x6d\x7e\xf8\x8a\x00\xb8\xcc\x0d\x07\x77\xb6\xf7\xae\x09\x35\x85\x2e\x5b\xb9\xe6\x5a\x7f\xd8\xdf\x1e\x1e\xde\x7c\xcc\x18\x36\x0a\x80\x31\xae\x0f\x93\x63\x9b\x87\xc3\xed\xfe\xb0\xff\xda\xb5\xc3\x97\x85\x9a\x42\x6b\x7a\xb3\x6f\x75\x00\xcb\x82\x27\xd4\xda\xe6\xea\x9a\x3d\xdc\xb2\x6a\x03\x7c\x75\xa5\x76\x6a\x5f\xf4\x78\x94\x05\x62\x37\xa5\xba\xc2\xf3\xdb\x96\x34\xad\x38\x7f\xc3\xaa\x96\xe1\xd9\x5d\xae\xb6\xd6\x90\x07\x33\x18\x03\x30\xa8\xea\xd2\x42\x49\xba\x52\xfe\xaa\xa7\x15\xe4\x32\x46\xa1\x5c\x76\x09\xfa\x3d\x22\xde\x59\x62\x4b\xa7\x0e\xe8\x11\xa4\x7d\x9d\x54\xf3\x8e\x02\x85\xb4\x36\x25\x04\xe8\x94\x10\x70\x31\x8a\xfa\xb3\x9f\x51\x18\xc2\x82\xbe\x01\xd0\xcf\xd4\x9f\x45\x92\x11\x1d\x64\x31\x92\x8c\x4c\xa1\x93\xea\x3f\x4e\x9e\x04\xc3\x49\x92\x55\x7e\xa9\x3e\xe3\x39\xa4\x3b\x57\x1e\xf2\xc0\xa2\x5f\xea\x43\x86\x8e\xdf\x48\x51\x72\x76\xa8\xe8\xd0\xc9\x93\x87\xb0\xf6\x8b\x08\x12\xa6\x14\xf6\x6a\xea\xef\x3a\x4f\x9b\xd9\x81\x8f\x94\x8a\x63\x04\xdd\x8b\x9e\x77\x25\xe2\x15\x85\x3c\xa3\x02\x51\xbe\x12\xf3\xc0\xe5\x08\x83\x0e\x82\x0e\xd6\xed\xcd\x91\x64\x84\xb9\x44\xbd\xff\xe4\xa1\x4c\x7a\xe4\xa2\xcb\x9e\xa1\xe5\x3d\xa3\x3e\xfb\xaf\x50\x4d\x5e\xd3\x2a\x93\x89\x79\x85\x6e\xd5\x1b\xf2\x47\x4f\x1e\xda\xf1\x59\xbc\x62\xfb\xc5\x57\xea\x15\x48\x61\xbf\x7a\xbf\x72\xe8\xa4\x3c\x92\x28\x54\xc4\x3b\xad\xaa\xc2\x7c\xd5\x64\x5a\x65\xf2\x6a\xb7\xd0\xb6\x37\xe4\x8f\x6a\x35\xbc\xb6\xe4\x27\xad\xf3\x24\x35\xe8\x7e\x0e\xe9\x4c\x5a\xb6\x3b\x44\x96\x12\x5e\x96\xb0\xc8\x99\xac\x9a\xdd\xbb\xe9\x8f\xb9\x79\x5b\x0f\x5f\x73\x20\x65\xb3\xf8\x2c\xb6\xd4\x81\x6b\x0e\x6f\x9d\xa7\x3b\xbc\xe0\x2c\x56\x26\xee\xea\x5f\xfa\x75\xf2\x54\x1e\xad\x7b\xfc\xe6\x7d\xab\x96\x78\x79\x8e\xe3\xbd\x4b\x56\xed\xbb\xf9\xf1\x75\xfa\xc0\x58\x90\x97\x50\x09\x1f\x22\x84\x16\x21\xe4\x0e\xda\x83\xe1\x2a\xef\x87\x33\xf7\xab\x22\x86\x0a\x82\x5e\x29\x95\x88\xbb\x14\x56\x39\xad\x40\x05\xc4\x0b\xa9\x70\x02\x05\x65\x28\x79\x9a\xb2\x2d\x2a\x9b\x06\xb2\x03\x9b\x40\xdf\x28\xc9\x21\x85\x41\x39\x08\x50\x10\x0d\x2a\xdf\x55\xa4\x97\x4f\x50\x13\x15\x8b\x92\x43\x3a\x73\x9e\xfe\x3b\x44\xdb\x8d\x50\x99\x77\x1c\xf1\x68\xa8\xec\x5f\x1e\x2e\xc0\x3a\x86\xdb\x21\x15\x74\x4e\x77\xac\xcd\xa4\x42\x0d\x85\x35\x46\x3b\x64\xfa\x98\xb2\x83\x74\x30\x99\xce\x84\x29\x5c\x0c\xd6\x3d\xcb\xc9\xe7\x2c\x06\x0b\x43\xd4\xac\x59\x9c\x42\x57\xde\xa3\x4f\x7e\xfb\xb7\x06\xba\x77\x2d\xea\x75\x30\xf6\x98\x4d\x70\xdb\x2d\xac\xdc\x39\xf7\x92\xce\x9a\x4d\x87\x36\x89\xd0\x2e\x9a\x21\x47\x18\x8b\xc1\xc2\xea\xef\x7c\x44\xcd\xd9\x8c\x3c\x8c\x60\xc9\xbc\xc3\xfd\xd4\xd5\x93\x74\xaa\x22\x81\xd1\xc7\xfd\x57\x76\x74\x2f\x0d\x1a\x42\xbc\x25\xee\x31\x05\x06\xe7\x2e\x90\x9a\x5b\xb5\x5a\x05\xeb\xcd\x12\x1e\x01\xde\xa8\xd5\xad\x71\x2a\xc0\xe9\x76\xc9\xb6\x0a\x06\x5a\x87\x26\xbd\x12\x8e\x67\x75\x04\x9f\x8c\x0c\xa5\x94\x56\xfe\x4c\xba\x31\x18\x77\xb1\x63\x54\x50\x05\xcf\xfd\x4f\xaf\xbc\xca\x81\x45\x55\xe1\x8d\x16\x73\x56\x60\xd7\xaa\xff\xa5\xbe\x4d\x38\xd1\x98\xb5\x5b\xc6\x4d\x36\xb8\x71\x64\xf8\x24\xac\x01\x56\x74\x30\xba\xc4\x0a\xca\xfb\xea\x7d\x5f\x1e\x1e\x51\x3f\x6a\x33\x8d\x33\x46\xed\xa5\x39\xa0\x66\x2d\x18\xb3\xb2\x03\x14\x11\x3b\xae\x5a\xf9\xcd\x3b\xe5\x12\xbf\xcf\x29\x7d\xbd\x01\x24\x28\xa7\xa3\x91\x16\x6d\x1b\x24\x41\x99\x04\x29\xbe\x35\x77\xea\x11\xf5\xe9\xa7\x05\x5f\x6d\xe7\xe3\x3f\x56\x9f\xfe\xb1\xfa\x6b\xed\xf7\x13\xcc\xe4\xf6\x2f\x75\xf7\x34\xe3\x89\x3c\x4b\xb2\x9d\x81\xe0\xe4\x22\xf2\x8c\xf6\x07\x8b\x56\x2e\x59\xf2\xed\xe9\x7e\x30\xda\x80\x83\xc2\x99\x74\x32\x6a\x84\x22\x56\x3d\x47\xa3\x51\x2a\x4d\x3d\xe4\x63\x3b\x64\x59\x7d\x11\x12\xb2\xbc\x43\x5b\xd1\xcd\x91\x65\x78\x5e\x4e\xe2\x5b\xaa\xb4\x9a\x1f\xd3\xce\x42\x02\x12\x72\x52\xd6\xae\x98\xa3\x67\xc6\xaf\x9f\x15\x5f\x5d\x7f\x3e\xa4\x69\xb4\x09\xc5\x54\x37\x16\xc0\xdf\x2b\x9f\x8f\x5f\x84\xe7\x0b\xb7\xdb\x21\xcb\x90\x50\x5f\xa4\x05\x21\x0b\xab\x9f\xaf\x95\x4a\x2b\x9a\x5e\xcc\x17\xd5\x17\xe9\x15\xe7\x7a\x3e\x64\xd2\xc5\x68\x17\x1d\x02\xdf\x58\xf5\x7c\xe6\x63\x15\xb5\x91\xcb\x95\x84\xea\x06\x00\xbd\x05\xaa\x0b\x0b\xaf\x9f\x89\xe3\x3e\x43\x1b\xd0\xe6\x37\x16\x1b\xa2\xfa\x1d\xb4\x9d\x51\x2f\xfd\x25\x54\xab\x96\xdf\xa1\x8d\x50\xfd\xc2\xf0\xde\x19\xda\x20\x4b\x63\x47\xec\xb4\x87\x65\x82\x72\xd0\x0a\x1d\x10\x92\xd9\x44\x2a\x2c\x07\xa3\x10\x24\x6c\x98\x19\xb5\x4d\xde\xd1\x81\xb7\xb9\xbe\xff\x9c\xf0\x45\x17\x8c\x32\x70\x71\x3c\xbf\xcf\xaa\x76\xb2\x8a\x92\xff\x56\xfe\xbb\xe4\x89\x2f\xe6\xff\xf0\xdb\x54\xea\x0e\xf5\x0f\xdb\x60\x2b\x0e\x7c\x05\x5e\x3b\xbd\xe5\xe1\x87\x69\xff\xb5\x4c\x65\xb9\xff\x2e\x60\xc8\x05\x8d\x58\x0e\xf2\x6c\x58\x0e\xca\xc1\x4c\x10\x64\xf6\x4d\xf5\x6f\x93\x6f\xe4\x17\x2e\x82\xa6\x3a\xf8\x1c\xfc\x6e\xfe\xc4\xe2\x39\xcc\x33\x91\x89\xc5\xac\x72\xfa\x05\xf5\x3d\x30\xc3\xb6\xa3\x0f\x3d\x04\xab\xa1\xe9\xdb\x85\xb6\xb2\xf1\x3a\x67\xc7\xda\x8a\x6f\x55\x1f\x87\x3a\x80\x63\x02\x8d\xd1\x33\x70\x68\xfd\xe0\xae\x58\x36\x57\x2c\x40\x9d\x89\xa2\x95\xdb\xde\x07\x99\x22\x58\x2d\xc9\xe9\xa3\xd2\x0e\x87\x81\xb1\x98\x2f\xdc\xab\xee\x56\x93\xea\xee\xbd\x17\x1a\x45\xc6\xe0\x90\x44\x18\x71\x19\x0c\xd6\x6d\xf3\xde\xbb\x4f\x17\xb6\xe7\x2c\x3c\xf6\xea\xb1\x85\x73\xf4\x9d\xfb\xde\x9b\xb7\xcd\x6a\x30\xb8\x60\x44\x94\x98\xdf\xd1\xb1\x69\x72\x4c\x1d\x73\x19\xb0\xf1\xc2\xbb\x1e\x7d\xf4\xae\x0b\x8d\x58\x3f\xe9\x90\x6d\xdb\x36\xec\x77\xe0\x5b\xa9\xf4\xfe\x99\x86\x3d\x0b\x47\x8f\x1d\x1b\x5d\xb8\xa7\xe1\x33\xf4\x40\xfe\x7a\xc7\xfe\x0d\xdb\x6c\xb2\x43\xd2\xbf\x7f\x2a\x37\x84\xce\xe0\xd8\xea\x06\xbb\xce\x44\x5a\x40\x12\xa0\x6c\xbd\x4c\xa0\x4c\xea\x15\x28\x48\x06\x05\xba\xaf\xb2\x49\x8c\x62\x01\x67\x29\x9f\xd7\x33\x5a\xc9\xb5\xa7\xab\xb9\xe9\xf6\x2c\x7d\x8d\x4f\xa5\x95\x32\xd2\x6d\x24\xc0\xd9\x5c\x01\x64\x43\x85\xbf\xb3\xd9\x44\x74\x08\x5b\x70\x15\x62\x9f\xe0\x22\x9d\xa8\x94\xaa\xff\xbf\x70\x0e\xa3\x08\xfe\x83\x0e\x59\x7b\x11\xf4\xbd\xa9\x5d\x8f\xd7\x94\x2e\x6d\xcd\x1f\x38\xa7\x65\x87\xea\x53\x30\x62\x15\x52\xc4\xd3\x3a\x63\xc5\xc8\x9e\xcb\x97\x5a\xe9\x8c\xd1\x76\xca\xc5\x3a\x31\x9a\x39\x4d\x02\xc5\xd4\x8c\x3f\x25\x9f\x17\x28\xe3\x7a\x9d\x51\x0e\xfb\x39\xf6\x2b\xcb\x31\xd3\x0f\x94\xcb\x00\x3f\x9d\x29\x59\xc9\x39\xcd\xa3\x5a\x94\x42\x0b\x2a\x7c\x5f\x22\x28\x1a\xa1\x76\x22\xca\x91\x00\x54\xf6\x88\xe0\x76\x68\x8c\x46\x78\xfd\xb8\x8b\x91\xf4\x13\x67\x32\x34\x62\xdd\x65\x18\x3e\x2f\xa8\xcf\xfc\x5e\x74\xd8\x85\x07\xde\x30\x83\x24\x28\x82\x03\x0e\xb2\x3b\xbe\xf4\x7b\xf5\xcd\x07\x44\xa3\x49\x12\x7e\x0c\x1b\x4f\xf1\xf4\x84\xc9\x0c\xf5\x95\x9e\x91\x7a\x44\x7f\xc3\xef\x61\x91\x00\x0e\x41\x11\x24\x30\xbf\xf1\x80\x60\x77\x08\x0f\x40\xfd\xef\xbf\xb4\x83\x05\x93\x89\x1e\xe5\x4f\xa9\x8f\xfc\x58\x90\x4c\x46\xf2\x62\xb5\xbf\x64\xd9\x86\x57\x5b\xc5\x80\x41\x87\x72\x4a\xce\x43\xd7\x12\x67\xb0\x24\x3c\x1d\x08\xe4\xc7\xeb\x83\x81\x80\xcd\x66\xb7\x9e\x81\x9c\x9f\xbf\x5f\x5a\x2a\x41\x56\x96\xe4\x70\x5e\x09\xcb\x06\x23\x22\x28\x3d\x95\xe2\x5e\x60\x7f\x44\x65\xb9\x0e\x84\x8c\x6c\x79\xb6\xd0\x06\x69\x5d\x25\x9c\x4e\x46\x1a\xf8\x68\x51\x02\xa6\x9a\x30\xb7\xcb\xc1\x20\xe8\xc9\x3f\xa7\x3e\x07\x97\xe0\x51\x59\xa6\xdc\x23\xf9\x63\xb2\x0c\xa3\x52\x9a\x1c\x99\xdc\x13\xbe\x34\x7c\xa0\x73\xd7\x58\xe7\xfe\x70\x98\x1c\x09\x5f\x1a\xde\xaf\xed\x1c\x08\x33\x3d\xea\x73\xf9\xe7\xa0\x47\xd5\xae\x4a\x6a\xb9\xb5\xab\x92\xda\xf5\xf8\xae\xc9\x6b\xc2\xe1\x03\x9d\x63\xbb\x3a\x0f\x84\x2f\x0d\x93\xdb\xc3\xe1\xfd\xda\xce\xfe\xf0\xa5\xd3\xda\x45\x5f\xfb\x57\x87\x2c\xcf\xe0\xcb\xaa\x3b\xcc\x12\x65\x46\xef\x55\x5d\xc5\x30\xdd\x5b\x95\x4c\xe3\x35\xed\x98\x41\xc3\x70\x0e\xbf\x2e\x46\xd1\x49\x9f\x25\x91\xe8\x48\x6e\x65\x87\x2e\xa5\x92\xf7\x14\x8f\x97\xf4\xf5\x6a\x9c\xd2\xa2\xea\x39\xc9\x4d\x95\x14\xa8\x08\xb4\x12\x91\xd3\xec\x41\xe4\x43\x08\xb8\x16\x28\x83\x95\xa7\x13\x41\x7b\xa8\x4c\xff\x4b\x4e\x4b\xb1\x9c\x24\xe6\xb3\x4e\x83\xc1\x32\x66\xb4\x41\x36\x17\x93\xec\x5e\xc8\x4a\x7d\x12\x64\x6b\xc9\x67\xc3\x93\x63\xa2\x24\x39\xac\x39\x33\x56\xc2\xe1\x7a\x50\x5c\x2e\x55\x09\xd0\xb9\x8c\x4c\x29\xe4\x34\x8b\xb4\xde\x26\x17\xf5\x37\x05\x57\xc2\x8c\x36\x1c\x07\xa9\x84\x98\x0e\xe0\x9c\x20\xe7\x62\x8d\xb5\x6a\x4e\xea\x93\xd4\x9c\xd7\x2e\xc5\x72\x6a\x4e\x34\x8f\x09\x46\x23\x8b\x64\x71\xf2\xa1\xa5\x01\x55\x71\xb9\x40\xa9\x8f\x84\xb1\x62\xce\x89\x0e\x79\xba\x2c\xd0\x58\x21\x0b\x40\xb4\x2c\x0b\x9c\xf1\x19\x3e\x89\x77\x14\x66\xf7\xb6\x7f\x2b\x88\x03\x9a\x4c\xb4\xa3\xf2\x2d\xbe\x83\x77\x14\x64\x81\xb6\x7f\x2b\x64\x7e\x40\x26\xb7\x54\xbe\xcf\xf2\xb8\xcf\x21\x1b\x72\x16\xde\xa9\x9b\x0f\xa5\x42\x29\x0a\xaf\x40\xdb\xcf\x48\xec\x50\x20\x33\xb2\x9e\xe9\x23\xf7\xf1\xe3\xc9\xce\x11\x78\x45\xb4\xab\xbf\xb4\x0b\xa2\x1d\x42\x76\x75\x02\x07\xd4\xf1\xfc\x38\x51\x36\xfa\x7c\xc7\x7d\xc3\xbe\x8d\x78\x6c\x1a\x2b\xeb\x17\x8e\x27\x47\x3a\xe1\x1b\x82\x76\x89\x28\x68\x97\xe4\xb3\x38\x00\x81\xfc\xb8\x3a\x8e\x47\x36\xfa\x86\x7d\xc7\x7d\xbe\x8d\x23\x67\xfb\xee\x6b\x50\x53\xc9\xef\x92\xe7\xea\x8b\x8c\x41\x19\xd0\x15\x08\x33\x7a\x6d\x07\x28\x3c\x7c\xfe\x0f\x7a\x43\x60\xd7\xdd\x52\xad\x45\x88\x56\x75\xfb\x11\x18\xf7\x46\xa2\x4d\x75\x5a\x3e\xda\x72\xd8\x75\xb7\xcc\xda\x71\x73\x35\x5f\xbe\x5e\x0e\xca\xe5\x6f\x2c\x0e\x3a\x75\xd0\x20\xb2\xba\x8a\x22\x93\x8e\xe2\x4c\x1f\x24\xf4\xbd\x33\x10\xca\xde\x81\x11\x59\x56\xc7\xfc\xd1\xd8\xde\xef\xde\x7c\x51\x67\xd0\xf4\xa8\x59\xe4\x39\x17\x69\x1d\x6d\x7f\xec\x8e\x98\xc5\xe2\xc5\x91\x69\xcd\xf5\x65\x18\xd1\x46\x82\x91\x7a\xbb\xbd\x79\x2c\xda\xbf\x79\xe4\x86\xed\x3d\x5f\xf9\x0f\x0b\x31\x7a\x60\xcb\xde\x64\xc7\x58\xb3\x9d\xc5\xb9\x69\x8d\x55\x1e\xff\x31\xe2\x90\x84\xfc\xd4\x9e\x02\x76\xb0\x23\x5b\x3b\x14\x3c\x0f\xa7\xd1\x50\x61\x05\xd0\x14\x02\x45\x45\x24\x50\xe1\x62\x78\x86\x03\x22\xe4\x14\x05\x56\xe4\x7f\x3d\x85\xb0\x5f\xfd\x25\x75\x52\xd4\x73\xe3\xcd\x55\x53\x72\x19\xcf\x4d\x40\x75\xda\x2a\x0b\xca\x1f\x4d\x22\x18\xaf\x1e\x29\xaa\x5b\x89\xb9\x5e\x72\xab\x39\x79\x40\x56\x73\x6e\xc9\x1e\xc3\x4a\xec\x78\xc1\xcf\x53\x20\x14\x4a\xa1\xb2\x89\xc8\x85\xa1\x7a\x35\x5b\x5b\x0b\xb9\xfa\x50\x28\x1f\x98\xe6\x14\x5a\x35\x7e\x55\x95\x49\x1f\x2e\x0a\x83\xc4\xb9\xcb\x64\x8f\xe5\x95\x98\x5d\x72\x43\x56\x1e\x90\x21\xeb\xde\x73\xf6\x32\xc1\x67\x42\xa1\x50\x3d\xe4\x6a\x6b\xd5\x6c\xbd\xfa\xf3\x0f\x5f\x26\xea\xa7\xac\xdb\x7f\xd3\x6e\x38\x67\x99\xb2\xda\xfd\x43\xfa\xb3\x7e\x51\x69\x0b\xad\xea\xdc\x0f\x55\x34\xa5\x5d\x6b\xdb\xfc\xdb\x84\x8e\xc4\xf4\x0a\xf2\xd2\x74\x9e\x63\x4d\x90\xf9\x2b\xab\xa0\x11\x84\xc2\x6e\x17\x67\x05\x91\x0f\x35\xa0\x68\x49\xa4\x8e\x64\x4a\xc9\x34\xa2\x6c\xdd\x2e\xab\x6e\x2e\x65\x43\x0d\x1c\xaf\x0b\xe1\x5c\x28\xc8\xb9\xf5\xa4\x08\xa1\x20\xc5\x98\x62\xfa\x21\xed\x76\x91\x97\x43\xc4\x62\x66\x19\x41\xf6\xd4\x06\x1b\xa2\xf2\x1f\xd4\x87\xfb\x37\x6b\x0d\x34\x80\xc9\x3c\xad\x50\x5b\xe6\xc1\x45\xe3\x3b\x36\x9a\x8d\x1c\x69\x21\x2e\x81\x61\xac\x8e\x9a\xda\x7a\xf1\xc0\x0f\xe3\xf0\xaa\xcd\x68\x22\x1e\xb6\x56\xf5\x10\x02\x2f\x58\x4d\x46\xe2\xc1\x92\x59\xdd\x3f\xeb\x85\x83\x52\x63\xbd\xcf\x69\x63\x58\x41\xb0\xfc\xe7\x09\x8b\x93\x01\x4c\x38\x96\x65\x19\x0c\xec\x2f\x65\x61\xb7\x20\x77\xcd\x92\xc4\xab\x44\xe9\x15\x40\x6e\x62\x31\x0b\x27\x04\x81\x01\x20\x0c\x21\x58\xd9\x65\xb1\x88\x57\x79\xc3\xf3\x2d\x16\xeb\x2e\xb3\x75\xcf\x61\xc2\xb0\x2c\x03\x98\xe5\xf9\xc2\x7a\x9c\x4c\xb2\x0a\xea\x2f\x7b\xd5\x4e\xd7\xec\xeb\x28\x2f\x71\xb7\x1f\xac\xc0\xf1\x1c\xa5\xc2\xe6\x0a\x0e\x6b\x3a\xe4\x7a\x41\x93\x43\x26\x25\x71\x72\xbe\x28\xc9\xc2\x45\x9b\xb5\x9a\x6e\xfe\xfb\xb7\x9f\x39\x66\xc4\x86\x8b\x8d\x82\x60\x62\x9b\x47\xda\xd6\xee\x84\xd9\x34\x90\xec\x27\xf0\x69\x49\x7c\x58\x94\xe0\x2e\xf5\x1e\x2d\xe7\x31\x41\x86\x83\xb2\x70\xb3\x28\xfd\xc7\x13\xbf\xda\x6f\xa8\x31\x1d\x34\x03\x36\xb2\xbe\xc6\x4d\x43\xaf\x4b\xe2\xcd\x82\xac\x7e\xf4\x2b\x3a\xa8\x31\xa0\xe4\x14\x22\xaf\x70\x08\x6d\xd1\x79\xd6\x4b\x22\x66\x3b\x43\x27\xc7\x4c\xda\x3d\x4b\x87\xe8\x4d\xa7\x92\xed\x24\xda\x6e\x48\x25\xd3\x99\x92\xae\xc9\xcf\xd0\xd7\xa7\x55\xa3\x40\x25\xc9\xb8\xfd\x1c\x79\xe5\x07\x27\x24\xf1\x56\x41\x1e\xb8\x71\x78\x7e\x0d\x6b\xb7\x5e\xcc\xdb\xac\x46\xbc\xfb\xa6\x70\x78\xe5\x8d\xfe\xf0\x70\x32\x1d\x6d\x5b\xde\x31\xd0\xd4\x5e\x63\x7f\xee\x41\x59\xb8\x55\x94\xba\x2e\x9d\xd7\x23\x71\x76\xcb\x4a\x83\x55\x14\x88\x3b\xd3\x77\x5e\xf3\xe6\xeb\xec\xcd\xe1\xc1\xf6\x8e\x54\xe7\x48\x66\x41\xd8\x0b\x9b\x3f\xf1\x4b\xef\x17\xb5\xd6\xf8\xa2\xb1\xb5\x2d\xe1\xe1\x9c\x8e\x5b\x4d\x18\x9b\xf1\x56\xaf\x61\xdd\x0a\x5f\xbc\xa1\xc9\xed\xb4\x49\xa1\xda\xd6\xa6\xae\xee\xa5\x4d\xb7\xbf\xec\xff\x57\x41\x96\xc4\xa7\xb8\x86\x60\xb3\x8d\x93\x1c\xf7\x5a\x81\x98\x88\x14\xaa\x73\xaf\x9b\xef\x6d\x8d\xd6\x86\x64\xc9\xe1\xee\x88\xf4\xcd\x5d\x5f\x78\x67\x37\xb1\x0a\xea\x2b\xca\xe0\x22\xf0\xae\x02\x53\x70\x14\x45\x4b\xce\xc3\x99\x92\x00\x13\x29\xca\xe1\xc5\x50\xf0\x16\x70\xb9\x13\x71\x17\xb9\x49\x12\x1f\x73\xbf\xfa\xf9\x47\xa1\x51\x34\x19\x9c\xdf\xb3\x19\xd5\x97\x72\x46\x59\xd8\x75\xe8\x21\x97\xba\x96\xea\xd4\x1e\xec\xfa\xb7\x7b\xb4\xa2\x11\xfa\xfd\xfd\xbe\xc3\xfe\x84\x28\x31\xcd\x3b\x44\xe9\xee\x7f\x75\x3c\xad\x3e\x60\x93\x24\x0b\x5c\xf9\x63\xa3\x70\x50\x90\xd7\xad\x92\xc4\x1d\xa2\xb4\x5b\x16\x3e\xaa\xe5\xdd\x21\x4a\xbd\xab\x25\x0a\x6a\x88\xc8\x14\xab\x68\xd2\x7a\x30\x54\x00\xf2\x2f\xc0\x94\x94\xba\x9b\x2e\x72\xc4\xdd\xb2\xcb\xdd\x07\x19\x99\xa6\x5d\x3c\x24\x8a\xdd\xcc\x59\xee\x70\x0e\x0e\x6f\xf8\x82\x20\xab\x34\x46\x11\x02\xfa\xf6\xdf\xd5\x6f\x1b\x0c\x26\xe9\xbb\xb2\xe9\x75\x39\x6c\x6a\xe2\xbf\x6d\x70\x7e\xdb\x6e\x32\x1a\xd4\x1f\xbc\x4e\xfb\xdc\xaf\xa0\x41\xdf\xca\x92\x08\x4b\x25\xf1\x62\x41\x5e\x2b\x89\x3b\x05\x19\x0f\xd8\x6c\x36\x49\x3d\x2f\x72\x9e\x67\xbd\x1d\x1e\x91\x6d\xa2\x3d\xff\xac\x2c\xec\x14\xa5\xb5\xb2\x70\xb1\x28\xa9\x5f\x15\xe4\x02\xef\xbd\xbe\xee\xe8\xa4\x6b\x75\xad\xe3\xc7\x91\x6d\x5a\xc9\x4a\x9d\xb1\xfc\xe9\x94\x52\xfa\xa8\xc6\xc8\x37\x8d\xaa\x39\xc8\x8e\xc2\x95\xf9\x1f\xaa\x5f\x80\xf7\xa9\xc2\x92\x97\x85\x47\x8b\x26\xea\xa2\xdd\x1a\xd7\xfe\x90\x5c\xfc\xc3\x7d\x6a\x16\x1e\x52\x0f\xfc\xf7\xb5\xd5\x8e\x6c\xd7\x4a\xe2\x7d\x82\x8c\xf7\x88\x52\x05\xff\x90\x01\x59\x90\x0d\xd5\xa0\x3a\x74\x05\x42\x20\x87\x64\x97\xc3\x9d\x4c\xcb\x99\xa0\x3b\x98\x88\x86\xb4\x03\x0e\x57\xe1\x80\xbe\x46\x24\xb4\xc7\x90\x10\xd1\x99\xa4\x49\xa9\xb4\xe5\xf1\x90\x14\xdf\x4b\x50\x9e\xb6\x75\xf1\xa4\xa4\x70\xe0\x13\x71\x17\xc6\x2b\x4f\x0c\x02\xc0\x35\x21\xf5\x8d\x00\x3c\x74\x24\xb4\x10\x4e\x2c\x7f\x78\x25\x00\x5c\x19\x54\x5f\xa7\xf8\xdd\xaf\x3d\xc2\x7b\x4e\x78\xf8\xcf\x9d\x7a\x94\xf7\x9c\x30\xdb\xf1\xd8\xcb\x5a\x7d\xbe\x18\xbc\x53\xdb\x5c\x7e\x3e\x6b\x32\xd9\x0e\x7b\xd9\x0b\xe0\xe2\x8b\x78\xcf\x01\x0f\xbf\x05\x2e\xbf\x90\xf5\x1e\xb6\x99\x4c\xec\x86\x2b\xb5\x2c\xf7\x34\x7c\x59\x94\x60\x2d\xb4\xa8\xaf\x02\x03\xc0\xc2\x17\x14\x45\xc9\xbf\x0a\xad\xea\x6b\xc0\x02\x30\xf0\xa4\xa2\x04\xb2\xa2\x94\x3f\xee\xf1\xe0\x9d\xf9\xe3\x1e\xd1\x84\x77\x52\x59\x5b\xd7\x2c\xc3\x7a\xab\x60\xf1\xa8\xc7\x61\xa7\x47\xff\xb5\x08\x56\xf5\xb1\x42\x06\x6d\x7d\xdb\x39\x85\x98\xb7\x58\x05\x25\xd0\x62\x8a\x39\xe4\xe2\xfd\xc0\x8b\x0c\xef\x0c\xa5\x1a\xa2\xce\x90\xbd\x21\xd2\x02\x99\x44\x3c\x63\x4f\x44\x42\xf6\x48\x0b\xa4\xdc\xf1\x4c\x2a\xe1\x4c\x27\x52\x09\xa7\x9f\x90\x64\x3b\xd3\x40\x41\x48\xe3\x7d\x9c\xb6\x23\x82\xb6\xd3\xc7\x31\x77\x49\xf7\xed\xb9\x46\xe0\x13\xcb\xaf\x39\xb8\xea\x81\xe1\xe6\x07\xa4\xc5\xf2\x0f\xeb\xaf\x8c\x1b\x6c\x9c\x49\x18\xba\xf2\xd5\x6c\xf0\x81\x55\xb1\x07\x56\xdc\xb0\xb3\xf7\x94\xbf\x75\x51\xcf\xfa\xf8\x0a\x83\x61\x4e\x64\xfe\xec\xb9\xed\xb3\xfd\xf2\xa2\x9a\xc6\x9e\xf8\x92\x96\xb9\x3c\xdb\xdd\x30\xd0\xda\x1d\x69\x94\x88\xf2\xd5\x21\xdf\xb1\x23\x8b\x2e\x5b\xd8\xe1\x62\xa6\x26\x60\x12\x4d\xc1\xd7\x12\x70\x2f\x40\xfd\xfc\x47\x00\x26\xff\x8e\xdf\x9b\xe4\xeb\xbb\x2f\xca\x3f\xd8\xd8\xd9\x58\x63\xe1\xb0\xfa\x2f\x40\x58\x8b\xcd\xdb\xd0\x0e\xff\x08\x26\x82\x6e\x13\x07\xa0\xbe\x08\x40\x0c\xa2\xbb\xbe\x5d\xc7\xc5\xa0\xd8\x12\x85\x78\x49\x97\x1b\x5c\x6e\x56\x8f\x19\xac\x98\x92\x19\xe4\x12\xe1\xb8\x28\xe6\x1f\xeb\x8c\xe1\x40\x09\x22\x22\xc0\x20\xf8\xa9\x28\xaa\x3b\x45\x57\x20\xd6\x39\x31\x5e\x44\x7c\xd0\xf9\x3c\x4a\xf7\x8d\xa1\x4e\xb4\x58\x6b\x53\x77\xd0\xee\x72\x93\xe9\xb7\xb6\x3b\x5c\xf2\x39\x60\xba\xab\xf7\xd9\x93\xa2\xa8\xc6\x5c\xe2\xfc\xca\xa2\x74\xfe\x70\x26\x28\x8a\xea\x34\xd3\x28\xba\xb4\x22\xe7\x9f\x2b\x97\x36\x3f\x1e\xeb\xcc\x07\x4a\x6b\x33\x10\x67\x4a\x6a\xf2\x67\xc3\x14\xe2\xf6\x73\x08\x99\x50\x23\x1a\x40\xab\x10\x82\x44\x07\x44\x52\x21\xde\xc1\xf1\xa0\xe3\x30\x15\x97\x4f\xfa\xa4\x43\x57\x55\xac\x33\x98\x82\x74\x3f\xa4\x1a\xb8\x10\xd7\x02\x94\xc5\x00\x38\x2b\x38\xb5\x8c\x29\xd9\x19\x4c\x25\xa2\x21\x3e\xa1\x6d\xe5\x84\xcc\x3c\xfa\xa5\xc5\x16\xcc\x10\x9e\xc9\xbf\x6b\x52\xbf\x63\x12\x2c\x66\x35\x67\x35\x18\x5c\x39\xea\xcb\x92\x13\x25\x32\x3f\xff\x75\xd8\x6d\x31\x9a\xb1\x91\x58\xa4\xb7\xae\xc3\x19\xf5\x2e\xce\x6a\x16\x8d\xce\x7f\xbc\xa2\x8e\x0f\x76\xfc\xb5\x63\x50\x7d\x73\xe1\xef\xfe\x1f\xda\xde\x03\x3e\x8e\xe2\xec\x03\x9e\x67\xb6\x5d\xdd\xbb\xbd\xdd\xdb\x3d\xdd\x9d\xae\xdf\xae\xea\x49\xba\xb6\xea\xdd\x45\xb2\x6c\xcb\xc2\xbd\xc8\x0a\xc5\x15\x70\x03\x5c\x31\x67\x1b\x12\x48\x82\x01\xd3\xbb\x00\x03\xa1\x38\x21\xb4\xe0\x50\xa2\x40\x20\x84\x37\x94\x84\x10\x42\x02\xc1\x49\x0c\x09\x84\x9e\x02\xd8\xba\xf5\xf7\xdb\xbd\x93\x2c\x1b\x53\xde\xef\xfd\x3e\x5b\xb7\x3b\xb3\xb3\x65\x9e\xd9\xd9\x99\x79\x66\x9e\xe7\xff\xbf\xf5\x6d\x72\xc5\x1f\x6b\x9c\xa4\x00\x11\xdb\xe1\xc0\x18\x08\x94\x93\x17\x28\x03\x7a\xe3\xd0\xb0\xeb\x82\x77\x16\x62\xce\x65\x36\x13\x40\x6c\x78\x6b\x41\xfe\x03\x93\xcb\x8a\x31\xde\x48\xec\x58\xb5\xea\xd2\x4b\x57\xad\xc2\x57\xe5\x57\x15\xd6\x7e\x26\xca\x9d\xd6\xe5\x8e\x1f\x95\x9b\xfa\x52\xb9\xe1\x38\xc9\x88\xaf\x2c\x87\x6f\x20\xf7\x8d\xc7\x48\xc7\x7f\x69\x29\x8c\x8b\xfd\xd7\x13\x49\xad\x8d\x1e\x15\x8f\x3c\xef\x0b\x45\x60\x21\x08\xd8\x88\x28\x5d\x66\x63\x7e\x56\xd7\xcb\x1a\x50\x0f\x5a\x80\x50\xfc\x2b\x5e\xf1\xb1\x33\x06\xc4\xff\x32\x8e\x0f\x9c\x58\x64\x32\x34\x71\x66\x41\x57\xf5\x73\x46\x45\xce\x19\x11\xad\x40\xb4\x30\x62\x44\x8e\x20\x23\x82\x58\xd7\xd0\x89\xa4\x9e\x00\xfd\xfe\xc9\xd7\x04\x0b\xdd\xdd\x98\xfc\x8e\xa3\xf2\x1f\x2f\x65\xfc\x2b\x5e\xfd\x71\x33\x28\x5f\x13\x27\x8f\x11\x40\x0b\x9d\xb8\x34\xf0\xf0\x71\x32\x1f\x53\x1a\x47\xcb\x29\x34\x2e\xca\xfa\x13\x15\x05\xac\xff\xfa\x02\x30\xea\x3c\xf5\x42\xb1\xce\x77\xa1\xb9\x08\xc5\x8d\x45\x7e\x63\xe5\xfe\xcb\xeb\x7c\x5c\x60\x09\x83\xed\x41\x2d\x8c\x43\xd5\x28\x0b\xe3\x5e\x4f\xfa\x07\x90\xe2\x0c\x36\x12\x86\x36\x48\x23\x38\xaa\x73\x7e\x53\xba\xb5\xa7\x3b\x39\x39\x7f\xd3\x97\x08\xfd\x81\xb7\xbe\xff\xec\x49\xad\x09\x8f\x4b\x71\x38\xe3\xf2\xec\xd3\x9c\xd8\x3d\xab\x6a\xd5\xb7\x2f\x3d\x63\xeb\xde\x80\x56\x79\x27\x60\xc6\xe4\x6a\x1d\x18\xd9\xfa\x66\xdb\xaa\xde\xf5\x7d\xd9\xb9\x27\x92\x59\x6d\xdd\x78\xc6\x40\x9d\xd3\xc4\xac\x63\x48\xfb\xd9\xf3\x24\xff\x25\xa7\xad\xdc\xf3\x38\xae\x59\xbf\x1e\xee\x63\x3c\x94\xd3\x66\x77\x35\xce\xdd\x9f\x5f\x8f\xbe\x20\xbb\x6a\x58\x43\x1f\x95\xfd\xab\xdb\xb9\xe3\xc4\xe3\xbf\xaa\x38\xbe\x81\xec\x2f\x4d\x94\xef\xa9\xaf\x28\x08\xb2\x28\xfc\xe1\xbb\x4f\x24\xfd\xe8\xf1\x62\x52\xa9\x13\x96\xc7\x18\x6e\x64\x7b\x71\x1e\x76\xf1\xd8\x5b\x2f\x18\x6c\x1c\x3f\xef\x47\x09\x8c\xe8\x16\x19\xd1\xe0\x12\xa3\x99\x4a\x1c\x31\x58\x6f\x0b\x70\x52\x05\x48\xc2\x56\x6c\x50\xe7\xa6\x92\x01\xca\x2d\xb0\xc0\xb0\xb8\xc8\xcb\xef\xf5\xc5\xe3\x3e\xaf\x3c\x2c\x7b\x35\x63\x8d\x17\x42\x5e\x99\x1c\x56\x1d\x44\x82\xe3\x1c\x8a\xb9\xb1\xfd\x82\x58\x1f\xd7\x79\xc3\xbc\xe9\x5b\xa3\x5e\x39\x56\xe2\x59\x51\xd7\x1d\x76\x79\xcd\x66\xc6\xea\x17\x78\x6f\xa2\xa7\x26\xec\x30\x03\xcf\xbb\x08\xd6\x44\x82\x7b\xc6\x7a\x63\xd5\xc6\x17\x8f\x63\xdf\xb8\x03\x87\x2c\x7b\xe7\xb6\x55\x85\xfa\x5a\xea\x5b\x1a\xe2\x6b\x27\xf5\xe1\xa0\xcf\x5b\x09\x10\xf7\xe2\x1d\x25\x71\x8c\xd7\xb7\xcf\x0b\xbb\x9a\xe3\x15\x4a\x55\xb3\xc0\xbb\x83\xc9\xb2\xe6\x80\x47\xee\xab\x8a\xd0\x1e\x81\x5d\x8f\xc6\x79\xd3\xdb\x0d\x1f\x33\x5f\x11\x87\x71\xfc\xe5\x1d\xaf\xc1\xc7\x45\xb7\xa1\x0d\x63\x29\x80\xdd\x82\x01\x67\x9c\xc0\x8a\x41\xde\x6f\x80\x68\x1a\x45\xa2\x97\x47\x13\x21\x4a\x22\x63\xfc\x18\xe1\xcb\x0a\x62\xa5\x0a\xeb\x66\x68\xff\x24\x4d\x2c\xe1\x72\x09\x60\x76\x84\x6b\x7a\x12\x5e\x5e\xf0\x5b\x19\xb3\xd9\xeb\x0a\x77\xd7\xad\xf0\x94\xc4\x64\x6f\x74\xeb\xf4\x79\x37\x74\x72\x7d\xb1\x0b\xda\x1b\xcd\x8a\x83\xe3\x12\x04\x31\x56\x12\xf9\xb7\x0a\x65\x60\x94\xc7\x8f\x5a\xe6\xcf\x58\xcf\x0a\x1e\x3a\x5e\x36\x5d\xf6\x04\x9a\xcb\x92\x41\x37\x2f\x34\x57\x29\x15\xf1\x66\x57\x78\x5e\xfb\x7a\x8c\xe3\x25\x78\x87\x37\x0e\x50\xe9\xf5\x05\x71\xdf\xa4\xb5\xf1\x86\x96\xfa\x96\xbe\x10\x42\xb6\xf1\xb9\x0c\xb3\xb1\x8e\x54\x89\x5a\xd0\x62\x74\x2a\x3a\x0f\x7d\x1f\xdd\x84\xee\x47\x4f\x1a\xbc\x26\xd1\x08\xe3\x16\x53\x49\x35\x95\x49\x47\xdc\x71\x77\x94\x8b\x72\xd1\x0c\xc5\x45\x33\xc5\x45\xbc\x54\x71\xfa\x9e\xa3\x8a\x36\x42\xee\x28\xa7\x0f\x1f\x93\x92\x28\xb9\x85\x31\x96\x98\x16\x48\x1b\x46\xb0\xa5\x10\x75\x0b\xa9\xa4\x9a\xce\xa6\x33\xe0\x16\x22\x2d\x90\x4e\x42\xda\xa0\xa5\x0b\x87\x0c\x74\xd2\x22\xf8\x65\xc8\xa8\x67\xc0\x47\x19\x25\x6a\x80\x61\xba\x53\xf1\x4c\xba\x40\xe3\x53\x0a\xc5\x89\x3b\x29\xc5\x45\xb9\x62\x3e\xa2\xc5\x7c\x7c\x61\x02\xef\xea\x52\xce\xe9\xe4\x4a\x1f\xe9\xec\xcc\x3f\xdd\xdf\x3b\x03\x7e\xdc\xa5\xc4\xc3\x66\xba\x13\x80\x15\x44\x68\x63\x6c\xe5\xd1\x70\x57\x57\x28\x56\x6e\x63\x0e\x63\xc2\xe6\xcb\xa4\x4b\xdd\x42\xe9\x32\x9f\xfb\x82\x88\x87\x06\x6d\x47\x7b\x3b\x76\xf3\x96\xce\xca\x0b\xb5\xf7\xb4\xf7\x2f\xac\xea\xb0\x08\x82\xa5\xa3\xf2\x22\x2c\x5f\x54\xd9\x61\x11\xf2\xf6\x85\xd3\x52\x99\x19\x4c\xc8\x14\xb5\xf6\x42\xd8\x5d\x5a\x97\xf2\xb9\xdd\xbe\x54\x5d\xa9\xfb\xa1\xae\x2e\x03\xce\xba\x8b\xb6\x86\x62\xe5\xf0\xe9\xc4\x09\x9e\x77\x6e\x4c\x3a\x0f\x38\xef\x89\xa4\x52\xff\x98\xac\x2d\x80\x3b\x27\x6f\xd7\x2e\x2b\xab\xf6\x73\x71\x88\x68\x9f\x78\xb0\x23\x08\x9e\x35\x7b\xd2\xee\x8a\xf2\x18\xbc\x7f\x4b\x59\x85\xfb\x61\x73\x29\x2b\xba\xca\x64\x5f\xd3\x8e\x26\x9f\x2c\x97\x36\xf4\x75\xa4\xbc\x60\x73\x5b\x89\xfa\x1b\x52\xa9\x1b\xd2\x79\xe2\xc7\x27\x55\x35\x51\x0e\x07\xd5\x54\x35\x6f\xdf\x7d\xb3\x2b\x9b\xf5\x70\x73\xe5\x6c\xa2\x09\xca\x9e\x7a\x4a\x5a\x2c\x2d\x57\x7f\xb5\x69\x67\x63\xa9\x2c\x97\x36\x1a\x3b\x5f\x33\xac\xd7\xde\x0a\x3a\xb1\x07\x9c\xda\x9f\xe2\x2e\x5f\x35\x98\x8e\x9d\xc3\xb5\x22\xdf\x11\x44\xbd\x65\xf8\xcb\x8e\xd5\x8f\x45\xe8\x14\x74\x2e\xba\x08\x5d\x8f\x7e\x64\xe8\xe9\xd1\x88\xc2\x65\x53\x49\xca\x1d\xcd\xa4\x93\xf1\x54\x26\xec\x4e\x71\xa9\xf0\x09\x5e\xcb\xd8\xcb\xcb\x44\xb9\x54\xc6\x78\x79\xf1\x4c\xd4\xa8\x30\x2d\x90\xfa\xc2\x8b\x55\xb3\x90\x49\x47\x4a\x41\x48\x1a\x0c\xb8\x0c\x1d\x32\xaa\x48\x26\x6d\xd4\x8a\x90\x51\x43\x20\x45\x70\x51\x4e\x56\x64\x25\xc5\x8f\xd5\xbd\x42\x3d\xd3\xeb\x5e\xfc\x04\x35\x94\xf8\x1f\x45\x12\x45\x49\x81\x81\x85\x0b\x47\x1b\x57\x6b\xcf\xae\x3c\x15\x42\x0b\x16\x04\x7c\x2e\x02\x16\x98\x6c\x89\xda\x2c\xec\x33\x73\xd9\x64\xe5\x82\x05\xd5\xb5\x59\xce\x0c\x03\x8b\x30\x13\x4e\x3c\xe0\x53\xba\xba\x15\x7f\xa9\x32\x69\x6a\xcc\x45\xe0\xfc\xf0\xdc\xb9\xf8\x45\x2f\x3b\xbf\xf1\x91\xbc\xf7\x91\xc6\x05\x76\xaf\x97\x9d\xdf\xf4\x13\xfc\xb6\x11\x1e\xf5\x2e\xdb\x7c\x2a\x5b\x13\xf7\xaf\x9a\x02\x0f\xfb\xe5\xee\x2e\xd9\xef\x97\xbb\xba\x65\x3f\xcc\x5c\x94\x49\x26\xec\xa6\x45\x40\xb8\x7c\x01\x88\xbd\xdc\x25\x42\xb5\xd8\x9d\x48\x74\x5f\x35\x38\x98\xff\x25\x7c\xa0\x7d\xbb\xc2\x4d\x84\xe0\x74\x6d\x73\x9d\x27\xde\x32\xf8\x74\x8f\xb7\x3e\xfb\x5a\x7e\x65\xad\xaa\xfa\x4e\xb2\xa7\x2c\xb1\x49\xf3\x96\xcf\x8c\xa7\x52\xf1\x99\xfb\x66\xc6\x53\x19\x9f\xcf\x4c\x3c\xf9\xdb\x49\x93\x7e\x3b\x39\x3f\xef\xdd\xb3\x9a\xfa\x69\xb7\x9b\xee\x6f\x5a\xfb\x81\x1e\x66\x04\x81\xe9\x6f\x5a\x4b\xb2\xda\x3a\xed\x63\x70\xf4\x7e\x77\xf9\x6c\xed\xf3\xc9\x3f\x9a\x15\x4f\xa5\xe4\xfe\x1f\xf5\xeb\x37\x19\xd0\xec\x6a\x6b\xdc\x93\x82\xef\x6a\x97\x85\xb1\x58\x09\xe7\x16\x6c\x29\x73\xd4\x56\xea\xbf\x88\x47\x0a\x42\x40\x17\x34\x68\x95\x4f\x2a\x63\x0a\x33\x88\x0c\xb8\xc7\x26\x65\x20\x0b\xfa\x41\x3c\xc7\xf2\xa9\x4f\xfe\xd0\x2d\x58\xf2\x00\xb7\xd8\xac\x66\xe9\xc3\x32\x2f\xf1\x9c\xd5\x9a\xff\x08\xfa\xad\x16\x8b\xf8\x61\x85\x47\xdb\xe7\xc2\x50\xa2\x7c\x2c\x12\xa7\xb9\xb4\xde\x44\x84\x87\x11\x00\x49\x74\x38\xaa\xe1\x54\xa7\x7b\x74\x21\xe4\xaf\x15\x38\x47\x35\x3e\x33\x44\xec\xae\x3e\x96\x3b\x9f\x1f\xe7\x17\x91\x2b\xc1\x58\x41\x70\x13\xb4\x24\x36\x41\x52\x05\xe3\x08\x88\x60\xc4\xb2\x0a\x64\x20\x2b\x7d\x61\xf1\x65\xbb\x3b\xf8\x88\xcb\xc4\x98\xce\xfd\x85\xd9\x6c\x72\xee\x0f\xf2\x84\xca\x70\x8f\x06\x78\xed\x34\x00\x4a\x08\x3d\xe2\x62\x4c\x66\x6d\x14\xae\x35\xfd\xe9\x98\x49\x6a\x02\xde\x88\x58\x6d\xdc\x1f\x40\xbb\x83\x65\xed\x31\x62\x96\x2d\x9a\x57\xb0\x16\x8e\xda\xec\x0e\x78\x1d\xf0\xcb\xce\x0b\xbf\x88\x59\x83\x2c\x0c\x22\xff\x8b\xb0\x81\x88\x54\x0d\x7c\x92\x0c\x42\x32\x40\x15\x79\xf0\x4b\x41\x64\x58\x70\x00\x4b\x47\xe9\xb0\x1c\xab\xc1\x85\x9e\x24\x01\x4a\x0b\xc8\x06\xdf\x7c\x2b\x9d\xca\xe2\x5f\xc2\x41\xcd\xbf\xff\x07\xd0\xd0\xd3\x03\x21\x36\xec\x09\x05\x58\x9a\x57\x18\x93\x19\x80\x67\x62\x2c\xcb\x06\x42\x9e\xb0\x23\x08\x87\xb5\x0b\x5f\xd4\x5e\xac\xad\x8b\xc5\xe2\x1d\x9e\x2f\x9e\xc1\x86\xe0\x30\x5c\x73\x28\x0f\xcb\xcd\x14\x49\x10\xb4\xc5\x29\x39\xe8\x92\xc5\x6a\xfb\x65\xe5\x65\x17\x5e\x76\x99\xba\x80\xe3\x1c\x92\xc3\x42\x13\x04\x8f\xcd\x04\x49\x52\x96\x50\xc9\x17\xd2\x9d\x7a\xba\x0b\x15\x70\xb0\xe8\x11\xea\xbb\xc6\xda\xaa\x84\x7c\x28\x88\x90\x99\x74\x83\x5b\x61\x32\x90\x91\x20\x23\xa9\x6e\xb3\x0d\xf6\xc0\x07\xda\xdd\x9a\x48\x55\x69\x22\x80\x26\x5d\x0e\x73\x01\x60\x5e\x7e\x16\xcc\xd5\x5c\xda\x0f\xa9\x04\x0c\x68\x92\x76\x17\xcc\x83\x77\xb4\x1f\x6a\x2e\xa2\x45\x7b\x51\xfb\x1b\xb4\x69\x07\x4f\xd7\xfe\x64\xf0\xb1\xc7\x4f\x1f\x02\x3f\x06\xc0\xda\x41\xf2\x0f\xda\xdf\xb4\x97\x80\xd5\x3e\xd1\x3e\xd6\x7e\x0e\xa5\xc4\x76\xed\xe7\xda\x27\x50\x8b\x68\x64\x3d\x82\xa8\xff\x18\x36\x26\x56\xe4\x28\xe6\x07\x51\x61\x2e\xca\x85\xb9\x68\x5c\xa5\x18\x50\xc1\xf8\x11\xc0\x98\x21\x13\x76\x53\xe6\xc3\xb7\x0e\x53\x37\x0d\x8f\x0e\x84\x09\x47\x38\x3f\xbf\x0b\xbf\xd2\x95\xff\xf7\x32\xbc\x6c\xd9\x6b\xf0\x46\x4e\x8b\xe6\xef\x27\x42\x43\x70\x20\x9f\xc3\xb9\xaa\x1b\x6f\xbf\x01\x7b\xf7\x68\xfb\x2e\xc3\x0f\x6f\xcd\x1f\xd9\x4a\x6c\xcd\x9f\x37\x84\x77\x1c\xba\xe5\xe6\x9b\x4f\x60\x7b\x31\x13\x2d\x9f\x80\xdb\x5f\x04\xa3\x1d\xc3\xb9\x8d\x45\x64\x16\x1b\x94\xa9\x84\x28\xd0\x85\x3a\x10\x20\xb2\x49\x51\x1f\x3d\x81\xda\x4a\xc8\x06\x8a\xad\x3e\x8e\x20\x90\x73\x42\x3b\xe7\x3c\xda\xcc\x8d\x99\x69\x84\xde\xd6\x1e\x79\xfb\x6d\x98\x0a\x03\xd9\xbe\x6c\xb6\x4f\x9b\xc2\x7e\x6f\xea\xe6\x39\xa5\xc9\x3e\xc1\xea\xa0\xf4\x92\xa3\x1c\x56\xa1\x2f\x59\x3a\x67\xf3\xd4\xef\x7d\x79\x12\x3e\x93\xb2\x1c\x7c\x69\xbe\x96\x9d\xff\xd2\x41\x0b\x65\x84\xe1\x39\x3d\x8c\x45\xc3\xa0\x03\xf6\x16\x9e\xf2\xb6\xf1\x90\x6c\xee\x1b\xde\xf6\xd8\x24\xed\xcc\x2f\xde\xdf\x08\x1f\xf3\x5d\x3b\x0c\x9c\x8f\xe3\xed\x65\x52\xe3\x9e\xaf\x63\xde\x2a\x06\xd5\x51\xe1\x4b\x83\xeb\xb6\xdd\xb7\x6d\xdb\x7d\xf8\x3e\x63\x37\xc6\x63\x54\xf8\x02\x47\x7f\xa0\x1f\x2b\xfe\x4d\x7c\x0e\x46\x66\x83\x07\x9c\x0f\x53\x29\x33\xa4\xd4\xf0\x31\xa6\x5a\xe8\x57\xda\x99\x38\x3b\xa8\x65\xb4\xcc\xe0\x0a\x6c\x81\xc3\xc7\x23\x25\xec\xd1\x5e\x38\x80\x1f\xc8\x4f\x1f\x86\xba\x13\xf9\x27\xf7\x53\x3b\xa8\xdb\x90\xc5\xf0\xae\xec\xd2\xeb\x02\x88\xb4\x92\x80\xac\x9a\x0d\x80\x94\x00\x86\x05\x29\x00\x6a\x2b\xf0\x09\xac\xc4\x28\x16\x33\x01\x2c\x89\x6a\x2b\xe6\x0d\x7f\x08\x59\x49\x10\x8a\xac\xb4\x81\x18\x52\x03\x40\xf3\xb4\x81\xbb\x10\x97\x95\x04\xa9\xa7\xb4\x92\x6a\x56\x8d\x51\xa2\x14\x00\xa2\xc6\x74\x76\x46\x29\xf5\xcb\xb1\x1e\x75\x0d\xfb\xcc\xc9\x6d\xd3\x08\xf2\xf2\xc5\x8b\xb6\x1c\x14\xa6\x56\xd5\x69\x6f\x68\xef\x57\x26\xda\x5d\x81\xc5\x6a\xf3\xc1\xd7\xdb\x32\x8b\xe7\x9a\x1c\xf6\xaa\xd8\xdc\x17\x9f\x5e\x9e\x98\x32\xd0\x2e\x94\x84\x68\xd7\x9b\x58\x3d\xe0\xa6\x9d\x0f\x79\xe7\x50\x55\x95\xe1\x51\xed\xba\xcf\xf6\x38\xdc\x76\x8a\xc1\xe6\xa8\xdb\x6b\x26\x4a\x23\xf5\xb1\xc0\xb9\x8f\xc1\x56\x28\xbf\xbe\xd9\x09\xf8\xf6\xb6\xbe\x10\x37\x30\xc0\xb9\x6c\x4d\xdc\xea\xf5\x55\xfe\xcd\x93\x16\xe5\x4c\xa6\x6b\xf0\x16\x5f\xd4\x6c\xaa\xa9\x63\x2c\x11\xaf\x3f\x6a\x66\x4a\xfd\x26\x53\x74\xd4\xe5\x3d\xad\xab\x47\xa8\xad\x21\x38\x93\x10\xc9\x44\x87\x7e\xe1\x34\x5f\x71\x05\x1d\xa9\x27\x1e\xb9\x53\xf3\x04\xd2\x7e\x6e\xbb\xec\x5b\x6b\x2b\x2d\xf7\xa5\xcd\xc9\x67\xb7\xde\x3b\xd5\x5b\x1d\x08\x38\xac\x09\x57\x7c\x5e\xa2\x4f\x68\x35\x70\x60\x0b\xef\xca\x64\xb4\xf6\x8d\x68\x41\x81\xdd\x5a\x36\xa8\x88\xb3\xaa\xe1\xce\x6e\xb8\xea\xf3\x7a\xf9\xe8\x6d\xa6\xae\x7c\x48\x01\xcc\xa7\xb3\xb2\x42\x87\x14\x07\x18\x1c\x86\x7a\xc1\x66\x15\x59\x91\x29\x9a\x29\x94\x75\x80\x90\x44\x89\xd4\x75\x15\xd7\x17\x06\x86\xfd\x03\xb1\x4a\xa8\x54\x66\xf7\x9a\xe6\x9f\xbf\x8a\xc0\x6a\xf5\xe4\x4b\x1e\x16\xba\x94\xaa\xeb\xef\xaa\x92\xbb\xdc\xf6\x44\x24\xf0\xcc\x6f\xc3\xb1\x64\xbd\x95\x72\xdc\xa2\xad\xb8\xd5\x46\x79\x1d\x35\x37\x7e\xfe\x40\x24\xe0\xf8\x8e\x99\xab\x5c\xfb\x07\xed\xe3\xf3\x07\xe5\xca\x14\x69\x12\x63\x34\x98\x68\x97\x7d\xe5\x03\x40\x3c\xe4\x09\x06\xc9\x5a\x28\x3b\x66\x35\xef\xba\xca\x84\x28\xac\x74\x49\xd9\x96\xce\x33\x6d\x8b\xbb\xea\xe6\x0b\xc1\x01\x68\x74\x7b\x69\x4a\x10\x68\xa6\x44\xe0\x3d\x0c\x15\x8d\x50\x4c\x49\x9e\x60\x94\x12\x72\xd5\x2a\xda\x76\x5d\xfd\x2c\x5f\xe2\x14\xbe\x63\x15\xfe\x65\x46\x54\xc3\x6d\x3e\x5b\xc4\x21\xd4\x06\xba\xbf\xff\x5c\x8c\x4a\x0b\x11\x6b\xbf\xe0\x5f\x64\x17\x64\x37\x58\x21\x79\x5c\x3f\x04\xa8\xfb\x48\x8e\xd4\x8b\x35\x82\x50\x5c\xd2\x9b\x95\x04\x91\xe1\xa2\x99\x56\x52\x35\x10\x06\xc3\xee\x30\x27\x04\xb0\x9a\x25\xee\xeb\x97\xee\x5b\xb0\x62\xdf\xda\x19\xe1\x1f\x4c\x5d\xdf\x5d\x2b\x50\xc0\x90\xff\x86\xe9\xda\xfd\xf6\x50\x57\xed\x8c\x17\xdf\x8f\xb6\x02\xae\x5f\xbc\x69\x53\x23\x0e\xbd\xea\x9d\xb7\x64\xcd\xbc\x6a\x8a\xd1\xe6\x8f\xe6\x0f\x05\xd2\x99\x00\xe0\x89\xeb\xfc\x05\x06\x59\x85\x8e\xd2\x09\x9c\xe1\xc2\x99\x30\x17\x8d\x30\x2c\xc1\xb8\x53\xc6\xb3\x5a\xe1\x0b\x6b\xa1\x6b\x5b\xab\x9a\x62\xe9\x12\x0b\xc0\x11\xf4\x98\x09\xa8\x92\xcc\x69\xdd\x3b\x2b\xe7\x5d\x7f\xca\xa4\xef\xc0\xad\x13\xcb\x6f\xda\x4f\x44\x90\xca\xca\x25\xd8\xfd\x24\x4c\xb6\x54\xcd\x5d\x31\xb7\xe4\x76\x6d\xb0\xe1\xac\x55\x1d\x18\x6a\xc9\x9a\x63\xd7\x42\x89\x23\xed\x38\x4f\x23\x03\xb5\x47\x3c\xb1\x4a\x8f\xff\xe3\xb4\x6b\xb7\x5a\xec\xac\x45\xbb\xd1\x6e\x32\x0b\x45\xbc\x40\x40\xb2\x53\xcb\x59\x2c\x90\x73\xf2\x3c\x69\xac\x59\x1c\x1e\xb3\x29\x41\x38\x4f\x8d\xe8\xf7\x2c\xda\xad\x8c\xc3\x26\xab\x45\x27\x31\x9c\x1f\xbf\x8f\xdb\x69\x87\x41\xfd\xee\x70\x8a\x9d\xe4\xf9\xc3\x86\x01\x37\x79\x40\x76\x42\xce\x62\xd1\x72\xce\x22\xb7\x15\x10\x0c\x22\xf2\xc6\x3d\xc7\x50\xf0\xc7\x30\xf0\xa5\x02\x78\x06\x83\xf4\x1c\x1c\x97\x29\x7c\xe0\xd8\x67\x9c\xcc\x1a\x12\x14\xb9\xb6\x08\x7a\xa4\x78\xcf\xc2\xba\xf4\xb1\xe8\xf9\x12\x88\xf4\x88\x9e\x85\xe3\x72\x85\x77\xb1\x16\xed\x26\xd6\x34\x51\x04\xed\x56\xcb\xb8\x3d\xfe\x3a\x1a\x21\xd9\xf0\x7a\x2c\xaa\x73\xfa\x60\x3d\x1a\x21\x70\xa6\x38\xda\xd6\xc7\xec\x86\xc6\x57\xe0\x08\x85\x31\x6e\xd5\x02\xd1\x9d\x24\x88\xd4\x3a\x65\xf6\x8e\x5c\xdd\xa2\xb9\x1d\x2d\xb3\x66\xa5\xae\xb9\xf2\xf2\x75\xeb\xee\x99\xba\x72\x45\xa4\xfa\xe4\x65\x53\x36\x0e\xa6\xd3\x33\xa3\x1d\xdf\xd5\xfe\x52\x1a\x68\xcb\x66\xe3\x5d\xc4\xb4\xde\xfb\x80\x00\x80\x8e\x73\xcf\xfd\x45\x28\x14\x8e\x00\x01\xd4\x27\x07\xf7\x5c\x1a\x08\x44\x22\x1d\xb1\xf6\xae\xd4\xe0\xba\x6d\xcf\x90\x5b\x5a\xa6\x4d\x6b\xcb\xba\xac\xf4\x95\xa7\xaf\x2e\x27\x9c\x04\x69\x1b\xb7\xe7\x37\xb0\xc8\x0b\xa3\x03\x04\x5c\x9c\x33\xd8\x9c\x8a\x7b\x7c\x77\x7e\xae\xfe\xa3\x73\xa3\x67\x13\xdf\x1b\x3d\x1b\xbb\xf2\x67\x0f\xe2\x6a\xfc\xf7\xfc\x19\x38\x93\xdf\x38\xfa\xc1\xb9\xf8\x4a\xe2\xcc\xd1\xb7\xf1\x8d\x06\x7f\xa4\x81\x3b\x4b\x6d\x37\xfa\x7b\x3f\x52\xd1\x74\xb4\x08\x21\x94\xcc\x1a\xfd\x13\x59\xdc\x53\x85\x5e\xac\x50\xb9\x0b\x50\x96\x86\x43\x65\x8b\xae\xee\x1a\x93\x0b\x8a\xb1\x46\x08\x01\x70\x87\xd3\x59\xc3\x92\x35\x08\xd9\xa4\xa4\x66\x25\x91\x31\xbe\x8c\xe2\x87\x91\x14\xe1\x8d\x90\x24\x85\x44\x78\x2c\x24\x8a\x21\x69\xf4\x70\x45\x73\xd3\xdc\xe6\x66\x72\x66\x7b\xf5\xb4\xe6\xb9\xcd\xdf\x6d\xae\xac\x68\x86\xde\x44\x3b\xfe\xe1\xea\xdc\xe8\x29\xb9\xd3\xa7\x30\x36\x3b\x33\x75\xe9\xef\x96\x4e\x65\xec\x36\x06\xae\xd2\xd3\x9b\x2b\x2a\x9b\xc9\x52\x49\xbf\x4f\xe1\xef\xc5\xe6\x0a\x6d\xa0\xb2\xb9\xb9\x12\x7e\x58\xd1\xcc\xe7\x97\x25\xda\xff\xa6\xc7\xfe\x56\xd8\xb6\x27\xf0\x75\x70\xa5\xfa\xf4\xd9\x67\x3f\xad\xee\xb2\x33\xb4\xed\xfc\x8a\x8a\xf3\x6d\x34\x63\xcf\x5f\x39\x76\x55\x65\x53\x13\x32\x1b\xe3\xae\xcf\x0d\xce\x0d\x07\x8a\x80\x09\xdc\x10\x87\x14\xf4\xc0\xc7\x06\x9e\x4a\x94\xce\xa4\xd5\xa4\x44\xcb\x4c\x56\x12\x41\xd6\xdb\x1d\x86\xd6\xdb\xef\x56\xa2\x19\x64\x48\x2b\xfa\x80\xa7\x30\xde\x11\x25\x83\x43\x56\x1f\xf9\x18\x3d\x9d\x9c\x2d\x4e\xa7\xe8\x8d\x3c\x43\x8b\x6a\x36\x9d\x49\x10\x0a\x2d\x09\xd1\x04\xd0\x4a\x56\x56\x64\x9a\xa1\x03\xa0\x6b\x86\x8c\xe1\x00\x25\x25\x45\xda\x70\x5e\x35\xba\x58\x42\x6f\xfb\x09\xbd\x4b\x80\x02\xc7\x09\x43\x2b\x72\xa1\x47\xa0\x44\x49\x60\x29\x86\xc5\x7a\xbf\xa0\xd7\x4e\x16\x1b\x4d\xa2\xa8\x9f\xa2\xbf\x07\x23\x97\x86\x75\xa5\x71\x75\x00\xbb\xb3\x4a\x42\x6f\xb0\x24\xb1\xe0\xc8\xaf\x9f\x60\x2c\xe0\x66\x0d\xea\xfc\x56\x10\x41\xcf\x90\x5b\x94\x92\x0c\x9d\x4a\x52\xba\x48\x64\xa1\xab\x52\xd2\x09\x60\x22\x7a\x50\x12\xd4\xac\x9a\xd6\x07\x73\x51\x56\x1f\xf6\x63\x49\xd4\xef\x90\xcc\x42\x00\xeb\xd9\x01\x03\x9a\x85\x30\xc0\x8b\x18\x96\x50\x0a\x45\xa1\x3f\x40\x2f\x04\x7d\x74\x08\x19\x23\x8b\x7a\xe6\x08\x46\xa0\xa5\x82\x09\x28\x56\x5b\xb1\x31\x1b\x27\xeb\x89\xc6\x3c\x1c\xa1\x66\xd5\x42\xff\x98\x32\xc0\x6c\x98\xe2\xb9\xa2\x31\xf2\x34\x6e\xcb\x82\x2e\x86\x58\xbc\x71\xb1\xa4\x03\x14\xbe\xda\x6a\x26\x29\x9e\x5a\x4c\x3a\x2c\x1e\x13\xa1\x5d\x4f\x92\x14\x41\x30\x16\x33\xc9\x91\x80\x31\x60\x62\x8e\x4a\x32\x04\x81\x19\x30\x83\xa5\x37\xea\x09\xcf\x0b\x5b\x95\xa0\x03\xac\x66\xb7\xcb\x6e\x07\x36\x52\x22\x92\xa4\x60\x55\x1c\x4d\xb4\x89\x16\x4b\xe2\x7e\x8b\xd5\xe5\xb6\x53\x5c\x89\xe8\x5c\xed\x02\x73\x79\x09\x01\x11\xbf\xaf\x14\x83\x99\x63\x2c\x34\x69\x65\x38\x00\xc1\xc3\x09\x00\xa2\xd9\xa4\x80\x9d\xb2\xb0\xa2\xc5\x27\xd6\xa8\xb8\xc2\x17\xa2\xcc\x56\x8a\x30\xdb\x84\x1e\x73\x95\xb7\x24\x6b\x01\x70\x96\x54\x70\x72\x24\xec\x13\xed\x18\xd3\xb4\x95\xb1\x13\xfe\x99\x59\xd1\x5d\x21\x12\x10\x28\xb5\xbb\xa4\x99\x26\x0c\xb4\xc9\x1d\x22\x31\x4d\x52\x18\xc7\x12\x54\x19\x29\xfc\xc0\xec\x24\x82\x01\x53\x05\x9b\x50\x48\x3b\x0d\x84\x60\x49\x6c\xba\xa0\x4a\xb2\xda\x30\x88\x66\xda\x4d\x48\x18\x73\x58\x74\xc4\xa0\x6b\x46\xfe\x16\xc2\x4a\x9b\x31\x61\x21\x08\x2b\x01\xb7\x61\x33\x47\x53\x66\x8a\xc6\x04\x5b\xe1\x32\x5b\x1f\xb4\xd8\x08\x9a\x24\x09\x96\x34\xe1\x2c\x65\x27\x1c\x66\x33\x45\x60\xb0\x60\x92\x34\xb1\x26\x70\xb2\x58\x15\x44\xcc\x78\xa4\xb8\x57\x36\xc9\x4b\xfd\xdc\x32\xd9\x25\x59\x22\x81\xaa\xb9\x7c\x9f\x50\x35\x25\x96\xf2\x97\xee\x6d\xe7\xdb\x63\x95\x1e\xca\x12\x01\xb0\x58\xc0\xc2\xce\xe5\x02\x1e\x77\x26\x94\x8a\x98\xed\x2e\x6c\xa3\x48\x88\x10\x44\x44\xd8\x11\xf5\x9c\xda\x21\x55\x56\x12\x2e\xc1\xb2\xb9\xb6\xbb\xda\x4a\x12\x00\xae\x00\x63\x8a\x8b\xb2\x70\x26\x6b\x23\x71\xba\x5f\xe9\xc8\xac\x8a\x35\x4c\xa2\xa8\x68\xe4\x14\x75\x81\xc3\x44\xbb\xac\x16\x9f\x2f\x1b\x71\xf9\x5c\x66\x16\x8b\xb2\xcb\x29\xf0\x96\xfa\x85\x65\x4d\x2d\x3d\x99\x5a\xab\x12\x0a\x87\x09\x16\x58\x87\xd7\xe9\x23\x4f\x03\x1e\x68\x1b\xc1\x82\x83\xb0\xda\x69\x6d\x00\x4c\x1c\x45\x99\xac\x00\x4e\x0b\x61\xd2\x5f\x38\xd6\xae\x73\x79\x1c\x25\x3e\x67\xa9\x25\xc2\x54\x52\xb5\x67\x0a\x42\xdb\xad\x67\x95\x61\xb2\x7a\x4b\x42\x69\x0e\xba\x6c\xd0\x3a\x10\x88\x89\xee\x8e\x88\x89\x08\x00\x24\xd3\x40\x74\x96\xf0\x0e\x86\x6c\xa7\x02\x65\x6e\x33\x61\xda\xee\x30\x13\x24\xd3\xd0\x09\xd0\x10\x74\x54\x05\x31\x61\x35\x43\x29\x2f\x06\xa0\x22\x46\x3a\x58\x9b\x04\xac\x97\x32\x49\x0e\x2b\x60\x0e\x6c\x66\xce\xcc\xd2\x84\xd5\x4e\xd0\x41\x92\x27\x29\x06\x93\xa4\x43\x02\xb0\x39\x79\x87\x99\x34\x63\x8a\x22\x69\x82\x01\xb6\xd9\x6b\xb3\xb6\x06\xcd\x04\x53\xd2\x56\xdb\x5d\x4a\xff\xa0\xc1\xb5\xcc\xe4\x71\x07\xdb\xfc\x7e\x1e\x80\xec\x38\xcd\x16\x22\xa5\xef\x98\x1d\x89\x32\xc2\xd1\x54\x97\xf0\x74\x9b\x9c\x26\x4c\x99\x99\xb4\xd3\x31\x55\x36\xd1\x89\x92\x2e\xa9\x14\xf8\xb3\x42\xee\x95\x0b\xbc\xae\x78\xc8\x4a\x54\x70\x5e\x8c\xcd\x14\x38\x84\x27\x4d\x0c\x41\x12\x16\x9a\x01\xec\x54\x49\x70\x1d\xb0\x72\x26\x20\x49\x20\x7d\x04\x85\xdf\xc5\xb4\x09\x3b\xc0\x6e\xa7\x49\x3b\x45\x13\xb4\x8d\x00\xf2\xd0\xb3\xb6\x12\x49\x14\x39\xc1\xee\x22\xf9\x5e\x9f\x93\x71\x99\x4b\x45\x0e\xf4\x2e\xca\x1f\x2a\x01\x68\xb6\x93\x56\xc6\xc6\x59\xa5\x79\x56\x67\x6d\x3c\x66\xb6\x91\x16\x57\x24\xd2\x13\x16\x28\xc2\xee\xa8\xa0\x3d\x36\xd1\xea\xe8\x66\x39\x33\x5d\x62\xa2\x43\x2c\x41\x57\xa5\x3b\x14\xee\x89\x74\x6f\xc4\xec\x71\x8a\xa5\x89\x5a\x97\x7b\x59\xb6\x5b\xb8\x24\xbd\xf6\x99\x85\x5b\x2b\xdd\x50\xea\xab\xb8\xb9\x7b\xe9\xc6\x75\x2b\x9b\x5e\x9a\x57\x37\xa5\x0c\xe3\x48\x3c\x00\x60\xe2\x6d\xa5\x54\x9c\x9d\xad\x4e\x3e\xb7\x63\x0a\x15\xae\x8b\x96\xb8\xe2\xa1\x12\xab\xb5\x77\x8a\x2d\x98\x0a\xf8\xac\x8e\xa2\x7f\xbc\x3e\x16\x63\x51\x08\x29\x28\x81\x92\xa8\x15\xcd\x45\x27\x23\x14\x97\x89\x28\xc3\x92\x8c\x22\xa6\x92\x84\xac\x90\x61\xbd\x97\x96\x0a\x74\xc0\x8a\xac\xb0\xc0\x84\x28\x99\xd1\x1b\x39\x88\x30\x59\x4a\xef\xdf\x45\xa9\x95\xe4\x65\x45\xbf\xca\x68\x4d\x5a\x21\x19\x20\xa5\xec\x31\x1e\x04\x15\x27\x63\xec\xcc\x5e\xb1\xfd\xc2\xa8\xe3\x91\x77\xcf\x6f\x71\x87\xb4\x5f\x69\x57\xc1\xfc\xfe\xe4\xe5\xdf\xdd\x2a\xc7\x49\xd7\xf2\x4d\xdb\xbe\x3b\x12\x82\x04\xf1\xfa\x6f\x7f\x39\xaf\x7c\xcd\x15\xa3\x1f\x03\x00\x9e\xb9\xff\xb3\xbe\x99\xbb\x36\x4c\xda\x32\xa5\xd9\x71\x90\xd8\x03\x66\xa1\x6b\xda\xb9\x93\x4a\x78\x6c\x26\x62\xd3\x27\x77\x37\x67\x2a\x03\x96\x2d\xc7\xe9\x61\x31\xfd\x4a\xda\x3d\x7d\xde\xee\xe9\xd6\xab\xf0\xe5\x75\xad\x4b\x18\x76\xdb\x5f\x16\x2c\xb8\x7e\xb0\x9b\xb5\x03\xf5\xfb\x57\x6e\xef\xf8\xe4\xea\x0f\x9b\x83\x1f\xbe\x3d\xed\x2d\xe2\x0c\x80\xcb\xf6\xf2\x77\xff\xce\x3b\x29\xdb\xec\xd6\x22\xff\xb8\x1f\x6c\x25\xed\x0d\x3d\xfe\x4c\x05\xe5\xa1\x28\x92\xa0\x68\x86\xc2\xcf\x9e\x08\x8f\xb1\x58\x7e\xad\x68\x50\xd7\x3f\x12\x44\x0d\x24\xc8\x4c\x3a\x95\x0c\x10\x05\xdb\x2b\x88\x1a\xf4\x4c\x06\x6a\x8e\x54\xe0\xe8\x4d\x10\x63\xeb\x28\xad\xb8\x40\xbc\x45\x1b\x4c\xb3\x05\xf4\x39\x7d\x54\x94\x4d\x25\x49\xd1\xe5\x16\x18\x91\xbc\x52\x69\x9c\x3f\xbd\x6e\x45\xc0\x5f\xe1\x72\x5c\x5a\xd9\x5d\x16\xab\xf2\xd6\x34\xac\xbd\x77\xa8\x3b\xb7\xa6\x4b\xee\x9d\xdb\xbc\x67\xa1\x18\xea\xef\x48\xcd\xaa\xab\x48\x96\x26\x53\xff\xbe\xab\xe7\xdb\x6b\x3a\x61\xf5\x5f\x6e\xde\xb9\x62\x7a\xcf\x25\xda\xe1\xc7\xd7\x38\xfb\x8b\x11\xa0\xf4\x08\xbc\x96\x3c\x29\x5b\xe5\xb1\x7a\x18\xc6\xe9\xf4\x72\xd3\x3d\xe1\x88\xa7\xbd\x5a\x5d\x90\x08\xb6\xad\xe9\x69\x59\xd4\x1c\x67\x63\x22\x2b\x94\x29\xa9\x50\x75\x75\xa8\xb9\x7a\xf1\xae\xf8\xe4\xb3\x2f\xbd\xf9\x2f\xfd\xce\x35\x8f\x03\x75\x49\xcf\xf4\x15\x3b\x0b\x11\xed\xb0\x1e\x31\xf4\xf3\xaa\x23\x39\xf2\x7f\x0c\x5f\x96\x36\xd4\x6d\x78\x5c\x8d\xad\x87\xa8\x06\x3e\x79\xd2\xa0\x29\x96\x27\xac\x72\x66\x55\xda\x02\x0c\x4b\x1a\x06\xbe\xc0\x82\x72\x14\x3e\x95\xc8\x7a\x81\xf8\x47\x9c\xf2\xbb\xf3\xf5\x52\x90\x86\xa8\x14\x08\x7f\x28\x06\x08\x8f\x9d\x0c\xba\xb5\x3f\x96\xca\x72\x29\x2c\x74\x45\xde\x76\x4c\x6f\x25\x69\x5a\xf4\x25\xc3\xda\xc7\x76\xb3\x49\x1b\x14\x7b\x6c\x6a\xdf\x00\xb1\x69\x69\xbb\x78\x13\xd9\x3a\x9d\x9c\xf1\xa4\x14\x89\x08\x87\x1f\x60\x68\x18\xf2\x3a\x4a\x1d\x3b\x5b\xdc\xb2\x5c\x5a\x51\x1a\xf7\x7d\xd0\xa3\x9d\xab\xfd\x92\x13\xdd\x55\xa2\x60\x31\x6b\xbe\x12\xc6\x2c\xf6\x51\x3b\xd5\xa5\xab\x56\x8d\xbe\xcb\x41\x03\xec\x42\xc7\xcd\x3b\x14\x34\x95\x2f\x58\x6a\x7e\x0d\xc6\xe9\x88\x8b\xd5\x8c\x31\x33\x1c\x28\xae\xd8\x8e\xc7\x86\x65\xef\x21\x63\x49\x86\xca\x79\xe5\x11\xd2\x58\xef\x1d\x45\x06\x31\x39\x36\x56\x72\x8d\xf5\x5c\x82\x3d\x7a\x92\x3c\xce\x85\x48\x21\xea\x80\xc1\xff\x58\x58\x85\x52\x88\xa8\x9b\x17\x0d\x3b\xa6\x63\xc8\x59\xd2\x2a\x9f\x89\x12\x45\xb6\x36\xc3\xf7\x5b\x82\x71\x48\x37\x0a\xd5\x97\xa5\x4a\xff\x56\xfd\xa9\x59\xf6\x8e\x74\x26\x86\x13\x9d\x23\x5e\xd9\xfc\x69\xf5\xdf\x4a\x53\x65\xf5\x4e\x40\x3d\xcb\x21\xb7\xbc\x07\x90\x53\x1b\xda\xf5\xd3\x5d\xbb\x7e\x0a\x07\xca\xea\x2b\x61\xce\xf9\xda\x69\x0e\x97\x57\xd6\x3e\x4a\x74\x76\x26\xc0\x29\x7b\x5d\x0e\xb8\xfe\x7c\xed\x9e\xca\xfa\xb2\x52\x0f\xe4\x56\xaf\xd6\x72\x1e\x62\x48\xbf\x60\x57\x21\xaf\xa4\x9e\xd7\xb8\x61\x89\x5b\x1c\xec\x46\xbf\x64\x5f\x28\xb3\x71\x7c\x36\x54\xdf\x5f\xdf\xde\xb9\xb8\xd3\xf8\xd5\xf7\xd7\xaf\xed\xc7\xb9\xfe\xb5\xda\x01\x23\x37\x44\xbb\x56\xe0\xc9\x1b\x1a\x5d\x6b\xe4\xe4\x25\xad\x56\xdf\x13\x97\x6a\x06\xc6\x1f\x0c\xf7\xaf\x5d\x0b\xcf\x1f\xcd\x47\xe1\x3d\xba\x51\x18\xa1\x38\xb4\x82\xac\xc8\x63\xac\x76\x98\x61\x41\x94\x62\x13\x27\x78\x28\x18\x74\x72\xa5\x35\x65\x73\x5b\x3c\xb1\xe6\xa6\x98\xa7\x65\x6e\x79\xa2\x94\x73\x92\xf3\x8f\x6b\x60\xde\x85\xd7\xc4\xde\xa1\xa0\x17\x22\xfe\xb2\x32\x7f\x04\xbc\xc1\xa1\x5e\x71\xf7\x09\xda\x88\xaa\x23\x88\xfe\x1d\x75\x04\x39\x50\x0f\x42\xa8\x40\xd8\x26\x04\x70\xb2\x15\xe2\x34\x63\x80\x43\x29\x71\xc3\xc7\x9a\x32\xcc\x82\xe3\xb2\x22\xb7\x81\x3e\xce\x54\xe3\x86\x8d\x30\xa5\x1a\x64\xf3\x06\x86\x0f\x65\x18\xe2\x4a\x22\x35\xb2\xe8\xfa\x57\xde\x7d\xe5\xfa\x45\x85\x1d\xac\x21\x9d\xda\xeb\x76\x07\xab\xbd\xfe\xa0\x25\x64\x79\x50\x7b\x9d\x75\xd8\xb5\xd7\x9d\x24\x65\x7e\xf0\x41\x33\x45\x3a\x21\x66\x77\xb0\x10\x7b\xd0\x1c\x31\x3f\x08\x31\xd6\x61\x87\x58\x31\x11\x5b\x8f\xde\x66\xd1\xa2\xeb\x33\x0e\x6a\x48\x7b\xc1\x69\xb1\xd0\x83\x9f\xd9\xed\x9f\x0d\xd2\x16\x8b\x13\x92\x43\x94\x83\xb3\x7d\xf6\x99\xdd\xe9\xa0\x86\x20\x59\x48\xb5\xd9\x0a\xa9\xda\x0b\x43\x94\xc3\x69\xff\xec\x33\x5b\x51\xf7\x7b\x82\x3a\x0f\xb9\x50\x1d\x42\x71\xbd\x5d\xd3\x9b\x35\xda\x68\x01\x53\xc9\x58\x9c\x26\x8b\x4d\x9d\x2b\x1b\x33\x46\xca\x2c\xb8\x0d\x52\x6d\x63\x24\x4e\x7e\x90\xad\x7f\x58\x7b\xee\xc1\x15\xbf\x3a\xb2\xec\x9e\xf7\x77\x5e\x0a\x04\xc8\x83\xda\x05\x07\x6e\xd0\x0e\xbe\xb0\x65\xc3\xd3\xe0\xba\xb6\x8a\x73\x85\xe7\x2e\xda\x73\xe8\x8a\x73\xce\x2c\x0f\xb2\xcc\x3b\xe6\x07\x21\xfb\xf0\xc8\xed\xcd\xda\x0f\x5f\xdd\xf9\xfe\x3d\xcb\xb6\x3e\xf5\x3f\xff\xda\xf2\x02\xf8\x6f\xb8\x16\xa4\x5f\x9f\x4b\xe3\xf2\xf2\xe0\x8c\x17\x37\x5c\x71\x68\x4f\xca\x15\x64\xcb\x0a\xd8\x66\xf4\x48\x71\x4d\xbb\xb2\x68\xc1\x68\x2c\xe7\x87\xbf\x60\xc7\xff\x05\xdf\x96\xf6\x09\x68\x1a\x78\xd9\xc4\x2f\xb8\x5d\xf6\x1e\x32\x52\x68\xe4\x95\xf1\x1d\x05\xf8\x3f\x34\x6a\x20\x7d\x18\xab\xb0\x70\xc7\x51\x1c\x0e\x03\xc7\x23\x74\x64\x98\x1e\xa2\x46\x50\x27\x9a\x6a\x78\xe2\x55\x82\xc0\x48\xa2\x60\x54\x03\x96\x8c\x72\x51\x2e\x92\xc0\x35\x63\xd4\x8b\x6d\x50\x24\x7d\x68\x02\x4e\xd1\xbf\x8f\xa0\x81\x10\x54\x04\x08\x82\x70\x3a\x1b\x12\xe9\x21\xd9\x7b\xa0\xeb\x25\x9e\x77\x65\x5d\xcf\x50\x42\x7b\xe7\xc9\xb5\xb9\xd4\x69\x3d\x4d\xac\xe3\x27\x82\xdf\xc3\xf3\x04\xf7\x5c\x63\x01\xee\x63\x1f\x2f\xa7\xf9\x7d\x44\xdf\x3e\x3e\x2d\xf3\xfb\x0e\x78\xb5\xc9\xf9\xdc\xa3\x60\x79\x14\x2f\x4c\xcb\xf7\x6c\xfc\x0d\x9f\xe6\x79\xfe\x69\xca\x59\x1e\xf2\x12\xb9\xd1\x9c\x4f\x51\xec\xec\x8b\x6e\xa7\x2b\x23\xfc\x6d\xfd\xb0\x2e\x98\x5c\xb8\xb0\x70\x1b\xed\x8f\x18\x5d\xf0\xe8\xa3\x08\xc1\x91\x23\x08\x98\x73\xc9\x29\xe8\x02\xc3\x66\x90\x66\x58\x1c\xc0\x06\x90\x46\x00\xb3\x10\xa5\x68\xb9\x06\x12\x04\xc3\x92\x92\x60\x50\x60\x44\x69\x5d\xc2\x04\x81\x15\x03\x6d\x2b\x15\x0f\x80\xde\x47\xea\xdb\x00\x91\x54\x5b\x49\x03\x3b\xc2\x50\xb8\xf4\x9a\x22\x05\x08\xc1\xc0\x83\x31\x66\xc5\x5b\xb1\x9a\x2d\xac\x7f\x60\x29\x9e\x15\x25\xe6\x5c\x69\x9f\xa7\xbc\x2c\x10\x64\xf8\x44\x84\x84\x8b\x93\x04\xc3\x98\x2a\xe4\x23\xc8\xd3\x2e\x08\x81\xfe\x86\x0e\x0f\x61\xf1\xf0\x0e\x60\x48\xd2\x15\xdd\x30\xe5\xaa\x75\x4b\x3c\x25\x96\xe8\xe9\x2b\x2e\x6e\xa6\x09\xd2\x51\x01\x2e\x9b\x48\x51\x4e\x93\x90\x76\x38\x4b\xb3\x95\x65\x7e\x3b\xa6\x5d\x66\x0b\x85\x59\x86\x2e\x69\xb6\xbb\x9c\x62\xe6\xa7\x03\x19\xc1\xc7\x32\x98\xc0\x40\x73\xac\xc9\x15\xa9\x68\x8d\x37\xd7\x90\x36\x8a\xc4\xb4\x60\x81\x90\x92\xa4\x89\xcf\xda\xdf\x0e\x65\x52\x15\x0d\xbe\x8a\xaa\x20\xc6\xbb\x16\x52\x0e\x39\x50\x42\x52\x82\xcd\xe6\x9e\x3b\xa9\xc6\x04\x94\x27\x3a\xa9\xd2\x51\x42\x53\x3c\x41\x96\x77\x74\x79\x3c\x96\xb2\xdd\xc3\x40\x5f\xec\x14\x29\x9a\xc7\xd8\x4c\x12\x56\x77\x72\xb5\xbf\xb4\x79\x7e\x9d\x9f\x02\x53\xac\x71\x45\x4f\x59\xa7\xdd\x16\x31\x63\x91\xb7\x7a\x31\xd8\x28\x2e\x18\x6e\x4c\x2f\x90\xad\xad\x91\x9a\xa0\x19\x93\xde\xca\x45\xad\x2b\x36\x5b\x1c\x04\x01\x04\x01\x98\x72\x98\x0d\xae\xe0\xbb\xe9\x4f\xa9\x69\xc8\x62\xb4\x78\x35\x68\x0e\x5a\x89\xce\x43\x28\x3e\xae\x13\xeb\xbd\xb1\x11\x94\xc4\xac\x34\x86\xf7\x29\x05\x20\x9e\x80\x18\x43\x93\xfa\x87\xa8\x66\x63\x71\x81\xd5\x5b\xc5\x04\x64\xd2\x2e\x35\x1b\xd3\xd5\xc1\x00\x64\x0d\x5c\x34\xfd\xb3\x35\x54\x4b\x1c\x80\x22\x60\x68\x56\x66\xe8\x82\x4a\x19\x37\x8e\x19\x87\x94\x04\xe8\x2a\xbb\xae\xa2\xe3\xdb\xdc\x42\x34\x32\xc3\x2d\xba\xba\x67\x9d\x65\x32\xdb\xd9\x52\x86\x0b\xb0\x81\x87\xaa\xff\xba\x66\xf5\xac\x9a\x9a\xdf\xac\x5a\xb3\x14\xac\xe6\x61\xed\xc8\x9e\x37\xb5\x3f\xb1\xe6\x61\x80\x3d\x6f\x42\x1c\xe4\xde\x4b\x7f\xae\xe5\xb5\xb7\xb5\x7f\xbf\xb2\xf3\x7b\xb9\xbb\x60\x41\x6f\x47\x35\x49\xb3\x0e\x9a\xfe\xde\xef\x13\xd5\xd5\x98\x62\x2d\xb6\x86\xc5\xdd\x67\xcd\x2e\xe1\x4d\x95\x92\x24\x32\xc2\xfc\x36\x4f\x05\x49\x79\x3d\xcd\x30\x67\x5e\x4a\x31\x27\xb3\x5e\x93\x3f\xd6\xda\x7a\xef\x3c\x7f\xad\x2d\xe8\xdf\xfa\xc9\x68\x64\xb2\x83\xf5\x86\x23\x93\x42\xbe\xeb\xed\x3e\x8a\xb2\xda\x83\x2c\x65\x1d\x5c\x36\x14\x8b\xec\x5f\xba\x64\xb1\xaf\xf4\xa1\xe6\xa1\x2b\x26\xb3\xd2\xfb\x7b\x0a\xbb\xdd\xdd\x97\xec\x5a\xd1\xda\xb5\xf1\x27\xa7\x6f\x00\x32\x77\xd7\xb7\x7b\xdb\x2f\x63\x6d\x98\xc0\xb8\xa9\xa5\x6d\x83\x9d\xb5\x92\xa4\xab\x71\x25\x5e\x3a\xb8\xb5\x5e\x12\x19\x53\xa5\xd4\x36\x64\xa7\xbc\x1e\x4f\x39\x65\x9f\x39\x94\xdf\xe0\xf3\xba\x92\xbe\x81\x07\xbb\x27\x65\x5c\x74\xb0\xbe\x86\xf6\x4e\x9b\x38\xb6\x58\x8f\xcc\x88\x47\xa5\x08\x19\xfc\xb6\xad\xa0\x06\x00\x38\x01\x33\x32\x97\x76\xc5\xc0\xc9\xc8\x38\xc3\x89\xa4\x8b\x3c\xe3\x9e\xa7\x7f\x71\xcf\x77\x9f\x8a\x44\x9f\xd2\xae\xcf\xff\xfa\xa1\x3b\x21\x46\x66\x1e\xfa\x75\xfe\x01\x88\xdd\x19\x19\x1c\x9c\xf7\xd9\xa5\x97\x7e\x46\xb5\x68\xbe\x51\xed\x5b\xa7\xbc\x0a\x9e\x47\x61\xd2\xef\xf3\x15\xda\x3f\x5e\x3d\x05\x6e\x1e\x85\xb7\x02\xbf\xd7\x1e\x2d\x62\x3d\x23\x6a\x0b\x8d\xd0\x6a\x84\x80\x25\xf4\xa1\x2a\x8d\x18\x03\xe5\x23\x1b\x53\x59\x9c\x20\x94\x56\x08\x60\x29\xab\x87\x29\x3d\x4c\x05\x21\x9b\x49\x50\x59\x35\x40\xb2\xd8\x01\xa2\xc0\xb4\x52\xa2\xc4\xea\x1f\x32\xad\x07\xa9\x2d\xa1\xf9\x83\x2b\x4e\x19\x9c\xd9\xec\xe4\xd6\x69\x37\xbf\xc4\x7b\xbd\xfc\x3e\xa8\x5c\x16\x9b\x3a\x38\xff\xe4\xb9\x27\x85\xd7\x3f\xfb\x9d\xf5\x6d\x25\x19\x2f\x23\x4e\xe9\x5e\x3a\x30\xb7\xbd\x9a\x9e\x7c\xde\xc9\x73\x5b\x52\x61\x91\x22\x6d\x26\xdf\x94\xfa\x34\x2b\xa7\x7a\xce\x68\x8e\x51\xb4\xe0\x32\x31\x00\x04\x5b\x93\x9d\xbf\x74\x47\x37\x56\x5a\x66\xcc\x99\xdd\xd7\xc4\x71\x52\x92\xf6\x4c\xeb\xdf\x78\xd6\x6e\xf8\x71\xff\x59\x2d\x21\x82\x0d\x94\x58\x2c\x07\xb5\xcf\xc1\x2b\x97\xc0\x2b\x8f\xb1\x2e\x93\xbd\xaa\x77\xfb\x49\x35\x42\x74\x46\x5f\xd5\xae\x61\x20\x30\xc1\x95\xd6\xf7\x6e\x98\xec\xe7\xf8\xf2\xa6\xb6\xb6\x3a\x87\x73\x4b\x0f\x2d\x4c\xea\x5d\xbb\xee\xe2\xee\x92\x9e\xfe\x85\xf3\x4f\x9a\x9c\x75\x38\xc8\xc5\x5e\x46\x6a\xcb\x34\x06\xb1\x34\xe3\xbc\x81\x96\x80\x0b\x08\x82\xb8\xfc\x42\x46\x6a\x4a\xc8\xb8\x0e\x91\xc8\x7d\x04\x91\xff\xa4\x90\x61\x49\x2e\x18\xfe\x55\xc6\x08\x0b\x0a\x36\xfb\xe0\x0e\x73\xfa\x2f\xee\x1e\x63\x64\x22\xff\xb9\x61\x56\x83\x36\x9a\xff\x70\xd6\x06\xf2\xf7\x87\x2b\xc6\x7e\x1b\x66\x11\x33\x66\x6d\x00\x5f\xe7\x9c\x8d\xda\xbf\xc0\xbe\x71\x4e\x27\x4c\x3e\x82\x8e\xc0\xd4\x23\xe8\xc8\xf7\xbb\xba\x66\x6f\xdc\x38\x61\x9c\x59\x82\xe2\x7a\xaf\x89\xbe\x94\xc6\x54\xfc\x12\xe7\x2e\x32\x57\x24\x32\x1d\x23\xd9\x2c\x10\x99\xde\xf5\x55\x8e\x5e\x78\xf7\x09\xf8\x4c\xef\xf9\x2a\x87\xaf\x63\xc6\xc4\xc5\xbc\x1e\xcb\xc6\x3a\x91\x8c\xd5\xf5\xa5\x79\xe5\xed\xda\xb0\x9e\xc1\xa3\x54\xac\x30\x64\xe7\x87\xbf\x32\xb3\x07\x8a\x59\x84\x36\xb3\x7f\x8c\x91\x55\x3b\xf2\x95\xb9\xfd\xc2\xf8\xbd\x30\x67\x7a\x34\x9b\xf0\x75\x9e\x57\x48\xf6\x0a\x5c\xc1\xed\x8c\x13\xbc\x32\xa0\xaf\x70\x50\x1b\xc9\xe7\xbc\xb2\xad\xe8\x36\x66\x93\x47\x9f\xf9\x06\xfe\x60\x0c\xe2\x51\xf0\xa8\x1f\xbe\xeb\x4b\x18\x03\x8a\xeb\xb9\x15\x5f\xc5\x1b\x50\xf4\xae\x87\xd0\x57\xd2\x07\x14\x6d\xdc\x97\x50\x07\x90\x1b\x65\x11\x02\xc9\x18\x8e\xe9\xa3\x31\x55\xd2\xfb\x56\x94\xd2\x07\xa5\x92\xd1\x1a\x11\x05\x20\x31\xd5\x20\x17\x75\x0b\xb4\xc2\x87\xdd\x61\x29\x9c\x94\x78\xe2\xc8\xb2\x46\xed\xa5\x47\x6f\xd0\x3e\xbd\xfe\x37\x77\x73\x5b\xf6\x00\xb3\x7f\xfb\x2b\x67\x63\x5f\xe3\x11\x64\x77\x96\x71\x1f\x6a\x65\x9e\x38\x31\x84\x4d\xec\xdc\x6c\xe7\xe0\x8a\xee\x38\xdc\xa9\xad\x74\xc2\x2f\xcb\xb8\x83\xb0\xe4\xd7\x0f\xfc\xf9\x7a\x30\xdf\xf0\x10\x54\xb4\xee\xca\xbe\x79\xc1\x7e\xed\xf3\x9d\x6f\x78\xd7\xe7\x98\x28\xbc\x11\xf6\x10\x56\xae\x24\xd5\x36\xd8\x39\xe9\x5b\x8c\xf6\x66\x2e\x17\xd5\x1a\x4e\xc0\xeb\x93\x55\x64\x22\x9b\x4a\x32\x2c\x18\xe6\x94\x72\x61\x4a\x57\x2a\xf8\x66\x49\x62\x2a\xc9\xbb\xbe\x60\x9d\x68\xb3\xdc\xf3\xf7\x59\x55\xf2\x1c\x2b\xf9\xfd\x68\xa5\x62\x0f\x05\x76\x36\xad\xf4\x9d\xee\x4b\xf7\x59\x1b\x92\x8e\x66\x47\xf7\xd0\x8d\x7f\x7d\xfd\xd0\x31\xef\x73\xe7\x1f\x68\x93\xf6\x2f\x7e\xa8\xe1\xf5\xbb\xb2\xbf\x7a\xdc\xc6\x2c\xf1\x0c\x79\xba\xd2\x0f\xa8\x7f\x52\x1f\x00\x19\x7c\x70\xde\x31\x2b\x68\x30\xce\x83\xa1\xeb\xbf\x02\x26\x0b\x6a\xd8\xb8\x81\x51\x1b\x64\x26\x86\xc7\xdc\xb0\xe2\x59\xb1\x14\x04\x86\x72\x8f\x05\xb8\x2c\x2a\x26\x92\xb9\xc7\xb5\xc7\x7e\x36\xcc\xba\x5e\x25\x68\x8b\xd9\x2e\xbd\x33\xb6\x77\xb1\xc3\xac\x0b\x36\x3a\xbc\x92\xb6\xb1\xb8\x7b\x0c\x48\xe3\x28\x1e\xf9\x99\xf6\xd8\xe3\x2e\x16\x9f\xd2\x09\xb4\xc5\x99\x93\x4c\x53\x96\x8c\x87\x0e\xe9\x5a\xe5\x43\x67\x51\x82\x1e\xdb\xbc\x64\x2c\xa0\x95\xd8\x41\x78\x82\x75\xb9\x26\xf8\x7e\x47\x8b\xe8\xd3\xee\xa2\x9b\x51\x41\x98\xf1\xc6\x68\x7c\x55\xec\x1b\xfa\x83\x6b\x05\x56\x4b\x6d\xd8\x50\x7e\x87\x0a\x3e\x28\x43\x5f\xeb\x1d\xfe\x85\xf3\x8d\x3b\x7d\x95\xb7\x78\xd1\x2f\xd6\x94\xa3\x10\x52\x0c\xc6\xbf\xfe\xc2\xea\x5b\xa6\xa0\x04\x27\xa0\x40\x6b\x9c\x6d\x82\x4c\x2a\x29\x85\x8d\x11\x8c\x61\x8a\x0a\x8c\x2a\x0a\x8c\x94\x4d\x2b\x10\xa6\x99\x08\xed\x00\x60\xa1\x12\x88\x54\x92\x88\xf2\xa9\xa4\x28\x41\x80\x4c\x51\x61\x19\x9f\x7e\xe6\x4d\xb9\x76\x3b\xcf\x34\x4e\x9f\xde\xc8\xf0\xf6\xf6\xdc\x4d\x67\x92\x0b\x2a\x76\x38\x17\x6c\xa9\xae\xde\xb2\xc0\xb9\xa3\x82\xce\x64\x66\x75\x77\x1f\x9e\x43\x7c\xfa\xda\x87\x0d\x6b\x7d\x7e\xed\x80\x77\x41\xf5\xd0\x92\xd2\x1b\x6f\x2c\x5d\x32\x94\x98\xef\x85\x10\xc9\xd6\x24\x7b\x62\xf0\xec\xa8\xf9\x2c\x18\x6e\x6f\xaf\x09\x7b\x4a\x30\xe7\xe1\x70\x89\x27\x5c\xd3\xde\xce\x88\x84\x23\x55\x15\xab\x4a\x39\x08\x91\x19\x8d\xad\x8d\x05\x6a\xaf\xa8\xd5\x7e\x2f\x57\xd4\x7a\x3c\xda\x01\xaf\x0c\x2f\xc1\x01\x78\x49\xf6\x6a\x07\x48\x7b\xb8\xc4\xdd\xdf\x5e\xfc\x3e\x72\x34\x42\x03\x86\x7d\xb2\xfe\xb1\xea\x1a\x62\x61\x15\xa9\x06\xa8\xa3\xc1\x31\x82\x86\x36\x20\x8e\x06\x95\xa2\x19\x6b\x10\xe2\x47\x83\x45\x78\x3b\xda\x01\xbc\x9a\x85\x38\x41\x51\x1f\xb6\x9e\xb4\xe4\xde\x7a\x66\x76\x53\xcd\x74\x87\xaa\x3d\xa7\x9a\x66\x37\xd7\xf4\x39\xd4\x6b\x4b\xdd\x2d\xb3\xd4\xaa\x1b\x56\xde\xe0\x15\x9b\x07\xd4\xaa\x1b\x33\x85\x84\x2c\x64\xb3\xa6\x39\xfa\xc9\x99\x5b\xdd\x62\xf3\x9c\xe6\xaa\x1b\x57\xee\xf5\x8c\x8e\x42\x76\xa5\xf6\x1c\xfe\x6c\x56\xcb\xb7\xc2\x4d\x77\xba\xbd\x4d\x73\xb3\xd5\xb7\xaf\xda\xeb\x91\xf4\xc0\x6d\x19\x73\x7f\x4b\x4d\x9f\x23\x03\x0d\x59\xd3\x2c\xfd\x2e\x99\x9b\x3d\x52\xf3\x9c\x6c\xf5\xf0\xca\x61\xfd\x14\xb5\xea\x16\x95\x9e\xd9\x54\xdd\xe3\xc8\x6a\xbf\xa8\x37\x69\x87\x56\x42\xd3\xea\xe3\xe7\x6a\xca\x0d\x4b\xaa\xe3\x6c\x44\x80\x2b\x12\xd9\x37\x40\x91\xca\x5e\x29\xd6\xd8\xb1\x0a\x5c\xc4\xcb\xa0\x93\xad\x94\x1a\x6f\x85\x89\x46\x24\xc4\x81\x60\x38\xf2\x74\xe6\xe4\xce\xce\x93\x6b\x9e\xa8\xb1\x55\x58\xea\xcb\x88\xf6\xb2\x7a\xb5\x7c\x74\xa4\xac\xbe\x25\x5e\xf3\x90\x42\xf8\x59\x3f\xef\x71\x0b\x6e\x0f\xef\x67\xfd\x04\x58\xa3\x6d\xc7\xda\x9a\x1c\x3e\x00\x0f\x46\x05\x71\x7b\x6c\xd2\xa4\xd0\xe6\x90\x49\x36\x69\x7d\x65\xf5\xf5\xf8\xb4\xf2\xc6\xfa\xb2\xf8\xcc\x92\xd0\x7a\x2f\xe6\xcd\x9c\xd9\x42\x51\x16\x33\x67\xe6\xf1\x0f\xa5\x99\x68\x6c\x2d\xd1\xf0\x3d\xa0\x50\x1b\x9a\x82\x66\xa1\x6f\xa1\x75\x08\xf1\x69\x15\x64\x6c\x20\x64\x12\xc6\xd2\x8f\xec\x28\xcc\x69\xe8\xba\x13\x3f\x7e\x28\x22\x47\xb3\xb1\x54\x92\x94\x0a\x2e\x9e\xb4\x24\x52\xbc\x28\x19\x7d\xa0\xe8\x16\x30\xc3\x67\x33\x69\x14\x22\x45\x97\x13\xd3\x64\x28\x26\x63\xa7\x2b\x8b\x42\xb1\xac\xcb\x89\xe5\x58\x88\xa4\xb1\xd3\x25\x9e\xd7\x05\x6b\x7e\xf1\x01\x65\xa2\x1c\x26\x1f\xd9\xa7\xbd\x9b\xa8\xe0\x59\x9e\x7f\x7e\xda\x79\x36\x8e\x26\x1c\xb6\xfe\x4d\x3f\xd0\xfe\x51\x3c\xc6\x84\x2c\x2b\xe1\xa4\x67\x2e\x07\xeb\x4a\x8b\xda\x4b\x92\x36\xda\xc5\x88\x44\x9b\x46\xbf\x0f\xe4\xf6\x1d\x6b\x57\x12\x5b\x97\xbe\xf4\xa3\x7f\x36\x8d\xde\x0a\xa7\x43\xdf\x47\xbb\x77\x7f\xa4\x3d\xa8\x5d\xa1\x3d\xa8\x87\x60\x0e\x2c\x84\x96\xb7\x2e\xbc\xf0\x2d\xed\x29\xed\x0e\xed\x29\x3d\x84\x73\xb7\x5d\x35\xca\x2f\x85\xb3\xc0\xc4\x2b\xcd\xfe\x85\xf6\x23\x88\x68\x24\x28\x1c\x2e\x05\x0b\x98\xc1\xe6\xe2\x59\x30\x69\x8f\x68\x26\xa2\x7d\xec\xe8\xf0\xa3\xab\x86\x66\xa9\x36\x0f\xef\x73\x04\x6c\x31\x6a\xf5\xcb\xf9\xcd\x34\x55\x15\x22\x07\x7e\xf8\xd4\x6f\xb4\x9b\x97\xe1\x3b\xee\x5a\x5d\x81\xd3\xc7\x3c\xb8\xcf\xc8\xcc\xe7\x3f\xb9\xf0\x2d\x68\x39\x2e\x0f\xe3\x5c\x50\x7a\xf9\xbb\x90\x4f\x1f\x41\x50\x72\x4c\xff\x46\x62\xaa\x9b\x26\xdd\x02\x29\x71\xc0\xc7\x55\x59\xc9\x90\x12\xd9\xaa\x7d\x74\x50\xfb\xfe\xef\x7f\x05\x4b\x5e\x7b\x4d\x7b\x07\x32\xef\x12\xfb\xe2\xf9\x7f\x5d\xbe\xf1\x16\x70\xff\x9a\x46\x87\x50\x4e\xd8\x9b\xdf\xf3\xfd\x4f\xf7\x7a\xef\x95\x0f\x5c\x72\xcd\xdb\x01\xaa\x5f\x6b\xd3\xb6\xac\x3f\x69\x72\xe9\xbd\xe1\x6d\x63\x36\xe6\x06\xef\x94\x0d\xc9\xa8\x16\x21\x33\xb8\xa3\xc5\x2a\x1c\xcd\x40\x98\x4b\x71\x13\x7e\x47\xb1\xe3\xa8\xb1\x60\x8a\x18\x21\x46\x72\xe5\xfe\x43\x16\x7f\x79\x0e\x10\xa0\xdc\xd8\x5f\x93\xbf\xfc\xf3\x5c\xb9\xbf\x89\x6e\xf2\x97\x7f\x96\x2b\xf7\xd3\x48\xcb\x15\x10\x40\x8e\xa0\x3c\x22\x26\xfc\x0a\xf0\xa4\x23\xb2\x57\x4f\x2f\xca\x6f\x2e\xf8\xae\xeb\xe3\x05\x5e\x34\x2a\x8a\xca\x53\x62\x52\x2d\xf2\x6d\xc5\x59\x60\x44\xb7\xc0\xf0\x45\x1b\x4f\x59\xe5\xf5\xc6\x36\xab\xc6\xc7\x78\xbd\xe8\x0f\x5c\xe4\xbd\xda\xef\xb5\xbd\xda\xef\xef\x25\x5d\xb8\x55\x4c\x8b\x64\xbf\x78\x78\x98\xb4\x91\xf9\xb3\x2a\xeb\xe9\xb6\xc6\x46\x6c\x31\x3b\x46\x1c\x66\x0b\x6e\x6c\xec\xb0\xce\xd3\x1e\x10\x45\x72\x88\xb4\x91\xe4\x10\x7e\x4c\xfb\xc5\xa4\x73\x26\x4d\x3a\x67\x12\x34\x3f\xc4\x30\xd8\x99\x30\x69\xc3\x00\x2f\x44\xae\x3f\x2d\xd6\x33\x49\xd6\x66\xb2\x56\xab\xd5\xca\xc2\x8f\xe5\x49\x3d\xf2\x8b\x5b\x57\x98\x12\x26\x18\x02\xd0\x86\x11\xa0\x33\x8e\xe4\xa8\xcb\x0b\x36\x2d\xc0\xcb\xd1\x08\xc3\xcb\x08\x2b\x62\x2a\xa9\x06\xc0\x25\xb5\x12\xaa\x1e\xac\x63\x09\x86\x26\x16\xd9\x5b\x2b\xcb\xdb\xed\x65\xda\x91\xfb\x96\x34\x26\xab\xba\xda\x2e\xfe\x79\x45\xfc\xb2\x85\x9b\x6a\xb2\x99\xfa\x46\x7f\x7b\x74\x86\x65\x0f\xee\xca\xb7\x58\xad\xf8\xa9\x49\xf0\x34\x94\x7d\xcf\xe1\x58\xf3\xbe\xf6\x8b\x49\x2d\xef\x5c\xfe\xfc\x3c\x96\x55\x4e\x69\xfc\x36\xf7\x59\x91\x13\x87\xfa\x8b\xd1\x87\x22\x08\xeb\x5f\x59\x61\xbe\xcb\xe9\xca\xc6\x52\x21\x89\x91\xa3\x11\x63\x90\x97\x4a\xb6\x12\x6a\x98\x40\xf8\x15\xdb\xc3\xda\x8f\xfe\x78\xa3\x76\xf0\x85\xcd\x9b\x5f\x00\xff\x8d\x50\xf5\xea\x6f\xb6\xfe\x64\xc7\x9f\x72\xb9\x3f\xed\x98\xb7\x67\x70\x72\x98\xd6\xfa\xf0\x07\x5d\x2d\xaf\x69\xf7\x8c\xe8\x27\x40\x23\xf8\x5f\xd8\xfc\xab\x5f\x6d\xdc\xf9\xa6\xf6\xd9\x9b\x3b\x6b\xa7\x2e\x1e\x88\x17\xec\xca\x0a\xed\x84\x13\x95\xa0\x08\x9a\x61\xac\x46\x88\x0c\x1d\x52\x64\xc3\x88\x3e\x95\x54\xb3\xc9\x58\x11\xb0\x39\x49\x15\x47\x9c\xa2\x9a\x96\x23\x8c\xac\xf0\x92\x20\x26\xb3\x06\xb6\xa9\x22\x33\x04\xcd\x14\x1d\x3d\x24\xda\x2d\x90\xa9\x64\x2c\x93\x56\x5a\x21\x36\xa1\x95\x88\x85\x48\x91\x9c\xe2\x74\xb6\x6a\x1f\xb4\x3a\x9d\xb4\x8b\xae\xdd\xbc\xa9\x8e\x76\x69\x2f\xa7\x7b\x33\x99\x5e\xf8\x59\xa6\x37\x9d\xee\xcd\x1c\x9e\x7c\x6a\x6c\xe7\x43\x6d\xcf\xea\x07\xe3\x59\xef\x1b\x3c\x3d\xe9\xc1\x1d\xd1\x74\x72\x72\x3c\x48\x83\xe7\xe9\x67\xc0\xc3\x04\x62\xb0\xec\x04\xdf\x23\xac\x73\x3a\x5a\x5b\x1d\x4e\x9a\xae\xab\xa3\x7f\xd7\x9b\x4e\xc7\xe5\xf4\xc2\xb8\x7e\xcf\xf4\x40\xdd\xe4\xd8\x42\x1a\x7c\xd5\xf1\x74\xa6\x37\x93\xac\xa3\xdc\xda\xb3\xcc\xc2\xf8\xe4\xba\x68\xa3\xc3\x57\xba\xfb\xb9\xe7\x76\x87\x4a\x1c\x0d\x8f\x1e\x77\xc3\xdd\xbb\x3f\x3a\x16\x07\xcb\x61\xb0\x39\xe9\xed\xa9\x51\x4e\x91\x62\x39\xe9\xc5\x14\x1f\x2b\x26\x91\x1a\x0f\xa9\x46\xe1\xc8\x8a\x2a\xe9\xef\xee\x4b\x8a\xaa\xe0\x6d\xaf\x7c\xd1\x6e\x89\xb8\xc7\x6e\xcf\xbc\x97\xb1\xdb\x29\x27\x55\xf1\x42\x05\xe5\xd4\xb4\x44\x6b\xa2\xba\xbd\x1a\x06\x0a\xfb\x57\x9b\x2b\x2b\x82\xeb\xae\xcb\xde\x03\xd5\xc1\x50\x75\x75\xa8\xd6\xfd\x38\x47\x36\x5f\xb7\x26\x50\x55\xd9\x1c\xf2\x52\x1f\xdd\x75\xf7\x47\x74\x49\x10\x52\xc7\xe0\x4f\x5c\x6d\xb7\x67\x32\x76\x3b\x4d\x57\x54\xd0\x57\x05\x13\x09\xe3\xca\xe2\x7e\x4a\x45\x73\x70\x06\xf9\x2f\x25\x54\x55\xdd\x5e\x5d\x59\x41\xb9\xb4\x7f\xd3\xd3\x43\xcd\x15\x81\xa4\xbd\x44\xda\xb2\x6f\xdf\x96\x12\x8f\xbd\x0e\x0e\x9e\x58\x2f\x09\xa0\x5a\x03\x91\x59\x2d\x82\x8f\x8d\x9b\xa5\x18\x02\x16\x4c\x4e\x4a\x81\xca\x14\x0d\x55\x5a\x80\x51\xdc\x7a\x05\x3a\xc6\x4c\xf2\xe4\x85\x67\x0d\x9f\xe5\x97\x7d\x57\x6f\x18\x98\xb5\xc1\x27\xf0\x3e\xb8\xe8\x2a\x7d\xb7\xb0\xf9\xac\x5b\x37\xc0\xac\xe3\xf5\x97\xfd\xbe\xd6\x99\x6b\xd7\xcc\xd4\xde\x12\x7c\x3e\x61\xd3\x96\x81\xf5\xeb\xfa\xc1\xc3\xfb\xfd\x7c\xf6\xcd\x2d\xdb\x05\x9f\x9f\xdf\xea\xf5\x6f\xed\x5f\xbf\x1e\xf6\x1d\xaf\xd5\xe8\x6d\xd4\x6d\x4c\x8e\x5a\x62\xe4\xdb\xc0\x45\x2a\x64\xba\xe0\x62\x3f\x4e\x5e\x6f\x64\x9a\xa1\xc2\x63\x29\x92\x5a\x48\x22\xe5\xe6\xd9\xcd\xa3\x3f\xbe\xff\x30\x4c\x6d\x9e\xdd\x9c\xff\xd1\x7d\xa3\x4f\xc1\x25\x30\xf5\xf0\xfd\x3f\x1e\xdd\xf5\x54\xf3\xec\x66\xa2\xfe\x9c\x8a\xe6\xe6\x8a\xfc\x0d\x3f\xfa\xec\xf0\xfd\x60\xd1\x0e\x55\x36\x35\x55\xe2\xd3\xef\xf9\xe4\xdf\xf7\x5e\xd8\x78\x8b\xf6\xdf\xfb\x0f\x7f\x7e\x1f\xd8\x5a\x1a\xb5\x4f\x2a\x9a\x9a\x2a\x26\xea\x2b\x76\x54\x8a\x50\x9c\x0b\x73\xe1\x02\x3d\xea\x09\xc6\xc7\xd4\x48\xbe\x5d\x0b\x2d\xd9\x85\x47\xe0\xc0\x92\x5d\xed\x13\xdf\xef\x30\x1c\xc0\x23\xbb\x96\x68\xa1\x7c\xfb\x2e\xb2\xf4\x58\x83\x3d\x13\x42\xc8\x6b\x42\xe4\xdb\x88\x42\x66\x64\x37\xb8\xc9\x4a\x51\xdc\xc0\xcd\xd1\xbb\x87\x70\x09\x44\x39\xe0\x52\x1c\xe1\x4e\x65\xf8\x30\x17\xce\x84\x33\xe1\x38\x17\xe5\x60\x62\x78\xea\xaf\xf3\xef\xc1\xd4\xad\x70\xed\xf3\xcf\x3f\x3f\x80\xdd\xf9\x7f\xc2\x54\xed\x11\xfd\xc0\x75\x58\xc8\xbf\x07\x53\xb4\xfd\x30\x65\x2b\xf9\xf6\x68\x39\xde\x9f\xff\x27\xac\xd3\x2e\xc1\xee\xfc\x14\xbc\x1f\x02\xbf\xfe\xb5\xf6\xd7\xd1\x81\xdb\x06\xf6\x16\x0e\x8e\x07\x27\x7c\x5f\x66\x03\x1b\xb5\x16\xb5\x17\xf8\x77\x0a\x3e\x1f\x13\x42\xce\x22\x90\x37\xc3\xa9\x19\x31\x95\xc4\x46\x3c\x5a\x88\x7c\x41\x11\x17\xfb\x32\x95\x3e\x7f\x45\x46\xfb\x4f\x31\x80\xb7\xdf\x77\xae\xc0\x4b\xea\xbc\x6d\x2f\xa7\x3a\xcf\xbd\xf3\xc7\xe7\xf6\x76\xfd\xf4\x65\xb5\xe5\x5c\x42\x3a\xc6\x88\xb2\x3b\xb7\xd0\x01\x6e\x0e\x66\xe5\x16\xe9\xfb\x7c\x1d\xd8\x9e\x20\x66\x34\x2e\xa5\xf3\xe7\x97\xbf\xc0\xe3\x95\x60\x7b\x22\x36\xfa\x48\xf9\x0b\x3c\x7c\x76\x6c\xf9\x5a\x50\xf9\x11\x33\xf3\x3c\x8d\xd0\x4e\xf4\x18\x7a\x0e\xbd\x80\x5e\x47\x7f\x43\x7f\x47\xef\xa0\xf7\xd1\x87\xba\x0e\x1a\x20\xa4\x00\x96\x58\xcc\x24\xa8\xa8\x03\x44\x29\xc0\x04\x41\x64\x31\x23\x17\x1c\x48\xd2\x6a\x2b\x56\x64\x43\x45\x35\x2c\x6f\xc8\xc2\x60\x5b\xef\x12\x5b\x89\x82\x46\x2d\x8d\x8d\xb0\x31\x5d\x44\xe9\xc0\x99\xb4\xaa\xe8\x0d\x88\xe1\x23\x27\xa9\x2c\x21\xa9\x09\x46\x49\xe0\x0a\x88\x46\x98\x56\x4a\x0d\xe0\x36\x70\x4b\x59\xb5\xd5\xd4\x56\xb0\x59\x62\x31\x13\x00\xb7\x40\xe8\x37\x0c\x10\x85\x91\x9d\x2a\x31\x50\x00\xa6\x56\x5a\x71\x0a\x18\x45\x4f\xe4\x53\x12\x03\x19\xb7\x03\xda\x30\xf9\xcc\xb4\x8b\x4e\x59\xde\x51\x19\x5e\xd4\x3c\xa9\x76\xf3\x0d\xb1\xaa\x66\x9f\x92\x38\xa5\xc7\x42\x93\x66\xba\x8a\x09\x52\x2e\x82\x06\x00\xc6\xc4\x11\xd1\xf3\x43\x4a\x18\x13\xb8\x49\x05\x0f\x1f\xbb\xba\xa5\xe4\xb4\xb5\x7e\xda\xad\x05\x82\x4e\x0f\xc7\xc2\xdb\x26\xab\x9b\xf7\x51\xa4\x44\x3b\xbc\xcc\x6d\x66\xae\x84\x73\x3c\x0c\x70\xbb\x58\x73\x69\x8d\x5a\x63\xe9\xae\xa4\x06\x5a\xab\xd4\x0a\xc1\x6d\xf1\xd8\x92\x44\x59\x75\x14\x5a\x28\x8e\x61\x69\x0b\x63\x26\x19\x87\xd7\x55\xc3\x6e\x5f\xe4\x2c\xeb\x6e\x2b\x9d\x62\xb2\x85\x42\xa2\x4d\xfc\x74\x9b\xbf\xaa\xbc\x24\xc2\x46\xad\x95\x26\x06\x97\xcf\x1c\x7d\x90\xad\xaf\xe2\x88\xca\x4f\x95\xfd\x59\xb3\xaf\x54\x2a\xc1\x9b\xb7\xb6\xb4\x6b\x9f\xd7\x9e\xd1\x03\xb7\x10\xd1\x86\x54\x3d\xc9\xb8\x67\x76\xf8\xb5\x49\x43\xb4\xa5\xda\xc6\xbf\x1c\xb4\x94\x13\x9b\x01\xeb\xff\x97\x12\x35\x93\x37\x7e\x6b\x6a\xfd\x2a\xb5\x25\xa0\xb6\x39\xe3\x37\xec\x7b\xec\xca\x6f\x61\x92\x32\x53\x71\xa6\xd4\x16\x28\x89\x8b\x61\x6f\x5b\x79\x9f\x03\xdc\x16\x67\xb0\x57\xb4\x37\xb4\xb8\xb1\x37\xb3\x64\xfb\xb5\x02\xe9\x5d\x2b\x3a\x1d\x12\xb1\x8a\x15\xed\x16\x92\xc2\x60\x0f\x71\x71\x91\x73\x88\x44\x99\xd3\xfb\x93\xe1\xba\x58\x84\x10\x3c\x4e\x17\x5f\xd5\xe3\x0d\x39\x09\xd6\x1e\x0b\xb6\xfb\x4b\xca\xca\xb0\xd5\xf1\x7b\xca\x6d\x72\xd0\x16\x8a\xc2\x04\x09\x95\x81\xb0\x37\xe1\x3b\xc9\x6c\xae\xf6\x03\xf4\xc1\xd2\xa5\xee\x98\x22\x55\x73\x0d\x7c\x9f\xc3\x9c\x99\x7b\xfb\x33\x95\x84\xd9\x62\xe6\xb3\x8c\x75\x74\xb6\xb7\x32\x98\x4d\xd4\x53\xd5\x56\x22\x66\xfb\x71\xad\xf6\x92\x03\x18\x87\xd5\xc4\x40\x25\xb6\x33\xf8\x2c\x81\x03\x5b\x7e\xdb\x49\x36\xba\x0e\xc0\xb8\x73\x41\xc7\x75\xd1\x88\xfa\x00\x49\x28\x8b\x96\xa0\x5d\x08\x51\x72\x71\x36\x24\x1a\x29\x98\x8f\x1b\xde\x96\x86\x59\x73\xe1\x2b\x33\x4c\xea\x98\x54\xd2\x30\x58\x53\xb3\x90\x4e\x60\x7d\x20\x12\xa5\x13\x84\xa1\x16\x19\xbd\x5a\x6b\xc1\xf6\xd9\xb0\xf8\x12\x8a\x7d\x7d\x26\xdd\x4a\xa9\x46\x95\x55\x8b\xfa\x11\x79\x09\xc5\x07\xd6\xf7\xee\x68\xa7\x4c\x56\x07\x03\xa6\xc8\xea\x93\x93\xe5\xf3\x2a\x19\x5b\x15\x2f\x48\x99\x1a\x4f\x69\x9d\x97\x35\x73\x12\xe1\xa0\x59\xb3\x93\xe5\xad\xbe\xa8\xd5\x64\xa1\x2c\x12\x2c\xb4\x48\xd5\x81\x70\x6e\x67\xcc\xd7\x33\x73\xfe\x5a\x75\xc3\x5e\x8c\xfb\x4a\xbb\x26\x37\x5c\x75\xce\x96\x90\x77\x46\xc7\x14\x21\x5a\x13\xf2\x97\x66\xb6\xbd\xa4\xfd\x53\x7b\x49\x7b\xfb\x95\x9c\xd2\x34\x30\x6d\xa0\x86\x67\x7b\xa3\x2d\x81\x58\x95\x69\x47\x43\xd5\xbd\x95\xee\xd8\x9c\xae\x93\x54\x25\xc9\xb3\x62\xa4\x8e\xb4\xd1\x82\x25\xe4\x27\x08\x32\xec\x63\x6c\xe7\xd7\xb0\x0e\x8b\xad\xca\x23\x98\x18\x01\xdb\x49\x0b\x49\x13\xd8\xc1\x3a\x38\x9a\xb4\x41\x8d\x58\x5d\xed\x3f\x69\x36\x94\x35\x36\x96\x01\x5c\x7f\xda\xda\xb4\xc0\x75\x4c\x6f\x07\x68\xe9\x69\x05\x22\x92\x28\xdf\xf4\xc2\x5e\xed\xef\x3f\x3b\x7d\xc3\x2f\xc1\x3f\xbc\xe0\xce\x6d\xeb\xa6\xb5\x97\x5a\x4c\x71\xa1\xcc\xe3\x5f\x30\xeb\x7a\xb9\x74\x86\xcf\xee\x99\x34\xf5\x9c\xed\xf7\xa0\x89\xd8\x5b\x01\xd4\x8c\x16\xa2\x4d\x08\x81\x03\xb3\xa0\x8c\xf9\xf3\xaa\x72\xb6\x0d\x24\x86\x16\x24\x31\xd9\x46\x10\x12\xa3\xc8\x11\x5a\x08\x12\x4c\x0d\x4e\x80\x9a\x28\xe0\x08\x89\x52\x56\x2c\x38\x91\x2a\xb4\x5c\x03\xaa\xa4\x0f\xc0\x6a\x08\x35\x88\x03\xc0\x04\x80\x10\x68\x46\x34\x3c\x87\xb3\x69\x39\xe2\x20\x94\x36\xdc\x0a\x92\xd1\x70\x90\x89\xe1\xab\x03\x1d\xfb\xe6\x38\xd7\xf6\xcc\xd9\xb4\x60\x92\x98\xe8\xb0\x5d\x6d\x8d\xc7\xe3\x2b\xe2\x81\xab\x6f\x79\xc2\x76\x8d\x2d\xbe\xa2\x37\x5e\x7a\xcd\xf0\xd5\xb7\x5c\x1d\xe8\xae\xf2\x4d\x5e\xb8\x69\x4e\xdf\x06\xdb\xec\x7b\x88\xe5\x9b\xe6\xf4\xae\x67\xe7\x3e\xda\x6d\xbd\xda\x38\x27\x70\xcd\xf0\x35\xc3\xd7\x94\xb6\xd7\xb8\xfb\x4e\xc3\xcb\xfa\xbc\x89\x2e\xdb\xd5\xb6\x78\xef\x0a\x23\xe1\x96\x6b\x4a\xbb\x1e\x99\x6b\xdd\x30\x63\xce\x26\x78\x71\xf8\x9a\x40\x7b\xc2\x3d\x79\xe1\xe6\x39\x53\xd7\x3a\xe7\xfe\xb0\xc3\x76\x8d\x35\xbe\x42\x8e\xeb\x27\x62\x97\xfe\xc4\xde\x95\xfa\x13\xaf\x19\xbe\x26\xd0\xb5\x7f\x9e\x63\x6d\xcf\x9c\xcd\x27\xf7\x0a\x35\x87\xaf\x9c\xb3\x79\x70\x8a\xbf\xaa\xdb\x38\x65\x45\xf1\x81\x81\xf6\x7d\x73\xac\x1b\x48\x69\xfa\x59\xd6\x39\x3f\xe9\x2a\xe6\xb7\x98\xd4\x55\xed\x9d\xb6\x6c\x73\x81\xb7\xa3\x80\x99\x31\x09\xcd\x47\x8b\xd0\x52\xb4\x1c\xad\x42\x17\xa1\xdb\x10\x02\xbd\xb8\x0c\xd3\xcf\x82\x31\xa7\x52\xb4\x50\x54\x65\xbd\x39\xa4\x85\x82\x21\xa7\x22\x2b\x86\xd3\x71\x36\xa5\x27\x62\x49\x64\x04\xc3\xc6\xb3\x60\xb2\x49\x18\x06\x9a\x51\xfd\x2c\xd5\x58\x0d\x53\x93\x94\xa4\x40\x9c\xa3\x40\x22\x14\x42\x52\x25\xa0\x38\x90\x18\xfd\x11\x06\x22\x4c\x61\x5e\xc4\xb8\x36\x95\x34\x3e\x2e\xe0\x8c\xa5\x6c\x25\xad\x70\x86\x75\x8b\xca\x51\xc9\x2a\x48\x25\xdd\x1c\xde\x0d\x92\x20\x54\x55\x32\xdd\x64\x57\xd7\x2c\x0f\x19\x24\xe8\x3e\xf7\x0e\x96\xeb\xc6\xa6\x65\x26\x25\x80\x31\x50\x5e\xc9\xe3\xb2\x90\x40\xc7\xad\x8d\x35\xa7\x62\x4b\xa7\xd5\x5c\x42\x92\x98\x28\xf1\x13\x25\xe9\x76\xdb\xb9\x14\x69\x7f\x91\x60\x6c\x72\x20\xe0\x95\x58\x12\x88\xb0\x50\x1b\xe3\x39\xfc\x44\xdb\xf7\x0e\x7f\x86\x1f\xce\xf7\x92\xaf\x2d\x7b\xe8\xd4\x3f\x2c\xab\x7e\x59\x4b\xe0\x16\xed\xd0\x4d\xd9\xb2\x9d\x7b\x1a\xc3\xb3\x67\x7e\xdc\x66\xb2\x98\x48\x7f\x98\xec\xd9\x37\x65\xe9\xa5\x73\x1c\xc1\xb8\x05\xae\x1c\x3d\xc4\xe6\x13\x8c\x9d\x02\x02\x28\xc7\xea\x0a\x9c\xc0\xd0\x02\x4d\xa4\x00\xcf\x11\x8c\xc9\x2c\x94\x52\x19\xbc\x7c\xc6\x52\x07\x26\x31\x39\xdf\xf3\xb0\x2f\x70\x91\x19\x22\xd8\x6a\x02\xcc\x81\x85\x62\x18\x92\xa3\x39\x4c\x13\x4e\x67\x14\x47\x49\xc2\x02\x60\x73\xe3\x64\x03\x95\x9c\xe5\xa7\xd3\x18\xea\xe0\x80\xc3\x2e\x39\x6c\x84\xe4\xf0\x12\x04\x49\xb2\x36\xbc\xe7\x6f\x15\xf9\x6b\xff\x41\x9a\xde\xc9\x67\x83\xf8\xb2\x60\xfe\x1f\xc1\x33\x3b\x88\xa6\x47\x60\xdb\x21\xce\x3e\xdc\x79\x52\x89\x6d\x46\x82\x31\x9b\xac\x0e\x17\x8e\xd7\x95\xc6\x18\xce\x4d\x93\xb9\xc3\xbf\xfa\x2f\xfd\x2f\x3b\x60\x32\x6b\x06\x9a\x8a\xb1\x90\x7b\xe6\xcc\xd5\x6e\x6d\xd0\xf0\x37\x1e\xc3\x5e\x50\x90\x8a\xa6\xa0\x79\x68\x39\xda\x88\xbe\x83\xae\x46\x77\xa2\x9f\xa0\x91\xf1\x99\x9e\x71\x72\x58\xea\x58\xc8\x72\x7d\xfc\x10\x84\x00\xb8\x8f\xd2\xe8\x15\xf0\xd8\xb9\xaf\x89\xff\xff\x7d\x3e\x5f\x00\x16\x0b\x73\x10\xea\x1c\x1c\xec\xcc\xe9\x1b\xea\x40\xe3\xe4\xab\x56\x8d\x0e\x77\x0e\xd6\x97\xe1\xe1\xb2\x21\xff\x35\xfe\xb2\x7c\xc8\x00\x3a\xfa\xd2\x0d\xa0\xff\x5b\xfa\xd0\x70\x59\x7d\x3e\x47\xe6\x06\x3b\x8f\xb2\x2b\xdf\x16\x39\x67\x52\x1e\xad\xba\x6a\xb0\x93\x46\x65\xf5\x65\xfe\x6b\xfc\x43\x65\x87\x73\xe3\x97\x01\x7b\xa2\xa0\xc6\xfe\x5f\x4f\x80\xdd\x80\xea\xcb\x86\x35\x84\x84\x82\x0d\x3d\x8d\x8a\x6b\x37\x6d\x68\x26\x5a\x8a\xd6\xa0\xf3\x0c\x06\xc1\x1f\xa1\x9f\xa1\x17\xd1\x9b\xe8\x43\x74\x04\x1c\x10\x84\x1a\x68\x3b\xc1\x8c\xdf\x38\x49\x62\xa1\xdc\xb9\xff\x65\x9c\xf8\x5f\xbe\xcf\x6f\x52\x3f\x8e\x07\xf2\xf9\xbf\xde\xef\xff\xcb\xfc\x51\x86\xb1\xca\xe1\x82\x95\xca\xc8\x51\xda\x81\xaf\xde\xe4\xbe\xe9\x89\x47\x37\x18\x4d\x60\x26\xfa\xc6\x57\x01\xfa\xdf\x3f\x89\x46\xb2\xf7\x73\x63\x9e\x8b\xce\x79\x65\x6d\x02\xe4\xec\x27\x5f\x17\xbc\xff\x6b\x20\x90\x4e\x1c\x3c\xcc\x8e\x03\xa7\xe0\xff\xc5\x65\xa3\xec\xff\xab\xa7\x19\xf3\x93\xed\x47\x9c\xe4\x08\x35\x84\x82\x48\x41\xc8\x7c\xbc\x91\x1d\xc8\x69\x75\xcc\x58\x48\x12\x85\x31\x2f\x53\x72\xaf\xf6\x7a\xd1\xb6\x4e\x7b\xdd\xef\x2f\x9d\xe9\x3f\x08\x6b\x0f\xfa\xfb\xfd\x7e\x6d\xb8\x60\x60\xf7\xba\xf6\xfa\xe8\xb3\x86\x69\x5d\x4e\xcb\x19\xa6\x75\xf5\x10\xd3\x4f\xf0\x1f\x3c\xa8\x5f\xf0\x56\xc1\xb6\x8e\x2a\x72\x2f\xe7\x90\x03\x95\x1a\xab\x46\xb3\x10\x02\xa1\xa0\xf7\x64\xd2\x86\x5e\x02\x05\xae\x18\x28\x76\xa1\x54\x92\x74\xb9\x05\x83\x2f\x26\x1a\xa1\xa3\x91\x4c\xba\x15\xc7\x27\x9c\xed\x16\x58\x88\x1b\xdc\x30\x85\xe1\x54\x2b\x10\x36\x79\x7e\x4b\xdf\xb6\x66\x79\x7e\xcb\xf4\xad\xcd\xda\xdd\xb3\xa7\xf7\xed\x9a\x6c\x6c\xe0\xbb\xe7\x80\xeb\x91\x48\x5b\x67\x65\xf7\x87\x6d\x9d\xf9\xde\x9f\xac\xbd\xf3\x25\x98\xda\x32\x5f\x6e\xde\x3a\x5d\xdf\x6e\x83\x53\xa7\xcf\x9e\xbc\xab\x4f\xdf\x90\x65\xcd\xab\x67\x6c\xb8\xa1\x47\xdf\x5e\x9f\x7f\xb9\xff\x9c\x35\x37\xf4\xf6\x6f\x5c\x73\x63\xcd\x53\xda\x3b\x1b\x12\x2d\xa5\xd6\x85\x0b\xf6\xcc\x7d\xf9\x87\xe7\xbc\x3c\x63\x75\x73\xef\xf5\x1b\x66\xac\x6e\xee\xb9\x61\xc3\x8a\x8d\xfd\xbd\x37\xac\x39\xa7\xbf\xf7\xc6\x35\x08\x50\xfb\x11\x84\x47\x68\x64\xf8\x86\x0a\x34\xc3\x8b\x45\x67\xf7\x42\xe6\x93\x01\xc0\x23\xeb\x97\x56\xe3\x98\x77\xc4\x1b\xc3\xd5\x4b\xd7\xcf\xb9\xea\xee\xab\xe6\x10\x1f\x5d\xf6\x74\x7c\xf4\x7f\x0c\x4b\xb0\x4c\xfc\xe9\xcb\x72\xff\xba\xf1\xc6\x7f\x1d\xc5\x14\x19\xf3\x3b\x0a\x22\x44\x01\x47\x29\xd5\x60\xd7\x5f\x62\x01\x49\xb5\x88\x15\x62\x4c\xa2\x06\x80\xc8\xe1\x5c\x3e\xd7\x8e\x7f\x9a\x9f\x9c\x9f\x4c\x1d\x8a\x05\xf3\xed\xfe\x4e\x7f\xbe\x3d\x18\x4b\xc8\x78\x44\xac\x12\xf1\x88\x9c\x58\x02\x4b\xf0\xb6\x77\xd6\x69\x9a\x86\xf3\x28\xda\xcc\x69\x39\xa7\x13\x72\x5c\x73\x94\x40\x65\x9d\x2c\x20\x93\xe9\x08\x62\x3b\x0b\x50\x79\xe8\x08\x32\x15\x78\x4c\x8e\x7a\x45\x77\x22\x44\xc5\x8d\x7c\x50\x50\xdc\x2b\x63\x71\x3d\x5f\x14\x1d\x51\xe2\xb2\x52\x0c\x14\x33\x18\x37\x36\xd9\xa4\x64\x74\xbe\x54\x00\xb0\x41\x22\xd4\x0e\x57\x68\xa7\x6b\xa7\x53\xbf\x9b\x10\xa9\x2a\x84\xf7\x6b\x53\xb4\x29\xd4\xe7\x72\x58\x6b\x2f\x69\x2f\xd1\xda\x49\x02\x53\xc5\x60\x58\xae\x8c\xc2\xfd\x95\x51\x18\x91\xb2\x12\x8c\x44\x2b\xe1\xfe\x58\xc5\xd0\x08\x34\xee\x5d\xbb\x6f\xdf\xbe\xfc\xc5\x63\xa1\x4d\xb7\x83\x65\xef\xda\xc7\x1f\x7f\x3c\xdf\xa2\x0d\xc5\x5a\x9d\x07\x58\xf6\x00\xc6\x18\xeb\x7b\x67\x6b\x0c\x86\xe5\x76\xe7\x4f\xe1\x52\xb9\xdd\x39\x62\xb1\x8c\x38\xdb\x65\x6d\xed\x4f\x9d\xed\x85\x35\x15\xcd\x84\x28\x8c\x08\x64\x46\x41\x24\xa3\x04\xea\x40\x08\xc2\xee\x30\x11\xa1\x99\xb0\x4c\x24\xb3\x6a\x0a\x87\x23\x38\x93\x46\x85\x1a\xc9\x84\x05\x31\x1e\x4e\x66\xd2\xd1\x70\x26\xac\xeb\xea\xd1\x70\x3c\x9c\x34\x28\x8e\x8c\x0a\x4b\x44\xc3\x4c\xbd\x06\x70\x64\x74\xe1\x5a\x1a\xae\x71\xdd\xd1\x76\x0e\xf7\xc6\xa9\xda\xfe\xdf\xe7\x81\x7a\xe1\xbb\xcf\x9f\x86\xf3\x67\x6e\x38\x9c\x85\xb2\xe7\x7f\xa9\xfd\x16\x4a\x66\x2c\x7a\x42\x1b\xd5\xfe\x89\x07\xe6\x5d\x78\x76\xdb\xbd\xeb\xcf\xaa\x3b\x69\x7d\x6e\x72\xfe\x46\x72\xdf\x36\xed\xb7\x2b\x17\x3e\x95\xff\x49\xbb\xaa\x3d\x0f\xa6\x57\x5f\x02\xfe\xc2\x3f\x5f\xc4\x05\xd6\x6c\x4e\xde\xf9\xe0\x13\x3d\xd3\x2f\x7d\xd5\xdf\xb5\x7d\xd1\x43\x03\xa1\x3b\x36\x4f\xdb\x3a\xbb\xd1\x5b\x7c\x87\x63\xf3\x99\x01\x14\x47\x55\xa8\x03\x4d\x31\x78\x7e\x8e\xeb\x0d\x79\x63\xf6\x29\x93\x56\x8c\x89\x06\x22\x9a\x49\x25\xdd\x42\x71\x47\x45\xe4\x4c\x38\x9b\x39\x8a\xee\xa3\x46\x59\x20\x92\x52\xb4\x15\x88\xb0\x3b\x3c\x71\x25\xec\x65\xed\x62\xd8\x7e\xf6\xf0\x25\xab\x95\xde\xd9\xd3\xef\xbb\x6d\xe3\xb7\xf6\x3f\xbe\x0d\x5b\xba\xa7\xc2\xf5\x70\xe5\x8e\xdc\xde\x9b\xbe\xfd\x7c\xeb\x77\xad\x3d\x75\xeb\xac\x1a\x39\x79\x15\xb4\x69\x3f\x3f\x76\x15\x4c\xbb\x6c\xf4\xfd\x0d\xeb\x6e\xaa\x48\xaf\x6d\x98\x59\xc1\x69\x4f\x3e\xb2\x70\x50\xfb\xf1\x6b\xeb\x56\x84\xfa\x26\x59\x84\xf3\x7f\x7c\xef\xce\xef\xec\xfd\x59\xa4\x0c\xce\xdc\x52\xdf\x09\x96\xe9\x63\xba\x16\x33\x86\x73\xaf\xa0\xb6\x09\xac\x05\xc6\x1c\xac\x34\x66\x7f\xa6\xe8\x23\x73\x98\x80\x50\xa4\x0a\x28\x0a\x46\x1b\x52\x03\x1c\x65\x98\xcf\x64\x51\x2a\x89\xe8\xc4\x25\xcf\x5d\x72\xc9\x73\xf9\x8b\xf7\xac\xf0\xf9\x56\x4c\xef\x08\x06\xaf\xe9\x73\x0f\x08\xa1\x73\xa6\xac\x20\x5e\x7a\x60\xfb\x79\x0f\x3c\x70\xde\xf6\x07\xae\xd2\xfe\xf3\x98\x36\xcd\xf6\xe4\xf9\x9b\x7f\x5a\xf2\x36\x5c\x30\x73\xd0\x2e\x82\x1f\x83\xf5\xd1\xc7\xc0\x4a\x06\xf5\xeb\x2f\x39\xfc\xc4\x4b\x7b\xe8\x8a\xe0\xd5\x7d\xd3\xdb\x83\xa6\xb0\xa9\xb9\x87\x78\x73\xfb\x03\x0f\x6c\x3f\xef\xfe\xfb\xcf\x7b\x5c\xfb\xaf\xf6\xf3\x1d\xf7\x5f\x73\xd6\x62\xd8\x77\x63\x2d\x86\xab\x1f\x05\x93\xf6\x1f\x74\x8c\xee\x68\x42\x3e\xd4\x85\xa6\x17\x91\x00\xdc\x82\x58\x98\x1c\x93\x15\xc3\x7d\x39\x2b\xd7\x40\xf6\xe8\x44\x58\xcb\x98\xe2\x11\x4f\x16\xdf\x13\x43\xe8\xd2\xc7\xc7\xe6\x97\x0b\x65\xa2\x2b\x87\x7f\x5c\x3f\xbc\x6e\xdd\xb0\xe6\x3c\x6b\xa0\x7e\xb0\x24\x9d\x68\xde\x54\xe2\x49\xb5\x0c\x88\xc2\x00\x31\x5a\x78\x13\xf7\x0a\x97\x2f\x5d\x71\x9d\x05\x16\x5c\xf5\xf2\xcb\x57\x5d\xf1\x5b\xfc\x17\x33\x3f\xad\x55\x7b\xb5\xf0\x82\x3e\xdd\xfd\xec\xc5\x17\x9f\x7a\xda\xc5\x44\xf9\xf0\xba\xf5\x33\xfb\xd7\x69\xcf\xde\xb1\xa1\xb1\x56\x10\x3c\xa9\x96\xe6\x4d\x9e\x30\x85\xcf\x28\xbc\xcc\x6b\x27\x2d\xde\xf4\xfd\xe5\xa3\x2f\x5f\x79\xd5\xcb\xbf\xb9\x42\x7b\x02\xe2\x1b\xe1\x77\x1b\xef\xba\x4b\x1b\x3e\xf5\xe2\x8b\x9f\xdd\x7d\x31\xa2\x91\xf3\xc8\x5c\xfa\x43\xea\x08\xb2\xa3\x00\xaa\x46\xcd\x68\x9a\x81\x9a\x44\x30\x71\x63\xf1\xb5\x15\xab\xa2\x0f\x14\x96\x70\x00\x91\x80\x36\xc8\xaa\x0a\x10\xac\x81\xac\x2b\x11\xbc\x5e\x02\x40\x13\x71\x85\x6f\x05\x29\x40\x01\x2f\xd2\x0c\x4b\x31\x32\x11\x57\x54\x22\xae\x26\x88\x1a\xa0\xb2\x62\x10\x44\xa2\xdb\x81\xb5\xc5\xb1\x56\xa7\x95\x71\x98\x23\x78\x46\xd5\x83\x97\xb7\x7d\xab\x36\x48\x90\x4f\x70\x98\x31\x45\x67\x7e\x9f\xce\x3d\x66\xab\xe3\x5d\x53\xae\x30\xbd\xfd\x32\x73\xf7\x5f\x1b\xf2\x4a\xcd\x1f\xb5\xa7\xf8\xbf\x08\xfd\x65\x9e\xba\x68\xad\xa7\x16\x5f\xfd\x3b\x97\x55\xb4\x97\xc5\x5a\xc2\x93\xad\x91\xbf\x43\xc3\xb6\xdd\xaf\x6b\x4b\xae\x8e\x0c\x4c\x6a\xe6\x38\xb8\x32\x98\xb5\x59\x15\x58\xa3\x5d\x2a\x96\x12\x0d\x71\x5f\x7d\x6f\x6c\x31\x63\xc3\x8d\xda\x05\x8b\xa7\x5e\xb6\x72\xb6\xdb\x0d\xa7\x79\x9b\x39\x57\xdb\xb9\x73\xf3\xef\x6a\xd7\x96\x46\x09\x92\xa1\xf6\xc2\x1a\x58\xb5\xcf\x29\x8a\xc4\xfd\x6d\xda\xf7\x1f\xb5\xc1\xa9\x41\x3f\x89\x05\xb1\xaa\x24\xab\x3d\xad\x5d\x19\x9f\x11\x15\x22\xa2\x68\x71\x11\x53\xe1\xf4\xa7\xde\x3f\x49\xfb\x9e\x30\x77\xc1\x75\x4b\xba\xec\x76\x20\x7c\x0e\x47\x4b\xa1\x8e\xb4\x9b\x0a\x75\x9e\x43\x25\xa8\xeb\x28\x5a\x04\x1f\x26\x12\x60\x90\xeb\x8f\x1f\x99\xe8\x38\x1a\x1e\x73\x20\x1d\x23\x12\xe1\x5b\x41\xaf\x1e\x12\x9f\x4a\x8a\x70\x60\xf0\xfc\xc1\xc1\xf3\x77\x12\x9f\x2d\xc0\x1e\x73\x1e\x99\x3d\x98\x22\x8c\x43\x9a\x8b\x1d\x5a\x3b\xbc\x76\x14\xad\x1d\x5e\x3b\xc4\xba\x76\x2d\xf1\xaf\x94\x6e\x3d\x99\x40\x27\xdf\x2a\xad\xf4\x2f\xd9\x05\xdb\xf5\x93\x06\xe1\x00\x9c\x66\xe2\x79\x53\xbe\xa4\x10\x45\x5a\x8e\x75\xe5\xfa\xd7\xae\xed\xcf\x15\xb6\x2e\x16\x72\x4b\x76\xc1\x6d\x83\xe7\x9d\x37\xa8\x2d\xd9\x55\xf0\xab\x35\xe9\xcd\x6d\x0a\x35\xa1\x49\x7a\x5d\x1f\xd7\xd5\xbe\x22\xc3\x05\x9c\xe5\x70\x91\x11\x4b\xe2\xc7\xfc\x66\xe1\xa8\xec\xc5\x23\x4c\x68\xc9\xae\x13\x66\x3d\x57\x40\xc5\xcb\xe9\x02\x7c\x7e\xa8\x90\xdd\x53\x27\xc8\x4d\x86\x8d\x63\x38\xb7\x6b\x89\x2e\x44\xbb\x9e\xfd\xf6\xc2\xf6\xa8\x10\x05\x00\x5a\x5d\x14\x2d\x64\x14\x13\xec\x2c\x14\xc0\xe8\xa3\x46\x14\x01\x0a\x1d\x41\xd4\x01\x43\x3e\x14\xd3\x3f\xd4\xc0\x18\xd6\x5f\x26\x6d\x60\x0e\xa7\x55\x5d\xb2\xf1\x6d\x81\x4f\x98\xae\x84\xe2\x96\x3a\x20\x7b\xb5\x24\x58\x62\x25\xda\x48\x49\xcc\x02\x5a\xd2\x2b\xf3\xb0\xe7\x2d\x63\xfb\xb4\xbe\xcd\xf1\x69\x7d\x23\x7b\x9f\x86\x3d\xbc\xec\x7d\x0b\xf6\x2c\x4c\xcb\xdc\xc5\x72\x49\x34\x5a\x22\x5f\xcc\xc9\x69\x1e\x2e\x1f\xdf\xe4\x78\x5e\xcb\xf1\x69\x59\x3b\xc3\xd8\x4c\x68\x6b\xdc\xa8\x12\x75\x1b\xb6\x30\x45\xd0\xa4\x42\x2b\x5f\x74\xc3\xce\xaa\x69\x45\x0e\x4f\x38\x1a\x32\x8e\xf2\x69\x45\x8e\x19\xf3\x89\xe3\x67\x93\x06\x3d\x1f\x4c\x34\x4d\x5b\x1e\xf8\xb9\x76\xc1\x75\x15\x3e\x91\x0a\x9d\xbf\xe6\xaf\xf7\xf0\x2c\xef\x1f\x8a\xbe\xaf\xfd\xea\xda\xab\x6a\xa3\x25\x4c\x60\xcb\x0e\x90\x7e\xe3\x61\x4b\xa2\xa7\x97\x6d\xd7\xee\xbf\xef\xd7\xc3\x52\xb0\x3c\x68\x2d\xbd\xe0\x87\x37\x43\xf5\x72\x37\x5f\x5a\xf9\xfc\xf1\xf0\xf3\x93\x43\xfc\x86\x88\xb9\x52\x28\x35\xf9\x96\x5b\x7d\xef\x95\xb9\x2f\xae\xb0\xa7\x4a\xa2\xa6\xf0\x36\x7b\x14\xb8\x1a\xa9\x67\x5a\x0d\x13\x0f\x04\x2b\x4c\xf1\xee\x16\x5b\xf9\xa2\xe3\x16\x83\xa0\xc0\x65\x4b\x23\xc4\xeb\xa3\x61\x29\xcc\x85\x19\x82\x09\x73\xa0\x84\xb9\xb0\xca\xab\x61\x12\x69\xbf\xf1\x80\xa4\x51\x55\xbb\x03\xda\xcb\x50\xe3\xd1\xde\x81\xc3\x55\xbb\x03\x50\x4d\xfe\x26\xff\xd3\xa0\xf6\xad\x80\xf6\x61\x00\x6a\xf0\x94\x00\xdc\x1c\x00\x2e\x80\x10\xe2\x10\x42\xdf\x37\x23\xf2\x2c\xc4\xa2\xb8\xc1\x68\xdf\x8c\xa6\xa2\xd9\xe8\x64\x74\x0a\x5a\x87\xce\x43\x17\xa3\x4b\xd1\x4d\xe8\x5e\x34\x82\x7e\x87\x50\x5c\xd5\x6b\x69\x84\x76\x13\x46\x8b\x1d\x57\x89\xb4\x22\xeb\x65\xcb\x10\x82\x34\x46\x1e\x90\x01\xc9\xb0\xf3\x57\xb3\x49\x55\x62\xf4\x31\xb0\xa2\xa6\x53\x49\x20\x24\x46\x88\x1a\xc7\x53\xc9\x20\x1c\x4d\x08\x16\x0d\x77\x14\x55\x6f\xe3\xcd\xc0\x33\x82\xc1\x8c\xc4\xeb\x2d\xbe\x7a\x7c\xac\x10\x29\xf8\x85\x37\x00\xa1\x27\xeb\x7d\x20\x9f\xce\xea\x9f\xd3\x58\xac\x15\x92\x22\xcf\xd4\x19\x31\xcc\x67\xb2\x45\x67\x7c\x03\xbf\xd9\x18\xd5\xe9\x07\x90\xb1\x48\x41\x38\x9d\x4e\xb0\x5b\xcc\x2c\xcb\x82\xdd\x2c\x42\x85\xd5\x66\x37\x39\x4d\x76\xb0\x58\x69\x33\x6b\x35\x9b\x0f\xbf\x27\x08\x98\xc5\x1c\x87\xd9\xf9\x5e\x2f\x36\x99\x25\xc9\x6c\x02\xef\x63\x25\x25\x56\x0b\x76\xbb\xb1\xc5\x3a\x28\x49\xd8\x66\x77\xbb\xed\xb6\x21\xb7\x1b\xb3\xb4\x59\x10\xcc\x34\x0b\x3b\xb4\x37\xdd\x6e\x0b\xe3\xc4\x2e\x17\x76\x32\x96\x41\x9e\xb7\x9a\x5c\xd8\xe9\xc4\x2e\x93\xf5\x64\x97\x0b\x0b\x3c\x76\x3a\xed\x26\xb3\x0d\x2e\x7a\xc6\xe1\x70\x08\x2c\xb0\xac\x43\x70\x9c\xc2\xb2\x4e\xd1\x09\x36\x1b\x38\x45\xc7\x2b\xac\xcb\xeb\x02\x9a\xb6\x61\x8b\xd9\x6a\x62\x58\x4c\x2e\xbb\xe3\xec\xd1\x0f\xec\x2e\xff\x9c\xa1\xa7\x20\xc0\x65\x1a\xce\xbe\x63\xef\xc7\xd8\x6a\x61\x59\x4b\xfe\x3f\x1f\x5b\xec\xe9\x97\x71\xaf\xd3\x44\x51\x26\x27\x9d\x7f\x1c\xfe\x09\x16\xc6\x6a\x66\xec\x70\x7a\x6e\xbb\xd9\xbc\x3d\x67\x9e\xfc\xe2\xff\x98\x2d\xcf\xbd\x68\xd6\x92\xf0\xcf\xff\xbc\x6f\xb5\xbe\xff\x1f\x1b\x35\xfa\x6f\xbb\xfd\xdf\xa3\xf6\xe0\xbb\xff\x75\x9a\x99\xff\xbe\x4b\x9b\x35\x11\x9f\xa1\x9d\xff\x5f\xc6\xea\xfa\x2f\x6c\x73\x59\x67\x6a\x55\xff\x36\x59\xf9\x7f\xc3\xef\x78\x6b\x48\xa3\x3f\x71\xbb\x3f\x81\x43\x66\xbb\x3d\xcf\xe1\x77\x35\xfc\xa1\xc5\xc1\x5a\x3f\x04\xcd\xca\xb2\x01\x4d\x78\xcf\xea\x74\x5a\xdf\x83\xf7\x6c\x4e\xa7\x66\xfa\xbb\xdd\xe5\xb2\xaf\x3f\x1b\x6f\x23\x1c\x66\x86\x32\xb9\xf2\x57\x9c\x7d\x3b\x76\xd9\x89\x5d\x92\x25\xa2\x7d\x3e\x22\xde\x31\xce\x37\x88\x0c\x0e\x63\x9f\x81\x40\x8a\x50\x28\xa6\xba\x05\x63\x86\xbe\x05\xc4\xaf\x8e\x91\x06\x38\x75\x21\x9a\xce\x62\x1e\xfe\x08\x37\x6c\x7c\x41\xbb\x49\x1b\xd2\x6e\x7a\x61\x23\xdc\xf0\x35\xf1\xfd\x30\x0c\x27\xbf\x30\x16\x7f\x81\x40\x73\x67\xdf\x5d\xb0\xc7\xb8\x7b\xf6\xe8\xdd\x13\x22\x50\x31\x21\x42\x56\x4c\x3a\x67\x52\xae\x10\xcb\x4d\x3a\x67\xc2\x7c\x2e\x8f\xbc\x28\x8a\x06\xd1\x29\xe8\x2c\x74\x1e\xfa\x0e\x42\xf0\xc5\xf9\x3a\x89\xe1\xc2\xb2\x02\xb2\x61\x6c\x9d\xe1\xc2\x1c\x18\xab\x65\x92\xc8\x08\x34\xe3\x2e\xcc\x99\x33\xd8\xe0\xed\x53\x64\x03\xf7\x48\x12\xdd\x59\x35\xab\x26\x40\xcd\x36\xe1\xa4\xe1\x7f\x2f\x96\x02\xcd\x88\x90\x55\x59\x00\x5a\xca\xaa\x69\x35\xab\xca\x19\x39\x23\x2b\x02\x43\xe8\xa7\x2a\xfa\x5d\x68\x4a\x8e\xea\xdf\x64\x9a\x7a\xcc\x5f\x36\x0e\xa0\x9c\x2b\x1b\xf2\x9f\x0f\x9b\x2c\x36\xed\x97\x36\x38\x45\x1b\x2a\xab\xcf\x23\xac\x85\x53\x4d\x8d\x97\x07\x9c\x2c\x06\xba\xa3\xf6\xdb\x6d\x6f\xdc\x73\xed\x02\x87\xdd\x03\x94\x85\x34\x0f\xce\x61\xcd\x38\xad\x76\xc7\x3c\x76\xbb\x35\xe8\x06\xc9\xe6\x32\x63\x0c\xd8\xa6\x6a\xbe\xf4\x9c\x54\x0f\xec\x70\xd8\x81\x66\x0c\x84\x0a\x1b\x6c\xfb\xce\x95\x58\xa4\xfa\x52\xbe\xfa\x00\xde\xe8\x39\xab\xaf\x96\x25\xc9\xf3\x8d\x29\xb6\x31\x18\xe6\x32\x7f\xb7\x76\x61\xa9\x0d\x1a\x6c\x87\x5c\x24\xaa\x2f\x83\xe1\x43\x08\xcf\xf2\x06\x98\x3a\x31\x00\x18\x40\x2e\x0b\x7b\x9a\xb4\x43\x8c\x0d\x48\x8b\xb7\x6c\x79\xb5\xd9\x81\xf1\x9c\xb5\x17\x6e\x1f\xb8\x3e\x59\xe6\x70\xd7\xd0\x98\xa0\x02\x5b\x27\xed\xd5\x7c\x9e\x6f\x97\xcd\x27\xb6\x54\x2c\x64\xe2\x44\x19\x49\x02\x60\x10\x59\x80\xfc\xca\xac\x0f\x38\xaa\xeb\x8c\xb9\x6b\xea\xad\x1e\x3f\x00\x3a\xa6\x9e\x15\xde\xd1\xec\x6f\xf6\x6e\x78\x77\x8a\x4f\xf1\x59\x35\x9b\x49\x49\x01\x90\xf8\x14\x6f\x40\xfa\x11\xb4\x03\xa2\xe9\x04\x64\x12\xa0\x10\x51\x63\x6c\x17\x55\x64\x85\x48\x65\xbe\xb6\xa4\x57\x4e\xde\x7b\x73\x8e\x21\x30\x49\x00\x45\xe4\x6e\xde\x3b\x59\xfb\xdd\xc2\x53\x28\x8c\x49\xc0\x40\xe3\x4b\xd7\x5f\x8a\x29\x20\x49\x8c\xa9\x53\x16\x7e\x83\x62\x23\x72\xab\xf3\xab\xe1\x2d\xc1\xeb\x34\x79\x88\x88\x59\xf3\xe1\x2b\x57\xaf\xd6\x7a\x05\xaf\x9b\x60\xcc\x98\x0a\x99\x71\x38\xff\xa6\x39\x48\xbb\xdd\x5e\x01\x1e\x5e\xfd\xc5\x72\x38\xe9\x9b\x95\x43\xdc\x1d\xce\x44\xd5\x56\xdc\x04\xa2\x14\xc0\x41\x88\xea\x71\xa2\x50\x18\x06\x84\x5b\x54\x56\xe4\x1a\x30\xe2\x3c\xf1\xb5\x85\x00\xd5\x50\x32\x6d\x39\x65\xa1\x00\x03\x89\x29\x86\x58\xdd\x07\xd1\xee\x91\xa7\xba\xb4\x77\x7a\x97\x93\x36\x02\x63\x20\x69\xeb\xaa\x3e\xed\xcf\xdd\x8f\x3f\xf9\x0d\x8a\xe1\xdd\x55\xab\x6e\x61\x78\x13\x49\x93\x8c\x99\xbc\x65\xd5\x2a\xe0\xc0\xbb\x7a\xf5\xcd\x0c\x4f\x12\x24\x6d\xb5\xdd\xbc\x7a\xb5\xf6\x91\xf6\xd6\x98\x8d\xcc\x44\xf9\xeb\x0d\x5b\xe0\x6f\x5a\x02\x99\x54\xb2\xc0\xd3\xad\xc8\xd1\xb0\x3b\xc5\x41\x94\xd3\xbf\x5c\xb7\xc0\xd0\x5f\x2f\x73\x08\xa6\x2c\xb9\xa8\xaf\xa2\x6b\x66\x6f\x5b\xed\x80\x76\xe9\x62\xa0\x36\x6e\x4a\x07\xeb\x5b\x83\xdf\x4c\xc0\x3b\x1d\x52\x6e\x60\xd6\x26\x1f\xbf\x3a\xff\x0a\x78\xc0\xe6\x0a\x0f\x2c\x08\x3a\x4e\x24\x53\x05\x4a\x7e\xc3\x96\x87\x0b\x67\x54\x09\xc8\x82\xb9\x94\xf0\xb5\x22\x90\xb9\x51\x34\x92\x83\x9c\xd6\x3f\xbc\x76\xed\xf0\xda\x6f\x90\x6f\x18\xd1\x46\x46\xf4\x4b\x72\x6b\xf5\x4b\x10\x32\x8f\xe7\x75\x6c\x5e\x46\xcf\xaf\x8a\x7a\x0d\x94\xf5\x4c\xd4\x4d\x65\xa2\xa5\xc5\xbd\xfb\xeb\x65\x88\xba\xa3\x99\x30\x07\x86\x87\xb0\x61\x05\x9d\xe5\x33\x29\x77\x2a\x29\xe2\xe2\x30\x1a\xe7\x72\x80\x8c\x1f\xd1\xfc\x95\xd2\xe5\x72\x1a\xc2\x17\xaf\x36\x5d\xf6\xe7\xcb\x4c\xee\x53\x72\x33\xc5\xc8\x63\x06\xd7\x1b\x99\x9b\xf0\x0f\xbe\x4e\xe2\x5c\xee\x10\xc2\xbf\xd1\x6e\xf3\x95\x9c\x74\xc6\x19\x27\x95\xf8\xda\x60\x7a\x2e\xe7\xd5\xbc\x06\x3f\xe3\xb8\xcd\xeb\x84\x77\xd5\x80\xfa\x0c\x6b\xb6\x6f\xd4\x4f\xb8\xc7\x58\x23\xc7\x89\x1b\xd4\x2c\x24\xd5\xac\x53\x29\x20\xab\x89\x4e\x03\x75\x45\x49\xaa\xd9\xb4\x92\x00\xfd\x88\x60\x1c\xf9\xfa\xca\xf9\x9e\x60\x70\x47\xde\xb1\x4b\x57\x0c\x76\xdd\xe1\x84\x07\x83\xfc\x8e\x1d\xce\xac\xe0\xa6\xb8\x53\x4f\xe5\x28\xb7\xeb\x71\x9f\x30\x6f\x9e\x2b\x2b\x63\x3e\x9d\xe6\x31\x2f\x7c\x93\xd6\x29\x61\x12\xf3\x07\x44\x13\x36\xdf\x69\xcc\x1b\xdf\xe9\xc8\x4f\xf1\xdc\x0c\xd7\xdc\xec\xa6\x39\x2e\xe3\xde\xaa\x3d\xb9\xd5\x9d\x71\x3a\xae\x10\x96\x8c\x2e\xe1\x71\x2c\x23\x34\x5c\xd1\x20\x64\x5c\xdc\x09\xea\x74\xea\x9b\x7e\xa7\xc7\xcf\x0d\x51\x63\xa5\x66\xa0\x61\xa6\x92\x5f\xdf\x15\x1a\x2c\xc4\x9a\xb1\x25\x4e\xd7\x8b\x85\x35\x6b\x9f\x82\xd9\xfc\x8d\xfa\x31\x22\x37\x76\x2d\xe4\xd2\x7d\xd8\x24\xe6\x47\x74\xf9\xc1\xb2\x10\x2c\xe6\x13\xbc\x7f\x15\x4d\x43\x8b\xbe\xa1\x64\xad\x10\x84\x00\x38\xc0\x60\x34\xa2\x0d\xf7\x95\xb0\xc8\x10\x06\x6f\x11\xb4\x81\x22\x67\xdb\x20\x2b\x4a\x90\x00\x95\x2f\x9c\xab\x27\x2a\x5f\xff\xf2\x87\x4c\x5e\x6b\xca\x4a\x98\x1e\x7e\xd8\x44\x58\x53\x56\xaf\xe9\xaf\x2c\x4b\x92\x2c\xfb\xd7\xe3\x8f\x6b\xe7\xd8\x1d\xf8\xbb\x58\xb4\xb7\x15\xf7\xdf\xa8\x44\xac\x84\x49\x36\x79\xad\xff\xfa\x97\xd5\x6b\x92\x4d\x84\x15\xaa\x79\x9e\xe7\xb5\x97\x8f\x3f\x9e\xa7\xb1\x68\x27\xf4\x5b\x5b\xb0\x68\x1f\xfd\xb9\xdd\x81\x11\x20\xe5\xc8\xd5\xd4\x6b\x34\x32\x2c\x74\xdd\x74\x94\xc6\x05\x62\x1f\x0b\x28\x61\xd1\xab\x8f\x9d\x54\x79\x9c\x71\x9d\x61\x21\x92\x00\x65\xe2\x74\x1f\xf5\xda\x69\xdf\xea\xf8\xd5\xad\x35\xfd\x03\xfe\x8e\x95\xa7\x6e\x18\x9a\xe7\x03\x9f\x77\xfe\xe6\x2d\x33\xef\x3a\x67\xf7\xad\x2f\x3d\x78\xff\x13\x8d\x4c\x49\x57\x53\x87\x2b\xd8\x98\xcc\xb4\xff\xf6\xd6\x56\xfc\xf4\x33\xd2\x85\xda\x27\xb7\x78\xab\x6b\xb9\xcc\xfa\x4b\xfe\x02\x0c\x9c\xf9\xe2\x1f\xb5\xab\xb5\x0f\x9f\x19\xba\xeb\xfd\xa9\x50\xb6\x7f\xe4\x3f\x2f\x8f\xdc\x7c\x1e\x90\x36\x25\xb4\x7c\xd6\xbc\x85\xa7\x2c\xfa\xe9\xab\xc5\x35\x7d\xa6\xd0\xae\xd1\xc8\x82\x58\xe4\x42\x6e\x54\x82\xaa\x11\xe2\x81\x8b\x53\xaa\x62\x86\xf8\xd8\x84\xb3\x19\x24\x8e\x8a\x03\x47\x71\x42\x91\x54\x4c\x57\x49\x0a\x2a\xf4\x1f\xf0\x22\xed\x7e\xed\xa1\x9f\xff\x9c\x48\xe1\x45\xda\xbf\xb4\xfb\xa7\x83\x53\xfb\x48\xfb\xe8\x7b\x30\x23\x7f\x3b\xf9\xfc\xcf\xb5\x87\xc0\x9e\xbf\x9d\x48\x45\x46\x9f\x77\x57\xb9\x47\x9f\x8f\x44\x88\x94\xbb\xca\x4d\xa4\x22\xb0\x46\x3b\x13\x96\xbf\x19\xdb\xb1\x63\xf4\x75\xd8\xf3\xe0\x9b\xdf\x7e\xf8\xe1\x87\x97\xbc\x09\xcb\xb5\x33\xb5\x0f\x77\x00\x8e\x3d\x08\x7b\xb4\x6b\x2b\xf3\x7f\x2e\x97\xf2\x7f\xb6\xdb\x71\x44\x2a\xc7\x91\x72\x09\x47\xec\xf6\xfc\x9f\xa5\x31\xbc\x56\x64\x42\xd4\x26\x14\x45\xf3\x0a\x75\xd2\x98\xb5\x8b\x86\x2b\xb1\xb1\xc2\x31\x0e\xe0\x11\x4b\x19\xeb\x1c\x34\x18\xca\x73\x02\x94\x71\xbc\xf0\x00\x95\x2a\xce\xe2\x31\x63\x36\x60\xd1\x48\x81\x55\xcb\xb4\xe6\xa2\xf7\xee\x24\x1d\xc4\xe1\x29\x80\xa9\xbb\xdf\x3b\x73\xb1\x6d\xef\xd9\x4b\xa7\x4f\x03\xe5\x81\x3b\xc0\x73\x1b\x1c\xfa\xf5\x0f\xb6\x5d\xb4\xdc\xd9\x66\xeb\x9a\xae\x4e\x9f\x9e\xa9\x9a\xd5\xd1\xd1\x33\x6b\x5d\xc7\xe6\x3b\x7f\xb0\xf5\x92\x93\x97\x74\xf6\xa5\xfb\x7b\x1b\x2a\x67\x76\x74\xf6\x0c\xac\x69\xdb\x72\x37\x1e\x4d\xfc\x72\xcb\xde\x77\xc0\xf2\xf7\xdb\xcf\xfc\x69\x56\xa9\xdc\x70\x6b\xe3\x75\x8f\xdd\xa2\xbd\x77\x1b\xed\xd1\x3e\xda\xb2\xfb\x14\xa1\x87\xed\xe8\xca\x66\xba\x2b\xba\x07\x06\xba\x2b\x2e\xd9\xb8\x79\xf7\xb7\x4e\x6f\xef\x4c\x35\x4c\x2a\x1c\xb8\xf8\x58\xff\x83\x02\xf6\xa6\x82\x6a\x90\x6a\x70\x72\x1e\xe3\x34\x10\x0b\x31\x52\x36\x29\xa9\xa0\xca\x69\x55\xa1\x9d\x28\xa4\x2a\x74\x44\x61\x5c\xa1\xac\xc1\x2d\x4b\x49\x59\xa7\xc2\x88\x02\x7e\xee\x8b\xa6\xff\x78\x44\x3b\xff\x9e\x27\x07\xee\x1e\x78\xf2\xf0\xc7\x4f\xfa\xfd\x4f\x2e\xc4\x9d\xb0\xad\x70\xe0\xb9\x22\x55\x2c\x71\xea\x93\x0b\x17\x3e\xe9\xa7\xd1\x09\x2c\x85\xd9\x85\xfa\x45\x87\x3f\x36\x2e\xb8\x47\x3b\x3f\xff\x84\x71\x00\xe4\xbf\x14\x2e\x36\x3d\x79\x4f\xe1\x76\xc6\x7c\x4d\x88\x3e\x40\xbd\x8a\xc2\x86\x8f\xd6\x98\x81\x93\x2b\xa6\xba\x69\xe4\x16\x02\x38\xd4\x8a\x33\x69\xa4\x64\x44\xd2\x45\x1f\xb8\xe8\xef\xda\x88\x36\xac\x8d\xfc\xfd\xa2\x27\xa1\xff\x85\x37\xb4\x37\x8a\xbc\xb6\xcb\xb4\x37\xde\x78\x01\xfa\x9f\xc4\xb9\xfb\xf4\xc4\x8b\xfe\x0e\xed\xf7\xbd\x02\x1b\x3e\x0a\x1e\xac\xd6\x86\xdf\xde\x59\xa0\xb1\xdd\xf9\x36\x0c\x55\x1f\x0c\x7e\xa4\x5d\x8c\x10\x20\xfe\x08\xa2\x3f\xa0\x11\x3a\x05\x21\x3e\xeb\x52\x93\x75\x02\xc3\x92\x86\x31\x89\xe1\xc0\x0e\x09\xbd\x79\x22\x6a\x40\x0d\x40\x10\xb2\x86\x35\x90\x3e\x60\xd4\x13\x8d\x00\x6b\x78\xc5\x17\x9c\xdd\x13\x64\x0d\xc8\x29\xb1\x2e\x60\x92\x5c\x45\xdb\x72\xde\xf4\x87\xa7\x29\x30\x95\xb5\xd7\x87\xa9\x9e\xa9\xc9\x15\xd3\x5b\x9d\x4e\xc5\xef\xf0\xd9\x59\x4b\x79\x75\x05\x6b\x5f\xa1\xcc\x10\x78\x50\xdc\xc2\x2d\xc3\x61\x85\x20\xc5\x99\x7e\xff\xf2\xaa\x01\x9e\x0f\x46\x84\x9a\xf0\x82\x59\x53\x44\x77\x73\x8f\x87\x0c\x55\xd4\x95\xb3\x76\x96\xb1\x94\x55\xcf\xac\xeb\xae\xac\xf5\xf3\x40\xfc\x59\x3b\xf3\xc8\x7e\xed\xc1\x7f\x5e\x80\xaf\x7a\x0d\xb6\xec\x00\x6c\x4a\x2d\xdb\x78\xcd\x95\x77\x4c\x49\x2a\xce\x20\xe7\x4c\xed\x5a\x7f\x6a\xa0\xb4\xa4\x2e\xec\xa5\xe9\x0d\xdc\x64\xaf\xaf\x76\x4d\x28\xf8\x93\x87\x12\xeb\x22\xe1\xf8\x14\x8e\xdb\xc0\x4e\x2d\x2d\xad\xbf\x7e\x7f\x7b\x75\x50\x08\x73\xce\xcc\xb6\x8d\xdb\xd6\x2e\x3f\xa9\x85\xe3\xec\x44\x69\xa4\x33\xd9\xdf\xbb\x6c\xc5\xce\x29\x5a\x5e\x3b\xf5\xed\x2b\x3e\x83\x81\xc2\xb8\xc7\xa8\x6b\x36\xe4\x43\x65\xa8\x1f\x2d\x41\xa7\xa3\xcd\xe8\x22\x74\x2d\x42\x94\x5b\x8e\x29\xaa\x28\xa9\xa2\xc4\x88\xc0\x88\x12\x23\x3b\x55\x89\x66\x24\xda\x2d\x80\x44\x93\x4c\x26\xab\x2a\x59\x55\xca\x12\x8c\x28\x30\x12\xcd\x28\x7a\x5a\x44\x51\x65\x85\x91\x15\xa3\x5a\xea\xa9\xaa\x92\x4d\x4a\x8c\x7e\x1b\x70\xd3\xc5\xd3\x94\x6c\x0c\x39\x19\x25\x5b\xb0\xbd\x54\x65\x45\xd5\x2f\x31\xae\xd2\xab\x02\x9a\xe0\x0c\x43\x16\x9c\x63\x8e\x31\x83\x27\x56\xbd\xa4\xdd\xb4\xaa\xb1\xb4\xaa\xe3\x8a\xd7\xb9\x8e\xfc\x5f\x4f\x12\x7d\x0d\x27\x9f\xdc\x10\xe0\x07\xa2\x94\xa9\x71\x95\x76\xd3\x4b\xf5\x1d\xdc\xeb\x57\x74\x54\x6d\x79\x87\x65\xff\x11\xec\xda\xdf\xb0\xb0\x36\xbd\x38\x5d\xbb\xb0\x61\x7f\x57\xf0\x1f\x2c\xfb\x4e\xb8\x73\x7f\xd3\xfc\xda\xaa\xd3\xab\x6a\xe7\x37\xed\xef\xd4\x2a\x3a\xea\xf5\xd3\xe5\x68\xc3\x2a\x18\x22\x9d\x27\x37\xf8\xc4\x93\x62\xd1\x01\x3e\xd0\x20\x36\x44\x65\xfd\x21\xf5\x1d\xbf\x81\x21\xb0\x7f\xe7\xa0\xf6\x0b\xed\x0e\xed\x17\x07\xbf\xf3\x9d\x83\xd0\x0c\x0b\xa1\xf9\xe0\x03\x27\xf8\x40\x96\x75\xd2\x2f\xde\xfb\xff\x90\xf6\x1e\x70\x52\x14\x69\xff\x78\x3d\xd5\x69\x66\x76\x27\xf6\x4c\xf7\xe4\xdd\x49\x3d\x9b\x97\x9d\xb8\x79\x07\x58\x96\xb4\xe4\x9c\x17\x24\x07\x49\x12\x45\x18\x92\xa0\xa8\xa7\xa8\x18\x30\x70\x7a\x20\x22\x87\xa2\x9e\x8a\xa2\xae\xde\x79\x06\x4c\x77\xa7\xf7\x1e\x9e\x7a\x78\xe7\xdd\x7b\xfa\x5e\x50\x2f\x09\xbb\x53\xfc\x3f\x5d\x3d\x1b\x40\xbd\xfb\xbd\xef\x1f\xb6\xa7\xab\xab\xaa\xbb\xab\xaa\xab\x9e\x0a\xcf\x53\xdf\x6f\xb0\x26\x56\x77\xb4\x62\x72\x21\xb6\x7a\x1b\x13\x81\x27\xe1\xee\x27\x03\xb5\xb5\xde\xf9\xab\x56\x90\x3f\x06\x8f\xbf\xc3\x0f\x82\xc2\xc9\x15\x47\xeb\x62\x78\xc6\xd8\xb2\xc9\x65\x63\x67\x8e\x7a\x60\xb0\xed\x4b\x83\xe1\x4b\xdb\xe0\x07\x46\xcd\xa4\x5e\xb3\xda\x1f\x68\xb5\x7d\x61\x30\x7c\x61\x6b\x7d\xa0\x1d\x2b\x83\x70\xc1\xe4\xb2\x87\x6b\xcb\x6a\x03\xc7\xdf\xc9\x3d\x42\x16\x3e\x19\x48\x34\x7a\x17\xad\x58\x35\xdf\x5b\x5b\x1b\x50\x02\xb5\x65\xb5\x0f\x97\x4d\x2e\xc0\x83\xf8\x77\x72\x88\xa6\x6c\x4f\xff\xd4\xe2\xfb\xbf\xcd\x3a\x5f\xe8\xb7\x2f\xd6\x82\xea\xd0\x10\xb4\x04\xad\x45\x3b\x11\x8a\xd8\x43\xc1\x64\x22\x1e\x63\xf2\x67\x29\x9d\xe4\x43\x3d\x66\xf7\x0e\xde\x61\xa7\x3f\x7e\x1c\x8f\xa9\xd3\x0e\x55\x0c\xd3\x19\x48\x34\x25\xc6\x69\xaf\x11\x52\xc7\x37\x5c\x52\xc3\x8d\x8f\x49\xf1\x64\x48\xf5\xf3\x41\xc8\xa1\x8a\xdf\xb8\x23\xe4\xb0\xfb\x19\xaa\x3c\xd2\x14\x31\xa9\xcb\x29\x50\x71\xdb\xac\x65\xf3\x16\x86\x47\x8c\x1a\x15\x56\x8e\x8c\xae\x8b\x35\x4e\x5e\xdf\x50\xa1\x94\xae\x2e\x69\x6d\x2f\x3f\xd7\x31\xda\x53\x53\x33\x6a\xba\x21\x32\xf4\x3a\x8c\xaf\x63\xe0\x82\x5f\x49\x26\xf4\x21\xfd\x12\xe6\x06\xb6\x31\x0c\x8c\x85\xc5\x9c\xad\xa8\x56\xc9\x90\xd7\x06\x0c\xab\x89\xb5\xd5\xe0\xf9\xfd\x55\x62\x9f\x0e\x6a\xc9\xc0\xed\x93\x26\x4e\x8f\x47\xae\xf1\xf9\xd6\x4c\x8e\x2d\x36\x33\xd6\xd6\xa4\x93\x89\x2c\xac\x1c\x1c\xb2\x9c\x1e\x9c\x31\x71\x45\xce\x0a\x9d\xf9\xca\x31\x4e\xaf\x9e\xcc\xf5\xa4\x61\x67\x95\x2c\x0f\x20\x1b\x63\xfa\x4d\x8e\xf1\x9f\xe0\x75\xe3\xed\xce\xa2\xea\x75\x0c\xe0\xb3\x91\x54\x83\xe2\xc4\x1f\x84\xd3\xa9\x48\x38\x99\x9a\x70\x19\xc6\x2b\x8f\x5a\x2f\x22\xfe\x34\xc5\xc0\xb6\xd0\x35\xcc\xe5\x68\x03\x42\x91\x44\x28\xe8\xb0\xc7\x63\x8c\xda\x23\xa9\x0e\xb5\x65\x50\x26\x75\x8a\xcc\xc2\x39\x2c\x81\x20\x35\x4d\x4e\xaa\x93\x87\x64\x5e\x8f\x2f\xc7\x20\x94\x4a\x5a\x13\xd1\x38\xef\xb0\xda\x23\x0e\x8a\x6a\x95\xb4\xc6\x93\x41\x8a\xd8\x1f\x4f\xd2\x90\xb8\x23\xa8\x94\x83\xd5\x9e\xb7\xfc\xd6\xfa\x3f\x3c\xe1\xf0\x7d\xc7\xef\x68\x68\x6c\xd8\xb2\x65\x03\x18\xc3\xe5\x96\xfd\x5b\x4a\xa2\x95\x43\x27\x4f\x1e\x5a\x49\x6e\x1f\xb2\xf9\xca\x81\x4f\x0d\x6e\x19\x36\xe7\x85\x1b\x3a\xc6\xcf\x83\xa7\x3e\x66\xd9\x8f\x59\x3c\x6b\xe8\xa2\xe6\xe9\x31\x9f\x0e\x0b\x4e\xde\xa1\x74\xf0\xbf\xe3\x1f\x31\xd7\x99\x26\x4d\x69\xca\x7d\x31\xba\xae\x7e\xec\x98\x86\x7a\x69\xfe\xe2\x05\xcc\xcc\xa6\xf1\xb7\xec\x81\xb7\xde\x28\x34\x94\x97\x6e\x7b\x42\xd6\x29\xd1\xa2\x52\xd9\xe1\xaf\x9c\x50\x47\xde\x75\xd5\x2d\x1b\x71\xb8\x91\x2d\x9d\xb4\xc2\xcb\x3a\x1f\x1e\xb7\xef\x54\x75\xf7\x0b\x95\xd3\xf0\xdc\xd9\xc1\xc0\x8c\xdc\xc1\x69\x27\x7f\x12\x2d\x69\xec\x98\xda\x00\x73\x58\xcc\xbf\xd0\x9e\x0a\x95\x6e\x79\x81\x25\xb7\xee\x64\x4d\x57\x4d\x99\x52\xdf\x30\xf5\x9b\xbc\xd4\x7a\x08\x31\xbc\x10\x65\x42\x60\x8d\x7f\x63\xbf\x47\x29\x18\x56\xdd\xeb\xb4\x97\x1d\xdc\x08\xc2\x02\xfc\x5f\x97\x18\xa5\xdb\xe1\x6f\xe4\xb5\x01\x15\x33\xa1\x96\x88\xe4\x34\x73\xfd\xa5\xdc\xb3\x75\x17\x11\xfb\x2a\x8f\x90\x8f\x62\x05\x69\xe0\x60\x02\x16\x25\x5e\x08\x05\x95\xa8\xa2\x21\x37\x26\x13\xa9\x18\x6b\x51\xc5\x7f\x1e\xba\x83\x42\x89\x69\xc0\x42\x0e\xbb\xac\x81\x1f\x27\x13\xcd\x38\x1e\x63\x99\x11\x6b\xc6\x34\xc6\x9b\x93\xff\xaa\x04\x8f\x83\xb3\xfb\xb1\xc9\xa1\xb4\xb5\x96\x34\x0d\xb5\xac\x3e\x04\x7f\xb9\x87\xfc\xed\xbe\xcc\x60\x87\xcc\x71\x61\x47\xbc\x6e\xee\xe3\xd9\xf6\xf6\xec\xe3\x2f\x3f\x9e\x6d\x4f\x18\x8c\x4a\xa9\x21\x33\xeb\x9e\x5f\xad\xbf\x0f\x8c\xac\xfd\xd0\xea\xd0\xe0\x31\xe4\x46\xe2\x94\x02\xd8\x63\xdf\xfa\xb7\x17\x7f\xb4\xa3\x71\xfa\xc8\x50\xd9\xd8\xd5\x55\xe4\x27\xe4\xef\xf7\x98\xb8\x88\xc3\x2e\xb3\xc6\xfc\xed\xed\xd9\xc7\xe7\xae\x59\x6c\x2f\xb1\x9b\xc4\xab\x6f\xda\xf0\xab\x7b\x66\xde\x83\x00\xd9\xf2\xfd\xe0\x12\x84\x20\x6f\x28\x9b\x4e\xd8\xe8\xca\xb3\x9f\x2f\x02\xb5\xd2\x39\xec\x7e\x70\xe4\x47\x55\x55\x6c\x54\x09\x09\xbc\xe0\xd7\xd0\x37\x43\x3d\x94\x32\xd4\xd0\xb6\x8a\x49\x6a\xc4\x32\xb1\x74\x2a\x49\x81\x62\x82\x82\x09\xb4\x42\x4a\x5a\xc0\xa4\x93\x8c\x60\x35\x9d\xba\x66\xdf\xa9\xdd\xbb\x6b\xc6\x37\xc6\x82\x45\xf6\x42\x48\xdb\x18\x76\xd4\x94\x68\x58\xef\xb0\x3a\x0a\x2c\x00\x98\x6b\x18\x6e\x9f\x90\xd6\x61\x96\xcb\xfc\x25\xb9\x76\x5c\xc6\xac\x33\x65\x74\xa5\x3f\x1c\x1f\x6a\x5d\x3f\x71\xa0\xbd\xa8\xa0\xc1\xce\x1a\x30\x1e\xb0\xd1\xc8\xb1\x3a\xdb\xf0\x52\x60\x59\x46\xc6\x1f\x88\x01\x7b\xbd\x45\x6a\x2e\xdc\x07\xe5\x8d\x83\xd2\x8e\x54\xfd\xe8\xb6\x2b\xc6\xd6\x73\x13\x06\x9b\x12\x85\xc0\x71\xb0\xe6\xf5\xe5\xe5\x6b\xcc\xf6\x62\x47\x11\x06\xf6\xee\x21\xf6\x48\x55\x19\xeb\xe4\xe7\xda\x24\x91\xc3\x2c\x40\x65\x09\x63\x76\xa7\x22\x25\x51\x1f\x96\x00\x63\xcc\x14\x3c\xdf\xcc\xd8\x4b\x07\xb3\x7a\x48\x55\x81\xd8\x33\xee\x6a\xd6\x21\xee\x65\x8a\x13\x1e\x40\x95\x68\x38\xc5\x90\xed\x1b\xb4\xf7\x57\x75\xe3\x6f\xf7\x06\x25\x14\x64\xd5\xfa\x40\x1b\x67\x54\x48\x87\xad\x09\x9b\x3a\x2e\x95\xc0\xce\x0b\xb2\x06\x3a\x67\xa1\x23\x55\x09\xb7\xc6\x4a\xcb\x07\x0d\x2a\x2f\x65\x5c\xf1\x12\x4f\x65\xa5\xa7\x24\xfe\xa7\x1a\xcd\x07\x1f\x4f\x44\x55\x9f\x68\x82\xfc\xb3\x28\xfa\x30\xf9\xf4\x41\x39\x14\x70\x0f\x68\xf6\x8c\xd7\xe7\x86\x91\x8f\x7f\x0c\xa3\x5e\x79\x0c\xea\x7e\x81\x57\x5e\xb7\x2e\xfd\xea\x81\x56\x35\xc2\x83\xe0\x7d\xf8\xfb\xe0\x7d\x84\x35\x8c\x8f\xc5\x4b\xa2\x71\x32\xc7\x5b\x51\xe9\xf1\x56\x56\xc0\x5f\x2f\xf7\x38\xc6\xde\x4d\xce\xdf\x33\x7a\x04\xc3\x18\x58\x2b\xde\xf6\xc1\x19\x28\x7a\x18\xbc\x0f\xee\xfa\x2c\xd7\xb2\xee\xfd\x29\x3f\x5a\x11\xb9\xf1\x2b\xf0\x7f\x75\xe3\x8d\x7f\xd3\xf0\x4b\xf8\x8b\x3c\xa2\x68\x1c\x92\x90\x07\x16\x8e\x30\x1a\x44\x52\xd2\xaa\x87\x88\x12\xd5\xd0\x95\xf9\x4f\x03\xfc\x45\xc4\x79\x4c\xd6\x02\x23\x69\xf8\xca\x56\x64\xd4\x8b\x32\xd3\xd1\xf5\x0b\xb2\x2e\xc2\xe0\x20\x9f\x35\x5b\xed\xdc\x3f\x9c\x25\x17\x90\xcf\xa2\xe3\x4e\x91\xb3\x32\x2b\x04\xec\x30\x8b\x0d\x75\x5f\xf1\x80\xa9\xb4\x44\x64\x3a\xf5\x7d\x78\x09\x17\xb9\x7f\x21\x37\x2a\xbe\xe4\xad\xd0\xf3\xd6\xfc\x3b\x41\x04\x4e\x0f\xfd\xdf\x9b\xfb\x92\xfc\xd2\xe6\x33\xe9\x45\x89\x94\x44\x18\x26\xc4\x67\x43\xe4\xcc\x47\x17\x16\xc2\x58\x66\x0e\x09\xf6\xbd\xfd\xbf\xc8\x29\x07\x7d\xfb\x4f\x5e\x32\x95\x46\xed\x4c\xa7\xe3\x82\x89\x2b\xef\x7e\xe5\x3a\xbc\xad\xfb\x77\x97\xc8\x9d\x04\x95\x09\xea\xf8\x23\x14\x0c\x6b\x73\xd9\xb8\x94\x37\xdd\xa7\x16\xfd\xbc\x20\x4b\x42\x8f\x24\xa2\x70\xc1\xf4\xe3\x72\x97\x12\xda\x6a\xdb\xf7\x79\xb4\xf9\x6d\xf2\xe9\x3d\xc7\xc9\x1b\x2b\x04\xd0\x5d\x67\x30\x5b\x84\xe1\xef\x6d\x58\xfc\xfc\xf5\xe3\xc6\x5d\xff\xfc\xe2\x79\x4f\xb6\x5d\x57\x64\xb5\x96\x91\x8c\x5b\x29\x89\xfa\x77\x2c\x03\xf1\xd6\x7b\xc0\xfb\x76\xee\x42\x8f\xf1\xde\x39\x6a\x84\xc6\x78\xc9\x6b\xe4\xd3\xb7\x37\xdf\xb2\xcb\xe0\xd2\x5d\xaf\xc7\x86\x39\x8b\xc7\x5d\xff\xfc\xbb\xcf\x5f\x3f\x6e\xe8\xa0\xeb\xfd\xd1\x12\xc5\x0d\x9d\x65\x56\x6b\xd1\xf6\x05\x2b\x37\xbf\x7d\x27\xe9\xb5\xe6\xeb\xe8\xb1\x5f\xeb\xb3\x5f\xa1\x5c\xff\x26\x6c\xa1\xe3\x70\x4b\x15\x5c\xb2\x9b\x6c\x07\xe9\xd6\x46\xd6\x74\x08\xbe\xf0\x11\xb8\xe5\x32\xc5\x21\x87\x16\x3e\xf2\xe7\xfe\x91\xc8\xd3\xdf\xd0\x0d\x36\x5f\xcc\xf2\x2f\x73\x59\xb4\x1b\x21\x2e\x6f\x7d\x46\xa5\x64\x3a\x95\x64\x12\x51\x8d\x6d\xdc\xc1\xd8\x65\x3f\x93\x9f\xd5\xf5\x8f\x11\xb5\x26\x52\x55\x6c\xb4\x0a\x7a\x68\x9f\xe2\x31\x6d\xf6\x66\xc2\x02\xef\x10\xed\xb2\x14\x0f\xa8\xb2\x48\x4c\x44\xab\xf0\xb7\xc7\xa0\xcf\xe5\xf7\x57\x9c\xac\xac\x78\xac\xc2\xe9\x0e\x56\xd4\x5b\x02\x00\xc6\x48\x6e\x96\x62\x04\x88\x58\x32\xb1\x12\x97\xb3\xfa\x54\x55\xf9\xb1\x32\xd9\x55\x54\x9a\x32\x07\x40\x95\x51\x3a\x93\xde\xdc\x58\x15\x76\x3a\xab\x4e\x55\x95\x3d\x5c\xe6\x72\x05\xcb\x6b\xcd\x21\x00\xa3\x1b\x3f\xe7\x32\x02\x84\x6c\xe3\xe2\x2e\x57\xc5\x63\x15\xe5\xc7\xcb\x5d\xae\x50\x65\xbd\x39\x04\x41\x4b\x63\x75\xd8\x99\x15\x84\x52\x57\x91\x9f\x35\x18\x1c\x1b\x60\x8f\xc3\xc0\xb2\x06\x07\xb9\xf1\x26\xc9\xc0\x83\xaf\xc8\x5d\x21\x08\x65\x4e\xbf\x9f\x33\x18\xe4\x8d\x75\x4c\x25\x53\xe5\x89\x05\xa3\x4e\xde\xc0\x7a\x69\x58\x85\xdb\xef\xc1\xbc\xc1\xb1\x8f\x74\x3a\x0a\x18\xa6\xc0\x01\x99\x7d\x8e\x02\x46\x56\xf2\x81\x5e\xe0\x0c\xf2\xf5\xdd\xe3\x36\x38\x0c\x02\xf6\xf9\xdd\x15\x14\x63\xc8\x79\x31\xcb\x12\x2e\x8b\x2a\xf2\xf8\x11\x74\xfb\x49\x9f\x81\x76\xa8\xd7\xa5\x44\x69\x1f\x95\x4e\xa5\x53\xa5\x10\x93\x58\x12\x71\xc6\x58\x37\xcf\x84\x5d\xcb\x5d\xe1\xef\x85\xdc\xcb\xdd\xa1\x5b\xe7\x6d\x1d\x94\x99\x3a\x75\xd3\x4a\x88\xc1\x6f\x5c\x61\x6e\xf0\x70\x5f\x06\x78\x57\x41\xb2\x2b\xeb\x0a\x87\x5d\xec\xcb\x5d\xcd\xea\x19\xbe\x28\xac\xae\xdf\xb4\xee\xa6\x23\x1b\xd7\x97\x46\xc2\x74\x1e\xa1\xd6\x29\xd4\x8f\x77\xa4\x1a\xb5\xa0\xc1\x68\x28\x42\x11\x47\x20\x19\xf9\x86\xa5\x70\x20\x29\x3a\x42\x49\xf5\xcc\x5c\x1e\x76\xf9\x5a\x99\x23\x44\x69\x2a\xa1\x83\x1c\xc2\x94\x5e\x2b\x8f\xeb\x76\xa8\xfb\xd0\xb9\x73\x3c\xca\x15\x9f\xeb\xf3\x64\xb2\x7d\x6e\x9c\x39\x77\xae\xfb\x50\x36\x9b\xcd\xf6\x03\x91\x53\x20\x9b\xcd\x62\x94\xcd\x76\xa3\x6c\x96\xbd\x24\x84\xa0\xfe\x57\xf9\x68\x9a\x7e\x3b\xcf\x4d\x8f\x20\x26\x59\xf8\x62\xb5\x0c\x23\x6a\x3d\xb5\xa8\xfd\x68\x44\xad\x9c\xc5\x92\x45\x95\x4e\x9c\x64\x17\xb8\x14\xdb\xb9\xfb\xb9\xe7\xc8\x3f\x9f\xc3\xe4\xce\x99\x5b\x77\x3f\xf7\xdc\xee\xad\x33\x61\x31\x7e\x0e\x0c\xd4\x49\xee\xc4\x18\x16\xcf\xc4\x48\x8d\xf2\xdc\xee\x42\xe9\xc9\xc9\x6a\xd0\xe4\x27\xa5\x42\xed\xb6\xc9\x4f\x4a\x4e\xe9\xc9\xc9\x97\xb4\x55\xca\x8b\x1f\xd6\xf6\xc0\xa6\x12\xd1\xb4\x14\xd7\x96\x92\x1d\x76\xba\xc1\x99\x92\xe3\xa5\xe9\x86\xd8\xd8\x37\xb9\xfa\xaf\x99\x3a\xb1\xe9\x4b\x8c\xbf\x6c\x9a\x38\xf5\x9a\x6b\x1e\xdb\x8a\xbf\x6c\x9e\x30\xf5\x9a\x6b\xa6\x4e\x68\xfe\x12\x6f\x7d\x0c\xae\xe9\x3f\x54\xca\x3d\xb6\xb5\x7e\xa3\xc5\x64\xd9\x58\xbf\xf5\xb1\x6b\xae\x99\x2a\x58\x36\xd6\x5d\xf3\xd8\x35\x75\x1b\x2d\xc2\xd4\x6b\x98\x73\xfd\xc7\x4d\x42\xef\xdc\xd1\x8a\xaa\x51\x33\x6a\x47\x53\xd1\x7c\xb4\x16\x21\x44\x97\x7d\xe9\x0a\x2f\x55\x4c\xa4\x53\x20\x0b\xb2\x64\x37\x53\x04\x84\xbe\x89\x5c\x3c\x26\x53\x43\x59\x91\x2e\x1e\xe7\xad\x66\x25\xbb\xcc\xf7\xbf\x4a\x69\x75\x97\xca\xcf\x68\xde\x74\x85\x6a\xd5\x35\x6c\x97\x84\x06\x8d\x66\xc7\x43\xec\x03\x5c\xcb\x8f\x54\x18\xec\x2e\x63\x41\x99\x2d\xb8\x7d\xa2\x8b\x79\xa6\xea\xef\xad\xa2\x98\x99\xb6\xf2\x79\xd2\x45\x7e\x4b\xba\x9e\x5f\x49\xe1\x54\x9f\xfa\x7e\x46\x4c\x8a\xad\x5d\x86\x42\xa3\x61\x86\x5e\x6f\x70\x1b\xa6\x1b\x3e\x2c\x70\x16\x4c\x37\x18\xf4\x1e\xfd\x0c\x7d\xb1\xcd\x44\x81\x4f\x3a\x4c\x27\x6c\x5e\x9b\xcd\x6b\xbb\x63\x86\x1a\xd5\x60\x98\x6e\x70\x1b\xf4\xcc\xdd\x31\xbb\xa1\xe2\xc8\x72\xd7\x00\x03\x57\x32\x71\x7b\xb0\x00\x7e\x58\xf5\xb7\x56\x31\x29\x66\xbe\xff\xd4\xf7\x7a\xde\x01\x7e\xe0\x9e\x5f\x39\x2d\x23\x8a\xad\x50\x91\xbf\x51\x3f\x43\xef\xf9\x2b\xfd\xd5\x53\x9f\xe7\xe8\xb3\x0f\xe5\x5f\x65\xb3\x0d\xe9\x79\xbf\xde\xe0\xce\xe3\x12\xa8\x65\xcb\x22\xbb\xfa\xe5\x21\xc2\x31\x01\x7c\xd9\x12\x10\xa4\x9a\x40\x88\x8a\xb2\x12\x95\xb9\x48\x9a\x17\xd2\xa2\x10\x75\xd8\xe5\x34\x27\x0a\x52\x2c\x1d\x15\x23\x78\x2e\x14\x41\xd1\x0a\x72\x2f\xf7\xcd\x35\x20\x76\xc5\xed\x0b\xbf\x68\xb9\xf6\xc0\x5f\x93\xe4\x13\xf2\x49\xf2\xaf\x07\xf6\x34\x7f\xb1\xf0\x76\x3f\xb4\xed\xbb\x6a\xdd\x3f\xd7\x5d\xb5\x0f\xda\xf0\xbb\xef\xbe\x4b\x1e\x63\xb3\xdf\x32\xc1\xed\x1a\x76\xa6\x8b\x99\x76\x0e\x06\x17\xbe\xdd\xbe\xe5\xfe\xfb\xb7\xb4\xbf\x5d\x48\x9e\x3f\x37\x8d\xe9\x3a\xb3\xab\x84\xfc\x72\x48\x34\x3a\x04\xca\x4a\x10\xe5\xae\xcb\xf3\x43\xf7\xec\x29\x18\x4e\x59\x43\x36\xa1\xeb\xd0\x03\xe8\x71\x74\x5a\x95\x0e\x3d\xcc\xd5\x79\x2a\xf7\xcb\xae\xe1\x3f\x84\x47\x7a\x8c\x9a\x42\xf0\xff\xf3\x49\xaa\x2c\x4a\x70\x2c\x05\x76\x68\x66\xc3\xc5\xac\x9f\xb5\x5e\x16\xc5\xda\x4b\x1c\x0a\x1a\x4b\xa4\x46\x15\xd9\xe7\xc4\x99\x6f\xf5\xce\xbd\xec\x55\x30\x56\x3c\xf8\xe2\xff\xe6\x2e\xc8\xe6\x08\xd9\x41\x76\xe4\x88\x35\x3e\xf6\xc6\x27\xc0\x08\xcd\x50\xf8\xe4\x8d\x63\xe3\xd6\xbe\x38\x8a\x87\x64\x3d\xca\xb9\x3e\x1e\xd1\x3e\x76\x51\xb2\xe6\xdb\x7c\xf7\x2b\x9e\xed\xdb\x3d\x4a\xee\x7f\x71\x0b\x5c\x6f\x34\x2c\xc6\xb0\xc0\x60\xb4\x26\xda\x47\x8e\xaa\x8f\x44\xea\x47\x8d\x6c\x4f\x90\x29\x7d\x31\x26\x6e\xf7\x28\x8a\x67\x7b\xaf\xde\x2f\x8f\x8b\x60\xa7\xd6\x3b\x75\x79\x1c\xb0\x5e\xb9\x24\xa6\xe2\x01\xaa\xe8\xeb\xf1\xa0\xaa\x84\x98\x0c\xbd\xd0\x6e\x5c\xaf\x0b\x77\x2a\x6e\xc5\x4d\x90\x5b\x39\x2f\x38\xf1\x1f\x2f\x22\x16\x69\x97\x6e\x05\x8e\x3a\x85\xee\xb3\xe4\x90\xcd\x04\xc5\x26\x1b\x3e\xd4\xe3\x62\x3b\x73\xc8\xad\xe4\x68\x57\x81\x11\xb3\x44\xce\x65\x70\x67\x77\x96\xe4\x3b\x05\xc5\xcd\x20\x19\xd2\xe7\xfa\x48\xcf\xb5\x71\x2e\x4d\xb3\x4f\x1d\x71\xda\x05\x90\x05\x9e\x8d\x42\x28\x09\x8a\xad\x05\x64\x48\xc5\xa8\x27\xa4\x62\xfc\xaf\x23\x11\xb2\xf2\xc0\xa1\x07\x49\xc3\x29\x72\xe0\x47\xb0\x74\x4b\xf5\x83\x87\x0e\xc0\xcd\xca\xd2\x11\x11\xb2\xea\x73\xb8\x45\x59\xca\x36\x28\x4b\x14\xb2\xea\xc0\xa1\x07\xab\xb7\xd0\x28\xa7\xe0\x15\x35\xce\x2d\x91\x11\xcb\x22\x64\xe5\xe7\x70\x73\x84\xea\xfe\x5d\x17\x0b\xf9\xff\xa6\xbc\x7d\x0e\x54\x4f\x59\x89\xfa\xa3\x20\x7c\x0b\xd7\xa5\x9f\x8b\xa5\xe2\x29\x0a\xef\x99\x92\x63\x7e\xdc\xcc\xa5\x79\xc1\xa6\xed\xbe\x4b\x33\x54\xed\x9f\xe7\x4b\x10\x29\xf9\x82\x1f\xe4\x7c\x1f\xe0\xb0\xa6\x53\x12\xb3\x64\xdb\xe3\xdb\xb6\x3d\xbe\x0d\xfe\xb9\x75\xfa\xb4\x6d\xdb\xa6\x4d\xdf\xfa\x49\x66\x4c\xd7\xd1\x09\x0d\xe5\x33\x86\xce\x88\x4f\xf3\x4e\xc2\xad\x1e\x9e\x75\x87\x84\x95\x5c\x8b\xdc\xaa\x0c\x8d\x0f\x6f\x1a\xf1\xd3\x4d\x5d\x13\x97\x0d\x5a\xb7\x78\xf4\x64\x16\x74\x01\x01\xd8\x29\x63\x16\xaf\x1b\xb8\x64\x42\xd7\x26\x57\x59\x94\x35\x33\xb3\x07\xb3\x9f\x0d\x9e\xed\x88\x96\x31\xde\x09\x1b\x36\x4c\x98\xb8\x7e\xfd\xc4\xfc\x99\x7c\x8d\x0f\x4e\x19\xde\x3a\x33\x37\x47\x0e\x4a\x66\x01\x58\xf0\xf2\x8c\xcb\x3d\x83\x65\x00\x18\xbe\xc0\x22\x17\x39\x6f\x5f\x44\x7e\xf7\xe4\xea\x50\x71\x75\x7c\x35\xb4\x01\xd6\x01\x39\xb1\x26\x56\x5d\x1c\x5e\xf3\x24\x78\x16\xdd\x1e\x49\x78\xb0\x81\xc1\x4f\x0d\x5b\xb8\x70\x58\x6e\x84\xd9\x93\x50\xcb\x6c\xfe\xc5\x2c\x7f\x4f\x5e\x4f\x6b\x46\x2e\xb5\x66\x51\x3a\x31\xab\x98\xb6\x06\xac\x01\x47\x1a\xac\x10\x10\x42\xc9\x80\x55\x64\xb2\xb7\xe0\xa2\x5b\x6e\xc9\x75\x4d\x86\xb6\xb3\x8c\x97\x8c\x26\xcf\x9e\x3d\x4b\xd6\xac\x60\x47\x93\xd1\xf0\xb8\x7a\xe4\x74\x84\xf1\x74\xfd\xf7\xd9\xb3\xec\xb1\xee\x02\x32\xfa\xec\x59\xf6\x5a\x08\x68\x75\x78\xda\x45\xe0\x8e\x71\x39\x24\xa1\x72\xd4\x82\x46\xa3\x05\xaa\xa4\xc2\x6a\x51\xd3\x41\x94\x36\x0b\xa6\x00\x9e\x51\xde\x0c\x2c\xdd\xd7\xa8\x34\x83\x1c\x93\xe9\xd6\x37\x50\x3b\xc0\xa8\xc2\x50\x70\xce\x3c\xcf\x03\xa8\xdf\x06\x14\x0a\xeb\x29\x4b\x36\x4e\x12\x78\x8e\x17\xd2\xbc\x86\xb6\x4a\x4d\x6a\xfc\x20\x33\x1c\x70\x85\xd1\xd4\xc5\x90\x91\x05\x8e\x6d\xbc\x03\x1a\xcc\x35\x2e\xa7\xe7\x00\x53\xb3\x91\xfc\xd9\x1a\x12\x0b\x39\x9d\xad\x2c\x64\x7c\x7e\x68\xc5\x44\xd9\xc5\xd4\x09\x0f\xc7\x23\x6e\xd3\xb1\x6a\x13\x67\x0d\x0d\x80\xf5\x67\x46\xeb\xbc\xb9\xe9\x5c\x43\x7d\x2d\xb9\x56\xe7\x29\x85\x51\xf5\x25\x7a\x46\xc1\x07\x19\x9f\x99\xfc\x74\xb0\x13\xe4\x2a\x93\xdf\x0f\x23\xae\x89\xe9\xbd\x91\x01\x07\xf8\xb3\xdb\xc8\x87\xc6\x62\x9d\x7e\x76\x99\xd9\x51\x68\x32\x8c\x78\xa2\x4d\x2c\xd0\x1b\x94\x4f\xd3\xe6\xe8\x54\x1c\x74\xc5\xda\x7f\xd4\x8a\x47\xf9\x6c\x41\x7d\x39\x39\x9d\xfa\xa5\xdd\xe4\x30\x80\x63\x94\x23\xe6\x28\xb7\x42\x74\x90\x47\x90\xf0\xb8\x85\x76\xeb\x54\x3c\x39\xe4\x29\x9f\x65\x36\x84\x6c\xb9\x97\x5e\x8b\xda\x0d\xed\x66\x1d\xe6\xed\x52\x75\x09\x2c\x78\x64\x10\x2f\x5a\xe5\x8f\xea\xe8\xfe\x7e\x4d\x8f\x93\xbd\x64\xef\x83\x07\x85\x50\x05\xe5\xac\x09\x58\x03\x74\x94\x67\xa5\x30\x8f\xc9\x4b\x0e\x75\x0c\x4b\x17\x09\x03\x56\xbb\x70\x09\xa4\x43\x20\xc9\x22\x92\x85\x6c\x36\x47\x77\x6a\x70\x88\x20\xdc\xef\xe8\x46\x59\x25\xa1\xf0\xd9\x0b\xa8\x80\x3b\xe3\x56\xb2\xab\xc6\x9e\xcf\x8e\x5d\x05\x48\xbd\xe9\x22\xca\x66\x19\x44\xef\x43\xbd\xfa\x78\x7a\x74\x67\x98\x4e\x0d\x48\x98\xcd\x74\x75\x06\x8a\x14\xf6\x83\x2e\x6a\xab\xca\x66\xb2\x88\x45\x65\xc8\x28\xfc\x92\xe2\x2d\x14\xa1\x3a\x34\x0e\xa1\x70\xbe\xd5\x3a\xec\xe9\x60\x15\x04\xf3\xbb\x68\xd2\xcd\x10\xd3\xe0\xe7\x29\xfe\x55\x28\x68\x62\x34\xff\x54\xb8\x98\xa5\xfe\x62\x30\xaa\x84\x8b\xd9\x3c\x2e\x58\x9f\x3f\x6b\x2f\xd9\x7f\xcd\xf8\x6b\x16\xe3\xf6\x6d\x3b\xb6\x8d\x64\x6c\x77\x18\x46\xff\xe9\x0f\x7f\x1a\x6d\xb8\x03\x5d\x2c\x28\xdc\xfb\xc7\x3b\x27\x3d\xb2\x6d\x7e\x3d\xb6\x1e\x30\xec\x82\x8d\x90\x85\x8d\xbb\x0c\x07\x48\x41\xc1\x13\x64\x1b\xa9\x25\xdb\x9e\x28\x28\xb0\xde\x61\x78\x0e\xb3\xd8\x8d\xd9\xe7\x0c\x77\x18\x6f\xb5\x17\x57\x54\x14\xdb\xb7\xc4\x62\xb1\xd8\x01\x9b\xd1\x30\x6a\xea\xd4\x51\x06\xa3\xed\x00\x58\x74\x4b\xae\xa8\x68\x6e\xae\x38\x60\x2b\x34\xec\xda\xbf\x7f\x97\xa1\xd0\x76\x00\xcc\xfa\x7b\xef\xbf\xff\x5e\xbd\x1a\xf1\xd9\x37\xdf\x7c\x56\x8d\x88\x90\x51\xdb\x37\x43\xd7\x31\xfb\x6b\xa5\x5a\xd0\x48\x34\x01\x5d\x81\x96\xa1\xab\x11\x62\x2f\xe3\x84\x43\xff\xcb\x33\x58\xf3\x28\x22\x52\x2c\xd5\xdf\xaf\x3f\xd6\x9d\xa5\x9f\x0d\x76\xff\x31\x2e\x64\x47\x2e\x1d\x39\x72\x29\x9c\xa1\x27\xa2\x9d\x98\x91\xfd\xaf\xbe\xd5\x93\x19\xd9\xbe\xb8\xbd\x7d\x71\x3b\xe9\xb9\xbf\x67\x3b\x1e\x87\xdc\x0a\xf5\x3a\xd3\x9e\xb8\x40\x35\xe7\x5c\x36\xd1\x9e\x5c\xaa\xdd\xad\xfe\xc1\x19\x7a\x22\x67\xfa\x5f\x7d\xab\x67\x2e\x0b\x7d\xda\x7b\x7c\x51\x0b\xea\xa4\xb0\xd4\xda\x7c\x83\x1c\xa6\x7e\x0c\xba\x80\xd4\x78\xbc\xfa\x8b\x30\xd2\x5f\x44\xdc\x5f\x79\x84\xa2\x68\x08\x5d\x07\xc1\x81\x50\x90\x37\x03\x23\x98\x80\x6e\x82\x6a\x66\xd2\xa9\x06\xa0\xf4\x37\x54\x80\x48\xb2\x14\xd5\x28\x9d\xec\xa1\x68\x50\xe0\x19\x5a\x44\xe9\x1e\x8b\x74\x3f\x70\x7f\xb5\x49\x53\x48\xb0\xc2\xa5\x70\x6c\x1a\x73\x51\x57\x97\xc3\xc9\xe8\x43\xb6\xb0\x9e\x53\x76\xee\x5e\xf4\xe8\xaa\x85\x49\x67\x01\x30\x2c\x3b\xe6\xae\xaa\xb1\x1f\xaf\xde\x37\x7d\xfa\x7c\x1b\x9e\x00\x05\xe4\xac\xe4\x63\xfe\xc8\x55\xfa\xf0\xe4\xe0\xb6\x01\xcb\x56\x33\x9b\x27\x6e\x24\xad\x01\xb7\x48\x8e\x98\xdd\x01\xbf\xa3\xf6\xdc\xaa\xdf\xd4\x46\xb0\x1c\x5d\x32\xe7\x8e\xb6\x16\x9e\x01\xa6\xe1\x89\x65\xdb\x3f\x1b\x5f\x82\x01\x3a\x74\xb9\x7f\x1a\x02\x12\xf7\xa2\x4f\x71\x8b\xa5\x3f\x50\x65\x78\x34\xdf\xd7\x1a\x90\x0d\xb9\x50\x89\x3a\xab\x92\x91\x18\xc0\x8c\x92\x8a\x03\x2f\x60\x26\x95\xb6\x89\x36\xd5\x47\x0f\x16\x06\x03\x0d\x50\x73\x60\x83\x53\x01\x11\x0c\x1d\x64\xd0\xb6\x2f\x0a\x6d\x76\xe6\x07\x35\xed\x63\x4e\x96\xb0\xbf\xf8\xe4\x7f\xa0\x3c\x44\x9a\x4a\x09\x62\x17\x2f\x18\x4c\x3e\x74\x8d\x63\x45\x0b\x2c\x72\x84\xb8\xb5\x4c\x87\x9b\xdc\x46\x16\xc2\x29\x48\x58\x42\xe4\xe0\xab\x2f\x43\x0a\xbc\x1f\x7d\x4a\x8e\xc3\xf7\xc8\xe9\x9c\x48\x56\xe3\xbb\x98\x68\xae\x93\x4c\x25\x5b\xf0\x00\x5c\x00\x95\xe0\xb1\xb8\xdc\x76\xb2\x48\xd3\x8d\xe8\xb5\x7d\x23\x66\xe4\x44\x5e\xd4\xac\xf1\xd0\x43\x28\xd5\x02\xcd\x90\x96\x39\x46\x09\x05\x04\x36\x42\x69\x81\xc4\x38\x30\x71\x31\xc4\xd1\x9d\x22\xbc\x9c\x5f\x4f\xad\x06\x41\x8a\x4b\xa9\x74\x22\xaa\x2d\xe2\xa7\x8a\x20\x12\x0a\x0a\x4c\x3c\x1d\x97\xe4\xf8\xe5\xb5\x58\x78\xfa\x7a\x53\x82\x61\x0b\x99\xc2\x0b\x3b\xea\x0b\x32\xe4\xef\x18\xd2\x60\x7e\xc0\xea\x5e\x3f\x6c\xcf\xa3\xc0\x45\x8e\x2c\x3e\x82\xef\x1c\x32\xf6\xea\x7b\x00\xf6\x0f\x50\x1a\xa3\x93\xdb\x24\x79\xc4\xca\x1d\xf7\xe2\x1b\x6a\x2a\x6a\xaa\xda\x52\x66\xe8\xcc\x0e\x94\xfe\x79\x22\xf4\x1e\x67\xbe\x3b\xdb\x9e\xf8\x9a\x56\x27\x1d\x4a\xb4\xe3\x60\xe4\x26\xbd\xa1\xd8\x90\xde\x08\xd1\x94\x71\xcc\x4c\x32\x62\x5a\xdb\x06\x1f\xc1\x78\x7b\x6e\x2b\xde\x61\xf1\xac\x9f\xbd\x70\x98\x1c\x76\xf8\x8b\x03\x05\x37\x07\x61\xe3\xfc\xa5\xad\xae\xa0\x43\x0a\x80\x4b\x77\x30\x95\x7b\xb2\x43\x1a\xc1\xbc\xdc\x45\x1f\xc6\xd1\xba\xe9\xec\x2d\x1b\x2b\x72\xa1\x72\x14\x47\x19\x34\x14\x4d\x45\x57\xa0\x45\x68\x35\xda\x8c\xee\x41\xcf\xa0\x57\xd1\xef\xd1\x79\x28\x00\x17\x54\x42\x23\x8c\x80\xa9\x70\x35\xec\x43\x08\x94\x1e\x72\x8e\x78\x2c\xad\x60\x5b\x9a\xc7\x36\x39\x65\xc3\x51\xc9\x86\x05\xba\xa6\x9e\xa4\xeb\x6a\x10\x4f\x86\x1c\x71\x47\x03\x4e\x86\x84\x68\xc8\x11\x4f\xca\xf1\x34\xe3\x28\x87\x64\x03\x38\xe2\xd1\x58\x3c\x9d\x4a\x54\x43\xb0\x1c\x1c\xf1\x64\x3c\x9c\xe8\x55\xea\x87\x63\x72\x88\xd5\x64\x31\x1f\x0a\xa6\xf2\xae\xa0\x1c\x8c\x06\x15\xaa\x4d\x49\xa4\x53\x35\xb1\x24\x35\x6d\xad\x91\x1d\x92\x43\xf0\x42\x48\xe0\x43\x7c\x24\x9e\x4c\x28\xd1\xa0\xa0\xb1\x1f\x3b\xe2\xc9\x44\x3c\xe6\x03\x7a\x72\xc8\xf1\x26\x08\x39\x7a\xa6\xd9\x2d\x90\xa8\x06\x45\x0d\x90\xd3\xda\xca\x2f\x5d\x47\x0f\x05\xa3\x6a\xfa\x53\x74\x91\xb7\x49\x4d\x7e\x32\xe4\x50\xb3\x60\x8f\xc7\xd2\x3d\xbb\xbc\xd4\xb0\xa8\xfa\xa6\x78\xdf\x5b\xe4\xb4\x22\xe5\x03\xa3\xda\x96\x22\xfa\xdc\xcb\x5f\x7a\xc9\x0d\xf9\xc0\x9e\x30\x21\x18\xe2\x05\x9e\xea\xe5\xec\x74\x71\x32\xad\x4e\x8c\xd3\xa9\x64\x22\xaa\x44\xd5\x72\x52\xbe\x81\xef\x33\x27\x7b\xd7\xa2\xe7\xf7\x8e\x1b\xb7\xf7\xf4\xe2\xbb\xb2\x3b\x67\xcf\x79\x70\xeb\xcc\x19\xdb\xb6\xcd\x98\x39\x6b\xc7\x9c\xd9\x3b\xb3\x77\x2d\x3e\xad\x86\x3d\xbf\xe8\x2e\xbc\x40\xb0\x0a\x8c\x8f\xe5\x78\x9e\x63\x78\x96\xd3\x61\x86\xc1\x0c\x4b\x69\x60\x01\x03\xcf\x40\x97\x24\x89\x36\x49\xb2\x89\x70\xb8\x91\x6b\x83\x3d\x52\x58\x96\x44\xdb\x05\x39\x2c\xcb\xe1\x3d\x18\x03\x35\x81\xc5\x18\x33\xc0\x62\x7a\x13\x86\x0b\xa7\xfd\x3e\x57\xb1\xd9\x54\xe4\x34\xfb\xfd\x01\xbf\x2f\xe0\x3f\xe2\xf3\x59\xdd\x3e\x45\xf1\x79\xcd\x8f\x57\x9b\x64\x97\x6c\x2f\x94\x02\x6e\x7f\xb5\xd1\x59\xe4\xb2\x1b\x5d\x01\x5f\x60\x87\xce\x68\x14\x07\x0c\xf0\x7b\xbd\xd5\x8e\x05\x3e\x25\xea\x0f\x48\x26\x9b\x23\x28\x2c\x08\xef\x94\x0b\xfd\x7e\x9f\x41\xa7\xd7\xdb\xa2\x01\x9f\x68\xb2\x59\x6d\xb2\x6c\x13\x2d\x26\xbb\x37\xf0\xb6\xdf\x6f\xf6\xf8\xa2\x51\x9f\xd7\xb4\x5b\x2e\xf4\xf9\xd4\x68\xba\x6d\x3e\x9f\xb9\x36\x1a\xf5\xfa\x4c\xa3\xb1\x9a\x34\x75\x44\x8a\x59\x86\xc5\xea\x15\x4d\xa1\x9a\xea\x45\xfd\x1b\x10\xfb\xc8\xa4\x71\x7b\x4f\x2f\x52\x8b\x65\xd2\x32\x68\x82\xc6\x09\x57\x90\x5f\x90\xf7\xae\xb8\x02\x2a\xa0\xf2\xea\x65\xe4\xc7\xe4\xc7\x4b\xd5\x18\x8b\x17\x9d\xde\x3b\xae\xfb\x2c\xc3\x58\xed\x46\xa3\xdd\x6c\x34\x92\x3a\xcc\x18\x38\x50\x4b\xc1\xc8\x55\x28\x4e\x97\x4d\x74\x4e\x29\x2e\xd2\x1c\xae\xb0\x4b\x3d\xf9\x80\xa5\xa9\xc0\x5a\xf9\xb0\x6a\x22\x30\x4d\xc4\x24\xa7\x0f\x9c\x4e\xbb\x65\xcf\xc8\x70\x78\xa4\x7a\xb4\x0e\xb6\xd8\x4b\x9a\x4b\xec\xce\x20\x8f\x59\x83\xb9\xc0\x69\x72\xda\x03\xaa\xd3\x6a\x92\xad\x4e\x93\x4b\x90\x9a\x3c\xa5\xa5\x9e\xa6\xd8\x4d\x25\x45\xc5\x51\x51\x32\x07\x0a\x8b\xa3\x76\xcb\x9e\xf6\x10\xeb\x65\x4b\x9a\x4b\x2c\x4e\x23\x38\x15\x67\xa1\xd3\xb2\xaf\xe7\x51\x9b\x7b\x82\xf7\xb5\x6e\x1e\x6a\x2f\x6d\x2c\xb5\x33\xea\x17\x53\x4b\x04\xd3\x54\xa8\xff\xd4\x6f\x8e\xa9\x2d\x35\xb0\xbf\xef\x2f\x0a\x34\x7e\x7a\x2a\x0b\x0c\xc8\x4a\x57\xfe\x06\xa1\x29\x68\x1e\x5a\x8a\x56\xa3\x6b\xd0\xf5\xe8\x6e\xca\x72\xc8\x97\x53\xfc\x57\x29\x62\xa7\x0e\x2e\xa1\x94\x83\xb5\x87\x1c\x9e\xcb\xeb\x90\x53\x7d\x4d\x8a\x12\x85\x6a\x18\xd7\xb4\x55\x51\x5d\x72\xde\xd0\x27\xd9\xd3\x28\xc0\x6a\x82\x42\xcc\x05\xfa\xc6\x0b\x11\xca\x44\x2f\xa6\xd5\xd6\x97\x3f\x20\x4e\x2d\xaf\xd4\xd7\x25\xbf\xa1\x35\x84\xba\xb0\xaf\xd1\x6a\x6d\xf2\x86\xf9\x2f\x32\xa2\xbd\xe5\xfc\x84\xf9\x63\xe6\xcc\x19\x51\xd9\xe8\x1f\x38\x10\x32\xa5\x69\x9f\xc3\xe3\xf0\x39\x83\xa5\x75\x15\x8d\xe1\xaa\x88\x4e\xf4\x4a\x03\xe4\xb2\x8a\xa1\xf1\x0c\x48\x91\xd2\x9a\x96\x96\xaa\x72\xa5\xa4\x64\xc4\xa2\x85\x23\xca\xd8\x7f\x0d\xbc\x9f\xfc\x84\x3c\x4c\xec\x84\xf0\x01\xb7\xd2\xfd\xc3\xa5\x07\x96\x2e\x3d\x00\xf8\xe6\xa1\xd3\xa7\x0d\xbd\xe9\xdd\x67\x36\xac\x5d\xbb\xe1\x19\xd8\x33\x76\x49\x7b\x73\xed\xdc\x81\x7a\x08\x8c\x4a\x7f\xad\x4b\x8f\x1a\x95\x16\xbe\x4e\x8f\xc2\xff\x8a\x07\xdc\x1f\x7a\x8a\x8c\x89\x05\x6b\x46\xcc\x22\x4f\x28\xf1\x69\x30\xea\x8f\x25\x15\x76\x83\xcd\x64\x71\x78\x2a\x22\xe9\x92\x50\xa9\xc5\xc8\x17\x4a\x76\x4f\x45\x49\xa6\xa9\x74\x54\x64\x60\x6c\xc0\x60\x65\x94\x7d\xc1\xfe\x05\xb9\xa7\xb1\xb9\x64\xea\xfe\xed\x37\x0c\x50\xf0\x4f\xd4\x97\x2e\xd5\xc1\xe4\x73\xe7\xc8\x31\x7d\xed\xf4\xda\x11\x75\xe4\x89\x1b\x2c\xa3\xab\x13\xe4\x89\xdd\x38\xdc\x55\x58\x3b\x7a\x74\x2d\xfb\xf7\xda\xd1\xa3\xd5\xe1\xb8\xad\xf7\xdb\x61\x54\x80\x4c\xc8\x81\xbc\x28\x84\x14\x54\x8f\xc6\xa0\x19\xe8\x6d\xf4\x5b\x74\x1e\x38\xd0\x43\x18\x5a\x60\x1e\x42\x62\x3c\x0a\x69\x55\x18\x3b\x42\x8e\x88\x9c\x94\x13\xaa\xf8\x8d\x45\xb4\x13\x68\x27\x2e\x1e\x8d\x58\x43\x49\x21\x14\x75\x84\xa2\x21\x21\x24\xc6\x45\x6b\x5c\x4e\x83\xdd\xc4\x06\x95\x90\x23\x14\x15\x02\xd6\x80\x9c\x8e\xc7\x22\x8e\x90\x35\xee\xd0\x1e\xd6\xbb\x89\xcb\x1a\x4f\xc7\x65\x2a\xeb\x1d\x81\x64\x3a\xe6\x83\x40\xd2\x8f\x53\x3d\x9e\xd6\x90\x23\xaa\xfe\x51\x51\xa8\xf6\xbd\xf4\x4a\xe8\x9d\xe3\xd2\x80\xa0\x90\x0c\x38\x94\x72\x50\x0f\x81\xee\x41\x92\xe3\xc9\x78\x2c\xad\x76\x14\x1a\x4e\x7a\x5a\x4d\xb4\x9d\x17\xfc\xe0\x83\x10\xad\x1a\x6a\x52\x62\x54\x45\x47\xfd\x12\xa9\x2a\x86\x7a\xca\x31\x09\xfa\x27\xd3\x1a\xb2\x82\x56\x81\x93\x09\x45\xdb\x5f\xdf\x00\x8e\x50\xd0\x61\x97\x52\x7e\x48\x3b\xf8\x9e\x30\x9e\xea\x23\xf2\x61\x7e\x60\xac\x3d\xc5\x11\x4c\x26\x1a\xc0\x11\x54\x4c\x2c\xc5\xbe\x48\xd3\xd2\x49\x6e\x98\x56\x89\x07\x8e\x68\x7b\xf0\xa6\x9b\xa0\xe9\x8a\xe7\x4b\x26\x4e\x28\x85\x40\xd9\xf8\x71\xe5\xe4\x73\xf5\x17\xce\x4c\xab\xe8\x96\x06\xcd\xae\x9b\xbd\xcb\xb5\xc7\xd5\x76\x55\xc7\x95\x4b\x27\x8d\xc2\x77\x16\x58\xbd\xce\xa8\xb3\x54\xbf\x75\xec\x84\x8b\x08\xd8\xb1\xe3\xdf\x59\x41\x3e\x3a\x7b\xf6\xce\xdb\x6e\xe3\xde\xd3\xea\xd6\x4a\x57\xda\xf5\x81\xb8\xda\x8e\x7d\x06\x03\xc8\x72\xa6\x74\x92\xde\x55\xeb\xfa\x5d\xf0\xa9\x27\x5d\xa7\xe4\xf3\x43\x4a\x8e\x3b\x6b\x72\x37\x94\x97\xff\x54\x7a\x78\xb4\x56\x0d\x37\xc6\xfd\x27\xd3\x32\xf9\x49\x51\xed\xcf\xe4\xd6\xcf\x53\x31\xf2\x20\x4c\x49\x27\x7e\xe1\x68\x28\x3a\xa1\xd3\xb1\xd8\x5a\x57\x74\xb4\x31\x57\xe9\x94\x5c\xb6\x81\xce\xe0\x90\x81\x77\x0f\xa8\x27\xff\xe3\x72\xb8\xad\x03\x01\xb8\x42\xd9\xd6\x96\xb9\xab\xa6\x1e\x5b\x7f\xf5\xab\x3b\x6e\xbb\x8d\xfc\x79\x10\xfe\xd7\xc2\xad\x5b\x83\xc1\x9a\x58\x30\x51\xb2\x63\x43\x38\x54\x53\x13\xfa\xab\x33\x73\xcd\x35\x01\x57\xa4\x3c\xe2\x4a\x96\x6c\x5f\x1f\xae\x1f\x73\xdb\xcc\xcd\xbb\xdc\xd7\xba\x46\x6e\xdf\xdd\x22\x94\x99\x8b\x0a\xad\xbc\x27\xec\x9b\x39\x77\xc5\x15\x6b\x98\xc9\xcb\x73\xd7\x8e\x19\x53\x93\x4e\x8d\xbe\xf2\x6c\x63\x60\x48\x89\xaf\x09\xbe\xf2\x35\x2a\xcb\xab\xc9\x97\xef\xbd\xf7\xde\x7b\x8d\x8d\x60\x26\x17\x01\x9e\x79\x26\xf7\x9e\xdd\x6f\x37\x0a\x18\x66\x4c\x9f\x0e\xe6\x69\xd3\xba\x6b\xc1\x5c\x57\x93\x4e\xe5\x7e\xf6\xfb\xf4\x98\x31\x69\x7c\xa4\xa9\xa9\xaa\xaa\xba\xfa\x0a\x30\x4d\x96\x0b\x0b\x01\x37\x35\xd5\xd7\xc3\xe6\x8a\x8a\x8a\x0a\x49\x92\xa4\xb9\x73\x2b\x2a\x9e\x80\x3d\x6a\xcc\xdc\x74\x29\xff\xaf\xbe\x9e\x5c\xdb\xd0\x30\xcd\xb8\xf0\x0a\x56\x37\xc5\xe9\xec\x92\x4b\xf4\xfa\xa0\x2f\x55\x19\x70\x5c\x01\x66\x3f\x1c\x75\x96\xe8\xf5\x01\x7f\x52\x1f\x32\x4b\x06\x61\x1e\x98\xc1\x97\xbb\xaa\x16\xcc\xb5\x35\xe9\x14\x7e\x98\x7c\x09\xe6\xdc\x55\x93\xeb\x5d\x16\x83\xa0\x84\xa3\x65\x75\x2e\x8b\x1e\xf8\x88\x69\x41\xa8\xde\x65\x2c\x04\xae\x20\xe2\x57\x3d\xed\x2c\x8f\x07\x91\xaf\xce\x9c\x69\x6c\xdc\x7d\x7d\x03\x06\xc6\x60\xf5\x89\x4a\xc9\xfb\x17\x11\xa0\xd3\xa7\xd5\xf6\x59\xd0\xdb\x3e\x0b\x90\x8c\x42\xa8\x1e\x4d\x40\x57\xa2\xdd\xe8\x7e\x74\x02\x9d\x42\xaf\xe7\xd9\xa8\xf2\xeb\x44\x11\x3b\x1f\x12\xd4\x19\x41\xcc\x0f\xfd\xd7\x8f\x22\x14\x74\x44\x60\x78\xa9\x01\x62\x2d\xd0\x8c\xa9\x96\x8c\x13\x53\xd4\xbb\xdf\xee\x6d\xde\x61\x6f\x00\x75\x3a\x56\x0e\x41\x33\x50\x22\x7f\x6a\x1c\x20\x6b\x01\x69\xf8\x7f\x7e\x92\x5d\xbb\x43\x4c\x26\x68\x7c\x81\xc2\x9d\xa4\xc1\x04\xf9\x04\x4a\x97\xcb\x61\xfc\x59\x3c\xe2\x0b\xc5\x22\xde\x08\x63\xad\xa8\x28\xb6\xe2\x02\x9b\xe4\x76\xc2\x9c\x78\xd8\x17\x56\x7d\x2f\x1c\x1d\xd5\x7c\x48\xc4\x03\x41\xc7\xb7\xdb\xb1\x0d\x0a\x6d\x16\x89\x99\x3c\x0f\x92\xa5\xaa\x8f\x89\xf1\xb4\x0e\x5b\x30\xa4\xde\xdb\x68\x63\x8d\x43\x44\x78\x59\xc7\x8d\x2a\x10\x96\x56\x70\xd6\x91\x9c\x2e\x5a\x09\xe3\x8d\xa3\x0a\x04\x74\x11\xb6\x8e\x6a\xbe\xdf\x4e\x1f\x32\xbe\x90\xfd\xe6\x43\xdc\x43\xd4\x87\xf8\x1a\xad\xea\x43\x3e\x32\x8e\x28\xa0\x51\x07\x89\xf8\xfc\x70\xae\x2c\x1a\xb0\xe2\x02\xb1\x24\x2c\xac\xb9\x64\x5c\xbd\x3e\x52\x53\xec\x8d\xc4\x03\x1b\xcb\xfc\xb0\xac\x80\x75\x3c\x1c\x8e\xd1\xeb\x9b\x1a\x92\x22\x59\xcc\x1b\xc4\x2b\x75\x06\x06\xcf\xfd\x2d\x70\xbc\x21\x50\xb2\x7c\x78\x43\x9b\xd3\x5e\xa8\xb7\x80\xc3\xa0\x37\xdc\x73\xc0\xa2\xe7\xf0\x9a\x5d\xec\x2a\x9d\xd1\x00\xab\x6a\xf3\xb7\x18\xaf\xfa\xe6\x2d\x60\x61\x2d\x70\x1c\x4c\x05\xa4\x03\x73\x7a\x11\xc4\x90\x04\xcb\x0a\x64\xf8\xcd\x25\x5d\x31\x32\xf4\xeb\x8b\xcd\x28\x86\x86\xa1\x29\x68\x06\x5a\x8e\xae\x42\xfb\xd0\x41\xad\x1f\x0e\x05\xa3\xea\xe8\x97\x0b\xa5\x68\x2f\x4c\xfb\xdd\x7c\xb7\x2b\xe4\x11\xb9\xd5\xb1\xac\x42\xbb\xdd\x74\x0a\xd2\xa1\xa4\x99\x89\xe7\xb7\x51\x6a\x06\x5d\x1c\xed\x80\x85\x68\xc8\x1a\xb7\xa6\xe2\x31\x91\xf6\xe0\x74\x97\x6b\x34\x8f\x26\x99\xee\x9b\xc0\xd3\x00\x3e\x7f\x3f\x1d\xfe\x2a\xd1\xf8\x37\x30\x39\xf9\x26\x87\x18\x90\x6d\x3e\x6f\x1d\x3c\x75\x25\x1f\x8b\x9f\xff\xd3\xa0\xd6\x70\xb1\x52\x3f\xc8\x36\x78\xfc\xa8\xaa\x01\x03\x07\x47\x8b\x06\xf8\xc6\x17\xd9\x86\x75\x8c\x1b\x10\x87\xa8\xd8\xb1\xdd\x56\x65\x6d\xae\x50\x86\x17\x57\x17\x17\x96\xc1\x75\x66\x63\x71\xb5\xc1\xb0\xf3\x80\xbb\xd6\x52\x7d\xe0\x00\xbe\xb2\xb2\x64\x68\x26\xa9\xdb\x75\x20\x5c\x3c\x21\xde\x44\x2a\xaa\x06\x55\x55\x0d\x62\x1e\x1b\x10\x9b\xdd\xb1\xb2\x25\xbd\x74\x41\x83\xa5\x6e\x68\xb9\x5d\xe6\xbe\xc6\x97\xce\x92\x36\x0d\x89\x84\xf4\xe7\xfc\x93\xe7\x7d\xd6\x30\xd0\x65\x94\x4c\xee\xc0\xaa\x62\x25\xda\x56\x3f\xd0\x69\x92\x2d\x45\x2e\xdb\xea\xd2\x48\x29\x84\x56\xee\x71\xac\xd1\x2d\xfa\xf5\xc4\xb0\xbf\x60\xbd\x10\x7b\xc5\xb5\x8f\x29\xf6\xd7\x92\x52\x88\x15\x91\x47\xe1\xbf\x3e\xde\x5c\x97\xa8\xad\xce\x5d\xed\xba\xa3\xa0\x76\x20\xfc\x44\x7d\x73\x35\xf9\x9f\xd5\x2d\x99\x5d\x6b\xb2\x8d\xe9\x92\x45\x45\xa2\x58\x6d\xc2\x27\x2f\xf9\x70\x0c\x32\x5d\x44\xc2\x57\x3c\xa2\xed\xbc\x05\x21\xb0\xc9\x6a\x01\xd9\xf9\xa0\x12\xe5\x62\x09\xda\x96\xd5\x5e\x06\x24\x5e\xd0\xd0\xd8\x52\x2d\xa0\x24\x9b\xd9\x64\xc2\x96\xee\x59\x7c\x12\xfc\x20\x43\x4a\x92\x79\xa9\xe9\xcf\xed\x09\x92\x39\xf0\xde\xed\x00\xc8\x62\x69\x98\x54\xbc\x88\x8d\xeb\xc0\xf0\xf5\x63\x06\x8f\x6e\xa2\x0e\x0c\xcf\x8a\xb1\xf1\x53\x9b\xa2\x9f\xbf\xa0\xab\x1d\x5b\xab\xdb\xf2\x42\x12\x1e\x30\x78\x74\xf8\x38\xb9\xe7\xb5\x44\xfb\xd2\x03\xb7\x2f\x7d\xb4\x78\x52\x83\xc5\x32\x7c\x11\x9f\x31\x78\xf4\xe7\x8f\xe9\xb0\xa1\xc3\xe0\xd1\x7d\xbf\x38\x58\x36\xf3\xd6\x63\x5f\xed\xbb\x13\x38\xaf\x68\x2f\xa9\xad\x2d\xb1\x8b\xb6\xed\xb3\x60\x99\x0e\x1b\xb4\xfd\x6c\x7d\xf9\x90\x90\x82\x46\x23\xc4\xf6\x25\x3e\xae\x87\x3c\x35\xa3\x05\x7a\x73\x97\x0e\x28\x4c\xda\x06\xf2\xff\x43\xc6\x58\x2d\x2b\xc3\x73\xff\x62\x56\x94\xfd\x68\xf7\xac\xbb\xa6\x0f\x60\x3b\x7b\x32\x7a\x3b\xfe\xc7\x91\xa6\x95\x4d\x30\x78\xe2\x7f\xcc\xe8\x63\xf9\xcc\xc1\xff\xe0\xaf\xa7\xae\x6b\x99\xb7\x3c\x4e\xb2\x24\xa3\x65\x7c\xfb\x73\x60\x99\x4b\xee\x61\x8f\x76\xfc\xbf\x66\xbc\x17\xe3\x98\xcb\xf6\xea\xb9\xd2\x68\x86\xc6\x5d\x48\x45\xa8\x55\x43\x7b\xfa\x4f\xd7\x10\x88\x2a\xd1\x00\x2f\x70\x3d\xbc\x82\x5a\x03\x09\xf5\x70\x40\xa4\xb5\x75\x9c\x22\x50\xe5\x25\xfa\x76\x98\xa6\xfe\xee\xdc\x39\xe8\x1c\x20\x18\xc8\x8f\x0d\x02\xb3\xd2\x66\xea\xd0\x08\x1c\xa8\xc2\x11\x92\x6d\xe6\xd1\x25\x90\x29\x19\x6d\x6e\x83\xa4\xc9\x76\x08\x53\x55\x4e\x8e\xde\xfa\x1d\x6e\xe6\x2f\xeb\xf4\x18\xeb\x6f\xcf\x98\x6c\xdd\xed\x13\x36\xad\x9b\xc0\x3c\x43\x5f\xf3\x50\x24\x91\x88\x3c\x64\xeb\x87\x65\x5c\x41\x2d\x1d\x11\x68\x90\x43\x48\x83\x74\x61\x7c\xea\xc8\x29\xd8\xd4\xdf\x5a\xaa\x47\xad\x86\xbf\xcb\x06\x85\xdd\x3a\x7c\xed\xa6\xba\xb7\xc8\x9f\xc1\x72\x26\x38\x61\xd1\xf8\x5a\xcb\x7a\xcb\xce\x61\x37\x9c\x7c\xfa\xa6\xd6\x1b\xf4\xfc\x06\xde\xd0\xfd\x9f\x6c\x54\xe0\xed\x15\xb1\xd1\xe5\x12\x48\xef\x9c\x01\x8b\xde\x53\x3a\xac\x72\x85\xc5\xd2\x56\x5e\xf3\xf4\xfe\x3b\x5e\x19\x50\xd6\x26\xe8\xf5\x4c\xf9\x7f\xb2\x62\xe9\xaf\x87\x37\xa1\x79\x08\xd1\x3c\x98\xb0\x46\x27\x0a\x9c\xdd\x84\x85\xa0\x26\xd9\xf2\x4b\xbf\x36\x8a\x36\xd9\xa2\x31\x71\xca\x92\xc0\xd0\x0c\x37\xb3\x49\x0b\x0a\x04\x69\x5e\x55\x19\x29\x15\x69\x94\x6d\xd0\x0f\xae\x1c\x31\x6f\x2e\x9b\xdd\xb2\x79\x5e\xd3\xb2\xb9\x1d\x87\x26\xe1\xc4\x88\xab\x6f\x18\xc9\x8b\xc2\x9c\x6a\x2f\x97\xb8\x7f\xf6\xf7\x4f\xee\xfa\xed\xee\x29\x7b\x15\x5c\x00\x7a\x6e\x3d\xa7\xe3\xf0\x46\xce\x55\xec\xad\x9f\x3a\x68\x00\xf9\x01\xf9\xb0\xc7\x12\xfe\xd3\x93\x05\x6e\x5d\xa9\x0e\xb0\x61\x61\xd7\x6e\xca\xe3\x47\xf9\xf9\x60\x2a\x1c\xc5\xe7\x97\x6f\x6e\x5a\x7e\x64\xee\xaa\xcd\xbb\x5f\xb5\xae\x3c\x3e\x2f\x8e\x21\x19\x88\x0d\x9a\xfa\xe2\x89\x7b\xc1\x70\x70\x68\x46\xac\xe5\x0b\x0b\xb8\x82\xdc\xdd\x4e\x67\xd4\x0d\xfa\x68\xd3\xfa\xd1\x10\x86\x99\x3d\x45\x74\xb3\x1e\x17\xd4\x14\x16\x1a\xf5\x13\xa6\xab\x8f\x84\x5a\xf0\xbe\xbd\x99\x4c\xed\xb5\xdb\xa2\xeb\x7a\x21\x54\x82\x10\x92\x2c\x66\xa0\x5a\x7f\x3e\x58\x0d\xc0\x97\x03\x17\x15\x93\x89\x34\xe4\x95\xf6\x45\x90\x4e\xe9\x21\x0a\x0e\xbe\xf5\xf4\xec\x4f\x16\x1b\x0c\x3f\x37\xb8\x0d\x4b\x72\x87\x23\xc9\x33\x17\x51\x26\x1b\xc1\x33\x96\x68\x7e\x8b\x7f\x33\xab\xfb\x15\x9c\xe9\xcc\x75\xf2\xe8\x34\xf9\xd7\xac\xdf\x2c\x36\xb8\x0d\x3f\x37\xd0\xb8\xd9\x0c\xa0\x33\x49\x1a\x97\xfa\x2d\xfe\x64\xf6\x85\x0c\x8d\xdb\x99\xb7\x23\x23\x54\x0f\x59\x9a\xe7\xe8\x10\x90\xd0\x4b\xce\x49\x89\x1b\x24\x14\x0a\x56\xe1\xa4\x9f\x89\xc7\xd2\xcd\x2c\x3f\xa6\x6d\x49\x25\x79\x72\xf7\xdc\x4d\x5b\x7f\x34\x13\x6f\x6d\xe8\x7e\x36\xba\x67\x02\xb0\xe4\x1f\xff\x75\xf5\x0b\x6b\xeb\x85\xd6\xda\x66\x73\xa9\xc9\x35\x70\xc4\xc2\xc5\x3c\x9a\xd5\xd6\x32\x35\xb7\xef\xea\x19\xa7\xb6\x65\x27\xe2\xc1\xa9\xae\x7f\xb6\x2f\x97\x86\xbe\x4f\xfe\x3e\xeb\x81\x37\xd7\x73\xb1\x68\x30\x32\x68\x56\x43\xd8\x7c\x89\x3e\xb4\xb2\x17\x4d\x8f\x22\x54\xc7\x28\x86\xa6\x06\x71\x89\xe3\xf4\x0a\xab\xd5\x86\xb2\x54\xe6\x01\x8b\xfd\x58\x74\x04\xab\x20\xaa\x61\xc7\x0a\x14\xc2\xeb\xdb\x2f\xd4\x99\x4c\xaa\x01\xac\x81\xde\xff\xda\x8c\x46\xb3\xa6\x62\x93\x7d\x3a\xc5\x6f\x5e\x08\xe8\x3c\xaa\x1c\xab\x78\xfd\xe5\x21\x67\x89\x24\xf9\xc2\x63\xab\x2a\xc7\x86\xfd\x0e\x39\xea\x0c\x95\xfb\xbd\xca\xd8\xe9\x5a\x60\x90\x5e\x54\xe6\xe3\x54\x56\x8d\x0d\xfb\x24\xa9\x44\x8d\xf3\xcd\x5b\x68\xa8\xbf\x3c\xb4\x6a\x6c\x06\x50\xcf\xff\xcc\xd8\x55\x5d\x68\x58\x6d\x72\xa4\xe8\x0d\x7a\x45\x65\x3a\xfe\xce\x8b\x2c\xc9\x42\xd6\xeb\x71\x7a\x24\x93\x45\x74\xb9\xbd\x3e\x97\x4b\xb4\x98\x24\x8f\xd3\xe3\xa5\xbe\xd4\x05\x99\x4e\x2d\xd4\xeb\xd6\x42\x2f\x8b\xe8\x76\x79\xa4\xce\xb1\xab\xa0\x93\x64\x7a\x8e\x55\x8c\x65\xd4\x84\x91\x49\x5f\x85\xb3\xb8\xa8\x5e\xb9\xad\xfd\x3b\x2f\xb4\x36\x4f\xf5\x55\x9c\x3a\x0e\x0f\x38\x02\xd6\xb8\x55\x0f\x01\xab\x1e\x74\xe8\x6b\x94\xe5\x11\xa0\xf3\x59\xe8\xc4\x99\x2c\x8f\x2e\x64\x59\xd4\x9d\xc5\x19\x9c\xc9\x75\xf6\x72\xa3\x74\xd2\x7e\xd0\x82\x24\x84\xf4\xa0\xb1\x3e\x59\x6c\xe1\xb8\x18\xb0\x63\x41\x0c\x58\x63\xac\x8d\x41\x38\xb8\x94\xfc\xfe\xde\x9f\x69\xf2\xe6\x67\xcf\x31\xdc\xc6\xe5\x3f\xc8\xa1\x9f\xc1\xdc\xb7\xf1\xb5\xb9\x8f\x97\x6f\xec\x91\x42\x39\x74\x2f\xf9\xfd\x52\xfc\x00\x83\xde\x26\xf7\x5f\x92\xb6\xa2\x9e\xb4\xa9\x5d\x86\xda\xd2\xd4\xe6\x16\xa5\x2d\x0c\xa2\xda\xc2\x39\x4d\xaf\x80\xa2\x96\x4d\xb9\x3d\x06\xb7\xe1\x33\xd2\xd1\x89\x87\xab\x0e\x78\x77\x93\xc5\xea\x80\x27\x4c\x36\x2d\x0f\xe7\xc8\x28\x87\x95\xc6\xea\x89\xa4\xc5\x89\xda\xf2\x7c\x4b\x02\x62\xa7\xa0\x0e\x75\x24\x29\xfb\x19\x99\xd5\x6c\x86\xf9\x68\x15\xa3\x56\xc2\x3c\x68\x89\xb6\x47\x24\x10\xa4\x48\xc6\x38\x1e\xf3\xf3\x72\x1e\x6d\x9b\xa7\xa0\xae\xb2\x1f\xe4\x90\x1f\xcb\x82\x12\xa5\x03\x49\xae\xd0\x60\xf0\x27\xc2\x11\x18\xf2\x8b\xdb\x1b\x96\x8c\x6e\x8f\xd5\xf9\x6b\x0a\x8a\x1b\xa6\x6e\x1c\xdf\x71\x62\xe1\xfb\xf7\x9e\x1c\x57\xeb\x99\x68\xf6\xc1\x4e\x72\xf1\xd6\x7f\xec\x9d\x72\xcb\xab\x4b\xa6\xdc\xbc\x68\x4a\x7d\x43\x59\xbd\xbb\xe3\xba\x71\x6b\x95\x96\xf1\x53\xa6\x8e\xa8\x2d\x60\x1e\x5d\x39\x7a\xd2\x00\x28\x94\xfc\xec\x76\xb7\x57\x1e\x51\xd3\xc6\x64\xf8\x90\xaf\xd4\x63\x34\xcc\xf8\x72\xff\x4b\x91\xd4\x9c\xb1\xdb\xc6\x5c\xeb\x1d\xb7\x64\x6a\xc9\xca\xc7\x3b\x0e\xfd\x75\x4e\x4b\xf2\xce\x60\x18\xee\xbc\x0f\x60\xff\x92\x37\xee\x98\xa9\x34\xcf\x9b\x7f\xed\xda\xfd\xa9\xd7\xe6\x8e\x2d\x6b\x2c\x2e\x92\x2b\x1b\x96\xb4\x59\xac\x57\xfe\x80\x65\xe4\xb2\x02\x4f\x25\x77\x45\x8d\x03\x1c\x83\x2e\xe9\x0b\xa6\x50\x9d\x7d\x22\x5a\x85\xa3\x89\x9e\xe5\xab\x90\x24\xa7\x95\xa8\x86\x47\x62\xa7\xc8\xb7\x8c\x0f\x24\x6a\xb8\xca\xa9\x65\x24\x3b\x34\xd9\x9f\xee\x85\x2e\xa6\xcd\x5c\x88\x7f\x0b\x4e\xfd\x9d\x9f\x87\xc2\x25\x7a\x16\xd7\x84\x53\x56\xb0\x8b\xb3\xa2\x86\xc0\x90\xf8\xd8\x2d\xd8\x32\x77\xbe\xaf\x24\xe6\x81\x09\x0d\x73\xdb\xe4\xba\xe8\x90\x31\xd9\x09\x0b\x9e\x5a\xca\xb0\xb3\x4e\xac\x78\x76\x96\xbd\xa0\xb1\x6c\xcd\xb4\xb5\x77\xfe\x60\xf1\xaa\xab\xaa\x74\x21\xa9\x34\x9c\xae\x6d\x2f\x5b\x76\xe7\xe2\x4b\x78\x0c\x3e\xfd\xe1\x20\x83\x31\xe2\xc5\xc6\x02\x1c\xae\x36\x9b\xc3\x43\x53\x06\x9f\x7d\xed\x58\xc1\xd2\x31\xd5\xa7\x33\x7b\x4b\xdd\x5c\x7d\xdb\xcd\xd5\xb7\x2f\xdc\x30\xac\x66\xd5\x33\xf3\x61\xf9\x53\xab\xaf\xf4\x38\x57\x8c\x1d\x76\x62\xdd\x92\xa3\xcb\x36\x38\xe6\xd4\xcf\xa8\x6b\x8d\x7a\xf6\xe1\xdf\x5f\xba\xe1\x81\xc9\xeb\x78\x35\x0c\xd1\xf8\x65\xcc\xbb\xe1\x44\x15\x0e\x05\x24\x9b\x05\x0b\x81\x58\x33\xd8\x2c\x26\x1c\x0a\x04\xab\xb0\xa5\x19\xc7\x03\x31\x3f\xb0\xd9\xbc\x1d\xab\x76\x62\xa8\x55\x2c\xd9\xba\x61\xdf\xbe\x0d\xb0\x63\xf1\xf3\xd7\xff\x4c\xed\xdb\x72\xa8\xa7\x97\x63\x54\x17\x76\xf6\xdd\xd0\x73\x9a\x4e\xfe\x4e\xde\x24\x7f\x9f\x3e\xee\x7a\x78\xe8\xb2\xf1\x41\xbf\xfd\x84\x88\xa2\xe5\x23\x27\x68\x6f\xc7\xf9\xd4\x00\xdb\x6b\xd6\x6f\xf7\x43\xef\x7b\x16\xf6\xbe\x9b\x7d\xfc\x92\x37\x02\xc9\x3f\xba\x67\x0c\x71\xcb\x25\x89\xa1\xf2\x1f\x21\xbd\x7a\x32\x21\x1b\x72\xa2\x0a\x8a\xca\x15\x08\x2a\x2d\xa0\xd6\x7e\x8b\xda\x36\xa2\x71\x25\xca\x41\x40\x90\x64\x96\x82\xf2\x8b\x92\x66\xf2\x4c\xc7\x0d\xc5\xc8\x82\x8a\x51\x32\x91\x4a\x47\xd5\x6e\x54\xad\x37\xc8\x82\xd4\x39\x1b\xa5\xa7\x8d\x07\x1c\x81\x68\xde\x15\x93\x21\x15\x8f\xe1\x0b\xe4\xa7\x25\x21\xe7\xe9\x81\xc3\x76\x9d\x3e\xbd\x6b\xed\x63\x0f\x3e\x6b\xab\x83\xd5\x50\x4c\x8a\xaf\x58\xe2\xe0\xb8\xd3\xbb\x1a\x9b\x4e\x98\x0d\x92\xd9\x11\xb2\x9d\x98\x75\x1a\x74\xd0\x48\xce\x93\x9b\xc8\xf9\x31\x6d\x03\xc9\xfd\xb6\xc0\x2b\x72\xf7\xd1\x53\xe4\x3c\x08\xa7\xd6\x2c\xb8\x8e\x9a\x56\x42\x16\x9e\x98\xf4\xb1\x66\x18\x19\xb0\x43\xc1\x8c\x05\xa7\x20\xdb\x56\xdc\x55\x74\x9a\x7c\x7d\xfa\x96\xbf\x4e\x6a\xb9\x0d\xb2\xbb\x16\xdd\xfe\x13\xd0\x9d\x76\x92\x6e\x39\x61\x2a\xf0\x01\x3b\x67\xc7\xae\xd3\x40\x9f\x0b\xc2\xa9\xb9\x3f\x6c\x99\x47\xca\xdd\x3f\xf8\x10\x04\x58\x03\x42\xfa\x69\x25\xa1\x64\xb3\x4a\x42\xf1\x92\x55\x15\xfd\xf7\x55\x0b\xb4\xe6\x94\xa3\x91\x7d\x08\x5c\x3d\xfa\x64\xb1\x07\x8c\x8a\xe1\xa9\x2e\x18\x5f\xc2\x23\x1c\xba\x1c\xdf\xca\x9a\x48\x8b\xcd\x10\x2e\x66\x25\x59\xec\xd1\x0f\xb3\x9a\xee\xd6\x37\x8c\x0b\xc9\xdd\x4b\xe5\x10\x37\x8c\x53\xfc\xac\xe2\x57\xfe\xdb\x6b\xcf\x65\xed\x5e\xaf\x1d\x67\xed\x70\x5c\x8d\x9c\x43\x23\x97\x8e\xcc\xba\x16\xe9\x4f\x82\x07\x26\x83\xe7\xa4\x7e\x89\x0c\x05\xfd\xf4\xbf\xb8\x10\xb2\xb2\xcf\x27\x93\xac\xbf\xaa\x0a\x5f\x59\xe2\xf5\x96\x78\x73\x33\x72\x87\xb3\xc9\x91\x23\x93\x59\xed\x17\xcf\x58\xb5\x12\x7e\x3a\x7a\x7d\x63\xe3\xfa\xd1\xa4\x7e\x21\xed\x17\xf6\xea\x10\xf7\x35\x2a\x40\x55\x68\xbc\xb6\xdb\x24\x90\xff\x76\x5c\x22\xaa\xe1\x58\xc5\x03\x4a\x38\xbf\x8d\x20\xa0\x29\xb2\x02\x12\x1b\x8f\x35\x63\x50\x27\x06\x9a\x11\x65\x28\x88\xa2\x9a\xfc\x68\x00\x3a\xe0\x0c\xc7\x63\x48\x8e\xc7\x24\xee\xe9\x58\x38\x37\x28\x1c\x8b\x85\xf1\x0b\x61\xd0\xc9\xdd\x65\xaa\x9b\xb9\x61\x2a\xf9\xe0\x87\x27\xc9\x2f\x1e\x95\x99\x5f\xaa\x1e\xdd\x57\x4d\x85\xe8\x0f\x77\x7d\x75\x62\x31\xac\x8d\x85\x77\x5a\x77\x7e\x48\xde\x79\xe8\x9f\x64\xd9\x15\xcf\xab\xa1\xbb\xac\x3b\x3f\x84\x9a\xa3\xff\x80\xdb\xaf\x38\x1d\x8e\xe1\xdf\xb5\xc5\xe3\x6d\xf1\xc9\x93\x27\xc6\x42\xe1\xd8\xf7\x8e\x3e\x4a\xde\x3b\xd9\xe3\x5e\xf4\xe8\x97\xb0\x2b\x14\x9b\x34\xe9\x21\xf2\xce\x47\x3b\xc1\x70\x36\x16\xa6\x57\x50\xf3\xd1\x4e\xf2\xcf\xb3\x31\x84\x78\x54\x70\x11\xb1\xff\xc8\x7f\x5b\x0f\xaa\x40\xeb\x28\xa6\x38\x23\xdb\x92\x89\x50\x90\xee\x95\xae\xc2\x60\x17\x55\xf1\xc9\xa8\x4d\x82\xa1\xe4\xd4\xa9\x64\x82\xf6\x2b\x3c\x93\x57\x69\xa5\xac\x89\x2a\xd0\x00\xb2\x78\x87\xdd\xcf\xa6\x63\x14\x3e\x49\x83\x24\x77\xd8\x25\x87\xc0\x3b\x94\x28\x1f\xca\x53\xaf\x25\x13\x69\x29\xdf\xf1\xd0\xe5\x8a\xbe\x8d\xc2\x9a\xa9\xb8\x28\xc9\xcd\x1c\x55\x1b\x32\x7e\xc6\x61\xc7\x1a\x9a\x3f\x66\x4e\xad\x59\x77\x58\xa9\x23\x37\xf8\x99\x48\xb0\xb0\x2c\x44\xde\xba\xdf\x5a\x6c\x6e\xdc\x34\x72\x80\x68\x1f\xb3\x68\x57\xd0\x24\x17\x1b\x95\xba\x41\x3e\x7b\xfc\x3e\x57\xc3\xf9\x7b\x7f\x77\xf0\x4e\xec\xb0\xd7\x92\xd7\xd7\x46\x0a\x0b\xcb\x5b\xa7\x4c\x1d\xef\xb3\x08\x4e\x8b\x99\xf5\xb6\x36\x15\x67\xa6\x45\x18\xf6\x3a\xbd\x2e\x80\xc7\xa5\xc6\x3f\x1c\x48\xe8\x46\xd5\x16\xfa\x1e\xf5\x95\xa7\xd6\x4c\x9a\xed\xdd\xdc\xe4\x2b\x7d\x70\xfc\xe8\x9d\x2f\xf3\x98\xaf\x2a\x1d\xdc\x3c\x26\x32\x74\xfc\xfd\x4d\x63\x14\xd3\xec\x63\xdd\x77\xae\x5c\x75\xfb\x07\xec\xb5\xe4\x19\x07\xfc\x78\x70\x6d\xf7\xaa\xb1\xba\x32\x17\x16\x04\x66\xf7\x3c\x32\xcd\xc0\xc1\x9c\x0f\x43\xdd\xff\x08\x1f\xb9\xc1\x6d\x72\x8e\x2e\x1e\x3b\x2f\x93\x22\xf7\x96\xb6\xdc\xf2\x83\x63\x0f\x03\x2e\x1f\xd0\x6e\xab\x49\x16\x70\xfe\x60\xc2\x2b\xb2\x2c\x16\xc5\xb0\xd7\x2d\x39\xab\xf6\x0e\x29\x5a\xeb\x2f\x2c\xc4\x86\xb7\xb1\x60\x4a\x0e\xbf\x67\x5c\x30\x90\x29\x5c\x6c\x2d\x0c\x7e\x3c\x2d\xbd\x60\x8b\x7b\x84\xbf\x79\xb3\x19\xde\x5e\x32\x76\x41\xee\x39\x2b\x6f\xd9\x76\xe5\x2d\x0b\x86\xcd\x1b\xbe\x9c\xb4\x99\x9b\x67\xcf\xca\x1c\x20\xdd\x2f\x5c\x59\x56\x07\xc6\x3e\xbe\x3f\xb5\xff\x73\xa3\x14\xc5\x89\x47\x10\xef\xdf\x99\x85\xf2\xbd\x9f\xda\xd1\x45\xbe\x33\x24\x15\x49\xa8\x83\xd7\xa8\x12\x28\x16\x4c\x58\xfb\x82\xb2\x1f\xcb\x12\x1b\x28\x4e\x37\xe3\x74\x33\x88\xd6\x80\x95\xb1\xbe\x63\x7a\x78\xc7\x03\xa7\x9e\xbd\xe1\xb6\xa3\xc6\x33\x5c\x53\xbc\xae\xc5\xe0\x4e\x45\xe7\xe0\x5f\xbe\x6d\x3a\xda\xe3\xff\x26\xdb\x1c\x53\xfd\x93\xd1\x9a\x34\xac\x28\xaa\xe4\xcd\x5e\x3c\x39\x77\x6f\xee\x7b\x93\x38\x97\x95\xaf\xf4\xfb\x2b\x79\x9b\xcc\x57\xc0\x1e\x10\xf1\xbc\x29\x9c\xd3\xca\x55\xf9\x3b\xbf\x46\xd8\x72\xdf\x8f\xfe\xf8\xda\xcb\xff\x73\xe2\x50\xa6\x6d\xd3\xba\x01\xc3\x06\x87\xf7\x5d\xee\xd1\xfe\xd4\x3b\xaf\x35\xe9\x0a\x6d\xb8\xa5\x85\x35\x1b\x75\x8d\xaf\xfe\xec\xdd\x57\x9b\x74\x26\x13\x17\x28\x1e\xc8\x9a\x4c\xfa\xc6\x9f\x32\x67\x2e\xa8\x62\xab\xa7\x5f\xe1\x3a\xb8\x2c\xf2\xa1\x06\xcd\xe2\x31\x0f\x90\xae\xf4\x63\x74\xa4\x2d\x9d\x32\x0e\x9b\xa0\xa7\xb3\xef\x61\x76\x4c\xf5\x5c\x30\xe7\x28\xb7\xe4\xa1\x55\xe4\x0b\xea\xb0\x99\xe0\xdd\x3d\x9f\xee\x86\xec\xee\x4f\xf7\x90\x01\xea\xf5\x21\x93\x0d\x2c\xab\x0e\x51\x07\x73\x33\xb1\xd0\x38\x5f\xac\x3a\xd4\x45\x81\xbd\xb9\x8c\xc9\xb6\xfb\x53\x18\xde\x7d\xf3\x9e\x4f\x77\xdb\x4c\x8c\x36\x89\x47\x87\x56\x31\xab\xb4\x3d\x20\x6c\xbf\x3d\x20\xcd\xd4\x82\x07\x5d\x6e\x1d\xcb\x69\x58\xd5\x42\x0f\x60\x75\x03\xc4\x7a\x82\xbe\xed\x2a\x92\xec\x35\xd4\xa1\x61\x79\xbc\xf5\xcb\x46\x34\x45\x1e\xe7\x1b\x4e\xaf\xd7\xf9\x86\xd3\x43\xa4\x81\xc9\xdd\xad\x5e\x6f\xeb\x8e\xe4\x40\x47\x5a\xf2\xb8\x66\x3b\xbd\x8e\x94\xe4\x75\xce\x75\x7a\xa4\xb4\x03\x8f\x1a\x94\x24\x5f\x27\x07\x49\x69\x47\x51\xcb\x8b\xc9\x41\x5b\xf7\x76\x74\xbd\xdb\xb1\x77\x6f\x07\x3b\xa0\x63\x2f\x7e\x6a\x8d\xfa\x14\xf5\x87\x5c\x48\x0e\x4c\x24\x06\x26\x2f\x48\xd2\x1f\x54\xbf\x3f\xf4\x9e\xd7\xdf\x9d\x1c\x38\x30\x49\x16\x3a\x1c\x4f\x96\x0d\xc4\xf7\xf6\xdd\xbd\xb7\x3f\x77\x21\x46\x7a\x6a\x45\x18\xf0\x40\x40\xfd\xaf\xff\xc6\xbe\xc2\x5b\xc9\x07\xb7\x7e\x06\x69\x72\x9a\x0c\x23\xa7\x21\x0d\xdb\xf0\xd2\x63\xeb\xbb\x33\xeb\x8f\x1d\x5b\xcf\x74\xae\x3f\x06\x2f\xe3\x68\xf7\x1d\x2c\xea\x46\x50\x8f\x8f\xf4\xf9\x1f\x53\xab\x83\xdc\x8b\xc7\x38\x0a\x4d\x42\x73\xd1\x62\xb4\x02\xad\x41\x1b\xd1\x36\xb4\x0b\x5d\x87\x6e\x41\x07\xd0\x3d\xe8\x10\xfa\x01\x7a\x08\x1d\x43\x8f\xa2\x67\xd0\x73\xe8\x05\xf4\x12\x3a\xa3\x61\x1d\x33\x74\x47\x28\x93\xd7\x82\x06\x78\xf5\xd0\xe4\x1a\x43\x37\xdc\x32\x1a\xfa\x81\x98\x50\xbd\xc4\xbc\x6c\x0b\xa4\xd4\x43\x83\x9d\x10\x29\x8e\xae\xe8\x07\x08\x40\x08\x02\xa9\x18\x50\x5f\x39\x6d\x8d\xf2\x02\x04\xe4\x48\x80\x0f\x42\x2a\x1d\x15\x42\x69\x06\x64\x48\x8b\x01\x48\x71\x71\x08\x58\x65\x89\x09\xa4\xc1\x0c\xf1\xa4\x20\x59\xed\xea\x4d\xb2\x35\x6d\x95\xa1\x1a\x04\x6b\x3a\xca\x47\x42\x9c\xec\xd0\xe3\x48\xd4\xca\x09\x71\x90\xc5\x6a\xac\x34\x01\xa3\x44\xf5\x38\xc9\x88\x21\x11\x84\x16\xa0\x74\x74\x05\x20\xa7\x74\xc8\x6d\x7f\x8b\x71\xd9\x5f\x62\x02\x4e\x97\x85\xac\xb2\x26\xac\x64\xb5\xd5\x2d\x07\xd9\x97\xec\x2e\xe6\x6d\xbb\xcb\x63\x7f\x15\x82\x3f\x63\x83\xb2\xdb\x06\x37\x58\x52\x16\xb8\xc9\xa6\x86\xbe\x23\x17\x0b\xcf\x89\xae\xee\x28\xec\x26\xc7\xbe\x47\x8e\xc1\x62\x5b\x59\xf7\x0c\xc0\xef\x9a\x4f\x3f\x67\xb4\xe0\xa3\x64\xcb\x0b\xb8\x8c\xfc\xd1\x52\x81\x1f\x05\x36\x63\xf5\x4b\xdd\xe4\x57\x2d\xb0\xc1\x32\x90\x4c\x82\x51\xba\xee\x55\x1c\x4c\x26\xfb\x58\x93\x0d\xf6\x67\xc8\x99\x7b\x5f\x7a\xf0\x28\x0b\xba\x47\xfc\x77\x41\xe9\x6f\x7e\xc3\xbe\xf5\x22\xcf\x6c\xb0\xe4\x6e\x7d\x9f\xfc\x17\xa4\xa1\x24\x77\xf5\x5e\xf8\x43\xd9\x24\x88\xfc\x65\x17\x03\x92\xee\x57\x9c\x8e\x8c\x84\x54\x77\xe7\x83\x0f\x3e\xf8\x20\xdb\x34\x60\x47\xc9\x3b\x98\x79\x64\xfb\x28\x0e\x6f\x77\x14\xb1\xe4\x1e\xbd\xde\x5e\xc4\x92\x47\x75\x3a\x39\x68\xb3\xdb\xed\x01\xa7\xae\x10\xc6\xb0\x45\x76\xbd\x1e\xe6\x73\x45\x76\x47\x11\x0b\x53\x81\x85\xb0\x19\x96\x19\x74\xce\x80\xc3\xe1\x70\x04\x9c\x7c\x21\xb9\x1b\x02\x92\xd1\x44\x4e\xb3\x45\xdd\x6f\xc1\x3c\x72\x9f\x85\xf1\xb2\x7a\x03\x47\xee\xe4\x5f\x85\x19\x2f\xeb\x30\x74\xbe\xf6\x9a\xa5\x6b\x22\xcf\xb5\x8e\x59\x02\x06\xf2\x56\x86\xdc\xec\x85\x14\x79\x98\x35\xc3\x3c\x72\x92\xe7\x60\xe3\x20\x18\x78\xe4\xa3\xe7\x4f\xea\x98\x24\x60\xb0\x18\x4f\x82\xb1\x80\xbc\x7e\x2f\xd4\xff\xe9\x63\x1d\xf9\x7a\xc4\xeb\xb8\xf0\xdc\x27\xe5\xe4\x15\xf2\x12\xc4\xcd\x37\x92\x4f\x3f\xaa\x80\xbd\x5d\x78\x15\x07\x0e\xa3\x05\xc3\x46\x60\x49\x0d\x39\x05\xff\xfc\x0d\xf9\x43\xf7\x75\xe4\xf7\xe0\xf9\xdd\xef\xda\x60\x89\x81\x05\x33\x94\xe4\xee\x19\xcf\x68\xeb\x25\x14\xff\xdf\x88\x3c\x08\xd1\xea\xdf\xdb\x18\x22\xd1\xfe\x86\x78\x4f\xef\xc4\x7f\x80\x8e\xa7\x77\x76\xff\x7d\xe7\xd3\xec\xbb\x8f\x65\xaa\x88\xb7\x2a\x33\xb0\x92\x99\xba\xf3\x45\x58\x78\x61\xd0\xae\x17\x5e\xd8\x15\x7e\x12\x1e\xae\x1a\x34\xa8\x8a\xd8\xab\x06\x6b\xf2\x66\x27\x8f\xb8\x6b\x90\x81\x32\x7b\x97\x22\x04\x2c\x62\xd4\x81\x4b\x38\x1e\xe3\x24\x59\xbd\x88\xda\x10\xd8\x50\x44\xbb\xe0\x94\x28\x2f\xa4\x50\x9a\x17\x24\xe6\x08\xf9\x31\x09\x6e\xb0\xbf\x05\x1d\xef\x8e\x87\xf9\xb3\x86\x92\xab\x73\xaf\xac\x9c\xd5\xbc\x0a\xa7\xc8\x83\x6b\xb1\x15\xae\x28\x31\x91\x0f\x49\x66\xc3\x22\xe6\x9d\x97\x4e\xec\x39\xb8\x02\x46\xbc\xe9\x18\x3b\x90\x5b\xba\x89\xf8\xc8\x4b\xd3\xa6\xbc\x0b\x73\xdf\xba\x7e\xe0\xf4\xd5\xb9\x97\xc8\xd5\xc3\xa6\xc3\x0e\x5c\xdf\xd5\x08\xf3\xb1\x7d\xfd\xcc\x45\x1b\x49\x33\xf9\xb5\xc9\x1e\x1b\x38\x51\x7e\x0b\x46\x5e\x79\xe7\xae\x47\xf3\xb2\x41\x87\xd8\x7f\x51\xdb\x5f\x55\x92\x8b\x1a\xcb\x0f\xd5\x90\x94\x83\x98\x0a\xc4\xe4\x54\xbc\x18\x62\x12\x1d\xae\x50\x7f\x46\x9d\xe8\xca\xa9\xb4\x46\x4e\x27\x50\x76\x28\x39\x25\x0b\x0b\x0e\xee\xdc\xfa\xda\x4b\xbf\xbd\xed\xb6\xdf\xbe\xf4\x5a\x76\x0b\x77\xf0\x1c\xe0\xcf\xee\xbe\xfb\x33\xc0\xe4\xcb\xed\x6f\xdf\xbb\xe5\x91\x57\xce\x1d\x38\x70\xee\x95\x47\xb6\x2c\xd9\xf4\xd8\xf4\x37\x8e\x1f\xff\x2a\xfd\x8b\xdb\xee\xfc\xf8\xb1\x43\x6b\xb6\xfc\x6c\xdd\xcf\x0e\x1f\x7f\x83\xdd\xd8\xa5\xab\x9b\x71\xdb\x6d\x33\xea\xd8\xaf\xb7\x2d\x5d\xda\x75\xa4\x6e\x20\x93\x1b\x7d\xe3\x8d\xa3\xbb\x99\xf2\x8a\xd0\xf2\xe5\x41\x66\x1f\x7b\xc7\xc1\x41\xdd\x13\xe2\xb1\x85\xcb\x38\x6d\x1c\x7d\x58\x87\xb8\x19\xbd\xfb\x2d\x66\xfe\xef\xd7\xa1\xbf\x71\xdd\x07\xb0\xda\x0f\x69\x85\xca\x16\x3f\x70\x1f\xfa\xed\xb3\xec\x7e\xfa\x43\x3e\xf5\xdb\x17\xa8\xee\x05\x76\x3f\xf9\xf0\xdb\xdd\xdc\xde\x3f\x1d\xe9\x0a\x1f\xf9\xd3\xd6\x25\x86\xef\xaf\x5e\x38\xba\x12\xca\x9e\xbf\xbd\xfb\x56\xd3\x9e\xe3\x87\xf1\x47\x0e\xbf\xdf\x91\x0b\xa9\x11\xb1\xa8\xfe\xe6\xfe\xac\xfe\xc2\x0f\xd5\x5f\x32\x81\xba\x97\x52\xf7\x01\xbb\xdf\x7f\xe4\xc8\x9f\xfe\x74\xe4\xaa\x57\x62\xc1\xe8\xea\xef\x0f\x7e\xfa\xf3\x5b\xbb\x6f\x1f\x54\x1b\xf8\x35\x42\x28\x8a\xd0\xc5\x66\x5e\xdb\x3b\xa3\xf1\xb4\x39\x28\x53\x5b\x80\x72\xb5\x55\xa2\x1a\x94\x44\x75\xa8\x09\x0d\x44\x43\xd0\x70\x34\x0a\x8d\x43\x93\xd0\x34\x34\x0b\xcd\x45\x8b\xd0\x32\xb4\x12\xad\x45\x1b\xd0\xd5\x68\x1b\xda\x8d\xae\x43\x37\xa2\x5b\xd0\xed\xe8\x2e\x74\x18\xbd\x8f\x90\x35\x60\xd5\x43\x84\xfe\x26\x03\x0e\xd1\x11\x4a\xca\x97\x1f\x69\x59\xe8\x7f\xb4\xc0\xa5\x07\x38\x42\xc9\xc0\xbf\x39\xd4\xf0\xb8\x23\xfd\x1d\xa1\x72\x52\x0d\x15\xbe\xe5\x88\xf4\x8c\xb0\x28\xf8\x8d\x1f\xa7\x34\x73\xb4\x50\xaf\x3d\x1d\xf0\x8a\x86\xf5\x2f\xc9\xf1\x74\x15\x1f\x0a\x9a\x30\x8f\xba\xbf\xce\xe9\xb8\x7b\x2e\xbc\x86\x6f\xc7\x0f\x5e\x78\x6d\x5c\xa4\xe7\x5f\x8b\x79\x89\xb9\xc8\xbc\xc4\xec\xa7\xe7\xc5\xe6\x31\x4b\xcc\x4b\x36\x2e\x31\x2f\xd9\x94\x3f\x77\x0f\x5c\x03\xf6\xb5\xe0\x58\x0b\xf6\x35\xf4\x2f\xef\xee\x7a\x26\xb2\xf6\x81\xcb\xfd\xbf\x18\xbd\xb6\xf7\xc1\x91\xdc\xde\xed\xcf\x3c\xb3\x7d\xc7\xd3\x4f\x93\xb3\xd1\xc6\xd6\xc6\xe8\xaa\xb9\x6e\xa6\x68\xf0\x1c\x5f\xba\x36\x94\x1e\x3b\x26\x5d\x5a\xe2\x08\x0e\x37\x33\x7e\x26\xac\xf7\x9b\xdc\x52\xa1\x2f\x9d\x0c\xf0\xe8\xc2\xcd\xe4\x04\x8c\x1f\xc8\xdc\xd7\x3d\x8f\x7c\xc0\x95\xbc\xfe\x3a\xf9\xe5\xda\xb5\xb7\xf5\xfb\xfb\x5e\xb0\x3a\x60\x0a\x56\x05\xd5\xc3\x18\xa8\x0a\x06\xab\x02\xd5\xb3\xab\x82\x55\xea\x31\xab\x3a\x58\xc5\xfe\x2c\x7c\xd9\x3f\x72\x7c\xcc\xda\x4b\x7d\xd6\x8e\x09\x5f\xf2\xcc\xdb\xd6\xae\x0d\x3d\xbd\x43\x4b\x2d\x5c\x13\x2e\xd5\x73\x20\x3a\x6a\xe2\x2d\x65\x06\xa9\xa2\xa8\xaa\x5a\x80\x02\xbb\xc3\xc9\x4b\x72\x3d\x98\x99\x02\x86\xc7\x06\xb9\xb2\x87\x5f\x60\xad\x0e\x71\x37\x52\xbc\x87\xb2\xcb\xe6\xb0\xdf\xb6\x39\x2f\x4f\x23\xab\x0e\x34\xe6\xdc\x7f\xee\xbe\xfb\xce\x31\xe4\xbe\x73\xf7\xdf\x7f\x0e\xce\xb5\x54\x7e\xfd\xab\xca\x96\x96\x4a\x78\xb4\x22\x83\xbf\xca\x54\xc0\xa3\x95\x2d\xb0\x57\x0d\xbb\x4f\x8d\xb8\x6a\xf5\x7d\x6c\xed\x85\xd3\x15\x2d\x2d\x15\x5c\xab\xfa\xfb\xfd\xef\x57\xb4\xb4\xe4\xc7\xa1\x25\x3a\xc4\x9e\x45\x08\x4d\x47\x08\xb8\x1e\xb8\x23\xa1\x4f\x3f\x4f\x17\x9a\x1d\x76\x41\x9d\x47\xaa\xa3\x08\xd4\x1f\x22\x29\x6f\x39\x90\xd4\x94\x1c\x3d\xa6\xec\xda\x0d\x29\xee\x00\xb0\xb7\xfd\xfc\x83\xfb\x26\xdd\xbd\x79\xcd\xe2\x45\x6b\x36\xde\x39\xe1\xee\x1f\xbf\x7b\xff\xfc\x5f\x4d\xe2\x8a\xbd\x3a\x93\xa3\x71\x01\xf9\xc7\xb6\xdd\x9f\xec\x01\xcf\xdb\x1b\xdf\xbf\xef\x96\xdd\xd7\x1e\x9e\xbe\x70\xf7\xf6\x39\xfe\x45\x56\x7b\x91\xf5\xbf\xee\xaf\x5f\xd6\x14\xd3\x99\x1d\xae\x86\xc7\x66\xbf\x48\xd8\x3a\xe6\xd4\x9b\xaf\xec\xbf\xf7\x67\xe9\x99\x1b\x77\xed\xde\x38\x33\xfd\xf4\x5d\xf7\x3e\x3b\xb2\x89\xf5\x89\x0e\x93\x33\x39\x75\xf9\x55\xbf\xbc\xf6\x2d\xb0\x4c\xd9\xf7\xd0\xd1\x7d\x53\xae\x5e\x30\x27\x1b\xf1\xdb\x6d\xa3\xed\xf7\xbf\x1b\xa9\x88\x38\xcc\xa2\x67\xf0\xf0\xae\x17\x22\x3e\x73\x7e\x2c\x9b\xe5\x10\xdd\x4b\x50\x8e\xa6\xd0\x52\x2f\xd7\x38\x29\x7d\x40\x4d\xc5\x1a\x80\x82\x8c\x34\x01\x45\xc5\xd0\xf8\x38\xf2\x67\x91\x32\x2c\x50\x5e\x81\x40\x4c\xea\x11\x75\xcd\x90\x66\x7a\xd6\x54\xfc\xac\x3a\x0d\x67\x3b\x15\x77\x56\x49\x28\x1a\x87\x2f\x75\xe4\xfe\xa0\xd9\x90\x6b\xa6\xe4\x67\x8a\x5d\x5d\x7f\x02\x81\x73\x32\x77\xaa\x51\xba\x91\x5b\x91\x22\xf8\xe4\x9b\xda\xb2\x89\xc5\x65\x2e\x60\x05\x60\x4f\xba\x15\xe6\xd2\xa7\xa8\x8e\x5c\x7f\xc3\x72\xa6\x93\x20\x67\x84\xd9\x2c\xf8\x9c\x06\xcb\x00\x25\xa1\x28\x6e\x53\xbc\x95\x65\xd2\x4a\x42\x31\xda\x8a\xa4\x88\xa0\xf4\xe1\xda\xab\xf9\xd6\xec\xf1\x27\x68\xb5\xcd\xdc\x63\x46\x4f\x19\xd0\x64\x90\x62\x69\xf8\xbf\xe6\x99\x43\x4a\x42\xbc\x55\x49\x28\xb7\x8a\x09\x45\x04\x24\x26\x44\x40\xb9\x5b\xff\xcf\xb9\x16\xf7\x43\x44\x0d\x20\xbf\xde\x2f\x2a\x09\xf1\x22\x12\xd5\xe7\x05\xff\xf7\x79\xd7\x78\x34\xb4\xf1\x3b\x87\xf4\xa8\x90\xee\x35\x53\x10\x12\xf5\x4c\x20\x2a\x06\xf4\x38\x10\x09\x30\x74\x40\x1f\xd1\x54\xe6\x94\xd9\x23\x0d\x6a\xde\xde\xc3\x2b\xc9\x7b\xf0\x19\xcc\xca\xb5\x5d\xf7\x26\xb9\x40\xce\x31\x39\xbc\x92\x3c\xdf\xfd\x32\x3e\xf6\x26\xf9\x0b\x5e\x09\xd3\xc9\x39\x72\x01\xa6\x41\xd6\x84\x2d\xdd\x19\x5b\xbd\xad\x3b\x63\xc1\x26\xc8\xda\x02\x6c\x36\xc0\xa0\xdc\x22\x7c\x57\x77\x37\xc3\x52\xbe\x8d\xee\xff\xc6\x77\x51\x07\x64\x17\x12\x64\xab\xb6\x76\x23\xbb\x9d\x45\xd6\x6a\x1b\x46\x6e\xc4\x20\xf1\x22\x12\xfe\xcc\x23\x34\x1c\xdd\x81\x0e\x21\xc4\xa5\x62\x45\x20\x44\x29\x14\xf5\xbf\xff\x49\x6b\x9b\x63\xbf\xf3\x27\xd2\x3f\x92\x95\x51\x52\x2d\x60\x8d\x27\x03\xc9\x80\x23\xe0\x88\x5b\x65\x3f\x08\x8c\xb5\x2f\xf6\x7f\x7a\x25\x38\x22\x5c\x52\xed\x66\x04\x51\x4c\x88\xd9\xe9\x13\x26\xd8\x52\xb6\x09\x13\xc4\x84\xf8\x9d\x3f\x6a\xa4\x7f\x17\x3e\xe1\x42\x65\xbf\x58\x99\x9f\x5b\xed\xfe\x93\x59\x4d\x0d\x94\x3d\xe9\xb7\x5b\x7f\x2e\xf6\x7f\xd2\xbf\x7d\x1d\x64\x20\x0b\xd9\x2c\x41\xa2\xa8\x3d\x50\xfc\xae\xe3\xdf\x84\x6e\x52\x43\xc7\x8f\x17\xc5\xf1\x19\x88\x40\xbd\xbb\xc9\x50\x0f\xe5\xd9\x6c\x36\x4b\xde\xaf\x37\x34\xb9\xc9\x4f\xc9\xaf\x6d\xa2\xa8\x46\xf8\x37\x0f\x61\xdd\x1a\xe4\x66\x4f\xfb\xe3\x7a\xb8\x5c\x06\xa3\xf5\x08\x05\xc4\x6a\x00\xd1\x0c\x90\x27\x81\x0c\xe6\xb9\x20\x35\x1a\x47\x7d\x3c\xd6\xcc\x34\x40\xcc\xcf\xc4\x63\xcd\x3a\x6d\x63\x74\x6f\xdb\x63\xd2\xd1\xb8\x2a\x68\x35\x61\x9b\x56\x3b\xf3\x18\x05\x69\x01\x0a\xe4\x2a\x09\x71\xc1\xcf\xe0\x4c\x47\x87\x5a\x10\xd9\x0e\x40\x18\x1b\x26\xb7\xcd\x15\xbc\xc2\xdc\xb6\xc9\x06\x6a\xa7\x5b\x80\x71\x01\x53\xc8\x19\x0b\xac\x36\xd9\x18\xae\x12\x0d\xc6\x82\xc2\x02\xa3\x41\xac\x0a\x1b\x65\x9b\xb5\xc0\xc8\x15\x32\x05\x34\x16\x3c\xb0\x7f\x53\xf7\x81\x4d\xfb\xf5\xbe\xaa\x71\xc9\xe9\xbf\x94\xf0\xcb\x3f\xb7\x0e\x09\x17\x57\xf8\x97\x37\x2e\xf7\x57\x14\x87\x87\x58\x7f\xfe\xb2\xe0\xf9\xe5\xf8\x96\x69\x65\x16\xe8\xcc\x66\x72\x59\x9c\xcd\x64\x71\x8c\xc5\x3a\x11\x63\x51\x87\x59\x9b\x9e\x11\x04\x36\xa0\x73\xeb\xec\x42\x21\xcb\xba\x42\x41\x97\x2b\x18\x72\xb1\x6c\xa1\x60\xd7\xb9\x75\x01\x56\x10\x18\x7d\xf7\x83\x9b\xae\xbf\x7e\x53\xd3\x9a\xeb\xae\x9c\xeb\xfe\x30\x93\x29\xb4\x97\xd4\xd6\x95\x35\xdf\x5c\x16\x69\x6e\x8e\x94\xdd\xdc\x5c\x56\x57\x5b\x32\x6e\xcc\x27\x81\x6d\x87\xbe\x97\xd7\x1b\xe4\x38\x84\xda\xd1\x4c\xb4\x0a\x21\x90\x4c\x38\x5a\x05\x51\x85\x2a\x4a\xe8\x12\x68\xa8\xdf\xc2\xb7\xd2\xbb\x27\xdc\x8f\xe5\x40\x3c\x1a\x0a\x2a\x69\xaa\x6b\x57\xab\x7b\x7e\x51\x82\x2f\x07\x39\x25\xfb\x01\x62\xa9\x74\x40\xa3\x48\xa7\xcb\xed\x25\x90\xfa\xc6\x1a\xbb\x2e\x57\xd8\xba\xe3\xb9\x45\xdf\xff\xb3\xa5\x70\xcc\x98\xa1\x1d\x57\x46\x3c\x17\xd1\x90\xde\x65\xf0\xf6\x76\xe7\xd5\x3f\xa2\xdb\xc1\xb2\xa3\xaf\xbd\xa2\xc2\x87\xd1\xda\x49\x1f\xfb\x15\x8e\x55\x9c\xb9\x80\xbd\x6d\x8d\xe8\x59\xa0\x06\x3e\xb1\x76\xe7\xcd\xdf\x7b\xe3\xeb\xf7\xd6\x3e\x26\x93\x9f\x86\xec\x36\xeb\xad\xd5\x15\xbb\x4e\x9f\xe6\xb2\xa0\x3b\x7d\xe9\x9a\x3b\xfc\x7d\xd1\x8b\x7b\xdb\x85\x82\x4f\x0f\xad\x7c\x75\xe8\xb2\xb1\x9f\xee\xf0\x44\x7b\x56\xc6\x3d\x95\x57\x2a\x09\xc5\x13\xf3\x49\xd9\x4a\xbf\xec\xf7\x2e\x59\x23\x2a\xee\xac\x5b\x39\xde\xe2\x71\x9f\xcd\x75\xdd\xb2\xb2\xa8\xb8\x08\x1c\xc6\xd3\xe4\xeb\xd3\xa7\x2f\x5f\x6e\xcf\xf3\x1b\x71\x59\xee\x1c\x4a\xa2\x31\x6a\x4f\x18\xb0\x9b\x70\x71\x15\xd6\xf0\x34\x24\x59\xe2\x05\x13\x2b\xf8\xd9\x58\x33\x93\xa6\xc0\x1a\x74\x0b\x23\xa3\xad\x55\xf5\xb7\x38\xe9\xb5\xcb\xcb\xf7\x18\x5c\xf6\xea\xb7\xfe\x41\x2e\xfc\xe3\xad\xab\x07\x5d\xb5\x71\xa8\xbb\x82\xe5\x8a\xdc\xf5\x1d\x75\x25\x66\x60\x06\xcc\xdb\xf1\xe2\x7b\x2f\xee\x98\x37\x80\x01\x73\x49\x5d\x47\xbd\xbb\x88\x63\x2b\xdc\x43\x37\x5e\x35\x88\x64\x15\x77\x46\xdb\xe2\x94\x71\x2b\x23\x93\x90\x4d\x8e\xec\xa0\x5c\x57\x2d\x0b\x9a\x8a\x8a\x9a\x16\xb4\xd4\x8c\x49\x85\x0a\xb9\x22\xb7\xbb\x82\x35\x78\x9c\xb2\x85\x2d\x28\x0a\xf9\xed\x76\x7f\xb8\xa8\x90\x35\x39\x65\x8f\x81\xad\x70\xbb\x8b\xb8\xc2\x50\x6a\x0c\x33\x86\x64\xdd\x0a\xc9\x6a\xfa\x08\xf5\x48\x8e\x1c\x09\x47\x35\x4e\x2c\xdc\xcb\x59\xe3\xa1\xd6\x53\x01\x13\x98\x41\xc3\xb0\x8c\x06\x62\xa9\xb4\x07\x34\x2e\x17\x51\x96\xc0\x2e\x04\xa2\x55\x20\xf0\x42\x01\x54\x41\x90\x17\x98\x40\x1e\x23\x12\xcb\xcd\x4c\x5c\xed\xf4\xa0\x86\x33\xb0\x4c\xee\x16\x5b\xc2\x96\xbb\x99\xb3\xc0\x6a\x29\xc4\xb5\xbd\xc0\x07\x25\x47\x90\xdf\x5f\x6b\xc3\xd1\x45\xe4\x7b\x2b\x75\x21\xb1\xb2\x60\xfb\x4f\xf8\x50\x45\x90\xbb\x8a\x4c\x5b\x44\xce\x35\x6f\x5f\x39\x36\x1c\x1e\xbb\x72\x7b\xf3\x39\x82\x11\xaf\x67\xd8\xdc\x51\x9b\x0d\x4f\xc7\x36\x8f\x03\x5c\xb9\x05\x76\xb7\xdb\x0e\xbf\x5f\x15\x82\xe3\xb7\x1c\xfc\xc8\x6a\xc7\x5c\x29\x19\x8f\x4f\xd8\xdd\x1e\x07\x19\x70\xf0\x96\x0f\xbf\x2e\x1f\x9e\x09\x87\x33\xc3\xcb\xbf\x56\xc7\x70\xf8\x22\x62\xb3\x5c\x37\xdd\x5b\x83\xc0\x8e\x04\x6b\xbc\xa7\x56\xf7\x2e\xd4\xf5\xe2\xed\x5a\xab\x00\x53\xf6\x59\xd6\x16\xb6\x20\xaa\x2f\x62\xb3\xe4\xec\xd9\x73\x7d\xa0\x31\x9a\xf3\xc0\xdf\xb6\x17\x16\xec\xfb\x64\xf7\x31\x28\x3b\xd1\x8d\xb4\x1a\x47\xce\x93\x9b\x98\xce\x8f\xc8\x29\x27\xe9\xee\x17\x55\x33\x27\x62\x2d\x27\xc0\x76\xf0\xda\x3f\xec\x37\x8b\xfb\xc9\xe7\x36\x4d\x9b\xa3\xde\xd5\x5f\x0f\x1a\x45\xd5\x97\x71\x42\x52\x36\x64\x1c\xac\xc2\x54\x01\x2c\x43\x1e\x08\x27\xae\xa5\x0d\x59\xb8\x4e\xb7\x42\x5f\x40\x76\x6c\x9d\x71\xf0\xfd\xcf\xdf\x3f\x38\x63\xc6\xc1\xf7\xd7\x9d\xb9\x07\xb6\x92\x2e\xba\x58\xb9\xa8\x27\x69\xe4\x3c\x97\x55\xdc\x44\x33\x5b\xe2\xc9\xf6\x7b\xce\xac\xd3\x62\xab\x37\x6d\x85\xad\xf4\x31\x17\xb2\x7d\x79\xe9\xb5\x45\x61\x55\xd9\xdc\xa4\xed\x9d\xb3\x39\xec\x48\x70\xfc\x9b\x22\x4c\x2a\x88\x5a\x9c\x45\x15\x55\x7e\xc8\x7e\x55\x6a\x50\x49\x22\xf0\x3d\x89\x66\x9a\x6f\x39\x49\xce\x9e\xd5\x10\x1b\xe8\x6b\x35\xe7\x59\x72\xf6\xe4\x2d\x87\x5b\x78\xd1\x3a\xc4\xa1\xab\xe8\xfc\x53\x67\x85\xce\xd7\x64\x15\xf9\x96\xdc\x0f\xfa\x32\xc1\xfe\x64\x18\xf9\x9f\x87\xd4\x52\xde\xd5\xef\x56\xea\xdc\xe5\x84\xa1\x1f\x3d\x04\x8e\x61\x1d\x27\x2d\x1e\xfb\xd2\x1d\x3b\x96\xda\x3d\x96\x93\x5d\x1f\xf6\xcb\x12\xad\x0f\xb4\xaf\x19\x84\x46\x20\x04\x3d\x06\xef\x3d\xd9\x10\xa4\xff\x98\x3f\xb5\x8a\xa4\x90\x2a\x04\x22\x6a\xfb\xee\xc9\x14\x8b\x6c\x26\x28\xee\xf9\x1a\x5b\xbf\x2d\x7f\xb7\xff\x6d\x47\xa1\x05\x8a\xcf\xac\xff\x70\x2a\xba\x78\xad\xc9\x96\xdb\xd3\xef\xdb\x9c\x33\xd9\x14\x37\xa1\x55\xe6\xda\x8b\xf7\xbd\xfe\xed\x19\xb4\x9c\x00\xeb\xc1\x37\xa1\x5c\x36\x0d\x6a\x23\x36\x53\x57\x47\xff\xaf\x85\x7b\xf7\x96\x2e\x43\x6b\xff\x6f\x79\x53\xbf\x5d\x3a\x2a\xf4\x42\x0e\x3b\x2e\x59\x6d\xef\xe9\x0c\xd2\xbd\x48\xc5\xa9\xe2\x4b\x0b\x81\xfb\xcf\x85\x70\x96\x9c\xdd\x9a\x58\xa0\x77\x1b\x06\x18\x40\xbf\x64\x25\x0d\x51\xdc\x50\xac\x06\xee\x5e\x3a\x39\x1f\x30\xbd\xee\x3e\xd8\x7f\xdf\xff\xb1\x94\xd4\x6a\xf0\xfa\x7d\xc9\x95\x06\xd0\x55\xe8\x3c\x86\xb5\xab\xae\xa5\x75\xbe\x27\x5d\xcb\x66\xe7\x03\xae\xa8\xdd\xba\xf5\x1b\xa5\x88\x10\xa7\xd6\x11\x9e\x70\x39\x54\x8b\x9a\xd1\x48\x34\x9e\x6a\x66\x24\xcc\x7f\x9b\xe8\x08\x7c\x87\x10\x51\x6b\x88\x9c\x92\x25\x04\x29\x4b\x94\xb7\x30\x31\x3a\x20\x51\x68\xc7\x0b\x56\x25\xca\x0b\x56\x88\x21\x0b\x0a\x05\x05\x3a\x2c\xe1\x49\xe1\xf6\xbf\x1d\xe8\x27\x31\x08\xba\x4c\xdc\x58\x21\xfa\xd6\xdb\x8f\x3c\xf2\xf6\x5b\x10\xed\xbe\x35\x9b\xcd\x76\xae\x5d\x74\xf7\xdd\x8b\xd6\xd2\x9e\x15\x9f\xbf\x6e\xc3\x86\xeb\x70\xe6\x94\x9a\x8b\x53\x34\x80\xf9\xeb\x41\xf2\x97\x13\x96\x4b\x44\xd1\x37\x05\xd2\xdb\x50\x29\x3a\xd6\xae\x75\x88\xe4\x17\xb9\x37\x76\xc2\xf2\x9d\x3b\xc9\x6d\xe4\x9f\x75\x87\x7f\x7b\xee\xa1\x3a\xad\xc8\x49\x16\x58\xf3\x98\x31\x66\xd2\x0d\x79\xd9\x50\xf7\xd0\xb9\xdf\x1e\xae\x53\xc7\x6d\x70\x91\x17\xd4\xfa\xd6\x86\xc6\xa2\xd9\x68\xf9\xb7\xd5\x39\x3f\x08\x3c\x12\xf8\x70\xb4\x8a\x49\x6b\x5d\x67\xa4\xd7\x0e\xf3\xd2\xca\x29\xe7\x1b\x14\x24\xe8\x40\x45\x6e\x86\x88\x5d\x92\x95\x64\x02\xa5\xab\xd4\x01\x0b\xc4\x50\x32\xa1\x44\x69\x25\xf6\x03\x7f\x49\x4d\x6b\x6f\x91\x8a\xc8\x57\x4f\xff\x9c\x3c\x38\x78\xdd\xbb\xb7\x8e\xd5\xe9\xaf\xff\xed\x9e\xf5\xbf\x9e\x46\xeb\x4f\xff\x78\x0d\xc1\xa7\xf6\x53\x4f\x82\xd8\x07\x3e\x60\x1f\xf8\xa0\x3b\xfb\xf1\x61\x06\x4c\x67\x92\x1f\xed\x39\x45\xce\x33\x9d\xa7\x40\xf8\xf8\x30\x43\xbe\x3a\x93\xfc\x88\xed\xe8\x5f\xd7\xe6\xfc\x25\xfb\x14\xe9\x76\xfb\x3e\x78\x91\x5f\xf4\xe0\xc7\x1b\xf6\x7c\x7e\xbb\x59\x6b\x83\x99\xfe\xb1\x46\xcc\xd1\xaf\x25\x36\x13\x39\x64\x57\x5c\x17\x1e\xa2\x3f\x47\xbb\x65\x9f\xff\xe7\xd0\x12\xd9\xb8\x9f\x9c\xef\x16\x40\x38\x75\xb4\x5b\xf6\x16\xfd\x9c\xbc\x14\xd9\xb8\x1f\xb1\x88\xcf\xeb\x35\x46\xa0\xb1\x68\x26\x5a\xfc\x6f\xca\x30\xca\xff\xbf\x09\x26\x4a\x37\xa2\x15\x25\xad\x7b\x74\xa8\x97\x56\x2c\x6a\xed\xeb\xad\x73\x16\x41\xe2\xb3\x97\x15\x61\x31\xf9\xd7\x8f\x7e\xf3\xec\xba\x7d\xdf\x68\xb3\x07\xcf\x5f\x23\xbb\xc0\xf8\xec\xb9\x67\xf7\x9f\x78\x3d\xdf\x2a\x51\x36\x9b\xcd\x65\x41\x38\xb5\x6e\xc1\xdd\x77\x2f\x58\x77\x8a\xa9\xd3\x2a\x1f\xbd\xbc\xb4\x9d\xce\xf9\x4b\xf6\x49\xd2\xed\x09\x6e\x19\x6d\xfe\x66\x63\xb5\x9e\x82\xe0\x03\xcf\x81\xd9\x17\xdc\x32\x97\xb6\xc6\xff\xce\x57\x43\x58\xa9\x56\xbf\xba\x87\xa0\xf3\xa1\xba\xee\xde\xaa\x47\x32\x0f\xd5\x5d\x62\x3b\xd4\x40\x91\xe3\xfb\xf7\x99\x42\xaf\xb1\xa4\x70\x69\xef\x99\xee\xb3\x98\xfc\xce\x7e\xf4\xfd\x1b\xf4\xfa\x2a\xbd\xdb\x70\xc3\xe8\x4b\xfb\xd3\xd1\xc7\x35\xff\xe3\xef\xff\xfb\x7e\xf5\x97\x37\x18\xdc\xfa\x2a\xbd\xfe\xc6\x31\x97\xf6\xaf\xa3\x8f\x6b\xfe\xc7\xdf\xff\x8e\x7e\x16\x5f\x64\x69\x3f\x5b\x47\xf9\x1c\x25\xe4\xb0\x63\x96\xaa\x75\x6d\xa9\x74\xb2\xef\x23\x0b\x1a\xa8\x93\x96\x8d\x9e\x7c\xf6\x55\x0b\x9c\xcf\x0f\xce\x9e\x85\xe8\x09\xf2\xcb\x63\xbb\x3f\xd9\x57\xa0\x4a\x16\xaa\xfc\x3c\x34\x53\x4b\xc4\x1b\x62\x42\x7c\x43\xcb\xcf\x4c\x2d\xe0\x7c\x5f\x6e\x98\x2d\x4e\x72\xea\xa3\x87\xc8\xe7\xfb\x45\xf3\xfe\x3f\x5c\x7b\x10\x6c\x27\x2c\xda\x67\x3b\x3c\x53\xbb\xe7\x75\x51\x7c\x5d\x7b\xd0\xcc\xc3\x34\xa0\x2b\x7b\x69\x3f\xc4\x22\x24\x64\xd9\xad\x3d\x79\xa1\x28\xe8\x5a\xaa\xfb\x89\x4b\x1e\x85\x82\xe1\xfc\x68\x4b\x92\xe3\xc9\x1e\x25\x68\xa0\x07\x8c\xaa\xe7\xdb\x08\x2b\x44\x91\x7c\xa0\xf7\xe8\x2b\x0d\x86\x53\xe4\x83\xbc\x8c\xff\x8e\x34\x82\x72\xca\x60\xa8\xd4\x7b\xf4\x5d\x99\xbe\x2c\xe1\x15\x62\x42\x24\x1f\x68\x01\xa7\x34\x29\x78\x96\x9c\x3d\x01\x65\xbd\xe5\xa3\x79\x9e\xd2\xde\xd2\xfd\xe7\x6f\xf4\xab\xf4\xdb\xc8\xa8\x28\x3f\x86\xec\x05\x82\x43\xea\x8c\x20\xe6\xc7\xbd\xc3\x00\x75\xb8\x48\x53\x72\x96\x9c\xcd\x7f\xfc\x9c\xd0\xaf\x74\xe9\x00\x31\x77\x0f\xb5\x09\x9f\xaf\xf6\x54\xf9\x5a\x92\x3b\x73\xd9\x3b\x11\x62\xb3\x6c\x16\x09\x48\x46\x08\xe5\x07\xa3\xa8\xb7\x3a\xc7\xfc\xc0\x22\x72\xbe\x77\x1c\xb9\xa7\xaf\xb6\x7e\xfe\xfe\x41\xe8\xd7\x67\xe2\x64\x9f\xff\x8c\x19\x07\x51\x3f\x1c\xb6\x70\x3f\xae\x4d\x6b\x3c\x1d\x52\x87\xef\x69\x6a\x4a\xe8\x83\x90\x23\x6e\xed\x05\x8e\x7b\x24\x14\x8b\x85\xc8\xa6\x57\xfd\xbf\xaf\x6e\xdd\xdc\xb2\x76\xef\x83\xaf\xbd\x96\x0b\xa8\x7e\x5c\x36\x16\xba\x70\x2c\x14\xc3\x13\xfe\x78\x5b\x6d\x2d\xbc\xa3\x3f\xb4\xff\x91\x3f\xe6\x7e\x18\x0b\x71\x93\x43\x31\x94\x7f\x17\xa7\xca\xb7\x76\x84\xac\x09\x75\x5e\xc0\x4a\x94\x74\x34\xa8\x44\x4d\xbc\x19\xa8\x21\xa3\x2d\xdd\xb7\xec\xae\xd9\x82\xb3\x74\xd1\x94\x02\x9b\x6b\x5a\xdb\x2a\x66\xe4\xae\xe3\x3f\x5d\x74\x1f\x58\x8e\x29\xe3\xd7\x1f\x5f\xd4\x7a\xad\xcf\x10\x2e\xf0\x4b\x65\xb1\x88\x49\x6f\x2e\x9f\x2e\x14\x2f\x1e\xdb\xd4\x3a\x75\x7a\x26\x3d\xbb\xa5\xc6\x63\xfc\xf5\x63\xaf\x91\xbf\xbb\x7c\x2e\xbf\x84\xcd\xf1\x31\xe5\x12\xf3\xc8\xf2\x17\x6f\x5a\x9c\xd8\x4d\x0e\x75\x3c\x73\x6c\xfb\xa8\x4c\x6d\xf4\xd6\xf2\x2b\xca\xc7\x0f\x8f\x71\x86\x7b\x8b\x66\xfe\x1e\xa6\xfb\x07\x2e\x9e\xb0\x7f\x5c\xf3\xa0\x0b\xcd\x2d\x13\x62\x93\x17\xaf\x5b\x52\xfd\xc3\x97\x48\xee\xd5\x8a\xf1\x03\xca\xf5\xde\xe9\x8c\x79\xfc\xb2\x15\x3d\xeb\xd2\x9b\x79\xc4\x5d\x8b\xca\x51\x33\x1a\x87\x10\xd2\x90\x49\xa8\xed\x39\x9d\x67\xa7\x35\x3a\x32\x89\x5a\x23\x02\xcd\x10\xc5\x19\x92\xe2\x31\xa6\x3f\xce\xad\x90\x96\x6c\x3d\x30\x64\xa1\x60\x94\x13\xa9\xf1\x11\xf3\xa6\xfb\x61\x0e\x5b\x2d\x57\x56\xd7\xed\x9e\x77\x73\xfb\x30\x60\x86\x3a\xbd\xbc\x53\x10\xcd\x3a\x5d\x6c\x08\x17\x6c\xad\x9d\x53\x68\x30\xaf\xda\xf6\xd9\xd1\xf9\xf3\x8f\x7e\x46\x3e\x3b\x3a\x7f\xe3\x98\xaf\xee\x0b\x42\x0c\xe4\x37\x36\x6e\x7c\x83\x7c\x76\xd7\x8f\x8f\x91\x39\x7b\x97\x6f\x7c\x03\xc7\xa6\xea\x39\x43\xa0\x3c\x9a\x6c\xae\xdc\xbf\x6a\xd9\x14\xdd\x8c\xc1\x12\x63\x74\xd8\xf7\x0a\x8e\xe1\x06\x41\x37\x3c\x93\x1c\x20\x90\x31\xf9\x87\xcc\x3f\xfa\xd9\xb6\x33\x87\x3f\x1b\xb5\x98\x5b\xa8\x3e\x84\xbc\x4d\x3e\x7b\x63\xe3\xec\x6b\xe1\xf6\xc7\x7f\x71\x17\xc8\x6f\x50\x5e\x97\x3c\xfe\x98\x86\x17\x24\xd2\x35\xe2\x28\x2a\x57\x67\x2c\xe9\x40\x32\x60\x0d\x24\x03\xbd\x5b\x95\xfa\xb9\x6d\xbd\x38\x23\x94\x8f\x86\x1e\x59\x16\x75\x23\xf5\xe0\x8b\x6b\xc7\xd6\xd6\x8e\xbd\xe0\xec\x77\xa1\xfd\xdd\x79\x1e\x09\x48\x3b\xb2\x14\x94\xe6\x4e\x1a\xc0\x16\xf7\xb8\xb0\x16\x33\x57\x4c\xb2\x90\xc5\xa8\xef\xb7\x57\xef\x48\xb1\xb8\xcb\xd1\x68\x84\x50\xb1\x62\x49\x15\x4b\x16\xc8\x0f\x61\xfb\x59\x91\xf4\xf4\x03\x81\x1e\xeb\x11\x4a\x70\xee\xe8\x59\x4c\xe2\xe2\x3d\x33\x98\x78\x4c\xa6\xcc\x78\x73\xc8\xcb\x9f\x7c\x02\xcd\x9f\xe0\x0c\x74\x18\x45\xd1\x48\x0e\x89\xc6\x4e\xa3\x48\x0e\xa9\x17\xd0\x41\x2f\x72\xc5\xed\x09\x40\xad\x8b\xba\x0f\x6c\xda\x2f\x38\x8a\x53\x6d\x0b\x9a\x44\xfb\x98\x3b\x1e\xbf\x63\x8c\x5d\xdc\x35\xe9\x37\x89\x76\x9c\xcd\x03\xfc\x93\xfb\xbf\x79\xb7\xf6\xdc\x5c\x67\xa2\xfd\x2f\xb1\xeb\x37\x25\x17\xac\x9b\x3f\x67\x70\x89\xb5\xa9\xa9\xa9\xc9\xda\xd1\x9e\xe8\xb1\x89\x16\xfe\x45\xf3\x17\x47\x93\xfb\xe5\x4f\xad\x89\x66\xd0\xd0\x32\x34\x2c\xc0\x64\xa2\x85\x36\xb1\x16\xa0\xb4\x7c\x1a\x39\x9f\x5a\x5f\x39\x81\xc2\x2d\xf4\xcf\xa8\x54\x4c\xb3\x49\x07\x5f\x7d\xf9\xfc\xd1\x79\xbd\x7e\xaf\xde\x68\xd2\x9f\x3f\xaf\x37\x19\xf5\x7b\xf5\xaa\xe3\x32\x9f\x9c\xe3\x47\x91\xc8\x04\x87\x7c\x49\x86\xef\x86\x11\x77\xdb\x45\xaf\xcf\xeb\x8e\xf4\xe6\x37\xf7\x9b\xef\x7e\x48\x9f\xcf\x8f\x22\xa9\x64\x64\x02\xd3\x97\xf9\xcd\x9b\xad\xbc\xa7\x2a\x90\x8a\xf4\xb3\x8b\xb5\x21\x37\x95\x5f\x74\xa8\xa4\xd9\xe9\xe7\x3f\x61\x4f\xd5\x0b\xf4\x5a\xd2\x00\xe2\x3b\xdd\xca\x45\x74\x01\x5d\x44\x74\x11\x08\x67\x0e\xbc\x77\xe0\xc0\x7b\xdc\xe4\x4f\xee\xcf\x65\xdc\x0a\x46\x8a\x9b\x64\x40\x15\xf3\x14\xeb\x8c\x48\x6a\xe8\x81\xcc\xfd\x9f\x28\x6e\x92\xed\xc3\xd2\x55\xe5\x98\x44\xad\x5c\x98\xb8\x23\x20\x04\x1c\x01\xbd\x5a\xd7\xa3\x81\x64\x9c\xa1\x26\x2f\x62\x88\x47\x9d\x9d\xe4\x2f\x69\x18\x4e\x16\x90\x83\xe4\x20\x59\x00\xc3\xd3\xe4\x2f\x9d\x9d\x80\x60\x30\x6c\x86\xc1\x04\x2d\xff\x15\x8f\x48\xa6\x33\xdb\xd9\xdd\xc9\xa8\x27\xe8\xcc\x21\x06\x75\x65\xa0\x8f\x57\x1b\xe5\xfb\x9a\x90\x2a\x9f\x59\x55\x3e\x0b\xb2\x44\x3f\x55\x8b\x46\xab\x1d\x8e\xdb\x7a\x98\x45\xad\x01\x2b\xab\x8e\xfb\xbb\x9e\x7c\xdf\x62\x91\xba\xce\x49\x16\xcb\xfb\x4f\x76\x81\x70\xea\x0b\x4a\xe2\xc4\xa0\xae\x2c\x8f\x9e\xdb\xdd\x9d\xdd\xf1\x0c\xf7\x86\xb9\xa4\xc4\xfc\x06\xf7\xcc\x0e\x26\xbb\xfb\xb9\x0b\x9d\x94\xb3\x09\xde\xc5\x88\xa0\x4b\x79\xa6\xb4\x77\x97\x6b\xab\x11\xdf\xfe\x7e\xdc\xef\xfd\xe8\x3f\xa6\xe5\xb7\x1a\x67\x69\x26\x77\x8e\x21\x1a\xa5\x69\x26\xd7\xf9\x1d\xc9\xd2\xa8\x5e\xe1\x65\x35\x59\xb9\xfe\x17\x3d\xba\x9a\xeb\x05\xc4\xad\xa7\xfc\x2b\x5e\x8a\x79\x63\xa5\x1d\x44\x9e\xce\x3b\x1e\x93\x41\x92\xf5\xd8\x6a\xe7\x83\xd1\x88\xda\x57\xeb\x41\xf3\xc4\x93\x5c\x4e\xab\x85\x54\x3b\x7c\x76\xd1\xe4\x87\x8b\x4c\x06\x4b\xb9\xcf\xd9\x65\xde\x01\x32\x19\x8a\x5d\xb9\x8b\x15\x64\x33\xb4\x5a\x43\xa6\x42\xec\x63\xd9\x19\x5d\xcb\x5c\x21\xdd\x67\x86\x6a\x99\xbd\xca\xee\x35\x5f\x44\xcc\xa2\xee\xfb\xc0\x80\xdb\xba\x7e\xeb\x2a\x32\x7e\xc8\xfc\x9e\xe9\x7e\x71\x28\xde\x8c\xcd\x5e\x9e\x7c\x85\x2f\xc1\x57\x37\x5f\x8e\xaf\x1e\xb0\x5e\x8e\xa9\x7e\x01\x5d\x86\xa4\xce\x1e\xd3\xac\xdf\x9c\x68\xe2\x45\x5e\xf7\x03\xee\x62\x7e\x9f\x72\x35\x6a\x45\xa3\x50\x37\xf0\x60\x03\x0f\x44\x20\x06\x8d\x30\x14\xc6\xc1\x6c\x58\x0e\x1b\xe0\x09\x78\x19\xce\xc2\x67\x40\xb0\x11\x21\xce\x04\x14\x53\x2d\x95\x4e\x49\x9c\x1f\x34\x26\xe6\xa8\xc2\xa7\xa9\x9b\x92\x9a\xf1\x5a\x9c\x64\x42\x8d\x03\xf1\xa0\x90\x07\xd7\x89\xe6\xd5\x99\x09\x25\x5d\x05\x42\x33\xf6\x03\x48\x82\xe4\x90\xb4\x27\xb2\x11\x4a\x52\x9d\x4e\xa5\x15\x75\x72\x91\xff\x4d\x68\xf3\x5b\x39\x99\xef\xf6\x52\xe9\x66\x2c\xc9\x71\xb5\xab\x6b\x86\xb4\x12\x55\xa2\x89\x74\x55\xfe\xbe\x94\x24\xdb\xfd\x8c\x2c\xa9\x8f\x10\x28\xc6\x52\x15\x1b\x0d\x83\x24\x4b\xe9\x78\x33\xd3\x02\xcd\x20\x6b\x4b\xaa\x20\x38\x78\x81\x17\xfc\x20\xab\x91\xe2\xcd\xe0\xa7\x21\x14\x05\x35\x64\x17\x52\xda\x3b\x1d\x92\xfa\x2b\x48\x72\x0a\xec\xea\xaf\x9a\x33\x75\x92\xa4\xb1\x28\x46\x79\x21\x18\x95\xe4\x58\x3a\xa5\x70\xd4\xd0\x42\xa1\xdc\x59\xb2\x92\x4a\xd7\x28\x51\x93\x3a\xd3\x4c\xa5\x79\x33\x24\x79\x99\x96\x93\x1f\xd2\x6a\x82\x51\x9e\x3f\x21\x99\x60\x14\x21\xc9\x4b\x9a\xbf\xc2\x35\x83\x12\x4d\xf2\x21\x8d\xc6\x24\xc2\x53\x86\xeb\x66\x48\xf3\x82\x24\x48\xac\x9c\x0a\xa7\x95\x74\xa2\x19\x9a\xc0\x41\xdf\x4c\x31\x03\xa3\x26\x5d\x88\x8f\x9a\x18\x81\x0f\xf1\x51\xcd\x47\x9d\xf0\x4b\x4c\x2a\xa9\x16\x95\x09\x64\xed\xf3\x50\x83\x5d\xf5\x2e\x3b\xef\x90\x28\xdc\x54\x88\x97\x25\x99\xa5\x14\xf5\x3c\xbd\x27\xe4\x88\x45\xd4\x6c\x09\xa9\xa4\x06\x97\xa7\x24\xe9\xa3\xb8\x94\x86\x0d\x6b\xd7\x92\x09\x1f\xeb\x14\x9b\x2b\x89\x61\xbc\x47\x96\xb8\x84\xa0\x88\xae\x24\xe0\x09\x1e\x49\xaa\x33\x4e\x09\x56\x8e\xd8\x33\xa0\xa4\xfa\xc2\x1a\xe3\x64\xcd\x59\x85\x5f\x87\xd2\x90\x27\x98\x52\x12\x5e\x6e\xd5\x98\xb1\xab\x56\x9d\xbb\xe2\x6f\x5b\x3c\x2b\xaf\x59\x3f\x0e\x7f\xa5\x13\x05\x98\x91\x4d\x0d\x98\x2a\xe5\xc6\xe5\x7e\x22\x4f\xa9\x99\xfc\x1c\x60\x4e\xd4\xf1\x2e\x93\x47\xd0\x17\x78\x7d\x7e\xa3\xec\x0d\xb9\x6d\xf6\x02\x21\x39\xb5\x40\xaf\x37\x8f\xc6\x41\xc5\xcb\x19\xab\x4c\x0c\x36\x94\x1a\xcc\x66\xb9\x15\x9a\x57\x7b\x8b\x1d\x3a\xcb\x08\xb9\x9e\x61\x30\x2b\x70\x9e\x9a\x01\xb1\x92\xcd\xd5\x4d\x0b\x6f\xb9\xce\x5e\x96\x08\x34\x17\xe2\x09\x90\x9c\xd7\x38\x29\x0c\x9c\xc0\x62\x0c\x4c\xbd\x3c\xdc\x26\x38\x8a\xbd\x2b\x1b\x87\x3a\x4d\xd6\x82\x32\x3d\xb0\x96\x0a\x23\xe7\x55\x82\x78\x8c\x49\xaf\x2b\x9c\x9a\x34\x08\x60\xb7\xb9\x43\x5e\xd9\x14\x70\x7b\x0a\x0c\x3a\xaf\x51\x26\xff\xd0\x8f\xf7\xb3\x1e\xaf\xbd\x78\x74\xc8\x65\x1c\xec\x37\x72\x4c\x6d\xdc\x3c\xc2\x6f\x2a\x2b\x70\x48\x16\xff\xf9\x17\xfc\xe3\xf5\x01\xd1\xeb\x29\xf1\xb5\x1a\x5d\xa1\x88\x39\x9e\x66\xf5\xcf\x9a\x1a\xc4\x70\x65\x95\xdb\xc5\x9c\xd5\x59\x19\xc6\x68\x2d\xa9\x00\x27\x39\xf7\xc7\x23\x47\xfe\x78\x24\xb5\x64\x29\x08\x06\xdf\xf6\x22\x3d\xcb\x91\xaf\x74\x0c\x8b\xdf\xc3\x2c\xcf\x17\x04\xaf\x25\x77\x5a\x4a\xeb\xcc\x36\x86\x31\x70\x43\x5e\x66\x22\xbb\x40\x3e\x72\x1c\x1c\x07\x03\x0c\x60\xeb\x20\xb3\xbb\x36\x5e\xc4\xb1\x82\x01\xf3\x7a\xa1\x50\x67\xd1\x89\xec\xd2\x3a\xb6\xd0\x6f\xf1\xf2\xcc\x13\x4e\x9c\xaa\xae\x28\xd4\x59\xf5\xf5\x3e\x18\xc7\x58\x5b\xa3\xa5\x9b\xa6\x72\xa1\x1d\xa9\xf8\x64\xa3\xcc\xfe\xf8\x95\x79\x87\xe7\xf2\x32\x2e\xd2\x17\x56\x18\x44\xc0\x8c\x38\x09\xdb\xf1\x02\x72\xa2\x7d\xac\x4e\x37\x30\xf3\xee\xbb\x00\xec\x21\xd6\x69\x12\x81\x31\x9b\xcb\x4c\xfa\x22\x6c\x29\x7c\xf3\x89\x9f\xe2\x0e\x6e\xea\xc6\x32\x65\x88\x95\x31\x4c\x8e\xa7\x76\xec\xb3\x44\x04\xbd\x4b\x94\x06\x71\x6c\xdc\xd1\xcf\x3d\xd5\x33\x50\x6f\x0c\x05\xaa\x56\x70\xdc\xa4\x60\x3f\x37\x3b\xc8\xac\xab\xf4\x84\x62\xe5\xb2\x38\x62\xc9\x92\xdb\x96\x7c\xb0\xa2\x72\x70\xe3\x70\xbe\x64\xc5\x85\x0f\x0b\x8a\x64\x6b\xed\xea\x36\x8c\xab\xcb\x5c\xae\xd2\x01\x98\x39\x38\x41\xb2\x15\x15\x18\xf4\x92\xcf\xa7\x37\x98\xec\x26\x9f\xae\xd0\xcb\x09\xac\x79\x38\x36\x0c\x49\x2a\xe5\xcd\x01\x6b\xc4\xe0\xb2\x71\x36\x86\x05\x0e\x0a\xf8\x12\x86\x67\x71\xa0\x28\xbc\xaa\x76\x6b\xd2\x22\xfb\xc0\x6d\x71\x9a\x18\x13\xae\xf2\xb2\xb6\xaa\xfa\xe4\x70\xa3\xce\x6c\xd4\x99\x98\xad\xe4\x5f\x13\xaf\x37\x88\x8c\xc9\x69\x36\x99\xbc\x4e\x6b\x62\x6b\xdd\xaa\x50\x71\x00\x1b\x70\x29\x57\x08\x1c\x70\x8c\x8d\xb3\x39\x75\x8a\xb5\xb8\xa5\xa4\x34\xd9\xa6\xc7\x35\x4e\x33\x2b\x70\xde\x42\xbd\xd7\x62\x33\xea\x0d\x5e\xbf\x43\xc7\x3c\xea\x73\x15\xcf\x8f\x5c\xed\x13\xd9\xf5\x65\xbb\xeb\x8d\xc5\x26\x53\x66\x81\xc5\x6c\x80\xb5\x5b\x98\xd6\x6b\x6b\xe6\x17\xbb\x7c\x36\x56\xf4\x5d\xbd\xaf\xc8\x54\xbf\xbb\x8c\x37\x5b\xe6\x0f\xb4\x0e\xdc\xb2\x92\x35\x89\x30\x6d\x19\x13\x55\x6e\x14\x6d\x82\xce\xbe\xb3\x11\xe3\x9d\x87\xaf\x5a\x77\xf8\xf0\xba\xab\x88\x82\x31\x78\xd6\x0b\x26\x28\x60\x86\x0d\x7e\x96\x9d\x3a\x55\x04\xc6\x3e\x71\x3c\x67\xc6\xaf\x35\x6c\x70\xe9\x78\x9b\xe5\x36\x1f\xde\x21\x1b\x6f\xfc\x69\xba\xe6\xe5\xbb\x8c\x0e\xcc\x30\x00\x80\x05\x98\x5e\xa6\x44\x79\x9d\xb1\x86\xd3\xf1\x1c\x83\x31\x80\xde\x6e\x15\x0b\x18\x0c\xd6\xba\x16\xbd\xae\xca\x68\xf4\x85\x79\x16\xe7\x76\x99\x2c\x43\xd7\x17\x14\x26\x97\xa5\x92\x63\x31\x6e\xfc\xb0\xa5\x76\x75\x53\x62\xef\x5c\x56\x0f\x3c\xb6\x89\x72\x81\xb1\x60\xc2\xe0\xe0\x5b\x0e\xc7\xad\x35\x21\x89\x61\x1c\xde\xc6\x2c\x54\xa7\x06\x29\x01\x18\xd5\xae\xb3\xea\x9d\x76\x1b\xcb\xfd\x7f\xcc\xbd\x77\x7c\x14\xd7\xbd\x3e\x7c\xbe\x67\xda\xd6\xd9\xbe\x2b\xad\xa4\xd5\xd6\xd9\x55\x5b\x49\x5b\x55\x57\x8b\x10\x45\x48\x80\xe8\x02\x21\x21\x9a\x11\xa2\x89\x66\x30\xc6\x66\x0d\xb8\x02\x36\xc6\x80\x2b\x46\x31\x76\xdc\xed\xe0\x9b\xb8\x17\xd9\x49\xdc\x62\x13\x3b\x71\x8f\x8b\x5c\x63\x92\xd8\x71\x7c\x63\xc7\x46\xda\xd1\xfb\x99\x33\x2b\x21\x04\x29\xbf\x7b\xef\x1f\xaf\x3e\xda\x3d\x65\xce\xcc\x9c\x39\x7b\xe6\xd4\xe7\xfb\x3c\xb4\xe2\xe9\x8e\xea\xbd\xb1\x55\x51\x8d\x7a\xcb\x44\x3d\x5f\x5e\x83\x71\x8b\x3c\x66\x18\xaf\x04\xe6\x29\x32\x32\xaf\x26\x7a\xde\x67\xa0\x14\xc0\xc1\x68\x20\x1c\x72\xd0\x52\x93\xc4\x25\x98\x20\xc5\xb1\xde\x20\xc7\xfc\xbd\xf3\x8a\xc5\x8b\xaf\x48\x6f\x5c\x7c\x45\x67\xe7\x15\xe9\x05\x95\xab\x2e\xbf\xf2\x97\xaf\x82\x1f\x2a\xdf\xd9\xf3\xfb\xeb\x17\x97\x50\x85\x93\x56\x6f\x9f\xfa\xd8\xf2\xbc\x45\xed\x9d\x13\x05\xcd\xf4\x9b\xc4\xe3\x77\x89\xef\xbf\xff\xd4\xce\x8d\x0d\x0d\xae\xd2\x22\xe9\xa4\xc5\xe4\xd4\xc5\x4c\x79\xcd\xfc\xa6\x70\xc0\xc6\x33\x2a\x9b\xb3\xb4\x62\xf2\x8c\xe5\xab\xc7\x1d\x59\x10\xde\xb4\xe8\xbc\x19\x2d\x35\xe1\x7c\x3d\x85\xf5\x8e\x48\x78\x4a\xf5\xec\xf8\x8c\x61\xcc\x41\x46\x97\x2b\x9f\xb0\x82\x36\xa1\x15\x68\x0b\x51\xe6\x1a\xad\x54\x24\x78\xc7\xd0\x34\x9b\x42\x16\x83\xb9\x08\xdc\x51\x43\x24\x4c\x93\xc9\x22\x37\xb2\x9c\x10\x84\x68\x04\x3b\x69\xe3\xb0\xcd\xb3\xc9\x22\x63\xee\x64\x92\xeb\x3c\x18\x09\x09\x4e\x76\x2c\x17\x22\x5d\x20\x3e\x20\xbe\xf2\xd1\xee\xdd\x1f\x41\x04\x66\x42\x44\xf2\xa5\xd7\x9c\xcd\xf4\xbc\x41\xaf\x77\xea\xf5\x70\x61\x77\x93\x27\x8f\x4c\xf1\xf3\x3c\x33\x64\xcb\xe6\x61\x53\xe9\xdf\x91\xe8\x5d\x8f\xef\x22\xee\x09\xf1\xfd\x13\x54\xa7\x60\x1f\x4c\x0d\x13\xaa\x33\x7d\xbb\x3f\x12\x5f\x19\x73\xb7\x5f\x9d\x83\x17\x3a\x3d\x4d\x2f\x4a\xf7\xea\xd7\x27\x9b\xa2\x9e\x2a\xc3\x06\xde\x68\xe4\x37\x18\xaa\x3c\x51\xaa\x69\x8c\x61\xb6\xf8\xb5\xbc\x9c\xd6\xbe\x6b\x57\xbb\xec\x3b\x70\xe2\xc4\xe0\xd5\x98\xb0\x22\x12\xaa\xde\x61\x7b\x32\xa5\xcc\x2b\x6f\x23\xe3\x3a\x69\x2e\x16\x36\x78\xc6\x14\x45\x94\x8c\xa6\x2c\x63\xa1\x55\x21\x2b\x97\xfa\x31\xc5\xa1\x54\xca\xc8\xff\x40\x40\xf0\x1c\xb1\x91\x6f\x8a\x76\xd4\xff\xd0\x57\xdf\xd1\x51\xcf\x25\xeb\x3b\xa2\x4d\x34\x92\xc6\xb2\xe9\x3e\x48\xc9\x0b\xfa\x83\xb2\xed\x7b\xaf\x98\x8a\x36\xf5\x4a\xc9\x28\x92\xb8\xb7\x09\x8d\xc9\x53\xce\x48\x9e\x32\xeb\x11\x63\xb2\x60\xc9\x86\xb3\xb2\x6a\x00\xc4\x20\x4c\xec\x83\x46\xe7\x62\x4c\x16\x29\x94\x46\xb8\xaf\x29\x3a\x26\x0b\xe9\xce\x33\xf3\x08\xce\xff\x8b\xfc\x50\x29\x1a\xfd\xff\x29\x3f\x18\x31\xff\x77\xe5\x83\x47\xf2\x63\x43\x45\xa7\x57\x8e\xfe\x93\x9c\x28\xfe\x75\x2e\xa8\xff\xe8\xfe\x80\xd0\x10\x43\x5f\xc8\x22\x94\x4b\x58\x3c\x59\x8f\xcb\x34\x2c\x95\x49\x14\x4d\x84\x8c\xf2\xbb\x8d\x5e\x43\xe4\x3f\x76\xbe\xa4\x32\x67\x1d\xcf\x2e\x53\x3f\x23\xbe\x68\xb2\x6b\x34\x81\x80\x46\x93\x63\x84\xaf\x1c\xfe\x80\xe8\xcd\x2e\x53\x37\xa9\xcc\x59\xf0\x2b\xf1\x45\x13\x63\x28\x64\xfa\x0b\x0d\x8c\x49\xe6\xaf\xa6\x52\x2c\x22\x1a\x05\x4e\x8b\x21\x6c\xf1\x18\xcc\xae\xb0\xc5\xe3\xf4\xb3\x2e\x4f\x34\xec\x8c\x1a\x3c\xd1\xb0\x21\x42\xfc\xb6\x98\x2b\x6c\xa1\x92\x62\x5f\x2a\x05\xc9\x64\x52\xfc\xa6\xa7\x47\xfc\x26\x99\x84\x64\x2a\x25\xf6\x25\x93\xa0\xef\xe9\x01\x7d\x92\x49\xf5\x8b\x9d\xa9\x74\x7f\x7f\xea\xc0\x81\x54\x3f\x76\xa6\xa0\x97\x78\xe5\xe2\x1c\xb6\x6b\x18\x56\x7b\x28\x22\xac\x17\xd5\x64\xe5\xd4\x63\x08\x1b\x08\x10\xc9\x20\xbd\xa9\x2e\x8b\x2b\xea\x62\x2c\x44\x84\x39\x6a\x88\x7a\x2c\xbe\x68\xd8\x40\x10\xad\x86\xb0\xac\xa7\x9b\x31\x58\x97\x5c\x62\xbf\x6e\x51\xa0\x54\x4a\x4c\x0d\x20\x31\x95\x4a\x41\x8a\x41\x90\x1a\x42\xa9\x1f\x51\x2a\xc5\xa2\x54\x6a\x40\x76\x45\x04\xa9\xc1\x94\x98\xa2\x52\x69\x84\x53\xe9\x14\x8d\x86\x90\x98\xa2\x53\x83\x99\xb3\x68\x04\xc3\xfa\xb8\xa7\x90\xf4\x4d\x67\x34\x1f\x24\x5f\x1a\x91\x1a\x94\xc2\x52\x2d\x92\x4e\xc8\x70\xe7\x20\xa5\xf4\x4c\xf9\x23\x6b\x44\xe1\x8c\x86\xc5\xbc\x33\x9f\xea\xcc\x67\x33\x78\x86\x9f\x10\x46\x3f\xa5\xc7\x12\xf6\xb9\x4e\x3f\x2a\x44\x89\x3a\xb5\x54\xcf\xa2\xae\xcc\xa5\xc2\x16\x57\x54\x49\x9e\x55\x7a\x92\x94\x98\x92\xb3\x4e\xa5\x40\x72\xc8\x53\xa7\x51\xea\x54\x2a\x95\x62\x52\xa9\xd4\x40\x8a\x4a\xa5\x52\x83\xb2\x2e\x85\x14\x31\x7c\x0a\x45\x68\x8c\xe5\x73\xa5\x0f\x26\xae\x98\x11\x07\x26\xdf\x03\x99\xa2\xc0\x64\xfb\x23\x2d\x1f\x41\x78\xf8\x9e\x52\x01\x9c\x9e\x0b\x1a\x50\x16\x79\x6b\x47\xbd\x1d\x06\x97\x9b\xb5\xb9\xa4\x5a\xcb\xd1\x68\xb0\x33\x50\x51\x11\x60\x92\x81\x0a\x22\x51\x0c\x17\xe9\x42\x8f\x86\x66\x82\x53\xec\x94\x63\x2b\x02\x83\x9d\x15\x93\x67\x86\x1e\x0d\xe9\xd0\x68\x5b\x1b\x96\xe8\x2a\x23\xf0\x58\x62\x75\x10\xf3\x0d\xaf\x7e\x48\x6d\xb7\x0e\x4e\x9b\x43\x11\x4b\xa1\xad\x3f\xe4\x69\x1e\xd3\x88\xdf\x82\x73\x00\x51\xa9\x0a\x78\x31\x90\xfb\x68\x6e\x67\x60\x10\x0d\xdf\x1a\xd0\x0f\x2a\xcd\x63\x9a\x23\x54\x6a\x00\x81\x33\x50\x41\xf5\x0e\xa2\x40\x67\xee\xa3\xb9\x81\x4c\x26\x86\x35\x9d\x86\xf9\xb3\xb2\x90\x1f\x8d\x43\xb3\xd1\x32\x62\x75\x39\x42\x48\x18\x1b\xf1\x5b\xc3\x56\x86\x88\xa5\x78\xdc\x7e\x8b\x03\xf2\xc1\xe9\x8b\xb2\x1c\x2b\x44\xc8\x7c\x31\x08\xa5\x20\x10\x4b\xe6\x38\x31\x5d\x8b\xca\x8a\xdb\x6e\xc1\xe3\x32\xb8\xce\x36\x75\xe2\x8e\xe6\xdb\x14\xaa\x1b\x6f\x54\x29\x6c\x5a\x87\x8d\xd2\xec\xd9\x43\xa9\xc1\x36\xb0\xf2\xb3\xe6\xf1\xab\x2f\x88\x5e\x51\x50\x08\x93\xf1\xcb\x4b\x97\xaf\xde\xb6\x6d\xf5\xf2\xa5\x65\x5d\xb9\xb9\x3b\x1e\x59\x52\x5c\xbc\xe4\x91\x1d\xcb\xa9\xc6\xb9\xf5\x95\xc9\x99\xf5\x94\x91\x11\x2b\xe1\xcf\x53\x16\x9d\x49\x51\x14\x89\xf8\x18\xbc\x17\x33\x0f\x86\xdc\x34\x5c\x02\x74\x3f\x44\xc4\x57\xaa\x1a\xab\x7b\x74\x7a\x00\xd7\xfa\x08\xa7\x58\xf2\xf8\x12\x05\x17\xee\xd1\xe8\x30\x66\x03\x2d\x9d\x9b\x3a\x5b\x02\x2c\x7d\x75\x6c\x02\x43\x29\xc6\x07\xe3\xf5\x14\x88\xb8\x91\x8a\x9d\xc1\x3f\xc4\x8c\x94\x13\x83\xd4\xc8\x8e\x82\x28\x21\xd5\x00\x1e\xcc\x56\x6f\x44\xf0\x1b\x62\x88\x28\x9f\x05\x89\x74\xa7\x93\x06\x62\xc8\x4d\x2c\x54\x8d\x74\xd8\x15\x4a\xe0\xb3\xac\xa6\x16\x74\xef\xde\x8d\x97\xec\xee\xee\x86\xb6\x23\xe2\xb7\x47\xb7\xbc\x7b\xa4\xfd\x08\xf0\x90\x00\x1e\xe7\xae\x7b\xf4\xbf\x77\x89\xbf\xff\x99\xf8\xee\x83\x0f\x40\xe1\x03\x50\x72\xc9\x77\x8f\xae\x83\xd6\xd1\x4f\x09\x7e\xfc\x8b\x82\xa7\xfe\xf4\xd4\x53\x7f\x7a\xaa\x20\x3d\xa5\x00\x5e\x17\x9f\x13\xbf\x3d\xd2\x7e\xe4\xdd\x2d\x47\x81\x3f\x72\x44\x6c\xde\xf3\xdd\x4f\x3b\x6f\x13\xdf\x7a\xfc\x5e\xf1\x0f\xf7\x2c\xbf\xfb\x2f\x14\x7b\x26\x0f\x16\x75\xc6\x58\xad\x1a\x21\x66\x4c\xdb\x7e\x16\x7f\xb4\xc5\x73\xda\x80\xcd\x4a\x78\xfb\x4e\x73\x53\xa5\x4c\xda\x81\x3e\xad\xc9\xa4\xa5\x93\x5a\x53\xaa\xa3\x7e\x80\x34\xf5\x74\xb2\xbe\x43\x4c\x8d\x1c\xeb\xed\x1d\x8e\xec\x94\x92\x65\xa2\xe9\xa9\xa7\x13\x77\x40\xa2\xb7\x77\xf8\x48\x2a\x13\x97\xd1\x7b\x55\x48\x6d\x37\x46\x0c\x8a\xa2\x5a\x34\x07\xad\x41\x48\x09\x2e\x25\xb8\x80\x07\xce\x30\xb2\xfe\x3b\xb2\xea\x1b\x04\xff\x48\x80\xb0\x8c\x0f\x27\xa1\x87\xd7\xb4\xe4\x1d\x17\x02\x2c\x8c\x85\x6c\x0e\x9a\x19\x1b\xc1\xf6\x89\x29\x0a\xfd\x28\xb5\xa0\x08\x7e\xc1\xd7\x05\x30\x19\x85\x9d\x22\xbd\x1b\xee\x0c\xd4\xf1\xa2\x85\xf4\x60\x7f\xb6\x2c\xd9\xbe\xc4\x02\x7f\x26\xdb\x87\x75\xf5\xa5\xa5\xf5\xa5\xf4\xfe\xf6\xab\xaf\xdb\x7d\xdd\xd5\xed\x13\x37\x2c\xeb\xa2\x8d\xcd\x46\xba\x6b\xd9\x86\x89\x03\xe8\x5c\xb1\x74\x32\x9d\xc4\x7d\xe9\x24\x95\x0a\xd4\xf1\xa7\xbe\x3b\x4d\x4f\xc4\xa8\xf9\xba\x00\xf1\x55\x4e\x9a\x54\x49\x3c\xfa\x52\xe9\xf2\x83\x8b\x1b\x37\xd5\xbb\x5c\xf5\x9b\x1a\xd5\x7b\x5f\x7f\xf8\x71\xce\xe5\xe2\x1e\x7f\xf8\xf5\xbd\xea\x73\xc6\x8e\x5e\xe3\x2c\x41\x53\x11\x02\x3d\xe6\xac\xc6\x61\xc8\xc3\x69\x09\x2e\xbd\x31\x2e\x60\xc3\xa8\x4d\x7c\x72\x18\x12\x54\xd4\x65\x76\x60\x9b\x03\xcc\x2c\xc7\x53\x16\x57\x24\x88\xfd\x41\x88\xc4\x98\xd4\x9b\xbd\xbd\x6f\xca\x65\x42\xb2\xdc\x39\x12\x66\x64\x7b\xca\xab\xa6\xee\xdf\x38\x71\x10\x4d\xdc\xb8\x7f\xaa\xc9\x66\x33\x49\x21\x7a\x38\xc4\xa4\xc4\x01\x71\x5d\x77\xb7\xb8\x4e\x1c\x18\xc5\xce\xc4\xc0\xb5\xdd\xdd\x70\x2d\x30\xa3\x58\x9a\x6a\xf2\x76\x3c\xf4\xed\xee\xdd\xdf\x3e\xb4\x23\x8f\x73\x05\x5c\xdc\x99\xc1\xd1\x6b\xab\x25\xa4\x3f\xfa\x7f\x7b\xc2\x22\x70\x99\x6d\xae\x98\x41\x7a\x2c\x0f\x4f\x59\xfe\xed\x63\xf5\x0f\x22\x25\xf5\xb5\xb2\x61\xfd\xde\xe6\x2f\x9a\xf7\xae\x6f\xf8\xcf\x9f\xa4\x3e\x51\x7b\x6a\xfc\xce\xbf\x1e\xdf\x91\x9f\xbf\xe3\xf8\x5f\x77\x9e\xb9\x2e\x2c\xe5\xbd\xfa\x7f\x96\x77\x2a\x08\x7e\x0f\x0f\xdc\x7f\x92\xf5\x39\xd4\xdc\x39\x95\xb1\x47\x56\x7c\xb1\xe2\x91\xd8\x7f\x9e\xf3\x13\x0f\x3d\x34\xc8\xef\x7b\xa9\xb0\xf0\xa5\x7d\x67\xd6\xa7\x49\xff\xbb\xfa\xc4\x72\x2e\xe1\x7f\x56\x99\xae\x5c\x85\x9f\x5c\x75\xe5\xff\xae\x22\x85\xaf\xbd\x36\x2c\x57\xa1\x51\xbf\x83\x0e\x55\xa2\x46\x84\x98\x31\x4d\x4a\x3c\xa1\x88\x07\x15\x7e\x17\xaf\xe0\x1c\x0a\x9b\x69\xcc\x51\xa6\xff\x74\xce\x97\x50\x76\x77\x55\x79\x4b\x64\x7e\x71\x51\x51\xf1\xfc\x48\x4b\x79\x95\xdb\x4e\xd1\x83\xe7\x8a\x5d\x72\xfa\xac\xa4\x91\x27\x96\xc9\x29\xde\x98\x8c\x77\xcd\x6d\x4d\x36\x95\x8c\x73\xe4\xe6\x3a\xc6\x95\x34\x25\x5b\xe7\x76\xc5\xcf\x15\xc7\xa2\xd3\x27\x8d\xc2\x4e\x20\x34\x0e\x75\x23\x44\xac\x92\x3d\x19\x49\x75\x83\x5f\xf6\xe4\x81\xd9\x06\x56\x8b\xdc\xc6\xd7\x42\x24\x6e\x8a\x65\x08\xc7\xe4\xb4\xfe\xd1\x5e\x7f\x88\x68\x81\x93\xaf\x3c\x30\x13\x92\x2e\xb9\x53\x00\xf9\xb1\x43\x36\xd9\x8c\x8f\x42\xd1\x26\x67\xb2\x2c\x58\x4f\xbe\x3c\x10\xf3\x0b\x76\x9c\xb2\x0b\xaa\xd5\x2a\x12\x1b\xf2\xf3\xca\x60\xbd\x73\x5c\x88\x51\xcc\x1e\x57\x59\x5f\xdd\xe5\xce\x71\x2e\xdb\xab\x5d\xc3\xf6\xb4\xa4\x53\xb3\x57\x8b\xaf\x34\xef\x5b\xaa\x66\xd8\x3d\x8b\x22\xc1\xc9\x74\xaa\x29\x9a\x6a\x2f\x1b\x5f\x1f\x14\x67\x39\xee\x93\xdc\xfe\x52\x8f\xf8\x8e\xbf\x4e\x9a\xf6\x66\x17\x78\xe1\xe7\xde\x82\xef\xa5\x68\xe7\x45\x81\x71\x0a\x5c\x1f\x4c\x6d\x0b\x4f\x65\x20\x15\x72\xc7\xca\xb9\x6b\x96\x7d\x1f\xae\x14\x9b\xb3\x4a\x5b\x7a\x36\xcf\x86\x40\xe3\x79\xfd\x4b\xf7\xc1\xa2\x9d\x96\x09\xa7\xf7\x7a\x3a\x59\x84\xca\x51\x2b\x42\x48\x2a\x16\x8f\x6c\x0b\x92\x0d\xc3\x24\x8c\x40\x4a\x26\x6e\x8a\x45\x33\x56\x22\x9e\x51\xee\x48\x59\xc4\xa4\x29\x12\x47\xc9\x43\x32\x3f\x64\xac\xfe\xe4\x6d\x8a\x18\x75\xeb\xc2\x7a\x67\xfd\xc2\xfa\x9b\x84\x64\xb4\xc9\x0e\x29\x21\x89\x7f\xe6\x8e\x71\xcd\x4c\xbd\x1c\xef\xfc\xf9\x15\x1b\xf3\x4d\xb6\xa5\xfb\x56\x5e\xaf\x68\xe6\x2f\x9a\x91\x6e\xa9\x59\xe3\x15\x53\xe1\xc3\xdd\xd3\x42\xfb\x96\xda\x4c\xf9\x4c\xaa\x3e\x98\xee\xc1\xfa\x60\x7d\x7d\x30\xfd\xcd\x10\x7a\x35\xdc\x14\x2d\x72\x8b\x28\x5c\xec\x86\x43\xce\x1c\xf8\x96\xd8\x8d\x7e\x33\x9c\x00\xef\x0f\x3e\x37\xa9\x96\xde\xb7\xd4\xc0\xee\x5d\x29\xf2\x81\x22\x71\xf5\xf4\xae\x78\x29\x46\x0d\x73\xbb\x0f\xbb\xe1\xa1\xa5\xfb\xe8\xda\x11\x0e\x3e\xb2\xd7\x2b\xa0\x28\x9a\x82\x96\xa0\x5d\x08\x31\xd2\xfc\x4a\x5e\x66\x89\xbb\x64\xc8\xf8\x08\xd3\x34\x93\x81\x2b\x71\x0c\x4b\x49\xe3\x4f\x99\xbe\xc8\x17\x84\x28\xa9\x32\x1c\x43\x38\x7a\xa5\xa8\x04\x50\xbe\x61\x5a\x6a\xc6\x92\xe1\x1c\x89\x47\x23\x75\x40\x91\xa3\xb2\x8d\x3f\x97\xd1\xae\xa8\x85\x30\x31\x8d\xb4\x48\x97\xa6\xcb\x8f\x1f\xab\xb3\x25\x1a\x19\x71\xa0\xfb\xf0\xe1\xee\xf5\xc5\x53\xda\x0e\x77\x07\x4b\xf0\x26\xb8\xb6\xfb\xf0\xea\xb9\xe2\xfd\x0b\xaf\xb9\xf9\x98\xc3\x5b\x1f\xb4\x9b\x61\x66\x79\x1d\x24\x25\x9f\xf8\x61\xae\xb1\x48\xaf\xaf\x0b\x99\x8d\xd0\xe9\xf0\x7e\x99\x3e\x3f\xcb\x1a\x6d\x2a\xf1\x61\x3e\x4d\x66\xa4\xd8\x76\x32\xb8\x6e\xf5\xcc\x46\x98\x55\x14\x6b\x8a\x8a\xaf\x5c\xe1\x95\xca\xbd\x32\x32\x21\x28\x88\x2f\xa7\xf6\x95\x47\x19\xc7\xe6\x09\x82\xea\xf0\x1b\x87\x0d\xb9\xbb\x5a\xba\x0f\x1b\xfe\x7a\xb8\x3b\xbd\xac\x75\x8f\x65\x8e\x0d\xbf\x30\x69\x0a\x1f\x77\x05\xeb\x55\x37\xa9\x5a\x42\x43\x28\x58\xaf\xda\xad\x55\xd8\x2d\x3e\x6b\x28\xa9\xec\xe5\xe3\x94\xe1\x07\x45\x53\x34\x50\xcf\xbf\x98\x6c\xea\x6e\xea\x7e\xbe\xae\xe8\xbc\x41\x64\x9a\xa3\x9e\x50\x8c\x6f\x89\x36\x5d\xec\x2a\x17\xdf\x09\x26\x26\x06\x5f\x7b\x6d\x62\xb1\x62\x46\xb4\x70\xb2\x61\xdf\x48\xdd\x23\xf3\x41\x2f\xe1\xc7\x0b\x59\xa5\xd7\x70\x44\x02\xd3\x37\x32\x58\x91\x7e\x04\xbf\xec\x07\x43\xc4\x0f\xf2\x90\xcb\xec\x00\xe9\x55\x73\x59\x5c\x19\xd6\xa4\xb0\x8b\xa0\x2a\x32\xb3\x02\xe9\xb5\x96\xea\xad\x8d\x71\x40\xc6\x1b\xa3\x77\xd4\xae\xf5\xe2\x9a\xf3\x7b\x5a\xc4\x54\x4b\x8f\xf8\x49\xfa\xc3\x96\x9e\xbb\xb7\xc0\xed\x85\xe9\x99\xcb\xae\x53\x8c\xeb\x69\x61\xfb\xda\xd3\xbf\xf4\x27\x07\xc7\xd9\x05\x4a\x6f\x50\x85\xf3\xa9\xe4\x60\x9f\x5d\xa0\x14\x93\x4b\x70\xaa\x2d\x50\xc1\x24\x55\xa1\x7c\x71\x42\x7d\x87\x60\xc7\xe5\x7a\x2d\xd4\x66\xe5\x09\x76\x48\xd9\x05\x16\x55\x94\x0f\xfe\xf7\xd1\x17\xc5\x23\x2d\x3d\x3d\x2d\xc7\xaf\xe9\x69\x71\x6e\xb9\x3b\x75\xf9\xd2\xe9\x2b\x9c\x2d\x3d\x3f\xf6\xc1\xd2\x23\x3b\x28\x6d\x44\xb0\x3b\x3d\x41\x73\xbe\xe0\x14\xec\xc5\x7c\x71\x55\x45\x40\xa7\xeb\xcb\xf3\x75\xd4\x3b\xed\x02\x77\xab\x36\x98\xf3\x6b\xb2\x80\x25\x73\xe2\x49\x63\xbb\x10\xda\x24\xb5\x59\x82\x9f\x12\xa2\x11\xf2\x15\xcb\x50\xbc\xe5\x40\x86\xea\x0d\x2c\x66\x8e\xca\x50\x92\xb0\x1c\xb0\x1e\xca\xcd\x72\x94\x87\x1a\x26\x93\x32\x8d\xf2\x3a\x40\xfa\x84\x5d\xa1\x38\xc8\x86\x7a\x1c\x13\x8d\xd8\x21\x3e\x4c\x76\x42\x79\x4c\x92\x17\x7e\x33\xf5\x02\xd3\x72\x2d\xb3\x89\xdb\xde\x6e\xd8\x35\x6f\xd6\x4e\xf3\xac\x15\xe6\x9d\xb3\xe6\x5f\xca\x2f\xdc\xca\x5d\xa8\x8a\x5b\xcb\xdc\xe5\xd9\x2b\x0f\x57\x86\x44\xa6\x61\x4e\xb9\x50\xab\xbc\x7d\xc7\xb5\xca\x5a\xa1\x2c\x49\xed\xb6\x2f\x55\x26\x84\xd2\x7a\x6a\x13\x47\x2b\x96\x29\x22\x2e\xfc\x70\xa1\x1b\x06\x2a\x9a\x22\x45\x6e\xf1\xd5\xe4\x64\x8a\x4e\x96\xfa\x6b\x95\x9b\xec\x87\xa9\xba\x21\xb4\xa8\x09\xae\xad\x0c\x97\x58\xe1\x83\x1c\x47\xfb\x15\xaa\x39\xab\x57\xcc\x10\x6f\x87\xfb\x66\xac\xd8\x38\x4f\x75\x55\x7b\x96\x47\x44\x5c\x91\xde\xa1\x56\x1f\x5c\x99\xe8\x11\xc4\xdd\x61\x36\x55\x26\xa4\xe7\xe2\x05\x42\x59\x7d\xa9\x4e\x9b\xfe\x00\x6e\xf0\x85\xeb\x83\xbc\x46\x74\xe7\x6e\x72\x88\xeb\x9c\x05\x76\xb8\xb0\x68\x7c\xa4\xd1\xfe\xc5\xa7\x34\x68\x20\xa0\x35\xaa\x4b\x1b\xca\x04\xd1\x81\x7b\x78\xbe\xac\x21\xb3\xe7\x2b\x95\x6b\x98\x30\x90\x2c\x25\x4c\x5c\xe7\x6e\xe9\x6a\x65\x91\x71\x4f\x74\x54\x3f\x20\x7b\x0c\x11\xc1\x4f\x9a\xbb\x30\xe9\x09\x4e\x77\x04\x67\x37\x7c\xa6\x8c\xca\x94\xf4\xc1\xa9\x68\xd3\xf5\x05\xf5\x91\x29\x72\xe3\x77\xc2\xea\x61\x16\x66\x55\xb4\x54\xc8\x5d\xc4\x94\x58\xb4\xc9\x39\x25\xb6\xea\x90\x55\xb5\x74\x4a\x69\x64\xfd\xa4\x9c\xbc\x8e\x9d\xb9\x0b\xf5\x5d\xf5\xe9\x90\xdc\x10\x1e\x5a\x39\xa9\xfa\xf0\x9f\x9c\xe0\x94\xfe\x99\x54\x53\x54\x44\x62\xea\xe5\x58\x73\x84\x34\x82\x39\x16\xe8\xe9\x5c\xf2\x6e\x41\x4d\x45\xa0\x56\xea\x07\x92\x0b\xe2\xd3\x9b\xa2\x9d\xb8\x2a\x3e\x3d\x75\xf3\xaa\xf7\xf1\x04\xcb\x3c\xee\xf2\x8e\x77\x37\xad\x11\xf7\x27\x67\xc8\xcd\xe0\xca\xeb\x3d\xd8\xd3\x7d\xf8\x54\xc6\x0e\x4d\xfe\x8c\xda\x17\xf7\x11\x15\xdb\xc5\x68\x27\x51\x5a\x19\xfd\x88\x51\x03\x95\x81\x30\xe5\x83\xcc\xb5\x6a\x90\x02\x9c\x9b\xd5\x11\x2a\x42\x52\x89\x6c\x6e\x9e\xca\x30\x58\xca\x5d\x47\x44\x00\xb3\xcd\x64\x89\xc7\xaa\x21\x3e\xdc\x7d\xc8\x55\x13\x32\x25\x4e\x11\xd6\x17\xbf\x3c\xaf\x8e\x91\x89\x95\x0e\xa4\xa9\x17\xa3\xa8\x29\xdd\x67\x9b\x63\xd9\xd3\x9a\x5e\xd6\x7d\xf8\xaf\x86\xc3\xdd\x2d\xbb\x72\x0d\x87\xdf\x38\x9c\x63\x99\xb0\xf9\x71\x57\x9c\x9f\x32\x29\x1e\x6a\x51\xdd\xa4\xaa\x7f\xd0\xea\xb3\xd8\x15\xda\xdd\xaa\xfa\xa0\x2b\xce\xf7\x2a\x93\x03\xe3\x14\x3f\x9c\x57\x54\xf7\x7c\x77\x53\x77\x53\xf2\x45\xbe\x3e\x10\x6d\xa2\x73\x8b\x27\xa8\xe7\x98\xf6\x19\x26\x17\x46\x67\x28\x8a\x27\xbe\xf6\x5a\x70\x62\x22\x28\xbe\x53\xee\xba\xb8\x29\x4a\x5d\x60\xab\x3b\x76\xbc\x63\xa1\x78\xff\xdc\xd5\x87\xbb\xe1\x5a\xbc\xa9\x24\xd8\x7d\xb8\x6d\x4a\xf1\x7a\xa9\x21\x16\x07\x98\xc6\xb8\xd7\x71\xec\xe6\xba\x72\x98\x69\xb6\x07\xeb\x2f\xd7\xeb\x8b\x8c\xb9\xe2\x87\x92\xdf\xeb\x80\x4e\xa3\x39\x54\x07\x2b\xac\x59\xe9\xf3\x27\xac\x0b\x9e\xc4\x36\xa9\xdd\x4d\xa7\x30\xef\x2b\x69\x3a\xf5\xe7\x58\x11\xcc\x6a\x9c\xd9\x26\xbe\x2c\x04\x27\x44\x2a\xa5\x5e\xcf\x7b\x85\xf8\x4a\xb4\x69\x84\x07\x86\xfb\x39\x8d\x50\x36\x19\x3f\x5a\xce\x8d\xdc\x09\x59\x19\x93\x95\x23\xb1\x7e\x35\x48\xae\x5f\x0d\x44\xd8\xc7\x2f\x44\x4d\x32\x71\xa8\x89\x6c\x4a\x9b\x64\x4e\x98\xf9\x26\xad\xf8\x96\x51\x7b\xb9\xd6\x24\xbe\xad\x35\x19\x79\x2a\x5b\x6b\xa2\xf9\xa9\xa0\x54\x69\x2f\xd3\x18\x21\xf8\x94\xc2\xb2\xd5\xac\x7c\xb2\x04\x8c\x9a\xcb\xb5\x2a\xe5\x34\x30\x6a\xae\x36\x2b\xdf\x57\xa9\x28\x2d\xfd\x81\xd2\xbc\x4f\x6b\xa4\xfa\x37\x6b\x8d\x83\x6f\x90\x93\x8b\x8d\xda\xcd\xbc\xd1\xa4\x1a\xac\xd3\xaa\x55\x06\x0d\x6e\x16\xe7\x99\x4c\x70\x6f\xfa\x21\x8d\x41\xa5\xe2\xa9\x67\x35\x06\x53\xfa\x87\xac\x1c\xce\xa3\xc4\x0a\x93\x61\x18\xc3\x20\xcf\xa9\x95\xa8\x10\x55\xc9\x76\x08\x7e\x59\xc6\x21\x66\xcb\x3c\x8b\x9f\xf2\x9c\x49\x75\x23\x83\xc9\x38\x2b\x1e\xb3\x49\x82\x46\x6d\x90\x78\x9d\xb4\x95\x36\xd6\xb8\x66\x5f\x78\x5b\xfd\xe4\xc8\xab\x0a\xa5\xc2\x74\x83\x59\xf1\xdc\xcd\x46\x5e\xc6\x41\x0b\xa9\xc4\x9c\x25\x73\x1a\xd9\x12\xf1\x0d\xf1\x9b\x5f\x6f\xde\xfc\x6b\xd0\x43\x31\xe8\x89\xef\xbd\x73\xec\x42\x50\xe3\x5a\x5d\x46\xf1\x8f\x53\xde\x15\xf7\x18\x78\xbd\x01\xd6\x88\xb7\x49\xd7\xa1\xfa\x78\x63\x56\xfe\x2d\xe7\x2d\xbc\xce\xab\xa2\x62\x9b\x7f\x2d\x7e\x33\xe6\x7a\x62\xd3\x98\x0b\x5d\x7d\xf5\x37\xa3\x9f\xbb\x04\xb5\xc9\x4a\x57\x10\x8a\xc7\x4a\x41\xf0\x0b\x3a\xe0\x99\x11\x7a\xa3\x7c\xb0\xc6\x63\x75\x10\xf3\x07\x69\x79\xac\xe0\xfa\xcf\x92\x9d\x55\x34\x63\xf6\x8f\x70\xfb\x8d\x5d\xbc\xba\x84\x35\xea\xd5\x34\xad\x33\xe7\x38\x7c\xa6\xe6\x25\x9d\x53\x7c\x13\xf4\x7a\xb5\x4e\xaf\x88\x6a\x75\x94\xbe\x38\x3a\xb3\xe4\xe0\xaf\x9e\xa3\x34\x37\x76\xf1\xaa\x12\x85\xe1\xdf\x24\xbd\xee\xd7\xcf\xf9\xcf\x2e\xcc\xf4\xed\x67\x6f\x1e\x41\x69\x97\xd1\x38\x53\x4b\x63\x2d\x45\x6b\x74\xbc\x86\x5b\x36\xb5\x79\x69\x2e\xcf\xab\x01\x6b\xa6\x99\x4d\xb4\x3e\x3f\xdb\xfc\xec\xfe\x03\xcf\x48\xa9\x78\xea\xdf\xa5\xa2\xcb\xcf\x51\xec\x60\x39\xc7\x6f\x28\xbd\x47\xc9\xa1\x7e\xae\x8f\x71\x12\x4c\x09\x52\xd2\x36\xce\xaf\x84\xb8\x92\xf2\xc7\x6d\x4a\xe0\x80\x03\xdc\x2f\x35\x74\xe9\x4e\xdc\x7b\x57\xe7\x64\xd1\x09\xfd\xcf\x8a\x1f\xe1\x5e\xdc\x9b\xee\xbc\xab\x73\x32\xf4\x8b\xce\x67\xc1\xd5\x29\xa6\x70\xbf\x98\x12\x53\xd2\x01\x92\x4c\x8a\xce\x97\x12\x65\x92\x49\xa7\x7d\xdc\x09\x29\x74\xc6\xba\x91\x74\x4f\x3f\x42\x3e\x25\x70\x36\x4e\x09\xb6\xb8\x5f\xc9\xc4\xfd\x71\x25\xf8\xb9\xb1\x55\x17\xbf\x0a\x3a\xf1\x64\x6b\x5f\xa7\x78\x12\x6c\x81\x79\x3b\xc4\x2a\xaa\x18\x9e\x17\xab\xc4\xbf\x81\xad\xb5\xaf\x13\x6c\xe2\xc9\xc0\x3c\xaa\xf9\x1c\x0f\xf9\x30\xe8\xc0\xd6\xfa\x4c\x27\xd8\xa4\x13\x53\x62\x95\x58\x0f\xcf\xc3\xf3\xe2\xdf\xc4\x93\xad\xcf\x74\x8a\x27\xc5\x93\x81\x56\xf8\xf1\x1c\x95\x52\x85\xd0\xd0\xfb\x4a\xc4\x78\x91\x1a\x99\x50\x6e\x46\x65\x73\x02\x9a\x85\xda\x50\xea\x4c\x55\x80\xe1\x5d\x55\x26\x03\x2f\x8b\x11\x11\x61\xa2\x95\x42\x52\x49\xad\xbe\x37\xe3\x0b\xcb\x30\x7b\x1e\x08\x01\x1b\x08\x2e\x27\x17\x72\x60\x4b\x24\x81\x87\x91\xbc\x26\x17\x4f\xe0\xe9\x98\x26\xed\x3b\x17\x04\xc2\x63\xe9\xc5\x51\x02\x9b\x71\x11\xf1\x73\xbc\x27\x2e\xf8\xe3\x71\xbf\x10\xa7\x77\xc6\xa7\xc5\xe3\xd3\x06\xfd\xeb\x7b\xd7\xaf\xef\x5d\x4f\x5f\xb2\xbe\x65\xfa\x86\xf5\xbd\x83\x13\x8e\x6d\xdc\x74\xec\xf6\x2f\x8e\xd1\x3b\x8f\x6d\xda\x78\xec\xd8\xc6\x4d\x83\x1f\x89\x7f\x7b\xe6\xa2\x37\xb6\x6f\x7f\xe3\xa2\x67\xa8\x7b\x45\xf1\x77\xe2\xb3\xe2\xe6\x37\x6e\x6c\x9b\x77\xe8\x04\x9e\x21\x7e\x2b\xee\x14\xff\x06\x3a\xb8\x98\x86\x1d\xc5\x09\xe5\xda\x9b\xc4\x1f\x6e\xbe\xf4\xcb\x96\xd2\x99\xea\x39\xce\x96\x93\x97\xde\x2c\xfe\x70\xd3\x5a\x65\xa2\x18\xd6\x1c\x82\x5b\x3e\xe9\x87\xab\x70\x8e\x7c\xfb\x38\x96\xee\x1e\xeb\x90\xee\xb9\x7e\x3d\x90\x3c\xf4\x91\x1b\x1f\x83\x2f\x8e\x1d\xfb\xe2\x98\x18\x80\x8b\x41\xb7\xfd\xcd\x53\x6f\x6e\xa7\xd5\xeb\xd6\xb6\xdd\xf4\xc6\xe6\x8d\xaf\xdf\xd0\x91\xe6\xa4\x68\xf1\x6f\xd2\x6d\x69\x3a\xbc\x23\x7c\xfd\xe3\xb7\x88\x3f\xdc\xd8\xb3\xb4\xe2\x42\xeb\x05\xbe\xa5\xeb\x6f\x04\xc5\x2d\x8f\x5f\x1f\xde\x11\x5e\xb6\xbe\x07\x51\xe8\xbc\x21\x44\xdf\x44\xda\x45\x13\x6a\x46\x88\x90\x35\x22\x27\xb2\x98\x4f\x83\x73\xc0\x01\x3c\xe6\x58\xce\x96\x01\xbf\xfb\x05\x7f\x06\x5c\x1e\x87\xb8\xe0\x0f\x52\x32\x0e\xc9\x41\x87\x43\x44\x5c\xcc\x01\x54\x8d\x78\x85\xf8\x3d\xa8\x60\x2b\xa8\xc4\xc3\x8f\xee\xda\xf5\xe8\x2e\x28\xd6\xd2\xda\x40\x89\x7f\xe3\x8b\x8d\xa0\x76\x38\x34\xf9\x73\xf3\xc7\xbf\x28\x7e\x97\x3f\xd7\xa1\xc9\xcf\x07\xf5\xe4\xdf\x6c\xf0\x97\x04\xb4\xb4\x56\xe5\x2d\x4b\xba\x18\x73\xfd\xe4\x9e\xca\xb6\x9f\xfa\x04\x57\xb2\xcc\x8b\x37\x83\xea\x89\x27\x41\x25\x7e\xff\xe4\x13\x70\xf3\xae\xf6\x85\xbb\x76\x2d\x6c\x4f\xdf\x99\x53\xe2\x2d\x70\x65\x37\x5a\x26\x93\xab\x68\x1d\x8e\x86\x17\xc5\xbf\x3b\x1c\x5a\xc7\x5c\xe9\x7a\x96\xc6\x6c\x57\x81\xb7\x24\xc7\xec\xe0\x8d\x76\x9a\xf7\xd8\xad\xe1\xec\x6c\xbb\x91\x77\x8c\xe2\x0f\xe3\x50\x0c\x25\x08\x5a\x75\x78\xd7\x3e\x08\x2c\xc7\x63\xb7\x50\x4a\x7c\xac\xd5\x66\xb5\x71\x2c\xc7\x9a\xf3\xc1\x1a\xaa\x03\xab\x4d\xfa\x8e\x45\x4a\xb1\x34\xfe\xc5\x7a\xc1\xc9\xea\xad\xce\xb3\x96\x8f\x8f\xb6\xef\x6e\x6f\xdf\x0d\x61\x95\xb7\x3a\x5f\x25\x6c\xdf\x79\x7e\x4e\x4e\x7e\xb5\x57\x65\x0d\x8c\x9f\x75\x4d\xf8\xea\x72\xab\x55\x69\xad\xb5\x3e\xb3\x61\xaa\xb5\xd6\xaa\xb4\x5a\x9f\x89\xec\x9b\x3d\x3e\x30\xe9\x69\xf1\xef\x4f\x3f\x0d\x1a\xbc\x6d\x34\xd5\x29\x25\x4a\x57\x6a\x4f\x7f\x6f\xce\x62\xb2\x15\x59\x01\xaf\xd1\x98\xcd\x64\x99\x4b\xaa\x8b\xa3\x7c\xe4\xea\xb2\xcc\x05\x36\x36\xcb\x97\x7c\x3a\xc2\x47\x8b\xab\xc1\x08\x9a\xa7\xa5\xab\xc1\x97\x67\xf2\x9b\xca\x6b\x10\x8f\x32\x29\x64\x94\x75\xeb\xa4\x49\x0e\x41\x42\x7b\x05\x9c\x11\x2f\x1f\x19\x91\x2b\x61\x64\x28\xca\xe6\x8d\x5b\x70\xc5\xe7\xe2\xb3\x0f\xfe\x4c\x7c\xf6\x8b\x2b\x16\x26\xf1\xb3\xa5\x1e\x38\xe8\x9b\x50\x5e\xea\x11\x9f\x12\x9f\xf2\x04\xcb\x27\x78\xe1\x90\x8b\x49\xb5\x8d\x4b\xff\xf8\x33\xb1\xef\x8b\xcb\x2f\xff\x02\x92\x3f\xc3\x5c\x72\xe1\xc0\x3b\x2e\xd8\xed\x09\x95\x4f\x70\x89\x2f\x43\xcc\x35\xa1\x3c\xec\x16\xb7\xbb\x32\x18\xf5\x1b\x94\x88\x59\x21\xd5\x39\x06\x58\xc4\xb1\x42\x54\x40\xfe\x20\xf6\x44\x84\xa8\xcb\xc2\x63\x9b\x15\xd9\x62\xc6\xb8\x80\xfd\x82\x3f\xca\x58\x64\x00\x17\x81\xd7\xc5\x22\xd1\x50\x02\xc2\x16\x1e\x38\xca\x6a\xb4\x41\x10\xfb\xa3\x8c\xf4\x33\x21\x8e\x79\x4b\x7c\x37\x5b\xfc\x6e\x1c\x44\x67\x8a\x77\xcc\xb5\xb4\x6d\x2a\x06\x3c\xc9\x3f\x23\xa2\xb7\xc3\x45\x25\xf9\xef\x59\x4d\x6f\xe5\x09\xc7\x30\xd4\x8c\xb7\xb8\x56\x3b\xd7\xd6\x65\x35\x2c\x82\xe4\x9b\xd7\x99\x12\x1b\x5c\x6f\x6a\x3f\xe7\xe0\x31\x7e\x52\xb5\x1d\x5e\x01\xd8\x93\x48\x7f\xeb\x5a\x81\x1f\x29\x4f\x0f\x5d\x0a\x00\xcf\x52\xe6\x97\x43\x1b\xe7\x32\x82\x22\x84\x73\xab\x3c\xd5\x83\xfb\x97\xd5\xc2\xcd\x85\x7e\xf8\x2c\x3a\x01\x87\xa0\x14\x07\x83\x13\xff\xda\xf0\xd6\xa1\x78\x39\xe6\xbc\x2c\x40\x39\x4e\x84\xc4\x89\xae\xb4\x68\xa0\x7e\x14\xca\x79\x08\xd1\xb8\x98\xde\x37\x90\x6c\x1a\xc5\xa7\xad\x42\x59\x68\x03\xda\x89\x0e\x8c\x6a\xf1\xa4\x99\x27\x4f\x73\x90\xa0\x7d\x66\x2e\x88\x3d\x6e\x8b\xd9\xc6\x03\x47\x66\x05\xf9\x64\xbb\x35\x81\xa3\x11\x42\x99\x1d\x04\x3f\x99\x2f\xe9\xa4\x71\x7e\xdc\x81\x89\x70\x4f\x29\x51\xf6\x93\x46\xba\xa5\x64\x5e\xc0\x12\xf9\x36\x07\xd8\x88\x38\x46\x1d\x38\x40\x46\x78\x8c\xee\xb1\xcf\xe8\x0d\xa8\x5f\xb8\xb2\xed\x82\x3b\x24\xe8\xa0\x43\xb9\xf9\xb2\x3d\x8b\x28\xf1\x18\xb7\x75\xf7\xde\x0e\x7c\x55\x17\x95\x9b\x4d\x6b\xab\xa7\x7c\xb0\x4b\x0f\x3c\xc3\x82\x7e\xf2\x94\x17\xee\x87\x2c\x93\x96\xb5\xda\xf0\xfa\x5b\xf3\x27\xa8\xd4\x4c\x03\xbf\x06\xbb\x72\x68\x6d\xb6\xd9\x3c\xb5\x7f\xb7\x0e\x6b\x19\x16\x74\x93\xea\x5e\x79\xd0\xaf\x51\xfb\xd6\xdd\x98\x5f\xa1\x52\xd3\x95\xfc\x9c\x1d\x6f\x89\xef\x88\x8f\x8b\xef\xbc\xb5\x63\xc7\x5b\x10\x80\x89\x10\x78\xeb\xa3\x73\x74\x30\x78\x97\x5d\x90\xb2\xe3\x9a\x85\x27\x28\xd6\x6c\xdf\xd9\xc6\xa6\x9f\xe4\xd6\x5e\xb8\xab\xad\xe6\xa5\x7b\xb0\x51\xa7\x55\xb9\x7b\x8e\x38\xc7\xab\xd4\x74\x83\x6e\x25\xf6\x39\x68\x6d\x5e\x80\x6a\xfa\x78\xb7\x8e\xd2\x48\xb7\x9d\x3c\xfe\xc4\xfd\x60\xd5\x6b\x58\x93\x46\xd3\x73\x93\x63\xbc\x4a\xcd\xd4\x6b\xd7\x54\x28\xb5\xc9\xa6\x0f\x77\x6a\xb0\xf4\x08\xda\xc9\x7f\x24\x37\xdf\x31\x3a\x43\xf8\x92\x7f\x36\x8e\x82\x4c\xdf\x6a\x45\x6e\x54\x88\x10\xc4\x6c\x56\x9b\x4f\xa0\x39\x88\x79\x95\x60\xa5\xe3\x94\xe0\xc5\x51\xbd\xcf\x6a\xc4\x2c\xc7\xfa\x20\x86\xfd\xde\x90\x95\x34\x2c\xd4\x45\xdf\xfc\xfe\xcb\xad\x69\x7b\xaf\xf8\xf7\xb0\xf8\x97\x14\xac\x4d\x7f\x00\x33\x26\x83\xf5\xa6\x2f\xde\x10\x7f\xfa\x02\xfb\xab\x2a\x6a\xd9\x89\x6b\xbe\x10\xff\x0e\x87\x5a\xd5\xcb\xc5\x8a\x53\xc7\x8f\x9f\x3a\xce\x22\xbc\xed\xb2\xaf\xfd\xca\x3b\x0f\xc0\x5d\x47\xef\x17\x57\xa7\x57\x5e\x73\x30\x4f\xac\x75\xfd\x08\x3b\xde\x07\x75\xfc\xb0\xf8\x8c\xf8\x41\x7a\xd6\xa5\x3c\x5e\xb7\x0b\xea\xce\x67\x8f\x4b\x27\x49\xef\x15\x96\xea\x17\xf3\x12\xd9\x4d\x70\x22\xbf\x80\xed\x10\xa7\x12\x20\x8d\xc5\xa5\x77\x88\x22\x98\x4f\xcc\xd9\xfc\xac\x03\xc7\x13\xd8\xe6\x00\x8e\xa7\xfd\x3c\xf8\x1d\x90\xc0\xf1\x58\x50\xf2\xd8\x62\xd8\x4f\x23\x93\x15\xf3\x40\x53\x97\x8b\x9f\x8b\x13\x56\x57\x19\x27\xde\xb0\x42\xad\xde\xa0\x2d\xfc\x6a\x53\x6c\x17\x97\xdd\x14\x9e\xa3\xd0\xa9\xb3\x19\xdb\x82\x0a\xdd\x1e\xa3\x25\xdc\x52\x10\xee\x68\xf4\xd5\x56\x2a\x81\xe2\xad\x05\xf6\x9a\xbb\x2f\x9a\x72\xbc\xf7\xd0\xaa\x9c\x22\xc5\xf8\x92\x79\xcb\x72\x74\xd7\x5e\x09\x4a\x10\x68\x3c\xe7\xb6\x77\xc4\x93\x43\x08\x4a\x7e\xd8\x05\xb3\x61\x02\x14\xb5\x8b\x7f\xe4\x29\xc3\x8c\x0d\xb8\xe4\xb7\x35\x0a\x35\x4d\x03\x33\xc3\xc3\xd9\xca\x54\x4f\x8d\x2f\x9a\x5a\x91\xc3\x29\xc3\x7e\x4c\x57\x79\x31\x67\xd4\x2a\xa8\x45\x33\xd4\xb5\x45\xf9\x8d\xe7\x45\xdb\x7e\xf3\x80\x20\xcc\x9a\x74\x0f\x2c\x58\x37\x55\x5c\x25\xfe\x7a\xc7\x10\x7a\xff\xbe\xa5\x63\x78\xfc\xe3\xb2\x5e\x23\x4d\x20\xae\x0e\xb0\x59\xe9\x70\x28\x4e\x0c\x3f\x04\xa9\xc1\x8b\x18\x63\xde\x6a\xb0\xd2\x60\xc6\x84\x4a\x21\x66\x8c\x46\xb0\x9f\x68\x2b\x1a\x99\x37\xef\x78\xee\x66\xf1\x2f\xe7\x35\xcd\xa7\xe9\xf9\x4d\xe7\x81\xf9\xe6\xe7\xee\xb8\x40\x7c\xf5\xee\x3c\xfe\x41\xf1\x57\x9f\x5d\x26\xd5\x8d\x87\xa9\xbb\xa0\x1c\x6e\xbf\xe9\x8a\xae\xf3\xaf\x3c\xff\xa6\x17\x9e\xbf\x69\xcb\xe5\x5b\x56\x5d\x7e\x3d\x93\xbb\xf6\xc0\x8e\xf6\x53\xfb\x0a\xf7\x9d\x6a\xdf\x71\x60\xed\xea\xad\xa0\x38\xf8\x35\x34\x1c\x7f\x58\xaa\x49\xb0\x65\xf0\x87\x3e\xf1\xde\x8b\xeb\x66\x57\xc0\x92\xcf\x3e\x85\x25\x95\xb3\xc6\x5d\x24\xde\x97\x99\x9f\xe8\x39\xc4\x7c\x83\x8a\x50\x14\xd5\xa1\x89\x44\xef\xc6\x25\xcf\x5a\x5d\x3c\x48\xb9\x66\x3d\x6e\x43\x24\x1e\x8b\x1b\x7d\x2c\x65\x44\xae\x90\xcd\x1b\x0e\x11\x1a\x1c\x2b\x45\x9a\x6c\xe9\x77\x03\xb2\xe6\x17\x04\x3f\x0b\x2e\x32\xa9\xe5\x10\x37\x70\xc9\x1f\x0e\x2e\xbd\x3f\x04\x77\x56\x7c\x2e\x9e\xb8\xeb\x89\xbb\x3f\xfb\xe9\x57\x25\x86\x85\x2f\x80\xf9\xd1\xff\xae\x83\xc7\x20\xdb\xa1\x43\x43\x0f\x25\xbb\xe6\x94\x35\x2d\x9f\xd8\x3d\x7b\xf5\x81\x0b\x7e\x33\x21\xfc\xe3\xf3\x8b\xe7\x6e\xbc\x7e\xdb\x23\xc1\x25\xf0\x03\x7e\x87\x79\xe7\x9a\xfd\x6f\xe3\x79\x15\x65\x07\x7e\xdd\x3e\xfb\xe8\xdf\x2f\x9d\xb5\x09\xb8\x8d\xbd\x35\x77\x43\xd7\xf7\xd3\xc5\xaf\xc0\x08\x8b\x60\xb3\x3d\xbe\xa4\x7e\xd3\x3d\x0f\xc3\xcf\x66\x2d\x99\x58\x7a\xf7\xba\xcb\x07\xb6\xcf\x6d\x9f\x35\xf9\xc3\xcb\x5e\xc5\x53\xae\x7e\xfa\xe9\xe1\x75\xb6\x14\x27\xeb\x8c\x84\x11\x82\x73\xee\x6a\x5a\xce\xda\x2f\x8c\x8e\xde\x98\x46\x26\xed\x8f\x64\xc7\x92\x95\x77\x33\xd3\x4e\x20\x1b\x11\x83\x64\x23\x02\x3a\xd3\xce\xfa\x8e\x8e\x7a\x36\x59\xdf\x01\x4e\x8a\x24\x1c\x4c\x6a\x4d\x26\xea\xd5\x41\x19\xff\x32\xbc\xdf\x90\xca\x60\x5e\xe4\x7c\x59\x87\x52\xec\x9f\x98\x14\xb2\xa1\x04\x42\xa6\x30\xcb\xf1\x94\x0c\x82\xb6\x59\x6d\x99\xbb\x17\x8c\x98\x3b\xc6\x28\x86\xa7\x38\xd6\x4f\xb6\xda\x64\xe9\x6b\x07\x65\xf3\x09\x57\xfd\x7a\x62\x85\x37\xc8\x53\x59\x46\x13\x8d\xc3\x8e\xca\x45\xe2\x37\x65\x0d\x0d\xf4\x97\x10\x29\x6b\x68\x28\x7b\xe8\x0d\xbd\x58\x84\xcd\x85\x53\xe3\x17\x36\x3b\x0b\x6b\xdd\x1e\x8b\xca\x68\x9e\x53\x53\x32\xb5\x32\xec\x31\xc0\x1b\x0d\x4c\x2a\x39\xa7\xe2\xfc\x4b\x57\x1d\x59\x34\xdf\xa4\xfc\xba\xed\xde\xae\x86\x32\x26\x4b\x3a\xf1\xd4\x97\x65\x0d\xbf\x83\xa5\xcb\x4b\xa6\x4c\x2c\xd7\xd8\xeb\x73\x1a\x9e\x3e\x76\xec\xc5\x69\x42\x41\x52\xab\x51\xdb\x4a\xcb\x9d\xcb\x1e\x1c\xd1\xae\x61\x2e\x20\xeb\x25\x13\xd1\xbd\xe8\xd7\x08\x31\x9c\x4c\x11\x22\x43\xa1\x85\xb8\x0c\xe2\xce\x98\x45\x91\x49\x9c\xe4\x05\xce\x66\xe5\xce\xb6\x5e\x89\x67\x4c\x57\x6c\x56\xc6\x4c\x28\x8a\xdd\xe4\x22\x51\x0f\xb9\x8e\x2d\x6c\xc8\x58\x5c\xc9\x50\x76\x21\x1e\xcb\x87\x61\xda\x63\x59\x8b\xc9\x90\x61\x6f\x93\x83\x3a\x20\x8c\x28\x99\x9f\xd1\xec\x71\x19\xc2\x19\x9e\x18\x29\x0f\x94\xd5\x3c\x92\x55\x29\x35\x41\xb6\x93\x17\x91\xb9\x80\x5d\x7f\xe0\xa6\x63\x77\xdc\x70\x70\xdd\xfa\x44\xa1\x86\x8e\x84\x19\x30\xe6\x86\xce\x5b\x92\xda\xbd\xff\x9a\x4b\x53\x8b\x59\x95\x4e\x63\xf1\x8a\x96\xfa\x3a\x4b\xae\x41\xa7\x52\x26\xea\x19\x95\x4e\x8f\x8d\x8a\xfa\x7a\xbd\xc3\xa8\x65\xb9\x71\xe3\x8c\x8e\x1c\x78\x21\x58\x32\xa3\xe5\xad\x6f\xdf\x6a\x99\x59\xa4\x03\x65\x24\xa4\xf2\xd5\x00\xb5\x74\xe5\xc1\xeb\x5e\x7b\xfd\x40\x55\x2c\x57\xa7\xcf\xe5\x79\x41\xdd\xb5\x7f\xf2\xa4\xae\x55\x93\x92\x6b\x77\x77\x3e\x74\x59\xe3\xbe\xbd\x2f\xbc\xb8\x37\x9a\x85\x15\x2a\x97\xd5\x92\x6f\x31\x50\x6b\x1c\x8e\xc1\x37\x21\xb0\x3d\xb8\x66\xdb\x05\x6f\xb5\xcc\x28\x09\xe6\x2b\xd5\x6a\xbb\x56\xc9\x75\x2f\x4f\x1d\xbc\xf4\x92\x1c\xa3\x12\x28\xed\xce\xbb\x6f\xbf\xe1\x4a\x35\xbb\x3e\x91\x4c\xd6\xf5\xf4\x1c\x58\x31\x37\x57\xa1\xc8\x05\x6a\xc1\x84\xed\xe7\x2d\x89\x55\x54\xc4\x17\xb3\x2a\x9a\x32\xf9\xf0\x4c\x92\x63\x55\x6d\x3d\xa3\xc7\x3a\x9e\x53\x8d\xab\xd7\xe7\x19\x99\xfa\x71\x06\x47\xce\x94\xf3\xd7\xae\x9c\xd1\xb2\x70\x61\xcb\xcc\x2e\x17\x97\x63\xd0\xe7\x2e\x6d\x80\x59\xf8\x8a\xce\x15\x27\x0e\x5c\xf7\x9a\x5e\x1d\x0a\x2b\x28\x8a\xbd\x66\xc5\xf2\x89\x93\x5a\x26\xb7\x8a\x4b\xc7\x37\x5e\xf6\xb3\x45\xcf\xef\xdb\xbb\x37\xea\xc6\x6a\xa5\x4a\xc1\xd8\x74\xf8\x2e\x9d\x6d\xad\x98\x57\x38\xdb\x14\x5c\xd8\x32\x63\x65\x0f\xbc\xa6\x30\xeb\xb5\x76\xae\xad\xb0\xa2\x5c\x55\x9a\xad\xd5\xd3\x95\xc9\x2a\xa9\xce\xe4\x0d\x21\xf6\x63\x16\xa1\x1c\x94\x40\x9b\xd0\x4e\x84\x7c\x31\xab\x99\xe3\x69\x8f\x3b\x48\xf9\x83\x40\x44\x99\x6d\xb4\x2f\xe6\xb3\xb2\x44\x3c\x3e\x9e\x00\x7f\x90\xe2\xb1\x87\xa7\x0a\xb1\x4c\x70\x13\xb3\x82\xd9\x81\xf3\xa5\x01\x49\x29\x08\x7e\x9e\x22\xdb\xf4\x4c\x5c\xfe\xe5\x79\x8a\xf3\x11\x03\x44\x07\x65\x01\x33\x31\x46\x88\xd5\x02\x4f\xb1\x3a\x9d\x55\xa7\x4d\x5c\x72\xe3\x47\xe7\x6f\xf9\xfa\xe7\x77\x2c\x73\x2b\x68\x56\xa5\x65\xfa\x56\xc3\xa5\x70\xd3\xd3\x70\x83\xda\x60\x76\x87\x0d\x46\xa5\xa5\xd4\xc0\x58\x5c\xf6\x62\x53\x11\xb0\xbc\x42\xc9\xb0\x14\x05\xc0\x76\x87\x82\xdb\xc5\xdd\x39\x3e\x81\xd7\x7e\x1a\x98\x66\x32\xa9\x79\x61\xcb\x15\xfb\x77\x75\x25\x2a\x5a\x2f\xda\xba\x77\x69\xc8\xe2\x9e\xc7\x5a\x6a\x22\x35\x46\xf1\xbd\xe2\x05\x17\x1f\x3f\x6f\xd9\x6d\x8b\xc7\x65\xa7\x3b\x27\xd6\x37\xce\x76\xf0\xd5\x5d\x6b\xc6\xd5\xb0\x6c\x9e\x49\x1f\x9f\x31\xbe\x3c\xd1\xb6\xb9\xbd\x40\xa9\x53\x32\x40\x6f\x2e\xff\xd9\xdc\xc0\xef\xf4\xab\xca\x67\x15\xf0\x2a\x53\xc9\x8d\x56\x4e\x49\x61\x8c\x65\xb1\x58\x8c\xf5\x65\x2c\xa7\x81\xbb\xf3\xeb\x43\x85\x6a\x75\xbf\x6f\xaa\xd9\xac\xb6\x56\xcf\x0b\xb0\x65\xb3\xae\x69\x9b\xbd\xb7\xbd\xb1\x20\x57\x89\x77\x8c\x73\x46\xb1\xd5\x37\x33\x9e\x53\x73\xfe\xea\x99\xe5\xa1\xc6\xf6\xe9\xee\xf4\xad\x73\x4b\x8b\xad\xd9\x4b\x4a\x2a\x6e\xc3\xe6\xd2\x45\x23\x36\x3f\x29\xd2\x47\x85\x09\x42\x6b\xd5\x28\x9b\xd0\x61\x56\xe5\xd3\xb6\xb9\x23\x3e\x5f\x86\xd3\x32\x9a\xe1\xb8\x64\xc6\x84\x65\x7c\xe9\xbf\xb0\x56\xcf\x18\x6b\x11\x89\xee\x8c\x30\x78\xaa\xa3\x5e\x6a\x2c\x65\x67\x68\xb4\x00\xd3\x28\x3f\x9d\x3a\x95\xa2\xd0\x59\x84\x2c\x32\x12\x02\x35\x47\x4e\xe3\x57\x3a\xa5\xe6\xb7\x33\xf3\x2d\xdb\xa2\xcb\x88\xc2\x51\xfe\x53\x46\x1a\x0d\x22\x9c\x1c\x7b\x25\xe2\x3d\xa3\x7c\x74\x44\xe5\x20\x4c\x10\x6c\x96\xd1\x7d\x42\xc8\x0a\x2e\x83\xeb\xdf\x73\x81\xfe\x9b\x02\x0d\x87\xac\x74\xca\xc8\xa7\x65\xd8\x48\x92\x37\x0e\x22\x26\x75\x2a\x05\xa3\x3a\x0a\x6a\xb4\x3e\x55\xea\x9c\xa5\x96\x8a\x34\x43\xef\x70\x1a\x63\xfa\x77\x34\xea\x3b\xeb\x99\x65\xff\xb4\x73\x17\x54\xf3\x99\x75\xc2\x8f\xe2\x72\x9d\xf0\x9d\xa6\x38\x13\x48\xab\x3c\xa2\x3d\x94\xb1\x43\xb7\x59\xcd\xff\x67\xe5\x30\x2f\xa8\xb4\xab\x9e\x7c\x52\xb6\x31\x7f\xea\x29\xd9\xea\x7c\x38\xfc\xe4\x93\xca\x41\xe7\xff\xac\x68\xae\x3f\xf7\xe5\x46\xc2\x62\xff\xff\xae\xbc\xcc\x28\x0b\x05\x50\x05\x5a\x48\x74\x6a\xdc\xfe\x11\x43\xfd\x8c\xb5\xfe\xff\x55\x01\x31\x36\x11\xa9\xec\x2a\xb1\x5f\xce\xfa\xfb\x20\x3f\xcb\x40\xe7\xff\xac\x58\x70\x8d\x88\x94\x4a\x70\xca\x05\xf2\x3e\xc8\x25\x92\xae\xfa\x1f\x14\x06\x8c\x8c\x79\xf3\x32\xed\x08\x90\xae\x79\xd8\x19\xb5\x3a\x01\x7d\x76\x01\x67\x19\x6c\xc3\xdf\x82\xfd\x47\x82\x93\x67\x91\x60\x1f\xbc\x14\xee\xe7\x05\xbb\x28\x3b\x03\x72\x7c\xca\x2e\xc8\xeb\x8a\xb4\x3c\xf7\x21\xaa\x23\x28\x14\x1f\x59\x27\x1f\x26\x3f\xf0\x91\x9d\x92\x91\x25\xa3\x18\x3c\xbd\x3b\x41\xcc\x3e\x67\xc3\x5d\x50\x2c\xbe\x21\xb6\x8a\x6f\x60\x24\x3d\xcc\x81\x13\xc6\x5c\xe3\xdd\xd0\xa7\x4b\xaf\x97\x6e\x81\xaf\xa1\xcb\xe5\xc3\x50\x0c\x77\x35\x1b\x73\x8d\x27\x0e\x48\xc9\xb6\xdc\x2d\xaf\x69\xfa\x86\x10\xfb\x07\xd2\x47\xf9\x08\x06\x87\x2c\x41\x9d\x5e\x6e\x39\xfd\x63\x85\x6c\x30\xb2\x53\x71\xba\x35\xcd\x10\x37\x48\xc3\x48\x0b\xfb\xba\x4a\xb5\x2f\x37\x70\x8a\xd8\x9b\xe2\xa4\x6c\x95\x8a\x02\xb9\x83\x4f\x82\x6c\xa2\x4a\x11\x9e\xb4\x53\x7d\x81\xdc\x7d\x24\x25\x46\x80\xe8\xb7\x55\x76\xd5\xbe\x5c\xc1\x0e\x32\x13\x98\x60\x4f\xe6\x0e\xbc\x4f\x30\xfe\x76\xaa\x4f\x26\x08\xcb\xdd\x47\xd2\xf4\xf5\xc9\xeb\xed\x0a\xc4\x0c\x10\x5c\xb1\xf4\x2e\x23\x79\x2f\x99\x03\xd6\xef\x63\x86\x11\xd3\xb1\x38\xc4\x6c\x8c\x2f\xc6\x18\x18\x83\xcf\xe0\x33\x80\x81\x31\x70\x9f\xe5\x5a\x8d\xe9\x54\x56\x56\xfa\x86\xf4\x0d\x2a\xde\x64\xc8\xb5\x1a\x71\x2a\x2b\x0b\x77\xe1\x2e\xe7\x40\x16\x4e\x0e\x74\x62\x27\xdd\x9f\xee\x67\xbe\x33\xbb\x4e\xa5\xcc\x4e\x6e\x08\xa9\xd5\xdf\x7f\xcf\xa8\xcd\x2e\x46\x0a\x02\x09\x6a\x6f\x1a\x50\x7d\x41\x7f\xaf\x1d\x50\xbd\x4b\x7f\x7f\x2a\x4d\x7f\xff\xee\x80\x6a\xf4\xda\xb0\x01\x79\x50\x74\xb8\xbf\xe1\x80\x95\xb1\x82\x71\x88\xb9\xce\x11\x33\xbc\x11\x2e\xbd\x56\x52\xb6\x31\xd2\x9a\x0c\xa2\x93\x53\x68\x4d\x06\xe8\xe7\xe8\x2f\xcf\x08\x0e\xdc\xa5\x60\x31\x32\x9a\xb4\x0a\x56\x44\x46\x13\x8b\x4c\xda\x53\x49\xb3\x62\x08\xd1\x26\x2d\xd3\x67\x56\x80\xe4\x19\x1b\x43\x0d\x21\x95\xe9\x54\x52\x6b\xa2\x00\xa9\x4c\x4c\x9f\xd6\x34\xbc\x5f\xe3\xe4\xa4\xd7\x9c\x43\x3a\x64\x43\x15\x67\x2b\xaa\x0c\xbb\x32\xba\xd3\xcf\x32\x2c\x31\xc5\x8c\x27\xb8\x78\x10\x64\xa8\x27\x96\x85\x53\xe0\x37\x67\x3a\xdf\x88\xcb\xfe\xbe\x76\xf9\xfd\xe2\xa9\x88\x5b\x63\xa6\xe8\x2c\xc6\xc7\xbb\x74\x76\x5e\xc7\x1c\xb8\xf3\x1b\xb8\x05\xbe\x84\x5b\x70\xd3\x28\x5a\x4f\xf9\x1f\x82\xe2\xed\xe2\xbb\xf7\x1a\xef\xaf\x50\x51\xc0\xab\x75\x56\xc6\xc5\xfb\xec\x65\x65\xe3\xfd\x0b\xd2\xd7\x3c\x00\xfe\x7b\xef\x45\xa7\xf5\xd2\x46\xf2\x1d\x24\x8c\xae\x63\x6c\x83\x86\x5d\xec\xa4\xa5\xf7\x25\x1f\x38\x96\x8b\xd5\x81\x34\x2e\xf7\xc6\xf4\x02\x98\x47\x1e\xc8\xe3\x16\xfc\x51\x21\x26\x24\x70\x3c\xc1\xc4\x89\x26\x15\x78\x9d\xb4\x03\xce\xf9\x64\x27\xc5\x2e\xf1\xc8\xeb\xd7\xec\x9c\x97\x93\x15\xbc\xe1\xc2\xa2\xca\x09\xb5\xaf\xc0\xd2\xd7\x5f\x87\x19\xd2\x03\x4f\x6c\x7a\x5e\x3c\x55\x3e\x8e\xd1\x65\xd1\x14\x03\x2a\xac\xc1\x5c\x99\xa5\x20\xcb\xa1\x3e\xf2\x8b\xd3\x4b\x1d\xf8\x17\x67\x3f\x77\x6a\xcf\x5f\xae\xec\xf9\xcd\x94\x50\x67\xdb\x8c\xba\xd5\x02\xab\xd8\xf3\x17\x30\xfe\x45\xdc\xf3\x80\xf8\xee\xbd\x8a\x07\xc7\xf3\x0a\x8b\x01\x68\x3d\xad\xa3\x78\xac\x88\xda\x2a\x82\x93\x03\xf3\x81\x3d\xbc\xf3\xab\xfb\x96\x2f\xbf\xef\x2b\xf2\x3b\x2a\x69\xc4\xfc\x03\x51\x88\x45\x2a\xa4\x95\x5a\x69\x83\x12\x0c\x90\x0d\xc4\xc5\x08\x23\x11\x89\xe4\x5b\xf2\xc3\x7c\xf0\xa7\x8f\x8b\xef\x50\x5b\xd2\xc7\x21\x40\xdf\x2a\xf9\xf1\x74\xf1\x5d\x29\x96\xac\x1b\xce\x1c\xea\x63\xef\x67\x92\xc4\x0e\x9d\x05\xe4\x71\x53\x02\x85\x3d\x6e\xce\x9f\xc8\x58\xbd\x1a\xe5\xf9\x4d\x3c\xe6\x71\x73\x46\xc6\xca\xde\xaf\x12\x9f\x16\xff\xeb\xf3\xab\x97\x14\xb7\x4e\x9e\x63\x5c\x33\x35\xeb\xae\xe0\x2d\x73\x16\x6d\xb2\x15\x5b\xe3\xe3\xc2\x2b\x96\x2b\xb4\xdb\x2a\x93\x5b\x61\xd6\x00\x75\xea\x2f\xe2\x62\x71\x06\x70\xbd\x50\x0f\x6c\xf3\x12\xcb\xf5\x81\xab\x14\xca\x4b\xf6\x88\x1f\xcf\xfd\xf1\x27\x3f\x99\xb3\xc7\x0e\x57\xaa\x15\xe8\x0c\x1e\x1c\x0a\xa9\x08\xb3\xb6\x0b\x28\x93\xcb\x44\x01\x8b\x4e\x21\xba\xf6\x83\x0f\xd2\x97\x7d\xf0\x01\xd4\x32\xa9\x53\x08\xee\xc0\x5b\xa0\x40\x7c\x3b\x7d\xa5\xf8\x1a\x3a\x43\xbb\x82\x42\x46\x34\x0e\xcd\xc9\x9c\xcf\x11\xce\xed\xb8\x3f\xee\xf7\xf8\x3d\x1c\x13\xb2\x72\xf1\x48\x10\x0f\x93\x82\x84\x2c\x04\x65\x6e\x71\x45\xfd\x41\x9c\x80\xa8\x21\x1c\xf7\xb8\xa5\x91\x74\x24\x81\x21\x4a\x40\x7a\x51\x83\x8b\xb3\x59\x33\xe9\xa4\x7c\x50\x7b\x35\x4d\xf9\xd9\xab\x56\x65\xe7\x37\x69\x16\x45\x9d\x51\xf1\xb0\x33\x1b\x1e\xf0\xd4\x4f\x2e\xbf\x74\x77\x67\xb3\x59\xa5\x6d\x84\xbe\x43\x2c\x83\x01\x9e\x11\xfe\xc8\xd2\x34\xa5\xc9\xc1\xe7\xc7\x38\x06\x8b\x5f\xd9\x66\xd9\x34\xfc\x44\x29\xfb\x74\x9f\x6b\xd6\x86\xec\xca\xca\xec\x0d\xb3\x5c\x9d\x9d\xc7\x9c\xa5\x96\x78\x93\x8f\xdf\x78\xd1\xe4\x94\x42\xdc\xc9\x6b\x80\x6b\x9d\xcb\x03\xd0\xb4\x8a\x81\x5d\x29\x96\xa5\x5a\x72\x72\xf2\xd4\x83\xbf\x9c\xab\x04\x8a\xd2\xb0\x58\xb1\xdc\xca\x99\xc5\xab\x79\x25\x56\xce\x95\x9f\x7d\x19\x69\x83\x4a\x51\x25\x9a\x81\xda\x64\xa5\x08\xb2\x21\xe3\xcc\x6c\xc2\x64\x28\xda\x7d\xa6\x04\xd8\x18\x02\x2d\x91\xde\x95\xa8\x8f\xa2\x09\xc0\x01\xa4\xde\x85\xf4\x33\x10\x8b\xf8\x05\x77\x66\x62\xea\xe6\x58\xb3\xac\x3c\x28\x0c\xd3\x40\x9b\x39\x54\x1d\xd2\xbc\x29\xee\x17\x5b\xc4\x6b\xdf\x54\x87\x13\x9b\x66\xcd\xa9\x79\x0f\x0a\x36\x51\x59\x3c\xac\x37\x4e\x2e\x4a\xb4\xb6\x6e\x9f\x27\x3e\xd4\x05\xc5\x7f\xa8\x9a\x33\x6b\xd3\xa9\xdb\xe6\x6d\x6f\x6d\x4d\xd4\xb6\x52\x85\x6a\xb5\xca\xa1\x2e\xe8\xed\xed\x2d\x50\x3b\x54\x6a\x75\xd1\xf5\x1d\xad\x1d\xd7\x5b\xb7\xcf\x6b\xad\x4d\xb4\xe2\x87\xaa\x16\x65\x07\x43\x37\x8b\x3f\xdc\x78\x23\x28\x6e\x2e\x2d\xcd\x5e\x5c\x35\x73\x73\xdd\x0d\x2a\xac\xd4\xea\xa9\x19\xbe\x92\x79\xdb\x5b\xe7\x25\xa6\x88\x01\xe5\xf5\xb5\x9b\xc5\x3f\x92\x9b\xb4\x8a\x9d\x6a\x87\x5a\xa5\x2a\x0c\x04\x0a\x55\x2a\x55\xbe\xba\x28\xa4\x54\x86\x7e\x90\x6e\x36\x6f\x3b\xa9\xd3\x13\x86\x30\xfb\x04\x8b\x50\x19\x42\xa6\x70\x82\xf2\x86\x43\xb4\x4d\xea\xd2\x1c\x54\x02\xe2\x06\x56\x03\x7e\x01\xfb\x05\x63\x9c\x07\xce\x15\x0b\xd2\xa5\xc0\x53\x13\x40\x3f\xe7\xda\xa7\x01\x0e\xfe\x11\xd6\xae\xeb\x1a\xb8\x19\x56\xde\xf5\xfb\xb7\x5f\x6a\x5c\x28\x7e\x25\xde\xb6\xef\xa9\xef\x30\xf5\xd9\xef\xcb\x6a\xf4\xf8\x42\x85\x33\x31\x7d\x66\x83\xd5\x7a\xf9\x8f\xcf\xdf\x84\x3f\xbf\xf8\x8f\xbf\x39\x34\xf7\xf7\xcf\x3f\x31\xf4\xe4\xba\x63\x33\x9d\xf6\xf1\x61\xf1\xf2\xf8\x14\x1c\x6b\x84\xce\x5f\x7d\x0b\xb3\x97\xd4\xec\xea\x98\x7a\xf1\xd4\x0a\xbb\x0e\x80\x99\xbe\xf3\xfa\xe1\xfa\x4a\xb0\xf5\x32\x1b\x7d\x0e\x42\x51\x83\x2b\x33\xa4\x90\x2a\xa4\xcb\xe2\x8a\x8e\x0c\x96\xc2\x4a\xd4\x51\xff\x43\xb2\xbe\x03\xa7\x20\x95\x46\x80\xd8\xce\xfa\x8e\x7f\xa0\x8e\x7a\x27\xee\x4c\xf7\xd6\x77\x74\x80\x9b\x98\xb0\xa4\x3a\xea\xfb\xfb\xeb\x3b\x46\xb0\x9d\x4f\x10\xbb\x95\x32\xa9\x7f\xf7\x91\x2d\x39\xa9\x22\xc8\x7a\x92\x71\xa2\x26\x25\x2f\x58\x87\x43\x5e\x25\xb0\xc8\x35\x4a\x70\xd4\x46\x79\x88\xfc\xbd\x03\x78\x60\xcb\xde\x9b\xf2\xdd\xbe\xeb\x7e\xd8\x3f\xe7\xda\x17\xd6\xee\x3a\xd9\xfc\xf6\x5a\xf1\xe8\xcb\x3f\x11\xdf\x7b\xe3\xe2\x8b\xdf\x00\xe1\x27\x6f\xc2\x7a\x31\x89\x7f\xb1\x49\x6c\x12\xbf\x7e\x78\x78\x85\xf7\x61\xa0\xe1\x8e\x8b\x8e\xfa\x3b\xaf\x70\x96\x68\x54\x25\xdf\xaf\xdb\x7a\xd5\xfe\x1f\x0e\xac\x7d\xe1\xda\x39\x17\xac\xbe\xe8\xee\xbe\x8b\xdf\x10\xdf\x13\x9f\x96\x2e\xf1\x16\x9e\x28\xf6\xa6\xc5\xf7\x4e\xb7\x95\xe2\x77\x27\xc5\x4d\xbd\x40\xcc\x49\x10\x8d\x9c\x43\x88\xed\xcf\xf0\xe9\x66\xf8\x08\xe2\x2e\xf0\x1b\x20\x1f\x0c\x4a\xec\x02\xe6\xba\xf4\x4d\x0b\xa9\x79\xa7\x7e\xf1\x28\x7d\xd4\x7c\x5d\xfa\x2f\xb0\x50\xd4\x0c\xde\x0d\xcb\xa8\x6a\xd8\x79\xfd\xe0\x87\x9b\xa8\x05\xe9\xec\xce\x45\x83\x3f\x85\xe9\x78\xc7\xe0\x87\xb8\x7a\xb8\x6c\x52\xcc\x37\x64\x3f\xf7\x22\x84\x80\x28\x92\x8f\x48\xd6\x8c\xf8\x19\x83\x2b\x83\x64\x71\x19\x22\xd5\x10\xca\x83\xf0\xb0\x1b\x1d\x71\x13\xd8\x1a\x36\x8c\x68\x12\x5b\x64\xba\x9c\x58\x38\x94\x27\xef\x3e\x78\xdc\x9c\x25\x14\x73\xe0\x33\xce\xa9\x86\x90\xc5\x20\xbb\x38\xa5\xef\xd4\xeb\x3b\xf5\x18\x0d\xbb\xe9\x54\x4f\x6f\x4f\x5a\x8a\x1e\xf9\x30\x1a\x4e\x0f\x4e\x57\xb1\xcb\x59\x22\x58\xa6\xea\x0d\x35\x9c\x7e\x62\x8e\xb1\xd1\x14\x08\x81\x9e\xd3\x30\xa3\xd3\x62\x7d\xbf\xfe\xf4\x7f\x5a\x0f\xc9\x96\x9e\x9e\x16\xb1\x0f\x7f\xa3\xd7\xf7\xe0\x1e\xbd\xbe\x87\x7c\x58\x8e\x02\x80\xcb\x75\x1e\x9b\xd3\x69\xf3\xe8\x0c\x2a\x9d\x4e\xff\x3b\x9d\x56\xa7\xb9\x14\x80\xe2\xd8\x9e\x4c\xc2\xf4\xfe\x1e\xbd\xac\xf1\x48\xea\x6a\xb7\xcc\x80\x25\x0f\xb7\x6a\xc1\x65\xb5\x39\x18\x32\xae\x1f\x26\x79\x93\x67\x92\x1e\x77\x90\xf1\x07\x29\x8f\x8b\x00\x7e\x64\x95\xa7\x70\x48\xea\x6b\xd9\x6a\xc8\x34\x3e\x52\x0f\xec\x71\xf3\x34\xc7\x72\x52\x0d\xb7\x29\xbe\xd1\xeb\xc5\x3e\x85\x42\xc9\xe9\x07\x7f\xea\x0b\xea\x0d\xf9\xb6\x7c\xa7\xa1\xd3\xc8\x03\x19\xf3\x8b\x7d\xbc\xb1\xd3\x59\x55\x1c\xcc\xf5\x1b\x4d\xb6\xdc\xe2\x92\x2c\xf1\x06\xeb\x55\xad\xdd\x87\x0f\x77\xb7\x5e\x65\xed\xca\x2a\x29\xce\xb5\x99\x8c\xfe\xdc\x60\x71\x95\x73\x95\x65\x49\x42\x7a\xe8\xc4\x12\xcb\x2a\x83\x33\xdf\x96\x6f\xd0\x07\x7d\xf4\x02\xa7\x1e\xff\x41\x21\x28\xfa\x18\x5a\x65\x4c\x55\xad\xf2\x79\x13\x4e\xaf\xbe\x73\xf8\xe2\x46\xbe\xd3\x9c\x13\x13\x9a\xfd\x05\xd1\xca\x46\xf7\xec\xd5\x87\xdf\x38\xbc\x7a\xb6\xbb\xb1\x32\x5a\xe0\x6f\x16\x62\x39\xe6\xca\x49\x3d\xbd\x3d\x93\x2a\xf5\x5e\x67\xc2\xeb\x5b\x55\x95\x32\x9a\xd5\x67\x62\x03\x38\x64\x40\x2e\x32\x26\x21\xe0\x17\xa4\x17\x3c\x2e\x43\x98\xf8\xc6\x80\x5a\x2e\x9e\x5e\x91\x4e\x57\x00\x7e\x64\x97\x38\xfd\xe7\xe9\x9d\xf8\xf2\x73\xa1\x55\x12\x3d\xd3\x40\x2b\xfe\x03\xe8\x47\x07\x53\xa0\x85\x95\xe7\xd8\x3c\x91\xda\x90\x77\x95\x88\xf1\x23\x3f\xaa\x42\x53\xd1\x62\xa2\x41\xec\x67\x87\xf9\x9b\xe2\xb1\x68\x44\x5e\xab\xb6\xda\xa4\xe6\xde\x2f\x6f\xf1\x13\x04\xdc\x69\xf5\x0e\x59\x23\xce\x01\x36\x59\x06\x5e\x3a\x4d\xef\x17\xc8\x12\x95\x57\x3f\x12\x15\x8d\xc8\x8b\x52\x36\x76\x4d\x43\x94\xd3\x73\x05\x59\x1a\x4d\x7e\xae\xca\xb6\xed\x77\x17\x5e\xf6\x49\x6c\x75\x8b\xb5\x38\x69\x6b\x5a\x29\xfd\x1c\xb4\x75\xfa\xba\x1b\x5f\xba\x7a\xe0\x4f\x77\x7f\xf3\xe2\xa1\x04\x24\x7e\xf9\x67\x68\xb3\x6d\xba\xf1\xd4\x62\x5b\x41\x96\xc9\xae\x31\x4e\x9a\x64\xd4\x44\xea\x8c\x8b\x01\x5d\x66\x2b\xb0\x99\xec\x5a\xe3\xea\xd5\x46\xad\xdd\x9e\x30\xc2\xc3\xd5\x8b\x2c\x25\xa5\x59\xb9\x94\xaa\xd2\x31\x69\xf2\x85\xaf\x6f\x3b\x70\x41\xee\x34\x5b\xb2\xd8\xda\x74\xe8\x8d\x43\xeb\xa6\x5d\xfd\xe2\x5f\xef\xbe\xf1\x33\xeb\xa3\x9f\x89\xbf\xfc\x63\xf6\x13\x17\x3c\xb8\xdf\xa5\x35\xd4\xd9\xbb\x00\x77\xd9\x13\x5e\xad\xfd\xea\x06\x31\xeb\x05\xb7\xd6\x98\xb0\xdf\xfe\xdc\x2f\x6f\xb3\xd7\x19\x8c\x9a\x1c\x84\x91\x77\x08\x31\xef\x93\x7d\xf8\xb5\x08\x31\xa4\xd7\x93\xde\x55\x99\x97\x91\x95\xaa\x6a\x34\x92\xa0\x42\x0e\x8a\xc0\x73\xf3\x81\x68\x92\xd2\x7e\xc1\x1f\xa4\xa2\xc3\x4b\x6c\x84\xe3\xcb\x53\x08\x41\x9a\x58\x7c\x11\x55\x53\x07\x65\x73\x28\x98\xf7\x2f\xfe\xf9\x8e\x1d\x3f\xbf\xf8\xe4\xc6\x9b\x5d\x07\x4e\xae\x79\xf4\xc2\x25\x31\x8f\x46\x99\x5b\x32\xab\x7b\x66\x71\x8e\xc2\x96\xbb\xda\x1f\xd8\x78\xd8\x58\x12\xeb\x68\x6f\xcc\xd5\x6d\xba\x7a\x45\x41\x41\xdb\x65\x2f\x6c\xdb\xfa\xe2\x25\x0b\x04\x47\x51\xac\xd8\x80\x59\x93\x3d\xe2\x0d\xe6\x9a\x75\xad\x3e\x5f\xc3\xd2\x42\x95\xd0\x70\xf1\xbc\xe6\x8b\xda\x1b\xcb\xdc\x26\x15\xd6\xce\xdf\xb1\x63\xfe\x82\x1d\x3b\x9e\xd1\x3d\x78\xfe\x94\xe4\xb4\xc2\xf1\x73\x67\xcf\x0c\xf3\xa6\xd2\x71\x61\xaf\xa7\xb4\xda\xcf\xbb\x4b\x73\x1c\x18\xce\x9b\x69\x2f\x29\x16\x42\x25\x6e\x2d\x17\x5f\xb0\xe1\xca\x8e\x69\xfb\x77\x2d\xae\x8c\xcc\xec\x5e\x19\x0e\x36\x16\xe5\xa9\x54\x46\x21\x36\x2f\xa6\x37\x01\x24\xa6\xf9\xb2\x84\x58\x59\x75\x5e\x76\x65\x2c\x19\x9f\x18\x6b\x0c\x8f\xb6\xc3\x93\xed\xd7\xcf\xda\x3d\xf0\x8d\x09\x8f\x16\xe2\xc6\x7d\x46\x7e\x88\xcc\x3d\x01\xf1\x46\x38\x33\x94\x1a\xab\xb9\xdd\x89\xc9\x9b\x7c\x7a\x51\x28\xe3\x87\xa1\x31\xca\xda\xf4\x28\xfe\x19\x1b\x59\xb5\x41\x68\x94\x35\x3c\x72\x26\x40\x1f\x04\x27\x0f\x7a\xab\x6f\xb4\x56\xda\xe8\xb5\x86\x4c\x18\x97\x9e\x69\xd3\x0e\xb7\x42\xe0\xd4\x81\x03\xa7\xc4\x77\x4e\x1d\x38\x00\x5f\x4b\x79\xe8\x3b\x9d\x29\xf2\xc5\x8c\xcd\xf8\xc0\x03\x07\x4e\x8d\x9c\x35\xed\x8c\xac\x8f\xf2\x9f\x31\x7e\xd5\x49\xfd\x39\xfc\x8b\x92\xa3\x93\xa3\xaf\x00\x7d\xff\xaa\xac\xce\x2a\x1f\x6a\x4c\xf9\xfc\xd3\xd2\x89\x8f\xb6\xd5\xfc\x77\xa5\xb1\xf6\xf4\xf3\xfc\x3f\x14\xc1\x58\x7c\x94\x0f\xd5\x22\xe4\x33\x11\x83\x66\x42\xaf\x0e\x26\x97\x89\xa0\xb8\x65\x10\xfc\x88\x1b\xb2\xfa\x0c\xe4\x65\xcc\xf4\xb0\x19\x7f\xcc\x69\x65\x3f\xf0\x50\x26\x53\xde\x8f\xa9\x3c\x93\x89\xf2\xb0\xed\x73\x7f\x9c\x3d\x97\xf2\x66\x03\x22\x93\x26\xe9\x0b\x65\x7b\xc5\x5d\x42\x44\x38\xfc\xc6\x61\x21\x22\x7c\x0c\x89\x8f\x53\xe2\x0b\xb9\x56\x8b\xc5\x9a\x0b\x95\xd4\xa4\xc1\x1f\x29\x2e\xcb\x35\x5a\x71\xd3\xf5\x93\x21\x24\x6b\x4f\x48\x2d\xd4\xb0\xff\xe8\xc7\x1f\x67\xec\xec\x24\xc7\x42\x18\x8a\xaa\x51\x23\x5a\x43\x66\xf1\x52\x3b\x3e\x8c\xf9\xcd\x28\x60\x40\x02\xfc\x54\x10\x78\x19\x66\xed\x1b\xce\xb9\x55\x7e\x4b\x46\xfc\xa6\x58\x10\x88\x1e\xa9\x2d\x1c\x8a\x01\xe5\x21\xb8\xcd\xcc\xcf\x40\xf0\xb3\x1e\x2a\x08\x45\xc3\x2c\xff\x52\xfb\x4c\x72\xa9\xdb\xa8\x98\x1c\x1c\x40\xc1\xc9\x8a\x8d\x3a\x29\x0c\xcb\xed\x1e\xec\xc4\x05\x11\xe9\xdb\x97\x0d\xbd\x42\x44\x10\x22\x02\xa4\x32\x6e\xa7\x13\x7b\x22\x05\xd8\x89\x3d\x76\x26\xdb\x37\x70\x71\xfb\xee\xe5\xa6\xbd\x0b\xee\x94\xf1\xea\x77\x2e\xd8\x6b\x5a\xbe\xbb\x5d\x3d\xa1\xe4\x4e\xc1\x2e\x4a\x11\x25\x13\x28\xa9\x04\xd3\xdd\xc1\x9a\x9a\x20\x3e\xdc\xd4\xdd\x34\xd8\x8f\x0b\xec\xd0\x6b\xf7\xd0\x05\x76\xb1\x33\xdb\x9d\x84\x5e\x42\xb3\xd0\x49\x8a\xe7\xb4\xdf\x02\xbd\xf6\x02\xda\x23\x05\x0a\xb0\x9b\x7e\x4f\x5c\x06\x8f\xb5\xae\x93\x0e\xaf\x6b\x15\x27\xc1\x2d\xc5\x15\x92\xbf\x02\x61\xe4\x1a\x4a\xb1\x1f\x91\x39\xd8\x74\x84\xc0\xe4\xa1\x40\xaa\x07\x94\x2b\x64\xb3\x92\xc5\x25\x8a\xa0\x41\x85\xb8\xc9\x33\xe2\x93\x6a\x09\x59\x47\x1a\xe5\x8b\x65\xf4\xf1\xc3\x23\x3e\xe9\x0a\xd4\x47\x49\x31\x49\x89\x15\x5c\x96\xf8\x58\x12\xe2\x3a\x95\x8a\xae\x60\xec\xe2\x63\x33\xb8\xac\x7e\xbd\x4a\x49\x4d\x13\x67\x70\x59\x1f\xeb\x88\xef\x25\xc9\xa9\xe0\xb2\x60\x52\x52\xf2\x93\x94\x30\x69\x06\x97\xdd\xaf\xcb\xa4\xcc\xf8\xa4\xeb\x28\x31\x02\x34\x84\xe0\x87\xfe\xac\x21\xa4\xe1\xf9\xfe\x2c\xf1\xd1\x2c\x8d\x46\x0f\x15\xc3\xae\x46\xa3\xef\xcf\x02\xf9\x18\x4c\x96\xe2\xc4\x17\x87\x5d\x8d\x46\x9e\x7f\xae\x1a\x42\xcc\xa1\x8c\xbd\xa6\x81\x58\xdc\xdb\x38\x83\x8d\xa3\x94\x94\x81\xe2\x94\x60\x03\xa4\xc7\xc4\xda\x12\xeb\x8d\x84\x65\x93\x6a\x3c\x78\xe8\xd0\xc1\x5d\xf0\x9a\x78\x02\x42\x62\xd9\x50\x3b\x24\xc5\xbe\x76\x34\x84\x7f\x9b\x5c\x77\xcf\xb3\xdf\x3f\x7b\xcf\xba\xe4\xb0\x07\x3e\x3d\x78\x88\xda\x7b\xe8\xe0\xe0\x62\x78\x0d\x42\x10\x82\xd7\xd2\x47\xd0\x50\xbb\xf8\x8c\xf8\x4c\x3b\x1a\x82\x1e\xb1\x43\x7c\xe1\xa5\xed\xe5\xe5\xdb\x5f\x82\x4a\xb8\x0d\x2a\x65\xbf\xfc\x6e\x06\x86\x10\xf5\xce\x48\xbe\x90\x2f\xee\x37\xc4\xfd\x26\x25\x18\xc0\xaf\x84\x38\x18\x00\xcf\xbe\xff\xfe\xfb\xef\x77\xc2\xb2\xf4\xe7\xe2\xdb\xab\x61\x93\xb8\x77\x35\x14\xe0\x9c\xf5\xf7\xdd\x07\x6b\xef\xbb\x2f\xfd\x37\xf1\x96\xf4\x67\xf8\x05\xf1\x9d\xd5\xb0\x19\x36\xaf\x16\xdf\xc1\x2f\xa4\x3f\x93\xed\x6a\x32\x58\x2f\x1d\xb2\xa1\x02\x54\x8e\xd0\xc8\xca\xd1\xc8\x0a\x12\x4b\xd8\xfc\x4c\x66\x0e\xe4\xf5\xc3\x48\x1c\x48\xe3\x4c\x67\x8e\x30\xa8\xb9\xab\xb9\xb9\x2b\xdd\x4c\x1c\xba\xf9\x63\x99\xa9\xef\x12\xed\x40\xbf\xc9\xd9\x6b\x17\xb4\xb4\x93\xb8\xe9\xce\xcc\x91\x57\xa4\x74\xcd\x14\x49\xde\x2c\xe6\x0f\x13\xfb\xf5\x99\x8d\xa7\x52\x76\xc1\x6e\x36\x32\x29\xbb\xf0\x44\x26\x9a\xac\x1b\x51\x43\x93\xd8\x34\xf3\x18\x59\x25\xd1\x23\x1b\xca\x43\xc8\xa4\x84\x20\xc4\x4d\x05\x00\xe5\x52\xf3\x14\x0b\x81\xc9\xca\x72\x4a\x28\x97\xfc\xb6\x2e\x2a\x6b\xf0\x16\x23\xcf\x2d\x87\x13\xf8\xa0\xf8\x70\xfa\x9b\xe7\xc5\xd0\xf3\x8a\x10\x53\xb6\x9c\xe3\x8d\x83\xb7\x50\x59\x24\xa8\xa0\x12\x83\x4a\x7c\xbe\xb6\xc8\x02\x91\x41\x25\xdb\x96\xbe\x05\x2f\xb3\xa5\x2f\x15\x5f\xb1\x14\x69\xd3\x57\x51\xff\xc0\xcb\x6c\xb6\x51\xeb\x6d\xfd\x88\x22\xbb\x2e\xe5\x08\x41\x38\xea\x01\x62\x43\xee\xb7\x39\x20\x4e\x18\x26\x19\xb3\x34\x5d\x97\xe1\x93\x6e\x19\x3c\x29\xcb\x7e\x48\x9d\x85\x11\x52\xbd\xbd\xd4\x84\xae\x3d\x97\xff\xd8\x09\xad\x3f\x1c\xbc\x44\x0c\x10\x6e\x83\xd4\xd2\xf9\x62\xfa\xd1\x6d\x27\xaa\x4c\xcd\xa6\xaa\x13\xdb\x1e\x15\xd3\xf3\x97\x7e\x03\x47\xe0\x0b\x38\xf2\x0d\xee\xeb\x4f\xbf\xb1\xd0\x8b\x61\x51\x53\x67\xcb\x62\x80\x8b\xfa\xfb\x9e\xb8\xe3\xbc\x1d\x47\x3e\x5c\xd9\x0a\xd0\xba\xf2\xc3\x23\x3b\xce\xbb\xe3\x89\xd7\xe5\xce\x60\x98\xbb\x61\x78\xfd\x44\x9e\x67\x99\x50\x00\x15\x65\x6c\xbe\x2d\x9e\xa8\x89\x28\x91\xb9\x4e\x7f\xc8\x52\x3f\xf8\x39\x62\x7c\x92\xe9\xe2\x20\xee\x62\xe2\x2e\x66\x0c\x6e\x0f\x53\x83\x83\x83\xd4\xb7\xe2\xbd\x30\x27\xdd\x89\x7b\xd3\x9d\x94\x5f\xa3\x70\x8a\x97\xfd\xee\x77\xe2\x65\x4e\x85\x46\xa3\xa0\xdf\x51\x68\x06\xef\x7e\x4c\xec\xc6\x7b\x3e\x10\xbb\xf1\x27\x73\x13\x03\x81\xc4\xdc\xb9\x09\xfa\x9d\xc4\x5c\xbc\x3e\x95\x42\x43\x3b\x76\x88\x90\x4a\x01\x92\xfd\x83\xb7\x4b\x67\x0c\xa1\x7b\xef\x05\xa4\x51\x0c\x04\x14\x1a\x0d\xdd\x71\xf8\xf0\x61\xf3\xe9\xd3\xe6\x9e\x81\x59\xc9\x97\x7a\x25\xc8\x6c\xd8\xb3\xf9\xe0\xa0\x6c\x56\x9b\x83\xb6\x59\xe3\x31\x29\x06\x43\x90\xc1\x7e\xa7\x06\x1c\x14\x0f\x1c\x6b\x01\x0f\xf0\x38\x88\xa9\x54\x57\xc5\x9e\xd7\xdc\xde\xf9\x2a\xbf\x3f\xb1\xbc\x35\x5a\xac\xa4\x8b\x5b\x36\x6d\xbc\xae\xe9\x46\x80\x50\x34\x77\xea\x2b\xe2\xcc\xe6\xf5\xb3\xaa\xab\x82\x4d\x7e\x30\xc0\xb3\x10\x3d\x79\xd5\x4c\x07\xc3\x6b\xb5\x30\xbe\x4b\xfc\xa3\x75\x4f\xd7\x7d\x87\x1e\xc7\xaf\xfd\x6a\xe6\xcb\x9b\x4c\x86\x80\xde\x91\x5f\xb4\x7c\x77\xc7\x6c\x83\x62\xf6\x55\xf7\xec\xdc\xec\xac\x67\x29\xb7\xd7\x52\x05\x21\xf1\xe2\x9a\x9d\x47\x6e\x78\xff\x79\x08\x5d\x31\xb9\xe7\xf8\x5d\x9f\xdf\xf3\xe9\x96\xd9\xb3\x6d\xe2\x63\x90\x87\xb3\x78\xec\x9c\x8b\x46\x61\xdb\x4a\xc9\x0e\x16\x51\x98\x47\x41\xe0\x68\xa7\x4f\xe0\xc9\x5e\x32\x8f\x75\xc0\x12\x00\x42\x1d\xc4\xe2\x61\x6b\x3e\x58\xc3\xa1\x78\x02\x4a\x21\x88\xfd\xd2\x18\x3f\xf3\x46\xd2\x63\xe6\x22\xe8\xdf\x00\xf0\x99\x65\x9a\x12\xbb\x38\x20\x7e\x29\x0e\xd8\x4b\x34\x39\xf6\xe7\xd6\xe0\x1c\x7b\xae\x52\x65\xcd\x56\xf2\xc5\x7a\x45\xcc\x50\x68\x88\x29\xf4\xc5\xbc\x32\xdb\xaa\x52\xe6\xda\x73\xf0\x9a\xe7\xec\xe2\x23\x64\x81\x13\xef\x59\xf7\x94\x38\x20\x7e\x22\x0e\x3c\xb5\x6e\xdd\x53\xc0\x80\x03\x98\xa7\xc4\x26\xf1\x45\xf1\xb3\x13\xdb\xb6\x9d\x80\x5c\xa8\x80\x5c\xe2\x7b\xf1\x5c\xf3\x9f\x39\x91\x1c\x36\x91\x60\x73\x22\x25\x6c\x50\x73\xeb\x87\xf3\x27\x59\xb2\xcb\x54\x74\x81\x79\xcf\xd6\xad\x7b\xcc\x05\xb4\xaa\x2c\xdb\x32\x69\xfe\x87\xb7\x6a\x82\xec\x31\xb2\x9c\xba\x7e\xcc\x9d\x24\xdf\xea\x6d\x27\xc4\xcf\xc6\xdc\x50\x2c\x3b\x17\x0c\x0d\x51\xa8\x61\x08\x31\x4f\x64\xca\x78\x32\x42\xc8\x4a\xcc\x61\xc8\xec\xc7\x44\x68\xed\xfd\x19\x04\xa7\x3f\x16\x07\x3f\xc7\x06\x81\x60\x72\x6d\x52\xf9\xeb\xc0\x87\x65\xd0\xb4\x19\x42\x71\x32\xab\x80\x68\x24\x6e\x63\x2d\x66\x2b\xb3\xbd\x81\x29\xa6\x6b\x0b\x58\xaa\xb8\x92\xf2\x5c\x13\x3f\x78\x65\xdb\xab\xd7\x5e\x76\xde\x95\x5b\x6f\x07\xc5\xa1\x5f\xb8\x5a\xab\x18\xe7\x5f\xed\x0d\x0e\xf8\xd2\xab\x31\x14\xbd\x0a\x1b\x0b\x0e\x76\x75\x1d\x5c\x39\xf8\x5e\xf7\x82\x3d\x07\x9e\x3a\x38\x70\x60\xd3\x9e\x9a\x57\xf1\xf7\x13\x4b\xd3\xef\x16\x56\x00\x35\xbe\x18\xee\x57\xac\xdf\xf1\xce\x2d\x57\x2e\xbf\xec\xda\x13\x0b\xaf\xda\x90\x03\xc5\xf3\x7e\xe2\x60\xea\x5b\xf3\xde\xb4\x71\x46\xf1\x73\x4b\xe9\xf8\xd0\x97\x66\xb8\xbb\x4b\xba\xcc\xa9\xa7\x6b\xf7\x6c\x3a\x70\xea\xe0\x93\x07\xf7\xb4\xae\xb9\xf6\xd5\xb3\x34\x7e\xa7\x11\x2d\xb8\x31\x1a\xbf\x60\xe6\x31\xc7\x63\x79\xb3\x9b\x44\x27\xa8\x38\xe1\xb5\x20\xb2\x45\x04\xcd\x12\x94\x41\x26\xd8\xc9\x63\xbd\x03\x3b\x13\x58\x1f\x84\xd1\xe3\x5b\xaa\x27\x23\x51\xdc\xcb\x1b\x01\x39\x6a\x8b\x04\x67\x9e\x8d\x84\x2c\x39\xe1\xfc\xbc\x68\xf1\xbc\x48\x85\x3f\x2f\xac\xd4\xab\x15\xab\x55\x34\xb7\xed\xd3\x4b\xfe\xf0\xf5\x18\x51\x7e\xb8\x76\xec\xa0\xb8\x65\xf8\x8a\x46\xf8\x24\xd4\x52\xe5\xb0\x18\xcd\xb9\x3a\xb2\x8f\xd7\xe0\xa9\xf6\x7a\xf4\xda\x6c\x6f\x7e\x61\x75\x8e\xb9\x4e\xc3\xce\xe4\xec\xaa\xbe\xff\x82\xf1\xa7\x05\xf8\xc9\x65\xc5\x47\xc6\x0c\xa5\x11\x8d\xfc\x43\x14\x33\x9f\xcc\x0f\x13\x68\x3a\xea\x44\x08\xb9\x87\x57\x73\xc0\xcc\x0a\x7e\x08\x82\x0e\xd8\x7c\x30\x51\x04\xab\x41\x66\xc3\x39\xc0\xd9\xac\xe4\x9d\x0b\x52\x51\xca\x24\x73\x72\xe6\x03\x67\x65\xa4\x19\xa4\xd5\x66\x95\xaa\x87\xdf\x23\xf8\x29\xc2\x4f\x2b\x05\x04\xb0\xc6\xea\x20\x16\x85\x07\x52\x0b\x17\xa6\xda\x60\x6f\xcd\x78\x5e\xbc\x96\xe3\x69\x8a\x53\x6f\x83\x9f\x8c\xcf\xd6\x69\x43\xd1\xbc\x6c\x0a\xff\x92\x99\xe3\xa1\x55\x46\x33\xc7\x99\xf2\x0d\x6a\x3a\xf8\x7b\xdb\x82\x26\x27\xdc\xc5\x71\x14\x70\xe2\x9a\xa2\xb6\xac\x2c\x2f\xab\x2e\xf5\x24\x02\x4a\x60\xf1\x76\xea\xba\x7c\x4a\xa9\x36\xb3\x1b\xc4\xdf\x50\x0a\x8a\x52\xd3\x2f\xb5\x8d\x4b\xb6\xb5\x25\xc7\xa5\x3d\x21\x8f\xd5\x06\x0f\x6b\x38\x4c\x29\xb4\x7b\xc4\x5b\xc5\x78\x5f\xa1\x9d\xb5\x67\x6b\x6b\x72\x0c\x78\x3e\xf4\xde\xfe\x61\x96\xd7\xa4\x05\x4c\x69\xcc\x59\x3a\x0c\x45\x70\x91\x3b\x90\xfe\x07\xa3\xa1\x40\xfb\xd3\xf5\xfd\x15\xf1\x76\xe7\xc4\x1c\xab\xc6\x69\xd2\x2b\x61\x91\x78\x7f\xb9\x82\xc1\x8c\xba\x40\x75\x1f\x9c\x04\x1a\x63\xa5\x82\x70\x9f\x51\xe8\x53\x25\xa2\x73\x11\x46\x6a\xe4\x41\xe5\xa8\x09\x2d\x47\x3b\xa4\x1e\x8e\x62\x22\x19\x1b\x20\x30\x8d\xa8\x4b\x90\x39\x81\x20\xcb\xad\x49\x23\x80\x51\x7d\x04\x98\x79\x8a\xf3\x24\xa8\x3a\x88\x04\x29\x7f\xd8\x41\xe5\xff\x07\x31\x36\xf8\xe1\x5e\xa0\x5a\x97\x77\xc6\x22\x6d\xab\xd3\xcf\x81\x89\x7f\x87\x37\x89\x1f\xc4\x55\x46\xf1\x3b\x8b\x49\x8b\x8b\x95\x46\x68\xe6\xcd\x54\xf5\xc0\x0b\xe2\xb7\xbc\xd9\xcc\x83\xe6\x45\xb8\x01\x74\xb9\xb5\x45\x61\xa1\xd2\xae\x07\x00\xde\x5e\x21\x14\x15\x24\xf2\x0c\xf8\x31\xd0\xe5\x26\x4e\xc7\x67\x0f\xc7\x3f\x9c\x49\x5f\x71\x66\x3c\x60\x07\x28\x7f\x3a\xaf\x5b\xdc\xbe\x01\x5e\x4e\x6b\xa4\xab\x27\x66\xe8\xbc\x06\xfc\x1d\x6f\x7e\x5e\xbc\xf8\x7d\x33\x8f\xff\xce\x9b\xc5\x65\x6a\xef\xaa\xc5\x5b\x8a\x4a\xb6\xac\x6c\xcb\xc9\x51\xe4\xb5\x2d\xdc\x55\x5d\xba\x75\xc5\x7c\xbb\xfd\xff\x31\x5e\xde\xff\x64\x52\xcc\xb7\x68\x0a\x5a\x88\xd6\xa0\x9d\x08\x31\x91\x20\x10\x52\x7d\x22\xce\xe8\x0f\x52\x7e\x21\x12\x4f\x50\x19\xc2\x6e\xa2\x96\x8e\x33\xd6\xed\x1c\x21\xcb\x93\xa6\x84\xb6\xd3\x48\xb5\x04\x98\xdc\x42\x44\x5e\xda\x89\xc4\x42\x36\xab\x99\x63\xad\x6e\xe9\x22\x31\x7d\x26\x46\xcf\xc9\x11\x09\xd0\x0b\x99\x28\xa3\x1e\x73\x78\xa5\xdd\x8b\x41\xa1\x54\xea\xbc\xb6\x8e\x2c\xb7\x96\x55\x31\x0a\xf0\xf9\x40\xc1\xa8\x58\xad\x3b\xab\xc3\xe6\xd5\x29\x95\x0a\xc0\x5e\xfb\x3c\xa7\x39\xdb\x9d\xac\x9c\x5e\x97\x97\xcf\x52\xe5\x82\x50\x5e\x91\x53\xb7\x89\xa2\x92\xee\x6c\xb3\x73\xde\x51\xbb\x60\xf2\xf9\x4c\x42\xc4\xd4\xd4\x64\x79\x34\x66\x34\x99\x7a\x7a\xa4\xd0\xe1\xc3\xc7\xa4\xc0\x82\xc5\x8b\x17\x48\xc1\x35\x9b\x36\xad\xb9\x51\xdd\xb1\x55\x49\x97\xe4\x28\x78\xb5\x9a\xb1\x98\xf2\xe8\x94\x98\xa2\xf3\x4c\x16\x46\xad\xe6\x15\x39\x25\xb4\x72\x6b\x87\xda\x5a\xab\x51\x18\x0d\xa5\x73\xe2\xe3\x35\xdc\xaa\xf7\xc4\x6f\xdf\x5b\xb5\xcd\xdf\xe6\x05\x30\x2a\x34\xb5\xd4\x9d\x42\xd4\xe4\x8b\x46\xfc\xa6\x88\x60\x6a\x7a\xa3\xc9\xf4\x0b\x93\x29\x62\xda\x00\x35\x1b\xa4\x88\xc3\x62\xeb\xe1\x17\xa5\x88\xb6\x3f\x01\xfa\x53\x9b\x14\xb5\x46\xfc\x52\x7c\x45\xfc\x92\xf0\xa4\x9b\x09\x4f\x73\x6a\x64\xac\x9b\x4f\xb4\x8d\xe2\xa8\x0e\x4d\x22\x7a\x5a\x8b\xd0\x0a\xb4\x0e\x6d\x41\x3b\xd0\xe5\xe8\x1a\x74\x3d\x3a\x4a\xec\xec\xc9\x8e\x8a\x37\xe3\xe2\x8c\x3b\x36\xfe\x9f\xa6\x1b\xb3\xa3\xf9\xcf\xc2\xff\xce\xfd\x67\xe7\x03\x96\x99\x8b\x6f\x23\x8e\xfc\x8f\x6f\x1b\x1d\x97\xbe\xed\xec\x14\x3f\x3a\x09\xcb\x32\xee\x21\x8e\xd8\x73\x8e\x10\x23\x3b\xe9\x33\x42\xe7\x4c\x99\x09\x41\x67\xc7\xe9\x3b\x60\xd9\x11\x3b\xce\x8e\x3b\x23\x30\xc8\xf7\xca\x67\x4b\xff\xb0\xff\xec\xc0\x80\xec\x50\x67\x84\xce\x95\x50\xfe\xcf\x70\x97\xb1\x83\x2c\x1a\x61\x84\x6f\x46\xb3\xd1\x4a\x74\x21\xda\x8b\x90\x35\x53\x6a\xb1\x61\xa5\x4c\xe0\x60\xd8\x82\x4a\xee\x2d\x29\xcb\x88\xb1\x54\x8c\xc8\xaa\x49\xaf\x1e\xb1\xf6\x21\xeb\x8d\x64\xbe\x37\x5c\xf6\x3e\x39\x4e\x06\x75\xc8\xcb\x91\x4e\xab\x4f\xd6\x9d\x93\x06\xa8\xb2\xfe\x9a\x95\xb1\x0e\x63\x37\x33\x11\xf2\xbc\xff\x0b\xf2\x3d\x0b\xd0\x82\x21\x04\xf7\x93\x00\x3e\x69\x8b\x78\x3d\xf9\x79\x82\xee\xe3\xa3\xd2\x4c\xbc\xfb\xb0\x2d\xec\x75\x07\xfc\x5e\x59\x33\x41\x88\x08\xc3\xda\x0d\x69\x92\x1e\x26\x0a\x11\x61\x57\xfb\xc2\xdd\x42\x44\x38\x01\xde\x13\x70\x15\x19\xcf\x99\x5c\x5c\xc3\x2d\x16\x85\xde\x10\xb1\x3c\x02\x3e\xa5\x25\x5b\xad\x29\xd6\x2f\x7c\xd5\xca\xe9\xf5\x11\xcb\x9f\x7f\x4a\x16\x1d\x6e\x92\x97\x1e\x4a\x86\xd0\x02\x40\x97\xcb\x01\x54\xbd\xb4\xb5\xb4\xc0\x23\x24\xea\x0b\x8e\x7e\x2c\x44\x84\xc3\xdd\x95\x8b\xe7\x94\xf9\x83\x91\xc5\x71\x59\x45\x45\xca\x53\x46\x18\xe2\x0f\xe4\x14\x82\xf6\x68\xdf\xb5\xab\x5d\x72\x0f\x9c\x38\x71\x8d\x34\xb4\xb3\x9a\x1e\xda\xac\x8f\x58\x2c\x0a\xfd\x95\x97\x92\xa1\xde\xd7\x37\xeb\x23\x16\x2b\xa7\xcf\xe0\x70\xa9\x21\xa4\x48\x67\x70\x16\x2b\xd0\xcf\xc8\x78\x3e\x63\xf9\x4e\x46\xbb\xb1\x78\xcc\x17\x29\x25\xd6\x35\x19\x71\x45\xa9\xf7\xe1\x89\xe9\x37\x17\x92\x21\xb1\x52\x89\x86\x08\x32\x1f\x8a\x40\xf0\xfb\x64\xa9\x3f\x21\x56\x07\xa6\x98\x31\x1e\x73\x80\x74\x6a\x2c\xa3\x89\xc7\x72\xb2\xd4\xa2\x8f\x10\xf3\x51\xac\x8c\x66\x17\x62\xf1\x58\x7c\xf8\xb7\x22\x7e\x79\x8c\x98\x20\x30\x83\xb8\x7b\xe4\x40\x38\x13\x5d\x8d\xad\x36\x46\x6a\x94\x69\x45\x75\xb6\x21\xe1\x8b\x36\x79\x55\xee\x32\x5f\xc2\x90\x8d\x37\x0e\xfb\xaa\x33\x47\xc4\xb9\x86\x66\x4f\x62\x72\xb8\x8c\xd2\x52\x0b\x8f\x04\x0c\x39\x5e\xa3\xc5\x62\xf4\xe6\x18\x02\x47\x16\xb2\xfa\x5c\xf1\xc3\xbf\xf2\xba\x80\xa1\x57\xcd\x5b\x5f\x3f\x68\x38\x74\x41\xfe\xf4\x10\x97\x3f\xb1\xf4\xc2\xfd\x81\x3a\x9a\x29\x0b\xcc\x6e\x0a\x46\x37\xae\xf0\xda\xa9\xe3\x23\x29\xec\x9e\x92\xbc\x6c\x39\x0d\xad\xf0\xc6\x47\xa7\x32\xfe\x8b\x5b\x01\x9f\x0b\x1e\xe9\x5e\x38\x89\xa3\x6e\x7f\x53\xb4\xc2\xa5\xc8\xf7\xbb\xa3\x3b\x33\x2e\x26\xb1\x60\xf4\xd8\x0d\xf9\x06\x58\x36\xcb\xdb\x64\x50\x2a\x0d\x4d\xde\x59\xcb\x30\xce\xd9\xca\x79\x20\x69\x2b\xd7\x6e\x01\xf5\xcd\x60\x58\x96\xcd\x25\xa6\xd9\xab\x27\xcc\x36\x30\x65\x81\x40\x1d\xad\x2a\x51\x85\x8c\x4d\xdb\xc5\x3e\x29\x85\xf8\xdd\xcd\xe2\x5f\x97\x59\x3d\xf9\x72\x0a\x28\xf3\x8e\xa4\xf0\xfe\x93\x6b\x9f\x61\x73\x6c\x42\x0d\x68\x1a\x5a\x88\x10\xc8\xe8\x28\xc1\x39\x82\x93\x0a\x59\x65\x6d\x0a\x12\x22\x6f\x22\x0f\xc3\xef\x29\x4b\xe0\xff\xf2\x7b\x4a\x45\x23\x41\x00\xdb\x88\xdd\x9d\xcd\x6a\xd6\x51\x82\xbf\x0e\x62\x21\xda\x29\xbd\x20\xe2\xfb\x27\x84\x88\xb0\xfb\xd1\xdd\x5d\xd2\x2b\x24\x55\x78\x22\x6d\xe2\xf5\x07\xdc\xde\xb0\xed\x70\xb7\x54\x87\x8f\x7e\xac\x13\xf2\xf2\x3d\xde\x88\xad\xed\xe6\xf4\x73\x9f\xa4\x9f\xd2\xb8\x35\x77\x69\x34\x6c\xf2\x2e\x8d\xe6\xa4\x7d\x52\xfd\x25\x6d\xbf\xd5\xba\x71\x5f\xa6\xba\x1f\xc8\x54\x7f\xf8\xb4\xed\xe6\x37\x37\x4b\x01\xf9\x3d\x89\x2f\x8e\x04\xfd\x65\x73\x16\x57\x76\x93\x65\xcd\xa3\x05\xf5\x09\xc1\x53\x50\xda\xba\xb4\x7a\xf3\x9b\x37\xa7\xf7\x4a\x97\xd5\xdc\xa5\x71\x6b\x58\xf6\x2e\x8d\x5b\x7b\x32\x7b\xd2\x8d\x2b\xdb\x7e\xab\x19\xbd\x86\x6f\x46\xad\x44\x75\xc9\xcc\xf1\x20\xf3\x8c\x67\xf6\x78\xc2\x21\x2b\x64\x86\x02\x7e\x69\x28\x2f\x0d\x09\x30\xb1\xdd\x97\x51\xe8\x1e\x77\x34\x22\x15\x05\x79\xa3\x32\xa4\x27\x09\xc2\x25\x9e\x01\x8c\x87\xcf\x66\x47\xa3\x96\x68\xd5\x05\x2a\xcc\xa8\xcd\xea\xaa\xc8\xc4\x86\x5c\x5b\xae\x01\xbe\x98\xa6\xb5\x68\xdb\x2e\xc7\x54\xf9\xb7\x59\xc5\x1d\x87\xa6\xfc\xe4\xba\x6c\xa0\xad\x7c\x53\x49\xa1\x25\xcf\x61\xe5\xb2\x26\xe4\x7b\x2a\xb3\x57\xcc\x9b\x79\x60\xbe\x85\x35\x31\x94\xfa\xfc\x35\x65\xd3\x81\x62\x94\x8f\x9e\x61\x9c\x97\xce\x19\x1f\x7a\x31\xa4\xa6\x00\x2f\x4d\xb6\xde\x27\xf0\x2e\xb1\x92\xbf\x90\x51\x4c\xc5\xd6\x4f\xc6\x9d\x64\x0d\xd7\x3e\xb9\xe8\xc0\xad\x2c\x76\xcf\x8a\x2c\x29\xcd\x2a\x75\x66\xeb\x80\xe2\xac\x79\x0d\x33\xdd\xad\xab\xbb\x0f\xb4\x58\xe7\x5b\x35\x6c\x8d\x11\x94\x58\x77\xa6\x99\x1e\xc2\xc8\x37\x84\x98\xf7\x98\x21\x94\x8d\x96\x23\x44\xf8\xea\xdc\x1c\x8b\x2d\x66\x07\x0e\x87\xac\x09\x1c\x97\x1a\x01\x30\xb3\x1e\xbf\x7c\x84\x94\x22\xe5\x71\x8f\xc8\xa4\x9b\xa5\x0a\x24\x15\x0d\x15\x8f\x46\x84\x42\x19\xd2\x45\x54\x34\xc3\x4e\x83\x19\x73\x32\x35\x90\x03\xf0\x97\xb4\x36\xcf\xe6\xf7\xaf\x5c\x6d\xf0\x4e\x28\xa5\x73\x35\x66\x15\xd6\x27\xf5\x26\xfc\xad\x4e\xc1\x5a\x5b\x92\xf9\x77\x3e\xaa\x63\x55\x79\x0a\x5b\xc7\xae\x87\x3a\x2f\x3f\xea\x9f\x17\x13\x6e\x07\x57\x30\xe8\x74\x39\x4b\x5a\xa2\x45\x56\x86\x53\xa9\x54\xf0\xe9\xa9\x09\x17\x3e\xb5\x36\x12\x83\xf3\x9b\x19\x6a\xf9\xb1\xb9\xd6\x7c\xd3\x36\xfa\xb7\x59\x79\xf9\x3a\x5b\x95\xf8\x8f\x2b\x8b\x67\x4d\x2b\x05\x60\x34\xaa\xa9\x10\x9d\xda\x96\xbe\x93\xd3\x02\xa5\x57\xb6\x2b\x4c\xde\x3d\xf9\x6d\xc7\x6f\xe8\xb8\xf3\x8a\x68\x6a\xe5\xf8\x5c\xb0\xf9\x43\x93\x05\x57\xa0\xae\xfd\xfc\xce\x42\x25\xa6\xe0\xbb\x4f\x56\x7f\xf2\xdc\x3e\x93\x52\xbc\x61\x89\x78\x9b\x97\xaa\x4c\x68\xb9\x67\x10\x85\x60\x08\xb1\x3b\x98\x01\x54\x8b\x66\xa2\xcb\x11\x82\x50\xbe\x34\xa5\x21\xb3\x60\x4e\x0b\x99\x8a\xe4\x73\x11\x4d\xd5\x70\x09\xc8\x6d\x1b\x30\x3e\xe2\x09\x87\x6c\x8c\x2d\x24\x1b\xc8\x49\x13\x24\xce\x56\x8a\xa9\x61\x20\x7b\x3e\x48\x55\xd1\x0a\x26\xab\x0e\x58\x1d\xc4\x4a\x41\x20\xed\x34\x47\xc9\x5b\x8a\x4a\x90\x5d\x53\x26\x6c\xb2\x39\x48\xa2\x58\x3c\x64\xa5\xea\x9c\x39\x1f\xd6\x96\x1f\x08\xa8\x27\xb3\xa5\xce\xf4\xdf\xc4\x5e\xa5\xbf\x32\x26\x00\x2d\x26\x0b\x2a\x31\xae\xf1\xc3\xe3\xe9\x7f\x14\x84\x58\xb6\xd2\xa7\x82\x8f\xc5\x9f\x08\x65\x2c\x1b\xf3\xb0\x3c\xf4\xbd\x0b\x34\xd8\x74\xe6\xc7\x3d\x7c\x76\x8e\xe5\xf1\xf7\x18\xef\xd7\x40\x41\x96\xda\x99\x3f\x25\xe7\x6a\xcc\x82\xd3\x48\xdd\xa1\xa3\x75\x65\x9a\x78\x37\x2e\x38\x10\x4d\x7e\xe8\x2e\x0c\xfb\xfe\x9c\xcd\xbb\x5d\x53\xb3\x40\x25\x9e\xb2\x58\x7c\x9e\x26\xf3\xdf\xae\xd0\x59\xdc\xbe\x69\x86\x67\x97\x2b\x1c\x59\xa0\xc1\x15\x05\xfe\x0a\x6a\x91\xf1\x60\xa0\xf2\x9e\x60\x8d\xb8\xd4\x59\x44\x57\x38\x2b\x02\xbe\x18\xe3\xac\x29\xf0\x47\x20\xc9\x24\x0b\x3c\x25\x35\x1d\xaa\x3a\x9f\xb7\x04\x77\xfa\x20\xa8\xbd\xc8\x36\xc3\x25\xbc\x7c\x91\x0f\x0b\xc0\x02\x03\xf9\xd3\xb2\x6d\xea\xdc\xeb\x80\xc1\x25\xab\xe1\x4e\xf1\xfb\xc6\x29\x7f\xa8\xce\x8d\x25\x4a\xef\xa9\x2d\x3c\x68\xf3\x41\x85\x6b\x86\xcd\xaa\x77\x8a\xbd\xf0\x82\xa7\xc5\x64\xcc\x72\x8b\x0b\x61\x86\x67\x9a\xc1\x64\x17\xc4\xc5\xbf\xd2\x31\x66\x7d\x7f\x41\x0d\x54\xca\x6d\xa0\x83\x43\xcc\x12\x34\x13\xb5\xa3\x35\xa8\x07\x21\x9f\x2c\x5e\x10\x8d\x24\xd8\x78\xcc\x27\x44\x23\xb2\xad\x49\x2c\xec\x44\xd2\xd8\x5e\x36\xd1\x26\xd3\x77\x4c\x28\xff\xed\x20\x07\xfd\xc0\x72\x56\x64\x31\x7b\xdc\x42\x29\x50\x44\xb0\xc0\x64\xf6\xd9\xbc\x26\xec\x23\x34\x0d\x48\xaa\xf1\xd6\x4c\x4b\x2a\x78\xdc\x3e\xbf\x0d\xa6\x63\x7a\xee\x1d\x95\x16\x9a\x56\x71\x3c\x6b\xc4\x8f\x82\x66\xad\x61\x93\xc6\xa8\xda\xbe\x70\x19\xa8\xe0\xb7\xd7\x99\xcd\x6d\x43\xd7\xaf\x35\x6c\x52\x9b\x54\xdb\x93\x62\x03\x57\x55\x40\xfd\xf0\xb5\x52\x5b\x5d\x49\x89\x15\xfe\xa2\x2c\xd8\xae\xe6\xaf\xa4\xbb\xfb\x8b\xdd\xd8\xc9\xfd\x8c\x8a\x94\x83\xe1\xf8\xcf\xc5\x93\xe3\x27\x77\x88\x6b\x73\xcd\x73\xb7\xe5\x06\x72\x1f\xba\xd8\x0c\x33\x95\xdc\xcf\x71\xe5\xcf\x16\x3a\xfc\x4a\xb3\xde\xac\xb1\x2a\x6c\xd4\xc0\x86\xe7\xb5\x26\x55\x52\xff\xb9\x49\xfc\xea\xcb\xfc\xe6\xfc\xab\x3f\x4a\x3e\xaf\x35\x2b\x93\xfa\xcf\xb7\x50\x11\x2e\xcb\xc6\x88\x31\x71\x32\xc5\x61\x8a\xa3\x1a\x73\x03\x45\xe9\xf1\xb4\xaa\x98\xfd\x35\x1c\x89\x46\xa9\x62\x8d\xf8\x98\xea\xbc\xb6\x75\x60\x04\x4b\x4f\xf2\xee\x85\xdd\x4f\xe1\xea\x40\xee\xb6\xb9\xe6\xdc\x5c\xf3\xc5\x0f\x19\x68\x6e\x18\x47\x76\x3d\x2d\x32\x2b\x51\x3e\x2a\x25\x7a\xb9\x52\x6b\x2a\xc3\x4b\x49\x23\x60\x63\xb9\x0c\x1c\xd7\x29\xcd\x9c\x62\x71\xab\xdf\x8c\x75\xe0\xf6\x27\xe8\x68\xc4\x6f\xf5\x5b\x04\xbf\x03\x4c\x6e\xbf\x34\x34\xe0\x81\x93\x9b\x5f\xa9\x21\x95\x85\x95\x68\xfb\x75\x07\xbf\xf8\xf2\xc0\x75\x57\x7c\x7b\x5d\xe7\x5c\x27\x57\x3f\xf5\xce\x4f\x3f\x86\x99\xfd\xce\xfa\xca\x82\x57\x8e\x1e\xe5\xf3\x5c\xb3\x76\x4c\x2e\xd1\x51\xf1\x78\xe3\xa5\xad\x6b\xd2\xb3\xa6\xbe\x37\xd9\x84\x0b\x7f\xb9\xca\xe3\xb6\x07\xd7\x55\x77\xe4\x4c\xc9\x72\xae\x87\x07\xde\x3e\xfa\x93\x9f\x1c\x7d\xfb\xba\x7f\x1c\xc8\x4f\x24\x73\xbf\xbf\xeb\x9e\xaf\xbe\xba\x67\xfe\x54\xad\x77\x49\x53\x9f\x78\x62\x19\x30\xce\x7d\x77\xfd\xee\xc1\xb6\x09\xee\xde\xdb\xf0\x5b\x9f\x54\x0f\x89\x8f\x35\x6d\xdd\xe1\x33\x75\x5c\x9b\x1d\xab\xf6\xcd\xb6\x17\x3b\xf4\x73\xaa\x56\x1e\x5c\x53\x3b\x75\xd5\x30\x3f\x16\xe9\x3b\xec\xa8\x00\x05\x51\x03\x9a\x4d\x18\x3c\x08\x7c\x8c\xcd\xd0\x05\xd8\x62\x71\x59\x25\xd9\x19\xa3\x88\xe0\x15\x67\xad\x86\x98\x41\xea\x2d\xfc\x56\x26\x42\x10\x07\x44\xe4\x50\x7a\xe2\xcc\x50\x6c\x4c\x67\x41\xdb\x73\x0b\x8a\xad\x37\x7d\x79\xf3\x2d\x1b\xa3\x25\xb4\xad\x66\xdc\x4d\xbf\xfd\x2d\x44\x7e\xfb\x10\x56\xe5\x87\xe6\x55\x5a\x2c\xaa\x3f\x08\x74\x4b\xd5\x42\xb8\x24\x5c\x30\x6b\x42\x4b\xd6\x94\x4b\xf3\xe8\x7d\x0d\x91\xaa\xf0\x34\x8b\x01\x1a\x47\x77\x0e\xf0\xd7\x69\x13\xb2\x95\xa1\xe4\xe6\x63\xc7\x36\x6f\xbc\xdb\x54\x54\x6c\x79\x57\x7c\xf9\x8d\x37\x21\x9d\x55\x5a\xb7\xf5\xda\x8d\x8b\xad\xd4\x1e\xd0\x6f\x5a\xd3\xf2\x88\xff\x96\x82\xf3\x26\xcf\xb5\x99\x26\x8c\x0b\xf8\x0c\xcb\xc6\x45\xb6\x08\x91\x29\xd1\xc2\x6f\xce\xea\x13\x86\x9f\x7f\x3a\xc1\xcd\x45\x86\xdf\x21\x2c\x8f\xd0\x3d\x6e\x7f\x2c\xd3\x2d\x72\xac\x0c\x18\x90\x7f\x7e\x62\x20\xc8\x92\x38\xa9\xf7\x20\x52\xc1\xe1\x10\xc1\x56\x91\xae\xf3\xcc\xed\xde\x21\xeb\xf8\xf3\xf2\x38\x7f\xa9\xdf\x67\xd6\x04\xd4\xb4\x82\x31\x78\x2f\x9b\xf3\x42\xb3\x81\xa1\x55\x9a\x80\xca\xe2\xf1\x97\xfa\xb9\xe4\x65\xd6\x2b\xb1\x42\xa7\xd7\x84\x79\x4f\xb2\x78\x52\x41\xd1\xe4\xa2\xa4\x87\x0f\x6b\xf5\xbc\x02\x5f\x09\x30\x76\x35\x6c\xb7\x95\xd1\xb5\x26\x4d\xac\xce\xaa\xc9\xb3\x9a\xb2\xf5\x78\x91\x69\xba\x67\xda\xbc\x3b\x3c\xd3\x4d\x8b\xb0\x2e\xcb\x6c\xc9\xd3\x58\x75\xac\xe9\xaa\x3c\xc6\x1a\xb4\x32\x85\x26\xa5\xc3\xe3\x70\x78\x1c\x0a\x73\x80\xb1\xc2\xc0\xd8\x75\x30\x40\xba\xa1\x14\xbb\x9e\x49\x91\x52\x88\xc9\x3a\x60\x32\x90\x89\xe8\x0e\x12\x02\x2e\x5b\x46\x1e\x0c\xcb\xb8\xa6\x8c\x3d\x93\x5c\x4c\x72\xb1\xc9\x55\x3d\x16\x8d\x04\xb1\x4c\x34\x11\x0e\x65\xc4\xcb\xa9\x96\xcb\xde\xac\xcc\x51\xf2\xbc\xb1\xde\x98\x17\xab\x6b\xaa\xd3\xf8\x76\x4d\xcf\x8d\xe4\xfe\x81\x53\x98\x6d\xe6\xd9\x56\x5f\xb6\x33\x11\x4b\x2c\x88\x45\xe6\xd7\xc6\x12\xf9\x76\x5f\xd6\x2c\x43\xb6\x59\xc1\xfd\x21\x37\x92\x3b\xed\x52\xaf\xa6\xae\xb9\x2e\x92\xa7\xab\x37\x1b\x79\x65\x4e\xf2\x1d\x26\x05\x7b\x2e\xac\xba\xa0\x74\x3f\x97\xe3\xcd\x75\x16\x9b\xfc\xb9\xba\xdc\x99\x57\xb8\x34\x6a\x36\x6f\xa2\x4b\x5d\xe1\xd3\x32\x8c\xa7\x20\x90\x93\x13\x28\xf0\x30\x8c\xce\x57\xa5\x76\x4d\xcc\x63\xd5\x1a\xe7\x55\x33\x72\x75\xb9\x7e\x73\x51\x7e\x8e\xcf\xce\x5d\x5d\xb6\xad\xea\xca\x6d\x63\xea\xc0\xa2\xff\xd3\x3a\x30\x96\xc1\x80\x41\x72\x3d\x08\xfa\x7d\x66\x75\x40\x43\xea\xc1\xa5\x73\x9f\x9f\x6a\x64\x55\x8c\xba\x40\x65\xf6\xf8\x83\xa4\x1e\x5c\x85\x15\xbc\x5e\x1b\xd6\x7a\xc6\xc9\xf5\x60\x9c\x47\x1b\xd1\xea\x74\x0a\xb8\x0a\xd0\x19\x2f\xc3\x6e\x2b\xc3\xb7\x8e\xe3\xd5\x23\x95\xa0\x2e\x32\xcd\x3b\x6d\xde\x1d\xc2\x54\xa1\x19\xeb\xb3\xe5\x4a\xa0\xe6\xa5\x4a\x50\x2a\x55\x02\x95\x5c\x09\x94\xa6\x22\xca\x4a\xa9\xc7\xbc\x0b\x20\x63\x12\x59\x44\x5a\x3d\x9e\x91\x87\x3f\x1c\xcb\x79\x19\x96\x4b\x40\x1d\x24\xa8\x78\x8c\x21\xf3\x27\x8a\xf5\x13\x0b\x60\x36\x88\x4b\x21\x12\x8d\x84\x43\x71\x23\x0a\x87\x1c\x8c\x2d\x9e\xa0\xe3\x09\x4a\x89\x26\xf4\xd4\x47\xad\x56\x4a\x15\xb6\xe9\x26\x8e\x6b\x51\x94\x76\x89\xf7\x8a\x1f\x2d\xfc\x7d\xe9\x34\xbd\x6e\xd2\xa3\xb3\x2e\x6d\x7e\x1c\x6c\xa0\x54\xb3\xec\x73\x3a\x67\xea\x93\x03\x22\xba\x62\xe6\x65\x2d\x85\x1a\x60\xaf\x3a\xd9\x07\x6b\x5e\x62\x4c\x95\xd1\x89\x15\x11\xfe\x3c\x2c\x84\x27\x2d\x8e\xd4\x6f\xdf\x52\xcf\xa2\xe0\xc2\x89\x8d\x85\xa5\xac\xf1\xab\x60\x5e\x9d\x50\xcc\xe6\xbf\xc8\xdf\x17\xbd\x58\xef\xe0\xb8\x9c\x26\xa7\x4f\x9b\x2f\x50\xac\x55\x2d\xde\x99\xc7\x65\xcd\xc7\x90\x1b\x74\x1b\x00\x80\x8d\xc3\x5a\xa8\x01\xa5\xce\x5d\xd2\x18\x3c\x4e\x4f\xed\xbc\x70\xff\xb8\x99\x5b\xa6\xb8\x46\xf1\x60\x4d\x44\xad\xa8\x03\x2d\x23\xd8\x36\x33\xe7\xb7\xb1\xa3\x3f\x6e\x7f\x9c\x13\x46\x7f\xa2\x91\xb8\xcd\x1f\x1b\xfd\x09\x87\x6c\x5c\xdc\x7a\xc6\x27\x82\xbd\x1e\x32\xf9\x90\xaa\x83\xd7\x68\x22\xb8\x6c\x83\x0c\xcf\x26\x5f\x4c\x21\xf3\x97\x7e\x93\xff\xad\xe3\xc5\x75\x47\x56\xd4\x4e\x9f\xce\x0b\xcd\x02\x3f\x6d\x4a\xfd\x8a\x23\xd5\xe5\x0f\xbd\xe5\x37\xf5\x7f\xc5\x30\x5f\x7f\x2c\x25\x08\xd6\xde\xba\x62\x7c\xe3\x54\xad\xd7\x2f\xc8\x29\x6e\xad\x0d\x1e\x7f\xd3\x67\xe9\xff\x8a\x71\x1c\x11\xff\xfb\xd6\x2d\xef\x1c\x59\xb8\xf0\xc8\x3b\x5b\x6e\x05\xed\x91\xc6\xf4\xba\xf4\x3a\x7c\x2d\xfe\x55\xba\x26\x5d\xc3\xfc\x2a\x4d\xf4\x0b\x70\xaa\x24\x9f\x9f\xd6\xd8\xb0\xe2\xd6\xda\xd2\x87\xde\xf6\x59\x3f\xfb\x86\x65\xbf\xfe\xc4\x14\x78\xfb\xa1\xa2\x71\xb7\x76\x4d\x98\x3c\x9d\x2f\x74\x7b\x0a\xf9\xe9\x8d\xe3\xbb\x8e\x4a\x29\xfc\xa6\xfe\xbf\xb0\xec\x57\x1f\x9b\x02\x6f\x3d\x54\x5a\x7b\xb4\x2b\x31\x7d\x1a\x9f\x1f\xec\x05\xdd\x91\xf6\x23\xef\x6d\xdd\xf2\xde\x91\xf6\x23\xa0\xc3\x8e\x34\x16\x2f\x81\x1d\x58\x84\x1d\x3f\xfe\x06\x6e\xa1\xe2\x70\xb3\xb8\x7c\xf0\x25\xaa\x6d\x30\x25\x26\xa1\x8f\x4a\x41\xdf\x08\xce\x92\xd8\x12\x15\xa0\x18\x42\xe0\xe2\x32\x78\x18\x9b\x35\x3c\x4c\xa6\xec\x0b\x03\xcf\x72\xd1\x18\x59\x88\x84\xb0\x09\x0c\xae\x58\xdc\x65\x88\x08\xfe\xb8\x03\x60\x16\xfe\x2f\x7b\x7a\xc5\xda\x23\x17\xb4\xdb\x9a\x4a\xf6\xbe\xf0\x02\xf5\xd1\x3f\x44\x87\xcd\x13\x8f\x36\xcf\x5a\x9d\x38\x56\x69\x36\x8b\x9f\x7e\xf6\x04\x35\x77\xf0\x73\x9f\x02\xff\x74\x69\x4b\xf6\xf2\x8b\x18\x61\xf2\xad\x6b\x07\xd3\x8b\x0e\x99\x98\xc9\x2f\xee\xa5\xa8\xbd\x2f\xbe\x77\xea\xdb\xda\x39\xeb\x9a\x67\x94\xbb\xf0\x2f\xed\xb7\x44\xa2\xb1\x08\xfe\x20\xfd\x08\x7c\x3b\x70\x77\xdc\x48\xf3\x73\xf6\xe6\x8d\x77\xff\x17\x1a\xe6\x7a\xcf\x60\xf9\xcc\xc8\x85\x4a\x50\x25\x6a\x43\x6b\xd1\x56\xb4\x1f\xfd\xf1\xb4\xb5\x01\x15\x8d\x08\x19\xf6\xc1\x50\x2c\x7e\xee\xc0\x99\x7e\x60\x33\x34\xd9\x71\xd6\x62\x36\xda\x46\x98\xe5\x86\xa9\x46\x8d\x7e\x69\x42\xc6\x4a\x93\xb0\xb8\xcc\xa8\x16\x8f\xc9\xfc\x74\xe4\xec\x0c\x88\x6f\xf8\x08\x69\x91\xb9\x04\x30\x66\xcc\xb1\xb4\x6e\x58\xf5\x8a\xd8\xb1\xfb\xc9\x8c\x84\xb4\x58\x71\xc1\x4f\x5a\x5f\xd2\x92\x51\xa4\x13\x97\x66\x74\x58\x1e\xad\x93\x49\x9d\xd4\xb0\x13\x4a\x4a\xce\x2a\x47\x50\xb3\xdd\x15\x6e\x77\xc5\xce\x82\x9a\x40\x41\x9e\xa3\xe0\xbe\x40\x4d\x41\x81\x23\xaf\xe0\x81\x82\x9a\x82\x82\x9a\x61\x07\x34\xb3\xc5\x77\x1e\xbc\xf0\xcd\xfd\x33\x2d\x5d\x3b\xb7\x3a\x6a\x2b\x1c\xce\x78\x85\xc3\xb9\xd6\xe9\xa8\xc8\x2d\xd7\xf6\xec\xbc\x7a\xb2\xc1\xb1\x28\xf6\x89\x63\xd6\x43\x07\xd6\x2d\xd5\x8a\x13\x93\x4b\x92\x75\xcb\xea\xf0\xe6\xa6\xeb\x97\x4c\xdd\x1f\x2f\x6b\x3b\x2f\x3a\xdf\x6b\x08\x47\xe9\xa6\x39\x60\x1b\x5f\x53\x25\x7e\xdd\x46\x57\x17\x65\x2e\x10\x77\x3a\x2a\x4a\x2b\x16\xac\x3e\xbf\x3d\x16\x59\x3f\xc1\xe9\x9f\xdf\xd4\x57\x96\x65\x2c\x19\xb7\xba\xbe\xda\x6a\xb2\x61\x33\xa5\xb2\x67\xe9\xe7\xfd\x78\x85\x27\xa7\x7a\xde\xac\x4a\x46\xa3\x35\x81\x41\xd0\x1f\x09\x64\x7b\x4a\xe2\x0b\xe8\x2f\xab\x4a\x4b\xab\x4a\x4f\xcd\xde\xe0\x28\x2a\x72\x6c\x70\x14\x17\x3b\xfe\xa5\x0f\xbf\xdc\xfb\xc2\x8a\x7b\xfb\xb7\xb6\xce\x7d\xf0\xed\xdb\xc4\x37\x96\x57\x86\xc8\x5f\x7e\x76\x07\x98\xfe\xab\x89\x35\xfd\xf7\xdc\xf3\x77\x1c\x3c\xfc\xc1\xc4\x32\xfc\x50\x68\xfa\xf4\x50\x78\xfa\x74\xb1\xbf\xf3\xa7\xab\x27\x56\x1f\x5d\xd3\xd5\x6d\x62\x2b\x22\x76\x73\xc3\x2f\x37\xac\x13\xff\x5c\x9f\x3c\x62\x87\x0d\x45\x49\xf9\xfc\xf1\x65\x0d\x2d\x60\xca\xef\xe4\x82\x7d\x1b\x2a\xba\x2a\xaf\xbc\xe5\xe2\xd9\x91\xbc\x6c\xca\xcc\xea\x82\x82\x79\xdd\x6e\x3a\x59\xc9\x70\x8c\x41\x67\x02\x36\x4b\xc3\x9a\xae\xfa\xc6\x51\xde\x32\x7a\x0e\x9f\x8d\x7c\x04\x25\x10\xf1\xbb\x2c\xe1\x11\x00\xad\x2d\x33\x02\x0b\x87\x62\xbe\x70\xd4\x13\xf5\x58\x3c\x96\xb0\x25\x7c\xc6\x9e\xdb\x21\x56\x3c\xfc\xae\xe6\xa2\x96\xa5\x7b\xf7\x2e\x6d\xaf\xe9\x5a\x7d\xa8\xb7\xbf\xbf\xf7\x8e\xdf\xc0\xfc\x35\x6b\xd6\xae\x5d\xbb\x16\x8c\x63\x86\x10\x78\x8b\x2b\x7f\x77\xf3\xfc\x6b\x9e\xbf\xa6\x7a\xf9\xb2\x8f\xc5\xe7\x3e\xfe\xdd\x96\xb5\x24\xe1\xf9\x63\x47\x07\x52\xdf\xe0\xcb\xb4\x97\x7e\xa2\x52\x27\xd5\x56\xaf\xc7\xcd\x19\x3c\x86\x60\x86\x24\xd0\xcc\x12\xf4\x33\x59\x78\x93\x59\x2c\x59\x54\xfe\xc0\xed\x8d\xe2\xa7\x73\x6e\x3f\xd1\x5b\xd7\x9c\x7a\x38\xd5\x5c\xf7\xf4\x8d\x4b\x97\xf2\xbf\x8c\x4c\x6d\x55\x5f\x65\xb6\x0b\x34\x1a\x7c\xac\x8c\x8f\x54\x97\x89\x0f\x30\xad\xd9\x3d\x0d\x6d\xa9\x54\x5b\x43\x4f\x76\x43\xb1\x0e\x17\x18\xb1\x20\xc8\xe3\xd3\x19\x44\xa7\x83\x41\x95\x68\x2e\x5a\x88\x0e\x22\x64\x0c\xc5\x04\x37\xcb\x04\x19\xbf\x2c\x12\x57\x07\x41\xcc\x7a\xdc\x3a\xf0\x18\x42\x31\x07\x65\x23\x9b\xdf\xd6\x58\xdc\x1a\x4f\x80\x9f\x74\xc5\x82\x2d\x6c\xf0\xf8\x85\x22\x70\xeb\x80\x95\x86\x32\x75\x10\x73\x00\xe7\x90\xd5\xcb\x68\x72\x3d\xb9\xb3\x96\x17\x4e\x78\xf0\xf3\x10\x04\x3f\x8c\x74\xde\x09\xb6\x1a\x42\xb6\x58\x35\x84\x1c\xac\xcd\x15\xb2\xde\xd0\xe2\x74\xb6\x38\x59\xa5\xaa\xd2\x1e\xf2\x04\xad\x17\xcd\x1a\x68\xa9\x84\xaa\xe3\xd6\x2a\x5f\xb3\x7a\x61\xfd\xad\x37\x33\x4e\x4d\x0e\x6f\x51\x40\xc1\xc6\x9e\x69\xa5\x95\xeb\x0c\x53\xa2\x66\x27\x56\xb9\x8a\x1a\xf2\xb9\xdd\x9d\xed\x47\xea\x57\xdc\x39\xbf\xf2\xf5\xdc\x9c\xa2\xcb\x8a\x9f\xcd\xae\xf4\xa9\xf4\x2d\xe6\xbc\x55\xea\x08\x20\x72\x59\x50\x08\x76\x71\x5a\xce\xda\x89\xae\x45\xf1\xc2\x8b\xea\x6b\x76\x5f\xb8\xae\x4c\xfc\x58\xbc\x89\x00\xb3\xee\xe0\xeb\xf3\xaa\x0b\x6b\x92\xde\xcd\x4b\x67\xce\x5c\x7a\xa7\x27\x59\x1e\xf3\x84\x73\xe2\x3c\x2c\xb5\x0b\x90\x4a\x26\x93\xac\x76\x8a\x3b\x59\x18\xb1\xed\xed\xa0\x3b\x27\x3c\xd4\x70\x42\xad\x06\x5c\x7f\x6b\xba\x1f\x80\x62\xff\x3f\xea\xde\x03\x3c\xae\xe2\x5a\x1c\x9f\x33\x73\xcb\xf6\x5e\x54\x57\x7d\xd7\x92\xa5\x95\xb4\x55\x32\x56\x2f\x06\x57\xb9\x62\x0c\xb6\xbc\xda\xbd\x2b\xad\xb5\xda\x5d\x6f\xb1\x2c\x87\x22\x70\x8c\x29\xc1\x74\x42\xc7\x84\xea\x10\x5e\x1e\x81\x40\xe8\x86\x24\x40\x48\x48\x1c\xfa\x83\x84\x07\x84\x24\x2f\x0d\x9c\x40\xf2\x02\x58\x97\xff\x37\xf7\x5e\xc9\x72\x21\xc9\x7b\xbf\xef\xf7\x7d\xff\x9f\xec\x9d\x39\x33\x77\xce\x9c\x99\x39\xe7\x9e\x99\x7b\xef\x99\x39\x5a\x95\xf8\x8b\x74\xb3\xad\xad\x9d\xf3\x59\xc2\x4e\x4d\x43\xf7\xaa\x22\x8c\x1e\x5a\xde\xf7\x71\xd5\xba\x2a\x3f\xf6\xbd\xe5\x24\xfe\x0a\xeb\xc6\xa2\xda\x4b\x8d\xbd\x4b\xbb\xbb\xbb\x31\x9a\x99\x2e\x71\xf7\xac\xd5\xb4\xf4\xe9\x82\xed\x4c\xb5\xd6\xd3\xdf\x0c\x25\xee\x12\xbc\xbf\xc4\x6d\xe8\x2f\x0b\x38\xcb\xb4\x6d\x6d\x3a\x73\x6d\x49\xb0\xa2\xc7\xe4\x3e\xc6\xe6\xa2\x4e\x5a\x45\x1c\x5d\x00\x85\x3b\xb9\x70\x27\xf1\xb9\xb0\xd3\xc5\x39\x1d\x50\x2b\x5b\x27\x00\xcf\xf1\x06\x52\xed\xc5\x92\x65\x86\x6c\xc4\xc0\xba\x18\x5f\x27\xe1\xd1\x96\xde\xcf\xba\x7b\xb7\x68\x55\x9d\xf6\xc1\xc1\x5d\x77\xa5\xd8\xe1\x96\xa1\x45\x43\xbe\xb3\xb8\xd4\x5d\xbb\x06\x07\xed\x9d\x2a\xed\xcc\x4f\x80\x5f\xa3\x25\x2a\xb7\xaa\x44\xfb\xdb\x0c\xbb\xa5\x75\x68\xd1\x50\xeb\x16\xf6\xb1\x5b\xb4\x25\x2a\xb7\x8a\x68\xd7\x00\xaf\x19\xf2\xad\x5c\xb1\x74\xc5\xea\x96\x35\x24\x7b\xc4\x2b\xb9\x64\x79\xd9\xa8\xe6\xc3\xe6\x45\xc1\xcd\x53\x43\xcc\xa9\x55\x75\x75\xd5\x83\xec\xd0\xd4\xe6\xe0\x22\x73\x98\x57\xcf\xdc\xfb\x74\x87\xaa\x58\x1b\xd0\x12\xd5\x81\xd5\x84\x5e\xad\x3a\x95\x5c\x98\x57\x11\x6d\x40\x5b\xac\xea\x78\x5a\xb5\xb8\xba\xc9\xe1\x68\xae\xec\x3a\xd6\xee\xb1\x15\x0d\xd1\x27\x70\x50\xce\x80\x31\x90\x85\x98\x76\x49\x3a\xc9\x42\xf1\x08\xe8\x22\xa7\x60\x5f\x27\x0e\xd7\x86\x43\x0e\xab\xd9\xed\x71\xd7\x79\x69\x29\xe9\x53\x3b\xcf\xf1\x27\x7a\x20\x08\x87\x50\xb8\x93\x22\xd1\x11\xc3\x4e\x07\xfb\xac\x47\x45\x34\x0b\xef\x39\x97\xf1\x34\xac\x5a\x5a\x07\x50\xb7\x74\x65\xa3\x9b\xdd\x79\x8f\x47\x4b\x54\x75\xaa\x52\xed\x96\x57\xd9\x15\x8d\x03\x45\x00\x45\x03\x8d\x2b\x58\xc0\x61\x6d\xc9\x73\x9b\x06\xce\x14\x5f\x27\x43\x0d\x83\x34\x7b\xb0\x61\x88\xbc\xf1\xa3\x45\x41\x03\x6f\xd5\xb3\xb2\xb7\x01\x3a\xc0\xf5\x5f\x81\xe7\xb8\x5a\xef\x8a\x65\xb4\xce\x65\x2b\xbc\xb5\x0b\xdf\x7f\x7f\x63\x3d\x4e\xfb\xb5\xc5\xaa\xea\xf3\x23\xa4\xb2\xd2\xe7\x74\xfa\xaa\x2a\x98\xcd\xe7\xbb\xa4\xb1\x61\xd4\xa7\xdd\xc1\x74\x56\x54\x57\x57\x74\x32\xcf\x35\xaa\xc8\x8c\x9b\xec\x5f\xdb\xb6\xf4\x37\xb8\xd7\x55\x53\xe3\xea\xc5\x77\xdf\xd6\xea\xd3\xf1\x47\xb6\xea\xad\x56\x72\xff\x11\x69\x37\x2d\xd9\xdf\xe6\xce\x42\x84\x75\xd5\xb4\x16\x15\xb5\xd6\xb8\x6a\xbf\xf5\xf0\x1a\x2a\x2e\x48\x8b\xec\x5f\x20\xf6\x0f\xf3\xf6\x77\x94\x20\x17\xaa\x46\x6e\xe4\x45\x3e\xb4\x03\xa1\x3a\x67\x33\x40\x9d\x87\x05\x27\xf1\x40\x1d\x61\xc1\xd9\x0c\x36\x07\x67\x04\xa7\x03\x58\x52\x07\x61\xde\x29\x65\x87\x3d\xbc\x64\x87\x11\x36\x62\x0f\x6f\x33\x02\xd7\x0c\x4e\x69\xa7\x82\x3b\xe8\x71\x13\x77\x17\xb8\x3d\xb3\x61\xb8\xce\xe7\x64\x1d\x76\xab\xb4\xd1\xdb\xee\x0c\x87\x2a\x20\x1c\xe8\x02\xe9\xa8\x0d\xfa\x20\x6b\x04\x0e\x96\xbe\x58\xfd\x26\x58\xc0\xa2\x15\x5f\x15\x3f\xfc\x55\xcb\x5f\x61\x31\x74\x18\xc4\xfd\x70\xd9\x30\x1e\xc5\x98\x59\xb9\x9e\x9f\xe9\x02\xd4\x2f\xfe\x8e\x89\x1b\x7f\x83\x67\xde\x83\x82\x55\x3c\x83\xdc\x68\x7b\x1f\x5f\xc1\x61\x1e\xb0\xeb\x41\x9b\x75\x89\x8a\xf9\x3d\xcf\x8f\xf0\x8c\xf8\x36\x83\x55\x1f\x30\x61\xcc\x77\x6c\x81\x53\xb1\x6a\xcb\x1e\xbc\x15\xab\xe1\x01\x96\x40\x07\x67\xe3\x76\x9c\xcb\xb2\x53\x2c\xb7\x8e\xb0\x3f\xe5\xd8\xbf\x32\xd8\x68\x63\x9e\xe6\xe0\xf5\x3f\xbe\x26\xfa\xdf\xfa\xeb\x1b\x70\xe1\x6b\xb0\xe4\x27\x33\xef\xbf\x0e\xfd\x2f\x88\x77\x0c\x7d\xb4\x0a\x8c\x6a\x12\x18\xe4\xf0\xad\x2f\xc0\xcf\xef\xff\xfc\xc1\xdf\xdf\x79\x18\x6f\x7f\x16\x1e\xbd\xe3\xc8\xe3\xbf\xdb\x97\x18\x66\xd8\xc9\xb3\xde\x99\xfe\xa0\xaa\xb5\xc0\x92\xc7\x59\x76\xed\xed\x2c\xf9\x3d\xc6\xf0\x17\x06\xcc\x3c\x53\xb7\x81\x83\x61\x9e\x6d\x8a\xa9\xe0\x65\x0d\xd9\x0b\x37\x30\xac\xd8\xca\x93\x8e\xf5\x98\xfb\xca\x52\x86\x69\x4b\x71\xe4\x5c\x42\xf6\x32\x5c\x76\x2f\x61\xf1\x0d\xec\xfc\x35\x5c\x39\xf2\xa0\xf5\xd2\x5b\x53\x52\x63\x60\xe8\x83\x5f\xb5\xfc\x36\xb4\xca\x17\x22\x47\x17\x2b\x76\xe5\x88\x84\x63\x7d\x6e\x1d\x3d\x3c\xe1\x18\x88\x79\x40\x5b\xd1\x32\xe4\xe7\xc2\x2e\x7f\xb3\xb7\xd9\xef\x0a\x73\xfe\xa1\x96\x0a\xed\xba\x0e\xdc\xdd\xb1\xee\xfe\x1b\x5e\xbf\xe1\x86\xd7\x6f\xc0\x67\x5b\x0c\x5b\xb7\xf4\x7e\xde\x2d\x79\xcc\x38\xd8\xbb\x45\xf6\x0b\x36\x17\x42\x43\x7b\x4c\x58\xd2\xc4\x54\x99\x8a\x34\x9a\x22\x53\x15\xd3\xb4\x44\x88\xb5\x9f\x16\x89\xe0\x9b\x92\xd7\x5f\x9f\x1c\xbf\xfe\x7a\x71\xd5\x41\x83\xe5\x5d\x8a\xce\x4a\x6e\x37\xde\x95\x2c\xbd\xa7\x95\x50\xf9\x9e\x20\xf5\x51\x8d\x16\xa2\x33\x50\x42\xda\x3f\xa7\x58\x81\x10\x9f\x8b\x99\xed\x4e\xa0\x93\x9c\x02\x2e\xd6\xd7\xc9\x9c\xa4\x2f\x73\x87\x43\x9c\xd0\x73\xfb\x09\x3e\xda\x18\xb9\x6b\x2d\xde\xd3\x9a\x2b\x4d\xfc\xaa\xde\x99\x83\xbd\xab\xd4\x65\x4d\xab\x83\x2c\xef\xb3\x37\x95\xd7\xbb\xeb\xcb\x9b\xec\x3e\xfc\xa0\x55\xbf\x55\x72\xa0\xac\x84\xc7\x8c\x82\xde\xfa\x05\xb2\xea\x3f\x97\xbc\x8a\x30\x07\xf5\x56\x72\xf6\xf8\xf5\xd7\x8f\x27\xaf\xbf\x5e\xfc\x5e\x75\xc7\x69\x67\x2c\xaf\xef\x1b\x1d\xed\x6b\x39\x73\xdb\x8a\x00\x53\xa1\x75\xaa\xd5\x6a\xb5\x53\x5b\x01\x8c\xde\x3a\x2d\x79\x66\x96\xc3\xf9\xa3\x42\x2b\x63\xa5\xa3\x7d\x3e\xa3\x95\x2a\x7e\x72\x54\xf2\x9a\xa4\x0a\xb5\xa2\x1e\xb4\x1a\x15\x10\x42\x01\x2f\x9e\x93\x00\x2c\xf5\x08\xcf\x3a\xcb\x56\xdc\xa5\xcc\x9e\xc7\x6d\xfe\x27\x69\x79\x7a\x08\xca\x87\x06\x48\x5b\xdd\x66\xa1\x79\x6f\x8e\x90\xa5\x7e\xa8\x9d\x6b\x29\x6d\x6c\x68\x68\x68\x2c\x6d\xe1\xda\x87\xea\x2d\x4b\x43\x18\x85\xd6\xee\x79\x62\xcf\x9e\x27\x98\xea\xf9\xa6\xf4\x76\xe3\xcc\x0b\x46\xbb\xdd\x88\xdb\x8c\xf6\x63\x4c\xec\xd1\x96\x5e\x71\xff\xfc\x03\x38\x44\xc9\x35\x0b\x77\xb0\x77\x0b\xac\x9f\x1e\x8f\xb6\x33\x65\x46\x9b\x5a\x6d\x33\x96\x31\xed\xd1\xf1\xe9\xf5\xb8\x8b\x56\xbe\x47\xfc\xcd\xdc\x01\x14\x60\x69\xa3\x35\xd3\x00\xb4\x47\x73\x57\x52\x9e\xcc\x97\x49\x99\x3f\x5b\x64\xdf\x80\x27\x8e\xdf\x1e\xe9\x49\x82\x0a\x49\xa0\x13\xfb\xa5\xa9\x2e\xec\x73\x01\x9e\xfd\x9e\x7c\xdc\x79\x1c\xc1\x7f\x92\xb6\x1e\x23\x5b\x27\x39\x62\xe1\x24\x7e\x6d\x18\xb4\x34\x24\xa2\xd0\xd2\x13\x07\xf6\xd2\xff\xc1\x90\x4e\x5b\xf5\x9f\x76\xcb\xbe\xbe\xe7\x9f\xcf\x00\x5b\xa5\x99\xe5\xd3\xee\xb9\xe1\x7d\x6d\x7a\xfd\x09\x23\x0c\x8f\x4b\xc3\x3b\xb3\x75\x6e\x20\x3f\x9c\x1b\xdd\xbf\xce\xe5\x1d\xf1\x31\x92\x40\x52\x29\x9f\x3f\xc4\x56\xe6\xa5\xa3\x77\xc2\x16\x74\x9c\x6f\x1f\x27\x5a\x80\x50\x9d\x74\x08\x69\xb5\xec\x24\x57\x5a\x23\xcb\x87\x4a\x22\xd3\xec\xc9\x8c\xb3\x26\x8e\x1f\x3b\x76\x4f\xf6\x3d\xfa\xd3\x47\xfb\x26\x77\x3b\xb6\xc1\x52\x38\x17\x96\x5e\xac\x58\x1b\xe3\xf7\xf6\x7d\x24\x3e\xf4\xc8\xc3\xc7\x18\x0c\xfe\xf0\xa6\x97\x4c\x4b\xd7\xae\x5d\x6a\x7a\xe9\xa6\xeb\xbe\xfd\x6d\xfc\x1d\xd9\x1b\xf8\x7b\x10\x12\xaf\x11\xbf\xfb\xe7\xe3\x0c\x0b\x8f\xb6\xcb\x84\x6a\x51\xa3\xb4\x57\xc3\x61\xb1\xdb\x8e\x9a\x59\x42\x28\x18\x50\x0e\x0f\xb4\xdb\x9c\x16\xbf\xa3\x32\xec\x73\x2b\x8d\xc5\x2f\xca\x35\x5d\x76\x58\x7c\x48\xbc\x4a\x7c\xe8\xa3\x7d\xfb\x0e\x33\x13\xd7\x1e\x35\x6b\xbc\xb6\xf7\xf0\x6e\x48\xee\x3e\x7c\x40\x69\x30\x87\xf6\x1d\x16\x1f\x7a\xf8\xbb\xe2\x43\x87\x2f\xdf\xf7\x67\x58\x26\xa1\x7f\xbe\xe4\xa5\xcf\x6e\x96\x6d\x2d\xc5\x0f\x6e\xfe\xec\x25\x58\x32\x3d\x7d\xbb\xd2\xea\x63\xfd\xb1\x54\xc8\xbb\x6d\xe0\x18\x95\x17\x9e\x35\x60\xb0\xdb\x90\xd4\xaa\x90\xc9\xea\xa3\x8d\xf6\x70\x95\x1e\x4e\xfa\x8a\xc8\x3c\xd0\xbc\x7e\x73\x6f\xe3\x0b\x97\x1d\xf9\xe6\x65\x2f\x34\xf6\x6e\x5e\xdf\xbc\x6a\xf5\x25\x4f\x1e\x7a\xf2\x92\xd5\xe2\x6d\x8a\x2d\xf6\xc2\x8d\xe7\xdc\x72\xf5\x95\xe2\x05\x57\x5e\x7d\xcb\x39\x1b\xf1\x61\x43\xcb\xc8\x9e\x57\x76\xdf\xf8\xf6\xdb\x37\xee\x7e\x65\xcf\x48\x8b\xe1\x9c\xab\xc7\x9e\xbc\x64\xf5\xea\x4b\x9e\x1c\xbb\x1a\x5b\x95\xce\x7c\xf6\xde\xe5\xf1\x8f\xc0\xc6\x9f\x77\x1e\x2f\xfe\xf1\xa3\xf8\xe5\x73\xe7\x4d\xb3\xf2\x79\x0b\xc5\xa8\x06\x75\x1c\x73\x37\x39\x7c\xc7\xdc\x4a\xe6\xaa\x93\x3a\x76\x9a\xf3\xa6\x79\xcc\xad\xb0\xba\x6d\xe8\xcd\xa1\xb6\xd5\xf5\x17\xed\x7d\x6a\xef\xde\xa7\xe0\xf6\x23\xc8\xaa\x27\xf2\x2a\xe9\x88\x24\x6b\x54\xcc\x0f\x52\xf9\xee\xdd\x02\x1b\xa6\x37\x6c\x98\x4e\xc6\xda\x97\x2d\x6b\x8f\xc1\xa3\x92\x28\x7f\xbe\x9f\xdd\xfa\xd9\x7e\xbd\xd5\xca\xbe\xf4\x59\xf7\xac\x5a\x55\x34\x02\x42\xaa\x39\x5d\x60\x45\xa5\x68\x21\x3a\x05\x2d\x43\x67\x22\x81\xea\x53\xe9\x3b\x24\x57\xed\x91\x3f\x57\xd3\xe6\x7e\x99\x3a\x3d\x3e\x5d\x37\xa7\x2f\xe5\x1e\x9d\xa0\x5e\xe7\xbc\xc6\x57\x1d\xff\xed\x76\xda\x58\xdd\xdf\xdc\xfd\xbd\xee\xe6\xfe\x6a\x63\x57\x23\x7c\xb3\xb1\x6b\x5a\x32\x85\x61\x32\x16\xc3\x8c\xec\xe8\xf2\xa0\xc1\x22\x4e\xcf\x6e\x8e\x04\xe9\xd0\x15\x65\x8b\x94\xbc\x65\x6a\xae\xd4\xa7\xd3\x3c\xb2\x18\x3e\xed\x36\x58\xf8\x63\x6f\xfc\xfe\xd0\xe6\xd3\x7d\xdd\xdd\xbe\xd3\x37\x87\xc2\x2b\x56\xc0\x1d\x92\xad\x8d\xf8\xee\x51\xdd\x39\x77\x9e\xcb\xbc\x60\x5e\x26\xa4\xa4\xf1\x9b\x7f\xab\xff\xa3\x71\x9c\x13\x59\x45\x10\xf0\x97\xe9\xd4\xba\xe3\xd2\xec\x71\x16\xb0\x27\xea\xd8\xaa\x2f\xf1\x10\x46\xa6\xbb\x1a\xc5\x0d\x8d\x5d\xf3\x46\xf3\x7f\x3f\x8e\xd3\x9f\x22\xab\x9e\x3b\x78\xbc\xfa\xec\x0f\xaf\x58\x11\x9e\x1b\x49\x78\x5d\x1a\xc5\x99\xa3\x07\x23\xfd\xe5\x24\x83\x78\x34\xef\xc8\x77\x98\xad\x9f\x53\xb1\x3c\x56\x65\x62\xe9\x8c\xb2\xf7\x39\x84\x4a\x24\xef\x8c\x26\x5c\x53\x8d\xcd\x26\x8b\xdf\x17\xf6\x32\x92\x91\xb3\xf4\x66\x0a\xfc\x0e\x03\xa9\xa1\xcf\x32\x9c\x7c\x9a\x6d\xc0\x12\xaa\x95\xb7\x44\x62\x5e\xb2\xb0\x61\x7e\xfb\xf2\x7b\xef\x1c\x3a\xf4\xce\xd2\x76\x47\x75\x28\x78\x5a\xbd\xb7\xaa\x35\x71\xdf\x57\xef\xe9\xeb\x83\x0b\x0b\x44\xb3\xf0\xb4\xcb\xce\x5a\x32\x79\x56\x6f\x55\x24\x79\x9d\xf8\xab\x5f\xee\xdd\xfb\x0e\x94\x5f\x3b\xf5\x87\xe7\x6f\xd8\x70\xfb\x25\xcd\x9b\x17\x75\xf4\xe2\x3f\x41\x27\xb4\x8b\xcf\x89\xdf\x17\x7f\x20\xfe\xc8\xbc\x70\xf1\xe0\xc2\x72\x53\xe4\xcc\xa4\x70\xad\xb8\xa7\x74\x28\x75\x66\x8f\x7b\xe9\x9a\x70\x69\xfe\x47\x50\x7f\xe0\x9b\xb0\xf0\xc5\xfc\xa9\x5f\x7b\xf2\xd3\x8b\x9f\x12\x7f\x38\x3e\x78\xda\xb2\x59\x7d\x20\xa8\x11\x7b\x13\xaa\x44\x5e\x74\x03\x7a\x5a\xda\xe3\x29\x99\x4d\x61\xb3\xc9\x2a\xbd\x86\x50\x5e\xd2\x9b\x24\x9b\xff\xba\xb9\x9d\xaf\x12\xff\x6c\x47\xcd\x24\x66\x4f\xd5\xb3\xdb\xe4\xd3\xf7\x82\x81\xd0\x7c\x83\x08\xbb\xf4\xf1\x5f\xb6\x9e\xb4\xdb\x24\xa3\x1f\xc5\x66\x42\x7a\xc5\xe6\xf7\x39\x5d\x8c\xd3\xe6\x62\x25\xcb\x12\xb7\x94\x06\xd6\x74\xd4\x7e\x20\x1c\x32\x4b\xfe\x85\xbc\xac\xfc\x4d\xcd\x61\x71\x3a\xe0\x87\x95\x76\xd0\x75\x45\xdf\x7b\xcd\x93\x71\x5b\x2b\xbb\x46\x5a\x27\xbf\xe2\xdb\x80\x8b\x0d\x36\x35\xdb\x55\x53\xfe\xf9\xf3\x25\xee\x9a\x72\xa6\xbd\xc4\xfd\x46\x5f\xf1\x19\x1e\x93\x96\x37\xb9\xbd\xee\x9a\x72\x33\x31\x2e\x74\xf6\x12\x8d\x7e\x91\x83\x65\x48\xa5\x3b\x14\x74\x37\x94\xfb\x4c\x00\x16\xae\x74\xf2\xfa\xd6\x25\x83\xad\xc5\xe5\xa5\xd6\x7a\xdf\xe2\xfa\xc5\x9e\x32\x93\x8a\x23\x2a\x8d\xce\xac\x71\x96\x2d\xd0\x94\xf6\x9e\xda\x81\x5f\xb9\xc4\xba\x68\xe5\xba\x4a\x93\x6b\xd1\x2a\xf5\x23\xf5\x81\x45\x09\xec\xd0\x5a\xb5\xaa\x4a\xeb\xe0\xb9\x23\x5b\x75\x58\xb0\x57\x11\xe3\x39\x50\x06\x17\xc1\x7a\x30\xfb\x13\xa5\xd6\xd2\xae\xf8\x9a\xe7\x3f\x13\x7f\xfb\xf2\xfa\x8d\xa4\xc4\x54\xec\x38\xbb\xdc\xe3\x2e\x29\xf7\xb8\xf1\x69\x17\x46\xdd\xab\x6d\x1a\x1d\xa7\x6e\xf0\xad\xf7\x2e\x0f\x35\xb0\xba\x66\xbd\xa3\x64\xb9\x71\x91\xb1\xd8\x5e\xdc\x0e\x0c\x83\x5b\x5c\x75\x9d\x5e\x6f\x67\xdd\x48\xe7\x42\x1b\xcb\x62\x62\xd2\x2e\x7c\x66\x57\x78\x6a\x22\x39\x19\x08\xd6\xb7\x98\xd4\x3a\x5b\xb9\xd5\xef\x5f\xda\xdd\x02\x55\xe6\x2a\xbb\x43\x5b\xe6\x2c\x5e\x67\x1b\x5c\xbe\x7f\xaf\xf8\xe1\xaf\x2b\x87\x36\x77\x54\x98\x8c\x4b\xd6\x6a\x7f\x03\x4d\xbb\x0f\x8d\x4f\x4e\x10\xbb\xce\x69\xb6\xa9\xad\x55\x07\x76\x8b\x1f\x7c\xab\x61\xfe\xfb\x86\x22\x69\xd6\xb7\x86\xdc\x3c\x18\xc0\x51\x01\x10\x72\x3a\x78\x68\x07\xde\xd7\x05\x4e\xc7\x09\x9b\xb0\xef\xba\x5a\xed\xa9\x3c\xb2\xbf\xdc\x6e\x2a\xfa\x25\x06\xbb\x96\xd7\x8a\x11\x93\xd3\x91\x7c\xb7\x1b\x27\x4f\xb2\x1f\xe1\xd7\xf8\xbb\x8d\x6e\x9d\xf8\xa0\xb6\xac\x98\x1f\x80\x3e\x83\x8a\xd5\x88\x17\x7f\xe0\x18\xbb\xab\x16\xdf\x74\xb2\x0d\x05\xdc\xdc\xd9\x4e\x7a\xe9\x4b\xb2\x5f\xf2\x83\x8a\x14\xdb\xbf\x50\xd8\xec\x37\xbb\xc0\x19\x70\x7b\x94\x8d\x83\x92\x88\x55\x86\xc2\x36\xe9\x9c\xf0\xb0\xb4\x11\xd2\x6e\x76\x58\x95\x9d\x37\xf4\x87\xa9\x66\x19\x5c\x34\xbd\x68\x70\xba\x7f\x71\x66\x7f\x66\x71\xff\xe3\xa0\x79\x7c\x5a\x36\xf2\x9b\x96\xe0\xe9\x83\xd2\xdf\x50\x26\x33\xb4\x38\x66\x27\x97\x1e\x29\xd8\x63\x8b\x57\x5c\xd8\x44\x10\xcd\x9a\x41\x4d\x17\xae\xd8\xf3\xf8\xe3\x7b\x1e\x15\x3f\x05\xfe\xd1\x87\x77\xe3\xe7\x69\x6a\xa6\x7d\x37\x5c\x22\x6f\xae\x91\x36\xd8\xfc\xff\xa2\xed\xf8\xd2\x99\xff\x67\xdb\x0e\x97\x8a\xff\x57\xda\x1e\xf4\xdb\xff\xaf\xb7\xfd\xd2\x4b\xff\x37\x2d\x9f\xdf\x76\xb5\x34\x2f\xcb\xad\x9f\x6b\xbb\xcf\xf1\xbf\x68\x77\x66\x7f\xe6\x5f\x69\xf5\xaa\xed\xdb\x57\xfd\x8f\x5b\x6c\x9a\xf3\xc1\xe4\x46\x5e\xe9\xb4\xfa\x41\xb4\x12\x6d\x40\x5b\x50\x1c\xa5\xd0\x0e\x74\x2e\xba\x10\xed\x43\xd7\xa1\x5b\xe5\x13\x2f\x60\xf6\xac\x40\x2f\x84\x65\xdf\x72\x55\x66\xe5\x20\x95\x90\xc3\x19\x0e\xf9\x9c\x58\x39\x92\x9a\x51\xf6\x01\x85\x66\xd3\xb3\x71\x40\xce\xa9\x3d\x3e\xff\xf8\xf2\x5f\x82\x3f\x8b\xc7\x1d\x17\xb3\x37\x68\x34\x33\xfb\x34\x25\x9a\x35\x1a\x4d\xe3\xa9\xd6\xb6\xa5\xf1\x6d\xd7\x7d\x81\xe8\x42\x7a\xdb\x53\x4b\xb6\xfc\x74\x4d\xa3\xa6\x44\x53\x25\x1b\xea\x6e\x92\x22\xd9\x90\x77\xe6\x6e\xc5\x78\x57\xb6\x08\x46\xc7\x64\xce\x2f\x28\xbe\x35\x3f\xa1\x14\x90\x77\x20\x6f\x9a\x17\xb2\xbc\xa6\x84\xb6\x43\xb3\x46\x53\xa2\x69\x3c\xf3\xbf\xa2\x4b\xae\xdb\xf6\x39\x62\x11\x5d\xd5\xaf\x59\xea\x29\xef\x69\xd4\x68\xc4\x7b\x24\xbc\x4d\x27\x84\x01\xa9\x8a\xe9\x2f\xb9\xfa\xd6\x09\x39\xee\x13\x72\x90\x79\xde\x59\x7d\x75\xa8\x49\xf2\x98\x3a\x80\x56\xa0\x73\xd0\x1e\x74\x19\xba\x16\xdd\x82\xee\x42\xf7\xa3\xef\xa2\x27\xd1\x0f\xa5\x1d\x4f\x47\x9d\xed\x4b\x1b\xd5\xe7\x52\xee\x0e\x40\xc7\x59\x7b\xbb\x95\xd8\x71\x5c\xda\x7d\x92\xd5\xe5\x29\xa0\xf8\xc3\x73\x48\xaf\x15\x1d\x3c\x70\xcd\xe0\x9e\x2f\x36\x3e\x07\xfa\x92\x7a\x1c\xff\x62\xfe\x6c\x9a\x9b\x96\x0f\x47\xec\xea\x99\x41\x3d\x5d\x56\x7d\xb7\xde\x3a\x8d\xbb\x2d\x65\x16\x4b\xd9\x1a\x29\xf4\x4a\xe1\x55\xf3\x60\x39\x64\xd6\xc8\xab\x75\x8b\x61\xeb\x75\xdb\x92\xcb\xbd\x63\xf5\x0e\xad\xb6\x41\xab\x15\x9f\x93\x22\x47\xad\xba\xac\xce\x1f\x5c\xc6\xbe\x6b\xb0\x1c\x99\x3e\x01\xfb\xe5\x7f\x98\x23\x53\x83\x83\x07\x0f\x14\x9e\xa5\x14\x76\x38\x1c\x29\xb3\xd3\x69\x7e\xac\x70\xe0\x20\xfc\x1b\xbd\x66\xf1\xce\x0b\x2d\x27\xe4\xcc\xcc\x3d\x1e\xe0\xe9\x6d\xd7\xad\xb4\x1a\x2a\x8f\x6d\x9c\x37\xef\xab\x59\x16\x9c\x99\xb6\xc0\xc1\x13\x70\xd7\xfc\xc3\x1c\xf9\xbf\xb4\x66\x04\xfa\xbc\xcb\x8a\x48\x8f\xba\xd1\xa9\x68\xbb\x6c\xe3\xc5\x73\x95\xf2\x52\xae\x12\x6c\x88\xe7\xa4\xb3\x92\xe9\x3f\x4b\x30\x80\x6b\x79\x03\x91\x56\x6c\x74\x0d\x09\x4e\x07\xe7\xf1\x02\x0e\x87\x2c\xa1\xda\x70\x88\x71\x58\xe6\xb6\x55\xd8\xe4\xb3\xf2\x3c\x6e\x69\xc3\x9c\x57\x36\xc2\x95\xf6\x83\xf1\x06\x90\xec\xc1\x71\x38\xe4\x02\xf2\xbe\xb9\xa2\xc8\x21\x1e\x71\x14\x55\x98\xe1\x20\x76\x89\x9f\xbc\xa9\x32\x00\x4f\x18\x0c\xaa\xdb\x9e\x79\x58\x7c\xe1\xbb\x67\xbf\x7f\xfb\x30\xc0\x0f\x6e\xe3\x31\x21\xa0\xc2\x60\x54\x5d\xf3\xfe\x94\x8a\xdf\xf1\x34\x90\xcb\xef\x84\xe6\xb7\x77\xcf\xbc\xbf\xfb\xb1\xdd\xbb\x1f\x83\x3b\xc6\x37\xab\x4c\x98\x73\xf2\x9a\x45\xbd\x85\xe7\xb6\xef\x39\xa8\xd7\xf4\xf5\x68\xf8\x22\x16\x9b\x54\xc3\xe3\x98\x7c\xf5\x9d\x0b\xae\xf8\xfb\x95\xb0\x71\x43\xfa\x8d\x91\x4d\x9b\x46\xde\x48\x9d\x7e\x2f\xa0\xc3\xe2\xd9\x1b\x88\x4e\xdd\x62\xa9\x34\xaa\xc9\x6a\xf0\x7d\xef\x21\x68\xba\x57\xc3\x27\xef\xff\xed\x39\xdf\x13\x7f\xb6\x8a\xa8\xed\x45\xea\x66\x9d\x5a\xc7\x2c\xfa\x4f\x68\xbd\xe7\x72\x60\x9f\xd9\xa5\xd6\x6c\x3f\x24\xbe\x5d\x47\x69\xee\xfe\x02\xed\x7a\x6d\x09\xa7\xd2\x04\x16\x68\x34\xa1\xab\xd6\xa4\x1f\x8b\xe8\x8c\x3f\xd8\x73\xd6\xbd\x8b\x35\x9a\xfa\x80\x5a\xc5\x2d\x7d\xeb\x9c\xdd\xef\x5f\xcc\xf1\x17\xfe\x59\x39\x9b\x5c\xde\x57\x6c\x45\xa8\x4e\xf2\xe6\x7e\x9c\x97\x65\xc4\xa2\xcf\x11\xa7\x7c\xee\x91\x9f\x9b\xa7\x09\x82\xad\xf3\x9f\x57\x40\xae\x07\xa6\x91\x11\xa1\xe3\x9f\xdf\xf8\x63\x70\xdf\x95\x5e\x67\x2a\x2f\x86\xc8\xdc\xf9\x0e\x04\xe9\x90\x1b\xa1\x7a\x30\xd7\x63\x73\x95\x59\x7e\x2f\xab\x78\xe1\x3a\xda\x9c\xb9\x36\x11\x34\x83\x18\x84\xd1\x0c\xda\xda\xbb\x85\xa0\x2d\xbd\x33\xfb\x67\x5f\x04\xe0\xad\xf2\x21\xe7\x18\x11\xf4\x05\xda\xd2\x8b\x11\xcd\x17\xe7\x1c\xfe\xc3\x56\x99\xf6\xd1\xbe\xd7\x20\x3f\x42\x75\xe1\x50\xa0\x19\xa4\xc0\x5d\x6d\x04\x8f\x5b\xfa\x16\x59\x01\x73\x5e\x50\x9c\x0e\xdf\xf1\x63\xc3\x7c\xfd\x2a\x8d\xe6\x77\xbf\xd3\x68\xae\xd2\x94\xd0\xb8\x44\x73\x5c\x1a\xe7\xe6\x77\xfd\x8d\x2f\x2b\xa6\xa4\x19\xeb\xfc\x31\x25\xf3\xda\x27\xbf\xf7\xf9\x97\xcf\xc5\x3d\xae\x95\xbf\xa3\x74\x0e\x1c\x90\xe9\x1c\x38\x20\xd3\x9d\x97\x3e\xa2\x3f\x91\xc5\x70\xe0\xe4\x65\xe7\xd2\xe2\x4b\x0c\xda\x7a\xec\x33\xeb\xac\x8e\x97\x64\x49\x0d\x55\x70\xc2\xb2\xde\x0b\xbe\x99\xac\xf8\x53\x76\xeb\x49\xd6\xf0\x10\xc7\x81\x99\x9f\xc0\xa1\x93\xad\xd7\x79\xa9\x6e\x2c\xd9\x7e\x58\x51\x0d\xf2\xa2\x3e\xf4\x03\xf4\x2a\x42\xe0\x36\x80\xd3\xd1\x09\x2c\x27\x6f\x8d\xf3\x39\x1d\x36\xe7\xdc\x10\xc9\x03\xe3\x99\xbd\xe6\xb0\xd5\x49\xb7\xb9\xe4\xb5\x87\x37\x80\x35\x24\x7d\x02\xe4\x3b\xa1\x02\x42\x9e\x4e\x90\xfc\x88\x84\xdc\x1e\x37\x55\x07\x2e\x70\x7a\xc1\xe3\x0e\xbb\x3d\xd5\x92\x75\x15\x7d\xd6\xe4\xf8\x50\x98\x73\x81\x93\x5e\x37\x02\xa5\xec\xe4\x78\xce\xe6\x08\x77\x42\xd8\x8b\xf9\x4e\xc6\xef\x90\xec\x64\x1c\xf2\x75\xd6\xe1\x74\x7b\x0c\x8c\xc3\xe9\x08\x59\x24\x1b\x53\xa7\x23\x7c\x82\xef\x11\x56\x6b\x5c\xa0\xd3\x1a\x02\x26\x71\x93\xca\xc9\xab\x54\xbc\x53\xc5\xdf\x5a\xa3\xab\xd1\xbb\x75\x3a\x39\x9a\xa2\x59\xbc\xca\x61\x82\x4b\xab\xaf\x0e\xb9\xbd\xcc\xd2\x15\xdd\x6e\xec\xe0\xad\x9c\x81\xb0\x84\xff\x3e\x71\x56\x56\x73\x0b\x36\x0e\x58\x1b\x74\x3a\x5c\xcb\x01\x21\x0b\xdb\x38\xcd\xb6\x75\x8b\x93\x65\x2e\xbe\xd6\x5f\xd1\xb4\xc1\x50\xb6\xd8\xa4\xf7\x79\xac\x5e\xbd\x5e\xaf\x69\x6a\xd5\x63\xcc\x43\x9d\xab\xd8\x51\x23\x54\x57\x6d\x7a\xd8\x04\x1a\xa3\xd1\xbe\xb0\xa1\xfe\x54\x2b\x56\x57\x9a\x9d\x6d\x45\x15\x76\xbd\x41\xc5\x2f\xd8\xc6\x42\x99\x5e\xcf\xb8\x1c\x15\x56\x23\x56\xd7\x60\x47\x71\x83\xd5\xa0\xb7\x36\x3d\xf7\x48\xc5\x86\x1d\xa5\xcd\xe3\x63\x5d\x9e\xbf\xed\x3b\x2c\x3e\x28\x5e\x23\x3e\x28\x71\x6c\x05\x24\x61\xc5\x61\xa6\xd6\x6c\x5e\x60\x31\xb3\xb5\xaf\xaa\x54\x2a\x07\xed\x92\x63\x4d\x8d\x5e\xef\xd6\x57\xeb\x6b\x74\x3a\x8f\xae\x66\x07\xcd\x57\xa9\x4c\x8e\x4d\xdd\x0b\xdd\x65\x2b\x46\x36\xd8\x5c\xb5\xd8\xce\xd9\x35\x76\xa3\xc3\x56\x24\x5a\x6c\xe5\x06\x9b\x66\x49\xd8\xa4\xd7\x02\x34\x35\xd9\xea\x35\x9a\xa2\x35\xbe\x75\x7b\x34\xbc\xbf\xd5\x1f\x5b\x1a\x32\x32\xdd\x6d\xc9\xac\x5d\x6b\x2d\x2a\x01\xf0\x95\xd9\x8d\x8e\x72\x86\x94\x0d\x5f\x1a\x34\x38\x4c\x13\xcd\xde\xea\x47\x96\x98\xb4\x3a\x4b\xf1\x22\x87\xd9\xda\xe1\xc2\x9c\x1a\x58\x23\xcb\x03\x5f\x5f\x17\x8c\xb7\x8c\xe6\xcb\x1b\x38\x8e\xf7\xd5\x77\x9d\xd2\xd7\xeb\x0a\x95\x14\xb9\x42\xee\xc6\x4a\x6d\xf1\x77\x40\xbd\x35\x70\x5e\xdb\xe6\xf5\x6b\x09\x86\xa9\x93\xee\x41\x87\xb9\xf7\xb0\x4b\x10\x02\xb3\x43\xda\x5f\xde\x05\x7e\x62\xad\x91\x2c\x12\x95\x97\x50\x9d\x4c\x17\xf8\x39\xcc\x7b\xc1\x53\x53\xc5\x06\x29\xdf\xad\x16\x8f\x17\x9a\x21\xc8\x56\xf9\xc2\x54\x30\x68\xf9\x9a\xaa\x6a\x0e\x73\xa3\x0f\xd4\xd5\xf5\x37\x99\xab\x46\x0d\xfc\x68\xb9\x71\x71\xe8\x74\xf1\xbf\x4f\xdf\x04\x42\x4d\x6b\x47\xb3\xaf\xc1\xb2\xf9\x0c\xce\xcf\x5e\xf5\x87\xa6\xc6\x99\xaf\x89\x17\x9d\xd7\xd7\x0a\x2a\xa2\xc5\xcd\xfd\xe7\xc1\x4e\xfc\xd4\xa5\x7f\xe0\x4c\x0c\xbb\xb9\xb2\x62\xc3\xe0\xcc\x2f\xca\x8c\xec\x69\x33\xdb\x81\x25\x04\x37\x9d\xba\x4f\x7c\x4a\x7c\xe6\xbc\x7e\x1f\xa8\x66\x5e\x5d\xb9\x8c\xd1\x16\x7b\x3a\x1b\xde\xac\x13\xd7\x74\xb0\x1c\xe8\xe2\xc5\xfa\x96\x30\xde\x0d\x57\x7d\xdc\xe1\xd5\x17\xc5\x75\xa5\xfd\x33\x9b\xcf\x3a\x7b\xaa\x60\x56\xbe\x87\x48\x36\x2e\x66\xd4\x88\x5a\x50\x27\x5a\xab\xbc\xb9\xb3\xdb\x1c\x06\xa6\xc6\xec\x73\x91\x32\x60\x69\x02\x4b\x06\xd7\x8b\x09\x5d\x62\x4b\x99\x7e\x73\x0d\xf8\xcd\x35\xbc\xdb\x53\x63\xf6\x9b\xad\x7e\x2b\x1b\xf0\x78\xd9\xea\x9a\xea\x85\x60\xf6\xf9\x1d\x21\x8f\x9b\x0d\xca\xfb\x39\x82\x35\x66\x7f\xf8\xa4\xfb\x55\x6e\x04\xc0\xac\xca\xa0\x56\x1b\x54\x2c\x86\xc5\x00\x8c\x56\xa5\x66\x19\xc2\x70\x2c\xa7\x62\x09\x7c\xfe\xce\xae\x5d\xf0\x9d\x6d\xb7\x95\xd9\x74\xb7\x8e\x37\x2d\x5f\x08\x07\x58\x62\xb2\x54\xda\xeb\xcd\x76\x15\x73\xa6\xad\xf6\x40\x1b\x01\xe8\x60\x8c\xd5\xe5\xde\x8a\x42\x8a\x77\x35\xfb\x2a\x1f\x9a\xff\x49\x0e\xff\xea\x61\xc6\xa1\x32\xf1\x2a\x02\x41\xac\x22\x26\xd6\x11\x9d\x02\xa7\xca\xc8\xa9\x35\x37\x61\x0d\xaf\xe5\x54\x84\x70\x9c\x96\x35\x7c\x08\x6f\x8a\x0b\xe0\xcd\x5f\x5e\x73\x9a\xb8\x00\xda\xc4\x17\xa0\xcb\xd0\xe7\x34\x15\x9b\x74\x2c\x11\x17\x80\xff\xa6\xce\xdb\xf6\x94\x57\xd6\x18\xab\x6f\x14\x17\xb8\x6a\x3b\x88\xe5\xb8\x6f\x1d\x2c\x6a\xf9\x02\xab\x96\xb1\x7f\x47\x3a\x64\x47\x25\x68\x2d\xba\x1c\x21\xd6\xed\x91\x4e\x2d\x73\x20\xaa\x56\x9a\x81\xe3\x1d\x56\xaa\x4d\x20\x80\xa5\x93\x1e\x79\x8e\xef\x24\x15\xe0\x22\xbc\xdb\x80\x79\x17\x76\x3a\x3a\x71\x97\xec\x89\x80\xe7\x58\xce\xe3\x22\x92\x0b\x42\x8b\x95\xe3\x39\x2c\x6d\x74\xe7\x6a\x2a\x11\xa9\x76\xd7\x70\x2e\x5c\x01\x0e\xa7\x97\x34\x83\x97\xf3\xb8\xb0\x53\x59\x18\x51\x55\x56\xcb\x38\x1d\x16\x66\x92\x63\xf5\xde\x73\xc7\x0b\x15\xe6\x5b\x7b\x61\x8d\xb8\xf9\xde\xe2\x4a\xc2\xac\xab\x63\x77\x2d\xac\x6e\x74\xb1\xfb\xcf\x7e\x45\x7c\xe7\xb6\xab\xc5\x4f\xb6\xb9\x8c\x8b\xef\xfe\xfa\xde\xfa\x05\x55\x0b\xd4\x0c\x39\xf7\xc7\x77\xec\x1a\x64\x8c\x6d\xd5\x5f\xf9\xf4\xa1\x2b\xeb\xea\x1c\x35\x25\x8c\x21\x78\x48\x9c\xd9\xfb\x70\xfd\x25\x17\x9d\xe3\xf1\x5c\xbe\xf3\xfb\x1f\x2e\x35\x94\x0c\xfe\xe7\xcf\x5a\xaa\x4f\x3d\xb3\xb6\x4e\xfc\xb5\x38\xb0\x14\x38\xcc\x99\x6b\xea\xf4\x06\x95\x77\xc9\xb8\xaf\x9c\x60\xb6\x7d\x41\x6f\xab\xbf\x5a\x65\xed\xba\xa3\x1b\x6b\xd7\xd6\xef\x2d\x0b\x1a\xab\x2b\x6f\x85\x1a\x68\xbf\xee\x17\xef\xff\x10\x88\xca\x15\x9b\xb8\xef\x74\x52\xfd\x9a\xf8\x3a\x3e\xa5\x6c\xf9\x23\xa1\xe0\x9a\x7d\x3d\xb8\xa5\x7b\x9d\xd7\x21\xde\x7a\x3b\xd4\xbe\x7a\x4e\x62\xeb\xa2\xb8\xbf\xc7\xce\x31\x04\xca\xeb\xea\x34\x5a\x7b\xef\x8a\xc5\xb5\xdb\x3f\x5e\xc4\xd5\xf7\xf6\x17\x17\x99\xd4\xd6\xe2\x48\x51\xa4\xce\xc6\x6c\xbd\x7d\x73\x8f\x56\xe7\x74\x47\xe1\x6c\x50\xef\x5d\x71\x48\xfc\x43\xae\x4a\x5b\xa2\x21\xb0\x09\xf4\xe0\x3b\x27\x71\x66\x49\x89\x6e\xd0\x7d\xf1\xe5\xbb\x1b\x1a\xb0\xdd\x58\x52\x54\x5a\xaa\xd3\x54\x2c\x56\x55\x5e\x7b\xd9\x8b\x77\xe4\xa2\x65\xd5\xc6\xa5\x8b\xdd\x2b\x73\xe2\x20\x62\x51\xdd\x17\x3a\xee\x4d\xf6\x13\xe4\x44\x2d\xa8\x1b\x9d\x2e\x9d\x38\x15\x72\x7b\x14\xd7\x68\x2e\xec\x74\xf1\x21\x30\x60\xa6\x96\xae\x32\x3b\x49\x98\x2b\x01\x1d\xd4\x86\x43\xbc\x0d\xdb\xa4\x33\x84\xa4\x0f\x32\xc0\x7a\xa1\x11\x74\xc0\x61\xa7\x1b\x77\x32\x92\x7f\x79\x12\x42\x9e\x6a\x8f\x3b\xec\x62\x0c\x84\xef\x24\x6c\x47\xf9\x92\x0d\x8b\xf6\x0a\x16\x9d\xb1\xc6\x59\xb1\xa8\xb4\xb6\x6b\x61\x5d\x91\x4d\xaf\xd5\xc0\xf6\xc0\x33\x7f\x14\xff\x22\x7e\x76\xf8\xa1\x51\x16\x8c\x1a\x37\xe3\x1f\xfb\x0b\xac\x83\xad\xb0\x29\x6f\xc3\x1f\xaf\xbe\xe8\x89\x43\x4f\x5c\xb4\x5a\x8e\x20\xd3\xf3\x5b\xf1\x4f\xe2\x8f\xc5\xb7\x45\xf1\xe1\x21\x57\x2b\xbb\x7c\xdf\x93\xef\x7d\xf4\xb7\xf7\x7f\xba\xac\x6a\xd1\x62\x9d\xf8\xc6\xdf\x55\x18\x97\x9c\xf3\xf2\x45\x5b\xed\xce\xd8\x95\xef\x5d\x94\x7c\xfc\xf6\x11\x7c\xb8\xf1\xbe\x76\x4f\xb9\xad\xd4\xa9\x61\x09\x63\xd4\xe8\xeb\xea\x16\xd4\x56\x15\xe9\x61\xe6\xc7\xe7\x3d\x16\x29\xf2\xef\x3e\x08\xce\x3b\xeb\x4f\xaf\xdf\xa9\x3f\x24\x5e\x28\x8a\x37\xea\x6e\xbf\xb3\x54\xcf\xe0\x8a\x43\x4f\x5d\xb2\x7a\xf5\x25\x4f\xc9\x11\x77\xf5\xa1\xa8\x6a\xf5\x03\x7f\x13\xef\x7c\xfe\x76\x68\xfa\xe4\xe5\xaf\x0b\xf5\xce\xf5\x77\xe6\x7c\xfb\xc4\xf3\x3f\x81\x8d\xfd\x2c\x4b\x98\xb3\xae\x79\xf2\xe7\x3f\x7b\xe2\xaa\x33\xb0\x2b\x76\xd5\xcf\x64\x7b\x12\x49\xc7\x48\xdf\x01\x2b\x50\x33\xea\x92\x6c\xba\xd3\xe8\x3c\x74\x39\xba\x0d\x7d\x1b\x21\xab\xbd\xa6\xba\x03\xe8\x2f\x70\x0a\x04\x03\xfe\xff\xd3\xf4\xf1\x6b\x21\xb0\xdb\x16\x4a\xbf\xa0\xdf\x57\x0e\x7e\x5f\xf0\xff\x30\x7d\x30\x63\x6a\x31\x99\x5a\x4c\x99\x7f\x12\x33\xff\xde\xb6\xe0\xc8\xc1\x05\x6d\x6d\x0b\x48\xf7\x82\x36\x40\xff\x02\x8a\x14\x03\x9a\x36\x99\x4c\x95\x26\xd3\xbf\x0c\xed\xff\xac\x9b\x92\x61\x29\xb1\xcf\x55\x34\x67\xda\x64\x3a\xfc\x4f\x62\xd9\x86\xb0\xf9\x0b\xc4\xad\xe6\x10\xba\x82\xae\x35\xe5\x7d\xb8\xcd\xf4\x69\xca\xed\x21\x75\x66\xa7\x0b\x0c\xe0\x6e\x06\x69\xdf\x49\x07\xbd\x26\x1d\xb1\x62\x66\x89\x81\x3e\x42\xcf\x9a\xfa\x49\xfe\x53\x9c\x6c\x13\xb0\xd2\xae\x83\xd9\x9c\x0a\xf0\xb8\x43\x0e\xa7\x95\x35\xcb\x0e\x56\x14\xd7\xc5\xe5\x10\xee\x04\x17\x70\x46\x30\xd7\x59\x3b\xc1\x61\x04\x79\x77\xaf\x11\x24\x72\x35\xd5\x9e\x3a\x3d\xd4\x85\x5c\xc0\x71\xae\x7b\x1e\x73\xea\xf5\x06\x9f\xf3\xb1\xb0\xde\xb7\x44\x1f\x17\xff\x7c\xc8\x84\x8b\xaa\xea\x4d\x19\x77\xc0\x9d\x31\xd5\x57\x15\x61\xd3\x21\xf1\xcf\x71\xfd\x12\x9f\x3e\xfc\x98\xd3\x67\xd0\xeb\x9d\x8f\xdd\x53\x5e\xa2\x6e\x28\x87\x90\xe4\x18\xf2\x45\x46\x5d\x5a\xcd\x94\x94\xd2\x8a\x4a\x02\x0e\xa5\x1e\x30\x9e\xa4\x1e\x30\x1e\x57\x4f\x69\x09\x53\x5d\xaa\x66\xc4\x17\x25\x9f\x96\xa1\xf2\x06\x75\x09\xdc\x51\x35\xae\xf7\x3b\x9d\x7a\xfd\xb6\xfd\x6e\xbf\xa6\x0e\x1a\x6f\x16\x9f\xff\xd0\xd2\x50\x61\x55\x59\xa6\x5f\x2f\x71\xbb\x4b\x5e\x9f\xb6\xa8\xac\x15\x0d\x96\x0f\xa1\xfd\x66\xf1\xd5\x3a\x8d\xdf\xbd\x7f\x9b\x5e\xef\x74\xfa\xf5\xe3\x55\x9c\xb7\xb9\x8a\xeb\xbc\xe5\x96\x4e\xa8\x6d\x6c\x60\x69\x4d\x5e\x83\x41\xae\x48\x7c\xf5\x66\x68\x3f\x79\x45\xe2\xf3\x37\x43\xe3\xb1\x15\xb1\x0d\x8d\xb5\x40\x2b\xe2\xaa\x9a\xbd\xe8\x18\x1b\x3f\x0b\x7d\xa2\x02\xba\xc8\xa5\x93\x0a\x47\x67\x95\x5a\x8b\x1a\x1c\x16\x9e\xc3\x0c\xcf\x82\x9b\x3e\x23\xd7\x86\x43\xb5\xec\x33\xfc\xd0\x55\x87\x0a\xf9\xb7\xef\x4a\xf0\xfc\xd0\x55\x3f\x2f\xdc\x04\xb6\x6f\xc1\x12\xf1\x8e\x9d\x53\x1a\xed\xc3\xe2\xab\x0f\x1f\x29\x86\x33\x25\x18\x9a\x1e\xbe\x07\xdf\x88\x87\x77\xfc\xc7\xed\x02\xcf\xaf\xbc\xfc\x67\x05\x09\x52\x5f\x84\xbe\x60\x3a\xc4\x3b\x0b\xe2\x8b\x77\x3f\x22\xbe\xf0\x7c\xf1\x57\xe1\xcc\x3c\x84\xef\xfe\x1e\xb4\x3d\x5f\xec\xd8\x28\xbf\x7f\x54\xfc\xff\x19\x90\x05\x39\x90\x5b\xb2\x38\xb7\xd6\x68\xa1\xc6\xea\x09\x3b\x79\x60\x49\x13\x38\x79\x4f\x9d\x93\xf7\x30\xff\xcc\x5d\xdf\x43\x77\xf8\xbf\x7d\x5f\xeb\x83\x2b\xed\x87\xed\xe2\x00\xb4\x5c\x20\x1e\x82\xb7\x0e\x8f\x7e\x04\xe7\x3d\xbd\xe6\x29\xdc\x41\x27\x34\xf1\x59\xf1\x9d\x57\xce\x3e\xfb\x15\xa8\x86\x4e\xa8\x7e\xe5\x8f\x27\x7b\xde\x38\x22\x3e\x02\x5b\xc4\x6f\xc0\x8e\xaa\xd6\xb8\x0f\x27\x2e\x10\x0f\x5d\x30\x39\xfa\x51\x7c\xd3\xea\xa7\x56\x6f\x91\xb0\xce\x9e\x5f\x13\x9e\x3c\xc9\xaa\x50\x87\xdc\x5f\x00\xbf\x89\xfd\x02\x6d\x44\x23\x28\x89\x26\xd1\xf9\xe8\x3e\xf4\x08\x7a\x16\xbd\x84\xde\x44\x1f\xa0\x0f\x11\x02\x2f\xf1\xb8\x3b\xc1\x23\xbb\x14\x26\xd5\x5e\xf0\x78\x39\xe9\x11\x83\xc8\xe7\x5d\xf1\x06\x62\xe7\xa4\x47\x08\xe9\x29\xc1\xe9\x90\xdf\x4a\x84\xa4\x97\x11\x4e\x9f\x34\xdf\xd3\x59\x27\xc4\x38\xe4\xd7\x17\x9d\x00\x0e\x03\x48\x80\x03\x29\xef\x2d\xc0\xe9\xa0\x99\x5e\x08\x85\x43\x0e\xab\x03\xf3\x9c\x87\x16\x51\xde\x77\x78\x71\x28\x4c\x6f\x3b\xc9\x5f\x69\xc8\x45\x78\x17\xe6\x40\xa9\x4d\x46\x90\xea\x93\xdc\x1a\xd1\x6c\xb9\x1a\x98\xa3\xe7\x98\x5f\xd8\x23\x97\xe8\x04\x07\x1b\x62\x9a\x03\x4d\x84\x5d\xbe\x94\x35\x8c\x36\xb9\x08\x83\x79\xc2\xb3\x3c\x21\x3a\x4e\xab\xd2\x6a\x39\x57\x6d\x29\x98\xd4\x76\x9d\x36\xe4\xaa\xdf\xe6\x34\xf9\xea\x16\x3a\x56\x0f\xba\xea\x2d\xfc\x15\x2c\x57\x61\x28\xe5\xf0\x08\x70\xfe\x41\x1b\xb3\x76\x88\xb3\xd9\xcb\x19\x7c\x1e\xaf\xf3\xb5\x9a\xfb\x97\xf9\x8e\xf4\x70\x26\xa3\xa1\x98\x10\x53\x19\x3e\x5d\xc7\x57\xd7\xeb\xb4\x7c\x75\xfd\x8c\xbd\xb6\xab\xa4\x44\x67\xb1\x74\x95\x94\xb0\x8c\x55\xd7\xd6\xe3\xd6\x95\x96\xf5\x7c\x75\x20\x98\xdc\x34\x61\x3b\xff\xd6\x0e\x1d\x8c\x7e\xb2\xc4\x47\xd6\x4e\x36\xb8\x3b\x6b\x99\xe0\xb6\xfe\xca\x0b\x6f\x7b\x60\xc9\xa9\x17\x4d\x6d\x6c\xe6\x02\x83\xf6\xca\xcf\xb3\x06\xb5\xcd\xda\xaa\x97\xc2\x6f\x31\x96\xea\x32\x86\x58\x4d\xe6\x32\xe6\x2e\xc6\x6e\xb3\x56\xab\xec\x36\x5b\xd5\x4c\xd2\x64\x2c\x2b\xed\x30\x99\x8c\xa1\x4e\xfc\x19\x63\x32\x1a\x69\x33\x8c\x86\xe2\x27\x8c\x6a\x87\x23\xe4\xd2\x34\x06\xc1\x5b\x64\x83\xa2\x92\xe6\x47\x1f\xf0\x08\x18\xcc\x18\x03\x01\xc2\x10\xac\x67\x35\x2c\x47\x80\x35\x39\xc1\xc8\xeb\x31\x2e\xd5\x5b\xbc\x0d\x65\x97\x9d\x7d\x05\x0c\xc4\x18\x5c\x52\xa5\x87\x82\x4a\x6b\xe0\x8d\x6e\xcb\xc7\x5a\x77\x9d\xd3\xad\xba\xf7\x36\x75\x39\xb8\x4d\xe2\xa7\x65\xc1\x58\x91\x5a\x4f\x2a\xee\x75\xc9\xc4\x4a\x38\xf1\x2d\x73\x7d\x91\xca\x4c\x03\x12\x0a\xe9\xac\x96\xee\x92\x52\x9d\xc5\x3a\x03\x65\x7d\x6e\x5d\x5b\xaf\xcd\xaa\xc3\xdd\xdb\xc5\x4f\x97\x77\x91\xa1\x2d\x6c\x58\x0d\x4b\x9a\xc6\x4e\x3b\xd3\xb0\xfd\xf2\xdb\x17\x2d\xbe\x28\xbb\x56\xbd\xfe\xdc\x76\x67\xd8\xce\xf7\x0c\xef\x3d\xcd\xb4\x66\xeb\x28\xce\xd8\x5a\x0d\x06\xb5\x4d\x0a\x81\x35\x95\xab\xac\x66\x73\x19\xc3\x58\x8f\x9c\x62\xab\x66\x18\xfb\x82\x6a\x96\x71\x92\x6d\xa5\x5d\x26\x93\xb1\xb4\xac\xb3\xda\x34\xb3\xce\x58\xcc\x10\xb3\xc1\x58\x42\x88\xe9\x7d\x47\xc8\x64\xd4\x34\x86\x2a\x35\x08\xa1\x22\x70\xcb\x27\x4e\x23\x84\x9a\xd1\x56\x05\x06\xa4\x45\xf7\x2a\x30\x46\x3c\xfa\x81\x02\x13\x64\x46\x87\x15\x98\x41\x5a\x28\x51\x60\x16\x59\x60\xb9\x02\x73\x48\x0b\x93\x0a\xcc\xa3\xd5\xd8\xa3\xc0\x2a\xa4\xc3\x57\x2b\xb0\x1a\x69\xf0\xc3\x0a\xac\x45\x76\xfc\x27\x05\x36\x20\x17\xe9\x41\x04\x01\xa3\x46\x08\xc9\x6f\x94\x28\x0c\xc8\x81\xae\x50\x60\x8c\x0c\xe8\x21\x05\x26\xa8\x1a\xfd\x44\x81\x19\xe4\x00\xac\xc0\x2c\xaa\x05\xb7\x02\x73\xc8\x01\xc3\x0a\xcc\xa3\x6f\xc0\x6e\x05\x56\xa1\x22\x3c\xa5\xc0\x6a\x64\xc3\xfb\x15\x58\x8b\x1a\xf0\x33\x0a\x6c\x40\x8b\x09\x41\x7d\x28\x8d\x32\x68\x0a\x65\x51\x02\x8d\xa2\x31\x94\x47\x95\xa8\x1f\x45\xd0\x0e\x24\xa0\x4a\xb4\x04\x45\x50\x0a\xc5\xd0\x14\xaa\x44\x3e\xd4\x82\x5a\x51\x08\x79\x51\x25\xea\x41\x49\x94\x44\x95\xf3\xb0\x72\x52\x4a\x40\x39\x24\xa0\xac\x84\x1d\x43\x5e\x84\xfa\xd2\x99\xa9\x6c\x62\x74\x2c\x5f\xd9\x1f\xd9\x21\x54\x2e\x89\xa4\x62\x53\x95\xbe\x96\xd6\x90\xb7\xb2\x27\x99\xac\x94\x2e\xe5\x2a\xb3\x42\x4e\xc8\xee\x10\x62\x5e\x84\x06\x51\x1a\xa5\x50\x1e\xf5\xa0\x49\xa9\xb6\x34\x9a\x40\x02\x42\x83\xe9\x54\xbe\x67\x52\xc8\xa5\x27\x04\x84\xd6\x20\x01\x8d\xa2\x02\x4a\xa2\x08\xca\x22\xb4\x46\x18\x2d\x24\x23\x59\x8a\xbb\x0a\xad\x44\xeb\xd0\x72\xd4\x83\x7a\xd1\x22\xb4\x0a\xad\x43\x83\x68\x00\x6d\x44\x43\x68\x15\x5a\x83\xd6\x21\x34\xb8\x6a\xe5\xba\xe5\x3d\xbd\x8b\x56\xad\x1b\x1c\xd8\x38\xb4\x6a\xcd\xba\x7f\x8d\xe2\x06\xa9\x57\x39\x94\x90\xca\x56\xa2\x00\xf2\xa2\x30\xf2\xa2\x96\x79\xe3\x82\x36\x08\xd9\x5c\x22\x9d\xaa\x0c\x78\xc3\xde\x16\xa9\x93\xff\x5a\xe5\x43\x28\x89\x04\x14\x91\x86\x4e\x1e\xc4\xb8\x44\xae\x12\xe5\x51\x5a\x0a\xc7\xa4\x2b\x27\x63\x15\xc5\x89\xa2\xfc\x5c\xc3\xe2\x28\xad\x60\xca\x38\x71\x85\x3e\xcd\xc9\xa2\x08\x8a\x21\x01\x4d\x48\xc3\x36\x8e\x2a\x51\x04\xe5\xa5\xfc\x04\x1a\x41\x85\x79\xb5\xa4\x50\x5a\x4a\x45\xa5\x36\x7b\x11\x1a\x4a\x0a\x91\x9c\x50\x99\x15\xe2\x42\xb6\x32\x9f\xae\xcc\x8f\x09\x95\x47\x59\x9b\x13\xa2\x79\xda\xf1\x78\x3a\x2b\x5d\x89\xa7\x53\xf9\xca\x7c\x36\x12\x13\x26\x22\xd9\xf1\xca\x48\x3e\x9f\x4d\x8c\x14\xa4\x22\xa9\x74\x3e\x11\x15\x72\x0a\xa3\xb3\x52\xcb\x4e\x18\x9b\x6c\xbe\x72\x6e\x70\x4e\x26\x8b\xe8\xa8\x2c\x21\x69\x1c\xf2\x28\x83\x16\xa1\x66\xd4\x3c\xd7\xdf\xc8\x31\x75\x7a\xa5\x9e\xa1\xb1\x7c\x3e\xb3\xa8\xb9\x99\x36\x2f\x22\xd7\xef\x4d\xa4\xff\x27\x35\x34\xa3\xa4\x32\x2a\x29\x69\xe4\x9b\xbf\xa4\xce\xe6\x64\x22\x2a\xa4\x72\x42\xb3\xb2\xc6\xf9\x47\x7f\xf8\xfb\x92\x4e\xa2\x77\xf7\x3e\x74\x29\xba\x04\x5d\x86\xae\x40\x57\xa2\xaf\xa1\xab\xd0\xe5\x40\xd5\x35\x03\x2c\x70\xc0\x83\x0a\xd4\xa0\x01\x2d\xe8\x40\x0f\x06\x30\x82\x09\xcc\x60\x01\x2b\xd8\xc0\x0e\x0e\x70\x42\x11\x14\x43\x09\x94\x42\x19\x94\x83\x0b\x2a\xa0\x12\xaa\xa0\x1a\x6a\xa0\x16\xea\xc0\x0d\x1e\x58\x00\xf5\xd0\x00\x0b\xa1\x11\x9a\x80\x3e\xd6\xb7\x40\x2b\xf8\xc0\x0f\x01\x08\x42\x08\xc2\xd0\x06\xed\xb0\x08\x4e\x81\xc5\xd0\x21\xbd\x2c\xea\x86\x1e\xe8\x85\x3e\xe8\x87\x01\x18\x84\x25\x70\x2a\x9c\x06\x4b\x61\x19\x2c\x87\x15\xb0\x12\x56\xc1\x10\xac\x86\x35\xb0\x16\xd6\xc1\x7a\xd8\x00\xa7\xc3\x46\x38\x03\x36\xc1\x99\x70\x16\x6c\x86\x2d\x30\x0c\x5b\x21\x02\x23\xc8\x80\x3e\x42\x7a\x88\x42\x0c\x04\x88\xc3\x28\x8c\x41\x02\xb6\xc1\x38\x24\x61\x02\x52\x90\x86\x0c\x6c\x87\x2c\xe4\x20\x0f\x05\xd8\x01\x93\xb0\x13\xa6\x60\x17\x7c\x05\xce\x86\x73\xe0\x5c\x38\x0f\xa6\xe1\x7c\xb8\x00\x76\xc3\x57\x61\x0f\x5c\x08\x7b\xe1\x22\xb8\x18\x2e\x81\x4b\xe1\x6b\x70\x19\xec\x83\xcb\xe1\x0a\xb8\x12\xae\x82\xab\xe1\x1a\xb8\x16\xae\x83\xaf\xc3\xf5\x70\x03\xdc\x08\x37\xc1\xcd\x70\x0b\xdc\x0a\xb7\xc1\x7e\xb8\x1d\xbe\x01\x77\xc0\x9d\x70\x17\xdc\x0d\xf7\xc0\xbd\x70\x00\xbe\x09\xf7\xc1\xb7\xe0\x7e\xf8\x37\xf8\x36\xfc\x3b\x3c\x00\xdf\x81\x07\xe1\x21\xf8\x2e\x3c\x0c\x8f\xc0\xf7\xe0\x51\x78\x0c\x1e\x87\x27\xe0\x49\x78\x0a\x9e\x86\x83\xf0\x0c\x3c\x0b\xdf\x87\x1f\xc0\x0f\xe1\x39\x78\x1e\x5e\x80\x1f\xc1\x8b\xf0\x63\xf8\x09\xbc\x04\x3f\x85\x9f\xc1\x21\xf8\x39\xbc\x0c\xaf\xc0\xab\xf0\x1a\xbc\x0e\x6f\xc0\x9b\xf0\x1f\xf0\x16\xbc\x0d\xbf\x80\x5f\xc2\x3b\xf0\x9f\xf0\x2e\xbc\x07\xef\xc3\xaf\xe0\x03\xf8\x35\xfc\x06\x7e\x0b\xff\x05\xbf\x83\xdf\xc3\x1f\xe0\x8f\xf0\x27\xf8\x10\x3e\x82\xc3\xf0\x67\xf8\x0b\x7c\x0c\x9f\xc0\x5f\xe1\x6f\xf0\xdf\xf0\x77\xf8\x14\x3e\x83\xcf\xe1\x08\xcc\x80\x08\x5f\x60\x84\x01\x63\x4c\x30\x83\x59\xcc\x61\x1e\xab\x50\x35\x56\x63\x0d\xd6\x62\x1d\xd6\x63\x03\x36\x62\x13\x36\x63\x0b\xb6\x62\x1b\xb6\x63\x07\x76\xe2\x22\x5c\x8c\x4b\x70\x29\x2e\xc3\xe5\xd8\x85\x2b\x70\x25\xae\xc2\xd5\xb8\x06\xd7\xe2\x3a\xec\xc6\x1e\xbc\x00\xd7\xe3\x06\xbc\x10\x37\xe2\x26\xec\xc5\xcd\xb8\x05\xb7\x62\x1f\xf6\xe3\x00\x0e\xe2\x10\x0e\xe3\x36\xdc\x8e\x17\xe1\x53\xf0\x62\xdc\x81\x3b\x71\x17\xee\xc6\x3d\xb8\x17\xf7\xe1\x7e\x3c\x80\x07\xf1\x12\x7c\x2a\x3e\x0d\x2f\xc5\xcb\xf0\x72\xbc\x02\xaf\xc4\xab\xf0\x10\x5e\x8d\xd7\xe0\xb5\xe8\x65\xbc\x0e\xaf\xc7\x1b\xf0\xe9\x78\x23\x3e\x03\x6f\xc2\x67\xe2\xb3\xf0\x66\xbc\x05\x0f\xe3\xad\x38\x82\x47\x70\x14\xc7\xb0\x80\xe3\x78\x14\x8f\xe1\x04\xde\x86\xc7\x71\x12\x4f\xe0\x14\x4e\xe3\x0c\xde\x8e\xb3\x38\x87\xf3\xb8\x80\x77\xe0\x49\xbc\x13\x4f\xe1\x5d\xf8\x2b\xf8\x6c\x7c\x0e\x3e\x17\x9f\x87\xa7\xf1\xf9\xf8\x02\xbc\x1b\x7f\x15\xef\xc1\x17\xe2\xbd\xf8\x22\x7c\x31\xbe\x04\x5f\x8a\xbf\x86\x2f\xc3\xfb\xf0\xe5\xf8\x0a\x7c\x25\xbe\x0a\x5f\x8d\xaf\xc1\xd7\xe2\xeb\xf0\xd7\xf1\xf5\xf8\x06\x7c\x23\xbe\x09\xdf\x8c\x6f\xc1\xb7\xe2\xdb\xf0\x7e\x7c\x3b\xfe\x06\xbe\x03\xdf\x89\xef\xc2\x77\xe3\x7b\xf0\xbd\xf8\x00\xfe\x26\xbe\x0f\x7f\x0b\xdf\x8f\xff\x0d\x7f\x1b\xff\x3b\x7e\x00\x7f\x07\x3f\x88\x1f\xc2\xdf\xc5\x0f\xe3\x47\xf0\xf7\xf0\xa3\xf8\x31\xfc\x38\x7e\x02\x3f\x89\x9f\xc2\x4f\xe3\x83\xf8\x19\xfc\x2c\xfe\x3e\xfe\x01\xfe\x21\x7e\x0e\x3f\x8f\x5f\xc0\x3f\xc2\x2f\xe2\x1f\xe3\x9f\xe0\x97\xf0\x4f\xf1\xcf\xf0\x21\xfc\x73\xfc\x32\x7e\x05\xbf\x8a\x5f\xc3\xaf\xe3\x37\xf0\x9b\xf8\x3f\xf0\x5b\xf8\x6d\xfc\x0b\xfc\x4b\xfc\x0e\xfe\x4f\xfc\x2e\x7e\x0f\xbf\x8f\x7f\x85\x3f\xc0\xbf\xc6\xbf\xc1\xbf\xc5\xff\x85\x7f\x87\x7f\x8f\xff\x80\xff\x88\xff\x84\x3f\xc4\x1f\xe1\xc3\xf8\xcf\xf8\x2f\xf8\x63\xfc\x09\xfe\x2b\xfe\x1b\xfe\x6f\xfc\x77\xfc\x29\xfe\x0c\x7f\x8e\x8f\xe0\x19\x2c\xe2\x2f\x08\x22\x40\x30\x21\x84\x21\x2c\xe1\x08\x4f\x54\x44\x4d\x34\x44\x4b\x74\x44\x4f\x0c\xc4\x48\x4c\xc4\x4c\x2c\xc4\x4a\x6c\xc4\x4e\x1c\xc4\x49\x8a\x48\x31\x29\x21\xa5\xa4\x8c\x94\x13\x17\xa9\x20\x95\xa4\x8a\x54\x93\x1a\x52\x4b\xea\x88\x9b\x78\xc8\x02\x52\x4f\x1a\xc8\x42\xd2\x48\x9a\x88\x97\x34\x93\x16\xd2\x4a\x7c\xc4\x4f\x02\x24\x48\x42\x24\x4c\xda\x48\x3b\x59\x44\x4e\x21\x8b\x49\x07\xe9\x24\x5d\xa4\x9b\xf4\x90\x5e\xd2\x47\xfa\xc9\x00\x19\x24\x4b\xc8\xa9\xe4\x34\xb2\x94\x2c\x23\xcb\xc9\x0a\xb2\x92\xac\x22\x43\x64\x35\x59\x43\xd6\x92\x75\x64\x3d\xd9\x40\x4e\x27\x1b\xc9\x19\x64\x13\x39\x93\x9c\x45\x36\x93\x2d\x64\x98\x6c\x25\x11\x32\x42\xa2\x24\x46\x04\x12\x27\xa3\x64\x8c\x24\xc8\x36\x32\x4e\x92\x64\x82\xa4\x48\x9a\x64\xc8\x76\x92\x25\x39\x92\x27\x05\xb2\x83\x4c\x92\x9d\x64\x8a\xec\x22\x5f\x21\x67\x93\x73\xc8\xb9\xe4\x3c\x32\x4d\xce\x27\x17\x90\xdd\xe4\xab\x64\x0f\xb9\x90\xec\x25\x17\x91\x8b\xc9\x25\xe4\x52\xf2\x35\x72\x19\xd9\x47\x2e\x27\x57\x90\x2b\xc9\x55\xe4\x6a\x72\x0d\xb9\x96\x5c\x47\xbe\x4e\xae\x27\x37\x90\x1b\xc9\x4d\xe4\x66\x72\x0b\xb9\x95\xdc\x46\xf6\x93\xdb\xc9\x37\xc8\x1d\xe4\x4e\x72\x17\xb9\x9b\xdc\x43\xee\x25\x07\xc8\x37\xc9\x7d\xe4\x5b\xe4\x7e\xf2\x6f\xe4\xdb\xe4\xdf\xc9\x03\xe8\x1a\x76\x34\x19\xc9\xe5\xd8\x89\x42\x2e\x11\xe5\x72\x42\x24\x1b\x1d\x53\x09\xa9\x1d\x42\x32\x9d\x11\xd8\x31\x21\x92\xcd\x33\xb9\x7c\x24\xab\xa1\xc1\xb0\x30\x91\xc9\x4f\x31\x85\x9c\x90\x65\xe2\x89\xe4\x84\x2a\x3f\x36\x9c\x8c\x64\x47\x05\x9c\x1f\xe3\x29\x9c\xc8\xe5\x71\x7a\x9c\xcb\x0a\x13\xe9\x1d\x02\xbf\x2b\x9d\x9e\x18\x4e\xa4\x54\x52\x9c\x2e\xe4\x49\x3a\x1e\xe7\x72\x89\xd1\x54\x24\x49\xa2\xe9\x51\x36\x9f\x8d\xe4\xc6\x98\xb1\xf4\x84\xa0\x8a\x27\x92\xc2\x70\x24\x99\x67\xf2\x89\x09\x81\xc9\xa6\x23\x31\x5d\x2c\x3d\x99\x4a\xa6\x23\x31\x9a\xad\x9a\x4d\x70\x85\x0c\x8d\xd8\x44\x6a\x24\xbd\x53\x9b\x49\x46\xa6\x86\xa3\x89\x6c\x34\x29\x70\x59\x21\x23\x44\xf2\x7c\x56\x88\x67\x85\xdc\x98\x8a\x36\x45\xaa\x30\x99\x8e\x8e\x33\xf1\x64\x64\x54\x33\x26\x44\x62\x99\xb1\x74\x4a\xc8\x69\x76\xa4\x93\x85\x09\x61\x38\x1d\x8f\x6b\x15\x90\x12\x50\x2b\x70\x21\xc3\x6d\xcf\x46\xd3\x31\x81\x1f\x89\x48\x31\xc9\x47\x46\x99\x7c\x64\x34\xc7\x8c\xa4\xd3\xe3\x2a\x1a\xd0\x19\x9e\xcd\x64\x13\xa9\x3c\x17\x8d\x4c\x08\xd9\x08\x43\xa7\x42\x66\x24\x9d\x8c\x71\x89\x7c\x24\x99\x88\x6a\xf3\xc2\xce\xfc\xf0\x98\x40\x97\x0a\x1a\x09\x9e\x4c\xc4\xf2\x63\x9a\x48\x32\x31\x9a\x1a\x4e\x0a\xf1\xbc\x4e\x06\xa3\x42\x2a\x2f\x64\xb5\x72\x42\x5a\x59\xe8\x65\x78\x5b\x21\x97\x4f\xc4\xa7\x18\xda\x17\x6d\x22\x15\x13\x52\x79\x19\x4f\x81\xa5\xb2\x86\x78\x24\x2a\xd0\x51\x1b\xde\x91\x88\x09\x69\x3e\x93\x88\xe6\x0b\x59\x81\xcb\x08\xa9\x68\x22\xa9\x99\x88\x64\x86\x69\x5b\x85\x2c\x17\x89\xd1\x0a\x99\x7c\x22\x95\x67\x84\x58\x22\xcf\xe6\xc6\x22\x59\x81\x8d\x8e\x09\xd1\x71\x86\x32\x4c\x9f\xcb\x0b\x99\xe1\x91\x48\x74\x7c\x32\x92\x8d\xe9\xe3\x91\x5c\x7e\x2e\xa5\x9a\x05\x18\x3a\xe8\x6c\x26\x52\xc8\x09\x4c\x2e\x9f\xce\xf0\xf1\x74\x96\xe6\xeb\xa4\xe2\xb3\x09\xa9\x26\x25\xc1\x0a\xdb\x84\x68\x5e\x17\x1d\x13\x76\x64\xd3\x72\xcf\xf5\xb3\x09\xa9\x0b\xea\x4c\xb2\x90\x1b\xa6\x82\xa1\x99\x48\xa4\x14\x50\x2b\x0b\x91\x04\xf3\xe9\x71\x29\xd6\x6f\x2f\x08\x39\xba\x9e\x92\x52\xea\x44\x2a\x9e\x96\xd1\x72\xd1\xac\x20\xa4\x72\x63\xe9\xbc\x5e\x41\x93\xa5\x42\x9d\x1e\x57\x20\xcd\x48\x24\x35\x0b\x46\xb2\xd9\xf4\xa4\xd4\x0e\xad\x0c\x4a\xad\x50\xc9\x70\x21\xa3\x5c\x97\x24\x42\x1a\x22\x2a\x47\xda\xac\x90\x4b\xec\x12\x86\xe3\x85\x64\x52\xa7\xc0\xb9\x89\x48\x32\x69\x12\x76\x46\x93\x91\x89\xc8\x5c\xb3\x98\xd1\x44\x3c\xcf\x24\x85\x48\x9c\x89\x27\xb2\x82\x4a\x98\x12\x86\xd3\x19\x21\xa5\xa6\x40\x34\x99\xce\x09\xba\xc9\x48\x36\x95\x48\x8d\x4a\xc5\xd9\x4c\x32\x92\x12\x54\xd1\x48\x52\x48\xc5\x22\x59\x2e\x1b\x49\xc5\xd2\x13\x7c\x34\x3d\x31\x21\xa4\xf2\xdc\x44\x64\x34\x25\xe4\x35\xb3\xe3\x55\xc8\xcc\x8d\x23\x6d\x1f\x9f\x15\xf2\x93\x82\x90\xd7\xe7\xc6\xd2\x99\x0c\xad\x32\x1a\xc9\xe6\x75\xf1\x74\x32\x26\x64\x65\x62\x5a\x25\x41\x9b\x60\x54\x1a\xbe\x43\xc8\xe6\x13\xd1\x48\xd2\xac\xa4\xc7\xd2\xd9\xc4\x2e\xba\x92\x4b\xaa\x47\x22\xd9\xe1\xe8\x18\xad\x24\x3f\x99\xc8\xe7\x85\xac\x3c\xf0\x54\xc8\xa8\xd8\x4b\x29\x9d\x2c\xf1\xc3\x59\x21\x9f\x4d\x93\x71\x61\x8a\x89\xa6\x47\x73\x2a\xa5\xc9\x39\x7d\x7e\xac\x30\x31\x92\x1b\x2e\x64\xe8\xc0\x19\x95\x14\x6d\x2e\x4d\xab\x25\x45\x32\x16\x49\xc6\xb5\x92\x76\x91\x75\x0a\x4f\xeb\x4d\x17\xf2\xfa\x64\x22\x35\x2e\xc4\x12\xf2\x50\xf2\x99\x42\x6e\x2c\x93\x48\xe9\x85\x9d\x79\x21\x9b\x8a\x24\x87\xe9\x65\x49\x85\x24\x52\x5c\x3e\x9b\xce\x8c\x4d\x69\x47\x13\xf9\xb1\xc2\x88\x2c\x07\xb2\x76\xa0\x64\xd8\xa4\x30\x91\x4e\xb1\xd2\xfd\xae\x95\x44\x5c\x26\x64\x98\xbd\x79\xe5\xa4\x46\x2a\x20\x13\x53\x3a\xac\x9a\xed\x2b\x27\xd7\xcc\x15\x52\x54\x87\x68\xa3\x59\x7a\xd3\xd0\x01\x8e\x91\x6c\x2e\x47\xc6\x62\x31\xd5\x48\x21\x99\x1c\x4b\x67\x53\xcc\x88\x90\x4c\x6a\xa3\x74\x58\xe3\x89\x68\x24\x2f\x68\xc6\x22\xa9\x98\x22\xdd\x12\x48\xa5\x8d\x97\xa0\x42\x46\xce\xa1\x03\x62\x96\x25\x72\xf8\xa8\x44\x5a\x8e\xc9\x91\x2a\x30\x1e\x93\x55\xc8\x1c\x8b\x44\xab\x61\x47\x93\xe9\x11\x81\x9b\xcc\x0a\xa9\xe8\x18\x9b\x8f\xe4\xc6\x73\x5c\x3c\x91\xcc\x0b\x59\xf5\x48\x36\x21\xc4\xa3\x91\x9c\xa0\xa1\x92\x2b\xdf\x27\xec\x68\x36\x5d\xc8\x30\x74\x2c\xd9\x68\x32\x5d\x88\x71\x23\x42\x64\x5c\xc8\x92\x68\x21\xcf\x44\xd3\x99\x29\x4d\x26\x92\x91\xe4\x27\x91\x61\x72\x91\x1d\x82\x86\x8e\xcf\xf0\x48\x32\x92\x1a\xe7\xb3\x42\x3a\x1b\x13\xb2\xb8\x90\xc4\xe9\xa4\x3e\x97\xcf\x26\xc6\x85\xfc\x58\x36\x5d\x18\x1d\x53\x17\x52\x31\x21\x9b\x4c\xa4\x04\x36\x1f\x19\x49\x0a\xec\x44\x64\x34\x11\x65\xf3\xd9\x42\x74\x5c\x9d\x49\x50\x2d\x27\xe4\xf2\x86\x39\x48\x1a\x76\xd3\x68\x3a\x3d\x9a\x14\x86\xe7\x74\x80\x76\x5e\x06\x3b\x91\x4e\x09\x53\x9a\x68\x24\x2b\xe4\xa5\x9e\xaa\x64\xb0\x90\x51\xf2\xa4\x9b\x58\x06\xa5\xb1\xe2\xa3\x54\x85\xa7\x72\x4c\x2e\x9d\xcd\xab\x69\x20\xdf\x27\x12\x54\xc8\xe8\x66\x67\x36\x69\x52\x99\x95\x35\xa6\x90\x8a\xa5\xd9\xa4\x30\x1a\x49\xaa\x63\x91\xdc\xd8\x48\x3a\x92\x8d\x69\x15\x71\xa6\x25\x75\xb3\xa2\x2d\xcd\x28\x23\xe9\x64\x9e\xcf\x25\xf2\xc2\x44\x24\xa3\x2a\x4c\x8c\x64\x85\x64\x32\xc2\x66\x22\xb9\xbc\xa0\x49\xd2\x46\x0c\x8f\x14\x92\x23\x2a\x61\x67\x74\x2c\x92\x1a\x15\x0c\xd2\x10\x0f\xcf\xce\x60\x3a\x39\x29\x4b\x2a\x4f\xa7\xd2\xe1\x89\x98\x36\x97\x17\xf2\x63\xe9\x5c\x34\x9d\x11\x54\xb9\x42\x22\x4f\x39\xa6\xa2\x42\x45\x29\x72\xd1\x74\x3c\x2e\x08\x4c\x3c\x9d\x8e\xe9\xa5\x99\x52\x9a\x4e\x68\x17\x46\x0a\x89\x64\x2c\x91\x1a\x55\x8d\xa5\x73\x19\x3a\xef\xa8\x23\x13\x23\x85\x64\x24\x15\x15\xb8\x09\x21\x36\x9e\xc8\x6b\xe3\xb4\x49\x42\x76\x78\x9b\x90\x67\x46\x04\x21\xcb\x8d\xc9\x6a\x2a\xde\x12\x17\xcc\xb1\x74\x61\x84\x8a\x52\x8a\x8e\xb8\x24\x7f\xc7\xe4\xc8\xf2\x77\x4c\x56\x21\x73\x2c\x12\xed\x97\xe6\x28\xbe\x76\x1e\xa2\x6a\x16\x43\x73\xb4\x28\x1f\x13\x72\xe3\xf9\x74\x86\x4b\x46\x32\x34\x92\x04\x25\xaf\x9b\x48\x8f\xd0\x7e\x49\x77\xa3\x4e\x91\x6f\x49\xde\x34\xdb\x0b\xe9\xbc\x52\xb5\x0c\xca\x7c\xce\x65\x12\xa9\x94\x90\xe5\xe4\xb2\x6c\x56\xc8\x24\xa7\x34\x8a\x2a\x88\x24\xf3\xa6\xf9\x2a\x50\x52\x43\xf3\xd4\x20\x4d\x6b\x84\x9d\x19\x7a\x17\xca\xdc\x4d\x26\x23\x19\xb9\x1c\x9b\x9b\x48\x24\x05\x36\x9e\x4d\x4f\xa6\xc8\x84\x30\xc6\x8f\x46\x26\x84\x4c\x24\xa6\x1a\x17\xa6\x24\xb9\x50\xd1\xb5\x04\x2d\x69\x90\x00\x49\xb5\x08\x59\x21\xa6\xca\x0b\xd9\x89\x44\x2a\x92\x64\xe8\x8a\x41\x2d\x35\x68\x38\x92\x4c\x1a\xe7\xf4\x9d\xa2\x80\x92\xe9\xa8\x3c\x59\x48\xf7\x2f\x13\xcd\xa6\x33\x6a\x8a\x42\xa7\xcb\x71\xaa\x6c\x12\xa9\x71\x66\xd8\x17\x6e\xd7\xce\x9b\x59\xb4\xb9\x42\x46\xc8\xe6\xa2\xd9\x44\x26\xaf\xce\x15\x46\x64\x88\x19\xf6\xb5\xf9\x75\x99\xc2\xae\x5d\x74\xec\x12\x42\x54\xd0\x4c\x24\x68\x85\x74\x18\x0d\x47\xc1\x61\x69\xe1\x35\x96\x10\x92\x31\xc3\xec\x44\x23\xb7\xc6\x4c\xa7\xa8\x61\x61\x67\x3e\x91\x1a\x2d\x24\x72\x63\x42\x96\xcb\xa6\xa3\xe3\x02\x9d\x78\x76\x46\x63\x29\xf3\xec\x6c\x93\x9b\x5d\xb4\x58\x8e\xc9\x51\x14\xd4\xfc\x2c\xaa\xa0\xe6\xa7\x25\x05\x35\x96\x9f\x48\x06\x99\x68\x2e\xe7\xe7\x22\xa9\xe8\x58\x3a\xab\x91\xb5\xaa\x22\xc4\xc9\x64\x4e\x98\x12\xac\x42\x32\x99\xc8\xe4\x12\xb9\x79\x13\x92\x79\x2e\x6f\x76\xd2\x62\x86\xfd\x2d\x7e\xb5\xb4\xf4\xa3\xf5\x73\xf9\x04\x6d\xaf\xe1\xe8\xca\x41\x9a\xae\x65\x95\x2f\x65\xaa\x92\xc2\x0e\x21\x49\xc5\x50\x06\x24\x89\x95\xaf\x4b\xcb\x08\x49\xad\x4b\xb7\xc4\xb0\xbf\xd5\xa7\x91\xa7\x7c\x69\x46\x88\xa6\x27\x32\x91\x1c\x9d\xd9\x64\x01\x39\x2a\x29\xf9\x74\x86\x96\x0e\x13\xa1\x90\x25\xa3\x23\x19\x52\xc8\xc5\x48\x22\x95\x25\xdb\x32\x53\x24\x5b\x18\x21\xe3\xd9\x49\x32\x92\x8f\xd2\x65\xb2\xa0\x9e\xbb\x67\x4d\x92\x1e\x1a\xa1\x82\x91\x19\x8b\x8c\x08\x79\x66\xd8\xef\x6b\xb7\xcc\xe5\x2a\x6f\x8c\x84\x9c\xe3\xc4\x2c\xda\x2d\xfd\x6c\xb6\xa4\x83\xcd\xc7\xa4\x24\xdd\x34\xec\xf7\x07\x68\x10\xd4\x4d\xa5\x0b\xf9\xc2\x88\xd2\x11\x25\xc1\xec\x4c\xa4\x46\xd5\x3b\x67\x97\x1e\x73\x65\xe8\x60\xf2\xb1\x6c\x3a\x33\x92\xde\xa9\xcf\xe5\x23\xd1\xf1\x59\xe5\xa5\x4e\xa4\x72\xf9\xc8\x68\x36\x32\xc1\xc5\x93\x89\xe8\x78\x96\x44\x62\x29\x26\xde\x1a\x6e\x35\x8c\x24\xf2\x23\x05\x3a\xf4\x0a\x1b\x0a\x13\x23\xc9\xac\x56\x8e\xa4\x2c\x63\x32\x9d\x1a\x9d\x37\x4b\xe9\xe7\xa5\x0b\x99\xf9\x57\xa9\x5c\x99\xe6\xa5\xe5\x5b\x7c\x32\x91\x8a\xa5\x27\x73\x7c\x24\x15\xcb\xa6\x13\x31\x36\x99\x48\x15\x76\xf2\xb1\x6c\x62\x84\xce\x2d\xb9\xf1\xa9\x8c\xa0\x89\xa7\x0b\xd9\xdc\xf6\x42\x24\x2b\x70\x79\xaa\x87\xd3\x5c\x5c\x98\x88\x24\x05\x86\x06\x74\x02\xcf\x27\x32\x24\x57\xa0\xac\x0d\x85\x78\xfa\x70\x93\xd8\x21\x90\x91\xc2\x28\xde\x31\xce\x4e\x0a\x89\x91\x34\x97\x15\x52\x59\x81\x16\x08\xfb\x0c\x52\xdf\x87\x67\x3b\x4f\xf3\x02\x76\xb9\x49\xb3\x73\x6e\x52\x9e\x73\xe8\xa5\x90\x21\x96\xce\xcf\xbb\x40\xf3\xda\x74\x3b\x12\x13\x42\x7a\x58\x6e\x13\x33\xec\x6f\x6b\xd1\xcb\x33\x9b\x94\x31\x9c\xa6\x59\x3e\x1a\xf8\x69\x40\x79\xd5\x16\xa4\x41\x88\x06\x61\x1a\xb4\xd1\xa0\x9d\x2f\xa4\x12\x83\xad\x3d\x2d\x4c\xbc\x35\xd2\xca\x0c\xfb\xdb\x29\x52\xbb\x9f\x26\x29\x52\x3b\x45\x6a\xa7\x48\xed\x14\xa9\x9d\x22\xb5\xb7\x33\xc3\x81\x16\x09\x63\x84\x42\x3e\x1a\xf8\x69\x10\x90\x6b\xeb\x6d\xa5\x89\x10\x0d\xc2\x34\x68\xa3\x01\x45\x6a\x6d\xa1\x01\xbd\xda\x4a\x91\x5a\x29\x52\x6b\x80\x06\x41\x1a\x50\x8c\x56\x8a\xd1\x4a\x31\x5a\x95\xb6\xf5\xb5\x28\x31\xc5\xf3\x51\x3c\x1f\xc5\xf3\x51\x3c\x1f\xc5\xf3\x51\x3c\x1f\xc5\xf3\x51\x3c\x1f\xa5\xe4\xa7\x94\xfc\x14\xc3\x4f\x31\xfc\x14\xc3\xaf\x34\xaf\x5f\xa9\xb0\xbf\x55\x89\xa5\x12\x14\xd5\xaf\x90\xec\x0f\x2a\x71\x48\x89\x69\xe5\x01\x5a\x47\x80\x52\x0d\x50\xaa\x01\x4a\x35\x20\x5d\xa0\xa8\x01\x05\x75\x80\x12\x0e\x52\xc2\x41\x5a\x6d\x90\x22\x05\x29\x52\x90\x22\x05\x29\x52\x90\x22\x05\x29\x52\x90\x36\x35\x44\x31\x42\x14\x23\x44\x31\x42\x14\x23\xa4\x34\x75\x50\xba\x46\x91\x42\x61\x26\xde\x1a\x97\xae\x51\xa4\x30\xbd\x10\xa6\x48\x61\x8a\x14\xa6\x17\xc2\x94\x4c\x98\x92\x09\x87\x68\xe1\x28\x85\x28\x99\x30\xc5\x68\xa3\x18\x6d\x14\x83\xca\x45\x80\xca\x45\x80\xca\x45\x80\xca\x45\x80\xca\x45\x80\xca\x45\x80\xca\x45\xa0\x8d\x62\xb4\x53\x8c\x76\x8a\x41\x85\x22\xd0\x4e\x31\xda\x03\x4c\xdc\x27\xb1\xb1\x3d\x44\x21\xe9\x02\xc5\xa0\x42\x11\x6c\x69\xa1\x41\x2b\x0d\x7c\x34\xf0\xd3\x20\x40\x83\x20\x0d\x42\x34\x08\xd3\xa0\x8d\x06\xed\xec\x0e\x21\x55\xc8\x31\xc3\x41\x2a\x12\x41\x5a\x57\x90\x8a\x44\x90\x8a\x44\x90\x8a\x44\x90\x8a\x44\x90\x8a\x44\x90\x8a\x44\xb0\x95\x12\xf1\x51\x22\x3e\x8a\x41\x85\x21\x48\x85\x21\x48\x85\x21\x48\x85\x21\x48\x85\x21\x48\x85\x21\x48\x85\x21\x48\x85\x21\x48\x85\x21\x48\x85\x21\x48\x85\x21\x48\x85\x21\x48\xd5\x57\xd0\x4f\x31\xfc\x14\xc3\x4f\x31\xa8\x0c\x04\xfd\x14\x23\x40\x31\x02\x14\x23\x40\x31\x28\xeb\x83\x94\xf5\x41\xca\xfa\x20\x65\x7d\x90\xb2\x3e\x48\x59\x1f\x0c\x50\x8c\x20\xc5\xa0\x7c\x0f\x52\xbe\x07\x29\xdf\x83\x94\xef\x41\xca\xf7\x20\xe5\x7b\x90\xf2\x3d\x48\xf9\x1e\xa4\x7c\x0f\x52\xbe\x07\x29\xdf\x83\x94\xef\x41\xca\xf7\x60\x88\x62\x84\x28\x06\x65\x7a\x30\x44\x31\x42\x14\x23\xd4\xce\xc4\x7d\xa1\x16\x1a\x50\x8c\xb0\x8f\x42\x14\x83\x32\x3d\x48\x99\x1e\x0c\x53\x8c\x30\xc5\xa0\x4c\x0f\x52\xa6\x07\x29\xd3\x83\x94\xe9\x41\xca\xf4\x20\x65\x7a\x90\x32\x3d\x48\x99\x1e\xa4\x4c\x0f\x52\xa6\x07\x29\xd3\x83\x94\xe9\x41\xca\xf4\x20\x65\x7a\x90\x32\x3d\x48\x99\x1e\x6c\xa7\x18\x54\x13\x04\xa9\x26\x08\x52\x4d\x10\x6c\x6f\x63\xe2\xbe\xb0\x20\x89\xa9\xaf\xad\x45\x89\x5b\x99\xe1\x10\x65\x7d\x88\xb2\x3e\xa4\xe8\x03\x5f\x5b\x50\x89\x43\x34\x33\x4c\x83\x36\x1a\xb4\x33\xc3\x21\x2a\x4b\x21\xca\xff\x10\xe5\x7f\x88\xf2\x3f\x44\xf9\x1f\xa2\xfc\x0f\x51\xfe\x87\x28\xff\x43\x94\xff\x21\xca\xff\x10\xe5\x7f\x88\xf2\x3f\x44\xf9\x1f\xa2\xfc\x0f\x51\xfe\x87\x28\xff\x43\x94\xff\x21\xca\xff\x10\xe5\x7f\xc8\x27\xdf\x96\xbe\x1e\xa5\x85\x3d\xad\x4a\xec\x53\x62\xbf\x12\x2b\x4d\xed\x51\x9a\xda\x13\x52\xe2\xb0\x12\xb7\x29\xf1\x6c\x7d\x3d\x4a\xdc\xab\xc4\x7d\x4a\xdc\xaf\xc4\x03\x72\xdc\xab\xd0\xed\x55\xe8\xf6\x2a\x74\x7b\x15\xba\xbd\x0a\xdd\x5e\x85\x6e\xaf\x42\xb7\x57\xa1\xdb\xab\xd0\xed\x55\xe8\xf6\x2a\x74\x7b\x15\xba\xbd\x0a\xdd\x5e\x85\x6e\xaf\x42\x57\x51\x9a\xbe\x3e\x85\x6e\x9f\x42\xb7\x4f\xa1\xdb\xa7\xd0\xed\x53\xe8\xf6\x29\x74\xfb\x14\xba\x7d\x0a\xdd\x3e\x85\x6e\x9f\x42\xb7\x4f\xa1\xdb\xa7\xd0\xed\x53\xe8\xf6\x29\x74\x15\xdd\xea\x53\x74\xab\xaf\x5f\xa1\xdb\xaf\xd0\xed\x57\xe8\x2a\x1a\xd6\xa7\x68\x58\x5f\xbf\x42\xb7\x5f\xa1\xdb\xaf\xd0\xed\x57\xe8\xf6\x2b\x74\xfb\x15\xba\xfd\x0a\xdd\x7e\x85\xee\x80\x42\x77\x40\xa1\x3b\xa0\xd0\x1d\x50\xe8\x0e\x28\x74\x07\x14\xba\x03\x0a\xdd\x01\x2a\x29\xed\x0a\xd1\x01\x85\xe8\x80\x42\x74\x40\x21\x3a\xa0\x10\x1d\x50\x88\x0e\x0c\xc8\x9f\x96\xe0\x8b\x2f\x10\x96\xbe\x3e\x1b\x10\x42\x45\xca\x17\x6f\x40\x80\x9f\x45\x80\x98\xb9\x6f\x53\xd2\xf7\xe9\x9f\x74\x7c\x43\x32\x7b\xfb\xf1\xaa\xc5\x2d\x34\x7e\xb5\x75\xec\xd1\xff\x2f\x00\x00\xff\xff\x4f\x70\x1d\xba\x6e\x87\x02\x00"), }, "/static/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.svg": &vfsgen۰CompressedFileInfo{ name: "fontawesome-webfont.svg", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 444379, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xec\xbd\x5b\x8f\x5c\x49\x92\x26\xf6\x1e\xbf\xc2\x44\x01\x7a\xd1\x3a\xcb\xcd\xfc\xbe\xd3\x3d\x8b\xdd\x99\xdd\x81\x00\x51\xbb\xc0\x5e\x04\x3d\x15\xb2\xc8\xa8\x8a\xdc\x3e\xcc\xe4\x49\x7a\x45\x75\xf3\xd7\x0b\xf6\x99\x9f\x13\x91\x19\x97\xcc\x64\xb1\xaa\xbb\xa5\x41\x77\x31\x22\xe3\xf8\xf1\xbb\x9b\xdb\xf5\xb3\x3f\xfc\xbb\x3f\x7f\x9c\x68\xbf\x7d\xf8\x7c\x7b\x7f\xf7\xc7\x37\xfc\xd6\xbf\xa1\xcf\xfd\xe6\xee\xc3\xcd\x74\x7f\xb7\xfd\xe3\x9b\xbb\xfb\x37\xff\xee\x1f\x37\x7f\xf8\x5f\xfe\xf9\x3f\xff\xd3\x7f\xfb\x7f\xfe\xcb\x7f\xa4\xcf\xfb\x9f\xe8\xbf\xfc\xf7\xff\xf0\x7f\xfe\x1f\xff\x44\x6f\xdc\x77\xdf\xfd\xdf\xe1\x9f\xbe\xfb\xee\x9f\xff\xdb\x3f\xd3\x7f\xfd\x1f\xff\x42\xfc\x96\xbf\xfb\xee\x3f\xfe\x5f\x6f\xe8\xcd\xae\xf7\x4f\xff\xf6\xbb\xef\x7e\xf9\xe5\x97\xb7\xbf\x84\xb7\xf7\x0f\x3f\x7d\xf7\x2f\x0f\x37\x9f\x76\xb7\xef\x3f\x7f\xf7\x5f\xff\xc7\xbf\x7c\xa7\x05\xff\xf9\xbf\xfd\xf3\x77\x9f\xf7\x3f\x31\xbf\xfd\xd0\x3f\xbc\xa1\x7f\xdc\xfc\xe1\xf3\xfe\xa7\x7f\xdc\xfc\xe1\xe3\xb6\xdf\x7c\xb8\xe9\x37\xff\xb8\xf9\xa7\x87\xed\x4d\xdf\x7e\xa0\x1f\xfe\x42\xff\xe9\xfe\xae\xff\xa7\xfb\x87\x9f\xb6\x24\x9e\xc5\x97\xc0\x74\xd3\xe9\xdd\xfd\x1d\xfd\xe7\xf7\x9d\x24\x12\x97\x7f\x1b\xca\xbf\x8d\x5e\x9f\xe7\x0d\xfd\x87\xbf\xd0\xbf\xf9\x37\xff\x66\xf3\x4f\xf7\x9f\xfe\xf2\x70\xfb\xd3\xae\xd3\x3f\xdf\xec\xb7\xf4\x2f\x37\x77\x1f\xfe\x82\x12\x6f\xe9\xdf\x4f\x13\xe1\xd1\x67\x7a\xd8\x7e\xde\x3e\xec\xb7\x1f\xde\x6e\xfe\xf0\xdd\xa1\xf5\x3f\x7c\xd8\xfe\xf8\xf9\x1f\x37\x7f\xf8\xf1\xfe\xae\xd3\xed\x87\x3f\xbe\xd1\x3e\xfc\xfb\x5f\xb6\x9f\xef\x3f\x6e\xdf\xd0\xee\xfe\xe1\xf6\x8b\xbb\xf9\xb0\x77\x7f\xfe\xe3\x1b\x4e\x21\xeb\x08\x88\x50\xda\xfd\x78\xf3\x7e\x4b\x1b\x22\xa2\xf1\xe7\xc7\xdb\xe9\x2f\x8f\x2b\x38\x3c\xfd\x65\xab\xbd\xf8\xe3\x9b\xe8\xfd\xd1\xaf\x9f\xfb\xc3\xb6\xbf\xdf\xe9\xfc\x3f\x7c\xbc\x99\xec\xc9\xcf\x77\xb7\xfd\xb3\xfb\xb4\x7d\x70\xdb\x8f\x7f\x7c\xc3\xa5\x89\xfd\xfe\xe9\xe6\xee\xfe\xf3\xd6\xf1\x1f\xdf\x78\x3a\xf9\x9f\x15\xb9\xf9\xfc\x7e\x7b\xd7\x47\x57\xf1\xcb\x87\xed\xf8\xc9\x49\x1a\x3f\xfd\xf0\xc3\xfd\x9f\xff\xf8\xc6\xf1\x5b\x2f\xbe\x06\xd2\x07\x6f\x5b\x16\x92\xe0\xe3\xdb\x4c\x9c\x42\x79\xeb\x65\xe9\xcb\x87\xed\xc3\x74\x7b\xb7\x75\x7d\x77\xfb\xfe\x4f\x77\xdb\xcf\x9f\xff\xf8\xc6\x3f\x7d\xf6\xe9\xfe\xf3\x6d\xc7\xc6\x5a\x1f\xdd\xbe\xbf\xff\xb0\x75\x0f\x37\x77\x3f\x6d\xff\xf8\xe6\xbf\xff\xef\xde\x8b\x77\xff\x29\xd9\xe0\xbf\xd3\xf5\xbf\xfd\xfc\xf9\xf6\xee\x27\xf7\xd3\xf4\x97\x4f\xbb\xc7\xf3\x5c\x5b\x7e\x43\x9b\x0f\x7f\x7c\xf3\x4e\x74\xc9\x59\x76\x31\xd6\x3d\x07\x96\x9d\xd3\x6f\x4e\xbf\x7e\x79\xc7\x2c\xe4\xf7\x3a\xd2\x5d\x2e\xb2\x77\xf8\xe6\x72\x91\x2f\x6f\xb4\x05\xed\xc6\x1f\xac\x76\xfc\xeb\xee\x6e\x3e\x6e\xff\xf8\xe6\xed\xdd\x7d\xff\xb0\xfd\xf1\xcd\xef\xda\xe4\xcf\xd3\xf4\xa4\x41\xff\x86\x36\x57\x5e\xb9\xbb\xbf\xfb\x78\xf3\xf0\xa7\xdb\xbb\x9f\x1e\xb6\xfd\xe7\x87\xbb\x27\x6f\xa7\x56\xae\xbf\xff\xf9\xd3\xcd\xfb\xed\x9b\x65\x19\xfe\xf8\x86\x9e\x54\x10\x63\xbd\x5e\xc1\x87\xdb\xed\xc3\xf6\xf3\xed\xe7\xa3\x3a\xfe\xb7\xff\xf5\xcf\x37\xf5\x1f\x9e\x9e\x09\xdd\x9d\x57\x6b\x7a\xbf\x1c\xce\x27\x55\xb5\xd7\x57\xf5\xb0\xfd\xe9\xf6\x73\xdf\x3e\x6c\x3f\x3c\xa9\x6b\xfb\xfa\xba\x6e\xde\xff\xdc\xb7\x8f\xab\xf9\x21\xbe\xbe\x9a\x7f\xff\x1f\x1f\xd7\xf1\x3e\xbf\xbe\x8e\xff\xfc\x79\xba\xf9\xbc\x7b\x5c\xcf\x87\xaf\x98\xe9\xfe\x70\xf3\x61\xab\xdb\xe6\x71\x55\xc2\x22\xaf\xaf\xec\xf6\xee\xc7\xdb\xbb\xdb\xfe\x97\x27\x75\x09\x7f\xc5\x5c\xdf\xdd\xf7\xed\xfc\xf3\xcd\xf4\xb4\xae\xec\x5f\x5f\xd7\x4f\xd3\xcd\xe7\x27\xbb\xf2\x47\xef\x2f\x55\xa4\x27\x9a\x73\x6b\xc4\x21\xf9\xd9\x93\x0b\x89\x5c\x0c\xe4\x4a\x9d\x5c\x0e\x42\xfa\xcf\xde\x95\x5c\x77\x41\xfc\x2c\x99\x3c\xc5\x44\x8e\x5b\xe7\x46\x2e\xa6\xee\x96\x4f\xfb\x79\xe7\x6a\xcb\xb3\x43\x41\xfd\x89\x1b\x4a\xc4\xd4\xed\x5f\xfc\xa4\x75\xed\x4b\x1e\x4d\xe4\x20\xb3\xb6\xa9\xcd\xc6\x40\xa5\xce\x9e\x24\x10\x57\x0a\xf9\x6d\xea\xa1\x12\x97\xb7\xa9\x6b\x89\x1d\x47\x5f\x67\x09\xda\x0b\x2d\xad\x0f\x1d\x9e\x72\x25\xa7\xc5\xaf\x12\x9a\x8f\x3f\x7f\xbe\x7d\x7f\x32\x37\xfc\x0f\xcb\x44\xa4\x90\x49\x09\xd9\xde\x31\x0b\xa6\x23\xe9\x94\x44\x72\xb5\x75\x57\x33\xb9\xec\xdf\xea\x90\x7d\x78\x9b\xc8\x05\xe9\xae\x65\xfd\xc6\xf8\x19\xdf\xf9\xa8\x84\x16\xa8\x99\xec\xa5\x10\xa9\xb6\x6e\xff\x2e\x3f\xae\xc5\xd6\x57\x67\xf6\x89\x3c\x71\x13\x72\xa1\xed\x53\x28\x93\xce\x3e\x39\x09\x65\xef\x8a\x6f\xbf\x45\xaf\x36\xaf\xed\x56\xcb\x65\xf6\x14\x98\xb8\x51\xd2\x45\x8a\x8d\x42\x7a\x9b\xa6\x1a\x84\x24\xe5\x99\x85\x22\x49\xa5\x38\x47\xbd\x7d\x31\x80\xda\xa5\x92\xcb\xf5\xea\x12\x7d\xde\xde\x3c\xbc\xdf\x9d\xac\xd1\xe9\x01\xcd\x39\x2e\xcb\xc6\x49\xa8\xf8\x38\x7b\xe2\xaa\xc3\x0e\xac\xbd\xe7\x8c\xf1\x31\x86\xa0\x3f\x2d\x7f\xb8\xf1\x97\x95\xb3\x1f\xfb\xa3\x3f\x1e\x95\x3b\xae\xe1\xa8\xea\x2f\xef\xb4\x0b\xe4\x58\x2a\x96\x44\x27\xa6\x92\x6b\xbe\xbb\xa6\xcb\x53\x67\x97\xa2\x1e\x82\xe6\x29\xd4\xc9\x85\x18\x28\x44\x99\x1d\x97\xa6\x6f\x45\x9d\x48\xfb\x36\x3b\x8e\xba\xa5\x9d\x14\x9d\xf7\x94\xb4\x77\x22\x89\x38\xf9\xee\x38\x79\x12\x49\xdd\xe9\xef\x84\x22\x9b\x7e\xf8\xde\x97\xe7\xcb\x0b\x47\x95\xd8\x57\x67\xdf\x45\x47\x94\x3c\xca\x6b\xed\x56\x87\xb5\x39\xe3\x27\x7f\xe8\xd7\xa4\xdd\xd5\x3e\xcf\xa1\x90\x0b\x85\xf4\xa3\xf9\xab\x4b\xb7\xbd\xdb\x6f\xa7\xfb\x4f\xdb\x93\xc5\x0b\x57\x89\x4f\x8e\x14\x44\xa9\xc1\xec\x94\xde\x04\xdd\xcf\x8d\x5c\x06\x15\xd1\x7d\xe3\x33\xb9\x28\x99\x5c\xc0\xa4\xb2\x11\x28\x65\xcc\x72\xd1\x9d\xac\xa3\x88\xd5\xf6\xb7\x60\x48\xf1\x6d\xda\x39\xde\x39\x9e\x5d\xac\x3a\xb1\xf6\x40\x7f\x1f\x2f\x58\xf9\x1a\x28\x97\xd9\x71\xaa\xc4\xda\xb6\xb6\x82\x46\x74\xc0\x1e\xfd\xc8\x19\xd4\x4f\x27\x88\x03\x35\x54\x2f\x98\x4e\xfd\xda\xde\xa6\x1d\xc7\x22\x33\xeb\xfa\xe1\xb7\xf6\x36\x75\x2d\xa6\x7f\x8c\x3d\xc2\xbe\x86\x3d\xf3\x9e\x75\xb9\x9c\xc7\x6e\xda\x74\x17\x88\xb5\x26\xa7\xcb\xd0\xba\x6b\x54\x30\x86\x48\x82\xee\x6b\xb5\x8e\x6d\x5f\x2c\x8d\x75\xb7\xf6\x00\x3d\xca\x95\x38\x16\x3d\x5b\x71\xe6\x16\x74\x81\x85\xa2\x67\xdd\xc8\x65\xce\xe4\x12\x29\x41\x17\x7d\x35\xea\x0c\x82\x90\x46\xdb\xe9\x6f\x53\x4f\xde\xb6\x80\x91\x57\xd7\x76\xbc\xe3\x59\xbc\x91\xd7\x66\x8f\x65\x7d\x07\xaf\xc4\x4c\xa8\x25\x24\xd2\x6a\x67\xf1\x95\x38\x27\xb4\xaa\x8d\xa6\xa8\xef\xb2\xc7\x30\x39\xe1\x8d\xe5\xfc\x7c\xd9\xbc\xd3\xa5\x57\xfe\xd1\xef\x1d\xfb\x8a\x79\xcd\xba\xbe\x85\x1c\x73\xe8\xfa\x8f\xfe\xb5\x8c\x3f\xe3\x1e\xd1\x1f\x63\xe9\x5a\x8a\x39\xec\xc7\x8b\x39\x93\xfd\xd0\xed\xb9\xad\x04\xde\x18\xb5\xf4\x51\xed\xd5\x6d\xbb\xdb\xde\x3c\xf4\x93\x3d\x1b\xaf\xec\xd9\xda\xb2\x9d\xfb\xe5\x9a\x8b\xc4\x7a\x97\x49\xa4\xec\x75\xd1\x3c\x55\x9b\x55\x92\x3c\xce\x6d\xc6\xa1\xce\x95\x1a\x56\x39\xe9\xc1\x64\xe1\xee\x04\xdf\x02\x2e\x3d\xf1\xc4\x52\x28\xc4\xd8\x43\x62\x52\xd2\x90\x45\x87\x23\xd8\xe4\x02\x12\xa4\xc7\x34\xd5\xde\x70\x7a\xb3\xee\xe3\xa2\x47\xa6\xce\x21\x53\xc8\x54\x32\xe5\xf1\x14\x0f\xb5\x7c\xaa\xdd\xaa\xd0\x1a\x66\xe5\xe0\x3d\x69\x03\x7a\xdc\xbb\xb6\xe8\x42\x8c\x46\x03\x58\xff\xc1\x8d\xee\x75\x44\x7a\xc8\xbc\xdf\xcc\x4e\xef\x57\xfd\x2f\x2a\xc9\x7b\x86\x84\xf7\x9b\x87\x93\xf9\x4c\xd7\x08\xb8\x1e\x92\x5a\x9b\xf5\x80\x74\x56\x5d\x54\x92\x99\x95\x06\xa5\x38\xe9\x1d\x97\xbc\x9f\x99\x5c\x21\xed\x21\xee\x66\xed\x2b\x63\x03\x07\x4c\x6e\xc0\x77\x8e\x6f\xd3\xac\x2c\x87\x2e\x8c\x4e\xdd\xe4\x62\x6c\x24\x21\xdb\x17\x27\x41\x29\x8b\xe8\xe0\x51\xc2\xb1\xcc\x5a\x97\xb7\x33\x41\x1c\x8d\x94\xe8\x86\x4f\x38\x67\x99\x84\xc4\x6b\x2f\x92\xf7\xda\xad\x48\x21\xc5\xd9\x89\x1e\x0e\x15\x0f\x29\xea\xf2\x85\x42\x29\x53\xcc\x53\xf2\x42\x25\x4c\x4a\x71\x63\x4a\xb3\x32\x3e\x4c\x51\xff\xd5\x7b\xd2\x45\xc6\x23\x17\x53\xda\xa0\xac\x2b\x61\x4e\x99\x9c\xde\xa5\xe4\x62\x7e\x76\x76\xbf\xdf\x7e\xfc\xf4\x94\xf3\xfc\xd1\xfb\x7c\xf5\x92\xd4\xee\x05\x99\x82\xcf\x24\xad\x4c\x2e\x8a\x50\x96\xc9\x71\x6d\x14\xea\xf8\xe2\xf0\x4d\x1f\xb9\x6c\x65\x1d\x0a\x17\x3d\x4f\xc2\x53\x28\x95\x58\xaf\x87\xa2\x27\xab\xb5\x2f\x5f\xbb\x78\x7a\x09\x45\xd6\xcf\xdf\x72\xb1\x36\xdf\x74\xb5\x5e\xbf\x58\x3f\x7f\xde\x9e\x1e\x85\x72\xb2\x4c\x52\xfd\xb2\x4c\x52\x3d\x71\x28\xa0\xee\x5e\xaf\x41\x90\x7e\xae\x05\x8c\x80\x7e\x2f\x75\xe7\xaa\x0e\xa8\xda\xd5\x86\x5f\x4b\xed\x56\x94\xab\xbe\x5b\x13\x55\xfd\x03\xdc\x9c\x4d\x54\x92\x9e\xaa\x11\xe2\xde\xc0\xed\x71\x00\x51\xd7\xf3\xc2\x01\xc4\xa0\x52\x50\xc2\xc9\x52\xbb\x7e\x51\x12\x57\x40\x4e\x83\x5d\x19\x3a\xd9\xcd\xf8\x4e\xd4\xa5\x1c\x92\x55\xaf\x17\x4f\xb7\x9f\xb4\xcd\x2f\xef\xd8\x8b\x5e\x7c\x02\xb2\xc2\x49\x19\x1d\xb6\xcb\xb9\x80\xf9\xc2\xc7\xf8\x71\xb3\xfc\xc9\x76\x21\x5a\x49\x2b\x78\xfc\xfd\xb8\xd0\xf1\xfb\xfd\xb8\xea\xab\xeb\xf1\xe3\xed\xf4\xf1\x64\x3d\x4e\x25\xc9\x26\xcb\x7a\x84\x1a\xc9\xe5\xb8\x37\x2e\x4f\xf7\xb6\x89\x31\x26\xda\xec\x1e\xdd\x02\x26\x16\x0d\x79\x68\xbf\x30\x86\x92\x69\x48\x48\x43\x40\xd2\xdf\x17\x39\xca\xc4\xa8\x98\xbe\xa0\x21\x95\x8a\x7e\x97\x86\x8a\xbf\x3a\xa2\xcd\xb7\x69\x49\x65\x35\x4c\x5e\x62\x39\xdb\x14\x78\xbe\xf3\x2d\xd9\x2b\xa7\x2d\xe9\x2b\xe7\xc7\xa4\x4c\xc1\xb7\x98\xbd\xcd\x33\x83\x52\xfe\xe5\x77\xd9\x11\x98\x3e\x5d\xa9\xdf\x7c\xfa\x30\xa6\xb1\xf9\x36\xbf\xf1\xa0\xb4\xa9\x67\xb6\xdf\x37\x6c\xe9\x75\x9b\x62\xf3\xd5\x6d\x35\x70\x6e\xa6\x07\x35\x4e\xea\x02\x53\x9b\xbd\xbf\xc4\xd4\xda\x8b\xa7\x4c\xad\xbe\xf2\x6a\xa6\xb6\xef\xbe\x9f\x6e\x1e\x7e\x3a\x95\xc5\xda\x15\x1e\xa1\xe4\x4a\x89\x65\xef\x42\x8d\xe7\x65\xda\x1d\x76\x96\x3e\x58\x04\xdb\xae\x25\x9a\xdf\xdb\x2b\x49\x08\x7f\x76\x3c\xdb\x69\x61\x94\xb5\xb7\xbb\x55\xf6\x05\x0d\xe9\x4d\xf7\xdb\xb7\x04\xee\xe4\xfa\x98\x36\xdf\xb2\xa9\xdf\x65\x54\xd7\x17\xfe\x64\xc9\x6f\xae\x88\x32\x89\x85\xa4\xea\xbe\x6d\xa0\x18\xca\x62\x99\x96\x06\xc2\x8a\x93\xba\x73\x41\xfc\xec\xa0\xc6\xd1\x9f\xa4\x76\x2d\x91\xeb\xde\x5e\x89\x9e\xf0\x67\xc7\x33\x68\x09\xcf\xa8\x7c\xd0\x50\xf5\xfe\xb7\x6f\x08\xda\xa0\x17\x0c\x69\xf3\x6d\xc6\x34\xd4\x85\xbf\xc7\xa0\xbe\xe5\xf4\x6d\x2e\x37\xa5\x74\xf3\x77\xd9\x12\x18\xd4\xef\x34\x7f\x3a\xa8\x65\xfe\x36\xbf\x7d\x53\xbf\xcb\xa8\x9e\xa3\xff\xb7\x9f\x4f\xd5\x1a\x3f\xfc\xff\x8b\x16\xbc\x64\x2f\xb7\xfc\x1a\x5a\xd0\xf2\x5f\x9d\x16\x1c\xef\xe5\x2b\x83\x7a\x05\x2d\xb8\x34\xa8\x97\xed\xe5\xd7\xb4\x75\xa9\xa9\x6b\x7b\xf9\xfe\x4f\x27\xdb\xf8\xfd\x55\x8d\x72\x61\x6a\xc5\x3f\xee\xee\xe4\x8a\x44\xd2\x7f\x26\xc7\x41\x79\x41\x68\x16\xea\xf2\x1c\x9d\xb1\xfe\x5b\x01\x0e\x79\x72\x21\x0b\x85\x2c\x28\x38\xca\x66\xf4\x39\xd7\x69\x14\x9a\xed\x91\x8d\xdc\xea\x99\x44\x85\x64\x69\x69\xca\x29\x53\x4e\xe5\x5c\x99\xb5\x13\xa3\xde\x17\x4c\xc4\xc3\xf6\xe3\xfd\xfe\x94\xa5\xfb\x70\x32\x19\xd1\xd7\x55\x9f\xd0\x2a\x09\xc7\xa7\x93\xf1\xec\x14\xe8\x10\xa4\x45\xfb\xa2\xff\x3c\x37\x59\x67\xe7\xe8\x51\x2d\x4b\x25\xaf\x9f\xc8\xb8\x54\xf4\xf2\x89\xdc\xf4\x75\xac\x8f\x2a\x71\xa3\x96\x17\x4e\xf9\x97\xfb\xfb\x8f\xdf\xdf\xde\x9d\xcc\xf9\xf6\x9a\xaa\xcd\x4b\xa4\x12\xf2\xde\xe5\x38\xec\x06\x07\xb5\x7d\x3f\x28\xf3\x77\x4e\x24\xee\xf5\x9f\xeb\xa5\x72\x7c\x64\x07\x58\xcd\x00\xfa\xd7\x5e\x24\xa2\x9e\x2b\x45\xd0\x8b\x61\xbc\x38\xd8\x2e\xb4\x6a\x6d\xdf\x9a\x3f\xfb\x38\xc7\x23\xbb\x86\x5b\x0c\x1b\x68\x02\xdd\xd6\xf7\x37\x17\x8b\x7c\xf9\x1b\x31\xcc\x05\x33\x7b\x28\xe7\x8c\x69\x31\x8d\x71\x79\x9b\x7e\x95\x81\x6e\x73\xdd\x42\xf7\x37\x69\xa0\xc3\x66\xbe\xff\xf9\x84\x2b\x60\xff\x4d\x76\x73\x2a\xf9\xab\x76\xa1\xbe\xf7\x37\xb7\x89\x36\xbf\xcb\x2e\xfa\x1b\xdd\x44\x9b\xab\xd7\xf1\x8f\x3f\x9e\x6c\xa0\xc7\x2e\x14\x39\x7a\xd3\xfa\x66\x72\x99\x95\xe4\xd6\xee\x58\x67\x53\xa2\x0e\x19\xba\x94\x1c\xbb\x3e\xd0\x12\xf6\x05\x9f\x31\x11\x9e\x68\x69\x14\xce\x4c\xd2\x2a\x16\x5f\xb9\x1e\x28\xac\x43\x17\xb3\x66\x15\x3f\xeb\x74\x0b\xc1\xdc\x25\xa9\x57\x9b\x09\x3f\x9b\x35\x17\x16\x5f\x72\x0d\x46\x82\x88\x4d\x55\x61\x1e\xd2\x76\x8b\xae\x6e\x32\x2d\x72\xe5\x61\x92\x73\x62\xeb\xcd\x3e\x52\x34\x7b\x52\x83\x15\xcd\x37\x53\x6e\x63\x2d\x72\x30\xf7\x8a\xa6\x74\x00\x05\xf4\x76\xd5\x27\xf8\x6e\x5f\x51\x08\x65\xc6\xdb\xf6\x32\x6a\x45\x39\x1d\x94\x30\x59\xc3\xa2\x37\xaa\x75\x87\x2b\xcf\xda\x79\x8c\x41\x5f\xd4\x3e\x77\x0c\x45\x47\x32\x07\xa6\x18\xa8\x46\x4a\xbe\x37\xed\x72\x9a\x39\x66\xb3\x17\xc8\xb0\x14\x16\xdf\xab\x6d\xd1\x18\xbe\xc0\x60\xa9\x4c\x81\x9e\x61\x7f\x5e\x33\xd1\x1f\xab\x23\xac\xdc\x63\x75\x44\x7f\xb9\x16\xe2\xf3\xed\x4f\x77\x4f\xdd\x99\x7e\xf4\x2c\x57\xd8\x36\x49\x99\x5a\x5e\x19\x4d\x8e\xe4\x60\xff\xe9\x4e\x60\x99\xc6\x03\xfd\x59\x37\x71\x30\x83\xb9\x84\xc1\x64\x72\x24\xfd\xab\xeb\x83\x9d\xfe\x84\x72\x78\xb1\xa3\x96\x2f\xef\xb2\x32\xa2\x7a\xdf\x06\x33\x40\xbd\xb4\x01\x2b\xfe\x82\x06\x40\x28\x63\xf5\x7b\x10\xc2\x97\xb7\xb0\xd9\x5b\xf9\x97\x34\x11\x7d\xa5\x9a\xe3\x1e\x3c\xf7\x2b\x06\x61\xc5\x5f\xd2\x82\x71\xfc\x45\x17\x22\x96\xd7\xad\x84\x95\x7f\xbe\x91\x37\x57\x9d\x21\x7f\x3a\xd9\x35\xe1\x1f\x8e\xaf\x22\xdb\x99\xec\x33\xb9\x82\xb3\xd2\xf5\xf8\x52\x49\xf6\xe9\xf4\x4b\x19\x67\x7a\xf9\x5c\x1e\x8c\x82\xf6\xde\x17\x23\x56\x25\x36\x65\x66\x6c\xa8\x42\xae\x8e\xa1\xe2\xaa\x9b\x1c\xee\x1c\xa9\x30\x52\x2a\xa5\x77\xa1\x91\x6b\x3c\x07\xd0\x19\x62\x5f\xb4\x5c\x9d\xd9\x5e\xd7\x0f\x25\xe2\x18\xe9\xec\xc4\xc8\xaa\xc3\x0d\xe0\xf5\x90\xa9\x0c\xc2\xb3\x16\x35\xf5\x72\x53\x06\xba\x12\xfb\x3a\xc3\xb6\x8e\x89\x62\xe8\x25\x67\xc7\xc6\xd9\x2a\x05\xd5\x81\xe4\xd9\x15\x63\xc1\xf1\x5b\xdd\xa1\xdf\xcb\x4a\x28\x7d\x30\x2f\x18\x1e\x96\xfe\x49\xcb\x72\x8d\xb3\x8b\x8d\xb4\x2e\x3d\xc6\x65\x72\x1c\x61\x39\x2f\xf0\x54\x40\x57\x95\x48\xae\x15\x25\x62\xf4\x30\x13\xeb\xda\x73\x56\xd2\x55\xb5\x6d\x2d\x5e\x48\x02\x28\x17\x55\xfd\xc6\xda\x14\x25\xa6\xac\x57\x6b\x8a\x54\xbc\x12\x58\x29\x34\x2c\xbc\x4d\x47\x58\x03\x49\x01\x73\x20\xb0\xdb\x9b\x9d\x4f\x2b\x00\x0b\x2b\x87\x0a\x3b\x37\xe2\xb0\x99\xb8\x66\x92\xaa\x9b\x27\x66\x0a\x8d\x74\xcb\x45\x4f\xa9\xa0\xe7\x70\x98\xd0\xde\xeb\x8a\xb1\x27\xe3\x61\x3d\x76\xde\x2c\xf0\x83\x00\x25\x66\x5f\x60\xb2\x7c\x9b\xa8\x30\xec\x9c\x34\x2c\x01\x7e\x62\xf8\x0e\xfa\x32\xc7\xa8\xdb\xb3\x31\xe9\x32\x42\x14\x21\x69\xa4\xd3\x5d\x54\x44\xd0\x3f\xeb\x4e\x3b\x69\x3b\x19\x57\x0a\xee\x04\x5e\x9c\x32\x26\x81\x77\x44\x9c\xa3\xae\x53\x36\x75\x6d\x99\x38\xea\x86\x28\x73\xd3\x7e\x45\x6a\xa3\x79\x5c\x1d\x33\x63\x4d\x75\xb4\x59\x7f\x28\x7e\x2e\xba\xf9\x74\x81\x4d\x43\xb5\x6e\xc6\xd9\x71\x32\x6f\x87\xc4\xe4\x30\xcf\xd8\x89\x98\x69\x81\x75\x9d\x74\x45\x5b\x9d\x18\xee\xea\x55\x1b\x72\x42\x70\x90\xd0\x99\x46\x35\xcf\x98\x46\xfb\xc3\x89\x8f\xed\x8f\x9e\xe3\x15\xd9\x72\x55\xe3\x5c\xa4\x77\x90\x5c\x9e\xd2\x89\x33\xd4\x4e\x05\x8d\x13\x52\x54\x72\xfd\x2d\xab\x07\x31\xf9\xba\xfa\x37\x2f\x6b\x00\x8c\x6b\xde\xb7\x58\xe1\x14\xbb\x77\x2d\xd6\xe1\x25\x51\x16\x7e\x21\xda\x6d\xdd\xcd\x8f\xa5\xbe\x4d\xbb\x1a\x64\xd6\x6d\x82\x5f\xea\x52\x46\x4a\x2f\xe0\x2b\xbe\xbc\x8b\xd5\x93\xd6\xbd\x8b\xb1\x4e\x2e\x56\x62\x2e\x7a\x38\x75\x3b\x15\x62\xde\xc1\xf7\x0b\x47\x5b\xf0\x93\x63\x1e\x57\x87\xf9\x5d\x0d\x3e\xfe\x64\xb8\x47\x5d\xac\x61\x58\xaf\x62\x30\x8a\x12\xcc\xc9\x74\xe7\x6a\x90\xcd\xb1\x05\x2b\x81\xe4\xc4\x42\x1c\xf9\x6d\xda\xb7\x24\x5a\xd1\x99\x79\x33\xfe\xff\x78\xd6\x82\x6f\x53\xf1\xc4\xb9\x28\x15\x09\x85\x52\xa4\x1c\x7a\x69\x24\xf9\xa0\xfd\x52\x36\x5a\xb2\x52\x16\x97\x83\x96\x77\x9c\x8b\xbe\xfb\xba\x8b\x65\x87\x70\x95\x27\xbb\xfb\xaa\x53\x92\x4e\x58\x8a\x71\xef\x62\xf5\xc3\x16\x78\xe2\xeb\x1c\x6a\xdc\x87\xaa\x12\x78\xca\x30\xfb\xe0\xa7\x73\xee\xcf\x7b\xab\x85\x09\x2c\x6c\xc7\xbf\x53\x2a\x89\x62\x89\xf8\x74\xb1\xc4\x59\x99\x65\xd2\x43\xae\x42\x6c\x60\xca\x7a\x05\x65\x51\x66\x75\x56\x62\xd0\x86\xd7\x93\x2e\xf2\x2a\x6b\x31\x95\xc9\xe5\x26\x94\xca\xf8\xe2\x52\x29\xf3\x4a\x40\x94\x54\x1c\xd3\x5e\x46\x95\x56\xe3\x42\xd1\x41\xce\x70\x69\x6c\xa6\xc2\x8d\x52\x6b\xca\x43\x0b\xfc\xc9\x24\xc3\xc5\x4c\xf2\x24\xb8\xa2\x7c\xdc\x73\x4b\x2f\xb9\xeb\xf7\x2e\xfa\x3a\x09\xe3\xfa\x12\x5c\x92\xba\x0b\x87\x2b\x1b\x6e\xb3\xf0\xbc\xcb\xc6\xf6\xfb\x9b\xe9\x54\x68\xcd\x2b\x5b\x10\xb3\x56\x9a\x56\x0d\x50\x54\xee\x3e\x77\xbd\xc2\xa1\xfb\xe5\x74\x51\x77\x09\xab\xeb\x59\xe5\x65\xf6\xfe\x54\x7b\x59\x5b\xb6\x5d\x59\xe1\x98\x8a\x69\x89\x75\xf1\x76\x89\x4a\x4d\x42\xc9\xbb\x00\x49\xd8\xeb\x35\xa2\xa7\x3d\xf2\xe4\x02\x07\x0a\x1c\xb0\x2a\xf0\x65\x62\x12\x59\x7c\x24\x58\xea\x5e\xab\xd8\xb9\xc8\xf9\x6c\x77\x22\x67\x18\xfc\x47\x48\x0d\x4b\x7d\x46\x4a\xeb\xb7\x67\xf6\x7b\xf9\x87\x23\x0f\xc6\xd6\x64\xef\xa2\x9d\xf7\x53\x62\x00\x55\xf5\x0b\x0e\xb1\xb2\xd4\x21\xc9\xcb\x28\x62\x60\x59\xf8\x37\xac\x91\x72\x05\x41\x0f\x48\x55\x89\xa8\xab\x94\x4a\xfa\x83\x7e\xba\xe5\x89\xc3\x23\xfd\x45\x0b\x2f\x9f\xeb\x93\xa5\xec\x78\x77\xa9\xcb\xea\xfe\xb2\x0a\xa4\xb8\x52\xc5\x83\x0f\x53\x99\xb7\x9a\xf4\x5d\x4c\xd3\x50\xa0\xab\xc0\x8f\x28\xb0\x7c\xc7\x57\x2b\x34\xca\xe8\xdb\xf6\xf2\xe1\xdb\x71\x81\xc3\x7b\x47\xb5\x3d\x6a\xe6\xd0\xfe\x75\x65\xef\xfd\xcd\x87\x93\x05\xbc\xe6\xaa\xc4\xcc\x4c\x29\xfa\x7d\x9c\xf4\xcc\xdb\x02\x12\xfc\xb9\x98\x86\xb2\x06\xea\x97\x9d\xb1\x92\x83\x7a\x84\xe1\x58\x8c\x53\x29\x60\x1a\x95\xcb\xd5\x8b\x42\xaf\x3f\xf0\x21\xb6\xd9\x95\xf2\xd4\x9d\xc4\x38\x83\x7b\x15\xa6\xda\x2b\x89\xff\xf2\x8e\x6b\xf1\x54\x94\x2d\x34\x47\x41\xe5\xcd\xc3\xce\x15\xbf\x2a\x10\xa1\x0c\xaa\x34\x1a\xf0\x88\x11\xb8\xd4\x3b\x39\x72\x7c\x3e\xd3\x3b\xb0\xa8\x79\x63\x7d\x0b\xe8\x9b\xa9\x93\x86\x1a\x4a\x5b\xd5\x2e\x78\x74\x04\xbd\x4a\x91\xc0\xcd\xe6\x29\xea\x15\xe9\x63\x9c\x75\x97\x10\xdc\xbd\x11\x60\x12\x77\x21\xb4\x2b\xad\x32\x08\xbe\x58\xa3\x91\x4c\x48\x40\x93\x3b\xce\xf9\x30\x4a\x1d\x63\x40\xf1\x51\xfa\xdc\x08\xb5\x29\x38\x59\x83\x03\x8d\xdd\x7c\xdb\xd1\x37\x87\xce\xe9\x0f\x59\x8c\x51\xe5\xeb\x1e\x86\x1f\xee\x7f\xb9\x9b\xee\x6f\x3e\x9c\x25\x91\xd7\x9c\x3d\xcc\xd3\xb0\x9d\x73\x2d\xea\x4f\x5c\x6f\xfa\x23\x1f\x98\xfe\xd8\xf5\x05\x31\x33\xbf\xbe\x9a\x9c\x23\x45\xce\xab\x78\x7e\x96\x58\xc3\x25\xfc\x0c\x75\xb4\x77\x9e\xd0\xea\x98\xd3\xc4\x01\x8a\xbe\xbc\x99\x53\x25\x97\x8c\xb9\x77\x29\x77\xfd\x4c\x79\x31\x3d\xec\x62\x8e\xe7\x0d\x60\x41\x45\x8f\x9a\x66\x5d\x9a\x68\x6b\xef\x8a\x9f\x94\x6e\x12\x88\xa7\x39\x46\xb7\x83\xb7\x12\x86\x65\x05\xf0\x3c\x30\xae\x01\x56\xc9\x48\xab\x09\x7a\xb9\x52\x68\x3b\x65\x19\x8c\xfc\x9a\x97\xd1\x1a\x1c\xa5\x67\xe3\x34\xd0\x0a\xb4\x1a\xcf\xa2\x9e\xbe\xd4\x54\x14\x7d\xd1\xd6\x38\xd9\x16\x37\xeb\xcd\xc9\xe2\x29\xfb\xba\x88\x1b\xe0\x19\xa3\x5e\x56\x5a\x3b\xeb\x81\xe0\x71\x31\x28\x19\xc7\xfe\x9d\x74\x85\x06\x75\x49\x90\x2a\x0b\x85\x34\x2b\x21\xa0\xe0\x49\xbc\x32\x02\xe7\xae\x84\xf3\xfc\x41\x48\x72\x41\x15\x01\x27\x21\x48\xaf\x6c\x41\x1c\xdf\xec\x56\xd8\xf4\x4b\x57\xcf\x97\x47\x0a\xcc\xbf\xa7\xeb\xe2\xe7\x4f\x67\x97\xfa\x87\xc3\x52\x73\xa5\x9c\x3d\xd8\x48\xa5\xa1\x01\x03\x84\x32\x07\xab\xf0\x2a\x9d\x98\x72\xf9\x67\x1f\x99\x20\x0f\x89\x7c\xd2\x5d\xa4\x9b\x88\x19\xbb\x80\x5a\x47\xa5\x53\x40\xf3\xe2\x67\x10\xd5\xac\xc2\x50\x48\xbf\xc9\x7a\x6f\xfa\xb2\xce\xff\x9f\x5b\xef\xdb\xbb\x1f\xee\xff\x7c\xb2\xdc\xef\x8f\x54\x65\x81\x92\xb2\xa2\x8c\x8b\x56\xe7\x6b\xd1\x0f\xe9\x97\x82\xab\x94\x85\x62\x53\xc6\xd2\x57\xfb\xcb\x45\xc8\x6e\xe4\x46\x79\xb7\xbe\xe0\x8a\x5e\x5c\x9c\xa7\x66\x37\xa1\x0a\x68\x63\xf6\x52\xcc\x2a\x24\xc9\x25\x21\x09\x31\x9b\xe7\x45\x22\x7d\x47\x2f\xba\x44\x2c\x61\x92\x50\x29\x25\x88\x09\x92\x10\xfc\x49\x51\x7a\x82\x5b\x7b\x81\x60\x8c\x4a\x92\xb9\xc4\x97\x1e\x2c\xf4\x4b\xf0\xa2\x4b\x49\x36\xb3\x24\x98\x1c\xa0\x63\x79\x46\x22\xfc\x34\xdd\xfc\xe5\xfb\xf7\xb7\x0f\xef\xa7\x53\x46\xf9\xc3\xe1\xd8\xd4\x45\xe5\x08\x45\x5e\x50\xe1\x2a\x4d\x2e\x45\x63\x92\x4c\x37\xd3\xec\x41\x83\xc6\x0e\x9b\x9b\x2c\x9a\x8d\xed\x49\xca\x43\xa1\x1e\x0a\xe1\xcf\x39\x20\xbe\x15\x06\xa6\x69\xad\x4b\xeb\xe0\x4a\xd6\xc6\xbf\xb2\xcb\xaf\x63\x97\xb7\x9f\xb6\x37\xa7\x1c\xd0\xf6\x71\x6c\x2f\xbc\x33\x87\xcc\x73\x6e\xab\xe2\xc6\xc6\xfd\xea\x52\xa3\xa8\xcb\x8b\x1b\x9b\x23\xe5\x06\x8d\xa1\x29\x1e\xa3\x7e\x41\xd8\x54\x43\xb4\x06\xec\x45\x7e\x18\x8b\x86\x6e\xc7\x1d\x9b\x89\xba\x7b\x64\x41\x72\xc7\xb6\xa5\x17\xd9\x99\x8e\xcd\x4c\x33\x23\x62\x46\x24\x51\x92\xce\x45\xfb\x57\x66\xa8\x67\x25\x10\x8b\x12\x56\xd3\x33\xb6\xcd\x84\x7e\x6a\xaf\x9b\xca\xde\x36\xb1\xe8\x5e\x59\x23\x09\x2d\xd2\x04\x11\x90\x92\x4d\xc0\xc7\xfa\x4a\x21\x57\xac\x40\xc2\xbe\x7e\xce\x4c\xd7\xc7\xc7\xf2\xf3\x52\xce\xde\x9b\x39\x16\xed\x57\x8d\x07\x73\xa5\xc5\x22\x72\xca\x6f\x95\x59\xd3\xcb\xa3\xcd\xa2\xd7\x06\x15\xdd\xf5\x73\x30\xad\x96\x7e\xa4\xf6\xcc\x06\xf8\xf1\x61\x7b\xaa\xc1\x94\x23\xd3\x24\x33\x0d\x5d\x8e\xb6\x09\xad\x08\x86\x0b\xa6\x4f\xff\x89\xc1\x2c\x85\x45\x0f\x4b\xce\x18\xb9\x49\x12\x52\x05\xe6\x56\x1d\x3b\xec\x7a\xa9\x4c\xce\x54\xb8\xd2\xcc\x38\x70\xc2\x04\xae\x64\xee\x1c\x93\xa7\x3f\x5e\x8e\xa6\x9f\xdc\x58\xb6\x32\x17\xe8\x7c\x89\x33\x74\xf6\xd2\xb9\xea\xbe\x53\x91\x03\x1c\x53\xf2\x94\x53\xe7\x9a\x89\x0b\xae\x5a\x2e\x94\x02\x31\x97\x8d\xf2\x64\x01\x3c\x59\x30\x16\xeb\xb2\x8d\xfd\xe5\x87\xe3\x52\x60\xff\xd5\xc3\x11\x86\x61\x41\xf9\x76\xd8\x69\xb4\xf6\x32\xd8\x4b\x65\xad\x13\xa4\xa4\x62\xcc\x49\x18\xcc\x49\x50\x1e\xa3\x5d\x71\x29\x28\x73\x4e\xa4\x0b\x27\xc5\x93\xad\x1d\x94\xa3\xba\x72\x9b\xd9\x56\x4e\x6a\x5c\xf7\xda\xc9\x4e\xe3\x66\x6b\x42\x26\x8e\x1c\xd6\xe1\xea\x4e\x9b\x6e\x3f\xf7\x73\xe2\x96\x5c\x33\x6f\x22\xbe\x27\xc9\xf3\x5e\x14\xf9\xeb\x5c\x79\xae\xf8\xea\x58\x7c\x4c\x36\xf3\xef\xef\xde\xf8\x06\xad\xc3\x68\xf9\xd7\x18\x3a\xb6\xf6\x8b\x26\x1e\x6e\x8c\x5f\xd1\xbc\xbe\x77\x65\xf4\x76\xa3\xbe\x64\xf2\x7f\x93\x0e\x58\xfb\x2f\x9a\xfe\x6f\xd7\xfe\xe6\x51\x07\x10\x17\x91\xfd\x5e\x19\x38\x54\xb1\x56\xda\xd7\x86\x9e\x8f\x77\xdf\x3b\x7b\xff\xeb\xc2\xf0\x61\xd6\xb6\x00\x9d\xdf\x3c\xea\x7c\xf3\xa2\x08\x9d\xe9\xfe\xfd\x89\x5f\xab\x9c\x22\x25\x70\x5a\x29\x88\x78\x2a\x19\x41\x21\x8b\xd7\xc3\x4b\x8c\xe0\xf0\xa8\x18\xd6\x28\x60\x32\x0d\x73\xd7\x6b\x3c\x79\xed\x95\x13\xff\xe4\xa5\x1b\x35\x02\x3e\x21\x70\xee\x01\x06\x54\xc1\xa7\x72\x14\x1d\x5c\x45\x60\x73\xec\xd8\x05\x79\xad\xf3\xef\x8f\xd3\xcd\x89\x47\x80\x5c\x0b\xce\x0f\x08\xc5\xb2\x6b\xbe\x20\x54\x4f\xd7\xc2\xef\x1d\x4b\xce\xbf\x82\xfe\xe0\x75\xad\x2d\x20\xa8\x91\x98\xe1\x21\x13\x80\x86\x40\xf0\x0a\x83\x53\x18\xc0\x11\x0e\xee\x61\xfd\xe0\x35\xb6\x6e\x43\x06\xa6\x04\xd4\xa5\x26\xa8\xa0\x30\x44\xad\xd0\x16\x40\x86\xd9\x09\xe4\x63\x9d\xc8\x90\x61\x2b\xd6\xf6\x11\xfa\xcc\x62\x2e\x43\xca\x55\xc2\xe1\xa8\x6e\x74\x0f\x27\x7c\xed\x8e\x23\x62\x66\xf5\x38\x35\x31\x3d\xa8\x4e\x42\xcc\x60\x67\x21\xad\x04\x48\x2b\x67\x64\xb2\x12\x75\x49\xb1\x9a\x94\xd2\x2c\xac\xbc\x6f\x69\x14\xc3\x2c\x60\x12\x3c\x45\x18\xf0\xfd\xcc\x1e\xec\x9c\x07\x63\xd8\x61\xe4\xa9\x75\x0e\xa6\x0f\xab\xf8\x98\xe1\x1b\xc7\x0c\x28\x04\xee\xcc\x5e\x4f\x54\xad\xfa\x6f\x82\x5d\x93\xcf\x70\x41\xcf\xc1\x35\x7c\xf8\xb4\xbb\xbf\xdb\x9e\x80\x1c\xc9\xb3\x18\x03\xd9\x30\x8e\x38\x03\x33\x47\xf7\x65\x34\x85\x72\x6c\xc3\xd3\x23\x04\x0b\x37\xaf\x81\x86\x8f\x1f\x03\x84\xc8\x18\x07\xf3\xd5\xda\xbb\x20\xdf\xdc\x20\x8d\x4a\x0b\x23\xd8\xda\x0f\x44\x83\xa6\x8f\xd3\xdb\x34\x21\x5c\x4e\xf9\xe2\x96\xe0\x9a\xd0\xc2\x22\x13\x56\x65\x7e\xa0\x99\x83\x43\x9c\x6f\xdd\x05\xec\x83\xa2\x5b\xc2\xbe\xba\x52\x97\x02\x0e\x25\x60\xbc\x2a\x88\xd8\x6f\xd5\xb4\x93\x2d\x68\x23\x8e\x65\x0e\xca\x2a\x50\x0b\xf0\xa9\xeb\xda\x19\xed\xcb\x3e\xc8\x8b\x06\xf1\x3a\x5b\x7a\x90\x43\x14\xbb\x76\x2f\x85\xd5\xb7\x12\xd3\x6e\x8b\x12\x02\x16\x29\xb6\x59\x17\x0d\xc3\xce\x9e\x02\x9c\xda\x39\x31\xe5\x42\xd2\x18\x72\x90\x44\x84\x93\x0b\x18\x66\xad\x4c\xa9\x41\x66\x7c\xb8\xcc\x78\xb0\x08\x57\x30\x2c\x6b\xf9\x9e\x8b\xee\x60\xbe\xba\xed\xf6\xf7\xd3\xcf\x1f\xb7\xdf\x9f\x71\x7e\x94\x13\xd8\x85\x92\xeb\x51\x44\x25\x73\x8d\x87\x6b\xe7\x94\xb1\x5e\x55\xc6\x21\x04\x0a\x21\xec\x9c\x20\xe2\xe0\xf4\x6c\x5a\x8c\xe0\x53\x6d\x71\x96\x69\xbc\xf9\x95\xfc\xec\x18\xda\x87\xfb\x5f\x4e\xfc\xdc\xa5\x5c\xb9\x90\xfe\x66\x06\x37\x2e\x37\xd3\xd2\xc0\x24\x6b\x1a\xa2\xc8\x07\x34\x01\xd7\x82\x49\xba\x10\xfe\x94\xec\xa6\xe3\x6e\x98\xe3\x94\x56\x0f\xbf\x4c\x50\x38\x6c\xfc\x2e\x8d\x24\xf5\x10\xb1\xef\x1b\x85\xbc\xe9\x2c\x06\x7a\xe5\xd6\x2f\x78\x00\x30\x2d\x6c\x79\xbc\xe2\x46\x0d\x5a\x5d\xa1\x51\x77\x1f\x8d\x1d\x44\xf4\x34\x17\xe8\x3a\x69\xed\x67\x5f\xba\x2f\x2f\x59\xb6\x9f\x3f\x9d\x2c\x5a\x7d\x26\xc6\xf7\x5f\x17\xed\x37\x5d\x34\x33\xea\xaf\x4e\xd0\x81\x9c\xf9\x10\xca\xe2\xef\xed\xb8\x56\x8c\x2b\x3c\x1a\x57\x19\x26\xcb\x75\x7a\xf5\x22\x6e\x66\x30\x9a\x13\x9c\xd2\x4a\xa6\x18\xe7\x12\x29\x45\x03\x57\x22\xc6\x78\x23\xfc\x86\x8b\xa9\x96\xd6\xef\x2b\x53\x80\x42\xb3\x12\x51\x65\x29\xac\x12\x17\x1a\x41\x11\x8f\xea\x9f\x2e\xe2\xc1\x53\x2e\xcd\x1c\x4d\x1d\x76\xe8\x7a\x5f\x07\x34\xd8\xfb\x45\x81\x1e\xc0\x9c\x14\x5d\x4c\x8c\x36\x04\x30\x7a\xe1\x78\xb4\xf9\xc9\x2a\x1e\x8f\x36\x8f\xd1\x16\x8a\xc6\xc6\x03\xb7\x6e\xfd\x36\xc7\xac\xd3\x5f\x85\x12\xcf\x6c\x4e\x7b\xca\xe2\x88\x94\x9e\x1b\x49\x6d\xdd\xd9\x27\x42\xf9\xf1\x60\x76\x21\x63\x20\xf6\x96\xd3\xaa\xdd\xa1\xee\xc3\x57\x9b\x91\xf0\x92\x19\x11\x98\xc5\x98\x0e\xc3\xeb\x87\x51\x5f\x3d\xb4\xf3\x83\x1e\xd4\x93\x13\xdb\xae\xb8\xd9\x41\x73\x80\x03\x0b\x1b\xa8\x00\xd0\x60\xc7\x52\x07\xee\x05\xab\x70\x7b\xfa\xcc\xa2\x6b\x2f\x3d\x14\xe5\x28\xda\xce\xfc\x97\x82\x39\x32\xb9\x50\x83\x3d\xaa\x2d\xef\x56\xd7\xa6\xf1\x28\x9a\x1b\xf9\x85\x47\x39\x7a\xdd\x04\x70\x30\xd7\xcb\x1e\x1e\xe4\xbb\x1c\xfd\xd2\x11\xa9\x67\xfb\x01\xaf\xb4\xb3\xcf\x36\xeb\x31\x3a\x38\x56\xed\xd7\x52\xf6\x93\x7e\xd3\x76\xd6\xe9\x79\x54\xb9\xf6\x69\xf5\x7a\x7f\xda\x29\x34\x7c\xfe\xe1\xb5\xf5\xfb\xe1\xe6\xfc\x02\x5e\x8b\xb1\xcf\x81\xb4\x85\xb0\xd7\xf6\x76\x39\xec\x61\x11\xd1\x99\xce\xc4\x3b\xa7\x72\x54\xf4\x45\xe5\x29\x7d\x50\xbe\xbc\x03\x0e\xd8\xce\x05\x1e\x0f\x78\x79\x10\x4a\x39\xff\x20\x85\xa8\x0f\xf2\xa8\x2a\xaf\x55\xe5\x7c\xa1\xaa\x22\xe1\xc2\x83\x9a\xcf\x3f\x68\x11\x6f\xd8\x38\xca\x32\x8e\xa2\x0b\xec\xfd\xd9\x27\x9b\x77\x2c\x36\xc6\x33\x2f\x05\xdd\x15\x67\x9f\xc4\x78\xe9\x9d\x1c\x92\x3e\x69\xd1\x9e\xb4\x78\x78\xd2\xea\xf9\xb9\x84\xc8\x75\x6e\xfa\xaf\x3a\x4f\x9d\x91\x39\x57\x4b\x6a\x8c\x70\xd7\xae\x26\xfd\xb9\x83\xf8\xe7\x0e\xf2\xdf\x51\x7c\x50\x3f\x8e\x1b\x3a\xfa\x7a\x54\xe2\xf0\xde\x5a\xd9\x97\x77\x9c\x38\xd1\xc0\x71\xb1\x76\xf4\xc5\xc9\xc5\xc6\x2a\xaf\x08\xc8\x95\xfd\xca\xfa\x39\x6b\x29\xbf\xfa\x78\x17\x4e\x54\x54\x62\x0c\x15\x51\x3d\x39\x82\xcc\x71\x77\x88\x10\x61\x2e\xfb\xc8\xf9\x14\x72\x42\x7f\x44\x45\xac\xa2\xa2\x20\x78\xca\x8b\xbd\xbf\x99\x0a\xee\x0f\x8e\x16\x2f\xd4\x2c\x5e\x88\x9f\x9b\xcb\x53\x49\xed\xfd\x15\x3f\xa6\x7f\x9d\xdf\x93\xf9\x7d\xc7\xb5\xb5\xd7\x75\x36\xe4\x61\xc4\xe2\xd8\xf5\x95\x98\xa6\x58\x54\xfa\xf6\xb3\xc5\x79\x85\x42\x6d\xc4\xf8\xe8\x8b\x8d\x97\x31\x45\x1b\x13\x9c\xe3\x95\x41\x33\x76\xac\x90\xf6\x75\x27\x12\x2f\x76\xff\x6b\x76\xc7\x0f\xf7\xa7\xd1\xdd\xf2\xe1\xaa\x1c\x1f\x1a\xb1\x4f\x75\x06\x57\x52\x08\xfe\x37\xd2\x26\x27\x05\x4b\x9f\xcd\x1a\x93\xa3\x32\x3a\x66\x3e\x33\x5c\x4d\x53\xf4\xc4\x00\x55\xa7\x84\xd9\x15\x30\x5c\x1c\xeb\x41\xf2\x6c\x4b\x2c\xe0\xec\x24\x12\xe4\x42\x62\x29\xb3\xa7\x48\x81\xa4\xf4\x48\xa1\xcc\x4c\x95\x5c\x20\xf3\x61\x0d\xc4\x80\xc1\x24\xd6\x9f\x85\x3b\x02\x0a\xcd\xa3\x76\xf9\x36\x4b\xd0\x09\x8d\x89\x1a\x62\x0e\x3d\x3e\xe7\x40\xec\xcd\x1f\xd8\x1b\x2c\xa8\x54\xfd\x0d\x36\x1c\xa9\x5d\xff\x0d\x9b\x59\x58\xf9\xa2\x28\xd4\xa4\x8b\xee\xde\x99\xa9\x99\x79\x3e\x48\x1f\xaf\x45\xe2\x40\x22\x14\x8c\x5f\x02\xf3\x34\x9b\x87\x1b\x18\x53\x0b\x21\xc3\xee\xcf\xfa\x64\x8c\xc0\xac\xba\x58\xda\x59\xa8\x52\x23\xae\x9d\x2d\x0e\xa3\x90\xf0\x5c\xe1\xce\x91\xd1\x47\x44\x21\x52\xd0\x71\x29\xe3\xac\xc3\xd6\x1e\xc8\x3a\xde\x90\x89\x01\x11\x8a\x53\x98\x20\xbf\x93\x0b\xb3\xee\x7f\x4a\x4c\x6d\x57\x32\x2b\xf7\xea\x2d\xb2\x24\x65\xc0\x36\x73\xf0\xba\x7a\x11\xab\xb7\xc1\xd6\x45\x60\x84\x1b\x10\x6f\xb6\x36\x2c\x75\xc1\xa0\xdb\xb9\x9a\xdb\xc2\x30\x63\xa3\xa6\x61\x4a\xca\xb0\xeb\xc5\x30\xc3\xe9\x59\xaf\x7f\x7c\xee\x74\xbd\xa5\x91\xa7\x94\x09\x98\xa4\x21\x91\xf2\xc9\x53\xf0\x9e\x5a\x2d\x73\xd1\xc9\x4b\x94\x8a\xe9\xaf\x12\xfc\xab\x62\xf8\xf2\x2e\x15\x3d\xd6\x29\xcf\x2e\xd2\xe2\x43\x0d\xc5\xb3\x37\xa5\x61\xf6\x75\x09\xeb\x18\x2a\x43\x5b\x75\x79\x9b\x26\x61\xca\xd1\x96\xc6\xc9\xa2\xf0\xf6\xa6\xee\xd6\xf7\x16\x65\x63\x5a\xd5\xe6\xce\x42\x53\x4d\x69\x1d\x0d\xe7\xe1\xf7\x68\xf9\x51\xc3\xcf\x9d\xd7\x53\x04\xf5\x1f\xbd\x6c\xaf\x81\x1a\x72\x86\x77\xf4\x82\xdc\xad\x2b\x3d\x87\x80\x51\x99\x33\x47\x64\xdb\x4e\x2e\x1b\xbb\x0a\xdd\x54\xd0\x71\x8f\x5f\xbb\x5b\x0a\xda\xf1\x1e\x48\xa4\x75\x01\xf8\xad\x81\x02\xc0\x23\x99\xa2\x44\xfb\xe2\xa2\x44\xdb\x4d\x61\xe0\x05\x43\xbb\x17\x06\x64\x6b\x9b\xf5\x77\x48\x25\x5a\x75\xe4\x6e\xad\x29\x13\x65\x3d\x50\xa6\xca\x7e\xe9\xa3\x88\x1e\xc6\xa6\x03\x68\x3b\xf6\xf1\x3a\x13\xf1\xe9\xe1\xf6\xee\xd4\x46\xf8\xe3\x15\xda\xa6\xec\xbc\xdf\xd5\x96\xf7\x92\xf2\x88\x19\x91\x94\x87\xfd\x2e\xda\x23\x63\x7c\x2f\x41\x6e\xe4\xc1\xcb\x3a\xe3\x72\xe1\x9e\x03\x95\xdc\xaf\x76\xce\x4c\x25\xef\x9d\x5d\x69\xcf\x21\x1a\x70\xf6\xaf\xb4\x30\x6c\xac\xe7\xd7\x71\x0c\xac\xf1\x62\x88\xe3\x43\xf0\xc5\xbf\xf8\x61\x97\xe3\x3e\x01\x42\xed\x89\x9d\x22\x17\x39\xe3\xb3\x3f\xa9\x54\xe2\x38\xc9\x85\xa0\x01\x5d\x81\x1c\xe7\xd2\xa0\x91\xc5\x39\x81\xd6\x20\x8d\xd8\xf1\xe7\xfc\x51\xde\xdf\x7c\xdc\x3e\xdc\x3c\x5d\xfe\xe0\xaf\x30\x3e\x2d\x7b\xaa\x39\x2e\xde\x1d\x86\xe6\x0e\xc2\x6d\x1e\x13\xf8\xa5\xbb\x47\x7f\x1c\x97\x1a\x7f\xd8\x77\x94\xb2\x42\x47\x5f\x0f\x25\x8e\xf0\xca\x66\xf6\xb0\x5e\x0d\xc3\xd1\x6a\x37\xaa\xcd\x16\x7b\x58\x99\xdc\x6a\x66\x72\x25\x2d\x5e\x5d\xf6\xea\x6a\x7c\x32\x63\xd4\xde\xde\xd4\x67\xc3\x3a\x65\xcf\x95\x7b\x98\x12\x13\x1c\x72\x75\x6f\x35\xca\x6b\x7c\xf3\xc0\x9c\x4f\x6f\x93\xc1\x9e\x59\x0c\x54\x58\xe1\x7d\xf3\x1a\xbe\x3d\x01\xb9\x38\x64\xad\xee\x0b\x66\x8d\xa5\xce\x5c\x13\x79\xba\x10\xce\xdf\xbf\x31\x6c\xc0\x75\x93\xd5\xfd\xe9\xb9\x0f\x7c\x4d\x27\xa7\xd7\x7a\x29\x93\xe3\x02\x9d\x88\x57\xe2\xe8\x4d\x05\x4e\x4e\x3a\x20\x55\xc9\xc9\x8c\x8d\x91\x0a\xc9\xec\x6a\x21\x81\xd7\x44\x8d\x14\x93\x7c\x79\x07\xcd\x4b\x9d\x84\x4a\x53\x32\x0b\x74\x5b\x04\xff\x29\x8f\xe4\x01\xd1\xbf\xe0\xe5\xc2\xe9\x46\x5a\x0f\x4c\xc9\xeb\x6d\x11\x0a\x65\xce\x93\x54\x4f\x45\xe2\xae\xa4\x5d\x0a\x33\x7c\xd3\x47\xb0\xce\x24\x1e\x20\xeb\xe8\x99\x2b\xd5\x4c\x8f\x92\x90\x79\x41\xaf\x72\x29\xd1\xf4\x63\x4a\xb5\x13\x5e\xd5\x96\x8a\x00\xa4\x1c\x30\xe1\xd0\xf6\x20\x6c\xb6\x60\xf5\xf5\x96\xc5\x91\x44\x68\x40\x34\xb7\xa4\x39\xe3\x46\xcf\x5a\x6a\x38\xea\x0c\x2b\xcc\x02\x9d\x0e\x73\xd9\xec\x72\x30\x7f\x2b\x4f\x55\x49\x18\x53\x9d\x5d\x31\x57\x1d\x70\xa1\xdd\x71\xa9\x7a\x41\x00\xca\x3c\x52\xa9\x13\x07\x46\x48\x29\x00\xb5\x75\x06\xc0\xd0\xe8\xae\x58\xa2\xec\xa2\xb1\x38\xd9\xa2\xa1\x6a\x6f\xc4\xdc\xa1\x1f\x82\xad\x41\xfb\xc6\x60\xa0\xba\x2b\x42\x5c\xc0\x58\x22\xc8\x53\x79\xf1\xe4\xc9\xb4\xa4\x2e\xd5\x95\xf9\x84\x15\xc5\x19\x72\x2f\x67\x79\x9b\x36\x23\x04\x50\x67\xcd\xe0\xd8\xc3\x82\x59\xdf\x63\x5d\xc7\x9a\x8a\x39\x5f\xe2\x1e\x9b\x19\xc4\x9b\xb5\xe6\x79\x84\xec\xea\x9c\xcf\xda\x92\x4e\x43\x31\xe9\xa3\xaf\xdf\x66\x67\x2e\xb4\xe6\x21\xd9\x11\x6f\xa5\x15\xb9\x3a\xac\x33\x0c\x03\x5d\x7c\xe6\xb2\x9f\x4e\x3c\x8a\x83\x5c\x8b\x08\x4d\x89\x38\x29\x87\x07\xe7\xc7\x08\x57\xc8\x39\x60\x5d\xf4\xdf\x10\x10\x35\xa6\xed\x47\x26\xae\x1e\x4c\x9c\x5e\xe4\x59\xfb\x57\x62\x77\x59\x79\xc7\x88\x29\x06\x80\x81\x80\x96\x0d\x5d\x1d\x02\x79\x65\x76\xc5\x16\xdf\xc3\x25\x6a\x91\x89\x6c\x8a\x53\x5b\xb6\x89\x4d\x55\x05\x47\x98\xcb\xba\x7d\xb0\x7c\x16\xc3\x6b\x7a\x3b\x0b\xa9\xfd\xf2\x2e\x45\x26\xe5\x4f\xa3\x00\xa8\xda\x2b\x03\x3a\x57\xc0\xaf\x47\xe5\x13\xcc\x7a\x89\x5d\x8d\x50\x6b\xdd\xb6\x60\xa0\x38\x22\x60\x17\x1a\xe1\x46\x6c\x77\x62\x69\x54\xcd\x3e\x4b\x23\x86\x12\x11\x62\xb3\x4b\xb8\xfc\x60\xe4\xe3\x30\x90\xb0\x0d\x89\xa2\x47\xbb\x90\x4c\xb3\x6c\xbd\xad\x43\x32\x70\x66\xae\x8b\x19\xd1\x81\xed\xe8\xb8\xb7\xa8\xc7\x2e\x52\x4d\xc4\xb9\xeb\xb9\x14\xf8\x02\xca\xd8\xe4\x05\xb0\xcc\x01\x7b\x0a\x0c\xbb\x92\x32\x93\x86\x0d\x4d\x63\x6f\xf6\x3d\x9d\xc7\x56\xc5\xf6\xa6\x97\xa4\x6c\x67\x1d\x3b\x15\xdb\x1c\x1b\x8b\x07\x8e\x46\xe9\x48\xb9\xa0\x27\x66\x33\x90\xd7\xc3\xa4\x6f\x84\xb9\x55\x12\x0a\xd1\x9b\x2c\x10\x0a\xdc\x35\x8c\xf3\x53\x2e\x40\x17\x72\x7c\xce\xc5\x1f\xc8\x9c\x4e\xb0\xb1\xf8\x51\xba\x4e\x9b\x2b\xdc\x81\xd1\x01\x6f\x44\x44\x58\x03\x6f\x65\xc0\x57\x18\x35\xb6\xe3\xa5\xc2\x6f\x91\x6e\x42\xb8\x03\x55\xb2\x40\x24\xdb\x3c\x2e\xfa\x99\x11\xbb\xaf\xfb\x69\xb4\x16\xfb\x9a\x2d\x62\x20\x7e\x8c\xec\x37\x6c\x9e\xab\xcd\x7c\x2f\x83\xb9\x72\xaa\x54\x60\x3e\xb0\xc3\x29\x53\x47\xaf\xfc\xba\x72\x13\xba\xac\xd1\xfc\x3f\x83\x50\xe8\xf6\xb1\x5e\x8e\x01\x18\x01\x80\xfa\x47\x38\xd5\x75\xbf\xee\x7e\x33\x9d\xe6\xa8\x09\xa7\x8e\x21\x5e\x96\xeb\x03\x5b\x21\x4f\x5c\xa8\xa6\x19\xc1\xc5\x38\x4d\xb8\xb4\x94\x4c\xb5\x9e\xda\x2a\x88\x56\x82\xe8\x43\xec\x79\x66\x2d\x2a\x50\x9b\xeb\x99\x4c\xd8\xa8\x49\x48\xf4\x8c\xec\xc5\x84\x60\x30\xc8\x58\x7b\x98\x5b\xec\xc2\xee\x4a\x78\x54\xc0\x53\xaa\xe4\x03\x6e\x05\x81\x73\x80\x03\xf1\x34\xac\x95\xd2\x59\xec\xe6\x7a\x9b\x66\xf0\xe9\xf0\x61\x05\xdd\x15\xa6\xd2\xf1\x27\xdc\x2c\x93\x01\x2b\x80\xb5\x57\xc6\xdc\x5b\x30\x0a\x7b\x8b\xb1\x1f\xd9\x3d\x4c\x02\x0c\x4a\x44\xdd\x08\xbb\x01\x2d\xc1\x89\x53\xfe\xd5\x0f\xb7\xd6\x68\xd9\x16\x6c\x37\x19\x0c\x83\x99\xcb\xed\x29\x63\x85\x4b\x31\xe6\xc2\x6c\x23\xa0\xaa\x18\x6c\x35\xf4\x87\xa6\xe4\x34\x0f\x32\xe1\xb2\xed\xab\x49\x57\xb0\x5a\x38\x90\xe1\x11\x05\x9e\x5d\x18\x79\x11\x32\xb9\x66\x5e\x8d\xa0\x7c\xd8\x40\xe6\x49\x3b\xbe\xce\x0e\x52\xa8\xde\xde\x4a\xad\x6b\x06\xa9\xd6\xdd\x25\x96\xe8\x44\x90\xe0\x04\x34\xda\x42\x6e\xd8\xe2\x7d\xaf\xab\xd8\xb6\x7f\xee\xdf\xef\xb6\xa7\x39\xc4\x7e\xf4\xe1\x9a\xab\x0c\x97\x08\x0e\xd0\xd8\x8d\x08\xef\xf3\x25\xec\x4d\x8f\xfb\x04\x10\x08\xbd\xb6\x66\x0b\xbb\x53\xce\xd9\xc2\xb1\xf5\x53\xb2\x15\x58\x9e\x5b\xb8\x9a\x91\x48\xbd\x14\x11\xcd\xee\x47\x60\xab\xd2\xfa\x60\xa2\x97\x3d\xea\xa3\xe8\xb4\x54\x61\x35\xa0\xde\x6e\xad\x4c\x6b\xf3\xa3\xf5\xa5\x63\xb8\x74\xd1\x59\xad\x78\xef\xd0\x44\xf5\x5f\xde\x55\xd6\x5b\xa7\x4c\x09\x2c\xc9\xac\xc4\x3d\x11\xac\x35\x69\xc6\x09\xd5\x93\x29\x1b\x78\x25\xc9\x0c\x1d\x19\xd4\x43\x46\x96\x0e\x5f\x77\xd2\xc2\x9c\x2d\xc8\x11\x8f\xb0\x8f\x3d\x34\x1f\x1d\xde\x2c\x4d\x19\x05\xfd\x36\xe9\x78\x66\xd4\x1d\x47\x35\xf6\x39\x0b\xe0\xe9\x75\x65\x43\x00\x27\x5d\x87\xe7\xb1\x6f\xa6\xaf\xd3\x82\xf0\xba\xa8\xc8\x4e\xa0\x5b\x28\xd9\x82\xb8\x80\x70\x7e\x1e\xee\x3c\x4a\x70\xc3\xe2\xb3\x6d\xb6\xbc\x4c\xd5\x00\x47\x0c\x31\x1f\xe9\x3e\x3a\xd4\x04\xf8\xbb\x92\x3f\x48\xf5\x1e\x07\x86\xa1\x2e\xd1\xbb\xce\x9e\xe1\x16\xc3\x37\x38\x41\x77\x07\x4f\xe3\x59\x8f\x81\xf2\xf8\xd5\x40\xf5\xf4\x20\x44\x8c\xa1\xd6\x2e\x48\x83\x60\x2e\x34\x23\x40\x04\xc0\xfc\x5a\xc8\x72\x93\x40\x5a\x6f\xd0\xcd\xc1\x1c\xbb\x9c\x4e\x90\x06\x90\x6f\xf8\xb0\x93\xa1\x34\x0d\x5e\x44\x89\x47\x9b\x4c\xde\x07\x17\x07\xee\x86\x2b\xe1\x24\x16\x9c\x91\x71\x6d\x2a\xeb\xaf\xa7\x22\x59\xb8\x45\xa0\x84\x60\x95\x24\xfb\xa6\x87\x52\x06\xed\x8b\xc1\x68\x8b\xb4\x5e\x2a\x89\x31\x9c\x11\xf1\x18\xa1\xc2\x79\x06\x39\x72\x28\x20\x76\x41\x3f\xf6\xcc\xca\x70\x0a\xf4\x71\x50\x11\x2d\xdc\x07\x0f\x35\x59\x20\x89\xdd\x81\x17\xd4\x95\x41\xbc\x5c\xd6\x05\x58\x36\x36\xf2\xef\x48\xc7\x32\xcb\x50\x43\x72\x30\x3d\x46\x31\x73\xe8\xc8\x59\xa0\xb7\xa8\x2c\xee\x44\x08\x38\x00\xd7\x98\x29\xc2\x1c\xf7\xfc\x61\xff\xe5\xf6\xc3\x29\xd0\x73\x48\x6b\x78\xf7\x8b\x8e\xc1\x38\x05\xb8\x84\xc5\x92\xf4\xf4\xe0\x97\x5d\x21\x51\x69\xdc\xdb\x64\x8a\x1a\x95\x26\x02\xff\xc6\x7b\xdd\xf4\xb4\xeb\x5e\xa7\x60\x51\xf4\x50\x62\x15\xe2\xa6\xd7\x04\xd8\x35\x25\x93\xc1\x8f\x39\x67\x8b\x32\xe1\x8d\xa1\xeb\x20\xfb\x19\x7c\xfb\x1f\x6d\x64\x10\xee\x24\x7b\xe3\xaf\x94\x4f\xd5\xbf\x63\x1f\xf8\x5f\xbe\x0f\xa6\x31\xfc\x5d\xee\xee\xa2\xc2\x09\x0f\x1e\x3a\x13\xe3\xfe\xb3\xb4\x1f\x4b\xc6\xa9\xb4\x4a\x50\xd0\x6d\x15\x1b\xa1\xe9\xb0\x65\xa8\x58\xf0\xbb\x16\x89\xb1\x33\x95\xd0\x3d\x15\x13\x98\xc9\x38\x68\x28\x82\xe5\x64\xff\x47\xbb\xb2\x72\x58\x04\x35\xf0\x4b\xb2\x64\xe2\x41\x6c\x29\x4e\x01\x3f\x3a\x05\x46\xc8\x71\x0e\xe2\x99\x53\xf0\x8e\x03\x10\x7e\x92\xc5\x9b\x83\xe4\x37\x88\x46\x76\x89\x23\x0f\x1a\x18\x8d\xd8\x3a\xd4\x7c\x48\x50\xa8\x4b\x63\x37\x55\x1f\x37\x16\x34\xa8\xc1\x50\x93\x82\xef\x6e\x7d\xc9\x1d\xaa\x1a\x57\x4a\x1b\x9e\x0a\xde\xc4\xd1\x35\x6f\x1e\xc9\x1a\x09\x07\x56\x1a\xca\x84\x60\x53\x6c\xee\xcb\x23\xd5\x89\x90\x8d\xae\x8d\x42\x2e\x84\x11\x40\x17\xc2\xa8\x6a\xb0\x33\xc6\x1a\x99\xe7\x81\xc1\x41\x81\x40\x41\x5c\x84\x10\x84\x5e\xa1\xaf\xda\xd5\x90\x29\x78\x88\x97\xc8\xd1\xa4\x37\xe5\xa6\xe3\x63\x8e\x14\xe0\x3a\xe1\xfb\x52\xfa\x50\xc1\xa8\x73\x68\x8a\xd7\x26\xfb\xda\x8f\xe3\xbe\x2d\xfd\x5d\x87\xb0\x1b\xc3\x12\x70\x2f\xa3\x77\x63\xec\x87\xb9\x18\xb3\xb3\x4e\xd8\x55\xfa\x75\x33\xdd\xfe\x74\xf7\xfd\xb4\xfd\xf1\x94\x57\xc9\x57\x79\x95\xa6\x23\x91\xe3\xd4\x0c\xa7\x91\x86\x39\x9f\x07\x5f\x59\x53\x40\x1c\xfb\x29\xa1\xf4\x19\xef\xd3\x01\xfd\x02\x0c\xb4\x2b\x6d\x49\xf5\xaf\x68\x4b\x4b\x9f\x6d\x2b\xe7\x48\x2d\xfb\x33\x6d\x6d\x8e\x1a\x4b\x21\xbf\xa2\x31\x2d\x7d\xb6\x31\xcb\x2e\x14\xe3\xf5\x91\xa9\x10\xfa\xf2\xc6\xa0\x43\x7d\x9d\x0f\xaf\xed\x81\xf7\xdb\xbb\x7e\x9a\x1e\x29\x94\xbf\xa7\x5d\x70\x21\xd9\xe9\xf9\xa6\xb4\xf0\x2b\xf7\xc0\xd2\xd2\xe6\x4a\x18\xed\xf9\x61\xc1\xdc\xf2\xd5\x7b\x20\xc7\x57\x6c\x6e\x2d\xfc\x55\x3b\xe0\xe1\xac\xc8\x52\xff\x56\x36\x40\x01\xa6\xd2\xef\x43\x06\xb4\xad\xdf\x8d\x0c\x18\xc8\xe3\xdf\x08\x19\xf8\x9f\x3f\x7f\xee\xb7\x3f\x9e\x64\xb3\x0b\xed\xef\x6a\x1b\x7c\xc3\xb6\x9e\xdf\x06\xdf\xb0\xb1\xe7\xb7\xc1\x37\x69\xec\xb9\x78\xca\x93\xd5\xbf\x79\x06\x2a\xd6\x0c\x8d\x4d\xae\x9b\x23\x0d\xa3\xe2\x62\x48\x4f\x93\x4b\x31\x6d\xd7\xe3\x65\xb5\x03\x08\xe9\xfb\x3d\x3b\xb0\x79\xda\x03\x00\x78\xfd\xb5\xa6\xc0\x52\x6b\xbc\x6c\x11\x80\xb1\xf6\x55\x5d\x08\xf1\x2a\xc0\xbc\x00\xd1\xa7\xe4\xbf\xf2\x34\xbc\x70\x2b\xbc\x72\x1a\x36\x8f\xe7\xe1\xb9\x4e\xbc\x70\x37\xfc\xaa\xb5\x78\xae\x0f\x2f\x5d\x8b\x67\x3b\xb1\xf9\xba\x5e\x5c\x07\x4c\xf9\xb0\xbd\xeb\xe7\x05\x8f\x1f\x9e\x09\xdc\xc6\xdc\x2e\xa1\x4d\x17\x86\x75\x1c\xde\x34\x39\xa9\x95\xa4\xd6\xd9\x35\x6a\x84\x60\xa7\xae\xff\x4c\xcb\xef\x6d\x40\xe2\x7c\xa3\x13\x56\xa4\x7e\xe5\xaa\x16\xa9\x57\x83\x77\x5f\xb1\xbf\x7d\xfd\xda\x4e\xe8\x9b\xdf\x66\x7b\xff\xaa\x3e\x6c\xbe\xd5\xfe\xfe\x96\xcb\xf1\xba\xed\x7d\x9e\xa3\xbe\x96\x2e\x27\xac\xe9\x15\x0e\x51\x7b\xb6\x7f\xdd\xd8\xc0\x2b\x00\xd8\x95\x31\x8d\x20\xc7\x33\x63\x3a\x0a\x12\x9c\xd6\x5a\x51\xe9\x31\xe4\xf8\xbf\xee\xf3\x7f\xdd\xe7\x2f\xda\xe7\x3f\xde\xbc\xdf\xf6\xdb\x8f\xdb\xef\xf7\xb7\x1f\xb6\xf7\x27\x3b\xfd\xc3\xb3\x42\xc3\xa3\xd8\xb7\x28\x66\x77\x4c\xed\x42\x34\xd6\x00\xf3\xf3\x81\xa2\x0f\x7b\x65\x86\x31\x25\xb0\x53\x5e\xf0\xc3\x1a\x08\x94\xe6\xc5\x75\xc1\x27\x6b\x3f\x12\x9a\x70\xa3\xb3\xde\x59\x3b\x40\x67\x5e\xf3\x03\xd3\xbe\xa4\xc9\x3a\x26\x33\xd7\x35\xcc\x6e\x80\x73\xea\x28\x36\xaf\x80\xcf\xf9\x74\xfb\xbe\xff\xfc\x70\x12\xd8\x12\xb6\x57\x1c\xd6\x72\xf4\x34\x12\x11\x40\xdd\x6f\x68\xf5\xdd\x2d\x20\x8b\xce\x50\x16\xfb\x00\x5e\xec\xe3\x63\xfc\xba\x94\x1a\xaf\x3d\x72\x33\x8c\xd5\xf4\x1d\xba\x87\xa6\x81\x37\x38\x71\x86\x92\xd9\x4f\x89\x85\x12\x8b\x6e\x56\x73\xfe\xf2\x4b\x66\xd5\x6b\xf0\x11\x2c\xab\xf3\xe2\x59\xfc\x08\xad\xe0\x3c\x7e\xc4\x5e\x5f\xdd\x5c\xc4\xae\x78\x9c\xff\x75\xb4\xf2\xfa\xfc\xaf\xf6\xe2\x37\xca\xff\xfa\x69\x7b\xf7\xfe\xf6\x24\x01\x47\xf4\x8b\x85\x28\xe4\x40\x7e\x6a\x0c\xbf\x7f\x09\x89\x24\xa4\x09\xc1\x03\x8d\xf5\x78\x94\xdd\x1a\x95\xc5\xbe\x7c\x79\x57\x6b\xa6\x66\x02\x9f\xb9\x88\x00\x5d\xc0\xac\x16\x85\x5c\x99\x5c\xd2\xb3\x94\xa2\x20\x47\x81\xfd\x1f\x16\x35\x2b\xac\x1f\x33\xca\x73\xa1\x32\x69\x61\x2d\x5b\x48\xff\xc7\xda\x40\x10\xc0\x93\x4f\x91\x75\xe6\x38\x4f\x4e\x7f\xd2\x7f\x80\x8a\xbc\x8f\x9c\x47\xd0\xc6\xa2\x6a\x3f\x0e\x84\x60\x0b\xec\xce\x93\x96\x25\x7d\x9d\x11\x03\x9e\xe6\x90\x2d\xfe\x82\x42\xdd\x98\x57\xa1\xa5\x57\x98\x74\xd4\x4e\xc2\x6b\xa2\x15\x3e\xde\x7c\xfa\xfe\xe3\xcd\xc3\x9f\x4e\xb5\x96\x91\xaf\x38\x68\x00\xc9\x7e\x75\x89\xfc\xf5\x69\x2b\x80\x5c\xbf\x38\x67\x0e\x34\x07\x2e\xcd\x72\xdd\xbb\x52\xa2\x65\x8e\x08\xd8\x2e\x30\xaf\xc8\x70\xac\x82\xc3\x2f\xbe\xc1\x03\x18\x31\xf7\xa2\xef\x25\xc2\x6b\x21\xc0\x8d\x29\x04\xa0\x49\x79\x12\x16\xe2\xe4\x29\x64\xe9\x21\xe3\x3b\x3e\x0f\x29\x86\x42\xbe\xee\xcf\x72\xf3\xe1\x7f\xfe\x7c\x2a\xde\x47\xf9\x87\xa3\xb9\x69\x79\x3f\x2e\xb4\xaf\x06\x7e\xfc\xfb\x05\x72\xec\x67\xbc\xc4\xe3\x35\x77\x1f\xa5\x7e\x16\x77\x8d\x2c\x20\x9e\x72\x03\xd0\x30\x99\x17\xc0\xa0\x4d\xf0\xf5\xaa\xdd\x6c\xad\xdd\x89\xb9\x7a\xce\x2e\xc2\x8d\x51\x98\x38\x77\xc3\x92\x1f\x59\x45\xc2\x48\x31\x61\x41\xb1\x89\x1c\x5e\x4b\x06\x4d\x32\x3c\x0c\x06\x5c\x9c\xd8\x16\xc1\x67\x6e\xe3\x28\xbe\x26\xf4\x4a\x37\xf0\x92\xa2\x9c\x6d\x37\x61\x27\x75\xb7\x6e\x2e\xb7\x6c\x37\x37\xf6\x9f\x25\x5d\x48\x54\x99\xa4\xa4\x39\x53\xa3\x2c\x4b\x68\x18\x7b\x26\x4e\xdc\x2d\x80\xa7\xd4\x5e\x03\x89\xe7\xb7\x69\x6e\x14\xe0\xc8\x1f\x4b\x4f\x4c\xac\xff\x2e\xe8\x91\xe6\xc7\x85\xe4\x8c\xae\x05\x42\xea\x0c\x7d\xc7\x6a\x71\x5a\x8d\xb9\x18\x26\xee\x59\x96\xd1\xcd\x95\x2d\xc6\x59\x3f\xa5\x5c\x5f\xdc\xed\x87\xdb\xd3\xc5\xbd\xe6\x92\x53\x6b\xa5\x90\x64\x62\x36\xbc\x6a\xd8\x82\x59\xcf\x28\x80\x60\x98\xf3\xde\xa5\xbc\x43\xaa\x86\xbc\x4b\x4a\x12\x83\x54\x62\x0f\xf0\xa4\x4c\xcb\xb9\xe7\xc9\x05\x4c\x6a\x32\x0c\x43\xfb\x0f\xd6\x3d\x3d\xdc\x93\x3e\xd4\x67\xac\xd4\x97\x98\xc2\x92\x5d\x28\x16\xf0\xc0\xfe\x05\x6c\x4e\x35\x4b\xf0\x35\x36\x67\x40\x3e\x5d\x64\x73\x90\x4d\x22\x1f\xe2\xc9\xcc\x85\xd8\x82\xba\x24\xcc\x81\x16\xc0\x1a\x51\x2e\xac\x99\x31\x17\xee\xab\xe6\x62\xea\x2a\x02\x3a\x32\x38\xb5\x3c\xba\x74\xb8\x5e\xdd\xb8\x5f\xf5\x8f\x15\x3f\xca\x6e\x58\xb7\x5c\xb1\x7a\x2f\xeb\x93\xf5\x8a\xb5\x1b\xd6\xae\xe4\x45\xa8\x21\x91\x09\x61\xee\xda\x3f\x04\x41\x51\x41\xa8\x80\xb4\x81\xd3\xa9\xd7\xf7\x2a\xdf\x4c\x2e\x03\x7a\xa8\xc8\x4e\xff\xdc\x4b\x45\x32\x55\xe5\x7f\x7c\x8d\x93\x6b\x42\xae\xc9\x66\x55\x13\x4c\xca\xf8\xcb\xd9\xe4\x96\x4f\xa2\x14\x96\x78\x8a\x17\x20\x27\x7d\xde\xdd\x9c\xf2\x73\xf1\x05\x29\x2f\xca\xde\x09\x02\xe0\x7f\x87\x0d\x20\x29\xed\x2f\xa3\x97\x2d\xae\xb0\x00\x48\x17\x44\xec\x99\x8e\x3a\x20\x1f\x89\x21\x43\x0c\xc7\xbb\xb8\x73\xcc\x5f\xbb\xfa\x9b\x73\xcb\x6f\x69\x53\xb9\xe9\x6e\x94\xa6\x2b\xc0\x81\x92\x45\x00\xe2\xa4\x85\x44\x75\x16\x20\x64\xc3\x26\xaf\x7b\x21\x2b\x13\xee\x63\x98\x5c\xa8\xba\x47\x81\x67\xfc\x08\x22\x7c\x4d\xfe\x94\xc8\x30\x07\xb8\x0c\xcc\x01\xe5\x76\x47\x6c\x4f\x18\x61\x4a\x88\x46\x0b\x6c\xd3\x6c\xa0\x90\x25\x6a\xaf\x71\x38\x64\x10\xe1\x60\xd9\x41\xc4\x3c\x2d\x64\x81\xa1\x15\xe5\xb7\xcd\x85\x26\x82\xba\x07\x1e\x08\x53\xb9\xae\x19\xf1\x9a\x05\x9e\x05\xa4\x4b\xe2\xd8\x1d\xdc\xdb\x18\x39\x99\x62\x23\x5d\xa9\xc6\x9d\x23\x35\xdf\xa5\x52\xad\x3a\x3d\x95\xe1\xc5\x6b\xfe\x26\xf0\xca\xce\xe6\x21\x03\x2f\x7a\x78\xf7\xc1\x15\xc1\x82\x06\x9b\x45\xc4\x2a\x2b\xbb\x24\x05\x96\x01\xf4\xa0\x33\x4a\x98\x89\x23\xa3\xc1\xb4\x4e\xdd\xc0\xd5\x7c\x0c\x8e\x79\x3d\xee\x66\xb7\x3d\xc5\x55\x8b\xf9\xb9\x5d\x9f\x7d\xde\xbb\xc0\xf5\x77\x23\x7b\xaf\xa7\x7a\xc3\x25\x56\xd7\x9c\x75\x87\xc0\xfd\x09\x11\x07\xaf\x20\x80\x9b\xd7\x51\x40\x49\xf1\x94\x02\xfa\x05\x68\xd6\xc3\x45\x12\xce\x3d\xf0\xd0\x04\x06\xfc\x38\x06\x88\xd2\x6d\x69\x72\x55\xf7\x5e\xe5\x08\x67\x62\xfc\x97\x74\xcc\xb1\xeb\x27\x42\xf5\x82\xa7\x08\xd7\x96\x48\xa3\x48\x2a\x1d\xff\x4e\xac\x8d\xb1\x9f\xed\x11\x5e\xe8\xf6\xfa\x24\x59\x37\x7f\x0e\x53\x8e\x85\xb2\x5e\xe3\xa7\x65\x18\x93\xc6\x7e\x33\x8f\x8a\xad\xf9\x3e\xba\x71\x9d\xd7\x3f\x93\x6a\x39\x3e\xeb\x9b\xb0\x30\xa0\xab\x21\x6d\x72\x92\x10\x2a\x93\x9f\x41\x89\x05\xb4\xc5\x02\xa8\xa1\xd2\xd7\x55\x78\xd8\x67\x2a\xb5\x02\xcb\xf3\x51\x64\x81\x6a\x3d\xd8\xa2\x8f\x50\x3c\x2e\x5a\x00\xaf\xd7\xb8\x19\xe8\xaf\xcb\xc3\x8b\x78\x3f\x26\x4b\xae\xc8\x21\x70\xfc\xbb\x88\x25\x7b\xb9\xb6\x69\x1d\xf8\x59\xd2\xf0\xc8\x2e\x6f\x33\x39\x60\x43\x4e\x4c\x95\xd7\x2b\xbc\x7e\xb3\xf6\xed\xa7\xef\x7f\xb8\x79\xff\xa7\x5f\x6e\x1e\x4e\x02\x64\x62\xbd\xc2\xbb\xb7\xd2\x88\x43\x4b\x63\x64\x2a\xf3\x86\x0e\x1f\x51\x39\x24\x5c\xb4\x1b\x4e\x7f\xeb\x08\xa3\x09\x93\x2b\xec\xa9\xe8\xa9\x87\xd6\x94\x03\x71\xdb\xbb\x5c\xae\x79\x25\x9c\xb7\xd9\x46\x7f\xde\x2b\xe1\x6c\xc2\x09\x6d\x20\x92\x79\x60\x72\x7b\x46\x2d\xf7\xb9\x5f\x9e\x92\xeb\xa6\x7c\xa5\x35\xdf\x6a\x4e\x0a\xfb\xbf\xe1\x29\x9c\x46\x27\x36\x67\xc7\xaa\xbd\x7b\xe1\x74\x5f\x9c\xe9\x9b\xab\xd0\x09\xdc\x7e\xd7\x99\x3e\x25\x3d\xcb\x04\xfc\xda\xf1\x7f\x9a\x6e\x4e\x1c\x46\xe2\x0f\xd7\xf2\xe0\x1b\x04\x32\xb2\x6d\x0a\xb0\xf4\x4d\x72\xb0\xbe\x83\xe1\x0c\xc3\x5d\x3e\xe4\x25\x95\x29\x02\x13\xf0\x4b\x1f\x45\xa6\xc3\xdb\xe3\x65\x00\x46\xb1\xc1\x1c\x86\xeb\xda\xa3\x4f\x37\x3f\x7f\x3e\xbd\x52\xde\x3f\x46\xa8\x37\x77\x0c\xdb\x63\x67\xf7\xa5\xca\xcd\x2f\xdf\x97\x5a\xfa\x9c\xef\x07\xb0\x91\x7e\x9f\xb6\xae\x53\xd2\xfb\x13\xf8\xba\xf8\xe1\x95\x33\x72\xd9\x31\xee\xfc\x51\xbd\xe0\x19\x77\x3d\xa4\xf7\xe1\xec\x71\xdb\x5e\x39\x6e\xa8\x9d\xd3\xe1\x86\x46\x7a\x07\x44\x87\x11\x70\x8a\xd6\x3d\xa6\x7f\x77\x7b\x8a\x03\x82\x93\x00\x13\x19\xb2\x47\xb5\xbd\x9d\xb5\x8b\x45\xcf\x5e\x85\x76\x0e\xdd\x72\x10\xcf\xf4\x00\x8f\xe2\x08\xb4\x42\x43\xcf\x93\xf8\x0b\x13\x91\xfc\x15\x0a\xff\xfb\x4d\xc4\x71\x51\x23\xed\x2f\x24\xd3\x57\xb7\xd7\x85\x8b\x40\x1b\x78\x3c\x7d\x87\x29\xdf\x7c\xa3\x39\x07\xa7\x71\x69\xce\xaf\xa9\x9c\xbf\xe1\x9c\xff\x15\x26\xf2\xba\x4e\xed\x7f\x6e\xdf\x9f\x28\xd5\xd2\x69\x58\x72\x0a\x2b\xf1\x8f\x94\x52\x79\x72\xf7\x3c\x62\x02\x4f\x8e\xd2\xe1\x46\x73\x1c\x16\x58\x70\x59\x92\xbb\xd8\xa5\x15\x00\xf5\x58\x80\xee\x76\x91\x06\x29\x67\xf9\x52\x12\x04\xd4\x89\xf3\xb3\xf7\x9c\xcc\xbb\x7f\xb8\x3f\xef\x54\x9f\xc2\x55\x60\x96\xc2\xc4\x30\xfd\xa4\x80\x4c\xf4\x3c\x2d\x5f\x2e\x51\x95\xc5\xd2\x72\x51\xf2\x28\x51\xa8\x44\x39\x7f\xfd\x8f\x67\x67\x96\x60\xad\xf7\xab\x64\x7e\x8c\xff\xac\xf3\x43\x8a\x57\x27\xc0\x17\xca\x69\xf4\xda\x2d\xdd\x3e\x37\x2c\xb3\x27\x9d\x15\xa8\x30\x67\x3a\x77\x6e\x7c\x39\x5b\x68\xa9\xe0\xdc\xf6\x5b\x1a\x7f\xfd\xd8\x3f\x4d\x3f\x7f\xfe\xfe\xf3\xed\x4f\x27\xd0\xbd\x69\x8d\x06\x63\x61\xa0\xc0\x1c\xc4\xa0\x47\x48\x30\x96\xbc\x76\xdd\xa7\x4f\x9e\x3d\x3e\xb4\x47\x80\x31\x06\x91\x62\x32\xe8\xf9\xe7\x07\x91\xf2\x11\xb6\x0c\x12\xdf\x1d\xed\xf4\xc7\x0f\x8f\x09\xcb\x82\x40\x03\x38\x9c\xe3\xac\x78\x4f\xd2\x0f\x9e\xb7\xfa\x6c\xfe\xa6\xcd\x3e\x1f\x6f\xef\x2e\x2d\x5c\x7e\xf1\xc2\x95\x5c\x5f\x3b\xf9\xfa\xca\xab\xa6\xf1\xaf\x32\x8b\x9b\x97\xa7\x7d\xfa\x78\xbf\xdf\x9e\x9f\xc7\x72\x48\xe2\x15\x1b\x45\x8e\xc7\x73\x38\xc1\xec\xca\x95\xa7\xf1\x39\xce\xe5\x02\x45\x8b\x90\xf1\x46\x31\x4f\xae\x79\x6a\x07\x69\x06\x00\xbd\x8f\x67\xdd\xea\xd2\x7f\xd6\x5a\x0f\xc5\x93\x15\x5f\xc0\x7d\x51\xbc\x21\xbc\xfc\x40\x6a\xac\xde\x47\xeb\x35\x3d\xae\xd2\x2d\x75\x1e\x91\xa7\xa1\x1d\xb7\x97\xa7\x51\xe7\x42\x75\xd0\xd2\xe6\x68\xa9\xa7\xe3\xf1\xba\x31\x60\x9b\x0b\x68\xa5\xd1\x43\x0c\x6e\xb2\x01\x1f\xe6\x23\xff\xfd\x5a\x57\xef\xff\x74\x7e\x6f\xd4\xc3\x19\xab\x91\xaa\x07\x37\x84\xf0\x54\x5b\x72\x7e\xb4\xe4\xc7\x80\x59\x93\x43\xca\xe6\xe8\xcb\xe4\x44\x32\x89\xe4\x4b\x05\xe1\x4e\xe1\x87\xfe\x7f\xfc\x37\x96\xd9\x94\xbd\x31\x4d\x30\x78\x86\x2c\x97\x57\x23\xc5\x40\x29\x06\xf8\xf8\xe0\xff\xdf\xe2\xc0\x6e\xfe\x5a\x0b\x32\xff\xbc\xfd\xdc\x6f\xef\xef\xce\x2f\x4b\x3b\x4e\x50\x7d\x30\x17\x98\x63\xe2\xc8\x26\x70\x92\x95\xd2\x21\x9d\x00\xd2\x0f\x2c\x2e\x6b\xd1\x9c\x0b\x2d\xe1\xe4\xa3\xfc\xa2\x0d\x7e\xb8\x03\x95\xd8\xf4\xf4\xb5\x5a\x86\x28\xe2\x0c\x06\xd9\x2c\x21\xb9\x03\x8e\x29\xf2\xec\x24\x42\xd9\x1e\x0a\xb0\x90\x82\xe5\xfc\x13\xc0\xa3\x44\x99\x90\xe1\x84\xbd\x9f\x0b\x39\x3b\xbd\x79\x86\xfd\x05\x59\x0d\xe7\x14\x28\x57\x82\xfb\xcc\x1c\xa0\x81\xae\x99\x24\x1a\x1e\x86\xcd\xa5\xe4\x01\x5c\x9a\x1a\xf4\xf3\x61\xa4\xe8\xcc\x6c\xc0\x69\xd1\xf0\x8e\x60\xf4\x33\x40\x6f\x57\x11\x96\x3b\x32\x21\x4a\x42\x52\x8a\xfc\xa2\xa1\x9b\x49\x0b\x78\x40\x11\xd1\xb4\x71\x7c\x9b\x95\xb1\xad\x00\x60\x00\xf0\x50\xa6\x30\xa0\xa2\x22\x32\xb5\x64\xbf\xc4\x40\xc3\x09\xe5\x5b\x12\x84\xcd\xef\x9a\x38\xf3\xc7\xfb\xf3\x9b\xef\xe6\x28\x79\xa6\x65\x2c\x32\x20\xbb\xa7\xbb\xaf\xe5\xbd\x39\x2f\x3c\x7d\xf0\x38\x67\xfa\xf1\xb6\xcc\xfe\xcc\xda\x34\xcb\x76\xac\x15\xbe\xe6\xb5\x18\xeb\xc9\x6e\xc6\x71\xf1\x29\x5f\xe8\xf1\xe5\xf3\xf2\xb8\x85\xcd\xb5\x03\xf3\x77\x7a\x03\x7c\x7e\xff\xb0\xdd\xde\x7d\xde\xdd\x9f\x4a\x06\x47\xc9\x71\x5b\xa1\xc4\xb2\x33\xbc\x82\x17\x07\x3b\x01\xdc\x40\x08\x68\x45\x96\x09\xc0\xe0\xf1\x0d\x25\xdf\x92\x03\xec\x51\xe7\x6b\x95\xcc\x1e\x16\xbf\x3a\xe4\xf6\x6a\xb8\x60\x03\xeb\xc3\x70\x08\xf0\x23\xba\x70\x56\x0e\xbf\x12\xd0\xe5\xdb\xc6\x52\x8d\xfa\x4a\xc7\x95\xf5\xe3\x76\xf6\xd6\xeb\x97\x8a\xfd\xbe\xcd\x5a\x1d\x48\xc8\x3a\xf4\x7e\x34\x27\x63\x03\x15\xff\x4c\xb4\x59\x0c\x33\x9c\xfa\x2c\xdf\x61\x32\x2b\x6c\xb1\x80\xf9\x62\xdd\xd3\x1f\xf7\x28\xf9\x6a\xd5\x7d\xd8\xcc\xa8\x59\x5b\xb0\xea\x50\x5b\x1f\x2d\xe1\xa7\xd1\x89\x97\x07\xda\x86\x39\x14\xe4\x67\x3c\xaa\xa4\x1f\xd5\xbe\xb7\xae\xbe\x58\x83\x12\x66\x0c\x3e\x14\x3a\x1e\x71\x3f\x9e\x0c\xb4\xfa\x4a\x1d\xe6\x60\x95\xcf\x67\xbc\x4d\x47\x99\x83\x5b\xa1\x88\xf4\x96\x60\x22\x63\x7e\x6a\x7b\x06\x55\x61\x6f\x39\x2a\x39\x94\xa3\x64\x95\x17\x4b\x2a\x2b\x33\x6a\x1a\x45\x24\x00\x38\x20\x4c\x8f\x6a\x59\x2a\x39\x29\x34\x2a\x38\x32\x3e\x77\x6b\x63\x49\x70\x5a\x96\x8a\xce\x96\x59\x86\x32\xea\xb5\x2e\x0e\x34\x86\xb0\x39\x8c\x60\xad\xed\x7c\xc9\xbf\x6e\x52\xde\x6f\x4d\x7a\x37\xbf\x03\xf7\x7d\x61\xbb\x1d\x25\x58\x2e\x4c\x45\xc2\xe4\xa2\x08\x32\x68\x5c\x36\x69\xb7\x48\xd2\xe2\x79\xe5\x8a\x07\x6a\xdd\x59\xc5\x12\x7c\x1d\x62\x99\xa4\x24\xb8\x0e\x9e\x2b\xe3\x41\x0f\x2f\x29\x60\x7e\x93\x55\xdf\xfc\xb5\x96\xfd\xb7\x5e\xf5\x1f\x6e\xee\x2e\x2d\xfb\x21\x1d\xb3\x4d\x28\xb8\x51\x25\x76\xb5\x90\xb4\x34\xb9\x92\x22\xb9\x92\xc2\x8c\x73\x58\x1b\x49\xc3\xe7\xcc\x00\x55\x13\x36\xfc\x1b\xe4\xef\x0a\xc6\xa7\xe3\x9e\xc9\x04\xe4\xcb\x1e\x03\x09\x5b\xce\x53\x0e\x14\x62\x9c\x4a\x4a\x54\x12\xe2\x0d\x93\xb9\x7e\x7b\x4f\x8d\x2f\x3a\x1b\xb7\x65\xc5\x2c\x24\x2a\x0b\x55\x78\xe2\xb4\x75\x41\x0c\x22\x28\x15\x64\x1a\xd7\xea\x56\x50\x40\x89\xd9\x92\x23\x3b\x64\x47\x16\x4b\xd9\x8c\x8c\xc9\x06\x75\xc7\x9b\x47\xc9\x93\x91\xc5\x4f\xdf\xd1\x2b\xc9\x7b\x4b\x9f\xdc\xd6\xcc\xcf\x12\x97\xbc\xb5\x23\x89\x32\xaa\xe8\x87\x6a\xd7\xa6\xd6\xf6\x81\x94\x0b\x5f\xb4\xf6\x1c\x0e\xcb\xc3\xc3\xfd\x2f\x67\x55\xc6\xd9\x3f\x32\xc0\x01\x4e\x7a\x5c\xd9\x70\xb9\x5f\x5d\x61\x17\x2c\x62\x15\x5e\x10\xf5\x32\x49\x03\xda\x51\x04\x8a\xba\x79\xde\x03\x47\xcf\x3e\x27\x78\xb8\x97\x6c\x37\xbc\xb9\xee\x8f\xd4\x0a\xf0\x88\x6b\x8c\xd4\x0a\x39\x31\xe5\x24\x28\x35\x0a\x2e\x99\x0a\x2c\x51\x81\x15\xf0\xb3\xa5\x29\xd0\xb7\xea\x8c\x1a\x50\x5d\x9d\xd0\xca\xe8\x83\x65\x32\x68\x3c\xfa\xc0\x4a\x46\xd0\xc7\x80\x18\x1b\xbc\x76\x18\xc5\xa6\x1f\x46\xf7\x82\xd9\x3b\xab\x70\xce\x87\x8c\xd3\xb1\xc8\x80\xdf\x76\x80\x9f\x2c\xd6\x03\xed\xbf\xfe\x73\x26\xc5\x04\x1f\xa7\x98\xd0\x8d\xbb\x26\x63\xc0\x48\x3b\xfe\xc5\x34\xeb\x08\x2c\xd2\xc8\x26\x0f\x83\x18\x09\x31\x16\xbf\xe8\xc1\xb1\xa4\x40\xeb\x4f\x7d\x2d\xa7\xe3\xb7\xd9\x00\x51\xd5\x66\x0c\x7c\xb7\x79\x34\xe3\x27\xeb\xc0\x98\x65\x8f\x59\x3e\x8a\x9f\x58\x47\x81\x35\x4a\x16\x3f\xe1\x5f\x30\x6b\xa7\x19\xcb\xb2\x5c\x77\x5b\x60\x4a\xd9\x80\x3f\xf9\x10\xf2\x81\x55\xb6\xf9\x19\x6b\xab\x9f\xb3\x43\xca\x49\xcc\x61\x5d\xee\x8c\xb0\x77\x23\xc4\xd1\xb2\x5d\x1c\x20\xb3\x87\xab\xba\x80\xed\x53\xb6\x71\x49\xf2\xb1\x40\xa5\x5a\x69\x2d\xbc\x1f\xf3\x15\xb1\x7b\x06\xb0\x7c\x1d\x7b\xb8\xf6\xa5\xc5\xd3\x55\x5b\xf2\x84\xd6\xc3\xde\xe5\xd9\x26\x0c\x2b\x6d\x49\x32\x6d\x0b\xac\xb3\xba\x79\x45\x58\x8a\x4d\xeb\xb9\xfc\x7d\x39\x3c\x37\xb1\xcb\xbc\x1c\xc5\xd2\x8c\x2e\x3c\x97\x01\xe5\x70\x4c\x8f\x76\xce\xf1\x50\x4b\xc4\xf6\x69\x76\x6a\x31\xd0\xb0\x1c\xd2\x32\x8d\x89\x8c\x23\x14\xee\x49\x9a\x14\x5d\x8b\xa3\x23\xdd\x6d\xa2\xf7\x83\xc8\x18\x1f\xb0\x24\x31\x41\xcd\x72\x98\xc2\xb1\x31\x5e\x3e\x7f\xf0\x94\x3e\x97\xd1\x3b\xc7\xe7\xfc\xfd\x46\x18\xce\xb1\xbf\x5f\x02\xdc\x1e\xcb\x33\xfe\x7e\x66\x3d\x91\x38\xbb\x36\x30\x9c\x71\xe9\x66\xc8\x22\xe4\x64\xa0\x91\x87\x05\xde\x94\xbd\x3d\x6f\x06\x8d\x0c\x6c\xd4\x01\xc2\x6b\x3a\xab\xe1\xb9\x0b\xd5\xae\x41\xdc\x41\x37\x84\xdb\x2a\x93\x41\xdd\x86\x05\xf0\x0b\x19\x3f\x70\x8d\x01\x66\x9a\x9c\x28\x4f\x61\x90\xb7\x7e\xf5\x1f\xae\xc4\x65\x76\x65\x78\xfd\x88\x6c\x3a\xf0\xdd\x90\xaf\x84\x81\x8f\xa8\xf7\xaa\x14\x92\x9a\x2c\x28\x22\x26\x86\x82\xa9\x61\x1b\x04\x15\x65\x84\xa2\x0f\x54\x4b\xd2\xcf\x9d\x48\x3c\x6b\x13\x5d\x38\xb1\x75\xf6\x5e\xee\x8e\xf7\xb0\xfd\x7c\xfb\x65\xfb\xfd\x8f\x3f\x4f\x27\x01\x6f\x79\x35\x82\x29\x1b\x30\x92\xff\xc3\xc6\xec\x2d\xce\x39\x20\x3d\x71\x90\x09\x99\x42\x38\xc6\xe7\xfc\x0a\x2f\x24\xc1\x3f\x9b\xe4\xff\xc0\x81\x5a\xdd\x93\xb6\x16\x82\x9c\x95\x50\x10\xd5\xc0\xf1\xb1\xdc\xf1\xe5\xd8\x07\xe6\x62\x6a\xfe\x83\x8d\x32\x46\xd2\x76\xd6\x61\x6d\x2e\x4b\x64\xc0\x76\x8f\x67\x85\xad\xd1\xcd\xb5\xbe\x2b\x4e\xa4\xda\xa7\x57\xcb\xa1\x58\xae\xcf\x1f\x6f\xce\xac\x57\x3e\x8e\x0b\x5b\x62\x41\x5f\x3b\xea\xbf\xd2\xa0\xdf\x71\xd2\x76\x16\x3c\xe9\xd7\xef\xb2\xcd\x5f\x6d\x9b\x3d\x67\x61\x3e\x59\xa7\x72\xcd\xd7\x2e\xfa\x4a\xd5\xfb\x55\x1d\x7f\x2e\x11\x48\xe4\x43\x3a\x91\x73\xcf\xa1\xb2\x3c\x93\xe1\x24\x72\xc6\xcb\xe7\xd3\x9f\x58\x70\xc1\xe3\xfc\x1f\x23\x78\xf4\xf4\x81\x96\x3e\xcd\x46\x8e\x5e\x21\x4d\xd7\x2b\x33\x95\xc3\xa2\x7b\x32\x51\xf5\xd7\x4e\x14\xe2\x82\x5f\x3c\x58\x94\x7e\x65\xc7\x6f\x3e\xf7\xed\xc3\xed\xe7\x93\xa8\x89\xdc\xae\x46\x4d\x54\xa1\x58\xf3\x1c\x33\x0e\xa7\x61\x6a\x96\x91\x6a\x0b\x3c\x74\x79\x9b\xa6\x25\xfd\xba\xe5\x45\xd0\xb2\x65\x58\x3a\xc0\x7d\x59\xa8\x89\x96\x43\xca\xe6\x14\xf6\x2e\xf8\xb2\x32\x6a\x43\x7a\x30\x1e\x60\x61\xd0\x64\x65\xef\xba\xf1\x1c\xfb\x00\x5b\x1c\xfc\x47\x52\x98\xdd\xe8\x91\xd5\xee\x4c\x69\x8a\x56\xb5\xd1\x69\xc9\xdd\x0e\x08\xcd\x3c\xb2\xaf\x6b\x51\x03\xcf\xd4\x82\x93\x75\x26\x2e\xbd\x8a\x1b\x54\x0a\x74\xd2\xa5\x4c\x5f\xdf\x9b\x46\x85\x56\xdf\xda\x50\x3f\x34\x3f\x2d\x7d\xdb\xdb\xe0\x5e\xc8\xeb\xe8\xb0\xc6\xb4\xcc\xd6\xfc\x3a\x5f\xfd\x30\x8b\xd3\x32\xc3\x63\x82\x0f\x93\xbf\x00\x9d\x62\x48\xcb\xfc\x5c\xcf\xf8\xb0\xfd\xf3\xfb\xe9\xe6\xe3\xcd\x45\x03\x5d\xbe\x39\xa6\xcf\xe6\xc6\xe4\x1b\x79\x7a\x5e\x65\xd0\x7f\x2f\xf5\xc5\xb0\x86\x64\xde\x5b\x18\xe3\x62\x0c\xb1\x90\x7d\x3a\x41\x83\x1a\x57\x84\x51\xc2\x43\xec\x63\x58\x54\x7f\x56\x60\x07\x54\xa2\x11\xa8\x66\xe8\x00\xa8\x53\x5b\x8b\x94\x7c\x9a\xb8\x52\x16\x70\x3f\x62\xa4\x15\xe9\x71\x90\x43\x21\x52\x55\x5e\xef\x60\x1d\xb2\xd4\x55\x0c\xce\xcc\x2e\xab\x3a\x71\x21\x67\x15\xac\xd7\x53\x81\xf8\x4f\x4e\xa5\x35\xae\x2b\x94\x8a\x6e\x41\xcc\xc3\x5b\x83\x20\xbf\xba\xa4\x3f\xdd\x9e\x91\xf0\x57\xcb\x47\x53\x1e\xaf\xfa\x7d\xca\xfb\x68\x34\x05\x66\x2c\x50\xa4\xbd\xd3\x9f\xdc\x70\xd4\x49\xb0\x58\x87\x61\x1a\x04\x1f\x08\x0a\x2a\x75\x58\xaa\xa1\x94\x51\xa9\x07\xb9\xcb\x0a\xf4\x71\x71\xc7\x2d\x2d\x28\xf1\x8c\x33\x17\x90\xc0\x82\x02\x1f\x11\x35\x27\x6b\x48\xe3\x20\x58\x23\xfe\xf1\xcb\x3b\xe6\xec\x01\x0c\x60\xb4\xce\x68\x5f\x37\x4a\x38\x3b\x33\xcc\x66\x15\x53\x58\x9b\x81\x3a\x84\x77\xdc\xe2\x4a\x04\x8d\x06\xe6\x3a\x58\xa9\x9a\x23\xac\x6e\x9b\xf3\x69\xea\xdb\x33\xb7\x12\xc2\xd4\x2f\x5d\x4b\x8f\xec\x78\x87\x1c\xf7\xfe\x69\xe6\xfc\x18\xfd\xec\x9a\xe5\x30\x49\x50\xea\x58\xba\x02\x6c\x60\xfd\xa1\x1f\x7d\x3d\x94\x98\xd9\x17\xf2\xc4\xda\x99\x52\x26\x86\x39\x38\x27\x7c\xe1\x9c\xe6\xcc\x54\x0a\x1e\x97\x32\xa3\x7a\x7b\x17\x15\x5b\x95\xd6\xde\x66\xb4\x65\x7f\x75\x77\x54\x0c\x7d\x7b\x9a\xd6\xff\x3a\x7a\xdf\xf6\xe6\x24\x25\x7e\xbe\x06\x38\x04\x00\x52\xb3\xbc\x3f\xf5\x68\x9a\x1d\x17\x90\xf7\x00\xef\x88\x66\xa1\xe8\x6d\x49\xd8\xe1\xc4\x12\x71\xc9\x80\x69\x6e\x16\xb2\x7e\xe4\x0d\xf3\xc4\xdb\x69\x96\xb8\xb8\xbf\xcc\x2a\xa5\x44\x52\x99\x94\x7b\x2e\x94\x33\x54\x8c\x2c\x91\x04\x81\x8c\x5c\x72\x0f\x90\x6e\x8e\x80\x2c\x8f\x3c\xa4\x00\x1e\xe3\x91\x26\xc5\xb5\x64\x06\x7a\x6e\xcb\x75\x23\x48\xa9\x63\x7a\xa4\xaa\x54\xcc\x90\xa5\x25\xd7\xcd\xec\x04\x4c\x17\xbc\x46\x2c\xad\xe6\x11\xd4\x41\xcd\x14\x0b\x3c\x0a\x54\x12\xab\x14\x0d\xbf\x1c\x66\x10\x73\x37\xb5\xc8\x03\x31\xde\xb0\xf8\xc5\xea\xaf\xdf\xb2\x25\xd8\x59\x8e\x41\x18\xf4\xa0\x23\xff\x05\x6e\xa1\xd9\x09\x45\xf8\x25\x70\x77\x69\x24\x09\x0a\xb4\xe2\x38\xeb\x80\x67\x4f\x21\xe9\xb9\x04\xee\x7a\xae\xb6\x1d\x95\xff\xd6\x19\x21\x70\x9c\x16\x72\x0d\x20\x00\xcb\x1e\x8e\x84\x8e\xae\x11\x0f\x20\x1b\xd3\xca\x92\x88\xef\x8c\x90\x59\x64\x86\xe1\x02\x1a\x15\x5a\x17\x1f\xa9\xe9\x26\x4e\x20\x24\x1c\x93\xc1\xea\x23\xdb\x0a\xb5\xce\x30\x75\xe5\x55\xf3\xd9\xd9\xd6\x22\xeb\xf5\x09\x2a\x8f\x7c\x3b\xf8\x56\xbb\x2e\xa6\xef\x48\x1c\xc3\xd9\x32\x28\x01\xaa\x5e\xaf\x22\x34\xe9\x62\x1e\x69\x28\x99\x05\x34\x94\x25\x76\xbd\x58\xf3\x75\x27\xf7\xdb\xd3\x98\xe9\xfc\xe1\x39\x1e\xce\x71\x46\xca\xbd\x5f\x05\x7b\x97\xe3\xd7\x42\xef\xc1\x95\xc5\x14\x11\x65\xe0\xae\x43\x10\xe8\x83\xfb\x42\x47\x2c\xf5\x49\xad\x03\x1e\xbf\x1c\x7e\xb3\xcc\x39\xe4\xaa\x61\xc1\xc7\x25\x4b\x12\x76\x7a\xb6\x2c\xa8\x08\xd4\x24\x06\x8a\xfe\x66\x56\xf6\x2b\x02\x3b\x42\x4f\xf2\xea\x33\x03\x4d\x38\x96\x6d\x49\x82\x04\xf3\xef\x80\x94\x00\xef\x02\xdc\x8a\x52\x09\xad\x68\x17\xc1\x3c\x69\x61\xf4\xa5\xd6\xde\x8c\x87\xb2\xbf\x8b\x68\x01\x74\x0c\x6f\x8c\x6e\xb5\x68\x59\x00\x24\x4e\x86\x75\xc0\xc4\xb3\x72\x4f\x91\x09\x28\x41\x35\x74\xeb\x93\xd3\x4e\x59\x9f\x2c\x03\x6c\x2f\x66\xf0\x46\xa7\x64\x28\x4c\x9e\x61\x8a\xfe\xb2\xfd\xfe\xfe\xd3\xf6\x94\x19\xda\x5e\xa3\x72\x03\xcc\x68\x06\x82\x83\x98\x82\x8c\x29\xa4\x30\xc3\xb2\xed\x23\x41\x4f\x2f\xa6\x86\xa9\x4b\x66\xb9\x25\xdb\xdc\x93\xb4\x74\x8f\x32\xd6\x1d\xe5\xb2\x03\xbb\xc1\x5a\x95\x20\x5f\x8f\x20\x95\x42\xb1\xc6\x5c\x80\x21\x05\x41\xe2\x89\x82\x01\x5e\x04\x24\xed\x8d\xc1\x36\x09\xd4\x4c\xf6\x87\x7d\xb7\x52\x28\xf4\xe5\x5d\x8b\x71\x00\x3c\x89\xdd\x96\x4a\x84\x83\xe5\xb1\xd2\xcb\x16\xf8\x1d\x96\x4b\xcb\xbc\x78\xaa\x6d\x4b\xfd\xcd\xac\x56\x96\xe6\x2c\x76\x64\x3f\xc0\x07\xc7\x8e\x8a\x66\x4f\x35\x6b\xc7\x39\x96\xce\xb1\x50\xe6\x59\xf4\x62\x3d\x2a\x73\x00\xdf\x5d\xf2\x81\x0e\xc8\x11\x87\xdc\x62\x12\xa0\x4a\xc4\x3c\x85\x25\xa4\xbd\x1d\x29\xc4\xe2\x48\xe8\xdb\xfa\x28\x16\xe0\x30\x0b\x7a\x67\xc8\x29\xdd\xf0\x53\xb4\x3a\x9d\xbb\xb5\x54\x3f\xbc\xba\x56\xd9\xfa\xa1\x2d\xc4\x3b\x87\x44\xd6\x9f\x67\xb7\xcf\xfb\xe9\xfe\x34\xf4\xab\x5c\x0b\x9a\x49\x49\x2b\xe7\xa9\x28\xad\x64\xe4\xfb\xb3\xf4\x0a\x2a\x0f\x34\xcb\xbf\xe3\xc3\x0b\x96\x1f\xc7\x37\xe9\xc5\x02\x53\xca\xab\x57\xf5\xb7\x58\xd4\xe0\x8b\x5e\x19\xe0\x75\x0d\x97\xa4\x6d\x2c\x5d\x96\xe3\x0a\x66\x0e\xd0\x60\x45\xf7\x3d\x12\x6f\x66\x8b\x83\xaf\x4b\x1c\x7c\x1e\xce\x70\x79\x01\x53\xe0\x10\xa9\x98\xe2\x72\x14\x80\xe5\x83\x85\x62\xa4\xaa\x97\x69\x0c\x94\x71\x23\xdb\x2d\xa9\x2c\x1f\xf2\x49\x49\x34\x44\x1b\xe5\x4b\x1f\x6d\x89\x14\x48\xf4\x5e\xac\x9e\x42\xe1\x1e\x1b\xd0\xcb\xe6\x8a\x8c\xa0\x50\xc0\x22\xc1\x4a\x33\x87\x03\x6d\x90\x38\xcf\x09\x4f\xc9\xe1\xea\x74\x96\x6b\x38\x8c\xc4\x4a\x23\xf1\x05\xb8\x3a\xdb\x53\xfc\x36\x6d\x66\x36\x19\x00\x83\x42\x66\xfc\x18\x57\x44\x46\x64\x36\x53\x3e\x27\x0d\x20\x82\x06\x83\x9f\x5e\x8a\xd5\x53\xf2\x32\xc3\x3f\x50\xa5\x8c\xfa\xf4\xb8\xa4\xc3\x71\x09\x23\x23\x36\xe0\xa2\x58\x47\x0c\xc8\x1d\xe5\xb6\x5c\x88\x83\x55\x29\xdd\x32\x63\x29\x7f\x33\x95\x48\x1c\x64\x06\x00\x54\xa5\xd0\x40\xc9\x43\xe9\x01\x19\xb9\x54\x8e\x75\x8c\x0c\x48\xda\xb9\x2a\x24\x2d\x4e\x39\x28\x2d\x9f\x95\x3b\x52\xb2\x5e\x07\xa5\x0d\x1d\xc9\x20\x41\x68\xed\xdc\xc4\xe5\xdc\x6c\xae\x1d\x9c\x5f\x6e\x1e\xee\x6e\xef\x7e\x3a\x2b\x88\x16\xbe\x46\x7b\xcd\x7f\xef\x91\x00\xb8\xe4\xa8\x5e\x6f\xde\x53\x48\xe0\x63\xc4\x38\x43\xd8\x6b\xab\x77\xdc\x41\x7b\x7e\x00\x8c\x7b\x04\x0c\xbc\xe2\xc5\x85\x81\x70\x24\x94\x02\x84\xc2\x08\x2c\x95\x45\x28\x34\xa0\x41\x64\xd5\xd4\x9b\x6f\x11\x0b\x79\x11\x0b\x99\x6d\x8b\x97\xa1\x3d\x64\xc8\x85\xd1\xb2\x61\x2e\x72\x61\x1e\x72\x61\x36\xb9\x70\x73\x24\x18\xe6\x55\x30\xcc\xd6\x11\xaf\x04\x24\xb7\xa9\x20\xfb\x8e\x4a\xec\xba\x31\xe0\x4e\x8a\xbc\x71\x06\x0f\x24\x70\x22\x1f\x8c\x93\x71\x92\x8e\xcb\x82\x38\x1f\xe2\x11\x7f\x39\x70\xc3\xa2\x99\x71\xf3\xc8\xfc\x96\xa7\x55\x23\xc0\x45\x0f\x53\x2c\x14\x5b\xcf\x7a\xe7\xeb\xbf\x8e\x01\x1c\xe2\xe2\xb3\x81\xbd\x77\xa7\x84\x52\xae\x46\xf6\x16\x03\x81\x9e\x91\x53\x48\x6c\xa6\x91\x37\x0b\x9c\x59\x91\x69\x38\x93\x65\x36\x08\xc1\xdc\xf4\x98\x1e\x12\xd3\x04\x95\x1c\xc1\x1a\x02\x09\x6b\x28\x9a\x91\xf1\x1b\x0b\xc1\x60\xcf\xc3\x40\xcd\x9a\x9c\x94\x46\xc9\xd7\x49\x45\x13\x3d\x99\x6d\x42\x22\xd6\x16\x51\x6b\x41\xc6\x21\x15\x47\x95\xcf\x6a\xf9\x11\x82\xea\x0e\xe0\x2c\xc8\x62\x84\xd4\x7a\x13\xe8\x9d\x24\xd1\xca\xf4\xa4\x59\xf6\xb8\x32\x42\x8b\x81\xeb\x05\xf0\x8d\x34\xb5\xac\xa4\x66\xc1\x0d\xde\x00\x7a\x43\xc7\x37\xb1\x72\x43\x29\x4c\xda\x1b\xed\x8c\x4b\xbe\x92\x14\x03\x4a\xc2\x0c\xc0\x4c\x23\x4a\x60\x1a\x89\x09\x8e\xc8\x98\x8b\xe4\x7e\xc1\x53\x9d\x72\xb6\xdc\x99\x98\x20\xce\x7e\x2e\x99\x74\x5a\x21\xc5\xd7\x0e\x9f\x97\x67\x12\x17\xbe\xbf\x99\xb6\x77\x1f\x6e\x4e\x90\xf1\xca\x55\x13\x24\xa8\xb8\xd4\xdd\x40\x49\x32\xb8\x24\x07\xbc\xa4\x58\x2d\xc7\xe5\x2e\x88\xb7\x67\x50\x4c\x18\x96\x92\x54\xe5\xfe\xf0\x1a\x5c\x68\xf1\x5a\x10\x6f\xaf\xe9\x23\x2d\x8c\x47\x78\x0b\x8f\x18\x5e\xcc\x67\x1b\xab\xa0\x8e\xe7\x1b\xd3\x1a\xf5\xb5\xb3\xfd\x88\x97\x07\xa0\x75\x9e\xef\xc9\x06\x20\x6e\xec\xed\x9d\x8b\xc0\x92\x3b\x15\x29\xae\x62\x5a\xda\xdb\x97\x20\x2d\x73\xbc\x00\x68\x39\x3a\x7e\x61\x06\xb5\xdf\xd7\xc6\x7b\x61\x0a\x2d\xb1\xc8\x4b\xc6\xb4\xf9\xad\x06\x85\x8c\xd6\x9c\x2c\x2d\x84\xbf\xa8\x46\x46\xac\xe6\x19\x3d\xf2\x78\xe9\x54\x3d\xbb\x6f\x67\xa1\x39\x73\x3c\x0b\xcc\x09\x68\xb6\x50\xe3\xf9\xb7\x36\x57\x5f\x3b\xaf\x0b\xbe\x6e\x4f\xbb\xb9\xfb\x70\xff\xf1\xe4\xd8\x5d\x33\x5d\xe7\x0c\x77\xf1\x34\x43\x83\xd0\x64\x20\x4b\x49\x09\xca\x43\xc2\xac\x15\x0a\x59\xce\xba\xa8\x97\x49\xc6\xd5\x99\x18\xf2\xb8\xde\x0f\x14\x94\x31\xe4\x91\x51\x7a\xc9\xdc\xfe\x54\xf7\xb5\x46\x6f\x1c\x74\x5f\x5a\x50\x90\xee\x2c\xe2\x7e\x93\x15\xe9\x3c\xe5\x27\x18\xd4\x01\xbc\x82\xf8\x97\x62\x50\xe3\x3e\x0f\xe6\x0c\x33\x32\x3a\x22\x01\x1c\xc3\xa3\x8b\x37\xc8\x70\x68\xe9\x0e\x2d\xad\x97\xf2\x2b\x90\x13\x52\x1d\xf9\xbd\x52\xa3\xe8\x3b\x6c\xe7\x36\xe2\x8c\x0c\xe5\x73\x6a\xd4\x82\xb2\x7f\xa4\x73\x04\x47\x45\x73\x78\xc1\x1c\x61\x8a\x70\x3d\xf6\xc4\x23\x4f\xbc\xde\x8b\x21\xf5\x6a\x2c\x9f\x41\x9d\xe5\x33\x13\x32\xe0\x7a\xc1\x9b\x4d\x01\x91\xda\xdc\x4e\xf1\xb1\x79\x24\x06\xfe\xfa\xe9\xd9\x98\x72\x17\xf1\x9a\xa6\x7b\xaa\xba\xef\x90\xd2\xd5\x8c\x90\x70\xfb\xb0\x54\x68\xc3\x6a\x80\xe9\x74\x59\x4c\xaf\xc0\x85\x91\xbf\xd4\xb0\x6d\xdb\x9a\xca\x30\xa1\xf3\x23\x8f\x24\x94\x00\x25\x42\x04\xc7\x89\xcb\x23\x77\xeb\x48\xc6\xda\xdd\xd0\x5b\xbe\x7a\xd7\x58\xc0\x4c\x21\x4e\x3d\x43\x67\x98\xd8\x50\xc7\xa2\x59\x64\xe6\x20\x94\x85\x54\x60\x2a\x3c\x4b\xc3\xc9\x83\x10\xc7\xbc\xe9\x49\x17\x3d\x41\xdd\xe0\x7d\x2f\x91\x6a\xd0\xf3\x8d\xde\x59\xe7\xa2\x74\xd3\xa4\x7e\xfd\x5a\x5d\xbd\x1f\xef\x3f\x7e\xdc\x9e\x42\x7d\x96\xf4\x42\x48\x29\x46\x2e\x64\x5b\xf3\x91\x54\x56\x05\x86\x10\x3a\x32\x8f\x23\x3b\xf1\xec\x8a\x41\xf2\xaa\x44\x30\x0f\x8f\xc6\x02\xa6\x0e\xec\xa5\xcc\x10\xa3\x86\x0d\x18\x98\xbc\xc6\xfd\x91\xa5\x70\x6e\xc3\x87\x44\xda\x1e\x59\x6d\x2d\xb9\x23\xb1\x74\xbd\xad\x90\x35\x1b\x16\x27\x6a\xbd\x90\xce\x5c\xa5\x36\x17\xaa\xca\xef\x85\xa8\x12\x4e\x34\xd8\x51\xfd\x1b\x46\x19\xdd\x86\x89\xbb\x14\x4a\xad\x8b\x32\x15\x33\x5c\x27\xe1\x53\x09\xc1\x43\xc4\x0f\x37\x2c\xa9\x6c\x20\xcb\x9e\x0a\x93\x18\x8c\x5c\x63\x92\x91\x00\x3a\x5b\xaa\xe8\x1e\x62\x35\x30\x53\x89\xa6\xde\x1d\xa3\xef\xeb\x8c\x1c\xa6\xe9\x19\x38\xdf\x9f\xee\xb6\xa7\x2b\x92\x1f\xb9\x3f\x3e\x8a\x58\xf0\x2a\xaa\x5a\x16\xe2\x2c\xdd\x89\xae\x89\x24\x5b\x8e\x96\x0e\x7e\x91\xf6\x47\x1b\x8a\xaf\x48\xa3\x0c\x5e\x0d\x59\xce\x47\x12\x84\x1a\xaf\xc5\x72\x40\x8d\x64\x4d\xf4\x14\x2c\xd1\x75\x2f\xf0\x40\xed\x38\x79\xa1\x47\xe4\xbf\x8c\x91\xa0\x36\xe3\xa0\x8f\xc3\x28\x9d\x4a\xc7\xeb\x76\xcf\x9d\x6d\x7d\x73\xd6\xab\x01\xac\x0a\x1c\x50\x0c\x75\xf6\x6c\xc8\x05\x70\x0e\xcf\xf8\x2b\xd8\x2b\x2f\x1a\xe8\x23\x5f\x97\xdf\xb8\xa9\x97\xa0\x09\x9c\xba\x29\x96\xab\xf0\x6f\x19\x98\xb3\x07\x84\x84\x74\xd1\x91\xfd\x11\x5c\x80\x5b\xf0\x02\x2e\x83\x0e\xa4\xc7\xbe\x28\x6f\x87\x37\xca\xdb\x05\x4f\x81\xaf\x60\x0a\x3c\xc1\x71\x78\xbb\x3a\x9b\xbc\x7d\xd9\x2c\x9c\xf3\x2a\x2c\xf5\xb9\x79\x28\x52\x57\x48\x05\x7e\x06\x29\x82\x2f\x8e\x6e\x19\xfd\x99\xd1\x3d\x82\xab\x18\x68\x15\x17\x10\x25\xd2\x57\xce\xc0\xc3\xb6\xff\xb2\x3d\x43\x1e\xda\x15\x44\x7c\xf0\xc0\xe1\x99\xb4\x09\x2d\xfb\xd9\x99\xcf\x1f\x6c\x1d\x7a\xed\x15\xb3\xce\x28\x2b\x6a\x79\xf3\x55\xf2\x63\x65\x6a\xc2\x9e\x79\xcf\xd9\x9b\x89\x11\x3c\xce\xe9\xe6\x9f\x71\x2d\x71\xa2\xc8\x06\x97\x6f\xd8\x99\xca\xcb\xe9\xbf\x96\x4f\xdb\x90\xf4\x0d\x57\xd3\x24\x55\x46\xf2\xd3\x8b\x61\x54\x4d\x0c\x42\x2f\x95\x43\x44\xab\xe3\x21\x45\x6b\x4f\x4c\x49\xa1\x17\x08\x6f\x06\x0a\xfe\xe2\xae\x15\xcd\xb7\x30\xf2\xc2\xa8\xe0\xd4\x0e\x7b\x7b\x1c\x46\xd7\x88\x9c\x38\x6e\xe9\xb1\x83\x42\x09\x2f\xa2\x57\x4f\x23\xa6\x9a\x18\x78\xa0\xa9\xd5\xf3\x00\x51\x65\x08\xf8\x9e\x30\x35\xf0\x55\x2c\x64\x36\xd7\x73\xb6\x14\x9d\xfc\x8a\x0c\xc8\x58\x9b\xae\xc5\xbb\x85\xd4\xf6\x60\x1a\xb9\xce\xf6\xb9\x77\xca\x94\x33\xef\xcd\xbc\xa3\xf3\x0f\x83\xf7\x29\x39\xd9\x5c\xf7\x2e\xbd\xff\xf4\xe9\xf6\xee\xa7\xef\xdf\xdf\x3c\x9c\xee\xa6\x6b\x80\x6d\x39\x7a\xba\x20\xc5\xf4\x47\x92\x4b\x3f\x92\x57\xfa\x63\xc9\xc1\x88\xea\xaf\xaf\x05\xa2\x95\x0a\x77\x6e\x01\xee\x8e\x34\xd2\x8b\xc7\x83\x9c\x00\xb7\xd5\xc9\xb1\x87\x2b\x9a\x40\x41\xa6\x32\x86\x7e\x14\xbf\xa6\x56\x8e\xe4\x72\xdc\x35\x39\x97\x0b\x71\x73\x06\xcb\xd1\x4b\xbc\xb0\xeb\x99\xc1\x7d\x20\x64\x82\x42\xee\x16\xd7\xec\xbb\x41\xa1\xc3\xdf\x87\x4b\xa1\x2a\x61\xe7\xc4\xc7\xcb\x98\x93\x63\x8f\x01\x08\x12\x5b\xdd\x4c\xe2\x07\x55\x2d\x08\x53\x30\xeb\x5a\xaf\x08\xda\x36\x63\xb4\xf2\x39\x16\x99\xa7\xe2\x9b\xe7\xd7\x63\x8b\x4d\x1f\xb6\x0f\x17\x4c\x04\x3f\x5c\xf5\xdf\xce\x91\x9a\xd4\xd5\xb9\xbd\x59\x72\x6c\xc7\x09\x80\xed\x55\xff\x5a\x1c\xc8\x9a\x0c\x77\x03\xca\xb9\x3b\x78\x15\xa9\x58\xab\x6b\xa2\x3c\x26\xfe\xee\xf6\x58\x05\xff\x19\xe5\x47\x1d\x7d\x54\xba\x77\x41\x76\xb9\xc8\xd9\x87\x2f\x19\xe3\x39\x2b\x5a\x79\x7f\x8d\x9e\xd6\xd2\x28\x19\x2f\xa0\x14\x1f\xce\x23\x79\x72\x01\xf6\xb4\x96\x61\xfa\x86\xe0\xc2\x96\xdb\xd8\xe2\xe2\x39\x9a\xa9\x2b\x1d\x72\xe5\x0c\x15\xa6\x99\xa3\x3b\xfc\x9f\x09\x91\x3c\xca\xaa\x32\xe5\x3c\x69\x9d\x5a\x65\x44\xda\x6d\xab\x0f\xd5\x59\x6d\xa8\x0c\x75\xa1\xaa\x6c\xa9\x94\x43\x17\x3b\x03\x8b\xab\x2e\xd6\x83\xb3\x1f\x50\xbc\x0d\xcd\x72\x2b\x96\x8a\xa1\x3b\x36\x93\x2c\x76\x66\x30\x17\xf5\x3c\x39\xdd\x6a\x66\x65\xf7\xc3\xc3\x6b\xd3\xd7\xaf\x5f\xb5\x4c\x29\xc6\xd7\x2f\xd3\x70\xcd\xdd\x6f\x1f\xfa\xed\xfb\x9b\x13\xef\xdc\x72\x62\x08\x2f\x79\x51\xc3\x16\x1f\x69\xc9\x7d\x72\x21\x26\x77\xef\xcc\x23\xe8\xf7\x81\xb6\x45\x5b\xdf\x1a\x67\xf6\x25\xb3\x87\x09\xba\xbf\xeb\x67\xe6\x6f\xfb\x1b\xc3\x07\xeb\x98\xbf\x1a\xca\xf7\x75\x48\xbe\x68\xea\x1b\xe3\xea\xfe\x70\xf3\xf0\xfd\xfb\xdd\x99\x5b\xb2\x9e\x58\x4a\xc5\xc7\x7a\x74\x4b\x22\x46\x0d\x01\xfc\x2a\xb9\xeb\x17\x41\x6e\x04\x18\x82\x4c\x21\x88\xed\x00\xb9\x5e\xbf\xe1\xb1\x56\x42\x16\xdc\x86\xdb\xa1\xee\xf5\x08\x8f\xcc\x37\xd1\xc3\x43\xd8\x8f\xbc\x08\xb5\xe5\xbd\x2b\xb9\x5a\x1d\xfa\xc5\x5a\x80\x72\x46\xaa\xd6\xc2\x69\xb4\x8f\x6f\xfa\xf8\x6a\xde\x8f\x5f\x6e\x7b\xdf\x3e\x9c\xb5\x6e\x55\xfe\x87\x63\x86\xb2\x49\x9e\x9d\x4d\x27\x4c\xf6\x00\x7c\xcf\x95\xa2\x87\x56\x8a\xcb\xec\x72\xb2\xbb\x9d\x43\x54\x7a\x38\xbb\xac\x34\x0d\xd6\x37\xca\x19\xe6\x63\xe8\x05\x46\xe4\x20\xb4\x5f\x43\x35\x55\x87\x59\xb7\x91\xd2\xb1\x3a\x3b\x96\x06\x9e\x2e\x0a\x65\x9c\x4b\x21\x4e\xc9\x54\x3f\xc9\x4a\x3a\xf6\x23\x11\x56\x44\xd4\x0d\x97\x34\x23\x91\x11\x14\x40\x24\x79\xef\xc0\x24\x94\x44\xb0\x33\x5a\x9e\x78\x65\xfd\x8a\x65\x10\x69\xb0\x92\x28\xe1\x5e\x33\x88\x85\x46\x2a\x81\x32\x8c\x53\xc5\x0c\x86\x3e\x76\xb8\x25\x28\x93\x31\x5b\x0a\x8c\x86\xad\x3d\x90\x75\xec\x64\x27\x4f\x61\x86\x8d\xa2\x45\x0a\x22\xfa\x39\xb3\x29\x6b\xd8\x83\x72\x77\xce\x95\x9a\xf6\xc1\x0f\x43\x66\x49\xc4\x59\xcc\xad\x84\xb3\x4d\x02\x40\x7a\x48\xca\x9c\x03\x76\xbe\xd7\xff\x96\xc0\x4f\x66\xf1\x7b\x37\xf2\x5d\x3d\x83\x11\x0f\x16\xff\x3a\x46\xbc\x55\xf4\x18\x23\x7e\x73\x0c\x12\xaf\x05\xae\xa6\x00\x7b\x36\x4f\xda\x0f\xf7\x17\xe0\x8f\xaa\x1c\xf6\x57\x5c\xac\x76\xd7\xb3\x8d\xbd\x6c\xdc\x5c\xeb\x3e\xb5\xb4\xe3\xd6\xa6\xe0\x49\x82\x9e\x08\x69\x7b\x86\x54\xa0\x94\xc5\x86\xd7\x1b\x43\xe1\x33\xb1\x08\xf1\x5e\x7c\x01\xc2\x0d\xb2\x95\x55\x82\x16\xd3\xd8\x7b\x0b\x69\xaa\x7e\x28\x9b\x9d\xe8\xd6\xe2\xc2\x7a\x5e\xfd\xde\x69\x03\xf8\xa2\x8d\xba\xf4\x3c\x32\x7f\xcb\xf0\xfc\xbc\x0c\xcd\xdf\xb2\x7f\xc6\xcc\xf5\x71\xfb\x70\xf3\xfd\xc3\xb6\x3f\x9c\x64\x9f\xab\xe1\x0a\x7d\x6f\x52\x87\x55\xff\x31\x3a\xcb\x25\xb8\xfe\x53\xe4\x97\x7e\x8c\xe1\xf3\xd8\xef\xff\x3c\xbc\x51\x1a\x31\xcc\x23\xe9\x94\x5b\xb3\x4e\xb9\x25\xed\xd4\xc8\x3a\x35\x92\x4e\x2d\x39\xa7\x46\xca\x29\x67\x39\xa7\x9c\x25\x9d\x92\x4a\x1e\x29\xc5\xc7\x55\xa3\xdf\x94\x72\x0e\xc3\x8f\xb5\xc5\xa9\x2d\x48\x28\x52\x78\x60\xf0\xf1\x8a\x07\x32\xfe\x78\x82\x64\x82\x1f\xfb\xa3\x3f\x1e\x95\x3b\xae\xe1\xa8\xee\x91\xfe\x57\x38\x2f\x18\xef\x07\x28\x7b\xeb\xaf\xb1\x1b\xe8\x32\xd7\x3d\x87\xba\x73\x55\xea\x88\x49\xd0\xe2\x39\xae\xc5\x8f\xe8\xf8\x62\x3a\x0a\x4b\xa8\xa8\xe9\xf1\x0e\x59\x8d\x16\xb3\xf8\x71\xac\x68\x59\x63\x45\x97\xc0\x5b\x6c\xb4\x25\x31\xd2\x21\x2f\x12\x2a\xc0\xfb\x23\x1a\x72\xcd\x95\x74\x68\xec\xea\x0e\xfc\xd3\xf6\x04\xfa\xba\x5e\x4d\x29\x14\x64\x49\x99\x36\xb2\xf4\xad\x49\xfa\xd2\x71\xb2\xbe\x91\x87\x6f\xa4\x45\xc4\x39\x0f\x33\x3c\xea\xf0\x15\xae\x0b\xd5\xd4\xcb\x4f\x5e\x59\x52\xf8\xad\x29\xfd\x46\xdd\xd6\x94\xa5\xfb\x50\x16\xa0\x86\x39\xf2\xf8\x06\xf7\x5c\x54\xf7\xa8\xf0\x17\xd3\x1f\x99\xd3\x34\x74\xd3\x11\x06\x87\x3e\x8c\x0e\xb3\xb3\xd3\x5d\xcd\xf3\xd3\xc1\x05\x34\x84\x91\xbf\x24\xfa\xe1\xbf\x28\x79\xb3\xd8\xdf\x27\x81\xd6\x41\x65\xcd\xe3\x14\x3a\xc7\xd9\x1f\xf5\x58\xc0\x5f\xaa\x3d\xf2\xed\x9e\x5c\x2e\x4c\xb9\xf0\xec\xb8\x60\x84\x5a\x26\xa7\x25\x23\x4b\x36\x4b\x8b\xf9\x6a\xfb\x11\xa4\x89\xed\x09\x6f\x6d\x18\xd2\xa9\x25\x0a\x2a\x25\xc4\x4a\x12\x6b\x0f\x1c\xa8\xa5\xd9\xde\x95\xe1\x85\x8d\x77\xed\x55\xb7\xbc\x6b\x8e\x50\x4b\x93\x53\x48\x90\x67\xcc\x0d\x20\xcf\x2e\xc0\x1f\x21\xc3\x8f\x52\x65\x6f\x32\x87\xb7\x10\x48\x67\x64\xd3\xcd\x03\xca\x7a\x51\x28\x36\x32\x09\x20\x2e\x09\x87\x2d\x89\x48\x26\x67\x41\x30\x11\xf4\x5e\xc8\x21\x94\xa2\x66\x13\xa5\x00\x59\x51\x6a\x37\x59\x38\xf2\x33\xf6\x8d\x9f\x4e\xa2\x9f\x6a\xba\x22\xdb\xd5\xb6\xa0\x5b\x7c\x9b\xac\x78\xd0\x50\x58\xbc\xbb\x2c\x71\xec\x8b\x7e\x63\x51\x77\x98\x3a\xe3\x2b\x32\x96\x2d\x96\xe5\x5f\x59\xfb\xe6\x42\xf5\x4a\x41\x4b\xe0\xbd\xe3\x9a\x86\xa3\x0f\x3c\x80\xcc\x4f\x1b\xfe\x61\x50\x65\x24\x80\x3c\xc0\x47\x04\xfe\x5d\x41\x80\xa7\xa0\x4c\x5f\x44\x8c\x3e\x40\x9f\x71\x81\x80\x85\xb3\x53\x24\xa3\x32\x43\xbc\x0f\x9e\x9c\xb9\x66\x99\x7b\x9f\x61\x0c\x99\xb3\xf8\xf0\x43\x62\x2a\x13\xdc\xbb\x94\xc7\x0a\x86\x84\x89\xe4\x4b\x96\x89\x68\x38\xb3\x63\x13\x29\x63\x58\x4c\xa5\x13\xa0\x15\x52\x26\x20\xaf\x35\x79\x32\xa9\xd7\xc3\x31\x7d\x33\x21\x12\x33\x05\xc8\xe3\x6c\x0c\x22\x22\x37\x94\xf3\xaa\x6d\xc9\x1d\xa9\x27\xb6\x1c\xf5\x06\xfe\xf2\x91\xe0\xca\x8a\x2f\x26\x10\x53\x41\xbe\x53\xdc\xa8\x91\x29\x85\x6e\x1e\x87\xda\x48\x8c\x98\xa1\x2a\x96\x42\x4d\x46\xd0\x27\x68\x8a\x0d\x9b\x74\x76\xf7\x36\xe1\xd0\x62\xb2\x21\x6f\xc0\x38\x3c\xe9\x54\x8b\x72\x91\xf0\x8d\x17\x18\xae\x42\xa4\x68\x01\xff\x80\xd6\x2e\x70\xe3\x5a\x94\x8d\x42\xf8\x26\x02\x8f\x1a\xa1\xda\x7a\xb1\x14\x47\x06\x5c\x42\xae\x6c\x26\x9d\x53\xdd\x22\x3a\xfa\x4a\xa5\x50\x10\x7d\xae\xd3\x89\x89\x89\x33\xa2\x14\x94\x75\x8a\x3b\x9d\x47\x7b\xd9\x23\x04\xa8\x2f\x31\x41\x93\xcd\x7c\xc0\xba\x6b\xd7\xe1\x35\x3c\xe9\x24\xd6\x36\x57\x74\x84\xca\xa1\x61\x65\x0f\xa2\x65\xcd\xb2\x2f\x23\x67\xeb\xba\x2d\xe0\x32\x95\x8d\x20\xa6\x68\xe2\x62\xf6\x48\x71\x10\x2b\x69\x2b\x55\x2c\x15\x99\x04\x44\x8e\x8a\xe9\x69\x75\x73\x8f\x6d\xba\x24\x41\x6d\x26\x3b\x2d\xaa\x3e\x8e\xb0\x92\x6e\xac\x0d\xb8\xa0\x42\x13\x39\x43\x67\xc3\x50\xb5\x38\x0e\x46\x8e\xf1\x7f\x5d\x77\x65\xe1\x0b\x94\x3a\xfa\x03\x0f\x6d\x79\xcc\xc8\x97\x9a\x84\x86\x17\xaf\xd9\x2d\xc9\x49\xd7\x0f\x83\xb8\xb3\x24\x86\x62\x61\x3b\x20\x6d\x65\x76\xa6\xfb\x92\x48\x5a\x57\x54\xd2\x19\xa9\xcc\xd0\x67\x27\x26\x6d\xde\x71\x85\x76\x3b\xe8\xf9\x9e\xd1\x6d\xe8\xc8\x63\xa3\xc0\x7b\x1b\x90\x6e\x0d\xfc\xad\x34\x54\x90\x58\x50\xcb\x6a\x0d\x6c\x5a\x28\x1b\x48\x24\xad\x3d\x92\x10\x1c\x84\x37\x3d\x35\x0a\xb1\x07\xad\x61\x1e\xd1\x52\xf0\xa1\xeb\xe8\x67\x79\x9b\x66\xf1\x84\x7d\x23\x1d\xe3\xd1\xd9\x29\x4c\xb0\xfb\xcb\x94\x49\xe6\x88\x44\x4b\x11\x5a\x54\xdd\xd9\x84\x99\xf2\x23\x5d\xf1\x98\x43\xb6\x3c\x8e\x63\x86\x31\xf5\x9c\x68\x2c\xc1\x9a\xa5\x56\xe4\xdc\x0a\x7d\xeb\x05\xda\xfc\x1d\xad\xd0\x37\x5e\xa0\xcd\xd7\xae\xd0\x0b\xdc\x07\x4e\xaf\xd8\x7c\x4d\xa7\x14\x7d\xa5\x92\xeb\xea\x4a\x0c\xcc\x0d\x24\xc0\x4a\x16\x5d\x60\xfa\xd2\x60\xf6\x64\x48\xc1\xae\x9a\x38\x52\x32\x99\x7b\x75\x44\x5c\x92\x93\x62\x9e\x6e\x06\x7c\xa2\x5c\x13\xac\x6b\x3b\x17\x0e\xc4\xde\x2c\x58\xc0\x68\x12\xdd\x51\xba\x8e\x0c\x97\x54\x3f\x5c\x53\x85\xf2\x04\x9f\x80\x0e\x9b\xf4\xdb\xd4\x23\x99\xfa\x5c\xbf\xc5\xb7\x69\x4e\xa4\x52\x22\x49\xea\xca\xde\xb4\xc5\x76\x23\xad\x4b\x32\x2e\x07\xed\x20\x94\x46\xf7\x0b\x58\xcb\x44\x5c\x0a\xfc\x7b\x44\xa2\x39\x11\x34\x6a\x91\x74\xac\x36\x54\x1b\xa9\x0d\x14\x4e\x1f\x47\x63\xee\x8f\x66\x63\xcc\xd1\xe2\x4c\x6d\xd6\x0e\x78\x14\x00\xff\xd5\x38\x2e\x6d\x52\xe7\x08\x51\x79\x96\x5a\xcc\xc2\x8e\x62\xc7\x26\xad\xab\xcf\x9a\xc0\xef\xc1\xcc\x04\xc8\xd7\x97\x66\xdd\x0c\xba\x3d\xe2\x62\x39\xd0\xb1\x3b\x9b\x12\x97\x94\xbe\xdb\x8f\xba\xf9\xba\x5f\xec\x10\x8e\xf1\xa9\xbc\x9f\x79\x70\x68\x65\x82\x98\x56\x57\x36\xb3\x4b\xb0\xc4\xd5\xb1\x6c\x29\x5a\xb8\x64\x31\x5f\x4f\xf0\x28\x38\xee\xe0\x64\xf3\xac\x82\x16\xce\x6c\x11\x38\x7a\xa7\xaa\x47\x4e\x17\x3a\x02\x7e\xd0\x53\xf0\x50\xea\x09\xd8\xaa\x36\xb3\x24\xec\xf7\x26\x24\x2c\x3d\x17\xb2\xe4\x70\xc5\xb6\xb4\xf2\x46\x2c\x0d\x93\x24\x3e\x5a\xfa\xd4\x02\xaf\xe9\xeb\x02\x75\xdf\xfd\xfc\xf1\x87\xcf\xdf\xff\xfc\xe9\x1c\x00\x4b\x5d\x31\xbc\x21\xeb\xb5\x73\x41\x83\xfd\x09\xf6\x79\x7f\x14\x02\xd8\x1f\x47\xf1\x1d\x0e\x04\xa0\x84\x1a\x2d\x21\x0e\xd8\x5a\x3b\x17\x8c\xc5\xab\x7a\xd1\x23\x85\x61\xd7\x2f\xd9\x5b\xd8\x91\xe1\x71\x32\xb4\xd5\x52\x11\xb8\x27\x23\xd8\x5c\x79\xbf\xaa\x47\xc9\xaf\x90\xbc\x4b\xfc\x35\x7b\x0b\xc4\x13\x63\x99\x0a\x00\x69\x90\xf1\x22\xd1\xe0\xc8\xba\xb3\xd8\x80\xc8\xdd\x59\x64\x4e\x34\x1b\x80\xae\x61\x8c\x43\xbc\x81\x41\xc3\x7e\x93\xd2\x9d\x05\x43\x02\x77\x76\xef\x72\xf4\xbb\x30\x1c\xd2\x47\x1c\x11\x02\x0f\xb0\xeb\x01\x4f\xda\xc3\x88\x38\xe8\xf6\xa2\xc9\xd6\xcd\xae\xf1\x59\xc0\xcb\x04\x0a\x30\xda\x87\x1d\x0b\xcf\x6c\x06\x04\x5d\xf5\x5c\xc6\xcc\x27\x4a\x79\x06\xa5\x24\xb8\xef\x24\xc8\x2e\x88\xd5\x0a\x86\x7c\x4a\xb9\xa9\x68\x9b\x20\xfc\x32\xb7\x79\xd8\x8d\x3d\xa5\x34\x72\x0b\xc7\xe1\xae\xc5\x70\xb3\xd3\x4b\x03\x4a\xbe\x15\x57\xb8\x64\x03\x42\xae\xcd\xe4\x3f\xce\x61\xb6\x3c\xd7\x6d\xc9\x38\x0c\x6e\xb4\x1a\x98\x86\xb9\x66\xeb\x9d\x61\x5a\x13\xcf\x30\x3a\xea\x16\xc4\x59\x83\x8c\xb7\xc4\x8d\xea\x81\xd1\x73\xe2\xb1\xdc\x79\xe7\x5a\x98\x55\x54\x34\x91\xeb\xe0\xaf\x0a\xdb\x26\x84\x31\xe8\x1d\x23\x48\x68\xa5\x68\xae\xb2\x57\x85\x7f\x93\x6a\x2e\x88\xfe\x52\xe2\x1c\x32\xcc\xf5\xa1\x40\xb1\x9a\xaa\x72\x70\xec\x8b\x9e\x54\xa4\x2a\x14\x33\x37\x91\x79\x35\x99\x1d\x08\x4e\x85\x70\x1a\x5e\x20\x95\x00\x7c\x54\x71\xf1\x60\x33\x0f\x29\x12\x13\x80\x55\x06\x45\x83\x61\xd0\x18\x39\xc7\x4d\x76\x5c\xf2\xcc\x3e\x2e\x41\x2c\x25\x77\x50\x84\xd2\x5e\x72\x4a\x3f\xdc\xff\x72\x77\xf6\x9c\xd6\x47\xe7\xd4\xd7\xfa\x2d\x0e\xaa\xd1\xde\x30\xcc\xca\xa4\xd2\xe1\xd8\x2f\xb3\x79\x0a\x8c\xad\xd4\xc7\xde\x9a\x3d\xe5\x06\xe1\x4b\xb7\x1d\xc3\x2d\xcd\xf6\xa3\x87\xb3\xe6\xd1\x36\x5d\xf7\xee\x9c\xc0\x25\x10\xbc\x4f\x75\x93\x28\x5f\x21\x43\x2f\x12\x79\x58\x90\x54\x0e\x47\xe0\x0a\x0e\xc7\x8c\x83\xbb\x28\xc2\x2d\x7d\xea\xe1\x48\xb9\xf5\x9c\xb9\x71\xf0\xdc\x72\x10\xc7\x29\x0f\x8f\x8f\xac\xee\xbd\x71\x96\xfb\x38\xdb\x47\xc7\x7d\x50\x80\x03\x55\xe8\x2b\xa9\x30\xda\x31\x27\x5c\x63\x34\xe8\x4a\x64\x3d\x07\x74\x44\x7a\xfa\x31\x4d\x32\x3a\x35\x37\xcb\xdc\xa9\x34\xac\x1b\x49\xd3\x1d\xdb\xb0\x4d\x40\xee\xba\x5b\x28\xe0\x4e\x69\x22\x3c\x76\x07\x95\xec\x83\x6c\x7e\xd9\xd8\x69\x4d\x3c\x40\x0b\x94\xb8\xd9\x5e\x52\x3a\x80\xcd\xb5\xd3\x0b\x67\x86\xd4\xd4\x68\x6c\x41\xd3\x23\x57\x93\x60\x21\x2c\x22\x22\x05\x93\xb9\xee\x5e\xb7\xee\xe9\x47\xa8\x78\x10\xc2\x74\x3a\x53\xa4\x2a\x23\x41\xb9\xe9\xe7\xb8\xac\x0a\xdf\xc0\x94\x23\xdc\x5c\x61\x7d\xc0\xc9\x02\xae\xac\x32\x80\x6c\xde\xce\x9c\xd2\x0e\x28\x8f\x5f\x7b\x92\x37\x3b\xa5\x03\x02\x12\x09\xc2\x30\x63\x3e\x23\x89\x04\xca\xb9\x8b\xf7\x24\xb2\x63\x16\x84\x17\xea\x1f\xe0\x32\x4a\xeb\x03\xf6\x1d\xc9\xbc\xe7\x6c\xd4\x6c\x21\x58\x50\x56\x29\xff\xa8\xd4\x4c\x57\x2b\x17\x5a\x08\x1d\xb2\xa4\x83\xf9\xca\x6d\x56\xc2\x58\x02\x0d\xfa\xf8\x4c\x1a\xa9\x9b\x87\xef\x77\x37\xd3\x49\xa0\x7e\x3d\x71\x66\xaa\x2d\x1f\xeb\x0d\x13\xbc\x1f\x43\x68\x93\x8b\xe6\xb5\x93\xed\x26\x53\x69\x01\x34\x51\x66\x25\xbe\xb0\xcf\x0f\x6f\xf0\x81\x0d\x16\xc6\x89\x24\x21\xf1\x53\xcd\x94\xbc\x9f\x5c\xc8\x91\x42\x8a\xb3\x5e\x03\x48\xed\x9c\x2c\xc0\x3c\x14\x4a\x99\x62\x9e\x92\x17\x2a\x61\x12\x7d\x90\xe0\xbb\x15\x99\x90\xbf\xe3\xea\x10\x77\xdb\x9b\x87\xfe\xfd\xf6\xe3\xa7\x7e\xaa\x1d\xbd\x79\x2e\x4e\xb7\x61\x99\x91\xd0\xdd\x06\x11\xe0\x03\xde\xea\xdb\xc5\xcb\x7d\xe0\xd5\x44\xa4\x50\x6e\xd5\xd8\x5c\x25\x01\xe6\x4f\xc6\xc6\xa5\xc5\xee\x4c\x77\x86\x90\x6a\x6f\x96\x36\xcb\xff\x00\x9f\xf1\x66\x1c\x1b\x7c\xb2\x2c\xdf\x6d\xc5\x4d\x65\x06\x39\xbc\xaa\x6f\x5a\x75\x80\x08\x65\xb1\x30\x79\x6d\xd3\x55\xf4\x00\xe9\x06\xcd\x1a\x62\xbd\xd2\xf3\x6f\x5d\x95\x61\xd2\xb3\x6b\x30\x57\xe2\x5a\x4c\x6d\x98\x2a\x1c\xd3\xfd\x94\xaa\xd2\xca\xb6\x99\xb9\xea\x63\xfb\x2f\xac\xa6\xcc\x36\x0c\xd0\xc8\x67\x8d\xa0\xb0\xe4\x27\x97\x05\x6e\x3c\x47\xa9\x2c\xa0\x46\x50\xf9\x2d\x12\x57\x2d\x10\x29\x7b\x59\x01\x4f\xe0\xd8\x9b\xbb\xa5\x55\x18\xe8\x16\x95\x06\x28\x8d\x05\x88\xf3\xc0\x9b\x33\x89\x4c\x20\x9a\x16\x0a\x4a\xea\xe0\x7e\x11\xe7\x8c\xa3\x65\x87\x46\x2c\xbd\xb4\xca\x4d\xb5\x9b\xa7\x2d\x38\x77\xa5\x37\xb9\xea\x85\x0a\xb6\x81\xf2\x78\x6a\x7e\xdd\xa2\xac\x5c\xb7\x2a\x04\xb1\x96\x02\x44\x88\x60\x1e\x23\xb1\x33\x04\xde\x78\x3d\xfe\xfb\xf3\xed\x4f\x77\xf7\x3f\x9f\xde\x79\x3f\x3c\xe3\xba\x65\x11\xf9\x91\x10\x58\x6a\x7c\xbc\xd8\x2d\x30\x62\x09\x2d\x96\xd5\x78\x92\x85\xcd\x5f\xb2\x08\x5c\xb5\x62\x0d\x3b\xd2\x45\x23\x96\x56\x71\x2d\xa7\xfa\xd7\xf5\xe9\x52\x5a\xe9\xe2\xe3\xa5\xb4\xd2\x52\xeb\x8e\x79\x87\x5f\xb0\x35\xc7\x67\xe8\x15\x92\x4e\x2f\xb0\x6b\x99\x27\xa4\x32\x7f\xb9\x9e\xf3\x81\x48\x08\xed\x1b\x98\x6c\x57\x20\x15\x6b\xbd\x8c\x9c\x76\xd6\x3d\x38\xc6\x25\x5a\xe9\x02\x1a\xe1\xd2\xf0\xcb\x9d\x18\xa6\xdb\xbb\x3f\x6d\x3f\xdc\x9e\xc7\x4f\xaa\x2b\xcc\xba\x00\x7c\x44\x76\x12\x78\x9f\x5b\xdc\x39\xfd\xe2\x72\x8b\x5f\xde\xc5\x1a\x0c\x69\xc4\xb1\x29\x9b\x33\xd5\xdc\x95\x89\x0b\x51\x29\x00\x26\x30\x0e\xdb\x87\x33\x0e\x2f\xf1\x60\x21\xc0\x32\x22\x5a\x17\x82\xc4\x8e\xe7\xa4\x3b\xa9\xa5\xe1\xa0\x9f\xc1\x54\x7e\x79\xc7\x5e\xc9\xc3\xe8\x40\x68\x08\xd8\x02\xf6\x72\x20\xc4\x14\x70\x0b\x54\x8e\x0c\xb1\xde\x22\xcb\x77\xb2\x67\xcf\xe8\xad\xb2\xdd\xb6\x25\xb4\xff\xa8\x06\x33\x19\x2a\x29\x2d\x57\x16\x2d\x28\x0d\x37\xda\x59\x22\x6c\x15\x9b\x99\xd9\x62\x9f\xe0\x9c\x50\xf6\x2e\x14\xfe\xfd\x0c\xec\xdf\xce\xbe\xfe\xe9\xe7\xcf\xbb\x4f\xb7\xa7\x0b\x7c\x8a\x15\xc2\x69\x4d\x84\x59\x3d\xe5\x22\x03\xc4\xef\xb1\x19\xb8\x3f\xc9\xcc\x31\xfc\x68\x2f\x59\x80\x87\x85\x77\xd8\xc9\xce\x39\x5c\x45\x69\x13\xf4\x4e\xb1\x86\xd9\x8d\x1b\xdb\xee\x29\xf1\x87\xe3\x6d\x09\x0f\x96\x04\x55\x41\x48\xca\xa4\x5c\x5c\xac\x69\xe7\xa2\xbf\xe8\x77\x29\x81\x60\x38\x10\xa3\xcc\xc0\x23\xd3\x4b\x08\xa9\x51\x8e\x83\xeb\x36\x67\xbc\x4b\x77\x7a\xc6\x4f\xc3\xdc\xfa\x13\xf7\x54\xf3\x35\x6d\x08\xb8\x37\xc0\x33\x5c\x73\x66\xb0\x90\x67\xc3\x3b\xb6\x7f\xee\xdb\x87\xbb\x9b\xe9\x7b\x3d\x92\x27\x0b\xb5\x7d\x4e\x6f\x96\xbd\x05\x44\xbe\x60\x37\xd6\xe7\x1d\x0f\x0c\xf0\xe8\xf2\x6e\x54\x92\xfe\x14\x77\x69\x85\x94\x39\x81\xa9\x02\xee\xf3\x95\x34\xff\xaf\xcb\xf2\x3f\xe0\xb0\x1e\x45\x5c\xe5\xd3\xee\x2c\x56\xf2\x58\xe4\xe0\x05\x7c\x05\x96\x13\x01\xc4\x79\x72\x19\x5a\xd4\xf4\x75\xb0\x9c\xfa\x72\x4e\xb2\x56\x77\xc5\xeb\xef\x6b\xf2\x0f\xdf\xfe\x74\x77\x7a\x88\xdb\x01\x00\x9d\x6b\xfc\x7b\xb8\x90\x86\xef\x69\x93\xd5\x17\xf8\x99\x1d\x6b\x4c\xc6\xa5\x50\xc1\x01\xf8\x44\xe2\xcd\x0b\x15\x2c\x42\x30\x00\x05\x80\x18\x2c\x5a\xd8\x3c\x98\x8d\x33\x9b\xca\xfa\x01\xab\xbd\x85\xbf\xba\x11\x35\xeb\x30\x2b\xac\xa2\x75\x18\xca\x62\x1e\x9f\xa1\xbb\x0a\xa5\xb0\x2b\xa0\x88\x0b\x3c\xd5\xeb\x3a\xf3\xf5\x44\xbd\x3f\xdc\x7f\xda\x9d\xc8\x0f\x8d\xaf\x66\x79\xae\x94\x53\x98\x5d\x89\xc4\x88\x94\x8c\x14\xe0\x9f\x94\xb2\x5e\x66\x03\x94\xc9\x6e\x6d\x38\x9c\x0d\x55\x01\x1f\x7b\x0c\xb7\x91\x49\x73\xb9\x69\x0b\xd0\xe2\x79\xe6\xc8\x24\x7a\x28\xe1\x63\xc0\xa1\x37\x73\x57\x93\xd5\x23\x3f\xe5\xd5\xe1\xb3\x28\xb1\x5f\x24\x80\x21\x9f\x30\xa0\x9a\x4b\x58\x10\x21\xc5\xd2\x87\xc5\xa8\x72\x89\x99\xfb\x0c\xce\xac\x2d\x48\xea\x00\x51\x30\x19\xc6\x5c\xa9\x17\x4b\xf1\x40\xb1\x37\x65\x42\xe3\xcd\x00\xb8\x0c\x65\x2e\x00\x3d\x31\x78\x21\x04\xd8\xa4\x91\x47\x08\x89\x7a\x2e\xd1\x30\x23\x9a\x4f\x83\x3f\x51\x3a\x37\x4a\x96\x45\x08\x89\x6f\x50\xb3\x56\x3c\x67\xbd\xa5\xd0\x2e\xa0\x48\x74\xe3\xf2\xd0\xe5\xa2\xa3\xa6\xcd\x45\xff\xcd\xd1\x30\x05\x00\x55\xb5\x44\x0d\x8a\xbc\x40\x10\x26\x12\x2c\x08\xa6\x35\x08\x43\x2e\x61\xc4\xb9\xf9\x6e\x73\xc8\x31\x0c\xf7\xd6\x27\x08\xab\x52\x75\xb9\x36\xe7\xe2\xc1\x53\xc9\x97\x23\xbb\xf5\x54\xbf\x12\x98\xf5\xa7\xdb\xbe\xfb\xf9\x87\xb3\x8c\x64\x5b\x3d\xf8\x12\x37\x0a\x21\xcf\x91\x32\xb9\x40\x1c\x66\x07\xf7\x4d\x8e\x24\x50\x32\x67\x58\x61\xa0\x40\x2d\x60\x3a\xe4\xcb\xbb\x08\x3c\xf6\x32\xbb\x84\xa2\x42\x7a\x9d\x90\x01\x5e\x30\xe2\x7a\x2a\x70\x34\xd2\x9c\x09\xaa\xc2\xf0\xe5\x5d\x4c\x9e\x22\x97\x19\x80\x72\x88\x2f\x2d\x24\xb0\x22\x0b\x6c\x12\x89\x80\x6a\xa9\x7f\xeb\x3d\xf2\xe5\x5d\x2c\x4c\xa1\xc5\x59\x88\x89\x0d\xa1\xad\xbb\x61\xf6\xd1\xe6\x2c\x7a\x28\x58\xb8\x8d\xf9\xa2\x00\x17\xe5\xcb\xbb\x94\x0a\x05\x6e\xb3\x68\x99\x46\xcc\x3a\xa6\x91\xac\x3f\x6e\xc0\xcd\x18\x28\x39\x43\x2d\x4c\x3a\xfd\x5f\xde\xa5\xd6\x28\xc0\x03\x1d\x96\x2a\x32\x84\xcd\x71\xe5\xd4\xae\x75\xe3\xdf\xfa\xe5\x5d\x0e\x95\x82\x80\x2f\x32\xac\x8d\x04\xc6\x4b\x5b\x1c\x23\xcf\xa0\x2d\x7e\xf8\x66\xd8\x15\x20\x38\x51\xc9\x13\x82\x3f\x43\x86\x7e\xc4\xbe\x38\x7c\x03\xa8\x4e\xc8\xa6\xe1\xca\xc5\x0c\x06\x1e\x48\x63\x09\x79\xbc\x80\xe2\xa8\x3f\x82\x8a\x51\xea\x60\xa1\x06\xe8\x80\x63\x6c\xd2\x0c\x40\x24\x3b\xa7\x43\x9f\x68\xa1\x4a\x2e\x56\x8a\x9b\xee\x0c\x68\x4f\xaf\x4f\x25\xd8\x11\x2a\x06\x09\xd0\xde\xa5\x42\xc5\xb0\x3e\x60\x5d\xa2\xf0\x36\x4d\x0e\xda\x0a\xf3\x7a\x88\x06\x1c\xda\xec\x11\x30\x44\x90\xcb\x10\x56\xcd\x15\xac\x08\x9a\x9b\x81\xb1\x64\x6e\x2c\x51\x0c\x64\x0f\x70\x4f\x55\xdf\xd5\x37\x94\x28\x14\x3d\x03\x21\x50\x6e\x88\x2d\xce\x66\x81\x82\x36\xa2\x04\x0a\x6d\xe8\x00\x4a\xee\x90\x2a\x09\xa1\x0f\xb3\xa7\x02\x84\x78\xa4\x7b\x92\x48\x59\x28\xc1\x57\x8c\xb5\x0a\x4b\x74\xa5\x3d\xb5\x28\x0b\xc4\xf1\xe0\xfa\xcd\x9b\x39\x55\x62\x68\xca\x89\x4b\xb7\x58\x72\xb8\x3a\x14\x0b\xd9\xe1\xda\xd1\xa0\xe4\x9e\x0a\xb5\x59\x8c\x9a\x26\xf3\x6d\x4b\xba\x4f\x2b\x01\xaf\x25\x18\xce\x70\x19\xd6\x34\xef\x0f\x73\x0d\x94\xc5\xb0\x10\xca\xee\xf2\x70\xcd\xea\x50\x3a\xe0\x88\xc0\xfb\x06\xce\x21\x4a\x3a\x07\x5c\xa8\x71\xd4\xcd\xee\x29\x67\xf8\x56\xba\x11\xed\xf6\x19\xa1\x22\x69\x56\x41\x2b\x09\x19\xe2\x0b\xe4\xb5\x4a\xd8\x26\x4f\x05\xa1\xcd\xdf\x83\x24\xf4\xf3\xa7\xe9\xfe\xe6\xc3\x39\xab\x40\x7b\x06\xfa\x45\xcf\xd5\xaf\xb5\x13\x58\x86\x9a\x5f\x5b\x8b\xde\xa5\x0b\x00\xca\x45\xec\x57\xe4\x80\x3f\x83\xfd\x1a\x16\x70\xda\x47\xa8\xe3\x52\xe0\xcb\x9e\xf2\x00\xa4\x6c\xb2\xe9\x43\x4f\x18\x2c\x9b\x35\xac\xac\xf6\x53\xc8\x1d\xa5\x9a\xe0\xc5\x33\xf7\xc4\x3b\x0e\xa1\x51\x0b\x03\xaf\x49\x3b\x08\x75\xbd\x1f\x9c\xc6\x45\x98\xfc\xa7\x29\xba\x1f\x61\xc9\x2f\x78\x10\x10\xd7\x00\x7e\x81\xea\x43\xd3\x8b\x22\xb7\x29\x2a\xc9\x89\x15\xb9\x67\x9f\x04\xc8\xe8\x23\xb4\x0a\x17\x45\x13\x67\x9f\x41\xc2\x9b\xb6\x1f\xef\x4f\x6f\xb2\x78\x48\x97\xe3\x0b\x12\xf4\x7b\x78\x6f\xe1\x6a\x1d\x26\x45\xe0\x3e\xea\x51\x0a\xe6\x15\x1a\xa3\xd2\x6b\xa0\x01\xb8\x48\x23\x84\x41\x69\xa0\x29\xfe\x12\xc1\x69\x63\x58\x7d\x3c\x25\x65\x76\xe0\xfc\x15\xc8\xc2\x8d\xa1\x48\x34\x0b\xbc\xcd\xe3\x5b\x03\x43\x19\x9e\x0f\x12\x3b\x80\x13\x24\x2e\xe0\xaa\x83\x81\x33\x45\xed\x02\x06\x36\xa0\xf1\x02\x50\x7a\x8a\x31\x53\x62\x36\x0c\x33\x2a\x22\x95\x14\x0f\x5b\xcc\x30\x35\xc3\x73\x2e\x2f\x40\x9b\x80\x39\xd8\x8c\x3d\x37\x92\x31\x8a\xef\xcb\x37\x0b\xce\x45\x60\xaa\x4a\x74\xc6\xa7\x0c\x44\x5f\x80\x57\x19\x20\x82\xb1\x3f\x06\x77\x6b\xa0\x9b\xdc\x47\x7e\xac\x39\x19\x68\xf0\x51\x14\xe3\xe1\xfb\xcc\x15\x4e\x62\x35\x92\x12\x5f\xc1\x1a\x0f\x6e\xd3\x2c\xbb\x39\x8f\x34\x54\xc9\xa0\xb6\xed\xcc\x25\x2a\xc3\x2f\x22\x83\x5c\x92\x0b\x62\x4c\x54\xc3\xb5\x81\xb3\x81\x34\xd3\xde\x16\x2e\x9a\xca\x18\x08\x0d\x51\xaf\xf0\x64\x01\x29\xc5\x2f\x26\x83\xdc\xf0\x0d\xd7\x81\x37\xee\xd3\x46\xa5\x17\xc9\xf2\x7d\xd6\x09\x05\x51\x05\x1f\x61\x46\x76\xb3\x8f\x8e\x3d\xa0\x92\xa4\x9e\x42\xfd\xb7\x0c\xcc\x68\xcb\x42\x69\x5a\x8f\xf1\x9d\xcd\x35\x96\x61\x20\x44\x94\x81\x25\xc2\x15\x6f\xa8\xe5\xa8\xb3\xc5\xae\x37\x3a\xa7\x3c\x97\xaa\xf7\xab\x04\xd1\x7a\x66\x6e\x91\x4a\x55\x66\x83\x4a\x9d\xb1\x6d\x46\xfa\x16\x89\x23\x31\x99\x13\xc8\x68\x9e\x52\x21\x65\x88\x29\x6d\xe6\x6a\x07\xbe\x12\xfa\xdc\x2d\xd3\xe0\x82\xaa\x08\x0e\x0a\x04\x27\x2d\xfe\xc9\x1c\x00\x14\x36\x1c\x43\x80\xfa\x56\x56\xfd\x0d\x72\x04\xe3\x96\x8e\x4b\x60\x76\x05\x2a\xb9\x03\x4a\xc6\x75\xe5\xd5\xee\xfe\x14\x65\xad\xa5\xe7\x60\x6e\xa5\x2d\xc9\xab\xcd\x41\xd5\xd4\x48\xbc\x38\x0e\x81\xdc\x61\xba\xc5\x02\x84\x60\xad\x00\x6f\x5e\xb3\x45\x25\x99\x96\x29\x05\x32\x74\x9d\x15\xce\x1e\x32\xa2\x1d\x46\x5c\xde\x66\x80\x6c\xc0\x50\xd7\xcb\x31\x19\x8e\x49\x0d\x96\x6e\x06\xa0\x83\x4a\xb2\x39\xc3\x52\x4f\x32\xcc\x7d\xa5\x98\xab\x3a\x32\x30\x81\x43\xac\x14\xdb\xd0\x75\xd9\x76\x81\x9c\x10\xcb\xd8\x09\xa9\xac\x4c\x69\xb0\x18\xcb\xa4\x5b\x42\xf9\x8c\x4c\xb0\x17\xfa\x4c\x2c\x32\x4b\xb2\x8d\x05\x4b\x82\x11\x6b\x5e\x90\xb2\x95\x00\x82\xad\xcb\xe0\x2c\x0a\xdc\x36\x95\xca\xc0\xcf\x2b\xf6\xb0\xa0\x03\x19\x68\xc1\xdb\x34\xc3\xbf\xcd\x62\x5b\x24\x99\xf3\x83\x59\x7b\x8b\xf9\xb6\x0f\x9c\x4d\xf3\x73\x77\xca\x5a\x2a\x8f\x99\xd2\xf8\x54\x21\xca\x7c\xb2\xcd\xbc\x4f\x0b\xcc\x40\x5d\xb7\x07\x18\xfd\xb8\xa8\xdd\xdb\x6c\x0e\xec\x85\x00\x23\x23\x21\xa9\x1c\x0a\x50\x99\x19\x8c\x27\xd4\x09\x3c\x60\x05\x39\x6e\xfa\xaa\x1d\x1c\x6e\x4c\xe0\x5b\xe1\x19\x07\xa4\xa4\x14\x28\x4b\x4f\x09\xff\x5a\xb4\xf4\x98\x0c\x74\xa1\xf4\x05\xa9\x1b\xbc\xaf\x99\xde\x67\x7c\x31\x68\x25\x58\xb1\xf2\x88\xd2\xed\x48\x8e\xe6\xe7\x62\xa8\x95\xda\xd5\x14\x74\x8e\x8a\xa1\xee\x3d\x07\x54\xf1\xfe\x4f\xe7\x0d\x7f\x2d\x5f\xdb\xd1\x0c\x93\x53\x5d\x22\x75\xbf\x99\x36\xcd\x5e\x38\x55\x7c\x0c\xa7\x06\x63\xee\x46\xad\xbf\xbd\x5e\xb1\x06\xd9\xfc\x0a\xe6\xee\x87\xfb\xfb\x3f\x7d\xbc\x79\xb8\x34\xc1\xa7\x80\x28\x52\xd7\xd8\x6d\x4e\x32\x26\x78\x89\x4b\x8d\x32\x45\x09\x14\x7d\x9e\x6a\xa3\x9a\xf4\x5f\x57\x13\x7e\x74\xd1\xe7\xbd\x16\x01\xe6\x7f\x1c\xc9\x25\x94\xda\xeb\xc5\xd1\xe6\x60\xf2\x9f\xe9\x26\x22\x8f\xb0\xfc\x6c\x58\x6f\x6d\xc1\x07\x5e\x7e\x5d\x50\xd2\x17\xf4\x91\x61\xb2\xac\x2b\xf6\x55\xa0\x20\x93\x8b\x91\x29\x02\xdb\x1a\x6e\x13\x7a\xdd\x23\xb2\x3c\xa0\x84\x0b\x01\x92\x15\x3c\x30\xa8\xcd\xfa\x3b\xfc\x48\x05\x72\xd7\x90\x68\x0c\xce\x07\x0e\x4b\x21\xd2\xf8\xa9\x8f\x32\xca\x03\x36\x1d\x41\xdb\xb1\x8f\xf5\x79\xaa\x7c\x5e\xda\xaf\x8f\xe2\x41\x83\xe5\xcd\x64\xf8\x61\x67\x30\x48\x86\x19\x0d\x0c\x06\x59\xdc\x5b\xcc\xb0\x07\x28\x78\x64\xf7\xb2\x84\xc4\x2a\xf3\x07\xd3\x1d\x06\x38\x63\xb1\x11\x71\x60\xc2\xc2\x06\x90\x0f\x36\x02\x03\x9f\x8f\x69\x71\x40\xc3\xb7\xb0\x3c\x9f\x9d\x5d\xe2\xd9\xc4\xc9\x6e\x42\xab\x31\x29\xc3\xcb\x9e\x23\xe1\x6e\x68\x8d\x52\x1a\xf7\xbd\xf5\x4b\xe9\x38\xe0\xe1\x55\x5c\x0d\x96\x85\x8c\xa3\x29\x21\xb9\x74\x07\xa7\xcd\x64\xce\x35\x03\xce\xd4\x30\x3d\x40\x99\x10\x50\x1a\x87\x43\xa8\x7e\xae\x5a\xc0\x30\x0a\x2a\xe9\x55\x52\x0d\xb8\x4d\x80\x66\x23\x82\x29\x10\x0c\x4f\x03\xef\x4d\x4c\xaf\xb4\xe0\x01\x94\xe5\x37\x63\x15\xcc\x6f\xd4\x62\x69\x96\x8d\x03\xe7\x32\x91\x01\xfb\xcf\x84\x54\x6c\xcd\x54\x1b\x70\xca\xf4\x23\x7c\x67\xa4\x5c\x0b\xb1\x27\x43\xd7\xea\xf0\x60\x83\x13\x3f\x9c\x41\x8d\xc5\xd3\x5f\xc0\x40\xc3\x0f\x84\xed\x52\x33\x9c\x6e\x6f\xf9\x28\x07\xae\x46\x86\xbc\xee\x06\x0b\xcc\x86\x2a\x2c\x0b\x26\xbe\x63\x8f\x5f\xda\x70\xf6\x31\xa6\x10\xfe\x4d\x60\xff\xf0\x6b\x88\xa6\x3f\xac\x08\x53\x48\x81\x44\xf4\x8e\xfb\x5b\x35\xbf\x6d\x5e\x10\x3e\x7d\x72\x52\xae\xe6\x2c\xca\x82\x5c\x22\x75\x76\xb9\x10\x5c\x2a\xa0\xb2\xe5\x5c\xe0\x27\x08\x11\x21\x0e\xf4\x1e\x6f\xfe\x85\x62\x3e\x16\x3c\xf4\x31\x71\xa4\x77\xb7\x6e\x1a\x8c\xa0\x24\xb8\xe7\xe4\xee\x02\xb8\x38\xe3\x62\x87\x7b\x6d\xcb\x70\xae\xd2\xcb\x16\x3c\xa3\x8b\xb3\x00\x63\x3b\xfa\xc5\xaf\xdd\x03\x0f\x96\x6b\xa5\x6c\xac\xb0\x76\x04\xf1\x38\x70\x74\x02\x4e\x7c\x9a\x21\x86\x54\x70\xf4\xe6\x16\x12\x86\x42\x49\xb9\xd8\x95\x4b\x16\x9f\xde\xa6\x3d\xa2\xc3\xb5\xfb\xc8\x7b\x1d\x79\x83\xeb\x2d\x1a\x4e\x1f\x31\xe3\x64\x23\xdc\xc4\x53\x85\xcf\x12\xe7\x30\x23\xb2\x9c\x63\x23\x31\x61\x47\xcc\xd9\xcb\x42\x31\x1b\x7c\x58\x2d\xa9\x65\x25\x0b\xf6\x0c\xd1\xf4\xda\x22\xc6\x27\xe8\x11\xd6\x1f\x16\x7f\xa7\x90\x47\x52\x65\xdf\x94\x49\x12\x9f\x94\x5d\xb6\x80\x22\xf3\xdd\x17\xf3\x79\x6a\x48\xb6\xc3\xf0\x11\x7a\x51\x54\xf3\xc9\xb2\x9f\xba\xf8\x78\x59\x96\xbd\x25\x1d\xab\xde\x40\x92\xe3\xce\x71\x2a\xab\x93\xbb\xb2\xcf\x2a\x8b\xe1\x4c\xf9\xba\x57\x21\x6d\x27\x2d\x4c\x88\x0b\x14\x53\xcb\xc7\xbd\x2b\xa9\xed\x5c\xf0\x79\x8f\x2f\x92\xd2\x5e\x9f\xe1\x93\x61\xcb\xad\xca\x2d\x42\x87\x80\x80\xd5\x62\x01\x81\x33\xc7\x02\x2f\x8c\xe7\xe1\x73\x4d\xd7\x7b\x32\xae\x1f\xbe\x3a\xdf\x92\x85\x1e\x60\x45\x0d\xa1\x64\xc0\xd4\x0d\xeb\xa9\xc1\x3b\x2a\x2b\x9f\x20\x41\x14\x50\x48\xa4\x37\x09\xe4\xa1\xb1\x1b\x6e\xfb\x8b\x88\xd2\x8a\xc1\x2b\x47\x51\x9a\x92\x6d\x84\x4a\x1f\x5b\xa4\xd0\x7a\x65\x82\x7c\x9a\x02\x80\x16\x2d\xce\x3e\xf9\x21\x67\x19\x8c\xb9\xf8\x3c\x5b\x32\x50\x57\xc9\xe0\x78\x2a\x21\x00\xd3\xfc\x24\x9b\xe8\x4d\x3b\xd9\xc1\x53\x29\xb1\x85\xa1\xd7\x11\xb8\x13\xe9\xa7\x13\x03\x7f\x62\x36\x77\x48\x92\xd2\x5d\x05\x42\x4b\x1d\xc2\x39\xac\x46\xa6\xfe\xd0\xeb\x1a\x92\x52\x9c\x81\xa3\x5e\xcb\xc0\x53\x37\xfc\x82\x9a\x86\xdf\x3e\x27\x6f\x57\x36\x90\x2c\xab\x79\xbe\x14\xc4\x02\x84\xb6\xc4\x66\xaa\x34\x82\x94\xa8\x79\xb8\x25\xab\x94\x8f\x43\xe3\x87\x01\x10\x42\x8d\x52\x5f\x4b\xb0\x63\x40\x8d\xe6\x04\x25\x23\x65\x4d\xd0\x31\x56\x78\x9f\x76\x43\xd1\x54\xfe\x43\x3c\x85\xc5\x91\x4e\x4c\x1f\xb1\x81\x24\x88\xb3\x0d\xcc\x46\xa0\x0f\xb1\x4c\x5a\xff\x6c\x22\x16\x0d\x9c\x9b\x3a\x7c\x42\x13\x4f\x66\x5e\x05\xee\x52\xc0\xc9\x36\xb4\x87\x5c\x0c\x27\xd0\x12\x82\x99\x8a\x34\x58\x24\x99\xb9\x15\x56\x32\x86\xbf\x8e\x55\x37\x32\xe6\xcd\xdb\x8b\x87\x93\x7a\xb4\xb8\x3c\x15\x83\xe1\x7f\x6d\x1e\x00\x23\xe9\x9b\xa1\x82\x27\x93\xac\x75\x97\x3e\x9b\xa7\x4b\x1a\x53\xf0\x2a\x0d\x21\xec\x8f\x47\xba\xca\xa1\xe8\x37\xab\x42\x31\x03\xc5\xdc\x60\x1e\x08\x24\x5f\xde\x05\x11\x92\xc2\x73\x81\xd8\x63\xe1\x0e\x1e\xc2\x5e\xd6\x49\xc4\x96\x06\x55\x5f\x93\x1c\xea\x29\xff\xf2\x2e\x24\x21\x91\x3c\x37\xc2\x95\xd8\x94\x9c\x61\x4e\x0b\x19\x4a\x77\x32\x27\xf0\xce\xda\x9d\x2f\xef\x42\x8b\x48\x58\x52\x09\xb1\x11\x23\x50\x0e\x5e\x7f\x58\x2d\xb0\x95\xe0\x39\x67\x36\xff\x0a\x00\x9d\x7d\x79\x17\x55\x86\x4c\x6d\x36\x9c\x77\x65\x3c\x10\x91\x61\x65\x75\xfa\xd1\x6a\x02\x0a\x1b\xac\xbc\x19\x88\xd0\x71\x50\xe4\xd1\x27\x10\x7a\x23\x53\x19\xa6\x8e\x91\x95\x0c\xd4\xd3\xbc\x86\x71\x0c\xbe\xbc\x4b\x45\x67\xc1\xf4\xfe\x90\xb6\x81\xa0\x00\x73\x90\xe9\xb6\x91\x98\xcb\x55\x15\x0a\xf9\xba\xaf\xdb\xcf\x77\xd3\xfd\xfb\x53\xf2\xfa\xfe\x59\x18\xaa\xec\xf7\xab\x05\xf3\x8c\x0e\x32\x9f\xc7\x6c\xb4\x37\x5e\x14\xff\x8b\x94\x64\xbb\x96\xcf\xa6\x6c\x1c\x29\x0f\xce\xa9\x6d\xc1\xaa\x9c\xd1\xda\xda\x2b\x4f\xb4\xb6\xb9\xc8\x82\xfb\x5a\x47\xba\x15\xcb\xb3\xd2\x8f\x12\xb0\x6c\xfa\xa3\xdc\x2c\xc7\x69\x5b\xae\x4b\xaa\x0f\xdb\x0f\xb7\xfd\xfb\xf7\x37\x0f\x1f\x4e\x26\xf8\xc3\x35\x10\xac\x92\xbd\xd1\xfe\xf3\xc6\xc5\x05\x76\x69\x88\x9c\x6e\x95\x39\x55\x48\x75\x0c\xbf\xcd\x83\x74\x3b\x84\x5b\x7d\x73\xbc\x78\x62\xc7\xd4\x57\xbe\xbc\x03\xa6\x9e\x54\xff\x0c\x58\xb7\xc4\x9d\xee\x80\xbd\x48\xbc\x02\xfa\x3d\xaa\xd4\x91\xf8\x0b\xf8\xdd\xfb\xec\xab\x16\xcc\x71\xef\xb2\xaf\x9b\x2b\x18\xe0\x56\x9b\xc1\x3f\x54\x20\x3f\xc8\xb0\x83\x43\xa1\xfd\x05\xee\x97\xcb\xa3\x05\x13\x02\xe8\x10\xd7\x01\x9c\x3e\x9f\x84\xd7\xb5\xed\x15\x15\x42\xa8\x71\xc4\x24\xb9\x81\xac\xe0\x56\x68\x05\x97\x8e\x30\x16\x06\xe6\xc2\xf8\x18\xbf\x2e\xa5\xc6\x6b\x96\xb6\x30\xc3\x04\x69\x56\xad\x81\xc6\x53\x4d\xce\x88\x80\x59\xdc\x39\x0e\x09\xce\xd3\x1e\x6e\xfe\x26\xf7\x89\x5f\xcc\x80\x42\x96\x03\xc6\xb2\xbc\xb7\x81\x4c\xcb\x96\x7a\xe9\xad\xbd\x29\xc3\x4d\x40\xfc\x90\x71\x62\xd8\x6b\xad\x1e\xae\x06\x8c\xf0\x8a\x02\xd8\x00\xa5\x36\xbb\x34\x1b\xde\xa3\x72\x07\xd9\x02\x67\x36\x1d\xa9\x0f\xb8\x6a\xa3\x23\xa5\x6c\x20\x1e\x10\x2d\xa9\x8d\x0b\xf4\xff\x65\xef\xdd\x97\x9c\x38\x96\xed\xe1\xff\xf5\x14\xf5\x02\x45\x54\x66\xdd\x63\x3f\x03\xcf\x40\x0c\xc3\xd8\xe2\xdb\x6d\xa0\xa1\xd1\x39\x87\xa7\xff\x22\x57\x66\xb5\xa4\x91\xd4\x33\x03\xd8\xd8\xfb\xb7\x23\x6c\xd4\x23\xf5\xa5\xba\x2e\x59\x79\x5d\x2b\x86\x62\x4e\x8f\x52\x67\xab\x2e\x45\xf2\x70\xb5\xd7\xd2\x9a\x51\xcf\x61\x8f\xa4\xe5\x21\x21\xd2\xca\x63\x06\x6b\x3a\xb1\x39\xff\x19\x4a\x63\x20\x97\x82\x5a\x6f\xba\x3e\xa1\xc0\xc5\xe2\x58\xd9\x91\xf0\xa3\x68\x27\x78\xd9\xa1\x25\x58\x29\x7d\x7d\xa5\x44\x65\x07\x4d\x92\x66\x51\x43\x5c\x2a\x08\x70\xa8\x22\xdc\xf6\x71\x66\x58\x05\xd1\xe5\x40\xc3\x21\x9f\xd8\xd0\xfe\xd2\x6e\x46\x56\xb5\xa8\x7c\xe0\x30\x4f\xca\x63\x86\xdc\xe4\xf0\x54\x4e\xda\xfe\xdd\xc5\xda\xbf\x3b\x66\x1b\x85\x14\x46\x4a\x5f\xb4\x84\x5c\x83\x13\xf7\x5a\xa1\xc8\x71\x3d\x36\x36\x93\x41\x92\xb6\x1c\x8f\x8e\x3f\x9f\x5c\x74\xbc\xd7\xb7\xd7\xc4\xbd\xfc\x25\xcf\x81\xbf\xab\x84\xc1\x81\x78\x55\x36\xec\x06\x42\xe1\x96\x94\x19\x69\x78\x37\xc4\x81\x5c\x7f\x93\x14\xa0\x22\xa5\x78\x4f\xd4\xc2\x04\xec\xe9\xd4\x90\x18\x81\x6d\xb6\x98\x8e\xc6\xc5\x21\x13\xb2\xb6\x63\x52\x4a\x51\xff\xa7\x42\x56\xd2\x1a\x9d\x4d\x2d\xac\x0d\xba\x21\x72\xf1\x3e\x57\x45\xae\x5e\x27\xf3\xb2\xb8\x9a\x77\x13\xf5\xea\x4a\x28\xb2\xe0\x72\x74\x25\xba\x56\x16\x99\xe1\x31\xee\xa5\x29\x19\x99\x35\x81\xe0\x27\x28\xa2\xcb\x16\x5c\xe2\x71\x4d\x81\xbf\x9d\xb0\x79\x6e\x7b\xf1\xbe\x4e\xd3\xfe\xe3\xe7\x0b\xbf\xd2\x1d\x3d\x55\x19\xd1\xfa\x16\x4e\xcd\x72\x03\x20\x67\xc5\x6f\xbe\x84\x1c\x9d\x7d\xa2\xea\xa2\x74\x5a\x23\x76\x51\xf6\x17\xd8\xcf\xdd\xf9\x4e\x0a\xf5\x12\x69\xc4\xe3\x13\x50\x2d\x5f\x29\x43\x93\xcd\xd5\xc1\x67\x89\x52\x00\x75\x46\x65\x94\x69\xfa\x1c\x16\x05\x35\xcb\x61\x80\x8c\xe1\xd6\xea\x04\x07\x51\x9d\xc5\xef\x8d\x46\x8d\xb5\x6c\xcc\x57\x58\xd3\x70\xa4\xb4\xaa\x2e\x27\x76\xea\xd4\xe1\xe8\x5a\x87\x13\x89\x02\x21\x10\xd3\xd5\xd8\xd5\xc8\xed\x1e\x28\xa7\x37\xb6\xd7\xce\xd7\x76\xd7\xd4\xc2\x9c\x62\x46\x3d\x55\x01\xee\xed\x55\xf2\x5f\xd0\x39\xc9\x7c\xe3\xce\x87\x9e\x93\x98\x1e\x70\x93\x03\xf2\x03\x99\x5a\xf1\xe0\xb9\x86\x39\x8a\x2e\x9e\xd8\xd9\xb7\xdb\xee\xf2\xb7\x0f\x97\xac\xeb\x77\xbc\x85\x5b\xa5\xe0\x10\x56\x5e\x0f\xcb\xab\xcc\x1e\x49\xe5\x5a\xaa\xe5\x0c\xff\x15\x52\x36\x58\x60\x6d\x9c\x69\xe8\x25\x9a\x06\x17\x5d\x36\x79\x8a\xb4\x2e\x0d\x80\xc2\x60\x58\xb5\xd9\xf2\xed\x35\x83\xc4\xb8\xed\x29\x06\x20\xbc\x15\x17\x03\x96\x63\x31\xd6\xd0\x6c\xe4\x49\x41\xb9\x0b\x40\x15\xac\x28\x71\xcd\xfc\x76\xc8\x6f\xa1\xe3\xb1\xb7\x3f\x34\xd0\xa2\x67\x69\xbd\x59\x5c\x14\xc8\x36\x68\x7a\x5b\x64\x7d\x90\x6f\x91\xbf\xed\x5e\x53\x35\xaa\x9c\x1b\x4c\x22\x23\x49\xfb\x39\x00\x5b\x96\x08\x7a\x49\x3b\x32\x67\x00\x24\x75\x72\xad\x2d\xcd\x32\x64\x16\x00\xe0\x29\x3f\x6b\x16\x73\xaa\xa8\xc3\x9b\x75\x20\xc4\x0e\xa7\xea\xb8\xa1\x1e\x30\x54\x3d\x13\x06\x0d\xac\x92\xd8\x2f\x74\xdb\xe5\x4c\x65\x1e\x01\xa6\x06\xd4\x23\xea\xaa\x38\xcb\x9d\x06\x45\x2c\x68\xe4\xf0\x80\x81\x1e\xa0\xbe\x75\x2e\x61\x01\x0a\x60\x28\x8b\xa1\xf4\xa1\x95\x60\x30\x44\xd3\x61\xde\x6f\xbb\xba\xef\x1f\x3e\x2f\xef\x7f\x7b\x7f\x7f\xb7\x5c\x84\x21\xef\xe2\xbf\x4e\x99\x9d\x4a\x0a\x13\x29\xb2\x61\x9e\xa3\x36\x13\xb5\xf8\x41\x11\x2b\x92\x81\x49\x64\x9a\xe0\x42\xf3\xa9\x29\x1d\x53\x2b\xf3\xf8\x1d\x46\x57\x50\x81\x20\xb2\xa5\xa2\xc4\x65\xc2\x16\x9e\xe3\xa4\xa5\xb1\xcd\x08\x99\x93\x56\x53\x78\xe4\x2b\xb3\xb2\x64\x75\xb5\x46\x61\x9d\x67\x72\xcc\x93\x34\xc7\x51\x6c\x7a\x00\x6c\x07\x68\x6d\x31\xe8\xed\x39\x28\x74\x16\xe1\x82\xcc\x78\x08\xb5\x36\x59\x2c\x54\x91\xb5\x14\x9a\x47\x6d\xd1\x88\x4c\x4f\x79\x56\x0d\x3b\x79\x05\x6a\x45\x5f\x29\x29\xe5\x30\xe9\x24\xcc\x4a\x10\x96\x60\x6d\x56\xed\x1c\x8a\x79\xf2\x76\x30\x03\x69\x43\xb5\xab\x1a\xa4\x0f\x12\xca\x48\x32\x4d\x7a\xb3\xc9\xeb\xcd\xf1\x7a\x0a\xef\x55\xc3\xcc\x1d\x0c\xb0\xd2\x96\xc9\x9a\x38\x69\x93\xc5\x8a\x96\x5b\xc8\x7f\xb3\x9c\xcf\xce\x3a\xd0\x5e\x5d\x0f\x28\x22\xd9\x2a\x06\xbd\x89\x22\x7d\xe9\x62\xcd\x34\x59\x17\x4f\xda\xe5\x67\xb7\x41\x02\x09\x6b\x2a\xb3\xbc\xba\xb7\xe1\x9b\x6c\x38\xe7\xa4\x56\xbc\x8e\x32\x6c\xfa\xc4\x86\x11\xb4\xed\x2d\xdc\xdf\x7d\x78\xf7\xe6\xf3\xfb\xdf\xf7\x17\x99\x49\x77\x5b\x80\x69\x3f\x09\x6a\x40\xb6\xcf\x2d\xa8\x01\x35\x40\x19\x19\x78\x70\x2b\xc7\xe8\x32\xfe\x2d\x6d\x21\xf5\x92\xcb\xfe\x51\x4d\x23\x1e\x59\xaa\x70\xdd\x84\x63\xa6\x44\xd7\xe5\x89\x3f\x35\xc9\x42\xf4\x83\x8c\x39\x33\x08\x60\x8d\xf4\xaf\x92\xf9\xda\x02\xfe\x29\xbb\x19\x62\x50\x73\xe0\x90\x0c\x77\x56\x99\x0c\x2e\x66\x10\x48\x46\x5e\xa8\x47\xab\x71\x54\xca\x5e\x1f\x79\x26\x23\x43\xec\x7f\x06\x40\xc0\x3e\x46\x5a\xb7\x46\xdd\x19\x81\x44\x5e\xbb\x6c\x75\x5d\x05\x6f\x16\x51\xfb\xea\x28\x7a\xa1\x82\xa0\xec\x18\x09\x89\x4a\x5e\xa3\x0e\xe7\x7e\x8a\x13\xb0\x7b\x11\x50\xc0\x0c\xec\x24\x64\xb9\x30\x32\x1d\xa9\x24\xe4\x5b\x32\xf2\x2e\x7f\x14\x11\x40\xd7\x58\x70\x3c\xb2\x64\xb5\x30\x32\xa9\x8a\x4b\x6d\xe1\x64\x28\xf6\x61\x38\x15\xa9\xdb\x67\x72\x54\xe7\x92\x5d\x05\xb1\x8d\x22\x75\x44\xb1\xe2\x22\x22\xf4\xa0\x71\x5a\x8c\xc3\x69\xc9\x19\x8c\x38\x3b\xf5\x03\x22\x26\xaf\x84\x9f\xac\xf4\x3c\xa5\x0e\xc2\x22\x8d\xa8\x16\x2b\x5c\x85\x19\x5d\xd3\x77\xe0\x06\x60\x09\x4e\x0f\x97\x14\xf4\x77\x9b\xbc\x37\xe0\xf4\x03\x1b\x9b\x74\xdd\x1e\x24\xd7\x50\x99\x80\xc6\xe3\x88\x2d\x27\x33\xd6\x45\x54\xe0\x54\x90\x2d\x22\x4a\x12\xfc\xc9\xc4\x20\x33\xad\xec\xd4\xb3\xac\x05\xee\x48\x89\xd6\x5d\xbc\xb4\x81\x4e\x13\x56\x83\x84\x94\x9c\x65\x51\x7e\xd8\xb5\x9c\x36\x86\xf5\x47\x82\x8d\xad\x81\x1d\x0b\x08\xe9\xaf\x4a\x6f\xd9\xab\x55\x57\x46\x24\xd5\x22\x9e\x85\xca\xff\x86\x8f\x9c\x17\x30\x22\xac\x8b\xdf\xa3\xa8\x1e\x20\x17\x51\x59\xd9\x31\xff\x46\xaa\x3d\x58\xc8\xbc\x96\x4c\x89\xb6\x11\xa3\x12\x11\x2a\x63\x4f\x5e\x01\xc5\xe5\x5c\xf3\xf7\x97\xae\xa9\xad\x70\x55\x2a\x58\x09\x3e\x4b\xd7\x15\x88\x18\x91\xf1\x62\x03\xfc\xc0\x27\x85\x6e\x4b\xce\x68\xfe\x9b\xca\x22\x30\x43\x2e\xa4\x49\x1c\x89\x0c\x65\x02\x41\xf3\x85\x7a\x72\x22\x05\x4a\x75\x71\xad\x43\xf8\x51\x71\xb9\x1b\xeb\xba\x41\xfa\x3c\x85\xbf\xa9\xeb\x4d\xc3\x8f\x88\xb9\xc9\x0b\x77\xed\x01\x1f\xa5\x83\x94\x24\x98\x9d\xd1\x04\x0f\xbe\x6b\xcd\xf5\x9a\x10\xee\x2e\x84\x54\x93\x42\x4e\xeb\xee\x99\x5d\x74\x29\x22\xcc\x9f\xe1\xde\x16\xe9\x64\xa2\x44\x44\x4d\xb0\x84\x36\x64\x33\x43\xec\x50\x23\xf8\x2f\xa3\xb2\x25\xf6\x45\xd6\x46\x2d\x58\x2c\xb2\x72\x8a\x56\xf3\x93\x91\xd1\xb2\x53\xca\xb4\xd6\x17\x5d\x71\xa5\xee\xe6\xd8\x5c\x70\x96\x92\x87\x3c\xb4\x6c\xd4\xf7\x83\x56\x6c\x51\xa2\x31\x9d\x4b\x9a\x79\x9c\xc1\xb6\x2d\xa3\x04\x7f\x51\x44\xf6\x25\xd5\x45\x29\xf1\x87\xa4\xb0\xc3\x74\x66\x30\x8b\x38\x19\xa9\xdc\x06\xad\x6c\x32\xe8\x3b\xf1\x48\xb1\xc4\x2f\xc9\x72\xee\xca\x59\xce\x82\xff\xf1\x24\x5d\x60\xf7\x04\xe8\xbf\xc0\xc6\x2c\x55\x09\x33\x0d\x04\x5a\xf6\x1e\xb8\xbd\x15\x5d\x6b\x8d\xe7\xd7\x23\x2d\x3e\x74\xfe\x86\x85\x67\xeb\x44\x94\x11\xf3\xa6\x65\x8b\xa8\x59\xf6\x84\xe7\x7c\x90\x25\x77\x09\xf8\x38\x00\x29\x2c\xf9\xb3\x8f\xe4\x88\xd6\xe1\x88\x56\xe4\xb3\x60\x51\x1e\xd2\x02\xfd\x18\xe1\x91\x96\x8f\x96\x2c\x0f\x03\xc5\x2c\x5e\xab\x68\x34\xcf\xdc\x80\x3a\x68\x84\xef\x92\x53\xd4\xae\x00\x6e\x53\x4e\x60\x30\x8e\x75\x96\x5d\x5d\x34\x42\x0d\x71\xf1\x0c\x8b\x43\x73\xd5\x64\x53\x9b\x73\x55\x59\xa0\xfb\xba\xd2\x36\xa4\x70\x80\xf5\x54\xd9\x45\x00\xfa\x80\x22\xaa\x23\x2d\x8d\x1d\xf6\xf4\x81\xbe\x13\x4c\xe5\x8f\xb6\x9e\xc4\xc2\xcd\x4a\x3c\xac\x59\xc7\xcc\x71\xa5\x69\x3c\x5f\xa6\xbb\xf3\x75\x2a\x4b\x79\x6b\x5f\x34\xa6\xc8\xa0\xd5\x0a\xea\x8a\x11\x29\x3d\x34\x85\x13\x57\x11\x27\x13\xc8\x56\xbd\x8a\x85\x04\xc2\x32\x95\xf5\xda\x39\x24\x8a\x24\xec\x46\x30\xa7\xca\xf6\x2f\x7d\x2e\x2f\x5d\x41\xf8\x97\x2c\xb5\x10\xf9\x80\xe6\x10\x2c\xdd\x88\xd4\x65\x41\xea\x5e\xb8\xc8\x14\x83\x7b\xb3\x34\x43\x4a\xf1\xcc\x87\xa8\x81\xef\x90\xb0\xde\x5b\x10\x5d\xc8\xc9\x90\xab\x78\x30\xd3\xcf\x70\x09\x20\x2b\x0e\x10\x1f\xa2\x85\x24\x0d\x83\x46\xe4\x85\x8b\xa0\x71\x71\x16\x0d\x24\x88\xf8\x01\xde\x22\x8c\x2c\xc7\x6a\x67\xb5\x11\x86\x64\xae\x4f\xaf\xbf\x6b\x34\x4d\x77\xf5\x5f\xa7\xd9\x9b\xaa\x6f\xb6\xa4\x18\x56\x2d\x2a\x11\x62\x4f\x70\x76\x50\xa9\x87\xc8\x18\x30\x99\x2e\x83\x3f\x9a\x0c\xff\x6e\x51\xa5\x52\x0d\xfd\xa2\x19\x89\x39\x0d\x40\x5e\xdf\x2c\xce\xc4\x33\xd4\xcb\xaa\xfa\xa6\xce\x4d\x55\x20\x92\x2a\x13\xb2\x78\x80\x09\x67\x7e\x3e\x4d\xa0\x40\x9e\x40\x3b\x29\x75\x09\x63\x29\xd8\x8c\x58\x79\xb3\xad\xcc\xed\x64\x9d\x2c\xc7\xf5\x63\x29\x12\xba\xbc\x16\xac\xb6\xdd\xa2\x6b\xcf\x96\xe2\x1a\x28\xca\x0a\x98\x8b\x62\x8d\xb1\x8c\x2f\x74\x4d\x2c\x7f\x79\xdb\x88\x78\xa5\x7c\xce\x05\x0a\xaf\xca\x0d\xdb\x5d\x55\xa8\x2c\x47\x31\xb3\xca\x9e\x59\xb7\x56\x91\x4c\x69\x6e\x59\xd1\x2c\x54\xd7\x17\x03\x28\xe6\x15\xfb\x95\x62\xfa\x29\x95\x10\xb9\x59\xcd\x08\x80\x8a\x54\x8c\xc5\xb0\xac\x38\xea\x75\xf2\xd9\xd1\xec\x6d\xdf\xf3\x3a\xf3\x08\x83\xa4\x9a\x4b\x9c\x7d\x36\x2c\x57\x9b\xae\x3a\x83\x57\x6d\x7b\x4c\xec\xd5\xd1\x01\xf5\x38\x68\x5a\x36\x56\xc3\xe2\x75\x71\x60\xb5\x68\x4e\xbc\xea\x90\x46\x38\xa8\x51\x6e\x6a\x0d\x98\x4e\x90\xcb\x48\x57\x0b\x9a\xb9\x25\x66\xec\x58\x95\xcb\x58\xa8\x63\xe5\xea\x42\xc6\xaa\x9e\x33\x00\x06\x6c\xc5\xef\xe6\xe8\x80\x4a\x3a\xb6\x35\xea\xcb\x51\x5c\x0c\x09\x32\x44\xca\x90\x31\x43\xea\x98\x20\xba\xa1\xa0\xa3\x5a\xfd\xe6\xe6\x78\x94\x84\x7d\xd8\x04\x33\xe6\x44\x57\x38\xaa\x48\xdb\xeb\xf7\xfe\xfd\xe7\xfb\xe9\xe1\xcd\xdd\xe7\xcf\x1f\xff\xe7\xba\xaa\x7c\x9e\xfd\x97\x6b\x39\x12\x6f\x9c\x4d\x97\xbd\xcf\x81\x27\x98\x63\xad\x1b\x81\x87\xfd\xae\xdc\x1e\xbe\x93\xeb\x04\xdd\x90\x94\x37\x1e\x18\x2e\x58\x5c\x93\xd6\xb1\xc5\xc2\x38\xcd\xdb\x79\x47\xc4\x17\x0d\x22\xa7\x3c\xe9\xaf\xd3\x38\x7d\xb6\x33\x92\x91\x7c\xcb\x4d\x27\x7d\x90\x3e\x07\xbf\x2d\x7a\x8a\x12\x5e\x53\xeb\xfb\x1c\x8e\xd5\xda\x17\xf5\x3c\x3a\x8b\x15\x74\x62\xcd\x68\x59\xfc\x59\xaa\x8b\x3f\xc9\x81\xf1\x6b\x56\xc1\x38\xc9\xce\x39\xe6\x20\x3c\x91\x8d\xb0\x3c\x9d\x51\xf3\xfc\x51\xbc\xee\x73\xe8\x27\xc3\x98\x47\x49\x61\x75\xa3\x63\xd0\x65\x3a\x0a\xd2\xab\x37\x06\x69\x7b\x68\x54\x31\x6a\x3a\x13\x4e\x22\xee\x27\x32\xe4\x94\x1f\xe6\x4c\x9c\xc8\x88\x4c\x7e\xdc\xe1\x58\xd9\x7e\x26\x7a\x6c\xf0\xaf\x8e\xb9\xb5\xfc\x72\xec\xff\x53\x86\xf5\x8a\x92\x7b\x77\x32\xa6\x62\x16\xd1\xf9\x98\x8e\x2e\xd9\x5e\x78\xb6\xa0\xd6\x05\xb8\xbd\xf0\xae\xf6\xbd\xad\xaa\x03\xc6\xfd\xda\xe0\x9e\xb2\x2e\x8d\xe5\x76\x18\xe2\xc2\x9b\xbc\x50\x31\x71\xdc\x5b\xfe\x73\x87\xf2\xaa\xbe\xf4\xf6\x7c\x30\xe1\x44\x7f\xbc\x40\x6f\x8d\xe1\xe8\xc6\x83\x0e\xc0\xa5\x68\x3e\x67\xa2\x3a\x5b\x90\xeb\xc2\x1b\xeb\xce\x00\x25\x8e\x0a\xc0\x53\xeb\x7e\x15\xdd\x1b\x53\x44\xe5\xcb\x10\x2f\xff\x19\x63\xfa\xfb\xf4\xf1\xed\x65\x04\xe1\xfe\xbb\x93\x26\x97\xbf\xea\xc5\xbf\xbd\xa6\x90\xd8\xb5\x56\x15\x9b\xc7\xb8\x42\xf5\x26\xd1\x0e\x67\x51\xca\x14\x1b\x19\x15\x7d\xf2\x7d\x9d\x8b\xab\x48\xdc\x46\xc1\x4d\x71\x28\xb2\x98\x63\x72\x4d\x61\x10\x08\xf5\xf1\x8c\x40\x39\xc5\x05\xe5\x4e\x72\x82\x68\x47\xea\x5d\xa4\xec\x00\x22\xef\xd8\x42\x1c\x34\xa0\x31\x35\xeb\xde\x8a\x0e\x9d\x2f\xce\xcb\x4e\x51\xd5\x3a\x6b\xab\x22\x8e\x5a\x79\x5a\x73\xf5\xb2\x62\xfc\xaf\x45\x08\x30\x6e\xd9\xe9\x3b\x38\xe4\x75\x6a\xb5\x94\x27\xd4\xb3\x19\xf0\xb3\x8f\xce\xce\xd7\x32\x3e\x79\xb2\x42\x7f\x78\xf9\x77\x35\xc6\xb5\xfa\xc8\xa3\x16\xae\x38\x4d\xf1\xb0\x66\x28\x14\x16\xf2\x24\xe3\xab\xbc\x83\x6d\xc1\x5a\x4a\x20\x5f\x6b\xa6\xeb\x4c\x19\xe5\xdf\x9a\x50\xa7\x60\x22\xc5\xc5\xb9\x3b\x54\xc3\xc3\x99\xa8\xc5\x07\x7b\xd1\x64\x81\x62\x20\xaf\x7b\xc4\x94\xd4\x41\x71\x65\xf6\xcd\x21\xa5\x5f\x6b\x1b\x22\x12\x65\x01\x06\x5a\x9c\xb5\x09\x41\x6b\x2d\x93\x1f\x80\xa0\x33\xe1\xf7\x6c\x7c\x81\xbe\x58\x05\x79\x18\x78\x0c\x5a\x94\x19\xd4\xda\xc1\x3b\x34\xcb\xf9\x1b\xe1\x53\xc6\x43\xe4\xdb\x61\x08\x2d\x5a\x49\x2c\x3d\xbe\x43\x6a\x8d\x53\x57\x8e\x16\x4b\x58\x5d\xab\x7d\xa3\xe5\x04\x20\x1c\x44\x1c\x0b\x41\x29\x83\xeb\x2e\x36\xdd\xb8\x20\x0a\x9e\xb5\x6f\x02\xca\x5e\x9a\x21\x9c\xca\xc3\x91\xda\x40\x38\x8d\xb3\xd3\xc0\x7a\x9a\x8b\x83\xf9\xaa\x5c\x08\x59\x8b\x4a\x64\xaa\x15\xa7\xd5\x6d\x0b\x69\x2e\x2e\xca\x66\x90\xb3\x3e\x93\x23\xa7\xdc\xe1\x3a\x41\x07\x36\xb8\x65\xc8\xe7\x80\x92\x55\xa7\xce\x56\x94\xf8\x23\x91\xb8\xce\xdd\x15\xe9\x2d\xf4\x55\x32\xa0\xec\xdd\x38\x9c\xd1\x8f\xa8\x17\xc1\x84\x53\x7b\x42\xd3\x32\x5d\x94\xcb\x7d\x02\x3a\xb6\xd3\x24\xce\xa4\xc9\x48\x88\x98\xfa\x04\x18\x0b\x19\xfa\xb1\x0c\xe9\x58\xff\xe1\x2d\x11\xa9\xa0\x40\x46\xce\xc8\xa3\xdd\x7e\xbc\xc1\x60\xf3\x45\x65\xc9\x8c\x8e\x23\xd2\xba\x9a\xe4\x1a\x14\x71\xe0\x4a\x70\x95\x8e\x4a\xd6\xf5\x23\xbd\xc9\x27\x8c\x6e\x1d\x53\x84\x50\xc0\xec\x9b\x0d\x31\x5e\xd8\x06\x57\x27\xf6\x4e\xdf\x56\x61\x2e\xd2\x90\x1f\xcd\x46\x79\xac\x52\x05\x2e\xc0\xdd\xe3\x40\xf6\x48\x0b\x4e\xc6\x03\x33\x90\x35\xaa\x51\x61\x14\x40\x39\x00\xa1\x45\xa6\xf3\x84\xb4\xd9\xd9\x2e\x2b\x40\x9f\xb0\x44\x69\x9b\x30\x4d\x7e\x6c\x08\x1d\xcc\x04\x40\x7d\x36\xe0\x7e\x22\x2b\xfd\x09\x5a\xfa\x93\xb4\xe0\x06\xc5\xa0\x09\x38\x1f\x08\xfe\xc9\x28\xb3\xcc\x8b\x62\x00\xbe\x32\x4f\x12\xa8\x3c\xd8\xd5\x29\x3b\x1b\xd4\x82\x70\x2f\xcb\xea\x46\xdf\x45\x34\x4c\xbe\x2b\xc3\xb0\x9c\x15\xc3\xc4\x32\xb4\xad\x11\x10\x39\x56\xee\x49\x5a\x06\x94\x57\xd6\x60\x56\xf9\x95\x8a\x66\xee\xa1\x16\x92\x19\x37\xaa\x3a\x58\x33\x26\x14\x30\x79\xd5\x53\x61\xd0\x85\xc0\x51\x69\x5a\x41\x85\xc9\x0c\xcf\x5c\x55\xed\xa9\xa2\x16\x94\x01\x8d\x47\x96\x17\x4e\xcd\xe4\x5e\x57\x8c\x9b\x64\x60\x29\xe1\xf1\x52\xe6\xb5\xa0\x4a\xe7\x60\x59\x3c\x8f\xba\xd0\x1d\xd0\xdf\x19\x19\xdb\x68\x7a\xd4\x37\x1e\x30\x7f\xe6\xc9\x25\x25\x71\x89\x00\x18\x81\x3d\x2f\xdd\x8d\xfc\x65\x8d\x7e\xe1\xdd\xaa\xee\x01\x22\x5d\x35\x41\xfa\x55\x9e\x01\xe9\x42\x96\x7f\xa5\xc5\xa3\x51\x4b\xb3\x7c\xb1\x9c\xab\x60\x0d\xe5\x28\x2f\x14\x54\x90\xcb\x7c\xd0\x4f\xad\xd7\xd4\xa8\x08\xa5\xc5\x0e\x64\xc1\xab\xe8\xa6\xa0\xfc\xca\x28\x5c\x9e\x35\x57\x1a\xc8\x1f\xb3\x56\x68\x69\xf7\xa1\x42\x2b\xdb\x22\xd3\x17\x4f\x06\x2b\x8b\xdd\xb0\x40\x06\x2e\xeb\x64\x57\xe7\xcf\x22\xda\x8f\xa5\x8b\xb3\x2d\x59\xac\x7d\x74\x6f\x55\x34\x30\xa4\xf4\x19\xcc\x8c\x55\x0a\x2e\xc6\xc1\x3d\x77\x63\x59\xc1\xc2\x27\xa3\x34\x99\xb3\xf5\x1d\x97\x45\x0b\xba\x81\x3b\xa3\xe1\x91\xb8\x56\x70\x75\x30\x95\x63\xc1\x4a\x03\x66\x4d\x4a\x6f\xab\x1c\xb1\xa1\x21\xa3\x0a\x48\x48\x8e\x49\x2a\xb9\xd0\xd9\xd1\xd0\x58\xa4\x1b\x34\x07\x40\x2e\x02\xa9\xf6\x1c\x55\x8f\x44\xed\x1c\xd9\x52\x0f\x03\x1d\xa5\xd9\xde\xd1\xad\x50\x3e\x5b\xc9\xee\xac\x79\xe5\x6d\xcd\xfc\x26\xc5\xf1\xa9\xa8\x61\x44\xfd\x8e\x8e\x67\x03\x0b\x14\xc9\x8a\x91\x7f\x34\xc7\x41\x79\xbb\x51\x7b\x0d\xc2\x9c\x75\xbf\x4e\xba\x13\xb2\x6d\x89\x4a\xed\xa3\x2b\x02\x3e\x5c\x4d\x14\x1c\x05\xdd\x40\x22\x22\x93\x85\x48\x35\x65\xab\x3e\xf4\x9a\xaa\xef\xb5\xb2\x4e\x5d\x4b\xb6\xb5\xa9\x0a\x66\xb0\xa3\xbb\x91\x13\x48\xd9\xd1\x2c\x72\x9c\x87\x8b\x2d\x5a\xd4\x0e\xa2\x27\xeb\x26\x5e\x07\xfc\x70\x1a\x4d\x18\xb8\x66\xd8\xc5\x47\xfd\x05\x16\x52\xd1\x0c\x0d\xcc\x4d\x1f\x87\xc0\x5f\x33\xc3\x3a\xca\x1c\x2a\x7e\x42\xf8\x04\x92\x5c\x97\x56\x33\xdf\x25\x77\xdd\x00\x00\x23\x43\xc1\xf1\x09\x34\xd9\x50\x67\x12\xf6\x3e\x76\xdd\x75\x03\x2b\x03\xd4\xbe\x48\x0d\x69\xac\x39\xa0\x82\xb4\x18\x17\x16\xdb\x62\x92\x8b\x3b\xe3\xf8\x4a\x2e\xce\x68\x88\x96\x6f\x42\x9f\xc4\x7c\xd2\x09\x83\xce\x65\xc7\xc7\xa1\xc2\x1b\x87\xb1\x33\x41\x7d\xc5\xa4\x82\x00\x88\xb6\x40\x2d\x22\xef\xb3\x4a\x05\xdd\x7b\x74\xfe\x60\x22\xb9\x60\x8b\x6c\x10\x5c\x50\xd2\xc2\x07\x30\x22\x21\xf6\x20\x26\x4a\xd2\xa6\xa1\x12\x75\x19\xdd\x1d\x50\xc6\x49\x56\xda\x3f\xc9\x1c\x38\xc0\x42\x02\x20\x93\x16\x9f\x36\x1d\x32\x0d\x86\xa9\x38\x82\x7b\x57\xde\x1e\xf0\x42\xbb\x65\xad\x25\xc5\x2a\x6b\x33\x23\x53\x05\xa0\xa2\x33\xea\x37\x08\x7b\x39\x22\x37\x2e\xea\x96\x6f\x83\xce\x73\x77\xd8\x5c\xca\x2c\x8f\xab\x86\x87\xa1\x4a\xa8\x86\x87\xb1\xbe\x50\xd9\x41\x7a\x5a\xd5\x42\x20\x15\x00\x4d\x5f\x45\xde\x8e\x5d\x73\x2c\x7a\x0c\x2f\xa2\xc2\xcc\x49\x54\x93\xec\xba\x2c\xf6\x3c\x69\x99\x46\x04\x46\x56\x82\xd5\xc5\x00\x9d\x47\x9a\x0a\x80\x3a\x64\x7f\x8c\x0a\xcd\xa5\x73\x51\xe1\xaf\xa2\x53\x7e\x7f\x74\xb4\xaa\x38\x00\x47\x55\x21\x5c\xb5\x62\x04\x05\x2e\x09\xa2\xfe\xdb\xeb\x56\xbb\x34\x9f\x03\xa0\x8e\x81\x91\xdc\xba\x4d\x12\x74\x51\x5a\xe1\x2d\xa2\x81\x4e\x2b\x2f\x57\x9b\x95\x0b\xcc\x98\xaf\x9b\x6c\x43\xda\xa7\xc0\x12\xa9\x6a\x2e\xf8\x2a\xba\x60\x35\xf4\xbd\x71\x3b\xd4\xf7\x18\x26\x30\xd4\x47\x1a\xfe\xfb\x23\x3c\x55\x36\x6d\x5b\xf6\xe6\x45\xb7\x05\x0d\xbf\x54\x54\x4a\x21\x78\x04\xec\x15\x72\x79\x05\x07\xaf\xca\x09\x76\x54\x57\xc0\x60\xe2\x4c\x97\x86\xea\x04\x71\x2d\x2d\x72\x4a\x1e\xb6\xa8\x54\x1d\x25\xbc\xe1\xf8\xca\xa6\xec\x58\x9a\xa7\x2d\xe0\x32\xda\xaf\x42\xa5\x99\xd0\x34\x6d\x08\x4f\x61\x5b\xf2\xd2\x03\xc9\x74\x86\x32\x14\xbb\x8c\x95\x6a\x06\x43\x84\x4a\x16\x1b\xe6\xbb\xe5\x6d\x01\xd6\xd1\x42\xf1\x28\xd9\x0a\x1a\x4e\xb7\x12\x21\x4d\x79\xb4\xea\x33\xb3\x6b\x0c\x76\x44\x66\x85\x88\xc0\x4d\xd3\xf6\x7f\x3e\x3f\x7c\xb8\xdf\x5f\xd8\xb6\xef\x36\x2a\x71\x22\x5c\x50\x3f\x1a\x47\x08\xdc\x5c\x6a\x69\xf2\xa5\x81\xa4\x89\xb5\x62\x53\xfe\x47\x26\x42\x5d\x93\x18\xc9\xc5\x3a\x21\xfb\x91\x42\x03\x7c\x60\x2c\x16\x2a\x35\x67\x7a\x73\x9d\xa6\xd2\xc8\x95\x46\x33\x42\x99\x4d\x41\xfd\x64\x93\xc6\x16\x6a\xd8\x2e\xf2\x1d\x72\x09\xd8\x75\xd2\x6a\xfe\x3e\x70\x42\xcb\xac\x39\xd6\xa8\xaf\x2e\x56\x79\xab\x69\xba\xac\x48\x83\xcd\x66\xbc\xd6\xaf\x1f\x2b\x75\x16\x7f\x5a\xc2\x73\xa3\x9c\x67\xce\x1a\xe1\xa3\x15\x64\x85\x82\xaa\x15\xc5\x60\xd0\x44\x99\x07\xac\x8d\xe5\x82\xb7\xc9\x73\x47\xf6\x78\x47\x01\xcc\x44\xf8\x2b\x54\x15\x37\x5d\x43\x3c\x9a\x3d\xd1\x0c\x2c\x44\x31\xd5\x90\x6b\x13\xcd\xb4\x55\xf3\xf4\x09\x44\xca\xbb\x2f\xff\xbe\x28\x4a\xb9\xdb\xc4\xae\x05\xe7\x35\x03\x63\xf7\x60\x2c\xa7\xc1\x58\x4e\x8d\x2a\x7b\x25\xef\x3e\x61\x0c\x1f\x81\x28\xca\x7c\x95\x4e\xb5\x76\xa0\x0d\x6f\x16\x79\xc9\x54\xdc\x28\xf3\x7a\x04\x75\x8a\xb3\xaf\xe0\xb5\xea\xb3\x5a\xe4\x97\x3d\x6b\xf7\x03\x0f\xa3\x98\xd2\x5f\xf0\x66\x9b\x95\xcd\xef\xa7\x2b\xe5\xec\x6f\xc3\x36\x26\x8f\x6c\x49\x89\x40\x2b\x96\xb4\x82\xdd\xd7\x30\xf9\x04\xc2\x97\x1e\x0f\xbe\x6a\x39\xfb\x60\x3a\x45\x9e\x8c\x22\x0d\xb1\xba\x55\x14\x91\x67\x8b\x17\xfe\x90\x5a\xd1\x5b\xa6\x1e\x8f\x79\xaa\x09\xd9\xa5\xc0\x0a\xcb\xdd\x45\x78\x98\xc3\x8c\x8c\x9b\xdc\xe5\x69\xdb\x69\xe8\x9f\xdf\x3f\xfc\x76\x7f\xf7\xe5\xc2\x79\xf7\x76\xab\x24\xc1\xca\xba\xc2\x3e\x13\xeb\x0c\x95\x83\x93\x19\x8a\xa9\x9e\xda\x56\x6d\x06\x50\xdc\xae\xe6\xeb\xa7\x16\x50\x00\x38\xf8\x11\x2f\x7c\xe8\x91\xc3\xa5\x0f\x9d\x0a\xae\x32\xb2\xf9\xb1\xd6\x8c\x08\x9e\xcf\x68\xe2\x01\xb0\x10\x5b\xda\x7b\xf9\xdb\x00\x80\x2f\xea\x03\x62\xe6\x83\xb6\x60\x24\x70\xef\xac\x3a\x31\xd7\xeb\xd5\x8f\xd2\x84\x98\xf9\x6a\x79\xe0\xf6\xa4\xfb\x3a\x4d\x5f\xee\x3f\x3f\x3c\x5c\xf8\xc2\xdf\x9e\x30\x84\xb7\xe8\x7a\xcf\x93\x5f\x39\x68\xd7\x03\x70\x71\xa6\x74\x92\x3c\x9c\x20\xe5\x75\x5a\xf8\xdc\x37\x71\xe9\x90\x0f\x7f\x13\x7a\xce\xee\xad\x8f\x95\x87\xf9\xb3\xc7\x2a\xf1\xd3\x29\xf4\xdc\x25\x30\xde\x2d\xe4\x65\x6d\x53\x62\xe9\xe0\xdc\xa5\xc5\x54\x35\x8c\x9f\xd6\x7b\xef\xa6\xb3\xe7\xe2\x60\x7d\xee\x23\xd4\x67\xb8\x94\xd4\x9c\xd5\xb4\x5b\x6b\x48\xee\xf6\xa8\x4b\x90\xe7\xe3\x42\x49\x58\x45\x58\x9d\xfa\x1e\xc7\xe7\x4c\x67\x3d\xbe\x36\x01\x2d\x88\xa4\x40\x20\xd2\x57\x72\x03\x3c\xce\xa5\x80\x9b\x5f\xca\x9e\x75\x20\x36\x24\xc1\xb1\xa3\xb6\xa1\x37\x7e\xff\xfc\xf1\x32\x12\x76\x1f\x36\x2a\x58\x73\x8f\x88\x77\x2a\xdc\x86\xb2\x1c\x1b\x05\x37\xc5\x34\xfb\xa6\xf4\x8f\x60\xd1\xd1\xc2\x33\x47\x96\xee\x11\x33\x64\x9c\x7c\x02\xae\x54\x2b\xde\x99\x46\xde\x87\x92\x82\x5b\xda\x9b\xe2\x03\x53\x8c\x8e\x95\xa4\x29\x2a\xbe\x41\x29\xa3\x86\x01\x1c\x2f\x58\x91\xa5\x88\x69\xb5\x52\xfb\xc5\x15\xa0\x8f\x3a\x86\x01\xf8\x4b\x35\x1d\xf3\x15\x7a\xd2\x94\x04\x39\x97\x2c\x4b\x53\x91\xcc\x1c\x01\xdc\x44\x6c\xa4\xd0\x15\xe5\x93\x02\x32\x3a\x93\x81\x0b\x17\x16\x45\x00\xce\xff\x8c\x53\x95\x23\x31\x68\xde\x6f\x8a\x96\xe9\x52\xc1\xd3\x25\xfa\x87\x7e\xc6\x95\xf9\x24\x8e\xbc\xdf\x50\x5d\x6a\x72\x62\x6a\x72\x77\x7d\x6b\xc5\x95\x23\x73\xd3\x68\x9c\x02\xcf\x91\xee\x6e\x24\x27\x2a\xfe\xb3\x22\x90\xa2\x71\x8b\x3a\x11\xbb\x39\xaa\x81\xb8\xb2\x0a\xd8\x1f\xa4\x8d\xdf\x9d\xf0\xc6\xc7\xa4\x55\x64\xb0\xe3\x57\x76\x78\xe3\x79\x7f\x44\x08\x7f\xc6\x15\x7f\x42\xf5\x7e\x4a\xfb\x7e\x46\x07\x7f\x76\xf9\xe9\x9d\x8d\xed\xb4\x54\x32\x00\x6e\xad\xce\x25\xf3\xe5\x37\x07\xac\x24\x9b\x7e\x84\x7d\x34\xea\xb4\x24\x6e\x73\x23\x94\xd7\x34\x72\xb6\xbf\x03\x1c\xa0\x00\xdd\x19\xa0\xf5\x5a\x89\xa6\xd4\x1a\x34\x72\xb1\x31\x23\x95\xb7\x4f\x21\x7a\x69\x26\x5e\x79\x41\x63\x8e\x27\x34\xf3\x3f\x8b\x97\xff\x29\x26\x92\x8b\x65\xba\x85\x65\x4e\x29\x8f\xba\x50\xab\xa4\x2f\xa2\xea\x86\xe6\x38\x68\x7d\x8b\xee\x38\x8e\x57\xc1\x5d\x19\x85\x00\xea\x5a\xe8\xe6\x71\x53\x55\x5a\xe7\xab\x09\xa1\x68\x54\x49\xba\x7a\x47\xa2\xf4\x45\xb9\xfe\xc0\xa0\x82\x8f\x43\xfd\x49\xd9\xec\x56\x18\xff\x23\x05\x90\x8e\x39\xd9\x0a\xcb\x05\xab\x4c\x3e\x6b\xb4\x3b\xeb\x8d\x27\xb1\x97\x3d\x87\x3a\xc3\x54\xab\xba\x75\x1e\x11\x56\xb9\xec\x26\x02\xf8\x60\x99\xf5\xfd\xe4\xad\xeb\xb7\xd7\x15\x38\x26\x9c\x1f\xf7\x85\x18\xf4\xf5\x71\x5f\xc4\xee\x46\xb6\xbc\x18\x44\xd8\x7a\x53\xd1\x8a\xa0\xf1\x3f\x0a\x24\xce\x1a\x06\xcb\xb0\x3d\x6e\x18\x3b\xcd\xd1\xa4\x61\xdb\x77\x83\x53\x3e\x7d\x73\xdb\xcd\xa2\x91\x43\x61\xb6\x69\xa7\x9e\x17\x7d\x99\xc5\x51\x87\xbb\x94\x47\x14\x0a\x63\x95\x77\x67\x43\xd5\x0c\x2a\x30\x46\xd9\xcd\x63\x74\x55\x66\x6c\x49\x6d\xa5\xe3\xe7\x60\xf5\x11\x21\x9e\xbe\x66\x33\xb8\x34\x0e\x38\x58\x45\x26\x87\xe4\x5a\x3e\xe9\xb5\x16\x9d\x9d\xcb\x21\x1a\x8b\x48\x93\xd9\xd5\x27\xdf\x9a\x6b\x0d\xc0\x3c\x0a\x91\x2a\xdd\x83\x9a\x2c\x4d\xa6\xc5\xbd\xd2\xc9\x6c\x6c\x09\xb9\x8c\x2d\x39\x0e\x69\x01\x90\x4b\x5c\x87\x52\x1f\x24\xed\x69\x8a\x6b\x14\x94\x94\xb4\xe5\x75\x42\xec\x66\x6b\x8a\xb5\x5c\x5f\x30\x8e\xa7\xf7\xa9\x69\x03\x5a\xd1\x26\xa2\x79\xda\x18\xbd\x55\x3a\x0e\xa1\x35\xa4\x21\xb4\xb3\x8d\x31\x70\x3f\x7d\xfc\x7a\x51\x02\x7e\xcf\x5b\xf0\x0f\x22\xc8\xac\x9e\xf6\x09\x09\x2a\xf6\x1c\xfa\x6c\xdb\x12\x46\x2d\x36\xbb\x4a\x8e\x93\x8e\x7c\x75\x54\xcc\xdf\x8f\xf9\xea\xb4\x3a\x1e\x2e\x5b\x85\x3b\x37\xb4\xf3\x99\x60\x2d\xb3\xd2\x9c\xb5\x26\xd7\x5a\x96\xe1\x5c\x83\x93\x93\x4a\x71\x85\x67\x11\x6e\x6b\x42\xec\x10\x57\xb3\x32\xbe\xab\xad\x12\x9b\x12\xc6\x46\x79\x50\x34\x28\xd4\x05\x7d\x18\xfb\x53\xf0\x5f\x6f\x1f\xee\xfe\x7d\x69\x2e\xdd\x6f\x02\x4e\x67\xae\x32\x86\xb2\x11\x34\x15\xd9\xd2\xa1\xc6\x72\x60\xb9\xf6\xe8\x43\x52\xae\x12\xb5\x11\xac\x76\x66\x88\x35\x5c\x30\xe5\x20\x76\x7e\x3c\xc4\x7e\x13\xdb\xe4\x19\xd4\x24\xcb\x15\x98\x94\x83\x8f\xbd\x7f\x7b\x5d\x53\x73\x8d\xe2\xe4\x59\x24\x6c\xe2\xbe\xaf\xc4\xfa\x17\x88\x7d\x64\x4a\xd0\x21\x56\x6d\x01\x71\xc3\x75\x07\x1f\x9f\xc8\x35\xbc\xa4\x31\xbb\xdf\x2a\x85\xeb\x45\xb1\xef\x9f\x6e\xfb\x72\xf3\xe5\xbf\xbd\x26\x2e\x48\x5b\x9c\x72\x80\xa6\xdb\x66\xab\x4f\x84\xe6\x59\x54\x53\xb3\xff\x51\xc7\x09\x11\x99\x54\x41\xad\xea\x5d\xab\x50\xef\x31\xa9\x5d\x9b\x7c\x41\x9e\xae\x08\x5b\x82\xa9\x67\x81\x5c\xaf\xa4\x05\x94\x34\x82\x81\xf4\x7a\x38\xf2\x6b\x35\x0d\xc0\x8a\x66\x90\xbb\xab\x21\x2e\x1c\x63\xda\x01\x3d\x36\xed\x8e\xa4\x57\xcc\x00\x2c\xeb\x9a\x36\x0d\x00\xab\x3a\x57\x57\x8b\x13\x0d\x35\xd5\x85\xa2\x52\xd5\xc9\x3d\x44\x12\xd5\xe6\x5a\x12\xc1\x32\x38\x59\x69\xee\x40\x2d\x62\xc7\x3c\x11\x83\xda\xd0\xeb\x27\x5e\x0f\xf9\xa2\xf0\x91\x22\x3d\x1a\xd1\x17\x32\x3e\xf6\xa4\x8d\xd0\x7b\x8a\x8e\xac\xb0\xf5\x78\xa2\xea\xc8\x09\x0c\x0e\x80\x37\x33\x7e\x10\x40\xaa\xf6\x38\xb7\xec\xa4\xb9\xf2\xa0\x3e\x53\xd2\x5d\x00\xaf\x07\xb1\x97\x41\xfa\x8c\x2e\x50\xfc\x91\xd4\xc0\x5a\x8e\x32\x4d\xed\xb5\x64\x71\x5a\x9f\x27\xeb\xe3\xc9\x3a\x5d\xba\x17\xdc\xaa\x4d\xeb\xb6\x31\x3c\xd3\x18\xb4\xa8\x11\x63\x1d\x4b\x28\x06\xc5\x4c\x8c\xf2\xed\x75\xae\xdd\xb5\x58\xe6\x54\x50\xc0\x4a\xa2\x27\x2f\xea\x41\xa4\x3a\xfb\xce\x30\x89\x08\x9f\xc8\xe9\x1f\x90\xac\xb1\x68\x20\x19\x95\x9f\x88\xac\x8a\x9a\x0c\x95\xae\xce\x9d\x61\xf3\x91\x7e\xce\xb8\x4c\xae\x8a\xe5\xdb\xeb\xd4\x93\xeb\x24\x1a\x5d\x36\x30\x5f\xaa\xc0\xbb\xa4\xd0\x76\xd8\xb9\x11\x62\xc3\xd9\xb2\xe8\x15\x02\xdc\xee\x84\x6c\xf6\x4c\xa6\xaa\xc9\x95\xf6\xec\xd9\x60\xc0\x46\xdb\xf4\x3a\x6d\xf7\xb7\xd7\xa5\xb2\xab\x21\x4d\x1d\x18\x05\x07\x40\x37\xc5\x22\x3b\x6a\x2e\x93\x74\xde\x24\x73\x29\xd5\xc9\xd8\xa3\xe7\x35\x0a\xa5\x30\x68\x8a\x26\x85\x68\x1f\xea\x06\x34\xac\x1f\xe1\x5a\x57\x98\x98\xd4\x02\xee\x1e\x79\xaa\xb1\x60\x6d\x61\xd5\x94\x34\x29\x38\x40\x8a\x74\x90\xb7\x9a\x3c\xc0\x5b\x7a\x99\xba\xf3\x4d\x33\x45\xaa\xf3\x45\x47\x5b\xe1\xa2\x78\xd1\x8f\x49\x5b\x03\xe4\x1f\x59\xf6\xd3\xb8\x63\x66\xd1\x2b\xda\xe4\xa9\xd6\x51\xeb\xac\x0d\x96\xf5\xf9\x04\x6d\xfd\xa7\x0b\xd4\xd8\xfb\xcd\xd2\xbf\xd2\x0b\xbc\x90\xd7\x3d\x1d\x06\x75\xf4\x12\xa0\x27\xd0\x0d\x81\xab\xe9\xca\x8f\xa5\xb2\x29\x4d\xc1\xb5\xb6\xa4\xe6\x6a\x99\x52\x10\x43\xb4\x99\x42\x08\x32\xb4\x05\x3a\xc0\x3e\xd1\x75\x0f\x4c\xe4\x36\x17\xb9\x48\x39\x75\x71\xa2\x51\xb4\xf5\x28\xe2\xba\x03\x4e\xb0\xef\xb9\xf7\x03\x8b\x80\xcf\x60\x9b\xe1\x78\xfc\x6d\x77\xfc\xb1\x02\x32\xa7\x4c\x51\x16\x12\x95\x43\x02\xcf\x7e\x4b\x07\x9f\x6e\xbf\x7f\xa2\xa2\x95\xbb\x99\xd8\xfc\x92\xe7\xef\x65\x46\x2f\x76\x0b\xf8\x79\x9f\x7f\xcb\xd6\xb7\x83\x15\x9f\xee\x3e\x3d\x7c\x7e\x73\x3f\xbd\xbf\xf4\x0b\x94\x6d\x0f\x66\x12\x41\xa9\x88\xa3\x06\xcd\x47\xbd\x18\x8e\xbc\xf2\x0f\xaa\x41\x80\x1a\x8c\x30\xf9\x5a\xab\xab\xa0\x01\xa3\xe8\x14\x45\x52\xe4\x2b\xec\x3c\xd1\x8e\x44\x56\x71\x0d\x0b\x17\x39\xa6\xa1\xaf\xc0\xbe\xa7\x38\x95\x90\x0d\x3c\xc5\xa0\xe1\x20\xe6\x0d\xb0\xd5\x8a\x4e\x92\xa6\xa5\x95\x51\xdf\xb9\x42\xd3\x28\x5b\x59\x09\xc5\x15\xd1\x66\x6b\x07\x0a\x1e\x2c\xb3\x7a\x54\x18\xe4\x1d\xaa\xba\x09\x86\xce\x43\x41\x51\xad\xa9\xd1\x6e\xaa\x72\x54\x6b\x9d\x4b\x14\x8d\x43\xab\xb8\x4a\x9c\x0b\xc4\x56\x10\xc9\xb8\x24\x96\xa3\x39\x38\x84\x60\x70\xce\xe4\xb3\x08\xb1\x46\x50\x36\xc4\xa2\x2c\x01\xfc\x04\xdc\xb5\xd8\xec\x24\xc0\x03\x4f\x4f\x64\xdd\x5f\xfb\x94\x90\x77\x40\xe1\xc6\x4b\xd3\x11\xf1\x1a\xfb\x0e\x5b\x8a\x8c\xbc\x6c\x42\xf1\x7f\x98\xa5\x11\x85\xac\x2d\x5d\x1b\x96\xab\xa3\x28\xb6\x5d\x77\xb9\xce\x0d\x51\x94\xd4\xe5\x1c\xa3\x9b\x6d\x04\xc1\x88\xa0\x4f\xd0\x41\xdc\x6d\xd3\xb1\xdd\x1d\x2e\x1c\xc2\xf7\x6b\x15\x53\x6c\xc9\x85\x7d\x2d\xed\x00\x1f\x2a\x6a\x45\x15\x26\x85\x5b\x70\x61\x2f\xf3\x5a\x3d\x0d\x96\x1f\xa5\x80\x90\xa2\x2a\xa5\x57\x62\x86\x88\x3d\xdf\x68\xa5\x99\x8b\x09\x79\x09\x51\x14\x85\xcd\x65\x80\x62\xdd\x2b\xc2\x03\xcb\x12\xba\x17\x9c\xd2\x72\xa4\x77\x79\x84\x2a\xd7\xe2\x75\x69\x06\x21\x21\xe2\xbc\x73\x7b\x12\x23\xa9\xf3\x0f\x41\x24\x75\xbe\x8d\x90\x94\x63\x71\xad\x97\x83\xef\x5a\x19\x70\x95\xfd\x24\xde\x90\xa0\x56\xba\xf4\xe8\x95\xe5\x4e\x38\x59\xad\x29\xd4\xc3\xa5\x36\xa1\x12\x94\x5b\x98\xcd\x2a\x96\x59\x5b\xcb\x02\xbb\xb2\x3d\xc9\xd4\xf7\xe6\xed\x74\x77\xc5\xa5\x71\x2c\x8f\xf9\xc7\xb1\x88\x7e\x7e\xf8\xf8\xf9\xdd\x15\x3b\xa6\x9f\xbf\x52\xe7\xd3\xaa\x8d\xcb\xe8\x54\x0a\xd7\x1d\xdd\x6b\x99\xd0\x59\x74\x0a\x5b\xdb\xb5\x50\x98\x16\x7f\xa6\xbf\xec\x59\x04\x06\xf4\x8b\x87\xed\x7e\xf6\xd3\x36\x01\x2f\x2f\xd0\x90\xee\xb7\xe8\xc2\x01\xf9\xa7\x0d\xfe\x19\x90\x7f\xf1\x48\x2f\xf9\x33\x6e\x07\xf7\x22\x23\xa2\x6b\x34\xfb\x26\x4e\xfc\x89\x3c\xf1\x0a\xc8\xf8\x18\x73\xed\x8c\x01\x72\x80\x60\xaa\x30\x01\x27\xe4\xb2\x82\x39\x3e\x82\x5b\x3b\xa7\x97\xd6\x77\x82\x02\xf7\x33\x5f\xaa\xc6\xf2\x27\xbc\xd4\x73\xdf\x69\x37\x1c\xb7\xa9\xfd\xc2\x56\x6c\x4d\xe3\x8f\x97\xd3\xf8\xed\xe6\x34\x26\xd8\x82\x63\x88\xd2\x80\x7c\xf0\x03\xf3\xa1\x9c\x28\x34\xec\x4a\x99\x32\x9c\x27\xc9\x2a\x53\xc4\x1e\x4a\x79\x86\xee\xa1\x04\x3c\x6b\x16\x6a\x52\xc8\xa8\x62\x68\xe3\xb9\xc0\xcc\xc9\x65\x6e\x48\x12\x64\x43\x60\x5c\x00\x18\x96\xd3\x12\x2b\x36\xea\xc3\x0a\x77\x6b\x00\x14\xcb\x38\x38\xf8\x1c\xf7\xd2\x9a\x03\x92\x13\x62\x3c\xf8\xd6\x26\xb0\x56\x12\xe5\x59\xb9\xdc\x11\xd9\x49\x1d\x44\x76\xad\xc9\x2c\x8c\x2e\xa7\x78\xf0\x04\xe8\xee\xc2\xbb\xd9\x23\x73\xca\x17\x07\x94\xdd\x4c\x9a\x89\xd1\xa3\xc2\x17\xca\xd6\xa5\x90\x35\xfa\x77\x5a\xd1\x0c\x41\x78\xcc\xc6\x40\x64\x4a\x45\x3c\xe6\x7e\xab\x99\xae\x0a\xcf\xe4\x9b\xd8\xe3\x33\x27\xb9\x3f\x3c\x73\x56\x61\x82\x7c\xc0\xf6\x2a\xcf\x20\x30\x82\xa3\x11\xbe\x37\x10\xe6\x90\xa1\x6c\x65\x63\xb1\x50\xdc\xce\x0a\xb8\x1d\x3d\x1a\xa8\x76\xa3\x44\x3a\x33\xa6\x4b\x3d\x94\xb0\xa7\x90\x9f\x5a\xfa\xbb\xef\x98\xa0\xa7\x6c\xc0\xcf\x5a\xf2\x1c\x0f\xbe\x4b\x67\xc7\x7c\xe8\x7d\x4f\x01\xfc\x4b\x9a\xaf\x8a\xf4\x9a\x65\x3d\x3a\x10\xef\x3d\xc3\x69\x23\x6a\x7f\xc6\x1c\x9c\x7c\x25\x31\xbf\x08\x5b\x43\xdd\xcb\x88\xfb\x14\xd2\x9e\x42\x7b\xb1\x18\xd8\xfd\xd4\x17\xfc\xbb\x2f\xff\x2f\xcb\xe7\xf7\xff\x7e\x58\xf6\x9f\x3f\x7e\xfd\xfd\x22\x67\xec\xfe\x7e\xcb\xde\xae\xe6\xe2\x7b\x3e\xf9\x34\x55\x04\x6a\xae\x32\xb7\x9e\x77\x6a\xe5\xa6\x74\xf6\xd5\xb0\xde\xd5\x2b\xe4\x5a\x00\x9d\x46\x07\xbe\x17\x30\xc6\xd4\x55\x4c\x31\xb9\x18\xfa\x4c\x31\xca\x0c\x70\xb1\xe3\x73\x06\x50\x0e\x80\xa8\xa8\x23\x06\x27\xc6\x73\x55\x80\x5c\x52\xf4\x72\x38\x66\xa8\x69\xcd\x00\x1b\x20\x4a\x8b\x03\xc1\x3c\x2b\x6f\x33\x28\xd3\x26\x2f\xbb\xee\x6e\x32\x8a\xd4\x6c\x66\x0b\x85\xe8\x38\xe4\xd9\xb7\x06\x84\x7a\xa6\xa0\xf5\x7e\xfa\xa6\xd4\xcc\x27\x24\xcd\xc8\x08\xe8\x68\xf8\x43\xa3\xc7\x68\x55\x0a\x0b\xc3\x84\xe5\x8e\x12\x70\x0e\x0e\xdc\xbb\xa5\xcc\x59\x15\xde\x8e\xb5\xbb\xf7\x35\xc5\x6f\xaf\x7b\x0f\x2e\xa5\xb6\x4f\x44\xb3\xa6\x00\x54\xe7\x6d\x7a\x21\xcd\x16\xad\xe0\x59\xc9\xc1\x8a\x32\xfc\x92\x74\x25\x12\xf2\x10\xb6\x05\x7a\xfe\x0c\x29\x0e\x13\x30\x47\x73\x87\x06\x75\x94\x21\x26\xc3\x27\xaf\xd1\xb3\xe3\x88\x97\x0f\xc8\xb9\x10\x2b\xae\x20\x90\x27\xa3\x8a\x7c\xf7\xe6\x98\x0f\x84\x00\x0d\x22\x1c\x60\x40\xf3\x48\x38\x10\x1b\x66\x62\x17\xeb\x21\xa5\x89\x02\x3b\x94\x57\x79\x8c\x9b\xb4\x6f\xb0\x45\x95\x65\x04\x29\x14\xaf\xa6\x3a\xe5\x49\x99\x93\x7a\x04\x81\x25\x90\xeb\xac\x05\xf3\xea\x8c\x64\x36\x1b\x38\x76\xc7\x75\xae\x15\xfa\x1d\xb3\x6b\x65\x4e\x55\xcc\xcf\x54\x01\x70\xa5\xee\x58\x99\x2f\xb9\xce\x30\xe3\xba\x92\x5b\x55\x7a\x02\xdc\xfc\xdd\xc3\xe7\xe9\xfd\x25\xf5\xd9\xfd\xbb\x7f\xad\x14\xfd\x8e\x22\x45\xf4\x30\x63\xab\x4b\x93\x8f\x08\xfd\x44\x47\x70\xf0\x18\xdf\x1b\x52\x40\xe1\xf8\x45\xba\xae\x74\xe1\xdc\x14\xc6\xb2\xb9\x38\x13\xa1\x08\x2a\x15\x97\xe7\x2c\x5f\xb7\xe2\x78\x42\xa2\x7b\x9a\xc4\xa8\x4f\x07\xdf\x41\x39\x88\x74\x78\x06\xc7\x91\x31\x10\x82\xa0\xc0\x0a\x39\x30\x8f\xe1\x6a\x1b\x62\x47\x31\x08\x78\xe0\xf4\x73\x06\x9e\x91\x67\xee\x13\xea\x36\x5a\x40\x8d\x8d\x6e\x41\x9e\x83\x21\x06\x75\xd7\x0b\x66\x17\x50\xf5\xaa\xad\x9f\xba\x1b\xa0\x5e\x5d\x8c\x63\xb0\x9e\x35\xd7\x3b\xb0\xfe\x90\xcf\x59\xb2\x2b\x69\x86\x6e\xa6\x78\x6d\x69\x66\x72\x15\x18\x63\x8c\xc1\x90\xe6\x46\xe5\xe0\x43\x46\x31\x19\x9e\x16\xbe\xcb\x5d\x4c\xef\x04\x7f\x2e\xe0\x55\x90\x92\xdc\x30\x6c\xd2\xae\x5a\x5d\x4c\x93\x57\xff\x00\x96\x64\x9c\x64\xc4\xf7\x88\xaf\x61\x8a\x83\xbb\x2c\x3a\xea\x32\x6d\x26\x24\x59\xcf\x9a\x67\x5a\x06\xc9\x6a\x55\x37\x29\x19\xeb\x83\x39\xf4\x91\x3f\x6c\xa5\x38\x58\x96\xd5\x00\xb4\xec\xff\x44\x3b\xab\xc2\xd3\xa9\xba\x18\x90\xfb\xac\x78\xb4\xc0\x0a\xeb\x05\xbd\xd9\xed\x92\x28\xab\x8f\x0c\x07\x43\x11\x1c\x59\x89\xb3\x4b\x1e\x48\x7b\x2c\x8f\xcd\x06\xab\x27\x52\x03\x55\xbd\xa1\x1b\x80\x2d\x72\x7a\xe2\x0c\xfc\x22\x58\xc3\xc9\x41\xdb\x12\x4b\xa6\xaa\xff\x48\x31\x65\x15\x9e\xaa\xc9\x9b\x6b\xe5\x52\x33\x5e\xa1\x58\x0f\x31\x62\x79\xb6\x66\x55\x47\x8a\x62\x14\x35\xc2\xe1\x62\x37\x0b\xcb\xf7\xb2\xca\x65\x48\x69\x08\xf1\xae\x69\x70\xbb\x13\x21\xee\x21\xc5\xcf\xc5\xbe\x4a\x7d\x15\xfa\x48\x9b\x1b\x5b\x84\xec\x10\x1c\x9f\xc8\x5b\x7d\x3b\x5d\x2e\xb3\x87\x8d\xf0\x1c\x1c\xa2\x25\x1c\x37\xe7\xb3\xf6\x2a\x5f\xfd\x95\xd6\x8e\xed\xf8\xbc\xb9\xa0\x81\x3f\x6f\x2d\x1e\x90\x53\xfa\xf3\x1e\xa0\x99\xb7\x2f\x7d\x85\xdd\x4b\xdf\xa1\x73\xfb\x93\xdf\xe1\xcf\xed\x25\x58\xfe\xda\x4b\xbb\x3f\xf1\x25\xfe\xdc\x6e\x02\xd8\xce\x77\x75\xd3\xee\x25\x8f\xf8\x73\x5f\x02\xc8\x7d\xaa\xd4\x06\x85\xb0\xb9\x91\x33\x0b\xdf\xdf\x75\x8c\x6b\xbd\xf0\x92\x42\x42\x2e\xb9\x96\x8f\xba\xed\x00\xfe\xe3\xee\xf7\xf7\xf7\x8f\xc5\xc6\xbb\xb0\x15\xd5\xa7\x1e\x5c\xcf\x79\xe2\x1e\x1d\x98\x9b\x28\x54\x47\xa1\x5a\x8e\x3e\x77\xbc\x69\xac\x78\xd3\x95\xbe\xb4\x0d\x7d\xb0\x61\xaf\x04\x1a\xee\x8a\xaa\x00\xd0\x04\x05\x78\x98\x3c\xf5\xe6\xa8\xb7\x15\xf7\x41\xd1\x6c\x14\x12\x02\x97\xe3\xea\x81\xa5\xe0\x14\x6e\xc1\x53\x9b\x08\xfc\x62\xbd\x0d\x30\x06\xbd\xf7\xb7\xd7\xb8\x26\xc5\x36\x29\x3b\xfc\xe4\xc7\x67\x84\xab\x1c\x9f\xf2\x01\x52\xf0\x49\xff\xc5\x57\xdf\x5e\x17\xb5\x8c\xca\x6e\x42\x7c\xa4\x84\xc9\xaf\x07\xc0\x31\xed\x05\x07\xf8\x94\x5f\x4a\x98\xec\x43\xbf\x95\x69\x55\x8a\xab\xfd\x7b\x9e\xde\xf9\x7b\x1b\xbe\xb9\x53\x7c\xfe\x7a\x49\x38\xf3\xee\x19\x59\xe0\x57\x90\xf9\x06\x32\xf7\x32\x90\xba\xcf\x10\x34\x97\x33\x1c\x59\xce\x80\xbc\x40\xb1\x03\xe7\xb2\xf7\x94\xdb\xd1\x6c\x73\xbe\x4f\xb6\xeb\xcb\xe6\xdb\x9d\xfd\xc7\x7c\xf0\x31\xac\xfe\xcb\x1f\x6d\x84\xd9\x95\x70\x83\x06\xb6\x14\x1f\xe8\x32\x46\x92\x18\x47\x95\xf0\x6e\xad\x47\xa7\x95\x8f\xc1\x97\x61\x78\xb2\x25\xca\x05\xfb\x62\x90\x10\x3e\x0f\x98\x7c\x24\x17\x3d\xef\xec\x82\x0a\xe6\x35\x0e\x11\xd6\x2c\xbd\xf1\x70\xb6\xe6\x95\x41\xa1\x48\x47\x75\xb0\x69\x6d\x28\x6b\x16\xd2\xb9\xff\xd6\x42\x20\x4d\x79\xf4\x63\x5e\xa4\xa7\x76\x28\xbf\x46\x6a\x50\x51\xc0\x57\x51\x11\x57\x4c\xaf\x18\xa6\xb1\x40\xb5\x66\x01\xce\xa8\xc8\x0b\x0a\x83\x28\xee\x8f\xfb\xf1\x63\x67\xb1\xf4\xf7\x0b\x9d\xc5\x9f\xde\x7f\x58\x1e\x3e\x3f\x7c\xb9\x48\xa2\x79\xc7\x67\x0e\x7b\x73\xe9\x3e\x1b\x49\x65\x86\xbd\x07\x8b\xad\xb9\xc8\x62\x15\xf5\xe8\x6a\x03\xab\x53\x77\x51\xb6\x64\xc7\x44\x33\x6b\x61\x14\x6c\x4a\x14\x39\xab\xc6\x0f\x1c\x5f\x24\xb9\x51\x51\x06\x74\x24\xc2\x81\xcc\x2b\xb3\xe3\xaa\x31\x0c\xa0\x37\x22\x89\x10\xf4\xe6\xa8\x08\x2c\x20\x01\xcd\xae\xc4\x23\xc6\x29\x38\xbc\x41\x7a\x00\xbf\x60\x45\xb1\x1e\x12\xcf\x14\x39\x1f\xe5\xf6\x7d\xcd\x49\x94\xfd\xc1\xf0\x94\x93\xf2\x6d\xb7\xa8\xf0\xf1\x44\xa4\xf9\x20\xc0\xb2\xe5\x30\xb3\xab\x48\x1d\x59\x44\x38\xcc\xc5\x19\xb3\x79\x8a\xc0\xd4\x2c\x9a\x6d\xa1\x01\x61\x42\xbe\x06\x62\x2e\xa0\x60\x64\x05\xd8\x0b\x78\x59\x00\x70\x2a\x4f\xb9\x6f\x3c\xc2\x2d\xa4\xe6\x7e\x0d\xca\x48\x2d\x3d\x03\x80\x48\xc3\x55\xe8\xd0\xa9\x35\x1e\x99\x8c\xd5\x44\x1f\x31\xc3\x33\x81\xe4\x68\x05\xc4\x04\xa6\xab\x16\xfc\x57\x05\xe3\xcc\xba\x73\xb4\xb8\xc0\x64\x89\xbb\xd9\x17\xcd\x5a\x57\x4b\x76\xd1\x42\x4d\x2d\xb7\x11\xeb\x08\x76\x08\x4f\xbe\xcb\xb4\x02\x08\x40\x35\xe4\x79\xd0\x7b\xd5\x19\x69\x91\x1d\x69\xab\xd1\x31\x96\x1c\x57\x97\x38\x3e\x8f\x3e\xed\x47\xa1\x73\xd6\xb9\x7c\x95\x71\xf6\xdd\x11\x85\x9f\x93\x81\xe8\x6c\x86\xb9\x9e\x1b\x72\xab\x9c\xe7\x96\x61\xd6\x53\x68\x8e\x51\x91\x2b\x13\x3c\xca\x4b\xcf\x4c\x36\xc1\x0d\x8e\x7a\xe4\x3a\xb6\xc1\x54\xdf\xf1\xfa\xc9\x26\x3f\x24\x42\xc4\x00\x01\xd8\x52\x26\x34\x8c\xcf\xae\x99\x8f\x98\xc4\x70\xaf\xc9\x1c\xee\x55\xd9\x61\xbd\x9a\xbc\x9e\x8c\xe7\x52\x93\xc2\x95\xba\x5b\x25\x6d\x30\xf8\x19\x4c\xf2\x62\x88\x2d\xed\x38\xdf\x07\x2b\x42\x60\x17\x8d\xdc\x3f\x2c\x34\x04\x34\x18\xae\xbc\x72\xe3\xb8\x60\x10\x3c\x1d\x38\xfa\xc9\x51\x76\x85\x4e\xa6\xbe\x7a\xa0\x50\x17\x11\x90\x61\x89\x7f\xb5\xa4\xc0\xb1\x52\xee\x18\xdd\x38\xea\x11\x13\x06\x01\x6e\x74\xdf\x68\x69\x56\x0f\xa1\x7d\x5f\x9a\x21\x64\x7b\x6e\x22\x7e\x47\x75\x65\x1b\xae\x85\x5e\x4f\xa7\x7e\xd4\xa9\x9f\x6c\xea\x6b\x98\x47\xc1\x7a\x90\x14\x54\x15\x82\x3e\x75\xdd\x8f\x0c\xad\x11\xeb\x09\x5d\x60\xeb\x49\xdb\x6a\x04\x42\x49\xe1\x20\xa2\xc1\x58\x57\x46\xae\x02\x31\xa9\xbe\x90\x80\x58\x82\xd8\x80\xda\xed\x9c\xd3\x1e\x9e\xba\x1f\x0f\xc4\x6e\x43\x45\x7d\xfc\xf8\xfb\xf4\xf0\xe6\xd3\xf4\xf5\xcb\xf5\x19\x9f\xfe\xb5\x32\x9e\x54\x57\x80\xfc\xcb\x08\x17\x94\x84\x00\xc2\x41\xc6\x7d\xcf\x54\xe7\x01\x0b\xa0\xe3\x9d\xc3\xa0\xc1\xc9\x71\x4c\x16\x85\xf3\xed\x2b\x80\x0c\x08\x90\x31\x40\xdd\x55\x5a\xc0\xf9\x50\x69\xb1\x0f\xfd\x76\xee\x80\xdb\xcf\x80\xb3\x9e\x64\x8a\x52\x40\xb2\xc2\xc8\x9e\xc8\x55\xa1\x6d\x49\x87\x12\x99\xa1\xc7\x5a\x89\x91\x10\x7c\x72\x78\x3c\x63\xa6\x82\x14\xc0\xa2\xb5\x29\x22\x24\x90\x4d\x5e\x03\xb2\x33\xd9\xe5\x96\x77\x7b\x0a\xfd\x40\x04\xbe\xee\x71\x40\xe1\xe0\xcf\x8f\xce\x0e\x88\xc2\xb7\x7f\x60\xd8\xfd\x64\x2e\x5c\x4c\x83\x8b\xe4\x34\x8e\xe1\x58\x20\x11\xab\x2b\x90\xd0\x96\xa0\x8e\xc2\x68\x55\x81\x12\xd8\x82\xd3\xe2\x63\xe9\x1a\xc2\x99\xbd\xae\x56\xcf\x2d\xbb\x2c\xe2\x23\xca\xfa\x97\x85\x99\x45\x00\xa4\xc5\xe7\xe6\xb8\xe5\xc5\x3e\xc6\xd7\xe3\x3c\xbd\x6e\x66\xf8\x15\x53\x07\x95\x09\x8b\x5e\x8a\x34\x29\x38\x75\xab\x1a\x58\x8c\xfa\x42\xa4\xde\x9b\x6e\x56\x07\x11\x3a\x15\xdd\x27\xa0\x17\x00\xf5\x15\xd2\x63\x39\x1e\x9d\x9d\xb1\x5e\xb9\x1b\x79\xac\xd0\xe9\xa2\x89\xdb\x2c\x92\x17\xbc\x9f\x15\x38\xb6\x5d\xb6\x44\x88\xc5\x9a\x34\x61\x8c\x33\xef\x4b\x67\x80\x2f\x15\xc0\x3e\xc9\x46\xf8\xed\xb5\xf4\xa3\xab\x29\x1f\x44\x5a\xed\x45\x39\x3a\xc8\x3f\x7b\xf9\xf3\xa0\x07\xa1\x1f\xe4\x37\x7c\x86\xbe\x97\x1f\x70\x0a\x87\xed\x6a\xd2\x3f\x3e\x7e\x78\xb8\x48\x33\x7c\x57\x36\x92\xea\x6b\x69\x2e\xb6\x04\xed\xbf\x5b\x16\x4f\x4a\x4d\xe6\x79\x9a\x3c\xc1\x95\x1e\xeb\x84\x94\x59\x54\xb5\xc6\xea\xb2\xbc\xfd\x9e\x81\xf7\x6a\x79\x3f\xb0\xa8\xb8\x85\xa1\xf1\x55\xf3\xba\x53\xe2\x45\x75\x2d\x51\x8e\x16\x23\x4a\x92\x0f\xab\x3e\xc2\xce\x14\x9b\xc3\x67\x50\xb0\x22\xb2\x4b\x70\x05\x93\x93\x9b\xd8\xc7\xfa\xfd\xf1\x5c\xbb\x7a\xdc\xed\xe4\x09\xc7\xe7\x5a\x53\x46\xf9\x76\x4b\xbb\x43\xa6\x93\xdc\xf6\x47\x9a\xfd\x88\xda\x5f\x35\x04\x0e\x5e\x2e\xbd\x9a\xd6\xbf\xb7\x0b\xe5\xc7\xb3\x72\x25\xab\xc2\x32\x03\xc7\xee\x7e\x35\xab\xa4\x76\xbe\x9e\xe7\xa1\x17\x3d\xd6\xdd\xe5\xf4\x17\xea\xee\xf7\x77\x9f\x1f\x96\xab\xb8\x8f\xef\xea\x06\x79\x34\x7c\x49\xca\x3b\x75\xd2\xf2\xc9\x27\x99\x22\x28\x30\x3d\xaf\x05\x5d\x46\x2d\xb5\x9c\x30\x7e\x5f\x6b\xa9\xcf\x8a\x02\x5a\x2f\xdf\xf7\x12\x97\xd5\x97\xef\xda\x53\xaf\x60\xe9\x61\xd7\x3a\x5f\xda\x71\xb3\x80\x61\x1a\xef\x31\xb0\x84\x9d\x02\x46\x78\xea\xd3\xda\x07\xf6\x7e\xcf\x7e\x81\x6b\x28\xc7\xef\x2e\x98\xdb\x4b\x0a\xa7\x16\x7f\x68\xed\xe0\xad\x92\xf0\xf2\x35\x9e\xd3\xef\x1b\xef\xf2\xfc\xce\xbf\x8a\xed\xfb\xee\xee\x76\xe3\x73\x3d\x1a\x84\xcf\x9f\x40\x63\x01\xe8\x0b\x9f\xcf\xff\x1f\xe9\xff\x8f\xd3\xd7\x3f\x3e\x5c\xee\x7a\x6f\x37\x09\x7e\x83\x0b\xfb\x12\x46\xd6\xb0\xd6\xb8\xd3\x56\xbe\xa1\x29\x05\x91\x0f\x72\xde\x7a\x89\xec\x0c\xa1\xdd\x4e\x44\x3c\x71\x48\x6e\x73\xda\x6e\x38\x24\x6f\x71\xda\xde\x72\x48\x6e\xc7\xd5\x3f\x7e\xbe\x1c\xeb\xfb\xa7\xd6\xda\x45\xcd\xfb\x9f\x29\x2e\x6e\x48\xa8\x5f\xb3\xbc\xa5\xbf\xae\xcb\xd8\x77\x7f\xab\x4e\x7b\xf2\x1d\xae\x88\xd8\x87\x17\xef\x12\xbf\x66\x0c\x1e\x3e\x1c\x1e\xa6\x8f\x9f\x1e\xde\xdc\x4d\x17\x73\xf7\x21\x6c\xa6\x82\x74\x76\x8d\xcb\xc1\xd7\x9e\xbe\x0b\x41\x43\xae\x4b\xa3\xf6\x8a\x44\x3d\x9e\x81\x4c\xcc\xa9\xb8\xd4\x45\x57\x4e\x19\xe4\x24\x89\x61\x6d\x1a\x95\xa7\x9a\xe1\xa9\x2d\x28\x34\x62\xd1\xef\x69\x4f\x73\xd6\xb2\xf6\x00\x1c\x35\x3d\x29\xb5\x05\xd7\x15\xa0\xe9\x54\x4d\xa4\x4a\x5d\x6c\x58\xdc\x18\xb9\xdc\xc1\xb5\x7a\x02\xb9\x31\x5b\x44\x1d\x39\x1e\x19\x6e\x16\x8d\xd2\xee\x66\x1f\x2b\x4a\x5e\xc8\xf9\x84\xfa\x2b\x44\xdd\x2d\x9e\xcc\x47\x7e\x27\x30\x22\xb4\x45\x39\x20\x15\xf4\xaa\x5a\xc8\x18\xb9\x4b\xa2\xc1\xec\x3d\x21\x51\x43\xd3\xb8\xba\x9d\x82\x33\xd8\xd9\x45\x09\xee\xe1\xc4\x2b\x83\x5b\x27\xe4\xc9\x89\x05\x46\x4d\x13\x89\x42\x16\x8d\x0f\xc6\x35\xbb\xc4\xce\x74\x7c\xc5\xc8\x15\x25\x50\x5d\xa7\xb5\x81\xf2\xd9\x51\x0c\x0b\xca\xda\x5d\x66\x8d\xd2\xc2\xd2\x33\xbf\x09\xc4\x9c\xba\x00\xe2\x93\xb5\xe2\x0f\xef\xde\x5f\xac\xdb\x07\x5a\xb3\xef\x53\x77\x9d\xe8\xe0\x7b\xa7\xbd\x8f\x31\x1c\xe4\x20\xc6\xf0\xed\x75\xc4\x40\x50\x9d\x49\x81\x14\xb2\x01\x5a\xf2\x31\x9d\xb0\x6b\xba\x97\xe1\x3c\xb0\x4b\x1d\x3d\x47\x28\x43\xa8\x49\x89\x41\x35\x71\x00\x75\xa0\x03\x42\x29\x6a\x3a\xe0\xa2\x49\x7e\x7c\x42\xc2\xdb\x0e\x3e\x97\xb6\xf7\x91\xfb\x21\x47\x58\x8b\x21\x6b\x59\xbf\xa3\x62\xc8\x60\x62\xee\x66\x80\x62\x96\x68\xce\xba\x15\x32\x13\xd5\x9e\xce\x37\x25\xb0\xa0\xc1\x79\xe1\x7c\xa3\x83\xcf\x39\xe2\xd6\xbb\x99\x5d\xec\xdd\xb1\x2b\x32\xcf\xc9\x31\x42\x2b\x2e\xb5\xbd\x3c\xd8\x53\x4a\xf2\x66\x1c\x5c\x54\xa2\xc5\xa2\xd9\x83\x99\x97\x66\xae\x16\xb5\x9b\x48\x67\x2c\x7c\x58\x55\x07\x04\xbe\x3a\x99\x59\xf1\xa9\xf4\xae\xaf\x1f\xde\x7d\xbc\x18\x99\xab\x2e\x67\xb1\x20\xd5\xc6\xeb\x40\xab\x02\x6d\x10\xac\x53\x18\x78\x62\x58\x74\xa3\xfc\x20\xd0\xfb\xf9\xc8\xd5\x55\x9d\x7a\x05\xb5\xd4\x0a\x43\x8a\x92\xbf\x91\xa1\xd6\x8c\x47\x63\xa2\x58\x1d\x0a\x77\x83\xeb\x8e\xb3\xeb\xc0\xc7\x62\x75\x66\xf1\x2c\x83\xdf\xb3\x43\x09\x0c\xa5\xba\x30\x0a\x50\x78\x4d\x31\x91\xfb\x00\xe1\x03\xd5\xc6\x4e\xfd\x6b\xf8\x57\xeb\x8f\x95\xf2\x0a\xe7\x2d\xfe\xf4\xf8\xe4\x1c\x04\x42\x8e\x57\xfb\xe3\x5d\x67\xdf\x9b\x31\x8b\x28\x6a\xea\xa2\xc5\x6f\x30\x8d\xd0\x74\xd4\xae\xfd\x19\xa0\x31\xd1\xb8\xb8\x34\xf6\x48\x8e\x95\xc3\x5c\xbd\x77\xf0\x4a\x64\xc5\xff\xd2\x7a\x49\x8c\xc0\xb2\x8e\xc9\x3a\x4c\x36\x70\xdb\x2b\xf5\xe1\xf7\xbb\x8b\x64\xdf\x87\xb8\x29\xd7\x65\xda\x1d\xb9\x9a\x9c\xef\x41\xc3\xa4\x5e\x71\xdb\xba\x7d\x4b\x86\xee\x16\x07\x45\x6d\x9d\x7c\x2c\xd1\x45\x84\x7c\x2e\xd0\xdd\x52\x74\xb2\x18\x0c\x34\x6a\x92\xe5\x86\x24\xe2\x59\x93\x96\x92\xe6\xb2\x52\x5a\x3c\x70\x7d\x0d\xa6\x5a\xdd\x83\x6c\xf9\x61\xa2\xa0\x05\x0b\x6a\x91\xa1\xb1\x2e\xc5\x3e\xf3\x11\x91\x4d\x7d\xac\xb3\xe6\xfa\x59\x71\xca\x5a\x36\x59\x8c\xd7\x4c\x89\x5a\x95\x85\xca\xd0\x0c\x94\x1e\x9f\x0d\x28\x55\x03\x7b\x60\xfb\xf6\x98\xe7\x27\xf5\x2c\x93\x1f\x65\x7f\x03\xdc\x01\xf5\x2c\x9a\xab\x09\x1f\x54\x59\xba\x63\x56\x60\x4a\xf9\x2c\x23\xa0\xa5\xc8\x91\x7d\x21\x85\x40\x9f\xa3\xd5\xc2\x00\x80\x01\xc9\x62\x0a\xdd\xbd\x98\xc3\x70\x80\xbe\xfa\x62\x9f\x14\x0c\xe2\x59\x0e\x0c\xcf\x51\x01\x6b\x15\xb5\x34\x39\xeb\xd1\x98\x10\xfe\x4a\x53\x4c\xb2\xe7\x21\xdd\x11\x5f\x38\x4a\x8b\xf6\xb6\xc1\xbf\x2b\xc4\x23\xb1\x61\x3d\x62\x07\x0f\x23\x14\x17\x0c\xc0\xba\xd8\x27\x7c\xea\x65\x60\xaf\xa2\x9f\xa3\x22\x61\xb4\x39\xba\xe8\xec\x55\xc1\x3a\xb9\x02\x64\xe2\x02\x00\xd1\xeb\x67\x5f\xb8\x38\xd0\x30\x1d\x4b\x9d\x50\x4a\xe9\xad\x96\xf2\x08\x9a\x31\x12\x68\xd5\x5d\x57\x34\x77\x41\x9a\xaa\xa8\x92\xbc\xc6\x3a\xad\x80\xeb\xd5\x40\x2f\x6c\x3a\xa4\xe0\xb8\xb5\x59\x20\x9f\x3b\xec\xda\x9a\xea\x49\x2b\x74\x77\x5e\xc3\x8e\x03\xe5\x1c\x80\xd0\x2b\x32\x74\x34\x9c\x58\xd2\x59\x39\x5b\x1f\xeb\xc4\x5d\x6c\x02\x1f\xa7\xf5\x24\x13\x1d\x20\x71\xc9\xe6\xbe\x4b\xd1\x48\xa3\xb0\x72\x26\x59\x2b\xb2\x60\xe6\xa8\xd9\x9c\xba\xa8\x36\x57\xf3\xbb\xbb\x2f\xfb\xb7\x1f\xef\x3e\x5f\x40\x42\x3c\xa4\x27\xaa\x50\x34\x68\xbb\xb2\xaf\x9d\x70\x24\x2a\xc9\xda\x09\x57\xd1\x29\x8d\xe2\xc9\xe1\xc9\x19\xc7\xeb\xd6\x9b\x7d\x83\xe1\x6a\x8c\xdb\x7f\xe2\x53\x28\x84\xe4\x62\xa6\x09\xb4\xf7\x8d\xe7\x02\xb7\x7b\x1d\x3a\x80\x92\xeb\x71\x57\x2c\xe8\x66\xc0\x9e\x11\x81\x50\xc0\xcb\x82\x1d\xbf\xb1\xe6\x52\x62\x0d\x89\x44\xd7\xf9\x2d\xfb\x51\x1b\xf4\xf1\xb5\x2a\xc6\x73\x2a\x1a\x9d\x6c\x7d\xa1\x54\x1c\x87\xa5\x75\xd4\x9f\x53\x01\x61\xa3\xd5\x88\x57\x76\x9d\x06\x50\xd4\x9f\xde\xd9\x9a\x3c\xa6\x39\x00\x67\xcf\xd9\xfd\xec\x07\xa5\xca\x7f\xc5\xb0\x9a\xc7\x51\x2d\x22\xf8\x21\x45\xcb\x46\x9c\xa7\x2b\xa4\x03\x98\xc1\xb4\xc8\x6b\xa5\x77\xcd\xc9\x89\xd2\x85\xb3\x99\xed\xb2\xd4\x34\xd9\x11\x90\x25\x51\xec\x04\x24\xab\x96\x05\xa9\x34\x9d\x16\x91\x86\x55\x3f\x90\x83\x8c\xa4\x9e\x4e\x38\x0f\x91\xb0\x2a\x73\x24\x3d\xc1\x49\xfe\xf1\x8f\x3f\x1e\x3e\x2c\x57\xcd\xa6\xad\x8a\xf5\x36\x0a\xd6\x81\x51\x83\x1d\x4a\x11\xac\x35\x42\xde\x80\x43\x6e\x54\xad\x2a\xf0\xb2\x06\x0f\x89\xb5\x42\xc4\x33\x69\x74\x43\xb7\x80\x9a\x5f\xe5\xa9\xa1\x2a\x62\x42\xb2\x12\x6c\xc7\xa4\xfb\x73\xd5\x82\x9c\x99\x32\xbb\x12\xa1\x4a\x52\xa5\x29\x45\x17\xdb\x04\xda\x47\x24\x9e\x37\x07\x95\xa4\xcd\xda\x24\x6d\x11\x1a\x24\xed\xd1\xe6\x8c\xe0\xfa\xda\x30\x1c\x1e\x7f\xf7\xc7\xab\x8e\xe8\x8a\x1a\xe7\xaf\xc9\xc0\x80\xa2\xe2\x11\x45\x20\x07\xc4\x28\x06\x6f\x18\x2a\x75\x55\x89\x9c\xc0\x15\xa0\xc9\x50\xc0\x7e\x01\x27\x6a\xe2\x59\x0d\x32\xe0\xee\x02\x36\x77\x0f\xfa\x4e\x83\x7f\x72\x83\x82\x01\xe0\x45\x07\x80\x21\x25\x4d\x0c\x21\x5e\x58\x04\xb8\xe1\x4d\x4f\xc5\xf5\x45\x19\x25\x9a\xeb\xb3\xe6\x17\x68\xc2\x48\xd4\x7a\x9d\x45\xfe\x46\xec\x1c\x15\x47\xb4\x70\x75\x19\xbb\x15\xea\xc8\x73\x75\x4d\x66\x24\x0c\x25\xe6\x60\xb3\x9f\x95\xda\xb5\x26\x47\xd0\xee\x49\x96\xa2\xbc\xa8\xbc\xa7\xbc\x26\x42\xf3\xeb\xfb\x2e\x6b\x1f\x1c\x3b\xe6\x39\xd3\xed\xcb\xd5\xf9\x56\x36\xe6\x5b\x0d\x56\x5f\x87\x90\x35\xf6\xc1\x22\x5a\xf6\xe2\xd9\x94\x88\x44\x8b\xaf\x86\xe6\x84\xf4\xe8\x81\x1d\x92\xdb\xa2\xa5\x0e\x91\xa7\x0e\x44\x94\x09\x65\x04\x2d\xcd\x28\x86\x76\x45\xac\x9d\x29\x25\x17\x49\x59\xf4\xc3\x5c\x95\xdc\x11\x71\x49\x4a\xb3\x3e\x53\x1e\x99\x79\xd1\x07\xca\xf3\xaa\x62\x71\x8d\x07\xe3\xe8\xf8\xab\xd7\xf3\xbf\x69\xdb\xb9\x85\x59\x56\x26\xc0\xfd\xb0\x52\xa0\x44\x65\xdb\xf2\x0b\x8c\x7d\xc4\x3b\x17\x6f\x07\x80\xfa\x3d\xf9\xdd\x9f\x5c\x09\xcc\x28\xcc\xca\xa2\xb0\xd9\xb2\x56\x50\x76\x8c\xa6\x03\x9f\xab\x20\x79\x0b\x62\xa1\xec\x3d\x62\xcd\x1a\x7c\x3c\xe1\xb5\x41\x91\x04\x10\xb7\x00\x02\x1d\x0c\x0c\x9a\x5d\x99\x30\x6f\x80\x5d\x86\x31\x77\x8a\xdb\x2e\x47\x09\x18\xeb\x88\xe6\x73\x96\x29\x85\xbc\x98\x01\x10\xcf\x56\x2e\x86\xe7\x00\x37\x92\x93\x43\x50\x16\x56\x92\x6c\x32\x22\xe6\x90\xa0\x1d\xbb\xeb\xc9\xc9\x4b\xeb\x9b\xe2\x45\x77\x8b\xbe\xa8\xbc\xa7\x58\xbe\x5c\x14\xd4\x40\xc1\x26\x55\x31\x4a\x49\x9e\xe3\xf5\x41\x9a\x2d\x81\xc9\xed\xb5\x29\x48\x39\x07\xbb\xb9\x2c\xa0\x64\x98\xf3\x1e\x34\x35\x86\xc7\x26\x02\x47\xcb\x36\x16\x16\xa5\x34\x18\x00\x3f\x48\x27\x8a\x61\x66\x8f\x42\x04\xd1\xce\x44\x8d\xae\xc8\x5b\xa8\xe8\x55\x74\x7b\xd6\xe4\x1f\xe9\x75\x74\x7a\x1f\x94\x28\x40\x3e\x10\x19\xa6\xcc\xd9\xb2\xff\x50\x64\x54\xc4\x24\xd4\x87\xa7\x99\x90\x48\x10\x03\x9c\x62\x0c\x2f\x70\xdf\x81\x9b\xbc\x33\x60\x55\x98\x78\x29\xd5\x31\x4a\xf7\x6a\x55\x30\x06\xb1\x2c\x01\x3e\x43\x0a\xc9\x45\xb5\x21\x24\xc5\xf1\x08\x57\x56\x51\x1a\xa1\xee\x00\xa4\xf3\xd5\xf2\xc4\xc2\x7c\xfb\xf1\xca\x82\xbc\x08\x11\xb5\x5e\x86\xfc\x6f\xd9\xf5\x1a\x14\xfd\x5d\xd9\x92\xd2\xe4\x73\x52\x92\xf0\xaa\x65\x1c\xe0\xeb\x66\x2d\xeb\x30\x2e\x16\xc7\x03\xe2\x5d\x31\xee\xba\x82\xd7\x23\xa3\xad\xba\x16\x60\x91\x18\xa1\x2f\xa0\x8d\xb4\xb0\x41\x39\xc0\x14\x08\x89\x8c\x8e\x0c\x86\x94\xac\x5c\x0e\xe4\x1a\xe7\x19\x5a\x2c\x4a\x05\x16\x6e\xae\xef\x23\xc3\x83\x08\x2f\x85\x59\x17\x51\x27\x08\xc4\x83\xea\x4d\x00\x78\x81\x2b\x2c\x4e\xb1\x17\xd7\xdb\xdc\x1c\xd0\xcc\xd9\x2e\x06\x59\xd1\x13\x65\xfa\xcb\xc3\x1f\x77\x17\xce\xd3\x87\xf6\x94\xdf\x91\x5b\x5b\x31\x0c\xae\xe1\x0f\x20\xdf\xf9\x0a\xfc\xc0\x0a\x57\x78\x86\x3e\x50\x0e\xd4\x79\xa0\x03\x77\xde\xf7\x5b\xb0\x2d\x7f\xf9\xf3\x76\x3f\xf1\x81\x9a\x7c\xaa\xb9\xa7\x48\x2b\x55\x5c\x64\x69\x49\x2f\xcf\xbf\x99\x7c\xf9\xc2\xde\xe9\x5a\x86\x09\x5c\xb3\x41\x9b\xeb\x35\xad\xd5\xf7\xb0\xd1\x07\xdb\xe9\xdf\x5f\xff\x78\xfb\xf9\x61\x9a\xee\x2e\xa6\x4f\xdf\x08\x4f\x89\xfe\x55\x43\x3b\xf8\x3c\x60\x35\xd3\x4a\x53\x2b\x26\x63\x00\xc4\x84\x57\x66\xf6\xc1\x4d\x7b\x2b\xa6\x66\x01\x82\xc1\x11\xdc\x8d\x21\x18\x21\xf6\xd6\x5d\xec\x4b\xec\xae\xf5\x83\x3c\x2b\x82\xf9\x42\x84\x15\x2d\xa8\x76\x1e\xd6\x42\x31\xd4\x97\x1b\x25\xa2\xeb\xee\x13\x41\x8a\x96\xba\x4b\xb2\x3f\x45\x57\x90\x0c\x00\x9a\x2c\x5f\xd4\x95\x25\xbd\x16\xab\xd1\xd2\xf5\x0a\x12\x24\xc5\x89\xb2\x2c\x2f\x63\x38\xf2\x9c\xd4\x89\x29\x86\x0d\x37\xab\x75\xc2\x3d\xb8\x1b\xff\x55\xb1\x0a\x66\x4e\x83\x12\xa5\xcd\x3e\x45\xa7\x3e\xb2\x35\x4b\x4e\xb1\x37\xd7\x23\x7b\xbc\x36\xbe\x3e\xef\xf9\xa3\xd6\xca\x0a\x9c\x9e\xf5\xfc\x68\x4f\x6f\x0e\x3e\x28\x7d\xfd\xc0\x5a\x79\xda\x41\x45\xbe\x33\xba\xba\x30\x98\x01\x6e\x97\xd9\xca\xd2\x70\xe4\xea\x8c\x94\xfc\xe8\x34\xdb\x35\x82\xf4\x87\x7b\x53\x3f\xe7\x12\x0b\x76\xf9\x36\x13\x66\x2a\x57\x0d\x44\x84\x85\x93\xa5\xf2\xc1\x49\xab\xf1\x09\x6a\x75\x21\xf3\x50\x64\x52\x5e\x37\x76\xa2\x93\x2b\x88\x0b\x25\x99\x84\x5d\xa1\x51\x51\xe1\xe7\x18\x1c\xdb\x9e\x0f\xbd\x3d\x31\xe1\x9e\x40\x57\xfa\xb2\x5c\x14\x53\x3d\x6c\xc1\x54\x00\x03\x8c\xb8\xed\x1b\x0a\xc0\x02\x32\x73\x6e\x63\xd8\x28\xce\x3f\xe5\x81\x62\x4e\x91\xd8\xea\xc6\xae\xe2\xd1\xec\x3d\x0a\x7a\xb7\xe0\x68\xac\x8a\xec\x3a\x1a\x8d\x5c\x7d\x33\x08\x6c\xe9\x34\x7b\xee\x06\x9c\xc5\xbd\x1f\x3c\x70\xb1\xb0\x53\x40\xc8\x2a\x6e\xd7\x15\xd9\xb4\xbb\x0d\x04\x46\x25\xdc\x06\x02\xbb\x0e\x63\x83\xf2\x96\x5b\x80\x5f\x30\x4f\x23\xbc\xa2\x57\x3c\x5d\xcf\x87\xb6\x99\xde\xff\xbe\x5f\xde\xbc\xfd\x3a\xbd\xbd\x18\xe3\xb7\x1b\x31\xc7\x1a\x8b\x1b\xf9\x76\x37\x24\xcd\x72\x7d\x65\x80\xc1\x3d\x21\x11\x91\x42\x71\x9c\x6f\xaf\xa3\xe5\xa2\x4a\x5d\x8b\xb1\xfb\xe0\x28\x83\xa1\x9a\x56\xcf\x80\xe1\x19\xa1\x59\xc0\x06\x4e\x23\xa1\xa9\x07\x07\x47\xfc\x82\x14\x35\x24\xa6\xc5\x35\xc0\x60\xc7\xd6\x7e\xa0\x23\xc8\x19\x7d\x78\xef\x17\xbd\xd1\x49\xa6\x39\x61\x44\x44\x92\xab\xff\xd8\x38\xe1\x63\x5c\xc6\xc1\x0c\xe1\x29\xf6\x0a\x5c\x0f\xdc\xdb\x9e\x59\xeb\x78\x13\xcc\x12\xc7\xbd\x19\x4f\x0f\xae\x19\xd7\xc6\x38\x97\xe6\x6a\x97\x27\x50\x0b\xa3\x9e\xcc\xba\x3a\x67\xcb\xe9\xe7\xd2\xb4\xdc\x54\x2c\x2a\x95\x1c\xad\x8e\xac\xaf\xae\xb8\xbc\xc8\x73\xad\xaf\xf2\x9c\x54\x2c\xcb\x47\x53\x76\x7d\x63\x8e\x29\x69\x66\x23\x69\xd2\xbf\x02\xd0\x19\x71\xe3\x46\x48\x24\x06\xe0\xb4\xd6\xea\xca\x94\x07\x64\x17\xf2\xf2\xc5\xda\x52\x31\x6c\x1e\xae\xa4\xa8\x60\xbe\x86\x05\xa9\x89\x5c\xf0\x29\x1f\x25\xb8\x1a\x06\x58\x05\xae\x62\x69\x20\x12\xf7\x90\xea\x9a\xe0\xe7\xae\x78\x25\xd6\x50\x3b\xb6\xb1\x88\x96\x01\xe3\x34\x3b\xe3\xbb\x41\x33\x45\xdf\xaf\xae\x81\xf6\xcf\x80\x2b\xf0\xae\xd6\x05\xda\x03\xe8\x97\x56\x0d\x63\x1b\xbe\xed\x10\x1d\xc3\x05\xdc\xbb\xd3\x30\x09\x72\x37\x11\xe6\x4c\x8c\x60\x48\xeb\x0b\xcc\x1f\xc4\x4d\x77\x76\xec\x2d\x57\x31\xa9\xe7\x0e\xf5\x05\x89\x97\x64\xc2\x39\x3d\xa1\xd6\x3f\xfc\xef\xfd\xfe\xee\xc3\xef\x97\x72\xf4\xfe\x29\xd5\x34\x66\x7e\x0e\xec\x43\xac\x4f\x63\x53\x9c\x30\x05\x50\x98\x7c\xa4\x8e\xc4\x2c\xdf\x1d\xca\x8b\xf8\x04\x97\x62\x8a\x70\x3b\x84\xb9\xe3\x4f\xd7\x6f\x22\x43\xa8\xba\x25\xcf\x7f\x0a\xc1\x62\xe0\xb0\x0f\x48\x87\x49\x74\x3c\xe7\xad\x09\xde\x18\x77\xfa\x13\xd8\x19\xfa\xae\xdf\x09\x71\x21\xbd\x74\x89\xbf\x31\xa3\x5b\x34\x2d\x7c\x92\x5e\x91\xae\x99\xd1\x24\x34\xea\x69\x48\x65\x64\x9d\x4c\x1f\xef\x2e\x1d\xe9\xef\xb6\xb0\x95\xb1\xd9\x84\x76\xa5\xc0\x92\x39\x1d\x62\xe6\x8d\x3d\xf0\x69\x48\xb6\xcc\xb8\xcf\xd6\x59\xa7\xb5\x9a\x53\x44\x82\x41\x66\x7d\x73\xad\xeb\x94\xd6\x4c\x31\x93\x8b\x59\x59\xc5\x18\x6c\x73\xe9\xdb\xcb\x81\xa1\x77\xcf\x43\x86\x16\x49\xe1\x38\x85\x85\x5a\x73\x54\x80\x0a\x8d\x78\xcb\x16\x2a\x34\x02\x9b\x5a\x91\x22\x7a\x52\xd3\xfa\x9b\x48\x73\xa5\x67\xa1\x42\x97\x13\x54\xe8\xa8\xd6\x2d\x5b\x70\x0c\xa1\x5c\xab\x73\x88\xed\x29\xb7\x1a\x26\xc3\xd7\x4f\x57\xa7\xc2\xc3\x93\x53\xa1\x9e\xd6\xda\x4e\x32\x16\xb2\xfc\xe7\x31\x0f\x5d\x37\x14\x14\xf9\x89\x64\xac\x14\x4e\xf0\xa8\x97\x5e\x2b\x9e\x07\x2c\x4f\xcc\xfc\x5d\xf8\x7c\x32\x09\xe5\x0e\xb7\x15\xa6\xff\x4e\x83\x2b\x96\xe4\x97\x87\xcf\x6f\xfe\xb8\x98\x01\xbf\x6d\xf1\x29\x01\xc5\xa8\xf3\x66\x7e\xe9\x15\x7c\xeb\xe5\x71\x3e\x9e\x68\x82\x14\xd5\x04\x64\x4b\x89\xa1\x1e\x56\x66\x91\x6b\xbc\x22\xca\x2a\x82\xc8\x7a\x69\xca\x68\x19\x69\xc1\xa6\xdc\x34\x85\x07\x45\x47\x4b\x23\xad\x4c\x63\x11\x5b\x08\x6c\xb1\xea\x0b\x9a\xd3\x84\x7c\xf9\x08\xf3\x09\x0a\x81\xd8\x4d\xa2\x0c\x00\x2b\x86\xc8\xf0\xbe\x06\x22\x9b\x41\xad\xed\x06\xf4\x9a\x02\xb1\x49\x13\x48\x13\x28\x1c\x81\xbd\x5b\xa6\x53\x0d\x07\x05\xc9\x2f\x80\x15\xed\x51\xa1\x4f\xc4\xd8\x66\xf8\xd5\x42\x5a\xe4\x80\x82\x2a\x34\x32\x70\x32\xb7\x15\x50\xe2\x34\xe3\xdc\x5b\xca\xb9\xfc\x71\x00\x36\x06\xc0\x5f\x3a\x10\x4b\xbd\x12\x76\xac\x34\x09\x8b\xe9\xdd\xaa\xab\x8f\x88\x3c\x48\x6c\xd8\x55\x3a\xb4\x7e\xe1\x04\x59\x1e\xf9\x22\x9e\x78\xc2\xee\x59\x8f\x40\x76\x98\x52\xa9\x6b\x80\x2c\x5a\xad\xa0\x92\x7f\x06\xc3\x3d\x5b\x82\x4b\x4d\x29\x52\x93\xd6\x4a\x21\x3d\x4e\x34\xab\x30\x43\x61\xcd\x08\x27\xf8\x12\x74\x30\x51\xbe\x67\x29\x5a\x18\x60\xec\x81\xb1\x59\xee\x43\x24\xd1\x3e\x65\xfd\xad\xd5\xc1\x3f\x99\x42\x65\xb7\xc1\xa1\xb2\x8d\x38\xf5\xb0\xec\x3f\x7e\xb9\xff\xf8\xe9\x42\xa3\xfa\x8d\xb6\x20\x7f\x45\xcc\x6a\xf8\xf1\x87\x58\x0a\x65\x91\x59\xc2\x65\x61\x9b\xad\xfe\x38\x5d\x7d\x0d\x07\x1f\x7b\x3e\xf6\x59\xa4\x93\x3e\x8b\xa3\x54\x8f\x8f\x7f\x8d\x3e\x8b\x34\xfa\xe9\x40\x51\x76\x78\xa4\x45\xc9\xa5\x69\x40\xdc\x04\xc7\x99\x51\x4a\xf1\xd8\xaa\x9f\x15\x01\x08\xb4\xf3\x55\xc4\x65\xaa\x2e\xc9\x1c\x43\x5a\x05\x62\x27\x27\x91\xd3\x93\x78\xea\x69\x98\xf5\x24\xfc\x0a\x72\x93\x00\x67\x02\xb5\x83\x4f\x61\x2d\xd0\xe8\x49\xeb\x33\x18\xd1\xf2\x8c\xcf\x8a\xc8\x89\xac\x2b\x0d\xa9\x92\x22\x1a\xc0\x39\xd5\x8e\x89\x3d\x6b\x98\xf7\x18\xfc\x3d\x1e\xad\x3f\xcf\x88\xc8\x16\x4d\xad\x49\x2b\xd8\x16\xc3\xaf\x7c\x95\x62\x4a\x3b\xc4\xe8\xab\xb0\x1b\x66\xde\x2d\xe8\x38\x83\xc9\x8d\xcf\x6c\xbe\x8c\x9c\xcf\x4a\xa7\x6d\xe2\x67\x59\x25\xd2\x1c\x9c\x0a\xb1\x0d\xd4\xc8\xcd\xa9\xfb\xf5\xfd\x72\x8d\x7a\xee\x37\x7e\x0a\x74\x80\x32\x5f\xa3\x9e\x63\x59\xa0\x94\xd9\x70\x80\x21\xf0\xba\xa6\x3a\xe6\xe6\x8a\x58\x5f\xc5\x51\x6e\x07\x9d\xb0\x9d\x9d\xfe\xbd\xe8\xcf\xfb\x92\xc6\xae\x71\x72\x93\xc1\xd1\xa8\xb8\xc2\xe7\x84\x70\xcf\xe0\x83\x3b\x72\xe2\x75\xe9\x79\x5b\x2a\x9d\x35\xab\x57\x1e\x8e\xc6\xf9\x52\xc0\x3a\x81\x07\x95\x34\x6a\x10\xf1\xc3\x6e\xb1\x53\xb7\xc3\x25\x0f\xd3\x74\x2d\x86\xf9\xdb\x56\x4a\x5a\x87\xbe\xa4\x35\x7e\x88\x0e\x21\x84\x94\xb5\x46\x32\x0c\x14\x49\x4b\x95\xc5\x17\xa7\x67\x2a\x0d\x27\x0d\xe8\xb5\xac\xf2\x0b\x41\x1e\xfc\xeb\xbc\xfa\xe7\x6c\x2d\x02\x8a\xbd\x72\x1b\xc0\xad\x06\xd8\xe0\x0d\xb1\xc1\xc7\xb6\x1f\xec\x68\xcf\x84\x40\x40\x8e\xa0\x91\xa0\x2a\xe4\x83\xa6\xc5\x65\xec\x1b\x9d\x5c\x6b\x4b\x93\xb9\x2a\x9a\x5a\xd5\x54\x40\x60\x38\xe4\xe0\x38\x94\x05\xbc\xff\xac\xaf\x9f\x19\x5c\x53\x8c\xf4\xdf\x18\xaa\x9e\x3a\xfb\x86\x5c\xef\xe6\x62\xbf\x18\xf8\xe5\x6c\xbc\xb5\x18\x11\x51\x9c\xd8\x67\xea\xea\x12\x8b\x48\xef\xcb\xcd\x2c\x6b\x8f\xfb\x0f\x16\x34\x52\x15\xb4\x04\xc0\x4f\x4a\x8b\xd4\x7f\xa1\xe7\x37\xad\x96\x17\x59\x40\x4f\x3a\xaf\xee\x3f\xfe\xf6\xdb\xc3\xe5\x52\x4a\x5b\x9a\x76\x29\x83\x12\xcc\xf0\x61\x57\x78\xd8\x5c\x8c\x03\xa5\x25\x99\x8d\x0d\xc9\x73\xa7\xca\xc9\xb7\xd7\xc0\xfe\xd0\x0a\xb0\x5b\x03\x86\xe2\xbc\x70\xa3\xcc\xed\xdb\x6b\x6a\xb9\x3c\x93\x92\xcc\x5a\xb3\xb1\x76\xe0\x08\xbd\xba\xd8\x6b\x3c\xad\xdc\xd9\x8d\xd2\x35\x44\x2d\x31\xd3\xbf\x6f\xe3\xfd\xed\xe3\xc7\x4b\xb5\x36\x6f\xec\xb8\x90\x5c\xa9\x32\x90\xfc\xb1\x5f\xd2\x8d\xfd\xb2\xd6\x7e\x6b\x7d\x20\xa2\x7b\x39\xe3\x0f\x72\x09\x04\x75\xb8\x22\xa8\x0f\xfa\xc0\x2d\xbf\xf7\x8a\xbb\xfe\x98\x6c\xf3\x74\xbb\x37\x54\xf5\x97\xdd\x67\xf7\x7d\x37\x1a\x92\x38\x19\x11\x68\x78\x69\x8f\x64\xba\x62\xf4\x9f\xfb\x47\x5a\x08\x46\xc1\xd4\x93\x63\x2e\xd8\xfc\x7a\xda\x73\x2e\xdf\x41\x1b\xfb\xf0\x66\x79\xf8\xdf\xab\x69\x4b\xbf\x95\x35\x45\x3c\x15\xec\x2e\xe5\xaa\x77\xfa\x58\x9b\xf9\x32\xe4\x77\xed\x9d\xc7\x60\xf7\x23\xee\x77\x86\xfc\x3e\x02\x0b\x29\x88\x5e\x56\xcb\x5e\x3d\x48\x4a\x1e\xc3\xec\x12\x4d\x3e\x52\x74\x51\x6b\x98\x51\x35\x8c\x14\x30\x1b\x0f\x25\xad\x08\x9c\x9e\x88\x64\x80\x14\x80\x72\x2c\xa0\xa3\xfd\xb6\x83\x51\xa7\x2b\xf1\x0c\x9a\x14\x11\x88\x67\x23\x9e\x6a\xb4\xe3\x12\xf0\xf4\xdb\x6b\x12\x6d\x1e\x85\xb1\x3f\x7c\xb3\x2b\x4d\xb4\xfb\xcb\xbc\x78\xd1\xfd\x77\xcf\x7e\xc0\xe6\xce\xfe\xf5\xfd\xf4\xee\xfd\x87\xdf\x2f\xa6\x55\x7d\xc2\x88\x86\xbf\x63\x0d\x00\xdd\xf0\x97\x96\xad\x15\x32\x62\x4f\x97\x0e\xc4\x92\x9e\xc0\x21\x4e\x2d\xfc\x92\x87\xef\x20\x68\x7f\xd5\xd3\xc7\x3c\xff\x45\xaf\x0e\xa6\x9b\x5f\x36\xec\xc6\x88\xf4\x0b\x87\xfd\x57\xf5\x3c\x86\xbd\x77\xfe\x95\xc3\xfe\xcb\xa6\x3c\x12\x3f\x7e\xd9\x94\x97\x61\xff\x55\x3d\x6f\x34\x14\xa9\xfd\xca\x71\xff\x65\x73\x1e\x11\xe6\x5f\x36\xe7\x15\x7d\xf0\x17\x75\xbd\x51\x8a\xfd\xb2\x97\x47\x9e\xcb\xaf\x7d\xf9\x5f\x38\xed\xe5\xed\x91\x55\x13\x5b\x3a\x40\xc9\xf4\xe6\xb1\x91\x63\x00\x49\xf2\xcd\x5b\x03\x81\xf5\x66\x04\x97\x39\x3d\xb2\x3c\x4a\xba\x09\x96\x02\xe3\xf6\x1a\x58\x8a\x5e\xf4\x18\x2c\x05\x7c\x4b\x2f\x33\x2b\xf6\x1f\xbf\x7c\x7a\xbf\x5c\xd6\x19\xfe\xd6\xfe\xab\xfa\xfd\x57\xf5\xfb\xaf\xea\xf7\x77\x50\xfd\x7e\xa9\xf2\xb5\xfb\xa5\xda\xd7\xaf\x55\x40\x1e\x6f\x04\x00\xc5\xe1\x5c\x86\xa3\xf0\x2a\x93\x66\x6a\x37\x12\xb2\xed\x52\xdc\xe5\xc7\xb7\x10\x6c\xd0\x21\x97\x4d\x3a\xc1\x8b\x5e\xb9\xc8\x5c\x19\x90\x68\xca\xa6\x78\x72\x93\xdd\x4b\xee\xb2\x4d\x49\x58\x6e\xa5\x34\x1c\x3a\xbc\x37\xd2\x8a\xef\xb9\x7c\xec\xa3\xc0\x8b\xc2\xe6\xf7\xe2\x7d\x94\xaf\x24\x88\x4b\xef\xef\x0e\x0c\xb8\xf3\x47\x2e\x2f\x19\xdc\x6b\x71\x18\x6e\x9a\x5c\xff\xc2\xcd\xf7\xee\x8f\xb7\x5f\xa7\xbb\x0f\xf7\x97\x5e\xf5\xbe\xe1\x55\x3f\x41\xc5\xfe\x13\xcb\x3a\x6f\xa0\x66\x27\x30\x15\x5f\xc0\x66\x57\x4d\x8c\xb9\x81\x9b\xfd\x53\x9a\xb9\xbb\x51\x7e\x8a\x18\x43\xb8\xc5\xc5\x20\xfb\x95\x2d\xb4\xc7\xc4\x18\x48\xea\xba\x82\xab\xcf\x9c\x86\x5f\xf7\xd9\xa8\xfb\xd8\x16\xf9\x6a\x4e\x10\x12\x7e\xce\x00\xf9\xa5\x41\x9a\xe8\xf3\x18\xa7\x1f\x18\x7a\x31\x59\x8e\xf6\xee\xe6\x7c\xde\x08\x89\xfc\x28\xe8\x37\xbc\xdd\xdb\x24\xf7\x27\xce\xf5\xe8\x72\x5b\x22\xbb\x4c\x8f\xd1\xb9\x49\xb1\xb9\x07\x32\xb7\x4a\x88\xc7\x0a\x2b\xe5\x17\xa3\xfb\xfd\xf1\xf0\xee\xdf\xef\x2f\x1d\xe0\x5b\x39\xf2\xc8\x44\x48\x54\xfe\x13\xa6\xc8\x66\x74\x3a\x97\xb3\xc0\x72\xe4\xdd\xcb\xc2\xd3\x11\x4e\x78\x7b\xc2\x31\x3c\xdd\x9a\x85\xa7\x4b\xf8\x8e\xf0\x74\x09\xcf\x0e\x4f\x47\xd6\x07\x45\x3e\x0b\x4f\x3f\x2b\x3a\xfd\xdb\xfb\xdf\xf7\xcb\xc3\xe7\x37\xff\xdf\xc3\xe5\xe4\x78\xbb\x15\xa3\x94\x35\x07\xde\x5f\xd2\xac\x21\x6e\x0d\x34\xea\x5e\x73\x34\x79\x92\x41\x73\xbe\x24\xd9\x06\x8d\x6b\x22\x02\xf9\xf4\x38\x75\x11\x90\xee\x03\xb2\xff\x78\x64\xbf\xed\x75\x9b\x2d\xc8\x18\x10\x4d\xa0\x24\xa3\x14\x56\x62\x07\x48\xd4\xb4\xd7\xa7\x32\xc0\xf4\x3a\xef\x23\xcb\xa9\xe0\x3a\xd6\x93\x34\x4d\x60\xb2\x43\x43\x26\x15\xbd\x42\x2f\x98\x70\xe9\xbe\x97\x69\xbd\xa3\x8c\x18\x1e\x34\x1e\x2b\xdf\xec\x7b\xd9\xbd\xa0\xe9\xa5\x4f\xc7\x77\x4e\x93\x75\x86\x65\xb0\xb2\xe6\xde\x73\x73\x1c\x10\x3e\x5b\x1a\x12\xc4\x9f\x48\x24\xb8\x24\xc2\xfd\xed\x7e\xa3\xf0\x4b\x26\x7d\x49\x41\xd9\xa0\xa1\x44\x29\xeb\xb9\xcf\xd1\x5d\xdd\x2b\x2c\x29\x02\x28\x83\xdd\x2a\xf5\xd4\x82\x97\x7e\x92\x26\xeb\x37\xa0\xb7\xd3\x64\x84\x5b\xe9\x54\x22\xb9\x26\x5f\x92\x93\x77\x66\x84\xa4\x53\x0b\xe3\xb0\x17\x1c\x2a\x5a\x6f\x49\xd2\x23\x07\xdf\xc2\x36\x40\xf5\xfe\x2a\x2c\xf5\x6f\xef\xfe\x75\x2a\xaf\xa4\xdd\x2b\x24\xe4\x59\xf6\xd4\x63\x19\x7d\x92\x48\x05\x4d\x4c\x45\xc2\x2a\x70\x9f\x7f\xed\x11\x72\xf3\x2c\x40\x2b\x9d\xb9\xce\x97\x35\xc0\x2a\x0f\x82\xe8\x39\xe2\x8d\x3e\x7d\xd5\x63\x08\xe9\xdd\x3f\x01\x43\xfa\xb7\xf0\xdb\xa5\x82\xf6\x70\x36\x58\xb9\x96\x23\x51\xf1\xa3\x0e\x8f\x1c\xbe\x67\x30\x30\x90\xc8\xd7\xbf\xfe\xfb\x91\x4c\xf9\xbc\xdb\xe5\x71\x2f\x1a\x13\x8c\xe4\xa9\xf2\xfa\x8f\x1e\xac\x77\x1f\xbf\xbe\x9d\x1e\xde\xdc\x7d\xf8\x7d\x7a\xb8\x86\x3e\x4b\x21\x6c\x54\x5a\x15\xae\x8e\x8e\x95\x56\x5a\x7f\x38\x29\x6b\x69\xb0\xfc\xef\xb5\x26\xd1\xa0\xf5\x27\x9f\x4a\x71\xa9\x94\x95\x6e\x9e\x02\x50\xb4\xe5\xdf\x69\xfc\xa6\x3f\xe1\x82\x45\x2f\x9f\xec\xae\xa7\x54\xfd\x8a\xdd\xa4\xf5\x1a\x90\xb9\x3d\x4e\xe3\xe0\xfc\xc4\x6f\xaf\x29\x10\xfd\xac\xc6\xee\xfe\xec\xd6\x3e\x7b\xc8\xae\x81\xee\x52\xa0\x8d\x31\xcb\x3d\x63\xff\x7e\xd4\x0d\x09\x98\x96\xf6\xa2\xd7\x3a\x22\x07\x67\xdd\xf4\x78\xcc\xe4\x1d\xe4\x5d\xbc\x1d\x5c\x3d\x49\x2f\xbf\xd2\x51\xeb\x83\x1f\x8d\x57\xaf\xfd\xe7\xb6\x73\xf7\xe7\x34\xf4\xd9\x43\x75\x81\x9c\x4a\xe1\x32\xaf\x92\xf2\xaa\x85\x87\x9a\xdd\xd0\x7f\x9f\x3f\x5f\xcf\xde\xd1\x8f\x97\x7c\xd9\x80\x6e\x4c\xeb\x5b\xa3\x85\xd6\x6a\xbd\xd0\x0f\xb5\x76\xf7\x97\x34\xf7\xd9\x63\x76\x05\xb1\x97\x42\x7c\x6a\xd4\xac\x06\xf7\x45\xd3\x76\x4b\x28\xde\x9c\x92\x67\x62\xc4\xa4\xc8\x73\x04\x91\x8d\x17\x85\x5c\x7e\x4e\x43\x77\x7f\x5a\x4b\x37\xfd\x41\xb7\x77\xad\xb4\x81\x99\xce\xd5\xf5\x7e\x31\x42\x4f\x88\xe4\xe5\x17\xec\x6e\xcf\x78\xf9\xeb\xf2\x3f\x6f\x80\xae\xff\x33\xc4\xff\xd3\x6f\x7e\x45\x9c\x96\xa7\x16\xe6\xb1\xd4\xec\xef\x2d\x4e\x9f\x7e\xfb\xab\x82\xa9\x3e\xf5\xfe\x9a\x5f\xf9\x77\x16\x4c\x9b\x92\xf9\xe1\xcb\xbf\x97\x8f\x97\xc3\xde\xb6\xdc\x15\x00\x46\x48\xc9\x5c\x38\x37\x2b\x56\x4b\x08\xdb\x2e\xfb\x16\x37\xab\x14\xe5\xfa\xcd\x3a\x44\xab\x82\xde\xa4\x13\xcd\x40\x5a\xf0\xd1\x88\xc7\xe1\xb9\x45\x5d\xd6\x22\x7f\x27\x2d\xaa\xba\xea\xe1\x04\x79\xc9\x89\x17\x72\x67\x6e\x48\x75\xd2\x51\x71\x29\xc9\xad\x6a\x90\x3b\xd5\x66\x68\x0f\x2f\x23\x2e\x95\x57\x7c\x31\x4f\xc0\x74\xf7\xe9\xda\x90\x6d\xf9\xeb\x13\x01\x36\xf7\x16\x92\x7a\x48\x57\x5b\x27\xad\xbe\xd6\xba\x83\xd7\x2b\x6e\x61\xb6\x87\xd6\x2c\x6b\x08\x76\x9b\x9d\x7c\x6b\x98\x43\xbb\x45\xd2\x60\x0d\xbb\x39\xc1\xe4\xca\x8d\x09\xf6\x6d\xf7\x9a\x2a\xa8\x48\x19\x5e\x28\x0b\xf1\xa4\xa0\x8d\x2e\xcd\xda\x8c\xbc\x63\x4c\xd6\x63\xef\x70\x43\xef\x94\x86\xf8\x90\xfa\x10\x01\xce\x90\x82\xeb\xe5\xa4\xda\x63\xd1\x2a\x11\xdc\x01\xbc\xd9\x03\x88\xac\x2c\xfa\x01\xef\xe3\x93\xec\xd5\x97\xfb\xcd\xdd\x86\xe0\x39\x86\x5f\x7e\xa8\xac\x2d\x70\x02\x14\x96\x99\xc3\x37\xba\xb9\x45\x7e\x2a\x7e\xb7\x15\x79\x93\xcb\x6f\xae\xe2\x63\x8e\xcd\xf6\x2a\x6e\xf0\x23\xbf\x68\x6d\xc9\x73\x5f\xbc\xb4\xfe\xf8\xf8\xf6\xfd\xf4\xf0\xe6\xd3\xfe\xe3\x05\x6f\x3f\x85\x0b\x17\x6e\x2d\x23\x1b\x25\x01\x45\x0e\x50\xc6\xc0\xd0\x78\x95\x9d\x12\xd4\x01\x5d\x8f\xe3\x7a\xe8\x39\x1e\x19\x55\x15\xb1\xfb\x78\x78\x72\xc6\xf1\xba\xf5\x66\xdf\x5e\x97\xaa\xd0\x65\xdb\xcb\x42\x49\x97\x36\xc6\x6b\x7b\x3d\x22\xbf\xfc\xc6\x78\xa5\x86\xee\x2c\xbb\xd3\x02\xa9\xed\xa9\x7f\x56\x18\x55\xcb\x5a\x76\x66\x25\xa6\xd7\x8a\x1d\xf0\x02\x57\x8a\x1d\x06\x60\xed\x05\x0a\xd9\x15\x54\xb0\xed\x32\xa2\xf7\x9f\xef\xa7\x87\x37\x6f\xa7\xbb\x0f\xff\xbe\x18\xe5\xfb\x7f\x9d\xc0\x1a\x11\x35\x04\x58\x14\xdb\xaa\x46\xe7\x6b\x5c\xfc\x20\x5b\x46\x1d\xb5\x7c\xbd\x8c\xcf\xf5\x97\x71\xae\x7c\xda\xf7\xf2\x75\x8d\x4e\x4e\xf3\xe3\x73\x7c\xef\xf5\xbc\x6f\xdf\xc7\xe8\x3a\x8e\x71\x78\xca\xdf\xe9\x8f\xb4\x9e\xcf\x27\xf8\xdc\x7d\x17\xc3\xe7\xfc\xf5\xe3\x72\xc3\x6e\x78\xb7\xe1\x56\x97\x4e\xce\xb2\x8b\x5b\x84\xd0\x6a\xb4\xfc\x5a\xa4\xe5\xb3\x42\x46\xcd\xbe\x29\xc4\xab\x16\x68\x59\x21\xd7\x58\x0a\xe0\x82\x5d\x11\xfc\x4f\x41\xfe\xcf\xc0\xff\x57\xf4\xfe\x7d\x49\x57\x8b\x4a\x8f\x1e\xcd\x0b\x75\x60\xb3\xb0\x7c\xcd\xc5\x38\x2b\x24\x47\xf4\x6c\x2d\x2b\x3b\xad\x18\xdd\x69\x60\xe0\xff\xc1\x37\x7f\x7a\x0e\x5d\x37\xbf\x1e\x9e\x98\x44\x4a\xfb\x36\x44\x5b\x48\x46\xce\xe1\xcf\x38\x1d\x94\xcc\x61\x70\x3a\xf8\x33\x52\x07\x9c\xaf\x2f\x7b\x3d\x4b\xe3\x32\x76\x5c\xd2\x09\xb8\x84\x62\x4b\xa0\x9e\x98\x35\x3c\xa9\x59\x37\x8b\xe6\xe0\x58\xac\xf6\xea\x50\xea\x0c\x78\x5c\x66\xbc\x97\xaf\xaf\xf6\xe1\xe0\xae\xa2\xb2\xfb\x7f\xe5\x95\x37\x4b\xac\x3f\xbd\xff\xf0\xe1\x22\x9c\x47\xb4\x45\x3f\x04\x70\x5b\xe5\x4f\x5e\x53\x43\xae\xd4\xc3\x5f\x29\xbb\x45\x2e\xc9\x95\x0a\xf6\xe5\x6a\xa9\xbd\x69\x59\x03\x6b\xeb\xe6\xa3\x96\x67\x57\xca\xdf\x7a\x4e\xe4\x95\x18\xf2\xf6\x63\x76\x3f\xfe\x1c\xca\xcc\x6b\xd7\x5d\xec\xde\x2f\xad\xfb\xbf\xf5\x94\x9c\x65\xf3\x8d\x37\x55\xc2\xe5\x91\x1a\xb8\x9c\x29\x7f\xcb\x63\x9d\x6f\xa7\x35\xd9\x4f\xf6\xcf\x4f\xe8\x1e\x00\x68\x28\xbe\xdf\x55\x99\xbe\x3c\x5a\x0a\xcb\x36\xb6\xc0\x6b\x2a\x74\xec\x0a\x40\x53\x96\x51\x3b\x6d\x59\x0b\x00\x40\xef\xd1\x72\x2c\x8c\xb0\x6a\xc1\xf7\x56\x0a\x6e\x89\x16\xf6\xc5\x62\x67\x95\x97\x67\x38\xa8\xe6\x74\xb1\xd2\xe8\x87\x08\xe9\x7f\xae\xfa\xf2\x5d\xda\xcb\xe7\x87\x4f\xd3\xff\x5d\xbc\x16\x3f\x05\xd6\x66\x65\xc0\x84\xae\xe3\x2a\x02\x14\xe0\xf1\x8a\x5b\xaa\x48\xa5\xc6\x06\xe2\xa3\xb2\x80\x78\x66\x03\x16\x3d\xc5\x4e\x55\x20\xfa\xc1\x1a\x02\x0e\x8a\x3c\x83\xf6\xe8\x95\x52\xc5\x2f\x6c\xf6\xc0\x9c\x81\xd9\xe3\x08\xc4\xc0\xe0\xa3\x00\xbc\x29\x32\xaa\x12\xe0\xd0\x01\xce\x2d\x73\x4f\x19\x60\xc1\x42\xa5\xfc\x00\x14\xa3\x61\x1d\x10\x38\xfe\x71\x04\x86\xed\xa2\x39\x48\x23\xa9\xe1\x26\x24\xd1\x6e\x12\xf5\xdc\xa9\x8d\x71\xc9\x79\x39\x7e\xbb\xc9\x79\x89\x27\x40\x3b\xa8\x30\x32\x1a\x50\xfa\x43\x9c\x81\xf8\xae\xd4\xec\x3e\xc6\x6d\x2b\xed\xf7\xf7\xcb\xfe\xeb\xdb\x2b\x45\xc8\x44\xf1\x89\x14\x8e\x13\x98\x61\xad\x81\x6f\xac\x64\xfa\x40\xeb\x55\x16\xb6\x64\x47\x72\x90\x22\x70\x7c\x71\x6e\x33\x1e\xa1\xc6\x8b\x7e\x3d\xce\x5a\xaf\xb3\x1b\x8d\x3b\x1b\xbe\xe8\x5f\xfd\xcc\xa4\xef\x09\x23\x0d\xf0\x3f\xdd\x71\x90\x79\xd8\xaa\x13\x75\x32\x19\x14\x14\xc8\x20\x66\x80\x96\x03\x4c\x37\x43\x58\x2e\x38\x00\xd8\x77\x66\x60\xa2\xc8\x99\xc0\xab\x27\x63\xbc\xaa\xce\xb7\xb4\xc8\x7d\x3d\xab\xf6\xd1\x9a\x82\x7d\xe7\x78\x82\x34\x04\xea\xbb\x12\x16\x82\x62\x80\xd5\x08\xf4\xca\x3d\x95\x36\x83\x9d\x4d\xfe\xae\xf8\x5d\x7f\x66\x76\x25\x0c\xd8\xa9\xc8\x0e\xf7\x33\x75\x27\x59\x66\x48\xa8\x06\x2a\x10\x09\x3c\x51\xbe\xd6\x95\x6a\x8d\xa2\xec\x10\x89\x9c\x6f\x65\x27\x53\x1b\xae\x1e\x9d\xe5\x74\x64\xfb\xa9\x46\xc8\x54\xf5\x7d\x12\x3b\x5c\x86\x65\x64\xab\x43\x59\xf3\x64\xc5\x54\x40\x7e\x2c\x40\xd0\x92\x35\xd6\x90\xe0\x06\xc2\x3c\x83\x0e\x75\x51\xf9\xdb\x41\x57\x56\x5c\x04\x85\x46\x75\x8d\x95\x5b\xa2\x6a\xae\x41\x71\x99\x1c\x53\x9b\x29\x34\xf0\x93\x19\xa9\xcc\x42\xad\x83\x21\x10\xa4\x40\xd5\xc5\x0c\x68\xfa\x28\x7f\x35\x00\x9c\x05\x4d\x72\x0a\x32\x0b\x9c\xf4\x3e\x31\xe1\xaa\xd8\x67\x50\xd5\x05\x59\x74\x32\x98\x0d\xf9\x11\x00\xe3\xac\xa0\xd8\x9e\xb1\x9d\x50\x31\x85\x2a\x3e\x41\xf7\xf5\xdb\xc7\xe9\xdd\xc3\xe7\x37\xf7\xd3\xc7\x2f\x0f\x57\x97\x57\xda\x62\x6e\x15\xd9\x2f\x42\x44\x35\xd2\x4b\x6d\x10\xb5\xe8\x57\xd2\xd2\xcb\xf5\xd3\xcf\x31\xca\xbd\x9d\x8f\xa4\x3e\xf3\x38\x5d\x58\x1d\xe0\x63\x1d\x59\x80\x03\x5f\xcb\xe6\x0f\x52\xff\x4c\x59\xbe\x9e\xfa\x87\xab\xaf\x27\x2b\xea\x03\xaf\x24\x2b\x86\xdd\xd5\x4d\x54\xec\xa2\x7d\xa9\xdf\x93\x43\xa8\x43\xf0\xf1\xd3\xc3\x87\xab\x23\x90\x37\x1d\xf3\x8d\x5c\x09\xb2\x73\xc4\xac\x99\x69\xab\x9b\x54\x3b\x52\x77\x49\x15\xfc\xba\x22\x64\xa6\x4f\x9e\x7b\x52\x32\x29\x40\x38\x01\x16\x0c\x00\xc3\x70\x9d\x67\x15\xca\xf9\x04\xa0\xb8\xc9\x48\x2f\x95\x5c\x8e\x93\x5c\x2b\x97\x52\x73\xa2\x19\x36\x17\xbb\xe6\x88\xd6\xd2\xf6\xb5\x9c\xc0\x09\x3d\x1a\x60\x64\x3c\xfe\x84\xf9\xb0\x3b\xf8\x26\xed\xc8\xc5\x45\xca\x73\xc2\x26\x22\x0b\x4e\x99\x67\x44\x1a\x26\x8d\x19\x84\x6e\xdd\x03\x18\xaf\x84\x5d\x3b\xc8\xdb\x67\x7b\x7b\x11\xa6\xd8\x89\xa8\xc8\x3a\xc2\xba\x4f\x41\xd1\xd8\x46\x4f\xbe\x70\x82\xdc\x9e\x1f\x39\xa5\x1b\x3f\xc2\xe1\xdc\x79\xce\x09\xe8\xc7\x4a\x53\xba\x88\xdc\xaa\x01\xcc\x7e\x48\x13\x25\x70\x92\x7c\xdb\x6d\x03\xd1\x7e\xba\xfb\xf0\xee\xea\x4c\xba\x45\xfb\xb2\x4d\xe8\x3c\xdd\x7d\xba\x21\x1b\xea\xcb\xef\xf7\xe5\x8f\xf7\x57\xb4\xc9\xb6\x6a\x93\xa2\x10\xa4\x22\x72\xbe\x1a\xbc\x21\x18\xe8\xa9\xc3\xe1\x29\xb2\x3f\xe9\x41\x4d\xca\x70\x8f\x42\x80\xe6\x38\xbb\xa4\x84\x5e\xb1\xb9\x48\xaf\xf2\xcc\xd9\x35\x7c\xe3\x7c\x5a\x14\x9d\x2d\x36\x60\x07\xb6\x60\xec\xb0\xa4\x7b\x90\x02\x3c\xa5\xe3\x31\x0e\xbb\x12\xdc\xf5\x57\x79\x6e\x62\x13\x47\x16\x93\x30\x75\x97\x16\xf0\xaf\x11\xa8\x5a\xa0\x80\xe9\xe4\xb7\x44\xc6\x97\x9a\x1a\xbb\x17\xd9\x1a\xb2\x43\x7f\xe7\x83\x5e\xf4\x9c\x14\x86\xed\x04\x9c\x4c\xd9\xc8\x94\x2e\xcd\x50\xb5\x45\xbb\xe0\x90\x94\x2f\x76\xf1\xf8\xd1\x65\x1a\x47\x1e\x87\x20\x4d\xd1\x13\x06\x00\xb7\x5c\x87\x9d\x2b\x29\x60\xd5\x38\x5c\x4e\x4e\x38\xb9\xee\x78\xb7\xf5\x09\xc7\xa7\x1e\x9b\x32\x9a\xf7\xed\x1f\x6b\x8e\xfc\xf6\xf9\x4a\x28\x9a\xfa\xd9\xba\x88\xa1\xce\xcd\xb8\x5e\x8c\xb7\xd6\xaf\x53\x11\x3c\x0f\x0b\x12\xb9\x1b\xb0\xb4\xdb\x80\x4c\xd2\x59\xee\x4f\xa6\xb6\x3f\x9d\xf2\xfe\x64\x2d\xc8\x4a\x82\x25\x30\xd6\x8b\x19\x18\x5e\xfd\x45\x0d\xb6\xbf\x3d\x0e\x6b\x6b\x8e\xd0\x4d\x9c\xad\xc4\xc5\x56\xe6\x58\xa9\x63\xed\xbe\x7c\x81\xec\xbe\x77\xe2\xfe\xf3\x17\xc8\xee\x64\x85\xfc\x77\x81\x1c\x2b\x70\xf6\x17\xcb\xe3\xee\xb8\x3c\x32\x5f\x32\xbc\x9f\xfa\xb3\xc3\x53\xe5\x45\x7b\x39\xe7\x1a\xff\xfd\x0f\x88\xf6\x3f\x75\xe2\xee\xfe\xd6\xa2\xfd\xcf\x9b\xb8\xbb\x7f\xda\xcc\xfd\xfd\xee\x8f\x87\x4f\x17\x68\xe1\x44\x5b\xf5\x41\x2d\x62\x3e\x9b\x47\xfe\x4a\x85\xd8\x8d\xaa\x32\xad\x2d\xb9\x5e\x1d\xb6\x51\x59\x66\xa1\xa0\xcb\x02\xb1\x5b\x65\x65\x72\xc1\xa3\xda\x31\xe4\x5c\x5c\x94\x94\xd9\x7c\x7b\x3e\xc1\xe9\xee\xbb\x19\x41\x41\x8d\x94\xc2\x9f\x4d\x3c\xda\x0d\x91\x4d\x3a\x11\x5e\x3d\x90\x53\x14\x5e\xe4\x1f\xfc\x39\xa3\x6e\x4a\xbe\x8d\x00\x05\xdd\x7b\x16\x43\x86\xd4\xfa\x68\xfa\xbd\x55\x61\x28\x5f\x83\x01\x9c\xef\x16\x3f\x20\xcf\x1f\x41\x9f\x03\xf6\x4e\x4f\x1e\x4f\x59\xc6\x83\x37\x27\xdf\xbf\x1f\xfe\xef\x1a\xff\x2f\xd1\xfd\xc6\xec\x03\xff\x6f\x39\x56\x48\x97\xf1\xbf\x12\x7f\xad\x71\x7f\x2a\x56\xc1\x5d\xf4\xbf\xfd\x49\x9e\x8c\xa7\xf2\xed\x75\x26\x76\x85\xd3\xb5\x1b\x69\x1d\xe3\xcd\x3b\xa1\x0a\xf1\xf4\x56\xd2\xa6\xd6\xc2\x8f\xb7\x49\xe7\xe3\xb5\xb7\xdb\xed\x7d\x2b\x9b\xad\x92\x9f\xcf\x6e\x56\x4b\xbb\xf5\x82\x2f\x6b\x15\x76\x99\x9f\xf2\x7a\x81\xd3\x77\x35\x69\x77\x71\xab\xd6\xcb\x4f\x6a\x13\xb8\x0f\x7e\x46\x37\x29\x5b\xf2\xcf\x98\x9a\xba\xdf\xea\xdb\xed\x7e\xc2\x8c\xfa\x39\x1d\x85\xb2\x72\xb9\xd3\xc8\xb1\x7d\xfe\x8a\x21\xe2\x03\xa7\xb0\x79\xfb\xda\x51\x40\x78\x68\x5a\x19\x5a\x12\xca\xef\x76\x7b\x39\x1c\x19\x96\x81\xd3\x5a\x94\x77\x5b\x11\xd1\xcb\xb7\x62\x7f\x56\x47\x78\x3d\x74\x8a\x27\x6e\xe0\x95\x6f\xdb\x4a\xd3\xdd\xef\x57\xfd\x11\xef\xb6\xa2\x37\xea\x51\xa6\x43\x01\x9b\x68\xe9\x4a\x78\x1c\x43\x91\x83\xd9\x37\x1e\x74\xc2\x48\x7e\x0b\xc1\x81\xc9\xb6\x25\x57\x55\xcb\xa9\x0d\x5c\xc1\xb3\xa7\x8a\x77\x4e\x01\x4c\xfa\xf5\xe0\x73\xef\x33\x8b\x12\x49\xd1\x25\xb0\xf6\xc5\x39\x67\xe9\x77\x2d\x25\xc3\x5e\x02\xc3\x6a\xa9\x30\xd7\x96\xa6\xae\xfc\xfe\x2a\x4f\x08\x08\xa5\x39\x81\xa3\x58\xa3\x3b\xcc\x33\x31\x08\xe3\x7a\x74\x9d\x35\xd0\x3b\x90\x26\x40\xb5\x80\x7e\x2a\x69\xf1\xca\x23\x97\x8a\x6c\xe1\xa5\x5c\x03\xec\xdc\x59\x36\xc7\x63\xbc\x4e\x9c\xaf\xe4\x7d\x4e\x6f\x93\x8a\xf1\xe6\x95\xf4\xf2\x90\xb7\xce\x2c\x24\x64\x94\x88\x76\x76\x6d\x2b\x18\x4a\x8d\x39\xbd\x3a\xdf\x65\xcf\x6b\xe6\x6e\x8b\x05\x85\xbf\x65\xf6\xad\x0d\x0f\x5b\xcc\x13\x28\xfd\xd2\xec\x65\xa9\xcb\x2b\x74\x90\x1e\x74\x72\x2c\x8a\x3b\x28\xf4\x67\xb8\xc0\xf1\x46\xd9\x48\x6a\x3d\xb3\x72\x12\x07\xde\x21\xbe\x26\xdd\x80\xeb\xc7\xaa\x89\xec\x1a\xb8\x1a\x48\xa9\x1a\x72\x39\x54\x44\xb5\x63\x76\x91\x5c\x06\x24\x3d\x93\x03\xc5\x70\x52\xd4\xe4\xe4\xb2\x6c\xc6\x3c\x4c\x67\xca\x80\xe1\x27\x25\x14\x0a\x60\x12\x5a\xf0\xd9\xca\xac\xd6\x2e\xe8\x9e\xe5\x1c\xc6\x76\x0d\x06\x30\x9e\x19\xa0\xb3\x91\x1c\xd5\x59\xfe\x2d\x4e\xf6\x71\x96\x63\xcf\x72\x9a\xf3\xf9\x19\xd3\xfe\x7e\xff\x70\xff\xef\x87\xcf\x0f\x97\x1b\xfa\xc3\x16\x87\xb8\xbc\x6d\x54\x28\x02\xcd\xe8\x41\xf7\x37\x00\xe9\xd7\x83\xa7\x96\x67\x0e\xd9\xf5\xe2\x34\x89\x37\x7c\xc3\x35\x3d\xa7\x03\x75\x50\x2d\xb2\x22\x80\xe3\x12\x96\xf9\xd6\xfa\xcc\x04\x1c\x66\xbb\xa6\x7d\x3b\x2e\x32\x24\xd1\xb1\xd2\x82\x8c\x27\x55\x02\xe0\x81\xbc\x2d\x02\x13\x8e\xf2\xec\xb3\x43\xf4\xcf\x51\x35\x0e\x36\x1c\xa0\x28\x7a\xb0\xb2\x91\x72\x9d\xc1\x95\x21\xfa\x7c\xb1\x90\x4d\xcc\x4e\x5d\x20\xa2\x92\xd7\xf5\x48\x56\x45\x72\x32\x07\x58\xd7\xa9\x8c\xd1\xc1\x33\x8b\x7a\x3a\xeb\xb4\xa1\x3e\x88\x8c\xa9\x57\x8d\xa2\xcd\x04\x52\x24\x99\xb6\x94\xe5\xf5\xda\x9c\x34\x66\xdb\x11\x70\x7d\xb4\x24\x35\xc0\x40\xed\x20\xfd\x70\x45\x9c\x24\xc4\x77\x6b\x73\x4d\x54\xe8\x82\xc8\x8e\x4f\xa0\xac\x77\x3d\xfc\xd8\x92\xde\x58\xd1\xbb\xff\xd4\x25\x7d\x7b\x45\xef\xfe\xc1\x4b\x7a\x79\xf8\xfc\xc7\xfb\x0f\x17\x38\x78\xc4\x61\x23\xea\x96\x5b\x76\x39\xff\xfd\xaa\x8d\x46\x6d\xd7\x58\x1c\xe5\x36\x86\xb4\x16\x6c\x3f\x0d\x21\x8d\xaa\xec\x15\x99\x7a\xb7\x3c\x83\xac\xed\xe3\xbb\x8b\xf0\x02\xd3\x16\xae\x11\x55\x47\xb1\xfe\x2d\xcb\xad\x4f\x7a\x94\x83\x98\x92\x21\x4d\x3e\x82\xef\x89\xbb\xb1\x76\x83\x77\x5f\x73\x00\x8f\x69\xe6\x88\xf0\x89\xe5\xa8\xf4\xe0\x49\x7f\x35\x49\x8a\xbc\x92\xf4\x2a\xef\x26\xb9\x15\xee\x04\x72\x46\x52\x9a\xf0\x91\x80\x2e\xf7\x80\xa9\x59\xc1\x12\x99\x8c\xd5\x01\xf7\x50\xe9\xa9\x21\xb6\x56\xfe\xe6\xd3\xf1\xc9\x2c\xa0\x37\x77\xd3\xe5\x0a\x7c\x8a\xac\x25\xe5\x74\xf0\x55\x83\xd2\xac\xb2\x31\x77\x25\x63\xcf\xea\xa3\xcf\xc8\x09\x18\x2e\xc7\xe7\x65\xd1\x70\x17\xb1\x51\x65\x19\xcc\xd8\x8a\xaa\xd3\x3b\x1f\x7c\xe9\xd2\x3d\x15\x21\xfd\xd9\xdb\x0d\xce\x6b\x3e\xbe\x9d\xe5\x28\xe5\xa6\xf2\x99\x62\x54\x9f\x98\xe6\x4b\xc0\xa7\x2f\x33\x28\x2f\x96\x3d\x2a\xf2\x7e\x52\x82\xcf\x80\x08\xc0\x69\xa2\x12\xe4\x6c\x77\xb4\xd3\xa0\x02\x06\x35\xa6\x39\x45\x97\x82\xe1\x3b\xe5\x92\x21\xd9\x91\x56\x52\x91\x9a\x4c\x30\x17\xb8\xc8\x7e\x92\x15\x3e\x2e\xd3\x5f\xd7\x57\x5c\x78\x4e\x44\x78\x8b\x8c\x68\x2a\xd3\x8c\x4d\x5a\x94\x77\x1c\xe4\xd0\x9f\x20\xa0\xba\xfb\xfc\x66\x7f\x37\xfd\xf6\xe6\xe1\x8f\x4f\xcb\x45\xa6\x18\x6f\xa5\x1d\x11\xb5\xe2\x72\xed\x13\xe7\xea\x38\x87\xc9\xc7\x5c\x5c\xe6\x09\xb1\x63\xf9\x33\x38\x60\xf0\xe4\xee\x22\xb3\xd8\x8d\x71\xca\xd8\x78\xa6\x88\xad\xb4\xb4\xc9\x17\xd9\xc5\xf2\xe4\x89\x5d\x81\x6d\x18\x9b\x6b\x20\x32\x28\x08\xce\xa7\xa9\x15\x79\x8f\x30\x67\xdd\x16\x8b\x12\xd3\x18\x2f\x6c\x53\x5b\x45\x4d\x15\x47\x3c\xf9\x94\x44\xb2\x16\x3d\xf0\x1c\xcb\xac\x2b\x94\x47\xa6\xd2\x50\x99\x62\x72\x04\xd5\xaa\x20\x13\x46\x9e\x93\x83\x34\x5b\xb6\xef\x9c\x66\x85\x0b\xc2\x54\xc8\x22\x2f\x72\x42\xbc\x7d\x37\xe5\xc0\xae\xc6\x89\x39\xbb\x94\x45\xa5\x74\x89\xc4\x8e\x4a\x34\xb3\xa8\x03\xf2\xdc\x44\xf8\xdd\xa7\x9c\x71\xbe\xaf\x71\x4e\x62\x25\xb9\x9c\x34\xec\xbe\x20\x1d\x41\xee\xbc\x5d\x14\xf7\xf1\xfe\x6e\x79\xff\xf1\xc3\x9b\xbb\xcf\x9f\x3f\xfe\xcf\xc5\x00\xa5\x2d\x96\xb0\x14\x48\x34\xd6\x3a\xf9\xa2\xaf\x0e\x3e\x97\x3a\xf4\x1b\xf9\x14\xdd\x14\x0a\x8c\x63\xd0\xe0\x65\x63\x35\x19\x84\xc2\xa2\x3e\xf5\x57\xf9\x90\x6b\xb1\xc4\x06\x56\x5f\x1e\x24\x6d\x5c\x2b\x74\xc0\x2b\x98\x5c\xe2\x45\x26\x6c\x98\x06\x01\xb5\x48\xd5\xea\xb8\xbb\x3a\x63\xea\x6b\xd8\x01\x91\x7e\xd2\xfe\x1f\xbd\x51\x86\xb1\xb8\xbd\xf3\x7d\xbe\xac\x10\xe4\xbc\xa5\x47\x60\x72\x96\x7d\xee\xf9\x90\x7b\x56\x6f\x5d\x0c\x34\xa1\xb8\xb9\xe7\xbd\x97\x5f\x3c\x7e\xc2\x8e\x8e\x74\xc1\xa3\x3f\xf8\xd1\x9e\xfe\x08\x69\xec\xd1\xaf\xe7\xae\xe7\xb1\xe3\x03\x7f\xaa\x5d\xd5\x66\x5b\xb9\x00\x3b\x5b\x15\xdd\x0b\x7e\xd7\xfd\x19\x9a\xda\xf1\xeb\x53\x7f\xf4\x60\xb6\xd8\x29\x90\x5a\xcb\x34\x71\x2a\x8e\x53\x95\x7d\x43\x39\x70\xd5\xbb\x3d\x23\xb6\x60\xfe\xee\xc1\x64\xcb\xa0\x58\x16\xb5\xbc\x65\x3a\x03\x49\x1b\x37\x7e\x52\x2f\x79\xf3\xdb\xc7\xcf\x17\xd5\x47\x5c\x36\x50\x46\xb8\x35\x77\x35\x37\x66\x79\x94\x10\xb3\xdc\xa4\x33\x34\xfa\x30\xc6\x9e\xf0\x23\xb7\xe9\xac\xa0\x97\x3f\x78\x1b\xe5\x69\xb1\xd2\x3f\x30\x4b\x8a\xc5\x04\x17\x4b\x45\xe6\xe2\xab\x2c\x5b\x8d\x5c\x28\x1d\xce\x60\xec\x14\xcb\xa1\x6a\xe2\x39\x87\x08\xe6\x6a\xf5\xa4\x63\xf1\x96\x3e\xe8\xaa\x93\x32\x1e\x85\x20\x5b\x80\xfa\x54\xb2\x1b\xb7\x5d\xc6\x93\x9e\x9b\xa7\xad\x95\x67\x5c\x1c\x9a\x57\x03\x52\x6a\x0f\x0d\x49\x49\x09\xf4\x93\xf6\x9d\xec\x74\xce\xee\xfc\x14\x75\xdc\xed\xd7\x3e\xf8\xd4\xeb\x6e\xce\x09\x15\x18\x39\xb9\x5c\x67\x31\x4d\x2a\xb2\x9a\x34\x5f\x12\xbb\x6b\xa4\x45\x36\x0e\xf9\x1b\x1b\x78\x26\x74\xae\xfc\x2d\x52\xa3\x93\x48\xfe\xef\x6f\xe1\x36\xf1\xe9\x87\xe9\xfd\x65\x09\x1d\xd7\x0d\x39\x93\x62\x77\x5c\x44\xc3\x90\x07\xa0\x26\x59\xb6\xe6\xbe\x06\xa1\xc0\xd0\x2c\x3a\x46\xb0\x60\x16\xc8\x71\xe5\x6c\x30\xd3\x3c\xb9\x38\xbf\xbd\x2e\xa1\xa9\x74\x1a\x90\xb0\x8f\xe4\xcf\x72\x2a\x3e\x0c\xba\xf6\x44\x4e\x2c\xa7\xab\x58\xa1\xbe\x53\xbb\x2e\xc7\x22\x5f\xb1\x5c\x96\xa3\xc4\x41\x7e\xe0\x85\x64\x78\x4d\x25\xb5\x91\x15\x8c\x0c\xdd\xa6\xb8\x52\x93\x27\x14\x2c\x24\x31\x98\x65\x62\xc7\x31\xc3\xe3\xca\xe0\xca\x21\xb9\x96\x27\x1f\xa3\x18\xcf\xa2\x29\x11\x92\x74\x93\x98\xbb\x13\xc7\xee\xa8\x4d\xac\xf5\x88\x69\x66\x4d\x05\xc5\xd2\x13\x93\x5e\x16\x5f\x79\x95\x27\x79\x8e\x3c\x86\x65\x31\x02\x47\xb1\x9e\xae\xe4\x09\x34\x8a\x5c\xf3\x44\xcd\x71\xec\x62\x37\xcb\x83\x64\xc8\x12\x4f\x11\xb9\xa4\xb1\xcc\x2d\x89\x59\xec\xe4\x83\x41\x20\x14\xc4\xf2\x0d\x29\x4d\x9e\xa1\x84\xb5\xdd\x84\xd2\x46\x69\x8b\xd7\x27\xa9\x90\x98\x45\xef\x1b\x99\x7c\xf5\xf4\xc5\x0d\xcb\x4f\x85\x47\x3d\x4b\xf3\x9c\x40\xee\xc8\x35\x4d\x96\xa6\x18\x66\xaf\x16\xbd\xac\xd1\xc4\xd2\x2b\xc5\x49\xc3\x7c\x4b\x4e\xf4\xa1\x96\x9c\x66\x28\x4b\x37\x37\x20\x7d\xad\xef\xde\xa2\x6b\x51\xbe\x71\x2d\xce\xda\xbb\x88\x48\xb7\x3c\x49\xe7\x7a\xe9\x5d\x46\x5a\x2d\xf8\x59\x73\x59\x4d\xd9\xf0\xac\xd9\xb0\xbb\x36\x1d\xae\xcd\x06\x69\x1b\xe5\xf0\x93\x26\x2c\x65\x16\x1b\x56\x6c\xb0\x3f\x6d\x89\x6d\x17\xf1\x3d\x7c\x11\x45\xec\x42\x2a\xb4\x8d\xad\xad\x86\xe4\xb8\x89\xa0\xd6\x5c\x14\xc4\x28\xf8\xb8\x8b\x80\xe6\x2c\xad\x55\xc6\xa0\x57\x5c\xe4\x0c\x6e\x27\x61\x0e\xb6\x9d\x85\x78\x2f\x5f\x92\xf2\x43\xcb\xd5\x8b\xde\x0c\x1b\x0e\x42\x6b\x10\xbc\x69\xb5\x96\x03\x29\x6d\xb1\x7a\xf7\x73\x56\x85\x73\xf1\x19\x2e\xb0\x04\xfd\x6d\x30\xd9\x21\x81\x1e\x5d\x59\xa0\x96\x15\x24\x1c\xe0\x08\xd3\x95\x0c\x88\x38\x6a\x5d\x76\xd3\x87\x8c\xf6\x6b\xa5\x07\x8c\x6b\xe4\xbc\x69\x9d\x48\xac\xaf\xf2\x01\xd0\x12\x2d\xba\x22\xb6\x39\x12\x1f\x92\x18\xb6\xa2\xba\xe7\xee\xb8\xca\x3a\xcb\x65\x91\x4d\xac\x18\x69\x30\xfc\x7a\x48\x7e\x0c\xd2\x82\xc8\xb3\x2f\xaa\xa8\x06\x59\x20\x1d\xeb\x03\x36\x15\x81\xa2\x91\xb2\x1a\x5a\x70\xce\xc1\xf1\x8b\x62\x14\x34\xc9\xb5\x09\xf4\xb3\xc4\x7a\x12\xec\x67\xe8\xb8\x19\x04\xc1\xdc\x66\x2a\xc1\x31\xdc\x1b\xb2\x2d\x15\x2b\xd5\x43\xc7\xd0\x82\x88\x76\x13\xfb\x5c\xab\x61\x64\x43\x22\x2b\x49\xda\x9c\x31\x6f\xb8\xf6\x8b\xd9\xd2\x37\xc0\x86\x52\x30\x48\xcd\xdb\x35\xab\x8f\xc1\x3b\x9e\x28\x6a\x54\x58\xcf\x97\x14\x42\xc6\x76\xbd\x8e\x56\x0c\x80\xab\x25\xb6\xaa\x51\x1b\xb2\xf2\x2d\xe2\xef\xbd\x2e\xd7\x6b\x8d\xe8\xc0\x62\x7e\xd4\x8a\xef\x20\xf1\x7b\xf8\xdf\xfb\xe9\xee\x8f\xbb\xab\x4b\xf4\x6e\x03\xe3\x88\x14\x7b\x60\x28\xf5\x2f\x69\xbb\x5e\xf2\xbc\xa6\xbf\xce\x49\x7b\x09\x5e\x62\x5f\x4b\x03\x2a\xae\x3c\x8e\xe1\x9f\xd0\x07\xbe\xba\xf6\xc8\x57\xfa\x50\x9c\x97\xd4\xcd\x6c\xd7\xcb\xb3\x2b\xbe\x5d\x12\xa2\x08\xfd\x04\x6e\x52\xd9\x48\xfb\xa2\x5e\xf7\x27\xba\xef\xcb\xd7\x4f\x0f\x9f\xbf\xdc\x7f\x7e\xff\xe9\x22\xe2\xc8\x6f\x47\x06\x5a\xeb\xd5\x51\xa9\x07\x4f\xa5\xca\xc2\x6f\x6a\xdd\xb3\x18\xfd\x2c\xd6\xdf\xec\x9b\x83\x6b\xdc\x31\xed\x7d\x54\xe0\x5f\x78\xea\x9c\x87\x08\x52\xd4\xc9\x45\xbe\x2c\x30\xdd\x8d\x77\x15\xb6\xb2\xec\x7f\x19\xeb\x3a\x48\x0f\xb4\x83\x3c\x46\x61\x79\xc5\x86\xa4\x09\x94\xfb\x5c\x79\xef\x29\xd6\x03\x95\xb6\xe7\x5a\x26\x8a\xf0\x7d\xb4\x59\x04\x07\xf6\xa0\xc4\x73\x83\x3f\x07\xdb\xdc\x3e\xce\xd1\xe1\x0f\xa6\x49\x8c\x76\x9e\x50\x9a\xc3\x6d\xcf\x19\x2f\x03\xbc\xdf\x3c\x21\x10\xea\xb9\xd4\x09\x1b\x26\xf7\xb2\xa7\xd0\xbf\xed\x5e\x53\x8e\xc9\x35\x31\x8b\x38\x88\x1d\x4c\x69\xf2\xb2\xf9\xcf\xf2\x3c\x51\xd0\x5d\x02\xe3\xbb\x2a\xb5\x54\x97\x92\x5d\x2b\x80\xd6\x74\x05\xff\x66\x24\xba\x67\x97\x93\x28\xe8\xb0\x76\xa0\xe7\x8b\x52\x5f\x58\x15\x64\xf3\x58\xce\x3e\x43\x23\x52\x2f\x98\xe2\xc2\xcb\x8b\x40\x39\x91\x1e\x0f\xd9\x75\x60\x7b\xc7\xea\x4a\x74\x05\x5b\x3e\xb8\xb1\x9b\x2b\x79\x26\x82\xf4\xaa\xcd\x84\xbd\x32\xa6\x37\xb5\x08\xb0\x73\xa6\x35\x6d\xac\xf0\xd8\x1b\x9a\x56\x4d\x68\x89\x9d\xa8\x05\x48\xda\xd6\x62\xcb\xe1\x70\xc1\x3c\x2d\x71\xcf\x91\x0f\xa0\x54\x7e\x8a\x22\xfa\xed\x8d\x09\x75\xff\xdf\x09\x05\x6b\x24\x9c\x4e\xa8\x84\x09\x15\x21\x37\xe2\xaf\x9e\x50\xe1\xb9\x13\xaa\x14\xe3\xf4\xf7\xa4\xde\x34\xd5\x9d\x17\xdf\x61\xaf\x6a\x53\xc4\xc8\x2d\x71\x81\x82\x51\xe3\xee\xb9\x13\xe8\x0d\xb7\x78\x31\x77\xde\x6d\x25\x14\x82\x59\xab\x41\x91\xc7\xce\x57\x45\xe7\x57\xb5\xbe\xa5\x7d\x85\x69\xde\x43\x17\xb5\xd9\xca\x4d\x92\x33\xbb\xfa\x64\x86\xe7\x57\x79\xf2\x4a\x4f\x12\x38\x69\x35\x9e\x98\xd9\xf2\x4d\xd2\xbb\xe2\x4b\x33\x69\x1d\xc3\x0f\x8c\x3a\xbb\x8c\xfe\xa6\xec\x44\xd3\x46\xc8\x96\xc0\x48\x6d\xd5\xcb\x93\x52\x8b\x70\x9a\x63\x73\x49\x74\x6e\x97\xd0\xae\x19\xb7\x53\x1b\x1f\xb7\xc3\xdd\xbc\xdc\x6e\xb3\x8b\x3e\x7d\xfd\xf6\x6d\x7a\x78\xf3\xe9\xfd\xc3\xfd\x65\x44\x68\x0b\x5b\x42\x83\xd8\x5a\x7d\xdd\xc4\xce\xd2\x31\x8c\xa8\x08\x54\xe8\x9e\xb5\xa4\xb2\xa2\x82\x10\xc1\x67\x31\xc9\x9b\x61\xfe\xc8\x41\x25\xfc\x30\x7b\x9d\x24\xca\x58\x4f\xba\x95\x8a\xcd\x56\xa0\x9c\x2d\xf0\xf7\x91\xa8\x11\xab\x03\x51\xb4\xb5\x19\x4e\x5c\xd1\xc6\xab\xce\x20\x05\x08\xb7\x9a\x47\xe4\xe2\x34\xb8\xcd\x8b\x96\x76\x86\xa8\x45\xc3\x62\x15\x36\x85\x38\x8b\x55\x77\xc0\x4a\x4b\x6c\x0a\x4e\x24\x9f\xb6\xeb\x49\xcb\xe7\xe0\x6a\x87\x56\x8c\x17\x13\xd5\x34\x66\xec\x8e\x30\xa7\x60\x97\x44\xdd\x66\xf1\x7e\xaa\xe3\xc1\x40\x8b\xa8\x45\x6a\x71\x89\x51\x03\xd7\x72\x77\xed\x9c\x88\x77\x12\x29\x39\x1b\x82\x34\xd4\xc4\xae\x35\x3d\x9a\x13\x60\x1e\xd6\xae\xba\x71\x92\xd5\x28\xe6\x09\xab\xd1\xea\x92\xe9\xd7\x22\xa5\xa2\x63\x91\x6d\xd2\x31\x8e\x66\xaf\xaa\xab\x23\xc5\x06\x62\xe7\xb5\x9b\x9d\x88\xbb\x45\xfa\x2c\x2f\x4c\xf6\xf7\x8c\x14\x49\x4e\x4e\x9e\xe0\x57\x7c\x12\xaa\x2e\xe6\x39\xc9\x04\x73\xa9\xb8\xd6\xa1\x66\x21\xab\xd2\x65\x4c\x58\xbc\x49\x8e\x76\x80\x97\x93\x1f\x5b\x14\x75\x9d\x5d\x96\x65\xa2\x95\x66\xc9\x49\xef\x0c\x04\x8b\xa4\xb3\x65\x81\x9d\xc1\x86\x34\x97\x46\xc1\xb6\x62\xd1\x61\xcd\xe4\x6e\x9f\x96\x5b\xa4\x0b\x0d\xdb\x50\x85\x9a\xdf\xe2\x48\x30\x96\x61\x9d\x4b\x02\x00\x87\x58\x8d\x0b\x95\xe8\xa8\x1e\x3c\xab\x9a\xe4\x54\xd0\xdb\x24\xd4\xc2\xe2\x38\x6a\xfe\x66\xad\xec\xb3\x6e\x90\x9e\x36\xe7\x97\x0d\xc3\x0e\x4e\x32\x74\x82\x7c\xcc\x98\x81\x39\x68\xfa\x45\x8e\x0e\xa1\x23\x79\x7f\x3d\x6a\x32\xec\x56\xc8\xab\x06\x50\xee\x8b\xa9\x66\xe9\x09\x9c\xad\xf7\xf7\x9f\x3f\x5e\x45\xd9\x8a\x61\x0b\x70\x11\x69\x7a\xf1\x44\xf5\x47\x4d\x98\xca\x80\xa8\x30\xdf\xb1\xe8\x0a\x6d\x62\x52\x79\x8a\x7c\x43\xd3\x5c\xbe\xab\x2e\x80\x73\x39\x90\x98\x59\x4c\xd5\x31\x8a\x26\xa1\x4f\x8e\x5a\x41\x58\x61\xd2\x90\xab\x56\xc3\x72\x1d\x74\x47\x36\x57\xb2\x22\x1b\xc2\xca\xa4\xa2\x4b\x9b\x50\x11\x86\xbf\xf0\xc7\xa2\xa7\xe1\x9b\x67\x3c\xc1\x28\x9a\x90\xb6\x61\x59\xca\x14\xd9\xf9\x8e\xfc\xb2\xb2\xa8\x47\xb5\x27\x3d\x90\x4f\xe5\x08\x3f\xe8\xc9\x17\xa4\xe1\xcb\x38\xdf\x6e\xf0\xcc\x31\x7e\xf3\xf1\xb7\xdf\x2e\xc6\x99\x36\x22\x32\x5c\xc9\x65\xa8\x1d\xc0\x37\x08\x34\x8b\x24\xc3\x02\x48\xec\x98\xd2\x4b\x7a\x37\xab\x74\x22\x8a\xdf\x5e\x53\x94\xae\x26\x04\x97\x61\xb6\x16\x3a\x8e\xc2\xb5\x9e\x99\x7d\x36\x7b\xba\x23\x14\xd9\xe1\xa8\x9d\x45\x45\xc8\xe4\x38\x40\xe9\x9b\x65\x00\x83\xfb\xfe\x71\x42\x1b\x76\xbf\x76\x42\x13\x67\x40\xca\x71\xcc\xae\xd1\xe4\x39\xc3\x61\x9e\x6e\x06\xf0\x1b\xbb\xc6\x57\x63\xf3\xc4\x11\x9b\x48\xba\x16\x9f\x17\xa5\xb9\xf1\x79\x74\x7e\x77\x92\xdb\x10\x82\xb4\x83\x91\xb2\x40\xa2\x18\xd1\xad\xd9\x38\xd2\xb7\x14\x97\x5f\xb6\x32\x5b\x36\x79\x3b\x0b\xfe\xcb\xfe\xfd\xc3\x74\x91\x32\x17\x2f\x63\xfc\xdc\xd6\xca\xea\xd0\x14\xa7\xac\xa4\x00\x7e\xb5\x83\xcc\xa7\x0a\x92\x80\x12\x1d\x53\x74\xf2\xa7\xf4\x9d\xa8\xb2\xf2\x19\x41\x3a\x03\x1a\x0d\xd8\xfc\xa2\xbc\x04\xb8\x4b\x75\x1f\xd1\xe0\xf8\x02\x27\x2f\xe5\xb0\x00\x5e\xc1\xfc\x26\x9e\xb8\xac\xb6\x07\xea\x5e\x75\xb3\x68\xfd\x58\xa8\x97\x34\xed\x22\x28\x9a\x48\x51\x13\xb9\xc0\xb5\xaf\x59\xc6\xd5\xe9\x39\x1c\xec\x42\xab\xf6\x63\x72\xf5\xe4\x21\xfa\x0c\x6a\xb6\x89\x79\x48\xf5\xb0\xb3\xdd\x0e\x8d\x3c\x68\xdb\x7f\x02\x73\xd2\xfd\xdd\xf4\xf0\xe1\xdd\xdd\xe7\xeb\x61\xf4\xb8\x19\x46\x57\x4f\x5e\xdb\x8b\x9c\x30\x76\x7e\x1c\x42\xf9\x34\xef\x4a\x68\xcd\x58\xd3\x1e\xd7\xc2\x94\x1b\x44\x49\x7a\xf6\xe3\x8a\x96\x72\x85\x18\x0b\x43\xf9\x67\x3e\x00\xa0\x5e\x2b\xeb\xd1\xee\x16\x3c\xa2\xbc\xf4\x75\x7c\x44\xcd\x20\x7c\x84\x8f\xb8\x32\xeb\x5d\x20\x64\x96\x74\x03\xdd\xb5\x2b\xbf\xec\xcb\xaf\x12\x49\xf7\x42\x2c\xc6\xdf\xde\x7f\x7e\x78\xf3\xf0\xbf\xcb\xfb\x0f\xbf\x7f\x7d\xff\x65\x7f\x09\xe3\x15\xb7\x42\xf7\xc3\xa5\xf6\xa3\x48\xa8\xe0\xf0\x03\x9a\xf0\x70\xc1\x0f\x07\xb4\x56\xc1\x56\x35\x96\xe1\xc8\x90\x4f\x47\x93\x48\x01\xd7\xd5\xb7\xce\xc0\x4b\x20\x5a\x7c\x75\x1c\x06\xc9\x62\xe0\x99\x48\x5d\xc5\xd4\x74\xc9\x13\x19\x70\x0b\x87\x08\x92\x9e\x97\xfa\x2f\x5b\x50\x5c\x97\x50\x60\xbd\x3a\x42\xfa\x26\x15\x25\x0e\x82\xde\x41\xb4\xf7\x22\xd0\x95\x53\x88\x68\x05\x1d\xed\x64\x1a\x39\x8c\xd1\xa2\x06\x42\xd0\xef\x54\x7b\x51\x9f\xc7\x65\xee\x83\x79\xdd\xbb\xab\x48\x0a\x81\x77\x1b\xfb\x5b\x5d\x22\x04\xcb\x2c\x72\xc4\x11\xc8\x54\x8a\x26\x8e\xe2\x9e\x45\x6e\x5f\xc3\xd2\xb2\x2b\x75\x81\x2f\x1b\x19\x40\x48\x1f\x4a\xac\x6e\xe7\x6b\xd3\xec\x31\x82\x17\x56\x03\x6c\x21\xe5\xc1\x8a\x01\x5b\x02\x39\xe9\xf0\x05\x9d\x3f\xd9\x80\x44\x27\xdf\xd2\x6c\x19\x9c\x32\x6a\xca\x0b\xa8\xe3\xb9\x9d\x01\xf6\xf1\xfe\xdf\x97\x58\xbc\x71\x2b\x71\x42\xc9\xca\x7e\x42\x28\x1c\xcb\x3f\x2a\x8c\x3c\x03\x28\x47\x33\x5f\xa3\x66\x4f\x65\x45\x91\x92\x1e\x9d\x61\x89\xb6\x01\xe2\x43\xb5\x68\xc2\x56\xac\x1d\xc1\xf2\x51\x27\xc2\x65\xd2\x64\x6b\x64\x4e\x54\x14\x8a\x03\xf5\x7a\x75\xfa\x47\xd7\x8d\x58\x4a\x5d\xfe\xc9\xf9\xe6\x22\x4f\xf0\xf6\xc8\x5d\x1b\x39\x86\x36\x50\xc5\x6a\xcb\x00\xb7\xd2\x58\x12\xed\x4e\x83\x5d\xc7\xbb\x54\xa4\x68\x65\x17\x3b\x78\xba\x62\x53\x2d\x40\x3d\x34\x65\x8a\xb5\x3b\x0e\xb3\xa8\xa5\x94\x1c\xd5\x02\xcc\x06\x6a\x0d\xc8\x36\x31\x37\xc7\xb9\x2d\x29\x92\xab\x64\x22\x52\x3d\x04\x0b\x19\xa0\xed\xb6\xd2\x79\xf7\xbf\xf7\xef\x2e\x1c\xdb\xb1\x6c\x22\x79\xa5\xec\x6a\x89\x1a\xfd\xf0\xb5\xc4\xbd\x8f\x31\x4d\x54\x9b\x33\xf0\x62\xc4\xc2\xb3\x6b\x0d\x89\x69\x51\x43\xb3\x31\xee\x3d\x95\x3e\x69\xf9\x6b\xcf\x76\x99\xfc\x85\x3f\xb8\x95\x1b\xbf\x4d\x9e\xc4\x9a\xe2\xba\x27\xae\x65\x16\x25\x57\xd4\x98\x3e\x20\x19\x17\x53\x00\x49\x6c\xfb\xb9\xc8\x14\x8e\x4e\xf3\xf4\xdb\xab\xbc\x60\xdc\x9f\x72\x78\xdc\xef\x1f\x0e\x9f\x3f\x7e\x00\xcd\xd7\x55\x58\xd6\x58\x87\x73\x11\x8e\x9e\x44\x93\xa8\x53\x10\x5a\xc8\xb2\x33\x59\xaa\x59\x76\x3e\x86\xea\x62\xa8\x93\x7d\x5e\x3d\x67\x5c\x3f\xd2\xf4\xce\xc4\xf0\xe4\x93\x28\x94\x09\x0a\xe5\xb5\x74\xc5\x69\xfd\x7d\x4d\xf1\x3b\x0a\xea\x9f\x5c\xa9\xbe\xfb\x0b\x0b\x7e\xcf\x06\xe2\x2a\xb6\x69\x5c\x01\x4f\xaa\xac\x9e\x44\xe8\x0a\xeb\x89\x8b\x5e\x1e\xbf\xdd\xe8\x65\x19\x04\x3f\x46\xe1\x4a\x2f\xcb\x00\xca\x68\xea\x90\xca\x3f\xb7\xce\x5c\xef\xf4\x1f\x3c\x1e\x97\x84\x17\xf1\x04\x65\xa3\x88\x14\xab\x9b\xeb\xe2\x89\xd1\x78\x6a\xce\x6f\xf5\xf1\x74\xba\xe6\xbc\x2d\xba\xff\xd4\x81\xb8\xc6\xbd\x11\x57\x44\x87\x46\xd1\x71\xac\x9b\xeb\xe2\x09\xe9\x73\x3e\xef\xc7\xb4\xff\x8e\x05\xf4\x1f\x2a\xa6\xf6\xcb\x1f\x53\xbe\x18\x81\xb7\x5b\x69\xb3\x14\x83\xeb\xb1\x4f\x54\x1c\xd5\xbc\xf7\xad\xa5\x49\xd4\xb5\x1c\xd3\xbe\x10\x48\x4b\x11\x1e\x9a\x3c\xc1\x5f\x22\xfb\x5e\x2f\x0e\x9f\xa2\x6b\x84\xbd\xa7\x9a\x27\x9c\x55\xdb\xa4\xa5\xec\x21\xec\xd3\x81\xa6\x98\xbb\xeb\x1d\x59\xfe\x09\x91\x79\x84\xa8\x40\x0f\x5c\x6a\xfa\xf6\x5a\x34\x8a\xa0\xb6\xe0\xa4\xc9\x7f\x94\x62\x9b\x7c\xae\x48\x98\x66\x39\x4a\x8e\x9e\xa8\x87\xbf\xff\xf2\xe5\x22\x70\x12\xef\x37\x74\x05\xae\xd9\x1e\x9c\x43\x9e\x3c\x03\xb1\x2b\xc6\x38\xf9\x16\x2c\x82\xe5\x4b\x6f\x4e\x0e\x2a\xb9\x98\xcb\x9e\x7b\x9d\x44\x75\xf6\x94\xea\x94\xe0\x58\x2e\x34\xa5\x26\xda\x10\x4d\xa5\xb9\x18\x01\xd5\x10\xda\x24\xca\x4f\x17\xa5\x20\xf4\x09\x10\x3a\xa4\x3f\x3c\xc1\x5d\x73\xbf\xff\x78\x69\x35\x6d\x55\xbf\xf6\xb2\x96\x9b\xfd\x90\xd5\x54\x3b\xbb\x28\xf6\xaa\xd5\x27\x63\x24\x45\x0f\xd5\xc2\x01\x36\x13\xea\x5c\xdb\xec\xd1\xa1\xa4\x03\xcb\x27\xc9\xdc\xd4\xec\x66\x1e\x11\x0b\xcc\x5d\x78\xbc\xed\x0f\x3d\xd6\xd3\x70\x16\x6e\xe2\xe5\x2e\xfd\x98\xd6\x64\xa6\x19\x31\x32\xb4\x03\x8a\x13\x82\x8b\xe1\x10\x95\xc5\xfa\x2c\x15\x58\x1a\xac\xd5\x5b\x58\xa7\xb3\xd6\x75\x79\x98\x3b\x13\xea\x7d\xe5\x9f\xb9\x54\x14\xf2\x99\x6a\xa6\xe8\x96\x4a\xd2\xea\x9b\x52\xfa\x57\x4b\x66\x7e\x6e\xda\x08\xc0\x3a\x4a\x9c\x7d\x6e\x1a\xfa\x8a\x40\x1f\x43\xf6\x11\xb1\xc6\x0a\xc5\xb8\x53\x5c\xed\xc5\x50\xb6\x07\xec\xba\xa1\xae\x4b\x5f\xd7\x51\x2a\xc8\x88\x26\xa2\x43\x50\x5a\x41\x25\x22\xd3\xf9\xc4\x33\xb3\x7b\x0e\xca\x3b\x32\x6a\x4a\xaa\x33\x25\xd1\xd0\x95\x79\xd6\x35\x56\x84\x4a\xc4\x00\xe2\x2b\xeb\x1c\x0a\x9a\xca\x04\x4a\x1d\x17\x81\x89\x86\xbe\xe4\x80\xae\x7d\x51\x32\xf4\xd7\x0f\xd3\xc7\xfb\x7f\x5f\x2b\xe1\x8e\x0f\x9b\xe4\x4b\xb9\x20\xbd\xe3\x1a\xeb\xb3\xb1\x71\x99\x3d\xe6\xcb\x6a\x89\x59\xb5\xd9\x15\xd4\x41\xbd\xe4\x11\xab\x74\x1c\x24\xb6\x47\x17\xfd\xa9\x87\x5e\x7d\xbd\xa7\xde\xfa\xe5\xd4\x8f\xbf\x05\xa8\x7f\x39\x61\x6c\xe4\x8d\x05\xfd\xc8\x8a\xfe\x18\x73\x7f\xa7\xc4\xac\xf5\x89\xdc\xdc\xb7\x5f\xa7\xe9\xcb\xc3\xff\x5d\x04\x58\x52\x58\x15\x1c\x80\x43\x58\xc2\xdd\x73\x98\xd9\x97\xcd\x59\x69\x28\x0a\x06\x26\x84\x00\xe1\x91\xc2\x78\x39\x27\x37\xb6\x45\x74\x46\x75\xac\x5f\x2e\x67\x7f\x9c\x9d\x77\x7a\x87\x93\x5b\x0f\x44\x09\xdb\x74\xaf\xa3\xb0\x2c\x4f\xa3\xaa\x2c\x97\x58\x2a\xff\x85\x47\xfa\xab\xe1\x91\x1e\xa6\xe9\xfd\xa7\x2f\xef\xbf\xbc\xc1\xb2\xff\xf8\x61\xb9\x2c\x87\x4d\x5b\x91\x23\x00\xc3\x84\xb0\xa6\xd8\x5d\x93\x00\x10\xd8\x57\x24\x80\x5e\xf2\x48\x02\xc8\x97\x97\x12\xc6\xe0\x50\xfe\x8a\x07\x29\x9e\xc8\xd3\x4f\xda\xfd\xf0\xa3\x9e\x35\x2e\x87\x87\xcf\xcb\xfb\xfb\x2b\xa3\x72\x11\x3e\x89\x2d\x9d\x0c\x0a\x72\x07\xff\xec\xbe\xfa\xcb\x46\x1f\x18\x07\x91\xf8\xd7\x0e\xca\x9b\x18\x2e\xd4\xd7\x14\xff\x75\x9a\xb1\x99\xcb\x9f\x8c\x80\xd5\x4a\x14\x35\x1b\xee\x43\x86\x83\xb6\x22\xe7\x45\xab\x59\xf0\xe1\xf0\x15\xbc\x85\xa4\x99\x07\x7d\xc4\xfb\x4e\x82\xaf\xce\xb4\x40\x4b\xd8\xa0\x30\x53\xd6\x04\x2c\x2e\x48\xa0\xa0\x05\x91\x30\x2e\x69\x06\x10\xac\xc6\x0e\xb1\x4b\xb0\xf3\x4d\x19\xf7\x77\xc6\x5d\x85\x88\x63\x77\x9c\x64\x77\x48\x55\x74\xed\xd9\x67\x14\xd2\xf8\x5c\x44\xcd\x56\x69\x0c\x11\x56\x82\x08\x69\x91\xa1\x28\x8d\x11\x59\xaf\x55\x32\x48\xb7\x41\xfe\xbc\x36\xdd\xd0\x06\x2c\x1e\x7a\xf9\x0a\x5d\x5f\x00\x76\xcc\x0c\xf9\x5d\x5d\x84\x45\x42\xba\x9b\xe9\x3b\x56\x48\x7a\x52\x45\xa1\xb6\xd3\xd7\xd1\xab\x0d\x52\x6d\x7d\x93\x99\xc8\x75\x67\x61\xa2\x7f\x1e\x21\xfa\xa7\xe9\xee\xff\x60\xe6\x5f\x4c\xd6\x74\x46\xb6\x95\x42\x9b\x65\xb3\x0a\xee\xe9\x5d\x64\xf9\xab\x76\x34\x53\x6b\x72\xcb\x73\x54\x78\x6b\x76\x19\x10\x24\x2e\xe7\xc9\xe7\x94\x50\xca\xe3\x23\xc1\x9b\x50\x92\x23\x94\xc4\x7a\x03\xa1\xf0\x19\xd0\x07\xc1\x58\x28\xf5\x9b\xdd\x0c\x80\x69\xfc\xd5\x66\xd4\xe5\x46\x76\xdb\x35\xc8\xcb\xfb\x6b\xb1\x89\x94\xb7\x5c\xdb\x56\x5e\x97\xa6\xa8\x19\xff\x45\xec\x62\x69\x41\xe5\x49\xfe\x14\x6d\xf6\x1b\xdc\x2b\x14\xf2\x54\xa8\xb9\x42\xed\xba\x03\xb8\xb0\x28\x4b\x00\x08\x07\x36\xb8\xa8\x82\xa6\xd2\xb6\xc9\xcb\xa5\xf2\xcf\x4d\xb7\xa3\xe8\x56\x72\x3d\x82\xdc\x4d\x0d\x93\x06\xa3\x48\xf6\xb8\x1a\xd8\xd5\xc4\x93\xef\x41\x4c\xae\xd0\x2c\x3d\xac\xba\x55\x44\xad\x72\x4b\xec\xfd\xe2\x88\xcb\x9c\x8b\xd3\xff\x50\xb7\xa7\x9f\xbb\x63\xdd\x9e\x55\xb2\x4d\x9a\xda\xc0\x05\xf7\xb4\xdb\x9a\x98\xc3\xe7\x24\x0f\xed\xa1\xcc\xfa\xb3\x3d\x66\x95\x7c\x13\xa1\x7e\x82\xf3\x8c\xac\xe0\xf1\xbf\x51\xb7\xf8\x51\x3a\xe7\xf3\x28\xa1\x9b\x08\x4a\x3f\x03\x0f\x77\x3c\x53\x45\xef\x38\x7a\x22\x71\xe6\xc3\xd7\x2f\xea\x16\xbb\x62\x14\xa5\xf2\xaf\x63\x44\x3c\x20\x29\xe1\x3a\x15\xe4\x1e\xb8\x5d\x47\x43\xe3\xc4\xaa\x3f\x35\x04\xcf\x0c\x7c\x45\x16\x34\xcb\xf1\xc4\xd2\x3f\x93\x39\xbf\x50\xe4\xec\x9e\x2d\x73\x00\x8d\xf4\x06\x5d\x79\xd1\x83\x75\xd3\xab\x95\xd9\xd5\xb8\x01\x57\xa2\x7c\x98\x4f\xc3\x95\x20\x76\x74\x59\xed\x25\x83\x26\xca\x90\x92\xdf\x1a\xb7\xd1\x4a\x6d\x64\x64\x97\xa7\x5c\x97\xde\x58\x8e\x34\xca\x6e\x9c\xb9\x1a\x2f\xf5\x23\x60\xea\x1f\x13\x5e\x6a\xe4\x54\x73\x9e\x10\xdc\xc6\xe0\x0d\xc2\xdd\x47\x83\xb7\x7b\x34\x7a\xfa\x86\x9b\xa3\x67\xd4\xbf\x37\x47\x0f\x2f\xff\xdd\x1b\xc6\xf4\x70\x78\x98\xae\x38\xe7\xd3\x56\x0d\x19\x05\x6a\xae\x47\xe3\x30\x90\x95\x96\xf1\x69\xae\x8d\x76\x6b\x3c\x41\x4b\x61\xc5\x95\xdd\x89\x08\x83\x37\x23\xb9\x98\x27\x52\xfa\xd8\x59\x93\xd8\xc5\xf8\xdc\x47\x0e\x9a\x05\x74\xa2\x48\xe6\xe6\x22\x70\xb1\x20\x3f\x5c\x69\x53\xe4\xa0\xa1\x4f\x90\x22\xa4\xee\x98\x17\xe0\x2c\x30\x7e\x02\xaf\x1f\x57\x6c\x10\xfd\x49\x3d\x4f\xbb\xe3\x9a\x8b\x3c\xf5\x8d\x0e\x89\x80\xf7\x0b\x7b\x79\xc1\x23\xa3\xa7\x1f\x94\x9e\xc8\x0a\x90\x7e\x89\x47\xdd\x53\x7b\x0c\xb9\x2b\x40\x18\x19\x4d\xd5\x7a\x4b\x56\xfc\x2c\x66\xe0\x8b\x33\xeb\x09\xf8\x9d\x0b\x10\x8e\xba\x2b\x5d\xde\x39\x56\x87\x3e\x81\xbf\x0b\xbd\x75\x5a\x1c\x29\xfd\x38\xf9\xd1\xb7\x23\xf0\x9c\x5c\x4c\x33\xb6\x1d\x19\x86\xfe\x8c\xd5\x7d\x55\xa5\x58\x83\x06\xa5\x65\x04\x0d\x0a\x25\x57\xe8\xbb\x82\x06\x09\x54\x31\xa5\x4e\x9e\x51\xc4\x40\xdf\x1d\x75\x43\xc7\xe6\xb6\x11\x34\xf8\x71\xf1\xba\xfb\x0b\x55\xba\x87\x77\xef\x97\xeb\xfd\xbf\x16\x41\xa5\x90\x5c\xe2\x36\x89\x40\xf5\x94\x79\x42\x36\x53\xe6\xbd\x68\x44\x1d\x68\x98\x87\x0c\xed\xa3\xb9\x46\x40\x10\x46\x6d\xa2\xfc\x07\x52\x0e\xd1\xb8\x3b\x69\x36\x0a\x32\x52\x64\x32\xaa\x2e\x1e\x5d\x74\x31\x4c\x0c\xcc\x30\x12\x05\x4a\xd6\x5e\x70\xf1\xdb\x6b\x51\xc8\x88\xdb\x24\x9f\x59\xcb\xc8\xc4\xbe\x6a\xaa\xaa\xc9\x3f\xc8\xc9\xda\x73\x6b\xdf\x56\x69\x3f\x75\x46\x69\xc7\x5a\x0e\x3d\x6c\xb5\x09\x2c\x48\x94\xf9\xbc\x7c\x79\x18\x79\x13\xa8\x64\x00\x01\x37\xc6\x70\xf7\xab\xf7\xc8\x67\x8f\xe1\x9b\x48\x7c\x31\x7c\xf7\x67\xda\x45\x09\xed\x90\xae\x06\x0a\xf6\x5e\xbe\xf7\x09\x9e\x7d\xa0\xd5\x74\x1d\xa9\x44\x58\xcd\x35\x4c\x24\xfd\x4d\x32\x04\x19\xa9\xf8\xf1\xfb\xc2\xa0\x19\xac\x60\x69\xbd\x9d\xaa\x90\x7d\x85\x48\x41\x9a\x4f\x76\x79\x8e\xc0\xba\x8b\xdd\xe5\xef\x5c\x53\xbb\x5f\x3b\x1e\x5f\xf6\x77\x9f\x1f\xae\x2f\xaa\x77\x47\x9f\x6d\xc8\x2e\x45\x91\x28\x88\xbd\x5c\xd7\xd5\xed\x37\x59\x31\x22\x95\x4b\x07\xa2\x5e\xb2\xe2\xe4\x14\x14\x17\x89\x4e\x27\x20\x72\x86\xd4\x32\x42\x62\x19\x3c\x97\x84\x91\xec\x0b\x6a\xdf\x9c\xef\xb0\xb5\xac\x02\x26\xf4\xc5\x9b\xa9\xae\xf5\x28\x38\xb2\x3a\x0f\x6a\xe4\x94\x67\x4b\xf6\x1e\xd2\xb0\x0c\xb4\xe8\xb9\xa2\x36\xc2\xc5\x99\x65\xeb\xa3\xee\x64\xc7\x4e\x80\x12\x72\x85\x5d\xaa\x71\x4e\xc5\xc9\xa2\x8b\xc1\xd5\x2c\x62\x8d\x39\x39\xdd\xac\xa8\x0c\x8c\x2d\x7d\x09\x64\x76\x65\xa4\x08\xe5\x13\xbd\xf5\x6f\xa4\xb1\x3e\x5f\x61\xfd\xf8\xc7\xa7\xbb\x2f\x97\xca\xea\xc3\xbf\x4e\x71\xc6\x52\x43\x9d\xbe\x08\x38\x6f\x07\xa0\xd4\x5b\xa1\x54\x62\x3f\xf8\x2c\x96\x54\xd6\x74\xb7\x72\xc8\x49\xc4\x53\xa4\xd5\x35\x9f\x9a\xbb\x45\x40\xbd\xfc\x3c\x92\xeb\x1f\x8f\x85\xef\x7e\x95\x13\x7a\xd0\x1c\x3d\x1e\x8b\x7c\x0c\x9d\x50\xca\xae\x15\x82\x2c\x42\xa6\xa4\xa8\xe4\xa6\x30\xa5\x64\x66\xb0\x28\x78\x40\x77\xa9\x8b\x7c\x72\xd5\x13\xf0\x3b\x47\x85\x84\x74\xa5\xcc\x28\x41\x72\x59\xfe\x05\xf1\x84\xaa\x62\x08\x46\x8e\xbc\xe3\x12\x9e\x60\xe9\xd7\xf9\xfb\xdd\x2c\xfd\x98\xbb\xb7\x58\xfa\xff\x79\x5b\xdb\x4a\x54\xb5\x5c\xc2\x60\x65\x3a\x1b\xc5\x44\xfd\x71\xc2\xab\x55\x4e\x98\x6e\x8f\x00\xa7\x28\xc0\x32\x46\xae\x94\x69\x8c\x21\x01\x94\x01\x03\xbb\xe8\x30\x4f\xeb\xf8\x33\x02\xdb\x0e\xd3\xe2\x6f\x35\x86\xff\x1c\xaf\xe1\x9b\x48\xf5\x62\xec\xf8\x5f\xa7\x15\x19\xc3\xad\x16\xc7\x5a\xd3\xac\x6c\x3f\x1c\x72\x8a\xd2\x51\x50\x1a\x19\x01\x9e\x04\x36\xbb\x7a\xd0\x0b\x53\xd0\x75\x37\xa3\x6c\x03\xb6\x78\x9e\xd6\x1b\x80\x42\x11\x43\xec\x33\x5f\x8e\xe1\xa3\xf4\xff\x73\x10\xd3\x93\xfc\xff\x23\x5c\xcc\x69\xfe\xff\x29\x96\xe9\x5a\x00\xf0\xe4\x9e\xb5\xfb\xbb\x8d\xd1\xc3\xd7\x8b\xcc\x93\x1c\x37\x4c\xd2\x5e\x8b\x63\xee\x13\x32\x17\x72\x9f\x0d\x70\x30\xda\x5c\x56\x55\x3f\xbd\xca\x13\xb4\x09\x60\x9a\xf2\xa0\xd2\x35\x1a\x73\x70\x77\x0e\xd5\x43\xb7\x12\xad\xbd\x5f\x60\x20\x8c\x7a\x4d\x6f\xb5\x53\xb8\x72\xc5\xbb\x14\xb9\x9b\x14\x04\xb1\x8b\x82\xa1\x20\xa9\xb2\xb4\x09\xfd\x99\xcf\xd6\xdf\xba\xfc\xb0\xfa\x88\xa2\xae\xdd\x75\xe9\xae\x2b\x17\xe0\xe9\x22\xb1\xc9\x51\x10\xf1\x51\xaf\x00\x01\x1d\x88\x2e\x21\x6d\xdb\x5c\xaa\x63\x0a\x8e\x13\x30\x04\x63\x5b\x52\x40\xc5\x25\xb7\x15\x9e\x5a\x7a\x21\x42\x8d\x8a\x48\x68\xa7\x3c\xa3\x5e\xd8\x49\xbf\xa5\x09\xac\x85\xd2\x9b\x48\xce\xb6\x1c\x79\x03\x80\x4d\x06\xff\x0a\xaf\x34\x82\x18\x08\x3b\xe0\x3b\x14\x9a\x9e\x40\x13\x1a\x30\x98\x4c\x69\x10\x0f\x2f\x5a\x25\x0f\x74\x35\x2d\x00\x40\x89\x51\xd2\x08\xba\xa7\x5a\xf6\xa9\x34\x83\xd9\x51\xe5\x4e\xab\x9a\x5d\x75\x9e\xcb\x6e\xd2\x72\x53\x51\x3d\xb3\x11\x89\x01\xea\x4c\x4c\x87\x86\xc6\xc6\xaa\xb5\x75\x79\x9f\x32\xc0\x0e\xd7\x1b\xa1\xbc\xd8\x15\x05\x87\xd2\xdb\xb0\xe6\xb6\x0f\xb6\xda\xa6\x12\x0b\x80\xfa\x7b\x1f\x5b\x9d\x01\x64\x8a\x0c\x5a\x4d\xd7\x51\x05\x41\x41\xa3\x4b\x7b\x95\x67\xf0\xd7\xca\x1a\x1b\xe5\xc9\x58\x0b\x28\x8d\x42\x90\xfd\x55\x76\x79\x41\x9a\x91\x4c\x41\x62\x17\xa7\xec\x34\x01\x1c\xf6\x0f\x43\xdd\xac\x28\x27\x64\xda\xa6\xf9\x79\x7b\xb9\xef\xa4\x4d\xe7\x15\x07\x17\x7b\x3f\xf8\x68\x28\x42\x97\x30\xc9\x16\x88\x7a\x04\x7f\x98\xc3\xad\x59\xd9\xeb\x21\xb6\x68\xb3\x7a\xbd\x0e\x73\xda\x66\x34\x78\x6b\xcf\x27\x64\x3e\xb0\x32\x4b\x57\xd2\x3a\x70\xc7\x8d\x97\x88\xd2\x0e\xa2\xb5\xd4\x31\x9a\x4b\x5c\xe4\x93\x46\xae\xb0\x96\xaa\xae\x9c\x49\x55\x3d\xe2\x8a\x14\x2d\x14\xc1\xb0\x62\x8a\xa2\xc4\x10\x2d\xa9\x3b\x99\x17\xd9\x9c\xd0\xa0\x13\x8e\x8c\x4c\x26\xf8\xe0\xb4\xec\x32\x56\xf5\x7f\xc2\x87\x80\x72\x2a\xca\xfb\x18\xf2\x99\x43\x6b\xb8\xb3\x0e\x5e\xdf\xc8\x8f\x0d\xd6\x9f\xec\xb0\xd8\x22\x7d\x0c\xf9\xe0\x63\xed\xfb\x44\xe9\xa0\xa9\x54\x88\xdb\x69\xcf\xa1\x7b\xf6\x54\x4e\x1d\xb7\xb2\x8d\x3e\xa3\xf0\xe0\xeb\x97\x8b\x8a\xc2\x9c\x37\x25\x21\xa4\x0e\x5a\x9b\x01\x82\x8e\xf6\x16\x5d\x85\xd9\xe0\x79\x0b\x8c\x9e\x9a\x6f\xc0\x68\xc6\x4d\x79\x55\x33\xdc\xc8\xa3\x52\xdf\x45\xb0\x81\x83\xf7\x0f\xc2\xb1\x26\xe0\xae\x03\x43\x2a\xd6\xb5\xf4\x1c\x41\x9c\x0a\x54\x35\x76\x28\x0b\x88\x4e\x9e\x54\x47\x29\x27\xcb\x4a\x65\xad\xcb\x98\x90\xe0\x07\x17\x74\xef\x22\xc4\x8e\x81\x8f\xe6\x6a\x72\xbe\xcd\x0d\xd5\x0d\x28\x45\x4c\x71\xb7\x68\xa9\x12\xf3\x6c\xd8\x5c\x27\xa5\xf5\x89\x17\x20\xab\x58\x6b\x4a\xc1\x84\x00\x83\xf6\xab\x3c\x0f\x9c\x04\xdc\x80\x01\xc8\x35\xc8\xd1\x01\x9f\x81\xf7\x53\xc0\x05\x85\x28\x88\x03\xe5\x1d\x00\x5e\x2e\xf5\x45\x31\x5b\xb3\x98\x3b\xe4\xb4\x00\x4a\x1e\x57\x51\xcf\x17\x9b\xeb\xcd\x71\xe2\x85\x73\x76\x14\x65\x7e\xdc\x5c\x5b\x04\x7e\xe6\x73\xe7\xbe\x8c\x54\x99\x45\x85\x2c\x8a\x79\x8c\xc1\x6a\x55\x0b\x3e\x77\x4b\x89\x47\x68\xfd\xae\x7c\x03\x28\x95\x9f\xb1\xeb\x35\x60\xca\xb6\x09\xb5\x3d\x0a\x01\x88\xde\xd1\xb2\x5b\x5d\xfa\x5e\x15\x1d\xc0\x9f\x44\xdd\x29\x01\x84\x06\x4c\x45\xbc\x33\x7a\x8f\x65\x6c\xb5\x14\x4b\x19\x7f\x09\xc5\xff\xdd\x20\x6c\x51\x54\xb4\xf8\x02\x05\x83\x2c\x0c\xa4\xc4\x8e\x4d\xc5\x21\xa0\x33\x17\x04\xc7\x7d\x8c\x08\x73\x45\xd2\x62\x2e\x31\x66\x6a\x50\x64\x06\x90\xb6\x73\x40\x69\x0a\x92\xdf\xaa\x9c\x98\x17\x2b\x5c\x92\x0e\x2b\x80\xc8\xd9\x2d\x72\x26\xe6\xb6\xa6\xc7\x55\x4d\x5c\x72\xbe\xa7\xcd\x55\xf5\xfe\xc3\xa5\x7e\x71\x51\xcb\xd3\x7a\x5b\x71\x4d\x44\x18\x15\x2b\xbe\xbb\xbe\x66\x4a\x33\xa0\x63\xb8\x93\x18\xbf\x02\x61\x02\x5b\x6a\x98\xe1\xb6\xa0\xda\x5c\xca\xdd\xf9\x1c\x8b\x3a\x26\x8b\x03\x1e\xb1\x8e\x0a\x00\x64\xe4\x73\xef\xc1\x38\x6b\xf5\x71\x32\x18\x33\x58\x1f\x22\x7c\x1f\xbd\xb9\x5c\x49\x44\x20\xf2\x54\x99\x0f\x22\x11\x6f\xcd\x28\x59\x57\x11\xce\x2c\xd2\xb5\xb2\x50\x50\xc6\xce\xbc\xf7\x89\xeb\x35\xe1\x1f\x2e\x53\x5b\x13\xc5\xd9\x83\xc1\x1d\x70\x11\x4d\x0e\xf6\x9e\xd2\xa6\xa8\x88\xf1\x39\xd1\xab\x8d\x6e\xe5\x18\xe7\xa4\xcc\xec\x45\xdd\x74\x7b\x5a\x0b\xb8\x9e\x99\x08\xfa\xff\x7d\xba\xa8\x08\xce\xf5\x8a\x08\xad\xc3\x21\x12\xa2\x43\x0e\x39\x9f\xbf\x9a\xbd\x58\x3c\xc4\x18\xf6\xa8\xbf\xbd\xfe\x33\x85\x9b\x0a\x1d\x02\x74\x79\xfb\xe2\x74\xf3\x62\xc0\x5e\x31\xb9\x5c\x11\x4c\xc2\xec\x00\x83\xbb\x1c\x72\x03\x3f\x53\x47\x40\x22\x38\x9d\x47\x13\x13\x56\x4c\x86\x07\x14\x00\x2d\x2a\x48\xa1\x19\x3a\xc5\xc5\x69\x0b\xc4\x78\xa1\xdd\x44\x9d\x5c\x42\xde\xf2\x08\x97\xec\x49\xfd\xe0\xc1\x29\xf5\x3b\x34\x28\x28\x7c\x91\x26\x1f\x81\xae\x5e\xfb\x9e\x29\x5f\x8f\x05\x69\xee\x70\x38\xc6\xc8\x4c\x7c\x8d\xcd\x73\xef\xb9\x87\x83\x6f\x79\xcf\x3d\x6c\xde\x22\x3e\x71\x8b\x18\xc3\xd6\x1e\xbd\x5d\x9f\xf9\xf5\xed\xc5\x14\x69\x9b\x75\xfb\x29\xba\x0e\x2c\x15\x24\x75\x97\xec\xa8\xb0\x6c\x74\xe4\x0a\x23\x2a\x75\x10\x93\x51\xa1\x39\x03\xa2\xa7\xf8\x69\xd1\x33\xcd\xec\xd3\x3b\x78\xea\xd8\xde\xd4\xa6\x00\x23\x8d\x95\xe9\xb3\xdc\x2a\x85\x83\x27\x6a\xff\x3f\x7b\xef\xb6\x24\xb9\x91\x24\x0b\xbe\xc7\x57\xf8\x0f\xa0\xc4\xcd\xcc\xaf\x72\x9e\x76\x57\x64\xdf\xf2\x1b\x28\x55\x6c\x9e\x09\xca\x60\x9a\x0d\x0e\x18\x33\x93\x5f\xbf\x62\xaa\x06\x44\x26\x23\x2b\xb3\xd8\x4d\xce\x34\xe5\xac\x74\xb3\x32\x32\x03\x70\x00\x0e\xbf\xd8\x45\x4d\xf5\x5a\xf3\x9b\x5b\x83\x7e\x85\x43\xb6\xba\x45\xf2\x92\x47\xfb\xa1\xd7\xa4\xf5\xb7\x79\xaf\xbf\x4a\x89\x4d\x32\x89\x07\x4e\x6c\xbf\xbb\xaf\x9d\x52\xe6\x5b\xa6\x90\x9f\xd5\x74\xfe\xba\xb1\x6a\x73\xd3\x9c\x31\xac\x8f\x1e\xd8\xef\x1d\xf3\xbe\x06\xe1\xcf\x0f\xec\xec\x75\xbe\x83\x61\xa9\x52\x92\x15\x59\x87\x24\x9d\xde\x1b\x75\xae\xdd\xaf\x93\x33\x80\x53\x18\xe2\xbb\xff\xe3\x77\x99\x72\x98\xf5\xf1\xf3\xf9\xa9\x19\x94\xe8\x57\x02\xec\x7d\x0c\xea\x0a\x78\x8e\x8e\xab\x6a\x7d\x7e\x1a\xaa\x90\xaa\x17\x9b\xeb\x72\x1c\xd5\x41\xde\xd0\x25\x59\xc9\xab\x9b\x6a\xd9\x57\x9a\xa6\x7e\x1b\x8b\xce\x89\xb7\x95\x4e\xbf\xf4\xe4\x18\x3a\x6f\x81\x37\x00\xc6\x11\xe5\xf5\xed\xb8\x7e\x5f\x41\xc9\xef\xd7\xb7\x1c\x65\x14\x6f\x21\x0e\x2e\xf7\xd5\x55\x8e\xea\x54\xe8\x95\x75\xa2\xe8\x10\xe0\x28\x57\xba\x7e\x8a\x37\x6a\x92\xdc\x21\x94\xd6\x52\x83\x4a\x5c\x9e\xfe\x5b\x7f\xe7\x44\x21\x65\x14\x38\xb8\x82\x8d\x54\x3a\xb3\xb3\xd1\xc4\xf8\x26\xb8\x83\x74\xb0\x12\xf3\x21\xa5\x7c\x1b\x46\x42\xfc\xfe\xc6\x4c\x56\x0a\xe1\x79\xee\x69\x8d\x0b\x96\x4a\x90\x6d\x8b\x5e\x41\xac\x81\x25\x14\xb7\xbd\x82\x5b\xa0\xe5\xab\xd5\xb9\xce\x9e\xac\xe5\x0d\x54\x3c\x78\xf6\xab\x68\xdb\xd0\x17\xc7\xd1\x23\x8e\x6e\x75\x9d\x86\xa3\xeb\x8b\xa3\xad\x87\xff\xda\xee\xfe\xab\xc1\x29\x19\x2b\x35\x9c\x7c\x27\x13\x79\x63\x46\x7f\x0d\x4f\x20\x48\xc1\xc4\x1b\x96\x3e\x7f\xdb\x26\xf8\x65\xff\xfe\x61\x7a\x7c\x7e\x6f\x85\xf3\xb7\x3b\x66\x0b\x60\x95\xa2\x0e\xc1\x6d\x91\xb1\x49\x28\x77\x48\x8f\x58\x38\x78\xaf\x84\xa5\xe0\x5d\xc8\x50\x1b\xda\x1f\xe4\x98\x19\xfe\xa6\xfa\x41\x6f\x28\x41\x9d\x45\xc2\xab\x20\x76\x82\x78\x47\xf5\xb1\x53\x6e\x5a\x65\x5b\x06\xf9\xcc\x54\x93\xf8\x57\x7a\x7c\xc5\x98\x29\x69\x76\x73\xb0\xea\x66\xf0\xe0\xe6\xbc\x9a\x24\x19\x86\x8e\xad\x81\x3b\xa8\x72\x2b\x59\xaf\x3e\x4c\x5b\xa2\x26\x99\xdc\x74\x50\xb3\xa6\x0d\xbf\xb9\x04\xbe\x40\x91\x9b\xb4\x72\x59\x89\xf4\x27\x19\xd6\xec\x7e\x70\xd5\xab\x5f\x7b\xd1\xd2\xb7\xa1\x49\xdd\xcd\x48\x7a\xd3\x52\xe3\xef\x55\xb7\x8e\x32\x1f\x29\xb1\xa3\x07\x7a\xa6\x86\x08\x5f\x1f\x3b\x43\x46\xe0\x52\x78\x7e\x9a\xc8\xa4\xf9\xe2\x6f\x2c\x01\x6f\x05\x20\xae\xd2\x82\x1b\x98\x21\xa4\x76\xf0\xf9\xc2\xa9\x0a\x5f\xf6\xe8\x54\x09\xca\xbb\x45\x7c\xef\x1b\x1b\x82\x10\x3d\x2d\x60\xaf\x1b\xfc\x59\x0d\x41\x09\x98\xef\x65\xaf\x1d\x5a\x66\x15\xad\x16\x52\xdc\xa9\xd0\x1e\xb7\x7c\x61\xa4\xa2\x64\x6c\xbb\x55\x9e\x9f\xc6\x90\x34\x60\x59\x02\x80\xab\xf0\x71\x4e\x9e\x3e\xf7\xaa\x0a\x93\xd6\xee\xd7\xd0\x5f\x42\x6d\x8f\xfb\x0b\x0c\xf4\x00\x69\x1b\x92\x69\x7e\x43\x37\xd4\x9b\xc2\xd3\x2f\xf1\xa7\x1d\x7e\x62\xde\x6b\x4e\xba\xd7\x9a\x2a\xea\x16\xe0\x5c\xec\x28\x4a\xc0\xf3\x5b\x4f\xda\x77\xed\xc9\x06\x1c\xe7\x2a\x1f\xb0\x7f\xac\x8f\x59\x96\x2f\xff\xeb\x35\x7c\x51\xcb\xad\x74\xd4\x6b\xf9\x6c\xf3\x17\xa1\x63\x2d\x19\x84\xff\x01\x1b\x20\xbd\xa8\xb5\xeb\x52\xba\x12\x9c\x3f\x4f\x60\xf6\x2b\xd2\x85\x2b\x00\x00\x92\xeb\x57\x0b\x84\xc0\x27\xf2\x26\x6c\xbb\xe5\xfc\x88\xdb\x06\xde\xbc\x96\xf2\xe1\x73\x7e\xb7\xff\xf0\x9f\x0f\x68\xbe\x7a\xcf\xb7\x97\x06\xe7\x25\xbf\xf1\x44\x8f\xcf\xff\xfc\x34\x27\x14\xc2\xff\xb0\xe7\x79\xab\xf3\x02\x30\x21\x2d\x9f\x6b\xf9\xab\x20\x38\xa0\x54\x6f\x05\xc1\xcf\xb5\xf2\x65\x0c\xbc\xe7\x72\x79\x0c\x82\x43\xbc\x5d\xda\xef\x74\x81\xb7\xdb\x6f\x5d\xff\xa0\xf6\xdf\xcd\xef\xff\xf4\xf3\xfe\xdd\x97\xff\xfa\xee\xf3\xfa\xb7\xeb\xe7\x2f\x8f\x50\xde\xfa\x97\x77\x55\x84\xa6\x24\xe1\x96\xd2\xd7\xa5\x6b\x52\x41\xe9\x6b\x2a\x7d\x5b\x14\x91\x11\x05\xf9\x0c\x38\x77\x97\xa0\xb1\x39\xf8\x00\xc7\xbe\x74\x8a\x1c\x3e\x3f\x75\x6b\x29\xb4\x69\x35\x50\xec\x7e\x0e\x3c\x0f\x09\x7c\xfb\xbd\xaa\xf2\x65\xed\x26\xe0\x5e\xfa\xf5\xda\x3f\x54\x37\x92\xc2\xe4\x43\xe5\x95\xdb\xe2\x47\xbe\xf9\xd5\xf3\x93\x00\xa5\x4c\x79\x16\xb3\xeb\x52\x47\xb9\xcd\xbc\x5a\x9b\xa9\x2a\xb2\xfe\x32\x92\x4a\xd2\xbe\x8a\xa4\x79\xb3\xa0\x82\x6c\xc7\x62\xc5\xa7\x05\x57\x4a\x24\x18\x80\x1e\x72\x47\x55\xdd\x4c\xaf\xa8\xac\xbd\xa9\xce\x6b\x6d\xfd\xb6\x0c\x7f\x3a\x28\x41\x59\xf6\x0d\x08\xf5\xab\x42\x0a\x15\x86\x9c\x6f\x8b\xae\x3e\x2b\xb7\x99\x14\x8f\x7b\xd5\x32\x6e\xe2\x9e\x97\x0a\xe8\x5b\x24\x8d\x8e\xb9\xd8\xe0\x38\xde\xfc\x83\x1b\x45\xd0\x1b\x28\xd7\x45\x8b\xad\x04\x72\x96\x72\xed\xf5\x3c\xb2\xf3\xc8\xbc\xaa\xe5\xd4\x9a\xef\x81\x7a\xc1\x2f\x8b\xff\xd6\xf3\x07\x69\x32\x7d\x60\x4f\xaf\x3f\x7c\x38\x92\x72\xf9\x3f\x63\x20\xf9\x6b\x59\xa4\xe6\xcb\xef\xf4\x62\x5e\xbd\x17\x8e\x53\xc9\x59\xfe\x69\xc6\xa9\x3b\xd8\x3e\x4e\x6d\x9b\x49\xbc\x37\xc5\xc7\xe9\xe5\x1c\xa8\xdf\xb4\x40\xed\xfb\xcf\x3f\x7e\xf9\x65\xff\xe1\x01\x8d\xd2\xf2\x3b\x9e\xda\x9f\x61\x38\xb8\xaf\xb5\x98\xbe\xa3\x5c\xf5\x36\xbc\xfb\x0d\x95\xa9\x61\xfa\xb6\xb8\x4b\xce\xa9\x8c\xfc\xce\x25\x80\x2e\xf8\x96\x4b\x40\x18\xec\xf1\x0a\x6e\xfb\xcc\xf9\xde\x43\x10\x82\xf2\x0d\x57\x00\x8e\xe1\x0d\x90\xba\x5b\xdf\x90\x24\xf9\xba\xc2\x57\x6d\x97\x6f\x94\xe3\xaa\xed\xb7\xf9\x40\x8f\xe3\xf0\xad\x42\x88\x26\xef\x55\xbe\x00\xd0\xf6\xee\x8b\xd6\xb7\xf3\x69\xdf\x78\xff\xff\x74\xa3\xfd\xf2\xb5\x91\xf2\xfe\x58\xfc\x47\x47\x8a\x8f\xf6\xf7\xc7\xe2\x3f\x3a\xda\xa1\x3c\xfc\xfe\x58\xc4\x54\xfc\xd6\x49\xfb\xf7\x8d\xc5\x9f\x7e\xfe\xcb\x23\x37\x61\xbb\xc3\x51\xac\xb4\xc4\xcc\x69\x33\xb0\xa0\x8b\x34\x42\xd6\xaa\x1d\x6c\x8d\xc3\x88\xae\x07\x52\xbe\x84\xa7\x39\xeb\x2e\xb9\x90\xef\x95\xce\x30\xc8\xd7\x76\xab\xa0\x85\xfb\xa7\x5f\x54\x2f\x3e\xcc\xc0\x66\x42\x9e\x7b\x0d\x0c\x02\x2a\x33\x49\x77\x2d\x85\xde\x08\xf1\xa3\x73\x1c\xe4\xf1\x7b\x24\x26\x83\x75\xb0\xe9\xa1\x5c\x23\x0d\x01\x2d\x8a\x64\x4b\x5d\x6d\x42\x46\x5f\x20\x0c\x09\xdd\x1a\x41\x8a\x51\x2c\x21\xb6\x61\x1b\x08\xca\x05\xce\x2a\x5c\xdf\x86\xba\xd3\x42\xe1\x9d\x8d\x5b\xa4\x45\xee\x10\xef\x80\x08\x17\x0a\x4d\xb3\xd4\xa6\x1b\x49\xe8\x97\xd6\x93\x74\x0d\x2a\x8e\x9a\x7c\x87\xef\x83\xa4\x07\xb6\x09\x44\x31\x41\xfc\x3b\x59\x90\x04\x98\x25\x41\x56\xa5\xb6\x34\x06\x36\xee\x72\x5d\x4a\x9b\x37\xff\x20\xad\xdf\x0a\xea\x65\x3a\x62\x83\x32\x77\x46\xd9\x6e\x88\xaf\xad\x4b\x67\x6a\x7c\xb0\xe7\x00\x94\x10\x28\xf6\x2e\x75\x90\x67\xb7\xad\xe2\xb3\x60\xd4\x2b\x92\xe0\xad\x7a\xab\xf5\xdb\x07\xee\x9b\xeb\xa7\xbd\x1a\xbc\xa2\xa5\xff\x9f\x34\x7a\x2f\xf7\x45\x12\xc9\x96\xf2\xdf\xf7\xda\x62\xc2\xc8\x98\xff\x73\x33\xe6\xf2\x3f\x36\x65\x5e\xcc\x98\xf7\xfd\x1a\x2b\x0f\x43\xb6\xbc\xe3\xd7\x00\x0e\x8d\x15\xff\xd7\xb5\x0a\x77\x39\xe1\x4f\x47\x19\x24\xd3\xdd\x64\x68\xe9\xe9\xf8\xf5\x53\x3d\xf8\xeb\xc7\xa7\x17\x78\x72\x94\x6b\x4f\x70\xfb\x3f\x3f\x15\x69\xa9\xfb\x6e\x74\x20\x9b\xdf\x12\x42\x02\x53\xe4\x23\x25\x10\x4f\xf9\xb5\x10\xd2\x18\x6f\x0a\x21\x61\x6b\xed\xcc\xc8\x41\xdb\x17\x9d\x4f\x4d\x58\x9f\xa1\x48\xa3\x5f\x36\xf3\x1f\x89\x18\x30\xeb\xc0\x12\xd4\xa8\x1d\xec\xd4\xc9\xaf\x9d\x5a\x67\xb3\x6c\x24\x65\x61\x19\x97\x0c\x81\x50\x33\x4e\x07\x43\x57\x1f\x57\x44\x9c\x7a\xbb\x52\xed\x99\xed\xe0\x62\xf7\x80\x30\x44\xfa\xa1\xb1\x64\x93\x7e\x8b\x25\x22\xd0\x46\x2a\x2c\x05\x93\x78\xee\x4f\x51\x93\x50\xc0\x95\x24\x1b\xe0\x5d\x32\x12\x04\xd5\x8a\x41\x10\x64\xd3\x92\x34\xf5\x06\x2d\x8a\x2c\x49\x54\xb6\x36\xd2\xe8\x89\xbf\xe5\x8d\x15\xc7\x26\xa9\x0c\xaa\x55\x14\x28\xa7\x41\x74\x17\x74\xa8\x28\xfa\x40\xd8\xb3\xc9\x8e\x4c\x46\xd5\xdd\x0a\x04\xc2\xa3\x36\xc2\x47\x41\xf1\xc7\x61\x9c\x17\x8a\xd4\x0d\x6f\x6f\x2f\x39\x58\x37\xb5\xb0\x26\x05\x90\x85\x9d\x52\x53\xcc\xf0\x60\x9e\x82\xcc\x98\xe0\x05\xd6\xd1\x82\x36\x80\xba\x07\x0d\x70\xb6\x16\xbc\x00\x63\x0f\xc8\xd3\x0e\xf7\xac\x5c\xb5\xf7\xad\x0f\x4c\x37\xbc\x8f\xbd\x62\x2a\x7e\x38\x01\x1e\x08\xd9\x5a\xfd\x60\x02\x04\x70\xf4\x71\x50\xbe\x9a\x03\xe7\x14\xc0\x0c\x38\x26\xc0\x7d\xfc\xbf\x1a\xfe\xcb\x31\xfe\x97\xfb\x04\x28\x65\xdc\x07\xf3\xaf\xea\x82\x5e\x0f\xfe\x57\x55\xc7\xf7\x29\xf3\xba\xea\xf8\xe5\x14\x78\x59\x75\x5c\x6a\xaa\x13\xba\xa7\x4b\x93\x74\x4c\x80\x45\x7c\xa8\xa6\x10\xe7\x13\xa3\x54\x09\x49\xe0\xfb\x75\xf1\xce\x66\x04\x15\x9d\xbf\xc7\xab\xe0\x9b\xd9\xa2\x36\x14\xa8\xde\x8e\xa7\xc2\xe2\xe7\xdf\xf6\x83\xb2\xa9\xc0\x23\xf7\xf7\x8e\xaa\x16\x54\xd6\x70\x50\x2c\x31\x46\x96\x73\xd0\x2c\x31\x8a\x96\xfb\xc0\x7a\x35\xf5\xc1\x45\xa6\x94\xd1\x06\xcb\x7b\x0c\xcf\x25\xc6\xeb\xb6\x4c\x10\x21\x9f\xa3\x39\x50\x58\x64\x19\xc2\xa0\xdf\x16\x33\x46\xf6\x63\x42\xf8\xf4\x05\xca\x82\xd3\xe5\xb2\x2f\x98\x3e\x20\x55\x56\x2c\x05\x44\xe3\xc5\x4c\x3b\xa6\x1e\x97\x9d\xf2\x29\x16\x9e\x4f\x15\xb8\xe7\x14\xf3\xb6\x77\xe6\xdb\x8e\x89\xbd\x9f\xb3\xfd\x58\x00\xae\xd2\xaf\xbd\x5d\xad\x6d\x02\xc4\x75\x8a\x45\x63\xab\x03\x35\x46\xc7\xa2\x62\x13\x5d\x1c\x4b\x8e\x10\x15\x12\x0b\x52\x01\x80\x2b\x1d\xab\x55\x26\x26\x94\x6b\xd9\xbb\xb3\xe1\xbf\x7e\xfa\x65\xff\xe5\xcb\xdb\xe5\x51\xed\x2c\x89\x9f\xe2\x96\x80\xdd\xa4\x7a\xdb\x95\x25\xbd\x35\x1f\xd2\xe7\xe8\xc4\x46\x0d\xbb\x20\x49\xe6\x9f\x36\x0d\x2c\x46\x99\xcf\x4f\x82\xf2\x92\x5a\xaf\xad\xdd\xcc\x97\xdf\x2a\x38\xb5\xca\x8e\x16\xaa\xdc\x16\x2b\xcf\x4f\xd5\x34\x35\x95\xdb\xd2\xf3\x75\x71\x27\xab\xa8\x5d\x97\x5e\x6e\xfc\x39\x6e\x3d\x5f\xd5\xd4\xad\x20\x4b\x65\x56\x60\x3b\xaf\x8b\x9b\x15\x19\x68\x36\xcc\x0f\x2c\xde\x15\xef\x98\x95\x4d\x3a\x90\x01\x03\x8c\xac\x96\x9b\xce\xec\x37\xb2\x68\xcf\x31\x38\x11\xee\x41\xee\xbb\x52\xd9\xa2\x5e\x36\x75\xd3\xab\x68\x32\xb9\xe9\xc8\xd7\xd6\x9f\x9f\xe6\x80\x14\xc9\x0d\x60\xb2\xe0\x92\xef\x10\x58\xa7\xc8\xbb\x42\x1a\x63\x29\x0a\x6c\x3c\x93\x03\xc5\x1f\xad\xf1\x1e\xa7\x5d\xa9\x38\x26\x9b\xa1\xde\xca\xbf\xcf\x1b\xa4\x8e\xe2\xc4\x8e\xe0\x93\x37\x0a\x9e\x15\x6b\x49\x6b\xbd\x2d\x58\x2e\x81\xac\xf2\xc1\xb8\x11\xde\xcd\xb7\x0c\x45\x8a\xa8\x41\x1b\x99\xbf\x87\x79\x29\xc9\x06\xe5\x6c\xd9\xec\x68\x37\x01\xf4\xa0\x82\x8f\x6e\xe0\x25\xd9\x48\x03\x9c\xf7\xbe\x00\xd8\xb8\x50\xa1\x75\x02\xad\x38\xda\x8d\x5b\x97\xc1\xd6\xda\xc8\xd7\x85\xd2\x43\x89\x9c\xb0\xcf\x82\x33\x47\xdf\x69\xcf\xb5\x4f\xf5\xe6\x43\xfd\x0a\x83\x75\xd4\x24\xb9\xcf\xdb\x22\xcc\xa8\xe0\xdd\x2b\xcb\xe1\x4c\x53\x95\x1b\xbf\xa8\x10\xbd\xf7\x7d\x46\xa3\x3e\xc0\x7c\x93\x6a\x68\xbe\x47\xe9\x00\xe0\xf9\x39\x41\x55\xc7\x52\x07\xb6\xb3\x37\xe4\xd4\x36\xd0\x53\xa0\x4b\xc4\x2d\x36\xef\x16\xbc\x85\x82\x30\x1e\x35\x9b\x97\x80\xca\x1d\x49\x58\x6a\x3e\x78\x3b\x17\xac\x2b\x10\x0c\x83\x8a\x5b\xd4\x0b\xf4\x96\x8e\x5f\x85\xc2\x4c\xc7\x29\x01\xca\xb3\xba\x01\x53\x2b\x35\x15\x32\xa5\xed\x71\xfd\x62\xa9\xa2\xde\x2e\x59\xdd\x71\x56\x37\x1f\x56\x90\xd0\xf5\x47\x79\x7e\xaa\xcd\x7c\x53\xee\xeb\xf4\xb9\xe2\x86\x42\x5d\xd1\x41\x32\xfd\x83\x25\x99\xd5\x07\x3e\xc6\x85\xc1\xcc\x6e\x73\xf5\x25\xb3\x51\x42\xd8\x27\x56\x41\x22\x75\xdc\x16\xcd\x72\xed\xe5\xa6\x59\x9e\x9f\x46\xd5\x34\xad\xdd\x04\xd8\xa0\xca\xa0\xe6\xe8\xdb\xc2\x57\xee\xcb\xbd\xbf\xec\x10\x68\xe3\xbb\x0f\x13\x75\x32\x00\x3a\x7c\xa8\x12\x59\x54\x07\x87\x43\x67\x85\xfd\x48\x71\x7c\xf1\x39\x8e\x96\x36\x8e\x32\x5c\x03\xaa\xc5\x96\x86\x34\x1f\xee\xe6\x73\xd9\x87\xbd\x0e\x83\x04\x17\xdc\x9d\x82\x9f\x87\x7a\xab\x34\x98\xdb\xa4\xfd\x4f\xda\x6e\x10\xc6\xc3\x49\xd3\x82\xe6\x05\xf6\x1a\x20\xfb\xda\xb1\xda\x69\xdf\xcc\x77\x85\xde\xdd\x10\x5c\x4a\xfe\xcd\x35\x8a\x97\x7f\x82\x7a\x8f\x58\x85\x1f\x16\xe0\x3b\x97\x78\x97\xa4\x53\x6f\x8b\x12\x59\x0a\xa1\xf6\x09\x69\xdc\x45\x2d\x76\x45\xd5\x9b\x65\xd9\x54\xc1\x8d\xe0\xbf\x6f\x50\x83\xe6\x81\x3e\x95\xf2\x4c\x3a\xe5\xb6\x94\x76\x5d\x66\xbe\x51\xe4\x0f\xac\x31\x0d\xa4\x31\x24\xe1\xf2\x21\x9b\xe7\x55\x72\xbf\xcd\x72\x5d\xc0\xc7\x35\xcb\x55\x72\xbd\x2d\xb5\xf9\x17\xf9\x56\xdb\x7c\x7e\x6a\xa8\x82\xcd\xd7\x31\x6f\xc5\x8f\x1c\xf3\x06\xe2\x25\x04\xdb\xb1\x10\x76\x2e\x84\x44\x2c\x40\x52\xdb\x5f\x30\xc8\xee\xad\xde\xac\x1d\x27\x4d\x3c\x55\x99\x09\x35\x94\x17\x14\x04\x90\xec\x60\x31\x54\x20\xb8\x03\xa4\xa9\xc9\x6d\xa9\x10\xc4\x6e\x39\x8d\x71\x93\xe9\xfb\x51\x77\xbf\x33\x4d\xd6\x9b\xb9\xd3\xd9\x05\xec\x52\xf0\x9b\x41\xe1\xe9\xeb\xbd\x74\x5e\xab\x35\xc3\x0d\x8f\xcd\x1f\xb8\xd6\x84\x03\xea\x56\x7d\x25\xf3\x33\xeb\x86\xea\xa4\x99\x24\xfb\x68\xb2\x39\xd2\x1c\x37\xb1\xeb\xc2\xbb\xac\x14\x04\x73\x1b\xa3\x53\xc5\xb0\x00\x3a\xb3\x2d\x85\xf6\x49\x4b\x6d\xde\x46\xbf\x4a\x9f\x01\x86\xec\xac\x5a\x14\x1f\xdf\x36\xb1\xf1\xb9\xaf\x57\xdd\x53\x18\xf4\x35\xa1\x7c\x74\xa1\x4e\xb7\x11\x60\xb2\x88\x6f\xaa\xd2\x31\xf8\xfb\x24\xa6\x51\x1a\x0c\x81\x2a\x09\x5a\xc4\x55\xb6\x8e\x6a\x96\x3c\x52\x35\xf0\x62\x60\x02\xd6\xb2\xa9\xbb\xef\xa9\xfa\xea\x3b\xfd\x00\x91\x9b\x8a\x8f\xe2\x36\xb1\x84\xb5\xb9\xc3\xbd\x69\xd3\x87\x55\x0e\xf6\x53\xff\x4b\xcf\xee\x45\x30\x11\x93\xb9\xde\x22\x80\x50\xc2\x1d\xaf\x8c\x3c\xa2\x3e\xdd\x5f\xd1\x04\xf1\x18\x74\x93\xb7\xd0\x9c\x14\xef\x53\xe0\x62\x76\x7c\xf0\x17\x5f\x47\xa2\xa6\xa1\xdb\x61\x07\xd2\x63\xce\x0b\x7d\x1b\xa1\x5e\xbf\xa1\xf0\xc2\xaf\x15\xbf\x48\xf1\x9d\xaa\x8e\x34\x27\x0a\x4d\x4b\xdf\x04\x02\xe3\xa9\x56\x5f\x43\x77\x5e\x27\xc3\x5c\x72\xef\x06\x2b\x73\x71\x67\x00\x91\x94\xb9\xc1\x96\x26\xee\xc9\xef\xfd\xf9\xa9\x8a\x9b\x67\xd6\xae\x92\x75\xa5\x10\x10\x6a\x44\xb4\xcb\x75\xf1\xd1\xad\x5d\xf0\x84\x1d\xd0\xb0\xa4\xc0\x1f\x77\x2a\x65\x41\x98\xb2\x5f\x25\xb7\xb5\xc3\x64\x30\x22\x45\x04\xda\x23\x51\x54\x00\x38\x1b\xde\x20\xa5\x1a\x97\xe3\x95\x2f\x78\xe7\x47\x7d\x4e\x3a\x5e\xb9\x51\x99\x5d\x64\xdc\xd8\x02\xd8\x6c\x92\x9b\x76\x36\x12\x5e\xb6\x1f\xbc\x35\xce\x04\xb6\x13\x43\x85\xd7\xe9\x47\x7a\xc1\x9a\xaf\x83\x73\xfa\x70\xbd\xd5\xba\xc1\x1a\x21\x07\x34\x3e\x1c\xc3\xb4\x4e\x90\xab\x0c\x14\x1c\x8c\xd4\xeb\xcd\x66\xb9\x4e\x39\x4b\x65\xcc\x80\x01\xac\x1b\xed\x0c\xec\x0a\xba\xc1\xdd\xa9\xbe\xf8\xde\x6c\xc8\x75\xbe\x9f\xfa\xfa\xcf\x1f\xff\xfa\x2f\x0f\xab\xda\x78\x4f\x79\x66\xf6\x34\xda\xc1\x06\xe7\xbd\x82\x35\x04\x72\xc4\x9d\x22\x87\x0d\x62\x87\xd7\x45\x6d\x1e\x04\x33\x26\x49\xfa\x9e\x93\xb5\x55\xab\xb1\x8a\x34\x41\x2d\x70\x75\x43\x2b\x69\x67\x18\x0c\xe6\x92\x3f\xf6\x74\x13\xc1\x7c\x83\xbe\x7a\x33\x24\x08\x6c\x11\x20\x28\xd9\x92\x54\x11\x56\xd8\xa3\xb3\xac\xaf\x4b\xf5\x8e\x9e\xe6\x96\x1f\xa5\xfa\x9b\xc4\x56\x94\xd1\x51\x3d\x6e\xba\x1e\xc6\x77\xdc\x22\xb9\x1c\x5a\x23\x87\x80\xcd\xd4\x14\x7c\x5d\x6e\xe7\x98\xa4\x59\xf4\xb2\x69\xc5\x22\x5c\x52\xa9\x57\x2d\x12\x24\xca\xb0\x58\x3e\xec\xdf\xb7\x6d\xf7\xf9\x92\xaf\xa5\x13\xaa\x0b\x94\x6d\x52\x65\x18\x0a\x16\x9c\x26\x2b\x57\x9f\xb3\xe7\x22\x8d\xc9\xb2\x31\x0a\x07\x9b\x78\x92\xa9\x0b\x6a\x77\x42\xae\xf1\xc5\x7c\xa6\x13\x0a\x0d\x68\xcc\xc6\x68\x1d\x2a\xca\xec\x2a\xa3\x6e\x06\x7b\xd6\x5f\x49\x6c\x3c\xa2\x6d\x78\xb3\x98\xe7\x25\x89\xfa\x65\x3b\xf6\x0a\x2e\xfd\xe0\x88\x86\x99\xd6\x75\x6e\x58\x64\xd5\xc7\x6d\x19\xb2\x29\x69\x99\xa1\xdb\x54\xaf\x42\x06\x20\x86\x3d\x74\x1b\xa8\xfc\x95\x84\xe2\xfd\x96\x53\xe9\xed\x26\x97\xb5\xe4\x99\xba\xda\x16\x48\x71\xc0\x6c\xfe\x74\xf4\x05\x87\x7f\xf6\xb7\xf5\xf3\x03\x8a\xbf\x7d\x7e\x2f\x6b\x2c\x92\x4a\x1e\x6b\x71\x43\xb3\xe6\x75\xe1\x07\xbb\x2d\x35\xdb\x21\x60\xd8\xf3\x26\x58\x52\x8c\xa2\xcc\xa8\xd7\x63\xa9\xca\xfc\x54\x57\xdf\x58\x0b\x66\x12\x4a\x69\x88\x5f\x5e\x6c\xd7\xb3\x12\x94\x55\x80\x64\xd5\x14\xdb\x31\x62\x27\xaa\xff\x0e\x4d\x4d\x54\xed\x9c\xc1\x3f\x7c\x81\xc8\xc0\xa1\xc4\x26\x3e\x74\x20\x8f\x7f\x96\x66\xed\xf5\x54\x69\x71\x8b\xce\x0d\x50\xfa\x65\x8c\x9a\xf8\x90\xcc\x18\xa0\x35\x44\xf8\x27\xc9\x0e\x94\x51\xd5\xcb\xca\x4a\xcd\x1e\x52\xc3\x35\xac\xd9\x16\x9e\x3f\x42\x27\x54\x3d\xc3\xfb\x8e\x47\x60\x0c\x82\x95\xab\xa8\x6d\x0d\xfa\x69\xaa\x2a\x09\x03\x3f\x8d\xd5\xcb\xee\x25\xf4\x84\xc1\x08\xc1\x63\x8e\x1b\x38\x3f\xa8\x0a\x9d\xa9\xac\x6e\x19\x94\xcd\xff\x0d\x21\xdd\x24\x19\xe4\xc4\x7a\xd4\x53\x15\xdf\x0a\xb0\x25\xde\x71\x8e\xee\x57\xf3\x03\x45\xe4\xc4\x57\x68\x12\x75\x82\x18\x9b\xe5\x48\x80\x07\x7a\xf7\x94\x7c\x13\x43\xc2\x38\x09\x42\xaa\xc9\xfb\xa6\x27\xdf\x71\x7d\x6f\xfd\x54\xdd\x91\xf2\x5e\x59\x21\x0b\xe4\xbb\xa9\x54\xb7\x24\x94\x74\xdb\x8c\x26\xfa\x56\x63\x7c\x99\x83\x6f\xb7\xf0\x65\xdb\x2e\x3d\x79\x17\x78\x0f\xc8\x48\x0d\x41\xad\x77\x47\xec\x5f\x7e\xfe\xe9\x6f\x5f\x7e\xfa\xcf\x87\xc1\xfa\xe5\x9d\xc1\x5a\xb2\xa6\xa1\x73\x2d\xb3\xa4\xc5\x32\x80\xbe\xbe\x4c\x0c\x74\xa6\xaf\x84\x13\x90\x6f\xb7\x6e\x00\x05\x1a\xfc\xbb\x7b\x06\x5c\x94\xb0\xd2\xa7\x45\x6e\xe2\x23\xdd\x6d\x25\xbb\xf9\x61\x52\x7a\x5a\x66\x5b\x0d\x11\x80\x72\xd3\xd5\x8f\x5a\x05\xa8\xda\xd5\xe0\x42\x8c\xf2\xfc\xe4\xb6\x84\x14\x19\xeb\xcb\x0b\xe3\x66\xfc\x4d\x9a\x5f\x98\xc6\x60\xc6\x8d\x1a\x36\xec\x1e\x17\x5b\x0c\x52\x18\xc5\x92\x0e\x50\x4b\xd8\x64\x63\x2f\xbe\xe4\x09\x99\xcd\x5a\x7e\x1f\xd7\xf8\xef\xfb\xe7\xef\xff\xf5\x87\xff\xfc\xfe\xfa\xf9\xaf\xff\xf2\xe8\x15\xbc\xe4\x12\x9a\xfe\x74\x40\xef\x82\x51\xe8\xba\x48\xcb\x08\x08\x5e\xa5\xd8\x08\x46\x35\xff\x53\x19\xd9\x4d\xfb\x0e\xee\x28\xdf\xda\x6b\x5f\x3b\x44\x12\x1b\x01\xe6\xee\x99\x3f\x3f\x95\xea\xb6\x87\xae\xad\x27\x29\x6d\xed\x8a\x52\xb5\xb9\xc2\xe3\x10\xdf\x1e\x9b\x8f\x04\xa9\x83\xfa\x2d\x6a\x20\x02\x5b\x2a\xa0\xf4\x99\xe5\xa4\x6e\xa0\x97\x01\x13\x6b\x2d\xee\xb4\xb7\x22\x21\x27\x31\xdb\xba\xf8\x9f\x5a\x91\xe7\x27\xb3\x9c\x5a\xbd\x49\x9d\x84\x47\xfa\x87\x65\xe4\xfc\x41\xed\xda\xbf\xef\x9f\xff\xe5\xe7\xcf\xff\xf6\xd0\x2f\x7f\x79\x83\x81\xfd\x9b\xa8\xdf\x0f\xaa\xf5\x93\x7a\x3d\x0e\xe4\x79\xcf\x4f\x22\x4d\x4f\x46\x77\x4c\x46\x21\xf7\x09\x98\x54\x28\x31\x8d\x4f\xf8\xe0\x5f\xfa\x77\xc7\xcf\xe3\x8b\xf3\xd0\xe3\x6c\x94\x42\x20\xb3\x93\x8f\x40\xb8\x2f\x2f\x0d\xc8\x67\xd2\x9b\x34\x64\xfd\xfc\xcf\xcd\x1b\xf0\x7f\xf9\xa7\x38\x80\xc7\x3f\x93\xe7\x55\x7b\xbe\xf8\xba\x18\x31\x57\xc2\xc3\x25\x57\xe0\x8b\x97\x79\xd4\xec\xb3\x86\x38\xef\x4b\x90\xc0\x0f\x48\xb4\x87\x6e\xfd\x70\x5b\x95\x08\xe6\x05\x45\x5a\x72\xd4\xe4\xdd\x65\xca\x49\xd2\x6b\x10\xbd\x07\x1f\x31\x8d\xd9\xa8\x0e\x09\x41\xff\xfb\xc7\xf3\xdb\xe3\xf0\xe3\xfc\x7b\x9b\xd8\xdf\x2b\x23\x14\x63\xec\xbc\x89\x8d\xfe\x4e\xba\xdf\xe6\x7e\xdc\xfa\xf1\x2c\xc7\xc3\x1d\x8f\x7b\xe1\x27\x40\xc0\x8e\xef\x70\xac\xe1\x54\xc9\x3b\xb9\xee\xfd\x91\x2b\xe2\xc7\x63\xa4\x3a\xf6\x3a\xd2\x18\x6e\xcb\x81\xa9\xf0\x90\x4d\x87\x8e\xaa\xed\x96\xe2\x21\xf9\x14\x78\x32\x3e\xd8\xf9\xe1\xf8\x2a\x0e\x5d\xe2\xcc\xe5\x6c\x0b\x61\xa5\xca\x20\xca\x18\xfb\x82\xcb\x22\x0c\x03\x7b\x47\xce\xf5\x3f\x6e\x73\x89\xbb\xbe\xbf\xbe\xf3\xc1\x7e\x45\x00\x84\x0d\xd5\x17\x99\x7e\xa1\xfd\xa9\x19\x5b\x9b\xaf\x5d\xaa\xbe\x2b\x2a\x15\xd1\xf9\x6a\x71\x24\xe9\x1c\xdc\x59\xde\x70\xb8\x20\x5e\xec\xb3\xb9\xec\x38\xd5\xdc\x44\xac\x89\x67\x98\xf4\x1d\xff\xa2\x6a\xce\x0f\xe7\x11\x7b\x9c\xb2\xf9\xc3\x24\x34\xb7\xb3\xf1\x8d\xf7\xe0\x66\x05\x2f\xbe\x1f\xf7\xb3\x55\x0c\x31\xde\xc6\xfb\xd0\xee\xf5\xc7\xef\xff\xf5\x11\x19\xf2\xc3\x7d\xed\x2b\x41\x6d\xfc\xae\x71\xf5\xdf\x6b\xe8\x3d\x3f\xb5\x79\xd0\xa7\x78\xe7\x85\x02\x02\x88\x1d\x50\x1f\x57\x91\x98\xde\x97\x43\x12\xe1\x95\x34\x42\x68\x27\x34\xdd\x79\x9e\xaf\x0f\xe7\xc2\x73\x6f\xee\xf2\x77\xb7\xf7\xae\xde\xcd\xa3\xbc\x5f\xcf\x2f\x69\xa4\xa7\x94\x55\xb3\x3b\x3a\xb9\x5d\x97\x92\xd5\xd7\x45\xb3\x64\xa3\x5c\x67\x59\x97\x52\x67\x6a\x53\xf8\x61\x69\x53\xfc\xaf\x92\x4b\x92\x96\xaf\x55\xf5\x77\x16\x71\xfa\x6f\xe4\xad\xfa\xdf\xd2\xe5\xa1\x6f\xde\x53\x4b\x18\x52\x53\xeb\x1d\x96\xad\x51\xa5\x1f\xa6\xee\xbe\x04\x3b\x39\xc3\x40\x98\x2b\x16\x95\xf3\x19\xaa\x30\x3b\x28\xb1\x37\xf7\x52\x46\xea\x2c\x53\xde\x7d\xc7\x31\x3e\x1d\x4e\xee\x28\xa1\xd1\x96\xda\x24\xc8\x0c\xd1\x23\x11\x4b\x02\x16\x91\xd9\x93\xd8\x86\x4b\xc3\xcc\x85\x61\xba\x0c\x66\xbe\x08\x36\x70\x1b\x7f\x2b\x50\xe1\xe9\x4c\xf7\xd5\xba\x4b\xab\x91\x75\x9d\x92\x7c\xfb\xd6\x34\xca\x5e\x73\x12\x08\x26\x48\xf3\xbb\x41\xa6\x81\xd5\xb0\xb5\x05\xe3\x41\x1d\x49\xf5\xe2\x1b\x0a\xcc\xf8\x0d\x24\x93\x90\xac\x6a\xa0\xf7\x40\x98\xa9\x93\x32\x48\x74\xa7\xdd\xee\x3f\x11\x4b\xdf\x8c\xd5\x15\xcc\xd8\x7c\xaa\x7b\xb7\xa0\xac\x1f\x21\xd7\xe8\x1b\x84\xb2\x38\x1c\x34\x42\xb2\x35\x4b\x23\x51\x3e\x47\x29\xfd\x0a\x94\x47\xaf\xa9\x34\x4a\x97\xa8\x26\xcd\x54\x99\xd5\xc3\xc4\x8e\xad\x09\x72\x9c\xe5\xb0\xfc\x7b\xe6\x6e\x57\x41\xa6\x3f\xfc\x26\x50\xf2\x35\xef\x1b\x9e\x66\xe5\x0d\x6b\x3e\xb7\x0f\xe8\xf9\xa7\x65\xf0\x0f\x97\x58\xa0\x7d\xb3\xee\xc6\x44\xbc\x3b\xd7\x2d\xdc\x87\xe4\x4e\x73\xed\x49\xa7\xae\xd0\xeb\x94\x91\xe6\xa6\x2c\x98\x1f\xa9\x66\xfa\x1a\x65\xec\x35\x83\x2c\xa2\x20\x98\xbe\x34\xb8\xd4\x6a\x67\xc2\x14\x21\x9f\x23\x46\x21\x8d\x44\xd4\x2c\x45\x84\x28\x6e\x43\xc4\x87\x70\x67\xbe\xa3\xa0\x69\x58\x8a\x3f\x27\x21\x45\xe2\xb7\xa4\x8c\x06\x2c\x4d\x32\xb7\x7a\x5f\x50\x11\xd9\x9f\x25\x09\x68\x27\x6b\x68\xbb\x9e\x7c\x10\x60\x54\xdb\x97\x99\xac\xec\x4b\x43\x3e\xf3\x42\x77\xc4\xea\xb6\x4c\x66\x06\xe1\xb8\x20\xa9\xeb\x9e\x37\x3b\x10\x9a\xd7\xa5\xb3\x22\x39\x89\x0f\x71\xa4\x45\xcf\x94\x6c\xe8\xde\x32\x89\x6a\x79\x07\xec\x8f\x95\x5c\xe8\x6e\x51\x7f\xb5\xc9\xc4\x52\x2b\x9b\xf5\x99\xac\xa7\xe6\x43\xa6\xe6\x8d\xdc\x0b\x2d\xa1\xda\x5b\x54\x91\x84\xd4\x9c\xe8\xc1\x55\xe1\x2d\x2e\xf5\x7d\xa3\xfb\xcb\x8f\xfb\x97\x5f\xbe\xff\xd7\x1f\xde\x26\x60\xed\x27\x26\x71\x94\x91\x1a\x12\x52\x3e\xac\x8b\xa4\xd6\xf6\xa5\x77\x30\x01\x91\xb8\xe1\x48\x28\xe1\x01\x8c\x83\xec\x13\x88\x34\xdd\xb7\x1c\x92\xca\x6e\x2d\x75\xf5\x59\x3c\x52\x1b\x8a\x95\xa2\x31\x98\x2c\x8a\x75\xc2\xd7\x6f\x7c\x98\x09\x6f\xae\x01\x78\xb4\x90\xf4\xd8\x1f\x67\x1a\x07\x7e\x2b\x5b\x47\xac\x48\x4a\x28\x3c\xec\x23\xf8\x23\x31\x6b\xa1\x2b\xd5\x8d\x89\x2d\xc4\x65\xc9\x97\x51\x76\x44\x06\xa5\xed\x0b\x19\x34\x7c\x2d\x61\x28\xd5\xb7\xea\x92\x32\x72\x65\x0d\x6b\x58\xbc\x68\x2c\x48\x2d\xc6\x11\xd8\x43\x7c\xd1\x99\xc9\xfc\xcd\xec\x25\x13\xd0\x52\x50\x67\xb7\xc9\x04\xb7\x1b\x68\xb2\x37\x24\x78\x11\xf8\x1e\xc4\xa8\xf8\x85\x91\xd1\xa6\xd4\x90\x14\x4d\x86\x5a\xbb\x9e\xce\xf1\x66\xe0\xdc\x20\x7b\x0a\xa5\x2e\xda\x11\x46\xb5\x86\x47\x6d\xfb\x62\xad\xb9\x95\xbf\x52\xaf\x9d\x0c\x57\xca\x98\x6f\x2d\xa9\xb8\xfd\x2a\x19\x24\x0a\x43\x12\xc5\x7f\xf2\xd8\xa0\x04\x5c\x9a\x7b\x43\xa9\xda\x66\x05\x49\xfc\x99\xaa\x1c\x94\x03\xdc\x59\x90\xb0\x93\xe7\x8b\x9b\xea\xe0\x34\xce\xdb\x44\x9a\x76\xa4\x5e\xf1\xc2\x2b\x57\x4f\xaa\xd8\x4a\x23\xd2\x6f\xf4\x64\x6d\x5b\xc4\x0e\xb1\x36\xbf\x9f\xd2\x18\x0b\x06\x78\x88\xdb\x50\x25\x05\x39\x98\x32\x26\xc7\xe8\x46\x32\x5c\x50\xb6\xda\x40\xc0\x44\xba\xec\x0c\xad\xf5\x0d\xe4\x86\x98\xc4\x3b\xb2\x0f\xc0\xd5\xb8\x27\x00\xb7\x75\x93\x5c\x91\x01\xd6\x51\xa8\xb5\xa6\xbe\x1b\xeb\x48\xa5\xe4\xd4\x6c\x53\xb2\xfc\x92\x6d\xc1\xfd\x7f\x9d\x84\xf6\x94\xbc\x15\x08\xec\xa5\x91\x53\xe9\xf6\xa7\xe4\x27\xdc\x7f\xf9\xb7\x2f\xeb\x83\xd1\xd8\xdf\xa5\x4e\x2b\x25\x69\xee\xeb\x40\x86\x83\xe9\x34\x2a\xc0\x61\x39\x6d\x3e\xfe\x40\x28\xee\xd6\x75\xf0\xa6\x41\xc2\x40\xfd\x2b\x26\x74\xcb\xbe\x4c\xb7\x34\x7c\x66\xc0\xe6\xd0\x1c\xe1\x23\x77\xcb\xa1\xb4\x28\x6d\xdc\x54\xea\xd6\xa3\xfc\xda\x6d\xa5\x4f\x75\x9f\x92\x66\x76\xf7\x43\x32\xa0\x55\x13\xe4\x35\x03\xd3\x27\x21\x0a\x83\x92\xd5\x60\x14\xbb\x6a\x29\xb7\xa5\x68\xb9\x9a\x59\x54\x05\x9b\x95\xdb\x52\x05\x2c\x08\xee\x4e\x73\x07\x0f\xfa\xc2\x8a\x15\xe8\x4e\x3d\x13\x0b\x43\xb9\x6c\x7d\x24\x48\xbc\x27\x9d\xdf\xd0\xa3\x6f\xaf\x88\xe5\x4e\xf8\xe8\xcb\x59\x05\x48\x53\x06\x79\x67\x09\x4d\xc8\xc8\x1d\x6c\x5c\xd8\x68\xc0\x52\xb0\x01\x84\x3a\x72\x87\xe5\xb0\x94\x99\xb8\x1a\x9b\xe3\xaa\xb5\xdf\x64\x16\x6a\xbe\x9b\xb6\xeb\x22\x03\xac\x1f\x44\xb6\x4a\xc6\x2e\x07\xae\x19\x18\x09\xa3\x83\xae\x67\x99\x15\x6b\x31\x7e\x8a\x04\x47\xd9\x6d\x91\x56\xaf\x62\xf9\xb6\x14\xf6\x94\x6f\xc5\xb1\x48\xc2\xa3\x86\x84\x3c\x12\x41\x9c\xf6\x81\x0e\xf0\x55\xbb\xcd\x24\x29\xc4\xc0\xea\x0e\x4b\xb2\x66\x5f\x10\xfe\x74\xb1\xe4\xf5\xa7\xbf\xfe\xcb\x77\x9f\x7f\xfe\xf9\xa7\xff\x78\x93\xf4\xbe\x3f\x80\xe0\x7a\x1b\xa7\x03\x00\xd2\xf7\x43\xd0\xb1\x32\x58\x6f\xf5\xe4\xb1\x3f\x75\x7b\xf8\x6e\x22\x2f\xe0\xa6\xa9\x1f\x56\xc9\x66\x0f\x0b\x15\x2e\x65\x7d\xc1\x48\x4f\x0e\x0d\x2d\xe3\x1b\x31\xc7\x5a\x86\x9f\xb2\x21\xf5\x83\xe5\x71\x7e\xeb\x63\x3f\x4a\x1f\xf4\xf6\xfe\x43\x4b\x2e\xd4\xc3\x04\xf1\xec\x0c\x1c\xaa\x16\xde\xc7\x57\x98\x0a\xe6\x9b\xa5\x4e\x7e\xdf\xa4\x09\xb9\xab\x22\x4c\xf7\xac\xeb\xea\x1d\x79\x28\xba\x9f\xda\x44\x87\x48\xbb\xe4\xd5\x7b\x10\x1d\x8d\x44\x07\x22\xca\xf6\xcd\xef\xfa\x2d\x95\xf2\xde\xdf\x55\x6e\x3f\x98\x33\xbe\x5a\x19\xe2\x0f\x43\xbc\x57\x18\x15\xec\x1e\xe8\x6d\x56\xaa\xe3\x33\x4b\x8c\x07\x5a\xf0\x50\x7c\xbd\x60\xde\x59\x79\x00\xd0\x62\xe2\x9f\x52\x03\x43\x0f\x45\x00\x74\xa2\xe9\x2b\x7a\xf8\x37\x55\x95\xbc\x78\xea\x37\x25\xc1\xfb\x78\xf7\xb1\xdd\x18\x2b\x27\xcf\xce\x09\xab\x1f\xf0\xbf\x0a\xf8\xa8\x48\x17\x46\x17\x4e\x40\x40\x85\x61\x7c\x53\x10\x7f\xe8\xb7\x56\xfd\xa0\xff\xd8\x7d\x2a\x9c\x09\x3b\x30\xac\x6b\x5c\x8d\x40\xa3\xe8\xbe\x0f\x9e\xfa\xf3\xdf\xfe\xf6\x58\xee\xdf\xe7\x7b\x6a\x2c\x36\xdd\xb6\x12\xc2\xe5\x42\x88\xc7\x97\x6a\xbc\x33\x0e\xf3\x16\xb9\x57\x99\x0d\xc8\x48\xf4\x0a\x08\x97\xdc\x49\x62\x86\x53\xf0\x6b\xc0\x10\x81\xe6\xb1\x0d\xb9\x6f\xf0\x74\xf8\x31\x20\xa7\x27\x12\xcd\xb2\x24\x05\x35\x4a\xe9\x49\x61\xc9\x95\x9e\x2a\x00\x12\x8a\x64\xb7\x25\xeb\x05\xac\x77\xe2\xbb\xf2\x28\xfe\x33\xf0\x0d\xd8\x84\xbd\x57\x10\x94\x07\xad\x9c\xff\x5e\x2a\x58\xf0\x2c\x59\x01\xaf\xa7\x1b\x72\x9d\xbf\x71\x9d\x14\xa4\xec\x2f\x1b\x52\x87\x6e\x29\x86\x5d\xb4\xf4\x49\x18\x0d\xc8\xd8\x91\xa7\x6f\x40\xd2\x33\xc1\xac\x99\x74\x91\x5a\x00\x97\x50\xb5\x5d\x2a\x02\x6b\xe0\x04\x27\x1d\x26\x46\x7f\x3b\x22\xa4\x6e\xf0\xb9\xdb\xd5\x2b\x41\x27\x62\x63\x03\x40\xbc\xd2\xe6\x74\x87\x80\xfa\x4b\xac\x28\x65\x8e\xca\x9f\x75\x26\xdf\x8e\x6b\xdf\x3a\x7d\x79\xad\xa0\x13\xdf\xc8\x4c\xca\x6d\x6a\x8f\x9f\xc0\xc9\xa4\x88\x28\xec\xf1\xf3\xdd\xe1\xf1\x1f\x3f\xfe\xf5\x2f\x3f\xfd\xc7\x43\xcd\x69\xff\xfc\x0e\xe6\xb9\x0d\x4d\xd5\xf7\xcb\x56\x65\x5d\xfc\xb7\x59\x6e\xb5\xf6\x6b\x1b\xfa\x8c\x6f\x45\x3b\xe0\x80\xf3\xea\x5f\xdf\x2a\xea\x2f\x5a\x2b\x3c\xad\x8f\x46\xd1\x29\xd1\x7a\x6b\x4d\xae\x33\xf7\xf8\xde\x87\xe1\x6d\xe9\xbe\xb7\xcf\xdc\x6f\xad\xcd\x0f\x74\x98\xff\xf2\xf3\x4f\x3f\x3e\x90\x40\xf6\xf7\x24\xb4\xcb\x84\xf0\x96\x05\x07\x4d\x0f\xaa\xbe\x9d\x1c\xad\xa4\x64\xbc\x7f\xbc\x7f\x0f\x8f\x99\x9f\x08\x31\xc3\x39\xf1\xe1\xf8\xee\xf9\x69\xba\x63\xfc\xa2\xf9\xa3\xf1\xb3\xe9\xb3\xe1\xb3\xd9\x23\x8e\x11\x17\x3e\x9a\x3e\x3f\xde\x8f\x00\x6e\x0e\x10\x08\xe0\x06\xba\x0f\xdb\xbc\x63\x5c\xe9\x6d\x29\x84\xe2\xc1\xcf\x9c\x81\x40\x84\x9f\xe9\x47\x5d\x10\x7b\xb0\x0c\xc6\xde\x6e\x37\x1e\x5c\x50\x56\xdf\x75\xc7\x77\x88\xe3\x58\x1a\xd5\xdf\x6d\x23\xb9\x45\x30\xc8\xf6\x41\xd3\xc9\xf4\xba\xf4\xea\x4b\x70\x3f\xae\x85\xcb\x1b\x29\xeb\xbd\xfd\x57\x97\x51\xed\x57\x1f\xec\xef\x9c\x71\x80\x20\xba\xde\xcf\x5b\x17\x49\x38\xb5\x97\x03\x92\xd2\x07\x1c\x3e\xd3\xd4\xc7\xad\xb5\x76\x9d\xee\xc2\x4e\xf7\x6d\xb5\xd6\x8d\x20\xa9\x0a\x2a\xb1\x50\x8d\x6e\xc0\x1a\x55\xa2\xf8\x14\x75\x32\xd2\x53\x2b\x09\x7f\xdc\xc5\x7d\x36\xea\x2b\x77\x37\xe2\x80\x6b\x20\xef\x2c\xc8\xd6\x08\xeb\x6c\x6b\x07\x52\x5c\xb7\x59\xbd\xbb\x34\x4b\x2a\xba\x23\xd8\x59\xd4\xbf\xf4\xef\x80\x5c\xd0\xec\x3b\x15\x10\xbf\x58\x24\xa2\x16\xb4\xb7\xfe\xea\xdd\x7c\xfc\xf4\xc7\xcb\x31\xbe\x1c\xb7\xf1\x35\x31\x2a\x67\x89\x90\x36\x45\x10\x33\x33\x8e\xf0\xfe\xb6\xf7\xe3\x5f\x7f\x79\x48\xb8\xf6\x33\x4d\xd8\x9a\xb9\xa1\x5a\x99\xcd\x91\x23\x18\x46\x4b\x7c\x44\xb2\x1f\xf6\x34\x9d\xcb\x0d\x2c\x51\x32\x93\xd4\xab\xe4\xe7\xa7\xee\xcb\x91\x08\x79\xa3\x0f\xaa\xe3\x76\xb7\xdd\x59\x6c\x22\x82\x4d\x41\x37\x56\x6c\xf8\x8e\xfd\xfc\x64\x73\xa6\xe6\xa6\x1f\xe0\xd5\x0d\xf9\xa7\x88\x40\x1e\x89\x6c\x40\xf4\x23\xa9\x64\x61\x49\xc6\x6d\x2a\x0a\x0e\x08\x0d\xe8\xf4\xc5\xc5\x57\x45\x4b\x9a\xfa\xae\xa9\x81\x20\xac\x44\x2a\xa6\xdc\x6c\xf7\x31\xc5\x44\x8c\xc2\x67\xaf\x25\x19\x87\xc5\xc0\xd0\x29\xde\xa4\x20\x4d\xcf\x49\x0a\x3f\xce\x18\x3d\xcc\x27\x77\x7c\xa4\xc5\xc1\xcd\x00\x59\xa6\x40\xfe\x93\x20\xf5\x88\x4f\x10\x84\x3c\xa8\x34\x96\x31\x11\x53\x47\x5f\x20\xdb\xd3\xd3\x32\x6c\x1b\xa0\x0d\x54\xc0\xf6\xb5\x47\x46\xad\x30\xdd\x45\x90\xb8\xff\x9e\xe8\x11\x31\x07\x34\x42\x9a\x1d\xfd\x2c\x19\x64\xbf\xd8\xa7\x81\x35\x98\x51\xec\x50\x58\x3b\x84\x9b\x21\x95\x94\x25\x09\xe6\x83\xce\xb2\xdd\x46\x9c\x2d\x43\xe7\x28\x90\x68\x11\x8b\x33\xef\x2a\x38\xfd\xfe\x6c\x92\x5a\xc2\x74\x02\x01\xd2\x3c\xd5\x48\x30\x64\x6a\x42\xe9\xe2\x27\x0a\x13\x82\xe9\x55\xc0\xa2\x2a\xa1\x22\xba\x8f\x54\x65\xb7\x96\xb4\x43\xea\x8f\xb8\xfe\xbc\x17\x24\xf1\xf8\x32\x09\x5a\x67\x50\x27\x93\x98\x41\x2c\x31\x16\xd1\x6e\xee\x76\x57\x68\xc6\xa3\x5c\x03\xb1\x43\x49\x07\x8d\x38\xc2\x89\x58\x4d\x3b\xfb\x1c\x24\xb8\xcb\xc0\x9e\x4b\xfe\x98\x1a\xc3\xfa\x12\xa4\xa0\x24\xd8\xa6\xa7\x69\xc1\x08\x81\x9e\x82\x5b\x8d\x37\xe2\x7e\xf7\x52\xaa\x5b\x0a\x58\xa8\xe9\x21\xc7\x72\x1c\xd8\x8f\xca\x42\x2c\x5c\x20\x48\x66\xc1\xae\x8a\x38\xa5\x9c\x83\xd7\x4d\x35\x78\x36\x52\x36\x30\xd9\xf4\x34\x22\x0f\x4b\x64\x47\x39\x58\x41\xcd\xd8\x20\x34\x5a\xac\xbb\xc7\x4f\x9e\xda\x1c\xe8\x7c\x52\x3e\x9a\xbf\x63\xc6\xc0\xb7\x13\xe2\x0f\xfa\xb1\xc9\xba\x48\x4d\xb1\xa7\xe8\xc1\x5e\x7f\xcc\xa9\xed\xce\x54\x5e\x0f\x5a\x59\xa6\x4f\xc1\x7f\x34\x48\x04\x8e\xe4\x47\x63\x59\x5c\x50\x22\xef\x78\xb3\x8b\x0f\xeb\xd2\x51\x85\x92\x81\x5f\xd7\x24\x6e\x7e\xfb\xbd\x1e\x7d\xca\xde\xb5\xdd\x2d\x57\x7f\x25\xd3\x6d\x5b\xcd\x69\x6c\x7e\x9b\x0c\x41\x30\xd9\xc0\x70\x3f\x3b\x73\x46\x16\x74\x69\x8c\xb5\x87\xc8\xec\x59\x3d\xf8\x29\xb0\xf9\x3e\x56\xc0\x84\x6b\x08\x9c\x03\xab\x3f\x13\xc2\x2f\x49\xe9\x87\xec\x80\x23\x4d\xc0\xe6\xdc\xd0\x6e\xe0\xc7\x86\x5c\x55\xb2\xe6\xf7\xea\xef\x82\x5c\xe4\xd2\x39\xe6\xa4\x93\xdf\x4b\x94\xc5\x6e\x3e\xcf\xc7\xdd\xa4\x02\x30\x90\xf0\x9f\x82\xf4\xe8\x41\x88\x3f\x82\x04\x7f\xc6\xef\x42\x32\xfc\x19\x08\x28\x02\x76\xbd\x6b\x1b\xfa\xb9\x94\x7d\x41\xc5\x27\xb8\x80\x51\xba\x03\x7f\x0f\xc1\x24\x4b\x9d\xe8\x77\x52\xc9\x25\x7f\xbd\xb0\xf1\x30\xc6\x98\x17\xab\x11\x1f\x6c\x27\x51\x3c\x62\x4a\x3b\x43\xb7\x23\x8c\x86\x66\x17\x46\xaa\x5a\x22\x49\xf3\x82\xe1\xcc\x57\x5d\x84\x94\xee\x23\x71\x14\xf9\x92\xc1\x00\x38\x87\x0f\x16\xa8\x09\xd1\x2f\xe3\xbd\x58\x4b\xd3\xe7\x41\xd2\x91\x4a\xaa\x6d\x2b\x8c\x3f\x82\xb4\x3a\xba\x86\x6a\x0f\xc4\x5f\x62\x91\x6e\x6d\xab\xa7\x02\x91\x8e\x9d\xeb\x1e\x52\xf9\xf0\x60\xcb\x21\x75\x6c\x51\x03\x26\xe4\x7a\x63\xc0\xc6\x06\x13\x31\xe8\x26\x0e\x55\xdb\x18\x1c\xf5\x7b\x2b\x44\x97\xb9\xf1\xbc\xf7\x88\x9f\x17\x64\x43\x7a\xa2\xfe\x73\x1a\xa1\x60\x20\x8d\xaf\xc3\x87\x9a\xa6\xb6\xf9\xf6\x4e\x02\xd9\x1d\xf7\xc2\x33\x17\x10\x6c\x21\x72\x8c\x3a\x2b\xdc\x48\x4f\xa3\x6f\x6a\xc9\x86\x3b\x0e\xee\x5e\x28\xf0\x6a\x28\xeb\xc1\xbb\x89\x11\xb6\xb8\x4b\x1f\x15\xd5\x2d\x16\x00\x8d\x49\xb6\x21\x04\x0e\xd2\xe8\xde\x59\x3e\x39\xf3\x46\xc0\x6c\x43\xbd\xc7\x41\x48\x33\xbb\x7b\x7f\x78\x16\x01\x58\x0b\xa0\x2a\xdf\xd0\x3a\x09\xe1\x6a\xc4\xf4\xef\x75\x94\x28\x80\x6f\xc0\x47\x57\xbd\xf8\xa5\x3a\x1e\x09\x96\x04\x37\x08\x64\x5e\x38\x33\xfa\xa6\x11\x1e\x6e\xbe\x28\xe5\xd4\x59\xf3\x12\x7c\xd2\x78\x3f\x6e\x5e\x58\x22\x46\xa7\xa6\x59\x7d\x08\xfb\x57\xed\xb4\x82\xdd\x40\xda\xc9\x82\x5d\x69\x18\x04\xa7\xac\x1b\x88\xa0\xb7\x3b\xf6\xff\x92\x0a\xe6\x8b\x84\x0e\xb5\xaf\xab\x3d\x21\xe1\x74\x06\xf7\x37\x0e\x24\x84\x32\x77\x6c\xa8\xf9\xf9\x69\x34\xa0\xe1\x11\xf2\x81\xd1\x11\x45\xad\xdc\xec\x91\x61\xda\x16\xd8\x84\x7e\xd3\xbb\x6f\x95\x97\xdd\x47\xcd\x46\x49\x43\x94\x1b\x62\xe2\x5a\x1a\x49\xbd\xb7\x93\xfa\x43\x4d\x9f\x6b\x25\xa3\x30\x8f\x1d\x85\xd6\x3a\x87\x48\xdb\x8e\xe2\x2e\x37\x58\x2a\x03\x3b\x61\xd0\x2c\x5c\xf8\xb1\x16\x2e\x2f\xd7\x53\x8c\xfd\x76\xd8\x4b\x2d\x2d\x73\x37\x2c\x70\x5b\xe1\xe5\xb3\xdb\xfe\x08\xdc\xce\x4d\x92\xa4\x99\xc4\x7f\xd1\x7d\xa6\x1e\x45\xe9\x8d\xf3\x42\x62\xea\x97\x4f\xac\x87\xd5\xb2\xe3\x1e\x0f\x99\x8e\x1a\x89\x4f\xee\x7a\x58\x14\x2f\xd4\xdf\x90\xa8\x5b\xc4\x9f\xdb\x01\x77\x94\x7a\x7a\x2d\x16\xb9\x85\xc9\x10\x26\x33\x7f\x2c\x4e\x6a\x25\xc4\xfe\x1a\x32\x0b\xa1\x61\x31\x38\x66\x81\xfb\x3d\xb6\x4c\xb5\x73\xf3\xd3\x7a\x24\xeb\x68\x0f\xf4\x74\xac\xd0\xe8\xa2\x9c\x28\xda\xc8\x58\xea\x22\x91\x06\xc6\x6c\xe3\x32\xee\xcb\x36\x33\xcb\xfb\x91\x72\xca\x47\x2e\x52\xc7\xc9\x24\xcf\xf4\x2e\x82\x61\x8c\xb9\x83\x4e\xbf\xb4\x54\x7c\x89\x93\x99\x00\x2e\x23\xb1\x76\xcd\x69\x06\x9b\x22\xcd\x33\x3b\x77\x57\x5f\xfb\x67\x98\x64\x3e\xc7\x48\x43\xef\x53\xac\x20\x96\x0e\x81\x13\x64\xd2\xdc\x66\x23\x7b\xbd\xcf\x22\xe2\x91\x60\x0d\x02\x1b\x49\xb9\x91\xe2\x93\x4f\x74\x33\x18\x8e\xee\x41\xe1\x7d\x55\x41\x52\x16\x56\x3d\xa2\xdb\x8d\x92\xd4\x1a\x34\x0e\x98\x6a\x05\xf6\xd2\x11\x07\x35\x52\xf1\x7b\x2f\x6d\x58\x5b\x90\x5b\x8e\x9d\x67\xec\xb4\x85\xfb\x4e\x6c\xfd\x61\xca\x80\xe4\xfc\x12\xeb\xe3\x80\x9a\x0b\xd5\x8e\xb5\x6d\xdc\x41\x83\x33\x00\x64\x90\xcc\x24\x45\xc9\xf7\xd2\x50\xb4\xa0\x1a\xcc\x9b\x6a\xe4\xbb\x5c\x8a\x3b\x16\x2d\x81\x3b\xd3\x17\x6b\x83\x48\x41\x3f\x39\x2d\x65\xa2\x7c\x56\x33\xfa\x64\x43\x55\x84\x4c\xac\xf3\x33\xa9\x1b\xaa\x8d\xca\x03\x90\xc1\xcd\xb4\xeb\x66\x14\x4b\xfa\x0a\x43\x82\x33\xf3\xe5\xcc\x5f\x66\xf6\xe6\xb4\xa4\x82\xd4\x54\xd1\x8d\x84\x5d\x58\x10\x95\x26\x44\x1f\xbe\x31\x37\xf1\xa5\xa2\x96\xcb\x26\xc2\x50\x8e\xf8\xe4\x9c\xa4\xee\x42\x59\x08\x04\xb5\xb3\xaf\x53\x13\x21\x51\xa9\x84\x67\x21\x9c\xc3\xc4\xaa\x82\x7b\x2d\xa9\x6c\xd5\x20\x17\xd3\xc2\xb1\x70\x33\xd1\x2d\xbb\x8d\xb5\x48\x69\x72\x0a\x51\xe0\x9e\x03\xb4\xf4\x70\x7f\x26\x8d\x50\x95\xb2\x59\x3c\x29\x4b\x72\x65\xa0\x58\xba\xce\xc4\xde\x96\x66\x3b\x33\x78\x32\x01\x60\x2e\x33\x1d\xd1\x78\xd6\x34\xd7\x43\x46\x45\x35\x60\x59\xe9\x9c\xd4\x9c\xb1\x06\x0d\x3e\x54\x3b\x53\xc9\x60\x5f\x18\x13\xa3\x16\x38\x17\xcf\x74\x50\x78\x87\x93\x44\x63\xf8\x1e\xc0\xc8\x5c\x2c\x39\xf4\xdd\xb0\xa0\x52\xa4\x31\xfb\xbe\x94\xe9\x9b\xe7\xec\x18\x35\x9d\x15\x00\x93\x93\x84\x75\x2c\x81\x0e\x81\x06\x9d\xd9\x3e\x28\xf2\xb0\x55\xe4\x42\x01\x81\xe0\x3c\xca\x87\xe8\x03\xba\x77\xa4\xde\x63\xea\x20\x8f\x43\xd4\xb4\x8f\x2b\xcc\x52\x89\x95\x04\xc5\xb7\x70\x77\xe0\xaf\x0c\xb8\x1c\xbe\xbf\x5d\x68\x3c\xa3\xdf\xf1\xa0\x29\xf0\x17\xbb\x10\x86\x0e\x2b\x33\x9f\x2b\x05\x03\xcc\x7b\x64\x6c\x6c\x3f\x0d\xca\x0f\x80\xc8\x3f\x7e\xf9\xf2\x46\x60\xf4\x35\x4c\x14\x75\x5b\x9a\x14\xfc\x20\x25\xa7\x32\x07\x58\x48\x40\x82\xcb\x25\x33\xa6\x73\x20\xfb\xf0\x3c\x3b\x25\x54\x86\x5b\xb7\xa4\x01\x29\xa7\x76\xbe\x14\xc8\x9b\x26\xa8\xba\xc0\x46\xc8\xa9\xa0\xab\x6b\x3e\xa4\x08\x6a\x4b\x55\x9f\x9f\x86\x4d\x44\x9c\xdd\xb8\x2b\x60\x9f\x83\x18\xcc\x62\x98\x5c\x6e\x6b\xa0\xb6\xcd\x58\x9b\x8f\x45\x55\xe5\x88\x4b\x22\xc9\xc6\xb7\x40\xd3\x4b\x88\x6a\xf4\x85\x9d\x5e\x13\xdf\x5d\x21\x8c\x08\x7b\x0e\x98\x6b\x87\x5c\xb8\x6a\x94\xb1\x1a\xb0\x42\x05\x29\x2e\x10\x7c\xfb\xec\x76\x9b\xa3\x9b\xa6\x01\xb6\x61\x8d\x28\xaa\x96\x92\x50\xdd\x87\xd8\x2b\x82\xa4\x98\x25\xa3\xed\xc4\xf6\x6a\xf7\x15\xd3\x9f\xaf\xe5\x96\x06\x82\x23\xe2\x9e\x65\xf3\x07\xf4\xbf\x52\x20\x4a\x27\xbc\x62\xa0\xa4\x31\x4a\xdb\xdc\x7c\xe5\x07\xdc\xd6\xff\x43\x66\xb4\x25\xad\x80\x3b\x36\x58\x05\xbd\x7b\x27\x84\xa5\x8e\x6d\x56\x93\x3c\x3f\x89\x66\x37\xae\x91\x9e\xf5\x73\x1b\x4c\x4a\x20\xa1\xb6\xa5\xb7\x53\x99\xc3\xbd\x05\xbe\xa9\xee\x4b\x88\xdb\x70\x43\x37\x5f\xda\x1a\x14\x31\x41\x11\x00\xd0\x25\x10\x2b\x40\x42\xd5\xbe\xdb\x91\x9c\xf4\x67\x01\xa8\x18\x22\x21\x8a\xe5\xbf\xcc\x54\x24\x13\x77\x4e\x53\x42\xc3\xd5\x2d\xa7\x3a\xca\x12\x9a\x30\x28\x94\xe4\x10\xc9\x84\xf8\x0a\x37\xf3\x86\xf0\x49\xc5\xbb\xf7\x37\x3a\x2b\x6d\xb8\x16\x3b\x03\x4d\x7a\x54\xb9\xd6\x04\xf9\x91\x4e\x80\x94\xee\x6d\x72\xe3\xc5\x33\xef\xf4\xa9\x6a\xb0\x1f\xc3\xd3\xc6\x5f\xda\x65\x57\xfa\x2a\x7f\x5e\x04\xde\xbf\xff\xeb\x7f\xfd\xed\x71\x22\xdf\xb1\xa0\xd2\x0d\x0a\xa7\xc4\xd8\x22\x3c\x32\xe9\x5c\x0e\x28\x3c\xe0\x15\x18\xa4\x6a\xb0\x2d\x5a\xd9\x17\x80\xcb\x14\xa8\xf5\x92\xb4\x20\x76\xdf\x49\x01\xc3\xc0\xc1\x61\x0e\xbb\x11\xd0\x0e\xab\x48\xb8\x67\x22\x78\xd7\xc1\x73\x99\x7a\x8f\x98\x1d\x4a\xa6\x76\x04\x7a\x00\x69\x1a\xb1\xae\x83\x3d\x78\xe2\xb5\x88\xba\x77\x9d\xa3\x20\x5c\x59\x72\xd1\x41\xaa\x00\x93\x8d\x25\x1b\xc8\xa5\x34\xda\xa3\x43\x93\x7b\xc2\x51\x26\x7a\x18\x7d\x17\x20\x83\xa2\xd0\x11\xa1\x10\x24\xc0\xb9\xc1\x78\xa3\x91\x99\x80\x17\x97\x51\x53\x03\x1c\xbc\x6f\x88\x3e\x0b\x4f\x30\xb5\x29\x4a\x43\xe8\x17\xa1\xa2\x22\xf6\x5c\x6b\x5b\x98\x36\xa8\xab\x21\x42\x7d\x32\x74\xd5\x62\xb1\xab\x04\x87\x1d\xf5\xe3\xd8\x5a\x81\x27\xaa\xe4\xa9\xa6\x63\x07\x5e\x8f\x16\x7f\xa9\x05\xd1\x23\x96\xe6\x46\xed\x7c\x3e\xb4\xe6\x58\x3b\x39\x49\x30\xbe\x48\x85\x97\x35\x85\x1c\x4d\x97\xad\x1b\x72\x3d\x39\x98\x83\xb0\x2f\x22\x6c\x35\x06\xf0\x50\x90\x1f\x4b\x12\x88\xa2\x0a\xda\x04\x92\x64\x55\x12\xf4\x70\xdc\x45\x48\x3e\xd2\xff\x11\x33\xc9\x29\x2a\x5c\x47\xde\x10\x05\xa7\xb3\x9a\x0f\x8d\x20\x6a\x95\x60\xe2\xc5\xde\xae\xf5\x8e\xed\x55\x84\x05\x11\x8a\xeb\x94\x2b\xe8\x0c\x08\xd5\x0c\x26\x77\x38\xc3\x03\x65\xad\xee\xf1\xd4\x99\x78\x37\xbc\x19\xde\x0b\x6f\x85\x77\x82\x85\x75\xe4\xcb\xe6\x43\x0c\xcd\x78\xaf\xf1\x2e\x78\x13\xb4\x30\x94\xe1\x82\xc0\xfb\xfa\x5d\xd4\x88\xfa\xf0\x2e\x60\xaa\xc6\x93\x6c\x23\x33\xeb\x44\xa4\xcb\x07\xc4\xda\x3f\xfd\xf2\xf3\xbf\x6f\xbf\x7c\xfe\xf9\x61\xd6\x8d\xfc\xae\x2e\x48\x76\x87\x2e\x2b\xf6\x95\x59\xb6\xca\xd4\x2d\x0c\x6f\x28\x45\x5e\x97\x0e\xc5\x39\xf4\x67\xa8\x07\xf6\xc3\xf3\xb1\x7e\x5b\x44\xe0\xbc\x2d\xa8\xf5\x17\x48\x91\x5b\x55\x77\xd2\xb5\xc1\x4f\x37\xae\x70\xfd\x13\x4b\x37\x59\x29\xd9\xe9\x06\xa0\xfe\x29\xc2\xd1\xc6\x3f\x4f\xd9\x10\xe1\xa4\xc1\x84\xfb\x80\xa7\x0b\xd9\x94\x02\xc7\x03\x13\xe2\xa4\x93\x1a\xb7\x02\xb2\x2b\x32\x1c\xf5\x3b\x06\xf1\x6a\xa5\x85\xd6\x5d\xd8\x63\xbe\x33\xba\x15\x72\x79\x12\x55\xdf\x48\xa1\x01\x52\xd9\xed\xf4\x6e\x94\x72\x58\x8d\x71\xbd\xca\x6e\x58\x04\xef\xc7\x2d\x0b\xa5\xe3\x6e\x7a\x00\x53\xf9\x89\xe5\x78\x76\x2a\x2c\xa2\x66\x0c\xd6\xda\x75\x61\x71\x72\x88\xe7\xd0\xcd\x18\x68\xa4\x00\x64\x86\x87\x52\x46\x2e\xa8\x77\x46\xb3\x0c\x4b\x21\x67\x6b\x45\x21\x6c\xad\xa8\x6b\x2f\x08\x3c\x01\xa2\xc1\xe2\xe9\xdd\x77\x7c\x7f\xf0\xeb\x18\x63\x83\xba\x95\x00\x4a\x6a\xac\xdc\x80\x0c\xf8\xf1\xbc\x97\x15\x04\x55\x4b\x9f\xd9\xad\x08\x28\xee\xe2\xe9\x76\x3c\xb2\x3f\x31\x3a\x02\xfd\xf0\x3e\xd2\xe8\xe7\x1f\xd6\xf5\xa7\x87\xe1\x76\xaa\xca\xf6\xec\x5e\x81\xde\xdc\x6a\x7b\x83\x62\x1c\xb2\xe9\x6f\x51\x8c\xc7\xf1\xbf\x26\x19\xf7\xe3\x1f\x48\xcc\xad\xb7\x54\x7b\xbb\x1d\x8a\xce\xdf\x78\x89\xa3\x34\xe8\x1b\xae\x00\xd0\x90\x81\x5b\xbe\xe4\xf1\x35\xa2\x33\xff\xee\xf2\x26\xd5\x59\x9c\xf5\x2b\xae\x33\xfc\xf5\x0d\xb2\xb3\x77\xa7\xf8\x0f\xff\xf6\xf9\xd1\x3a\x1e\xfa\xde\xf4\xd6\x01\x0e\xde\xb7\x29\xf1\x8f\x6d\xc0\x8f\xb1\x75\xf1\x11\x62\x45\xae\x60\xa8\x12\xd3\x55\x0b\x9c\x13\xd9\xe8\x35\x4e\xa0\x05\xbe\xd6\x01\xe0\xba\xe8\x7a\xe6\x27\x2d\x04\xd3\x71\xd6\x95\x1a\xeb\x91\x34\x9c\xc8\x66\x98\xa5\x3e\x49\x19\x02\xfc\xcd\x63\xdf\x31\x0b\xe4\x47\xe3\x56\x8a\xc8\x4d\x4c\xfd\xfe\x78\xb3\x8b\x21\x70\x4a\x72\x04\xb2\xe8\xd8\xe5\x2d\x86\xff\x58\x1d\xdc\xb2\x85\x6a\xb8\x8d\xe2\x7b\x93\xe4\x9e\xa4\xbb\x4f\xda\xaf\x04\xf3\x60\xbf\x02\x0d\x5c\xee\x38\x92\x18\x9e\xc6\xf0\x53\xf3\x29\xf5\xfc\x34\x50\xfc\xca\x4e\x85\xc9\x1f\x82\x20\xf4\xca\xeb\x4b\x8e\x42\xfc\xc2\xcf\x94\xc6\x20\xc1\xe0\xfd\xe3\x8b\x23\x5e\x9e\xf9\xa2\xc9\x77\x87\xc4\x9b\x03\xc2\xde\x97\xd7\x2c\x69\x98\xde\x96\x22\x5f\x11\x4a\xd8\x5f\x8b\x23\x58\xd5\xeb\xd2\xca\x6d\x99\xf2\x95\x97\xbb\xbf\x7e\xa3\xa5\x15\x9e\x50\xa8\x15\xf0\xe1\x09\x53\xe2\x0a\xbe\x6d\x7c\xcb\x2d\xf1\xd6\x47\x4e\x15\xec\x09\xbb\xb8\xa9\xdd\x40\x9b\x0b\x11\x16\xff\x7d\xa9\x0d\x16\x94\x58\x7b\xbe\x80\x7e\xf3\x9f\xe4\x95\xfd\xcb\x8f\xfb\xfe\xe3\x03\xaa\x6d\x9c\xd0\xcc\xde\xdd\x5b\x29\x40\x98\xb9\x85\x2c\xcd\xd7\x7e\x6a\xb2\xce\x7d\x69\x69\x1c\xb2\x25\x7d\x62\xac\xfb\x6c\x1c\x16\xe1\x3f\x9a\x1a\x48\xa1\x44\xed\x40\x89\x24\x80\xf7\xea\x6c\x41\x34\x85\x2d\x74\x32\x9d\xa8\x54\xd8\xc0\xd1\xe5\x68\x82\x2d\x80\x18\xa4\x46\xed\xc4\x62\xe1\x12\xf1\x55\xfa\x55\x43\x2b\x76\xc1\x06\xf3\x67\x15\xb9\xff\xf7\x5f\x1e\x80\x95\xa3\xbe\x87\x3a\x2b\xfd\x28\xf1\x82\xb0\x10\x4c\x66\x8d\x40\xac\x5a\x92\x51\x76\x70\xaa\x08\xc5\xcb\xec\x4c\xfd\x6a\x94\xe1\x73\xa0\x21\xd2\xe0\x87\x00\xc8\x85\xb3\x22\xad\x82\xb6\x5e\x7e\x3e\x8f\x38\x4f\x7a\xd9\xd4\x8b\x4b\x1c\x97\x3d\xee\xe3\x7e\x6f\xcf\x4f\xd2\xcb\x48\xd6\x8c\xa0\x80\x28\x1b\xd0\xbc\x2e\x3a\xdd\xa4\x69\xb7\xc5\x32\x8d\xef\x76\x10\xb9\xd2\x36\x92\x20\x31\x73\xd3\xc1\x8f\x9d\x65\x5d\x04\x36\x29\xc0\x73\xf9\x4e\xfb\x2a\x06\xe1\x64\x54\x16\xbb\xf1\x5c\xc6\xd1\x3a\xd5\x44\x60\x3f\xcd\x14\xc0\x52\x9e\xa8\xed\x66\xb9\x45\xcb\x6d\x0b\xb0\x24\xb8\x02\xa1\x84\xd5\x53\x49\x3a\xd7\xb3\xbd\xf8\xe0\xee\x3b\x14\x8b\x92\x4e\x22\x04\x70\xca\xca\x66\x6e\x7c\x14\xb0\xab\x24\x6d\x48\xde\x90\xd6\x6e\x8d\xfb\x39\x1a\xdc\xe6\x29\xb0\xb5\x53\xfb\x6a\x3d\x9e\x8d\x6d\x51\x9a\xa5\x31\xc7\x45\x38\x27\x85\xeb\x95\x3d\x16\x0d\xb6\x8d\x40\x59\x76\x2a\xf2\x6c\x08\x60\x2f\x3a\xef\xbd\x75\x36\x1d\xb2\xce\xf8\xfa\x03\xee\xcb\xd6\x1e\x46\x67\xbb\x97\x54\x36\x77\x36\x8d\xa8\x35\xb8\x4c\x99\x04\xc2\x83\x00\x3e\xeb\xc8\x9a\x6b\xa9\x49\x7d\x6e\xcf\x9c\x0c\x6c\x83\xa0\xe3\xcd\x25\x59\xed\xdb\x02\xdc\x4c\x43\x11\x09\xcd\x4f\x32\x9b\x46\xd6\x8f\xb6\x98\x91\xfd\x4f\xe9\x88\x32\x50\xa1\xb9\xec\xac\xcf\x40\x50\x0b\xdf\x81\xe7\xc6\x9d\xec\xc3\xef\x69\xac\xcf\x20\x63\x30\x1d\xbd\xe2\xee\xa6\xf8\x2b\x44\x14\x0c\x55\x6f\xcc\x37\x44\x1c\x46\xec\x0c\xf9\xfa\x10\xa4\xa8\xe8\x1c\xa9\xc9\x85\x0f\xc3\xb2\xb9\x56\xf8\x54\x4d\x92\x4e\x64\xa6\xaa\x25\x90\x08\xe9\x84\x59\x5c\x5b\xd2\x42\x16\x0c\xa2\x20\x90\xa3\x9c\x19\x01\x86\xad\x94\xa4\xa9\x81\x4a\x08\x6c\x98\x45\x82\x80\x91\x80\x49\xb0\xab\x45\xcc\x47\xc6\x8b\xcc\xb7\x4a\xb8\xeb\xe2\x5e\x0d\x28\xcd\x6c\x97\x89\x3c\xcd\xd8\xd5\xff\xe2\xeb\x36\xf9\x4e\x74\xa4\x2a\x5b\x11\x96\x07\x22\xed\x13\xb2\x46\x91\x55\x2d\x81\xaf\xb1\xf7\x49\x1a\x3e\xff\xfc\xfd\xf5\xc7\xdb\xe3\x66\xff\x2e\x2c\x38\x8f\x11\xc4\xb9\x6f\xb0\x93\xd6\xf6\x36\x3b\xe9\xfe\x2b\x4a\xd2\xda\xde\xa2\x24\x6d\xad\xa4\xe1\x8b\xc6\x57\x89\x56\x69\x14\xbf\x69\x13\xf3\x9c\x6f\x34\x89\x09\xf3\xa5\x09\x1e\xe1\x81\x37\x2f\x56\x41\xab\xf1\xc6\xd5\x78\xd2\xaf\xaf\x56\xad\xfd\x56\x03\xfc\xcb\x2f\x0f\xd4\x48\x63\xbc\x27\x30\xd3\x4c\xdd\x3b\xf9\x2a\x3b\x72\xf8\x39\x88\x35\x76\xb0\xa4\xac\x28\xc4\xd6\x3c\x81\xae\x26\x69\x2f\x79\x57\x27\xb7\x72\x19\x47\x3b\x7c\x67\x78\x9a\xd5\x47\x5e\x92\x09\x54\xce\x12\x80\x04\x5f\x8c\x49\x8d\xf1\x29\xf8\x09\xc8\x45\x02\xd6\xe9\xd0\xb7\x13\xbb\x0d\xb0\x51\xe8\xb8\x2d\xc3\x97\x5f\x7a\x04\x54\xc7\x66\x0a\x63\x74\xd8\x6a\xad\x25\x9b\x11\x23\x35\x4a\x9b\xd7\x24\xd8\x0a\x90\xac\xee\x97\x7b\xc1\x5a\x01\x6f\xe1\xa1\xc5\x58\x8c\x34\x81\x13\xe9\x0b\xac\x04\x88\xb1\x32\xa5\xd0\x3e\xd5\x55\xb3\x26\xd5\x0e\xc2\x31\xa0\x7b\x2b\x78\x43\x0e\xf0\xfd\xc3\x2b\xdd\x5f\xd1\x46\x6b\xb9\x29\xf6\x24\x37\xe9\xc1\xea\xc9\x6e\x7b\x38\x34\x86\xf4\x2a\x08\xb2\x74\xbb\x8e\x52\xd6\xe3\xac\x17\x04\xc9\xfb\xab\x21\x71\xf4\x3d\x2f\xe0\xff\xdc\x16\x9d\x85\x15\x0d\xf7\x01\x74\xb9\x8f\x57\x48\x83\x09\xed\x66\x0a\x67\x1b\x82\x5d\x49\x81\xa7\xc2\xbf\x8c\x7e\xf1\xe3\x82\xcf\x33\x8a\x68\x3f\x72\xbb\x6f\xff\xfa\x30\x08\x1f\x91\xe3\x53\x4f\x17\x70\x0a\x18\xa4\xdb\x06\x28\x44\xa4\x37\x22\x94\x52\x98\x17\xf5\xc1\x31\xea\x46\x94\x9b\x90\xa6\xa7\x6b\xc8\xe6\x2d\xc4\x97\x91\x2a\x95\x68\xaa\x02\x96\x9a\xc0\xcc\x80\x55\xdb\x36\x54\x5a\x21\x6d\x29\x58\x48\xc1\x54\x83\x2c\xa9\x6c\x76\x8f\x8f\x03\x38\x79\x70\xfb\xe4\x63\x05\xd4\x13\xc7\x85\xc0\x1f\x86\x17\xdc\xaf\xb8\x49\x86\x5a\x59\xa1\xab\xba\xa2\x54\x14\x0a\xd3\x08\x14\xf5\x0c\x39\xc2\xc6\xd0\x6c\xe4\xe5\xea\xb8\x04\x6b\x0f\x20\x1f\x81\xd9\x19\x94\x29\x65\x76\x9d\x59\x30\xe2\xb6\xe6\xf1\xd7\xaa\x3b\x55\x89\xbc\xa5\x23\xc1\x6b\x77\xa0\x59\x3f\xf2\xb8\x6b\x20\x6c\x8e\x19\x09\x0d\x70\x77\x66\xa5\x6e\x48\x1f\x60\x99\x6f\x21\x34\xc8\x8d\xa4\x06\x9b\x07\x0a\x50\x33\x32\x16\x7c\x54\xc4\xb3\x8f\xe2\x81\x1e\x68\x11\x44\x19\x27\xc4\xea\x5b\x92\xea\x1f\x94\x95\xd3\xfe\xd1\x98\x04\x57\x90\xe4\x22\xeb\xa5\x7d\xf7\xa9\xb6\x96\xd4\x2e\x30\x79\x26\x72\xe3\x73\xd5\x5e\x92\x02\x2a\xa3\x24\x23\x0d\x34\x99\x3f\x05\x31\x1a\x8d\xd0\x40\x8c\x87\x83\xdb\x03\x04\xa5\x28\x68\xf2\x17\x3a\x40\x49\x04\x03\x0e\x3c\x1f\x2d\x53\x9b\x39\x17\xaa\x1e\xa2\xfb\x77\x42\xf2\x10\x39\x46\xaa\xa9\xec\xda\x13\x31\x69\x35\x21\x25\xaf\x4a\xc4\x4d\xe9\x80\xce\x0d\xd9\xfd\x5d\x02\xd3\x02\x17\x25\x75\x43\x5c\xad\xb4\xd5\x1f\x4c\x81\x29\x43\x74\xb5\xa6\x62\xb0\x1c\x7d\x9c\x91\xb8\x58\xc0\x8a\x6a\x79\xab\x88\x36\xaa\xcd\xa4\xe5\xb2\x41\xfd\x93\x1c\xe3\x62\x7c\x9c\x14\xa1\x76\xbb\x27\x2a\x0b\x71\x04\x8b\xe9\xfe\xd2\x2e\xf7\xe1\x1f\x20\x8f\xce\x04\x10\xe0\x71\x1a\xa3\x81\x48\xd7\xa2\x31\x7a\xcb\x88\x93\xf3\x89\x0f\xb7\x19\xc5\x7c\xd0\x26\x18\x80\xe6\xb9\x9f\xb0\x03\x14\xb4\x03\xba\xf4\xa9\xee\x90\xdf\xdb\xa1\x75\xe8\x23\xad\x31\xe8\x8c\x6a\x02\xad\x1b\xea\x6e\xfc\xff\x01\x69\xf7\x5b\x5d\x4b\xb2\x95\x40\x38\xb1\x64\xbb\xe6\xe4\x7f\xd5\x31\x92\x5e\x36\x9b\x09\x84\x74\x7e\xeb\xe4\xf5\xfa\x68\x25\xf9\x8f\x1f\x7e\xfc\xf2\x18\xbf\x7b\x8f\xa3\xac\xf5\x9a\xb4\xea\x46\x32\x3a\x11\x52\x52\x56\x30\x4b\x03\x1a\x89\x48\xaa\x90\x0c\xbc\xb4\x20\x8e\x2d\xf4\x10\xda\x51\x48\x5c\x91\xc0\x66\x0d\x1c\xa4\xf1\x23\xb5\xfc\xfc\xd4\xdb\x4c\xd6\x8d\x04\x71\xf6\xa2\x8a\xfd\x2c\xe2\x97\x92\x22\x40\x1a\x28\x51\x7d\xc1\x89\xe3\xdd\x6c\x42\xbf\x00\xda\xd3\x0b\xb0\x69\x48\x4e\x2b\x1a\x78\x7e\x9a\xc5\x87\x4a\xdb\xb8\x83\x82\xff\xa8\x32\xd5\xeb\x0e\x1a\xdc\xab\x0b\x31\xab\x1c\xc0\xb8\x34\x6e\x03\x6b\xc9\xe8\xc4\x5b\x4e\x23\xa8\x21\x89\xbf\x6e\xc2\xda\x98\x14\x05\x32\xa6\x06\x52\x11\x98\x36\x82\x08\x98\x93\x54\x60\x9a\xc1\xc5\xe7\xde\xf8\x98\x49\xba\x5f\x39\x03\x4d\x9c\x01\x35\x00\xe2\xc3\xb7\x4f\x54\xf8\xf8\x82\xdb\x02\xf7\x10\x68\x2f\x8e\x2e\x24\x22\x41\x27\x95\x00\xad\xed\x79\x67\x33\x8b\xb7\xa3\xd1\xc1\x02\xd2\x02\xb5\xc4\x46\xd8\x06\x9b\x40\x0b\xee\xb9\x37\x4b\x45\xa1\xa0\x8f\x80\x0b\xf5\x31\xc2\x0b\x07\x68\xb7\xbb\xb5\x1d\x8f\x14\x9c\x00\x88\x3a\xf8\xdd\x72\x0e\xc9\x0e\xde\x66\xc2\x22\x14\x18\x89\x69\xd0\x17\xc7\x0a\x2c\xb0\x40\x64\x4e\x4a\x63\x48\x45\x35\x2d\xcc\x77\x99\xb0\xd8\xeb\xd8\xa4\xcd\xe4\xff\x59\x21\x20\xa1\xed\x5a\xb8\x14\x6f\x0d\x89\xd7\xf0\xae\x26\x5d\x58\x62\x96\x34\x93\xb3\x9e\x48\x04\xcc\x42\x63\xf1\xed\xda\x7c\xd1\xf3\x69\x31\x91\x40\xae\x73\x17\x50\x6b\x0a\x88\x64\x9b\x51\xba\x03\x71\x5b\x8e\xd0\x28\xcb\xdc\xef\x80\x77\x54\x0e\xa0\x2e\x21\x2d\x0d\x88\x14\x19\x64\x15\x2d\x1d\x89\x39\x38\x06\xc4\x9e\x90\xc7\xa2\xf8\x2b\xcd\xa5\x6d\x6e\x7b\x95\x9e\x18\x85\x91\x4c\x2b\xec\xec\x42\xe2\x3a\xcf\xaa\x10\xb8\x01\x8c\xd7\x20\xd7\x32\x30\x6d\xb8\x2b\x15\x98\x4b\xbe\x8c\x81\x20\xc4\xe7\x1d\xf6\x04\x28\xc1\x1c\xdb\x63\x01\xd8\xcf\x97\x4a\x18\x81\x90\x40\x81\x95\x65\x1d\xa1\x21\xac\x2f\x86\x4a\xd5\x85\x41\x95\xc8\xd2\x3d\x5f\x9e\xa4\x75\x5f\x83\x33\xb3\xfc\xb3\xa5\x23\xf3\x16\x20\x37\xee\x7e\xc0\xe4\x2c\xe4\xc5\xc5\x9c\x06\xcb\x81\x3f\x24\x54\x00\x40\x4f\x90\x7c\x6d\x18\x69\x28\x97\x2e\xdd\x91\x4b\xab\x03\x0a\x2d\xc8\x7e\x97\x91\xa8\xe5\xe2\xc6\xd4\x38\xe0\xb8\x44\x7b\xce\x48\xde\x02\x8d\x48\x4d\xdf\x83\x8f\x01\x49\x22\x61\x4e\x49\x81\x56\x83\x5b\x07\xd6\x22\x5f\x4d\xdf\x17\xcb\xff\xe1\xaf\x3f\xff\xf0\x18\xe4\xf9\xf2\xa2\x1a\xda\xa2\xf0\xad\x0b\x2b\xca\x0c\xa2\x33\xfe\x97\x49\x3a\xd1\xd6\xd3\x74\xf7\x1f\x82\x1c\x74\x27\x7d\x1b\xe6\xb6\xae\x6d\x90\xd6\xbb\x94\x74\xce\xce\x11\x5e\xe7\xa2\x22\xcf\x4f\xcd\x7c\x4d\x9b\xe5\xb6\x94\x41\x71\x85\xe0\xf3\xe0\xce\x13\xe8\x38\xce\xa5\x4c\x3c\xd7\x90\xe0\xc7\x18\x92\xca\x64\x34\xbc\xa3\xd2\x20\x19\x6c\x32\x12\x3f\x6a\x23\x69\xa0\x2f\x45\xfd\x88\xc3\x19\x33\x15\xc8\x20\x0e\x00\x60\xc8\x94\x5e\xd2\x44\x08\x16\xe2\x06\x99\x8b\x2b\xee\x01\xb7\x70\xf3\x7b\x13\x04\x69\x73\x32\xa4\x2a\xad\x1f\xfc\x92\xbc\x4e\x38\xea\x65\x7e\xa8\x5a\xd3\xf5\xa1\xc7\xbf\x7f\xaf\xc2\xb1\x64\x4d\xc5\x08\x71\x46\x30\x1f\x71\x78\x1b\x3b\xe4\xc7\x49\x86\x33\xc1\x01\x11\xb0\x1e\x2e\x89\xf8\x73\x8b\xb2\xfb\x65\xb4\x28\x00\xe1\xf2\x82\xb5\x2a\x98\x49\x56\x40\x0e\x81\x83\x83\xa5\x86\xc8\x72\x64\xf9\x22\x2c\xc9\xa9\x6a\xcc\x30\x23\x46\x6a\x9a\xdc\x8f\x12\x10\x5b\xf8\xbf\x42\x82\x46\xa6\x7e\x7d\xaf\x4b\x46\xb8\x57\x46\xee\x9b\x50\xaa\x09\x98\xa6\x45\xf1\x29\x15\x5c\x77\x02\x0e\x0d\x8f\x43\xc8\xac\x01\x7f\x75\xd9\x97\xa9\x88\xed\x0e\x02\xf6\xdd\xf2\xc3\xa7\xd2\x36\xf7\x86\x4a\x4f\xea\xdb\x5e\xdf\x85\x90\xf5\x4e\x04\xd1\xa7\x03\x75\x3e\x48\x8b\xd3\x03\x51\x32\x14\x98\x2f\x93\x04\x0a\xea\xa0\x86\x0d\x22\x4e\x76\xc8\xb1\xf5\xb2\x9b\x58\x56\x24\x41\x78\x89\xd6\x70\xbf\x25\x70\x97\xbd\xa6\x76\xc4\x93\x67\x39\x29\x38\x11\x21\xda\x3a\x79\x8f\x61\x5e\x11\xdb\x14\xc4\xa0\xfb\x64\x25\x5c\x64\xbf\x33\xc2\xf1\x4d\x76\x5f\x17\x9b\xed\x87\x60\xcc\x05\x96\xa8\xef\x36\x2b\xe0\xc8\xd0\x0a\x05\x4f\x19\x21\x85\xa0\xa0\xd6\x03\xa8\x50\x42\xb8\x83\x0c\x28\x44\x06\xd4\x82\xad\x06\xd0\xb5\x58\xb3\x45\xfb\xde\x51\x73\xea\x77\x88\x3a\xd9\x14\x01\x2d\xc4\xa3\xf8\xa6\x41\x2e\xe4\xbe\xea\x38\x6c\xc2\x31\xc3\xac\x63\xd8\x5a\xec\x64\x20\x9a\xa4\xed\x82\x21\x17\x92\x57\x80\xc2\x01\x5d\x0b\x54\x01\x02\x47\x96\x3a\x96\x3e\x18\xc0\xf0\x74\x6d\x07\x9b\x54\x1d\x3b\xa8\xca\x41\x21\x11\x1e\xf0\xc5\xfb\x2a\xf2\xe0\xb1\x6a\x00\xd3\x8f\xc8\x53\xd8\x35\xdc\xf2\x2b\x91\x00\xf7\xc4\x34\x9f\x9c\xec\x10\xb4\x5b\x83\x53\xa0\x60\xc9\x5d\x26\xc5\xa8\xbc\xd7\xe2\x7d\x97\x98\x01\xc6\x32\x04\xd0\x6c\x76\x86\xde\xb6\xe6\x77\xcd\x9c\x39\xc9\x27\x8a\xec\x60\x99\x02\x1d\x05\x91\x67\xba\x0b\xcb\x30\xf2\x8e\x7a\x63\x06\xa6\xdd\x54\xf0\x23\x3f\x26\xc7\xfc\xee\x6b\xec\x98\xe3\x2f\xef\x26\x30\x7d\xf3\x1e\x76\x5b\x58\xfa\x38\xea\x29\x77\x53\xa2\x86\x6a\x1c\x85\x3f\xd7\xa5\x76\xf2\x09\xfb\x5a\x75\xd3\x36\xaf\x4b\x45\x01\x0e\x63\x1a\x38\x92\x53\xbd\x92\xb2\x09\x72\x4c\xed\x2a\x6a\xe3\x99\x97\x6a\x79\x1e\xba\xfe\x6a\xe3\xe6\x9f\x5e\x7c\x3b\xad\xbf\xf3\xad\xe4\xde\x6f\x4b\xeb\xf1\x2d\x38\xb9\x47\x49\x71\x2d\x76\xd7\x71\x0b\xd7\x51\xda\x86\xfb\x7a\xf1\x00\xfb\xf1\x64\xe6\xdb\xf2\x07\xab\xeb\x83\x26\xd8\x78\x81\xae\xaa\x77\xf6\xcb\x83\x09\x80\x4a\x72\x0b\xa4\xe4\xe6\x2b\xb1\xb9\x00\x26\x1c\x18\xed\x19\x45\x75\x37\x99\x7a\x45\x4e\xee\xdd\x43\x10\xdf\x48\xc7\x5f\xf6\xe3\xa0\xab\x55\x7d\xa3\x8e\x7e\x83\xb4\xdd\x41\x92\x70\xc8\xdf\xe1\x7e\x0e\x15\x3a\x93\x33\xbd\x52\x20\x2e\x90\x14\x2e\x21\x22\x5c\x6e\xe3\x74\x83\x8f\x18\x81\x56\x7e\xe3\xff\xb0\x9a\x16\xd1\xd8\xaf\x45\x65\xf7\x38\xf9\x68\x8c\x8d\xff\x79\x61\x76\x64\x4e\xf8\xfe\xc7\x9f\xbf\x5f\x7f\xf8\xee\xf3\xba\xbf\x49\x1d\x31\xf3\xab\x81\xf1\x8a\x27\x22\xea\x44\xa2\x9c\x81\x6e\x2b\xa6\x92\xbf\xbe\xaf\xb1\x49\x9c\x02\x85\xc1\x16\xe2\x5e\xb8\xcc\xa8\xe4\xc3\xab\xf6\x7f\xd6\x43\xb9\x70\xe2\xf5\xfb\xbb\x07\x1a\xea\xb8\xc6\x7e\x5e\x18\x17\xf2\x01\xf3\xd5\x23\xfe\xff\x61\xf1\x9b\x86\xc5\x77\xd6\x1f\xb2\x46\x53\x5e\xa1\xa8\x67\xb0\x0e\x7f\x55\x24\x2d\x93\x45\x3f\x89\xae\x4b\x29\x83\x1a\x94\xda\xc9\xf7\xd1\x51\x2b\xe0\xff\xae\xc7\x77\x82\x72\x6b\x9c\xf0\x76\x14\xdf\x8d\x51\x69\xf9\xa0\xcc\x89\x91\xf7\x62\xe0\xcd\x3b\xe7\xce\x7d\xbd\x59\xce\x05\x27\x86\xca\x41\xdd\xc3\x35\x67\xb9\x2f\x3a\x18\xb7\xe0\xdb\x39\x07\xd1\x31\x86\x30\x84\xfe\x8c\x04\x40\x7f\xf9\x69\x7f\x31\xbb\x1f\x5e\xa9\xbe\xc1\x9f\xbc\x1c\x04\xca\xcb\xc9\xa0\xbc\x1c\x14\xca\xc1\xa0\x1c\x04\xca\x07\x7f\x72\xd0\x27\x2f\xe4\x4f\x5e\x40\xa0\x0c\x7a\x62\x8a\x0c\x94\x11\x48\xca\xd7\xd3\xea\xef\x9d\x55\xfb\xd7\xa6\xee\x6f\x98\x6e\x97\x7f\xbe\xf9\x36\x1e\x5e\x8e\xbd\x97\x19\xca\x6a\xee\xc4\x81\x92\xdb\xdd\xb2\x8d\x60\x41\xc8\xce\x30\xdf\x9e\x77\x48\x4f\x2c\x28\x2f\x38\x72\xa0\xe3\x1e\xe2\xf6\xc3\x14\xa4\xd0\xb0\xca\x06\x73\x92\xfe\x22\xa9\x43\x6b\x96\xf7\x23\x94\x24\x2b\xe2\xdd\x50\x6e\x02\x90\x10\x55\xbb\xc8\x51\x07\x6a\x04\xc5\x02\x11\xe1\x1c\x35\x45\xda\xd3\x84\x9c\xf3\x0c\x5b\xa0\x36\x50\x30\xb7\x15\xe6\x6a\x03\x03\x69\x12\xa0\x94\x0b\xcb\xd1\x18\x04\xa9\x5d\x92\x96\xb9\xe2\xa1\xa4\x44\x30\x5f\x74\x5c\x58\x61\xd5\x89\x28\xe8\x07\x58\xab\xf6\x64\x75\x45\x81\x41\xe9\xfd\xba\x94\xae\x67\xf6\x48\x83\x4c\x30\x42\x7d\x25\xbb\x21\x3b\x5b\xea\xdd\x97\xa9\x24\x3d\xb5\x54\xc0\x3b\x55\x51\x2a\x3e\x60\xb3\x76\xb8\x6a\x1b\x94\x3b\xe1\xf0\x95\xbe\x17\x92\xae\x22\xcc\x35\xa9\x03\x17\xe1\x2c\x01\x07\xa4\x7c\xaa\x2b\x95\x7c\xe6\xb5\x90\xb9\x6a\x5c\x97\x92\x3b\xe2\xde\xfe\x4b\xa9\x95\xd2\x23\x15\xf5\x40\x2b\xbc\xc8\x52\x3f\x48\xd8\xfc\xf8\x6f\x3f\xfc\xf4\xdd\xdb\xe0\xdc\x79\xa7\x64\xd3\xa9\x69\xcc\x01\xce\x66\x6a\xf2\x49\x28\x7f\xb0\xdc\xc6\xa8\xb7\x23\x5b\x41\xad\xef\x70\xff\x68\x1b\x35\x65\x14\x79\x81\xf3\x87\xa5\x7d\xa8\xf9\x6a\x3d\xf0\xde\xe2\x2e\x2f\xd1\xd0\x7e\x4a\xa3\xc5\x57\x0b\x05\xa8\x6a\x45\x16\x45\x10\x40\x6c\x60\xed\x01\x3c\x08\x0e\x0e\xa5\x15\xf3\x0a\x82\xa0\xae\xe7\x4f\xef\xb8\xd6\xb7\xde\x52\xd5\x34\x7c\x17\xd8\x6a\x87\xcc\x4d\xc7\x18\x86\x32\x6b\xad\xdc\x01\x5a\xe8\x2c\xf2\xd3\xd6\x62\x98\xb3\xf1\x3e\x2f\x9b\xe0\x5c\x1b\xe6\x7e\xf3\xa6\xea\xfe\xa4\x25\xd5\x96\x4a\x29\x7f\x46\x05\x90\xef\xcc\xdd\x97\x5f\xbd\xe7\x47\x44\x91\x54\x7d\x65\x96\x51\xe0\x16\x39\xb3\x49\x44\x40\xf5\x05\x2d\x2a\xef\x59\x5e\x6e\xd5\xf8\x6d\x00\x2a\x1f\x98\xab\x9a\xc8\xba\x20\x6a\xd4\xda\x91\xf3\x62\x49\x3b\xaa\x8b\x7d\x9b\x6f\xbf\x42\xdf\x88\x02\x1f\xc9\x18\xb1\xac\x6a\x96\xba\xdc\xa6\xfd\x3e\xed\x68\xcd\x0f\x54\x5a\x2d\x5f\xde\xa2\x89\x1b\xb2\x9a\x6f\x4b\x02\xbc\x4e\x25\x2a\x6d\x3f\xa0\x36\x6c\x7e\x39\x43\xe2\xb2\x2e\x36\xa9\x16\x7d\x5b\xa6\xfd\xdd\xa7\x96\xd1\x37\x19\x4c\x38\xb8\x0f\x5c\x65\x07\x12\x5d\xc7\x1b\xf7\xfd\xdb\xc8\xcd\xfe\xb6\xfe\xf2\xef\x31\xef\xbf\x7b\xc8\xb3\xcc\xf6\x5e\x30\xec\x34\xd4\x5b\x79\x9b\xcf\x0d\xf6\x79\x00\x26\x1f\xbf\x6d\xe5\x8d\xb1\x01\x24\x27\xfd\xb9\x87\x61\x53\x7e\xfd\xb0\xde\x3e\x9b\x7f\xf5\xe7\x56\xde\x78\x73\xde\x30\xac\xf7\x5f\x77\x0e\x8d\x3e\x1d\xe3\x36\xa0\x1f\x0e\xc1\xa6\xee\xeb\xf1\xce\xaa\xd4\x7e\x5d\x86\xe9\xe5\x54\x58\x8e\x85\x7a\x89\x95\xfa\xb6\xf0\x3c\x68\x31\xf1\x4f\x7b\x1c\x73\xf5\x6f\xce\xd5\x9d\x8b\xbb\x88\x05\xbd\x0f\xd7\x8b\x38\xf9\x83\xf5\x62\xa0\x14\xed\xdd\xf5\x82\x0d\x7d\x7d\xbd\xf0\xef\xff\xa1\xf5\xe2\x21\x54\x3a\x1f\x70\x3d\x2a\x6e\xd3\x33\x0b\xa7\x39\x15\x40\x2a\x50\x16\x0a\x91\x37\x68\xf2\x10\xc8\x41\xfc\xed\x2b\x2b\x9a\xe8\x44\x12\xca\x60\x97\x07\x2d\x43\x99\x30\x3b\x94\x2a\x0f\x2f\x89\x3e\x51\xa6\x7a\xff\x74\x7e\xbd\x2d\x1d\xe4\x11\x38\x37\x27\xa3\x11\x5e\xdb\x61\x83\xfb\x75\xae\xad\xf8\x2d\xf8\xa4\x93\x0a\x0c\x54\xdc\x9c\xf8\xde\x5b\x94\x9a\x6f\x2d\xea\xa9\x47\x0e\x2d\xf5\x71\x94\x26\x1f\x82\xc2\x8c\x34\xa3\x9e\x83\xf6\x7d\xc9\x97\xc3\x45\x2d\x79\x5f\x5e\x7c\xbf\x9c\x67\xb1\x00\x14\x68\x70\xb6\xbb\x2f\xe7\xb5\x20\xba\xe2\x23\xa4\xdb\x4c\xad\x8d\xad\x22\xb5\x06\x72\xe0\xa9\x24\x57\x9e\xba\x82\x0d\x2f\xfb\x46\x55\x46\x82\x4a\x87\x02\x7f\x2c\xaa\xcf\x4f\x4d\xdd\x02\xc9\x57\xc9\x50\x2a\x15\xea\x6a\x2e\x50\xce\x1f\x79\x5b\x6a\x3f\xc7\x31\x42\x71\xa0\x16\x5e\x91\xe3\x50\x37\x83\x06\xa2\xce\x44\x45\xe1\x3f\xa6\xcf\x40\x14\x1e\xe5\xc9\x57\x48\xae\x4c\x4b\xa5\x95\xab\x9e\x1b\xa4\x1b\xc9\xad\x3c\x3f\x99\xef\xb9\x10\xde\x9f\x6b\x1c\x34\x1b\x25\xbd\x51\xfc\x3d\xf7\x0e\xb4\xcc\x7a\x5e\x8b\xfc\x0b\x12\x7c\x08\xcc\x31\xa8\x45\xd6\x5e\xe7\x4e\x61\x7b\x0d\x26\x8b\x85\x99\x66\x3e\xd0\x75\xe1\x83\x8a\x34\xa6\x96\x79\x13\x1f\x8c\x66\x7b\x18\xcd\xef\xa2\xa4\xaa\xcc\xd4\x5b\xde\x1a\x65\x11\xef\xe9\xf4\x83\x1e\x5b\x68\x98\xce\x7e\xd0\xf4\xe5\x75\x91\xee\x76\xec\x5c\x2b\xc9\xd4\xef\x0a\xbc\x05\x8c\x66\x75\x52\xcf\x52\xb2\x1e\x25\xc0\xb6\x2d\xa8\xe4\x23\xdb\x82\xf6\xa0\x33\x70\xbb\xa6\xba\x85\x59\xd7\xc5\x48\xe1\xd8\xd6\x4a\x7b\x65\x23\xf7\xca\xf8\x4a\xab\xfa\xba\xd5\x68\xf3\xde\xa2\xad\x0b\x12\x8e\xd5\x58\xa5\x30\xc9\x21\x35\x2f\x27\x03\x63\x3e\x4a\x9c\x90\x30\x65\x21\x55\xe9\x24\xc0\x1b\x95\xda\x27\xd5\x56\x37\xff\x2b\x0a\x1f\x6b\x32\xa0\x6b\xfd\xb1\x2b\xb1\x51\xcb\x20\xe0\x6a\x6c\x4b\xcb\xd1\x6a\xd0\xf3\x16\x77\x06\x32\x7a\xef\xcd\x56\x3b\x5a\xad\x96\x84\x44\x33\x14\x16\xc4\xb3\x36\xf0\xd0\x45\x79\x51\x56\x96\x92\xe3\x49\x07\x49\x8a\xfc\xc1\xdc\x16\x84\xb1\x99\x57\x03\x5c\xa1\xae\xac\x17\xcc\xbf\x6a\xad\x4e\xea\xef\x4a\xd6\xcb\x1e\x4f\x6d\x47\x73\x27\xb6\x86\x05\x58\x7e\x7b\x2b\x89\xce\x65\x05\x11\x57\xdd\x40\x78\x55\x2c\xb5\x0d\x8f\x18\x92\x91\x48\x51\x93\xb9\x7d\x06\x24\xb3\x04\x93\x3e\xf1\x9a\x1d\x54\x14\xc4\xaa\x41\xfb\x7f\x85\x49\x6c\xd2\x56\xb7\x3f\x6b\xdb\x98\x27\x6d\x69\x3c\x3f\x75\x9f\xda\x73\xdc\x9f\x84\xbd\x7d\x1f\x16\xfd\xa3\x71\xff\x10\x92\x9d\xf3\x9f\x5c\xfc\x04\xfb\xb3\x6f\xf5\x05\x5c\x98\x12\x4c\xa9\x05\xfa\xaa\x48\xf2\xaa\xa6\x03\x70\x30\xb0\xd0\x4a\x68\x74\x2e\x93\x62\xe7\x74\x13\xda\xbc\xe5\x5b\x3e\xf7\xf1\x56\x52\xf3\x61\x5e\x3a\x79\x47\x8b\xa6\xa9\x47\x9d\xec\x64\x7e\x0d\x1c\x36\x66\x98\x35\x26\x49\x41\xc8\x77\xd4\xa4\x44\xfd\x07\xcb\x3f\xb0\xbf\x52\xf1\x11\x65\x20\xa8\x02\x89\x9b\x27\x87\x60\x09\xce\xc7\xd4\x73\xe0\xc0\x74\xc6\xce\x7e\x56\x03\x2d\x51\x40\xb2\xb4\x11\xda\xc4\x76\x97\x3c\x62\x62\x0d\x1e\x0a\xe8\xdd\x35\x89\xf5\xc8\x08\x09\xf3\x9f\xc3\x36\x3b\xb0\x3c\xcc\x3e\x0b\x01\x4e\x64\xa0\x09\xae\x08\xbb\x04\xeb\xc1\x3c\xf7\xad\x7e\x87\x1c\x1d\x9f\xce\xa0\x15\xbe\x93\x08\x55\x91\x03\x80\x34\x5d\xfc\xb7\x40\xcd\xcd\x47\xb0\xb6\x9e\xa4\x97\xcd\x50\xa0\x09\xc2\xaa\xa6\x87\x0c\x43\xff\x06\x13\xa3\x3e\x0c\xce\xf7\x80\x3e\xa2\xfd\x88\xb6\x36\xd0\x75\xf9\xb2\x63\x60\x5f\xcd\xb9\x32\x2d\x3e\x31\x95\xdc\xd8\x3e\x64\x0f\x44\xc0\x20\x50\x53\xeb\x93\xce\x0c\x19\x7d\x08\x08\x43\xa9\x40\x80\x09\xe5\xa0\xde\x22\x0a\xba\xce\xf3\xd3\x58\x91\xf8\xd5\xda\xd6\x45\xfb\x48\x43\xb1\xbb\x59\x1a\x23\x8d\x4d\x66\x22\x5a\x9f\x92\x7b\xe0\x24\x3f\xd2\x91\x60\x8d\x54\xf8\xbc\x79\x43\x9c\x2b\x41\x08\x04\x39\x5f\x2a\x63\xe6\xe0\x06\xe3\xf5\xe5\x00\x77\x91\x96\x85\x88\xa9\x0b\xd9\xf5\x97\x01\x82\xf9\xb1\x0a\xb3\x26\x63\x5d\xc4\x07\x51\xcd\xd8\xc6\x73\xc2\x98\xfc\x7b\xee\x2b\x4c\x6f\x82\x97\x5a\x02\xb7\x54\xf6\xed\xc2\xf7\x78\x92\xf8\xa1\x30\x1a\x43\x72\x82\xad\x0e\x0b\xa5\xd2\xa4\xa9\x3e\xd4\x08\xc5\x29\xf3\x4a\x5e\x75\xa8\x71\x4f\x8d\x6d\x13\xf8\x9d\x59\x23\x9a\xa3\x89\xb4\x45\x25\xe8\xdb\x00\x3b\x81\x7d\x2e\x64\x34\xd2\x43\x35\x61\x51\xb9\x04\x9f\x87\x96\x5d\x40\x56\xb1\x35\xa3\xd6\x31\xa0\x27\xa2\xcf\x4f\x33\xcf\x54\xbb\xad\x6a\x90\x89\x83\xbe\x01\x4a\x36\x10\xa7\x42\x41\x2b\xaa\x86\xf0\x7e\x37\xc8\xf8\x02\x15\xec\x2b\x01\x22\x43\xbe\xba\xe6\xb9\x21\xfc\xd4\x0b\x47\x51\x9b\x2f\x62\x7e\xe5\x65\xcc\x0f\x1c\x8c\x3e\xfe\xcd\x47\xd5\xd8\x2a\x21\x42\x75\x26\x05\xb0\x1a\xd9\xe4\xd4\x67\x08\x64\x56\x6b\x1b\x8b\x1f\x0c\x59\x02\xd9\x75\x20\xba\x2d\x3b\xd1\xa8\xa3\xed\x1d\x74\xc7\x83\x1c\x0f\xf8\x70\x7c\xe5\xf6\xe5\x71\xf8\x72\x34\x80\x0f\x5d\xf8\x15\xbe\xf1\xc3\xbd\x21\x6f\xc0\xcf\x8f\x1f\xc7\x9f\x8f\xe3\x78\x1e\x6f\xcc\x7d\x69\xe0\x05\xdc\x68\x06\x1b\x27\xc3\xa4\x82\x68\x15\xfe\x45\x50\xb4\x0d\x7e\x0f\x8b\x33\x3e\xdd\xbf\x5d\xee\xa7\x2c\x67\x33\xf1\x09\xe5\x72\x88\xbc\xc6\x01\x12\x7c\x42\x7e\x1e\x50\x5d\x68\xed\xfe\xe9\xfe\xfd\x65\x7f\x71\xde\xd9\xda\x47\x0b\xca\x63\x86\xe1\xcb\xfb\xb5\x08\x7c\x3d\x37\x20\xf5\x7d\x6e\x03\xff\xe2\xa6\xb0\x8e\xc4\xf8\x5b\x81\xaa\xc2\xa2\xd3\x92\xe6\x58\x32\xdc\x6e\x21\xf6\x12\x44\x02\x99\x4a\x0e\xd8\xcc\xba\x6f\x6b\xd0\xa9\x23\x91\x41\x1e\x37\xb7\x0b\x5f\xd8\xe5\xc6\xe8\x09\xcb\xfe\x2d\x14\x3c\x02\xd5\xab\x49\x88\xcd\xd2\xd6\x77\x1b\x31\xa5\xea\x4d\x0c\x3b\x63\xaf\x35\xcd\x5a\x10\x10\xb4\x99\xd7\xa5\x6a\x4d\x22\x05\x02\x95\xc3\xb8\xfd\xf6\x00\xd9\xcc\x79\xf3\x0b\x2b\xd8\x78\x2d\x95\x81\x52\x92\x0f\x0d\x86\xfe\xd0\x85\x0f\x08\x19\xcd\xe5\x08\x0a\xcc\x96\xa9\xd0\x38\x1b\x59\xfc\x23\x40\x79\x84\x37\xda\xb1\xc0\x95\xa3\x78\x3c\x0a\x23\xb4\x01\x65\x15\x34\x12\x80\xd1\x13\x85\x5f\xe9\x30\x8a\x8e\xe7\x27\xad\x2d\x8d\xd9\xae\x5a\xdb\x6d\xe9\x6d\xb8\x03\x77\xf3\x9f\xbf\xe1\x0f\x75\x6e\xb8\xce\x71\xf1\xfd\xb8\x9f\x1b\x9d\xd3\x06\xd7\x90\xc5\x18\x71\x07\x7b\xdc\xd2\xb5\x4e\x6f\xeb\xf9\x49\x46\xf5\x15\xa5\x5c\xbe\xda\x14\x1f\x7a\x6a\x3e\x42\x4e\x8f\x8d\x49\x1f\xfa\x51\xe7\x3f\x46\xec\x1f\x80\x08\x6a\xf9\xf4\x52\x7a\x2f\xa9\xe7\xbc\x92\xc8\xae\x6d\x85\xd6\xcf\xe0\x28\xde\x17\x5f\xa0\x08\xe4\x5f\x4c\x0f\x90\x3c\x3e\x06\xdb\x92\x05\xe6\x1f\x61\x58\x1d\xde\x90\x1b\xa2\x15\xe1\xda\x01\x05\x69\xf7\xab\x7d\xd1\x01\x5d\xc2\xf3\x93\x5f\x3e\x1d\xd5\xf0\x4a\x51\x6f\x44\xaf\x84\x9b\x52\xd5\x93\xe0\xd7\x47\x34\x55\x0c\xd7\xa5\x55\x4d\x9a\x1b\xc5\x8d\xdc\x86\xeb\x24\x6a\xa3\x9a\x18\x20\x8f\x9f\x2a\x16\x76\xa3\xf8\x8d\xe4\x79\xc6\xc4\x07\x6b\x9f\xfd\x67\x31\xbb\x6c\xca\xf0\x12\x74\xbd\x49\x99\x23\xe4\xa3\x14\x39\x74\x13\xea\x91\x0b\x66\x74\x50\x84\xac\xa5\xde\x06\xf0\x5c\x95\x6a\xe9\xd0\x4c\x09\xf5\xff\x56\x41\x9b\x24\x92\x34\xf7\x34\x7d\xa9\xcb\xeb\x62\x06\x16\x4a\xa0\x86\x47\x22\xed\xe6\x8e\x7f\x57\x3c\xb1\x3f\x30\x88\x8f\x72\x12\x32\x1b\xac\xf7\x9e\xf0\xbe\x19\x89\x3d\xf4\xd1\xab\x9f\x0f\xaf\xfe\xc4\x4e\x8c\xea\xdb\xdb\x5c\x91\xa5\xc8\x1d\xc0\x45\xfa\xce\xe0\x87\x72\x97\x2a\x94\xe0\x17\x11\x3f\x0a\x07\x15\x6a\xf4\x4b\x98\x9e\x41\xff\x09\x45\xc8\x4e\x98\xca\xf0\xbd\xa1\x6f\x84\x1a\x43\xfc\x7f\x11\x94\xa0\x81\xa9\x39\x09\x5f\x08\x3e\x5a\x14\x82\x90\xf3\xd5\x1d\x5b\x98\xa8\x01\x14\x51\x92\xf6\x36\xef\x06\x00\x7a\x3b\x11\xe2\x40\x99\xcc\xbc\xe3\x46\x7b\xdb\x51\xdc\x3e\xe6\xa7\xba\xd5\xa8\x37\x43\x74\xbe\x6c\x95\x41\xb3\x92\xa4\xdc\x32\xc5\xec\xc1\x13\xd3\xf2\x81\xb2\xa3\xfe\x4c\x27\xfd\x0b\x0b\x54\x08\xbd\x5a\x98\x10\x44\x39\x3c\x56\x57\xa0\x69\xdf\x27\xb3\xff\xe5\xaf\x3f\xfe\xbf\xf2\x7f\x3d\x04\xc4\x3f\xbf\x92\x2a\xec\x35\x5f\xbb\x56\xb2\x79\x52\x71\xfc\x58\xd5\x7c\x29\xf7\xed\xd9\x06\xd3\x5e\xa1\xc3\x44\x96\x0e\x1b\x71\x7b\xdb\xc2\x28\xc9\xa2\x73\x92\x1a\x2a\xea\x04\x83\x1f\xd1\x02\x6c\xcc\x02\x66\x9d\x73\x3f\x3f\xdc\xbf\xbc\x9f\x71\xb4\xb2\x59\x46\xb6\x87\xe5\xb2\xb2\xd2\x44\xd1\x0c\x53\x27\xd0\xb4\x96\x9b\x7f\xa0\x0c\x03\x26\x6a\x14\x85\xef\x64\x0d\xf1\x09\x47\x4a\x11\xb7\x8b\x0a\xf8\x7f\xcf\x8f\xfb\xab\x43\xce\x53\xb7\x81\x7c\x8a\x9b\x84\x05\xec\x1e\x2d\xef\x43\x21\x37\xe8\x3b\xdd\xe8\xe1\x3d\x8c\xab\xfb\x4c\x37\xfd\x20\x26\xf3\xbf\xe5\xf3\x83\x1e\xe2\x67\x79\x77\xb7\x9e\x35\xb9\x55\xc6\x44\x14\x15\xfb\x31\x17\x28\x5c\x39\x0f\x38\x9c\xf7\x93\x22\xe8\x86\x65\xc0\x64\x6b\x09\x9f\xdb\x8e\xe4\xc1\x56\xc8\xb5\xe7\x36\xdb\x52\xe6\x26\xc0\x15\xf8\x6f\x65\xfe\xea\xd0\xe7\xa7\x3e\x46\xaa\x21\xad\xdb\xb9\xa1\x35\x37\x5e\x10\xc6\x0f\xc8\x9f\x7f\x00\x60\xb5\xd9\x96\x7d\x5d\xe1\x2f\x65\x3f\xbe\xe5\xd1\xd0\x2b\x4f\x38\xe5\xf9\x49\x64\xd8\xeb\x86\xc9\xc8\x7b\xe8\xa8\xb1\xf1\xa4\xb0\xff\x7c\x49\xdc\xf1\xaf\x5b\x4b\xc6\x0a\x84\xf3\xb8\x38\xb5\xb8\x9f\x63\x25\xb5\x0e\x4e\x78\x48\xe1\xa7\x51\xf6\x05\x7c\x7c\x3b\xca\x47\x29\x27\xc6\xa8\x9c\x89\xa4\xd9\x56\x6f\x6e\xd8\xaa\x19\x91\x8a\xb8\x9d\x78\xcc\x78\xca\x76\x56\x3d\xc4\x53\x9e\xd2\xe2\xfc\x78\x7e\x8f\x9a\x5f\x92\x77\x2c\x35\xaf\x8b\x82\x91\x0e\xb8\xd5\x10\x59\x97\xb6\x62\x4d\x37\x01\xd7\x1a\x28\x7a\x16\xf3\x01\x3c\xfb\xe6\x37\x0c\x42\xbc\x9e\xac\x5f\x0e\x7e\xa7\x81\xb4\x13\x29\x6f\x58\xf8\x6b\x2c\xbc\xf0\x67\x3e\x74\xa9\x0a\x79\x70\x7a\x10\x43\x6f\x21\x25\x22\xe0\x6d\x28\xb6\x1b\xea\x07\xb2\x40\x4f\xce\xed\x5d\x5f\xf8\x65\xf7\xef\x15\x62\x2d\x46\x3a\xfe\x0e\xb6\xce\xea\x5b\x1e\xa7\xc2\x48\xf1\xbe\xfa\xbc\xe3\xd7\x7c\x83\x7d\x30\xd4\x7f\x4f\x3b\xfd\x12\x86\xfa\xfe\xa1\xc7\xf0\xc1\xb6\x32\x1f\xa2\xf8\x9f\x4f\x80\xc6\xb4\x99\x4a\xee\xac\x1f\x67\x5c\xbe\x6d\x0b\x83\x83\x51\x01\x5a\x59\x2e\x91\x2a\x8b\x9c\x88\x62\x69\x5b\x4d\x28\x62\x6f\xc8\x66\x45\x55\x81\x42\x3b\x1e\xe5\x78\x05\x14\xf9\xaf\x0f\x7a\x7e\x6a\xbd\xa5\x8a\x19\x42\x16\x72\x03\x2d\x33\xf2\xfe\x90\xa6\x2c\x07\x49\x4e\x2d\x7c\x1f\xa4\xe6\x42\x59\x52\x39\x50\x39\x61\x1d\xdf\x01\x36\x95\xe5\x22\x59\xca\xb7\x36\x7e\xf9\xed\xad\xab\xce\x43\xac\x11\xf8\xe1\xd4\x35\xe4\x2b\x4e\x55\x06\xe3\x6a\x24\xbe\xfb\x42\x2d\xb4\xa7\x81\x48\xa4\x16\x5b\xd1\x97\x36\x41\x53\xa9\x89\x51\x99\x5a\x22\xb6\xa8\xba\x81\xce\xf1\x7e\x1b\xf7\x5b\x5b\x5e\x7c\x3c\xbf\xdf\x16\xc2\x5f\xb0\x7c\x81\xd6\x60\x7a\x7f\x2f\x42\x39\x09\x84\x7e\xd6\x85\x90\x53\xc8\x31\x06\xc9\x01\x2a\x2a\xed\xb2\x11\x48\x8f\x9c\xbc\xe9\x91\x87\x3f\x44\x39\x28\x15\x11\x3a\x70\xa0\x0f\xa8\x40\x47\x43\x86\x26\x1d\x5c\xea\x21\x5a\x05\x48\x34\xd5\xa2\x41\xb4\xed\xbb\x31\x38\xba\x3b\xf8\xc7\x66\x4e\xa3\x05\x15\x14\x0e\x71\xc3\xd8\xa7\xad\x2f\x0a\xa8\x0d\x40\x4c\x38\xdd\x99\xf0\xeb\x9d\x60\xf0\xf7\x4f\xaf\x5f\xfe\xd0\xfc\xfa\x7c\xc8\x30\x7c\xb6\xd3\x80\x6b\x2d\xb5\xd9\xd7\x99\x93\xf6\x5b\xf3\xee\xed\x34\x6c\xc5\x88\x17\x86\xa8\x02\x28\x31\x49\x0c\x57\x8f\x22\x92\x1b\xc0\xd0\xa1\xab\x0e\x6a\x2f\x3b\x04\x09\x24\x0c\xfb\xd7\xc4\xae\xfe\xfd\x4d\x34\xbb\x93\x25\x37\x08\x99\x12\x66\x11\x40\x5e\x9b\x7b\x78\x9d\xb5\xbf\x44\xfb\x22\x61\x46\x5c\xb0\xb5\x4f\xf5\x46\x66\x1a\x99\x29\x5a\x0d\x22\xfc\xb2\xa1\x8f\x18\x7d\x95\xc2\xc2\xa6\xc5\xec\xb6\x54\xdf\x80\x7c\xf3\xad\x59\x6f\x82\xaa\xd3\x9a\x2f\x7e\x07\xed\xbc\x7f\xbb\xd3\xd4\xde\x6b\x1f\xef\x75\x0d\xb8\xc0\xf9\x1c\x37\x51\x5b\x17\xd0\x09\x36\x8c\x67\x75\x5f\x1a\x12\x60\xbe\xc3\xb0\x8b\xba\x3f\x8d\x3f\xcb\x01\x64\xee\xc7\x43\xcc\xff\x39\xac\xe4\xe5\x1f\x17\x8b\xfe\xfc\x10\xb8\xff\x5c\xde\xab\xa8\xce\xcd\x4d\xb1\x72\x13\x48\x13\xbe\x5c\xa6\xa8\x17\x13\x12\x40\xcb\xa1\x01\xd4\xc8\x9c\x24\x40\xd7\xc1\x4d\x9f\xd3\xbf\xb5\xd0\x79\x97\x3e\x28\xb7\x85\xb7\x4e\x22\x1f\xfc\x48\xf8\xd3\x4d\x5b\xbb\x9a\xbf\x10\x6d\x1a\x82\x35\x87\xca\xcc\x8e\xe2\x92\x79\x57\xa3\xd9\x43\x9d\xe6\xd6\x14\x63\x0a\x0a\xcf\x8d\x94\x18\xbb\xb1\xac\x5f\x65\x13\x30\xad\x1a\xca\x1f\x55\xf7\xb8\xab\x72\x5b\xc4\xda\x4a\x6c\x58\x75\x67\xbc\xfa\x4e\x9c\xd5\x2f\x7f\xf1\xeb\x73\xb7\x07\x33\x86\x06\x17\x24\x47\x58\x0e\xca\x8e\xca\x3a\xcc\x1e\x0f\x14\x34\xb6\x78\x6c\xcb\x19\x0f\x33\x56\xf0\xba\x36\x59\xfd\x3a\xd5\x9f\xab\x93\xa1\x4c\xf9\x5c\xf2\xb5\xe7\x12\x3f\xbf\x7f\xb8\x3a\x3c\x84\xba\x3f\xd7\xff\xf5\x92\xbc\x47\x5a\xbe\x95\x91\xaf\x4b\xcf\xe5\xd6\x73\x09\xa2\xb8\xc9\x82\xc0\x97\x6c\x50\x2f\x48\x9d\x6e\x7e\xd0\xd5\xcf\xf0\xd3\xc0\x15\x87\x13\x5e\xd0\x41\xdd\x49\xa2\xfe\x89\x60\x4b\x97\xdf\xb2\xae\x3e\xc4\xf4\x3e\xb7\x77\x02\x52\xa6\xc3\x87\x6b\xb9\xaa\xf7\xca\x1c\x76\x5d\xaa\xe9\xad\xcd\x8e\xe1\xaa\xa3\x3d\xe3\x98\x62\xf5\x66\x0d\x22\x84\x76\x5b\xfc\x93\xa8\x3d\x3f\x35\x29\x69\xb6\x71\x5b\xfc\x04\xcd\x15\x27\x2e\x9a\x2b\xbf\xf2\x96\x6f\x8b\xe6\x82\xef\xfc\x27\xbf\x9b\xd9\x6d\xe9\x71\xad\xbe\x10\xce\xa2\x7e\x51\xbb\x49\x33\x5c\x74\xe8\x75\xf1\x9f\x6d\xf6\x30\x26\xbe\x72\x75\xa9\xd2\xa2\x1d\x3d\xdb\xd1\x68\xa7\x47\x3b\x3d\xda\x19\xc5\x5e\xb5\x73\xb9\x37\xf4\x41\x8f\x3e\x84\xf8\x3e\xf7\x3b\x68\xb7\xb4\x54\x49\xc3\x06\xc5\xf8\xc1\xca\x5d\xb8\xbb\xa5\x9e\xd6\x82\x8f\xb1\x9b\xf6\xbe\x79\x77\xf7\xe4\xbf\xf7\xad\xfa\x77\x3c\x30\x98\x6b\x11\x0e\x78\x7e\xea\xd9\xd2\x2c\xe5\x57\x8d\x02\xfe\x11\x47\x7f\x73\xc3\x47\xb3\xde\x91\xad\xa6\x0a\xe8\xa4\xa0\x16\x7f\x24\x90\x04\xa9\x58\x9a\xf5\x44\x8b\x53\xa2\xc4\x0d\x42\x5f\x21\xc8\x9f\xd3\xb6\x05\x55\xa5\x2c\x84\x84\x63\x70\xb9\x2d\xcd\xda\xea\xbf\x16\xb9\x69\x6e\x5b\xa5\xe4\x90\x50\x26\x06\xda\xe1\xe4\xb0\x9e\x75\xe7\xb5\x9e\x9f\xa6\x6a\x9a\xc1\xa7\x51\x52\x94\xa9\xc5\x4d\x7c\xaa\xb8\x8d\x5e\xa8\x6b\x08\x81\x94\xeb\x22\xa3\xdd\x96\x51\xf2\xab\x2b\xd5\xb8\x52\x7b\x7d\x25\xb4\xb0\x1f\x8d\xfe\x59\xed\xa2\x87\x98\xe6\xe7\xf1\x38\x7f\xed\x44\x99\xa9\xfa\xea\xde\xb7\x5e\x93\xb1\x44\x89\x21\xe4\x5d\xa0\xbe\x35\x8e\x3a\xe1\xc9\xdb\x40\x19\xf3\x4e\x0e\x60\x81\x7e\x01\x44\xc2\x5b\xea\x67\xd5\x39\xbf\x1c\x00\x0d\x4d\xbe\x24\x98\xd0\x94\xc4\x60\x75\x7a\xed\xaf\x0a\xb7\x76\x0a\x3a\x92\xd3\x1f\x8c\xe5\x30\x97\x45\x0e\x46\x6e\x42\x48\x51\xdf\x37\x08\x6b\x20\x24\x98\x24\xd1\xe4\x4a\xb7\x83\x1b\xa3\x80\x99\x03\x10\xea\x15\x44\xf0\x1b\xea\xa3\xa9\xb1\x74\xd9\xc8\xd1\x35\xa2\x7c\x4d\x0f\xf9\x0e\xd0\xc5\x8c\xfd\xe0\xa7\x39\x84\xfe\x24\x18\x22\x80\x4e\x08\x25\xfe\xbd\x30\xcd\xb6\x0a\xe8\x30\x25\x02\xef\xf7\x07\x63\x1a\x53\xf7\x85\x49\xb5\xe0\x18\x14\xe6\xee\xe0\x77\x73\x16\x1c\xa5\x0d\xa1\x8a\x03\x65\x4f\x6a\xce\x51\x39\x81\xf2\x0c\x80\x4f\xb8\xf7\x90\x66\xdb\x34\x45\x09\x6a\x42\x59\x60\xed\xa9\x4e\xc6\x09\x2a\x35\x39\x4a\xd2\xd0\x1a\x2c\x17\x16\xa0\x56\x8b\xd8\x6f\x5a\x82\xa9\x9a\xdc\x5d\x05\x21\x04\x8c\x7e\xb2\x3a\x37\x3b\xa0\x52\x51\xfa\x3f\x7c\x75\x26\xe9\x2d\x90\x3f\xf4\xc0\x10\xef\x86\x60\x02\xba\x54\x18\xfc\x21\x63\x23\xca\xd2\x35\x41\x53\x50\x50\x90\x1b\x91\x0c\x0d\xd5\x8f\xb5\x0c\x48\xbf\x43\x8c\x2c\xc4\xad\xf6\x7a\xd0\x0d\x4a\x4b\x51\xd5\x9d\x20\xbb\x53\x0e\xb9\x02\x64\xe5\x93\x80\xc8\x25\xb1\x1a\x9f\x7a\x36\x1b\x82\x4e\xd0\x73\x6a\x90\x0e\x32\xbb\x6c\xd2\x0c\x65\x28\x6e\x8c\xf5\x90\xea\x9a\x21\xc9\x19\x79\xce\x71\xf0\xba\x8c\x23\xfc\x13\xd9\x7b\xd0\x19\x21\x8f\x4a\x92\xf8\x46\x49\xa1\x96\x0e\x81\x7e\x5c\x1d\xf8\x7a\x90\x67\x13\xc2\x82\x09\x9d\xdd\x52\x11\x05\x2c\xae\x85\x74\x84\xbb\xf4\x50\x0c\xa2\xca\xc2\x21\x2e\xc9\x0a\xee\xe0\xa7\xcb\xc9\xca\x4a\xfd\xf8\xad\x80\x51\xbe\x98\x2f\x84\x41\xda\xe5\x06\xd2\x06\xe0\x36\xa8\xcb\xa5\x31\x66\x1c\x64\xd8\x9f\x22\xe5\xb1\xa0\x8e\x18\xa4\x1f\x2f\x09\x4e\x4e\xd1\x33\xb3\xe0\x30\x28\x87\x0e\x52\xcb\x6b\xcd\xd0\x8b\xb3\x60\xdc\x34\xff\x63\x4c\x2e\xd0\x17\x83\x38\xfc\xae\xad\xa6\x41\x60\x31\x34\x0d\x77\x81\x21\x92\xf2\x52\xdf\x42\x0f\x65\x97\x7c\x17\x26\xca\x24\x2e\x59\x46\x1a\x54\xe6\x22\xaf\x64\x0a\x9d\xae\x42\x48\xa1\xa5\x10\x2f\x8a\xc4\x54\xd4\x04\xa5\x8c\x4a\x34\xc5\xbf\x94\x92\x23\x17\x14\x82\xc2\x05\xef\xda\x2d\x46\x6b\xa0\x91\xda\x6b\x30\x26\xc0\x0e\xb3\xb6\x97\xc6\x8a\xe4\x9a\x53\x0d\x1e\x81\x8a\x74\x3b\x28\x9c\x11\xf7\x8e\x72\x6e\x52\x63\x61\xbb\xb3\xd5\x1f\xe4\xb6\xf4\xb6\x02\xfb\xb2\x69\xe9\x69\xba\xe3\x0c\x79\x15\xdf\x2b\x55\x52\xcd\xc9\x26\xb1\x47\xf0\xa8\xcd\x90\xab\x98\xa4\xaa\xd7\x82\xdf\x50\x86\x81\xa1\x6c\x63\xd7\x4e\x6e\x6a\xca\xfa\xd9\xda\x13\xca\x17\x30\x41\xa1\x56\x61\x93\x12\xb7\x42\x35\x5b\x32\x7c\xec\x08\x2f\x2f\x52\x88\xda\xc5\xcb\x22\x25\xc5\x85\x55\xc1\x74\xa8\xc0\xac\x00\xd9\x99\x49\xaa\xd0\xa5\xb4\xc0\xa1\x84\xe0\x5e\xac\x53\xd0\x13\xcd\x0d\x5a\x3f\x50\x61\x69\x51\xeb\x81\x7b\x93\x42\xca\x7c\xf0\x8a\x1c\x85\x78\x78\xbb\xa8\x73\xd0\x88\xaa\xd6\x8c\x21\x54\x25\xd0\x02\x66\x54\x9f\x01\xfa\x0a\xec\x0c\x6e\xbd\x04\xc4\x0d\x59\xd3\xe7\xa7\xa1\x9a\x6a\x1b\x6b\x71\x93\x71\x25\xad\x48\xef\x2b\x62\x21\xc5\x3d\x0d\x53\x4b\x15\x54\x51\x14\x30\xa4\x5d\xd4\x0f\xb9\x78\x0e\x2d\x50\x12\xd9\x85\xc1\xa6\x79\x97\x24\xea\x87\xbe\x12\xaa\x9c\x7b\x2a\xb6\xa9\x24\x45\x0c\x9f\x7a\xfc\xbe\xaa\x32\xe6\x6f\x9f\xea\x55\xca\x33\x03\x05\x7d\xa2\x96\x04\x3c\x98\xcd\xcd\x1f\x1f\xb1\xf4\xb8\x43\x40\xaf\x85\x13\x4e\xd9\x5e\x76\x5e\xa9\x57\x93\x55\x20\x22\xb4\x92\x37\x50\x6f\xd3\x67\xc7\xac\xc8\xd1\xd6\x9b\xdc\x16\x79\xf1\x3b\x96\x93\x0a\x91\x12\x5d\x05\x62\x5e\xe7\x57\x92\x3e\x4a\x58\xcd\x87\x84\xd5\xe7\x3b\xb2\x0c\x29\xa2\x4a\xb2\x4c\x48\x59\x24\xd6\x74\x20\x5b\x38\x7a\x88\x13\x52\x49\xe3\x4c\x52\xc8\x34\xc2\x7f\x13\xc9\x79\x80\xd4\x48\x47\x2d\xa0\x82\x32\xa0\xa5\x20\xbb\x6a\xd4\xb4\xd0\x0c\x91\x1d\xd3\x34\x7a\x0c\xb1\x00\xe2\x09\xcb\xc4\xb9\x50\x4b\x2a\x87\x79\x83\xb9\xe8\x2e\xb1\x1e\x50\x62\x56\xf7\xa7\x9e\x60\x63\x89\x8e\xd4\x18\x93\x00\xea\x6a\xa6\x26\xb0\x1f\x41\xc3\xd8\xa0\x53\x44\x74\x25\x52\x98\xc8\x56\x85\x6a\x47\x87\x00\x4d\xe0\x68\x0b\xff\x56\xca\xe6\x36\x47\x30\x2b\x96\x03\x1d\x05\x65\x1b\x4b\x8a\xa5\x28\x8d\x43\x3f\x8a\x1f\x52\xe7\x66\x1f\x6a\xa5\xbe\x60\x72\xe3\x69\x07\x4c\x0b\xab\xd9\xa6\x7e\x1b\x64\x68\xc1\x2c\x8e\x25\x2b\x62\x32\xaa\x54\xff\xee\x29\x76\x98\x1c\xe2\xa7\x9b\x3f\x8c\x42\x32\x1d\x39\x83\x61\xc9\x0a\xe8\x08\xa1\x19\x12\x35\xec\x2d\xa8\x77\xad\x70\xc1\x5a\x2a\x77\xcc\x0b\x04\x79\x02\xfa\x1a\xe4\x3f\xde\x01\xa1\x36\x4a\xb9\xdb\x8d\x72\x62\x4c\x76\x20\xb9\xdf\x1b\x85\x33\x8c\xbc\x03\x50\x30\x81\x02\x8e\xf8\x12\xe6\x6f\x3a\xe4\x37\xbd\x59\xa6\xf9\xc6\x99\x17\x5e\x62\x83\x67\x15\x51\x01\xd7\x97\xe6\xd4\xf4\x24\xa6\x0f\x88\xee\xa0\x44\x93\x9b\xe3\x8a\x19\xb3\xbb\x5d\xde\x05\x21\xc8\x1e\x3a\x82\x26\x1b\x46\x54\x02\xff\x20\x1c\x7b\xc2\x4b\xc0\x7c\x05\x86\x82\x50\x40\x30\x05\x85\x8a\x41\xdd\xca\x9f\x9d\x7f\x6f\xe6\x2b\xae\x0f\x2a\xe2\x47\x63\xcd\x91\xdc\xc2\x46\xaf\x07\x69\x6d\x61\x6e\xca\x72\xf4\x29\x36\x61\xdf\xda\x4b\xc4\xcf\x26\x05\x1a\x73\x44\x84\x01\x33\xa1\xc9\xa6\x64\x79\xaa\x7d\x5f\x04\x80\x6c\xb2\x86\xba\x03\x65\x59\x37\x2a\xf4\x30\xd9\xaa\x28\x75\x4b\x02\xb7\xab\x73\xa7\xc3\x02\x03\x45\x8b\xc2\x9f\x60\x4a\x81\x70\x17\xf6\x25\xdc\x00\xc8\xc0\xa4\x24\x68\x08\x6a\x3b\x63\xe1\x83\x1c\x14\x16\xab\x53\x29\x97\xcd\x9a\x6f\x4e\x75\x50\x66\xd8\x32\x63\x42\x1b\x65\xde\x6b\x4d\xc2\x04\x85\x6d\x85\xba\x90\x62\x40\x38\x92\x97\xa1\xb5\x8d\x61\x69\x28\xd0\x6a\x65\xb3\x64\x4d\xe9\x01\x38\x47\x9d\xe7\xac\xd4\xa3\x51\x65\x61\x1c\x99\x5d\x69\x29\x7d\x48\xe9\xf0\x5d\xc9\x8f\x29\xdd\xcf\x77\xcf\xb6\xe7\x54\x80\x7f\x6e\x99\xf8\x60\x68\xcf\x2f\x52\x75\xc5\xda\xe4\xb6\x64\x70\x3a\x1d\x98\xd2\xd1\x0f\xba\xa8\x85\x46\x25\x44\x45\x81\x12\x92\x63\xe0\xfb\xbe\x82\x92\xb7\x45\x4a\x8d\x3c\x6f\xcb\x7c\x1b\x1b\xb4\xb7\xa9\x7b\xab\x63\x17\x21\xba\x9b\x68\x82\xe6\xe6\x63\x37\x77\x26\xfd\x1e\xb0\x0a\xad\xf7\x5b\x82\x63\x2a\xd4\x7a\x3f\xfe\x1b\x73\x07\x90\x2e\x6f\xf1\x97\x31\xa1\x27\x3b\x66\xb2\xbe\xba\xd9\x91\xd1\x02\xda\x6b\x92\xa4\xe5\xe7\xcb\x53\xf7\xf7\x21\xa5\xae\xcc\x61\xaf\x00\x1a\xc5\x45\x94\xa4\x85\x54\x86\x43\x33\x54\x82\xf1\x9f\xfc\x13\xf9\x9a\xf0\x61\xc5\xc4\x9b\xeb\x79\xfe\x5b\x5d\x19\xd7\xe5\x9f\x8e\xce\x45\xdf\x0e\x68\xac\x4e\x68\x97\x40\x35\x59\x3a\x24\xc7\xe0\xf4\xa3\x4b\x91\x2b\x2b\x35\x6c\xd6\xe1\xdd\x19\xc3\xfa\xe8\xdb\x0d\x41\xc2\xc0\x23\x94\xb9\x07\x0b\x99\xda\x36\x40\xc5\x25\x21\x92\x01\xd0\x24\x93\x83\xa3\x9f\xc1\xaf\x3e\x0e\xc2\x8e\xc6\xf7\x45\xfc\x6f\x25\x89\xf8\xe9\xac\x9b\xa4\xd2\x91\xa2\x83\xa4\xbf\x0f\x6d\x65\x8d\x20\xd6\x09\x9f\xc9\xc0\xc7\xe6\x95\x62\x93\xf7\x3e\x47\x07\xbf\xf5\x72\x76\xfc\xbe\xf3\xcf\xd1\x25\x6b\x20\xbe\x94\x63\xd2\x3b\xed\xf8\xc3\xd9\xb1\x67\x57\x43\x6b\x35\x6f\x58\x52\x4a\xec\x76\x02\xd6\x3a\x2e\x25\x3e\x4a\x2f\x5b\x27\x69\x62\x70\x38\xc1\x1d\xad\xac\x3a\xb1\x23\xb5\x52\x92\x28\x16\x10\x28\xd4\xe0\xb5\x21\x09\x81\xe4\xe9\xc4\xd2\x38\x68\xed\x10\x22\x30\x8f\x00\xe4\xba\xdc\xc7\x8f\xdc\x87\xec\xc6\xc1\xf3\xf2\xf9\xf6\xd7\x23\xe9\x98\x5e\xaf\x06\xde\x8b\x91\xa3\x2f\xc7\xeb\xd9\x05\x3a\x7d\xd4\xb4\xee\x83\x46\x2a\x85\xe4\x76\x84\x79\x81\x3f\x85\xd2\x57\x23\xe7\x4f\xbb\xec\x02\x5e\xab\x2a\xac\x3e\x3d\x5f\xe9\x7e\xbe\xe7\x8f\xe2\xed\x5f\x1e\x96\x8e\x93\x8b\xab\xd5\x92\x0a\x54\xa8\x29\xb3\xab\x07\x3f\x91\x49\x78\x15\x60\xff\x9c\x08\x15\x40\xc6\x91\x75\x4c\xc8\xc7\x15\x21\x41\xd3\x62\x03\x0b\xeb\xb6\x10\xb1\x0c\xf3\x3a\x60\x56\x28\x62\x05\xf8\xf4\x5e\x1d\x4b\x8d\x32\x66\xb7\x77\xa0\x81\x53\xde\xdc\xed\x1d\x9a\x26\xd8\x0e\xb5\xb0\x50\xc1\x97\x22\x2c\xf1\x3e\x58\xc5\x7d\x62\x5f\xce\x27\xe8\x7e\x1a\x2a\xb3\x4f\xa1\xed\x4c\xc3\x78\x50\x49\xb0\xdf\xcd\xd4\x72\xd2\x1a\x80\x6f\x94\xf4\x73\xfc\x3f\x4b\xb0\xe4\x85\xbe\x7b\x24\x59\x51\x6d\xc4\xc2\x69\x37\x88\xc0\x3a\x0a\xd9\x2a\x10\x05\x96\xc4\xb8\x86\x6d\x2d\x1d\x5a\x01\x74\x34\xda\x56\x07\xdd\xcc\x9a\xcc\x8d\x14\x6a\xe1\x64\x4d\x06\x15\x6c\x85\xb7\x89\x3a\x8a\x72\x18\xfe\x14\x57\x4f\x63\x3f\x04\x65\xf7\x46\x01\x70\x0d\xc1\xb4\x53\x07\x24\xde\xcf\xa2\x3d\x30\x0a\x30\xc7\xf9\x5c\x54\xce\x46\x0e\x33\x86\xbf\x98\xac\x00\xbe\x8c\x4b\xc8\xf6\x92\xa2\xd0\x34\xe0\xf7\x3a\x42\x3e\x9e\xee\x6b\x3d\x83\x2e\xf0\x3c\x4b\x99\x08\x6c\xd2\x43\xc0\x4b\x1b\x1b\x95\xb5\x8d\x17\xb1\x41\xc3\x17\x8d\x67\xda\xb1\xda\xa0\xee\xe9\x9e\x0e\x3c\x28\x12\xaa\xa5\x22\x6e\x85\x7b\x5b\x7c\xfc\xb4\x04\xe0\x22\xef\xe8\xb0\x0d\x82\x11\xa9\xd6\xbb\xdc\x37\x0c\x68\x37\x5a\x4b\x4f\x43\xea\x0a\xc0\x86\xf6\xd5\x3d\xb7\x54\xf4\xf9\xc9\x66\xf2\x3f\xcf\x92\xd4\xf4\x26\xd9\x74\x5d\x1a\x28\xce\x0d\xaa\x36\x26\xd0\x1d\x1a\x39\x99\x29\x2b\xff\x01\xe6\x1b\x6e\x1d\x79\x3b\xfe\x72\x50\xbe\x8b\xb8\x4d\x3b\x0f\xf1\x45\x5a\x18\xc5\x5c\x5a\x7d\x7e\xea\xdd\xed\xcc\x59\xd6\x4a\xd8\x6e\xb9\x19\xb4\xfb\x32\x2a\xbe\x7c\xcb\xa0\x23\xbb\x1c\xc5\x39\xc0\xa7\x05\x1c\x05\x35\x69\x4a\x8d\x93\x11\xb4\x03\x4a\x88\x95\xe8\x15\x08\xaf\x1e\x2e\x02\xbc\x59\xb7\x1b\x61\x49\x0e\x0c\x6d\x48\xb9\x53\x7f\x23\x45\x2e\x54\x0c\x2a\x45\x80\xb2\x0d\x0e\x72\x56\x56\xa0\x6a\x3f\x94\xce\x05\x6a\x60\x20\x14\x21\x82\x0b\x3c\x5c\xc2\x44\x29\x6c\x23\xea\x16\xb5\x43\x18\xaa\xf6\x70\xd6\x6b\x8a\x4a\x0d\x38\xa2\xbe\xa4\x4e\xfa\x13\x41\xb8\x88\x40\x6d\xae\xd9\xbb\xd8\xdd\xb9\xde\x4b\xd2\xd2\x4e\xc1\x01\x63\xda\x8d\x73\x0f\xe5\xe7\xc1\x2b\xcf\x74\xcf\x48\x0c\x6b\xfb\xc0\xb3\x9b\xe4\x3e\x36\x4b\x33\x95\x24\x19\xb0\x0a\xdf\xe7\x64\x03\xdb\x62\x4b\x52\x66\xaa\xf9\x66\xa3\xac\xb5\x92\xed\x62\x53\x22\xb5\xa0\x33\xb6\x1b\xe6\x1a\x2c\xa9\x26\xa1\x76\x76\xd9\x10\x1e\x27\x39\xf6\x6d\x29\x32\x3e\x32\xad\x1e\x81\x24\xdf\xbf\x03\xd6\x52\x37\x6a\xa4\xea\x9b\x64\x07\xde\x2b\x63\x44\x0d\xed\x51\x57\xbb\x1f\x95\xb6\x04\x0f\xbf\xa8\xbe\x8d\xe2\x5b\x3f\x31\xce\x63\xe9\xed\x51\x79\x5b\xfa\x15\x68\x61\xf0\xbf\xcf\x31\x01\x68\xb4\x92\x26\x54\x2f\x77\xa3\x9a\x1d\xd0\xc0\x5f\xe5\x22\xb9\x2e\xa3\x95\xaf\x5d\xb4\xa2\x04\x88\x15\x40\x2c\x00\xd2\x71\x6d\x3d\xea\x7f\x30\xc0\x33\xec\xd8\x32\x2e\xe7\x86\xbd\x91\xcc\x8f\xe0\x59\x46\x02\xc7\xb8\x2d\xd2\xa0\x2f\x3d\xd2\x81\x14\xfe\xb5\x3e\x14\x1e\xfe\x4d\x09\xaa\x08\x11\xbe\xd6\x87\x42\x49\xeb\xaf\xf4\xa1\xbc\x79\xad\xed\x8f\xbd\x40\x15\xfd\xd5\x05\x2e\xbf\xe3\x15\x44\x46\xf9\x23\xbb\x08\xed\xff\x9e\x7d\x74\x79\xfb\x12\x8f\xbd\xf4\x7b\x3e\x44\xf1\x01\xf8\x07\xb7\xff\x6e\x27\x5d\x7e\x97\x4b\xfc\xb1\x9d\xe4\x6b\xf1\x98\xed\xa6\xb5\x1d\x92\x5f\x0f\x62\x5c\x37\x69\x19\xcc\xf8\xb7\xa5\x8a\x5e\xc7\x6c\x1f\x2d\x87\x8f\x68\x9f\xbb\x22\xb0\x95\x92\xbe\xa2\xe5\x70\x43\xc1\xc1\x57\xf5\x22\x74\xe4\xb7\x05\xdb\xda\x51\xa2\xf0\x4a\x2f\x42\x7d\x8b\xad\xb0\xc2\xcb\x78\xc1\xcb\xf0\xb2\x4f\x5e\xb0\x23\xb0\x4b\x4e\x62\x85\x57\x3d\xfd\x8a\x9d\xe1\xec\x68\xb6\x3e\xa7\x7e\x43\xe3\x97\xbf\xb3\xf5\xd7\x94\x12\xbf\xf3\xad\x97\x91\xff\x98\xc6\x6d\xa0\xa6\xf8\xd6\x80\x27\xfc\xb6\xb3\xbe\xf5\x4e\xd8\x7a\x91\xf6\x5b\x6e\xe9\xb7\x35\xde\xba\xfe\x2e\x8d\x5f\xde\x6c\x7d\x82\xf1\xe1\x0f\xba\x75\x5f\x57\xff\x98\xd6\x51\x14\x37\xdb\x9d\x22\xf2\x55\xeb\x20\x9b\x7b\xd1\xfc\xe5\xbe\x18\x9d\x94\x84\x2f\x2f\x00\x02\xba\x37\xae\xf0\x87\xbd\x57\x6f\xfc\xf7\x7a\xaf\x6f\x36\xce\xd7\x7a\xf9\x83\x5a\xff\xe3\xde\x2b\xc5\x4f\x30\x59\xff\x88\x11\x8f\xe6\xff\xb0\xb7\x4a\xe2\xd4\x3f\xea\xb5\xa2\xf5\x6f\x9d\xae\x97\xbf\xb3\xe7\xff\xa8\x17\xfb\xc1\x16\xfd\x88\xa0\xfc\xe1\x3d\x56\x5f\x19\x23\xcd\x71\xa8\xc3\xa9\xef\x79\x43\xbf\x4d\x2d\xd2\x46\xc8\x4b\x86\x32\xd9\x87\x27\x0c\x10\xaf\x4c\x4d\x0a\x95\xd1\x91\xc2\x59\x68\x41\x24\xb0\xe9\xa4\xb3\x81\x68\xfc\x19\x8a\x20\xb7\x9b\xea\xb8\x5a\xe3\x2f\xaa\x63\xe3\xe9\x34\x67\x42\x44\x15\x87\xcd\x60\x2c\x20\x39\x36\x13\x1b\xa1\x14\x2a\x95\xca\x0a\xff\xc3\xba\x93\xa8\xc3\xfa\xbf\x1f\xca\x80\xbe\xe4\x77\xa8\x59\x3a\x94\xb0\x39\x42\x5a\xd4\xf3\x8b\x44\x1d\x4a\x5a\x82\xd2\x01\x94\x1a\xf3\x14\xef\xb7\x11\x59\x95\xa9\x09\x91\x42\x0a\xb2\x57\x21\xab\x08\xc0\x57\x51\x5b\x43\x95\xb6\x5c\x93\xcd\xad\xf7\x17\x64\xc8\xfd\xa0\xc9\x46\xbc\x14\x31\x9d\x0a\xed\xb8\xe2\xad\x0f\x09\x58\x32\xc9\x58\x10\xa2\x80\xae\xc1\xfd\x26\x40\x1d\x43\x78\x37\x4b\x86\x25\x90\xd0\xde\x9b\x4a\xf5\xd0\xa2\x01\x75\xf1\x93\xeb\x8c\x90\x6e\xa6\x44\x46\x80\xc3\x79\xf2\x22\x56\xe8\xdb\x56\x90\xd1\x0e\xd3\xd4\xc0\xe5\x01\x7e\xa3\x5a\xd3\x32\xc9\x53\x84\x49\xd4\x41\x7d\xae\x35\x08\x15\x91\xb4\xee\x07\x93\x38\xf1\x1a\x28\x45\x3b\xe4\x26\x40\x78\x00\x60\x5e\x88\xc6\x23\xe2\x5c\xce\x1a\x6e\x64\xd3\xf9\x5c\x93\xf4\x47\xac\x57\xe0\xbd\x81\xb7\x11\x2a\x5c\x38\xd5\xc0\x1b\x9f\xd3\x68\x90\x47\x9d\x94\xfb\x40\xf2\x8a\xdd\x3d\xc8\x47\xdd\x76\x99\x96\xa0\xdc\x99\xbb\xa4\x21\x2f\x69\x69\x18\xf7\x39\xde\xd0\x72\xbc\xb3\x80\x22\x65\x4a\x9f\xf0\x0d\xf9\x0b\x3a\xe0\xe0\x9f\xea\x86\x16\x62\x48\xec\xe7\x20\x39\x07\xce\x76\x96\x3f\xe0\x95\x62\x90\x2c\x31\x4a\x08\xc9\x8f\x04\x42\xf6\x6b\x5b\x8c\x0a\xbe\xdc\x4f\xac\x8e\xc0\xc3\xa0\x9d\x42\xba\x12\x01\xd8\xea\x78\x51\x0c\x40\xde\x5f\x21\xc4\xe1\x03\xbe\x57\x27\x24\xd1\xc4\x66\x3c\x09\x46\x03\xd2\x17\x31\x48\xca\x7e\x1f\x3a\x1f\xad\x79\x0f\x60\xd9\x2f\x0f\x25\x75\xbd\x8d\x97\x62\xd8\x39\x87\x27\x55\xc9\xd4\xc8\x12\xc0\x88\xd4\x7b\x27\xac\x05\xfc\xfd\xb2\x69\x38\x2d\x2d\x9c\x96\x72\xaa\x2c\x9f\x3e\x4b\xa1\xcf\xd2\x52\xc1\x69\x7e\xd6\x32\x59\xd4\x85\x9d\x80\x9d\x5a\x7b\xc2\x55\x7c\x47\xd0\x91\x22\x15\x39\xcf\x92\x51\xcd\x79\x97\x96\x01\xe1\xc3\x07\x26\x84\xf9\xa5\x0f\xb1\x20\xd8\xd1\x8f\x15\x1f\x4a\x7e\x00\xbb\x7e\xd1\x77\xe2\x56\x34\x01\x6d\x6d\x50\x0f\x99\xb7\x66\x6d\x75\xbf\x30\x02\xa6\xbd\x2a\x67\x5a\xef\xba\xb6\x39\x92\xd6\xb2\x2e\xaf\x3e\xf8\x1c\x8b\x58\x94\x64\x2d\x67\xd8\xc9\x18\xe4\x45\x0d\x66\x71\xbf\xaf\xaf\x4b\x27\xaf\x44\x61\xc1\x2b\x04\xb3\x80\xf0\x82\x58\x98\x34\x1e\x80\xef\x4d\xa8\xd7\x34\x11\x98\x92\x91\x5a\xbd\xb1\xe1\x82\x1d\xb1\xdb\xde\x24\x95\xbe\xfa\x19\x90\x47\x54\x88\xad\xa4\xb1\xfb\x7b\x1a\xf8\x3b\xa4\x0a\x01\x28\x2a\xd0\x98\x2c\xc0\x01\x2d\xdd\x3e\x20\x76\x07\x07\xe0\xaf\x3a\xd1\xde\xa9\x4b\x6f\xd4\xf5\x5d\x61\xad\x4f\xbd\x99\x94\xd5\x1f\x13\x19\xf1\xdb\x62\x45\x9f\x9f\x6a\x6f\xc9\xea\x58\x8b\x8f\xc1\x6e\xeb\xf2\xea\xc3\x22\xe0\xde\xf5\x4e\xfc\xa8\x21\x69\xc8\x1f\x7c\xd0\x12\x8c\xa8\x2a\x6c\xa9\xa1\x7c\xe1\x65\x4b\xda\x7a\xc4\xaa\x25\x5b\x5e\x0b\xb4\x31\xe7\xba\xbc\xfa\xb0\xc8\x98\xcf\x4f\x2a\xbd\x21\x62\x71\xa8\x55\x5b\x38\xf2\xad\x5f\x42\x7b\xa6\x93\x9d\x3a\x94\x02\x2b\xeb\x76\xa0\xd3\x53\x30\xf8\xfd\x29\xfc\x00\x7c\x0f\x78\x64\x4f\xe5\xc8\xb8\xf8\x5b\xfe\x2d\xe7\x9b\xb1\x4c\x4b\x39\x32\x66\x6a\x3d\xc4\xa8\x6d\x30\x69\xd2\x33\x45\x38\xca\x58\x8b\x95\x24\xa3\xdd\x4a\xce\x5f\x39\xa0\x0c\xef\x69\x40\x44\x72\xaa\xbe\x6c\xee\x14\x7a\xc0\x57\x98\xec\x46\x21\x59\x56\x61\x97\x11\x98\xae\x9e\x2f\xb7\xa5\xe4\x8c\x6b\x2c\x32\x90\xae\xc0\x71\x3d\x8e\xf2\x63\x3e\x9a\xad\x0f\xa0\xa2\x2f\xe5\x1d\xb0\xbf\x0c\xbf\x5d\x99\xfd\xba\x54\x41\xb1\x53\xb9\xfa\x07\x51\x90\xb4\x82\x90\xd7\x57\x20\x52\x90\x15\x74\x13\x0c\x05\xf2\x3f\x7d\xaa\x57\xa8\x81\x8a\x3f\x33\x57\x16\xff\xe0\x63\x4a\xd4\xfb\x69\x83\x1e\x93\xa8\x26\xd3\xbd\xb7\x34\xfa\x55\x15\x8c\x02\xc8\x67\x42\x77\x03\xf5\xab\x7d\x5b\x94\x86\xac\x91\x35\xcd\xf4\x10\xb1\x31\xa0\x65\x35\x8f\x44\x75\x3c\x23\x38\xde\x88\x6a\xf5\xed\xc9\xf7\x98\x9c\xa8\x4f\x05\xc8\x04\xcb\x2f\x67\x64\x6e\x35\x8a\xed\x3a\x86\x47\xe9\xd7\xa5\xd5\x71\x21\x80\x4e\x8e\xaa\x2e\xd4\xa7\x48\x63\xd6\x17\xa9\x29\xed\x3d\xa9\xb5\xab\xce\xb6\x69\x06\x26\x15\x8c\x3e\x00\xc2\x0e\xe6\x52\xfc\xc3\x75\xb1\xac\x3e\x97\x3a\xcf\xe9\xdd\xae\x3a\x64\x43\xfd\x8f\xe8\x29\xa1\x52\x98\x6a\x8c\x65\x9b\x8b\x3f\x3e\x5c\x17\x6d\x19\xf2\x93\xcf\x4f\x58\xd0\xf5\x5a\x67\x89\x6a\xf1\x1a\x55\x62\xa1\x29\x04\x1b\x2a\x93\xdb\x71\x0f\x19\xdb\x4a\x63\x1f\xf4\x24\xa8\xb0\x69\x06\x89\x19\x10\x5e\x1d\x50\x8b\x8a\x20\x3b\x7c\x4f\xc4\xee\x35\x64\x71\x58\xc4\x7e\x8a\x02\x82\x73\x8d\x95\xb7\x04\xff\xf9\x6b\xa0\xd6\xdb\x75\x69\x18\x19\xed\xa3\x31\x28\x0f\x20\x92\x2f\xf5\x9f\x9c\x32\xad\x4c\xe8\x7b\xc9\x75\xb1\x2e\xb7\xa5\x8f\x7e\xb5\xa1\x9b\x20\x49\x28\xb3\xd3\xf8\x75\xc3\xb9\x93\x79\x8f\xd9\xb8\x62\xbe\xd5\x22\x8f\xe4\x9b\x73\xee\x49\x60\x57\x63\xa9\x71\xeb\x6c\x36\x62\x3a\x51\xea\x8d\x34\x30\xd4\x7b\xd0\xd1\x3d\xa1\xa6\xa8\xf8\x90\x51\xbb\x2e\xd2\xdb\x4d\x46\xb9\x0a\x5e\xdf\x3c\x4c\xa4\x49\x7d\xfb\x12\x79\x17\x1f\x24\x65\xb4\x64\x63\x5c\x17\x19\xf5\xa6\xd2\xaf\x32\xe6\x26\x60\xd6\x16\xb2\x78\x18\xf3\x34\x80\xd0\x01\x8a\x8e\xd2\x42\xf3\x1d\xa3\x9d\x06\x29\xb6\xc6\x7d\x41\xa6\xad\x5f\x8b\xc8\x46\x16\x8e\x64\xac\xc7\x40\x85\x2b\x4a\x27\xf2\xbd\xe3\x09\xfe\x17\x32\xcf\x80\xd5\x7c\xb4\x90\x9f\xe5\x6a\x2e\x56\x13\x19\xcf\xfb\x65\x57\x31\x48\x17\xc5\xfc\x69\xdd\x6d\xd7\xab\x1b\x85\x80\x26\x52\x71\xac\x1f\xd8\x2d\xd6\x19\x68\x06\x88\xb0\xa5\xae\xfe\x06\xec\x7c\x2a\xd5\xab\xdb\x06\x5b\x71\x1b\xd8\x66\x1a\x73\x9f\x92\xcc\x9e\x9f\x26\xf2\x56\xe3\x6a\x32\x6f\x4b\xef\xd7\xc5\x3f\xf4\xfe\xd1\x38\x7d\xf4\x9b\xda\x7b\xf4\x09\x75\x68\x9a\x31\xd9\xb2\xb0\xa4\x0d\x53\x8e\xd9\x71\xbd\x4b\xf8\xf0\x17\x7e\xa6\x56\x1e\xcb\xfa\xee\x1f\x5f\x1c\xf1\xf2\xcc\x17\x4d\x3e\x3f\x0d\xd1\xa4\xa8\x32\xc4\x9b\x84\xa4\x2d\xe0\x54\x3d\x75\x03\x40\x30\x93\xf5\xbd\xad\x38\xa0\xe8\xd6\x43\x2b\x31\x13\xd4\x03\x2d\xb0\x58\x24\x90\x1e\x35\x89\xac\x3d\x68\x43\xf2\x3c\xcc\x54\x5f\x7d\xd3\x00\xd6\x8e\xa5\x7d\x4d\xf0\xe1\xb2\x19\xd3\xee\x20\xb0\x26\x61\x49\x26\xb0\x7a\xf3\x6b\x82\x5b\x3c\x51\x2e\x40\xba\x9b\x00\xad\x78\x27\x21\xf9\x0a\x20\x0c\x8a\x3b\x25\xb8\x53\xfc\xfd\x82\xbd\x04\x60\x19\x0c\x20\x8a\x5b\xb1\x36\x81\x65\x9e\x72\x92\x9c\xf5\x74\xfc\xa9\xed\xe7\x91\x07\x59\x7d\x34\xb6\xc7\x15\x5a\x30\x0c\xf0\xda\x0b\xb9\xcf\x2d\x04\xc8\x75\x5f\x2c\xa4\x97\xcc\xcd\x1a\xc0\x8b\xc8\xee\x91\x88\x41\x03\x76\x59\x65\xec\x0b\xdc\xbd\xe1\x7e\x93\x2f\x80\xb8\xc7\x92\x7a\x73\x6f\x14\x3b\xfb\xba\xa8\xe5\x34\xf5\x56\x74\xae\x46\x82\xdb\xbe\xf5\x99\x7c\x61\xeb\x96\xca\xa0\x56\x85\x6f\xf2\xba\xea\x28\xa0\x08\x50\xc8\xbc\x11\x63\x63\x32\x77\xd3\xd8\xe5\x40\x53\x9d\xd3\xfd\xf6\xd0\xc7\x71\xdf\xf2\xa1\x75\x2e\x0f\x59\xe5\x2f\xfd\xc5\x5a\xab\x69\x8c\x49\xc7\x18\x76\x8f\x85\x6c\x6d\x67\xb5\xf2\x51\x37\x52\xfb\xc1\x09\x23\x24\x6b\x1c\x39\x9d\xbf\xdf\xa5\xe1\x6b\x0b\x75\xa8\x28\x75\x66\x7b\xcf\x4f\xcd\x34\x59\xa6\xff\x6e\x41\x37\x44\xd2\x3a\xd0\x47\xc0\x85\x5c\x28\x76\x20\xd9\x92\x4e\x54\xd3\xf6\xbe\x55\xe8\x24\x24\x37\xfa\x4b\xde\x5a\x30\x0e\x69\x4e\xe0\xb4\xab\x28\x7e\xdf\xb4\x24\x84\x29\x00\x54\xca\xa1\x06\x37\xca\xea\x8b\x8e\x99\xdb\xe9\xd5\xbd\xfe\x0a\x85\x58\x12\x8a\x31\xd6\x70\xde\xc7\x1f\x53\xf8\x25\xd5\x56\x6c\xaf\x6d\x42\x8d\xd6\x07\x1f\x0b\x4e\xaa\xee\x21\xac\xd9\xf2\x31\x4d\x86\xb8\x95\xe8\x63\xa0\xdb\x6a\x85\x8a\xab\x02\x82\x0e\xad\xac\x7a\x66\x68\x02\x3c\xb6\x11\x65\x10\x5a\x8e\xfc\x13\xe7\xd0\xfd\xd8\xcb\x5d\xc6\x03\xf6\x4e\x40\x64\x7d\x66\x6b\xa5\xd8\xb2\x72\xf4\x6f\xcb\x04\x51\xe2\x48\x02\x0a\x45\xac\xd2\x9d\xc0\x32\x9d\xdd\xf7\x99\x5b\x81\x2f\xf4\x8f\x54\xb1\x3d\x89\x8e\x99\xc6\xe8\x5c\x20\x0f\x7c\x77\xc8\xed\x76\x39\x95\x77\x01\xb0\xe5\x67\x62\x6d\x89\x5e\xe5\x47\xd9\xe3\x7b\xd9\x7c\x91\x45\xb1\xf3\xa9\xda\x4b\x5e\x65\xfc\xe5\x23\x8f\x4b\x1e\xf2\x8b\x5f\xc6\x7b\x6e\xab\xef\x8d\xad\xaf\x14\x86\x6e\x83\xa0\x7e\x5d\x97\xa2\x39\xe9\x44\xd9\x95\x81\xc6\x88\x58\xb4\xd2\x11\xb4\xc3\x2e\xa6\xfd\xa8\x74\xa9\x7b\x81\x7e\x86\xfa\x47\xcc\xe8\x56\x76\x99\xa9\xda\xc6\xea\xea\x54\xb1\xce\x8c\x00\x3e\xf9\x08\x1a\x20\x8c\x99\x2b\xc4\xdb\xa6\x6e\x08\xc2\xd1\x6a\x93\x17\x92\x68\x41\xe3\xac\x28\x0c\x01\xd6\x2c\x28\xa8\xc8\x7a\x03\xdd\x6a\x95\x15\x36\xa5\xd5\x0e\x32\x0b\x04\x1b\xc0\x8c\xd0\xdc\xb3\x1d\x49\xa0\x68\xd9\x8c\x4c\x51\x63\x5c\x56\xcc\xd0\xe1\x8b\x67\x1b\x39\x15\xd4\x89\x0f\xb0\x40\xc5\xea\x08\xd4\xe4\x59\x5c\x16\xc5\x7b\x28\xe8\x59\xe1\x8d\x17\xca\x62\x83\xa9\x19\xc0\xe3\x15\x8e\x78\xe1\x32\xe9\x5d\xaa\x22\xc9\x9a\xae\xa8\xfa\x30\x50\x5b\xb8\x57\xa3\x58\x2a\xfc\x6d\x63\x0b\x1f\x13\xbc\x09\x19\xb5\x01\xc1\x0e\x04\x29\x72\x50\xf5\x76\x5f\x3e\x57\x84\xac\x74\xf5\x61\xed\x76\x8c\xe6\x64\x02\x4e\x63\x9a\x66\xd9\x97\x8a\x45\x0f\x76\x39\x45\x60\x49\xe5\x90\xaf\xb6\xdd\xfd\x29\x43\xf5\xb4\x85\x3a\x21\xcb\x84\xb0\x40\xc0\x55\xab\xb6\xaa\xa0\x72\xc8\x36\x19\x21\x95\x44\x3e\xd9\xfd\x80\xfb\x91\x84\x7d\x61\x65\x5a\xe0\x7c\x83\x88\x36\xd8\xb7\x35\xb8\xee\xdb\xbe\x54\x39\x18\xcb\x4b\xd4\x60\x58\x49\x34\xd2\x2b\xba\xdb\xc4\xc2\x65\x2a\x6e\x3e\x6a\x9f\xab\xf8\xb2\x6d\x3e\x7d\x31\x34\x50\x8c\x32\x93\x12\x98\x3c\x1a\x9a\xf0\x7d\xa7\xbb\x37\xd2\xc2\x6c\x12\xb2\xc1\x23\xfc\x38\x32\x6e\x00\x2a\xfc\x28\x5f\xb0\xb5\x00\x17\x79\xd9\x4c\x92\x91\xf8\x01\xb4\xe1\x93\xe8\xff\x55\x88\x46\x04\x63\x98\x24\x94\x02\xca\xfc\xd0\xce\x7f\xc8\x0f\x7c\x99\xef\xf8\x9a\xc5\x07\x58\x19\x6f\x2a\x06\xec\x0f\x2a\x01\xfb\xaf\xa4\x01\xf6\x5f\x29\x02\x54\x69\x09\x74\x85\x59\xda\x0a\xb4\xac\x0f\x7a\x50\xcc\xf9\xd8\x0e\x35\x1d\xca\x4f\xf5\x36\x7c\x09\xcc\xe4\x76\x21\x48\xb3\xb0\x06\xe9\xf9\x49\xc6\x18\xbf\xe3\x7d\xf9\x03\xa7\x5a\x98\xca\xb8\xbc\x2d\xe4\x30\xef\xf2\x15\xd8\x98\x51\xff\x04\xfa\x12\x70\x2f\xf1\x83\xff\xac\xcd\xe7\xc4\x8d\xdc\x88\x88\x85\xfd\xe6\xd3\x66\x7b\x4b\x34\x02\x59\x96\x69\xe9\xcd\x4c\xc4\x55\x07\x28\xb5\x8b\xcc\xcd\x4f\x2a\xd4\x30\xaf\x2c\xd2\x9c\xe0\x73\xba\x7a\x9f\x82\x09\x0a\xf2\x46\xa0\xb1\xa2\xbf\xe1\x87\x5d\x48\xc9\x5d\x64\x5e\x75\xbc\x64\x54\xf8\x6d\xd9\x8d\xef\x8a\x3c\xb0\x3e\x7c\xf9\xfc\x6e\x38\x23\x14\xb3\xde\xbb\xe4\x99\x64\x7a\xfb\xc5\x30\x31\xf2\x4d\x1d\x0c\xfa\x4b\xbc\x96\xdf\x78\xd2\xef\xfb\x52\x2e\xf7\xb7\x22\x3a\x6e\xaa\x0f\xba\x1f\x3e\xbc\x1f\x15\x3e\x54\x29\xe8\xf0\xd5\xd7\xf8\xf2\x2d\x3e\x3f\x19\x8a\x03\xf2\x1b\xfa\x1c\xfb\x6f\x9e\x35\x9c\xbf\xad\xe4\x7f\x78\xfe\x5e\x9e\xa4\xbb\x61\xf3\x7b\xdd\xd8\x07\xe3\xf1\x31\x3d\x70\x17\x9c\xae\xd9\x07\xdf\xd7\xa0\x49\xa5\xe9\x06\x7b\x28\x35\x56\x54\xec\x87\x82\x38\x85\xa3\x19\xdc\xa6\x36\x2f\x4a\x47\x3b\xeb\x64\xf3\x51\xd0\x5d\x2c\xba\x45\x18\xf1\x67\xfc\xb1\x06\x32\xb5\xa1\xa2\x81\x97\x79\x03\x00\xb5\xe3\xdf\x15\x72\xcc\xd9\xae\xee\xe5\x7c\xcb\x61\x32\xfb\x3b\x87\xd9\x40\x70\xfd\xb2\xf9\xbe\xec\x7f\xf1\x23\xf8\xbc\xf8\x0e\x13\x0d\x56\x01\xbe\x47\x77\x3c\x20\xb6\x66\xc7\xe5\x96\x92\xed\xa3\x63\x55\xe7\x57\x8e\xfd\xe8\xb5\x3d\xe6\x30\xbe\xbf\x97\x5a\x6a\x4f\x06\x8a\x25\x23\xe9\x4f\x95\x0d\xa5\x94\xa8\xa8\x2b\x18\x41\x40\x16\x93\xe1\x0d\xc5\x97\x05\xb4\x65\x4b\x28\x47\x50\xb0\xc7\xa7\x47\xe8\x68\xfb\xd6\x5a\x8f\x02\xd7\x0d\x1c\x8a\x3d\xb9\x5f\xa8\x6e\x2c\x6a\xb1\xa4\x7d\x53\xf4\xab\x4d\x16\x33\xf0\x79\x24\x81\x97\x4a\xa2\x3c\xd5\x02\x8b\x5d\x92\x1d\x3c\x6a\x96\x6a\x11\x66\x2d\x16\xb7\xe5\x50\x5a\xd9\x13\xe8\x31\x2a\x62\x6b\x50\x96\xb3\x83\xaa\x07\xb5\x84\x08\x3c\x1b\x15\x25\x88\x3f\x81\x76\x32\x2b\x2a\xf5\xd4\x5b\x80\x84\x7d\x3f\xef\x56\xdd\xbf\x4a\x5a\x05\x6e\x16\xf0\xe3\x65\x0c\xd2\x1b\x29\x2b\x4c\x59\x5c\xbd\x61\x80\xb2\x96\xef\xac\xe4\x2f\xa1\xf0\x69\x92\x3a\x7c\x50\x9f\x69\x25\xa7\x9e\x59\xf1\x0d\x79\x3a\xf4\x32\x2b\x41\x8a\x25\x96\x83\x6b\x66\x1c\xb8\x21\x36\x74\x56\x48\x04\x51\x6a\xe4\xd5\x19\x39\xe7\xdc\x31\x49\xc1\x01\x1f\x4c\x9a\x8b\x82\x85\x16\x9d\xe4\xbd\x0e\xea\x00\xcb\x24\x45\x94\x8a\xae\xcd\x87\x42\xbf\xb2\xd8\x78\x56\x56\xd8\x29\x7a\x56\x74\x43\x49\x2d\x02\xc8\x08\x7f\xc1\x9a\x67\xba\xfa\x4f\x2b\x20\x5a\xe4\x31\x0d\xf5\xa8\xd3\x9c\xb5\xbc\x14\xa0\x14\x35\x5b\x39\x94\xea\xd0\xd5\x5f\xbc\xc9\x55\xfb\xbc\x2d\x45\xea\x75\xa9\x19\xd9\x9a\x28\x4f\x82\xc9\xdd\xed\x28\x58\xba\x2e\x96\xe5\x66\xd9\x56\x6f\xa0\xc2\xaa\x2d\xc9\xff\xee\x0d\xf8\xf9\x7e\x7a\x29\x28\xbb\x2b\x3e\x3b\x8c\x45\x78\x57\x3f\xcf\xaf\xfa\xd1\x13\x3d\xe6\x3b\x7e\x78\x27\xb1\xd6\x91\xbd\x2a\xab\xfb\x1f\xc5\xbd\xa5\x96\xaa\xda\x86\xf2\x14\x16\x46\x4b\x8f\xd2\xdd\x1e\x5b\x0e\x6a\x16\x77\xd6\xac\xaf\x4c\x24\xa9\xad\x20\xd2\x2f\xb2\x91\xa6\xb9\x9f\x85\x11\x1c\x99\x08\x5b\x84\x26\x32\x50\x3c\xd9\xfd\x93\x69\x6e\x67\xab\x08\xea\xc0\xea\x68\x24\x8b\x80\xd2\x5a\xd9\x96\x91\x22\x2d\x84\xfc\xef\xc2\x62\x86\x25\x66\xae\x16\x14\x9b\x37\xb2\xa0\xd4\x50\x62\x00\x89\xb1\x82\x7e\x9d\x4e\x77\x02\x2a\x61\xe3\x52\x82\x72\x66\xb9\x70\x2a\xa0\xbc\x6a\xa6\xee\x56\x41\x7e\x7e\xb2\x9a\xaa\xd9\x0a\x4e\x39\x1d\x2b\xc9\xe5\x40\x29\x9e\x42\x48\x1a\x66\xc9\xa4\xff\xa0\x6d\xc5\x8f\xb1\x69\x9a\xfe\x3f\x37\x21\xc0\x20\x24\xa9\xb9\x47\x86\x62\x7b\xe8\x74\x23\x1a\x70\x34\xe3\xf7\x3a\xa3\x1f\x27\x64\x85\xd5\x92\x66\x5d\xf1\xa3\xbb\xb9\xe3\xff\xdb\x60\x80\x64\x34\x59\xb2\x24\xa9\x48\x13\xba\x25\x94\x57\x45\xb2\xa2\xae\xd8\x22\xd5\xfa\x41\x7c\x70\x54\x77\x86\x74\x9d\x26\x8a\xe4\x25\x35\x77\x39\x93\x96\x7a\xd9\x28\x38\x8f\x1a\x3b\x74\x02\xce\xd1\xe7\x27\x5f\x0b\x5a\xed\x2b\xe8\xb7\x2b\x42\x7a\xe0\x38\x60\x9d\xb4\xd1\x34\x14\x3b\xcb\x49\x7c\x1d\x66\xe3\xa5\xa0\xf1\x1a\x0a\xd9\xf8\x3f\xe5\xaf\x79\x0a\x1f\xa0\xd9\xf4\xc3\x16\xb5\x82\xd3\x16\x94\xae\x28\x07\x13\xff\xdb\x96\x88\x87\x91\x30\x63\x5f\xca\xcb\x4a\x38\x2d\xcd\xdf\x8d\x82\xe7\xa1\xa5\x72\x08\x79\x1d\x87\xd3\x9a\x43\x4b\xf5\xf9\x18\xd5\xcf\x4f\x65\xd6\xd4\x47\xbd\xe0\xe2\x36\xf2\xfd\xe2\x64\x5d\x38\xaa\xfa\xe1\xd9\xd7\x10\xd6\x8a\x7a\x99\x01\x7f\xde\x2f\x2c\x23\xd9\xc8\x08\x59\xf2\xff\xd8\x13\xe2\x94\x3d\xda\x78\x7e\xaa\x63\xa6\xd1\x65\xc5\x0e\xdc\xc6\x4a\x61\x10\x92\x54\x0d\x1c\x7b\x30\x2c\x72\x5b\xe4\xf5\x18\xb0\xf2\xd9\x80\xd9\xe7\x1d\x2a\x2d\x95\xe6\x43\x0b\x5e\x2e\x04\x30\xd3\xb1\x97\xe2\x8a\x47\x4b\xcf\x4f\x6d\xf4\x34\x45\xc0\xd7\x5e\x73\x63\x08\x42\x8b\x46\xb9\x9d\x90\x1f\x01\x19\xc6\xc3\x5e\x54\x89\x0b\xa9\x5f\x88\x85\xe5\x33\xb5\xa3\xf4\x08\x81\x9b\x16\xdc\x18\xc2\xb9\xbb\x77\x12\x64\x00\x45\x03\x9a\xe3\x5b\xf6\xff\x3d\x3f\x8d\x21\x69\x4a\x5d\xa1\x85\x29\x99\xe1\x22\xb5\x19\xb3\x2f\xa8\x15\x68\xa5\xdd\x8b\x03\xa5\xa7\xbe\x2f\xd1\xc7\xbe\x22\xb8\x8f\x9f\xaa\x30\x31\x85\xd5\x43\x06\x77\xcd\xbe\xc7\x79\x64\x67\x90\xf1\xfc\x34\x47\x4e\x63\x36\x2c\x39\x65\x2a\xd7\x20\xb5\x76\x39\x66\x02\xb2\xca\xb4\x96\xc0\xa6\x9b\x86\x4f\x5d\x74\xb0\x26\xb5\xb6\xfa\xa6\x36\xdd\xfa\x14\xc5\xf4\xdf\x71\x0c\x43\x47\x63\x1f\xf7\xa4\xcb\xf4\xdd\xaf\x1c\x57\x90\x5b\x3e\xe5\xc4\x19\xd5\xf0\xce\x9d\xf8\x31\x41\x03\xa3\xa0\x63\x82\x16\xac\xff\xe8\x7e\xa5\x66\xed\x66\xfe\x32\xab\x5f\x4e\x0b\x16\x1d\xcd\xa9\xf3\xad\x7a\xc7\x6d\xa4\x09\x02\x17\x52\x0b\x46\xfc\x42\x5a\x4a\x90\x85\x0d\x8b\x42\x35\xc0\xa1\xd2\x32\x40\x16\xd3\x47\xa3\xd0\x2c\x22\x73\xe0\x25\x9a\x49\xf5\x36\xe6\x0c\x89\xca\xe1\x86\xca\xa8\x09\x39\x7a\x49\xe6\xc6\x67\x0d\xb2\x62\x2a\xdd\x12\x0c\x63\x20\x8f\xa8\x96\xd0\x8c\x3f\x46\x64\xfa\x78\x35\xdb\x51\x4d\x97\xe5\x63\xe8\xdd\xff\xf3\x90\xea\xfc\xfe\x35\x05\xba\x8f\x6b\x23\xcb\x84\xa5\x62\xbb\xb9\xdd\xa5\xfd\xb6\x08\xd9\x11\xdb\x61\x3e\x50\x6e\x60\xe4\x53\x6e\x60\xd4\x53\x6e\x00\x8f\x44\x10\x62\x0e\xb9\x01\x01\x0b\xe3\xb8\x79\x33\x11\xca\x4e\xa6\xac\x89\xdb\xfd\x5a\x4b\x31\x0a\x3e\xe7\xff\xfe\x1b\xb8\xbc\xbe\x03\xf7\x02\xfe\x87\x3b\x81\xc5\x24\x19\x99\x96\xb3\xcd\xfb\x85\x8e\x8b\x9f\xf1\x95\xbf\xef\x8e\x2e\x2f\x6e\x09\xed\x34\xdf\xf4\xfe\x3f\xf6\xfe\x64\x47\x72\x25\x49\x02\x45\xf7\xfe\x15\xf6\x03\x4c\x98\xaa\xda\x88\xde\xbe\x77\x77\xf1\x11\xb7\xcf\x00\x2e\xb8\x21\x40\xf8\x22\xbe\xfe\x42\x45\x94\x74\xcf\xf4\xc8\x88\x3c\x55\x75\xba\xab\x81\x42\xd5\x49\xf7\x70\xce\x46\x1b\x74\x12\x11\xfc\x70\x5c\x77\x7d\x1e\xf6\x0b\x9d\xeb\x25\x3f\xf9\xdb\x43\xee\xbd\x40\xcb\xbb\xb6\x9f\xa1\xe4\x58\x10\x49\x12\x28\xca\x6e\x85\x5c\xd6\xba\x88\xf9\x4a\xf7\x31\x86\x27\xbf\xe2\xf4\xc6\x6c\x1f\xe0\xf4\xde\xc3\x3a\x2c\x39\xdf\x17\xeb\x6d\xb5\xde\xb0\x18\xa3\x5a\x52\x93\x5b\x57\x06\x62\x33\xa3\x50\x93\x02\xc9\xad\x1a\x62\x9e\xd4\x28\xc9\x5a\x56\x94\x01\x7d\x74\x3b\x45\x1a\x7c\x7f\x8a\xcb\x10\xac\x73\x7b\x1b\xb3\xa4\xd2\xc8\x52\xa7\x2d\xb9\x9b\x59\xdb\x5e\x7d\x96\xf1\x41\xdc\x43\x58\x49\x7a\x27\x37\x7d\xc3\xed\x5c\x5e\x1a\x20\xa1\x8b\x32\xbe\xef\x76\x13\xd0\xa4\x23\xe8\xc8\xc7\x49\x0d\xed\xbe\x9f\x42\x5f\x26\x83\xbb\x5b\x35\x14\x32\x6c\x2a\x54\xc3\x28\x02\xa8\x0d\x3a\x4c\x88\xe7\x3e\x54\x33\x46\xea\x1b\x33\x59\xb0\x2c\x21\xa5\x44\x15\x0d\x7f\xc4\x64\x6d\x9f\xde\xc8\xb5\xa5\x28\xe4\x54\x92\xb2\x45\xcc\x26\x2d\x0d\xa5\x82\xa0\x7d\xdb\xab\xa6\x51\x59\x5b\x30\xfb\x6d\xf7\xd7\x8e\x8c\x7d\x49\xb8\xa4\x02\xcf\xbe\x04\x96\x16\x14\x25\x88\x06\x77\x42\xfc\x0b\x2a\x62\x4b\x5e\x55\x56\xf0\xd6\x04\xe9\x51\x45\x78\x5b\x25\x4d\x48\xa7\x2d\x40\x6e\x2f\x3e\x2d\x83\x63\xdb\x6f\x7a\xdc\x41\xe8\x81\x0c\xe9\x69\x12\x4d\xdd\x43\x45\x31\x51\x31\xc2\xc6\xfb\x9b\xc9\x48\x15\x37\xea\xcf\x0c\x30\xf0\xd8\xc1\x8b\x50\x32\x43\x1d\x3e\x32\x2f\x05\x8a\xf2\xfe\xd6\xa5\xa5\x89\x40\x7a\xa5\x07\x4d\x3d\xba\x5d\x52\x4f\x3d\xc1\x84\xb0\x04\xc2\x27\x49\x25\x95\x04\x98\x1c\xd1\xbc\x68\x52\xe0\xd5\x61\xb6\x53\xc9\x2e\x31\x6b\x19\xef\xf6\xbe\xe8\xfb\x5b\x9d\x8a\xbe\x27\x6e\xe9\x96\xa4\xa3\xa4\x21\x60\xe0\xc3\x01\xf4\xbc\x5a\x22\x7d\x72\x6f\x20\xd6\x10\xed\x49\xbc\x1b\xab\x2f\x42\xed\x5c\x88\x3a\x01\xe8\xb5\x91\x0b\x6b\x40\x02\xd7\x46\x32\xc4\x50\x0a\x24\x11\xc9\x83\x0f\xf6\x08\xf0\xa7\x12\xc8\x2e\x01\x9f\x16\x62\x91\x35\x7d\xe5\xce\xe8\x4b\x3a\xf7\x37\xfd\xcf\x90\x87\xea\x34\x7e\xcc\x7d\xed\x79\x23\x2d\x50\x93\x55\xea\xdc\x50\x00\x3b\xea\x0e\x23\x43\x72\x2a\x60\x54\x24\x65\xc2\x5a\x36\x18\xf6\xec\xd3\x91\xb9\xa2\x3d\xe9\x2e\x0d\xf8\xcf\x46\xe5\x69\x5a\x49\x7e\xca\x9e\xef\x7e\x95\xc5\x32\xb1\xe7\xeb\xcc\xdb\x32\x41\x14\x1f\x04\xee\x34\xa5\x4b\xe3\x14\x22\xeb\xc2\xee\xba\x64\x1a\x92\x54\x9f\x73\x43\x0c\x66\xe5\x22\xe0\xb0\x48\x2a\xc7\x52\x93\x56\x37\xae\x4a\xaa\x50\x69\x02\x33\xa1\xbb\xce\xb5\xd4\xd3\x65\x2a\x27\x74\xfe\x76\x2c\xbc\x61\xf8\x04\x25\x2e\xe5\x17\x55\xf4\x63\xe8\xcc\x26\xbf\x8d\x39\x53\xb1\xb1\xce\xc7\x9d\x7f\xd5\xcb\x5e\x72\xa3\xbf\xd9\x7f\x7a\x59\x51\x5f\xad\xdd\x97\xce\x6d\xd5\x21\x77\xff\x5c\x7a\xdd\xb0\x84\x37\xd9\xab\x2f\x31\x19\x0c\x05\x47\x3f\x39\xe3\xfd\x1d\x95\x15\xa1\xdd\x92\xa8\x06\xe8\x37\x94\x2e\x52\x31\x9f\x46\x8e\x16\xdc\x5a\x1b\x0b\x6f\x9a\xf8\xf5\xe3\x4a\x33\xae\x44\x17\x8a\x31\x10\xb7\x5b\x75\xe8\xda\x3a\xdf\x29\xc2\x2d\xe8\xfd\xde\x65\x60\x98\xd4\x09\x8e\x93\x1e\x3a\x51\x64\x9a\xa1\x9f\x84\x9e\x69\x2b\x18\x97\x12\x99\x52\xf3\x0e\x0b\x1d\xf1\x67\x85\xe8\x6c\xf3\xe5\x62\xed\xcd\x2f\x70\x5b\x17\x9d\xd1\xdf\xdb\xd8\x50\x3c\xa3\xdd\x5d\x0d\x30\x5d\x0c\x5b\xbf\x94\x8e\x2b\xfa\x92\x0d\xfc\xad\xfc\xa7\x53\x15\x50\x47\xc4\xab\x36\xed\x7c\xd5\xd3\xee\xd2\xfa\x2a\xd6\x03\x9c\x02\x8d\xfa\xbd\xf9\xbb\x09\x19\xed\xd1\x0f\xe2\x3b\x88\xfb\x10\xe6\xa2\x8b\x90\xf8\x6d\x74\x18\x2a\x88\x19\x9b\xbb\xcc\xeb\x62\xe7\x04\x39\xf5\xbe\xd4\x5a\xd7\x65\xaa\x1b\xbf\x33\xd9\x68\x3e\xd9\xcc\xbb\x42\xde\x2d\xfb\x4a\x9d\x13\xd6\xb6\xb1\x57\x22\xad\x90\xb6\x12\x84\x53\xc7\x0c\x3d\x20\xcd\x7b\xd0\xd4\x04\xed\xf3\x57\xe1\x45\x7d\xc9\xd6\xfd\x56\xff\xd3\x05\x48\x0e\xa3\x7e\x55\x88\x4a\x64\x2d\x77\x99\xba\xf9\x58\xc7\xa7\xf2\xe4\x67\x3a\xe5\xfd\xad\x14\xb0\x43\xec\xcb\x60\x6c\xeb\xbb\x04\xe2\x11\x1f\xf1\xeb\x99\x66\xbc\xf2\x8e\x3f\x26\x20\xbf\x7a\x67\x2f\x19\xad\xdf\xda\x7f\x3d\xc1\x10\xfc\xbd\xdc\x4f\x45\x42\xca\xf4\x81\x2b\x04\x5e\x15\x1e\xe5\x75\x9b\x1f\x37\x66\xfb\xd9\x61\xde\x42\x1f\x6c\xfa\x77\xea\x21\xb7\xbf\xb5\x8b\x5c\xcf\x7d\x0a\x35\xae\x0b\xf0\x10\x8f\x5e\xf3\xd6\x87\xa4\x3a\x8d\xeb\x85\x95\x09\xd1\xf2\x9e\xc6\xe9\xc6\x0c\x4b\x67\x49\x90\x45\x52\xd0\x4e\xbd\x9d\xf3\x8f\xfa\x28\x1c\x62\x9d\x3c\xc4\x63\x46\xaa\x20\xbf\x6a\x86\x4a\x3b\x8b\xf7\x74\xdd\x53\x9f\x37\xc6\xae\xc1\x3f\x4b\xec\xa8\x15\xbe\x54\xf7\x6a\x49\x25\x9f\xc9\x4a\x69\x27\xa6\xed\xfa\x72\x6e\xe1\x17\x04\xa6\xa8\xb9\x5c\xea\x71\x7d\x39\xb7\x7d\xd5\x37\x5f\xd2\x76\xbf\xf5\xff\xcc\x27\x4d\x73\x6a\x03\xe5\x4f\x0b\x35\x56\x2d\xdf\x97\xca\xc0\xab\x6a\x54\x26\xe5\x93\xa4\x0c\x45\x5c\xb8\x83\x28\x37\xd8\x40\xa3\xe9\xeb\xcf\x22\x50\x5c\xfa\xb1\x10\xe1\x42\xef\x3f\x0a\x08\xc4\x64\x8b\xa3\x76\xca\xc2\x59\x4d\x40\xfc\xa0\x8e\x70\x37\x41\xb2\xcc\x5d\x20\x71\x33\xaa\xce\xe4\x9f\x06\xfe\x71\x7e\x41\xac\x19\x90\x02\x4b\x5a\x22\x01\x5f\x76\xca\x2d\xf5\xe0\xd6\x5e\xa8\x19\x56\x4e\xac\xc3\x0d\xe4\x66\x94\xe5\xcb\x78\x93\x44\x05\xe2\xdb\xce\xe3\x24\xaa\xef\x82\x06\xdb\xce\xa4\x26\x3c\x5c\xa9\xcc\xe7\xd5\xf7\xb7\xa1\x2d\x49\xa9\x41\xfa\xea\xee\xc2\x3e\x7a\x9a\x96\x46\x4f\xea\xfd\x94\x9f\x81\x66\x81\xaf\xa7\x39\xea\xb6\xfa\x81\x56\x2d\x64\x2f\x0f\xa2\xf5\xaa\x28\xaa\x25\xce\x4f\x08\x5d\x62\x8b\xce\x50\xeb\x89\x3d\x8f\xf3\x58\xbc\x33\x71\x0f\x17\xb4\x63\x5f\xf4\xfe\x97\x64\xdd\x6f\xe3\x3f\xbd\xff\x8c\xaa\xc2\x86\x81\x0a\xdf\x00\xc5\xb7\x9b\xaf\x51\xd7\x53\x95\x11\x9d\x99\xc9\xbd\x68\x63\x25\x46\x10\xc7\xf8\x4f\x80\x3d\x8c\x34\x73\x14\xdd\x54\x4d\xf8\xf3\xc0\xb6\x15\x8b\xb0\x68\xcb\xa9\xb7\x97\x71\xd6\xdb\xe7\xe3\xac\x3c\xc6\x99\xb6\x9a\xb4\xb5\xfb\xcc\x5b\x7c\xdd\x27\x23\x3c\x93\xc4\x6a\x7e\xc8\x57\xbd\xe0\x25\xc1\xf9\xdb\xfc\x4f\x2f\x28\x23\xa3\x17\xf8\xe3\xfb\xa4\x82\xac\x16\x18\xf0\xbf\xd5\xad\x32\x92\xc7\xd4\x88\x5c\xcc\xf7\xe4\xbb\x3f\xc5\x00\xa0\x2a\x17\x5f\x7c\x71\x15\xb8\xeb\x10\x49\x3f\xf9\x0f\x65\x5b\xe2\x54\x67\x9a\x25\xae\x80\xca\x24\x89\x12\xeb\x86\xd2\x77\x14\x2d\xa1\xb0\x60\x04\x9d\x7e\xf1\xa9\x12\x31\x33\x54\x33\x0c\xee\xbb\x60\xe7\x11\xdc\xed\x72\xe6\xe3\xb4\x24\x14\x6b\x56\x49\x71\xb9\x11\x34\x8c\x2a\x70\x1e\xb5\xe0\x6e\xb5\xd8\x8d\x0f\xe0\xb7\xbd\xe0\xf1\x17\x6e\x3f\x62\xf7\x8d\xe7\xc0\x29\x78\xda\xe3\xbc\xce\xfb\x5b\x6b\x9a\xda\x95\x44\x21\x04\xe1\x40\xaa\xce\x2f\x60\x23\x0d\x13\x0a\x52\xf8\x2e\x99\x8d\x5a\xbf\x91\x17\x51\x32\x94\x0e\x35\xaa\x2d\xc4\x22\x92\xe2\x4d\xea\xe3\xcd\x8f\xbd\x12\xa8\x16\xa2\x1b\x68\xb3\xaf\x2b\x13\xec\x35\x91\xf2\x20\x1e\x2e\xb3\xa7\x9e\xdd\x03\x9e\xde\x38\x39\xf4\x09\x05\x60\x61\x23\xe7\xb0\x10\x2c\xc9\x3b\xea\xe4\xa5\xbb\xe0\x24\xc7\x09\x83\x42\x44\x66\xb0\x9a\x69\x91\xa6\xc9\x80\x1c\xf6\x75\x84\x44\xcd\xd4\x72\xae\xe9\x24\xe3\xa6\x10\xc9\xa9\x5a\x8e\x44\x5d\x39\xce\x92\xfc\x52\x0e\x08\x46\x24\x23\x91\x3d\xca\xd3\x6d\xe6\x55\x87\x81\x06\x56\x65\x40\x4d\xdc\xe6\x78\x48\x4c\x98\xf4\x43\x08\xf7\x50\x63\x0a\x12\x60\xc2\xba\x4b\xa3\xa6\xaa\x8e\x9e\x4a\x46\xb6\xab\x28\xab\x85\xd5\x92\x02\xfc\x20\xc9\xc0\xd3\x09\xef\x21\x97\xb8\xb4\x8e\x92\x20\x95\xb2\x53\x76\x8c\xd2\xef\x40\x14\x00\x97\x39\x7b\x60\x6a\x6a\xc8\x41\xeb\x68\xa0\x83\x97\x93\x22\xd5\xb8\xd2\x29\x08\x02\x1a\x10\x9e\xac\xb5\x41\x09\x0c\xd0\x43\x00\x16\xf9\x60\xf6\x46\x70\xa7\xb4\x07\x51\xb5\x02\xd6\x56\x2a\xb4\x2f\x83\x1e\x98\xc4\xdc\xa6\x01\xc1\x20\x26\x87\x94\xa5\x8b\x22\x11\xa2\xa4\x71\x05\xbf\x00\x12\xe8\x3e\xa8\xca\x57\xfd\xe4\x35\x27\xf2\x99\x40\xbd\x0a\xcb\xfa\x1b\x2a\xa1\xb2\xde\xad\xce\x6d\x31\x2b\x49\x49\x6d\x56\x52\x15\xd9\x50\xed\xa5\x6e\x19\xf1\xcb\x7d\xd1\x3a\xde\xdf\x26\x48\x0d\x2a\x8e\x2e\x59\x7d\x42\x07\xe2\x93\x67\xf0\x97\x72\x5f\xac\xce\x60\x25\xaa\x63\xd3\xae\x49\x86\x52\x07\xff\xfa\xe2\xe3\xf5\xfd\xad\x8c\x9a\xba\xd9\x16\x17\xe7\x9d\x9c\xf7\x05\x1e\xb7\x9a\x5a\xc9\xb8\x17\xb7\x99\xee\xb8\x05\xb1\xdc\x71\xd8\x75\xe9\xb8\x99\xb8\x32\x31\x4f\x02\xf5\x40\x66\x84\x4b\xc0\xea\x5a\xd9\x96\x01\x8e\x05\xd4\x1e\x48\x54\x80\x61\x6c\xa2\xc2\x50\x8c\x3b\x60\xbb\xdf\x14\x85\xc5\x5b\xb9\x57\xc4\x1c\x8a\x24\xfc\xb9\x9d\x3b\xf9\xfb\x31\x50\xcb\xda\xc1\xf3\x6c\xd7\x05\xd0\x1e\x96\x78\xe1\xaf\xde\xe1\x6b\x90\xfb\xb7\x4f\x8b\x7a\xb3\x4f\xf6\x65\x17\x9f\xec\x4a\x4b\xc1\x22\x4d\xf2\xe9\x16\x25\xf7\x12\x7d\x0c\xdc\xe3\xc8\x6d\x50\x56\x48\x07\x88\x4a\x31\xf0\xc9\x4d\x2d\x27\xf9\x30\x8a\x29\xa0\x46\x22\x9a\xe7\xba\xc8\xba\xe8\x8a\xba\x9b\xce\x54\x0d\x38\x38\xa3\xe2\x4c\x7c\x51\x0a\xec\xa7\xe4\x54\x01\x91\x39\xa4\xf4\x24\x05\x0a\x0c\xf4\x97\x34\x0d\x18\xcf\x52\xd3\x70\xf7\xbe\x1d\x32\x67\x1a\x12\x44\xa8\xde\x1b\xea\xd8\x7b\x4d\xde\xf5\x54\x49\xdc\x30\x0e\x03\xbc\x77\x96\xdb\x2e\x8d\x1a\x7e\x2d\x04\x97\x34\x66\x0a\xf0\xd1\x73\x4a\x0b\xa8\x15\xf9\x7b\x21\x71\x74\x7e\x79\x7f\x73\x8b\xa0\xcc\x4b\x5c\x14\xf8\xfc\x69\x87\x66\x64\xb8\x76\x41\x1a\x56\x4b\x4e\x73\xd2\x20\xcf\x01\xc0\xac\x0f\x74\x07\x18\x5a\x41\xb2\xdc\x88\x3f\x81\x78\xf5\x52\x91\xdc\x9a\xa7\x44\xe6\xc1\x8a\xbc\xc1\x99\xa5\x5a\x8a\x3f\x49\x20\x62\x85\x92\x36\x01\x10\x92\xc3\x87\x52\x85\x72\xc4\xd2\xc9\x51\x3f\xf4\xe8\x1d\x7f\xcd\xee\xdb\x6e\xd7\xac\x28\x3b\xa1\x77\x8a\x09\x13\xc0\xc8\x41\x19\x84\x78\x01\xde\x9b\xc9\x68\xe0\x76\x79\x4f\x1d\x0b\x30\xeb\x33\xbd\xff\xcf\xbe\x61\x14\xe5\xb1\xb7\x96\x90\xac\xd2\xd4\x4a\x18\x8d\x0a\x30\x08\x72\x53\xb4\x17\x83\x1b\x1e\xc9\x38\x20\x6d\xad\x3c\x04\xd5\x46\xac\xc2\x4b\x07\xaa\x87\x3c\x3e\xdd\xbf\x78\x2f\x74\x7f\xa4\xf7\xf8\x65\x36\x82\x80\x16\xa8\x07\x20\x4e\x2f\x4a\xbf\xcb\xdd\x78\x42\x9e\xd0\x1f\xc7\xd7\xbc\x1b\xf6\x1a\xa4\xff\xfd\x0b\xde\x0d\x64\xb9\x05\x28\xb8\x2f\x65\x8f\x8f\xbf\x57\x7f\x39\xe4\x97\x83\x98\x8c\x24\x01\x64\x11\xb0\xe6\x2f\xc8\xe7\x39\xf4\xcd\xb2\xbb\x31\x33\xc0\x11\xac\x23\xa4\xf1\x07\xb6\xfa\x46\x00\xc7\x66\x1c\x36\xf3\xfb\x9b\x2f\xa9\x00\xc9\x70\x07\x4a\xdd\xc3\x8e\xc3\x39\x0e\x7e\x30\x72\x8d\x13\x80\x7d\xbd\xe3\x9a\x38\xcb\x11\x9f\xc1\x56\x07\xc6\x4b\xdc\x19\xaf\xf0\x74\x64\x9c\x75\x89\x7b\x3a\x16\xde\x63\x44\xc5\x7d\x97\xf3\xbc\xf1\x4c\x3c\xa5\xd6\x16\x45\xa6\x4a\xc0\x2f\x4c\x3c\xa1\x79\x16\xf8\xe0\xe7\x3f\x9e\xf7\x8a\x3f\x96\xf8\x4b\x4e\x26\x6e\xb9\xce\xc0\x3f\x6e\xc7\xf3\x8e\xbe\x4c\x0c\xf7\x69\xed\xd1\xaa\x93\x32\xa1\xbc\xb9\x23\x6e\xf2\xe9\xd6\xfd\xc1\xd8\xf2\xfe\x58\xc7\xf9\xa0\x5f\x75\xca\xd7\x20\xff\x1f\x9f\x41\xa6\x7b\xcb\x97\xe6\xb7\xbb\x0c\x9c\xad\x0d\xe1\xc9\x01\x01\xb2\x28\x9a\x65\x8d\x97\xdb\x56\x66\xed\xe4\xdc\xf2\xaf\xc1\xbe\x45\x8c\x13\x6c\xaf\x51\x52\x1c\x86\xb3\x19\x72\xbf\x90\x15\xec\x89\x86\x96\x42\x9f\x06\x2c\x11\xbd\x24\xa8\xf8\xaa\x8e\x48\xe2\x17\x00\xfc\x5a\xac\x1a\x07\x97\x11\x5f\x84\x03\xbd\x0e\xee\xf7\x45\x29\x9c\x61\x21\x92\x55\x0e\x05\x2a\x02\x68\x58\x25\xcc\xab\x4a\x7c\xf3\x2f\xb9\x10\x0c\x7b\x8b\x63\xfc\x90\x2a\x49\xa3\x46\x59\xed\x64\xd1\x77\xc3\xee\x88\x1b\x50\x95\x3b\xf8\xc7\x7c\xb6\x37\x49\xd6\x29\x9c\x81\x07\x58\xf8\x04\xb3\x87\xf9\xf8\x75\xbd\xc8\xff\xef\xc5\x86\xfe\x3d\x7f\xf6\x72\x66\x6a\x4d\xf7\x91\x54\x3a\xa4\x13\xfd\xce\x2c\xbb\x35\x3b\xd6\xfa\xc8\xa7\x93\xee\x9e\x0e\x66\x48\x0f\xbb\x87\x4d\xe2\x2b\x20\x73\x59\xc1\x5d\x82\x51\xa2\x5e\xf8\x8c\x7a\x62\xcc\x02\x3b\x44\xa5\x40\xa9\x65\xaf\xd0\xb7\x07\x65\x3d\xe6\xd1\x33\x22\xe8\xfd\x1c\xf3\x2a\xd0\x6c\xa5\x43\x82\x66\x93\x06\xf2\xf6\xe9\x6f\xa6\x5a\xc2\x6a\x1e\x65\x0e\x7a\x7a\x63\xf9\x64\xab\x1f\x99\x45\x76\x93\x8e\x68\x30\xcd\x27\xda\xa3\xc5\x52\x91\x5b\xac\x73\xe4\x61\xb0\xca\x52\x39\x4b\x84\xd1\x4b\xe0\xe0\xa4\x43\x87\xbc\xea\x51\x67\xe8\xda\x7a\x7f\xdd\x05\x5e\x36\x26\xf8\xa0\xcc\x00\xef\x88\xaf\x83\x28\xdd\x44\xa4\xcc\x4d\x64\x0b\x0d\x8a\x21\xe0\x98\x59\x4e\xf6\x94\x44\xb7\x22\xa4\xc9\x11\x27\x45\x7e\x97\x58\x66\xeb\x09\x1c\xe3\x60\x09\x00\x6d\x1d\xb0\xbc\x70\x52\x36\x66\xfe\x84\x92\x8a\x68\xe3\x01\x2a\x7e\xbe\x87\x56\xa3\x06\x73\x32\x6f\x83\x82\x85\x71\xd1\x67\xa1\x82\x39\xdf\x0e\x90\x53\xf8\x72\x8f\x12\x9a\x52\x21\x70\x10\x62\x0f\x23\x4a\x2e\x7b\x0b\x35\x9b\x1e\xab\xfd\xe6\x6d\xdc\xf6\x86\x95\x1e\xeb\x9c\x48\xc8\xd4\x61\xd5\x3e\x24\xc7\x17\x84\xcf\xdc\x26\xb1\x9e\x60\xdd\x1f\xd0\x27\x4d\xd3\x00\xe4\xe8\x1a\x62\x09\x05\x0d\xe6\x9e\x66\xa7\xf7\x8c\x32\x7f\x31\x28\x70\xd9\x8e\x98\xc5\x0c\x85\xa2\xd2\x8e\xa6\x78\x50\x37\xef\xea\x38\x4e\x64\x57\xc8\x0c\xf5\x4e\x76\x95\x65\x8c\x90\x37\xb5\x08\x04\x8a\x3b\x5b\xe1\xae\xb6\xdb\x8e\x7a\x5f\xd4\x76\x21\x34\x07\x05\x0a\x05\xd2\xde\x6f\x2e\x72\x60\x8b\x50\x8d\xc6\xaa\xa4\x5e\x7c\x6a\xa4\xf1\x31\x62\xf2\xf1\x27\xa1\xe8\x58\xb5\x5f\x18\x95\x2f\x1e\xcb\xef\xf2\xd9\x3a\x8e\x39\xc0\xed\xfb\xe6\x66\x7b\x1e\x09\xf5\x49\x35\x85\xde\xab\x0e\xe3\xf4\xb7\xd5\xe1\x56\x16\x04\x74\x26\xd0\x14\x73\x6e\xad\xa6\xda\x77\xc1\x5b\x6f\x23\x81\x19\x5f\x21\x38\x82\x8a\x96\x1d\x06\x9d\xd2\x80\x02\x5a\xb1\xb7\x54\x7c\x49\x43\xc5\xe3\xf0\x0e\xe8\x5d\xa9\xa0\x80\x5c\x37\x9a\x46\xb6\x2f\x73\x90\xf2\x66\x8e\x64\xa3\x1e\xfc\xd8\xce\xad\x57\x75\x4c\x1c\xc6\x85\x73\x27\x63\x57\x0e\xea\x2e\x0d\xbd\xec\x3c\x29\xa5\x28\xee\xf4\x54\x10\xad\xcb\x6d\x23\xe3\xfc\x4e\x8e\x13\xb2\xd8\x50\xd2\xa0\x5e\x55\x77\x68\x80\x7b\x6b\x7b\x85\xee\x0f\xbc\x11\x3c\xd8\x68\xbb\x6a\x4e\xa5\xe0\x79\xfd\x71\x1b\xc5\xd9\x4b\x49\x35\x7b\xd3\x4c\xf7\x94\xac\xf7\x34\xb2\x0f\x52\xef\xf7\x03\xdc\xb2\x20\x8e\xc3\x30\x3a\x62\x38\x6d\xea\x3e\xeb\x88\xd4\xa7\xdb\x8a\xd0\xf2\x6c\x3e\x45\xf8\x5b\x68\xba\xa3\x55\xe0\xbc\x96\x8e\x43\x40\x35\x55\x64\x67\x04\x38\xc7\x21\x19\x32\xa0\x92\x7d\x33\xb6\x4e\x4a\x29\x40\x6a\xa2\xf2\x74\x8b\x34\xbd\xc1\xd6\x76\x53\xd8\x77\x6f\x13\x77\x30\x48\x95\x0b\x6a\xbc\x92\x06\x30\x40\x23\xee\x7d\x64\x1f\xb9\xd3\x1f\x0b\xfb\x9f\x27\xda\xeb\x4c\x6d\x24\x9c\xbf\x6d\x0b\x2e\x9b\xbd\x11\x04\x14\x0b\x92\x0f\xde\x17\x36\x2d\xbe\x0d\x68\x1e\x1e\xb1\x8c\xb6\x9d\x0f\xd8\x1a\x84\xda\x26\x74\x0b\xdd\xbd\xf5\x55\xb4\x80\x20\xbb\x31\xda\x82\x78\xa7\x50\x58\x91\x3d\x8b\x68\x65\xc8\xa6\xb3\xd3\xc9\xe6\x7b\x56\xf7\x2d\x47\xe8\x1b\x7a\x1f\x1d\xe8\x54\x90\xf4\xcc\x0d\x0e\x91\xba\x19\xd2\x6b\x94\x46\x86\xe0\xb1\xf4\x5c\x1f\x18\x9b\xca\x26\xf5\x3e\xc7\xa3\x77\x45\xdc\xbd\xcc\x84\x6e\xea\x63\x62\x40\xdd\x23\x9b\xf7\xae\x60\x4d\xc1\xd0\xae\xe8\x11\x30\x75\x10\x99\x8f\x8e\xea\xc7\xf1\x54\x68\x94\x41\x16\x0a\x1b\xc0\xf7\xe0\x3e\x9a\x3d\xfa\xbf\x55\x1c\xe7\x5d\x69\xe0\xb9\x20\x53\xe7\xe3\x4c\xda\xe4\x23\xfb\x13\xb3\x33\x22\x51\x2b\x6c\x21\xb1\x3b\x42\xc8\x13\x85\x7f\x57\x37\xbe\x1d\x8a\x41\xd2\x59\x65\xde\xcb\x88\x87\x95\x6e\xe4\x19\x4d\x66\x57\x10\x4b\x7d\xd2\x64\x48\x81\x42\x38\x26\xa9\xf5\xf3\x1b\xf5\xd6\xce\x48\x43\x4c\xc1\x74\xa4\xfc\x38\x52\x9f\xfa\xd9\x1e\xdf\x9e\xb6\x3f\x1d\xf6\x38\xd9\x75\x81\xc7\x45\x1f\x77\x72\xde\x5d\x04\x1f\x4e\xf3\xce\x9f\xe7\x57\x5c\x8a\xdb\x3f\xeb\x53\x1c\x5f\xfa\x36\xbf\x30\x29\xbf\x84\x20\x7e\xbf\xea\xec\xaa\xf7\x15\xbd\xd4\x35\xc0\xf0\x8a\xa8\x36\x19\x27\x73\x4f\xcd\x76\x37\x6b\xbd\xc7\xb4\xb2\xbb\x11\x73\x9a\x32\xf2\xfe\x56\x4b\x4b\x6d\x96\x53\x26\xab\x63\x56\x39\xf9\x2a\x7d\x0a\x02\xca\x37\xfb\x80\x9f\xd9\xfb\x2c\x82\x09\x04\xb6\x49\x60\x70\xdf\xdf\xba\x68\xea\x6d\xde\x45\xfd\x58\x92\xd1\x82\x5a\x09\xab\x7b\x65\x84\x1d\xb5\xeb\x13\xf2\x5a\x0f\x02\xca\x63\xc1\x02\x57\x50\x4e\x5f\x2f\x99\xdc\xac\x47\x37\x8a\xf4\xdd\xdd\xa4\xc3\x32\xd9\x99\x28\x19\x15\x91\xa3\xea\xc6\x91\xdf\x23\x76\x00\x20\xd6\x88\x8e\xa5\x90\x69\x8e\x9c\x58\xb0\x49\x56\xaa\x85\x62\xae\xae\x08\x4e\xa4\xc5\x57\x10\xe0\x8c\x15\xfc\x12\xde\x4c\x20\xaf\x4b\x73\x82\xce\x2d\x15\x56\x57\xc2\x7c\x3e\xa1\x75\xe4\x22\x0b\x02\xd0\x52\x7c\x54\x57\x50\x19\x01\x42\xa0\xa9\x67\xd0\xf5\x03\x0b\x83\x5a\xcb\xec\xdb\xad\xa7\x89\x09\xc0\xde\xdf\xba\x77\x98\x9a\x51\x50\xb3\x00\x63\xb9\x68\x1a\x7a\x37\x90\x91\x94\x96\x34\x41\xe3\xdd\x3a\x2c\x00\x4b\x6e\x6b\xc8\x7d\xb1\x49\x16\x5f\xe8\x0c\xa5\xa5\x93\xc4\xc4\x5d\xa5\x76\x17\x77\xdf\x2d\x30\xc7\x9c\xd2\xce\xf8\x66\x35\x3f\xb9\x6a\x5d\xab\x52\x53\x95\x5c\x39\x47\x7c\xde\x45\xfa\xba\x48\xf6\xe7\x19\x9a\xcc\x3b\xc7\xba\x88\x4f\xc6\xc8\x21\x78\xc3\xd5\x3b\x99\xe8\xf2\xdd\x6d\x94\x1d\xf4\x22\xd6\xa1\x5e\x44\x9c\x12\xe0\x3e\x8a\xcf\xfb\xa2\x2b\xca\x5a\x21\x20\xec\x2f\x05\x56\x51\x2b\x21\x69\x5d\xe9\x95\x9c\x98\x48\x8a\xe2\x2e\x3e\xe2\xc9\x39\xd1\x90\x6c\xca\xbe\x1e\xbc\xbf\x4d\x7f\x35\xb9\xe3\xc1\x8d\x3a\x9b\xcd\xc2\x94\xa7\x9e\x4e\xcb\x97\xfc\x53\xe1\x75\x82\xa5\xd1\x8d\xe9\xa6\xa1\x09\x46\xfb\x90\x30\x45\x5e\xbc\xe9\xdf\xa6\xb0\xfe\x77\x0a\xac\x17\x7b\x49\xb4\xfe\x6e\x9f\x58\x68\x75\xba\xe7\x06\x56\xae\x4c\x61\x5f\xc9\xfe\x0c\x95\x85\xe3\x24\xd7\xb8\x58\xc2\x48\xc0\x97\x65\x97\x0a\x04\x5a\x75\x5f\xa5\xbe\xbf\x41\x4c\xaf\xfb\xfb\x6c\x02\xd4\xb1\x8f\xd0\x65\xcc\x04\xfc\xae\x32\x54\xc9\xca\xe2\x7a\xd2\xaa\xf1\x6f\xab\x4f\xf4\x70\x62\xfd\xfd\x6d\x64\x68\x49\xb9\x9b\x9b\x95\x0a\xe1\x50\x53\x9d\xd4\x30\x6d\xc4\x8e\xb7\x33\xde\x05\xa1\x3a\xc0\x6f\x59\x35\x08\xc5\x50\x04\x12\x76\x56\x6c\x93\x97\x97\x5d\x20\x74\xb4\xc8\x97\x68\x12\xf2\xc1\x60\x0a\x86\xcd\xa6\x54\x4e\x5b\x54\x0f\xa8\xfc\xd5\x53\x36\x13\x65\x1f\xd8\xa7\x95\x23\x5c\x9d\x13\xb0\x0b\xd6\xd6\x06\xc6\xe0\xb2\x2f\x8d\x38\x4b\x48\x62\x32\xea\xd1\x52\x91\x83\x95\xe3\x03\xdc\x5d\x57\x49\x7b\x4e\x68\x70\x4c\xd1\xf5\x5e\x60\x3a\x15\x2c\x5b\x49\x80\xe1\x76\xfb\xb2\x99\xb7\x8b\x6f\xed\xca\x19\x83\x3a\x9f\x00\xca\x33\xdc\x89\x4c\x11\x30\x7c\x33\xf9\xfb\x04\x38\x48\xad\x82\x1b\x79\x9f\x28\xca\xf3\x69\xb7\xf4\x1b\xf9\x11\x54\x46\x2a\x50\x0a\x63\x2a\x66\x5d\x54\x75\x2f\xa9\xd4\xe4\xbe\x4b\xb9\xb7\xec\x33\xe4\x74\x9b\x32\x89\x8e\xd5\x37\xd3\xad\x43\x5d\xbd\x80\x26\x82\xc4\x7c\xfe\x96\x41\x3f\xed\x4b\xa8\xcf\x07\x45\xef\x8b\xcc\x46\x2a\x1d\x3a\x9f\x85\xf4\xdb\xc8\x8c\x60\xd1\x01\xa5\x74\x4e\xee\xec\xa1\x30\xb0\x8f\x60\xff\x99\x7a\xf8\x25\xb3\xdd\xad\xca\xaa\x78\x6c\xd2\x4a\x27\xa1\x37\x86\xf0\xbf\xcf\x5b\xbe\xbc\xdc\x65\xe6\x75\xb6\x3b\xf2\xd8\x60\x8f\x4b\x63\xae\xaa\x1d\x48\x08\xb4\x25\x7a\xf5\x2a\x5d\x6e\x7e\x5b\xf9\xc4\x35\xd0\x69\x0e\x31\x71\x5d\x97\x51\xef\x8b\xb5\xe8\x9d\x82\x74\x90\x98\x9c\x64\xd1\x13\xb4\x3e\x02\x1b\xc9\x00\x00\x47\xe2\x09\x4f\x97\x19\x69\x6d\x3c\x27\xf4\xca\x68\x35\x97\x70\xa8\x13\x76\xf1\x1b\x9c\x89\x65\x90\xd9\x0e\x50\x53\x96\xb2\x63\xef\xd9\x2e\xce\x6c\x22\xc3\xe1\x54\x7f\x35\xd2\x5f\x92\xe9\xbf\x5f\x35\xaa\x23\xcf\x54\x4d\x37\x6d\x2d\x95\xe9\xab\x05\x85\x1a\x41\x15\x47\xa0\x05\xec\x66\xf7\xbc\x27\x88\xa1\x12\xc0\x78\xb5\x26\x13\x45\x0e\x61\xd3\x06\x59\x3a\xbb\x2f\xa6\x65\xf5\x11\x69\x32\xfe\x2f\x4e\x8a\x34\x92\x5e\xca\x39\x7f\xaf\x9f\xf0\xff\x0f\x6f\x91\x27\x22\x94\x7e\xd1\x8b\x46\x25\x22\xb2\x0a\xac\x68\x14\x5f\xaf\xd1\xbb\xe9\x48\x41\xc0\x0f\xb6\x01\x24\xa3\x7d\x18\xa8\x1b\x54\xa3\xce\x3d\x40\x9d\x8c\x7e\xda\x78\xa8\x2d\x7a\xef\x47\xbe\x46\x19\x58\x8e\x8a\x6c\x37\x6b\xa8\x53\x28\x85\x24\x84\xe8\xb7\x0f\x9d\x76\x95\xee\xc6\x8b\x8c\x76\xb4\x99\x04\xc4\x6a\xee\xe1\x28\x88\xce\x27\xa9\x2f\xa5\x11\x1d\x1b\x5c\xbd\x98\xa9\x4f\x56\xbc\x67\x52\xbc\xfa\x14\xf4\xe3\x42\xfc\x44\x9c\x17\x8c\x0d\x27\x27\xa1\xf7\x7f\xda\x72\x6e\xcf\x9f\x55\x06\xfe\x9d\x0c\xf0\x7d\xec\x4b\xbb\x04\x54\xa3\x38\x0a\x14\x6e\x67\x44\x0c\xb9\x7e\x58\x4a\x30\xc4\xdc\x92\x11\xc6\xd8\x7c\x72\xa4\x14\x29\x56\xfa\x45\x6c\x9f\xc0\x41\x81\x2b\x14\x94\xb8\xbe\xc2\xb8\x99\x2a\xd5\x0e\x1b\x78\xfe\xe5\xfc\x3c\x7f\x5f\xce\x1d\x97\x38\x10\x9f\x0b\xbe\x90\x65\x4e\xb9\xb3\xff\x79\x23\xf3\x95\x0c\x86\x4e\xa5\xa0\x16\x4a\x65\x40\x37\x5b\x33\x11\x17\x25\x1f\x58\x16\x7c\xb6\x3f\xc9\xcb\xec\x60\x54\x4e\x1b\x9e\x18\x00\xa3\x56\x92\xb6\x1a\x9d\x9a\x9a\xf5\xda\x0f\x81\x69\xe1\xf7\x88\xf4\xb1\xfa\x5a\x02\x33\x92\xeb\xed\xd5\x72\xc7\xa3\x3d\xb1\x02\x25\x36\xea\x2f\xf4\xf2\x97\x02\xd8\xdf\x3f\x63\x01\xd5\x9e\x53\x67\xd5\x0f\xc6\x70\x42\x89\x0d\xf4\x04\x53\x99\x87\xcf\xe6\x35\x80\x49\x08\xde\x19\xd7\x3e\x98\xe3\x58\x6c\xf0\x2e\x07\xc2\xd4\xc1\xd5\x3e\x41\x61\x3c\x53\x6b\xc9\xdc\x1a\x6b\x3b\xb9\x46\x7c\x26\x5a\x6a\xdd\xcb\x24\x52\x2b\x83\x06\xba\x0b\xeb\x7d\x49\x75\x0c\xbf\xba\x1c\xe8\x21\x1c\xe2\x6c\x6a\x30\x6a\x02\xae\x3b\x36\x3f\x00\xb0\xad\x61\x70\x35\xa4\xe6\x27\xfa\x23\x7f\x3d\x13\x55\x2e\x64\x14\x08\xf1\xdf\xc3\x42\x3f\x93\x52\xc0\x60\x16\x05\x6b\x1c\x8b\x3f\x14\x65\x07\x27\x19\x5c\xac\xeb\x48\x0a\x87\xbb\x91\x8f\x85\xb1\xb9\x7a\x11\x29\x60\xd5\x3a\x95\x07\xce\x2f\x0a\x31\x60\x46\x1b\x09\x14\xf7\x5f\xb8\x43\x80\xbe\x2c\xc9\xb6\x54\x50\xcd\xc1\xb5\x81\x00\xa6\xb1\x2a\x02\xd5\x59\x9a\x19\x33\xe5\xec\xe0\x0e\x39\x94\xbe\x49\xc1\xd2\x08\xad\x29\x5c\x85\x1b\xe3\xa0\x1c\x68\x50\x60\x37\xef\xcc\xb3\x9f\xb6\x3d\x82\xd9\x28\x85\x1c\x49\x33\x10\x9d\xf0\x4e\xb8\x0a\xa2\x66\x23\x31\x60\x59\x10\xd2\x2d\xe7\x82\x05\xeb\x29\xf2\x0b\x42\xaa\xb8\x06\x8c\x59\xe0\xab\x11\x44\x20\xb4\x94\xab\x9f\x11\x44\x2d\xe1\x04\x81\x6a\xd7\x5f\x06\xde\x25\xe6\x51\xac\x83\x89\x1a\x09\x02\x5a\xbb\x5d\x24\x69\x0a\x86\xec\x03\x80\x3a\x51\xd6\x92\x95\xa4\xbb\x26\xff\x1f\x40\x42\x46\x80\x80\x30\xd6\xc9\x52\x10\x50\xc8\x56\x16\x1a\x61\x87\x60\x4e\xc0\xdd\xa1\x58\x51\x58\x41\x4c\xe2\xdf\x5b\xa4\x36\x61\xc9\xad\x8b\xc4\x01\xf1\xcc\x10\x91\x05\x3b\x4b\x65\xee\x5f\x50\x37\xa6\x1d\xd4\x96\xa9\xb4\xf6\x0b\x63\xef\xa5\xc0\xf7\xf7\xfe\x49\x25\x40\x05\xcb\x5f\xaf\x2c\x4e\x58\xb4\xa6\xd6\x40\x5e\xad\x57\xb6\xb6\x9f\x36\x28\xec\xae\x30\xf2\xdc\xe8\xc0\x9f\x25\xe4\xd2\xa1\xbc\x5e\xdc\x4e\xf1\x83\x39\x6a\xc0\xb2\xf5\xfe\x26\xe6\x4f\x04\x32\x4c\x14\xd5\x41\x14\x39\x47\xda\x57\xf5\xa4\xdd\x25\x96\x51\x9f\xe2\xf8\x25\x04\x2c\xa0\x29\x83\x8e\x9f\xa1\x2a\x7f\xee\xc7\xf2\xb9\x38\x0d\x47\x69\x15\x50\x83\xf4\xef\x1e\x0a\x9e\x54\x3b\x2f\x58\x6f\xff\xf0\x93\xd5\xd0\xa7\x0f\xe7\x2c\x22\x4d\xaa\xcf\x4f\xd7\xe2\xd9\xfe\xb9\x27\xb3\x89\xeb\xe1\xb9\x1a\x9f\xaa\xd4\x96\x66\x23\xe3\x70\x81\xe8\x7b\xf1\xe5\x94\xb5\x70\x82\x28\x83\x9f\xfe\x31\x7f\x1c\x4b\xc4\xa4\x06\xca\x7e\x11\x64\x20\x83\x49\x55\x46\x92\x8d\x6e\xb8\x9d\x84\x54\x95\x34\xb1\x4b\x0d\xd8\x1d\xf2\x4f\xfd\x60\x07\x66\x4a\x0a\x29\x26\xe4\x65\xb0\x76\x69\xdf\xdc\x21\xf0\xd1\xaf\x13\x86\x51\xc2\x97\x02\x8e\x6d\xbf\xbb\x89\xd8\x96\xb8\x27\x8f\x2a\x1d\x28\x40\xc3\xa6\x12\xd4\x56\xa1\x36\x83\x93\x6d\x6b\x07\xd0\xbf\x50\x73\xb9\x32\x85\x41\x1d\x9f\xcb\x48\x25\x9c\x40\x14\x97\x85\x8f\x44\xfb\x24\x68\x7c\xa6\x7d\xab\x5b\xa5\x8e\xea\x46\x36\xf9\x0c\xde\xe1\x4a\x27\x1f\xe5\x63\x8b\xf5\xef\x1a\x8e\x45\x04\x6c\x39\xea\xc0\xb0\xe1\xb4\x95\xe3\xfa\xf2\xbc\xf9\x3c\x68\x17\x18\xe6\x20\xf2\xe9\xac\x2c\x21\xc5\xc4\xd4\x63\x04\x24\xf2\x6b\x5f\xb9\xbc\x54\x25\xfc\x3e\x3e\x4f\x00\x97\x24\x55\x03\xae\x5d\x10\x9a\x01\x39\x28\x92\x2d\xd5\x1a\x31\x95\x13\x64\xf5\x4b\xa1\xd1\xe6\x1e\xa8\x21\x9a\xb4\x08\x29\x98\x4b\xaa\xdb\x52\xdc\x34\x41\x10\x1c\x90\xe1\x49\x3a\x11\x94\x02\x62\x89\xbc\xf8\x5a\x54\xd1\xdb\x66\xea\x91\xfc\x8b\x76\x97\xa0\xe2\xbf\x5b\x99\x1b\x64\x9c\x72\x9d\xc0\xc2\x4d\xb7\xe9\xeb\xb6\xd8\x8c\x10\x3f\xc0\x56\xa8\x9c\xad\x58\x3f\x0a\xd8\xc1\x80\x13\x6d\x25\xc1\xb8\xae\x69\xfa\x6f\x93\x42\xc0\x70\xba\xe5\xab\xd6\x7b\x49\x9f\xff\x3e\xff\xa7\x5a\xaf\x6a\x4f\x2a\xde\x7a\x08\x74\xbb\xbf\x17\x10\x70\x94\xe2\xeb\x33\x12\xe0\xa9\xf5\xae\xb6\x63\xcb\x95\xea\xae\x4f\xd7\x24\xd3\x7e\x6c\x25\x4b\x36\x7f\x6c\x25\x84\xdf\x13\xc2\x67\x3e\x2b\xa8\x26\x6d\x9b\x22\x30\x0e\x18\x22\xb4\x2e\x86\xf6\x0d\x69\x7f\xb1\x7e\xdb\x46\x33\x10\xe8\x2c\xc5\xad\xb8\x3e\xbf\xaa\x49\x28\xaf\x6e\xca\xa3\x74\xf4\x89\xaa\x4b\x6a\xc8\xc3\x28\x32\x79\x10\x2d\x2f\x88\x3e\x12\xd1\x7e\xb0\x65\x9a\x37\x44\x87\xdb\x6d\xda\x99\x87\x5d\x30\x1d\x64\x54\x05\x75\xa2\xf8\x31\x8d\xbb\x47\x15\x51\xcc\x0d\xc0\x77\x83\xe9\x3b\x93\xd6\x14\xd4\x03\x9c\xc3\x14\x3a\xd9\xde\xb9\x3a\x82\xb3\xfd\x00\x37\x73\xd5\x93\x1e\x9a\xbe\x2d\x62\x7e\x98\x6f\x98\xed\x23\x8f\x3b\x7e\x39\xb8\xe8\xcf\x71\x65\x9c\xe3\xfb\xd3\x3e\x6e\xad\x3c\x1d\xbd\x3c\xce\x8a\x0c\x1e\xa2\xf4\xe0\xf6\x25\xf8\x3d\x87\x27\x8e\x5b\x07\x27\xbf\x45\x28\xaa\x80\xd4\x1a\xf1\xe1\x12\x71\x83\x92\xd7\xa5\x94\xf1\xa1\xb8\x2a\xd9\x53\xc1\x33\x90\xea\xf4\xe5\x40\x7a\x02\x85\x46\xd9\x84\xda\xed\x13\x22\x09\xb0\x76\x30\x4f\x0b\x63\x96\xa3\x84\x2c\xd3\x2e\xe0\x07\x8f\x37\x70\x5c\xef\xe4\x7a\x4d\xf1\xe2\x1e\x3a\x8a\x4b\x29\xe3\x3b\x16\xcf\xdb\x45\xe3\xf9\xbd\xd0\xe4\x09\x6b\x69\x2f\xb4\x98\xaa\xe5\x6e\xf5\x05\xec\xf2\xa4\x93\x77\x92\x65\x7e\xd5\x05\x5f\x7d\x88\xff\x7e\xa6\x81\xa1\x2c\xad\x37\x45\x8e\xd2\x12\x84\xce\x97\xa7\xa2\x92\xe5\xa9\xd6\x64\x79\x54\xa0\xfc\x33\xb5\x28\x1f\x94\xa2\xe0\xd4\xf1\xed\xb1\x75\x79\x1c\xb2\x9c\xa7\xf9\xe7\x69\xee\x6e\xff\x7b\x3c\x77\xe5\xd5\xae\xfc\x4c\x6b\x5d\xda\x50\x56\x82\x2d\x25\xdc\x6f\x5f\xe2\x83\xbb\xca\xf8\xf5\x69\x1b\x1d\xa4\xeb\x1b\x62\x43\x11\x97\x67\x61\xa9\xa5\x42\xfb\x8c\xaa\x53\xa5\x1d\x18\x13\xfe\x1a\x3a\x72\x19\x98\xd1\x15\x6c\x8f\x52\xf2\xb6\x48\xb2\x29\x28\x63\x02\xb3\x85\x60\x25\x2b\xb0\x71\xca\xba\xb4\x5e\x91\xb0\xf1\xa1\x28\xf0\x83\x24\x50\xdf\x3e\xd3\x83\x18\xce\x3a\x19\xe0\x8a\x52\x2b\xcc\xfb\x30\x44\x5d\x58\xad\x62\xa8\xfa\xc0\x34\x02\x07\xf0\x46\x48\x52\x18\x91\xa0\x2b\xd5\x10\x23\x0a\xb6\x6f\x44\x2f\x19\x47\x84\xcb\x1e\x4f\x3c\xae\xc6\xa0\xb7\x84\x9a\x20\x16\xd8\xf7\xb3\x31\xc8\x3d\x59\xa3\x6c\x52\x42\xec\x2e\x53\x62\x8e\x30\x41\x6b\xf4\x00\x11\x8b\xed\xd4\x80\x8b\x46\x31\x36\x8a\x2f\x0e\xa9\xf6\xfb\x40\xc8\xd4\x12\xa3\x05\x47\x4e\x76\x71\x2c\x44\x2c\x08\x5c\x93\x11\x19\x69\xe7\x5a\x25\x27\xbf\xc7\x80\xdf\x26\x31\x65\xe9\xe1\x6e\x9e\xde\x0e\x77\x75\xa4\x90\x4b\xb5\x86\x30\xb4\xa6\x32\xfc\xce\x54\xf7\xd2\x1e\xba\x85\x54\x64\x38\xbf\xee\x85\xb5\xea\x2d\xda\xe4\xfa\x46\x12\x4c\x42\x1c\x55\x8f\xb3\x3d\x19\xef\x66\xae\xad\x3c\xca\x66\x17\x22\x06\x68\x44\x97\x60\x7c\x65\xa2\x19\x4b\x32\xc3\x4e\xd9\x7d\x77\x9f\xcd\x98\x86\xc2\x1f\xc0\x60\x60\xa9\x5d\x6c\x6d\x73\xc6\x75\x47\xb2\x1d\x7c\x80\x92\x4c\x37\xff\x27\x47\xc4\x01\x81\xb1\x96\x6f\x04\xb6\xb9\x87\xc7\xaa\x9d\x10\xfe\x11\x8b\xf0\x4c\x98\xf9\x68\x09\x68\x59\x11\xaf\xe9\xad\x81\x25\xea\xec\xf7\x57\xb7\x2f\x94\x66\x99\xd1\x0e\xf3\x97\x5a\x81\x51\x5b\xb8\xcc\xd1\x06\xa4\xec\xb4\xd0\xc3\x43\x16\xc2\xe8\x67\x47\x2b\x88\xb7\xc2\x2c\x76\x06\x4e\x8d\x7c\x2b\x57\x07\x6f\xc1\x33\x47\x22\x4f\xc4\x25\x42\xf3\xe4\x44\xeb\x95\x70\x29\x34\x32\x23\xec\xe6\x7e\x87\x5f\x4d\x24\xaf\xa9\xa1\xdf\x3f\x93\x40\xd5\x3e\x92\x58\xe9\xf7\xa5\xe3\x76\x91\xa5\x65\xad\x92\x44\xe0\xdc\x5f\xe1\x02\xdd\x07\x68\xb7\x08\x56\x54\x90\x10\x79\xb3\x8a\x9b\x51\x94\xc6\x49\x10\x44\x3d\x31\x5c\x17\x41\xb0\x45\x67\x01\x25\xf8\x78\x26\x07\x1e\xec\xce\x76\x17\xc5\xd6\x02\x99\x77\x19\xd7\xe1\x6c\x7c\x3b\x49\xfc\x1f\xa7\x68\x57\x78\x1f\x27\x01\x96\xd7\xee\x85\x34\xd5\x9d\x38\xb5\x52\x13\x35\x01\x1a\xf9\xe3\xa7\xba\x31\x73\x63\xfc\x0e\x3e\x4e\x49\x5a\x27\x1c\xa9\x96\xc6\x48\x3a\xda\x3e\x50\x0b\x96\x7c\xf9\x90\x3a\x51\xc1\x6f\x3d\x15\xe9\xc9\xfa\x5a\x7a\x74\x5e\x3e\x0f\x5f\xd5\x97\x4b\xed\x6b\x08\xff\x8f\x73\xa9\xb5\xaa\xe9\x81\xad\xb6\x00\xae\x5b\xd5\xf7\xb7\x4b\xd5\xef\x03\x41\x79\xff\xfd\x27\xa4\xcd\xbe\xe9\x23\x8b\x87\x87\xfc\xa0\x26\xaf\xb5\x51\x1d\x16\x32\xf8\xb8\x87\xd1\x08\x90\x1f\xad\xbc\xbf\x21\x29\x2e\x55\x63\x9b\x06\x78\x5e\xa9\xb5\xe6\x53\xe2\x75\xef\x3d\xe8\xdb\xbb\x35\x2a\xfd\xc1\x82\xf8\xc9\xcd\xdf\xfe\x75\x77\x2f\x4a\x5a\xfd\xbf\xbf\x9d\x4e\xeb\xe2\xe7\x8d\xf1\x68\xa9\xe7\x56\xfc\x32\xa6\xf4\xff\x7f\xa9\x82\xfd\x23\x3f\x14\x71\x04\xd2\x83\x67\x80\x95\xf9\x7a\xa0\x91\x28\xdd\xa2\x8c\x43\x7e\xf7\xc7\xf3\x5e\xf1\x07\xbf\x63\x2f\xfc\x00\x4c\x42\xd2\x64\x65\x5b\xac\x41\x1e\x6e\x47\xed\xd8\x08\x10\x18\x2a\xa4\x4e\x06\xe9\x0f\x4f\x71\x3c\x7d\x7d\xec\x71\x89\x1d\xe1\x14\xdb\x75\x6e\x05\xf1\x95\x5f\x10\x93\xbc\xa5\x0f\x8f\xbe\x1d\x7f\xf9\x09\x39\xc0\x33\xef\x7a\x34\x3e\xce\x22\xa0\x03\x0d\x1e\x35\x73\x83\xd1\x3f\xb6\x6b\xdb\xd4\x34\x5a\xe2\x21\x5f\x8c\xdf\xfa\x52\x0e\xf9\xc7\x83\xd4\x0e\xb5\x17\xa0\xb7\x1e\x83\xa5\x06\x09\x7a\xb2\xa8\x24\x4e\xcd\xf6\x65\x94\x47\xa9\xcb\xd8\x80\xf6\x10\xcd\x17\xe3\x93\xaf\x65\x49\x6d\x3b\x7f\x6f\x58\xee\x52\xec\xbf\x0f\x52\x50\xf2\x64\xc7\xe3\xfc\xf1\x8d\xc6\x1b\x37\x33\x13\xed\xe6\x16\xbf\x02\x00\x59\x03\xc9\xd6\x01\x9f\x34\x5e\x9f\x44\x29\x4d\xa9\xfa\x56\x50\x81\xb9\x8c\x28\x06\xa0\x24\x61\x68\x26\x72\x51\xf2\xab\x3c\x7d\xbf\x1d\x4f\x7b\xed\x10\xfc\xe5\x49\xb6\xc7\xc9\x83\x39\x16\x17\x45\x7e\x6d\xa4\xeb\x7e\x8e\xc7\x4d\x3e\xdd\xfa\xe3\x89\xfe\x6f\xd6\x64\xd4\x97\x02\xad\x3f\x3e\x53\x9d\xad\x5d\xd2\x04\x0e\x2b\x4a\xbe\x4b\x32\xca\xc4\xfa\x93\xe4\x48\xdb\xa2\x4e\x4c\x50\xd5\x00\xcd\x9e\x49\xfa\xe0\x73\x09\x9d\x50\x83\xb6\x02\x0b\xab\xa2\x70\x20\xcc\xbd\x96\x53\xc9\xbb\x95\x34\x4a\x82\x4f\x2d\x74\xc9\xe0\x2b\xa1\xaa\x41\x6b\x42\x4e\xd3\x2f\x9b\x53\x99\xde\xea\x40\xd1\x66\xdb\xdc\x40\x01\x5d\x58\x29\xc4\x1d\x37\x60\xb1\xbf\x67\xb0\xff\x76\xf1\xdd\x7f\xab\x1b\x92\x13\xad\xec\x50\x17\x6b\x02\xb5\x17\x0b\x03\xa8\x58\x8a\xcc\x8a\xf6\xf0\xf9\x2b\x66\x15\x0c\x64\xf6\xaa\x83\xdb\x42\xee\x3a\xfe\x88\xef\x8a\x7e\xc1\xa3\x70\x10\x4e\x86\x5d\x8e\xa7\xaf\xe7\xe6\x73\xff\xc7\x39\x2e\x84\x91\xa5\x65\xcc\x0d\xeb\xdd\xa5\x00\xf0\x2d\x34\x00\x18\x59\x8c\x27\x45\xa1\xaf\x24\xa1\xa8\x50\x50\xe5\x22\xa7\x9b\xaf\x90\x9d\x81\x1e\x7a\x4a\x9a\x19\x72\x55\x39\x84\xee\xfd\x9f\x88\xa9\xb8\x2b\x0f\x9f\x7c\x83\x02\xa6\xdc\x76\x09\x5e\xe9\x33\x5e\x7d\x7e\x7b\x7f\x93\x5e\xa1\x63\x33\x89\xdd\x9e\x97\x40\x3e\x91\xf9\x33\xa7\x78\xf9\x64\xa9\x56\x6a\x96\xe3\x73\xc7\x19\x11\xe9\x96\x1c\x95\x2b\x92\x37\x28\xe0\xe5\x9d\xfb\x87\x6c\x08\x63\x03\xac\x83\x14\x8b\x02\xe7\x0f\x54\x45\x5e\xa3\x11\xc7\x23\xdc\x30\xdb\x6b\xb8\x81\xa2\xbc\x52\x73\xf1\x31\xfb\xd1\x69\x19\xed\x38\x63\x1b\xd8\xe7\x39\x88\x71\x7c\x7f\x36\xb4\x46\x29\x13\x2d\xbc\xa0\xa4\xe3\xe7\xaf\xe1\x27\xed\xb2\xb1\xd1\x7e\x78\x17\x1f\x35\xc8\x17\x43\xfb\x25\x84\xfc\xc7\x67\xe5\x56\x2d\xcf\xd4\x35\x6f\x3a\xdc\xbd\x1e\xf8\x5c\xfc\x0b\x35\xfb\xcc\x9a\x9b\x7a\xf5\xfd\xdf\x16\x01\x27\x55\x90\xc0\xde\xa5\x4c\xe4\x1c\xfc\xb3\xd4\x72\x07\x0d\x9b\x62\x10\x2d\x5a\x50\x34\xb9\x35\x4b\xa6\x76\xdb\xa8\xb9\xaa\x4c\x06\x10\x1f\x34\x66\xd2\xa1\x1b\x33\x19\x65\xa3\x12\x85\xd4\xc9\x6f\xfe\xa5\x5a\x12\x28\x1e\xbb\xd7\xd7\xe3\x98\xc5\x0f\x62\xf5\xd8\xd6\x80\x75\x30\x5e\xce\x6d\x2e\xde\xc1\x98\xf7\x85\xee\x0a\xba\x09\x66\xa1\xb2\x19\x7c\xbe\xcd\xdc\xde\x2b\x79\x83\x2b\xa9\xd3\xdb\x1d\x3a\xdb\x13\x9c\xc9\x8b\x4d\xc0\x49\x17\x9b\x87\x7f\xda\xe4\xf6\x36\x71\x80\xef\xef\x27\x28\x5f\x51\x12\xd6\x97\xc8\xf8\x1f\xe5\x93\x4e\x11\xe2\xcd\xf7\x85\x5c\x35\x1f\x0c\x3a\x88\xaa\xff\x12\xb5\xcd\xd4\x0f\xc6\x9f\xd6\x96\x5a\x1e\x7f\xdf\x05\x86\xe9\x3f\xf2\x04\xb7\x5f\xbf\x42\x2b\xf9\xef\x7d\x84\x46\x57\x61\xa1\x16\xac\xfb\x89\x61\xf7\xbb\xef\x32\xd7\x2a\xd0\xab\x42\xe5\x17\x97\x5b\x00\x79\x48\xa8\x33\xd7\xc5\x48\xa4\xea\x86\xdb\x57\xed\x70\xfb\x67\x6e\x13\x14\x25\x7f\x6b\x43\x60\xb2\xfe\x1b\xbb\xe3\x2d\xe8\x52\xfe\xde\x87\xc0\x22\x96\xa5\xdd\xa1\xf5\xec\x6f\x8f\x04\xf5\x94\xd8\xf7\x6d\xba\xe3\x0b\xe2\x8d\xf8\xcc\xee\xa1\xe5\xd8\x19\x15\x2e\x10\x35\x06\xc7\xb7\x9b\x05\x47\x80\xa5\x81\x5e\x85\xaa\x63\x03\x03\x3b\xb1\x05\x5a\x52\x14\x65\x31\xf2\xc0\xaf\x0c\x98\x60\x2b\x29\xa0\xfc\x08\x16\xae\x5f\xa7\x59\x7a\x0b\x45\x2f\xe2\x46\x60\x2d\x91\xc8\xbe\x9c\x8f\xf2\xf7\x37\xd6\x6c\xfa\x45\x07\x2f\x57\x52\xbd\xbd\x0e\x8e\xaf\x66\xc4\x97\xb4\xd6\x1f\xf5\x93\x19\xb1\xe7\x92\x7c\x30\xdd\xa1\x96\xf5\xa1\x9b\xfe\x20\x2f\xfa\xc0\x83\x07\xdf\xe0\x07\x1e\x7c\x15\xdd\xb4\xcc\x34\xba\xed\x9d\x05\x67\x49\x6d\x2d\xf0\xd3\xa9\x0f\x83\x8b\xe6\x82\x28\xc0\xdd\xbf\xd0\xc1\xf7\x26\x02\xed\x61\xa5\x61\xf4\x97\xae\xda\x3f\x8e\x27\xf4\x36\xfc\xd2\x3b\x02\xee\x06\x1e\x98\xf7\xdb\x5b\x77\xff\x06\xb6\x92\x6a\x61\xe0\xe7\x03\x11\x34\x1d\xe3\xa3\x37\xe9\x03\xeb\x1f\x3c\xf8\x8b\x17\xf8\x92\x14\xfa\xe3\x53\x79\xe9\x5e\x51\xa2\x6c\xbb\x11\x96\x01\x4a\x02\x6a\x23\xf5\x0b\x26\x9a\xc1\xaa\x9d\x37\x2a\xc3\xd6\xbc\x45\x1e\x0f\x1e\x1b\x7c\x42\x94\x55\x53\x37\x59\x06\x0b\x23\x90\xf8\x96\x8c\x33\x18\x6c\x80\xa6\xeb\x22\x43\xee\x32\x64\xf3\x5f\x0c\xec\xe5\x00\x6d\xb0\x7a\xcb\x07\xb1\x10\xf7\x83\xf8\xb6\x9f\x10\x78\x56\x04\xa5\xcf\x8b\x97\xec\x8e\x91\xec\xbc\xdb\x29\xc9\x3a\xe1\xf5\xfd\xf8\xf8\xee\x41\x46\x25\x9b\x92\x2e\xa4\xdc\x36\x7f\xa0\x92\xf3\x07\x67\xf8\xaa\x75\x5f\x52\x3c\x7f\xf4\x4f\x61\x95\x96\x3a\x2d\xe9\x61\x04\xd9\x20\x5b\x42\x2f\x9f\x55\x2d\xf3\xf1\x07\xbf\x33\x97\x1a\x5a\x6b\x83\x38\x89\x24\xc5\x8e\x73\xa7\xe3\x3a\xf4\x38\xcf\x68\x40\x1a\xd6\xef\x2f\xf6\x74\x29\xe3\x85\xf6\x65\xb0\x28\xee\xaf\x5c\x6e\x07\x4f\x41\x9c\xe3\xe0\x69\xcf\xe5\xa7\x49\xbb\xb7\xd6\x83\x96\xc7\x94\x82\xa0\xee\x1d\x46\xea\x7e\xf5\x6f\xba\x2f\x23\xca\xdc\x34\xf4\xaf\x96\x00\x08\x69\xbb\x2f\xad\xdb\x5e\x88\x90\x19\x23\x6a\x37\x07\x4c\x63\x7c\x60\x62\x86\xa8\xaf\x1c\xdd\x5f\x65\xe0\x70\xf3\x59\xf5\xaa\x07\x92\xbb\x0a\x96\xfa\x04\xe6\xa1\xbe\x23\xba\x4d\x25\x20\x70\x22\x55\x20\x1e\xaa\xec\x78\xdf\x22\x23\x8d\x4e\x8d\x34\x16\xce\xa2\xae\x30\x2d\x7a\x7a\x91\x87\x9b\xb5\x07\xaa\x7a\xca\x37\x24\x82\x51\xe5\xa7\xac\xf6\x85\xa4\xfc\x09\x95\xd6\x7e\x74\xa5\xba\xc2\xed\x4d\x7a\xb3\xd4\x48\xc2\x01\x8e\x40\xf7\x16\x88\x56\xd2\x1d\xe4\x03\x23\xd2\x0c\xa5\xd5\x1d\x58\x2f\x42\x9d\xc0\x8c\x5b\xc0\x34\x55\x18\x96\x77\x8f\x42\x2a\x80\x56\x55\xc0\x9b\x00\x85\x5b\x49\xa6\xed\x0e\x3e\x2f\x3d\x2b\xb7\x0e\x12\x19\x56\x66\xe5\x6c\xec\x85\x75\x93\xe4\x92\x6f\x65\x07\x2c\x03\xe4\x87\xf8\x05\x12\xc2\x9d\xe5\x23\xb8\x0a\xdc\xaf\x4a\xb8\xad\x6a\x2a\xcd\x76\xda\xe5\x48\x7e\x76\x85\xf8\x90\xb7\xa2\x8f\xab\x82\x38\x96\xbf\x4f\x40\x8b\x12\xf1\x40\xfd\x16\x98\xe7\x71\x27\x12\xad\x6b\x42\x18\xdf\x0e\x14\xe9\xca\x2a\x5a\xfb\xde\x50\x1f\x2c\x84\x71\xe1\x8e\xd4\xee\x4b\x9b\x90\x38\x22\x0a\x5e\x7b\xf2\x31\x7f\x2c\xbe\xc2\x7e\x39\xe1\xbd\x24\x4b\xfe\x18\x5f\x31\x96\xc0\x84\x28\x56\xd6\x45\x4a\xbd\xfb\x17\x29\x28\x9b\x9e\xe5\xf3\x8d\x56\x74\xd3\x6a\x49\x6b\xb9\xf7\x89\xde\x3d\xdd\x00\xcb\x65\xae\xfe\x56\x16\x95\xbe\xa9\xf4\xa4\xd2\x57\x9b\xc3\x87\xc9\x44\x8d\x33\xc8\x98\x05\x32\xf0\x6e\x62\xf8\xe9\x4d\xdb\xe6\x07\x24\xff\x67\xf5\x7f\xee\xf8\x62\x73\xdc\x45\xea\xd8\xdc\xd5\xd4\x31\x57\x29\xe3\xcb\x56\x78\x49\x50\xfc\x71\x11\xf6\xf5\x6e\x7e\x3f\x6e\x35\x74\x24\x71\x75\x52\x78\xc1\x72\xa5\xdc\xb2\xf7\x36\x2a\x27\xec\x48\x0f\xcd\x00\x67\xb2\x14\x1b\x51\xbd\x31\xe1\xad\xa3\x64\xde\x3b\x0e\xaa\x64\x35\x95\xa4\x6d\x07\xd6\xd7\xdc\xae\x3a\x64\x48\x52\x69\xbb\x30\x7e\xd5\x51\xb1\x24\x01\xa7\x40\x5d\x20\x93\x8f\x46\x89\x75\x77\xe2\x23\x6d\x37\xcf\xb4\x9d\xbe\xbf\x35\x37\xd2\xdc\xc8\x47\xd4\x89\xdc\x8a\xdd\x57\x1d\x90\x1f\x4e\xb7\x6f\x00\xbb\x8f\x47\x19\x44\x7d\x2b\x72\x5b\x06\x06\x33\x4d\xcc\x3d\xa5\xee\x03\x28\x75\x80\xb7\x9b\x2f\x4c\x00\xfc\x14\xcc\x1d\x89\x79\x4d\x77\x75\xfd\x02\x7d\x07\x02\x60\x86\x04\x63\xdf\x20\x26\x59\x76\x2c\xbe\xc9\xa2\x98\x1c\xe6\xe0\x09\x7a\x43\xcd\x21\x38\x4f\xc0\x6b\x86\xb6\x63\x16\xb0\xb9\xcb\x1e\x72\x8c\xde\xec\xc8\x8f\xa3\x3f\x47\x21\x2f\x42\x21\xa3\x24\x1d\x7d\xf3\x91\xd9\xf9\x33\x26\x0d\x3f\x45\x69\x07\x6a\x97\x4b\xdb\xcd\x6d\xdb\x34\xcc\xdb\x5a\x28\xc0\x86\xda\x98\x1d\xb5\x84\x28\x26\x05\xf0\xca\x67\x5e\x54\x55\x65\x6f\xdd\xc1\xd0\x79\x00\x44\x7b\x1f\x69\x64\xdb\x89\x59\x89\x2c\xa0\xea\x4e\xdd\xfc\x28\xb3\xee\xb2\x2d\xd6\x47\xaa\x73\x78\xab\x81\xa4\x22\x35\xdd\x8b\xf8\x0d\x28\xa8\xe8\xa2\xc6\x1b\xe5\xc9\xc2\x02\x53\xe4\x43\x61\x63\xed\x98\xc9\x70\x51\x12\x89\x40\xbc\xa4\x13\x5c\x5d\xdc\x35\x9c\xd8\x07\x5e\x7d\xf3\x05\x85\x6a\x1c\x60\x5f\xd0\xc9\x8c\x05\xb0\x19\x35\x21\x68\xa4\xb6\x41\x7d\x03\xa5\xfa\x2c\x7d\xc6\xda\x6e\x0a\x98\x24\x6a\x05\x46\xbf\xed\x92\x24\xf5\x0a\x6f\x41\x20\x32\x29\x89\x31\x8c\xe2\x76\xba\x4d\x6f\x0e\x7f\x16\x5f\x26\x0a\xcb\xf7\xa8\x2f\x02\x96\x0a\x2c\x33\x3e\x97\xdf\x97\xaf\x06\x5a\x7b\x4d\xf4\x7c\xaa\x0d\x0c\x63\x15\x5c\x93\x36\x28\xcf\xbc\xfa\x17\x92\x7d\x0a\x28\x40\x4b\x24\x9c\x5a\xc9\x48\x38\xb5\x92\x63\x1b\xb3\x51\xad\x64\x6e\xf4\x2f\xdc\x08\x2b\xf7\x3a\xb0\x0a\x73\x8e\x15\xec\x06\x01\x8f\xfe\xe9\xb6\x11\x42\xd0\x1f\x6d\x7b\x4a\x7f\x7d\xb7\x51\xab\xbb\x12\x7a\x9f\x2d\x07\x91\x74\xc4\xf4\x99\x64\x5b\x4a\x94\x78\x4c\x26\xdb\x6e\x94\x6a\x7d\x7f\x93\x09\x69\x35\xbd\x4b\x1e\x63\x5d\xce\x79\x70\x30\x35\x1f\x39\xe7\x56\x30\xc3\x5d\xd9\x3f\x26\xff\xca\x59\xd1\xea\xb6\x32\x52\xca\xed\x67\x6a\xc7\xeb\x22\xcd\xd7\xb8\x8f\x88\xcb\x79\x65\xf7\x11\xc0\x37\xdd\xe7\x57\xc9\xf7\xf6\x9a\x2a\xfa\xef\x2f\x5f\xb0\x9d\x70\xa0\x69\xa9\x5b\x14\xbd\x23\xb3\x85\x0a\x4e\xcc\xa0\xb5\x1c\xa0\x6e\x49\xaa\xf1\x65\x51\x8d\x9c\x4c\x2d\xa1\xe5\x4a\xba\x82\xc8\xd2\xf9\x5f\xdf\xce\xa5\x47\xe1\xd7\x25\x12\xab\x2a\xc2\xce\x12\x55\xe2\xa0\x8a\xe4\x6f\x1a\x7a\xa5\xac\xf1\x07\x49\x4b\x21\x74\xe2\x92\xc1\x83\xdf\xdb\x6b\x28\xb8\x4f\x0b\x4d\x41\x77\x32\xf6\x3e\x52\x77\xd3\xa6\xb9\x83\x75\xa8\x59\x2a\x05\x1f\x4b\x29\x87\x90\xb9\x2a\x22\xe0\x21\x2c\x14\x02\x6a\x83\x4e\xb1\x9f\xfd\x4c\xf3\x01\xd7\x5c\x5b\x4f\x15\xac\x05\x12\x5e\xaf\x5b\x38\x76\x52\x32\x7a\x1f\x27\x61\xb8\x82\x42\x0e\x26\x2a\xf2\x22\xd2\xf3\xa9\x6a\x0f\x1b\xaa\x52\x4e\x99\x29\x2b\x30\x3f\xe2\x27\x78\x63\xe4\x64\xce\x20\xce\xe0\x83\xc5\x63\x69\x0a\x9d\x35\xb7\x4c\x0d\x8e\x61\xd2\x5c\x0f\x1b\x39\x75\xc3\xc7\xe2\x9f\x84\x73\xd4\xef\x9e\x4b\x1f\xcf\x15\x4f\xa5\x78\xa6\xdb\x9b\x0c\x1b\x69\x60\x2d\x95\x28\xfc\x45\xd9\xe2\x4c\xc4\xed\x81\x23\x4b\x59\x15\x54\x00\x5c\x61\x29\x1a\xbf\x2f\x51\xbc\xd6\x83\x8b\x93\x72\x2d\x91\x2d\x50\x28\x57\x9e\x0f\xf3\xf3\xf7\x24\xa3\x03\x63\x55\x0a\x60\x3d\x47\xd5\x0e\xfc\x54\x45\x44\x20\xbb\x45\x8c\xaa\xf6\xf1\xe5\xab\xd2\x78\x55\x5f\x0c\x8a\xd7\xc4\xd8\x67\xa5\x6d\x36\x4a\xca\xe4\xe7\x23\x0f\x3b\x7d\x32\xd0\x2d\x91\x38\x9e\xcc\x4b\xfc\x4e\x03\x00\xbb\x3c\x7d\x7d\xda\xe3\x71\xdc\x75\xb2\x53\x65\xee\xef\xbd\x46\x68\x23\xfc\xe2\x55\x6e\xff\xe8\x65\x30\xd7\xff\x4f\xb4\xd7\xaf\x3f\xcb\x5f\xb9\xca\xed\xc7\x26\x63\x2c\xe8\xef\x7c\x98\x73\xe5\xfc\x1f\x68\xb3\xcf\x1f\xe6\xf6\x2f\x79\x9a\x6a\x2d\x3d\xb1\x82\x93\x25\xfc\x38\x39\xc3\x83\x6f\x7c\x79\x25\x1c\x0f\xbe\xf1\xd8\x81\xbb\xe3\xd8\x68\xa1\xbf\xfd\x45\xdc\x22\xcd\x9f\xc7\x78\x54\xdd\x84\x5a\x3b\x63\x68\x30\x17\xf2\x53\x58\xed\x52\x0d\xfd\xbe\xb8\xe7\x3b\x2b\x62\xfd\xae\xf0\xe8\x61\x0f\xe0\x62\xff\x03\xbd\xab\x81\xbc\x33\x07\xfd\xf7\xc7\xec\xee\x37\x70\x6b\x8c\x0f\xf9\xdd\xe3\xa8\x1f\x08\xde\xb1\xfb\x2b\x83\xfc\x57\x53\xef\x6b\xe2\xf2\xf7\x07\xd0\x40\x66\x1a\x33\x43\x74\x60\x10\x6c\xa8\xd9\x2d\x21\xf7\xd2\xa1\xf1\xd5\x50\xf9\x58\xd6\x05\x3a\xc3\x2c\x39\x28\xa7\x72\x13\xa2\xdd\x1a\x4c\x70\x32\x37\x38\x5b\x16\x22\x63\x52\x89\xf3\x68\x11\x64\xa0\x66\xfb\x49\xb8\x87\xd8\x8e\xd6\x0b\xe5\x6f\xee\x1b\x1e\xee\x27\xb5\x1d\x74\x47\xa8\xee\x91\x36\x8e\xc7\x97\x9e\x24\xf8\x7d\xf8\x65\x47\x38\x01\x12\xec\xab\x98\xa0\x3e\x0a\x95\x34\x2d\xa9\xec\xd2\x6b\x32\xd2\x52\x4b\x21\xe1\xcd\xac\x49\xaa\xfb\x91\xed\xe6\xde\x63\x87\xac\xa0\x98\xed\x92\x1a\xd8\x49\x7a\x40\x48\xe5\x20\x00\x7b\x87\x9d\x30\x13\xd9\xb4\xdc\xca\x35\x28\xeb\xf7\x60\x05\xeb\x24\xc8\x53\xf7\x67\x11\xfa\x30\x0b\x6c\xa6\x31\x46\x62\xc1\x63\xef\xef\xbf\x9c\x52\x8e\x20\xf7\x44\x3a\x1f\xd9\xfc\x00\x97\xfb\xcb\xa4\xde\xf2\x08\x86\x3c\xc0\x37\xa3\x66\x1a\x89\x8b\x95\xf8\x21\xb2\xb3\x1a\xdb\xe5\x81\x11\x1a\xdf\xc8\x03\x26\xa5\xcb\x5e\x93\x4e\x30\xa3\xa4\x32\xa8\x2f\x2f\x73\xad\x73\xdc\x76\x2b\xde\x83\x7a\x90\xa1\x0b\x9d\x51\xf7\x64\xf1\x34\x42\x50\x06\xc2\x2a\x27\x28\x7c\x7e\x55\x1e\xd5\x5e\xf3\xa0\x7f\x7c\x9a\x07\x95\x34\x5a\xd9\x51\x59\x06\xf0\x75\xdb\x01\x1b\xb6\xe6\xfe\x37\x7c\x69\xf4\x38\xb7\xfb\xb4\xa7\x02\x76\xe8\xd6\x53\x2f\x93\x8c\xfc\x0d\xc5\xc4\xa8\xde\x21\xe8\x76\xb5\x8e\xa4\x59\xce\xa9\xe6\xbe\x93\xd4\x0d\x54\x60\x28\xac\x99\x86\x08\x96\xb1\x6e\xa6\xa5\x3a\xcb\x8e\xdc\xb5\x80\xba\xa7\xcc\x5d\x51\xbd\x5a\x72\x32\x03\x85\xb0\x4f\x81\x79\x4e\x24\x0a\x76\x45\x89\x8d\x62\x31\x87\x05\x49\x66\x74\xfe\xd1\xdd\xc8\x5e\x97\xe2\x7d\xb9\x48\x6a\xe0\xd9\xaa\xe6\xaf\x41\xd7\x62\xf5\xe1\x52\x91\xe9\x9a\x61\x0b\x49\xcb\x10\x85\xb3\x5a\xa1\xee\x5b\x27\xe3\xe8\x08\x92\x65\xbc\xf6\x96\xaa\x1b\xed\xc5\x9f\x17\x35\x2e\xe3\x44\x4a\x8b\xfa\x23\x57\xbf\x6d\x94\x51\xc7\xcb\x64\xd9\x87\xf7\x67\x44\x20\x72\x84\x22\x46\xcd\x5f\x57\x20\xfe\x3f\x2f\x8e\xe9\x9f\xf9\x13\x4d\x7a\x99\xdd\x5d\x12\xf7\x9d\x0c\x49\x06\xeb\xa9\x81\xe5\x7a\xa3\x50\x04\x8d\x46\x6d\xc7\x4c\x50\x2d\xf4\x46\x79\x7f\xab\x26\xa9\x89\x6c\x4b\x1d\x89\x58\x38\x01\x12\x17\x27\x5b\xdd\x8a\xe7\xdc\x61\x3b\xf1\x96\x33\x15\x44\x10\xad\xbd\xbf\x75\xc9\x69\x36\x24\x0f\x14\xca\x86\xe4\xd1\x9b\x58\x1c\x3a\x99\xab\x84\xf4\x98\x60\xf6\x80\x72\x9d\x51\xf3\x7a\x95\x5e\x37\x6d\x92\x5a\x91\x75\x91\xde\xde\xdf\x46\x99\x20\x0d\x95\x46\x0a\xcd\x56\x14\x8e\xa0\xcf\xdf\xd2\xd3\x2c\x24\x79\x81\x45\x5c\xfc\x13\x71\x21\x16\x9c\xc0\x37\x9a\x74\x23\xa4\x5a\x0c\x53\x65\xc9\x9e\xf4\x72\xc6\x08\xc0\x23\x25\xa8\x45\x25\x15\x95\xc5\x7f\xa5\x1d\x94\xeb\x6d\x17\x11\x56\x6d\xc9\x6c\xa3\x48\x34\xb5\xdd\x7d\xda\x02\xa5\x4a\x64\x38\x50\xe4\x85\x29\x04\xe0\xd3\x54\xe7\x31\x80\xa9\x62\x59\x1b\x48\x08\x4b\x4e\x7e\x7d\x1f\x00\xde\xf3\xbb\x00\x66\xa0\xbe\x92\xf8\xea\xaa\x89\x91\x17\xc4\xc4\x73\x4c\x20\x7b\xcf\xe0\x26\x44\xa1\x17\x54\xc2\x07\x7c\x67\x4d\xa7\xbf\x7e\x03\x81\x1e\x74\x51\xdd\xd9\xdc\x16\x05\x2f\xe8\x70\x8f\xb8\x6c\x56\xd3\x6c\xab\x8a\xee\x95\x31\x23\x5f\xcf\xda\x2a\xb5\x84\x4c\xb6\x2f\xc7\x77\x2e\xe4\x3f\x51\x3a\x71\x8f\xf8\xe3\xa5\x90\x07\xfd\xb0\x14\x62\xf7\xbf\xbe\x14\xbe\xe4\xb6\xfe\x94\xcf\xba\x38\xa8\x8a\x04\xbd\x54\x47\x42\xdc\x7d\x48\x1a\x50\xc5\x65\x3e\x82\xd3\x68\x61\x09\x66\x94\x47\xe6\x00\xb8\x71\x50\xba\xb3\x59\x42\x38\xaa\x73\xd1\x28\xe9\xfc\x61\x1c\x4f\xbb\xa1\x57\xf3\x68\x68\x44\x00\x01\x27\xc0\xf7\x5f\x97\x85\x98\x01\x28\x51\x47\xd2\x56\xbf\xd5\x03\xf6\x07\x56\x01\x01\xec\x5d\x5b\xbd\x82\x3f\x20\x18\xf7\xf5\x17\x13\x21\x92\x08\x24\x94\xa5\xfd\x92\x11\x8b\xa4\x1e\x97\x96\x79\xdb\x7d\xae\xf5\x29\xaf\x93\xe0\x7d\x72\x47\xee\x87\xe3\x71\xb8\x9f\xde\x47\x1a\xb4\x1f\x2c\x96\x41\x5e\x7c\x79\xdc\x13\x04\x23\x70\x9f\x8b\x36\x68\xff\x2b\x97\x35\x05\xe3\x5a\x7d\x40\x08\x4f\x00\xa1\x06\xd5\x11\x9b\xc4\x5b\xe4\x04\x0c\xa2\x73\x5b\x3a\x01\x84\xfd\x6c\x5d\x34\x2e\x9b\xfd\x6c\x75\xbc\x10\x62\x07\xd9\x74\x4b\x5c\x0f\xb1\xa4\x96\x4a\xb7\xb5\xdf\xcd\xa7\x80\xfb\xe2\x5f\x17\xe9\xab\xdd\xa5\xbb\x29\x3a\x6b\x4d\xa5\xb6\xb5\xdc\x35\xaf\x4b\xdd\xc0\x29\x64\x50\x89\xb7\x75\x71\x73\x33\xfb\xbe\x75\xc3\xef\x6b\xd9\xdc\x78\xb8\x43\xa6\x49\xa6\xdb\x05\x8d\x9c\x67\xeb\x62\x77\x5b\x6d\xd5\xfb\x22\xb1\xa9\xaf\xe6\x46\x52\x5d\x75\x93\x24\x08\x37\x4a\xb2\x63\x91\x04\xc8\x90\xac\x8b\xad\x0b\x8b\x18\xec\x5e\x57\x79\x7f\x6b\xc3\xbd\x77\x68\x66\xa0\x48\x53\x18\x79\xde\x85\x04\x22\xa1\xc1\x82\x55\xeb\x54\xaa\x98\x81\xc1\x90\x83\x10\x0e\xdd\x4f\x1d\x97\x0c\x10\x11\x4e\x83\xde\x31\xfc\xf5\xed\x40\xf6\x71\x69\xbb\xad\x4b\xcf\x6e\x4f\x29\xca\x41\xc1\x89\x26\xe5\x87\x1b\xf0\xb5\x56\x8f\x33\xf3\x76\x05\xb2\x3f\xba\x3e\xf1\x93\x67\xc8\x88\x07\x5e\xd7\xef\xa3\xc5\x99\x07\x73\x3f\x88\x8a\xeb\x3c\x01\x3e\x5f\x5c\x21\x68\xe2\xae\x14\x60\x7c\x3b\x69\xb8\xe2\x7c\x68\xf8\x02\xa9\x14\x18\xad\xb0\xb5\xd0\x18\xc9\x8f\x08\x21\x66\x9f\x4c\x0b\x48\xe5\x92\x24\x50\xf5\x81\x8a\xc2\xdf\x91\x1f\xa6\xf8\x94\xe4\x47\x7b\x6f\xf2\xa5\x7b\xf3\x69\x72\xf3\x15\xe8\xbe\x08\x78\x7e\x00\x71\x42\xea\x4c\xee\x0b\x5e\xea\x42\x7c\x9b\xc2\x9c\x23\x8f\x87\xee\xc1\x4c\xed\xe7\x78\x7f\xab\x73\x7a\xa7\xc8\xf7\x51\x4f\x82\xc0\xf2\x40\x87\xe1\x79\xc0\x54\x61\x1a\x65\x4a\x8b\x16\x06\xf8\x0b\x09\x0d\xcb\x05\xe0\x83\x6e\xd7\x5d\xda\x0a\xa9\x27\xb1\xea\xa7\x45\xfb\x9a\x2f\x29\x6e\x51\xf3\x4d\xc3\x68\xbc\x2f\xbd\xae\x3a\xef\xbd\xde\x3e\xd9\xc3\x7d\xd7\x9a\xba\xef\xd8\xc6\xbd\x75\xb7\x3c\xef\x58\xad\xa4\x53\x7e\xc1\x12\x6a\xbc\xd1\xbf\x0a\xe5\x95\xf0\x7e\x2a\x97\xbb\x2a\x07\x7f\xdd\x51\x68\x85\xdd\x7d\xb0\xbd\xbf\xcd\x62\x09\xd8\x2a\x24\xb2\x7a\x2a\x41\x7d\x8d\x20\x7d\x90\x72\xa0\x92\xa1\x26\x54\xf1\x52\xff\x1b\x68\x1b\x71\x3b\x02\x4f\x4e\x02\xdc\x5a\xc9\x37\x44\xdf\x50\xd8\x19\x84\xe6\x2c\x7d\x0a\x10\x33\xcd\x0d\xc2\x3e\x48\x18\x9d\xc2\xd7\xb7\x3d\xe0\x6d\xd0\x0a\xed\x97\x6f\xe3\x67\xdc\x28\x04\x64\x7b\xe4\x80\x98\xe2\xd8\xf1\xac\x2c\x16\xf6\xd9\xfa\x5b\x8c\x93\xdc\x0d\xc7\x0c\x10\x7a\x90\x10\x1a\x5e\x4f\x3f\x87\x9f\xcc\xa4\x7a\x6f\xb2\x96\x71\xd7\xbe\x2e\x65\xdc\xdd\x0a\xf1\xb7\xe5\x9f\x3a\xee\x8b\xf6\xd5\x3f\x9a\x04\xb1\xa3\xdf\x77\xcd\x61\xde\xb9\x83\x8c\x61\x3b\x13\xe9\xa6\x3e\x68\x74\x3c\xaf\xa6\x20\xbe\x93\x2b\x51\xe6\x3f\x84\xa1\x1d\x94\xe1\x25\xa9\x12\x56\xc7\xa6\x9a\x74\xd5\xe0\x16\x78\x23\x9a\x81\x03\x0c\xe5\x2f\x4c\x23\x43\x48\xe7\x60\x39\x10\xd9\x46\x40\xbf\xdb\x1e\xa8\xc9\x0f\x7b\xa0\xbb\xb0\x06\x3f\xc4\x10\x1a\x25\x91\x70\xd9\x26\x48\x6d\xc1\x26\xe7\xf6\x37\x9c\xaa\xc1\x09\xc1\xdf\xc6\xf9\x08\x07\xab\x14\xbc\x07\xa1\xe1\x47\x92\xc6\xdb\x2f\x71\xf7\x27\xd6\xee\x69\x9e\xe1\xcb\x89\x59\x40\x8e\xf3\x33\x36\xdc\x76\xaa\x5d\xe1\xa0\x2d\x4e\xa5\x19\xfe\x04\xce\x0f\xce\xf3\x7c\x32\x9e\xb3\x75\x79\x37\x3e\x21\x4e\xe3\x90\x8d\x11\x81\x67\x6d\x48\x40\x05\x8b\xf0\xf3\x88\xf8\xf1\x04\xc7\xf5\xe5\xdc\x16\x23\x43\xaf\x91\x21\x1d\x62\x7f\x1f\xb5\x2b\x46\x9f\x71\xe0\x7e\xde\xae\xe3\xa9\x5d\x47\x6b\xd7\x18\x16\xd5\x1b\xcf\x03\xb3\xa0\x3e\x46\x71\x90\x0b\x86\xf2\x55\xdc\x26\xd6\xe4\xc7\xd7\xc7\x1e\xf1\x36\x1e\xe3\x19\xd3\xac\x76\xda\xed\x2b\x98\x4e\xce\x79\xce\x88\x0b\x04\x2c\x90\xf8\x5f\x6e\x42\x48\x04\x72\xfd\x44\xf2\x26\x6c\xc7\x54\xe9\x47\x1d\x95\xa5\x01\x39\xb5\x10\xa1\xd7\xe4\x33\x2e\xd7\x4d\x4b\x65\xf7\x5f\x24\x81\x7d\xc6\x4f\xd8\x2e\xce\xa5\x72\x6a\xd6\xab\xdf\xcf\x63\xca\xcf\x0c\xaf\x26\x12\x9d\xfc\x3b\xd9\xa4\x2f\x15\x41\x7f\xea\x27\x36\xa9\x89\xa5\x5e\xc9\x4b\x08\xa7\x18\xf4\x98\x58\xee\x7d\xca\x41\xe5\x74\x83\x75\xa3\xea\x4e\x0f\x79\x0d\xa9\x8c\xbd\x5b\x08\x36\xf8\x8e\xe6\x16\xfe\x98\x69\xe8\xa5\x3e\x08\x96\x7a\xf7\x81\xe6\x5d\xb2\xac\x9a\xf7\xe6\xdd\x90\xec\x80\xef\x6f\x48\x7a\xe0\xd2\x9d\x18\x6f\x89\x0e\xa3\x24\x3e\x5b\x97\x59\xef\x8b\x99\xad\xb3\xba\xdb\x42\xa0\x8d\x0d\xd0\xef\x0b\x2a\x32\x74\xbc\xbf\x15\x90\x43\xd9\xda\xea\xdd\xf7\x5d\x1a\x0f\x7a\x7f\xeb\x96\x83\x82\x18\x11\x13\x82\x82\x22\x7b\x51\x7c\xc6\x52\x82\x26\xb8\x38\xce\x50\x42\x42\x52\x42\x5a\x0a\x12\x2e\xd4\x55\x06\x93\x0e\x7b\x6a\x05\x21\xfb\x66\xee\xe6\xc3\x41\x37\x72\x96\x5b\x3f\xb1\xf1\x1d\x92\x1e\x58\x77\x33\x0b\x36\xf7\x20\xe6\x1b\x81\x45\x69\x85\xe1\x96\x9d\x94\x13\x01\x31\x24\x14\x46\x11\x7a\xb4\x2b\x01\x27\xe5\xd4\x9b\xb0\x80\xf8\x82\xd3\x2a\xd3\x17\x2b\xa0\x60\x5c\xc8\x70\x4e\x10\x2a\xb9\x6a\xc1\xb3\x3a\x8c\xa6\x90\x69\x8a\x9c\x77\x46\x01\x6d\xb9\xdd\x7b\xd4\x00\xf8\x7f\x3d\x08\x76\x0a\xa6\x1a\xb8\x80\x06\xe3\xc7\x20\xe2\xcf\x52\xac\x32\x12\xff\xf4\xb9\xbb\x9f\x8a\x08\x84\x3f\x43\x98\x7b\xe0\x9c\x05\x34\x70\xcb\xc8\x98\xbc\x7a\x90\x6b\xd5\x6b\xe0\x07\xd0\x19\x75\x59\xe0\x75\xe0\x37\x84\x55\x00\x2c\x03\xd4\x68\xf8\xb4\x0d\xac\x68\x4e\xf9\x5e\x41\xcb\x59\x53\xc0\xa5\x0b\x91\x54\xc7\xa2\x8c\xa1\x8a\x7b\x06\x16\xd6\x1b\xe3\xac\x45\x22\x1e\x45\x6c\x75\xa6\x1c\xd6\x2a\xb5\xcd\xdb\x47\x71\x5c\x1b\x33\xf5\xea\xfe\x54\x47\xa0\xcc\xbb\x16\xe5\xf2\x90\xe7\x73\x57\xc3\xbf\x10\x75\x30\x8e\xf3\xf3\xdc\x10\x3b\xf2\x38\x08\xaa\x49\xaa\xa3\x6c\x52\x50\xa2\xb3\x2e\x9d\xe1\x39\x82\x0d\x86\x2f\xdf\x05\x3f\x0a\xa8\xe2\x8b\xae\x0c\xeb\x48\x41\x57\x96\x51\xee\x35\xd4\xca\x67\x5e\x45\x6a\xfc\x59\xef\xbd\xac\xfe\x6b\xed\xeb\x22\xc8\xdf\x7b\x4f\x57\xc9\x15\x07\x42\xf5\x23\xbb\xc9\x91\xf7\xde\x12\x50\xac\x89\x43\x80\x96\x49\xb7\x1b\x15\x5e\xdb\xba\xcc\xce\xd1\xd5\xea\x5d\x7c\x90\x5d\xf3\x58\x47\x1e\x9f\xf5\xb3\x10\x46\xc7\xfa\x32\x2f\xbc\xa4\x4d\xcc\x65\xf9\x7b\x31\xac\x19\x98\xfe\x59\xef\x71\x70\x6d\x29\x7e\x39\x62\x97\x15\x87\xe1\xa8\xf3\x54\xc7\x79\xf6\x4f\xe7\xb5\x3f\xe5\xcf\x97\xb0\xf3\x9f\xf6\xa9\xaf\x3d\xd3\xa8\x65\x1d\x73\x83\x0d\x96\xc7\xfb\x5b\x07\x7d\xd1\xd8\x7a\x49\x7d\x6e\x4b\xcf\xa9\xcf\x75\x91\x66\xf7\xa5\xcc\x55\x0a\x14\xe3\xd7\x85\x5f\xca\x2a\xd4\xb4\x73\x7f\xb2\x6d\x93\x44\xe3\x77\xc5\x0a\x85\x54\x27\xe8\x2c\x8d\x01\x59\x9f\x78\xfc\x75\xb4\xb9\x0e\x23\xf3\x98\xcf\x0c\xed\xfd\x4d\x4a\x77\x27\xd0\xbb\x16\x44\x2a\x34\xe9\x5c\x97\xa1\x6e\x9b\xad\x43\x38\x7e\x8a\xd1\xf4\x93\xd9\xd3\xc4\x0c\xf4\xe3\xbe\xf9\xbb\x7d\xdd\x7a\x68\xb5\x3d\x9e\xb0\xe0\x09\x6f\x6f\x0d\xf4\x59\x79\xba\x01\x28\xeb\xd2\xda\x1d\xba\x17\x13\x4b\xb8\xae\x4b\xed\xf8\x43\x05\x3c\xda\x3e\x37\x9b\x2f\x6c\x35\x21\x2e\x63\xe0\x08\x4b\x7e\xb5\xa5\xe7\x4d\xa4\x25\x3f\xcd\x6c\x9b\x30\xd0\xd9\xef\x5a\xfb\x2a\xb9\x6d\xd4\xef\x2a\x5b\xef\x49\x46\x59\xd1\xbe\xa2\xf0\x77\xed\x9c\xb9\x58\xa0\x14\x9a\x12\x7a\x11\xa9\x45\xa8\xbf\x51\x1c\xc2\xe4\xa4\x2b\x88\xaf\x12\xdc\x7f\x64\xf8\x9a\xfc\x76\x5f\xa6\xac\xde\x29\x37\x9f\x59\x66\xa6\x54\xc7\xcc\xac\xb6\xf6\x9b\xd4\x96\x6f\xdb\x00\xad\xf0\x36\x14\x64\xbe\xb9\xef\x92\x67\xd0\xf0\x2e\x63\xbe\xbf\xcd\xe6\xaf\xbe\xdc\x51\xa3\x81\xfa\x36\x3f\xd2\x5d\x77\x0c\xa8\xaa\xd1\x13\xc6\xd9\x13\x46\xf4\x04\x8d\xc1\xa1\xe6\x5e\x3b\x8b\xdd\x6b\xbd\x86\x46\xf9\xf6\x34\x38\x90\x88\x78\x1d\x1e\x17\xe9\x85\xef\x7d\x6f\x7d\xac\x22\xb2\xa1\x0e\x74\xad\x75\x43\xbb\xfb\xcd\x8c\x7b\x69\x1b\x8b\xe8\x57\x11\xdb\xd4\x07\x2f\x68\xd2\x6b\x91\xfb\x9c\x9b\xe4\x24\x61\xa6\x61\x3a\xbc\x2f\xa3\xad\xda\xe7\xed\xee\x1e\x06\x66\x26\x12\x5c\x8e\xb0\x78\xa1\x13\x04\x53\x25\x02\xf7\xe7\x55\xdb\x75\x55\xed\xf7\x3a\x7c\x4d\x5b\xea\x58\x65\xe8\xdd\xfa\xf0\x19\xc6\x3d\x0a\x30\x6d\xa5\x52\xfc\xef\x1a\x7f\x1b\xfe\xd6\x32\x2f\xde\xea\x8c\x72\x81\xbb\x7a\x9f\xea\xde\xbb\x48\x16\xac\x54\xbc\xf0\x9f\x9b\x8e\x0d\xa4\x0d\xb3\xe3\x73\x7a\x93\xcf\x11\x67\x54\x5e\xa1\xf9\xc0\x84\x7b\x34\xef\x24\x83\xa9\x35\x5d\xcd\x76\x5c\x6d\x89\x99\xe4\xf6\xfd\x54\x72\x91\x20\xa3\x85\x97\x86\x47\xf0\x55\x08\x6b\xe1\x82\x12\xde\xf3\x0e\xfb\xf9\x76\x10\x50\xe2\xaf\x86\x78\x8b\xee\x24\xf8\x46\x6c\xd2\x7f\x56\x0c\x27\xba\x93\x28\x88\x10\xfe\x6c\x65\x43\xd5\x5a\x1d\x9b\x5b\x2f\x75\xac\x8b\x95\x79\x5f\xbc\xe9\xac\xd8\x56\x7d\x4e\xde\x20\x8f\x3d\x57\x15\xb9\x7b\x9f\x94\x1d\x9a\x68\xa0\xd7\xbd\x2f\x92\x75\x95\x5e\xee\x73\xae\x63\x1f\xf1\x46\xf5\x40\xdc\xee\xbe\x8c\xbe\x56\x9d\x7b\xed\x14\x1c\xd6\x72\x5f\xb4\xac\xd2\xc6\x6d\x07\x81\x30\x88\xb4\xb0\xda\xb4\x54\x1a\x01\x18\x16\xd4\x1e\x76\x40\xfe\x52\xc1\x2d\xb1\x90\x2d\x04\xb1\xf3\xa5\x34\xf4\x69\xb7\x93\xc8\x47\xc3\x43\x82\x73\xba\xc1\xd2\x59\x97\x36\xef\xcb\x9c\xd8\xcb\xc7\x88\x54\x84\xa0\xa1\xd7\xb0\x08\xb2\x24\x0b\x84\x39\xb5\xcd\x34\x99\x92\xd4\x72\xf1\xe7\x40\xc0\x8c\x55\x94\xa8\x76\x9e\x89\x5c\xc5\x54\x48\xa0\x96\x91\xbf\xa2\x0a\x7b\x6d\xcf\x69\x06\xb3\xcd\xb7\x7a\xb0\x98\xc8\x88\x84\x59\x18\x96\x0b\x36\x8e\x01\xa3\x5b\x83\x88\xc7\xe7\xa8\xfb\x32\x51\xa8\xe6\x37\xb9\x91\x9a\x77\x87\x15\x83\x3e\x54\xbe\xc5\x9d\x76\x82\x61\xdd\x4a\xd3\x7e\x8e\xfe\x98\x37\xfc\xa5\x63\x75\xad\xf2\xe1\xe8\x47\x25\xbb\xfe\x38\xab\x76\x59\x5b\x73\x93\xb7\xd5\x64\x98\xdd\xc1\x72\x40\x24\x63\xc3\x54\x75\xf7\xa1\xa4\x8d\xf9\x31\x2b\xee\xcd\xd3\x33\x44\x39\xee\x01\x76\xd6\x74\xb2\xdf\xb0\xf5\x35\x05\x82\xb7\xa7\x8a\x77\x33\x93\xb6\xd4\xf2\xd1\x5a\x52\xb9\xad\x42\xed\x6d\x58\x06\x60\xb8\xa7\x22\xc1\xa2\xa1\xfa\x99\xe4\xe1\x78\xc1\x2c\x3c\x40\x09\x18\x7f\x51\xa1\xaa\xb3\xbe\xeb\xf2\x5b\x4a\xee\x28\x05\x26\xb7\xb7\x45\x1d\xab\x41\x0f\xb4\xf2\x19\xc2\xe1\x37\x8b\x67\xb0\x78\xd1\x6e\x34\x9b\xa4\x1a\xe4\xaf\x88\x4c\xa7\x81\xdf\x2e\x01\xe9\x90\x7e\xc3\x93\xb8\x05\xee\xcf\x02\x4e\xa4\x15\x0a\xb3\x7c\x98\xf1\xfa\x30\x7a\xca\x67\x87\xb6\x69\xbd\x45\xf6\x50\xbd\xd9\xc5\xb0\xce\x21\xd0\x91\x57\x30\x91\x0b\x12\x05\x76\x5f\x34\xdb\xb9\xae\xb5\x58\xd7\xca\xd3\xba\x86\xe8\x3b\xe7\x2c\xc8\xf6\xb2\x8e\x69\x80\x3f\x42\x6c\xac\x6e\x0e\xd4\x19\xec\xf1\x3a\x12\x30\xaf\xd7\x7a\x84\x92\xfc\x85\x0a\x9d\x4c\x95\x86\xde\xdb\x15\x2b\x04\xbe\xca\x68\xb3\xc3\xee\x1f\xf4\x25\x96\x3a\x4e\xb6\xd0\xbc\xea\xdc\xa6\x26\x15\x5b\x67\xdf\x38\x77\xfa\x3a\x56\xdb\xea\x13\x3c\x64\xe3\xc6\xb8\xcb\x18\x6b\xfb\x32\x57\xfa\x52\x69\xfd\x67\xf9\xc4\x30\xea\xa5\xa6\x66\x79\x3f\xc9\x35\xc9\x0e\x2c\x0f\x6a\x06\x05\xbf\x5f\x44\x1d\xda\xf3\xf0\x2b\x6e\x48\x5a\x4f\x7a\xb1\x2b\x40\x1c\x39\xc2\x0e\xed\x5a\xdb\x49\xf5\x53\x6a\x94\x92\xf8\xa4\x41\xd9\x14\x92\x67\x40\x9d\x05\x38\x83\xba\x11\x57\xb0\x09\xc8\x5f\x77\x05\x73\x93\x25\x91\x55\xa0\xc2\xc5\xd0\x8a\x1e\x7a\x85\x6f\x95\xc1\xdb\xf7\x37\x19\x43\xae\x07\x69\x8f\x07\x39\x16\x92\x20\xeb\xe3\x21\x7a\x92\x76\x23\x2b\xd0\x3f\xf0\x04\x55\x2c\x0d\x68\xcd\xd6\x19\x0b\x3e\xc9\xdf\x88\x0f\x52\x82\x4a\x80\x3c\x22\x55\x84\xb0\x74\x81\xfe\xca\x40\x94\xa2\x25\x44\x1b\x0f\x9f\xde\xeb\xda\x1b\xc9\x32\xd5\x5d\xbd\x0d\x31\xeb\xbc\x4b\x1a\xa9\x27\xb1\x43\x48\xe4\xea\x4d\x12\x5a\x38\x72\xa0\x43\xec\x83\x74\x5c\x1c\x53\x07\x44\x5f\x30\x8c\x87\x2f\x9e\x63\x6e\x45\x92\x36\x41\xed\x81\xcf\x9f\x02\x26\x00\x9f\x26\xdb\x85\x1c\x95\x50\x72\xd2\x0e\xa7\x78\xd6\xe4\x76\x0a\x79\x1e\x25\x68\x6d\x4b\xa8\x5d\xa3\x4e\x9c\xbc\x87\x9c\xbd\x67\x39\x58\x9e\x67\xd1\x62\x75\x24\xd1\xc3\x1d\x43\x8a\x3c\x48\x44\xa6\xe5\x9c\x8d\x00\xf6\x58\xdb\x64\x98\x0c\xcf\x1b\x6b\x46\x07\x9f\x93\x37\x51\x82\x65\x34\x13\x38\x37\xfa\x55\xc4\x28\x21\xd2\xc5\x2c\x64\x6d\x34\x72\xab\xaf\xe6\x98\x44\xfd\x64\x8d\xc3\x99\x56\x56\x18\x91\x25\x2d\x27\x51\xef\x19\xf9\x9b\x37\x4c\x7f\xa2\xa7\x1c\x5e\xcf\x94\x35\x85\x34\x16\x49\xef\x48\x08\x62\xbc\x65\x5b\x7b\xdf\x71\x1b\x02\xe9\x32\xb7\x6b\xad\x8d\x20\x96\xf6\x25\xb7\x95\xf9\x0b\x9d\xc2\xa7\x11\x96\xe1\x82\x5f\xe0\xd3\x4e\x31\x74\x17\x70\xaa\x35\xa8\xff\x79\xa7\x68\xff\x4c\xa7\x90\x59\x87\xf7\x8a\xdb\x27\xdd\xe2\xa5\x57\xb4\x7f\xb6\x57\x20\x40\x82\xe4\x0c\x54\x2b\xa3\x3e\x45\xc9\x39\x81\xc8\xea\x67\x3d\x43\xa5\xb7\x34\xe6\xb8\x0b\x81\x87\x78\x21\xee\x28\x97\xab\x57\x30\x6a\xcf\x76\x44\xf8\x36\x2d\x38\x67\x4d\x7c\xf1\x68\x4d\xef\x4a\xad\x45\x70\x56\x19\x4a\xb0\xa9\x90\xcf\x5e\x6a\xc4\x41\x5b\x24\xcd\x33\xcf\x08\x33\xe8\xa3\x89\x68\x92\xb2\x1a\x31\x7b\x89\x29\x88\x50\x8b\x7f\xa7\xb0\x5f\x7f\xad\xb6\xa8\x9f\xb9\xc7\x75\xf6\xd4\xb0\xf6\xa1\x6c\x40\x59\x1f\x82\x39\x0c\xcd\x83\x07\xb9\x68\x0c\x8b\xa4\x09\x3c\xa8\xce\x64\x39\xd5\x9e\x2c\xd3\x2e\x05\xdb\x8f\xba\x7b\x94\xad\xa6\x06\x7d\x29\xc9\x7b\x4b\x73\xb8\xff\x3f\x07\x03\x51\x00\xa2\x8c\xf7\xb7\xd2\x5b\xaa\x88\x6d\x61\xdc\x58\x22\x77\xb3\x64\x49\x15\x54\xf7\xc6\xbe\x51\x95\x16\x44\xa3\xc5\xa1\xcd\x9b\x48\x1b\x45\x4f\x50\x58\x60\x31\x48\x58\xf2\x42\x85\xfd\x89\x89\x88\x1a\x63\x40\x53\xd8\x40\xac\x0c\x39\x09\x30\x40\xe6\x79\x0b\x09\x16\xd3\x47\xf9\xdd\x3c\x55\x2b\x28\x79\x5a\x52\x7d\x58\xab\x12\x24\x33\xdf\xce\x74\x02\x4f\x28\xe7\xea\xd2\x4f\xbd\x9e\xae\x88\xb5\x6d\x9c\xb9\xc4\xf6\xae\x51\xfe\x04\x4a\xf9\x7d\xc8\xc9\x13\xd8\xbd\x4d\x8a\x24\x70\xb3\x74\xea\x76\xf5\x32\x37\xe4\x45\x65\x5d\x66\xbb\xc3\x15\x17\x18\x40\x72\x9e\xb1\x6c\xa8\x0d\x63\x95\xca\x22\xd9\xd6\x06\x2f\x1e\x6b\xeb\x28\x89\xc4\x81\x00\x91\x22\x41\xcb\x54\xee\x8e\x84\x5f\xf7\x53\xdf\x45\xc6\x0d\x19\xc0\xa5\xb3\xea\xae\xef\x4b\x61\x3e\x50\x53\xcd\x77\x99\x7d\xed\x3d\xd8\xd8\xbb\x96\xbb\x18\xf1\x30\x90\xc5\x4c\x76\x66\x0f\x49\xbc\xe3\x76\x01\xad\xfc\xe2\x03\x31\x27\x58\xd1\xe6\x56\x34\x3c\x86\x7c\xb7\x0c\xaa\x39\x13\xe8\x7f\xc9\x2e\x60\xf1\x6a\x64\x41\x16\x94\x3f\x4d\xec\xe8\x07\x2c\xfe\xc5\x0f\x85\x12\x60\x4b\x0d\x05\x26\x6e\xd5\x21\x80\xd3\x27\x62\x8b\xd0\x96\x14\x49\x55\x2f\x91\x10\x6f\x0d\x5f\x1f\x46\x2a\x1d\x86\xdf\x7d\x69\xa5\x02\x9e\xab\xf5\x2e\x55\x6e\x3b\x69\xa9\x41\xc0\x2c\x12\xec\x52\x56\x52\x6d\x7b\x93\xd4\x00\xc5\xd4\xec\x37\xa5\x7d\xa4\x09\x21\x0f\x23\x00\x34\x80\x1b\x6e\xd3\xd5\xf6\xc0\xce\xd7\x76\xf0\x83\xb8\xad\x85\xd1\xcc\x46\x9a\x68\x1c\x86\x09\xc2\xe7\xb3\x86\x68\x01\x2b\xf7\x46\x12\x9f\x75\x2b\x74\xf3\xa0\x29\xef\x33\xd2\x8c\x7a\x1d\x09\x42\xf5\xb3\x7d\x39\xa5\x88\x06\xcd\xd5\x18\x90\xaf\xa8\xbe\xfe\x09\x24\x31\x7c\xd8\x00\x8b\xcc\x9c\x27\x84\x1f\xa9\xcb\x89\x24\x24\x58\x49\xe5\xa2\xce\x6f\x96\xdc\x6b\x50\x43\x80\xd9\xcf\xda\x56\x2d\xbe\xaa\x49\x49\x9a\xae\x18\xc7\xbf\xcb\x8c\xf6\x82\x7b\xf9\xb3\x7d\x86\x7b\xa9\x75\xa4\x36\x0a\xc8\xce\xcc\x5f\xc5\x44\xb4\xbd\xfd\xec\x21\x4e\xe2\x64\xb7\x2f\x3a\xe9\xe7\x21\x19\x09\x2d\x7e\x6f\xfc\x6f\x35\x75\x98\x14\xa1\xba\x4d\xb3\x33\xc3\xcd\xed\x8d\x9d\x19\x9a\xcc\xa4\x58\x6d\xd0\xe5\x38\xd9\xa4\x53\x14\xa7\xb2\x96\x44\xbe\x5d\xbe\xdf\x75\xc0\x42\xfc\x50\xb7\x74\x46\xc4\x0b\x56\x97\x72\x26\x5c\x7d\x4e\x45\xfe\x4e\xcb\x8e\xb9\x2b\xd1\xb9\xa3\xab\x91\x4f\xdd\x81\x9b\xcf\x0f\x90\x57\x6b\x00\x9e\x50\xba\x2c\x0c\x9d\x70\x55\x7c\x81\x1b\x25\xcd\x06\xc1\x16\xbf\xea\x49\x07\xcf\x9c\x07\xe8\xaf\x87\xdf\x9a\x60\x09\xc0\x74\x3a\x53\x6b\x7b\x45\x42\x71\x4a\x1a\xe3\x60\x91\x0e\x64\x82\x50\x4e\x00\x66\x66\xf0\xf2\x30\xb3\xa7\x2c\x1b\x63\xa9\x50\x52\x28\x02\x58\xee\xdc\xf3\x21\x15\x83\xc2\xb5\x02\xe9\x85\x36\x8e\x36\x92\xe2\xdf\x45\xc7\xa1\xa4\x04\x8b\xf8\x21\x26\xee\x9d\x72\x6f\x23\x29\x8e\x56\x12\x8e\x85\x98\xb6\x1b\x37\x23\x59\x03\x37\xd6\xc0\x13\xa5\x7e\x68\x68\xc2\x7f\xd5\xc1\x5e\x30\x24\x7f\xf6\x4f\x81\x55\x25\x28\x06\x9e\xde\xe4\xbf\xfa\x9d\x3f\xf5\xaa\xf7\xb7\x9a\x2d\x99\xd4\x6d\xf4\x9e\xba\x3b\x18\x45\xc1\x08\x48\x5e\x66\x29\xed\xa1\x81\xc0\x16\x9e\x2c\x22\x6b\x44\xb4\x72\x65\x65\x63\x0c\x78\xaf\x6d\x06\x3b\x35\x4b\x46\xc3\x3d\x85\x9d\x05\xe6\x52\xb8\x55\x15\x34\x9b\xb7\x7f\xe5\xb0\xd9\x7c\x69\x16\x9d\x6b\xaf\x90\x71\x68\x49\x40\x5f\xe5\x5e\x48\x75\x7f\x57\xd2\xec\x2f\x03\x17\x99\x60\xf5\xfe\x94\x81\x7c\x9d\xed\xb3\x61\xf0\xaf\x1d\x05\xb7\xff\x53\xc3\xe0\x9f\x1a\x05\xaf\x79\x95\x57\xb8\x7a\xc9\x97\xf8\x0c\xaa\xa5\xf3\xbd\xe7\x20\x07\x21\x8f\x1b\xe8\x63\xd6\xa5\x95\x27\x3a\x99\x65\x06\x13\x1a\x78\x51\x82\x80\x86\xfc\x33\xa4\x9f\x79\x62\x98\x9f\x60\x82\x23\xc0\xe5\x6f\x3c\x3d\xc1\x91\xff\xc8\xf9\x6f\xbf\x76\x81\x32\x32\x30\xab\x6b\x29\x63\xa3\xf4\x50\xdf\x97\x9e\xa8\xa4\xef\xc6\x9d\x49\x0f\xba\xc5\x13\xe6\x7c\xb2\xaf\x80\x9a\xb2\x95\x9f\xb1\xe7\xdd\x97\xc9\xa1\x37\x2c\x98\x13\x4a\x04\x9d\x8c\xb2\xf5\xeb\x32\xdc\xfc\x6d\xb4\x26\xc4\x30\x29\x1c\x08\x7f\x14\xf9\x56\xef\xb3\xea\xc7\x2c\x7c\x1f\x68\x02\x58\x9e\x9b\x5b\xb6\xad\xdf\x76\x01\x2a\xa2\x82\x64\xa1\xcf\xa4\x6d\x35\xcd\x74\x8a\xa0\xad\xd9\xa0\x81\xdb\xcc\x0f\x58\xa4\x75\x3f\xf8\xaf\xb2\xc4\xf4\x97\x82\xff\x3f\x2f\xba\x00\x71\x4b\xae\x80\x65\x28\xcf\x4b\xa7\xb6\x51\xdf\xeb\x40\x6e\xab\xb1\x70\x00\x42\x31\x51\xb5\x17\x99\xe1\x1d\xba\xd9\x19\x49\x56\xc8\x45\xcd\x83\x39\xe2\x64\x05\xf0\xa0\xec\x3e\x7f\x4b\x66\xf3\x30\x73\xef\x39\x02\xb6\x84\x24\x32\xe7\x80\x5c\xca\x3c\xa9\x42\x7c\x16\x0d\xdd\x86\xb4\x0c\xb9\x6e\x2b\xa6\x7a\xf7\x6b\x19\xd2\x14\xbe\x09\x9f\x50\xee\xdd\xe7\x84\x12\x92\x45\x21\x5b\xcd\xfb\x60\xbc\x4d\x4a\xc4\x09\x98\xc0\x10\x44\xba\xc9\x3e\x82\x2c\x37\xa5\x3b\x24\x11\xcd\xcf\xb2\x5b\xa5\xf5\x0d\xe6\xcd\x36\x48\xd5\xee\x6e\x53\xcf\xa9\xc5\x15\x7b\xc2\x1c\x25\xe7\x1c\xe7\x9e\xb1\xc8\xdc\x5b\xc8\xeb\x82\x77\x80\x8e\xed\xfb\xbf\x97\x46\xc3\xed\x7f\x52\xa4\xe1\x7f\x4f\xa3\xa1\xbf\xf0\x5b\xfd\x79\xc9\xb6\xcc\xae\xa9\xa3\x82\x0f\xdc\xad\x20\x76\x97\xe6\x1d\x18\xd5\x53\x6e\xab\x35\xbb\x14\x72\x2d\xc6\x40\x0e\x96\xd9\xa5\x9f\x05\x11\xa1\x32\x78\x39\x14\xa2\x89\x24\xf1\xd2\xed\xa2\xdd\x95\x53\xee\xb5\x25\xd0\x52\x30\xee\x23\xad\x1d\x14\x3a\xcd\x76\x21\x03\x4f\x25\x19\x38\x98\x60\xfc\xea\x07\x7a\x21\x64\x79\x01\x96\x38\xc5\xd3\x0e\x92\x14\xc3\x7d\x5e\xc2\xcd\x39\xb9\x72\x10\x6a\xc5\xd7\x7d\x99\xc4\x58\xbb\x1b\x6a\x37\x70\xe9\x01\xf8\x64\x69\xd8\xce\x5a\x22\xd4\xbe\xc4\x92\x96\x0f\xbf\x75\x66\x9a\xf6\x85\x8a\x4e\x1c\x13\x69\xe2\x95\x63\xe0\x68\x63\x20\x50\x2a\x90\x24\x3a\xf3\x21\x3e\x7f\x41\x14\x4b\x4b\x4b\xdd\xef\x6a\x80\xfe\x05\xb9\x5c\xbe\x70\x94\xb7\x7f\xab\x1b\x83\xb3\xe2\x4e\xa2\x24\xe2\x65\x44\x0f\xbf\x46\x5b\x7d\x78\xd7\x14\x99\x10\xd9\xbd\x5b\x23\x98\xd7\x82\x12\xa4\x09\x03\x4d\x20\xcf\xbd\x98\xff\x27\x25\x05\x96\x1a\x04\x41\x8b\x18\x68\x20\x52\xed\xc8\xa1\x74\x4b\x5a\x6e\x47\xef\xa9\xe6\xa3\xf6\x60\xb6\xf0\xee\xce\xea\x01\xa5\x22\x6e\x69\x60\x57\x6b\xc4\x65\xfc\xad\x43\x75\x57\x46\xc6\x51\x52\x52\x76\xb7\xd3\x92\x96\x34\x0e\xc4\x8b\x74\x83\xd2\xdf\x84\x59\xa6\x29\x4a\x8a\x35\xa2\x74\x1a\x40\x78\x64\xc4\x0c\xd6\x1e\x4d\xde\x71\x2c\x5a\x23\xc0\xbe\x2f\x54\xbc\x81\xe8\x50\x93\x1b\x75\x88\x20\x43\x24\xad\x24\x28\x13\xb9\x73\x3e\xc7\x11\x1f\xe7\xcf\xe7\x7e\x3c\x70\x37\x94\x5e\x55\xf8\xe2\xa2\x87\x12\x1f\xf4\x55\xee\xa4\xbf\x02\x38\xfe\xfb\x53\x85\x94\x39\xbc\x21\x74\xf7\x45\x67\x16\xe8\x1c\x9f\x54\xe2\xf8\x0a\xda\x62\xf0\x0f\xab\x1a\x50\x40\x50\xc1\xfe\x0e\xf4\x1e\x04\xbd\xb6\x2d\x8a\x2f\xf2\xcc\x43\x6b\xac\x8a\x08\x22\x60\xd4\xf2\xe4\xba\x2d\x0d\xc4\x2a\xd9\x1e\x35\x5b\xa4\x07\x73\x5f\xdc\x4e\x25\x2c\x1d\xa0\x4c\x6e\x65\x73\xd7\x1f\x09\xa5\x6c\x84\xa6\x5a\x4f\x33\x6f\x7e\x96\x96\xed\x3a\xef\x7e\xde\x14\x40\xfc\x60\xb8\xb5\xcd\x6f\xca\xef\x29\xf0\x56\x7e\x23\xb7\x83\xf7\x75\x3d\xd0\xa6\xc8\x85\xd7\x7d\x9a\xb7\x01\x9e\x3b\xcd\x72\x11\xad\x97\x77\x18\x8a\xad\x6c\xb5\xb7\x54\xbb\x8f\x8b\xe9\x03\x4a\xb7\xc5\x7f\xf1\x7f\x40\x4b\xb8\xca\x17\xfc\x17\x7f\xca\x9f\xbf\xbd\xbc\xa3\xcf\x55\x6c\xa4\x92\x00\xb7\xa3\x44\x22\xc4\xfb\x10\xa8\x61\xf9\x89\x90\xaa\x1e\x84\x64\xd4\x81\x91\x7d\x31\xb7\xf5\x1b\xaa\x6e\x1a\x08\x08\x74\x87\x2e\x26\x38\x5f\x00\xa5\x94\x27\x52\x78\x50\xcb\xeb\x05\xee\x55\x89\x99\x46\x47\x42\x5a\x4f\xb7\x66\x23\xd5\x3e\xf7\x3a\xdd\x72\xf2\x41\x5a\xcb\xfb\x5b\xcf\x2d\xd5\xac\x7b\x30\xd3\x4a\x0e\x91\xdc\x7c\x4e\xc3\xbd\x6d\xee\x49\x91\xc7\x8a\xc3\x88\xce\x5c\xe9\xa0\xe0\x8d\xa2\xb6\x07\x70\x4c\x06\xf2\x56\xb7\x93\xb2\x4d\x58\x78\x08\xba\x3a\x19\x06\xe0\x86\x6a\xde\x3b\x42\xe4\x88\x08\x1e\x40\xbb\x61\xe5\x9f\x34\xa4\x0e\x70\x35\x76\xd6\x2d\x55\x37\xf7\x76\xa8\x4a\x22\x26\x9b\x40\x92\x76\xc0\xa9\xec\xed\x18\x83\x74\x95\xbe\xc2\x31\x40\xaa\xac\x8e\xfc\x6a\xa8\xbd\xd0\x62\xfd\xf9\xfb\xa7\x3c\x80\x33\x54\x2c\x6c\x94\x75\xf1\x3f\x81\x47\x2f\x3e\xed\xba\x07\x56\xfc\xee\x95\xea\x39\x00\x4c\xef\x96\x93\x76\x3a\xd6\x36\x98\x2c\x16\x21\x47\x22\x62\x9d\x07\x82\x62\xf5\x40\x64\x0f\xd5\xf7\xa8\x6b\x01\xcd\x20\x14\xda\xb5\x43\xbc\x5d\x9e\xaf\x42\xf1\x76\xed\xc8\x72\xf9\x55\x90\x4e\x60\xf4\x58\x71\x4a\x09\x01\xd8\xbe\x43\xd9\x34\x20\xae\x72\x84\xa0\xcb\x20\xf1\x51\xe1\x85\x7a\xb4\x3a\x6e\x1c\x35\x54\xe5\xf8\xee\x69\x6e\x5f\x3c\x8e\x71\x9a\xfb\x8b\xd7\x08\xc8\x68\x29\x41\x06\x1a\x48\x8f\x52\x52\x47\xb6\x5e\xa8\xa7\xa9\x1d\x51\x6d\x05\xdb\x14\xc2\x7a\x7c\x76\x00\x21\xcb\xbe\x40\x0f\x88\x75\x0e\x05\xdb\xa0\x8d\xcf\x16\xdc\x23\xc7\x45\x1a\x1d\xe5\x79\xbd\xb9\xcf\x40\x33\x75\x5f\xe3\x39\xa2\x0c\x14\x87\x3d\x5d\xf0\xf6\xb8\x62\xe3\x15\x09\x12\xbc\x94\x82\xae\x6b\x0e\x3e\xe8\x1e\xe9\xd6\x50\x87\xfe\xfe\xba\x74\xfe\x3f\xb9\xf2\x20\xf8\xa5\x07\x50\xff\xec\x50\xbf\xf6\xb8\x16\x7c\xa7\xe7\x3b\x38\x96\xf3\xd5\x07\x81\x2a\x74\xb2\xdd\x56\x3d\xc8\x00\xb4\xb6\x72\x2f\x85\xdc\x3f\xcb\xf9\xe5\xf9\x87\xdb\xcb\x2f\xee\x62\x82\x44\x28\x88\x85\x8e\x60\x1a\xe2\xf4\x7a\x72\xad\xf7\xce\x14\xb8\xb0\x64\x66\x2a\x95\x7f\x4f\x2d\xdf\x27\x2a\x82\x8b\x53\x80\x15\x86\x33\xcc\x70\x14\x55\x15\xef\xcc\x3a\xfc\x5f\x84\x8e\xf0\x2b\xa6\x09\xd8\x3c\x7d\x87\xf4\x96\xaf\xe4\xbd\x84\x7e\x56\x3e\x3d\xea\x7f\xfc\x46\x6e\xff\xba\x3b\x01\xf1\xc3\xff\x7e\x93\x7c\x31\x0d\xbe\x56\x6b\xfc\xf1\x49\xd0\x11\x84\x53\x97\x3a\x4c\x2e\x03\x54\x0e\x2b\x25\x72\x4a\x1e\xbe\x7e\xe6\x93\x20\x22\x6b\xd9\x60\x09\x8c\x19\x14\x54\x77\x5f\x7a\x4b\x19\x58\x82\xcf\x85\xf7\x8b\x3b\x1c\x3f\x66\x12\x35\xe7\xcf\x18\x77\xdb\x48\xad\xb4\xad\x02\xc0\x0b\x84\x3d\x32\xf6\x19\x33\x12\x4d\xbe\x36\xa0\x2a\x09\x3f\x23\xef\xf0\xd0\x72\xfa\xe7\xbd\xaf\xfb\xd2\x9b\xbe\xbf\xcd\x5a\xdd\x25\x59\x7b\x0f\x7d\xf9\x9e\x90\xd5\xd5\x50\x86\x6c\xe7\x9d\x44\x3b\xf5\x36\xd6\xa5\xb7\x71\x87\xc2\x0f\xee\xe5\x9f\x76\xe3\x86\xbc\x34\x9a\xfc\x0b\x5e\x2b\xd8\xca\xd4\x67\xed\x62\x75\xbf\x8a\x4b\x58\x59\x87\xde\x5b\x49\x32\xb1\x81\xdd\x53\x54\xb6\xa5\x41\x09\xd9\xec\xa7\x46\xa5\x42\x5f\xce\xb6\xa5\x00\xa6\x24\x4f\xc6\x59\x1d\x35\x55\x60\x69\x2f\xdb\xef\x34\xfd\x94\x09\x31\xdb\x4a\x73\x17\xa4\x5c\x57\xdc\x19\xe1\x60\x34\x15\x3e\x14\xc1\x51\xf3\x5b\x5d\xfd\xae\x1f\x91\xa0\xdb\x2f\x85\x82\x86\xbe\x34\xe5\x67\x9a\x27\xe2\x7e\xd1\x60\xa9\x01\x09\x56\x8b\x50\x78\x3f\xd6\x95\xd0\x0d\x5f\xac\x1c\x50\x1e\xc9\x10\x8d\x87\x11\x68\x4a\x56\x3f\x7c\x5a\x94\x2b\xc0\x16\xca\xcc\xfa\x32\xa0\xaf\x4c\x07\x4f\x30\x63\x45\xbc\x9f\x64\xc2\x9c\x5c\x10\xfa\xa7\xb2\x78\x8f\xd8\x77\xb3\x34\xb8\xa6\x50\x88\x94\xe5\x7d\x76\xf6\x77\x42\x4e\x72\xbb\x5e\xe1\x24\x32\x73\x08\x6b\xb1\x12\x69\x00\x41\xb7\x96\x26\x3d\x39\x30\x0a\x1c\xf0\x91\x35\xdf\xae\xac\xe1\xb0\x53\xdf\x44\x6c\x04\x3a\x82\xbe\x9e\x8c\xa8\x0a\xcc\xa7\xa1\xc9\x4e\xad\xc1\xc7\x01\xa3\x55\x90\x2d\xd7\x3a\xfc\x16\x6a\x4b\x0d\xbc\x8e\x22\x0d\x21\x77\xa8\x4e\x0b\x95\x64\xb8\x8e\x43\x8b\x4f\x88\x1c\xf7\xcd\x3e\x3c\xc6\xb9\x23\x95\x12\x95\xa6\x22\x58\x75\x60\x1d\x67\xb4\x44\xf3\x85\xbd\xd0\x4e\xce\x15\xf5\xa6\x8c\x99\xa3\x6c\x91\xd5\x2d\x6e\xf2\x61\xa2\x85\xda\x7c\x69\xa7\x77\x3e\xa9\xc0\xc5\x70\x7e\xcd\xb7\x63\x22\xa7\x71\x10\x6b\x3e\x67\x30\xf0\x8a\xf4\xe3\x2c\x52\x29\x8c\xca\xbb\x71\x0d\x49\x17\x16\xae\x4c\xf7\x0f\xb3\xf7\x47\xc3\x97\xc8\xca\xa3\x80\x87\xae\x31\x2c\x5e\x65\xd1\x62\xa1\x45\xd3\x35\x6a\x5f\x4a\x3b\x16\x5c\x92\xb9\x15\x6a\xfe\xb8\xb1\xc2\x78\xe2\xb1\x0c\x49\x55\xa1\x24\x3e\xf4\xa0\xc3\x4f\x25\xbf\x8b\x61\x04\xa9\xe0\x8c\xce\xe1\x23\xee\xa0\x38\x6d\x1f\x3b\x30\x38\x84\x40\x85\xb1\x43\x56\xa0\x8a\x4a\x57\xb9\xed\x60\x6c\x11\x8c\x24\xea\x99\x83\xdf\x04\xb5\x40\x1a\x33\xc0\xf4\xb6\x60\x19\xcf\x04\xa3\x66\xcf\x77\x61\xdd\xb2\x40\xe6\xdf\x47\x6b\x80\x7c\x50\x42\x71\xb0\xde\xf3\xcb\x21\x69\x2f\x43\xd2\xae\xe8\x6c\x31\x4d\x05\x0c\x50\xd2\x31\x45\x94\xa4\x36\x61\x75\xa1\xb2\xc9\x82\x53\xc6\x06\x0a\x7b\x03\xdc\x05\x64\xf4\xa2\x89\xf0\x64\x62\x2c\x13\xe3\x9c\x46\x31\x7a\xd2\x41\xb7\x53\xb8\x7a\xaf\x88\xca\xa2\xd7\xad\x8b\xec\x80\x46\x81\x90\x67\xa9\xb2\x4d\x4b\xdd\xbd\x38\x78\x5b\xfe\x88\xad\x00\x7a\xe9\x4d\x02\x4e\x64\x9b\x6e\xd6\x61\xd4\x5d\xbc\x8c\x45\x59\x1a\x7c\x2c\x60\x4a\x38\xc3\xac\x21\x6b\x05\x61\xc5\xd9\x52\x63\xa8\xa6\xe4\x10\x3a\x5a\xba\xdd\xe0\x3c\x0c\xb4\x32\xe4\x15\x11\xe3\x92\xab\xfe\x1c\xa8\x23\xb1\xa7\x3a\xe7\x9d\x0a\x5c\xc1\xdc\x30\xed\x2c\x14\x43\x8d\xcd\x64\xc1\x4a\x23\xaf\x10\x8a\xeb\x4f\xbb\x92\xc3\x01\x89\x04\xaa\xde\x57\x10\x02\x63\x6e\x28\x11\xec\x22\x77\x63\x84\xc0\x4b\x3f\x03\xca\x99\x05\x53\x6e\xfa\xd4\x76\xa0\xd8\x60\x91\x32\x20\x07\xef\x3f\xdf\xc9\x96\xec\x0b\x75\x8c\x99\x39\x0f\xea\xbc\x32\xc0\x48\x7e\x45\x94\xc5\x08\xaa\xcc\x14\x55\x24\xf9\xe6\x6d\xaf\x3d\x99\xa4\xea\xeb\x0d\xf0\x15\x48\x4e\x82\xb2\x88\x48\x19\x5c\x11\x3d\x74\x5f\x44\x18\xdd\x9b\x92\x46\x3f\xdc\xf1\x55\xa6\x5f\xb2\x8f\x93\x24\x63\x1e\x7e\x81\x51\x76\x61\x09\x5c\xcf\xec\xf7\x07\xe3\x0d\x1d\x92\x60\x58\xfc\xa2\xca\x13\xbc\x35\x7c\x19\x40\xe8\x3d\xe2\x8d\x7c\x01\x30\xc7\x2e\xcd\x31\xba\x4b\x38\x21\x48\x81\xec\x18\x39\x90\x74\x92\x31\xc1\x0c\x4b\x0d\x19\x3d\x04\xd5\x5e\xd5\xc2\x6e\xff\x37\xe4\xc2\x46\x79\x19\xa7\xe5\xb3\x8c\xb6\xcf\xdf\x0c\xe6\xa2\xa1\x7f\xa2\xa7\xfd\x53\x39\xed\xf3\xfb\xc5\x57\xc2\xbe\x13\xbb\x65\x86\x9f\x79\x86\x8b\xa0\xe4\x94\xf0\x8e\xef\xdf\xed\xf5\xdd\x09\x9e\x4f\xfd\x97\x74\xc1\xc3\x6c\xfa\xf0\xb9\x6e\xbf\xf6\x60\xeb\x62\xa3\xe1\x4d\x80\x53\x2b\xd2\x30\x5a\x18\x04\x59\x74\x8c\x63\x79\xfa\xfa\xd8\x61\xc5\x71\x7f\x5d\xcb\x3c\x98\x65\xcf\xc0\xba\x05\x1a\xf7\xbb\xec\xc7\x72\xa5\x3f\x96\xef\xf2\x1f\x4b\x15\x98\xb3\x3f\x84\x82\xcf\x48\x30\xf6\xbd\x7d\x97\x42\xb9\xf2\x2a\xd7\x97\xc7\xc6\x47\x7a\xe5\x3c\xcd\xea\xe7\xe6\xa9\x9f\x52\x38\x8f\xdb\x78\xba\xbb\xeb\x9e\xbf\xea\xa7\xf5\xa5\x9f\xd6\x4f\xfa\xe9\xf5\x32\x0d\xc0\xdf\xbf\xe7\x96\x8f\x7f\x6d\x8b\x7f\xd8\xe0\x67\xa6\x57\xc7\xa7\x9d\xe4\xf6\x57\x15\xef\xff\xd7\x47\xe8\x57\xef\xbb\xbd\xbc\xef\xf6\x19\x44\xa1\x81\x4b\x73\x5d\x0c\x51\x18\x8a\x04\xd3\xbb\x38\x80\x21\xe9\x9b\x0c\xb7\x26\x04\xa8\x60\x58\xa2\xd6\x43\x2f\x5c\x43\x5c\x14\x85\xc9\x11\x95\x6f\xc7\xf9\x19\x1b\x76\x2e\x49\x9a\x2d\x75\xb2\xc2\x88\x2f\x02\x28\xf7\xef\xd0\x46\x5d\x05\x5a\xa5\x64\x69\xea\x90\x3a\x7c\x7f\x93\x5c\xb1\x71\xd3\x31\x78\x87\x65\xe4\x8d\x2b\x1e\x08\xef\xe8\x43\x26\xa1\xc2\x83\xae\xd2\xce\x2a\x40\x96\xcd\x40\x34\x1a\x01\xf3\x06\xbd\xd1\x34\xcb\x6d\x5f\x1a\xcd\x11\x15\xd2\x65\x01\x3e\xde\x40\x54\x4f\x97\x0d\xa2\x8c\x88\x35\x95\x1c\xf4\xe4\x72\x86\x37\xae\xe8\x96\xdb\x3a\x1b\xf2\x43\x7e\x2c\xc8\x9a\x27\x4c\x0d\xa4\x25\xf6\x90\x6c\xff\xa1\x1d\x0e\xde\xc3\xc1\x5b\x3a\x01\x41\x51\xe1\x83\xa8\x9b\x05\x3b\x0e\x4d\x38\x89\x78\xb5\x3c\xfe\x8a\x3f\xb8\xa3\x45\x6c\x7d\x76\x12\xec\xa3\x4d\xcf\xde\xec\x9e\x18\x2a\xb7\xe7\xd8\x16\xab\x50\x9c\x98\x41\x1c\x02\xee\x75\x09\xae\x81\xd9\xc9\xaf\x2e\x2c\x92\x84\x81\x0b\x85\x0e\xa0\xb8\xbd\x09\x48\xc9\xfc\xb3\x1b\x38\x9e\xbf\x3f\xed\xb4\x0b\x7d\x51\x41\x15\xe5\xe6\x7d\x46\x86\x41\x75\xf7\x23\x99\x9d\xe3\x59\xad\xf7\x22\x37\x2f\x56\x37\x12\xc3\x41\xaf\x57\xbf\x3c\x52\x6b\x0b\xbe\x14\x54\xd1\x6e\x0a\x0e\xb7\x9c\x6f\xfb\x04\x59\xa0\x20\x30\xbb\xf3\x99\xbe\x6b\xe1\xe7\xc6\xff\x6a\x84\xf5\x97\x11\xd6\xff\xeb\x89\xfc\x98\x3a\xe8\x7f\x2b\x47\xa9\xcf\x6c\xff\x03\x97\xb1\xa6\xa9\x4b\xdb\x50\x6f\x3d\x90\x66\x85\x4b\xa4\xd7\x45\x38\x49\x96\x6f\xf5\xb6\x2e\x53\xc6\x55\xc3\xfe\xf0\xac\x02\x88\x6c\x70\x9b\x3a\x7c\xd8\x00\x06\xb0\x26\xa8\x1a\x71\x73\xb6\x4a\x6e\x4a\x2a\xa3\x82\xe2\x18\x29\xa9\xda\xfb\x9b\x80\x31\xdc\x14\x14\x78\xac\xd7\x71\xf7\xcf\x0a\xe0\x0a\xbe\x5a\x05\xee\x83\x22\xed\x44\x40\x5b\x39\xe2\x83\xbf\xae\x0d\x8a\x09\x04\x07\x0a\x36\xda\x29\xfb\xdc\xb2\xdd\x97\x06\x20\x5b\xa8\x61\xef\x1c\xe4\xcf\xcd\xf6\x5d\x73\x3e\x33\x00\x5f\xed\x75\xa7\x8c\x76\xfb\x8b\xa7\x78\x39\x83\xdf\x44\xcb\x74\x5e\xa1\x64\xc1\xec\xa6\xa5\x52\xcb\x3e\x53\x1f\xe4\xff\x14\xeb\x87\x5a\x4e\x63\x1e\x86\x54\xb7\xe5\xf8\xb2\x58\xc6\x96\x65\xcc\xe3\xa4\x0a\xed\x1b\x26\x4c\x3f\x05\x63\x4c\x1a\x6f\xf2\x4b\x77\x74\xbc\x74\xf6\xf1\x99\x99\x5b\x9a\xa5\x28\x11\x03\xf2\xa3\x9e\x05\x43\x4d\x58\xe4\xbf\x2e\x1d\xaa\x6e\x18\xc8\x8d\x5e\xc6\x41\x54\x3c\x08\x32\xf9\x19\x1b\x56\xdf\x17\xbb\x9e\x87\x1f\xe7\x19\xdf\xdf\xa4\xf5\x1e\xd7\x82\xe8\xb5\xb9\x33\xb3\x2e\x73\x7c\x7f\xfa\x38\x79\x38\xbb\x35\x35\xe1\xd9\xd7\x99\x07\x54\x93\x85\xfa\x43\xde\xd0\xe0\xb6\xc8\xee\x1d\x2d\x0c\xd6\x2c\xc6\x4c\x3a\x03\x4c\x6a\x23\x4a\x84\x22\x0e\xe1\x9b\x6f\x81\x47\x45\xbb\xf6\xbc\xfa\xf5\x9f\x6e\x39\x6e\xf8\x01\x9d\x3b\x81\x73\xfe\x7d\x5d\xfc\x26\x10\xd4\x29\x96\x94\x92\x21\x7e\x1b\xc6\xd8\x84\xbb\x69\x58\x65\xb5\xb2\x8c\xf5\x50\xb7\x69\xcc\x9d\xc7\x99\x34\x8f\xa3\x7a\x17\xb1\xcb\xaa\x9d\xa4\x97\x79\x34\xfd\xe3\x4a\x20\xd9\xed\x24\xda\x04\x0b\x21\xed\xdf\xd6\xa3\x4e\x6a\x31\xa1\xa9\xc2\x6a\x2c\x6d\x76\x2c\x1a\xb4\x88\xbd\x1d\xdc\xcc\x7d\x6f\x3b\x38\x24\x91\xd5\x1a\x8c\xa0\x1d\x8b\xa1\x2c\xd7\x6a\x5e\x17\x19\xf3\x83\x57\x20\x41\x7d\x44\x60\x2a\x5e\x81\xaf\xe4\xe0\x01\x25\x57\x17\xef\xc9\x6f\x09\x77\xc4\x1b\xe2\xfd\xf8\xed\xf0\x6e\xfc\x66\xd8\x3c\x0d\x70\x42\xa4\xad\x4a\x44\xbf\xcd\x0e\xde\xc7\xe2\x37\x22\x63\xbc\xbe\x8a\xaf\x8a\x34\xc7\x7c\xe9\xf1\xf3\x25\x26\xaa\x23\x9f\x85\x43\xd5\x12\x04\x7b\xa8\xb9\x64\x3a\x36\xa1\xac\xcf\x2e\xad\xa6\x52\x25\xf9\x67\x95\x60\xe9\x58\x6c\xa4\xda\x80\x1c\x38\xdd\x0f\xd5\xfa\xfe\xd6\x6a\x49\xa5\xcb\x66\x06\x4d\x1b\xeb\xa9\xf8\xe4\xeb\x06\xd8\x62\x46\xdc\x2f\x1c\xee\x1e\x9c\x0d\xb0\x71\x0d\xa2\x54\x10\xe1\x5a\xe6\x60\xf4\xae\x82\x3f\x39\x51\x97\x45\x60\xdb\x04\xd5\x0a\xe3\xc8\xe6\xb6\x5c\xf7\xee\x1e\xd0\x1d\xd5\x07\xa0\x12\xc5\x93\xa7\xb0\xb1\x21\x90\xaf\xee\xb1\xe7\x11\x3d\x38\x8a\xa9\xa1\xf3\x11\x85\x7f\xd5\x0e\xc9\x80\xe7\x44\x00\x1a\xb1\x1f\x23\x81\x17\x10\x6c\x4a\x55\x2b\xe8\x39\x8a\xa1\xd6\xd7\x14\xb1\xbe\x42\x59\x99\x40\x92\x0e\x28\xa3\x03\x59\xc4\x39\xbd\xd4\x33\xd3\xc8\x68\x44\xe9\xa0\xbe\x48\xca\xfc\x43\x11\x4a\xfd\xe4\xb2\x23\x6e\x59\xc2\x0c\xe2\x20\xd2\xc1\x7a\x6c\xdd\x15\x9a\x88\x90\x94\x84\x2a\x91\x26\x69\x13\x65\xc3\x05\xf7\x07\x82\xba\xd4\x7a\xc0\x8a\x9b\x46\x19\x17\x5e\x14\x23\x7c\x8a\x2d\xde\x17\x6f\x6e\x1f\x9e\xc8\x43\x14\x89\xc0\x6a\xa4\x85\x88\x5a\x18\x56\xe4\x30\x8b\x60\x25\x05\x82\x39\x47\x70\xa4\xe4\xa3\x3f\xca\xaa\x47\x14\x4f\x46\xfe\x18\x15\x85\x79\x55\x8b\x64\x7a\x26\x59\x51\xbd\x74\xbb\x6b\x45\x32\x15\xff\x21\x66\x54\x76\x0e\x71\xa5\x01\x5a\x1a\xc0\x3a\x94\x84\x0c\x82\x52\x5f\x15\xcf\x2a\xa8\x7e\x32\xb5\x61\xd3\x18\x17\x02\x77\x60\x85\x36\x52\xb2\x3d\x00\xa6\xe2\x56\x33\xcc\xb7\x08\xd8\x2b\x68\x6f\xc9\x8c\x08\x44\xa0\x9e\x61\x3c\x39\x17\x3d\x2e\xff\x83\x60\x53\x5c\x97\x4a\x17\x83\x28\x47\x80\xd2\xfb\x88\x70\x8d\x60\xca\xb2\x92\xcc\x52\xeb\x7b\x90\x59\x35\xef\x4f\x6d\x07\x05\x02\xfc\x3c\x8b\xea\x1e\xcc\x86\x8d\xfd\xff\x10\x86\x76\x18\xca\x2c\x7c\x86\x24\x05\xb5\x79\x4c\x41\xcb\x89\xc8\x81\x7a\x1c\x0d\x92\x50\x07\x74\xd3\x22\x29\xeb\x71\xb3\x24\xd6\xac\x36\x0b\x8f\x75\x0c\xd6\xc6\xc1\x43\x18\x49\xb0\xce\x34\xf5\xa9\x04\xaa\x66\xea\x5f\x09\xc2\x44\x2d\x6e\xa5\x1a\x62\x41\x78\xb3\x59\xaa\x54\xc6\x03\x37\x8d\x84\x72\xd4\x44\xf4\x6f\x17\x03\x33\x20\x58\x98\x86\xec\x64\x29\xc0\xca\xb2\x23\xbb\xa3\x93\xa2\x21\xcc\x61\x20\xf1\x51\x4b\x54\x9b\x20\x42\xea\x37\x80\x1e\x08\xb5\xc5\x0e\x36\xc3\xb6\x77\x84\xd7\xf1\xda\xe6\x41\x42\xc5\x60\x3a\x47\xd2\x00\x7d\x27\xa3\xf2\x5f\x42\x9b\x11\xa8\x4c\x86\xf3\xfb\x40\x90\x7b\x42\xc1\x0f\xa5\xd2\x27\x6d\x67\x3d\x29\x2c\x47\x3e\xe0\xd7\x84\xf0\xbb\xc8\x25\xfc\x3e\xd8\x2d\xe5\x94\x44\xb1\x54\x90\xa2\x98\x80\x2c\x6a\x1d\x49\x4e\xec\xe1\x4c\x3a\xbe\x36\xb1\xe7\x6b\x5e\xf4\x33\xa1\xa5\x3e\x6a\xaa\x3a\xc0\x42\x03\xf3\x4f\xea\x48\x51\x25\x19\x51\x06\x25\x77\xc0\x24\xbb\x6c\xa3\xe7\x5a\x59\xb0\xdb\x42\x0a\xc5\x80\x18\x91\x59\xd2\xb4\x64\xc2\x2c\xb4\xcf\xee\xdd\x5f\x1a\x28\x39\xd4\xc0\x55\x72\x4c\x14\xe0\xb1\x24\xcc\xad\x59\x90\x8c\x21\xb9\x34\x8f\x85\xea\x69\xf5\x9c\xe3\x47\x24\x63\x9f\x68\x77\x7a\x84\xbf\xcb\x48\xa4\xd7\x72\xbf\x0c\x51\xd1\x92\x83\x01\x12\x45\x98\x63\x47\xb1\xa6\x37\x9b\xd8\x74\xc3\x7f\xf6\x78\xd2\xc0\x99\x9f\x8f\xfa\xfc\xa0\x7f\xcb\x63\x82\xcb\x9c\x8f\x19\x0f\xf9\x8f\x3e\xa2\x3d\x68\x2e\x5b\x80\xef\x82\x47\x84\xba\x9f\x87\x31\xbe\x22\x81\x90\x69\x05\x4b\x08\xa8\x93\x61\x16\xe4\x7e\x3b\x70\x31\x62\xa8\x5a\x1a\x8c\x30\xbb\x61\x1f\xe8\x93\x4a\x9c\x98\x80\xa0\xbb\x99\x5f\xb9\xa7\x66\xfb\xd2\x48\x15\xda\x05\x45\x69\x70\x44\x0a\x97\xbc\x98\x84\x99\xf6\x2d\x17\xd9\x04\x02\xfc\xa5\x32\xcd\x0d\x00\xf3\xa9\xda\xe9\x86\xf6\x08\xf8\x3b\x14\x5d\xfd\x07\x8c\x51\x66\x02\xbf\x55\x1f\xda\xdc\x20\x6e\xb9\xf1\x7c\xc1\x0a\x22\x0a\x16\x39\xe4\x87\xd1\x20\x3e\x68\xa9\x7b\x24\x6d\x6f\xe0\x1c\xc2\x4d\xd7\xbd\xa6\x92\x80\x68\xe0\x39\xa4\xdc\x98\xf0\x90\xb6\x17\x77\x5f\x30\x27\x41\x1a\x34\x59\x9e\xdf\x2b\x67\x55\x6b\xcf\x59\x6f\xff\xf6\xd5\xd8\x7b\x4d\xaf\xff\xf7\x55\x25\x3d\x35\x4d\x01\x73\x53\xfb\x89\xca\x31\x22\xf3\x3f\x82\x1e\xb8\x3b\x29\x00\xa0\x09\x76\x20\x59\x32\xf2\xba\x68\xd7\xfb\x22\x52\xf5\xaf\x9c\x4f\xac\xbc\xc0\x28\x4a\x73\x63\x19\xa1\x26\x5f\x8c\x59\x58\x3d\xce\x62\x6c\x8c\xa8\x28\xe7\x07\xcb\x8c\xfb\x94\xbd\xdd\x97\x11\x85\xda\x56\x79\x0c\xf6\x38\xc1\x55\xfc\x40\xa5\x6c\x9c\x72\x5d\xca\x77\xc8\x95\xf3\x8e\x22\xdd\xf0\x9d\x8e\x73\xcb\x2f\xd0\x0c\x68\x25\xaf\xda\xf5\x4c\xbf\xa0\x15\x0e\x36\xca\x9d\xf7\xf2\xe5\x49\xbe\x7a\x81\xaf\x49\xfd\xdf\xae\x0c\xa2\x89\xa4\x06\xd9\x4a\x29\x17\x91\x90\x9d\x55\x55\xc1\xf1\x57\xbc\xcb\x5c\x95\x6b\x36\x52\xb8\xd5\x36\xee\x3c\x4c\xdd\x89\x0e\xc1\x19\x29\xab\xef\x4c\x7d\xe4\x7e\xf6\xf1\x38\xe5\xfb\xdb\x50\x49\xa5\x95\xbb\xd6\x2b\x5c\xa1\x17\x83\x03\xb2\x84\xfe\xb7\xbb\x27\x3e\x3a\x29\x52\xe6\x66\x8d\x62\xf5\x75\x6b\x60\xb6\x04\x66\x4b\xcb\x67\x49\x11\x2b\x48\x82\x36\x11\x1e\x8a\xff\x72\x5f\x78\x0d\xb0\xd8\xc3\x22\x5a\x6b\xbd\x91\xda\x04\x62\x88\x77\x05\x85\x09\x8a\xa8\x62\xa6\x81\xf7\x52\xd6\x79\xea\x3b\x0f\xde\x3d\xf4\xc7\xef\x0b\xf7\x7f\x3e\x5f\xf9\xf8\x74\x4f\x6d\x31\xfb\x4f\x9a\xe2\xbb\xd3\x69\xdc\x1e\x49\x82\x55\x92\xaa\xcf\xee\x00\x76\xe7\xbb\xd4\x4b\xdc\xc8\xce\x96\x6a\xd1\x4e\x0a\x5e\x05\x3b\xab\xe5\xa2\x11\xec\x6c\x82\x22\x4c\xa0\x29\x69\xb5\x54\xbe\xbb\x88\xdc\x65\xe4\x1d\xc0\x7a\xc6\x27\x8b\xae\x32\x65\xc7\xf9\xe2\x12\x47\x5c\xf3\xca\xcb\xa1\x7c\x38\x53\x35\xc5\x5f\x0d\x90\xdd\x67\xd5\xf8\xd2\xc6\xca\xad\x67\x91\x84\x1b\x6f\x03\x25\x08\xd2\xca\x3d\x0e\x9c\x2d\xf1\x87\x83\xdb\x57\xfc\x4e\x14\x04\xcf\x72\xc4\x69\xbf\xea\xdc\xaf\xe9\xf1\x4b\x11\x67\x8a\xfb\x5b\x10\x5a\x29\x9b\x94\x9e\x2a\xf0\x2a\x39\x0b\x22\x88\x06\xea\x89\x4b\x92\xb1\x94\xcc\x3f\x17\xfc\xed\x5b\x6d\xf8\x82\x58\x7e\xcc\x48\xee\xa7\xc4\xcb\x60\x6e\x10\xc9\x48\xff\xeb\x4a\x44\x8e\x48\x44\xa6\xc1\x8a\x46\xcd\xd7\x8c\xc0\xb0\xb6\x1f\xc5\xed\x91\x78\x1c\x11\x12\x5f\x06\xed\x7e\xcd\x5f\x0e\xeb\xd7\x84\xe3\x97\xd5\x6c\xad\xc8\x55\xc9\x64\x51\x7f\x4c\xf6\x0d\xc4\x87\x35\xc3\x51\x6e\x3b\x45\x4e\xb1\x12\x9f\x4c\xa8\x41\x33\xf2\x18\x62\x3c\x44\x26\x7a\x65\xf7\x43\x06\x71\x18\x17\x17\x5a\x0b\xef\xe6\x0c\xff\x3d\x88\xb9\xdd\xdd\x58\x97\x92\x33\xbc\xfd\x25\xd8\x8b\x41\xb1\x0c\x32\xe2\x75\xb1\x39\x7f\xdc\xf6\x08\x26\x9e\x4a\x39\x9d\xea\x00\x39\x8d\x54\x92\x66\xde\x8d\x19\xe2\x11\x60\x13\x26\x58\x97\xeb\xb3\x46\x89\x14\x18\xcf\x2c\xc9\xf0\xe7\x6d\xc9\x1f\xd7\xf7\x8e\x09\x24\x9d\x3c\xb8\x8f\xbd\x55\x62\x7e\x40\x48\xdb\xe2\x8c\x9b\xcc\x99\x62\xd9\x49\xd4\x56\x08\x89\x85\x60\x62\x2f\xa9\xca\xa6\x79\x02\x1c\xba\x50\xe3\xb5\x24\xb4\xa8\x62\xfd\x46\x5e\x28\x1e\x26\x78\x51\x51\x79\xbe\xda\x04\xc2\x5d\x29\xb4\x2a\xd4\xa2\xf6\x9f\xc7\x0e\x10\xaa\xef\xa7\x12\x54\xea\xf9\xa4\x4d\xea\xf4\xb3\x6e\x2c\xc6\x82\x15\x33\x36\x58\x49\x56\x07\xa3\x7c\xa8\xd8\x80\x3b\x2f\x41\x2d\x1a\xcc\x3b\x60\x39\xef\x9b\x50\xb8\xbb\x80\x0c\xb7\xa4\xb0\xdc\x10\x74\xb9\x5e\xbf\x0f\x20\x50\x22\xd4\xb1\xda\x98\xdb\x62\x45\x93\x55\x28\x24\x1b\xff\x5a\xfc\x4f\x6b\x50\xa2\x92\xe6\x17\x95\x76\xe0\xd2\x0d\xdc\x13\xa9\xd5\xb2\x83\x54\x1a\xfd\x70\x3f\x4b\xe5\xc0\x4a\xe5\xa6\xd3\x62\x90\x78\x4f\x4b\x43\xb2\x49\xe6\xbc\x5b\xe9\x40\x19\xbb\x9d\x4a\x62\xf6\x11\xd1\x89\xfc\xfe\x36\x51\xb1\x0c\x19\x2e\x1b\x63\x13\xb0\xbd\xe6\xbc\xd5\xea\xdd\xc2\x27\x00\x00\xeb\x02\x23\x88\x49\xbd\xa1\x28\x06\x37\xd4\xc0\x09\x1b\x48\x23\x00\x95\x31\x25\x91\xea\xa3\xcf\xb5\xfb\x4e\x75\x98\xef\xb4\xa9\x12\x14\xa2\x55\x93\xb6\xb6\x2d\x3a\x21\x9e\xdc\x37\x58\x95\x65\x2d\x0d\x92\xfe\x93\xe2\xee\x9b\xbf\xc7\xb1\x21\x53\x96\xd7\xa5\x68\xdf\x0c\xe8\xaa\x62\xbb\x77\x5a\xb1\x84\xbc\xd7\x60\x83\xd6\xed\x6a\x4d\xeb\x76\x5f\xcc\xea\xe6\xb3\xe1\x8e\xc8\x38\x66\x70\xb1\xf7\xb7\xea\x17\xd7\xb6\x96\xac\x9b\xdf\x6b\xbb\x6d\x8b\x79\x4f\x03\x61\x09\x68\x61\x1a\xe8\x14\xe5\xfd\xcd\x2a\x9e\x6e\x95\x66\x77\xf1\xf7\x85\x9a\x4c\xe9\x7d\x77\xff\x38\xc1\xf2\xf4\xbd\xdc\xa5\x25\xf3\xbc\x24\x02\xbb\x29\xfd\x71\xb2\x06\xb1\xbd\x37\x41\x15\x50\xef\x77\x6d\x93\x37\x22\xa2\x72\x5f\x7c\xba\x24\x07\x60\xed\x9b\xce\xee\xf3\xe6\x06\xd7\x4f\x51\x32\x5d\x41\xa6\x40\x71\x31\x5f\xfa\x5a\xd9\x7c\xb6\xe9\x65\x43\x6d\x8a\x66\x18\xee\xe8\x03\x6e\x62\x40\x21\xb8\xe3\xa5\xae\x80\x76\x35\xae\xb8\x65\x03\x32\x03\x11\x32\xc9\x6e\x11\x15\x7f\x78\xbf\xe0\x62\x52\x37\xa3\x66\xc5\xdc\xfc\xb5\x58\xee\xef\x6f\x6d\x8c\xd4\x0c\x32\x00\x7e\x0b\x72\x5f\x14\x72\xbb\xd9\x46\xd2\x9e\x83\xc2\xb9\xac\x50\x15\xb1\x5e\x52\xf3\x61\x83\xc0\x6e\x95\x4d\x20\xd8\x5a\xb6\xc5\xa8\xa7\x0e\x82\x14\x10\x53\x09\xe8\xd9\xd9\x11\x75\xde\x75\x5b\xd4\xfb\x3a\x28\x46\xd8\xaf\xfd\x88\x02\x89\xf4\x66\x9b\x51\xd5\xb8\xbf\xbf\x55\x88\x02\x15\xbd\xab\xda\x86\xd0\xc0\xa2\x43\xe3\x77\x16\x0f\xdb\x16\x3f\xdb\x5d\x07\xe5\xf5\x21\xc4\xba\x51\x27\xc0\x47\xaa\xb9\xd1\xd1\xd7\x65\xe8\x0d\x5c\xf3\x13\xbd\xd1\x87\xbb\xb9\x0f\xa4\xc4\x3b\x85\xf8\x82\x4f\x77\xcd\xfb\xb3\x24\x9d\x2d\xaa\xd5\x9a\xe8\xd6\x3b\xc2\x61\x35\x41\xcc\xbb\x7f\x8e\x06\x52\x79\xf1\xc2\x25\xff\xd7\x55\x27\x30\x40\xf7\x21\x16\x38\x59\x42\xb3\x14\xd9\x9e\x89\xd0\x7d\xd1\xcd\xaa\xf7\x6e\x14\xda\x46\xb8\x19\x49\x59\x39\x23\x74\x0b\xf7\x5f\x66\x5d\x97\x4e\x30\x6c\x84\x10\x78\x9a\x28\xf8\x54\xed\xf7\x0e\x61\x43\x65\x14\xd1\x9f\xad\x25\x19\xf9\x5e\x90\x6f\x45\xf5\x93\xa2\x0e\xb2\x0f\x10\x04\x97\x71\x81\x0a\x50\xed\x67\x07\xb9\x78\xa6\xfb\x2e\xe8\xe3\xa5\x05\x2f\x11\x62\x2d\x8c\xc8\xf9\x6c\xbf\xf6\xfe\x55\x61\xf9\x7c\xc9\xb1\x8b\x5c\x46\x88\xf9\x28\x1f\x6d\x5f\x0c\x61\x76\x05\x7d\x0c\xaa\xb3\x68\xaa\xb9\xbf\x5e\xe1\x1d\xfa\x32\x04\x76\x77\x40\x41\xe1\xe3\x7a\x4f\xc3\x52\x84\x6a\x24\xed\x83\x95\xd8\x87\x8d\xc2\x2d\xfb\x20\x71\x19\xaa\x34\xbd\x41\x98\x02\xef\xfb\x04\xde\x99\xd6\x94\xd4\xba\x2f\x36\x66\x0a\xc0\x7a\xa7\x84\x1f\xb5\x80\x6c\x62\x9d\x6e\xbd\x05\x8d\x05\x98\x1c\xc0\x74\x43\xaf\xc4\xdc\x10\x9c\x35\xb5\x2e\x47\x6b\x3d\xd9\x9c\xef\x6f\xa5\x83\x5e\x1d\xc9\x7c\xab\xde\xf1\x51\x96\xaf\x7a\x34\xe4\x05\x6c\x94\x1b\xe4\xc0\xa7\xa2\x2c\x10\xca\x4b\x84\x51\x82\x9e\x18\x13\x71\xf1\xcb\xfb\xea\x56\x01\xd9\xf6\x5b\xc7\xae\x05\x84\x38\x30\xba\x16\x81\x10\xc7\xb4\x44\xe4\xb9\xbb\xbd\x50\xe6\xa8\xac\xa3\xd4\x49\xd1\x22\xb0\x0d\xfb\x8c\xa2\xbd\x24\xeb\xc8\x6c\x42\xf0\xab\x5e\x40\x15\xd0\x17\x65\x9f\x46\x46\xd9\x1b\x0c\x92\x4a\xca\x76\xfb\xe2\x0d\xff\xa9\xf2\xe2\x43\x89\x7e\x96\xf6\x1a\xd3\x7c\x90\x97\x4d\xa2\xfa\x55\x1f\x7d\xb9\xf6\x54\xdd\x14\xca\x39\x4d\x81\x9e\x5d\x9a\x3e\x64\x99\xcb\xf6\x29\x68\x91\xe2\xed\x01\xaf\x7d\xf0\x27\xfe\x42\x92\x11\x43\x81\x81\xec\xc1\x8d\xde\x43\x92\xb0\xf6\x75\xa9\xb8\x20\xae\xa7\x8a\x18\x61\x2a\x43\xfd\x73\x57\xf2\x88\x8e\x4e\xb6\x31\xa9\x05\x2a\x63\xfe\x83\xff\xad\xa0\xf7\x2a\x64\xe4\xeb\x3e\x17\x22\x7f\xd0\x77\x12\x76\x22\x02\x44\xcd\xba\x16\xbc\xca\x1b\xb0\xcf\x92\x15\x8c\x1d\x5d\xc0\xfb\x6a\x6d\xa4\x0e\x40\x52\x79\x7a\x1a\x88\x54\xb8\x27\x2b\xe7\xd3\x80\xeb\x86\x19\x35\x5f\x8f\xfa\xe0\xd9\xdc\xf6\x96\x9d\x35\xca\x49\x88\xd7\xaf\x51\xfc\x69\xcc\xfe\x0c\x10\xad\xee\x9a\x41\x51\xd9\x59\x46\xb9\xa3\x7e\x39\x0f\xfc\x40\x42\xec\x62\x08\x33\x42\xc7\x72\x66\x6f\x70\x09\x21\x0b\xa4\x06\x10\xa0\x84\xe4\x74\x8d\x7b\xc2\x2f\x9d\x2f\xc1\x7b\x9e\xaf\xee\xc8\xe1\xcc\x22\xa0\x00\xa9\xee\x43\x0d\x42\xf1\x14\x71\x25\x75\x7f\x92\x28\x06\xde\x88\xc6\x8d\xf4\xb8\x91\xaf\x04\xc6\xe7\x4b\x3a\x55\xec\x53\xa2\xa5\xec\x83\xbd\xde\x3b\xaa\x99\xd9\xad\x93\x35\xd4\x12\x8b\xfb\x1f\x97\xf8\xb8\x31\xca\xc4\xb8\x54\xbb\x2f\x3c\x02\x73\x0b\x99\xc1\xb9\xc3\x3a\x2d\xf2\xe0\x88\x92\x61\x34\xfb\x34\x02\x5c\x41\xbd\x57\x93\x33\xcd\x8e\x12\xa0\xf3\x3a\xe4\xac\x7d\xbd\x10\x78\x85\xe5\xc3\x0b\xf9\x21\xaf\x57\x9a\x20\x05\xa9\xf7\x02\xa6\xae\x0f\x2f\x74\xfb\xd9\x95\x78\xcc\xaf\x5e\xa9\xf9\x52\xd1\xea\xdd\x9a\xfe\xd5\x47\xe2\x21\xbf\x7a\x21\x78\x5a\x26\x41\xc4\xd9\xc2\x57\x54\x88\x26\x8c\x10\x43\xf0\xce\x5e\x48\xc7\x03\xa6\xdb\xe2\x8e\x21\x59\x34\x74\x80\xf0\x44\x04\x81\x4a\xc4\xa9\x0f\xb7\xd9\x30\x08\x00\x2c\x41\x09\x43\x4e\xdd\x82\xdb\x8c\xba\x81\x10\x8a\xc7\xbf\xf8\x01\x1a\xa9\xd9\xd7\x44\xcc\xd3\xcc\x84\x21\xca\x6b\x39\x1f\x66\xa4\x47\x11\x04\x5a\xb5\x57\xca\xcb\x1f\x32\x43\x68\x08\x6b\x20\x33\x67\x14\xf3\xc1\x83\x14\x26\x11\x30\xfb\x9a\x41\x72\xd3\xad\xdc\x6f\x15\xe0\x4d\x02\x7d\xbe\xe8\xf0\x2f\xd9\x54\x29\x0f\x1b\x82\x48\x9c\x6a\x10\x4f\x9b\xba\x2d\xbd\xa3\x68\x78\x6c\x4b\x6f\x39\x99\x8d\xbb\xff\x8e\xd1\xdd\x92\xe6\x79\x9f\xa8\x5a\x32\x3f\x62\x6a\xdb\x1a\x52\x5f\xb3\xc4\x1e\xa2\x56\xef\x9a\xe5\xdc\xc5\xbf\x0a\xf4\x27\x65\x48\x9a\xd6\x11\x6a\x74\x63\xfb\xee\x9f\xd6\xb9\xa1\x8f\xf9\xf1\x86\xe6\xf6\xe3\x47\x1b\xca\xb4\x8f\x37\x58\xa9\xaf\x1b\xdc\x4c\xd3\xac\xee\xe2\x58\xb9\x45\x29\x86\xfb\x37\x68\xd6\xf7\x37\x5f\x13\xe1\x3c\xf8\xf6\xd8\xdc\x62\x73\xf1\xb5\x77\xa4\xf1\xd3\xad\x4d\x4a\x52\xc3\xd6\x40\xc1\x3f\x6f\xed\xd3\xa7\x7b\x1c\x55\xda\xc6\x0b\x12\x93\x8e\x5c\xea\x74\xab\xe9\xfb\xcd\xe5\xdc\xdc\xe0\xfa\xb9\xcd\xfb\xc9\x0e\xb0\x3f\xc6\xe4\x0e\xfd\x75\x07\xad\xd3\xcd\xa1\xe9\x83\x6a\xf5\xe9\xf5\x76\xf7\x57\x2e\xfe\x58\x70\xb4\x1f\x9b\x2a\xb7\xb8\x7f\x34\xec\x27\x5b\x7a\x29\xdf\x9f\xee\x3a\xdb\xcc\xed\x27\x5b\xe2\x21\x3e\x3a\x9d\xa8\xe5\x9f\x6d\xb2\x29\x3f\x3b\xe1\x90\x24\xb9\xcc\xbb\x7b\x8b\xe7\x7b\xf6\x63\xb1\x67\x1f\xf1\x68\x79\xd4\x97\xd3\xde\xf8\x6c\x1f\x6d\xe2\xb3\x3d\x6d\xf9\xe1\xd9\x3e\xdc\xc2\x67\xfb\xf0\x74\x7c\xb6\x8f\x37\x99\xaf\x91\x3d\xdf\xfd\xfe\xfb\x88\xdf\xaf\x7e\x1b\x3b\x0c\xd5\xe8\xc1\x3f\x6e\x69\xbd\xfc\x64\x4b\xd5\xf6\x93\x2d\xd6\xc7\xed\x27\x9b\xd4\xf2\xeb\x16\x1f\xff\xda\x1e\x04\xe2\x3e\xf7\x30\x89\x38\xdd\x19\x0e\xc6\x37\x9d\x89\x7f\x1e\xd8\xae\x67\x25\x32\x53\xee\x53\x8f\xd3\xd7\x90\xab\xd8\xfb\xfa\x85\xc5\x69\x72\x72\x00\xbd\xbf\x55\x37\x7a\x4b\x8b\x42\x07\xb9\x98\x4a\x4f\x2a\x71\x6a\x09\x75\xfc\xab\xf1\xe3\x0c\xa1\xad\x53\xe5\x90\x75\x00\xc8\xc1\x5e\x60\x13\xb5\x54\xe5\xb6\x2e\xb6\x01\x2f\xdd\x6c\x47\x59\xa2\x2f\x4f\x54\x96\x26\x95\x6f\x03\x45\x3d\x6a\x04\xa4\x11\x53\x61\xc6\x6c\x11\x74\x3e\x20\x56\x0d\x32\x1a\x04\xb8\x00\xb5\x71\x1f\x0a\x96\xb8\x1d\x50\x23\x3e\xb8\x87\x5e\x91\x2c\x64\x8c\xcc\xa2\xb2\x19\xe8\x3c\x0b\xd2\xa5\xfc\x3d\xb0\xbd\xac\xb6\x59\x4e\x75\xec\x54\xf7\x52\x21\x60\x88\xae\x58\x68\x8b\xc1\x65\xc3\xbf\x39\x95\x50\x11\x2f\x44\x3b\x9e\x24\xad\x44\x66\x13\x3e\x83\x50\xd5\x0d\x41\xbe\xc5\xca\xc9\x42\x53\xbf\x44\x57\xd4\xfc\xea\x7a\x7e\x56\xb5\x3e\x9a\xfb\x0b\xe5\xcc\x31\x75\x82\x22\x99\x72\xc6\xfb\x0e\xb4\xeb\x94\x70\xf7\x28\xfe\x8b\x3d\xe2\xdb\x11\x1b\x8f\xf3\x80\xe3\x3c\x4b\x68\xbb\x55\x70\xf8\xc5\xf9\xfd\x77\x9e\x8f\xd8\x3b\x82\x62\xe6\x45\x04\x34\xd9\xdf\xc4\xd2\xf9\x83\x1e\x8f\xbd\x78\x1c\xaf\x2d\x53\xae\xea\x2d\x31\x29\xbe\x12\xb2\x28\x18\xe9\x41\x1e\x42\xc0\x63\x3b\xa9\x06\xd7\x45\x86\xe9\xed\x84\xec\x33\x6f\x2a\x57\xf2\xd5\x77\xbf\xc7\x59\x4a\x84\xf5\x70\x8a\x6b\xc7\xb5\x98\xec\x60\x71\xc1\x7a\x2b\x94\xad\xc2\x75\xee\x8b\x34\x59\x7b\x2d\x77\x41\xc5\x96\x9f\x40\xcf\xc3\x9f\x0e\xae\x67\xc2\x36\x0e\xbf\x6e\xf4\xab\x37\xfb\x92\x5e\x94\x4f\xa9\x46\x8b\xe5\x34\x51\x07\xda\x66\x86\x88\x78\xa4\xa8\xab\x31\xc5\x7f\x60\xad\xd1\x52\xce\x7a\x85\x7e\x2a\xa4\x90\x69\x1f\x35\xc0\x92\x91\xc7\x65\x2d\xb3\x0f\x3b\xed\x27\x8c\xb3\xdb\xc9\x67\x26\xb9\xb1\x44\x41\xb4\x9d\x50\x2f\x09\x8e\x33\x6a\xd6\x6a\x28\xb6\xf7\xd8\xd7\xda\x79\x78\xf0\x19\xb8\x8f\xc1\xd4\x60\xbd\x26\x96\x63\x61\x15\xe6\x77\xb7\x88\x85\x5a\x6b\x3e\xb4\xf9\x73\xd8\x4e\x29\x79\xcd\x23\x0a\x4b\xdd\xf7\x03\xdb\x58\x4d\x05\x21\xe9\x01\x6a\xc3\xa4\xe5\x50\x4d\x80\x93\x22\x2d\xc8\x2c\x75\x3e\x49\xc7\x28\x29\x10\x89\x3d\x14\xd1\xf4\x3d\x14\xcb\x51\x61\x12\x49\x6d\xf5\x76\x21\xe6\x11\xe1\x55\x12\x9c\x60\xce\xa9\x40\xd9\xc0\xed\x38\x27\x99\x42\xa7\xa0\x92\xdc\x2e\x59\x91\xc3\x0a\x8b\x50\xdb\x2e\xc1\xaf\xcf\xe8\x3f\x8c\xca\x40\x78\x83\x4b\x5d\xae\x12\x31\x46\x84\x11\x8d\x0e\xe4\x1b\x71\x67\xa1\x75\x29\x76\x3b\x05\x8d\x8b\x3d\xec\x59\x28\x52\x34\x39\xf3\xb7\x50\x0c\xde\xa1\xc7\xb2\xb4\x28\x1f\x3a\x98\x93\x27\x0e\x31\x53\x7e\x86\xc9\x5b\x62\x61\xcf\xef\x0f\x73\xff\x2c\x11\xa8\x2c\xd4\x00\xf7\x3c\x60\x25\xfd\xa0\x36\xf7\x7e\x22\x61\x73\x8f\xe2\xc3\x45\x79\xfd\x5c\xf6\x05\xae\x73\xe0\x92\xe3\x2a\xa3\x9c\xc0\x8f\xb3\xc8\xeb\x4a\xb5\xd0\x8c\xaf\xec\x15\x21\x6f\x77\x0a\xe0\x55\x06\xf0\x05\xf8\xe9\xd2\xf6\x3a\x13\xa0\x89\x3d\x70\xcc\x32\x14\x79\x88\xdd\xa7\x8c\x9c\x0c\xec\xd4\x41\x05\xc3\x10\x68\x70\x65\x77\xb8\xba\xad\xed\xde\xb7\x18\xe6\x90\x2f\x87\xe2\x6b\x90\xe3\x85\x94\x55\x5a\xbb\x78\xcc\xdd\x49\x24\xfa\x1b\x82\x52\xa8\xbb\x67\x2d\x3e\xab\x96\x59\xf6\xfc\xe3\xb6\x83\xc4\x3f\xac\xd7\x5f\x60\x1e\x47\x99\xf3\x53\x39\xff\xd3\xf6\x23\x3e\xf8\xeb\xfa\x5c\x93\xad\x2d\x7d\xb7\xf1\x78\x12\x96\x43\xf1\xb4\xef\xf7\xaa\x38\xd7\x4a\x4e\xf9\x1f\x29\xc8\xbe\x3d\xaa\xe1\x9f\x2a\xe4\x9f\x8e\x7a\x9c\x2c\xc2\x57\xff\xd0\x65\xfe\xd2\x55\xc8\x3e\x31\xc6\x7d\xa9\xa4\xdf\x40\x14\xa5\xa5\x25\x08\x71\x85\xe8\x58\x37\xc1\xcb\xe9\xbe\xa5\x85\xdc\x84\xc4\xcd\xba\x19\x81\x58\x2d\xed\xa0\x33\xde\x8f\x09\xa3\xac\x53\xf3\x43\xb5\x6f\x61\x23\x2e\xa8\xa8\x8b\xcf\x78\x2f\xc8\x9a\x7e\x04\xc8\x60\x05\x83\x08\xe3\x37\xe0\x27\x40\xc5\x0c\x2d\x11\xa4\x59\x7a\x1a\x6a\x51\x54\xf4\x0b\x88\x0e\x52\x99\x8f\x53\x06\x46\x83\xd9\xee\x90\x13\x9e\x1d\xf2\xe5\xdf\xea\x51\x2f\xba\x86\x8b\x55\x7e\x15\x75\xb7\xfd\xe5\x89\xbe\x1a\x1c\x2f\x89\x66\x19\x9f\x0e\x8e\x91\x7f\x32\x38\xce\x26\xdb\x80\x18\x5e\xa4\xb4\xbb\x4e\xfb\xa5\x91\xa2\xd3\x78\x14\x84\x65\xa3\x02\xf4\xc3\x7d\xe3\xa1\xc8\x49\x82\x46\x9b\x71\xf2\xc7\x40\xc1\xc6\xd8\xc6\xff\xff\x67\x74\xfc\x67\x74\xfc\x63\xa3\xe3\xa5\x18\x41\xe6\x67\xc5\x08\xa2\xa9\xb7\xb1\x35\x35\x5f\xa4\xea\xb6\x58\xce\xa9\x35\xf7\xf5\x2e\xae\xe0\xa5\x6c\x56\x66\xea\x5d\xd7\xa5\xcd\xf1\xfe\x56\x6d\xa4\x31\xdb\xa6\xb9\x10\x01\xa8\x4d\xb7\x45\x21\x99\x35\xca\x6a\x0c\x40\x88\xfb\xd3\x86\x53\x3f\x4e\xd8\x86\xf9\xa1\x6b\x1b\x7e\xc4\x75\x7c\x47\x6d\x87\x64\x6c\xb3\xd2\x78\xb6\xf3\xdc\x10\x7a\x84\xd3\xaf\x1b\xa8\xba\xbd\x0f\x51\x1f\x0a\x89\xbf\x22\x51\x85\x80\xd5\x7d\x5b\x26\x0a\xfd\xf2\x29\x69\xad\x67\xa1\x2c\x44\x99\x93\xe6\x1b\x77\x89\x3d\x5a\xc0\x2e\x02\x82\x6a\xc9\x4f\x87\xeb\xe0\x32\xc3\xa7\x83\x2a\x49\xe1\x8b\x6b\xc0\xd8\x00\xd3\xfb\xea\x5d\xbc\x20\x7c\xe5\xff\xfd\x34\x57\x81\xca\xdd\xb9\x9f\x53\x40\xe2\xfc\xe0\x33\x14\x12\x0c\xe0\x36\x9c\x60\x6e\x82\xf4\xe3\x30\x2a\x40\x0e\x0b\xe9\xee\xf9\x58\xb2\x39\xaf\xbc\xec\x35\xff\x1d\xf7\xba\xfd\x93\x27\xf3\xc6\xf1\xb6\x99\x10\xc5\xe4\xce\x1b\x0e\xfd\xa8\x29\xff\x9d\xb6\xdf\x7e\xbe\xc3\xfb\x9b\x5a\x87\x56\xc5\xaf\x3f\xb5\xe2\xac\xfa\xd3\x93\xb2\x48\xa1\xdc\xb1\x7a\xa9\xb8\xd9\x0a\x40\x15\x16\xbc\x9e\x18\x52\xc9\x18\x07\x9b\x4f\x77\x75\xdc\x75\xd2\xd2\x73\x23\x4e\x6b\xbb\x3e\x97\xef\xbe\xc0\x16\xd4\x39\x71\xd4\x52\xc7\x6e\x2c\x25\x29\xf9\x34\xb8\x3b\xe3\x0f\x41\xf7\x69\x52\x6e\x5c\x44\xfd\x56\xc7\x27\x37\xfc\xd3\x07\xfa\x3f\x3a\x22\x6e\xff\x8a\x93\xd1\x36\x10\x48\xb5\x7a\x13\x20\x09\x1d\x9f\xa7\xc1\xbf\x3e\xbe\x54\xd1\x87\x6d\xff\xd5\x9c\xf5\x9a\x41\xbf\x8a\x8c\x6b\x6f\x29\x6f\x13\x38\x6e\x9f\x41\x71\x4d\x4a\xb3\x94\xf7\xb7\x61\x9a\xf2\xc6\xbf\x32\x7f\x5e\x5a\xc1\x7e\xb8\x2e\x6a\x94\x25\x4b\xde\x29\x48\x5f\x20\x30\x9f\x13\xe1\x32\x63\x5f\x7a\x3e\x19\x60\x7c\x12\x44\x25\x14\x2b\xe4\xa0\x35\x98\xc8\x45\x2a\x33\x48\x62\x26\x2a\xc8\xa3\xf2\x71\x80\x71\x97\xb8\x98\xb6\x2b\x16\x86\x42\x82\xcb\xb4\x18\xb5\x12\xda\xb9\xe2\x52\xc5\xdc\xf7\x7d\xe8\x44\xf6\xf3\x93\xf5\x71\x94\xe7\x94\x7e\x00\xbb\x74\x83\xdc\x95\xd0\x27\x0e\x81\x2d\x82\x0f\xa3\x76\xbc\x1c\xf4\xf6\x03\x5f\x58\xc9\x71\x7c\x58\xa0\x3f\x51\xb0\x4e\x3a\x1c\xe4\x2a\xaf\x13\xf8\x5e\xab\xaf\x31\x00\x88\x44\xf5\xf9\xb9\x1b\xed\x01\x16\xbb\xe3\x60\x3b\x31\xa4\xf0\x7f\x15\x78\x95\x33\xd0\xa0\xbc\x93\xa8\x61\x1f\x7e\x9f\xac\x16\x43\xc5\xdc\x31\x93\x14\x3c\x93\x74\x3c\xa2\x7f\xa4\xeb\x81\x95\x0d\xd2\xd1\x1e\x72\xfe\xda\xdc\x03\xd6\x34\x53\x49\x48\x43\x83\xb4\x81\x29\x45\xd4\x4e\x74\x54\x2b\xe6\x03\x65\x02\x4b\x9b\xeb\x32\x40\xc5\xac\x41\xb9\x53\x52\x9b\x87\xef\x25\xd3\xcd\xcb\x26\xc1\xc2\x3e\xdc\x90\xa1\xab\x6c\x6c\x04\x70\xd2\x3c\x28\xc2\x90\x39\xeb\x05\x0b\x79\x4e\xaa\x79\x55\x9f\xa6\x54\x81\x72\x50\x30\xa2\x22\xc4\x9c\x08\x48\xf3\x4b\x95\xb8\x24\xca\xd9\x6b\x4f\x3e\xcb\xcc\xb9\x4b\x4f\x4d\x89\x8c\x13\x2b\x84\xe6\x88\x94\xdd\x34\x59\x4f\xbd\x25\xeb\x04\x36\x83\x09\x4a\x8e\xc7\x87\xc9\x8d\x1f\x4f\xd1\x38\x6a\xfd\x17\xbd\x22\xb4\x25\x42\xb4\x62\x65\xc7\xbc\x56\x14\x57\x5e\xe6\x3c\x65\xc3\xd1\x38\xb3\xed\x3d\xa4\x77\x89\x40\xf0\x27\xda\x20\xba\xa7\x5a\xf7\xc6\x7a\x62\x86\x34\xc0\xb0\x76\xe2\x2f\x10\xb5\x41\x71\x1d\x50\x19\x28\x82\x1e\x5f\x47\xf2\x5e\x70\xf0\xf2\xdb\x27\x4c\x13\x6a\x59\x52\xcd\x99\xe4\x5a\xd9\x4e\xa1\x3e\xf2\xba\xcd\x8b\x1c\x43\x82\x5f\x0c\x01\xb6\x19\x11\x46\x32\x8f\xbb\xe1\x42\xce\x40\x51\x44\xef\x48\x0a\x86\xee\x00\x0d\x2e\x06\xbf\x19\x0d\x13\x76\x44\x58\x6a\x5d\x20\x35\xc7\x41\x1c\xec\xfe\xde\x66\x07\x84\xa5\xb5\xb0\x14\xbe\x33\x58\x13\x0c\xc6\x81\x3d\x14\x6a\x4c\xd7\xe6\x46\xe9\x5f\xe6\x4a\xb8\xfd\x1a\x59\x02\xaa\x10\x50\xb0\xa2\x7d\xd3\x92\x40\xd6\xad\x06\xfa\xb2\x05\x3a\x51\x92\x29\x99\xf1\x85\x43\xe0\x7d\xb6\x43\x9e\xa0\x9c\x4a\xa9\x44\xc2\xa1\xfa\xf3\xe8\x72\xa9\x37\x57\x61\x3d\xf0\x0a\x02\x0e\xf9\x91\x68\x81\x71\xb4\x32\x4f\x91\xdc\x92\xaa\x4f\x05\x25\xa1\xc2\x2f\xd9\x38\x8a\x25\xa9\xab\x56\xfb\x8e\x71\x01\x58\xb8\x5c\x6f\x10\x56\xf5\x31\x10\x6b\x6a\xc3\xdd\x7d\xe8\x6a\x3c\x87\x77\x5e\xfd\xa8\x3e\x37\xd4\xec\x48\x57\x00\xe7\x9a\x21\x7d\x6d\x6d\x27\x6e\xbb\x25\x85\x27\x17\x13\x1f\xea\xf8\x80\x87\x2e\x25\xd8\x5f\x7e\x42\x3f\x12\x94\x27\x41\xe9\x51\x49\x69\x32\xa8\x43\x93\x9a\xa1\x80\x5c\x7b\xdf\x21\xea\x81\x02\x9c\x24\xf6\x25\xeb\xc9\xed\xa4\xfb\x78\xc8\xfb\x9c\x10\xee\x67\xfa\x8f\xe3\x07\x66\x92\xff\x4d\x62\x92\xaf\x86\xf9\x6b\xc9\xca\xef\x0f\x42\xba\x3c\xe8\xd5\xa3\x1a\x36\xa0\xc1\xc1\x92\x53\x7c\x2e\x3a\xc8\xd0\x5e\xfc\x49\x43\x08\x21\x00\xff\x98\x89\xf9\x5d\x49\xf7\xe7\x87\x8c\x53\x54\x16\xa7\xd9\x81\x61\x36\x4b\xc0\xa9\x4e\x09\xb9\x04\xa8\xcb\x72\x38\x61\x99\xf3\x4e\x55\x13\x45\x07\x83\xad\x0f\x0c\xb4\x21\x3d\xc9\xc0\x78\x19\x21\x03\xbd\x68\x43\x08\x37\x38\x3b\x4f\x45\xb9\xc8\xaf\x90\x8f\xa0\x8c\x87\xee\x51\x70\xe9\xcf\x53\x22\x7b\x11\xbd\xed\x46\x82\xc0\x1e\x9e\x75\xc7\xdc\x7a\x04\x04\x1c\x15\x1c\x39\x72\x86\x4a\x3c\xba\xe4\xf8\x26\x39\x36\x6a\xc5\xfe\x66\x7e\x34\x38\x28\xb5\x9f\x49\x04\x37\x2b\x46\x70\x28\x6b\x0f\xf9\x67\xdc\xd4\xd3\xbd\x62\x0e\xcc\x14\xc2\x23\x13\x21\x9f\x3b\x31\x7d\x01\x9a\x45\x1f\xb1\xcd\xff\x0f\xe7\xd5\x87\x84\xaf\xc2\x28\xea\x05\xa9\xf1\xb9\xfe\xfb\xc0\x21\xdb\xae\x04\x76\x8a\x40\xf4\x4b\x87\x6d\xcc\x06\x7e\xf0\xdb\xcf\x46\x6a\x2b\xd8\xfe\xb3\xcd\x8a\xba\xfb\x97\xd9\xeb\x0e\xe7\xfb\xe3\x99\xed\xce\xd3\x81\x52\xff\x25\x04\xb4\xfa\x46\xe0\x56\x7e\x12\x0b\x9a\x1a\x0a\x2b\x99\x03\x20\xd6\x3a\x0a\xf5\xc4\x22\xd3\xea\xe3\x0f\x7e\x6f\xf5\xd2\x99\x7a\xfa\xfa\xd8\xe3\x76\x3c\x1f\xfa\x74\xce\xaf\x46\xd1\x6b\x1d\xcc\x1f\x9f\x32\xad\x8e\x0c\x6a\x24\xcb\x10\xdd\x5d\xda\xd9\x5d\x29\xe0\xfb\xff\xb1\xf7\x67\x39\x8e\x24\xcd\xb2\x30\xf8\xce\x55\xd8\x06\xac\x60\xaa\x36\xa3\xdf\xfb\x2d\x17\x71\xa6\x1f\x6c\xc0\x71\x01\x47\xfb\xe5\x43\xac\xbe\xa1\x22\x6a\x4e\x46\x32\x82\xcc\xac\xaf\xea\x3b\xdf\xbd\x7d\x80\xaa\x0c\x8f\xf0\xd9\xdc\x06\x9d\x44\x24\x2e\xb0\x76\xd9\x22\x83\x2a\xc0\x56\x0c\x6a\xf9\x62\x42\x1c\x60\x03\x97\x61\x07\x94\xd0\x92\x82\xbe\x85\xc8\xa0\x74\xcd\x6d\xba\xe8\x33\x96\x53\xf4\x3e\x75\xfb\xd1\x26\x71\x1d\xc2\xba\xfa\xd6\xfa\xde\x28\x11\xce\x3e\x8e\x34\x4e\x26\xa6\x08\x7a\xdb\x87\xad\x07\x36\x5f\xb6\x50\x46\xdd\x60\x8e\x30\xa2\x61\xd3\x12\x14\x12\xab\x93\xa2\x4f\x27\x5d\x2b\x75\xc9\xc6\xa4\x74\x8d\xb9\xd9\xa4\x65\xc3\x09\xa5\x85\x03\x81\x12\xa4\x4a\x40\xc8\x01\x34\x36\x31\x98\x95\xd6\x4e\x59\x35\xcd\x25\x03\x04\xd2\x42\x1b\x6d\x8f\x0d\x55\x5e\xa4\x93\x3e\x89\x5f\xb1\xb1\x44\xc3\xcd\xe2\xc0\x1b\x46\x41\x50\xb0\x95\x6b\x2c\x9a\xbd\x16\xb5\xfa\x53\xe5\x04\x5c\x17\xf8\x80\x7b\xc8\xa5\x1c\xb9\x4a\x10\x2d\x3b\x00\xb5\xc2\x54\x17\x15\xde\x51\xdc\x3a\x8e\x79\xe7\x4a\xec\x80\x48\x99\x0d\x97\x9b\x19\x74\xcd\xf7\x62\xa7\x1d\x5f\xc7\xc1\x4b\xa0\x88\x81\x85\x93\x19\x06\x89\xc2\x07\xb0\x06\x2b\xaf\x67\xe5\xdb\x7f\xfd\xaf\xff\xfd\xff\xfd\xb9\x43\xa9\xbc\xa0\xa9\x00\xff\xa0\x63\x99\xbc\x8c\x8b\x15\xcf\x24\x4e\xcc\xce\xbc\x39\x3a\x70\x74\x66\x3a\x6a\xf9\x02\xbd\xf8\x9d\x64\x96\x6a\xb9\x81\xdb\xe9\xcb\xbd\x5f\x22\x26\x55\x8b\xd3\x41\xfd\x82\x46\x96\x5d\x1f\x4b\x1a\xca\x4a\x51\x08\x21\x8b\xe0\x57\x46\x0b\xaa\x66\xcb\x01\xcf\x33\xf5\xb2\x43\x51\xb8\xb0\x50\x4e\xcb\x44\x1a\x4d\xc6\x38\x98\xe1\x1c\x63\x97\x8e\xa4\x5b\x06\xa3\x42\x39\x34\xbb\x96\x09\x00\x31\x09\x71\xc5\xb1\x9a\xcb\xac\xba\x4f\xdc\x5c\x9f\x88\xa3\x1e\x89\xb1\x1e\xcd\xbb\x4f\x76\xdf\x67\xfa\xac\xcf\xd4\x5e\xbf\xce\x3c\x55\xe5\x29\x77\xae\x7a\x5f\x8a\xbb\x02\xf4\xfb\xa5\x85\x55\xa4\xfd\xce\xa7\x69\xba\xc5\x3c\x40\xd6\x94\x77\x30\xac\x09\x6c\x99\x86\x6a\xda\x7d\x29\xc1\x3a\x3b\x87\xcb\x03\xc2\x34\x1e\xc5\x3e\x48\xa1\x02\xb8\x0b\x26\xc6\x52\xef\xea\x89\xdc\x16\x84\x12\x32\xcf\xc2\x49\xb8\x16\x2f\xf5\xb0\xb9\x76\xaf\xe3\xef\xd7\xb8\xec\x66\xd2\xd9\xc8\x81\x9b\xda\x36\x7b\xde\x3c\xf4\x1a\x15\xc2\x9a\xef\xfb\x54\x81\xee\xa3\x99\xde\x9f\x08\xc1\xfe\xa2\x4f\x79\x7c\xdb\x65\xde\x7d\xe4\xa7\xac\xac\xe6\x17\x03\x7b\x64\x08\xaf\xa4\x1d\x93\x6a\xd7\xe0\x4a\x65\xf4\x82\x08\xcc\xcf\xc9\xd3\xc4\x6f\x47\xbe\x64\xbd\xce\xf6\x1b\x03\x1f\x5a\x79\xbf\xd3\xb7\x66\xfb\x65\x61\x3c\x68\x33\xeb\x1e\x55\x3a\x19\x64\x98\xf0\x1f\x24\xde\xe2\x6b\xe0\x2d\x9c\x34\x08\x2f\x8b\x77\x75\xb9\x36\xb4\x81\xb9\x8e\x35\x80\x8c\x5a\x07\x88\x63\x22\x58\x36\xf2\x8a\x91\x68\xf3\x15\xf0\x6a\x6b\x22\xa0\xb2\x00\x65\x00\x9f\x6f\xf6\x95\xc0\xed\xef\x72\x80\x5b\xa1\x55\xfc\x44\x99\x7a\x0a\xd2\x65\x1f\xb6\xee\xe4\x6e\xcb\x6a\x03\xf5\x8e\x33\x94\x70\xd1\xc9\x2b\xc8\x02\x05\x31\xe4\x77\xf0\x24\x51\x7b\x66\xff\x43\x16\xe7\x97\x7b\xe0\xe5\x9f\xd0\x05\x9f\x72\x9f\x7a\x16\xed\x52\x84\xa2\xa6\xe7\x29\x7a\x7c\x3d\xf5\xd8\xdf\x7f\xbd\x7b\x48\x2e\x5b\xd4\x8a\xe2\x98\xba\xa6\x9e\xf1\x69\xea\xf9\x67\x77\xe2\xcb\x5f\xd3\x8b\xa1\xcb\x8a\x95\x2b\x3d\xac\x5c\xe7\x4c\x47\xe7\xcd\x65\x69\x41\x6d\xda\x6c\x72\x43\x0f\x32\x0f\x14\xc4\xcc\xa8\x52\x32\xc7\x71\x78\x13\xc3\x8b\xc9\x9b\x56\xf3\x06\xca\xd5\xf5\x8a\x9e\x1f\xea\x5f\xb5\xa3\x3d\xa5\x11\xb5\xbe\xb3\x8a\xff\xa7\xef\xfd\x25\x33\xe8\xcf\x13\xa8\x02\x25\xdf\x6c\x3d\xdd\x62\xd5\x50\x51\x26\x2e\x28\x73\xda\xe3\x74\xc8\xae\x2e\x17\x44\x33\xa5\x30\x8a\xb9\xe2\x2b\xc0\x7e\x4a\xfb\x1e\xcb\x53\x45\x5d\x38\xa2\x4b\x88\xbb\x20\x43\x90\x7f\xc9\x4a\xbc\x2c\x5b\x64\x78\x51\xd1\xa7\xbc\xb7\x99\x70\xbf\xdc\xc4\x82\xc2\x78\x78\x50\x7d\x1b\x08\xb7\x4c\x68\x6e\x28\xc3\xd0\x76\x18\x94\x7d\xe1\x3a\xed\xd4\x33\xf6\x6a\x3a\x39\xbd\x7e\xbc\x0e\xb3\x40\x73\xab\x48\x34\xed\xab\x7b\xe4\xca\xa2\xc1\xd3\x18\xf9\x85\x01\x39\xb2\x7e\x3d\x20\x2f\xff\x9d\xc6\xc7\x53\x2e\x59\xdb\x6b\xe5\xb0\x14\x24\xa5\xce\xa0\x2e\x24\xf3\x59\x38\x01\x8a\x17\x80\x44\xcc\x32\xa7\xb5\x1e\xa1\x23\xf3\xcf\x73\x2e\x90\x90\xfa\x5b\x9c\x92\xcb\x9f\xf0\x4a\xcc\x30\x50\xb3\x26\x30\x06\x33\xb2\xa0\x99\x3a\x72\x10\xcf\xb4\x7d\x2a\x21\x9b\x7d\x30\xcb\x2e\x5d\x50\xc5\x67\xbf\xcf\xb2\x83\xaa\xc1\x3c\x16\x17\xd6\x43\x0d\x38\x2f\x15\x71\xad\x8f\x1f\x63\x92\x2b\x09\x19\xdb\x0c\xce\x8b\x90\x05\x36\x36\x36\x1c\x3f\x48\x35\x11\xdb\xb2\x9d\x6b\xe3\x24\x63\x5e\xf1\x52\x19\x40\x2d\x02\x36\x08\xf0\x64\x2d\x21\x4f\x81\x86\x14\x2c\x00\xfc\x4a\xcf\x19\x90\xc4\x75\xc2\x63\x0c\xfc\x37\xfb\x26\xbd\x54\xd1\xe1\xad\x9a\x51\xcb\x08\xc5\x45\xb0\x00\xd8\xb4\x0e\x19\xe4\x8a\xc0\x25\xfb\x52\x15\x75\x00\x1b\xeb\x28\xfe\x94\x25\x7f\x0a\x27\x40\x7f\xb0\x76\xc0\x25\x99\x01\xb4\x0d\x7f\x71\x46\x7d\xd7\x5f\x76\x44\x30\x90\x05\xc2\x39\xef\x86\xd6\x53\xca\x53\x9f\xab\x2d\xa7\x9e\x0e\xfb\xa2\x20\xf9\x67\xac\x75\xbd\x21\x50\xec\xa9\x21\x95\x72\x10\xf1\x50\xfa\x4e\x89\x37\xc0\x44\x21\xe8\x20\x6a\x0d\x07\xfe\x82\xb6\xbb\xaa\xe6\xf4\xc5\x30\x8c\x74\x44\x65\x8d\x30\xe2\x51\xd2\x43\xe3\xa2\x49\xed\x0f\xb0\x82\x91\x2e\x54\x48\x61\x35\x9d\xc4\x27\x68\x4e\x17\x9b\x96\x73\x0d\x7d\x04\xad\x4a\xa7\x1d\x05\xd4\x5a\x06\x04\x5a\xef\xf6\x8f\x87\x64\x17\x2f\xfa\x2f\xd9\x40\xff\x8c\x86\xb4\xf9\xbf\x83\x58\xcd\x86\xe8\x8e\x76\x9b\x21\xb3\x88\xa0\x7c\xfb\x8c\x97\x87\x75\x01\x06\x36\x69\x6d\x51\x51\x04\x44\x06\x90\x22\x90\x3a\xed\x8b\x76\x8f\x35\xee\x73\x21\x15\x0b\x0a\x22\x50\xda\x5e\x83\x1d\x65\x07\x01\x24\x0d\xfc\x9c\x8e\x45\xcb\x0b\x6c\xa1\x10\x36\x77\x68\x07\xcc\x6f\xee\x91\xfa\x2d\x99\xb5\xcf\xf6\x59\xed\x4b\x64\x12\xb6\x01\x59\xdb\x5c\xd2\x4d\x98\x5c\xe4\xd7\xcb\x87\x57\x8d\xf7\xfc\x0b\x43\xdf\x5e\x6e\xb0\x9e\xe2\xf2\x7a\xa4\xc2\xa3\x1b\xd4\x3d\xb6\xe7\x8c\xf6\xa0\xf6\x9c\xc8\x32\x05\x1b\x77\xb4\xc7\x64\x71\x77\xf1\x51\x63\x06\xdb\x07\x1e\x16\xec\x14\x9a\xc2\x22\xd2\x9f\xd9\xe3\x3f\xb1\xe7\x77\x63\xf5\x29\xb5\xa9\x2f\x59\x8f\x51\x76\xf8\x4f\xb2\x4b\x5f\x8e\x55\xd4\x24\x90\x85\x89\xad\x9e\x6c\xb4\x7a\xde\xa5\xef\x20\xe8\xa0\xc0\x54\x9a\x61\xfa\x10\x05\x43\x02\xe7\xd4\xfc\xeb\x16\xec\xe5\x9f\x1a\x03\x00\xcc\xbd\x9f\xe9\x5f\x57\x55\x18\x3d\x38\x1d\x33\x82\xbd\x39\x41\x4c\x15\xb4\x31\x40\x04\x64\x65\x81\x04\xb9\x02\x8b\x87\x5b\x73\x09\x05\xe9\xf3\xb4\x4b\x69\x20\xd0\xd7\x14\x66\xdf\x15\x3a\x3e\x6f\x8d\xb8\xc7\xd1\x6a\x8b\x2e\xd6\x82\x3f\xb7\xe8\x3e\x8e\xcb\x57\x61\xc6\x5d\x18\x56\xf8\xb4\x2a\xf7\x73\x55\x3e\x1e\x96\x63\xf9\xbd\xe5\xd8\xd7\xce\xb7\xae\xe1\xe5\xf5\xe2\xd9\x5f\x2e\x9e\xc7\xe3\xa2\x29\xbf\xb3\x68\x3e\x25\x1f\x75\xfe\x6d\x11\x4f\x52\xcd\x48\xd9\x18\xf0\x29\x69\xa7\xdb\xe3\xe7\xdb\x0f\xdd\x40\xac\x5b\x1a\x5c\xa2\xe9\xb4\xbb\xb8\x36\xea\xbb\xc1\x79\xb0\x61\x40\xf5\xf9\x37\x44\x4e\x2f\x7f\x45\xe8\xf4\xe7\xc8\x69\x1f\x01\x7c\x0c\xd6\x9c\x20\x72\x43\xba\x19\x63\x70\x06\xd5\xad\xb4\x50\xda\x3e\x6d\x54\x6a\x98\x70\x97\xe6\x26\xa0\x0d\xe9\x0a\x82\x1e\x95\xfc\x37\xc7\x5d\xff\x19\xc1\x88\xa7\x14\x9d\xfe\xdb\x8b\xc0\x6b\x2b\x29\x8c\xa9\xbb\x62\x5a\x2a\xe1\x31\x0e\x70\x3c\x86\x08\x4e\x9a\x75\x4f\x2e\x58\x6f\xf1\x74\x43\xf4\x04\x04\x21\x58\xb0\x75\x3d\x43\x71\xc4\x95\xb3\x88\x2b\x8b\xc1\x2a\x17\x80\x6c\xe9\x51\x1c\xcb\xc7\x38\xdd\x0e\x9b\x2b\xbf\xe3\xcc\x7c\xfe\x10\xd2\xd2\x4d\x9a\x39\xb5\xd6\x89\x95\x22\x96\x93\x64\x6e\x13\xc9\xb2\x89\xee\xce\xde\x8e\xfe\xae\x7a\xb1\x3e\x91\x37\x4d\x0a\x12\xa7\x2f\x4a\x26\x6d\x57\xb4\x7d\xbf\x39\x7a\xa6\x06\x28\xa5\xb5\xfa\x0d\x75\xe6\xb7\xfe\x7d\x4b\x58\xb6\xd8\xab\x50\x4d\xf2\x37\x04\xf4\x2f\x7f\xba\x63\xe9\x13\x98\x55\xff\xfd\x95\x35\x31\x93\x84\xa6\xb2\x20\x1c\x9f\x21\x06\x1b\xeb\x8d\xd4\x1c\xa2\x33\x2a\xe3\x05\x06\xdc\x92\xb4\xc5\x52\x59\x43\x84\xe6\x47\xa8\x03\x00\x41\xfc\xdc\xb0\xd2\x8c\x0a\x9e\xc4\x3f\xe5\x20\x33\xa6\x04\xf2\xba\xee\x3d\xde\x63\x4b\x87\x3b\x02\x0c\x2e\xed\xe8\xf7\x28\x61\x6a\x90\xa3\x53\x31\x43\xbf\x01\x1b\x9c\xc9\x6b\x2e\xa8\xee\x08\xca\xd9\x0d\xf4\x6f\x43\x0f\x2d\xd3\x59\x2d\x40\x6f\x13\xc0\x24\x64\xfd\xfe\x50\x20\x3a\x46\xa3\x5e\x2c\x7a\xfe\x55\xb2\xde\xf8\x1a\x9f\xfa\x77\xfb\x2a\xc8\x60\x2f\xa0\xb3\x6c\xd1\x5b\xe1\xbb\x46\x62\x0b\x7a\x9c\x88\x65\x1b\xab\x9d\xd9\xcf\xfe\xb2\x6e\x76\xf9\x8b\xe6\x2f\x7d\xce\x0e\xfe\xc7\x5f\x95\x11\x6e\xa2\xbf\xd1\x49\xec\xe8\x5f\x89\x39\xda\x52\xf8\x4b\x2b\xd6\xf1\xb8\x1c\x9e\x8b\xe4\xb9\x6e\x3e\xac\xa6\x0f\x71\x8c\x7f\xa5\xb8\x9a\x3e\x27\xf5\xfe\xf3\xd5\xb7\x31\x1f\xb0\x82\x13\xec\x41\x1a\xea\xaf\x7a\xd6\xef\x72\xd6\x1e\x7f\xe1\x7d\xff\x9b\x32\xbc\x97\x3f\xf7\xd5\xdf\xb4\xfe\x73\x3e\xeb\xbb\xe2\x9b\xd7\xd7\x79\x4e\x57\xfc\x3f\x7f\xea\x3a\x4f\x51\xd6\x9c\xee\x56\x6d\x15\x5a\xb5\xa8\xe9\x83\xb8\xf6\x12\x91\xb1\x55\xae\xb5\x27\x81\x97\x44\x81\x97\x3c\xe5\x56\x67\xbd\xca\x9c\x5b\x06\x83\xd7\x35\xaa\xce\x9b\x14\x97\x1e\x51\x8a\x5f\x92\x13\x43\xc7\x26\xaa\x41\x6e\x20\xcd\x6f\x19\x73\x60\x1f\xc1\xcc\x0c\x4a\xb7\xa8\x57\x9f\x27\x67\xb4\x8f\xaa\xed\x16\xa5\xcb\x35\x6a\x4a\xb7\x68\x37\xc0\x46\x05\x7d\x5f\xae\xab\x0c\xb1\xa5\xbb\xec\xce\xcd\x9f\xf8\x2e\xfc\x92\x28\xfc\xd2\xde\xc1\x9a\xf4\x29\x5e\x96\x5f\x15\xb8\xa4\x30\x33\x60\xdb\x8e\xa0\x77\xc5\x4f\x47\xf1\xb3\x6e\x10\xc1\xc5\x7c\xd8\x90\xea\xe3\x80\x09\xc3\x18\x7e\x0a\x58\x54\x1b\x29\x0c\x51\x1b\x9c\x5d\x90\x43\x47\x5f\xc4\xc7\x58\x8f\xa1\x47\x89\x7c\x70\x87\xb0\x2c\xc2\x27\x9c\xda\x5c\xd5\x3c\xca\x98\xce\xb6\xea\x84\xd6\x08\xa5\xe8\x01\x00\xc2\xa0\x99\x95\x27\x25\x3c\x44\x28\x7b\x9d\x49\x83\x78\x44\x96\xfa\x77\x39\x50\x45\x67\x3f\xcd\xa9\x27\x77\xa0\x19\x4f\xfd\x14\xd1\x1d\x66\x94\x6c\x98\x93\xcd\x86\x83\xda\x2e\x60\xdf\x9d\x0a\x0f\x88\x31\x4c\xa5\xfc\x88\x42\x00\x1b\x10\x76\xc5\x54\x5c\xcd\x7e\xcb\x08\x19\xb4\x4a\x75\x96\x66\xed\x37\x72\x00\x4b\x5a\x3b\x24\x6b\xe8\x79\x6f\xe6\x13\xcf\x05\x69\x27\x17\x15\x31\xf8\xe0\x88\x42\x92\xdc\x3c\x3c\x16\x9d\x75\x2f\x06\x65\x63\x14\x2a\xd2\xad\x72\x4c\x6a\x19\xa8\xf5\x0e\x30\x1b\xb6\x71\xd4\x16\x66\x05\x75\x36\x53\x31\xb6\x28\x08\x94\x07\xe7\xe4\x1a\x01\x00\x00\x54\xed\x94\x21\x1e\x05\xbd\xc0\x6c\xd4\x21\x4a\x84\xf4\xe3\xb9\xa8\xd3\x2e\x99\x3a\x3c\x4e\xc8\x52\x82\x38\x45\xf8\xa1\x9d\xe9\xfb\xbe\xe6\x14\x7d\xa4\x6e\xc1\xe7\x40\x74\xe8\x20\x9e\xbe\xee\x91\x82\x25\x3d\xe4\x3d\xda\xb0\xf4\xe2\xc2\x50\x1b\x74\x95\x66\x39\xe9\x91\x25\x81\xce\x8b\xea\xdf\xef\x7a\xf6\x53\x74\x29\x9f\x65\x3c\x73\xd8\xd5\x95\x98\x0b\xf2\x46\x94\x72\x0c\x72\xd1\xe4\x1d\xea\x32\x48\xb5\x60\x16\x40\x3d\x01\x84\x52\xc8\x74\x3b\xad\xc7\x9c\x65\x8d\xb0\xc3\x19\xb6\x23\x11\xcd\x4c\xa1\x99\x7f\x37\xf8\x79\x7a\x72\x16\xb2\x32\x68\x09\x39\x95\x1d\xca\xe5\x67\xb9\x8d\x3d\x87\x29\x01\x5c\x79\x63\xd7\x62\xee\x1f\x98\x68\x77\x94\xab\x5b\x73\xfd\x41\xe0\x31\x22\x14\xf3\xac\x7b\xe0\x60\x23\x99\x98\xcb\x09\xa7\xc0\x7a\x52\xcc\x64\xfd\xd4\xd7\x27\x1f\x45\x75\x29\xb5\xb2\x8a\xef\x29\x0d\x8d\xa0\xd5\x6e\x5f\xb3\x67\xf4\x1b\xc8\xd7\xd4\x46\xa1\x6b\x54\xcc\x99\x07\x42\xfd\x19\xfb\x97\x52\x47\xb5\xb8\xbc\xb8\x06\x0a\x81\xf6\x01\x04\x87\x40\x04\x48\xa1\xaa\x52\xd3\xa1\x50\x40\x91\x5c\x0e\xeb\x30\xf8\xed\xa8\xbe\x1f\xc2\xcd\xbe\x75\xdf\x1b\xef\xa7\xc4\xf3\x32\xbe\x15\xb1\x49\x51\x15\x1c\x80\x5e\xe8\xe7\x55\x00\x91\xf3\xd2\x8a\xf0\x18\x6a\x6e\x63\x63\x3a\x23\xe7\xcb\xa6\x45\x43\xef\x98\x8d\xa0\x78\x93\x7d\x04\xf1\xf1\xa5\x48\xd9\x05\xe5\xae\x0a\x11\x0f\x9b\xf9\xd5\x79\xb6\x9b\x1c\x02\x1e\x34\x8c\x50\x2c\x07\x0c\xab\x3f\x6c\x3e\x1c\x10\x1f\xce\x8b\xe7\xd5\xf6\x28\x93\xa1\xa2\x56\x83\xd9\xc7\x05\xb6\x7d\x2e\x9b\x2d\x07\x25\xc1\x50\x1e\x41\x40\x5d\x6c\x73\xec\x20\x49\x46\xb6\x25\x8a\x37\xb1\x7b\xf0\x16\xbc\x83\xdd\x80\xd7\x6f\xe9\xdd\x90\x78\x8a\xf3\xe4\xfc\xba\x10\x00\x58\x05\xb3\x93\x1c\x85\x66\x5b\x04\x80\x39\x36\xec\x9b\x9d\x6d\xb6\x20\x88\x9a\x17\x8e\x79\x27\xab\x57\xfe\x88\xf6\x13\x98\xb2\x71\xf8\x0f\xff\x2b\x8f\xc1\x09\xbc\x87\x19\x4b\x2f\x6e\xc2\xb0\xde\x3f\x74\x13\x3c\xab\x4a\xbb\xfc\xa3\x17\xea\x13\x02\x8e\x28\xd0\x06\xa6\x42\x51\x77\x6d\x1b\xbe\x77\x95\x77\x7f\xbd\x97\x62\x22\x5f\xec\x7e\xf3\x55\x9f\x22\x2a\xf9\x95\x46\x76\x4f\x05\xea\xc3\x60\xd3\x49\x67\x36\x95\x2b\x24\x7e\x04\xfc\xe9\x78\xdc\x7e\x3c\x68\xa5\x99\x1d\xdd\xc6\x4c\x74\x97\xfb\xe9\xeb\xb7\xc7\x03\x9d\x35\x00\xc5\xd6\xd5\x27\x5e\x67\x25\xfe\xa3\x7a\x6c\x5d\x51\xda\xc1\x5c\x0b\xb0\x20\xeb\xaf\x4b\xde\x12\x20\xa1\x5c\xf5\x66\xff\xbc\x3e\x4a\x26\x45\xd0\x96\xe3\x0e\x11\x62\x1c\x8b\xdb\xe4\xaa\xb8\xd2\xcf\xc7\x3c\x1c\xc2\x07\x91\x1c\xd6\x5f\x8e\x75\x90\xbd\xc1\x8d\x4f\xf0\xe5\x6e\x99\xaf\x5e\x30\x57\x65\xd9\xbc\xa7\x27\xaa\x42\x10\x63\xa6\x63\x42\x06\x84\x40\x5c\xcd\x03\x76\x0d\xb5\xed\x6d\xb9\xa9\xe9\x0d\x28\xaf\xe6\x70\xc7\xdd\x49\x09\x92\xa6\x57\xdd\x25\x08\x85\x97\x8c\xa5\xee\x68\x1a\x86\x1c\x58\xde\x49\x0d\x44\x20\x63\xe2\xda\x42\x32\xfb\xbd\x83\xcb\x3a\x48\x2d\x27\xc1\xd2\xca\x76\xa4\x73\x9b\x9b\x38\x04\x35\x55\xa0\x58\x06\x33\x7d\x5f\x70\x1c\x9b\xde\x66\x33\x13\xd9\x16\x77\x2c\xf4\x7c\x4d\x30\xc5\xc7\x99\xf0\xc5\xdf\xf4\xf0\xfc\x14\xda\xc9\xf5\x5f\xb1\x87\xf7\x21\x21\x6b\xda\xa0\x63\xa3\x65\xee\x88\xbf\x61\xed\x39\x7b\x2b\x03\x74\x02\x48\x51\xfe\x1c\xa2\x7b\xf4\xf1\x37\x88\xe1\x68\xf1\x0d\x5c\x6d\x1d\x9b\x79\xac\x77\x5c\x84\xc4\x21\xde\xda\x2e\x0f\x11\xc4\x7b\x98\x66\xfb\x74\x25\xbf\x10\x8f\xca\xde\x85\x83\xea\xe6\xd7\x38\x23\xd0\x0f\x51\x9d\xf3\x85\xd6\xa5\x78\x50\xb6\x83\xd8\xcf\x11\xab\x5e\xef\x74\xbe\xf5\xe7\x68\x06\xe6\xf3\x8c\x06\x8a\x32\x90\xef\x16\x08\xfb\x9d\xff\xcf\xa5\x6d\x87\x5f\x16\xfa\x9f\x44\xd3\xd9\xa9\xda\xbe\x1a\x04\x97\x5f\x1e\x05\xbf\x37\x08\x98\x61\x51\x65\x05\xbb\xa8\x1e\x19\x70\x57\xfd\xd4\xd3\xd5\xbc\x0f\x73\x07\x9a\x6b\x06\x76\x6a\xf6\x21\x7d\x9c\x51\xc1\x64\x6f\x55\xf8\x56\xf2\xae\xaf\x3f\xc5\x97\xf2\x2b\xe6\x36\xad\x2e\xee\xdd\xf5\x9b\x0c\x4d\x19\x80\x05\xdd\x00\xae\x24\x0b\x2c\x36\x49\x00\x80\xfc\xcd\x4f\x75\x5f\xf2\xcd\xa5\x7a\xf2\x82\x2a\x32\xf0\xa0\xd8\xab\x9b\x0b\x24\x07\x3e\x68\xaf\xfc\x19\x6d\xa3\x23\xac\x25\xc7\xfa\xb9\x76\xf8\x81\x3c\xcf\x19\xf9\x6a\x6f\x1e\x38\xaf\x33\x7c\x1a\xa1\x8f\x63\xf7\x6a\x0f\x70\xf9\x9a\xce\x8a\xcb\xa6\xd9\x0a\xef\x9a\xf7\x29\x44\x94\x4f\x59\x69\x16\x83\xd4\xdc\x36\xe8\x66\xa1\xe9\x04\xc1\xf2\xa9\xa0\x35\x01\xeb\x35\xc0\xf7\x59\xa7\xff\xb9\x40\xef\xc6\x3e\xff\xc8\xca\xad\x91\xf9\x77\x5b\x42\xec\x48\x9c\x46\xd0\x67\x2f\xf8\xa3\x4c\xe5\x3d\xec\x16\x5a\xdb\x96\x51\x1d\xd7\xc6\x35\xf7\x81\x5f\x20\x60\x55\xdb\xc7\x8f\xde\x20\x42\xbd\x99\x35\xc8\xef\x26\xef\x7c\xfa\xfc\x14\x88\xc9\xe3\x5e\x58\x3c\x06\xde\xf1\xb3\x3c\x37\x69\x8e\xf3\x0a\x40\xd8\x3a\x35\x3c\xd9\x0c\xf6\x07\xf5\x28\x10\x24\x3b\xb1\x3d\xbb\x8b\x46\x24\xdd\xa1\x01\x52\x03\xa0\x48\x76\x80\xfd\xd5\x4c\x35\xd4\xae\x28\x43\xd3\x41\xd3\x31\x42\xae\xcc\x64\x41\xa2\x74\x50\x1f\x06\xd7\x9b\xe6\xe7\x13\x8d\xa4\x7a\xe3\xbd\x91\xad\xc9\x77\xd9\x03\x3e\xeb\x44\x0d\x79\x49\x6c\x1a\x5b\x6b\x87\x39\xa7\x36\xfb\xd4\x66\x9e\xae\x20\xf4\xed\x3f\xf9\xe7\x0b\x37\x62\xe5\x1e\xfb\xe5\x58\x3f\x7d\xc7\xc7\x0f\xc9\xa5\x58\xbb\xdf\x6c\x3c\x45\x12\x32\x38\x6c\xf7\x6d\xaf\x7a\x0a\x59\xe5\xf9\x7f\x63\x8b\xeb\x18\x41\xb5\xec\x20\xd8\x16\xc9\xa1\xf4\xa3\x74\xdb\x02\x19\x0f\x7e\xf2\xcf\x17\x6e\xc4\xd2\xb1\x07\x34\x85\xeb\xa7\xef\xf8\xc0\x42\x7d\x36\x78\x2d\x85\xed\x5d\x4b\xb1\xa5\xa2\xfc\xea\xad\x7e\xe5\x4e\x80\xd0\xde\x6f\xd5\x9b\xdf\xaa\xbf\x1d\x4b\xcf\x41\xc4\x7f\x7b\xe1\x32\xd5\x69\x8f\x46\x96\x5f\x8a\xe7\x6a\x5d\x32\x4f\x24\xc7\xca\x8c\x10\x33\x6f\xc3\xb4\x4d\x0e\x63\x8b\xa5\xd5\xa0\x99\x8b\x9d\x2c\xfa\xc4\x4c\xdf\xd8\x0c\x2c\x73\xd8\x6f\x22\x80\xf6\xd9\xea\x93\x42\x2e\x87\xce\x20\x9e\x7e\x41\x60\xa8\x6e\x15\x35\x47\x14\x9b\xca\xa8\xe0\xf9\xf8\xd1\xcc\x90\x4b\x52\xb6\x0a\xf5\xd6\xd6\xb6\x68\x5b\xda\xda\xad\xa5\xb4\x40\x83\x13\x02\x64\xb5\x9c\x0f\x7d\x72\x2d\xa2\xd8\x87\x80\xdd\x1e\x24\x6f\xb1\x14\x09\xaa\x38\x73\x4c\x7b\x5f\xf8\x4e\xb6\x44\x2b\x79\x69\x0b\x71\xbc\xd9\xe5\x4f\x5d\xf4\x76\x26\x68\xc6\x64\x2d\xa1\x6a\x47\xa5\x26\xb4\xe7\x74\x95\x19\xb7\x10\xdb\x56\x41\x1f\xd6\xd3\x6e\x9e\x7d\x28\x21\xbe\xfd\x44\xcf\x21\xcc\x93\xe5\x64\xa4\x19\x6a\xd6\x4d\x5b\x0b\x65\x4e\x1b\xd6\xea\x62\x3e\x59\x3c\xbd\x56\x1c\xcb\x69\x73\x72\xd1\x80\xa9\x19\x48\x75\x9b\x05\xcc\x9a\x6b\xd6\x89\x66\xbe\xc5\xac\xe5\x2a\x49\x6e\x59\xc6\x52\x2f\x7b\xd0\x7f\xc4\xda\x7a\x72\xad\xbf\x7b\xe8\xe7\xe8\xd4\x33\xad\x83\xce\xe6\xef\x51\x10\x10\xc8\x13\x9a\xc0\xac\x81\x75\x22\x11\x18\x4e\x4a\x3d\x8e\x0a\x4b\x0b\x34\x16\x04\x62\x0e\x67\xa2\xdd\x23\x84\xea\x4a\x0a\xb5\x9a\xd3\x9a\x21\x5d\x85\x1a\x1d\x16\x5f\x2b\x23\x42\x60\xdd\x9e\xbc\x13\xf4\x8e\xf0\x4d\x48\x58\x32\xfc\x36\xbc\xcb\x79\x13\x14\x09\xe2\x1e\x14\xdc\x43\x89\x50\x5d\x8c\xa0\x19\xa2\x15\x81\x12\x9c\x5e\xe7\xfd\x70\xaf\x86\x5c\xfd\x8e\x59\x8d\x94\x45\x21\xd6\xbb\x50\x4c\x91\x3f\xea\x65\x27\xc7\x42\x18\x0a\x2e\xe4\xdc\x29\xef\x4b\xa6\xe6\x46\x96\x13\x72\x7d\x22\x18\x56\x81\x01\x2a\x98\xe8\x58\x92\xc6\xd2\x25\x5c\xbb\xe3\xbe\x05\x85\x41\x89\x82\x57\xda\x89\x76\xa5\xde\x68\xef\x1e\x45\x8d\x7e\xd7\xe8\xb7\x8d\x9f\xee\xfb\x70\xdb\x87\xbb\xe2\xa6\xcd\x89\xf7\x8e\xb6\x6e\x27\xa8\x5f\x4f\xb3\x5c\x65\x37\xc3\x10\x5c\xc2\x08\xba\xd9\xbd\x07\x46\x2e\x3d\x29\xbb\xf9\x74\xb1\x31\xe4\x1e\xba\xe7\x1e\x90\x87\x58\xfe\xd3\x48\xa1\x50\x53\xd5\x8c\x06\x4c\x2c\x88\xe4\x15\x08\x9f\x93\x3d\x17\xc5\x7a\xe0\x92\xb8\x2f\x8e\x36\xfd\xb0\x4a\x06\xd1\xb2\x73\x6b\xed\xb4\x59\x12\x42\xe7\x36\x30\xe6\x0c\x2c\x7d\x64\x55\x17\x13\x5f\x5e\xd8\x07\x86\x5d\xed\xa1\xa5\x30\xd4\x83\xc4\xc0\xb6\x53\x4b\x44\x65\xf1\xed\xc0\xeb\xed\xd6\x7c\x4b\x17\x9b\x2c\xcc\x20\xaa\xcb\xfb\x20\xbb\x02\x04\x44\xf4\x62\x1d\xce\x0c\x1f\x50\x2f\x88\x43\x90\xcb\xdd\x0f\xf3\xf0\xb4\x93\xfd\x02\x4a\x9f\xfb\x4e\xed\x26\x08\xe2\xb0\x77\xb5\x46\xc5\xfa\xd8\x46\x5f\xb3\xaf\xb9\x81\x24\x15\x29\xb2\xf4\x47\x5b\x75\xa1\x5e\x73\x53\x20\xfc\x68\xcf\x3c\x5d\xe7\xc1\xf7\x51\x5f\x16\x1d\xbb\x87\x42\xfd\xf6\xcc\x47\x2e\xba\x37\xcc\xc2\x12\x64\x47\xb5\x6c\x28\x12\x20\xfa\x1e\x74\x06\x73\xea\x01\x90\xa5\x33\x51\x76\xfb\x1b\xd8\x84\x00\xcc\xb0\x89\xdb\xdc\x9c\x8b\x8d\x43\x51\x50\xd0\x49\xdb\x73\xb5\x1e\x04\xbd\x6f\x20\xcc\x29\x95\x39\x6f\xa8\xfb\xa4\xc3\x33\x82\xb2\x40\xd4\x3c\xe9\x4e\x86\x06\xb3\x2f\x07\x56\x94\x69\x67\xa4\x30\x64\x97\x1a\x9a\x86\x99\xc3\xb4\x17\x10\x90\x2d\x41\x68\x30\x33\x45\x05\xe6\x81\xee\x91\x65\xeb\x7e\x57\xc9\xbb\x0d\xa9\xca\x6c\x58\xe6\x0a\x52\x11\xf0\x85\xda\x55\xf2\x11\xbf\x36\x98\x07\x11\x98\x1a\x50\x21\xcc\x08\x9f\x4d\xb1\xee\x99\x42\x0b\x82\x64\x49\x53\x84\xd2\x49\x14\xe3\x2c\xbe\xb6\x9e\x75\x64\x16\xb2\x86\xec\xc4\x91\x61\xea\x11\x95\xd6\xbe\x19\x38\xa2\x2d\x4c\xbb\xf4\x44\x23\x59\x27\xe5\x0c\xa0\x5c\x98\xa8\xaa\x26\x2e\x00\xca\x4f\x29\x07\x05\x0f\x9d\x54\xc6\xa9\x9f\x12\x46\x9a\x94\xc0\xc2\x95\xbd\x0c\x1b\xc4\x73\x04\xf3\x24\x0b\xaa\x7a\x51\xfa\x2b\x65\x2b\x3d\x94\xb6\x37\x09\x36\x66\x5b\x86\xb6\xb9\x94\x1a\x7a\x0e\x3a\x34\x0c\xca\x1a\x0e\xaa\x2d\x9e\x6b\x62\x39\xf8\x06\x44\xed\x90\xb4\x59\x40\xc8\x2e\x69\xaf\xb3\xfa\xbb\x80\x41\x65\x5e\xf6\x39\x20\xb3\x84\x28\xb4\xaa\xee\x48\x3e\xa7\x60\x3e\xed\xbc\x0a\x84\xc3\x06\x8b\x21\x2a\x49\x29\x32\xe5\x16\x33\xfa\xf8\x26\xb6\xe8\xdb\xf3\x84\x6c\x73\xfa\x01\x99\xa2\xbd\x67\xc4\x92\x26\x94\xe4\x86\x8d\x26\xac\x72\x8b\x23\x9a\x0f\x08\x81\x23\x4c\x7f\x6a\x0e\x0b\x57\xe7\xfb\xe4\x09\x66\x1e\x33\x03\x76\x64\x38\x94\xc4\x26\x36\xdb\x50\x2a\x8f\x65\xea\x7d\xc7\xb0\x05\x89\x0b\x3b\x04\x7e\xee\x12\xac\xfb\x0e\x7c\xbb\x81\x80\x75\xb6\x4e\x65\x9f\x1d\xbd\x2f\x41\xf4\xf4\x72\xa0\x2e\x2b\xb3\xe3\x35\x44\x9a\x32\x7a\x6a\x9c\x75\x9f\x54\xa2\x0c\x71\x2c\x99\xff\xcc\xa9\x60\x8c\xc3\xfa\x7b\x74\x1c\x14\x34\xed\xba\x0b\xe9\x41\x0e\x20\xc4\x0e\xd1\x1d\xa9\x20\x4c\x98\xe6\xc2\x76\x1b\x4c\xba\x23\xd8\x66\x63\x4c\xa8\xf9\x37\xa1\x88\x95\xfb\x8e\xd4\x4e\xb3\x51\x19\x73\xb1\x4e\x62\x83\x72\x04\xa2\x93\x24\x05\x60\xb3\x77\x2e\x17\x01\x3e\x3d\x04\x22\x07\x27\x81\x8f\x1f\x32\x21\xd9\x4f\xd2\x17\x65\x78\xa6\x96\x1d\x98\x6e\x25\x8b\xbd\x64\xbd\xec\xee\xfb\x5b\x1f\x1f\x64\x48\x75\xa6\x0d\xf4\x26\x36\x44\x90\x7e\x70\x69\x4f\x60\xb5\x99\x61\x6a\xb5\x19\xc1\x8c\x92\xe2\x64\x67\x38\x9b\x79\x05\x50\x90\x37\x3c\xb2\xcd\x03\x20\x10\x93\x12\xa0\x75\xb3\xc7\x4c\x15\x71\x09\x02\xa9\x9b\xd8\x27\x58\x5d\x9c\xd3\x06\x8b\x83\x0d\x17\xbb\x93\x9a\xcd\x23\x27\x19\x51\x09\xb2\x17\x8c\xd8\x4a\xba\xa1\xec\x78\xdd\x92\x43\xb6\x6f\x6b\x5e\x57\x90\x4c\x30\xa5\x98\x01\xa9\x75\x84\x91\xe7\x0e\x29\x0c\xb2\xf7\xe3\xb5\x23\x08\xb7\xcd\x5a\x28\xbb\xa7\xb2\x90\x1a\x4d\x07\xcd\x5b\x8a\x97\xba\xe4\x24\x59\x63\x9c\xad\x16\x9b\x48\x2b\xe9\x2c\xa1\xe7\xbe\xa3\x6e\x5e\xc2\xf4\x94\xa1\x64\x1b\xa1\x68\x0a\xb4\xc4\xc1\x41\x67\x0d\x74\x4b\x88\x2a\x41\xde\x38\xd8\x8b\x71\x72\x0d\xb1\x93\x52\xa4\x9d\xea\xe9\x82\xfe\x66\x73\x23\xc2\xf9\x1f\x3f\x4a\x97\xd0\x46\xb6\x4e\x22\x5a\x30\xe8\x73\x25\x7d\x5f\x09\x74\xfe\xc7\xe6\xa1\x87\x9b\x40\xfa\x2e\xba\xb6\x5c\x94\xd9\x60\x1b\x99\x4b\x12\x62\xfe\xb8\xfc\x90\x92\x4b\x68\xa5\xec\x83\xf2\xce\xed\xfe\x0d\x49\x0a\x07\xb4\x05\xea\x2c\xc2\x3c\x71\x70\x2c\xcc\xa0\x39\xa1\xc9\x26\xf1\x41\xac\x35\x79\xd6\x60\xb3\x62\xae\x6a\xa1\xdc\xb1\x3c\x28\x0f\xa6\x34\xf0\x9c\x66\xb5\x60\xa2\xcd\x4e\xfd\xb5\x2a\x4d\xf8\x87\x49\x49\x22\x3f\xca\xb6\xb0\x01\x21\x23\x4f\x07\x43\x9a\xd2\x7e\xe7\xe4\xe0\x87\x98\x8f\x3c\x12\xd4\x3b\xa0\x3d\x83\x2e\x24\x21\x59\x53\xc0\x68\x0f\xcc\x01\x37\x97\x4e\x8f\xad\xe1\xbb\x49\x81\x0f\x49\x9d\x77\xf2\x74\x00\x33\x0e\xc5\x58\x09\x79\xb2\x4f\x33\xf1\xbc\x9c\x1d\x7b\x37\xd1\x50\x4a\x87\xa6\xe7\x04\xd1\x0e\x0f\xb4\xb9\xa0\x84\x96\xed\xbe\x66\x4b\x44\x56\x14\x87\x08\x49\x58\x7c\x0d\xb3\x9c\xf4\x30\x6b\x29\x83\xe7\xaf\x34\xa4\x38\x05\x92\xf7\x50\x2a\xb5\x9f\x92\x3e\x7e\x74\x9b\xab\xb2\xe7\x76\xeb\x0c\x6e\x72\x8c\xd3\x0a\x45\x19\x95\x0d\x99\x81\x4a\x2b\x10\xf1\xa9\xec\x58\x92\x46\x98\xe9\xb0\xa9\x3b\xe5\xcb\x1e\xdb\xe4\xbc\x04\x9d\xb3\x8f\x1f\x75\x9a\x41\x90\x80\xa6\x70\x40\x40\x6e\x08\x8c\x47\x31\x0f\x8a\xc1\x63\x2d\xe9\x70\x0f\x5f\x6a\x81\xd2\x59\x31\x2b\x83\x22\xf4\xed\x50\x34\x9d\x56\xeb\xd5\x19\x1c\x59\x39\xb9\x11\x11\xd6\x92\x0c\x63\xfc\x90\x80\xbc\xc5\x2d\x0a\x79\x40\x91\x3c\x70\xa2\x25\xf4\x28\x14\x3b\xcc\x04\xa3\x96\xe5\x85\xe0\x27\x1b\xf8\x83\x0d\x14\x1b\x34\x70\x29\x23\xd9\xb8\x40\xb9\x07\x3a\x46\xd2\xc2\xcc\x23\xa2\x49\xfa\x61\x7e\x48\x3d\x87\x6a\xb9\x6c\x9c\x94\x59\xc0\x14\xa2\xf9\x50\xca\xcc\xb5\x0b\x9f\xcb\xda\x20\x59\x40\xc2\x9d\x22\x97\x58\x7c\x35\x24\x42\x93\x33\x3d\xb9\xb6\x20\x0b\xe0\x40\x4f\xc3\x25\x06\x0c\x3d\x3c\xd3\xde\x71\xfa\x22\x90\x32\xac\x33\x25\x43\x16\xcc\xf9\x02\x4a\xb1\x01\x7b\xa4\x3a\x77\x5d\x26\xc3\x4e\x63\xf3\x40\xbc\x22\xb4\x4a\x9a\xaa\xc6\xca\x61\x81\xed\x09\x8f\x05\x25\x88\x09\x91\x84\xb1\x63\x6e\xcd\x21\x53\x5b\x19\xf9\x18\x9b\x04\x13\x43\xcf\x3d\xc1\xb2\x27\xe7\x9e\x9c\x3d\x9d\xb5\x19\x2c\xee\xc9\x4b\xe7\x00\x53\x3a\x67\xce\x10\x67\x3e\x80\xb7\x2b\xba\x83\x85\x38\xcc\x12\x74\x1c\x35\x87\x3e\x3f\x7e\x54\x49\xa1\x66\xa8\x0c\x83\x90\xcd\x1e\x65\xee\x32\xc1\xdb\x15\xf2\x34\xbb\xae\xa0\xd2\xa0\xaa\xab\xe8\x07\xb1\xd9\x95\x86\xac\x34\x36\x58\x71\x4d\x5f\x26\x21\xf0\x5f\x39\xec\xdf\xba\x13\x76\x46\xc7\xad\x73\xc1\x55\x6f\xc1\xec\x0b\x2d\x5a\x0d\xe1\xff\x6b\x84\x06\x2a\x26\x06\xc0\xa3\xc0\x78\x6b\xfd\x3a\x13\xee\xf3\xa3\x76\xaa\x61\xee\x35\x93\x03\x49\xcc\x76\xb2\x2f\x53\x0b\xf4\x16\xa2\xf9\x5e\x36\x53\xc2\x05\xa2\xe0\x5b\x03\x9a\xc1\x3a\x14\x57\x63\xb3\x19\x2b\x55\xf8\x74\x86\x32\x6d\x8d\x1c\x94\xd9\x28\x88\x7b\x8d\x71\x8d\xe8\xe5\x60\xda\xa4\x7a\x2c\x98\xd1\xfa\x5e\x42\xb5\x06\xb4\x56\xd8\xa1\x17\x1f\x72\x0e\x5d\x36\xbc\xf6\x9e\x43\xef\x10\x65\xcd\xfb\x8a\x9e\xa5\x60\x8e\x95\xb9\xfd\x78\xeb\x9c\xb1\x68\x21\xa5\x01\xdf\x15\xcc\xa3\x28\xd7\x02\xf1\x17\x2e\x8d\x82\x98\xc2\x4a\x8f\x98\x47\xa6\xf6\x25\x68\x02\x6c\xfe\x00\x97\x75\x6f\x1f\x3f\x14\x50\xdd\x99\xf6\x1a\x88\xcb\x20\x9c\x08\xdd\x02\x20\x3e\x49\x1a\x04\x03\x33\xbb\x2f\x44\x65\x8e\xce\x7a\x06\x76\x24\x9d\xab\xb8\x3d\x64\x7a\xcb\xb4\x78\x6c\x6d\xee\x93\x8c\x78\x63\xb7\xd7\x0e\xd6\x95\x8a\x1e\xd6\xb3\xe6\x3b\xf0\x55\x7e\xae\x05\xf8\xcf\x17\xbc\x92\x52\x51\x89\xcc\x82\xa4\xc1\xa0\x89\x48\x3b\x9c\xe2\x09\x65\x39\xcd\xa7\xe8\x42\x4e\xb5\x76\xac\x8d\x93\x1f\xb1\x70\xed\x6b\x6e\x75\xfa\x45\x50\x3d\xd2\xeb\xe7\xcb\x73\x16\x6e\xeb\xba\xeb\x16\x7e\x03\xbf\xfc\xfd\xe2\xe7\xa5\x4f\x93\xf6\xbc\x84\x5d\x3e\xd9\x54\x3a\x77\x64\x69\x12\xab\xa0\xce\xca\x29\xeb\x69\x43\x19\x07\x6e\xf9\x00\x00\x93\x75\xd2\x9a\x92\x0b\xef\x28\xd2\xb0\x14\x87\x71\xd6\xd8\xcc\x6f\x45\xea\x56\x54\xe5\xd0\x5b\x65\x8a\xc3\xe5\xc3\xd1\x68\x1d\x9c\x90\xce\x08\x89\x25\xc4\x35\x93\xb0\x44\x96\xc3\xc5\x9c\x3a\x26\xbe\xe1\x4e\xae\xb7\x2c\x9f\x31\x52\xd6\x05\x04\xd2\xa3\xba\xfc\x8e\xba\x3a\xa0\x2d\xb1\x55\x28\x13\x24\x09\x3d\x42\x40\xcf\x32\xcb\x32\x38\x47\xa6\xaa\x57\x25\x5b\xd3\x21\x36\x65\x79\xad\x68\x65\x19\x13\xbf\x8f\x1c\xe8\xda\x66\x83\x5c\x0e\x70\x62\xa2\xbc\x9c\x3e\x76\x96\x12\xc0\x30\x68\x1e\x24\x0e\xf4\x53\x08\x03\xf3\xb7\x42\xd2\x9b\x95\x74\x28\x81\x44\xb9\x9f\x7d\x54\x26\x74\xea\xc3\x4a\x9f\x50\x68\x81\x88\xa8\x5d\xe1\x5d\x8f\x7d\xae\x73\x78\x45\xee\x36\x66\xb3\x29\x47\xed\xf9\x91\x06\xce\xa4\xc5\x3f\xa2\x3a\xa1\x5c\x7f\x40\xcb\xf2\x8f\x08\x1f\xd8\x81\xc7\xfa\xf9\x69\xef\xa7\x13\xd7\xe5\x32\x28\xf1\x7d\x1f\x77\xf1\x24\x9e\xd3\x5a\xb0\xeb\xc4\xf5\xf3\x71\x5f\x7c\x3c\x29\xf2\x42\x04\xbb\x79\xbe\x00\xd4\x71\x36\x4a\xba\x1c\xf8\xdc\xa7\x84\x96\x8e\xc6\x3e\x65\xe3\xc1\x37\x2e\xae\xbd\x65\xfb\xe2\x79\x78\x5c\x17\xc0\x06\x4a\x1e\x47\xbb\x2b\x6b\xe1\xe0\x2e\x76\x9b\xc3\x7f\xac\x3f\xaf\xe3\x78\xde\xc7\x8f\xe2\xf5\x36\xb0\x33\xa9\xfb\x7e\x8b\x85\xdc\x7f\x4b\x06\x5e\xda\x35\x02\x49\x48\x5b\xb4\x05\x69\x37\x1e\x82\xed\x20\xed\x9a\x75\xa1\xe8\xd3\x0b\x6a\xc1\x15\x03\x63\x79\xac\x8d\x92\xc2\xb1\xdd\x6e\x51\xe4\x3b\x90\xe4\xd7\xc8\x4e\x30\x0e\x4f\x20\x1b\x71\x11\xd0\x60\x76\x6a\x19\x7d\xc7\x7c\xe8\xdf\x01\xc0\x37\x6a\xd1\xba\xde\x52\xca\x07\xe1\x91\x44\x49\x12\x21\x81\x9d\x47\x7c\xdc\xfe\x74\x50\x7c\x38\xdb\xb7\xb1\xc9\x83\xfc\x18\xb0\xe2\xe1\xe4\xfb\xd6\xe3\x01\xe7\x79\x1f\x3f\x6a\x29\x61\xea\xb8\xc5\xc9\xd0\x3b\x52\xfd\x91\x90\x8c\xf8\x09\x93\x31\x0f\x07\x83\xee\xb6\x28\x84\x2f\xe9\x16\xbf\x63\x5b\x7c\x00\x9c\xfe\xc2\xd5\xcd\x23\xc1\x3b\x28\x38\x54\xcb\xf4\x57\x84\x77\x8e\x8a\x5d\x60\x49\xca\x5c\xfc\xd3\x53\x6f\xd4\x0f\x79\x16\x3a\x1a\xb3\x7d\x97\xe8\xad\xb6\x00\x7f\x21\x53\x74\xb5\x73\x9e\x64\x89\x5e\x4f\x29\xe5\xa9\xb0\xa4\xa4\x57\x8b\xe0\x54\x0a\x4d\xdc\x90\xab\x8d\xd2\x5a\xb9\xd9\x96\x6d\x78\x2e\x1b\x49\x63\x1d\x64\xdc\x04\xc9\x02\xca\x7c\xd8\x57\x1d\xd2\x31\xaf\x36\x8d\x3f\x42\x73\xe3\x24\x76\x2b\x5b\x93\xa7\x2f\xda\x1c\xc7\xff\xd4\xea\x3a\xc6\xc7\x0f\x7b\xbc\x30\xb2\x9e\xb4\xa0\xdf\x2b\xbf\xdc\x80\x59\x5b\x15\xc5\x9e\x22\x5b\xc9\xb3\xf5\x48\xd4\xce\x5d\x99\x35\x66\xda\x2e\x37\x3e\x54\x6b\xc1\x53\x6f\xdc\xcf\xa7\x3a\x33\x74\x91\x29\x3a\x3b\x99\xb7\x7a\x41\x1c\xfa\xe6\xbb\x3c\x15\x41\x14\x79\x45\x7a\x4d\xc5\x1d\x7e\x0a\x1d\x69\x7d\x1e\x1d\xc9\xac\xb0\xde\x80\xc0\xf9\xfe\x69\xfe\xce\xb6\xfb\x73\x4d\xe7\x8f\x5d\xca\x9b\x8e\x74\xf9\xcb\x7a\xd2\xf5\xbd\x9c\x40\x79\xaa\x9d\x28\xfa\x8b\x5f\x05\x85\x8f\xf8\x28\x63\xb6\xff\xf9\x26\x7f\xe1\x37\x79\xaa\xf5\x28\xf9\x17\xbf\x09\x88\x7b\xf0\x4d\x40\xee\xf2\x3f\xdf\xe4\x2f\xfb\x26\x4f\xd5\x20\xa5\xbc\xfa\x26\xff\x37\x37\xfc\xf7\xed\x7e\xf9\x1b\x1a\xfe\xa9\x58\xa3\xd4\x97\xd8\xcc\x9c\x43\x99\x19\x51\x90\xcc\x27\x6f\x73\x77\xed\x29\x38\xf3\xb1\xa4\x6b\xcc\x43\x37\x4d\x62\x6d\xd0\xe0\x7d\x6b\x0d\xce\x14\x8f\x98\x5e\xa5\x9e\x58\xec\x9e\x83\x77\x07\x1d\x51\xee\x00\x9d\xee\x29\xa1\x54\xdd\x62\x46\xb0\x52\xf4\x67\x45\x18\x44\x5e\xa8\xa3\xc6\xe4\xb5\x3f\x42\x9d\x37\x27\x3c\x29\xcc\xde\xcf\x5d\x34\xd4\x80\xe3\x00\xb4\xe0\xf9\xef\xda\xe5\xa9\x42\xa2\x3c\xf3\x8d\x25\x2d\x27\xd9\xa9\x33\x3e\xc4\xec\x52\x9e\x60\x7c\x36\xb3\xa7\x48\x3b\xb5\x22\xf9\xd1\x63\x75\x5d\x07\x2d\x61\x1d\x77\x6d\xc5\x8f\x00\xe5\x78\x67\x41\xd2\x28\x2e\xb0\x27\x1e\xbe\x8e\x94\xb8\x29\x0d\xb4\xe6\x76\x7c\x2b\x3b\x6f\x99\x11\x82\x29\xb7\x5a\xca\x5d\xfb\xc6\x7e\x92\x70\x02\xf0\x64\x3f\xe6\xf1\x64\xde\x6a\x5d\x76\x47\x22\xa2\xb4\xe0\xb7\x7e\x7c\xac\x77\x2d\xf6\x54\x9e\x51\xfa\xab\x2a\x4c\xe8\x0a\x4b\x55\x6f\x13\x6b\x4c\xb6\x13\x06\x47\x1e\xe5\x54\xf1\x49\xfe\x08\xf6\x37\xd4\x2c\xda\xcb\x25\xf5\xd7\x84\xe2\xda\x28\xa7\x10\x53\xc2\x79\x0b\x54\xf0\x09\x27\xb0\x5a\xe4\xd4\x02\x22\x5c\xe2\x9b\x7d\xca\xda\x80\x07\x35\xa1\x75\x90\x57\xe6\xa7\xb3\x89\xef\x4f\xf3\xf3\x33\xff\xf4\x6e\xa2\xe3\x72\xa5\x91\x05\xcb\xf8\xdb\xeb\x43\xb5\x71\x36\xbe\xc7\xb2\x02\x58\x90\x6a\x7f\x3a\x0d\x04\x14\x3c\x56\xa4\xc3\xf5\xda\x4a\x62\xb5\x96\x6d\x70\x89\x42\xc9\x8d\x2d\x5f\xf8\x3b\xea\xe4\xcf\xf6\x8d\xec\x02\xef\x20\x30\xe5\x29\xec\x55\xc6\x6b\x39\x15\x94\xa8\xf9\x2b\x01\xf0\xf2\xfc\x59\xf1\xf0\xcf\x5f\x75\xfd\xe1\x79\x97\x5d\xe7\xf9\x7b\xdb\x65\x1e\x3f\xf7\x43\x3b\xae\x5b\xdd\x7b\x02\xbb\xdc\x42\xc3\xfc\xdc\x13\xe0\x5f\xfd\xc9\x6e\xa2\xb5\x5d\xbe\xfc\x8c\xd6\xfa\x9f\x1f\xcb\x4f\xfe\xf8\x61\x23\xcc\x76\xad\x57\xf8\xf4\x92\x3f\xb5\xd1\xe7\x96\xc4\xe9\x63\x7e\xdf\x3b\xb1\xce\x7c\xbb\x33\x51\x7f\xe4\xa7\x9b\x9d\x2d\xf8\xc5\xc7\x7a\x1c\x5e\x9f\xdb\xfd\x17\x16\x98\xa7\x10\x54\x99\x9f\x28\x7b\x75\x0c\x4e\x92\x71\xea\xc0\x4c\xce\x80\xa6\x23\x88\xda\xb8\x49\x2e\x8e\x58\x22\xce\x08\x3b\xaf\xf8\x2b\x8e\x76\x64\x11\x71\x46\x37\xbb\xcc\x15\x2c\x3b\xf7\x6b\x3d\xc0\x91\x3c\xff\x67\x23\x29\x23\x61\x5e\x99\xdb\x01\x95\x60\xd6\xcd\x21\xe4\xa3\xec\xc0\x91\x54\x97\x26\x89\xad\xde\xf2\x78\x57\x89\x5e\x9f\x9d\xe3\x7f\x7b\x90\x24\x49\x5e\x8e\x5c\xc6\xcd\xfe\xd9\x15\x2c\x0e\xa8\x0c\x5c\xdc\x17\xb6\x58\x89\xb2\x34\xc6\x1e\x55\x31\x37\x5f\xad\x91\x6c\x3a\xb8\x4f\x2d\x09\xdf\x80\xf6\xc3\xe7\x96\x59\x75\x76\x19\xa4\xa6\x89\x2c\x1a\x85\x64\x6c\xa8\x09\x40\x70\xab\x3d\xbe\x29\x12\xca\x83\x45\x56\x65\x1c\x94\xe4\x4e\x4b\x2c\xf4\x1f\xfd\x24\x97\x77\xad\xf6\xec\xba\xfe\xfb\xcb\x90\x42\x95\x50\xf3\x5d\x99\xe7\xac\xb0\x3a\x00\x6e\x26\x23\x2a\xb2\x23\x54\x42\x8b\x8a\x4a\xc3\x9b\xd8\x00\xaa\xd9\xec\x11\xa6\xd6\x75\x67\x39\xd8\xfd\xac\xe3\x7e\x31\x94\x2a\xe4\xd0\xab\x9c\xe5\x9d\x28\x2c\x60\x71\x27\xb2\xff\x4c\x0d\xd9\x9e\x6b\x94\x3c\x6f\xa2\xf3\x2a\x79\xee\x66\x94\x0e\x4f\xdc\x01\x32\x8c\x0c\x1e\x8a\xa9\x02\x4f\xc6\x9d\x58\xc3\xf3\xf1\xa3\xeb\x08\x75\xf4\x5b\x4e\x10\x39\xb2\xe1\x97\x88\x73\x62\x16\x3c\xce\x42\x32\x8e\x54\x29\x8d\x44\xc4\x23\x0c\x87\x69\x06\x0f\x64\x2d\xc0\x2a\x57\x03\x85\x7a\x32\xd1\xcd\x73\x43\x59\xc2\x9e\x01\xb8\xb0\x7f\x55\x50\xda\x0b\xdb\x28\xdf\x44\x32\xea\xd6\x58\xda\x90\x60\xc0\xf1\xe2\x2c\x9a\x9c\x88\x55\x37\x09\x52\xf4\xf0\x1f\xfc\x2b\xe9\xb2\x7a\xe0\x49\xe3\x66\x4f\x80\x24\x03\xf2\x79\x29\xb8\x2a\x4d\x0a\x13\xa2\x87\x28\xc1\x12\x25\xeb\x22\xb5\xac\xa4\x1c\x51\x08\xf8\x6c\x89\x01\x59\xeb\x9c\x64\xf2\x6d\xc7\xfa\xc9\xbf\x5f\x8e\xfb\xa1\xe7\xf9\x78\x86\x42\x69\x7a\xf1\x59\xaf\x0a\x38\x05\x4a\x88\xc5\xc5\x79\xc0\x47\x98\xe7\x1f\xf5\x96\xf7\xda\xc3\x08\x63\x52\x73\x26\x6b\xe8\x4c\x14\x55\x14\x4e\x92\xdc\x28\xf5\x90\x9b\x7d\x5b\x2c\xce\x21\xb9\xc8\x54\xfa\xa3\x5e\x63\xa9\x08\xa6\xa5\x6b\x99\xb2\xf7\x02\xc9\x0d\xe4\x91\xdb\xaa\xa6\x98\x48\x9d\x60\x09\xbc\x8f\x54\x87\xac\x39\x7a\xeb\x70\x34\x17\x84\x74\xc7\x03\xc2\xcb\x01\x5e\x13\x66\x05\x70\x39\x80\xb9\xcd\x74\x39\xb0\xf7\x8a\xe3\x71\xb8\xe3\xc1\x78\xc1\x77\xa3\xeb\x39\x04\xf1\x4a\x0d\x6d\xd4\x11\x74\xd6\x5b\x9b\xd9\x73\xce\x05\x05\x4c\x48\x7f\x9f\xf1\x7e\x15\x0a\xdf\xaf\x2d\xdf\xcf\x61\x93\x9b\x86\x06\x69\x7e\x50\x75\xb4\x16\x78\x10\x89\xbc\xec\x22\xb7\xd8\xa6\x7d\xbe\x66\x93\xdf\xf9\xd7\x63\x1d\x69\x33\x58\xef\x7e\x0d\x40\xd2\xbc\x10\x85\x8c\x8b\xe2\x3a\x02\x2c\xd8\x9d\x85\x7b\x49\xc3\x8a\x41\xd1\xbd\x1e\x82\x44\x7c\x94\x64\x23\xfd\x9e\x87\xc4\x71\x88\x83\x67\x70\x65\x9d\xe5\x72\xf0\xc2\xbc\x2e\x6a\x68\x86\x6f\x44\x6e\x3d\xde\xf7\x7c\x1e\x9b\x26\x1a\xaa\xb4\x01\x06\xb0\xb1\x04\x80\x40\x93\x3b\xad\x8c\x26\x86\xb7\xc9\x2c\x9a\xe5\x88\x0a\xaa\xac\x62\x6b\x6b\x42\x5a\xbe\x79\xba\x05\xb9\x6f\x3b\x00\xc5\xac\x39\x1d\xd1\x49\x8c\x32\x33\x9a\x5d\x02\xd8\xba\xa4\xa3\xc0\x05\x65\x61\xb2\x52\x2b\xa3\x5e\x33\x80\xe7\xc8\xad\x21\x19\x5a\x81\x7a\x46\x39\xbc\xe4\x45\xff\xa5\x09\x85\xad\x78\xce\xd2\x3e\x2e\x7f\x75\x87\xfd\xc7\xfa\xeb\x73\x78\xe6\x3f\x5f\x21\xae\xcd\x12\x8f\x66\x8e\x24\xfa\xd2\x8e\x6f\x7d\x80\xb7\x12\xdd\x9a\xc0\x70\x71\x87\xae\xc6\x13\xbb\xba\x60\xb4\xc9\xc9\x2f\x73\xb8\x03\x64\xef\xf8\x58\xec\xbe\x63\x54\x17\x44\x55\x1d\xc7\x08\x3c\x80\xde\xaf\xf2\x4d\x4c\x01\x4f\xf1\x65\x4c\xc1\x4f\x7c\x0e\x2a\xd8\xdf\xbf\x0a\x2a\x5c\x4e\x51\xca\xde\x10\x60\x70\x6b\x0e\x11\x82\xbf\xaf\x19\xda\xe9\xda\xb4\xf4\x57\xbd\xca\xbb\x2e\xf1\x1c\x1d\xfa\xaf\x57\x06\x82\x2d\xa8\x76\xaf\x8d\xee\x72\x4f\xe5\xda\xcd\xf2\x83\xf2\xde\x17\x7f\x17\x6d\x93\x92\x5c\x0e\xe1\x58\xfc\x42\xcc\xbf\xb2\xe8\xa8\x60\xde\x12\x9d\x72\x6d\xe9\xf7\x58\xde\xcb\xaf\xf1\xfe\xb6\x64\xb6\xf8\x14\x86\x33\x0a\x6f\xef\xac\x45\xe4\xb2\x15\xac\x42\xf3\x6b\x3a\xc3\xcb\x13\x9f\xe1\x94\x1d\x0c\xc7\xa1\xa7\x30\x97\xc6\x20\x66\x5a\xf0\xec\x62\xab\xdb\x58\xd6\x3f\x2a\x8e\xfe\xf5\x97\x2a\x53\x9c\x34\x57\xb4\x15\x57\x5a\x6c\x4b\x06\x0e\xf3\x58\x6d\x27\x81\x4c\xf5\xfa\xf9\x53\x26\x8e\xe9\x7b\x97\xb1\x23\x4d\x45\x5b\xe7\x71\xf3\x7e\x84\xaf\xec\x1e\xce\xeb\xd9\x33\x92\x11\x13\xa9\x30\xd9\x39\x05\xc2\x2b\xe4\xe9\x70\xb2\x95\x49\x2e\x89\xfb\x2f\xbe\x8d\xa3\xfc\x20\x9c\x0d\x92\x18\x27\x9e\xc2\xa2\x15\x72\x0d\x43\x0e\x16\x0b\x21\xb7\xd8\x83\x4c\x66\x19\x15\xa4\x50\xb5\x05\x49\x69\x17\x14\xcb\xa0\x08\x06\xe0\xb8\x9c\xf7\x42\x25\x69\x58\x41\x07\xb9\x41\x46\xc1\x15\x22\x2f\x31\x51\x86\x8b\xaa\x6c\xcc\xf5\x4e\xd5\xfa\xfa\xed\xbe\x7f\xb9\xcb\xbf\xf8\xdb\xbd\x19\xd9\x4f\xe1\xc7\x9a\x3e\x69\x38\x22\xa8\x06\x43\x1f\xac\x2a\x9e\xcf\x26\xb4\x82\xa8\x84\x6c\x7f\xdc\xa5\xb9\x66\xe2\xe3\x5f\x8f\xc7\x13\x7e\x4f\xfd\xc2\xcb\x20\x7e\x85\x07\x18\xd9\x58\x27\xd8\x09\x7c\x36\x3e\x04\x9f\xcc\xe6\x49\x02\x7f\x1f\xfe\x7a\xc4\x87\xc3\x7f\xe6\x1c\xbe\x7c\x4f\x8c\x69\x4f\xf5\x3b\x12\x1e\x1f\x3f\x46\x2f\xa1\xa7\xb4\x77\x94\xef\x49\x99\x3e\x13\x28\xfa\x0c\x10\x2e\xc0\x6d\xa8\xa4\x03\x5c\x58\xf9\x7a\x3a\x8d\xe6\xf8\x92\xd0\x2b\x1f\x0e\xfc\x90\xe4\xa7\x46\x9e\x0b\xb5\xd9\xa9\xa4\xd9\x89\x9d\x90\x07\x77\xa5\xc8\xf2\xc6\xb7\x7d\xd8\xbe\x1f\xb2\x03\x3c\xc4\x72\x57\xbf\x8c\x75\xe7\xc7\xeb\xc7\xfb\x7d\x9d\x5b\x2c\x5f\xfd\xf1\xe0\x96\xf3\x91\xfd\x30\x1c\xf5\xf8\x66\x71\xbd\x2f\xa2\xc7\x9d\xa8\x0d\x9f\x82\xe4\xb4\xdc\xef\x5b\xe7\xee\x77\xdd\xf6\x29\x3a\x5c\xe5\x7f\xba\xed\x5f\xd9\x6d\xa9\xa8\x53\xd2\xb8\xf7\xc6\xd6\x40\x05\x07\x76\x9d\xd4\xf6\x19\x9a\x04\x2c\xdb\x7e\xb4\xab\xf5\x02\x0b\x9c\x4b\x50\x4e\x82\x48\xf7\x28\x48\xb0\xc8\x69\x50\xf5\x40\x28\xdd\x9c\xea\xab\x99\xd8\x5e\x58\x29\x1e\x61\x27\x77\x96\x6b\x29\xe2\x68\x66\x8c\x70\x0d\xa0\xff\x0a\xcd\x41\x7d\x17\x11\xaf\x4f\x11\xf1\xaa\xff\xd3\x4b\xfe\xe6\x5e\xa2\xa9\x85\x41\xb6\xd0\xeb\xa8\x65\x1f\x15\xd4\x50\x03\xe4\x9e\x76\x86\x66\x20\xe0\x23\xca\x6b\xf1\xd1\xe9\x07\x79\x81\x21\x3c\xa5\xa2\x67\xdf\x40\x05\x0e\xa2\x28\xd3\xf9\x63\x7d\x62\x21\xd8\xbc\xa0\xf1\xe5\xad\x53\xf3\x14\x43\xaf\xf9\x7f\xba\xc2\xff\xff\xac\x73\x92\x3b\xca\xdf\x23\x35\xc1\x67\xbb\x5c\x3b\x84\x48\xcc\xf6\x2a\x94\x7a\x67\x91\xf7\x5f\xbb\x4e\x3d\x05\xdf\xeb\x5d\x2f\xaf\xa6\x12\xe2\x97\x54\xc4\x2e\x7b\xfe\xcb\xbd\xc5\x27\xde\x9f\xbf\xe0\xc7\x0f\x9b\x8b\xd3\x9e\x43\xad\x28\x64\x4c\xfd\xc8\x29\xcc\x7a\x14\xb0\x2e\x43\x69\xbb\xb7\x03\xc4\x48\xa8\x6f\x6d\x2d\xb4\x74\x40\x87\xae\x3a\x29\x64\x01\x30\xb8\x02\xbf\x5b\x80\xe0\x8b\xf8\xed\x88\xf7\xdd\x71\x9d\x11\x79\x81\x78\xbf\x62\x5c\x37\x89\xb8\x27\x2a\x74\xed\x09\x22\x9f\xe7\x2a\xda\x11\xed\x23\x52\x89\x52\x5c\x64\x87\x98\xce\x6b\x39\xba\x5f\x24\xda\x55\x48\xe8\xc4\x4b\x9b\x8b\x8f\xd0\x25\x3e\x34\x6f\x8f\x61\x48\xf4\x34\x61\x80\x85\xc2\x20\xfc\xed\x78\x38\xe0\x3c\xcb\x2f\xf3\x70\xe5\xf3\x76\x7e\x7f\x7f\x1c\x7f\x3c\x73\xf3\xbb\x4d\x7e\xf6\x01\x59\xf5\xfa\xab\x5f\xf0\xf2\xdb\x9f\xf0\x75\xff\x6a\x4f\xf9\x8e\x5a\x57\xff\x02\xd5\x88\x54\x42\x6f\x53\x78\xa8\xbb\x38\xe2\x63\x99\x06\x33\x4c\x7a\x9b\x79\x4f\x90\x4a\xcf\x1a\x86\x78\xf4\x38\x63\xf4\x14\x04\x19\x80\x7a\xcc\x07\x60\xf1\x7d\xde\x62\xd1\xb9\x01\x0c\x9b\x6e\xd2\xf5\x37\x4f\x76\x72\xf1\xd2\x31\xf0\x87\x6e\x99\x82\x41\x6d\xcf\x13\xb8\x03\x82\x4f\xf4\xcb\xb2\xc9\x56\xd2\x53\xd9\xe4\x4d\x01\x42\x2f\xc0\x2f\xf7\x0e\xf2\x99\x92\x51\xfc\x90\x1b\xff\x76\xd3\xd2\x7e\xf3\x31\xb3\xa2\x6d\x04\x65\xfe\x85\x79\x88\x4e\x0a\xc5\x12\x0a\x71\x41\xc0\xb6\x69\x0e\xfa\xdd\x45\x56\x0b\x0b\xd8\xa5\x80\x5f\xb2\x49\x6e\x30\x44\x8f\x40\x24\x1e\xa1\x02\xa3\x92\x83\x38\x4f\x8c\x8e\xb4\x0f\x44\xb9\x6d\xf2\xab\x69\xaf\x3d\x64\x90\x21\x87\x5c\x76\x10\x85\x51\xaf\xa7\x5f\x8e\x01\xec\xfe\xae\x3d\xf4\x50\x67\xe8\xbb\x80\xff\x54\x7a\xf2\x28\x4a\x67\xf4\x12\x2a\xce\x85\xf4\x4e\xbc\x5b\x94\x34\x36\x8a\x06\x59\x7b\x45\x54\xe8\x03\x5c\xd4\x11\xfe\x35\xcb\x6e\x11\xcf\x2c\x4a\x1a\x64\xb8\xf7\x88\x87\x8b\x92\x47\xa0\x78\x3a\x96\x74\x05\x71\x46\x1a\x41\x1d\x33\xd3\xc1\x13\x14\xa4\x57\xe7\x62\x9f\x33\x50\xea\xd2\xb5\xca\x6c\x9a\xef\xe0\x74\x97\x55\xa5\xbd\xb7\x30\x6b\xe8\x95\x80\x76\xe7\x6e\x6b\xd5\xa3\x99\x48\xe1\x5c\xf6\xae\xa1\x4d\x73\xa2\x43\x7b\x57\x4e\xd2\x9e\x52\x5c\xf5\x95\x7c\xdd\x70\xb3\xe6\xbb\x2f\xda\x50\x07\xa0\xb7\x8a\x51\x8b\xba\x90\x1c\xfa\x04\x66\xd5\x8e\xfb\xf9\xf8\xaa\x03\xa5\x02\x1b\xe4\x4e\x34\x11\x3e\x43\xa2\x52\x05\x02\xff\xd5\x18\xc5\x40\xc9\x28\x39\xee\x7d\x43\xe8\xac\x8a\xee\x79\x10\xd1\x95\xd4\x7e\x5e\xdb\x18\x7b\xb6\x0f\xd2\x24\xa8\x1e\xb9\x84\xda\xb6\x4e\x86\xce\x1a\xb2\x86\x1a\xea\xbc\x95\xf9\xea\x89\x2f\x0f\x03\xb4\xeb\xef\xbe\x22\x8e\x6f\xe0\x0e\xfb\xf9\xf8\x0f\x36\xa9\x4d\x96\x60\x3e\x76\xae\x20\x44\xc0\x28\x45\x0c\x65\x26\x1b\xc9\xa8\x1b\xda\x27\x7a\x77\x9b\x27\xb6\xa8\xa7\x53\xde\xee\x06\x3c\x77\xaa\xa1\x05\x02\xc8\x62\x2b\x47\x77\x9c\x43\xbd\x45\xbe\x23\xc2\x88\x23\xc4\x91\x37\xe6\x55\x13\xa3\x80\x78\xf2\xfe\x10\xe3\x71\x9a\x56\xbd\x5c\x63\x43\x74\x38\x31\xa4\x5a\x50\xc5\x7e\xfa\x30\x1d\xf2\xf0\xd6\xfa\xd6\xf8\xd6\xf2\xcd\x3f\x00\xa1\xc2\xa9\x05\x67\x16\x23\x5f\xd8\xde\xf9\xa2\x36\xdb\x94\x5b\xc9\x2f\x7b\xbe\xda\xe7\x37\x2b\xb7\xec\x59\xec\x0b\xa2\x51\xc8\x52\x81\xa6\xb2\x96\x7a\xd7\xc7\x9f\x12\x4d\xb5\xbf\x0a\xdc\x27\x10\x28\x23\x92\xdc\xfb\x0e\x5c\xa3\x2b\xd9\x49\x11\x72\x23\x90\xba\x4f\x92\xde\x2a\x58\x11\xb0\x10\x0e\xc0\x59\x4f\x62\x20\xf1\x5c\x8e\x75\x68\x64\x54\x28\xf7\x92\x18\x98\x76\x8e\x35\x6f\x99\x4f\x0d\x74\x15\x12\xf3\x80\x89\xa1\x03\x03\x17\x05\x08\x23\x10\x4d\x31\xe4\x0a\x3b\xff\xcb\xe6\xc5\xc8\x24\x75\xc0\xd6\x90\x40\xcf\xf3\x5a\x92\xec\xbc\xf5\x22\x6f\x73\x32\xb7\x5b\x6c\x6d\xa0\x08\x7f\x0c\x30\xdb\x45\x71\xe5\xb9\xe2\xe3\x6e\x8b\xd9\xd6\x9c\x51\x77\xc8\x9e\x90\x4c\xbe\x39\x0b\x20\x68\xf7\xad\x27\x01\x1f\x07\x74\x5e\xb3\x8e\x5f\x80\x41\x67\xd4\x7a\x10\x10\x7e\x20\xe5\xdd\xd6\xb8\x6d\x81\x23\xe4\xe0\x80\xf1\x75\xcb\x56\xa4\x0d\xf2\x69\x40\x7d\x52\x58\x07\x7d\xb9\x26\xc7\x7a\xcf\x74\xab\xd5\x29\xbe\x94\xeb\xeb\x4f\x83\xea\x84\x1b\xc0\x2e\xd9\xa2\xce\xe4\x18\x59\x2a\x4b\x91\xa1\x50\x68\x74\x39\xc1\x49\xa4\x51\xed\xa6\xad\xbd\xde\x04\x30\x76\xb1\x53\xd4\x14\x88\x34\x1f\x7a\x90\xdc\x3d\x83\x3a\x10\xdf\x77\x6e\xb9\xaa\x4d\xc8\x3b\x4b\x0f\xcb\x60\x26\x17\xd4\x09\x27\xfc\xd9\x1a\x6b\x8b\x0d\x44\xc9\x03\xd8\xef\x81\x67\x1c\xbf\x30\xcb\x2d\x02\xd2\x9e\x8f\x4a\x98\x6e\xdf\xaa\x82\x61\x20\x99\xff\xe1\x0b\xcf\xab\xeb\x3c\xd4\xa0\x5e\x8e\xfb\x21\xd7\x9a\xeb\xa6\xd9\x7a\x73\xbb\x09\x66\x88\x96\xf9\x21\xda\x06\x0d\xda\xa4\xd7\xd8\xe6\x07\x07\x46\xda\x81\x64\x82\xca\xc8\xdc\xac\x67\x8c\x6a\xb6\xa4\x48\xe8\xc9\x45\x08\x3a\x32\x94\xb7\xd6\x06\x21\x39\xf1\x8e\xc9\x89\x27\x28\xe7\x6a\x6b\xe1\x62\xcf\x54\xb3\x75\xf9\x15\xf1\x73\xe8\x0d\x36\xcf\x43\x47\xe9\xec\x28\x62\x3f\x32\x28\x4f\x86\xdc\x34\x8d\x6b\xb6\x63\xe9\xa4\xda\x5a\x0e\x32\x77\x29\xb6\x22\xc6\x11\xc6\x1d\x44\x48\xb2\x6c\x1b\x42\xe8\xee\xc5\xfb\x72\x1f\x28\x24\x88\x35\x6f\x11\xb6\x96\x14\xb9\xbe\xa5\x76\x6c\x4f\xc9\xc0\xfa\x52\xef\x4e\x30\x1f\xe6\x46\x72\x78\xc0\x01\x75\x1c\x36\x4a\x7b\xdf\x6a\x57\x7b\x0e\x81\x5a\x23\xd2\xca\xa4\xc4\xa9\x66\x68\xd5\xfa\xbd\xb1\x91\x47\xd9\xe3\xe0\xb4\x4c\xce\x3c\x27\xcb\xbb\x49\xef\x1b\xc1\x61\x25\x5f\x63\x2d\xed\x9b\xe3\xc8\xfe\x28\x33\x80\xc8\x85\x0a\x00\xf8\x17\x7f\xb8\x16\x4d\x5b\x51\x12\x1e\xb6\x01\xaa\x00\x5e\xa5\xdb\x21\x0d\x3d\x0c\xa3\x41\xc8\x48\xd1\x6a\x00\xdb\xac\x4d\x48\x7a\xcb\x40\xf7\x0c\x48\x29\x2c\x7a\xbe\xda\xae\xb3\xce\x55\x65\xd8\xca\x8d\x2f\x08\x14\xe4\x34\x37\xaa\x6c\xb1\xf6\x1c\x3a\x08\x45\x27\xd1\xd0\x29\x87\xaa\xd7\x38\xeb\xfc\x1a\x49\x04\x80\x99\x92\x3f\xa6\x9c\x1c\xbd\x24\xd6\xa6\xb7\x43\x76\x1f\x30\x55\xd4\xc4\x1c\x8e\xcc\x2b\xb1\x36\x7a\x8d\x03\x93\xc3\x37\x57\x2e\x05\xe4\x6b\x63\x27\xb9\x58\x01\xbd\xfa\x31\x20\x08\x69\x26\xf7\x75\xca\x57\xc5\x45\x2c\x11\x20\xd5\x4a\xda\xcc\x2e\x76\x26\xe3\x25\x00\x7a\x7a\x64\xf8\xb0\x03\x29\x34\xf3\x26\xef\xa9\xcb\x47\x22\x3c\x7b\xd0\x2f\x8d\xfe\xda\x84\x30\x3e\xbb\x68\xdf\x32\xc0\xf7\xa4\x9f\x8f\xe0\x40\xa1\xe7\x7f\x08\x21\xad\x60\xe9\xed\x5f\x5e\xc9\xba\xd3\x6f\xa2\xae\xda\x53\x06\xb4\xce\x17\xe3\xa0\x54\x8a\xd1\x22\xc0\x8e\xde\xd8\xef\xbe\x32\x02\x22\x90\x12\x82\x28\x5f\x41\x01\x02\xb5\x72\xcd\xf8\xc7\x10\x2f\x68\xd0\xd6\x37\x02\x88\x6d\x7d\xee\x40\xd3\xf7\x50\xbb\xc3\xe2\x14\x3c\xea\x36\x43\xf5\xb1\x4b\x0f\xa3\x92\xdb\x4a\xf2\x3c\x10\x34\x09\xb5\xec\x23\xc3\x7f\x18\x8e\xe0\xa5\x66\x8c\xdd\x7b\x80\xde\x61\x6c\xd6\xe9\x8a\x0e\x9b\xe3\x87\x04\x48\x0d\x32\xde\x32\x80\x8e\xdd\xc7\xe4\x34\xb8\xe8\xf8\x0f\x5a\x5c\xc8\x73\xed\xc8\x36\xd9\x6e\x1b\xd8\xf3\x02\x8a\x79\x69\xfc\x7e\x48\x55\xc5\x3a\x37\xca\xc3\x40\x79\x27\x85\xee\x1a\x1c\x98\xa9\x58\xf9\xc1\x5c\x95\xe6\xa3\x48\x50\xeb\xcb\x85\xfc\xa9\x47\x01\x44\xd7\xcc\xc2\x04\x81\x88\x01\xca\x30\xae\xe8\x1d\x92\x79\x10\x3f\x75\xd0\xf4\x38\xbc\x48\x65\xda\xd0\x4a\x3d\xc4\x3c\x92\x13\x52\xa3\x4c\x0c\x0f\x61\x53\x3c\x38\x48\xcc\x77\x67\xc1\xf8\x60\x75\x1d\xc3\x89\x2e\x18\x19\x9b\xda\x12\x6f\x7e\xd0\x40\x85\xb4\x7d\x89\x52\x43\x4b\xea\x8c\x55\x3c\xae\xa9\xb3\xc6\x69\xb9\xa0\xfe\xca\xe7\x30\x58\xc6\x36\x33\x27\x1f\x1e\x88\x42\x6c\x48\x99\xd4\xd2\xcd\x48\xda\xe2\x9c\x01\x4f\x30\x41\xb5\x53\x92\x43\x90\xdb\x0c\x64\x4d\x29\xfd\xd3\xe5\x60\x46\x78\x54\xc1\x2e\x67\xcb\x16\x8a\x1c\xc0\x9c\xa4\x23\x98\xf5\xd2\x0e\x58\x12\xf6\x5d\xb1\x9e\xca\x4e\x6f\x37\x17\x97\xc9\x42\xcf\x4c\x7f\xd4\x6b\x9b\x65\x2f\xb6\xc6\xf5\x16\xb4\x6d\xd6\x62\xb9\xcf\xbd\xb6\x50\x90\x74\x14\xf1\x92\x12\x2e\x6b\xb4\xf8\x00\xf5\x66\x09\x5c\xc1\x1a\x8c\x04\x52\xbb\x98\xc7\x07\x32\xb4\x74\x53\xb5\x0e\x5a\xcc\xe3\x90\xec\x95\x89\x7a\xe4\x69\xbd\x75\x07\xd9\x4f\x09\x6a\xef\x01\xce\x19\x70\x1a\xc3\x9c\x29\x98\x07\x13\x43\x30\x4f\x9f\x82\x00\x7c\x45\xc3\x49\xb5\xa6\x2a\x8b\xe0\x82\x0e\xca\x20\xec\x3d\x0c\xf5\x21\x96\xdf\xa5\x07\xda\x73\xee\xf3\x15\x4f\x66\x2b\xcb\x27\x7c\x1d\x4f\x01\x46\x29\xdb\xfc\x6e\x8b\x21\x48\x4c\x8b\xa0\x22\x4e\x52\x07\xaf\x87\x73\xe2\x4d\xe7\x14\x07\x71\xf4\xaf\xf9\x78\x5d\xc6\x0e\xae\x54\x66\x9c\xf3\xaa\x0c\xb1\x35\x7f\x9b\x1a\x72\xc3\x7c\x38\x5b\xd0\x02\xa5\x0e\x95\xce\xa0\x88\xf5\x8f\x2e\x00\xb5\xe7\xf4\xb3\x44\x00\x1d\x37\xf9\x26\x36\x72\xf9\xd6\x0b\x2e\x0c\x1c\x25\x2f\xe1\xcb\xdd\x85\x4f\xa6\xe0\x01\xdf\xb5\xd4\x74\x27\xba\x7f\x77\x81\x0f\x36\x3a\x42\x6c\xa9\xd3\xa8\x87\x75\x88\xf8\x9d\xcb\x90\x15\x84\x34\x34\x59\xc3\xa8\xf5\x3a\x75\xe7\xd1\xdc\x9b\x36\xf7\xd2\x83\x8a\x79\x5e\x6a\x86\x07\xa6\x43\x6b\xdd\xd1\x3d\x58\xd2\x42\xdf\x27\xa2\x2c\x36\x34\x9a\x87\x3b\xa3\x34\xf9\xa3\x5e\x6e\x91\x2d\x18\xdd\x94\x31\xff\xc8\x75\x11\xad\xad\x61\x41\x73\x96\xb8\xf3\x1e\x88\x9b\xd3\xd7\x68\x9f\xeb\x4f\xbb\x93\x3c\x84\x1e\xee\x41\x76\x14\xf3\x71\xf7\x0e\xcb\x0a\x49\xb6\x7a\xab\xa5\x7f\xe5\x1c\x9d\x01\x24\x22\x9d\x1c\x6a\x0b\x18\x3b\x5c\x99\xaf\xf7\x20\x99\x73\xdf\x73\x39\x77\xbd\x19\x47\xcf\xc9\xd8\x93\xcc\x54\x74\x8c\x30\xc6\xdc\xd1\x0a\xc2\x39\x62\x47\xde\xa7\x65\xe6\x7f\x5c\x3c\x8a\x62\x4a\xe5\x74\xbc\xb6\x88\x2c\x52\x9e\xe4\x52\x1f\x6d\xf5\x23\x29\xe9\xa0\xf3\x66\x53\xe9\xd5\xfc\xba\x6f\xdc\xcd\x5b\x49\xb2\x99\x5b\x18\x9a\x0e\x60\xa4\xa8\x6e\x13\x40\xda\xfe\xec\x51\x92\x77\xd2\x09\x23\x51\x4c\xe1\x54\x74\xf3\x8f\xba\x01\xde\x54\x50\xb1\xfb\xc5\xb9\xc7\x4f\xee\xa6\x75\x9c\x26\xd6\xc3\xcc\x27\x0e\x75\x07\x9f\x83\x68\x3f\xd3\x13\x1e\xf5\x18\x14\xbf\xee\x10\xda\x00\x5d\x52\xa2\xf3\x68\x97\x71\xd6\xb5\x58\xc6\x66\x0e\xb2\xf9\x9c\x5b\xa4\xce\x77\xbd\xd6\xba\xd7\xb4\x6a\xfb\x84\x1a\x35\x70\x21\x37\x68\xfe\xe6\x61\xcb\x2d\x69\x77\xcb\xd7\x21\x19\xd1\x99\x43\x37\x6f\x9d\xfc\xcb\xac\xf0\xb5\x59\x01\x34\x47\xab\x32\xc8\xc5\x93\x3c\x2b\xe2\x5b\xb6\x1e\x82\x30\x07\x5a\xd1\x5e\xdc\x0e\x14\x19\xd1\xfd\x4f\x7e\x2f\xde\x0c\x2f\x26\x83\x2b\xbc\x19\x1f\x2d\x85\x5c\x75\x9f\xb6\x2c\xd8\xb2\x6a\x13\x41\x7a\x9c\x82\x34\x90\x80\x93\xba\x2a\xea\xa2\x84\xf4\x28\x37\x2d\xc8\x46\x98\x67\x38\x37\x14\xcf\x88\x98\x93\x46\xaf\x2e\x94\x76\x95\x69\x2b\x61\x0b\x9a\xf3\xad\xa2\x84\xf3\x3b\x3f\xed\xf8\x76\x9a\x02\x4e\xa3\x95\x0d\x05\xda\x55\x99\x42\xc3\x8a\xdd\x83\x53\xb0\x66\xb8\xad\x97\xd7\x13\x9e\x59\x1d\x2b\x4d\x5e\x6c\xc2\x61\xe5\x6b\xa7\x5e\x5d\x4f\xdb\xa8\xc1\xfa\xbb\xcc\x00\x69\x00\xb3\xba\x6e\x53\x36\x30\x6f\x99\xcf\x46\x98\x1f\x96\x04\x9b\xda\x6c\xdd\x44\xd8\xe3\xbc\x6d\xf6\xa5\xc0\xf9\x6c\x06\xd7\xe9\x72\x3a\x8b\xb6\x71\x35\x27\xf2\x06\x85\xb6\xc1\x18\xca\x90\x90\xb3\x99\x60\xd6\x35\xb2\xb0\x87\xf4\x90\xf3\x15\xbe\x29\x70\x81\xc4\x68\x80\x66\x5e\xe9\x9e\xa1\x48\xfe\x72\x8a\x1f\x9c\xde\xf7\x83\xc7\xdd\xda\x3b\x70\x4a\x7b\xce\xd0\x3f\x2b\x53\xce\x9e\xcf\xda\xe8\xee\x45\x9e\x3e\x29\xdf\xb5\x54\x4e\x25\x15\x7b\xe8\x71\x8b\x43\xf4\x93\x7e\x05\xab\x30\x97\xd2\x4a\xae\x9f\x55\x54\x5c\x43\x25\xdf\x06\x50\x5a\xb3\x7f\xb9\x5b\x6f\xbc\xef\xa7\x2c\x4d\x9f\xf9\x5b\xe5\x94\x8f\x1f\x32\x66\x0d\x73\xd6\xad\x43\x54\x44\x76\x8f\xb9\xdb\x77\x5b\x64\x55\x0e\x32\x95\xb4\xf4\xc4\x89\xab\x94\x30\x1c\x75\x00\xab\x18\x0a\xb9\x75\x8c\x8d\x2a\x72\x45\x89\xb0\x90\xe9\x05\x3c\x13\xcc\xcf\x20\x67\xa4\xe3\x25\x66\x79\x8f\x11\x8a\xd9\xae\xf0\x27\x30\x54\x03\x59\xce\x12\xad\x40\xb2\x96\x8d\x9f\x1b\x05\x24\xa0\x77\xb9\xe7\xb2\xf5\x11\xf8\xf4\x88\xef\xd0\x4c\xe7\x13\x5e\xa5\x78\x80\x88\x8f\xb1\xa9\xa2\x7a\x99\xa4\x4f\x5a\x02\x7e\x05\x91\x15\x75\x67\x58\xf2\x86\x12\xed\x3f\xea\xa6\x2a\xc1\x0e\x86\x9a\x2d\x9e\xfa\x2a\x45\x2e\x77\x91\x8e\x41\xe9\x55\x3c\xed\xbb\xde\xf4\x9c\xe4\x7f\x59\xb9\x9c\x8a\x86\x91\x6d\x3e\x1f\x24\xeb\x12\xa0\x4a\x32\x69\x1f\xc1\xb1\x68\x8d\x9a\x6f\x51\x87\x5c\xcd\xaf\x61\xed\x6c\xd2\x90\xfb\x81\xac\x12\x26\xef\x59\x42\x2d\x63\x53\xc0\x43\x9c\x24\xb8\x03\x9b\x92\xe5\x13\xfb\xb5\x80\x72\x5b\xcf\x8f\x34\x82\xd8\x3c\x3a\x4b\xc8\xcd\xbe\x40\x85\xd6\x4e\xfa\xb6\x8c\xf5\x4b\xc5\xfc\xf4\x73\x8f\xd4\x59\xa0\x3a\x9f\x02\xd8\xbe\x14\x35\x18\xe0\xd5\xa4\x46\xdf\xbc\x1c\xe0\x37\xa1\x6f\x02\xd5\x08\xea\xd7\xba\x3a\x9c\xd3\xaa\x26\xb3\xe0\xda\x52\x6a\x96\xc5\xf2\x93\xa1\x29\x57\xfd\x05\x5a\x88\x4c\xfd\x28\xc3\x4e\x52\xfb\xe1\x54\x4f\x9c\x88\xc8\xd2\xa2\xa3\x1d\xf7\xad\x87\xfd\x0f\xa7\xdd\x2f\x66\x5b\xdc\xc0\x5e\xdb\x69\xa7\xf0\x0c\x5c\x06\x0c\x40\xf7\xad\xfb\xde\x78\x3f\x25\xae\xcb\x78\x75\x78\x2b\x89\xb1\x0a\x9b\xc9\x4e\x1e\xa2\xbf\x91\x7d\xe8\x78\x4b\x83\xf4\xae\x3f\x3f\x57\x0f\xbc\x62\x8f\x6a\xa9\x86\x9c\xf2\x52\x83\xab\x3d\x48\x42\x75\x81\x8c\x90\x83\xcd\xdd\xc5\xdc\xa3\x3d\x36\xd2\x0a\x32\xf0\x2e\x0d\xe9\x4b\x2c\x10\x5b\x3c\x09\x29\xad\xa7\xc8\x52\x8f\x66\x15\xac\x3c\x54\x0b\x93\x2b\xd0\x5d\x6f\xb8\x04\x67\x29\x3b\xd7\x02\x56\x17\xd2\x28\x53\x46\xb5\xcb\x34\x03\x68\x87\xc3\x09\xa4\x12\x95\x16\x15\xd5\xb2\x7b\x36\xfb\xbe\x2f\x6a\xe4\xca\xda\x0d\xb3\x10\x88\x34\x22\x83\x35\xd6\x9e\xb4\xe3\x99\xed\xf9\xcb\x56\x73\xe8\x03\xd3\x05\x80\xdc\xc1\xec\xc5\x0c\x2a\x44\x9b\xab\x50\x49\xc0\x58\x77\x61\x6f\x39\xc8\xbf\xce\x05\xc1\x3e\x17\x6a\xce\x09\xe6\x42\xf5\x19\x4a\x47\x90\x61\x3c\x09\x9b\x4b\x03\x87\x2b\x4b\x94\xd4\xdc\xd6\x59\x69\x93\xe4\xef\x5b\xbc\x3c\xb6\xf8\x40\x39\xb9\xd6\xbf\xa3\xc5\x2f\xff\x2d\x4d\xfe\x8f\xb6\x78\x67\x8b\xd7\x95\xfa\x3b\x98\x57\xfa\x85\x56\x5f\xb3\xd0\xe5\xff\xb8\x69\xe8\x4f\xb3\xa4\x7d\x35\x4d\x5d\xfe\x3a\x96\xb4\x57\xb3\xd0\xff\xa3\xcf\x35\x26\x2d\xbd\x52\x32\xcb\x2d\xf4\xdc\x18\xc2\x40\x18\xe4\xbe\xd5\xba\x86\xd6\x75\x5b\x3f\xc1\xd2\x27\x6d\x6c\x50\xd1\x9d\x6d\x8b\x5d\x43\xd7\x2d\x16\xb3\x93\xcb\x48\xdb\xb9\x21\xd3\x4c\xe2\xbc\x45\x1d\x33\xe8\xe8\x1f\x3f\x24\x0b\x99\xff\x71\x39\xbb\x36\x6f\xc0\x2d\xbb\xb4\x5d\x79\xb6\x30\xdb\x86\xc4\x83\xe2\x6a\x76\xb1\x78\x6e\xd8\x65\xed\x9f\x4d\xc1\x89\x3c\xfa\xfd\x51\x1c\x1f\xfe\xae\x75\x9e\x0a\x0b\x9a\xbc\x98\xa3\x3b\xac\x0a\xdd\xb4\x83\x4c\x77\x8b\xda\x67\xd0\x3e\x37\xa4\x25\xc7\xd8\xa0\xe2\x24\x66\xf5\xaf\xe7\x58\x47\xac\x9f\x40\xc7\xa4\x6d\xf4\x60\x4f\x2b\xda\xcd\x67\xb7\x99\xc6\xe6\x90\x5a\xe0\x4d\x56\x5b\xfa\x37\xfb\x53\xa9\x85\xfb\xb0\xa1\xa0\x48\xef\x82\x8b\xd9\x95\x37\xb8\xe7\x14\x76\xb2\xbb\xb2\xb9\xce\xbd\xf1\xbe\x55\x52\x28\x69\x03\xe1\xec\x18\xf7\x25\xf5\x57\x56\xd4\xcb\xbf\xce\x92\xda\x9f\x72\xe4\xed\x15\x1f\x54\x03\xd2\x19\x41\x57\xe8\x32\x93\xd8\x8f\xec\x90\x77\x19\xdb\x15\xb7\x6c\x67\x84\x07\x07\xb6\xb6\xf2\xe2\xfc\xb5\x9e\x3a\xcb\xa0\xd4\xb5\x35\xe7\x7e\x91\xc3\xaf\xcd\x85\x65\xa4\x1a\x2a\x1b\xf7\xe9\xbe\xed\x3c\xe5\xcb\x3b\x1e\xbe\xb5\x6e\x75\xac\x13\xd6\x1d\x20\xd0\x55\xfd\xb5\xfa\x24\xdc\xe7\x54\x9e\xfa\xa3\x86\xda\x2f\x6b\x33\x3e\x00\x87\xf8\xa7\xe3\x71\xfb\xf1\x20\x3f\xf7\x3c\x04\xbf\x7f\xfc\x90\x29\xc3\x5f\x85\xb9\xbd\xb5\xeb\xbc\x1b\x9c\xd4\x3e\x57\xd2\x6e\xdd\xb2\xff\xc9\x1b\x8e\x9a\xd6\x27\x23\x25\x38\xd7\xb7\xc9\x64\xff\x6c\x04\x78\xfe\xf1\x48\x3e\xde\x3d\x6c\xcc\x0c\xdf\xec\x97\x63\xd8\x68\xc0\x4d\x66\x67\x24\xe2\xe1\xcc\x63\x5d\x92\x58\xe3\x94\xca\xfa\x56\x22\xf5\x7e\x43\xbe\x23\x95\x9a\xd7\x0d\x2b\x6f\x68\x97\xf2\xf8\x06\x6f\xd9\xd6\x55\xd7\x5d\xd7\x11\x3b\x1f\xf2\xe1\x32\x9f\xef\x2e\xa9\xd8\xeb\xc2\x2b\x45\x2d\x04\x35\x98\x48\x48\x9d\x59\x70\x9f\x91\x4c\x10\x32\x00\x69\x16\xd0\x8c\xc7\x35\xf7\x2e\xd1\x70\xc0\x58\x2f\xc7\xb9\x79\x3c\x1c\xe0\x27\xed\x76\x8b\x14\x1e\x2e\x7b\x3c\xdc\xcf\xe6\x84\x34\x82\x88\x2c\xf2\x64\xb3\x20\x2a\x32\x09\xe6\x56\x11\x1c\x5c\x51\x74\x62\x06\x05\x94\xa4\x14\xa0\x7c\xca\xf8\xd3\x09\x51\x75\x13\x25\xca\xc8\x77\x29\x7f\xa4\x6f\x59\x28\x17\x14\xe0\x76\x91\x71\x06\x47\x41\xa4\x6f\xfe\x8f\xf4\x50\x41\xf4\x34\xfa\x4f\xcd\xf2\xd0\x28\xfe\xec\xde\x3e\x6c\x33\x74\x79\xd6\x24\x2d\x35\x9a\xfb\x2f\x8f\x07\x1e\xf7\x0b\x9c\x57\x45\x9a\x57\x82\x48\xca\xd7\x3c\xb2\xc7\x5c\x10\x10\xf4\xc8\x2f\x98\x63\xb9\xb9\x0b\xbc\xfe\x8a\xe3\x43\xcc\x99\xa1\x8c\xda\x3c\x99\x02\x10\x3e\x74\x6c\x28\x9d\xa0\xa3\xb3\x5e\xc9\xbc\x73\xba\xe7\x65\x22\xb7\x2d\xb0\x27\x98\x28\x62\x72\x15\x2e\x78\x9f\x50\x5e\x51\x28\x51\xfc\xc1\xa4\xe0\x01\x4d\x1b\xe8\x48\x5e\x90\x22\x07\xeb\x80\x77\x6a\x21\x9f\x2e\x70\x15\x1c\x5c\x3b\xea\x5c\x60\x5a\xf5\x40\x92\x5f\x7b\x24\x7f\xa2\xde\x5d\x08\x56\x06\xd2\x44\xc1\xde\x01\x02\x4b\x54\xc2\x70\xf9\x86\xca\xad\x6b\x6e\x75\x17\x94\xb8\xa4\x90\xab\x59\x45\x80\xeb\x67\xe5\xd8\x57\x85\x16\x98\x42\x3f\x87\x13\xbc\xd4\xfe\x6e\xd9\x7d\xaa\x4b\x68\xf9\x05\x6d\x56\x43\x72\x0d\x54\xc4\x83\x40\x6f\xf3\x86\xf3\x81\x16\xcd\x88\x2a\xda\x1e\xfe\x26\xc7\xda\x9d\xc1\xe8\x9d\xf3\x21\x28\xd8\x50\xc2\xe1\xc1\xb9\xce\x3f\xa4\x23\xae\x63\x3c\x57\x91\x53\x43\xfd\x50\x0a\x2b\x46\xed\x24\xbd\x77\x8a\x52\xf7\xba\xd7\x5f\xc0\xbe\xfb\x70\x28\xb7\xef\xbc\xa6\xf8\x9d\x29\xdf\xf8\x40\x85\x1a\xef\xc7\x7d\xfc\x10\x69\x39\xd4\x5e\x96\x2c\x95\x78\x81\xc0\x85\xda\x04\x2e\x8a\xc6\x5e\x9c\x29\xe7\x41\x85\xfb\x7e\xc4\x26\x4b\xb7\x8a\x33\x14\x30\x90\x59\x98\x48\x45\xed\xa6\x6e\xda\x90\xe6\xeb\x3b\xd2\x0e\x82\x3a\xb0\x5e\x58\xa7\xdd\xb3\x13\xe7\xe7\x3d\x3a\x2b\x19\x82\xd5\x39\x59\xa7\x03\xfd\x7c\xeb\xac\x19\x68\x3d\xa8\x59\x7b\x7e\xb9\xf1\xc5\x09\x39\xe4\xb4\x91\xf9\x7e\x5f\x77\xca\x12\x7a\x3e\xec\xdf\xb2\xf1\x1a\x7d\x83\xa1\xb8\x83\x46\x1f\x52\xab\xd2\xc3\x2c\x17\x2c\xc5\x6a\x2d\x89\x00\xb3\x9c\x6f\x6a\x2f\x8a\xd7\xf7\xb7\xb7\xbd\x54\x02\xa6\x2b\xc4\x50\xb9\x8e\x90\xeb\x51\x34\xa8\x02\x70\xa9\xc8\x04\xe5\xba\x5b\x03\xa1\x51\x45\x0e\x14\x94\x5b\x0f\x6f\xae\x42\x04\xcc\xa5\x16\x2a\xf7\x89\xec\x98\x24\xa5\x97\xe0\xde\x56\x02\x09\xc0\x66\x76\x40\xdd\x33\x72\x7c\xad\xda\x8d\x6a\x0b\x7a\xa0\x3e\x47\x51\x4c\x91\xdf\x05\xb8\xfa\x53\x15\x42\x3b\xe1\x04\x53\x7b\x98\xd4\x6d\x05\xf4\xbd\x3d\xca\x50\xb9\x9a\x5f\xbb\xff\xc2\x6d\xe2\x52\x71\xd0\xc3\xe6\xc3\x11\x8f\x67\x3e\x5c\xd2\x7a\x5c\x91\x50\xc9\x51\x41\x47\x70\x84\xac\x2e\x24\xc4\xea\xfc\x74\x37\x90\x84\xa5\x98\xe0\xe4\x4f\xb6\xea\xd9\xe0\x39\x60\xbc\xe2\x0f\x62\x9e\xe5\x80\x7b\x98\x61\xf2\x06\x61\xe7\xc0\xb7\x4c\xa7\x95\x43\x4d\x99\xc9\x69\xd1\xae\x71\x41\xee\x02\xe1\x4d\x75\xdd\x2e\x4c\x97\xe6\x0b\x8f\x8c\xd8\xb4\x42\xa3\xaf\x6f\x98\x90\x21\x9f\x0d\x34\x11\x21\x45\x02\x4a\x7c\x5e\x64\xfd\x5f\x09\xb8\xe7\xc6\x36\x43\x9c\xbb\xef\xaa\x2e\xbe\x75\x60\x43\x75\xb3\x0b\xc8\x94\x1d\xb1\x75\x1b\x3c\x7e\x45\xf9\xf6\x8c\x19\x70\x35\xfe\x57\x57\x58\xba\xb2\x1a\x04\x57\x4b\x5b\xac\xf6\x17\x64\xc9\xa0\xd2\x55\x43\xeb\x7b\xeb\xa1\x94\x60\xd3\x31\x83\x02\xc8\x0e\x5e\x10\x7e\x54\xff\xf0\x88\xef\x4d\xbb\xcd\x3c\x40\x4d\x33\x2b\x7f\x02\x4b\x31\xf1\x20\xf3\x58\x3f\xd7\x0e\x3f\x90\xe7\x2d\xee\x22\xd1\x74\xe7\x3a\x94\x49\x45\x11\xa8\x56\x70\x2d\xc8\x4b\x65\xe4\x8a\xa3\x4e\xea\x8f\xb3\xa4\xca\x25\xb3\xf0\x87\x15\xa4\xfc\xb6\xfc\xca\xf6\xf3\x0a\x0f\x57\x3e\x1e\x6e\xf9\x6e\x5c\x3c\x65\xf2\xdb\x33\x89\x62\xd7\x93\x44\xb1\xb6\xca\x54\x7e\x43\x5d\x89\x38\xdf\x00\xeb\x83\xc4\xb3\xf8\x34\x21\x7b\x63\x72\x37\xc3\x3e\x1e\xae\xa4\x0d\x83\x1b\xe4\x4d\x14\xc8\x64\xf8\xa0\xb9\x42\x26\xb9\x44\x60\x40\x34\x37\xce\x99\xc9\xe5\x60\x1c\x39\xe0\x0a\x6d\x84\x9c\xdb\x8d\x77\x6a\x05\x59\x2b\x49\x87\x20\x61\x77\x95\x92\xe6\xc7\x8f\xd1\xcc\x1d\x2a\x3b\xe2\x25\x43\x43\xce\x5b\x49\xe6\x97\x8e\x3d\x03\x3a\x91\x7b\x18\xc0\x26\x4c\x8a\x1e\x86\x91\x29\xa3\xe3\xa9\xa0\xb3\x8a\x44\x51\xdf\xbd\x91\x52\x3e\x4b\xe2\x16\xb2\x4a\x76\x99\x6c\xd6\x25\x6a\x4a\x3d\xdd\x43\x1d\x42\x92\x3a\x51\x11\x24\x7b\x85\xa8\x40\xfe\x6c\xd4\xad\x20\xe0\x6d\x8f\x92\x29\x09\x6a\xc3\xfa\x1d\x97\x44\x7f\xca\x16\xb7\xf6\x8a\x4b\xa2\x4c\x04\xad\xcd\xf3\x9f\x35\xb4\xe9\x84\x95\x88\x60\x33\x96\x93\xc9\xee\x22\x0c\x20\x65\x28\x14\xb9\x66\x08\x5d\x9e\xfb\xe2\x87\x45\x0e\xc6\x3d\x84\x3f\x51\x26\x37\x6c\x69\xa0\x1a\x00\x18\xbc\x05\x19\xc8\x46\x69\x02\xd7\xbe\xc8\x0f\x92\x8d\x49\x29\x16\xc7\x0b\x07\x2d\x14\xf8\xd1\x7e\xad\x23\xdf\x22\x44\x6f\x28\xaa\xd3\x9d\x24\xe0\xc4\x25\x81\x50\x1c\x98\x2f\xa5\x70\x8f\xba\xf8\xc3\x9c\x87\xd2\xe0\xac\x25\x5d\xbc\x04\x5c\x4a\x22\xca\xf0\x10\x9b\x09\x4b\x77\x18\x35\x90\x31\xda\x82\x42\xc4\x3a\xb7\xa0\x93\x78\x02\x68\xf9\x24\x09\x5d\x6e\x35\x6d\x15\xcb\xd1\x2d\x96\x8e\x1a\x04\x28\xa3\x31\x9f\x0b\x78\x2d\xc1\x4e\xf8\x74\x3d\x81\xd3\x46\x00\x48\x81\x63\x0d\x65\x3e\xeb\x88\x2a\x05\x85\x14\xb9\xe5\x5d\x0b\x8a\x34\x24\x05\xe7\x7e\xd7\x89\x1c\xce\x2e\xa1\x07\x9b\xaa\x6f\x5a\xf6\x56\x88\x3a\xf9\xa3\x82\xba\x49\x46\x0a\x42\x4c\x1f\x86\x55\x99\x3b\xbd\x0d\x9f\x56\xcc\x06\x83\xba\x8f\x5c\xb6\x08\xa9\xe0\x52\x14\x56\x4c\xce\x2b\x5d\xae\x33\x2d\x85\x46\xed\x65\x2b\x80\xf8\x20\x90\x4a\x36\xaf\x32\x4f\xf5\x86\x46\x5d\xcf\x83\x1c\x40\xc3\x9a\xa1\x40\x84\x65\x13\x0a\xfc\xb8\x18\x5b\xa6\x3a\x16\x18\x52\xa5\x40\xa6\x12\xe6\x33\xf4\x94\x20\xe8\xad\x53\xae\xb1\xbc\x83\x95\xf4\xa7\xfc\x65\x7b\x55\x72\x3f\xcb\x0c\xad\xe4\x93\x38\x8d\x1f\x7f\x89\xab\x81\x54\xf5\x2c\xce\x74\x3a\x09\x72\x65\xb9\xe0\x79\x87\xe0\xb9\x75\xdf\x03\x30\xc6\xe6\x5a\x88\x05\x29\xf2\xd9\x4a\xa8\xa3\x6e\xd9\x3c\xe0\x21\xd0\xde\x1f\xae\x37\x1a\x9b\xeb\x1c\xd5\x53\x61\xe4\xf4\xf1\x45\xa1\x47\xdc\x7d\xee\x73\xbd\x0b\xd4\x0b\x6e\x31\x03\x7a\x34\xd2\xde\x43\x0f\x66\xc7\xe9\x61\x7d\xcf\x45\x4c\x6c\xa9\xd0\x7e\x20\x57\x26\x72\x54\x9a\x3a\x1f\x3f\xa4\x89\x9c\x09\x17\xb6\x72\x82\x7c\x1d\x58\xdb\xa8\x83\x27\xb2\x06\x25\x1f\xc6\x36\xd9\xc5\xc9\xfd\x95\x4f\xf9\x1f\x68\x50\xe2\xc3\x61\xce\x15\xf5\xb2\x1f\xac\xdd\xf4\x5c\x5c\x1c\x0d\x79\x52\x69\xb6\x5e\x46\x6a\x12\x43\x3d\x6b\x8f\x70\x66\x96\xfe\x13\xd3\xc0\x88\x73\x9b\x0d\x0a\xea\xac\xea\xe8\x73\xc1\x18\xa3\xf8\x46\xd7\x20\xc9\xba\x37\x74\x98\x3c\xe7\xb9\x24\x8e\x51\x80\x35\x9d\xe9\x47\x32\xec\x55\xc6\x13\x3a\x83\xf5\x97\x95\x92\xce\xe5\x2e\x29\xa5\x50\xc5\xcc\x01\x8e\xe1\xd4\x80\x91\x66\xad\xef\x5a\x2c\x5b\x9b\x41\x60\x8e\x42\x2e\x53\x2a\x27\x1a\xf4\x66\x9b\x3c\x6c\xa2\xd9\x58\x6d\x44\xe8\x19\x1e\xbe\x04\x41\xc4\x43\x53\x83\x04\x6a\xee\x73\x57\x28\x4d\x32\x5d\xa0\x40\x30\xca\x3c\x98\x56\x70\x1a\x25\x7b\x68\x85\xea\x25\xa7\x03\x71\xa7\x18\x1e\x36\x58\xe3\x92\x1d\xd0\x3b\xd5\xf1\xc6\xb4\xff\x0f\x00\x65\x53\xdf\x04\x0b\xde\xbe\x0a\x40\x91\x24\xb0\x56\x1e\x81\x3a\x34\xc1\x3f\x46\x0d\xad\xed\x5d\x70\xb7\x6c\x0f\xba\x6b\xb2\x39\x22\x43\x77\x29\x4d\xce\x96\xa0\x37\x41\x45\xb5\x67\xed\xdd\xa3\x00\x22\xac\x8c\xd0\xca\x8e\x70\x02\x8a\x6e\x98\x1b\x41\xa9\x63\x77\x10\xf8\xe6\xfe\xef\x5d\x68\x11\x95\xa8\x58\xaf\x42\x65\x59\x0b\xd3\xf2\x5b\xed\xf6\x10\x00\x02\x29\xd2\x32\x52\x92\xf5\x58\x97\xf7\x48\xd0\xd0\xa4\x0e\x6f\xb6\x3e\xca\xc9\x4c\xab\x75\x1c\xf3\x5e\xa9\x74\x94\xad\x83\xe7\xb5\x85\xc3\x2f\x3c\x20\xfa\x11\x3c\x2f\xe2\x44\x57\xf5\x15\x39\xee\x5b\x0f\xfb\x1f\x4e\x3b\xaf\x76\x9c\x77\xb8\xdf\xf5\xfe\x28\xeb\xf1\x7e\x2f\x10\xfb\xf7\xc5\x61\x2f\xbf\x1d\x88\x7d\xca\xd5\xb7\xf1\x52\x19\x27\x33\x75\xa2\xb6\x28\x86\x82\x8a\x5e\x4d\xbb\x66\xf2\xde\x85\xcc\x42\x55\xdd\x62\x2f\xcc\x49\x49\x43\xe2\x9a\xfc\x71\x1c\x82\x83\xa6\x2f\xfa\x76\x6f\xa1\x28\x13\xe5\x52\xa7\xb5\x65\x40\x3a\xea\xc8\x23\x43\x99\x16\xda\xc2\x41\x24\xcb\x96\x33\x68\xf4\xf2\xce\xd1\x66\x2e\xa7\xbd\xac\xf4\x43\x27\xe2\x57\x5b\xd4\x8c\x69\xdb\xd5\xfd\x32\x35\x55\x82\x63\x8c\x14\xba\x4b\xd9\x2c\x01\x08\x0c\x17\x59\x73\x7a\x07\xd9\x33\xc9\x9c\x7a\xd6\x30\x9b\x5e\xf6\x8a\xe1\x9d\x02\x11\x30\xd9\x15\x5a\xdd\xd6\x41\x9e\x09\x5e\xbe\x1e\x4c\x59\x2a\x32\xf5\x7c\x02\xc4\x25\xca\x24\x92\x0a\x06\x5a\xd3\xbc\x23\xb4\x21\xac\x0e\xd7\x99\xee\xb4\x00\xda\x4f\xd9\x98\x69\xeb\x2e\x62\x84\xce\xb3\x87\x82\x5f\x56\xa9\x39\xd5\xdf\xa7\x5f\x1e\x8f\xf2\x5f\xbc\x44\x78\x9c\x24\x7e\x0f\x9b\xf7\x23\xde\x75\x8c\xa7\xa4\x77\x9b\xaf\x96\xd4\x94\xbd\xd2\x5e\x51\xea\x1e\x6b\x62\xe6\x8d\xa3\x14\x68\xa7\x0c\x3d\xc9\x58\xd9\x0a\xb1\xf5\x90\x93\x1c\xda\x42\xce\x27\x29\x97\xe8\x21\x7d\x06\x25\x7c\x15\x9f\x17\x40\x15\x9b\x21\xda\xe0\xdc\x08\x08\x6d\xfd\xa3\xee\x45\xcd\xd6\x15\x56\xb3\xe5\xe1\x09\xc2\x3a\x41\x6a\x41\x64\x05\x95\xb2\x84\x4a\xb5\xb4\x53\xc5\x06\x2d\xf4\x36\x07\xcc\x15\xcf\xef\x36\x17\x35\x86\x86\x98\x67\x61\xf3\x4e\x44\xc5\x3c\x4b\x11\x1d\xc1\xd5\x2b\xcb\xcc\x50\x5b\xef\xea\x9c\xe3\x1e\xa2\xcf\x2e\xe9\x83\x21\x88\x29\x5a\xc6\xdc\x60\xef\x60\x49\x1c\x28\x32\x8e\xf7\x60\x32\x04\xc4\xda\x29\xa1\x53\x18\x60\x0e\xd1\xcc\xba\x2a\x61\x86\x39\x58\x51\x06\x7f\xa0\xd4\x03\x80\x18\x5b\x46\xf6\x66\xc6\x54\xa0\xf6\x57\xce\x87\x4b\x83\xd1\xf4\x56\x88\x8c\xf9\x72\xeb\x6b\xd0\x42\xc6\xf9\x32\xe3\xa9\xee\x33\x0a\x11\x85\x66\xea\x5c\xe0\x82\x93\xef\x52\x29\xa2\xad\x90\x19\x37\x0b\xc0\x6c\x63\x36\x20\xd5\x40\x59\xbb\xdf\x0e\xa9\xf8\x0c\x66\xa1\x0c\x0c\x61\x62\x15\x24\x95\xbd\xe4\x80\x9a\xe2\x20\x53\xcf\x22\x05\x61\x87\x45\x19\x9e\x68\xdd\x07\xab\xeb\xc0\x15\xd1\x29\xe9\xee\xf1\x0e\xfb\x1c\x42\xd4\x15\xfc\xaa\xbc\x9e\x4a\x01\x25\x41\x49\x72\x28\x90\x22\xa4\xc0\x12\x62\x0d\x68\x26\x0d\x0c\x73\x94\xfb\x6a\x20\x5e\x57\x99\x6d\x92\x1e\x8c\xc3\xda\x58\xee\x8f\x2f\xcd\xc1\x56\xde\x6b\x8c\x8d\xe7\xfc\xec\xab\x32\x76\x29\x36\x95\xe6\x84\xe2\xe5\xea\x31\x68\x40\xb1\xd2\x3d\xea\x6b\xb3\x5a\x87\x10\x12\xec\xb7\xb4\x23\x92\x8d\x5c\xa9\xb8\xec\xeb\x12\xcd\x8b\xda\xda\x2d\x16\xdd\x0b\x25\x42\xcf\x3f\x1e\xf7\x43\x77\x32\x95\x69\x0f\xeb\x82\x87\xdf\x62\x17\x94\x5e\xdf\x1f\x00\xd1\xd4\x34\x82\xfb\xcc\x51\x20\xb7\x46\x43\xaa\x25\x68\x62\xb1\x52\x1e\xac\x9d\x14\x44\x34\xd7\x53\x31\xcb\x9a\x63\x77\xa0\x0a\x18\xce\x91\x8d\xf4\x3c\xc1\xcb\x37\x34\xbc\x5c\xd1\xae\x79\x67\xc2\x23\x64\x75\xa2\x5b\xe4\xd2\x58\x7b\xd1\xfa\x63\x19\x11\x96\xda\xa9\x8c\xd7\x67\x5a\xd6\x4a\xcd\x49\x27\x07\x2e\x54\xf5\x54\x85\xbc\x27\xe9\x47\x40\x1e\x50\xc3\x28\xbb\x54\xe8\xde\x2b\xa2\xf3\x9a\x33\x55\xe7\x4b\xc2\x92\x60\x7d\x05\xc0\x90\x62\xe6\x44\x0e\x9a\x0b\x62\x23\x23\x07\xad\x25\x8c\xbc\x22\x25\x08\x6b\xd5\x1d\xb2\xf9\x36\x71\x2b\x15\x02\x75\x56\xc7\x42\xe7\x26\x1f\x97\x37\x7d\xe7\x39\x7b\xfd\xef\xaf\xfa\x8e\x35\x40\x9d\x88\x8c\x20\x5f\x01\xbb\xfe\x1a\x45\x48\xd2\x8c\x05\xd3\x47\x2b\xf8\xa0\x95\x71\x6d\xcc\xbf\x2c\xca\x87\x1e\x58\xb9\xe7\xef\x04\x3a\xee\x05\x45\xac\xcd\xb9\x66\x97\x65\x04\x1e\xd6\xe6\xd6\x1e\x01\xc7\xea\x62\xf8\x3b\xc2\xf0\xe8\xba\xcd\xda\x24\x2a\xd1\xc3\x30\x23\xe1\x24\xd8\x8a\xe0\xad\x9e\x7b\xd0\x76\x66\x90\x6c\xd5\xab\xbb\xf4\x00\xba\x9c\x19\x54\xe7\x6e\x16\x7f\x6e\x29\x94\x5e\x43\x4b\x28\x2d\x19\x8e\x14\x2f\xf6\x41\x72\x2d\x3b\xe4\x4c\x4b\x50\xce\x84\x80\xdf\x55\x08\xa7\x0a\xca\xf2\x21\x45\x8d\xa9\x7f\x87\xc1\x66\xce\x9a\xf9\xb0\xd2\xdd\x27\x46\x59\x4d\xa6\xc2\x21\x03\xf2\xed\xae\xa1\xa8\x8c\x1f\x9e\x59\xcb\xce\x1a\x15\xb2\x3c\x5b\xe7\xe5\x9c\x3e\xcd\x52\xed\xaa\x41\x14\x06\xbf\x87\x38\x05\xc1\xd4\xdc\xa1\x3c\xba\xa8\xa9\x2b\x18\x36\x77\x8c\xa8\xd2\x83\xaa\x2f\x39\x72\x1a\x92\xa4\x0c\xdc\xa1\x0a\x5b\x43\x95\xa0\xd2\x3e\x2e\x28\xb5\x46\xf1\xec\x68\x3e\x9a\x1d\x12\xc6\x38\x50\x81\xcb\x8f\x54\xa6\x36\x36\xbe\xa8\xc2\x11\x71\x82\xdd\x81\xc4\x0a\x8a\x7e\xcc\xb7\x46\x31\x55\x42\x37\xb0\xc1\xaa\x1f\x3f\x5a\xb6\xd1\x58\xaf\x5d\x07\x58\x2f\xa8\xdd\x6d\x7d\x1d\xb1\x18\x09\x13\xce\x0d\x6b\x1d\xa9\x29\x3a\xef\x61\x6c\xcd\xfd\xdd\x94\xf8\x9c\xe5\xff\x8f\x57\xa8\x55\xeb\xd6\x3a\xc6\x8a\x53\x7e\x47\xdd\xda\xc0\x18\xf4\x82\xba\x75\x05\x4c\xbf\x65\x6e\x4d\xdf\x13\xd8\x42\xa7\x0d\xcc\xf4\xf3\x95\x28\x4e\xcf\xae\x49\x90\xeb\xef\x30\x34\x01\xf8\xf9\x73\xf1\xe8\xe5\x0b\xe6\xa7\x5c\x95\x9a\x03\x3d\xff\xae\xf8\x8e\xbd\xde\x9f\x20\x97\x1d\xcf\xa9\xbc\x97\x55\xbb\x99\x64\x5d\x57\x99\x7d\x07\x12\x1a\x88\x53\xc4\x53\xac\xfb\xb3\x84\x80\x4a\x38\x22\x95\x39\x2a\x16\xbe\x2d\x4b\x24\x1d\x2e\xa6\x9a\xf5\xa0\x66\x6f\x3b\x88\x98\xb7\xae\x0d\xfc\x2a\x78\xd2\x07\x05\x8e\xf3\x60\x64\x53\x29\xc6\x2a\xe6\xcc\x82\xaf\xbd\xd7\xab\x2d\x3a\x27\xee\x4f\x43\x2e\xa0\xa8\x1b\x7a\x93\x4c\x0d\x1c\x33\x9f\x6c\x75\xc2\x4e\xa0\xf9\xa9\xd0\x78\xb5\x15\x18\xe7\x21\x32\x5b\x8e\x5c\x08\x07\xf7\x13\x41\x27\xc0\xbf\x1d\x0c\xde\x96\xcb\x35\x4a\x1f\xbb\x42\xcb\x3b\x05\x99\x2d\xd4\x86\xba\x70\x78\xd2\x14\x3a\xc6\x0c\xa4\x3c\x2d\x43\x9d\xf7\x88\xf4\x23\x08\x55\x60\x08\xd0\x49\xec\x35\x7b\x20\x0a\x0b\xce\x1e\xb3\x02\x63\x5a\x73\x68\xe2\x62\xbe\xa2\xd3\x49\x97\xb4\x0e\x84\x8a\xe1\x1e\x93\xb3\xad\xe5\x03\xa1\x09\xc9\xd3\x7a\x4f\xef\xbb\x02\x6c\x06\xe3\xac\xe7\x43\x12\x12\x49\x75\x2f\x76\x21\x84\xa6\x03\x8c\x4d\x34\xe3\x01\x85\xe1\x8a\x84\x5a\x19\x8e\x5b\x37\x3b\x76\x2b\x66\x71\xa7\x74\x01\x7a\x53\x08\xa9\x49\xa8\xfa\x7a\xd3\x95\x9e\xf3\x63\xff\xf5\xc0\xf2\x26\xac\xb8\xb4\x75\x93\x51\x18\xfe\xa3\x5c\x73\x90\xf4\x2e\xec\x4e\x00\x17\x43\x98\x13\x19\x02\xfc\x4e\x9d\xce\x11\x9a\x9f\xc2\x33\x24\x07\x06\xa4\xba\xb7\x50\xb1\xb9\x3a\x83\x62\x42\xc6\xdc\x23\x78\x2d\xac\x1b\x34\xeb\x4d\x03\xe4\xad\x0a\xc5\x6e\x09\x36\x33\xef\x02\x52\xee\xc0\xe0\xd3\xdc\x21\x78\xa1\xc5\xbb\x98\xb6\xdd\x66\xcd\x39\xb8\xde\x8b\x0d\x7a\x60\x48\x5b\x30\x0f\x36\x42\x76\x0a\x53\x4a\xb7\xde\x00\x77\xb6\x56\xe4\x8c\xa4\xea\xd6\x42\xbb\xec\xd0\x7a\x0f\x5a\x83\xed\x0e\x31\xc3\x3b\x55\xdd\x41\x44\xd0\xa1\xdb\x54\xc7\xc7\x8f\xa9\x33\xb4\x54\x36\xd2\x6a\xb5\x8d\x51\x90\x1d\x72\x06\x90\x1a\x40\xf0\x16\xd1\x2d\x02\x37\x23\x62\xb0\x44\xb7\xcd\x20\x69\x8b\x4d\x43\x93\x75\x81\xdd\x05\xd8\xe1\xc9\x40\xe7\x83\xa9\x5c\x69\x5b\x54\xc8\x11\x0c\xc6\x8d\x06\xe1\xa0\x3d\xa0\x1c\xbe\xb5\x60\x9d\xda\x7e\x50\xe0\xde\xfe\x2b\xd6\x89\x50\xef\x11\xec\x0a\x63\x6f\x8c\x5f\xc5\xba\xb5\xca\xa7\x05\x3d\x90\x1d\xd2\x01\x62\x94\x7c\xd9\x91\x5d\xb4\x39\x2a\xc4\x52\x3e\x28\x00\x42\xc0\x9c\x83\xf4\xec\x53\x40\xf3\x04\xae\x48\x5d\xd3\xc8\x20\x8b\x00\xfe\x67\xb6\x5f\xcd\x3e\x57\x9c\xc2\x0d\xc8\xb1\x82\xdb\xbe\x21\xa1\x00\x75\x7a\x50\xdc\xa3\x3a\x1e\x4d\x6c\xc6\x46\x82\x00\xf9\xb4\x61\x55\x72\x28\xc5\x3e\xaf\xb4\x00\x9c\xb4\xee\x99\xb6\xde\x84\x2f\xd7\xaf\x72\xcb\x79\xde\x74\xb7\x05\xbd\x01\x66\xa0\x59\x01\x7e\x86\x44\x29\x04\xd8\xf3\xce\xda\x59\x25\x79\x90\x8d\x31\x52\x62\xba\xa6\x6a\x0f\x4b\xc1\x5d\x2b\x78\xee\x97\x6c\x34\xfc\xdf\xc4\xf0\x29\x8c\xa3\x81\x86\x11\x1b\xeb\xbb\x34\x5b\xfe\x4b\x09\x25\x6f\x82\x8a\x64\xfc\x8b\xd7\x68\x08\x1e\xe6\x5d\x12\x43\xfb\x8d\xaa\xc8\xdd\xe9\x8b\x81\x86\x13\x06\xd3\xba\xec\xb1\x0b\xa4\xe6\x6d\x3c\x74\x21\xc1\x1e\x82\xa2\x03\x60\x68\x8c\x2e\x14\x69\x22\x7e\x9d\x6e\xb1\x20\xca\x97\xe0\x96\x6b\x41\xf9\xe6\x3e\x49\xe0\xb2\x68\xf7\x40\x87\x9c\xa9\x31\x0b\xdf\xde\xfc\x56\x1a\x1a\xb0\xed\x11\xee\x28\x02\xf0\x14\xf8\x5c\xc0\xe9\x92\xcd\xdb\x83\xc4\x3e\xb9\x1c\x32\x2a\x70\x9c\x3d\x04\xff\x9b\xf9\x3e\xfa\x06\x6f\x95\x38\x8d\xc5\x88\xe5\x72\x01\xf7\x9a\x76\x5b\x39\x32\x93\x43\xc1\x69\x6f\x18\xb5\xae\x0e\x64\xb9\x35\x2a\x06\xd7\x70\x62\x5b\x58\x70\x27\xf2\x47\xbd\x8e\xde\x69\x20\x5a\x53\x56\x5f\x94\x6a\xbd\xc6\x21\x72\x8b\x65\xe4\x2b\xa8\x15\x30\x77\x68\x00\xa3\xf3\xc0\x77\x49\xd3\x26\x06\xcd\x12\x4a\x83\x29\x67\xc6\x03\xfa\xe1\xe5\x58\x5d\x73\xb7\xd5\x69\x48\x38\x3b\x2f\xa6\x12\xd1\xc0\xfe\x3d\xa1\x08\x61\xfe\x95\x8e\x1d\x29\x81\x49\x6c\x61\x5d\x20\x43\xc6\x11\x54\x90\x7d\xc0\xff\x48\x60\x35\xeb\xb8\x54\x44\xee\x44\x58\x22\xc4\x97\x7a\x90\x0c\xa3\xcf\x27\x33\xce\x3c\x67\x71\x52\x53\xce\x14\x28\x70\x67\x2e\x83\xe5\x41\x8c\x7c\xe4\x61\xfd\x1b\xc3\xda\xa6\xc1\x9c\x42\xed\x41\xe7\x0c\xb5\xef\x02\x4b\x39\x13\x54\xbb\x93\xb3\x71\x04\xa5\xe6\xfe\x3b\x18\xea\x78\x4a\x02\xf7\xf4\xca\x8e\xa8\x55\x42\x4b\xe6\xd9\xb7\xa0\x2d\x98\x1d\x43\xe9\xe6\x03\x53\x56\x76\xde\x48\xa2\x77\x0a\x04\x4d\xb0\x80\xa2\xd9\xcc\x2b\x05\x2c\xaf\x97\x03\x45\x45\xb1\x42\x3b\xc5\x7d\x9f\x47\x35\x8c\x6c\x73\x16\xeb\xa7\x58\x49\x25\x88\x06\x8a\x39\x78\x30\xac\x83\x24\xa4\xcb\x11\xb2\xd8\xfd\xfb\x24\x76\x30\x94\xd4\x8f\xd0\xc9\x3d\xa9\xce\x75\x89\x2a\x32\x14\x0a\x4b\x0f\x39\xe1\x1b\xb5\x3d\x23\x94\x60\xe3\x73\x4e\x40\xca\x65\x82\xb3\x2e\x4f\x18\xf8\x66\xd9\xf7\x8a\xf5\x94\xb5\xfd\x2d\xe8\x9d\x4b\xd1\x81\x05\x09\x5c\xcd\xb0\x3b\xa0\x67\x81\xb5\xc8\x67\xfd\xc2\xbe\x31\x8f\x14\xb4\xd8\xba\x50\xcc\x0f\x82\x8d\x20\xae\xb3\xe3\x81\xb6\xd0\x5d\x15\x88\xb2\x23\xda\xa1\xc1\x0e\x63\x17\xa3\xa9\x86\x45\x72\x14\xdd\x4c\xc9\x2b\x59\x02\x78\x4a\x5c\xe3\x90\xb9\x91\x10\x65\xd9\x6e\x87\xad\x43\xc0\x56\x57\xf0\x88\xe0\x72\x14\x89\x01\x2f\xca\x16\x85\x23\x15\x1d\xac\xf4\x50\x12\x95\xa9\xd3\xc5\x86\x45\x0f\x36\xb0\xe4\xe8\x20\xb9\xc3\xc0\x28\xa1\x41\xb2\x86\x00\x29\x27\x13\xc3\x12\x3b\x9c\x49\xa8\xb4\x83\xd5\x5e\x1b\x4d\x86\x2d\xc2\x49\x57\x97\x66\x62\xb4\x08\xd8\xec\xc3\xba\x6b\x1d\xac\xe5\xb0\xee\x0d\x4c\x84\x00\xf9\x61\x43\x06\xd0\x4d\xfb\x36\xfd\x6c\x6c\x14\xc1\xe0\xae\xf9\x64\xa3\xd2\xbb\xff\x74\x72\xd0\xb3\x8a\x6c\x64\x58\xdc\x5c\x46\x15\x93\xef\x80\x81\x21\xb5\x60\x46\x96\x3b\x1b\xed\xc8\x07\x85\xed\x6b\xbf\x1c\x36\xce\x10\xc7\x63\x50\x06\x31\x43\x44\x1d\x6c\xea\x22\x44\xa4\x61\x0e\x08\x66\x55\xe7\x02\x98\xac\xcd\x37\xf5\x4c\x6b\x35\xff\x00\x0c\x64\x89\x92\xcf\x85\xe0\x60\x1a\xdc\x0c\x53\x7b\xd5\xfa\x2c\x81\x97\x05\x8c\x4f\x64\x9a\xd5\x07\x77\x21\x8d\x30\x11\x22\x3b\xa5\xbc\xc9\x11\x8d\x5e\x4d\xd6\x42\x90\xce\x2c\xf2\x58\x14\x73\x21\x2a\x89\x82\x50\x92\x5c\x38\x4b\x14\x4a\x35\xc6\xfc\xf8\xd1\x10\x99\xe8\xee\xb6\x76\x86\xc2\x2f\x7b\xe3\xd8\x45\xc2\x57\x75\xb7\xc6\x42\x59\xa2\x39\xd0\x3b\xcc\x0a\x33\x2e\x24\xc9\x4d\x9a\xee\xf8\x38\x18\x56\xc2\x37\x74\x5e\xdf\xcc\xf0\x77\xf7\xd4\x09\x1d\x69\x29\xef\x43\x73\x4f\xb5\x0e\x5d\x5e\x4e\x49\xc8\xa7\x8e\xf4\x85\x68\xcb\x6b\x61\x18\xe7\xa5\xf8\x55\x61\x18\xd1\x41\xfd\xf3\x27\x27\xae\x95\x6f\xf4\x53\x5d\x0a\xf1\xf7\xcf\x22\x3f\xb8\x59\xb3\xd4\x49\xd1\x31\x9e\x05\x54\x2f\x5f\x08\xb4\x7f\x2d\xcd\xfa\x49\x2d\xff\x14\x66\xa5\x9a\xdf\x8b\x1b\xfc\xc3\xd7\xc7\xb7\x89\x0f\x5a\x93\x54\x23\x84\xb0\x64\x49\xae\x07\x58\xca\xb8\xda\xb4\xf0\xeb\x7e\xb9\x6a\xb9\x9c\x64\xa8\xcf\xbb\xdb\x57\x90\x4f\x08\x88\x62\xf6\xf9\x05\xda\x68\xd5\xe2\xac\x9b\x9f\xa5\x4e\xbe\x7a\x48\x7d\xcb\xa8\x3e\x9e\xea\x1d\xba\xbe\xea\xd0\xf6\xd9\x8b\xb4\xef\xdf\xbf\xf6\xf6\x4b\xaf\x61\xc7\xfd\xfc\xc0\x24\x05\x20\x21\xbd\x7d\x8d\x9f\x3f\x0c\x75\x39\x25\x8d\xf1\x5b\xdf\xfa\x97\x7b\xd0\x62\xcc\x78\xbe\xc1\xe5\xaf\xbb\x43\x6b\x05\x2c\xbe\xff\x27\x8d\xff\xcb\xcf\x13\xc0\xef\x8b\x50\x8d\xa7\xf4\x70\xcf\x2f\x3b\x9a\x2d\xb4\x55\x00\x92\x8f\x05\x96\x2b\x71\xff\x68\x75\x6b\x50\x82\xe1\x99\x0e\x33\x7b\x0d\xce\x39\xf1\xed\xeb\xe3\xa8\xda\x61\xa5\x05\x5e\x00\x97\x50\xc5\x97\xd8\x58\xfe\xe0\xe8\x7b\x19\xe3\x01\x1d\x9f\xed\x08\xdd\x78\x9e\x9d\x66\xd7\xe1\x27\xdd\xfc\x56\x63\xe3\xcd\xc1\xc9\x31\xf9\x81\xf1\x6c\x9b\x3f\x2f\xee\x35\x49\x64\x80\x07\x3a\x9f\x72\x9c\xd7\xd8\xe7\x02\x63\x5b\x17\xc6\xc1\x1e\xad\xfd\x57\x1c\x03\x7f\xd7\x10\xb8\xfc\x9f\xb9\x06\xfe\x89\x21\xf0\x94\x08\xef\xe5\x65\x5c\x34\xe5\x50\xbb\x6e\xd1\xbe\x38\xc8\xa3\x7e\xee\xde\x18\x05\x3a\x06\xd0\x1b\xbf\xd6\x7f\x95\xf2\xd8\x69\x2b\x60\x04\x2c\xbf\xdc\x7f\xff\x59\x93\xf3\xe5\x5f\xa7\x67\xfe\xb3\x3b\xe6\xe5\xbf\xab\x67\xce\xa7\x8c\x73\xaf\x2f\x7a\x26\x54\xdf\x50\xbb\xd3\x4e\xf5\x77\x96\x2d\xd6\x5b\x1c\x53\x36\x33\xad\x8a\xce\x5d\x3a\x22\x7d\xf6\xa5\xbe\x3c\x36\xf7\xf9\xcb\xc7\x82\xf9\x7e\xd5\x59\x4e\xaf\xb2\xac\xce\x93\xd2\xa0\xf1\x7e\x56\x5a\x92\x05\xb3\xd4\x1b\x76\xb0\xd4\x72\x06\xf2\x45\x92\x2e\xf2\x5d\x83\x3c\xa5\x51\xfb\x2b\xb1\x7a\xeb\xf9\xa5\x2c\x25\x3e\x78\x6f\xb7\xd8\x48\x80\xfa\xe5\xf3\xea\xf8\xf2\x71\xed\x94\xa6\xae\x3a\x8b\xca\x0a\x1f\x55\x68\x6c\xd0\xc8\x64\xee\x4f\x87\x80\x56\x09\xc0\xbf\x73\xeb\xdc\x89\x2d\x6c\xd8\x4e\xdb\xb7\x7e\xfa\x0e\xbf\x6e\x16\xfd\x69\x10\x1c\x0f\x23\x6a\x47\xfe\xd7\xf1\x69\x88\x4d\x52\xbc\xe5\x1e\x9c\x7c\x1c\x50\xc7\x79\x8d\x57\xd0\x80\x77\x0d\xff\x94\xe8\xeb\x2f\x29\xaf\x3b\x12\x11\x79\xee\x4e\xbc\x23\xcb\xdb\x4e\xbe\xe6\x52\x90\x46\xee\x8a\xcc\x24\xca\x5b\x22\x82\x5f\x7c\x04\xad\xed\xb9\xcb\xd4\xde\x6e\x5f\x75\x25\xfb\x92\x5f\xf5\xd6\x56\xae\x36\x61\x3f\xb0\xab\x92\xc1\x2d\x6b\xba\x42\x33\xbe\x8a\xfe\x6e\xef\xa0\xfc\x7c\x4b\x29\xf4\x36\x2e\x5f\xde\x96\xcf\xfe\xf5\x55\xf1\xbe\x0f\xca\xd3\x6c\x1c\xb4\x8d\x37\x9c\x58\x3f\x38\xf0\xef\xb6\xf6\xe9\xa0\x20\x75\xd0\x61\x6f\x74\x93\xa9\x7c\x01\xdb\xa8\xbd\xbd\xfb\x9e\x4f\xb9\xc0\xfe\x8a\x6e\x58\x93\x82\x7c\xb4\xee\xf8\x5c\x00\x70\xc5\x9a\x6f\xf1\x54\xf3\x49\x0c\xea\xe6\x46\x52\x33\xfb\xc6\x8d\x32\x0e\x0d\xcc\xd4\xd8\x5b\x46\x48\x5b\x6c\xd2\x82\x96\xc6\x0d\x68\x24\xa0\x5b\x54\x52\x99\xb2\xf4\x1e\x23\x27\x08\xfb\x87\xa3\x9e\x28\x6c\x3d\x76\x92\xad\x49\xc8\xed\x50\x98\x8c\x76\x23\xbb\x8f\xda\x22\x11\x70\x93\x75\xe9\xcd\x6f\xb6\x83\x24\x13\xe9\x80\xf6\x01\xea\x04\xc9\xf4\xf5\x7b\xda\x2a\xa2\x54\xd9\xd6\x89\x9e\x16\x03\x5a\xcf\x97\xb5\xbb\x94\xa0\xd2\xd7\x5e\xe4\x8f\x13\x7f\xdd\xa2\xed\x8c\xb6\x17\xc7\xbe\x6b\xf5\xa7\xb4\x59\x7f\x55\x72\x77\x4e\x31\xdf\xd1\x5e\xdd\x28\x72\xb2\xda\x1f\xa0\x56\xe7\x74\x20\x27\x2e\xc9\x4e\x6a\x88\xe5\x33\xcf\xd6\x4a\xa7\xe3\x22\x7e\x0d\x7b\xad\x6e\xfd\xcf\xce\xb7\xd3\x7b\x00\x14\xaf\x7c\xfc\x90\xde\xd2\x3f\xeb\x49\x2e\xaf\x1f\xe5\xe4\xa9\x04\xed\x52\x09\x31\x6f\x30\xc3\xec\x28\x14\xbd\xb9\xe0\xf9\xbc\x3f\xd1\x03\x79\xd9\x59\x67\x10\x27\x23\xc0\x4e\xf2\x4a\x5b\x0e\x4f\x2a\x83\x63\x6e\x04\x9d\xab\x69\xbc\xce\xe0\x5e\x66\xf0\xbe\x58\x6c\x3e\x07\xc9\xdf\x71\x9e\xb2\xe0\xe9\x77\x69\xf3\x8e\x2f\x29\xe1\x8e\xfb\x79\xe7\xc5\x9c\x92\xf2\x9f\x70\x9b\x92\xc6\x9b\xdb\x5c\xfe\x92\xfb\x3c\x96\x89\x01\xb1\xa0\x84\x1c\x2f\xf8\x79\xd4\x9c\x6d\xa6\x4d\x21\x0e\x62\xf3\x99\x45\x55\x41\x6e\x33\x82\xb9\x14\xff\x94\xcc\x8a\x65\x98\x8f\x44\x51\x36\x22\x6d\x91\x73\x86\x83\x0b\xde\x06\x9c\x87\xce\xa8\x29\xe4\xbe\xd7\x40\x7d\x2a\x54\xf2\x1f\x40\x7d\xdc\x85\x61\x51\x0c\xa1\x85\x50\x19\xe5\x2b\x5c\x0e\x4d\xa1\x0c\xb2\x67\x13\x93\x8c\x24\x3e\xb5\x1b\x4b\x83\x81\xc8\xfc\x86\x32\xf5\x85\x6c\xbe\x36\x2a\xb8\xdb\x7b\xda\x6b\xf2\x2d\xed\x25\xed\x1d\xed\x15\x07\x81\x75\xfe\xae\xc7\xf9\xfe\xf7\x46\x79\xd7\x65\x9f\x83\xa8\xff\xfe\x4b\x5d\x36\x9e\x5f\x39\x3e\x7c\xe6\xf8\xd0\x9d\x1e\xbe\xf2\xfd\x23\xdf\xbf\xf1\xfd\x13\xc7\xfb\x37\x8e\x4f\x7d\xf6\xef\xbd\xcf\xbd\xd3\xbe\xb8\xcf\xe5\x1f\xbf\x11\xc8\x89\x9c\x9c\x0e\x4e\x51\x26\xd1\xc4\x4a\x0f\xa9\xc3\xc2\x8e\x7b\x7e\xd9\xcb\xd5\xd4\x39\xa4\xbc\xd0\x3b\x89\x0b\xb1\xfc\x51\xb7\xd1\x43\xac\x09\x80\x5e\x68\xcf\xd9\x4a\x0a\x31\x00\x0c\x0d\xdd\xa5\x6a\x40\x5d\x5d\x0d\xd2\x65\x2b\x39\xe4\xb1\xd5\x1e\x62\xdb\x1b\x52\x95\xe0\xb9\x1d\x0b\x32\x82\x27\xc2\x03\xd9\xf3\xe0\x71\x2e\x07\x1f\x87\x85\xb5\xf7\xcd\xf3\x80\x23\xde\x4f\xfb\x33\x63\xb3\xb3\xc0\xa1\xd4\x60\x23\x13\xa9\xe6\x8e\xa4\x10\x0c\x5d\xdd\x89\x44\x2c\xce\xaf\xa9\x7a\xbd\x17\x3b\x68\x0f\x2c\x70\xb6\xc5\xbe\xdb\x42\xe2\x4c\x59\xa8\x4a\x56\x60\x64\x8e\xc2\x79\x7b\x6b\x61\x1e\x3d\xa0\xe6\x3e\xcc\xbd\x07\x54\x3a\x20\x65\x83\xc2\x18\xf3\xcd\x48\x8a\x7c\x20\xff\x50\xe5\x72\x68\x0f\x75\x1e\xda\x02\x29\xf9\x7a\x00\x87\x11\x15\xe6\x35\x2d\xe9\xcd\x21\x2e\xca\xd9\x25\x28\xea\xd1\x51\x01\x0b\xb2\x62\xd4\xc0\x52\xd1\xae\x0c\x6a\xd5\x03\xd9\x41\xd5\x7a\xce\x35\xcd\xcf\x88\x3c\x05\x0c\x42\xe5\x7d\x1d\xff\x7c\x0e\x15\xff\xc7\x1b\x9f\x28\x97\x8a\x55\x53\x67\xbd\xc5\x3a\xc5\x43\x19\x3a\xdb\xad\x4e\xfd\xf8\x81\x81\xcd\x3d\x3c\xac\x2d\x7f\x47\xfb\xf3\x09\xc2\x9d\x33\xb7\x4f\x17\x7d\xf7\xd8\xcf\x81\xc7\x97\xd5\x68\x3d\xcd\x20\x09\xb3\x36\x7c\x08\x90\xec\x6a\x88\xad\x82\x4a\x12\x73\x38\x98\x2d\x14\x5b\x44\x9f\xa3\xeb\x24\x14\xa5\x22\x3b\xd5\x5c\x03\xb1\x0c\x05\x1c\x4d\xe9\x98\x75\xdb\xc0\xd2\x9f\xbc\x88\xbc\xb7\x2d\xf6\x1e\x26\x58\xbe\x55\x90\xcd\x24\x63\x4c\x46\x75\x2b\x2a\xd5\xed\x93\x8e\xa0\xb0\xc8\xdb\x3e\x6b\x98\x81\xe4\xf7\xd5\xd3\x68\x70\xaf\x76\x58\x88\xa3\x87\xd6\xc8\x5a\x59\x2b\x3d\x37\x8c\x08\x2d\x73\xaf\xe0\x31\xa8\x05\xc4\xed\x92\xc4\x7e\xb2\x62\xb6\x34\x30\xee\x09\x35\xda\x26\xd0\x67\xb1\xb2\xd0\x03\xf5\x42\x6d\xc7\x62\x30\x73\x28\x75\x86\x3c\x74\x47\xbd\xca\x08\x6c\x20\x6d\x6f\xe8\x3d\xfa\x7f\x3d\x7d\x85\xb3\x90\xcb\x05\x47\xcd\xda\xba\x45\xfb\xf7\x8a\x7f\x6f\xf6\x0f\x24\xd1\x6b\x50\x10\x85\xa9\x84\x96\x05\x0c\xa3\x3a\xfb\x35\xb6\x5c\xf0\x4b\xd4\xd9\xb9\x3b\xda\xfe\x4c\x66\xe3\xd7\x3e\xfe\xff\xfe\x5f\xff\x9f\xff\xb7\x3e\x57\xda\x8f\xf4\x6b\x4f\x35\xd3\x12\xbe\x47\x05\x56\xde\x7a\xa5\x30\x15\x54\x6f\xa5\x6c\x8a\x09\x75\x03\x43\x7c\xc7\x8f\x58\xbb\xfd\x55\x2b\x0e\xb2\x63\x7a\x0d\x83\x5c\x1b\x39\x5f\xe3\xac\x9b\x2d\x08\xe4\x50\xc7\x26\xf8\xd4\x27\x48\xd3\x25\x4c\xad\xe6\x5c\xa4\xe0\x50\x8a\xe6\xa5\x03\x2d\x6f\xa0\xa6\x10\xa7\x5c\xa7\x44\xb9\x9e\xb0\xcf\xda\x4e\x01\x82\x23\x8e\x8a\xca\x0f\x16\x76\xc8\x9c\xae\x00\x81\x02\x2f\xa0\xd9\x6f\xb1\xeb\xe5\x1a\xa7\xd7\xa4\xf6\xe6\x4c\xb0\x36\x7b\xde\xa2\x7d\x77\xcf\xfa\x54\xe7\x79\x18\x21\xf6\x0d\x0c\x23\xfd\x16\xc7\xb8\x96\x32\x6e\xa3\x6d\xd0\x89\x96\x82\xb4\x3d\x28\x5f\x03\x27\xe4\x55\x31\x60\x4f\x56\x0e\x09\xfd\x20\xa0\xe3\x96\x47\xbf\xca\x94\x2d\x0f\x8a\xb6\xa8\x0d\x2d\x06\x1f\x42\x3b\x4a\x98\x37\x84\xd6\x6c\x06\x5e\x54\x1f\x94\x9d\x20\x4e\x45\x13\x2b\x88\x9c\xc6\xb1\xd8\x28\xc2\x73\xd4\x12\xa6\xb9\x05\xe2\x25\xc0\x58\xfb\x6c\xfa\xb5\x9b\x7b\x3d\xc6\xad\x6a\xba\x46\xed\xf5\xb2\x39\x71\xaf\x40\x4d\x43\x75\x87\xd0\x0e\x72\x54\x36\x23\xe5\x7e\x52\xb9\xb6\x85\xd3\x81\x1a\xcc\x1f\x75\xc3\x12\x38\x6f\x71\xb4\x6b\x7e\x53\xda\xc2\xbe\xf7\x14\x62\x1a\xf2\xae\x52\xbf\x51\x56\xa0\x8e\xe0\xaa\x4f\x42\xa4\x3c\x71\xe9\x30\xed\xac\x3b\x96\x06\xb4\x25\x65\x88\x84\x10\x6f\x56\x04\x01\x1a\x7f\xaa\x2f\x93\xc5\x28\x79\xc5\x7a\xcc\xa8\x1f\x70\x72\xa0\x99\x16\x39\x90\x03\xcb\x46\xa7\xc2\x83\x48\x98\x05\xf4\xf6\x28\xff\x51\xa7\xaf\xc8\xae\x63\xbb\xa3\xfe\xb5\xa2\xa4\x17\xaa\x23\x82\xfa\x89\x7d\x54\x52\xb1\x7b\x09\xe2\x40\x39\x64\x95\x1a\xa4\x29\x64\x2f\xaa\x0a\xea\xe4\x60\xf2\x02\xcc\x55\x2f\x5b\x86\xd1\x20\x10\xce\xef\xa1\x16\xd2\x73\xf7\x09\x17\x69\x6f\x10\x74\x4a\xcd\x2b\x79\x80\xa0\x66\x83\x70\xb3\xe1\xe1\x43\x2c\xe5\xe0\x8e\xc0\x8a\x9f\x42\xf4\x7f\xa5\x44\x58\x09\xbd\x6c\x84\x78\x98\x17\x86\xea\x9b\x19\xaa\x80\x23\x37\xed\x75\x10\xba\x8f\xb2\x3a\x17\x5f\x11\x27\x94\x04\xae\xaf\xc0\xda\x2a\x32\x42\x01\x0d\x7d\x6c\x4a\x56\x2b\x3c\x01\xef\x6b\x8f\x00\x02\xf3\x72\x00\x6d\xdb\xf0\x88\xfe\xb0\xd8\x81\xe2\x24\x68\x2c\xb1\x70\xb1\x94\xcb\x7a\x0d\xf4\x68\x35\xd3\xa9\xed\x2c\x3f\x01\x8b\xe7\x41\x32\xcf\x33\x7a\xa3\xf6\x4e\x47\x74\x7a\xcf\x68\x0f\x89\x32\x7c\x3d\xf9\xc1\x92\x8f\xd9\x66\xdf\xf6\xc0\x1e\x2c\x47\x04\x56\x6b\xe3\xf9\x44\xfe\xb2\x4a\xc7\xa3\x2d\xe4\xbd\xc1\x3a\xf0\x07\x44\xb3\x80\xd7\x21\x16\xb9\x0d\xaf\x4a\x61\xe5\x88\xd9\x15\x85\x3f\x0b\x79\xbf\x96\x24\x0c\x8f\x6f\x10\x17\xd7\x1a\x72\x91\xf5\x01\xf1\x65\xca\xe1\x9f\x05\x74\xf3\xc0\xa2\x15\x16\x52\x59\x7b\x94\x02\x9a\x01\x97\x6a\xf6\xca\xad\xfb\x07\x5f\xdf\xdb\x3f\xf7\x6b\x93\xa0\xa5\xa7\x20\xe3\x78\x95\xf4\x6e\x33\xf4\x22\x57\x14\x55\x8a\x92\xfb\xd3\xe5\xad\x05\x9d\xb5\x1f\xc0\x13\x05\xe9\xed\x50\x38\x64\x28\xf1\x39\x14\xa2\x84\x25\xef\x9a\x81\x7a\x96\xf3\x79\x81\x61\xcd\x58\xb5\xd1\xf1\x50\x79\x8a\x1e\x58\xf4\x16\x65\x8c\xab\x99\xe1\x15\x45\xc5\x22\x81\xf2\xb5\x44\xba\x9d\x18\x7f\xfc\x42\xb4\x5e\xed\x07\xe0\x4a\xf9\xd0\x34\x1c\x8c\xd3\x57\xc4\xd5\xa6\xad\x4e\x09\xbc\xba\xe0\xb2\x21\x4e\xd4\x69\x11\xce\x3e\x6c\xb3\x85\x9a\x01\x93\x01\x59\x7d\xcc\xac\x4f\x2b\x13\x5c\x3e\x70\x35\x14\x50\xff\x02\x52\xfe\x50\x44\x8f\x6c\xcb\x59\x1b\x28\x97\x07\xd4\xaf\x8f\xb3\x32\xdf\xab\x9f\xff\xa8\xd7\x96\xeb\x3e\x02\x4a\x33\x03\xa4\x1e\x6c\x12\x49\x72\xaa\x0c\x93\x05\x11\xc0\xbe\x22\x60\x19\x23\x8f\x79\x6d\x01\x85\x57\xaa\x80\x86\x65\x16\x1f\xab\xab\xc8\x91\x94\xd5\x99\x74\x5d\xa7\xa3\x37\x1f\x8e\x07\x24\x4c\x89\xcf\x7c\xd7\x17\x9e\x02\x94\x23\xbf\x60\x2f\x31\x87\xf8\xd6\xd2\xb8\xda\xdf\x6e\xb1\x31\x2a\xf9\x35\xb2\x43\xe6\x28\x5f\x23\x2e\x18\x5e\x62\x18\x55\x07\x32\x3d\x94\x94\x1d\xe5\xe3\x87\x02\x49\xe6\xbb\x6c\x83\xeb\x61\x6d\x1f\x3f\x54\x8a\x8b\x1c\x7d\x9d\xff\x61\x21\x89\x3d\x19\x2b\x44\x9e\x21\x1d\x73\xbc\x1d\x1c\x4f\xb1\xc3\xf1\x32\x4b\x59\x47\x61\x94\x15\x93\xba\x88\x73\x3a\x68\xba\xb3\xd1\x8d\x69\xd3\x52\x76\x82\x92\x93\x2b\xb8\x4b\xe8\xea\xa4\x77\xb3\x1d\xb0\x93\x3b\x79\x85\x52\x00\xc9\x17\x20\x99\x18\x64\xd2\xf5\x10\xd4\xc3\x99\x43\x0a\x74\x1d\x56\x3b\x0c\x2c\x07\x5a\x02\xe0\x27\xd3\xa9\xcf\xad\xef\xa8\x10\x07\x8a\x78\x8c\x80\x4d\x05\xba\x7a\xda\xe0\x54\x53\x91\x73\x8f\xc2\x79\x37\x27\xeb\xc6\x99\x28\xbd\x28\xcd\xba\x3e\xce\xa9\xf9\x00\xfa\x2f\xa7\x71\xf8\xcf\xcb\x71\xee\x3a\x8f\xf6\xf3\x77\x45\xdc\x31\xa3\x26\x50\x52\x3f\xb8\xe0\xea\x84\x56\x4b\x36\x9f\x27\x6f\x6d\xda\x75\x40\x5e\x85\x08\x32\x22\x01\x0e\xc7\x4a\xe0\x79\xe6\x6b\x14\x80\x7c\x95\xe5\xce\xff\x08\xc0\x7f\x57\x08\xb6\x14\xc7\x89\xa1\x00\x2e\x3b\x25\x62\x23\xe3\x61\xb5\x35\xae\xa4\x6b\xcc\xf3\x66\x8b\x04\xcc\xc0\x5c\xf5\x6a\x0b\x0f\x4c\xcf\xea\x04\x4e\x97\x83\xd5\xa5\x76\x37\x90\xfc\x39\x2f\x4f\x19\x07\x01\xb5\x51\xd3\x2f\x58\x40\x4f\xa1\xcb\x51\x5f\xe2\x5c\xb5\x87\xa1\x7d\x8b\x0d\x3c\x31\x6d\x9b\xe6\x29\xca\x75\x54\x5b\x7f\x93\x99\xba\xba\x01\xe7\x27\xd2\x6e\xa3\x8e\x4d\x64\x40\xd3\x33\x7f\xd8\xd9\x25\xb4\xd9\x37\x21\xf1\xf4\x2d\xda\x01\xb1\x66\x33\xbe\xa1\xca\x39\x7a\xe8\x62\x7f\x4a\x40\x0a\xe8\x35\x8e\x5a\xb7\x5c\x5b\xa8\x6f\x28\x95\xf9\x36\x4f\x51\xad\xd1\xde\x44\xb5\xaa\x8e\x55\xca\x05\xf2\x98\x20\xcd\x15\xfd\xbd\x40\xd3\xfe\xbf\x17\x93\x35\x3f\xec\x3a\x1b\x75\xf3\xf0\x17\xaf\xc5\xfb\xab\xae\xd5\x5a\x09\xc5\xcc\xff\x5e\x15\xda\x9c\x37\xb2\x29\xba\x8e\xe3\x29\xe3\x58\xef\x72\x8e\xc7\x12\x78\xbc\xc5\xac\x89\x27\x75\x24\x6b\x1d\xec\x61\x77\xb9\x9c\xb7\xc1\x73\x88\x28\xf2\xe2\x6d\x3d\xf2\x3a\xee\xeb\xc3\x44\xf4\xd7\x0f\x63\x19\x34\xa8\x8f\xcc\x23\x20\x26\x8f\xde\x52\x3a\x26\x82\x35\xb7\x3c\x05\xe8\x28\x14\x86\x6b\x80\x44\x83\x66\x94\x68\x87\x3c\x29\x64\x27\x8d\x3f\xe1\x6b\xb1\x6c\x94\xc4\xc1\x3c\x87\x8a\x84\x1d\x50\x28\x00\x37\x25\xed\xa8\xe7\xe7\x0a\x65\x06\x00\xc7\x0b\x28\x3a\x41\x8e\x5a\x7a\x60\x94\x0e\xbc\x38\x9f\x5e\x41\x65\x09\xcb\xe1\xfa\x8c\x5f\x35\x25\x70\xdf\x23\x06\xb8\x5c\x3f\xd9\x90\x50\x5c\xce\x84\x1e\x74\x62\x81\x35\xcb\xbb\x3d\xc2\x24\x57\x93\xbf\x32\xcb\xb2\xf1\x2a\xf5\x58\x59\x89\x3f\xd9\xb8\xdf\x1e\xd6\xb4\x7c\x7d\xd8\xa7\x2f\xff\x6e\xf1\x79\x8a\x31\x8d\xfe\x62\x35\x56\x1d\x23\xf4\x0c\xcb\xcc\xac\x0b\x80\x17\x5c\x05\xb7\x6f\xd6\x1b\x5d\xba\x72\x10\xb8\xd4\x90\xf6\x5b\x18\x88\x42\x34\x12\x7f\xb1\x27\xb7\x75\x76\x54\x10\xb1\x99\x8f\x35\x30\xaf\xe3\x3b\xc5\xdc\x51\xce\x0c\xac\x87\x9a\x9d\x36\x0f\x70\x00\x74\xfc\xc8\xe5\xf0\xe2\x77\x56\x96\x8f\xeb\x6c\xac\xdd\xf8\x0c\xc5\xd4\xf4\x45\x91\x26\xc7\xd7\x17\xa5\x94\x19\xf5\xe6\xcf\xfa\x20\x36\xae\x2f\xe8\xbd\x89\xd4\x09\xe9\x80\x3b\xe6\x1a\xcb\x74\x8e\xed\x89\x4b\x73\x55\x01\xb2\xd6\xaf\x3c\x40\x54\xaa\xfb\x42\x11\x9a\x21\x68\x27\x2f\xce\x2d\x34\xd8\xd5\x76\x68\xbe\xf3\x49\xf6\x6b\xcc\xcd\x49\x15\x87\x47\x7c\x05\x64\x07\xd5\x9a\xaa\xfc\x92\x3a\xf4\x0e\xa6\x56\x3f\xe3\xf0\x4b\x5c\x25\x95\x9d\x7c\xb1\xbc\xd3\x71\xbf\x39\x9f\xc6\x1f\x0e\x4a\xe2\x12\xfc\xd1\x7d\x01\xc2\xeb\xac\x37\xe4\x0b\xaf\xf7\x5f\x0d\x82\xf6\xb9\x4a\xea\x36\x36\x6b\x0f\x3d\x31\x38\x02\x8e\x90\xfa\xc7\xd2\x08\xf3\x99\xec\x54\xaa\xfd\x59\xb2\xf6\xf4\x3e\xfc\x34\xb3\x5d\x71\xa1\x6b\xb4\x6b\x47\x21\x76\x3d\x43\x6d\xeb\xec\x0b\xd1\x3b\x47\xf4\xbe\x12\xbd\xeb\xc4\xd5\x97\x76\x97\x7a\xee\x84\x67\x48\xab\x57\x11\x81\x35\x08\x8e\x03\x80\x6a\x06\xd0\x0b\xf2\x6e\xe8\x3c\xc5\x39\xc7\x78\x5d\xc9\x9b\x42\xef\x65\x21\xff\xa9\xcc\x38\x4f\x3c\x4c\x9e\x66\x73\xe6\x9b\xb6\x79\xd5\x9a\xf7\x0a\x71\x6e\xdf\x65\xad\xee\xc7\xc3\x72\xc8\x3a\xfd\x5a\x08\xef\x4f\xb8\x0e\x94\x70\xc2\x54\xac\xd7\x58\x72\xbe\xc5\x31\xdb\x55\x46\x3a\x2f\x2a\x80\x50\xa9\x6a\xb0\x53\x8e\xa9\x41\x55\x9e\xa2\xfa\x7f\x1d\x07\xd2\xe5\xef\x25\xa3\x6f\xe9\xa9\xc2\x6f\xcc\x57\x54\x88\xcd\x7a\x2b\x35\xd2\xc0\xf6\xc8\x10\x0a\x80\x09\x0d\xc0\x9b\xee\x4c\xa8\x36\x21\x28\x7e\xb5\x1e\xe4\xa2\x73\xc3\x47\x6a\x94\xbb\xc6\x54\x09\x64\xd9\x5d\x38\x2d\xc6\x78\x18\x82\xd1\x8c\x8c\x41\x0e\x02\xc6\x3a\x80\x85\x9b\x04\x25\x13\xab\x34\x9b\xaf\x89\x93\x53\x60\xd5\x40\xc3\x84\x8b\x76\x92\x87\x08\x60\xbe\xb3\xec\xe4\xf3\x40\xfd\x2b\xfc\x6e\x92\xa3\x66\x32\x54\xbb\x2e\x57\x2d\x07\xc8\x73\xac\x1b\x00\xc0\x7a\x01\xe7\xc8\xc2\xfe\x02\x6b\x7b\x9f\x34\x9c\xd0\xc9\xf7\xfe\xb1\x64\xf7\xc8\x38\xe8\xbb\x6d\xae\x68\x3b\x88\xe5\xc9\x5c\x80\xf8\x77\x25\x5e\x39\x7b\xb7\x19\xde\xa0\xce\x07\x9b\x18\xeb\x2a\xa0\x56\xa2\x49\x9d\x92\x8d\x59\x54\x83\x34\x02\xba\xc6\x0c\x40\xd1\x1c\x70\x5b\x40\xd4\x02\xe4\x5f\x06\xc3\xb5\xb6\x7e\x20\x8c\x9e\xdb\xde\x14\x5a\x93\x8c\x40\x8f\x23\x83\x14\xbd\xec\x9a\xab\xcd\x60\x69\x9c\x94\xd0\x8b\x5e\x1e\xe4\x95\x97\xdd\x8d\xfc\xb0\xbc\x13\x84\x0e\xbb\xa3\xf4\x0a\x59\xe7\xcb\xfd\xd1\xc1\xcd\x62\x53\x07\x08\x04\xc9\x9d\x48\x18\x73\x46\xca\xcd\x09\x53\xa8\x17\xef\xe0\x5d\x26\x82\x14\x73\x22\xe8\xd9\x52\xe1\xe7\xce\xe8\xfd\x0a\x84\xdf\xa0\xfa\x8b\x62\xbe\xd4\x50\xe6\x51\x17\xa4\x91\xe2\xbc\xc0\xc2\xec\xc0\xaf\x16\x0d\x7c\x86\xf1\xf1\xc3\x3a\xed\x7a\x3a\x45\xb0\x25\x23\x58\x91\xfd\xf1\x16\xca\xba\xe0\x77\x8a\x94\x4b\xbe\xf0\xf9\x06\xaf\x6a\x77\x83\x45\x52\x3b\x3a\x90\xb4\x82\x74\x47\xae\x98\xeb\x40\x13\x84\x5f\xfb\xfd\x41\xe5\x9c\xe4\x71\x01\xf4\x62\x5c\xb1\xf6\x20\x0a\xd5\x2b\xb3\x78\x20\x83\x35\x47\xf0\xa7\x7a\x03\x2c\x6c\xf2\x1c\xf6\xff\xb7\x13\x55\x0e\xf3\x9f\x3c\x85\x63\x92\xf5\x45\x48\xeb\x8b\x9c\x8b\xa3\xba\x10\x91\xe1\x76\x23\x84\x95\xe0\xad\x99\x82\xff\x0e\x78\xeb\xfd\xb0\xfb\xc9\xbc\x22\xfb\xab\x13\x68\x3b\x4f\xb7\xac\x20\xcf\x09\x25\xeb\xee\x4c\x55\x32\xb5\xf6\x42\x1c\x72\x1e\x4c\xe1\x23\xe0\x02\xde\xbd\x8e\x7c\x95\x53\xf6\x0a\x61\x66\xb8\x79\x75\x09\xd3\x74\x86\x76\x7b\x0b\x63\x2d\xf2\x83\xc8\x86\x33\x0a\xd3\x28\xf3\x9a\x50\xe3\xe6\x4e\xf6\x81\xb8\x5d\x6d\x1e\x60\x1f\x87\x79\x08\x20\x4c\x24\x07\xee\x01\x7a\x96\xee\x6f\x56\xe4\x70\xde\xd3\xec\xe4\x84\x65\x1e\xc5\xd1\x97\x89\x5d\x45\xc1\x4d\xcb\x12\xaf\x0e\xa4\x75\xd1\x03\x5c\x44\x1d\x62\x28\xe2\x6c\x24\x32\x53\xa8\xb4\x22\x20\xea\x06\xb0\x22\x3b\x3a\xd7\x58\x46\x81\xca\x5c\xa1\xa3\x12\x4a\x71\x46\x84\xe2\x34\x8c\xf3\x54\xa4\x40\x04\x95\x9a\xbc\xe9\x42\xbf\x1b\xa1\x71\x84\xde\x10\x0e\x25\x74\x53\x11\x89\xf0\x30\x16\x8a\x29\x16\x32\xaf\x8f\xc0\xdf\x6b\x3a\x1a\x34\x8b\x4e\x42\x6d\x91\x72\x40\x4a\x3e\xf4\x7e\x60\x11\x83\x22\x36\xb2\x66\xb6\xc2\x21\xbe\x7a\x48\x73\x5a\xe1\xc3\x49\x75\x66\x39\xda\x19\x14\x14\x16\x59\xb2\x9d\x18\x3f\x73\x42\xac\xe8\x2a\x19\x27\x45\x93\x59\x26\x48\x53\x13\xcc\x3c\x43\xac\xd7\x08\xd5\x5f\xfc\xc6\xd8\xa8\x94\x23\xc2\x64\x3a\x8d\x41\x2d\xa1\xa7\xa5\x41\x38\xc9\xcd\x59\x61\x36\xd7\x33\x43\x24\xce\xf3\x98\x7b\x10\xd0\x35\xc0\xea\xe1\x8a\x23\x1e\xb2\x8b\x3d\x51\x67\xb0\x37\x57\x06\x27\x19\x2e\xcc\x9b\x76\x50\x98\xfb\x98\x9d\x7a\x05\x2c\x55\xc5\x12\xd4\x7d\x1a\xa4\x5f\xc5\x9d\x69\xae\x4c\xa6\x9d\x36\x0f\xd2\x8c\x23\xd0\x0f\x55\x59\x14\x43\x35\x52\x9e\xba\x16\x3c\xc7\x11\xff\xc0\x23\xde\x8d\xf8\xe7\x64\xcb\xa9\x68\xdb\x13\xc8\x06\x6f\xb5\xb7\x2f\x6a\xca\x59\xab\xf5\x45\x51\x39\x0f\xff\xb9\xa8\x1c\xe5\x61\x3f\x57\x95\x9b\x7f\xfe\xf7\xde\xa1\xe6\xc5\x75\x49\xa5\x09\x94\xe9\xe6\xc1\x2e\xcc\xec\x10\x79\xcc\xf8\x47\x1c\x70\x59\xbf\xa0\xb0\x97\x47\xf9\x41\x00\xd8\xe2\xec\xfb\xd6\xe3\x01\xf7\xf3\xee\x97\x3b\x3e\xdd\xe7\xfe\x00\xef\xbe\xcc\x73\x2c\xfe\x3f\xce\x2f\xd3\xc8\x0c\xb3\x2b\x66\xb6\xf7\xf7\x3a\x7e\xe9\xc5\xff\x82\xf7\x66\x31\xaf\xb9\xc0\x60\x7c\xd1\x9e\xc1\x8e\x62\x4b\xd0\x1c\x47\xcf\xf6\x17\xaa\xc8\xc2\x6e\xf2\xbf\x47\x3f\x0e\x3f\xe3\xda\x13\xb1\xab\x23\xc5\x98\x2f\x87\x6f\x1c\xe7\x2e\x3f\xf8\xe3\xc7\x68\x25\x7c\xed\x13\x9e\x1d\xeb\xee\x6b\x9a\xdb\xfb\xec\x6b\xde\xbb\xd4\xcf\x5a\x94\x53\x3f\x7e\x94\x91\xfe\xd6\x1b\xbc\xe9\x09\xcf\x91\xf8\xff\x3c\x57\xe5\x34\xc6\x8b\x21\xf4\x19\x74\xf8\x76\x08\x3d\x62\x0f\xff\xa1\x21\xf4\x37\x8e\xa0\xcb\x6f\x0c\xa1\xe7\x88\xfd\x7f\xfd\xcf\x10\xfa\x72\x08\xfd\x56\x0f\xff\x0a\xa2\xfa\xa2\x87\xbf\x2d\x86\x6f\xf2\x14\xf0\x9e\x2f\x09\x2d\x7a\xa5\x14\x1c\x02\x8e\x92\xf7\x4c\x04\x03\xd6\xeb\xb4\x53\x29\x98\xd5\xee\x51\xe5\x44\xc1\x90\x4f\x71\x04\x15\x1c\x02\xe1\xa5\x16\x6a\xb2\xcb\x64\xc9\x57\xe9\xaa\x1e\xe8\x9d\xad\x6f\x03\x32\x45\xf5\x1a\xa5\xa7\x61\xbf\xf5\x5e\xf7\x1c\x58\x8e\x84\x50\x4a\x61\x5c\xf4\xba\x92\x52\xaf\x24\xa2\xbf\x2a\xa0\xbd\xad\x1c\xd7\xbb\x93\x2f\xdf\x9e\x8d\xaa\x7b\xf8\x58\xd9\x59\xd2\xf1\xe2\xc9\x85\xc4\x93\x83\xb6\xbe\x85\x3f\x1c\x5f\x41\x3c\x90\x2c\xf6\x10\xd5\x19\xb9\x5a\xb2\xef\xee\x8a\xca\x6f\x5f\x14\xc4\x97\x48\x5e\x81\x55\x07\xff\xba\x0c\x8b\xba\x34\xe7\x83\x26\x4b\xc4\xdf\xde\xf5\x9b\xa7\xd4\xc2\x94\x57\xec\x77\x53\x01\x11\xd9\x21\x62\xfa\x65\x75\xe8\xf1\x4d\xd9\xe9\x35\x0a\xc8\x72\x41\xc1\xc4\xb8\x69\x71\xb2\x94\xde\x9c\xb6\x2c\x5d\x09\x8e\x8b\xc4\x06\x0d\x0d\x39\xc1\xde\xec\x8d\xa7\xb6\xa6\x57\xb0\x99\x3f\x68\xa7\xff\x42\x1d\xeb\xd5\xba\xbe\x0d\x51\x78\xa1\xe6\xe7\x79\x1d\x05\x33\xdd\x8b\x66\x72\x83\xb3\x0b\xc2\x23\x38\x04\xb0\xda\x0b\xd9\xba\x19\x43\xac\x67\x8d\x87\x57\xe2\x53\xff\x18\x27\x67\x73\x36\xa4\xed\xa8\xe4\xa7\x35\x6f\xce\x87\xd7\x6b\xf4\xab\xd7\xcd\x66\xbd\x15\x71\x18\x10\x3f\xef\xf9\xb1\xd7\xb7\x5f\x90\x1b\x1e\x17\x89\x0b\x8a\xc5\x35\x47\x26\xf1\x41\x07\xce\xf5\x3e\xfa\x97\x5f\xb4\x81\xde\x6d\x63\x7b\x5c\x76\xb6\xc7\xd9\x50\xde\x06\x6c\x02\x67\xe4\xad\x77\x60\x82\xed\x44\x5b\x46\x6f\x4c\xdc\xad\xde\xc5\x81\xce\x06\xbc\xd6\x35\xf6\x18\xa1\x45\xab\x15\xfb\x54\xbd\x05\xd1\x52\x36\x10\xc9\x16\xb1\xcf\x9e\x75\x93\x24\xa1\x14\xd9\x65\x86\x31\xc2\x98\x41\xe0\x2e\x4a\x4b\x88\xd8\x5c\xa5\xf5\x2f\x31\x79\x5f\x20\x9a\x70\xec\x44\x84\xb6\xa5\xe5\x26\xa0\x3c\xd7\x9e\x1e\x34\x55\xa5\xc8\x85\xf7\xb5\xa7\x28\xc2\x82\x16\xd0\xfb\x20\x49\xa2\x5e\x1e\x05\xcc\x17\xee\xfc\x25\x3c\xca\xee\xff\x05\xe8\x8a\xe7\xd8\x9f\xd2\x92\xff\x30\x7f\x8a\x2a\x76\xfd\xad\x49\xf3\x94\xce\x98\xaf\x0a\x4d\xe6\x94\x50\x45\xb7\x56\x82\xd6\x66\x9e\x41\xd9\x10\x57\xb1\xdf\x14\x4a\xa0\xbd\xa2\x3a\xb5\x91\x1e\x1f\x9c\x11\x1e\x14\xcc\x28\xe3\x35\x17\xb0\xdf\x4f\xca\x22\x3b\x89\x3d\x51\x32\x42\x94\x5c\x21\x17\xe2\xc3\x25\xea\x17\x97\x20\x43\xe2\x78\xba\x3e\x79\x2a\x58\x99\x67\x9f\x1f\xb8\x63\x0d\xb1\x05\x1d\x5b\x1f\x21\x43\x70\xdf\x9e\xfc\xfb\x2b\xdc\x0b\xaa\x6b\x10\xbd\x7c\x79\x09\x7b\xf4\xc7\xa3\x3e\x1d\x54\x5b\xb0\xe7\xe8\x01\xa0\x87\xa0\xe5\x6a\xcf\xbc\xda\xed\xf9\x54\xa1\xcd\xf8\x78\x6e\xfd\x7c\xee\x90\x60\xcf\xca\x2b\xaa\xfd\x15\xbc\x1f\x0f\x6d\x07\x11\x91\xd5\x74\x08\xbc\x88\xda\x57\xf9\xb3\xa7\x66\x91\xcb\x77\x47\xbd\xeb\x57\x4f\xb1\xfe\x99\x97\xc5\x37\x40\xd9\x9c\x37\x01\x69\x5e\x19\x2c\xc5\xb4\x7f\x3e\x7e\x8c\x02\x86\xdc\xb2\xad\x3f\x6d\x71\x1d\xf6\xf1\xa3\xa3\x73\xe4\xb4\x15\x48\x17\x95\x2d\xe6\xd4\x42\x4e\x6d\x5b\x3f\xa3\xef\xb9\xc5\x06\xd2\xa4\x8a\xd2\x7c\x8e\xfe\x99\xb7\xec\x95\xf7\x9e\x78\xb3\x2d\xdf\xe3\x47\xe2\x3c\xa4\xe2\xe7\x27\x53\xdb\x26\xa1\xec\x7c\x48\x0c\x78\x41\xed\xd9\x79\x89\x5c\xe8\x84\xe0\x85\xc1\xea\x44\x39\x69\xb9\x2e\xeb\x37\x2d\xf7\xc3\x78\x14\x2f\xe0\xe7\xe3\xc2\xb8\x6e\xd6\xc0\x9b\x9d\x1b\xe7\xbe\xc7\x33\x1e\xae\xf4\x70\x83\x87\x3b\x1f\x8f\x8f\xf4\xe9\x61\xef\x2f\x71\xbe\xd9\xbb\x0f\xfa\x94\x38\x98\xe5\x55\x6d\x3d\xa0\x1d\x79\x93\x9e\x83\x40\x1c\x99\x1b\xb7\x98\x4b\xf9\xc0\xee\xa1\xdf\xee\x6e\x0a\x00\x0a\x4a\x1b\x62\xae\x36\x97\x20\x82\x54\xd2\xad\xe3\xbb\x42\xa5\x7b\xda\x6a\xce\x2a\xe7\x2d\x77\x0d\xb9\xe7\x2d\xae\x8d\xb5\x63\x1d\x8a\x13\xd7\x55\xde\xbc\xab\x3e\x45\x5f\x67\x3d\xfd\x3c\x75\x20\x1e\x40\xf4\x44\xd5\x1f\x0b\x63\xef\x88\xf6\x05\xc7\xf7\x1f\xfe\x57\x1e\x83\x13\x16\x13\x01\x4a\x0b\xfe\x91\xcb\xc0\x27\x74\xf3\x8f\x3c\xd6\x0f\x36\xdb\x11\x3f\x99\x73\xf1\xd1\xd0\x8b\x8f\x16\xe0\xaf\x58\x83\x97\xcf\xe6\xe0\x0f\x29\x90\x9e\x2c\xe5\x44\x3a\xc2\x27\xb3\x2f\x52\x59\xe4\x36\xdc\xfe\x6f\xd4\x25\xd5\x06\x3a\xe3\xaf\x96\x30\xc7\x39\x02\x89\x83\xd3\x71\xb6\x79\x06\xe0\x88\xd4\x76\xb5\x13\x9f\xd7\x5e\x3a\x68\xde\x8c\x7f\xfd\xfb\x5f\xfe\xb4\x39\xac\x4f\xc1\xbc\xf9\xaa\xd2\x46\x52\x09\x23\xa7\xad\x83\x5f\x2f\x99\x81\x3b\xda\x08\x2d\x27\x82\x30\x33\xd9\xdc\x6c\x44\xb3\xec\x0c\x76\x45\x4e\xe3\x66\x3d\x09\x84\xd8\xe9\xda\x5a\xda\x62\x06\xf3\x70\x92\x6a\x7b\x32\x3c\xeb\xa2\x1b\xbc\xcc\x66\x4b\x56\x69\xfc\xad\x89\xee\xc3\xbc\xc6\x9c\xcd\x99\x04\x3b\x2b\xd8\x25\xcc\x1c\xca\x89\x76\x4b\x4e\xb6\x64\x44\x54\x8c\x40\xd2\x92\xa5\xb7\xf6\x1c\x7c\xc0\xd8\xfc\xa1\xd7\x1d\xd7\xf9\xef\x6e\xf4\xa6\xf5\x9e\x02\x6e\xf3\x15\xc2\x3e\x8f\x12\x7a\x2a\xd6\x47\xc8\x53\x05\x8e\x4f\x05\xd7\x9e\xaa\x84\xdc\xf5\x36\xd5\x29\xf2\x33\xc0\xd0\xe8\xaa\x5e\xb1\x29\xab\x62\x93\x16\xa9\x32\x7e\xae\x68\x65\x54\xa8\x43\x25\x3d\x05\x05\xfc\x51\xa1\x4d\xdc\xcd\x26\x45\x81\x0c\x7c\x59\xcd\x23\xd8\xe2\xd5\x4a\xc2\x93\xb4\xe2\x4f\x02\xec\x10\x9f\xc4\x9a\xa9\xe7\x76\xaa\xb9\xce\xc9\xea\x3a\xd8\x8a\x49\x89\xa3\x52\x0a\x00\x82\xf2\xd9\x79\x1d\xa1\x45\x40\x92\x40\xb1\xe5\x18\xc4\xe7\xc0\x45\x56\xd7\x72\x14\xea\xb6\xb9\x52\x9b\xbd\x0f\xce\x87\x9e\xb5\x80\x82\x15\x42\xef\x76\xd8\xaa\x3d\xb5\x93\x21\x35\x49\xd2\x79\x30\x11\xb2\x28\x58\x0e\xbf\xb3\x36\xe4\xbc\x14\x08\x2f\xc0\x41\xe7\x0c\xd2\x2a\x9e\x3c\x57\xc2\xa4\x89\xdc\xc9\x0b\x65\x79\x86\x50\x40\x55\x8f\xd0\x0b\xb7\x10\x90\x71\x45\x63\x0f\xe7\x60\xfd\xfd\x85\xd0\x91\x3e\xc5\xdc\xe6\xf8\x7f\x9d\x00\xae\x1a\x9a\x56\xd6\xa1\x46\x75\x1a\x71\xad\xfa\x81\x5d\x63\x10\xd6\xbe\x76\x75\xee\x12\x85\xb8\xdc\xf4\xd3\x72\x11\xba\xff\x45\x7c\xdf\xfd\x92\xad\xf3\x92\xad\xaf\xf3\xee\xd7\xe4\xbe\xee\xfb\x4a\x1a\x41\xd3\x4d\x94\xb2\xe3\x66\xc8\x49\x39\x60\xc9\x12\x2c\x93\xcd\xa8\xd2\x8a\x2a\xd4\x04\xe4\x21\x36\x22\xb6\x6c\x27\xed\x42\xbd\x43\xb1\x63\x3b\x80\xe1\x40\x54\x82\xb6\xc8\x80\x70\x56\xb9\x1c\xd8\x7d\xc5\x9f\x1d\xfd\xdd\x0e\xbb\xe3\xc7\x8f\x5a\xc1\xd7\x98\x36\x81\x16\x90\x0d\xc5\xd4\x3e\x7e\xcc\xe1\x7f\xb6\x11\x71\xff\xb3\xd3\xff\xb5\x74\xbf\x07\x51\x63\xc8\xf8\x1c\x5e\xe8\x9f\xaf\xdc\x7b\xd6\xb7\x9b\x3b\x7b\x20\xc1\x9b\xea\x7a\x67\x60\x0a\x50\x0e\xcf\xfd\x7c\xba\x55\x3f\x8f\xe4\x8b\x5f\xf6\xdd\x17\x7f\x0a\x16\xce\xf9\x52\xa6\xa9\x85\x8e\x80\x59\x2a\x20\x28\x27\x7a\x00\xe9\xc6\x3c\x83\x26\x10\x99\xf7\x90\x21\xef\x5a\xe0\xae\xf6\x14\x72\xdb\xe3\x98\xa1\x98\xfb\x6f\x46\x31\xc8\xd0\xf3\xd8\xcc\x42\xc8\xa8\xfb\x27\x82\x80\xc5\x68\x67\x32\xd1\x75\xec\xbc\x46\x55\xf2\xda\xca\x02\xe3\xb8\xfb\x64\x0d\xa4\xdb\x28\x61\x00\xea\x9f\x0f\x84\xf9\x6a\x39\x44\x5c\x81\x39\x41\x60\x91\xb2\x2c\x87\x30\x65\x36\x13\xb0\x74\x19\xd5\xda\xe4\x05\x4f\xbb\x04\xa8\x2b\x81\xcf\xb6\x66\xca\x60\x4a\xa8\xfd\xb2\xc7\xde\x03\xe0\x1d\x7d\x06\xc5\xc0\x1d\x35\x64\xb1\x25\xa1\xcc\x20\xbd\xef\xb1\x3b\xed\x33\x29\x5f\xb5\x1e\x71\x0e\xf7\x75\x23\x28\xe5\xcb\x29\x15\x24\xa3\x1d\xb1\xaa\x0d\x6a\xd7\xd1\xd5\x6a\x8e\x29\x91\x35\x73\xb7\xce\x9f\x42\x21\x8d\x68\x6e\x07\x72\xba\x53\x6d\x89\x74\xf1\x9c\x43\x3c\xf8\xda\xb9\x5a\xa2\xb2\x0d\x18\x14\xd2\xbd\x2f\x7c\xb7\xff\x95\x44\x04\x82\x48\x69\x72\x7f\xf9\x20\x05\x6b\xea\x1b\x25\x43\x6d\x9c\x49\x2a\x5b\x54\xc8\xab\x54\x97\xde\x55\x2f\xe0\x89\x18\x62\xea\x42\x86\x5e\x52\xdf\x00\x1f\x61\x1c\x80\x2a\x2a\xa1\xda\xbe\x3e\x6d\x7a\x7b\xd7\xf7\x9e\xe3\x9f\x2f\x85\x6d\x72\x2f\x61\xf4\xb9\xc7\xc6\x48\x0f\x38\x9b\xe7\xa9\x9d\x85\xfc\xa5\x36\xf1\x51\x95\x1c\xe7\x62\x1b\x4d\x61\x09\xb5\xe0\xf9\xd2\x7e\x67\xc4\xc5\x05\xbc\x5a\xf9\xac\x63\x62\xae\x76\x22\x7d\x19\x32\xd8\xde\x07\x62\x22\x52\x5d\xe0\xc8\x16\x8b\xb9\x14\xb7\x5d\x5f\x1d\xdc\x32\x02\x18\xd1\x24\xdd\xf2\xc2\xe1\x20\xeb\x0d\x64\x64\xd9\xa1\x4c\x09\x55\xfc\x1d\x02\x18\x2d\x85\x22\x9b\x4d\x68\x7b\x25\x91\x69\x97\xa0\x75\x5e\x8b\xa2\x4c\x14\x45\x28\x9d\x0b\xe7\x36\xc8\x2d\x6f\x2f\x22\xe8\x6d\x45\xce\x98\x74\xd9\x01\xf9\xb1\x5e\x9b\xcb\x21\xc1\xdc\xb9\x89\xb0\xaf\x0e\x5c\xa0\x08\x21\xa4\x4b\x96\x91\x4f\xed\x0c\xd7\x13\x5c\xd4\xa2\x78\xdd\x0a\x16\x1b\x66\xff\x91\xb8\x46\x0b\x01\x14\x4c\x60\xfc\xb2\xa6\xff\x3e\x36\x87\x0b\xa9\x6d\x56\xd1\x57\x71\x7c\x2b\x22\xf9\x7c\x6c\xae\xcb\xbe\xbe\x82\xdc\xc8\xd5\x7c\x5c\xed\x1e\xbf\xf8\xb6\xd6\x3b\xfd\x11\x4e\xc2\xb5\x78\xa9\x87\xcd\xb5\x7b\x1d\xff\x70\x8d\xc7\x6b\x9f\x77\x3c\x1f\xe2\xe1\xd1\x1c\x69\x4f\x93\xbc\x32\x30\x42\x93\xf0\x88\x0a\x8b\xba\xd9\x40\x42\x48\xa6\xd4\x23\x36\x00\x56\xc7\xe1\x3f\x2f\xc7\xb9\xeb\x3c\x7a\x9d\xaf\xb0\xf1\xf0\x77\xfb\xb3\x1d\x68\xc7\x35\x56\x1f\xc5\xf5\x73\xfd\x3d\xae\x03\x23\x4f\xfc\x57\xd1\x12\xfc\xdd\x32\x3a\x7d\x8e\x77\xff\xfb\x5d\xf5\x21\x8f\xd0\x35\xef\x58\x51\x6a\xd0\x19\xe2\xd0\x0d\x21\xea\x5a\x65\x8f\x85\xb0\x37\x62\x29\x7a\xb2\x47\xe6\x08\x77\x38\xe9\x34\xb3\xad\x94\x90\x09\x98\x24\x23\x3d\x10\x6e\xa1\xf7\x3f\xea\x96\x6b\x28\x8a\xc0\x48\x0e\x71\x00\x44\x2d\x92\x03\xc1\xd4\x8c\x59\xa0\x94\x19\x72\x1e\x70\xae\xb3\xad\x4b\x7d\x9f\x50\xb1\x0d\xd6\x24\x19\x25\x34\x65\xd5\xf1\x04\xb5\x16\x27\x4a\x45\x52\xbe\x17\xd6\xd9\x0c\x31\xcf\x4b\x0c\x54\x8b\x88\x94\xa0\xa3\x04\x29\xb2\x69\x2b\x21\xa7\x74\x61\x0c\x67\xf4\x8d\xe9\x09\x69\x80\xa2\xbb\xd0\x7e\x67\x41\x20\xa5\xf6\xef\xa3\xbd\x77\xf2\x0c\xf4\xbc\xa9\xad\xd4\x92\x11\x52\x07\x37\x11\xc8\xec\x51\x78\x62\xde\x46\x19\xa8\xe6\xcb\xd0\x8f\x50\x10\x1b\xc5\x36\x30\x15\x51\xd6\x1f\x05\x20\x1b\x25\x7f\x34\xeb\x96\x6d\xc2\x4a\xbb\xad\x9b\x28\x92\xce\xb0\xdf\xcc\x63\x95\x91\x80\xff\x49\x54\x5e\xb0\x35\xae\xaa\x99\x40\x87\xff\xf0\xbf\x0a\xe7\xd1\xea\x32\xea\xd4\x63\x78\xd8\x3c\xf7\x7f\x5c\x7e\x34\x5b\xb5\x9a\xee\xac\x16\x34\x1b\xa4\xc9\x46\xa4\x7a\x76\x8a\x32\xd7\x89\xca\xd5\x75\xa2\x98\x52\xf4\x19\xc1\x93\x84\x50\x77\x1d\x2b\xa3\x88\xea\xda\x01\x0d\xa7\x9c\xdb\xc3\xe5\x6c\x8e\x1d\x0e\x67\x13\xd2\x4f\x0b\x2a\xfc\xe9\x9e\xa2\xac\x68\x09\xbb\xa5\xf7\x85\x27\xfa\x1c\x01\x3e\xcb\x1b\xc6\x48\xd0\x0b\x87\xe3\xfe\x75\xd2\xbc\x7d\x95\xaa\xe4\xe1\x9f\x93\xf1\xed\xff\xc7\xde\xbb\xed\x38\x92\x24\xc9\x82\xef\xfc\x0a\xfb\x01\xab\x31\x55\xbb\x63\x07\x03\x9c\xee\x3e\x8f\xf1\x0d\x8b\xba\xe4\x59\x3e\x38\x76\xe1\x18\xdf\x78\x88\xaf\x5f\xa8\x88\x9a\x93\x91\x8c\x88\x8c\xcc\xca\x9a\xe9\x9d\x33\x40\x77\x05\x93\x74\x1a\xfd\x62\xa6\xa6\x17\x51\x91\xf4\x16\x9b\xae\x64\x8b\x5e\xd1\xb3\x5d\xbd\xb9\x60\xa6\x95\xbd\xb6\xed\xac\x2a\xbb\x63\x5d\x98\xb2\xed\x94\x01\x19\xc1\x0b\x06\x3a\xd8\x50\xaa\x66\xc1\xb8\x8e\xe6\x73\xcc\xfa\x3d\xa7\x8b\x50\x27\xbb\x8c\x42\x43\xca\x4e\x0b\xf1\x59\x79\x72\xc6\x16\x21\xfa\x08\x98\x34\x95\xbd\xe6\xa0\x80\x8a\x96\x7c\xa8\x86\x62\x81\x5b\x51\xd6\x2c\x28\x56\x41\x94\xb2\x82\x5d\x89\x36\x17\x2a\xf8\x7d\x27\x2b\x98\x6b\x7d\x8c\x0c\xde\x58\xf2\x36\xb9\x9a\xac\xb8\xbc\x89\xa7\xb7\x06\xb3\xc3\xd8\x76\x83\xa6\xa3\x06\xcd\xbb\x45\x81\x32\x35\xe4\x02\x7d\xc1\x5b\x20\x8a\x7c\x1f\x0b\xe6\xf3\x0e\xbc\x89\x44\x09\x6a\x62\x44\x34\x93\x4f\x03\x20\x28\x90\xaf\x90\x74\xe3\x72\x0a\x34\x6b\x2a\x07\xd3\x36\xf0\x41\x6e\xaf\xee\x3e\xbf\x7d\xef\xb8\x8d\xc6\x57\xf6\xc2\xdc\xf1\x7c\x53\x5d\xb3\x6f\xd4\x45\x07\x12\x6f\xaf\x6e\x9f\xc6\xdb\x57\xe2\x1a\xe6\x3f\x02\xf6\x70\xf9\xab\x90\x43\xfa\x98\x04\x7f\x24\xf6\x28\x69\x55\x45\xb3\xb9\xfd\x28\x3d\x34\xda\x27\x49\xa1\xac\x56\x55\xe0\x23\x6f\xa2\xfd\xde\x76\xe8\x07\xf8\xb3\x2e\xe4\x3d\xe2\x49\x13\x25\x19\x9b\xbf\x7f\x2a\x6d\xdf\x1d\xfb\xf2\x34\xc5\x62\x88\xbc\x96\x5f\x4e\xd4\xee\x5e\xea\xc1\xac\xd1\x51\x7f\x72\x8b\xb9\x75\x20\x6c\x63\xa7\x54\x72\xf1\x42\xa6\x08\x65\x10\xec\xae\xa0\x94\x32\x02\x98\xe0\x36\x41\x65\x3f\xcf\x4d\x20\x67\xb7\x31\x07\x51\x10\xbc\x10\xa8\x6d\x9e\x3c\x80\xd9\x05\xe5\x10\xae\x64\xa0\x71\x77\x9c\x10\x5b\xc5\x33\x94\x3a\x75\x12\x1d\x09\x58\x65\x66\xfc\x50\xfb\xae\xc1\xa2\xae\xd9\x43\x93\xb1\xd5\x50\xa4\x6d\x14\x91\x68\x65\x23\x95\x15\x74\x22\x41\xbc\x87\x4a\x2a\x55\x25\xba\x4b\x9d\x43\x2b\xdf\x36\x92\x0e\x86\x04\xa8\x41\x40\x25\xde\x37\x68\x28\x52\x06\x1c\x54\x82\x5a\x44\x04\x33\x4d\xf5\x07\xc8\xfa\x96\x16\x74\xce\x4d\x45\x42\x1e\xb2\x6b\x0e\x16\x65\x8a\xfd\xd9\x3b\x40\xa2\x09\x5a\x9c\x5b\x01\xa9\x9f\xca\x65\xef\x01\x12\x74\x80\x93\xda\x0f\x41\x25\x5e\xec\x6d\xc9\x01\xf9\xea\x97\xa7\x2a\x25\x94\x9c\xd1\xcb\x6e\xa3\xb9\x12\xae\xd6\xa3\xb9\xc6\xff\xd8\x30\x60\xc5\xae\x38\x73\x60\x2f\x3d\x95\x36\x3a\x69\x03\x23\xa4\x15\x2a\x59\xa9\x41\xa1\xd1\xb8\xf6\x14\xe4\x84\xb9\x42\x2b\x88\xad\x76\x03\xc4\x1f\xa2\x25\x64\xac\xbb\x8c\x06\xe5\x3a\xf7\x2c\x8c\x40\x91\x59\xa2\xbc\xb5\xdd\x1e\x08\xac\xa0\x69\xa9\xb8\xf2\xfe\x72\xdc\xd1\xdf\x94\x99\x91\x82\x98\x3f\xf0\xb3\x39\xb4\x26\x97\xdd\x2e\x27\xf4\x20\x47\x0f\x65\xcb\x41\xed\x74\x27\x28\x03\xfa\xb7\x96\xd3\x63\x09\xe2\xcb\x07\xbd\x0b\x35\x95\x50\x8b\x5e\x91\x61\x91\xa0\x0d\x1d\xa4\xe8\x6e\x95\x3d\x05\xf2\x44\xd9\xc3\x2c\xe6\x85\x63\x37\xa9\xf9\x1a\x6b\x79\x8e\x79\x8c\x6b\x55\xf3\x97\xe8\x24\x55\x08\x87\x49\x1e\x2f\x4f\x13\xca\x40\x32\x36\x80\x30\x6e\x40\x1b\xee\xbd\x0e\x55\x8e\x92\xae\xe6\x84\xdd\xf6\x9a\x5f\x48\x7d\xc0\x2a\xcd\x73\xd3\x6b\x54\x70\x07\x41\x14\x97\x51\x19\xe6\x3f\x6e\xf9\x35\x6a\xeb\xbb\x27\x5e\x21\xc2\x2b\xe3\x80\xfa\x76\xdd\x6a\x6d\xa1\xd7\xbe\x4f\x9b\x3f\xda\x83\x94\x6b\xce\x0b\xe7\x06\xa0\xee\xe5\x40\x8c\x87\xa4\xe3\xc8\x7e\xb5\x51\x80\x5e\xa6\x16\x7f\x86\x81\x54\xcf\x67\x80\x58\xe4\xb6\x2d\x16\x9c\x28\xc4\xe1\x9f\x79\x81\x50\xab\x08\x5a\x0e\x7c\x76\xd5\x36\x76\xea\x1b\x65\x2e\xcf\x09\x9f\x29\xe6\x64\x4e\xd6\xcc\x67\xe5\xcc\xe6\xa1\xeb\x83\x1e\x11\xfe\xf6\x4d\xe2\x08\x20\x66\xef\x0d\x49\xf0\x79\x4e\x7f\xe5\x1a\xab\xec\x79\x84\x42\xc8\x77\x60\xef\x7c\xf1\xb4\xfc\xa1\x12\xe6\x38\x26\x68\xe2\x36\xa1\xe0\xc7\xe0\x0f\x29\x92\xf6\x58\xa1\x2d\x21\xad\x80\xa6\x1d\x46\x99\xe2\x2c\x32\xe0\x0a\xb8\x96\xbc\x17\x8a\x54\x42\x5f\x3b\xf5\x65\x37\x71\x1c\xbc\x85\xe6\x92\x7d\x1d\x18\x1e\x15\xcd\x9f\xbf\xb0\xf3\xb2\xca\x4f\xb9\xa8\xdb\x35\xa1\xb8\xe7\x57\x95\x98\xb1\xbd\xbf\xae\xcb\x0f\x5c\x58\x4e\xe5\x67\x3e\xb1\xf3\xd2\x7e\xea\x85\x7d\xea\xba\x2e\x6c\x24\xc5\x75\x7d\xb3\x1b\xfa\x7f\x3c\x14\xf9\x7e\x4d\x1f\x6c\xce\x0d\x79\x8f\x4a\xe6\x60\xd8\xe9\x3a\x9c\x53\xa6\x63\xaa\x81\x37\x20\x80\x77\x48\xdb\x52\x7e\x64\x7f\x9e\x73\x22\x12\xca\x5e\x50\x0e\x93\xb3\x0f\x05\x12\xcf\x9e\x90\x8b\xd5\xa5\x90\x52\x20\x0f\x83\xd9\x66\x5c\xa4\x6f\xb5\x9d\x44\x42\x11\x2e\x93\x79\x68\x90\xd5\xd9\x01\x85\xc7\xbe\xd9\x41\x45\xc7\x3f\xbb\x9d\x8e\x0b\xef\xf8\x17\xfc\xfb\x3e\x1e\x08\xb5\x84\x04\x0c\x6c\x71\xf4\x73\x38\xfc\xa4\x2e\xb6\xb5\xa4\xc0\xf3\x9d\x61\x84\xf3\x5a\x0e\xbf\x3a\x5e\xec\xae\xe6\xe9\xdb\x3d\x38\xfc\x8e\xe0\xfe\x40\x5b\xd8\x7d\x62\xd6\x2a\xa0\x12\x0c\x5e\x04\xbb\x65\x03\x65\xc0\xb1\xae\x18\x49\xd2\xb1\xb3\x7c\x01\xf6\xbe\x53\xb6\x16\x37\xa7\x35\x92\x76\xf4\x33\x40\x98\x50\xbd\x62\xbf\x10\xdc\xe8\xe9\xdc\x78\xb6\xe3\x82\xd4\x18\x1b\x37\x28\xea\xca\xb1\xfe\xfa\x07\x3b\xf2\x92\xaa\xde\x45\x2b\x7b\xcb\xe8\x1b\x95\x0e\x87\xbc\x5f\x36\x73\x46\x76\x04\xa1\x23\xf8\xc9\x11\x66\x64\x27\x9d\x2d\x5c\x0c\xe7\x05\x1d\xe7\x55\xbe\x3c\xf5\xde\x42\x7f\xbb\xd4\xc9\x26\x8a\x02\xf5\xde\x1e\xf8\xbf\x99\x56\x15\xb8\x87\x49\x48\x24\x1c\x13\x60\x8f\xee\x10\x48\x0e\xb1\x32\xa7\xe2\xd6\xa7\x26\x27\x0e\x10\x1b\x86\xa3\x86\xec\xaf\xed\x55\x3d\xd4\x4e\x5d\xb4\x75\x1e\x6f\x0d\xbf\x43\xa0\xcf\xcc\xbc\x45\x18\x5d\x2f\x28\x8f\x06\xe8\x8c\x7e\xeb\x64\x84\x61\x5b\x0a\x8f\x6c\xdf\x14\x7f\xbf\x3f\x21\x91\x3c\x42\x9e\xe3\xdb\x67\x34\xcd\x76\x7b\x17\x86\xa6\x71\x14\x32\xda\xac\xc4\x2a\x5e\x9d\x9f\x7e\xe2\x2c\xd3\xa2\x8d\x43\xbe\xa0\xcc\x83\x0c\x55\xe5\x88\xe7\x8b\xf5\xd1\xe5\xe1\xbc\xbf\x6d\x4b\x1e\xea\xbd\xbf\x3e\xc2\x1f\xa5\xb7\x1b\xfc\x11\x25\xb4\x3b\xe6\x95\xe8\xd4\x2b\xa8\x29\xac\xbf\xeb\x03\xa7\x66\x71\xa2\x94\xb8\xfe\xf2\xed\x97\xd5\x1e\xf2\x33\x87\x1b\xad\xfc\xac\xe1\xa4\x74\x5c\xed\xe5\xa7\x0d\x38\xc7\x4f\xbd\x5e\x9c\xe0\xcf\xbc\x60\x3b\xbf\xd1\xca\xcf\xbd\x60\xc9\xbd\xfd\xac\x01\x21\x5c\x35\xa9\xb7\xed\xcd\xd5\xf7\x9d\xe4\x37\xfa\x0c\xa7\xd3\xf0\x3f\xfe\xee\x57\x9d\xe8\x9e\x5c\x7e\x18\xee\xf2\xc3\xe3\x79\x41\xff\x67\x9e\xde\x4f\x1c\x0e\x37\x4f\x89\x7e\x7d\x6b\xbc\xcb\xf7\x0e\x48\x49\x8f\x9f\xfc\x38\x3e\x38\xc1\xef\x1d\xcf\x0c\xd7\x67\xce\xef\xf2\x5d\x17\xfc\x13\x9f\x08\x4e\xf0\x27\x8e\xc7\x07\xf2\x1d\x77\xf0\xf2\xb9\x5b\xf8\xf3\x9e\xc9\xb7\x37\xa4\x07\x08\xcd\xaf\x1f\x8a\xa6\x21\xee\x9c\xfa\x99\x2e\x82\x37\xb6\xd7\x13\x8e\x95\x35\x85\xf4\xa7\x07\x69\xe6\x59\xd6\x4d\x01\xfe\xad\x6d\x03\x1e\x6e\xa6\x2d\x3a\xef\x98\xef\x78\xa3\xfc\xc9\x5f\xba\x3c\x49\x11\x59\x33\x87\xe8\x31\x0f\x6f\xee\x6a\x84\x27\x8f\x1f\x13\x63\x28\xcf\xc3\xed\x84\x86\xe8\x99\x5d\xab\xc5\x99\x4c\x22\xca\x7e\xcd\x55\x3d\xe1\xb1\xc7\xfe\x19\x80\xda\x5b\xee\xe2\xfd\xd9\xaf\xf2\x02\xdb\x40\xd8\x15\xb2\x43\xca\x16\xa7\xcd\x0e\x5d\xb8\x90\xf4\x45\xd1\x2f\x0d\xb2\x6b\xe8\xfc\x36\xb2\xfe\x98\x77\x87\x2b\xeb\x2c\xd9\x87\xd5\xcf\x2b\x83\x38\x06\xf3\xeb\xc9\xb6\x8e\x3f\x01\x6f\xad\x7f\x44\xff\x17\x8f\xe3\x9b\x9f\x79\x0a\x88\x9a\x7a\xa0\x84\x3b\x31\x0f\x9a\x83\x8c\x72\x80\x0c\x4b\xb3\xb3\x12\x16\xd6\x32\xf3\x99\xcd\x14\x20\x28\x34\xe3\xf8\x68\x5f\xe0\xed\xc6\x31\xb4\x75\xde\xee\xf4\xb9\x89\x70\x79\x7b\xce\x89\xdc\xf6\x9c\x4f\x5c\xcb\xb4\x49\x80\x34\x71\x65\x0e\x1b\x10\x8a\x86\xe8\x6d\x12\x23\x63\x6e\x25\x01\xc3\x48\xbb\xd5\xf1\xf9\x1b\x85\xfc\x6e\x06\xb3\x21\x58\x1d\x52\x3e\x4e\x79\x9b\xa5\x6e\xf3\xf2\x24\xb5\x8f\x30\x67\xde\xbd\xa2\x1f\x59\xd2\x8f\x5e\xd3\x8f\x28\xea\xa3\xee\x61\x9e\x88\x0b\x89\x50\x20\xd7\xb3\x54\x39\xb9\xd8\xfd\x00\xc8\x3e\xe8\xac\x88\x21\x9c\x09\xa2\xe8\x21\x1a\x4a\xdf\xa5\xa3\xd1\x2a\x07\xad\xf4\x34\x74\x07\x6b\x99\x58\x98\x09\x2a\x67\xe4\x0b\xfb\xb0\xc9\xd4\x01\x27\xc0\xf9\x78\x6b\x7d\x74\x0e\xb7\x42\xc6\xce\x75\x52\x28\x71\x26\x94\xb1\x8a\xe0\xb6\x69\x86\x2b\xde\x43\x9e\x19\x40\x0f\x9e\xc8\x2f\x7e\x2a\x68\x99\xdf\xa5\x59\x4c\x59\xd4\xcb\x31\x38\x1d\x30\x87\x90\x00\x3e\x64\x64\x09\xca\x67\x9c\xf6\x07\x64\xd9\xaf\x1f\xf1\x2a\x4a\xca\x8a\xb9\x86\x4e\x74\xa0\x7b\x6a\x05\xad\x0e\x28\x1d\x86\xd3\x11\xd9\x0d\x65\xcd\xe7\xd6\x5a\xf4\x00\x3a\x70\x4a\x1b\x80\x79\xe6\x06\x8d\x05\x56\x8b\x05\x5c\x03\x59\x2c\x38\x84\x2c\x0f\x32\xcd\x3e\xb8\x05\x9f\x35\x07\xfc\xf0\x92\xd9\xc1\x94\x05\x4a\xba\x05\xe8\x0c\x26\x8f\xa7\xcd\x3a\x0d\x0d\x59\x90\x1c\xa0\xa2\x8e\x37\xe3\x83\x6d\x1d\x6c\xae\x80\x01\x66\x32\x26\xd5\xba\x53\x8a\x96\xff\x20\xd0\x23\x97\xb0\x8e\x3e\xd6\x00\x77\x4d\x5b\x0f\x32\x14\xd2\x0b\x68\xa0\x11\xbf\x83\x0f\xd3\x39\xf7\x7a\x0e\xe4\x47\x05\xea\x09\xe7\x07\x86\xde\x44\x24\xa4\xf4\x1d\x83\x7a\x22\xd9\xff\xee\x58\x4b\x42\x88\x55\x4d\xce\xcf\x4a\x0a\xb1\x8e\x4b\xce\x4b\x92\xd7\x39\x16\x40\x40\xc6\xf8\x6d\x52\x52\x7c\x92\xf1\x8c\x2f\xa1\xa7\xda\xc3\xed\x50\xf2\x3d\x63\x84\x0b\x98\xca\x48\x72\x74\xfe\xce\x11\xcf\x5f\xbf\x46\x52\xd5\xa1\x1e\x19\xca\x46\x02\xe2\xbe\x45\x45\x65\xd6\x5b\x36\x51\x41\x98\x48\x8e\x93\xf7\xac\xf6\x90\xeb\x06\x4c\x5a\x76\x75\x66\x4c\x7f\x96\x17\x75\xe2\x1e\x6e\x80\x52\xca\x44\x4b\x84\x36\x2c\x39\xa9\xcc\x87\x05\x45\x56\x4c\x58\x4e\xcc\x66\x70\x33\x98\x8d\x71\x62\x94\xc1\x2e\xbf\x38\x2e\xf7\x60\xae\xae\xa7\xc3\xe1\x05\x8d\x72\x02\xbe\xbb\x61\xb5\x8c\xdd\x6c\xe9\x28\xf6\x43\x41\x92\x5c\x6c\x7b\xa8\x2e\xa8\x20\xd3\xc9\x31\x5a\xd9\x91\x7c\xa1\xb9\xe2\x6e\x05\x02\x15\x18\x39\x58\xe5\xb5\xa5\xd5\xba\xc3\x64\x85\x69\xc6\xca\x99\x31\x54\xc0\xe9\xcf\x5b\x3e\x42\x59\x14\x0a\xd1\x6f\xb7\x39\x45\x19\xda\xd8\x75\x43\xe7\x14\xa8\xc7\x04\xc6\xa1\x10\x5d\x4b\xfd\x24\xdc\x1f\xaf\xfc\xc9\x6a\x07\x41\x7e\x9c\x19\xb9\xba\xc0\x60\xbc\x4f\x91\x37\x2a\xf2\x4e\xb1\xa0\xa4\x81\x90\x16\x3d\xdb\xa4\x2c\x80\xbc\x60\xfe\xa3\xe5\xc7\xbe\xdf\x13\xd1\x08\xad\xee\x1d\x6c\x47\x76\xbb\x20\x74\x85\xad\x67\x40\x8a\x1c\xfa\xf2\x84\x70\x08\xb3\x4e\xb6\xbe\xb0\x6d\xa3\x62\xa6\xc5\x79\x3f\x5a\xda\x63\x85\x56\xdc\x64\x39\xb8\x15\x27\xf3\x42\x32\xdd\xee\xdb\x8d\x5b\xcb\xd7\x40\x22\xc9\x0a\xf0\x1b\x23\xd4\x84\x91\x51\xe9\x9e\x4e\x24\x04\x26\x6b\x9b\x1c\xb9\x86\x5a\x43\x41\x17\x72\x2c\x40\x2b\x42\x4b\x1c\x36\x84\x2c\xfa\xf6\x30\xfa\x1e\x69\x85\xec\x8e\xa4\x13\x74\x97\x30\xdb\x7d\xa3\xc2\x34\x02\x10\x09\xb3\x9e\x3a\xfb\x1d\xb6\x89\xd8\x84\x45\xbc\x83\xa5\x25\x23\x4c\x5b\x4c\xf3\x2c\x4f\xe0\x75\x26\xc9\xcf\x79\xdc\xb1\xbe\x6a\x73\x6b\x2c\x26\x66\x5b\x50\xeb\xf7\xae\xed\x0a\x9c\x58\x54\xd6\xcd\x37\x05\x02\xa7\x03\x0a\x22\xa4\xa1\xeb\x41\x67\xe8\x94\x28\xab\x30\x28\x9f\xb0\xea\x0f\xe8\xd1\x5f\x3f\x24\x87\x4d\xb5\xdd\x6d\xfc\xef\xf6\x32\xfa\xbe\x1c\xd7\xc6\x1c\xd7\xce\xfc\x86\xf2\xdc\x27\xc6\x9a\x19\x99\x72\xf2\x30\xd5\xe1\x9a\xe4\xa7\xcf\x70\xba\x0c\x2f\x4f\x23\xd7\x55\xb8\x27\x83\xdb\xbd\x77\x14\x4f\xf7\x28\x9e\xfe\x51\xbc\x73\x90\xde\x3f\x93\xcb\xed\xb2\x86\xfb\x78\xee\xf6\xdd\x7b\x7d\xaf\x9c\xbe\xaf\x7d\x3e\x52\xd3\x38\x21\xcc\xda\xdd\x48\x92\xe5\xfc\x92\x4a\x59\x7f\x34\xdd\x28\x89\x6b\xd9\xb3\x49\x2a\x9f\xdc\x6d\xe9\x1e\xa7\xd7\xed\x14\x42\xab\xe9\x39\x9e\x5d\xcf\xb1\xdf\x3b\xc7\x77\x6d\xa8\xc7\xab\x2b\xdb\x6d\x55\xa5\x70\xdf\xe6\x71\xd7\xd9\xb1\x9b\x9f\x11\xe8\xf9\x5e\x48\xd7\xd2\x8a\x53\xf3\x25\x7a\x95\xb5\xec\xb9\xda\x51\x35\x03\x06\x72\x94\x12\xda\x6d\x8b\xcb\x8b\xb0\x12\x01\x82\xbb\xb4\xf1\xce\xa7\x8d\xcb\xa9\x8d\xcb\xab\x8d\x37\xb7\xf6\xe5\xa9\x4e\x09\xb5\xc9\xa6\x34\x4a\x6d\x8b\xb5\x43\xdf\x60\xba\xb6\x92\x72\xef\x10\x16\x67\x45\x6d\xdb\x18\x41\xc0\xbe\xa4\xc1\x0f\xd1\x79\xe0\xbf\xe6\x01\x50\x88\xa4\x6c\x82\xbd\xb9\x8d\xdd\x8f\xe1\x48\x07\x95\x1f\x2c\x70\x62\xdf\x45\xbe\x6c\x34\x88\x75\x43\x42\xbd\xcb\x4e\xa8\xb1\x4d\x9d\x59\x83\xd6\xb1\x4d\x09\x53\x36\x4d\x3d\x68\xea\x28\x10\x68\xc8\x09\xd2\x31\x38\xb5\x4f\xac\xc0\x07\x0c\xed\xaf\x67\xf7\xd4\x40\x7d\x08\x4a\x10\x60\x1c\x84\x20\x99\x3b\x86\xc8\x1a\xcb\x82\x47\xb3\xee\x69\x2f\x89\x72\x25\x69\x3b\xbd\x3d\xaf\xa9\xc4\x55\x47\x88\xea\xad\x9b\xe8\x76\x48\x30\xd6\x85\x25\x7a\x74\xa1\x91\xf3\x7f\x00\xe2\xd3\x0b\x7c\x68\xd1\xb2\xeb\x08\x52\xbc\xb8\xa1\x03\xca\x95\x2c\xac\x7b\x79\x03\x9b\xd0\xcb\x93\xe4\xba\x74\xfe\x85\xb3\xb9\x73\x23\x53\x84\x58\x30\x84\x03\xae\xd2\xd8\x23\x4a\xc6\x11\x4f\xb8\x9b\x6f\x10\xf4\xb2\x83\x75\x0e\x8c\x78\x92\xeb\x81\xb2\xab\x74\x14\x47\xf0\x58\xcc\x97\xbd\xb1\xa6\xa1\xad\x66\x8f\x64\xac\x72\x96\x68\x47\xf4\xb0\xd6\x65\xef\x9d\xcb\x47\x06\x3b\x46\x4a\x0b\x23\x2d\x7c\x80\x92\x7d\xaf\x4f\x56\x2b\xd0\xb3\x73\xa0\x2f\x04\x1b\x17\xf8\xad\x88\x98\xa3\xcb\x52\xa1\xdd\xcb\x35\x28\x07\xf8\x9c\xcc\x94\xef\x91\xb2\x31\x05\x41\x00\xaa\xcb\xa8\x1b\xd2\x71\x71\x9c\xb3\x9e\x70\x5c\x6d\x5e\x59\xe2\xda\x80\x2a\x85\xa4\x0b\xae\x0b\x6c\x7b\xe3\x84\x32\x32\x74\x62\x10\x5d\xcf\xbd\x13\x34\x94\xc5\xb9\x0d\x18\x25\x77\x18\x84\x31\x82\x9f\x9e\xc5\x01\x4e\xcc\x54\x76\x70\x4e\xdb\xfe\x5f\xf3\x41\xfa\x27\xd1\x76\x78\x58\x96\x77\xc4\x09\x00\x24\x34\xb6\x3f\xfa\xab\x1d\x53\x5a\x4a\x90\xb1\x8b\x0c\x80\x0d\xb5\xdb\x86\x0d\x48\x1e\x34\x6f\xec\xa3\xc0\x6a\x9e\xec\xd5\x1d\x53\x18\x84\x5f\x6a\x20\xe4\x18\x8d\x13\xa2\xe9\x39\x4e\xc7\xc6\x99\x2d\x1a\x4e\x3f\xcd\x66\x7f\x6a\x8a\xe2\xcd\x2b\x0e\xc3\x41\xc9\x0f\x00\xf5\xfd\x11\x6f\x1a\xa4\xcf\x1c\xe9\x5d\x61\xd2\xab\x7d\xce\x11\xee\x46\x3e\xee\x7e\xf3\x13\x8b\xf3\x01\xb8\xfa\xeb\x63\x67\x5a\xcd\x75\x91\xb3\x14\xd8\x31\xe1\xe3\x8f\xea\x74\x8d\x78\x94\x24\xd8\x32\x23\xc7\x7c\x02\x1e\x27\x2e\x0f\x01\xa5\xb9\x11\xa9\x52\x0a\x84\x99\x0f\x22\xb2\xc1\xb8\xe8\x12\x6e\xe6\x49\x73\x7e\xd7\x93\x42\x0b\x8c\x8a\x04\x5a\xb2\x55\x95\xce\x1d\x7c\x89\x40\x49\x43\x28\x45\xa5\x90\x0e\x69\x21\x1f\x82\x47\x72\xf4\x20\xe0\xfb\xed\xdd\x42\x16\xc5\x96\xb5\x5e\xec\x32\x51\x4e\x9a\xb6\x89\xbf\x3c\x49\x99\x23\x54\x4e\x2e\x22\x7f\x02\x2c\xca\xe2\x61\x68\xbf\xd4\xcb\x16\x5b\x10\x44\xa1\xc0\x76\x22\x6a\x06\xe9\x1a\xd1\x51\x81\x71\x46\x23\xa9\x6a\x95\x10\x2d\x66\x05\x1d\x1a\x29\x4f\xb4\x13\xd5\xc1\x86\xb3\x3b\x25\x14\x5d\x1c\x8f\x4e\x6f\x7b\x27\x4e\x36\x6f\x8d\x89\x11\x44\x6c\x76\x42\x6e\xf5\x32\xfb\x3b\x22\xe8\xd6\xb3\x7b\x89\x24\xc8\x3b\xf5\x55\xd0\xfa\x4b\x0c\x3c\xca\xe9\x22\xfd\x68\xe6\x7c\xd9\x02\x40\xe7\x06\x7a\xbe\x32\xe7\x79\x22\xe5\x1d\x48\xcd\x9a\x98\x4b\x98\xe8\xd5\xb6\x9b\x9d\x65\xef\x41\x96\xc3\x49\x36\x16\x97\x5b\x13\x72\x18\x33\xb1\x95\x9d\x96\x3a\xd6\xcc\x42\x5d\xd4\xb4\xc3\xd3\x46\x47\x0a\x1c\x1a\x9b\x21\xc3\x1e\x88\xe7\xa9\xd4\xa9\xe7\xa5\x85\x99\x9e\xcd\x8a\x29\x1d\xce\xbc\x26\x98\x90\xba\x96\x4a\xb9\x89\xdc\x7f\x91\x77\x4d\xfd\xb6\x2b\x1b\xf5\xcc\x5c\x58\xe4\xef\xbb\x72\x1a\xe8\x95\x0c\xaa\x72\xcc\x16\x54\xd2\x01\x85\x2a\x6c\xe5\x50\x14\x0b\x03\x71\xac\x86\x09\x8a\x95\x79\xd9\x33\x20\xc1\xf6\x5f\xf0\x08\x7b\x35\x1a\x09\x89\xce\x56\xa7\xa8\x22\x00\x6b\x41\x97\xaa\xf6\x00\x35\xa2\x30\x86\x4b\x6b\x64\xd9\xd1\x99\x87\xcd\x34\xef\x88\x9a\xc0\x49\x4e\xa2\x44\x74\xdf\xd9\x5d\xfa\xc4\x1a\x7d\x40\xe4\xfe\xfa\xd8\xff\xd8\xda\x4a\x4c\x8c\x2c\x61\xb4\xec\xfc\xf7\xb6\xd0\xc6\xa6\x40\xde\x95\xb1\x03\x70\x47\xbd\x82\x08\x6a\x79\x44\xc0\xc9\x7c\x6a\x02\xd7\xe0\x6f\x6d\x11\x10\x2d\xc9\x28\xa6\x67\x5d\xe2\x3d\x4c\x69\x78\x27\x01\xba\x48\xaa\x99\xc7\xda\x36\xdc\xfc\x98\xf5\x1a\xe7\x5a\xf5\xcd\xd5\x8e\xd8\xc5\x42\x4c\x6d\x0f\x66\x5a\xcb\xd1\x6a\xc8\xba\x29\x82\xe0\x6b\x2c\x65\x40\xfd\x25\x51\xea\x8f\xa6\x04\x33\x44\x76\xb5\xe8\x22\x6b\x68\xf5\x68\x33\x68\xdb\x4a\xd1\x20\xf6\xc3\x12\x5a\xc1\xd7\xe0\x40\x42\x3f\xd2\xdc\xc0\x6e\xa6\x3e\xb3\x3d\x96\x4c\x9c\xad\x3a\xba\xe4\x2a\x69\x2b\xe6\x3f\xa2\x35\xb6\x52\x16\x28\x53\xd5\xb4\x69\x28\x8c\x17\x07\x99\x6c\x91\x8e\xc9\x19\x44\xb4\x47\x53\xd7\xef\x71\x65\x29\xdd\x8a\x85\x9d\xb3\x6d\x8a\xcc\x43\x07\x87\x79\xe6\xbc\xe4\x9f\x1d\x70\x0e\x78\x2d\xf4\xc7\xb1\xdd\x6d\x51\x46\xa3\xc2\x43\xae\x8c\xfc\xd5\xe9\x36\x07\x03\x24\xed\x21\x8f\xd0\x5b\xc8\x10\x60\x96\xd0\x9a\x6c\x82\xbe\x04\xf3\xd3\x14\xc2\x42\x5b\xac\x41\x37\x64\x3c\x06\x24\xa0\x86\xeb\xb4\x05\x09\x14\x8b\x3a\x55\xa3\xb0\x40\x98\xff\x41\xd0\x65\x71\x2d\x40\x36\x05\x79\x83\x8c\xac\x52\x77\x74\x7d\x06\x49\x09\x80\x83\x66\x58\x28\xf0\x59\xb1\x10\x0f\xf4\x29\xc0\xa8\xeb\x1d\xc7\xef\x3c\x80\x59\x43\x02\xaa\x40\x4e\xa3\x6e\x44\x6e\xb6\xbd\x04\x30\x5c\x01\x1f\x53\xfa\xe6\xb4\x4f\xee\xdd\xda\xcc\xb4\xf8\x19\x3d\x02\xe6\xe2\xd7\xb2\x6b\x40\xe4\x6a\xab\x10\x91\xbd\x45\x91\x09\xa9\x33\x2e\x17\xf3\x20\x20\xab\x66\x1b\xf6\xb8\x20\x9c\x80\xde\x55\x0b\xb6\xbf\x30\x7f\x34\x80\x7b\xb1\x9b\x62\x8b\x50\x19\xd5\x23\x18\xf2\xe0\x55\x70\xc3\xf7\x0c\x3f\x8c\xc1\x41\x39\x1a\xbd\x9c\xb4\x79\x06\x53\xcd\x35\xd6\x50\x2a\x1d\x3a\xa4\x13\xc1\x48\x5a\x8f\xc2\x1e\x32\x8b\x0d\x6c\x4c\xfb\x62\x23\x2b\x6d\x2c\x6d\x53\xca\x18\xa5\x0d\x25\x9c\x9c\x3b\xb6\x01\x14\x06\x10\x6b\x38\x5d\x78\xdb\x73\x47\x32\xa0\x05\xd6\x71\xaa\x6c\x42\x52\x1a\xa7\x89\x91\xd9\x76\xec\x95\xb8\x44\x97\xe7\xa1\x02\x98\x04\x6d\x17\xc8\xb0\x81\xdb\x44\xc1\x33\xde\x42\x17\x5b\x23\x59\x76\x2c\x40\xc0\x17\xd0\x30\xe6\x8b\xf1\x13\x96\xe6\x01\xa0\xfc\xeb\x47\x8c\xdc\x19\x77\x00\x0e\x79\x02\x55\xc9\x1e\x47\x43\x64\x4e\x37\x55\x88\xca\xc0\xd6\x83\xc3\xc4\x42\x07\xfb\xd3\xcc\xc0\xcf\xa0\x48\xbd\x07\x19\xb6\x5b\x8f\xc3\x25\x0c\xc4\xbb\xf5\x90\x17\x39\x84\x5e\x1b\x30\x4a\xcc\x38\x94\xa0\x55\x42\xa9\x20\xc3\x70\xa5\x14\xc0\x71\x24\x05\x15\x21\x17\xac\xf4\xa0\x13\x2c\xc6\x28\xde\x0d\x9b\xef\xd0\x24\x20\x1f\xd9\x26\xf0\x5f\x74\xee\x53\x71\x38\xfe\xec\x8a\x82\xba\x77\x35\x8a\xa7\x33\x9d\xbf\x14\xb4\xc8\xd8\x25\x05\x36\x00\xcd\x75\x89\x02\x31\xe0\x86\xb7\x65\xa3\x4c\x15\x2a\x2d\xa5\xf2\xbb\x10\x22\xdd\x57\x07\x24\x8d\x2f\x4f\xf4\xa6\x09\x3d\x5d\x57\x05\xf0\x22\x33\xaa\x66\xdc\xdc\x3b\x9c\x41\x1a\x91\xb8\xaa\x13\x54\x39\xc8\x7c\x15\xf3\x96\x34\x6d\x3d\x74\xb6\x75\x43\xda\x74\xc2\x27\xc8\x40\x14\xdb\x38\x9a\xcb\x81\x0e\xf7\x02\x36\x63\xb4\x95\x67\xf7\x74\x90\x04\x25\x53\x43\x80\xc9\xcf\x4b\x43\xb1\xa5\x60\x0b\xb6\xb6\x30\x8a\x5c\x60\xd2\x01\x46\x1d\x8a\x4e\x1b\xd0\xa6\xe6\xa0\x0c\x80\x60\xbe\x40\x47\x81\x9c\x50\xba\xc9\x70\xc9\x89\x23\xc5\xe6\x08\xbc\x34\x5e\x0c\x2e\x7a\xa1\x0c\x62\x09\xd8\x6b\xd0\x11\x95\x5d\x94\x29\x81\xf2\x2a\x53\xb3\x9a\x88\xbe\x5c\x36\x28\x26\x65\xed\xe7\x8f\xe0\xff\x2f\x4f\x22\xcd\x46\xd5\xad\xd8\x35\x09\xda\x53\x21\xfa\x54\xd1\x8f\xbe\x83\xc1\x5b\x3b\xe2\xf3\x19\xf2\x98\x7b\xc3\x3d\x0e\x44\x93\xb3\xb1\x12\x7b\x61\x5b\x9e\x4f\x72\x89\x24\x4d\xae\xcf\x44\x41\x4c\x24\x61\xca\x08\x83\x62\x75\xea\x51\x60\x41\xc3\xb0\x94\x7d\xa0\x28\x67\x5f\x6c\xc2\x5d\xbe\xf4\xb7\x0e\xb4\x3f\x52\x0e\x29\x21\x83\x86\x5e\x91\xfc\x0f\x2a\x40\x58\x9a\x4b\x82\x58\xd6\x09\x88\xbd\x79\x3c\x66\xb0\x18\x48\x09\xb3\xc9\x16\x67\x28\x9b\x39\xac\x9f\x58\xd9\x0f\x58\xe9\x5f\x1f\x9b\xa8\xa1\x2e\xb9\xd2\x60\x29\x94\xec\xcd\x63\x94\xf5\x31\xab\x5a\x76\xa7\xdf\xb1\x0b\x43\x0b\x3b\x3a\xbb\x94\xca\x0e\xf6\x06\xfe\x6d\x47\xd3\xc7\x2f\xdd\x9c\xa8\x9d\x77\xa4\x8d\xa0\x9d\x04\xe9\xb6\xe2\xd0\x28\xd2\xcc\x2a\xef\x93\x95\x4c\xd6\x3a\xb0\xc1\xf8\x46\x10\x45\x09\x73\xc1\xb2\xb5\x29\x37\x4e\x37\x5b\x19\xe2\xd2\x17\xf6\x0c\x00\xf5\xec\xa4\xa7\xd5\xaa\x0d\x6e\xf4\x43\x87\xdc\x58\xcc\x75\x08\x13\x90\x07\x50\x6d\x76\x80\x3d\xf1\x41\x5e\x1f\x69\x6d\x07\x55\x32\xe8\xe6\xcb\x04\xcc\x74\x0e\x33\xb1\x51\x45\xed\xe1\xb7\xd0\x84\x71\xf6\xd4\xc5\xb1\x95\xd1\xcd\x98\xd7\xea\xdf\xa8\xc7\xbb\xc8\x0d\x9b\x86\xba\x8f\x6c\x8e\x0c\x91\xe5\x74\x02\x21\x5f\xc8\xae\x6b\x6f\xba\x9e\x66\xad\x29\x9b\x46\x7d\x36\xfa\xb0\x0d\x1d\x08\x92\x28\x91\x4a\x5e\x32\x8a\x98\x3e\xf5\x69\x7e\x4c\x7f\x8e\xba\xa3\x53\x0c\x39\x54\x08\xf7\x25\x50\x55\x54\x0b\x72\x18\x42\x80\xf7\x87\xb1\xb5\x5a\x04\xfd\x72\x79\x92\x94\x6d\x53\x2a\x7b\x1c\x54\xd8\x6c\x20\xba\x87\x32\x96\xa6\x80\x9a\x46\xe9\xe6\xbd\x66\x54\xfd\x6a\x43\x1a\x80\xf9\x88\x3c\xef\xd2\x0f\x74\xa4\x23\x39\x9a\x73\x0d\x95\xdd\x8e\x02\x62\x72\xdb\xeb\x7a\xe8\xf3\x28\xe6\x6f\xec\xc5\x4e\x0f\xc2\x1a\xbd\xec\x76\x82\x0d\x7e\x37\x5c\xad\x6e\x6b\xd2\xfc\x27\x62\xa5\xed\xec\x70\x47\xb9\x26\xa7\x77\x6e\x98\x5b\x60\xd3\x04\x22\x6d\x5e\x9d\xf1\x65\x9a\x96\xa7\xfa\x89\x55\xf1\x3f\x1e\x56\xc5\x8d\x56\x1d\x4b\x60\x3a\x8b\x36\xb8\xb8\xcd\x25\xc2\x34\x80\xc7\x83\x12\x26\x32\x19\x84\xb5\x8a\xb0\xaa\x8f\xe6\x91\x7e\xb6\xb5\x63\x53\x1f\x5e\x8a\x40\xe8\x2e\x27\x4f\x3a\x0e\x41\x88\x6f\xd1\x50\xf0\xa6\xf8\x99\x11\xde\x7b\x5d\x0d\x55\xb6\xbd\xa0\xde\xda\xc3\xe8\x68\xf8\x03\xb2\x53\x2b\x19\x33\x2b\x81\xfa\xb5\xdf\x81\x15\x84\x09\x01\xa5\x6b\xb9\xfe\x21\xc7\x79\x54\xf3\x97\xd4\x6f\xe0\x11\xda\xd8\xd6\x3c\xba\x86\x51\x13\x28\x07\x4b\x40\x0f\x2e\x5a\x87\x32\xdb\x3b\x90\xc7\x74\x9a\x03\x3d\x01\xda\x76\xe7\x8f\xc8\xf4\x94\x0b\x59\x9e\xa8\xf2\xdd\xce\x97\x0d\x29\xf9\x0a\xd1\x21\x08\xf6\x5a\x80\x1a\x0a\x77\x6c\xb4\x43\x8e\xa0\x6a\xe6\xd5\x7f\x3f\x16\x04\x4c\x36\x55\xbc\x85\x0e\x6a\xdc\x2c\x04\xa2\x73\x19\x7b\x2e\x1b\x0d\x34\xf5\x30\x2b\x03\x3e\x25\xa6\xba\x33\x3e\xa0\x60\x3d\x9b\x21\xe6\x1e\x1b\x81\xa1\x9c\x4c\xae\x19\x83\x92\x8b\x1b\xfe\xc2\xdc\x46\xef\x36\x03\xcd\xe5\xc4\xe5\xb5\x7e\x4c\x56\xcb\x99\x35\xb3\x70\xa7\x97\x1b\xe2\xdc\xd1\xa7\x9c\xff\xc8\xa0\x29\x37\xfa\xaa\x5e\x7f\xb1\x55\x70\x34\x7b\xb1\x4b\xb7\x7b\x61\x63\x4b\xff\x4c\xee\xe8\x3f\x28\x75\x74\xf9\xce\xdc\xd1\xdf\x1e\x56\xcf\xad\xe9\x59\xbb\x6d\xb3\x0b\xf2\x8d\x84\x27\x9a\xbc\x84\x66\x18\x1c\x0c\x03\xc1\x39\xfa\xc7\x10\x1d\x2b\x45\x2c\x98\xac\xd0\x06\x1a\xd7\x7e\x80\xfe\x1e\xeb\xc2\x13\x86\x74\xf0\x18\xcd\x38\x18\x05\xc6\x93\xfc\x35\xdc\x89\xd4\x65\x6d\x42\xb4\xd0\x92\xdd\xbd\x41\xf7\x1a\x66\x0d\xe0\xbe\xb7\x65\xed\x0c\x1d\x52\x50\xb0\xa2\xd7\x61\x66\x9f\xcf\xb3\xaa\x6b\x9c\xca\xe4\x9d\x46\x0d\xa2\xdd\x15\xb3\x91\x90\xf5\x55\x3f\x89\xcb\x2f\x17\xcc\x0e\xb6\xc3\xa1\x77\x6c\x9d\x0f\x4b\xfe\xc9\x39\x20\x58\x2b\xe3\x62\xd1\x23\x3a\x5b\x3d\x01\x57\xc2\x1b\x10\xd9\x68\x9a\x03\x16\x1b\xc9\x52\xfa\xe1\x6c\x6e\xf0\x3d\x1a\xcb\xcb\x6c\x10\x74\x01\x49\xd8\x0b\x74\x0b\x29\xd5\x27\x15\xb9\x27\x86\xf7\x92\x3b\xdd\x37\xfb\xa8\x91\xe0\x9f\x45\x1c\xa4\xd0\xb2\x0b\x6d\xed\x38\x69\x44\x89\x65\x11\x4e\x98\x41\x42\x9a\x09\x35\xcf\x7a\xc0\xbc\xdb\xea\xaf\x7d\x89\x70\x5c\x5c\x1f\x44\x20\xb8\x8a\xfb\x2b\xfe\x39\x8f\xcc\xeb\x15\xe6\x01\x7b\x94\xb8\x87\x14\xd7\x2d\x2b\x54\xde\x52\xdb\xeb\xcc\xe3\xcf\xe9\x68\x36\x2d\x00\x2d\x51\x9c\x3f\xe4\x58\xff\xff\x4a\x7d\xcd\x75\xf3\xf7\x87\x75\xf3\xfb\x47\xf9\x9c\xe2\x84\xd8\x62\x1e\x63\x50\x5a\xdb\x06\xff\xa5\xdd\x64\x56\x77\xa5\x06\x18\xf2\xd5\x1d\xee\x49\xe9\xde\x05\xc1\xca\x6a\x87\x13\xd5\x19\x06\x99\x7d\xcc\xec\xe4\x45\x41\x04\x7e\x0a\xf0\x84\x83\x3a\x61\x98\x61\x60\x03\x94\x85\x67\x83\x17\xc2\xca\xff\x64\x41\x89\x9f\x81\xfa\x8a\x1d\x6b\x10\x73\xce\xd0\x23\x1b\xba\x7a\xd0\xc1\x43\xb1\x5a\x85\xa8\xa2\x21\x0a\xd3\xae\x19\xff\xa2\x7b\x97\x69\x7f\x3b\xd6\x00\x1f\x2a\xda\x47\x11\x48\xd8\x06\x32\xe9\x03\x93\x98\x8b\x21\xbd\x57\x7c\xe8\x62\x35\x07\x25\x34\x6f\x81\x71\xf6\x22\x4f\x59\x54\xee\x60\x4c\x10\xd6\x41\x4a\x3d\xfb\xeb\x1d\x25\xcd\xf3\x9f\x2c\xbe\x63\xe5\x57\x2c\xde\xc9\x02\xa8\xab\xfd\xf0\x18\xcc\x6a\x7e\xb1\x0e\x90\xf4\xad\x14\x51\x54\xb4\xe8\xb4\x1c\xea\x59\xc3\xa9\x27\xa3\x4b\x5d\xe4\x2e\x48\x4b\x50\x9a\xcf\xae\xe2\x82\x4b\x5b\x12\x20\xa1\x20\x5a\x9e\xc8\x5b\x60\xb3\x4c\x50\x13\x99\x76\x9f\x32\xf6\x17\x11\xbb\x81\x9a\xf7\x3e\xe8\x55\xa2\x8c\x94\xe4\xe0\x3d\x97\x9a\x76\x38\xb7\xf6\x44\x20\x9e\x84\x3b\x2c\xa7\xce\x08\x12\x6d\x50\x39\xf6\x9c\x9b\x9c\x1a\x25\x2e\x0c\xa3\x3d\x68\x23\x02\xaf\x7a\x5f\x11\xd0\x08\xf0\xff\xf3\xb1\xf2\x9a\x28\x94\x69\x40\xf7\x27\xb6\x63\x73\xed\xb1\xf9\xc0\xe8\x23\xf2\x6f\xc0\xab\xa3\xf1\x13\xe4\xe6\xf6\x8c\xf2\x27\x16\xca\x3f\x1e\x16\xca\x1f\xaf\x78\x17\xdf\xdc\x60\x8a\x6f\x30\xc3\x37\x18\x8a\xa9\x97\x37\x37\x18\x75\x05\x37\x4a\xb7\x7e\x7e\x93\xa1\xf9\x16\x6e\x32\xfa\xb0\xc9\xd8\xc3\x87\xa7\x40\xdf\xf1\x61\x93\x21\xfd\xd2\xda\x66\x9c\x0d\x7a\x87\xf1\x7e\xbd\xd1\x78\xce\x19\x65\x75\xe1\xf2\xc8\x24\xfd\x82\x82\x16\x4b\x9d\x48\xb7\xdd\x4e\xca\xb6\x78\x2f\x97\x8e\x33\x84\xec\x77\xb5\xd2\xd3\x60\xbf\xb1\xdb\x30\x66\x4a\xe7\xcb\xaf\x76\x1c\xb4\x12\x7f\xc7\x96\x03\x92\x10\xa4\x48\x5e\x6d\x39\xe7\x86\xe3\xdb\x0d\x32\xa5\x94\xbe\xe4\x9f\xb5\xd5\xd0\x7a\x5c\x5c\x96\xf2\xab\xfd\xe6\x5b\xdb\x4d\x59\x9b\x0d\xd6\x83\xff\xca\xa4\xd8\xb7\xff\x75\x36\xdb\xa5\xbe\x29\x84\x3d\x1c\xa4\x4e\xdd\x05\x0e\x29\x2e\xa1\xcd\xff\x34\x3f\xed\xf2\xa7\x6b\x7c\xff\xf3\x61\x19\x7d\xd4\x27\x8d\x06\x50\xbb\x56\xba\xca\x85\x99\x67\xea\x6f\x0f\x88\xdb\x9f\x80\x0e\xb9\x01\x3d\x5c\xa7\x51\x57\x55\x08\xee\x0f\x80\x8f\x48\xd1\x0c\x07\x9b\x3a\x3f\x84\x93\x5c\x09\x91\xd3\x98\xc0\x93\x15\xff\xc6\xca\x0e\xc7\xa4\x61\x66\x66\x56\x08\x54\xb4\xf8\x1f\xb9\x08\xdb\x14\x40\x43\x81\x8c\x41\x11\xd2\x25\x67\x62\x6d\x5d\x3c\x1c\x84\x33\x99\xfb\xa1\xcd\xc5\x16\x46\xc3\xf3\xad\x41\x75\xb3\xa0\xeb\xb2\x77\x81\x95\x6a\x0e\xf1\x10\x22\x40\x18\x36\xb1\x70\x74\x30\x7e\x66\xe1\x10\x03\x84\xd2\x2a\x76\xd2\x40\x21\xfb\x0c\xa4\x5a\xf3\x16\xfe\x23\x62\x9b\xd9\x22\xe8\xb9\x72\xb9\xbb\x42\xe4\x93\xe0\x15\x0e\x04\x19\xb9\x96\x00\x76\x6a\x32\xd3\x97\xa4\xb7\xaa\x9a\x72\xa7\xdb\x91\x73\x43\x1e\xc9\x82\xa6\x03\xcd\x8c\xb9\x83\x4b\xa9\x24\xec\x83\xb9\x6c\x51\x82\x3c\x53\x4a\xb6\x85\x86\x99\x6b\x1e\x9c\x84\x5a\x77\xb4\x97\xa1\x42\x82\xcc\xb3\x9a\xb3\x45\xc5\xaf\x71\x41\x35\x9b\x12\x45\x28\x5d\x8c\x10\x61\xee\xcd\x2b\x6d\x72\x12\x07\x43\x43\x7a\x72\x51\xc5\x3a\x8f\xe2\x19\xbd\xcd\x62\x2d\xe9\x7d\xd7\x40\xf5\x05\x5d\x9c\x28\xcc\x35\x88\x33\x53\xa0\x61\x89\xf7\x14\xc9\xdd\xdc\xf7\xd6\x82\x79\x08\x88\xab\x01\x27\x02\xea\x0e\x49\x21\x08\x8a\xe1\x11\x8c\x01\x07\xf1\xdb\x73\xfc\x6f\x0f\xdd\xbb\xbf\xa5\x73\xab\xc8\x7a\x52\x4a\x15\x6a\xb2\xf7\xb6\x81\xcb\x48\xca\xa6\x08\xf6\x9c\x9c\xb6\x67\x2f\x50\x17\xf0\x31\x22\x3d\xb8\x09\xa2\x79\x9b\x54\x80\xfd\x8b\xf7\x93\x4a\x1a\x1b\xb8\x39\xa5\x8f\x8d\x58\x2f\x8b\x0d\x99\x19\x03\xb5\xa6\xdd\xaa\x2d\xf6\x19\x54\xc7\x86\x05\x61\xfb\x3a\x0c\x22\x6a\x16\xb1\xc1\xed\x68\xf6\x99\x66\x27\xda\x56\x6d\x20\x24\xc2\xee\x53\x52\xa8\x13\x83\x2b\x64\x0e\xd8\x0a\x3b\x80\x39\x26\x7b\x22\x59\x8d\xa5\x0f\x7b\x9c\x3c\xe7\x28\xa9\x30\x65\x6b\xeb\xb7\x0e\x12\x33\x69\x09\x7d\xda\x55\x77\xca\x2f\x56\x84\xe3\x35\x00\x2d\x9f\x2d\x2a\xea\x7d\x03\xe4\x5a\xca\x06\x3a\xb2\x3e\x77\xd4\xd3\x02\x86\x48\xdb\x1a\x7b\x8b\x76\x47\xa4\xce\x1d\x99\x30\xf0\x59\xe0\x24\xc8\x3e\x88\xd4\x2e\x4e\x78\x6f\xdd\x0c\x2e\xae\x62\x6c\xa0\x7d\x52\xfb\x76\x0e\x9a\xdb\x6e\x2e\x7c\xe8\x35\x34\x16\xa0\x71\x3f\x98\x36\xd3\xdc\xb7\x8e\x5c\x00\x93\x40\x1c\x02\x37\xd3\xef\x73\xc1\x8f\xd9\x9d\x68\x6c\x02\x5f\x4f\xe4\xc2\x93\x8b\x52\xe7\xa6\x62\x61\x44\x81\x33\xda\x34\xdc\x9e\x2b\x9f\xf8\x66\xb7\x42\x00\x6b\xcd\x28\x22\xf6\xee\xe0\x1e\xce\x15\xa0\x50\x91\xc0\xd7\xc9\xc0\x42\x90\x5e\x3b\xa2\x62\x82\x22\x35\x77\x9a\x77\xfa\xcc\x2c\x20\x7a\xc1\x1c\x75\x68\x7a\xbd\xa3\x3b\x6d\xcb\xc9\xe9\x2a\x33\xf0\x9f\xe3\x78\x75\xd0\xdd\xb7\xcf\x31\x77\x01\x8c\xe9\xf6\xb3\xc7\x3a\x15\x3f\xbd\xc2\x5c\x5e\x01\xbb\x9e\xe6\xe7\xd8\x5b\xdb\x62\x03\x46\x72\x64\xbe\xca\x23\x3f\xdb\xdb\xfe\x9a\x14\x40\x51\x46\xde\x7a\x1a\xa1\x88\x3e\x0f\xcd\x5b\xe4\x3f\x84\x2f\x62\x11\x79\x8e\xe3\x54\x1b\x92\x34\x06\x34\x51\xb7\x88\x6f\x97\x32\xf8\xaa\x94\xf1\x6c\x6f\xfb\xeb\x4f\xac\xd7\x87\x0e\xd9\xdf\xe4\x83\x18\x28\xdb\x34\xca\x32\xae\x6d\x0a\x31\x6b\x5d\xaf\xb1\xad\xf2\x0f\x76\x18\x7a\xd6\xf3\x88\x5e\x74\x19\xf3\x39\x76\x66\xae\x66\x0d\xcd\xd9\xce\xe7\x29\x72\x88\x56\x9e\x5d\x91\xd4\x32\x17\xa6\x3e\x63\x50\x98\x6b\x62\xb5\x95\xa5\xab\x94\x0e\x64\x87\x2c\xf4\x7a\xe6\x88\x76\xc0\x7a\xeb\x38\x0f\x7b\x79\x12\x99\x90\xe1\x6c\x57\x65\xc1\x13\xf8\xbb\xc9\xe6\xfe\xd8\x5c\x01\xe6\xc4\x48\x9a\x35\x9a\x83\x18\x18\x36\x16\x11\xba\xdd\x19\x11\x30\xc2\x6c\xa7\xc2\x6d\x01\x38\xb2\xd1\x2b\x7d\x96\x59\x77\xdb\xb6\xb4\x41\xad\x4f\x86\xee\x8a\xbe\x71\x05\xc3\xea\x9e\x90\x82\xc5\x3f\xcc\xda\x8d\x1a\x7a\xce\x57\x98\x22\x70\x9d\xb0\x66\xdb\x4a\x98\x7d\x3c\x47\x11\x91\x6b\xec\x13\x7d\xe8\xb5\x86\x62\x87\x5f\x5b\x1f\xcf\x92\xa0\xa2\x09\xb0\x09\xf3\xd5\x75\x91\x02\xcf\xb9\x69\x0d\xad\xef\xe4\x87\x2e\x61\x05\xa4\x14\x32\x76\x76\xcf\x4f\x95\x1e\xff\xf6\xd0\xa1\xf6\xdb\x47\x1d\x6a\x83\x58\x0f\x56\x56\x98\xc7\x89\xa4\x14\x28\x8e\x0e\xc2\x2b\x87\x61\x76\xd2\x0d\xac\xbf\xeb\x83\xf3\xd0\xf5\xed\x97\xa7\x06\x6a\xe4\x32\x9f\x99\xd7\x41\xb9\x12\x00\x65\xb8\x3a\xf5\x84\xd8\x93\x8d\x88\x3d\x5b\x89\x70\xb9\xe7\x95\x0b\xca\xc9\x65\x5a\xaa\xba\x44\xa9\xea\x0e\x96\x2d\x7e\x5f\xa9\x47\x52\xf5\xe5\x69\x80\xb4\xed\xab\x9f\x3b\x7f\xec\xfc\xa9\x5f\x5c\x5f\xfd\xb2\x12\xaf\xef\xfe\x9e\x1f\xab\x8c\xe7\xf1\xeb\xf7\xbf\x27\x89\xc5\xa4\xcf\x5c\xdf\x2f\xf5\x76\x85\x9f\xfa\xcd\xe3\xe1\xf2\x44\xd3\xf8\xd3\x3f\x77\xf9\x8e\xdf\x2b\xbd\x85\x9a\x57\x43\x42\xc3\x1a\x56\x27\xf4\xb6\x48\x2d\x33\xcf\x4b\x0c\x3f\xcc\xf6\x3c\xcf\x06\xb5\x16\x73\x4d\xd8\x18\x8d\x79\x4b\x39\x4a\xe4\xe5\xc6\x30\x07\x07\x39\x65\x30\x87\x43\xf2\x96\x1c\xe2\x93\xc1\x40\xd3\xd0\xb0\x99\xe8\x01\x68\x96\x56\xb1\xc7\x5e\x7b\x98\x12\x6a\xa7\x20\xf5\xa0\x14\x16\x14\xfc\xc3\xe8\xa1\xa6\xf7\xde\x3f\xc8\x48\x74\xc1\x18\x38\xa0\x26\xe2\x52\x9d\x76\xb0\x9e\x6c\xa5\x60\xfb\x16\xd1\x30\x8b\x79\x63\x8e\x76\xeb\x39\xe8\x70\xc8\xaa\xb6\x50\x1b\x92\x9e\x00\x62\x53\xcc\xb8\x3b\xaf\x08\x00\xa6\xd5\xb3\xe2\xc5\x79\x33\x94\x00\x6b\xfb\xa3\x48\x20\x98\xe7\x6b\x4f\x81\xb5\x22\x16\xa9\x07\x74\xcb\x3c\xf9\xc3\x12\x1a\x8a\x08\x07\xfb\xaf\x84\xe7\x25\xe8\xff\x48\xa1\x27\x0b\xc2\x0a\x18\xec\xfb\x7c\x79\x1a\x40\x45\xa3\x1a\x5d\x99\x6c\x22\xae\x75\x08\xbc\xbe\xcb\x41\x41\x16\x7f\x76\x44\xbd\x02\x69\x2e\x81\x89\x27\x20\x08\x59\xda\xc3\x51\x78\x49\xb1\x6f\xb9\x35\x21\x55\xb0\x65\xd9\xc5\xcf\xe6\xa1\xb0\xd8\x3e\x81\xa7\x8c\xc7\x4d\x0e\xd5\x02\x0a\xe5\xe4\xf7\x20\xc3\xca\x75\xe2\x91\xcb\x02\x2d\xb2\xd9\x84\x9a\xc7\xa9\x04\xe7\x9c\x81\x10\x07\x43\x96\xcc\xb2\x8d\x14\xe0\x09\xe0\xe3\xd4\x1c\x1a\x6b\x00\x2e\x8e\x3b\x4e\x68\xe3\x6a\x01\x44\x56\xeb\xb2\x9b\x37\x34\x82\x83\x57\xdb\x19\x90\xa3\x02\xbd\xa8\x51\x29\x08\x24\x08\xa2\x59\xd6\x21\xb4\x79\x66\xe7\xe1\x43\xe2\x6a\x38\x92\x60\x12\x26\xbb\x34\xb2\x23\xc8\x78\x36\xf4\xab\x9c\x6b\x19\x29\x66\x06\x74\x67\xb8\x05\xc2\x35\xaa\x65\x35\xb6\x9e\xb0\xd0\x15\x39\x29\x21\xf8\x8d\xb7\x9d\x29\xce\xa7\x6f\xac\x48\x6a\xbd\xf3\x61\xc1\xdd\x3d\x73\x68\x3a\x50\x0b\xbb\xec\x68\xe8\x6d\x2b\x95\x40\x71\x61\x66\x42\x90\xe5\x02\xe9\x30\x0a\x84\x6c\x98\xca\x0e\x66\xb2\x1d\xa0\xef\xa8\x02\x82\xa8\xa6\xef\x03\x4a\xdb\xa0\xc4\xdb\x23\x21\x1d\xa8\x61\x99\xe5\x69\xc8\xc6\xa1\x87\xd8\xf6\xa9\xc4\x56\xd9\xe9\xb2\xb9\x99\x30\xa0\xe6\xc9\xae\x22\xc7\x60\x99\x96\xd4\xf4\x45\x77\xf4\x12\xd8\x7c\xac\x0a\x29\x8a\x69\xfe\x33\x30\x4b\x04\x10\xe7\xc3\xa6\x53\xdb\x81\x5a\x81\xc2\xc1\x38\xd8\x35\xa9\x16\xc4\xec\xa3\x03\x90\xa0\xec\x18\xe8\xfd\x72\x60\xa5\x84\xd6\x3c\xd9\x61\xf1\x9e\xfd\x4a\x2b\x68\x2d\x69\x65\x1f\x9c\x49\xe8\x1a\xdb\x11\xb8\x90\x12\x92\x94\x6b\xed\x04\xa9\x3a\x40\x94\x10\x4c\x01\x9e\xea\x17\xc7\x2b\x91\x13\x35\xb0\xeb\xca\x19\x6f\xbc\x74\xc0\x6e\xca\x9d\x31\x45\x1e\xe0\xcc\x8b\xb9\x83\xd3\x26\x83\xf4\x39\x3b\x6a\x53\x52\x02\x00\x7c\xb2\x5b\x7d\x22\x47\xf5\x89\x8e\xca\xbf\x3d\x74\x54\xfe\x76\x8a\xfe\x4c\xe9\xa1\x01\x48\x0c\xa5\xf0\xd0\xca\x35\xe6\xa6\xcf\x51\xb2\x5e\x15\x50\x74\x65\x90\xe4\x55\x36\x65\x79\x97\x69\xa9\x82\x59\xce\xba\x8c\x34\x6f\xa9\x8a\xdd\x9b\x03\x8f\xf3\xc5\xfa\x6c\x9f\xb8\x95\x90\xf9\xb5\x78\xca\x02\x3b\xd0\xac\x0d\x5e\x9c\x56\x48\x2a\xef\xd8\x33\x70\x79\x7a\xca\x84\x08\xba\x27\x96\x30\xc8\x7a\x79\x3b\x62\x97\x86\x24\x52\x3b\x27\x4c\x42\x9b\x5e\x4f\x90\xcb\xb6\xc0\xa3\x5e\x25\xd9\x1e\x98\x2e\xd7\xe8\xaf\xae\x66\x1d\x9f\xe3\xeb\x57\xaf\x5e\x88\xa4\x7f\xbe\x4a\xc7\x77\x15\x3a\xfe\xf6\xd0\x7b\xf5\x5b\xb9\xa9\x96\x23\x9e\xd0\xf2\x1c\x47\x66\xb5\x82\x9d\x6d\x11\x38\xc6\xee\x25\x56\x90\x0e\x56\x42\x1b\x88\x45\x39\xd3\xd6\x6c\x6b\xf0\x1c\x13\x19\x32\x73\xc7\x38\xcf\xf6\x35\xea\x7e\x48\x36\x73\xd2\x32\x15\xab\x92\x84\x21\xd0\xd1\x11\x2c\x83\x29\x58\x6d\xd5\x42\x02\xb4\xff\xa0\x7d\xb0\xb9\xc4\x75\x25\x61\xe6\xca\xc1\x82\x51\xd6\xfc\xdc\x21\xcf\x60\x1b\x9e\x29\x94\x12\x72\xc9\xa1\x94\x1d\x73\x91\xa9\xd0\xea\x7d\x6c\xde\x9e\x41\x31\x40\x77\x04\xd1\x6a\x87\x5d\xc6\x66\x0d\x5a\x0e\x02\x4a\x21\x2a\x07\x40\x31\x6f\xc9\xda\x7c\xfb\x46\x3f\xb4\xd8\xfc\x56\x3f\x6a\x5d\x9e\x0a\xba\x04\x36\xd2\xb5\x90\xf5\x48\x76\xf5\x91\xaf\xc1\x46\x81\xf7\xec\x56\xf0\x1f\x08\x15\x6a\x28\xc5\xa5\xc9\xb2\x57\x2f\x6d\x2b\x00\x6b\x1d\xf8\x0e\x46\x28\xf3\x80\x34\x4c\xa8\xd9\x71\x01\xe0\xa5\xa9\xa0\x7a\x47\x1a\x51\x4a\xa2\x03\x31\x11\x9d\xb0\x68\xae\x07\x25\xe3\xc3\x24\xdf\x17\x12\x17\x64\x80\x1f\x0e\x8d\xa9\x1d\x89\x18\x85\x21\x47\xfd\x03\x35\xfe\x1b\x25\x29\xc8\x32\xce\xc6\x46\xb8\x31\xaf\xbb\xef\x01\x99\x64\xfb\x81\xcd\x8e\x5a\x9f\x63\x2d\x65\x67\x77\x2a\xfa\x8c\x55\x43\x5a\xf9\xee\xc3\xa5\x16\x11\x1e\x60\xb7\x5e\xc2\xf2\x30\xbb\x4b\x48\x4a\x77\x0a\xe1\xdb\x73\x44\xe9\x4d\x64\xef\x04\xd4\xa3\x3f\xbd\x76\xc6\x60\x30\xd2\xe3\xc0\xee\x3a\x98\xd7\x68\x00\xe8\x95\xb2\x23\x7a\x33\x1b\x4d\x8a\x83\x82\x38\x61\x77\x78\x1b\xd3\x3c\x9e\xe2\xee\x36\x4f\xd8\x55\x99\x0f\x51\xb7\x7b\xc8\xf5\xb3\x89\x56\x86\x82\x0a\xe3\x3a\xdb\x73\x15\xbd\xc6\x99\x3d\x49\x35\x12\x09\x88\x7a\x73\x93\xd9\x5c\x29\x70\xd0\x8a\x96\x16\x62\xeb\xde\x59\x6b\x1e\x1f\x89\x57\x5d\xc1\xb5\x03\x7c\x1a\x3b\x72\xed\xb8\xf1\xc4\x36\x1c\x00\xd9\x4d\x40\x57\x95\x7c\x68\x9a\x91\xbb\xa3\x63\x8f\x84\x67\x67\xfb\x14\x44\xed\x85\x84\x07\x36\xab\x5a\x3e\x5a\x62\x3d\x7a\xb2\x61\x5d\x6f\x7d\x11\x0c\x84\x89\x83\x21\x57\x29\x43\xa5\xf4\xf2\xa4\x66\x86\xbf\x77\xfe\x5e\x98\xd7\x9e\x2d\x3d\xc7\x65\x4f\xdf\x10\x55\x2c\xb9\x80\x8c\x0c\x3c\xb9\x88\xde\x53\x5b\x0d\x05\x08\x49\x48\x63\x5e\x06\x1b\x53\x4e\x64\x0f\x0b\x9d\xe0\x71\x03\x3e\x0a\xd5\x31\x22\xa2\xfc\x08\x6a\x39\x28\x19\xea\x16\xaa\x0f\x3c\x99\xb4\xcc\x6c\x08\x03\x6b\x75\x77\xee\x00\xa2\x72\x86\x58\xf4\xde\x83\x0e\xbd\xc6\x0c\x95\x87\x07\x5e\x90\xe7\xd6\xf5\x51\xa1\xb2\xa8\x5c\xcc\x16\xa1\xb2\x18\xca\x20\x72\xd9\xfe\x96\x50\x12\xc3\x27\x60\x5c\xab\xb3\x59\x37\x25\xc1\x40\x1b\x01\xb2\x97\xd2\xdd\xae\xc1\xef\x69\xfb\x50\xbb\xdd\xf6\xaf\xda\x20\x74\x79\x22\x02\xda\xc1\xb5\x27\xc0\xb2\xd1\xee\xb5\x95\x0b\x8e\x59\x00\x5f\xa0\x67\x3e\xa9\x5f\x0a\x19\x60\x32\x5e\xa2\x1a\x70\xcd\xb5\xfe\x98\xf1\x7b\x68\x61\xfa\xed\x43\x71\x2d\xf3\xa2\xc7\xd0\xe7\x38\xd1\x74\x07\x3e\x8e\x45\x98\xb5\xa8\xb4\xae\x51\x4a\x7f\xc5\x28\xe6\xf4\x5a\x22\xf9\x99\xdf\x93\x6a\x36\x48\xcb\x3e\x02\xb2\x9c\xf9\x24\xf0\xcc\x8d\xed\xa3\xb8\xb5\x9d\x12\xa2\xc7\x6c\x10\x8b\xa6\x22\x69\xea\x07\x6a\xf6\xae\xd3\x54\x43\x61\x4c\x57\xd2\xd1\x57\x05\x96\x1d\xe2\x47\x9b\x4e\xd8\xe8\xc5\xc8\xa3\xad\x5a\x1d\xb8\x19\xf5\x00\x21\x7a\x22\xba\x78\x38\x76\x70\x09\x3b\x89\xab\xc4\xa6\x7e\xb1\x13\x88\x3d\x93\xc9\xf1\xc6\x0b\x8d\x73\xe4\x43\xc8\x0d\xcf\x26\xa3\xf2\x25\xa8\xe3\x8a\xf3\xc6\x5a\xe8\xa0\xb3\xef\xda\x2c\x2e\x96\x90\x0b\xe4\x60\xec\xb0\x11\xe4\x2c\x9e\x92\x86\x92\x2a\xad\x23\x54\x68\x17\x61\x0c\xf1\x3e\x29\x2d\x68\xa6\xda\xa3\xc2\x83\x07\x9e\x00\xd1\x07\x42\x07\xa0\x90\xb1\xe9\xcf\xa5\x81\xc0\x94\x8e\xf3\x19\x38\xee\x00\x77\x21\xae\xfb\xc2\x0f\x73\xf5\x6f\xf0\x0b\x55\x43\x26\x6f\x5f\xf3\x26\x78\xb0\x95\x90\x6e\x81\x40\x69\x57\x65\x64\x51\x14\xe7\x1b\x79\xc2\xa8\x71\xb6\x5f\xce\xd4\xd0\x59\x11\xdd\x07\x79\x03\x32\xd2\x46\x95\xd2\xa4\x83\x91\xeb\xc0\x63\x29\x9d\x4d\x14\xd0\x6b\x61\x99\xd2\x86\xe8\x4e\x4c\xca\x17\xf6\xd7\x67\x0b\x4f\x7d\xf2\xa1\xa2\x2c\x5f\x06\x8a\xcf\x9f\x98\xf4\x0f\x3d\x41\xbf\x7d\xa4\x89\x26\xa5\x97\xd0\x34\x43\xce\xa8\xca\xce\xcb\xbc\x5d\xe5\xa2\xca\x47\x3b\x15\x96\x2a\xad\x13\x36\x67\x02\x0a\x5d\x8f\xd7\x16\x89\x2d\x78\xb7\x85\xae\x85\x09\x9d\x97\xe1\x42\x41\xc8\x53\xb2\x36\xcb\x62\x1f\x92\xf8\x6c\xdf\x02\xbf\x34\xa1\x19\xbd\x04\x22\xe7\x7a\x5b\x7d\xa0\xe2\x3d\x38\x2d\xe1\x76\xa0\x48\x01\x53\x5c\xdd\xf9\xbf\x13\x25\x43\xcd\xb6\x78\x35\x7e\xf0\x39\x72\x1a\xae\x59\x78\xd9\x72\xb7\x59\x88\x49\x88\xea\x92\x64\xb6\xdb\xc6\xbe\x4f\x36\xa7\xe4\xd4\xc0\x0d\x01\x72\x0b\xea\x05\xdb\x44\xf3\xeb\x40\x38\xd8\x6e\xa5\x67\x47\xf3\x5f\xe5\xea\xfc\xa8\x74\x4d\x3a\x0f\x62\xb5\x39\x2d\xe9\xb8\x42\x86\xe6\x5d\x2b\x84\xe0\x43\x96\x1c\xb4\xf8\xa2\xf1\x19\xb8\x26\xa0\x67\x62\xe3\x6c\xcf\x53\x07\x02\x62\xe4\x58\x2a\x70\x92\xe8\x2f\x40\x2b\xda\x98\x21\xa7\xb2\xc7\x1c\xa8\x47\x95\xfd\xae\x0d\xdf\xfb\xd8\x6c\x8f\x7e\x9e\xcb\xba\xdb\xc4\xa0\x00\x8d\x4d\x08\x4a\xf3\xcb\x61\x3e\x7a\xb0\x9b\x2d\x03\x95\x46\x38\xaf\x19\x6c\xf6\x78\x39\xab\x80\xba\x68\x5b\xa1\xa0\x76\xe7\x6d\x2f\xde\xa2\x8e\x5e\x95\xe7\x38\x29\x95\x2e\x39\xcc\xd3\xed\x65\x73\xe3\xb4\xbd\xc4\xec\x29\x4a\xf0\x67\xb5\x7d\x7a\x5b\x96\x67\x36\x46\xd6\x73\x90\xef\xb7\xc9\xf8\x5e\x6d\xa1\x48\x98\xe5\x02\x4a\x13\x11\xb3\xa0\x00\x31\x23\x23\x95\x03\xf4\x4f\xf7\x8c\x44\x56\x9d\x5c\x72\xa8\x72\x16\x3d\xd6\x2c\x44\xb8\x29\x8a\x67\x8c\x89\xba\xe2\xcf\x03\x08\xa1\xb6\xbe\x62\x9b\x18\x32\x42\x36\x51\x71\x07\x5b\x10\xa7\x90\x3d\xd0\xf0\x2d\xbd\x1f\x8a\x4e\x9e\x4e\xb2\xe2\x4c\x14\xf9\x2c\x9f\x58\xdf\x0f\x9d\x38\xbf\x9d\x32\x77\x39\xa7\x20\x1b\x84\xcc\x54\xca\xc6\x26\x28\x08\xc9\xb5\xa0\x92\x5f\x9e\x2a\x65\x92\xeb\xa6\xbd\x98\x57\xb6\x81\x65\xa6\x98\x99\x4b\x0c\xa2\x5e\x9e\xd4\x7c\x72\xc9\x1b\x9c\x56\x95\x8c\xee\x2c\xc8\x28\xdb\x27\x9a\xca\xcb\x53\x99\x40\xa4\x6f\x19\x84\x4f\x05\xb5\xb9\xac\xc5\x7b\xfd\x34\xa5\x97\xa7\x01\x88\xe6\xd8\x26\xb2\x59\xe8\x6f\xcf\x5e\xa5\x23\x04\x0d\x0d\x69\x03\x42\x95\x00\x3a\xd6\x45\xac\x0f\x7b\xbb\x0d\x00\x84\x77\xe4\x28\x80\xe4\x7e\x79\x92\x3c\xc2\xcc\xc9\xe9\xde\x52\xda\x2c\x02\x2b\xad\x5e\x36\x8b\x40\x83\x74\xc8\x84\xf4\x1c\xb4\xf5\x0d\x99\x96\xb2\x45\x45\xdd\xbf\x95\x8d\xe9\x9e\x97\xa7\x22\x3d\x74\xd5\x2d\x77\xdb\xb1\xec\xdc\x67\x28\x45\x36\xf0\xce\x47\x69\x19\xfa\x7d\x29\xe4\xda\x37\x45\xe7\xfd\x86\x54\xa7\x14\xdd\x80\xa9\x49\x75\x93\x62\x2b\xb2\xee\xc8\xcf\xd9\xcb\x8d\x68\xb4\xf9\xf2\x24\xc5\x56\xdd\x6c\x5b\xb6\xf9\x0c\xbd\x5a\xf4\x2a\x8c\x8d\xfc\x03\x3a\x96\xae\xa0\x4e\x70\x2b\x58\xf8\x33\xd8\x63\xcf\xec\x4d\x09\xd1\x0e\x86\x9d\x1d\x1d\x38\x37\x6c\xdb\x21\x6d\x71\x8e\x30\xf2\x86\x36\x2a\xb9\xbc\x3e\x7e\x66\x57\x47\x20\xc8\x14\x8c\xc4\x71\x80\x7f\x2a\xe0\x12\x06\x6c\x0c\x4f\xb8\xce\xa0\x1d\x6d\x7c\x1d\x78\xa4\xcd\x76\xaf\x0e\x32\x81\xd1\x50\x15\x9b\x8a\x56\xcf\x5c\x85\x47\x59\x48\xb2\xcd\x12\x50\x04\xb3\x05\x93\xb0\xa2\x41\x71\xb1\xc5\xd9\x42\x69\x50\x5e\x87\xfe\x88\xe4\xad\xd8\x31\xb9\x22\x86\xb2\xcb\xc3\x5c\x89\x6c\xb7\x8f\x50\xed\x9e\x76\x7b\x63\x69\xab\xe5\x08\x9c\x29\x1b\x12\x7c\xb1\xc9\xc6\xb6\x17\x1b\x20\x6a\xb0\x49\xb4\xb1\x7c\xb4\x89\x9a\xc9\xbb\xc0\x37\x12\x09\x69\x03\x0d\x55\xdb\x6c\x59\x43\x5e\x30\xd4\x60\x63\x43\xae\x70\x6f\x21\xf3\x28\x0a\x52\xe5\xba\x17\xfb\x7d\x9b\x5d\xf4\x4a\x22\x38\xc5\x1d\x05\x45\x80\x4a\x72\x6c\xfa\x79\x7f\xfb\x46\x8d\x29\x3b\x7d\x3b\x4f\x8c\x14\xd2\x27\x16\xeb\x43\x73\xcd\x6f\xf3\x83\x62\xa6\x98\x51\xd0\x39\x98\x81\x8c\xd5\x3d\x42\xb8\x49\xec\x35\x42\x41\x71\x34\x80\x19\xeb\x38\xcc\xfc\x13\x5b\xc8\x54\xb1\xe7\x7d\x19\xe7\xea\x09\xd2\xf0\xda\xa2\x26\x8f\x7e\xfb\x12\xd1\x5f\x6a\xfa\x0c\x8b\xf1\x7e\x72\xe2\x70\xe6\x97\x89\x38\xc9\xbe\x81\x9e\x44\x5c\xb2\xd0\x92\xb6\x35\x81\xde\x7c\x52\x3e\xda\x3d\x27\x9e\xac\xe7\x89\x30\xb1\xfb\x52\x9d\x90\x95\x2a\x82\x6b\x5f\x7b\xbb\xec\x8d\x68\x99\x0c\x91\xb6\xa3\x28\x11\x70\x50\x6b\x1b\x61\x80\x6c\x52\x92\x85\x9a\x88\xfb\xc9\x9a\x02\xda\xa0\xb6\x5e\xc5\xde\x96\x63\x21\x64\x7b\x94\xd4\xc3\x7a\x23\x1f\xb7\xa3\xce\x6f\xfa\x60\xd9\x37\xd8\x5c\xf5\x79\x11\x5b\x3e\xaa\x01\xcd\x06\x75\xd6\x0f\x36\x20\x68\x38\xbc\xb9\x01\x61\x6f\x4a\xa1\xb5\xe0\xec\xba\xfc\xfc\x6a\x5f\xb9\xec\xf8\xca\x62\xe3\xf5\x71\xf1\x5b\xd7\xd9\x1e\x64\x90\xbe\x71\x86\xa2\xe3\xe7\x7d\xeb\x13\x93\xfb\xa1\x47\xe6\xb7\x5f\x3f\x9a\xdc\xb7\xa7\x49\x98\xcc\xed\xf1\xdc\x3f\xc5\xdb\xa3\x5d\x4f\xc8\x1f\xff\xf9\xf4\xcf\x23\x6e\xdf\x3a\x1f\xfd\xcb\xd3\x1c\x16\x77\xea\x0e\xdc\xd4\x58\x50\x45\xb8\xa1\xfd\xd4\x48\x6c\xfd\xb0\x88\x63\x88\xa3\xdc\xed\xb8\x23\x3b\x17\x4a\x62\xfb\xb1\xf7\x30\x89\x77\xcd\xd4\x55\x7a\xbc\xc6\x7a\x47\xb0\x8c\xf7\x59\x26\x64\xb1\x5f\xd8\xb8\x53\x46\x28\x4e\x05\x74\x61\x72\x68\xb2\x93\x70\x89\x17\x2c\x58\xd9\x64\x7f\xcd\xb5\xda\x5e\x07\xd1\x7d\x92\xef\x11\x14\xa7\x02\x25\x64\xe9\x07\xd0\x39\xed\xc8\xe6\x35\xf9\x55\xdc\x43\xf0\xed\x83\x69\x07\xd9\x31\xe8\x8e\xc0\x00\xf6\x7d\x86\xee\xab\xa4\x7f\xfa\x62\xf1\xe6\x8c\xc5\x9b\x37\xf6\x6a\x4a\x9c\x4e\x59\x5c\x5e\x19\x8e\xbc\x4d\xa8\x4f\x8c\x72\xf9\xb3\xc3\xfc\x15\xeb\xee\x1b\xcb\xee\xa3\x13\x76\x09\x5f\x3b\x35\xff\x85\x75\xfa\x77\x67\x8f\x93\xe7\x02\xc7\x4e\x11\x6e\x17\x75\xc4\xfb\xf1\x38\xc2\xbb\xae\xb1\x9d\xea\x3b\xae\xf1\xb7\x97\xe7\x43\x13\xce\x6f\xbf\x3d\xa4\x7e\x53\x19\xb7\xe5\x59\x42\x49\xae\x1c\x85\x18\xdf\x99\xf5\x56\xbd\x00\x01\x4c\xb7\x4d\xa7\x83\xc8\xe7\xdc\x74\x00\xb2\x59\x70\x4f\x56\xea\x1d\xd2\xc9\x42\x79\xf6\xec\x0f\xf2\x5f\xeb\x45\xf1\x8f\xf8\x09\xf9\x46\x6f\xe4\x97\x3e\x4a\x0a\x2e\xf3\x00\x52\x0a\xef\x5a\xf7\x58\xd2\xce\x44\x4f\xcd\xe8\x48\xda\x42\x12\xdb\x7a\x6e\x6e\x0a\xd5\xc8\xaf\x55\x74\x47\x2f\xdc\x74\x20\x22\xf8\x04\x1b\x5b\xda\x5a\x07\x11\x65\x0a\x16\xf8\xb1\x54\x43\xa8\xa9\x78\x15\xee\xf6\xda\xe9\xc8\x9a\xb3\x3f\xa5\xc5\x57\xe2\xaf\xef\x0f\xba\xfb\xf2\x6d\x4c\x8f\x67\x8a\xb4\xe7\x56\x9c\x25\x0a\xc2\x77\xd0\x98\x73\xc3\x72\x8a\xce\x45\xa8\xce\xc1\x80\xb7\xe2\xf6\x9b\xe6\x9b\xd6\xdb\x8e\x5e\x56\xdb\x8c\x36\xc0\x58\xa8\x04\xf7\xf6\x4c\x3d\x9e\xc5\x4d\xa0\xf5\x14\x86\xb4\x7f\x5f\x63\x6d\xe3\x02\xf0\x69\x72\xe2\xd4\xb8\x34\xbf\x16\x83\xc7\x73\x74\xcd\x22\x57\xbb\xc3\x9b\xc7\xed\xd8\x6b\x6d\xc3\x41\xd2\x6b\xd8\xe3\xfc\x2d\x3f\x91\xa9\xe3\xaf\xba\x50\x9b\xb9\x41\xb4\x8c\xe7\xb8\xe8\xb2\xdf\xb6\x10\xb6\xb1\xcf\xf6\x70\x0e\x97\x2b\xfb\xe8\xdf\x38\x87\xd9\xae\xb1\xb7\xf1\xd6\xb7\x3e\xfe\xd2\x57\x52\x03\xf7\xb6\x88\xa7\xf8\x68\x8b\xba\x8e\x37\x6d\xd1\x27\x96\xf7\x43\xaf\xd0\x6f\xbf\x7f\x6e\x79\x93\x9d\xf3\x5c\x25\xf1\x5c\x26\xd1\xd6\x49\x64\xd3\xe8\x5a\x29\x71\x2d\x95\x63\x59\x84\xd3\x20\x2c\x7b\xb0\xcc\x01\xac\x81\x1b\x83\x3b\x5b\x70\x67\x0a\x4e\x4b\xb0\x0c\x81\xdb\x81\x65\x06\x6e\x56\xe0\x66\x04\x68\x03\x60\x02\x4e\x0b\x70\x1a\x80\xdb\xfa\x5f\xcb\xff\x65\x2d\x68\x84\x47\xe7\x92\x8e\xaf\xd6\x74\xbc\x5f\xd4\x77\x6b\xfa\x6e\x49\xdf\xaf\xe8\xbb\x05\x1d\x6f\x2b\x3a\xbe\x5a\xd2\x23\xdd\x4d\xde\xaf\xbc\xac\xd7\xb3\xfd\xd4\x92\x2c\x5f\x2b\x5f\xde\xcf\xf3\x3b\xe5\x4b\x1b\xbf\x67\xbd\x5b\x90\x77\xcb\xf4\xb8\x5b\xbe\x6f\x2c\xeb\xbb\x55\x8d\x45\xbd\xcc\xc2\xcd\x2a\xdc\x8c\xc2\xeb\x05\x1d\x6f\x2b\x3a\xde\x2f\xe9\xa9\x7f\xd9\x85\x4e\x4d\x21\xeb\x5a\x2c\xef\x6e\xab\x1d\x9d\xfe\xaf\x77\xd5\xcb\xeb\x6d\xd5\x2d\xc2\x3b\xdb\xea\xbd\x49\xb8\x9d\x54\x2b\x6f\x78\xce\xb3\x5d\xef\x4d\xc1\xb7\x8f\x36\x1b\xf0\x5e\x32\xeb\xd3\x36\x8b\x97\xf8\x29\x4b\x72\xf9\x19\xa6\xe4\xa1\x9b\xea\xb7\x3f\x3e\x4a\x19\x57\x05\x08\x8e\xd5\x56\x90\xfc\x60\xb5\xb2\xd1\x43\xd0\x81\x42\x37\x18\x7e\x34\x72\xbc\xd5\x9d\xe9\x7a\x47\xbc\x5b\xee\x58\x78\xfd\x75\xa5\x0b\x5d\x17\x7e\x9a\xb8\x95\x51\xee\x3c\xf1\x41\xcb\x62\x3f\x06\x9e\x7b\xca\x62\x43\x63\x9c\xac\x2c\xb5\xf1\x84\xf0\x6a\x90\x1c\x47\x02\x3e\x7c\x61\x73\x18\x09\x3a\xee\x48\xf6\x5f\x71\xec\x3b\xb8\xe3\x9e\x70\xff\x72\xbc\x66\xe3\x7f\xf5\x8f\xfb\x03\x8f\x77\x28\x45\xdf\x55\xaf\x76\x71\x49\xae\x32\x2a\x58\x73\xf1\x91\xa2\x38\x97\x49\xf2\x4d\x19\xec\x16\xfe\xcf\x14\xb3\xe6\x5c\x79\x68\x19\xfa\xed\xcb\x47\x68\xdc\xd9\xd8\x31\xc4\x0b\xf8\xe6\x09\xf0\xf6\x08\x13\x30\xb8\x41\x5f\xdf\x9e\xf6\xf5\xcd\x59\x2f\x79\x5f\x60\xcd\x16\xbf\x33\x8c\xdc\x79\x77\x3a\x4b\x63\xef\xdf\x1f\x20\x02\x2d\xc6\xac\xbb\x94\x19\x34\xd5\x60\x7f\x0b\xb9\x03\x50\x98\xfe\x86\x4a\xf9\xb1\xe4\xd2\x2f\x1f\xea\xa5\xa3\xc6\x5c\x13\x46\x8f\x36\x7c\x6b\x21\x6b\x47\xcd\x21\x6b\xdf\x05\x45\x30\x65\x65\xc0\x5e\x1c\x19\xac\x23\x63\x57\x54\xb6\x51\x9b\xc8\xda\xd7\x7c\x06\x0c\xf5\x3b\xe6\xf3\x9f\x9e\xce\xdf\x9c\x26\x7f\x7f\xe8\xba\xf9\xfd\xd6\x75\xa3\x49\x42\xaf\xba\xc3\x40\x15\x40\x3b\x51\x29\x1b\x93\x85\xc8\x3b\x5b\x81\x86\xa3\xae\x07\x3a\x07\xbd\xfb\x12\xbc\x16\x91\xe8\xac\x46\xbc\x60\x11\x17\xb2\xbd\xc6\x51\xe1\xa1\x91\x5d\xb5\xac\x36\x23\x1c\x8e\xa3\xb1\xb3\x08\x88\x56\xf3\x02\xf5\x75\xe5\x8f\xf2\x37\xc7\x0c\x3d\x1f\x38\x2b\x68\xd8\x02\x09\x18\xd0\xad\xc3\x78\x2f\x95\x40\xe5\x41\x84\xf4\x94\xc9\x15\xf2\x69\x34\x56\x71\xc9\xd6\x31\xbc\x13\xf8\xe2\xaf\xd9\x4f\xbc\x90\xf0\xe9\x4e\x7b\x99\xdf\xf6\x0e\x00\xa7\xfe\x20\xb3\x4e\x9f\xc0\x9c\xb9\x2e\xb3\x0b\xf3\x3b\xeb\xc0\xcf\x7b\xa0\xc7\xbb\x13\x07\x9d\x0b\x95\x6c\xf0\x03\xe8\x15\x80\x03\xc8\x54\xce\x26\x59\xde\x54\x90\xdb\x03\x28\x9d\x7b\xb7\xfd\x9a\xd4\xad\xd5\xfc\x11\xac\x04\xed\x21\x66\xc0\x0d\xb5\x1f\x78\x25\xa0\xbe\xc4\x55\x06\xff\x42\x04\x33\x98\x13\x6b\x75\x27\x73\xd2\xe0\x0d\x03\x60\x69\xe3\x09\x60\xe1\x5f\x47\xfd\x44\xc5\xe4\xef\x0f\x1d\x25\xbf\xcb\x87\x0c\x47\x5a\x82\x3a\x02\xe0\xf4\x94\xbb\xfb\xc9\xf9\xc1\x4b\xce\xee\x23\x77\x78\xc8\x63\xf9\xc7\xe5\x68\xc2\x96\x1c\x74\x89\xc3\x43\x1e\x04\xb9\xca\x20\x6e\xc6\xfe\xf6\x4a\x94\xf7\x74\x8d\x72\x27\x80\x64\x2f\xcf\x59\x5c\xc3\xca\x1e\x2f\x4f\xa3\xa7\xd0\xa9\xe4\x3e\x5d\x68\xe6\xce\xb5\xd5\x7b\xd7\x56\x6f\xae\x6d\xbf\xb9\xb6\xfd\xce\xb5\x5d\x47\x5c\x8e\xfb\xaf\xde\x8d\x69\xcf\xbe\x2a\x53\x1d\x19\xa8\x20\xa0\xf2\x20\x30\xf6\xbe\x77\x05\x02\x91\xf7\xca\x79\x66\xae\xec\xfb\xb7\xd4\xc7\xdb\x1e\x10\x1a\x64\xbf\x2b\xad\x83\x04\xee\x6c\x6f\x84\x8f\x50\x3d\x7f\x15\x3e\x3e\xd3\x51\xbb\xfc\xa0\xbf\xf4\xf7\x87\x8e\x94\xdf\xf5\x83\xd0\xcb\xf6\xc0\x8c\x24\x96\xd9\x2d\x52\xeb\x24\x9a\x2d\x40\xd1\xa1\xb3\xdc\x86\xe3\xdb\x57\x07\x35\x81\x86\x8d\xda\x40\xf6\x02\x9c\x96\xc8\x84\x0c\x30\x0d\x51\x75\x9d\xdf\x63\xed\xda\x86\xea\x37\xce\x58\x32\xaf\x3b\x1e\xfe\x06\x37\xc8\xe3\x97\x7a\x2d\xda\x76\xa8\xaa\xe0\x3d\x70\xf5\x12\x18\x9f\x97\x06\x7c\x07\x96\xdd\x25\xa8\x4e\x05\xaa\x7a\xaf\x44\xb5\xb4\xa9\xd6\xdf\xf5\xc1\x52\xf9\xe2\x17\xdd\xf7\xd1\xf1\x4e\x2e\xa0\xa7\xf2\x1d\xb9\x00\x3b\xfa\x21\xe9\x51\xd2\x08\xb5\x94\xb7\xc7\xcf\x9a\xbe\x63\xfc\x4c\x41\x81\xc7\xa4\xca\xbb\xe3\xdb\xf4\x7a\x63\xfc\xcb\x3b\x3f\xf0\x38\x1b\x57\x95\x3b\xa5\xbf\xec\x06\xe9\xb0\xbd\x4d\xaf\xf6\x43\x6f\xe7\x35\x3c\xaa\x7a\x33\xb3\xf1\x9d\x91\xcb\xe5\x3f\x2e\x09\xf2\xf7\x07\x1c\xf9\xef\xf9\x53\x2b\x11\x9a\x04\x77\x4b\x23\xde\xad\x8d\x68\x8b\xc3\x35\x87\x6e\xcb\x23\x9e\xeb\x83\x0b\xf9\xb6\x8e\xd7\x32\x5e\xab\x98\x8b\xd8\xd7\xf0\x5a\xc2\xbe\x82\xb1\x80\x7d\xfd\x9e\xcb\xf7\x5c\xbd\xb7\xc5\x7b\xbf\x06\x7f\x86\x0e\xdc\x85\x73\x0c\x46\xf2\xbd\xe8\xfd\xf5\x3c\x7b\x3f\x7a\xbf\x9f\x61\x77\xd1\xbb\x2d\xc2\x96\xc6\xfb\xe3\xbf\x5e\x88\xef\x8f\x7f\xbf\x04\xbf\x4a\x83\x7c\x38\xfe\xeb\x85\x78\x1b\xff\xf2\xf5\x0f\xdc\x2f\xc1\xaf\x7e\x60\xb4\xf2\x97\xdd\xa0\x95\xde\x10\x4d\xb6\x50\xa6\x3e\x9b\xd7\x95\x3e\xca\xff\xdb\xca\xf8\x93\xd9\x84\xcb\x77\xa5\x13\x7e\xc6\x9a\x7c\xc0\xf6\xff\xfe\xa1\xae\x8a\xd6\x1a\x3a\xb4\x50\x32\x45\x42\x6a\x28\xdd\xeb\xce\x08\xbb\x48\xe4\xed\x6c\x59\x8d\x4d\x55\xec\xaf\x2b\xce\x2a\x0e\x96\x40\xfc\x1b\x19\x43\x1e\x54\xc9\x14\x48\x77\x5f\x98\xad\x20\xd6\x34\x80\xa8\xbb\x84\x06\x95\x3e\x70\xee\x3a\x57\xbb\x2d\x30\xf2\xef\x01\xc8\x44\xee\x05\x00\x38\xda\x16\xcb\x0c\xb3\xef\x76\x7e\x16\x3d\xf6\x16\xa6\xec\x02\x7e\x4b\x36\x1f\xc4\x5a\x96\x73\x2a\x15\x2d\xee\x16\xdf\xb5\x1e\x0a\x68\xe8\x5a\x01\xcf\xfa\x55\xa4\x5f\xf6\x4c\x55\x0b\x45\x29\xd2\x45\x00\xa7\xb3\x0f\xb9\x77\xc0\x1a\xe9\x38\x1d\x3b\xf0\xb2\x58\x24\x9b\x9c\xd2\x90\x20\x5f\x16\x20\xed\xbc\x27\x8a\x33\xad\x85\xd9\x76\x56\x4b\x80\x30\xaf\x4e\x31\x5f\xd9\xbf\x42\x0a\x85\x71\x44\xad\xf9\x54\xa5\xeb\x83\x5a\x35\xce\x4f\x4e\xd6\x26\xe9\x4e\xb4\x92\x51\x90\x64\x17\xa4\x02\x70\x07\x16\x5b\x8b\x38\x0f\x68\x29\x85\x3a\x76\x01\x73\x99\xf3\x5c\xe6\x76\x80\xfe\x5a\x52\x3b\x84\xb8\x72\xb0\xc8\x89\x43\xe8\x65\x92\xbe\xac\x89\x87\x3a\x6c\x20\xf2\x90\x9f\x00\x4c\xa2\xa2\xc1\x03\x82\x10\x21\x85\xe9\x81\x13\x79\x09\xcb\x82\x11\x12\x3f\x30\x8b\x8b\x8c\x8d\xf0\xb9\x1e\x94\xbf\x3f\xb4\x46\xfc\xfe\x51\x6b\x44\x21\x70\x5b\x9c\x1a\x07\x99\xa9\xa5\xd6\x46\x2a\xfc\x3d\xfa\xb3\x09\x19\x8d\x25\xc4\xcc\x69\x40\x5f\x83\xaa\xc5\x00\x60\x16\xae\xa1\x91\x5a\xa1\x48\x50\xc9\xa1\x49\xd9\xf3\x0c\x55\xc2\xac\x14\x59\x3c\x26\x61\xbf\x3b\x28\x04\xf2\x12\x1d\x90\x76\xc7\xce\xd3\x49\x5a\x35\xd3\x4e\x39\xf4\xa4\x1e\x31\xca\x28\x2b\x79\x36\xa7\x33\xd1\x14\xd7\x1a\x1a\x02\xee\xd2\x58\xa6\xec\xe8\xbf\xab\x41\x48\x6e\x9b\x9d\x53\xb7\x78\xc7\xd8\x7a\x50\x17\xb4\x40\x93\x01\xa9\x9c\xa8\x50\xbe\x82\x96\x9f\x6d\xa9\xf9\xd6\x6c\xbd\x40\xdb\x0b\x61\x22\xcc\xd9\x26\xa8\x8e\x3f\xa0\xd3\x49\x5d\x25\x04\x9f\xdb\xb8\x48\xbd\xc3\xf4\xd9\x37\xde\x00\x7d\x3f\x49\x1d\x12\x5a\xa1\x89\xce\x85\xb5\x7a\xca\xa2\x54\xf6\xe3\xb4\xb9\x3a\xe5\x8f\x48\x84\x40\x4b\x6c\x05\x22\x2b\x30\x9a\x31\xd2\x1e\xd9\xd1\x89\xf6\x10\x33\xa4\xe0\x9d\x96\x19\x72\x42\x59\xa2\x5d\xec\x0f\x94\x00\x64\x86\xc1\x98\x1c\x40\x3f\xbb\x67\x09\xfc\xad\x28\x63\xb4\x50\xd4\xd5\xb3\x72\x88\x9c\xce\x20\xf5\x5b\x68\xec\x73\x9e\x26\x67\x40\x92\x05\x5a\x76\xe6\xb3\xbc\x8c\x33\x9a\x30\x3c\x41\x6f\xb7\xa4\x1c\xfc\xb3\x27\xef\x52\x62\xfb\x22\x7b\x96\x8a\x7a\x33\x40\x15\x2f\xc7\x52\xb1\xcc\xdb\x5c\x96\xee\xcd\x41\x79\x45\x52\x12\x53\x28\xb1\x61\x26\x55\xda\xce\xce\x56\x87\x36\xc8\x42\x51\xcb\xc5\x8d\x62\x2c\xed\xb8\x93\x2c\xe5\x41\xae\x77\x00\x28\x4f\x4b\x68\xcf\x28\x19\x7c\x89\x2d\xa3\x83\xa3\x06\xae\xfb\x5d\xf0\x73\xeb\x86\x34\xa7\xaa\x6a\x7b\xc4\x95\xe6\x1c\x44\x38\x4d\x8b\x6b\x0a\x09\xdb\x1d\x7a\x0b\xea\x18\x8a\x4a\x00\x92\xa7\x65\x1a\xd8\x50\x0f\x24\x06\xc9\x65\xea\xd9\xe2\xbc\x5c\x28\xb4\x55\x51\xd5\xc2\x26\x03\xc8\x15\x26\x65\x09\x19\x3e\xc9\x0c\xa4\xf8\x84\xae\x90\x42\xe7\x49\xd3\x0e\xcb\x48\xee\xed\x79\x01\x1e\x13\x5a\x6c\x4e\xb8\xe3\x1a\x80\x42\x05\x28\x4a\x8d\x40\x28\x6e\xe2\x36\xb2\x55\x57\xc2\x62\x62\xe7\xd2\xa8\x87\x4b\x21\x60\xf7\xef\x87\xb8\x78\xdc\xb1\x16\xd8\xd9\x32\x54\x4f\x41\x80\xbe\x58\x9f\xbb\x3f\x6f\x35\xfb\x0b\x1a\x81\xaa\xe0\x3c\x4f\x3b\xf4\x2c\x66\x26\x36\x92\x6d\x90\x27\x95\x5e\x3b\x5c\x09\x69\x98\xc7\x9e\x53\x09\x4d\xdc\x56\x2c\x46\xae\x9a\x32\xe9\x6c\xc0\xd4\x3f\x42\xec\x0a\x21\xca\x38\xda\xd9\x55\xdd\x3b\x71\xd9\x79\x2d\x1a\x12\x9a\x79\xea\xde\xd9\x8e\xd8\xca\x3a\x09\xbf\x06\xb5\x6b\xef\x54\xf4\xa0\xdd\x1a\x39\x28\x2a\x77\x39\x54\xf4\x72\x22\xa5\xa9\xd4\x3c\x58\xbd\xc4\x6a\x53\xa0\x8e\xe0\x99\xfe\x1c\xd4\xfc\x14\xe8\xa8\xa0\x01\x9b\x89\x0c\x64\x2c\xfc\xb7\x89\x10\x10\x22\xd4\xc8\x1e\x4f\xfd\x01\xb0\x2e\x0b\xf8\x82\xb1\xe8\x32\xbf\xb4\x77\x3c\xda\xc9\xce\xa6\x1d\x86\xd2\xae\x05\x04\x2b\x9d\x5d\x46\x59\xca\xc5\x8c\x5f\xd1\x60\x4f\xf5\x33\x09\xa5\x87\xbe\x92\xdf\x3f\xec\x2b\x91\x31\xc1\xcf\x0e\xa6\xeb\x99\xf7\x19\x4a\xf1\x1a\x5e\xcb\x07\x15\x95\xfa\x16\x07\x75\x16\xf2\x4e\x53\x2a\x0b\x82\xa4\x2e\xd8\xc0\xbe\x99\x05\x10\xda\xd4\x76\xa1\x36\xb7\x6a\x1b\x8e\xe6\x5d\x41\x74\x95\x35\xb4\xbd\x2f\xe0\xa2\xd4\x2d\x16\x41\x2e\xad\x3e\xa7\xe7\xb4\xb1\xb7\x57\x07\xa7\x5c\x21\xdb\x15\x7a\x5d\x9d\xef\x48\x1a\x43\x97\xdc\x2c\x4c\xc9\xe3\xdd\xca\xc5\x60\xf1\xe1\x75\x5a\xfe\x88\x9e\xe1\xbf\x1c\xff\x04\xb5\x8a\xbf\x3f\xb4\x42\xfc\xfe\xd8\x0a\x91\x74\xed\xf0\x0d\x22\x8c\x9f\x56\x57\xdf\xd9\x09\x6d\x66\x27\x1d\x33\x87\x2e\xcf\x33\xf5\xab\xe8\x78\x8e\x33\xf5\xbd\x52\xdf\x07\x8b\x55\x0e\x67\x3d\xf0\x3c\x2e\x7e\xa5\x53\x36\x55\x4a\x39\xe2\x2c\x41\x44\x9f\x3f\x9f\x74\x79\x8e\x1d\xfd\xab\xce\x5c\x05\xd6\x6d\xd1\xc3\x29\xe1\x7d\x77\xcc\xee\x32\x29\x66\x8e\xba\x9b\x99\xcf\xd7\x44\xa7\x11\x81\x66\x6f\xbc\x52\xe8\xbf\x93\x79\x8e\xaf\x74\x9e\xe3\x2b\xa1\xe7\x57\x3a\xcf\x4b\xf2\x4f\x9c\xc0\x2b\x4b\x7e\xee\xa4\x71\x5e\x27\x73\x7f\x2e\x77\xa7\xc2\xd3\xba\x3b\xdd\xe7\x68\x5f\xa4\xde\xb8\x2d\x59\xb2\x54\xe6\x17\xe6\x67\x7b\x1b\x04\x98\x59\xd4\xf7\x6c\x2f\x08\xcd\x4a\xd0\x1e\x43\x96\xf2\x9d\x0f\x75\xa4\xdb\x87\x97\xf3\xd3\x6f\x4f\xa6\x07\xdc\xfd\xef\xe3\x2f\x9d\x4c\xad\x0a\x27\x53\xab\xf2\xdf\x93\xe9\xbf\xd8\x64\x7a\xc0\x85\xff\x3e\xff\xd2\xc9\x94\x67\xe5\x64\xca\xb3\xfe\xf7\x64\xfa\x2f\x36\x99\x1e\x70\xd8\xbf\xff\xfa\x97\x4e\x26\xc9\x93\x93\x49\xf2\xfc\xef\xc9\xf4\x5f\x6c\x32\x3d\xa0\x86\x7f\xff\xed\xa7\x4e\xa6\x8e\x16\x7f\x81\x97\xce\x0f\xfd\x05\x58\x00\x3c\x61\x5d\x57\x06\xfc\x9f\x69\x0a\xdd\xcf\xa0\xcb\xff\x6e\x53\xe8\x3b\x66\xd0\x03\x30\xf5\xf7\x47\x12\xfb\xa9\x67\xb9\x1d\x9d\x62\x3a\xfa\xa2\xb5\x40\x1c\x9e\xd9\x86\xa5\x79\x8b\x4d\x9b\x45\xdd\x6d\x3f\x65\x9d\xd0\xa8\x97\x90\x96\x97\xb4\xc5\xa1\x61\x38\xf9\x08\x0f\xd0\x7c\xe0\xbf\x5b\x29\xa1\x94\x3d\x76\x0d\x53\x48\xb7\x10\x34\x75\x66\x99\x40\xc9\xda\x0b\xe2\x7c\xe9\x2d\x00\x65\x95\x98\x23\x1f\xae\x2d\xeb\xda\xd2\xb8\x0b\xe9\x1a\xb5\xb6\x67\x28\x6c\xff\x00\x06\x64\xe7\xd8\xe8\xfa\x2c\x72\x39\xd0\x4c\x2b\x52\xf7\x59\xc0\x84\x3a\x3b\x9b\xad\x30\x97\xba\xc5\x77\x3c\x79\x5e\x15\x65\x0f\x78\xdd\x2f\x4f\x92\x0b\x9f\xdd\x1b\x09\xb2\xe3\x2b\xe2\x8a\xe3\x55\xbe\xed\xb8\x23\x81\x78\x79\x92\x96\x08\x86\x7b\x23\x33\x77\x7f\xe4\xf1\xe1\x2f\xbc\x3c\xc9\xa8\xed\xb3\xe7\x73\xf9\xf0\x84\x54\x1a\x4e\xe8\x4f\x5e\x57\x49\xc3\x41\x51\xaf\x79\x2f\x8e\xef\x18\xd2\x02\x5f\x1d\x3f\xe3\x6c\xd2\x40\x25\xef\xf2\x67\xc7\xb1\xa7\xde\x90\x4b\xfe\x73\x4f\xcb\x9e\xba\x99\xc4\x3f\x79\x3a\xf6\xac\x00\x85\xf9\xd4\xe9\x5c\xde\x3f\x9f\xd2\x99\x5f\xf8\x09\xb7\xd9\xce\xe7\x27\xdc\xe5\x9f\x30\x8c\xdd\x9d\x3c\xca\xe5\x67\x5c\x95\xd6\x3f\x39\x07\xbf\x6d\xb3\x1f\x10\xc0\xbf\x7f\x88\x00\x6e\xad\x80\xd9\xf7\xec\xe0\x6a\x6c\x72\x46\x82\xc6\xde\x7d\xa7\x82\xda\xde\x2a\xa0\x8a\x90\x88\x0b\xc9\x71\x0e\xa2\x57\xdf\xb4\x2b\xb5\x13\x46\x50\x54\x4b\x99\x84\xea\xab\x5d\x6c\xdc\xc9\x24\xa3\x33\x0f\xe3\xdf\x90\xe1\x64\x91\x58\xc2\xe3\xcf\x32\x1a\x09\xd6\xa1\xc4\x85\x51\x47\x7b\x96\xa9\x57\xa9\xb9\xbd\x3c\xf5\x54\xc2\x78\xbb\xf8\xeb\x4d\x23\x3c\xe3\xe3\x2c\xf5\x1e\xaf\x2a\xbc\xe6\xb0\xac\xfe\xba\x37\xbf\xff\x8d\xaf\xa7\x12\xe6\xdb\x9d\x9a\x9f\xf9\xfa\xc8\xfa\x67\xbe\x0e\x6f\x2b\xd5\xf6\xe3\x57\x9f\xe0\x99\xa5\x1f\x3d\x81\x4f\x14\xf8\x5f\x63\x54\xde\x2f\xc0\xcf\xf6\xec\x4c\xdd\x09\x44\xe2\x32\xe4\xb0\x4d\xbd\xdb\x36\x0c\x10\xe3\x20\xb5\x7b\xc1\xf6\x30\x47\x10\xb5\xd8\x26\xe6\xb9\xa9\x06\x05\x15\x07\x78\xbb\x42\xda\x50\xe4\xd1\xcb\xee\x62\x33\x89\x0c\xfe\x19\x9a\x8b\xd0\xda\x70\x11\x1a\x1c\x8c\xce\x36\x4a\x6e\x90\xdc\x54\x7d\xc0\x98\x1b\x68\xbd\xe9\x34\xa4\x42\x4d\x25\x88\x5c\xe5\x8e\x12\xdf\x80\x80\x4b\x04\x49\x68\x24\xe4\x39\xdf\x1a\xe2\xf0\x0e\x08\xaa\xae\x52\xdf\xc4\x17\xc0\x21\xfd\xf0\x01\x7e\x7b\xfe\xbc\xf7\xfc\x2e\x9f\x9e\x41\xab\xfd\xfa\x07\x4e\x60\xa2\xc2\xf3\xe3\x13\x08\x37\xe0\x4f\xfc\x3e\x6e\x80\x96\xd7\xeb\xf7\xf2\x3d\x33\x18\x6e\xf3\x9f\xbd\x03\x5f\x9f\xc1\x77\x9d\xc0\x18\x7f\x66\x80\x6f\xef\x13\x0f\xe8\xff\xdf\xbf\x9c\xbc\x9d\xe6\xc9\x32\x9e\x42\xca\x1e\x85\xc5\xbe\x43\x8f\x03\xfc\x31\x84\x5c\x65\xaa\xc1\x4c\xd4\x5e\x95\xa0\x45\x7b\x31\x13\x08\x69\xc0\xb7\x6e\xe1\x51\xde\xa9\x8e\x43\x83\x2f\x00\xbd\x4a\xb3\x8d\xa0\xd8\xdf\xc3\xab\x15\x4b\xf3\xcb\xa1\x52\x5a\x56\x59\xb8\xe4\x72\xc4\x5c\xa9\x06\x0a\xfa\x26\xd0\xe6\x84\x7c\xc4\x16\xa4\xee\x10\xff\x97\x14\xa0\x46\x9d\x35\xb4\x50\xfa\x2e\x61\x82\xf8\x75\x97\x3a\x03\x70\x5c\x68\xa2\xce\x85\x20\xde\x8c\xd2\x9c\x0c\x22\x7f\x73\x4e\x24\xde\x2e\xdd\x0e\x21\x62\x05\xc2\x95\xd4\x14\x44\x5d\xba\xbb\x04\xbe\x63\x17\x28\x0c\xc5\x4d\x2e\xe9\x2a\x92\x2b\x23\x04\xd4\xee\xc3\x9c\xc0\x49\x03\x65\x81\x21\xe4\x17\xf4\x86\x67\xd4\x2e\x15\xd0\x11\x09\x66\x4a\xf0\x15\xc8\xcb\x91\x60\x88\x05\x67\xbe\x19\x5d\x01\xe7\x88\x4e\xd8\x43\x7d\x56\x64\x6b\x9a\x04\xd2\xdd\x3b\xbf\xb1\x82\x21\x4f\x17\xd2\x63\xef\x41\x4a\x0e\xad\x05\x75\xc0\x35\x35\xf2\xfb\xa1\x0a\xba\x45\x92\x9c\x42\x31\xfc\xb2\x0b\xa4\x72\x83\xf3\x02\x15\x4a\xb7\xca\xd9\x12\xdb\x51\xc0\x4a\x4b\x6c\x3d\xe6\x34\x2c\xb6\xb7\xc9\x32\x12\xe5\xf3\xf3\xd2\xc1\x5a\x68\x14\xb2\x29\xb5\x7a\xfb\x07\x5f\xe3\x28\x1e\x74\xf7\xf2\xee\x88\xfb\x6f\xde\x0d\x09\x00\xa4\xae\x29\x22\x10\x23\xf2\xf0\xf9\x15\x83\x55\x07\xb3\xd4\xb8\x71\xe0\x22\x08\x35\x1b\xdf\x02\x88\x6d\x66\x98\x0a\xcd\xa8\x14\x72\xd0\x74\xd9\xeb\x08\xb5\x58\x70\x29\xda\xd1\x76\xcf\x56\x11\x50\x50\x02\x2d\x93\x00\xde\x25\xa2\x88\xd0\x7a\x51\xaa\x48\x21\xe9\x40\xf9\x17\x96\xfb\x10\xf2\x4e\x97\xad\x81\x0a\xbf\x06\x0a\xef\x49\x6f\x07\x1b\x08\x84\x11\x61\xc4\x09\x44\xe5\x92\xa1\xf2\xe8\xb4\x3b\x09\x61\xf6\xe9\xe2\xc7\x19\xb4\xbf\x0a\x06\x6f\x54\x80\x0b\x95\x64\x57\xc9\x51\x73\xd9\x33\x0a\xb3\x6d\x06\x2d\xe5\x80\x78\x07\x48\x09\xb5\x08\xd8\x8d\x76\x29\x25\xf4\xa0\x6d\x80\x27\x45\x66\x3b\xf5\x28\x2e\x64\xac\x64\x0b\xc6\xb7\x2d\xc7\x3f\x1e\x1a\x42\xfe\x48\x1f\x78\x98\x6a\x11\xa5\x8e\x2b\x92\x10\xbd\x8d\x6b\x64\x3a\xa2\xb7\x55\x91\xfc\x14\x1a\xf5\x7d\x5a\xa8\x77\x81\x6f\xf6\x95\x1f\x03\xbe\xfd\xe3\xa1\xcf\xe0\x0f\xf9\x16\xdd\xa0\x22\x01\x33\xf5\xc7\xae\x61\xea\xcf\xbe\x84\x07\x64\xfb\x1f\x1f\x21\xdb\xed\x29\x25\x34\x48\x82\x51\x14\xa9\xa6\x2a\xea\x38\x7f\x7b\xaf\x32\x55\xe7\x9f\x69\x6d\xd7\xf9\x1e\xf9\x42\xae\xba\x40\x8d\x68\x10\x70\x25\xad\xb7\xef\x0a\xfc\xc4\x5c\x7f\xa8\x83\x80\x03\x3f\xdc\x36\x1b\x92\x23\x3e\x7c\x64\xdf\xb8\x3f\xe9\xcb\x77\xdc\xd1\x07\x84\xf2\x1f\xf9\x43\xac\x40\x47\x6a\x6a\x13\x73\x4d\x4b\xf3\xfc\x0f\x93\x5a\xcc\x6d\x6d\x51\x73\x06\x2f\x95\xff\x7d\xf3\x98\xf5\xfd\x5b\x46\x2d\x78\xca\x0c\x2c\x4b\x0a\xfa\xd6\x7c\x1b\xec\xbd\x03\x01\x95\x58\x03\xdd\x65\xe0\x0e\x4f\xcf\xbd\x1e\x28\xae\x91\xde\x38\xf2\x1c\xe9\xcc\xd2\x21\x8b\x87\xdf\xbb\x6c\xf7\xd7\x14\xfd\xa2\xbe\x3e\xea\x9f\x77\xe5\x3f\x40\x5e\xff\xf8\x06\xe4\xb5\x87\xa2\xf5\xad\xbb\xfb\x55\x6e\xd3\x02\x6b\x69\x73\xf3\x08\xbb\xcd\xf7\x8f\xfc\xea\x81\xdf\xe7\x41\x5f\x8d\xb2\x06\x79\x38\xe8\xd5\x8c\xbb\xcf\x38\x6e\xeb\xc7\xd7\x40\x6f\x1e\xf3\xd5\xe3\x7d\x9d\xc6\xbd\xdc\xae\xe0\x1c\xed\xed\x23\x5f\x5e\xdb\x7e\xf3\xa9\x97\xf1\xb7\xd7\xff\xbc\x73\xe0\x01\x4e\xfa\x47\xfd\x68\x0e\x24\x70\xcc\x8d\x2d\x27\x08\x70\x5c\x63\xab\x65\x8b\xe8\xec\xb4\x7f\xb6\x5a\x7e\x10\x7a\xf3\xcf\x80\xbc\xf9\xc7\x03\x42\xea\x8f\xb7\x10\x52\x37\xde\xb3\x09\x19\x87\xb4\x13\xe4\x05\x90\x25\x93\x3b\xcd\xd3\x3c\xc0\x76\xee\x94\xd1\x0b\x70\xf2\x41\x18\x51\x9c\x5f\x56\x06\x55\x73\x66\x0d\xc3\x1c\xb6\x11\x40\xaa\x47\x56\xb2\x83\x62\x9d\xc3\xde\xc6\x07\x32\x8f\x11\x64\xec\x3d\x8c\xc0\x8f\x1c\xef\x6a\x6f\xc5\x1e\x3a\x09\x6d\xba\x27\x28\x53\x4b\xa1\x97\xb4\x41\xda\x39\x53\x4a\x1a\xa4\x45\xde\xa0\x97\x9d\x68\x5b\x32\xe8\x62\xf3\xc0\x11\x6c\xdd\x0d\x39\x1d\xf8\xef\x96\xc1\xf9\x69\x1f\x68\x60\x8f\xa0\x5e\x16\x62\x4f\xb7\x6c\x01\xca\xdc\x31\x32\x0e\x89\xea\xec\xcf\x7c\xf5\xf2\x34\xab\x84\xd1\x81\x5b\xc5\xb5\x8d\x75\x6d\x93\xd7\x66\x17\x03\xc1\xec\xc3\xfe\xb3\xdb\xa5\xca\x0c\x94\x76\x18\xc7\x60\x8a\x70\xf8\x25\x65\x73\x5b\xdb\xd8\x51\x05\x43\xab\x59\x22\x95\x79\xbd\xa3\x9c\xa6\x5a\xee\x80\x40\x6c\x13\xef\x26\x54\x61\x53\x7d\x36\x67\x98\x2d\x65\x35\x13\x95\x19\x2b\x49\x84\x05\xfa\xf0\x7e\x03\x6e\x98\x47\xc4\x12\x99\x2f\x2e\x4e\x9f\x2b\x54\x1c\xf0\x17\x2e\xcf\x75\x14\xe7\xf2\x45\xe4\x78\x50\x39\x74\x11\x3c\xd8\xb2\xa8\xb5\x86\x32\xda\x6e\x4e\x38\x48\x24\xc9\x9a\x1b\xf5\x8e\x3a\x08\x1c\x58\x66\x1c\xcd\x4b\x2e\x09\x75\x1e\x8b\xae\xe8\xf1\x4b\x46\x72\x70\x87\xdc\xbc\xcd\x27\xfc\x5e\xce\xa1\xfc\x52\x37\x3c\x84\x5d\x91\x6e\xcd\xc5\x22\xd3\x66\x3f\xd4\x4e\x61\x5f\x84\x4a\x09\xec\xc0\x81\x0c\xec\x8a\x42\x52\xc3\x8c\x9c\x62\x96\x6d\x20\x06\x65\xbb\xec\x11\x25\x93\x8e\xee\x82\x42\x24\xd5\xc1\x17\x61\xf1\x8d\x38\x35\x53\xc2\xc6\x69\xfc\xa0\xd9\x4b\xa2\xf0\x4e\xce\x58\xb2\x96\x93\x62\x74\x07\x77\x3e\xd3\x46\xed\x88\xb5\x87\x31\xc0\xcc\x0e\x71\x4a\xf3\x2c\x15\xe8\x4d\x65\x70\x00\xd9\x16\x74\x00\x0c\xca\xf8\x88\xf9\xfc\xa1\x68\xc8\xfd\xa0\xde\xa1\xdd\x13\x17\xdc\x91\x1c\x20\x7c\x08\xfe\x7b\x44\x97\x81\xa1\x12\x04\x36\x6f\x49\xa9\x92\xa0\xef\x58\x02\x79\x2a\x31\x51\x28\x17\x43\xd8\x74\x14\x71\x58\x28\x79\x79\x2f\x44\x69\x43\xab\xd9\x46\x6a\x3b\xe5\xd2\x1b\x67\x1e\xdb\xfe\x5d\x06\x35\x42\x2d\x63\x23\xab\x7a\xa3\x14\x0c\x49\x31\xd1\x1c\x5f\x7f\x59\x05\xba\xa6\x1e\x3c\x37\x72\x4a\x77\xaa\x6a\xda\x53\xcc\x10\x88\x82\xaa\x3a\x7e\xd8\xfe\xd6\x72\x10\x81\x5d\xd2\x81\x52\x5d\xdb\x8b\xd8\x52\xe9\x1d\xb2\x58\x47\xa5\x26\x9c\xc5\x52\xca\xeb\x59\xd2\x53\xdd\x67\x96\xcb\xc3\x55\x68\x65\x43\x37\x2c\x61\x27\xa4\xd8\x80\xb6\xe0\xe9\x3d\x44\xf5\xd4\x17\xd6\x90\xcb\x65\xef\xc1\xe6\x41\xa0\x0a\x32\x24\x3d\x13\x05\x99\x41\x64\x91\x6c\x36\x61\xce\xdb\x0e\xed\x88\xfa\x4a\x55\x1d\xf4\x72\x74\x48\x24\xc6\x06\x92\x4f\x07\x6e\x67\xa5\x95\x24\x21\x2f\x2b\xc4\xd5\xde\xab\x9e\x79\x40\xa3\xc0\xe2\xba\x6c\xbe\xdc\x5a\xc6\x9d\xaf\xec\x6f\x1e\x89\x49\x19\x08\x8f\xb2\xaf\x62\x3a\xed\x63\x2c\xea\xd6\x0d\x78\x70\x96\xb5\x8b\x1c\x31\x79\xd3\x3e\xdb\xb6\xb5\xef\x24\xbf\x0e\x82\x2a\xd5\xe1\xe4\x0b\xd4\x26\x23\x27\xb3\xb2\x07\x1a\xb1\xb4\x94\xb3\xdb\xde\x9e\xda\xf4\x26\x8f\x69\x0b\xa6\x50\xc9\x12\x1d\x3d\x23\x07\x69\x1d\x28\xeb\x3c\x83\x86\xd2\x42\x61\xae\xb8\x7c\x62\x63\x74\x26\x0d\xec\x88\xec\x19\x5f\x2f\x7d\x7b\x24\x59\xc4\x67\x36\x48\x3f\xf2\xfc\xf6\x6d\xc4\xbb\xdf\xf9\x81\x8d\xf2\x01\xa2\xfa\x47\x5f\x09\xb5\x2a\x16\x0a\xd5\xfc\x1c\x5b\xad\x3b\x38\x33\x85\xdc\x16\x81\xb2\xa8\xb0\xbd\xbf\xd4\x2d\xf7\x90\xf7\x36\x82\x06\xde\xf4\x93\x17\x70\x9a\x35\x33\x4b\x58\xf4\x2a\x29\x53\x43\x33\xab\x6e\x90\xc9\x9d\xd7\x88\x37\x75\x7a\x27\x3e\x34\xa6\xcc\xac\xcc\x6c\x6b\x30\x68\xdb\xe3\xc0\xb6\x92\xab\x06\x8b\xed\x98\x5d\xee\xc3\xf9\xb0\xf9\x04\x29\x8c\x0b\x8b\x70\xcd\xd5\xa9\xff\x81\xcd\x57\x5b\x4b\x9d\xe2\xb0\x66\xd6\x61\xa9\xf5\x28\x8d\xb8\x71\x74\x62\x6d\xd0\x87\x68\xd7\x31\x2f\x20\x94\xcb\x7d\x35\x66\x6a\x3d\xa7\x9e\x92\x58\x08\xfa\xe9\x48\x38\x84\xb3\x2f\xaa\x5c\x63\x31\xef\x49\xc7\x16\x33\x5a\x8d\xd4\x9c\xc6\x4d\x14\xaa\xde\xad\x9b\x81\xc7\x4d\xcb\x9d\x93\xb5\xcf\x6d\x84\x56\xf2\x6e\x86\x1f\xfc\xb8\xad\x60\xb5\x83\x9d\xa3\x42\x60\xf9\x88\xfc\x4a\xdb\x40\x5c\xa0\x05\x63\xfa\xf8\xd7\x9e\x74\x97\x8c\xde\x9c\x5e\x28\x2f\xee\x32\x55\x50\xd6\x2a\xe7\xc6\x0d\xa0\x76\x84\x8e\x09\x05\x37\x98\x62\x46\x52\x54\xcc\x18\xf5\x12\xa4\x4f\x67\x98\xc9\x60\x0d\xbf\xc6\x5a\x68\xc9\xd3\x92\x46\x86\xe9\x65\x1f\x49\xfa\x54\xb2\xe5\x01\xab\xfa\xc7\xc9\x11\x3d\x55\x43\xcf\xf3\xd9\xd6\x0d\xc4\x75\x82\x77\xac\x81\x88\xd9\x62\x12\x27\xb5\x8e\x79\xd5\xd5\xdc\x78\x2c\x09\xfa\x48\x1f\xc1\x6e\xc5\x2f\xf5\x39\xa7\xb9\x53\x5c\x2b\x44\x41\x9f\x03\x79\xd6\x71\x54\x5e\xa4\x87\x42\xbc\xfb\x33\x36\xff\xe7\x28\xd0\x0e\xc8\x78\x0c\x70\xe3\xd9\x43\x91\x4e\x2d\xf2\xe5\x11\x44\xbd\x9d\x44\xbf\xa3\xa9\xe3\x8c\xdb\xa3\x2b\x94\x84\x69\x26\x51\x70\x39\xd2\xea\x73\x7f\x1e\xbf\xd4\xe7\x89\xf6\x99\x61\x6b\xc0\x1e\xfb\xe5\xc0\x72\x31\xd7\x0f\x6c\x65\x1e\x02\x39\x2f\x3c\xf9\xc8\x42\x6c\x87\x3a\x2f\x35\xee\xfc\xb3\x9d\xfe\x73\x04\xca\x21\x85\x02\x80\xb7\x3e\x97\xae\x16\x94\xe8\x73\x2c\x5d\x5f\x9e\x9a\x14\x7e\x94\x9a\x7f\x54\xe7\x16\x59\xc9\x14\x28\xad\x8b\xf9\xd4\xd8\x95\xc5\x3e\x1d\xf8\xe2\x55\x52\x7f\xce\xa2\x5b\xa1\x38\xe0\xb5\xb7\xad\xe4\x90\x65\x3e\xdb\xf2\x84\x28\xe3\x0c\x1d\xad\x49\x60\xd6\x47\x92\x3c\xf3\x56\x8b\xef\xc8\xd2\xdd\x05\x56\x8a\x84\x60\x07\xf0\x86\xe5\x00\x62\x1a\xbb\xdc\xcb\x15\x5e\xa4\x9d\xf4\x35\x4e\xe1\xcf\xd7\xb6\x33\x16\xbb\xc1\x4f\x6c\x90\xc1\xc6\x0f\xe8\x8e\x89\xab\x97\xe6\xda\x42\x95\xfa\x2c\xe8\xf5\xb2\x8d\xc9\xdc\x23\xfa\x64\xae\xd9\x86\x24\x31\xb5\x6c\xfb\x5d\xf3\x24\xa0\x5b\xcf\x52\x2d\x8a\x93\xee\xd7\x2d\x69\xeb\x21\xa7\x1d\xfb\x73\x23\xbe\xab\xb1\x0f\xa7\x35\xb8\x56\x87\xb4\x30\x28\x5c\x03\x3d\xa8\xcf\xc4\x7b\xef\x72\x81\x5e\xde\x0f\xf8\xde\x23\x03\xfd\xc4\x22\x7b\xc0\xf0\xfe\xf1\x80\xe1\x55\xe9\xed\xcc\xec\xb0\xd1\x09\xc6\x82\x25\x43\x16\xab\x07\x6e\x81\x05\xc0\xa3\xa1\x25\x55\x88\x16\x4b\x65\x69\x8c\x49\x49\x07\x24\x0e\x83\x74\x34\x81\x4a\x67\xbb\x91\xd9\x34\x3b\x7b\x0a\x10\x23\x3a\x69\x7a\xe4\x29\xce\x85\x5b\x93\x86\x92\x2c\xe2\x76\x7d\x74\xad\x68\x61\x33\x7f\xa7\x39\xf5\x94\x6d\xc5\x14\xfe\xab\x99\xea\x98\x94\xa6\x45\x45\x13\x1a\xc8\xcd\x7b\xba\x6c\xd1\x36\x3b\x9d\x24\x83\x5a\x10\x16\x38\x40\x53\xb9\x8c\xbd\x14\xdb\x9c\x7b\x09\x6d\x20\x8d\x37\x43\x1d\x6c\xbd\x36\xb3\xda\x2c\x04\xea\x66\x35\x48\x15\x06\x07\x05\x31\x13\x09\x2c\xd0\xad\xc4\x6b\x23\xc7\x85\x52\x50\x8f\x33\x2b\x79\xf2\xda\x3d\x64\x6e\x52\x68\x40\x6b\x09\x3e\x58\xc9\x98\x2c\x5e\x00\x28\x90\x53\x61\x03\x91\x50\x47\x4a\xb6\x02\x35\x76\xe4\xdc\xd1\x20\x06\xf3\xc2\xce\xfb\x9c\x69\x01\xa0\xf8\xc8\x78\x73\x87\x02\x0f\xcb\xba\x9d\x9e\x1c\xa8\x89\xcd\xa7\xbf\x53\x9b\xeb\x0b\xd1\x47\x31\x8c\xcb\xce\xce\x19\x92\x0a\x4f\xbd\x63\x3f\x1c\x07\x96\x93\xd9\x7a\x48\x10\xc4\x16\xb4\xac\x4e\xe3\x43\xe1\xe7\x53\x5b\x9e\xbc\x2c\xdd\x31\x65\x75\xda\xf6\xae\x65\x57\x34\xef\x61\x5b\xc7\x7a\xcf\x1e\x71\x21\x5a\x2e\xee\x68\x42\xa8\x0f\x65\x22\x98\x9d\xc1\x77\x4a\x83\x90\x1f\xa6\x1b\xdb\xca\x22\xd9\xd8\xe1\xf9\x46\x94\x4d\x51\x66\x23\x14\xb3\x93\xa2\x87\x3d\xc6\xb1\x4f\x97\xad\xc3\x95\x6f\x1c\x7d\xc7\x64\xb6\xe0\x0a\x7d\xae\x97\x5d\x66\x0d\x73\x86\x2c\x25\xe8\x98\x07\xfa\xfa\xc4\x26\x82\x5d\x6b\xb3\xb3\xc1\xd6\x98\xe1\x76\xdb\x7c\xd5\x3d\x76\x28\xd7\x21\x94\x25\x74\xb2\x38\x74\x92\x9d\xbf\x76\x37\xa8\xaf\x69\x0f\x6d\x40\xff\x1e\x58\x3e\xca\x33\xb5\xcc\x76\xc2\xdc\x50\xd9\xeb\x19\xfb\x81\x42\x19\x31\x56\x74\x07\x4b\xcf\x66\xff\xc0\x2f\x87\xa2\x7c\x58\xfb\x9d\xc5\x94\xc9\x19\x6c\x6b\x0a\x7a\x47\x90\x44\x58\x9e\x85\x44\x71\x0e\x92\xa2\xe0\x31\x53\xa6\xbd\x41\x20\x45\xe1\x38\x0f\xbd\xa0\x1f\xdb\x35\xe0\xb0\x66\xa9\x6a\x32\x28\xe0\xb3\x28\xa1\xa9\x24\x4a\x32\x77\x5b\x6a\x84\x08\xd4\xa0\x1e\xe9\x91\xc1\xc9\xab\x33\x47\xac\xd9\x2d\x7a\xed\x6e\x52\x6b\x72\x06\x57\x92\xb2\x77\x18\x7b\xad\x8c\x5f\x2d\x4a\xab\x37\x3e\x48\xda\x31\xca\x85\x39\xa7\xc5\xa6\x16\xfe\x89\xa0\x1f\x7d\x96\xa0\x33\xed\xe8\x7c\xd4\x20\x10\xb7\xa8\x3b\x09\x42\x50\xf2\x94\xb2\x8b\x85\x7b\x16\x44\x96\x7a\x14\xc4\x8e\x52\x87\xad\xed\x9c\x88\x5a\x28\x97\x23\xdb\xb7\xe5\xc8\x89\x98\xd4\xbe\xab\xc2\xee\xda\x7e\x90\x51\xc1\x84\x4c\x6d\xe9\x9f\x68\xa8\xfb\xc7\x03\x82\xfd\x8f\x5f\x3f\xca\x9d\xe5\x42\x02\x31\x65\x27\x1d\xcc\xe5\x4a\x97\x50\xae\x53\x5d\xeb\x94\xd3\xb5\xae\xc5\x05\x75\x01\xd8\xd5\xe6\x14\x53\x4c\xe6\xa0\x27\xda\x15\x58\x8b\x6b\x8d\x41\x00\x3c\x07\x36\xb4\x2f\xbd\xaa\xb9\x20\xca\x9d\x72\x21\x66\xc0\xc9\x98\x04\x70\xaf\x19\x96\xdc\x0f\xd8\x9a\x71\x2e\x52\x8b\x92\x94\xab\xf4\x90\x1b\xcf\x13\xd2\x0c\xe3\x24\xd9\x6c\xe6\x3c\x91\xa8\x1b\x50\x9a\x3e\x2e\x3b\x44\x8f\xc0\x9c\xc5\xe2\x5d\x54\xb5\x58\xd0\x13\x2a\x5e\x51\xb4\x1f\x25\x05\x94\xb6\xe6\x6d\x93\x5a\x25\x58\x60\xa3\x02\x03\x4c\x93\xc5\xa2\x5f\x3d\x9b\xb3\xf1\x34\x77\x09\x45\x02\x92\x60\x65\xa9\x1a\xb5\x72\x68\x09\x83\xe2\x28\xa1\x67\xf0\xfe\x63\xad\xa2\x29\xb1\x1f\x82\xe5\x06\xb2\x2b\x7c\xd0\x8e\x5c\x2c\x86\xcf\x07\x98\xf8\x60\xd2\x06\x8a\x8a\x16\x29\xa7\xa0\x3d\x58\x30\x43\x51\x59\x76\x26\x16\x68\x65\xd4\xd0\xb4\x2f\xcd\xdc\x25\x81\x3e\xa7\xb9\xc3\x6e\xb8\x49\xa0\xa7\x8b\x30\x8d\x4a\xb0\x5e\x46\x9f\xc3\x13\x32\x68\xb3\x5f\x44\x6f\x58\x47\xf6\x35\x07\xe8\xce\xe3\x7c\x71\xfb\xf0\xf6\x8d\x73\x94\xdb\xc8\x77\xbf\x77\x77\x1a\xe7\xd9\xd9\x13\xaa\x1a\xa6\x54\x20\xd4\xbc\xeb\x9e\x8c\xaa\xb2\x88\x15\xf8\x18\xe6\x6a\xd2\xce\xd0\x41\x67\x06\xcd\x65\x9f\x74\x1e\x11\x8b\x46\xe5\xb6\x8d\xe8\xec\x17\xa6\xc2\xb3\xdd\xf7\x32\xb9\x7f\x56\x62\xc6\x4f\x3e\x5d\xd4\xdf\x6d\x8b\x40\x5d\x5e\x58\x0e\xe7\x03\x4b\x3d\x88\xb6\x43\xb3\x5a\x9c\xaa\x98\xce\xf3\x50\xa0\xe2\xcb\xa1\x70\x1e\x09\x35\xee\x83\x0e\x89\xad\xd7\x4a\x9d\x59\x51\x39\x40\x3e\x88\x2a\x5e\x9b\x29\xd4\x9e\x77\x51\x7b\x94\x40\xd3\x83\xab\xb3\x99\x65\x6b\x14\xb9\xdf\xe3\x20\x11\x7e\xa8\x98\x34\x3b\xc8\xf2\x0a\xda\x7f\x63\x4d\x9c\x2a\xa2\xe9\xa0\x3e\x3d\xb6\x7b\x97\x4b\x9a\x93\xfb\x6d\x1a\x97\x23\x52\x3a\xc7\xb5\xb5\xc5\x41\x7d\xcd\x2c\x27\xd0\xf5\x4e\x46\xce\x55\x50\xa0\x17\x98\x06\x65\xa7\xe1\xe4\xdb\x0f\x95\x20\x9a\x0f\x6a\x12\x71\x33\xab\x35\x80\x57\xee\x13\x26\xe8\xa1\xef\xe1\x8f\xdf\xfe\x8f\x3b\x55\x4c\xad\x6d\x81\xe1\x45\x57\x5b\xb4\xb4\x20\xed\x59\xda\x35\x5a\xc4\x76\xff\x1e\x19\x19\x1b\xff\x77\x2d\xe3\x99\x94\xb6\xeb\x0d\xde\x5e\x9b\x1c\xa2\x7f\xc5\xb0\x77\xa0\xff\x1f\x1c\xf6\xf2\xe6\xb8\xf7\x0d\x03\x3f\xf3\x7c\xef\x7b\x0d\x7e\xda\xb8\xe0\x9a\x2b\x25\xdd\xb8\xe6\xe0\x7a\x0c\x92\x1d\xd0\x25\xbe\xc6\x91\x15\xf9\x61\x0a\xba\xaa\x4d\x45\x1d\xa1\x8d\x45\x34\x57\x52\xc0\xbf\x0f\x7c\x7a\xb5\xc3\x71\x34\xbf\x7f\x70\x38\x8f\x52\x14\x55\x69\x3d\x19\x0f\xf0\xff\x2b\x74\x67\x9d\x90\xf8\xee\x5d\x11\x6f\xaa\x30\x77\xaa\xad\x08\xda\x66\x99\x5d\xd1\xfd\x5b\x3e\x7a\x69\xe5\x2f\x1c\xbd\x6b\xb2\xd1\x2f\x7f\xd1\xf0\xb3\xb7\xbf\xf0\xe4\x45\xb3\xfe\x94\xe1\x2f\x5f\x8f\xff\x6d\xc3\xf1\xd0\xee\xf2\xc7\xef\x1f\xa9\xa0\x54\x8b\x41\x05\xb5\x58\x10\x62\x6e\x82\x32\x5b\xea\xf0\x37\x2c\x8e\x9b\x8b\x89\xcc\xf3\x2e\x8c\x7c\xe0\x7e\x92\xbe\xc8\x4b\x43\x65\x84\x66\xee\x24\xb4\x0c\x53\xdb\xaa\xc7\x44\x94\xe0\x65\x02\x9c\xfc\xa8\x2d\xdd\xc9\x02\x21\x42\xd2\x0d\x8c\x31\x39\xa5\x2d\x6a\x97\x20\x66\xde\xb2\xe4\x0d\x0e\xb9\xe6\xb1\x3b\x65\x07\xc2\x8b\xc9\xbc\x8f\x6f\x5f\x63\x91\x12\xe4\xee\xb9\x20\x6c\x0b\x10\xbb\x42\xed\x6a\x3c\x9b\x8b\xf2\x5a\x48\xf5\xf2\x36\x4c\xfd\x99\xf2\x61\x2c\x7b\x8d\xfd\x24\x0a\xc9\x74\x93\x14\x3f\x52\xcf\x9f\x55\x66\xa0\x70\x22\x16\x04\x4f\x9c\xaf\xe6\xf1\x6c\xe7\x8e\x2b\x89\x52\x1b\x2f\x2e\x66\xe8\x76\x67\xe6\x14\x7d\xe7\x50\xbf\x1b\x5e\x36\xd4\x60\x77\xc8\x6e\x9d\xb4\xc4\x5b\x19\x05\x42\xc2\x7c\x18\x88\x3f\x18\x96\xcc\xa5\x28\x9d\x01\x4a\x68\x8b\xb3\x46\xa7\x53\xc4\x6d\x7c\x10\x9d\x8f\x36\xe7\x0b\x88\x1c\x1a\x99\x25\xe6\x81\x3a\x15\xf1\x71\x95\x8a\x9e\x35\x81\x78\x7d\xcb\xc8\xc8\xeb\xc6\x07\xd1\xd7\x13\xe9\x5b\xf4\x4f\x90\xef\x17\x9e\x90\x40\x85\xd6\x8c\x19\x72\xaa\xb8\x8d\xb6\xb9\x5a\xd4\x6b\xb6\xaa\x6d\xfc\xf5\x35\x2f\x3a\xae\xe5\xac\x56\x62\x5e\x9d\xe7\x9e\x49\x77\x33\x42\xec\x6b\x1e\xb6\x2d\xf2\x6e\xe0\x4a\x21\x88\x8d\x7b\x74\xdc\x6e\xdb\xba\x95\xdb\xba\xcb\xdb\xba\xf1\xf6\x18\x2e\x5b\xf4\x87\x82\xc7\x09\xda\x17\x7b\x54\xc7\x7a\x70\xeb\x49\xfa\x93\x5d\x8f\x7a\x5b\xb3\xe0\x99\x93\xe7\xa3\xd6\x1d\x4c\xb0\xcd\x67\xdb\xce\x5f\xf1\x49\x78\xac\x59\x79\xce\xd3\xdb\xd4\xe5\x64\xe6\xf9\xd9\x24\xf7\x29\xcf\xf9\xbf\xf9\x82\xb0\xf5\x93\x7b\xf0\x75\x72\xdc\xad\x9d\xb5\xa0\x70\x87\x6c\xa9\xf9\x13\x6f\x97\x9d\xb7\x98\x2b\xf2\x58\x4b\x14\x2b\xd1\xe2\xdf\x1b\x29\xd2\x6d\x71\x9f\x93\xad\x6f\x6e\x09\x76\x45\x8e\x0f\x9b\x14\x82\x81\x58\xb2\x37\x79\x24\xf0\x95\x45\x19\x2b\xe3\x99\x83\x70\x76\x34\x3d\xa7\x7d\xdf\xce\x17\xfc\x64\xc7\xf4\x43\x3d\x2f\x9d\xda\x1d\xc8\x25\x9d\x50\x4d\x48\xb2\xe8\x27\x3a\x44\xfe\xf1\xd0\x21\xf2\xc7\x1f\x1f\xcb\x8a\xe6\xd0\x52\xdf\x7b\x80\xa0\x5b\xce\xde\xce\xc8\xd2\xeb\xb0\xf5\xdf\x7b\x90\x6c\xfe\xb2\x4a\x00\x9d\x7b\x34\x17\xf1\x46\x05\x9c\xd5\xae\x1e\x62\xfa\x9e\xf4\x45\x26\x05\x42\x96\x1e\x0b\x81\x11\x0d\xdc\xb8\x01\xb8\x21\xfc\x04\x22\x60\xfb\x09\xa1\xd4\xaa\xfd\x88\xb2\xe4\x47\xd6\x78\x7b\x7a\xb6\x9a\x73\xa8\x13\x38\x62\x70\xd0\x1f\x16\x19\x7b\xca\x11\x10\x93\x9a\xdb\x46\x92\xf1\x6c\x9b\x02\xc3\xdb\x4e\x37\x1b\xa4\xcc\xd4\x49\x8e\x59\xe5\xe2\x6d\x00\x90\xe6\xc4\xa2\x30\x9b\x09\x5a\x6a\x40\x88\x8f\x98\xc1\xdb\x62\x7e\xf7\x16\x27\x78\xb9\xb2\x6e\xb9\xf4\x90\x0b\x62\xd0\x14\xe8\x1f\x33\x8c\x60\x5e\x89\x32\xcc\x2a\x94\xdd\x95\x81\xa6\xbf\x90\x4b\x3a\x94\xb1\x1c\x86\xce\x28\xcf\x62\xe8\xdd\x66\x92\x6a\xa8\x29\x85\xd6\x0e\xfe\xf9\xc4\xb3\x7d\x40\x75\xff\xf1\x11\xa7\xfb\x2c\x23\xd4\x34\x36\xa4\x60\xb2\xce\x6b\xac\xb2\x31\x1b\x59\xcd\x86\xa2\xf8\x55\xd3\x35\x96\xb9\x49\x9f\x21\xf7\x02\x59\xc7\x9c\x37\x85\xde\x21\x13\x7a\xc9\x66\xae\x85\x36\xe9\xe5\xa9\x36\xa8\xf7\xa5\x2d\x27\x84\x19\x36\x0c\x6b\xb7\xc0\xc4\x94\x20\x39\xbd\x3c\xcd\xd4\x2d\xe8\x5a\xdf\xcf\x94\x93\x8c\x10\x96\xd4\x3c\xed\xee\xbc\x3c\x09\x58\x95\x5b\xdd\x84\x3d\x9f\x1b\xf3\x99\xd3\x86\x9c\x29\x0c\xb1\xb8\x66\x24\xaf\x1e\x82\x34\x1d\xc9\xc9\x72\x4b\x4e\x7a\x3a\x9d\xe9\xc9\x7e\x4b\x4f\x5e\xf8\x22\xb6\x33\x7b\x19\x57\x1a\xb5\xb9\x2a\x01\xc5\x8e\x61\x15\xcb\xb1\xfe\xbe\xfa\xf4\xd5\x17\xd7\x70\x1c\xff\xb8\xff\xcd\xfb\x93\xe1\x09\xfe\x27\xe3\x81\x2e\x7f\x06\x10\xf4\x3f\x1f\xe0\xbf\x5f\xd2\x47\x4d\xc1\x39\x97\x90\x13\x36\x3e\x35\xc7\x07\x34\x84\x16\xd2\xcf\x53\xd4\x84\xf9\x32\x3d\x25\x50\x6c\xbf\xa9\xc1\x56\x54\x76\x2e\x31\xef\xfc\x41\xcd\xad\xbb\x0f\x85\x02\x3b\x96\x71\xca\x80\x50\xa0\xd5\x97\x04\x8f\x36\x97\x50\xad\x63\x3e\x8e\x62\xff\xf1\xfc\x2f\x9f\x6d\x60\x41\x2c\xe4\xe5\x9f\x55\x17\xdd\x9d\xac\xba\xcc\xe0\x5b\x7d\x5f\xbd\x67\xe7\x8b\xea\x05\xb4\x72\xea\x2a\xab\xe7\xb4\x2b\x1d\x8d\xec\x5e\x12\x10\xe0\xd8\xf1\xa7\x17\xff\x1c\x2d\x23\x87\xcb\xbf\xac\x4a\x7c\xf5\x6d\x2d\x83\x91\xdc\x36\x90\x51\x82\x05\xe5\x45\xb0\xf3\xce\x02\x91\xc7\xde\x42\x6c\x4e\x81\x67\x11\x4b\x91\xa5\xde\xec\x85\x5c\xca\xfe\x7a\xf3\xc4\xe1\x14\x75\xdd\x7b\x35\x5c\x51\x1b\x5c\x82\x87\x88\x83\x01\x76\x0b\xbe\x99\x79\x94\x7a\x64\x7a\x37\x3b\xca\xad\x7d\x06\x99\xd4\xba\x0e\x28\x87\xee\xed\xa6\xb4\xec\x0c\xe9\xe0\x32\x03\x95\x97\xd9\x00\x38\x4b\x74\xfd\x2a\x1c\x9d\x49\x03\xe8\xa7\xc6\xca\xf0\x08\x44\x69\x81\x28\xc0\x35\x80\x2c\xc4\x2f\x80\x0f\x84\x11\x90\xf0\x9c\x7a\x20\x9f\xec\x9c\xfa\x8d\xdc\x7d\x8a\xaa\x55\xb1\x09\x6e\xdb\x22\x09\xd6\xf2\xe0\xaf\xb6\xb3\x03\x81\xe4\x93\xdd\x4b\xa2\xf4\xf7\x28\xda\x8f\x4d\x25\xe5\xa3\x97\x10\x7b\xd9\xd1\x84\x18\x70\xae\x94\x5c\x27\x1a\x8b\x94\xf8\xe5\xd0\x04\x07\xe2\xe5\x29\x8f\x1c\x80\x54\x22\x92\x83\x53\xd9\xe1\xb5\xf5\x17\xb2\xe3\x23\x81\xad\x0e\x34\x11\x76\x9c\xa0\xce\x57\x02\xb2\xbd\x48\xfd\x1f\xf0\x0e\x40\x39\x87\x56\x21\xd4\x30\x7a\x27\x62\xac\x87\x71\xeb\x17\xd3\x74\xea\x52\x3b\x4c\x67\x1c\x8e\xe1\x11\x76\xa6\x75\xd2\x90\xe3\x70\x4d\x4b\xa0\x1a\xc7\xae\x94\x37\xc9\x1d\x7b\x68\xc0\xbb\x0d\xb2\x26\x92\x0a\x2f\x67\x4f\x4d\xa3\x97\x87\x1e\x5e\xb6\x99\x60\x0e\x52\x1d\xbb\x0c\x9b\x88\x85\xa5\xc1\xa3\xba\xb4\xea\xee\xb1\x80\xed\x83\x95\x8d\x33\xb8\xb3\xec\xcf\x40\x89\xa2\x28\xf2\xd9\x3a\x70\xb3\x9b\x2b\x7b\x9c\x5a\xef\x69\x81\xed\x98\x0c\x33\x83\x9d\x43\x83\x40\x62\xcd\xc8\x60\x4f\x00\x77\x82\xe4\xa3\x92\x32\x15\x60\x31\x30\x4e\xe8\xde\xa6\x97\x05\x5d\x17\x95\xab\x90\x70\x17\x4d\xb0\x0f\x33\x91\x54\x13\xc4\x99\xe6\x01\xab\xf3\x5a\x38\x20\x49\xfb\x92\x1a\x8f\xfe\xf5\x92\x96\xeb\xe2\x8d\x17\x99\xdc\x92\xd8\x98\x20\x4a\xa3\xa7\xef\x27\x33\x07\x28\xa7\x5f\x00\xc5\xea\x99\xf3\xaa\x95\x1d\x30\x17\x24\x45\xd9\x55\x03\x0c\x14\xae\x44\xc7\x11\xcd\x15\xb1\x39\x1d\x24\xb3\x06\xd6\x02\x78\xeb\x06\x3e\x66\xe1\x41\x2b\x15\x2c\xc8\x46\x60\x0e\x95\xf9\x46\x59\xc3\x40\x5d\x46\xcc\xba\x97\x53\x7b\x52\x9a\x05\x76\x87\xab\xf2\x34\x10\xe5\x69\x00\x81\x5c\x22\xc7\x9e\xe8\xe2\x71\x75\xa2\xd5\x91\x96\x32\x80\x58\xe8\x75\x36\x33\xed\x95\x0b\x68\xd8\xec\xec\x07\x4b\x0e\xe6\xde\xe1\xc5\xe4\x32\x1e\x54\xe4\x79\xb9\x3c\x15\x8b\x2d\x54\xc1\xbf\x6c\x77\x77\xde\xee\xa5\xd7\xe2\x18\xec\x4e\x07\x89\x9d\x00\x02\x97\x05\x5c\xfa\xe2\xf6\x60\xa0\x7c\x59\x56\x15\x0f\x5f\x44\x39\x93\xe0\x94\xb9\x66\x34\x06\x66\x8d\x5e\x6a\xca\x7b\xe1\x82\x77\x30\x05\xc1\x53\xb2\x0a\xe6\xd5\xc1\xa4\x4a\xec\xa3\x2d\x15\x64\xca\xc5\x75\xb2\x86\x2d\xfc\x12\xb2\xa3\x20\xc0\x8d\x0a\x46\x19\x19\x29\x85\x5a\x21\x2f\x6c\x27\x77\x16\x14\x1d\xc0\x02\x17\x71\x52\x2f\xb1\x85\x85\xa4\xcc\x4b\x95\x3e\x77\xd6\x0a\x54\xcd\x52\x15\x06\x33\xf1\x5c\x9f\xc4\x7d\x3c\x89\x00\xa9\xc7\x14\x85\xad\x48\xd6\x26\xc6\x4d\x71\x91\xe2\xf8\xb0\xac\x8d\xee\xae\x6f\x20\x4c\xf8\x17\xa7\x74\xb4\x3d\x00\x64\x8d\xf3\xc0\x02\x28\xe3\xa8\x23\xcc\x83\xa0\x3c\xbb\x9a\xa1\xa1\x4f\xc5\xcd\x22\x95\xe0\x9d\xdd\x62\xfb\x52\xa5\xd9\xea\xe7\xc6\x56\x9d\x9a\x1a\xf7\xad\x9a\xe9\x1a\xc0\xed\xb7\x8b\x3d\xed\x1c\x1c\x9b\x76\x78\x43\x1a\x94\x77\x81\xfb\xcd\x79\x67\x1f\x94\x2b\x0d\x96\xb9\x80\x6c\xc5\x77\x20\x9c\xc3\xe4\xc6\x67\xd1\x34\x08\xa0\x43\x99\x66\x14\x2d\xee\x85\x2b\x20\x47\xa1\xe9\xfa\x8c\x3f\xf2\xd0\xab\xf3\xe5\xbd\x5e\x9d\x6f\x0e\xf5\xd0\x33\xf3\x45\x7f\x74\xa8\x87\x66\x91\x2f\xf9\x47\x87\x7a\x68\x49\xf8\x52\x7e\x74\xa8\x07\x64\xfb\x97\xfa\xa3\x43\x3d\xe0\xc2\xbf\xb4\x1f\x1d\xea\x01\x39\xf7\xa5\x7f\xff\x50\xff\x67\x9b\x0f\x58\xa9\x2f\xe3\x47\x4f\xe9\x01\x11\xf2\x65\xfe\xe8\x50\x0f\x15\xd1\x2f\xbf\xfe\xe8\x50\x0f\x95\x8d\x2f\xbf\xfd\xe8\x50\x0f\xb9\xce\x2f\xbf\xff\xe8\x50\x0f\xf9\x84\x2f\x7f\xfc\xe8\x50\x0f\xe1\xeb\x97\x2f\xdf\x3f\xd4\xf6\xe5\xdf\xff\xfd\xcb\xfe\xff\xfe\xba\x7d\x35\x58\x4d\xe9\xc3\xc1\xfe\xf5\x5f\xfe\xd7\xff\xf3\x7f\x1f\xff\x76\xf9\xd7\x7f\xf9\xe3\xcb\xff\xfa\xf7\x7f\xfb\xd7\x7f\xf9\xf7\xe7\xff\xeb\xdf\x2e\xff\x5f\x00\x00\x00\xff\xff\xae\xf1\x3b\x5f\xdb\xc7\x06\x00"), }, "/static/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf": &vfsgen۰CompressedFileInfo{ name: "fontawesome-webfont.ttf", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 165548, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xcc\xfd\x0b\x78\x54\xd5\xb9\x3f\x8e\x7f\xde\xb5\x6f\x33\x93\xb9\xef\xb9\x24\x93\x49\x32\xd7\x3d\x81\xc4\x00\x73\x8d\x5c\x92\x11\x91\x5b\x02\xa2\x52\xa5\x88\x18\x11\x14\x05\x14\x15\x05\xa9\x97\x6d\xa5\x16\x95\x2a\x22\x5a\x6a\xad\x8d\xd7\xc2\xa9\xb5\x9c\x56\x7b\xb4\x45\xcf\xf4\x66\x6d\xab\xd6\x56\x8e\xb5\xd6\xf6\xa4\xad\xb6\x9e\x8a\x36\xa0\xf5\x28\x64\x76\xfe\xcf\xde\x7b\x26\x99\x04\xd0\xf6\x9c\xff\xf7\x3c\xbf\x79\xb2\xf7\x5e\xf7\xf5\xae\xb5\xde\xf5\xae\xf7\x7d\xd7\xbb\x56\x40\x00\x1c\x50\xc1\x61\xd1\xec\xd9\x8b\x17\xac\x79\x66\xce\x53\x60\x37\x6d\x07\x10\x9e\x33\xeb\x94\xd9\x6c\x10\x3c\xd8\x4d\xeb\x01\x44\x4e\x3d\x63\x52\x7a\x6b\x7a\x73\x11\xa0\x25\x00\xfa\xce\x5f\x77\xde\x7a\xdb\xbf\x4f\xbd\x1e\xb0\xef\x06\xd8\xa1\x0b\xcf\xbb\x62\xfd\xf0\x30\x38\xb0\x9b\x56\x03\xb0\x5c\xb8\xf6\xea\x0b\x6e\xff\xef\xc7\x16\x00\xa1\x47\xc1\x7a\xf7\xad\x5e\x75\xde\x4a\xf7\xcd\x6f\x9e\x00\xe0\x75\x00\xf9\xd5\xab\x57\x9d\xe7\xe2\x6c\x4f\x00\xe4\x03\x90\x58\xbd\x6e\xc3\xa6\x53\xae\xae\xff\x1c\x40\x4f\x02\xb6\xc1\xb5\x97\x9e\x7f\x1e\xfb\xfb\x03\xcb\x00\xd7\xbd\x40\x9d\x7b\xdd\x79\x9b\xd6\x73\xed\x2c\x0c\x50\xa7\x0e\xcf\x25\xe7\xad\x5b\xf5\xa7\x2f\xde\xfa\x28\xd8\x85\xab\x01\xfe\xa6\xf5\x97\x5e\xb1\xe1\x9b\xb7\x7f\xf9\x7e\xb0\x35\x83\x40\xe8\x4a\xa3\x6d\x3c\xfd\x7c\xfb\x2f\x36\x7d\xfa\x5c\xd7\xf4\xbf\xa3\x4e\x82\xfe\xdb\x9f\x79\x21\x5d\xfd\x0e\x0f\x0f\xc3\x4a\xa2\xee\xb5\x80\x19\x39\xa0\xbf\x45\x0c\x03\xb0\x62\x78\x78\x78\xd8\x4a\x95\xf0\x91\x1f\x7b\x42\x0f\x61\x3f\x64\x0d\x48\x99\x01\x46\x2e\x3d\x55\xb1\x92\x84\x13\x2f\xa2\xed\x10\x00\x7e\x1b\x9f\x01\x70\x93\xf9\x65\x57\x00\x74\x0b\x3e\xe6\xb7\xfe\xea\xcb\xaf\x40\x11\x91\xbf\x57\x60\x10\xcd\xca\x6b\x21\x88\x80\x38\x15\xeb\x8d\x8a\x3f\x05\x50\x09\xd0\x5b\xf6\x0f\x3c\xe7\xe8\x2d\x15\xd5\xd1\x30\xdd\xad\x3f\x82\xee\x57\xc7\xc6\x49\xc0\xd5\x82\x8a\x4b\xaa\x69\xc4\x6a\x1e\x00\x82\x19\x16\x12\x2b\x7e\x49\x45\xba\x9a\xe6\x58\x8f\x9e\x8f\x37\xcb\x2e\xea\xe9\xb8\x8a\xdf\xa8\x5b\x1d\x2d\xb7\x02\x83\x4d\xa8\xc2\x59\x93\x86\xaf\xa9\xff\x13\xdb\x5a\x81\x85\xc7\xe8\xb7\xb6\xbd\xd2\xd8\xb0\xcd\x42\x2d\xec\x35\xf1\x22\x03\x09\xc0\x3d\x02\xb0\xf4\x78\x6d\x3b\xc6\x53\xac\x94\x93\xd3\x1f\x69\x34\xdc\x21\xa8\x23\x7d\xb7\xb9\xb6\x6f\x84\xb1\xfd\xee\x16\xc6\x8d\x45\x25\xdd\x52\xe3\x51\x6b\xda\x61\xf6\x65\x51\x32\x10\x78\x6c\x7f\x57\xfb\xa1\xa6\x7e\x70\x6a\x4d\x3f\x8c\x8e\xc9\x48\xbb\x6b\xbf\x55\x58\x85\xd1\xf8\x76\x1e\x38\x57\xac\x19\x1b\x41\x1d\x53\x9f\xde\x6e\x56\x0b\xf3\x71\x1f\x15\xfe\x4a\xbb\x85\x71\x63\xef\xae\x7c\xaf\x90\x00\xaa\xa4\xe1\xc5\xa3\xdb\xe6\x1a\x03\xb7\x8a\x46\xa9\xda\xef\x95\xc7\x5a\x29\x93\xaf\x8c\x25\x53\x51\x64\x95\x7e\xab\x86\xf1\xe3\x60\x95\x80\xd6\x5a\x3c\xe2\x54\x13\x86\xf1\x38\x23\xd5\xb4\xbf\x66\xec\x8a\xb5\x7d\x32\x12\xa7\x9a\xe3\x53\x69\xd7\x08\x8c\x3c\x70\x02\x0f\x38\x78\x15\x0b\xf4\x87\xa9\x38\x81\xa9\xa3\xfe\x6a\x1d\x7c\x65\xbe\x88\x63\xf1\xb7\x28\x8e\xc7\xe9\x71\xf8\x52\x33\x37\xab\x71\xc5\xca\xfc\x73\x48\x2a\x4e\xa8\xe4\x65\x82\x0a\x56\xed\x93\xca\xb7\x4f\xef\x27\xa6\x62\x85\x08\x08\xfa\x23\xa9\x20\xb1\x02\x8b\xa0\xc2\x51\x9d\x9f\x82\x0a\x4e\x54\x91\x38\xd6\x78\x57\xfa\xc5\x5e\x9d\xfb\xd5\x30\x52\xc7\xf4\x77\xbe\x1a\xce\x03\x9c\xfe\x7c\xd2\xfc\xaa\x19\xbb\x2c\xf7\x59\x80\xe7\xc0\x0b\xd5\x79\x04\x74\xd6\xe0\x58\x4c\x7f\x24\x98\x8f\x58\x7d\x6a\xe8\x99\x08\x34\xea\x38\x38\x0e\x87\xeb\xc6\xb7\xa3\x52\xef\x2c\x63\x0e\x01\x9c\xfe\x54\xfa\xb3\x3a\x9f\xab\xe9\x46\xf2\x0a\x40\x7b\xe5\x3b\x42\x87\xa4\x4a\x58\x65\x1c\x22\x92\x3a\x3c\x5c\x4b\x53\x05\xc0\x7f\x8c\xb9\x32\x32\x57\xf5\x34\x96\x71\xf4\xb8\x3a\xf7\xad\x66\xfa\x75\xe2\x78\x9c\xae\xa4\xad\xd2\x07\xe9\x03\x4c\x18\x3f\x9f\x2a\x70\x56\x69\xb3\xd1\x2e\x6b\x6d\x9e\xd1\xaf\xdb\x32\x1a\x1e\xa9\x8e\x87\xf5\x1f\xa7\x8d\xfa\x93\xaa\xc2\x5c\x81\x3f\x22\x01\x72\x4d\x1d\xb3\x2a\xf0\x9c\x28\x01\xde\x9a\x74\xb5\x30\x77\x09\x40\xbd\x78\x2c\x9a\x37\xf6\x69\x90\x80\x95\x22\xf0\xe9\x0a\xdc\x13\x2b\xe5\x58\x25\x20\x65\xad\xc0\x3e\xfe\xb1\x00\x4e\xfd\x11\xd4\x63\x97\x6f\x19\xf7\xad\xf6\x6f\xcd\x38\x18\x6e\x01\xa8\xb3\x8c\x6b\xbf\x65\x9c\xdb\x32\xde\x5d\x19\xdf\x8a\x5f\x16\x6b\xca\xac\xe0\x38\xab\xe2\x55\x0d\xbd\x65\xfa\x1c\xb5\x00\x62\x25\x8e\x59\x60\xce\x0b\x61\x5c\xff\x09\x35\x65\x59\xc6\xc1\x30\x1e\x27\x2c\x1f\x62\xb1\xb5\xe2\x3f\x56\x3f\x55\x71\xdb\x32\x0e\x07\xaa\xf1\xd2\x27\xe0\x86\x34\x0e\x8e\x11\x1c\x78\x62\x4c\xdc\x08\x3e\x0a\xc0\x05\x46\xde\x27\x47\xcb\x1f\x69\xff\xd8\x31\x09\x88\x80\x53\x02\x9a\x8e\x85\x17\x15\x3a\x9e\xb4\x1c\x3b\xfc\xf4\x71\xf0\x9d\x62\x1d\x8b\xab\xe3\xdb\x96\x38\x56\xbb\x2a\x65\x47\x45\x60\x0d\x0f\xb4\x56\xc2\xb9\xf1\x3c\x8c\x58\xc5\x77\xd5\xc0\x47\xae\x3a\xc7\x2b\xe5\x8f\xa4\x17\x86\x91\x14\x2b\xeb\x91\x30\x96\x3e\xb8\x6a\x71\x44\x1c\xbb\xe6\x27\xad\x63\xeb\xf2\x8f\xc3\xaf\xa3\x70\xa3\x26\xbc\xc9\x5a\xd3\x2f\xe3\x9f\x1a\xde\x82\xc6\xcf\x8b\x91\x87\xd5\xe0\xba\x8a\xc9\x7a\x9f\x57\x60\x9c\x54\xc3\xa3\x28\x12\x3e\xf1\xc7\x55\x9e\x70\x85\x21\x3e\x00\xce\x70\x85\xc1\xd3\x4b\x3a\xe3\x8c\x22\x04\x4c\x46\x04\x7b\xf0\x18\x1e\xc7\xb3\x78\x35\x1a\x8b\x35\xc7\xfa\x06\x9d\x83\xcd\x83\x5d\x83\x0b\x07\x97\x0f\x5e\x32\x78\xdd\xe0\x6d\x83\xf7\x0d\x3e\x36\xf8\xad\xc1\x17\x07\x7f\x3f\xf8\xee\xa0\x76\xd0\x79\xb0\xf9\x60\xc7\xc1\xae\x83\x0b\x0f\x2e\x3f\x78\xc9\xc1\xeb\x0e\xde\x76\xf0\xbe\x83\x8f\x1d\x7c\xe6\xe0\x8b\x07\x7f\x7f\xf0\xdd\x83\xda\x21\xe7\xa1\xe6\x43\x5d\x87\x16\x1e\x5a\x7e\xe8\x92\x43\xd7\x1d\xba\xed\xd0\x7d\x87\x1e\x3b\xf4\xcc\xa1\x17\x0f\xfd\xfe\xd0\xbb\x7f\xc7\xf0\xb0\xc1\x8f\xef\x1e\x57\x23\x06\xdd\x83\xd1\xc1\xe2\xe0\xa2\xc1\xbe\xc1\xf5\x83\xea\xe0\xf6\xc1\xfe\xc1\xbd\x83\xa5\xc1\x97\x06\x07\x06\x07\x0f\xe2\xa0\xfb\x60\xe4\xe0\xe4\x83\xc5\x83\x8b\x0e\xf6\x1d\x5c\x7f\x50\x3d\xb8\xfd\x60\xff\xc1\xbd\x07\x4b\x07\x5f\x3a\x38\x70\x70\xf0\x10\x0e\xb9\x0f\x45\x0f\x15\x0f\x2d\x3a\xd4\x77\x68\xfd\x21\xf5\xd0\xf6\x43\xfd\x87\xf6\x1e\x2a\x1d\x7a\xe9\xd0\x80\x5e\xe3\xf0\x9f\x86\x97\x0d\x2f\x19\x3e\x63\x78\xe6\xf0\x94\xdf\xbf\xf5\xbb\x77\x7e\xf7\xa8\xdb\xe1\xb6\xbb\x6d\x6e\xab\xdb\xe2\x96\xdc\xa2\x5b\x70\xf3\x6e\xce\xcd\x5c\x7f\x77\xbd\xef\x7a\xcf\x75\xc8\x75\xd0\x35\xe8\xfa\x9b\xeb\x5d\xd7\x3b\xae\x03\xae\xb7\x5d\x7f\x75\xfd\x97\xeb\x2d\xd7\x5f\x5c\x7f\x76\xbd\xe9\x7a\xc3\xf5\x27\xd7\x1f\x5d\x7f\x70\x0d\xb8\x7e\xef\xfa\x9d\xeb\x75\xd7\x6f\x5d\xaf\xb9\x7e\xe3\x7a\xd5\xf5\x6b\xd7\x2b\xae\xff\x70\xed\x77\xbd\xec\xf8\xc1\x78\xd9\xe7\xff\xe2\xa7\x0b\x64\xd5\x6a\x89\x55\xe4\xab\x31\x09\x4c\x54\xf8\xff\xc2\x4f\x14\x6c\x12\x6f\xb7\x58\xeb\xfe\x5f\x55\xd0\xfe\x3f\x78\xb6\x9b\x32\x35\xed\x02\xd8\x06\x80\xbd\x04\x70\xbd\x00\x37\x08\xf0\x8b\x01\x31\x01\x88\x03\x80\x65\x2d\x60\xdd\x04\x58\x5f\x02\x6c\x8b\x81\xba\x56\xa0\x6e\x3f\x60\xdf\x02\x38\x56\x02\xce\xdd\x80\x6b\x3f\xe0\xde\x02\x78\x00\x78\xee\x05\xbc\x6b\x01\xb9\x1d\x90\x5f\x05\x7c\x2a\xe0\x1b\x02\xfc\xdb\x81\x40\x16\x08\xba\x81\xfa\x95\x40\xfd\xf3\x40\xc3\x7a\x20\x34\x17\x08\xed\x04\x1a\x13\x40\x78\x25\xd0\xd4\x0e\x34\x5b\x80\xe6\x0d\x40\x4b\x2b\x10\xd9\x06\x44\x06\x81\x68\x3f\x10\x9b\x0c\xc4\x23\x40\xa2\x1d\x48\x0c\x00\xca\x2c\x20\xf5\x06\xd0\x7a\x2f\x30\x61\x31\x30\x51\x5f\xba\xf7\x01\xed\x6e\xa0\xfd\x7d\xe0\x84\x57\x81\x8e\x22\xd0\xf1\x2a\x30\xa9\x0f\x98\xb4\x0f\x98\xec\x03\x26\x3f\x04\x4c\xd9\x09\xa4\xb7\x03\x99\x95\x40\x36\x0b\x64\x77\x02\xb9\x08\x90\x53\x81\xdc\x93\x40\x3e\x02\xe4\x97\x01\xf9\x7d\x40\x61\x2e\x50\xd8\x0d\x74\xda\x81\xce\x3e\xa0\xf3\x71\xe0\xc4\x5e\xe0\xc4\xc7\x81\xa9\xab\x81\xa9\x07\x80\x69\x25\x60\xfa\x7a\x60\xc6\x7a\xa0\x6b\x3a\xd0\xf5\x06\xd0\xbd\x1a\xe8\x7e\x15\x28\xce\x05\x8a\xfb\x80\x93\x26\x03\x27\x3d\x09\xcc\x5c\x02\xcc\xfc\x10\x38\x79\x25\x70\xf2\xbd\xc0\xac\x5e\x60\xd6\x1b\xc0\x29\x4f\x02\xb3\xef\x05\xe6\x4c\x06\xe6\xbc\x0e\xcc\x3d\x00\xcc\xdb\x06\xcc\xef\x04\x7a\x1e\x05\x7a\xdf\x00\x16\xac\x04\x16\xb6\x03\x0b\x55\x60\xe1\x7e\xe0\xd4\xbd\xc0\xa2\x3e\x60\xd1\x6e\xe0\xb4\x2c\x70\x5a\x3f\x70\xba\x1d\x38\x7d\x2d\x70\x46\x3b\x70\xc6\x2e\x60\x71\x1f\xf0\xa9\xc9\xc0\x59\x83\xc0\x92\xd7\x81\xa5\x16\xe0\xec\x22\x70\xf6\x36\x60\xd9\x74\x60\xd9\x87\xc0\x39\xbb\x80\xe5\xad\xc0\xf2\x37\x80\x73\xfb\x81\xbe\xf5\xc0\x8a\x76\x60\xc5\xfb\xc0\x4a\x1e\x58\x79\x00\x58\xb5\x08\x58\xf5\x12\x70\xc1\x8f\x80\x0b\xfb\x80\x0b\x77\x03\x17\xf5\x02\x17\x95\x80\x8b\x67\x01\x6b\xec\xc0\x9a\xfd\xc0\x5a\x15\x58\x57\x04\x2e\x69\x07\x2e\xed\x05\xd6\x6f\x01\x2e\x7b\x08\xb8\xfc\x75\xe0\x8a\x4d\xc0\x06\x37\xb0\x61\x37\x70\xe5\x2c\xe0\x33\x7d\xc0\x35\x00\xae\xd9\x07\x5c\xeb\x06\xae\x7d\x08\xb8\x6e\x2b\x70\xfd\x4e\x40\xdd\x07\xdc\x50\x0f\xdc\xb0\x0d\xb8\x71\x2e\xb0\xc5\x07\x6c\xd9\x0f\x7c\x6e\x37\xf0\xb9\x37\x80\x9b\xd6\x02\x9f\x2f\x02\x5b\x77\x01\x37\x97\x80\x5b\xdd\xc0\xb6\xe7\x80\x2f\x6c\x03\x6e\x5b\x0b\xdc\x3e\x17\xd8\x1e\x01\xb6\x97\x80\x3b\x16\x03\x3b\xec\xc0\x8e\xb9\xc0\x8e\x2d\xc0\x8e\x12\xb0\x63\x08\xb8\xb3\x0f\xb8\xf3\x39\x60\x27\x0f\xec\x2c\x02\x3b\x07\x81\xbb\x54\xe0\xee\x04\xf0\xc5\x65\xc0\xae\x25\xc0\x97\xc2\xc0\x3d\xb3\x80\x7b\x9e\x04\xbe\xbc\x0b\xb8\xb7\x1f\xf8\xca\x62\xe0\xbe\x25\xc0\x7d\x1f\x02\x5f\xbd\x17\xe8\x9f\x05\xdc\xbf\x08\x78\xa0\x1d\x78\xe0\x21\xe0\xc1\x4e\xe0\xc1\xdd\xc0\x43\x2b\x81\x87\x97\x01\xbb\xb7\x03\x5f\xb7\x00\x8f\x86\x81\x47\x0f\x00\xdf\xd8\x0e\x7c\xe3\x2d\xe0\x31\x15\xf8\x66\x3d\xf0\xcd\xbd\xc0\xde\xb9\xc0\xde\x01\xe0\x5f\x37\x01\xff\xfa\x3c\xf0\xad\x08\xf0\xad\x0d\xc0\xb7\x9e\x03\xbe\xbd\x04\xf8\xf6\xfb\xc0\xe3\xeb\x81\x27\x00\x3c\xb1\x12\xf8\x4e\x18\xf8\xce\x7e\xe0\xdf\x1e\x07\xfe\x6d\x10\x78\x72\x13\xf0\xd4\x06\xe0\xa9\x0f\x81\xef\x3e\x3f\xfa\x7c\x6f\x37\xb0\x6f\x0b\xf0\x74\x11\x78\x86\x07\xfe\xfd\x39\xa0\xf4\x23\xe0\x07\x76\xe0\x07\xdb\x80\x1f\x2e\x03\x7e\x14\x01\x7e\xb4\x0f\xf8\xb1\x1b\xf8\xf1\x93\xc0\xb3\x3b\x81\xe7\x26\x03\xcf\x0d\x00\x3f\x5d\x09\xfc\xf4\x79\xe0\x67\xbb\x81\x9f\xab\xc0\xcf\x07\x80\xe7\xdf\x07\x5e\xd8\x09\xbc\xb8\x09\x78\xf1\x2d\xe0\x17\x7b\x81\x97\xb6\x01\xbf\x6c\x07\x7e\xb9\x15\xf8\x95\x05\xf8\xd5\x56\xe0\x65\x3b\xf0\xf2\x36\xe0\xe5\x03\xc0\xfe\x4e\xe0\x3f\xda\x81\xff\xb8\x17\x78\xa5\x0f\x78\xe5\x2d\xe0\xd7\x6b\x81\x57\xe7\x02\xaf\x3e\x0e\xfc\xa6\x0f\xf8\xcd\x8f\x80\xd7\x16\x03\xaf\x3d\x09\xfc\xb6\x1e\xf8\xed\x4e\xe0\xf5\x22\xf0\xfa\x73\xc0\xef\xd6\x02\xbf\x1b\x04\x7e\xbf\x05\xf8\xcf\x7a\xe0\x3f\x1f\x05\x06\xf6\x01\x7f\x58\x0b\xfc\x71\x3d\xf0\xa7\x08\xf0\xa7\x37\x80\x37\x54\xe0\xcd\xe7\x80\x3f\x97\x80\xbf\xd4\x03\x7f\x39\x00\xbc\xf5\x06\xf0\x5f\xaf\x02\x7f\x7d\x15\x78\xfb\x55\xe0\xc0\x7e\xe0\x9d\x97\x80\x77\x5f\x07\xfe\xf6\x06\x70\x88\x07\xde\x7b\x1f\x78\x5f\x05\xfe\x9e\x05\x3e\x70\x03\x1f\xdc\x0b\xfc\x77\x3d\xf0\xe1\x12\xe0\xc3\x12\xf0\x51\x02\x38\xbc\x16\x38\xb2\x0f\x18\x6a\x05\x86\x9e\x04\xca\x76\xa0\xdc\x07\x94\x1f\x07\x34\x0b\xa0\x3d\x09\x0c\x5b\x40\xf0\x81\x84\xc7\x41\xe2\xfb\x20\xe9\x43\x90\xe5\x25\x90\x75\x25\xc8\xe6\x06\xd9\x76\x81\xea\xea\x41\x76\x1e\x64\x7f\x08\xe4\x68\x07\x39\x01\x72\x6d\x05\x79\xda\x41\x9e\x7e\x90\xf7\x79\x90\xdc\x09\x92\xdf\x00\xf9\xb6\x83\xfc\xad\x20\xff\x43\xa0\xc0\x12\x50\x60\x08\x14\x2c\x81\xea\xb7\x80\x1a\x36\x81\x42\xd7\x80\x1a\x17\x83\xc2\xfb\x41\x4d\x45\x50\xd3\x7e\x50\xf3\x76\x50\x0b\x0f\x6a\xb9\x06\x14\x79\x08\x14\x2d\x81\x62\x9b\x40\x71\x0b\x28\xbe\x16\x94\xe0\x41\x89\xe7\x41\xa9\xd5\xa0\xd6\xb7\x40\x13\x7b\x41\xed\x8b\x41\x1d\xbd\xa0\x29\x1b\x40\x53\xde\x07\xa5\x07\x40\x99\xc9\xa0\xcc\x5e\x50\x76\x37\x28\xb7\x01\x94\x5f\x0c\x2a\x24\x40\x9d\x76\xd0\x89\x73\x41\x53\xdd\xa0\xa9\x83\xa0\x69\xdb\x41\xd3\xb7\x80\xa6\xbf\x0a\xea\x5e\x02\x2a\x86\x41\x27\x95\x40\x33\x9f\x03\x9d\xfc\x1c\x68\xd6\xbd\xa0\x53\xe6\x82\x66\xcf\x05\xcd\x59\x0f\x9a\x3b\x17\x34\x6f\x13\x68\x7e\x04\x34\xff\x0d\x50\xcf\x7e\x50\x6f\x3f\x68\x41\x3d\x68\x61\x11\xb4\xa8\x08\x3a\xad\x1f\x74\xfa\x00\xe8\x8c\x59\xa0\xc5\x11\xd0\xa7\x7a\x41\x67\xf6\x81\xce\xdc\x0f\x3a\x6b\x09\x68\x49\x16\xb4\xa4\x1f\xb4\x94\x07\x2d\xdd\x0a\x3a\x7b\x25\xe8\xec\x01\xd0\xb2\x6b\x40\xe7\xbc\x0a\x5a\xde\x0f\xea\xdb\x09\x3a\x6f\x2e\xe8\xbc\x7d\xa0\x15\x83\xa0\xf3\x97\x80\x56\x3e\x0a\x5a\xb5\x01\x74\xc1\x6a\xd0\x85\xaf\x83\x56\x3f\x0e\xba\x68\x19\xe8\xe2\x4d\xa0\x4b\xb6\x80\xd6\x17\x41\x57\x0c\x80\xae\x72\x83\x36\x3e\x07\xda\xb4\x1d\x74\xf5\x56\xd0\xe6\x6d\xa0\xcf\xac\x06\x5d\xb3\x0d\x74\x6d\x18\x74\xed\x43\xa0\xeb\x97\x81\xae\xdf\x05\xba\xfe\x43\x90\xba\x16\x74\xc3\x06\xd0\x67\xb7\x83\x6e\xcc\x82\x6e\x7c\x08\xb4\xe5\x39\xd0\xe7\xf6\x82\x6e\x7a\x08\xb4\x75\x03\xe8\xe6\x6d\xa0\x5b\x3a\x41\xb7\xea\x4f\x3f\xe8\xb6\x5e\xd0\x6d\xbb\x41\xb7\x2f\x06\x6d\x77\x83\xee\xf0\x81\xee\xdc\x0e\xda\xe9\x03\xdd\xc5\x83\xee\x1a\x02\xdd\xfd\x21\xe8\x8b\xfd\xa0\x2f\x5d\x03\xba\xe7\x39\xd0\xbd\x6e\xd0\x57\x2c\xa0\xaf\xbc\x0a\xba\xef\x1a\xd0\x57\xeb\x41\x5f\x7d\x0b\xd4\xff\x23\xd0\x03\x76\xd0\x83\x59\xd0\x43\x9b\x40\x0f\xef\x05\x3d\xa2\x82\xbe\xd6\x0b\xda\x1d\x06\xed\xde\x0e\xda\x7d\x60\xf4\xd9\xb3\x04\xf4\x2f\xad\xa0\xaf\x47\x40\x5f\x7f\x1e\xf4\xe8\xa3\xa0\x6f\xec\x06\x3d\x16\x01\x3d\xb6\x15\xf4\x4d\x1e\xf4\xcd\xdd\xa0\xbd\x45\xd0\xde\xad\xa0\xef\xec\x03\xfd\xdb\x5a\xd0\x93\x03\xa0\xa7\x36\x80\xbe\xcb\x83\xbe\xbb\x13\xf4\xbd\x04\xe8\x7b\x0f\x81\xf6\x59\x40\xfb\x36\x81\x9e\xee\x05\x3d\xa3\x3f\x0f\x81\xfe\x3d\x02\x2a\xcd\x05\x7d\xbf\x1e\xf4\xfd\x1f\x81\x7e\xc8\x83\x7e\xf8\x06\xe8\x47\xfd\xa0\x1f\x2f\x06\x3d\xdb\x0a\x7a\xf6\x00\xe8\x39\x3b\xe8\xa7\x76\xd0\xcf\xb6\x82\x7e\xde\x0f\x7a\xfe\x43\xd0\x8b\x61\xd0\x2f\x76\x82\x5e\x5a\x0b\xfa\xe5\x4a\xd0\xaf\x5e\x07\xbd\xbc\x08\xf4\xf2\x87\xa0\xff\xd8\x02\x7a\x65\x13\xe8\xd7\xeb\x41\xbf\x1e\x02\xbd\xfa\x3e\xe8\xb5\x47\x41\xbf\x5d\x0c\x7a\x7d\x31\xe8\x77\x76\xd0\xef\x06\x41\xbf\xdf\x0a\xfa\xcf\x5e\xd0\x1f\x54\xd0\x1f\x3f\x04\xbd\x51\x0f\x7a\xd3\x0e\xfa\xf3\x74\xd0\x5f\xe6\x82\xfe\xb2\x1b\xf4\x56\x02\xf4\xd6\x7e\xd0\x7f\xad\x05\xfd\x35\x0c\xfa\xeb\x7e\xd0\xdb\x6f\x80\x0e\x64\x41\x07\x9e\x04\x1d\x78\x1f\xf4\xce\x20\xe8\x6f\x16\xd0\xdf\x1e\x02\x0d\xf2\xa0\xc1\xe7\x41\x07\x23\xa0\x43\x8b\x40\xef\xad\x05\xbd\xf7\x16\xe8\xef\x76\xd0\x07\xed\xa0\x0f\x4a\xa0\xff\xde\x04\xfa\xef\x01\xd0\x87\xeb\x41\x1f\xb5\x83\x0e\x6f\x02\x1d\xd9\x00\x1a\xb2\x83\x86\x56\x82\xca\x76\x50\x79\x1b\x48\xcb\x82\x74\x7a\x31\xfc\x12\x18\x65\xc1\x58\x18\x8c\x6b\x07\xe3\x57\x83\x09\xfb\xc1\xa4\x45\x60\xd6\x2c\x98\x6d\x3f\x98\x7d\x00\xcc\x31\x08\xe6\xaa\x07\x73\x67\xc1\x3c\x6f\x80\xc9\xd3\xc1\x7c\xed\x60\xfe\x76\xb0\x40\x16\x2c\x38\x19\xac\xbe\x13\xac\x21\x01\x16\xda\x0a\xd6\xd8\x09\xd6\xf4\x38\x58\xf3\x62\xb0\xe6\xe7\xc1\x22\xd7\x80\x45\x57\x83\xc5\x1e\x05\x4b\xf4\x82\x25\x27\x83\x29\x73\xc1\x52\x5b\xc1\x5a\xdf\x07\x9b\xb0\x0d\x6c\xe2\x64\xb0\x89\xaf\x83\xb5\xed\x04\x6b\x7f\x1d\xac\x23\x01\xd6\x71\x00\x6c\xf2\x01\xb0\x29\x5b\xc0\xd2\x45\xb0\xf4\x10\x58\xe6\x49\xb0\xec\x06\xb0\x5c\x02\x2c\xff\x3e\xd8\x89\x11\xb0\xa9\xdb\xc0\xa6\xee\x07\x9b\x66\x07\x9b\xb6\x15\x6c\x7a\x2b\xd8\xf4\x57\xc1\x66\x64\xc1\xba\x9f\x04\x2b\xee\x02\x3b\x69\x00\xec\xe4\x7e\xb0\x59\x43\x60\xb3\x77\x81\xcd\xed\x03\x9b\xfb\x3e\xd8\xbc\xe7\xc1\x7a\xf7\xfd\xef\x1e\xac\x07\x38\xb7\xa8\x33\xff\x12\x50\x88\x7a\xa2\x9c\x27\xea\x19\xa0\x92\x56\x5c\xcf\xfa\xd7\x0b\x91\xc3\xeb\x45\x1c\xae\x48\x08\xe7\x0c\x43\x7c\x50\x50\xd1\xa4\xf3\xc2\x12\x79\xa2\xe9\x80\x4f\x8c\x47\x63\x4a\x36\x9f\x89\x7a\x48\xc9\x65\xbb\x28\x13\x4d\x37\x93\xf8\x60\x5b\x79\x2b\x15\x43\x8a\x12\x1a\x52\xf5\x37\x15\xcb\x5b\xdb\x12\xad\x41\x41\x0d\xb6\x26\x84\xd9\xf1\xb6\xf2\xd6\x32\x94\xac\xa2\x64\x15\x0e\x6c\x53\x5b\x3c\xd8\x68\xb1\x34\x1a\x52\xc8\x30\x44\x5d\x6e\x6f\x03\xc8\xe3\x73\xb2\x58\x07\xcb\x76\xb1\x4c\x3a\xe8\x11\xc6\x7a\xb3\xf9\x02\xe5\x33\xe9\x80\x88\x59\xab\x2f\x5c\x7a\xe1\xea\x59\xb3\x56\x5f\x78\xc2\x45\x67\x95\xc7\x7a\x95\x66\xae\x68\x77\xb7\x76\x0a\x91\x23\xfd\xe9\x85\x6d\x7e\x7f\xdb\xc2\x95\x0b\xdb\xfc\x29\xd6\xf0\x4e\x79\x5a\x6d\x00\xf7\x93\x96\x8c\x8d\xc0\x77\xea\x92\xd1\x30\x44\x55\x50\x21\x21\x0a\xc0\x8d\x88\xfe\x90\x4f\x8c\xc7\x52\x24\xc6\x63\x09\x85\xb9\xbd\xf9\x44\x84\x0f\x78\xfd\x3e\x89\x02\xbc\xaa\x7d\xa4\xdd\xa6\x7d\x44\x12\x5d\xce\x49\xbd\xd9\x7c\x42\xdb\xf3\xed\xd7\x6f\xd7\x8e\x3c\x7d\xe9\xa5\x4f\x93\x40\xcd\x24\x3c\x7d\xe9\x35\x74\x56\x92\x49\x74\x39\x49\x66\x62\x4d\xcd\xf6\x2a\x74\xe6\x35\xa3\x29\x2e\x7d\x5a\x3b\x72\xfb\xeb\xdf\xd6\xf6\x24\x0d\x51\x6c\x58\x95\x20\x00\x21\xcc\xc0\x02\x20\xe9\x11\x25\x5e\x72\xb2\x36\x16\xeb\xa0\x94\x92\x54\x52\x1e\x5f\x20\x13\x4d\xe7\x3d\xd3\x59\x07\x17\x8f\xc6\x44\xbf\x2f\x18\x08\x36\xf3\xd3\x58\xba\x8b\x2b\xe4\x0b\x5d\x54\xf0\x98\x83\x93\xf3\xe8\xc3\x93\x0e\x88\x6a\x24\xa9\xbd\x7f\x5f\xa6\xb8\x6e\x32\xd1\xe4\x75\xc5\xcc\x7d\xda\xfb\xc9\x88\xec\x10\x4a\x0e\x99\x04\xd1\x6e\x39\x5c\x74\xc8\x77\x7e\xff\x25\x71\x6a\xac\xd0\xe1\x23\xf2\x75\x14\x62\x53\xc5\x97\xbe\x9f\x3f\x47\x5d\x3e\xf3\x70\x71\xe6\xf2\xe5\x33\x85\xd2\xcc\xe5\x11\x0e\x89\xe6\x17\xb7\xb4\x4d\x9e\x32\x65\x72\xdb\x96\x17\x9b\x13\x65\x38\x64\x99\x6f\x65\x5e\xab\xc7\x62\x13\x64\xc7\xee\x0d\xbb\x1e\x16\xa6\x84\x92\x5e\x6f\x32\x34\x45\x78\x78\x57\xdb\x1d\x7d\x47\x4a\x7a\x6e\x5e\x2f\xc3\x1c\x63\xbd\x6d\x2a\xc2\x00\x1f\x4b\x51\x07\x9f\xcb\xe6\x33\xe9\x66\x16\xec\xe2\x32\xe9\x80\xde\xa7\xdc\x3d\x59\x6f\x79\xbb\x2d\xde\x3b\x7d\x92\x36\xd0\x75\xc3\xa5\x8b\x12\x89\x45\x97\xde\xd0\x35\xa0\xbd\x59\xbe\x43\xf5\xb2\xa5\x96\xc4\xb9\x2b\x6f\x3b\xf9\xf5\x0f\xdb\xe6\x15\x13\x89\xe2\xbc\xb6\x0f\x5f\xff\xdd\x9b\xe5\xdd\x66\xd9\xdf\x10\x55\x61\x00\x31\x13\x47\xe5\x80\xdf\x18\xb7\xa4\x20\xc6\x63\x4a\x2e\x5b\x90\x75\x34\x2d\x24\xe5\x7c\x3a\x28\x0b\x01\x51\x0d\x69\x77\x9d\x49\x7e\x9f\xec\xd7\xba\xb5\xee\x80\xd7\xef\x67\x67\x6a\x3b\x1b\x3a\xe9\x83\x3f\xc8\xd3\xe5\x3f\xd0\x07\x9d\xdc\xd5\x81\x90\x76\x9f\x66\x97\x1c\xfe\x26\xfb\x81\x03\xf6\x26\xbf\xe8\xa4\xf7\x69\x45\xa3\x3f\x69\x9d\x47\x3f\x99\x30\x41\x3b\x71\x9e\xb5\xb2\x63\x59\xa9\xdb\xaa\x63\xaf\x95\x92\x75\x24\x10\x97\x14\xaa\x70\x1c\x1f\x0c\xfe\x32\x4a\x6b\x4b\x9f\x7e\x5a\x5b\x4a\xe9\x79\xb4\x99\xae\xa6\x9f\x18\x70\x4d\x38\x3e\x58\xcc\x47\x13\xba\xe8\x3a\xed\xb3\x5d\xda\xaf\xb5\xb3\x7f\xf2\x13\xce\x56\x05\x33\xfd\x31\x50\xea\x30\xaa\x82\xde\xf7\x7e\x7d\x16\x27\x2b\x18\x92\xed\xe2\x32\x81\x48\x21\xdd\xcc\xc1\x2d\x46\x14\x77\x3e\x22\xe0\xda\x25\x43\xff\xb2\xe4\x5a\x4f\xc7\x9c\x2b\x7b\x6f\xa4\xb5\x37\xf6\x5e\x39\xa7\xc3\x33\x8c\x3f\x68\x3f\xf8\xc3\x1f\xa8\xeb\xe6\x75\xf7\xde\xbb\xee\x53\x5f\xfc\xd2\xba\x53\x54\xf5\x94\x75\x5f\xfa\x22\xf7\x7d\x33\xfc\x0f\x00\xea\xf4\xf9\x23\xe9\xf3\xc7\x85\x16\x4c\x42\x37\x4e\xc5\xb9\xb8\x14\xd7\xe3\x76\x7c\x15\xdf\x04\x84\x5c\x56\x69\xa3\x98\xd8\x44\xbe\xc0\x34\x4a\xe7\x3d\x9f\xe0\x27\x4f\x56\x31\x30\xbc\x82\xf2\x34\x3e\xfe\x9f\x4c\xff\x49\xf5\x8d\x9f\x38\xa4\x2a\x21\x83\x8a\x1d\xe7\xc5\x43\x09\x95\xa1\x7b\x38\x84\x94\x21\x8c\xc6\x08\x35\x39\x35\xb5\x36\xd5\x27\x95\xa9\x2e\x9f\xf9\x91\x31\x69\xc4\xe2\xcc\xe5\xc5\x91\x28\xba\xe7\x58\xce\x72\x88\x19\x05\x6b\xfa\x9b\x1f\x0d\x3f\x32\xea\xe4\x6a\x93\x68\xf7\x7c\x42\x81\xdf\x3d\x6c\xd4\x2d\x18\x13\x96\x37\x74\x32\xb5\xe3\xa9\x53\xe6\x31\x3d\xd4\x40\xe3\x7a\xec\x13\xe2\x39\xf4\x66\x35\x64\x7b\x7b\xb3\xcc\x78\x8f\xba\x39\xf5\x78\x31\x0c\x3a\xc9\xec\xcd\x92\xfe\x66\xcf\xd7\x78\x86\x9e\x3f\x5e\x8c\xa1\xc0\x85\x41\x6b\x8e\xc6\x45\x90\xdf\x84\x6a\x06\x99\x50\x79\xc6\xf9\xe9\xff\xb1\x7f\x7c\x7d\x0c\x9d\xad\x5a\xa9\xb5\xb3\xb3\x95\x8a\xfa\x7b\xd4\xcd\xd4\x5a\x5f\x59\x3d\x7e\xdc\x3f\x9e\xb2\xd6\x4d\x11\xc3\xa9\xbf\xe8\xd5\x11\x67\x79\xd4\xc9\x1d\x33\xf4\x13\x13\xd4\x14\x66\x2a\xac\x8f\x1e\x8b\xff\xbf\x8f\xc2\x3f\xde\xab\x02\x3a\x5b\x87\x8c\x30\xae\xd4\xda\x79\x04\xc7\x8f\xab\x75\xff\x0f\xfb\x6a\x4c\x57\x80\x70\x35\x9c\xe2\xe7\xf9\x6f\x21\x00\xc0\x27\x91\x24\xc6\x26\x11\x29\xd9\x6e\xca\xa7\x83\x56\xca\xa7\x5b\x48\xfc\x7c\xb8\xdc\xbe\x35\xbc\x28\xbc\x55\xbb\x3b\x1c\xd6\x1d\xa4\xb0\xed\xba\x9f\x3b\xb4\xc8\x88\x0a\x6f\xa5\x8b\x75\x7f\x38\xac\xfd\x86\xdd\x11\x0e\x6f\x05\xe1\x92\xe1\x77\x05\x2f\xbf\x03\x71\x20\xe1\x73\x91\x18\x4b\x59\x49\x2f\x5b\xc9\x16\xac\x63\xcb\x0f\xf8\x24\x2b\x09\x5e\xa3\x64\xed\x35\xed\x35\xb3\x24\x52\xb4\xd7\xaa\xb5\x91\x52\x29\xfd\x35\x52\xb4\x8f\x8d\x0d\x8f\x94\x62\xf2\x2e\x26\xbd\x88\xa3\x0d\xb3\xcc\x11\x6e\x33\x5f\xfa\xb0\xc4\xcd\xb1\x99\x46\x39\xfd\x95\x0e\x34\x51\x26\xdd\x4c\x15\x2e\x0b\xc7\xe3\xb2\x78\xc8\x8e\x01\xd9\x51\x74\xc8\x03\x0e\xb9\xc6\x39\x86\xf7\xea\xc9\x1d\x8f\xf7\x62\x03\x47\xe5\xd4\x9d\x7f\xae\x61\xc8\x9e\xb8\xb8\xe7\x38\x0c\x59\x6d\x9b\x5c\x08\x62\xf2\x51\x58\xfb\x8f\xc1\x5f\x2e\xe9\xb5\xb2\xe2\x3f\x07\xb5\x01\xef\x3f\x0c\x69\x65\x8d\x17\xf5\xe9\x36\x01\x39\x9d\x0b\x62\x22\x1f\x49\x28\x2c\x97\xf5\x16\xf2\x81\x60\x40\x94\x9c\xe4\xf7\x35\xb3\x74\x17\xcb\x65\x95\x54\x07\x15\xba\x28\x18\xf0\xea\x34\xdb\xa4\xd0\x3a\x4f\xbd\xf9\x45\xed\x0d\xed\x39\xed\x8d\x17\x37\xdf\xbf\xa3\xed\xa2\x96\x88\x6b\xe2\x8a\x35\xa7\xdd\xf2\xf4\x4b\x4f\xdf\x72\xda\x9a\x15\x13\x5d\x91\x96\x8b\x27\xee\xb8\xbf\xac\xf6\xae\xee\xed\x5d\xdd\xcb\xd4\x7b\xf5\x94\x9b\x5f\xa4\xf0\xbd\xdf\xa1\x99\xeb\x22\xce\xb6\x89\x17\x45\xe6\xbf\x72\xf5\xea\xa7\x6f\x39\xed\xb4\x5b\x9e\x5e\x7d\xf5\x2b\xf3\x23\x17\x4d\x6c\x73\x46\xd6\x69\xcf\xb0\xf9\x65\x83\x40\x33\x83\x40\x9b\x1b\x64\x15\x7e\x70\x94\x2e\x20\x39\x82\x2e\x26\x92\x24\x3d\xa6\x5f\x87\xef\x58\x7e\xfa\x24\x3f\xbc\xce\x92\xd3\x6b\xbc\x48\xfd\xe7\xdc\x7d\x55\x87\xf7\x72\xcd\x70\x52\xd1\xe9\xf5\x1e\x2a\x1b\x6e\xa6\xbb\xe9\xf2\x21\xfd\xe3\xe4\xf4\x20\x3a\x74\xd8\xf0\x08\xba\x67\x74\x3c\x0c\x79\xe2\x12\x00\x59\x25\x26\xfa\x02\x69\x1d\x83\x5c\x24\x4a\x81\x60\xc0\x27\x39\x29\x1e\x9b\x44\xa2\x24\x4a\x06\xd4\x93\x48\x49\x49\x3a\x22\x29\x29\x9d\x4d\xec\xa2\x82\x32\x89\x3a\x48\xef\x8c\x6e\xca\x17\xaa\xa1\x99\x74\x0b\xe5\x0b\xf9\x82\xd1\xc2\x16\x0a\x04\x0b\xf9\x4c\x3a\x18\x08\xea\x2c\xb4\x93\xa4\x40\x0b\x35\x13\x8f\xbb\xf7\xdf\x7d\xf7\x7e\x76\xb7\xdb\xfe\x94\xec\x8b\xcf\xb5\x59\x1b\xb7\x07\xec\xce\x5b\xda\x27\xb9\x1d\x52\xd3\xef\x9d\x7e\x0a\x4f\x99\xf0\x05\x9b\xcb\x59\x77\x5d\x4a\xb2\xb8\xe6\x7a\x1b\x9d\xff\xe6\x70\xbb\xeb\xbe\xeb\x6c\x68\x3d\xd9\x66\x0d\xdd\x11\x70\x38\xc6\x26\xbe\xcd\xea\x72\xd8\x6f\x48\x18\x89\x43\xae\x7f\x73\xb8\x59\x40\xaf\xe1\x6e\x5a\xf7\x7b\x7b\x80\x85\xf3\xc9\xf4\x12\x7b\xc8\x96\xbc\xcd\xba\x36\xe8\xda\x9a\x0e\x7b\x1c\x4f\xba\xfd\x6b\xac\x75\x97\xe7\x6d\x0e\x7b\x9d\xff\xec\x86\xf4\x94\x46\xe6\x77\x18\x69\x3b\x3a\x4e\x3c\xcd\x6e\xb7\x39\x12\xb7\xdb\xd6\xd4\x26\xb6\x6d\xcc\x58\x9c\x66\xe2\xc9\x61\xe6\x37\xd6\x8e\x61\x55\x18\xe5\x41\xa6\xe1\x64\x5c\x68\xf2\x21\xb5\xa3\x2c\x7c\x82\x5f\xf6\x44\x3d\xbe\x66\x5d\x46\xed\x22\x8a\xa6\x94\x54\x54\x94\x04\x03\xd3\x46\x18\x96\x78\x75\x4e\x17\x0c\x59\x36\xd0\x42\xc6\x1a\xe2\x75\x1a\x63\x5a\x74\x7a\xe9\x38\x6e\x75\x48\x75\xba\x38\xae\xc8\xb9\x9c\xe5\x3e\x2a\x4d\x96\x6c\xda\x0f\x6d\x12\x77\xa9\xd7\xd9\xb7\x7c\xe6\x50\x69\xe6\xf2\x3e\x03\x75\x72\xb3\x5d\x0b\xf5\x15\x66\xa1\x6b\x36\xe5\x9c\x5e\x2e\x52\x83\x46\xce\xe3\xb8\xcb\xcd\xdc\xe3\x43\xbd\x81\xa4\xc7\x93\xe4\xe7\x5f\x69\x65\xcc\x7a\x57\xd1\xe9\x1d\xea\x3d\xe3\xea\x2b\xcf\xe0\x9e\x34\x6a\xff\x5a\x32\x9b\x4d\x7e\xcd\x6b\xce\xff\x10\x20\x5e\x20\x70\x90\x8d\xf9\x6f\x34\xcd\x13\xf5\x54\xf8\xaf\x9c\x95\x02\x05\x49\x94\xe2\xc6\xca\x90\xd2\x71\x4d\x97\xa4\xd3\x2d\x55\x7a\xec\xf7\x04\x9b\x49\xe7\x5c\x35\x75\x18\x9a\x1a\x52\x88\x75\xb3\x6e\xfa\xcf\x2e\x8b\x83\x73\x58\xca\xbd\xe5\x5e\xbb\xdd\x61\xe9\xb2\x30\x1b\xfb\x45\x64\x49\xe4\x7d\x63\x6a\xfc\xd6\xc6\x58\x44\x8b\xe8\x8c\xad\xce\xe8\xd2\x00\xf1\x44\xaf\x69\x0a\x3b\x69\xbe\x95\x49\xec\xa4\xf2\xbf\x5b\x88\x59\xe7\xdb\x1a\x2d\xec\xac\x50\xe8\xf9\x1f\xea\x6d\xd3\x56\x7f\x47\x97\xf9\x4d\xda\xaa\x0f\xb1\x8c\x90\xbe\x6e\x51\x33\xf9\xc7\x31\x90\x41\xc9\x13\x55\x52\xa4\x90\xd9\x8a\xa8\x47\xd8\x17\x6e\xed\x6c\x3d\x6c\xac\xa9\x9c\xda\xda\x17\xde\x42\x9b\x6c\x76\xed\x27\x76\x3a\x5f\xeb\x6b\xed\x2c\x83\xdf\x12\xee\x6b\x3d\xa2\xea\xf1\x62\xb1\xb5\xb3\x35\x3c\x4b\xdb\xda\x64\xa7\x13\xed\x87\xbd\x3c\x3a\x5b\xa9\xff\x70\x65\x07\xbc\x32\x37\x7d\x88\xa0\x7d\x94\xb3\x35\xe9\x4e\x05\x6d\xe0\xee\xa0\x88\x93\xdc\xcd\x14\xc9\xc3\xcd\xf8\x48\x82\xb9\xbd\x89\x08\xcf\xa9\x5e\xa7\x49\x11\x06\x4c\x74\xe8\xdf\x71\x58\x7b\xf5\xf0\x8e\x1d\x87\xa9\xf5\x30\x5d\xfe\xa2\xf6\x55\x6d\xb9\xf6\xd5\x17\x5f\xa4\xf3\xe8\x01\x3a\x8f\x1b\xd0\x46\xf0\x46\xc7\x85\xb2\x46\xad\x7a\x5a\x23\x07\x3b\xb7\x36\xe9\x8b\x2f\x1a\xe3\x98\x06\xa4\x85\x02\xe0\xc1\xc9\x00\xe5\xb8\x0e\xd2\xc5\x14\x89\xf3\x8b\xa6\x9c\xe3\x8b\x47\xd3\xf9\x14\xd7\x41\xba\xb4\x23\x71\x62\x20\x13\x8d\xe5\xb2\x05\xd2\x31\x37\xa6\x13\x17\x23\x99\x4e\x39\xe2\x7a\x1f\x52\x80\x3f\xab\x9e\x7c\x8e\xef\x3a\x7c\x54\x4f\x5e\xfb\xfb\x76\x2f\xfb\xa0\xa3\x5c\x74\x78\xc9\x47\x3e\x87\x36\xe8\xf0\x91\x8f\xbc\x8e\x72\xb1\x23\x44\xf7\x5b\x12\x3e\x3a\xc3\xe1\x23\x17\x79\x1d\x8f\x38\xbc\xe4\x22\x9f\x83\xce\xf0\x25\x2c\x74\x7f\x88\x85\x79\x32\x56\x26\xad\xc4\xdb\xdd\x6e\xed\xc4\x79\xb2\x83\xa0\x07\x0c\xc3\x21\xcf\xcb\x77\xf1\x3e\x39\x2c\x3b\x4c\xba\xe9\x90\xc3\xf2\x91\x03\x5d\x55\x39\x42\xd4\x99\x40\x17\x92\x98\x01\x24\x2a\xb4\xb0\xfa\x95\xc7\x0c\x7b\x30\x90\xee\xd6\x67\x1f\x05\x24\x9d\x8f\x21\xa5\x90\xcf\x44\x2b\x08\xe1\xf7\x44\xd3\x82\xa9\x41\x22\xc5\xf8\x3c\xd2\xd9\x7a\xd8\x60\xd2\xe8\x97\x9f\x9f\x7a\xef\xd4\xad\xf4\x52\x6b\xa7\xf6\x3d\x4f\x8b\x56\xf4\xe6\xbd\x5a\xb1\xc5\xe3\x99\x48\x50\x42\xa4\x0b\x5f\x98\xf8\x48\xd6\xcc\xa5\xff\x51\x64\x94\xef\xdb\xda\xd9\xb9\xb5\x93\x79\x26\x34\x69\x45\x59\xa6\x52\xd3\x84\x14\x95\x0c\xb9\xa9\x58\x83\x2b\xf5\x48\x18\x3c\x80\x6f\x04\xae\x11\x54\xf1\x7b\x32\xe9\x00\xab\x20\x4b\x17\xb9\x15\xbe\x06\x5f\xf8\x3e\x9b\xf6\xfd\xba\xfa\x3a\xad\xe4\xb2\x58\x02\x25\x63\xe2\x94\x9c\xde\xe7\x47\x70\x66\xc7\x8e\xa3\xb0\x86\xf5\xd9\xed\xda\xf7\xad\x56\x2a\xba\x65\x9f\x81\x37\x4e\xad\xdf\xcb\xd2\x35\x98\xf6\xf4\x51\xa8\x73\x0c\x58\x4d\x1a\x67\x12\x43\x53\x05\xa1\x73\x82\x74\x7c\x58\x97\xd7\x40\x68\xa3\xee\xba\xfa\x3a\x2a\xba\x7e\xf5\xb1\xa0\xee\xf4\x69\xfd\x06\x91\xeb\xf3\x3a\xed\x76\xea\xb6\x5a\xb5\x92\x9b\x3e\xfa\x18\x50\x0d\x2b\x04\x51\x67\x01\x1c\xc6\xcc\x8f\x76\x50\x8a\x8b\x72\x4e\x92\xa2\xc1\x68\x72\x14\x1b\x0a\xb2\x49\x8d\x83\x72\x80\x1b\xa6\xe9\xc4\xd1\xfe\xf2\xf4\xfd\xc4\x11\x4d\x3f\x97\x8a\xac\x4f\x09\x1d\x56\x43\x4a\xc3\xbb\xb6\x5c\x88\x2b\x86\x72\xb6\x77\x1b\x58\x91\xab\x63\x34\xa8\xb9\xb9\x3a\x56\x7a\x40\x6b\x36\xb4\x90\x7f\xec\x9a\xc1\x5a\x1b\x62\xb1\x86\xf2\xab\x33\x6a\xfa\xc8\x85\x46\xc3\xea\x5c\x1f\x4f\x7d\xd1\xd5\x2b\xcc\x07\x29\x70\x9c\x69\xcf\xf7\x47\xca\x03\x2e\x8f\xdb\x1d\x89\x44\x5b\x58\xe4\x63\x27\x3d\x7b\x78\xbe\x57\x2b\x59\x2d\x72\x92\xa9\x49\xd9\x2b\x6b\xa5\x9f\x7f\xdc\xac\xa7\x11\x98\x32\x23\xb4\x28\xa5\x74\x93\x12\x8f\x39\x99\xaf\x99\x65\xd2\xfa\x7a\x9f\xd6\x17\x76\x49\xe4\x47\x98\xcc\x4c\x9a\x0f\x16\xf2\xc1\x80\x08\x1d\x53\x27\x7a\x3c\x2d\xb7\xec\xfc\x69\x95\xf9\xda\xb8\x7f\x9e\xe4\x76\xd9\x6e\xb6\x92\x65\x9d\xf6\xb3\x47\x47\x59\xb5\x3b\x49\x5e\xf3\xd9\xa6\x09\x29\x01\x5a\x31\xa4\xb4\xa6\x9a\x6f\xb9\xb9\xc2\xe2\xad\x3e\xd7\xc6\xac\xb7\x58\x1a\x6c\x5b\xee\xd0\x53\x52\x27\x85\x5f\xdc\x7c\xe9\xaa\x1b\x5a\x3c\x9e\x5a\x7e\x26\x81\x39\xc6\x2c\x60\x88\xc6\x12\x29\x49\x1c\xa5\xd7\x3e\x17\x35\x93\x09\x6c\x65\xe1\xad\x28\x8a\x8d\xa6\x8c\xf0\x39\x33\xc8\x8b\xa8\x01\x7b\x3a\x20\xfc\x85\x8a\xda\x6a\xed\xdd\x1d\xda\xdf\xd6\xdc\x20\x67\xf5\xe1\x2a\x85\x14\xf9\xe6\x39\x8f\x9f\x77\xd3\x5b\xb3\xeb\x26\x5a\x02\x25\x87\xdc\xa0\xb7\x2f\xa4\xc8\xb7\xec\xfc\x69\x25\xf0\x27\x0e\xf9\x24\xba\x87\xe4\x1d\xe4\x5b\xf3\x59\x39\xab\xd0\x80\xc0\xb4\xf7\xb5\x6f\x5f\x72\xc1\x0d\xb2\x59\x84\x92\x95\x6f\x9e\x39\xf7\xb3\x97\x7b\x56\x06\x65\x4e\xd6\xb3\x2b\x59\xf9\x96\x9b\xcd\x00\x87\x44\x76\x5a\x70\xe9\xaa\x1b\x64\x05\x15\x63\xab\x63\xeb\x0b\x40\xe3\x38\xd2\xdc\x27\xf8\xc7\xcb\xa5\xb9\x4f\xf0\xcb\xe3\xb4\x56\xf2\x51\x5a\x28\x53\x10\x38\xde\x8b\x57\x65\xc7\x90\xe1\xe1\x0c\x31\xe3\xd8\x6e\x55\x76\x1c\x36\x3c\x82\xee\xa9\xd5\xeb\x52\xdf\x48\x71\xef\x1d\xc3\x55\x7e\xef\xe3\xa3\x33\x9c\xe1\x1e\xd2\xeb\xe3\x17\xd4\x2a\x7c\x8d\x39\xce\x9b\xfa\xf4\x16\x7d\x8e\xe7\x74\x6a\xef\xaf\xd5\x11\xe9\xb2\x20\x22\xd0\x25\xc1\x00\x15\x99\xce\xb2\x72\xc5\xaa\xd0\x1d\x21\x0b\xad\x27\x4b\xa4\xb5\x93\x43\xe9\xe2\xbb\xef\xbe\x58\x1b\x28\x1b\xf4\x9a\x15\x5b\x3b\x4b\x4f\x92\x45\xfb\xf0\xc9\x52\xa7\x8e\x97\xc5\x8a\x1c\xe1\x41\xc1\xc0\xcb\x11\x82\xa7\xe4\x74\xa9\x46\xe7\x06\x75\xae\xba\x83\xc5\x63\xa6\x1e\x56\x9f\xe7\x3a\xcf\x1c\x08\x06\x32\xe9\x2e\x66\xd4\x5e\x34\x1a\x54\xec\xb9\xb8\x47\x28\x35\x34\xfe\xfa\x9e\x19\xd7\x2e\xbb\x75\x5e\x49\x1b\xf4\xb8\x43\x4a\x8b\x7f\xea\x81\xa7\xd6\x7c\xf7\x3a\x25\x9d\xbf\xfe\x9c\x33\x1c\x21\x45\xc0\x5c\xe5\x88\x53\x6f\x38\x7f\x48\x99\x9b\xeb\xe9\xb9\xb2\x2c\x34\x34\x3a\x37\xb4\x67\xdb\x77\x58\x95\x10\xfb\x73\x24\xe8\x6c\xda\x34\x75\x9a\x3c\x31\x3b\x51\xa9\x9e\x39\x31\xe4\xc8\x1e\x1d\x42\x17\x73\x52\xdc\x3f\x96\x47\x6d\xa2\xb4\xce\xc8\xe7\xb2\x2c\x11\xe1\x99\xdf\xd7\xa2\x2f\xe7\x23\xac\x59\x15\xc7\x62\xca\x24\xa6\xe4\xb2\x15\x01\x53\x54\xa7\xfb\x9e\x0a\xdc\xbc\x64\x94\x1b\x9d\x73\x55\x6c\x56\xd3\x5e\xed\xd7\xda\xb7\xb4\x5f\xef\x6d\x9a\x15\xbb\x6a\xce\x68\xdc\x92\x9b\x03\x4f\xf9\xa6\xdf\x34\x40\x59\xea\xa5\xec\xc0\x4d\xec\x96\x47\x76\x4e\x89\x9e\xb1\x26\x32\xca\x7c\x46\xe6\x4c\xb7\x9f\xbb\x62\x27\x89\xf7\xde\xab\x1d\xde\xb9\xe2\x5c\xfb\xf4\x39\x91\x51\xa6\x34\xb2\xe6\x8c\xe8\x94\x9d\x8f\x7c\x91\xea\x5f\xd8\xbc\xf9\x05\xed\x2d\xb3\x5d\x11\x0e\xfc\x00\x64\x93\x6e\xc5\x52\x34\x82\xbb\x94\x4f\x07\x38\x28\x59\x59\xfb\xb6\x76\xd8\xa0\xc3\x22\x2d\x90\xb3\x0a\xdf\x7f\x44\x9f\xe1\xb4\x40\x09\x91\xce\x66\x2e\x30\xe7\xa0\x8e\x2f\x11\x5e\x35\xca\x3a\xe1\xd8\xa5\xc1\x1c\x48\x43\x71\x9d\xed\xe0\x8c\xed\x83\xe0\x31\xeb\x20\xf5\x53\xb3\x6d\xae\x90\x52\x1f\x8b\xd5\xeb\x8f\x12\x72\xd9\x66\x1f\xa3\x62\xcd\xbb\xeb\xc6\xb0\x90\x6c\xf4\x37\xf9\x1b\x26\xcd\x9c\xd4\xe0\x6f\xf2\x37\x26\x85\x46\x98\x86\x99\xc3\x4f\x89\xaa\x30\xc7\x80\x67\x1e\xd6\xfc\x33\x30\xf1\x6e\x56\x09\x35\xf6\x64\xb2\x8a\x29\xd2\x8d\x8f\xeb\x22\x1d\x11\xbd\x6e\x96\xd2\x05\xf2\x91\x14\xff\x70\x8b\xe8\x53\xff\xb2\xcd\x61\x6f\x54\x52\x9d\xbe\xf9\x67\x9c\x31\xdf\xd7\x99\x52\x42\x0e\xc7\x36\xfa\x17\xed\x65\x87\x23\xa4\xa4\xa4\x16\xa9\x23\xf1\x99\x5b\x6e\xf9\x4c\xa2\x43\x6a\x91\x8c\xc8\x97\xff\xf1\x5e\x28\x68\x2f\x6a\xe5\x69\x82\x12\x4a\xf9\x9a\x5c\xf9\x07\x9f\x7c\x30\xef\x6a\xf2\xa5\x42\x8a\x30\xed\x3b\x5a\x56\xbb\xfe\x6c\x41\x09\x25\x82\xbc\x83\x6f\x08\x9d\x4d\x6e\x4a\x93\xfb\xec\x50\x03\xef\xe0\x83\x89\x90\x22\x9c\x0d\xbb\x21\xe4\xeb\x38\xcf\x41\x42\x1d\x5c\x90\x11\x44\x23\x5a\x10\xc7\x24\x64\x8c\xb9\xea\x8f\xe7\x64\x7f\x3c\x17\xf5\xc7\x73\x64\xc8\x2a\x9e\xa8\xfe\x25\x4f\xd4\x43\x95\x70\xd9\x13\xcd\xc5\x3d\x71\x4f\xd4\x9f\xc9\x91\x99\xc4\x43\xaa\xaa\xaa\x9c\xaa\x0e\xa9\xba\xd8\xa1\x3f\x1c\xf4\xf7\x30\xca\x2a\xaf\xaa\x7a\xb4\xa6\x1a\xdf\xb2\x5a\x56\x05\xb5\x6c\x04\x71\xd0\xb3\x0d\x11\x5d\x4f\x95\x7c\x7a\x2c\x53\x35\x23\x9c\x41\xd3\x73\x31\x23\xa1\x1e\xac\x3f\x30\xf6\x01\xab\x6b\xc3\xd1\xed\x48\xa1\xad\xd2\x96\x69\xe8\x06\x32\x71\x4f\x46\xfe\x5f\x3c\xdd\xdd\xdd\xdd\x91\xc8\xf2\x96\x96\xaf\xb4\xb4\x7c\xa5\xab\xeb\xba\x96\x96\x6e\xe3\xef\x2b\xdd\xdd\x5f\xe9\xee\xbe\xce\xf8\x5b\xde\xdd\xfd\xf4\xf2\xe5\x7a\xb2\xee\x6e\x41\x3d\x7c\x83\x70\xfd\xff\xe8\xd1\xc7\xc5\x5c\xd3\xef\x12\xde\x36\x68\x74\x53\x8d\x8e\xa2\xc2\x11\x51\x07\x8d\x48\x62\x14\xa0\x52\xcf\xc5\x3d\x3d\x17\xf3\x57\x25\x35\x7f\x2a\x9b\x4b\x96\x73\x4a\xae\x37\x4b\xfd\x39\x55\x61\x3f\x4f\xf2\x75\x7a\x64\x8f\x56\xcc\x25\x35\x5f\x32\xc9\x9e\x4f\xaa\x39\xea\xcf\xf6\xe6\x94\x72\x3e\x55\xe5\x4d\xef\x92\xd6\x54\xea\xca\x7d\x52\x6d\x82\x19\xaa\xa4\x28\x9f\xcb\xea\x71\xf1\xcc\x3f\x00\x05\xa9\x46\x70\xa2\xa3\x99\x5e\x49\xea\x71\x6a\x6e\xe0\x1f\x80\x2f\x6b\x04\x86\x5b\xe8\x95\x64\x2e\x9b\x62\x3f\x53\x72\x26\xd8\x1c\x6c\xc3\xaa\x78\xb5\xa0\x62\x31\x56\x62\x03\xa0\xcb\x24\x4e\x5d\xee\x52\x52\x4a\x21\x9b\x2f\xe4\x95\x42\x17\x33\xa6\xb1\xa2\xbf\xc7\x3b\x58\xa1\x4b\x0c\x4a\x46\x93\x2a\xf9\x24\x31\x68\x2c\xf3\x05\xca\xa7\x02\x82\x68\xb8\xbb\x29\xaf\x8c\x8a\x72\x35\x7e\xf1\xc2\xd6\x80\xf6\x8e\x7c\xc5\x49\x43\xab\x16\xdc\x1e\xae\x0f\x88\x44\x16\x62\x76\xbf\x18\x6c\xb7\x70\x02\xe3\xc2\x9c\x7f\x22\x4f\x12\xcf\x27\x78\x79\x12\x4f\x16\xc6\x9c\x01\xd1\xe2\x71\xc8\xbe\x68\x2a\x4c\x8a\x83\x7d\x34\x7f\x51\x40\x7b\x37\x31\xe7\x9c\xa1\x2f\x37\xd6\xd5\xd9\xea\x37\x71\x5f\x6e\xca\x5b\xa8\x5d\x62\xca\x91\x77\x78\xbb\x93\xf5\x39\x1a\x78\x3f\x6f\x77\x96\xfb\x1d\x0d\xfc\xea\xa3\x42\xf8\xd8\x89\x73\x87\xae\x2a\x9e\xb5\x66\xe1\xc9\xd3\xf9\x0e\xa7\xa5\x51\xac\xf3\x35\xda\x94\x35\x8a\xad\xd5\x52\x17\x13\x13\xeb\x63\xd6\x0e\xc1\x11\x17\x42\x57\x2a\x96\xb8\xd5\xe2\x0b\x59\xec\xc9\x68\xaa\x21\x40\x22\x67\x5d\x3f\x7f\xe8\xaa\x8d\xa7\xb8\xdc\x8d\xb3\x5b\x42\xdc\x6f\x03\x71\x57\xf3\x08\xdb\xa2\x95\x46\x9c\xe6\xde\xed\x17\x85\xca\xbe\x30\xa5\x83\xa6\x16\xc0\x50\x83\x59\x0d\xbc\x30\xd1\xa2\x90\xcf\xf0\xdb\x82\xfe\x68\x2a\x15\x95\x1b\x26\xc7\xb5\x39\xda\x9c\xc4\x24\xd3\xef\x0f\x0a\xaa\xd5\xd1\x19\x3b\xfc\xdf\xb1\x4e\x87\x25\x42\xbb\xb5\x25\x51\xdd\x2f\x58\x63\x9d\x0e\x6b\x95\x96\xab\xa2\x49\x8b\xec\xf0\x61\x3a\x30\xc1\x24\x26\x86\xde\x27\x5a\x45\xc5\x82\xa7\xa2\xb2\x36\x39\xb4\x78\x75\x79\xae\xa0\x65\x8b\xa1\xa2\xd0\xd9\x05\x95\x53\x87\x54\x4e\xed\x6f\xed\xd4\x29\x8e\x29\x88\xca\x8e\x01\x93\x77\x19\x70\xc8\x97\x9d\x5a\xec\x6c\x65\xfd\xad\x7d\xe1\x5d\xe1\xd6\xe2\xa9\x97\x11\x74\x9a\xd3\xd9\xda\x5f\x36\x65\xcf\xa2\xd6\xe7\x90\xfb\x75\x6e\xa6\x5f\x76\x50\xff\xa9\x97\xb1\x48\x6b\x67\x6b\x78\x57\xb8\xaf\x75\x18\x97\x55\xec\x00\x4c\x99\x39\x8a\x09\x00\xd2\x01\x9f\x18\x53\xb2\x15\x66\x60\x94\x81\x1a\x51\x57\x55\xf4\xd0\x6e\x6e\xde\xbb\x7b\xf6\xbc\xbb\x87\x1b\xd0\x59\xa6\xc3\xaa\xfe\x1e\xc8\xc8\xab\x72\x0c\xb9\x55\x72\xa6\x7c\xe1\xa8\x3e\x99\xeb\xdb\xa3\x27\x65\xf3\xee\xbe\x78\xc8\x48\xc7\xa9\x17\xdf\xbd\x75\xca\x9c\x39\x53\xb6\x1e\x51\x69\xc4\x66\x61\x54\xb7\x6c\xf2\x72\x8b\x00\xe2\xd2\x81\x4c\xba\xa0\x50\xa1\x8b\x2f\xc8\x34\x8d\x74\x01\xcd\x1b\x6c\xa6\x60\xc0\x78\xf9\x7d\xa2\x3f\xa6\xc4\x63\xbc\x94\xed\xa6\x74\x97\x90\xcb\x76\x50\x2a\x29\x32\xbf\xaf\x99\xcb\x04\xfc\x3e\x49\x8f\x14\xe3\x22\xfb\x8f\x7f\x89\xfe\xe2\x44\x59\x39\x6b\xe8\x67\x2c\x38\x73\x72\x46\xb1\xbf\x43\xf5\x3d\x39\x0b\xf7\x42\x74\xc7\x04\xd7\x99\x4d\x3e\x97\x7c\x8b\x4b\xa4\x6e\xad\xd8\xab\xfd\x35\xc5\xdf\x48\x41\x8b\xdf\xea\x10\xba\x4e\x27\xad\x2b\xb4\x2a\x3c\x4d\xe9\xe5\x88\x4d\xfd\xaf\xa9\x96\x24\xb7\x88\xfb\xa5\xd6\xc5\xb3\xf2\xd0\x55\xa7\x4a\x75\x36\x39\xd5\xc2\x56\xb3\xfd\x4e\x49\x8b\x2c\xd4\xbe\x74\x6e\xec\x77\x53\x4f\xb0\xbb\x9a\x44\x45\x16\x3c\xbc\xdb\x49\x6d\xf1\xb0\xc0\x24\xd1\x66\xb7\xb8\xef\xff\x01\xc7\xa6\x6a\xef\x34\x04\x5a\xbc\x56\x8b\x9c\xb2\x7a\x7d\x16\x67\x45\x8e\x36\xd6\x2e\x3f\xda\x70\x1e\x90\x0c\x64\x22\x9e\x6c\xaa\x83\x8f\xc7\x24\x9f\xe8\xf7\x89\xcd\xc4\x19\xbc\x63\x2e\xab\xb3\x95\x92\xcf\x68\xb3\xcf\x98\xf8\x5d\xfc\x74\xca\xb9\x53\x1d\xfc\x24\xd2\x45\xb4\x40\x26\xdd\xcc\xf9\x7d\x4e\x4e\x6a\x26\xfd\x13\x37\x7a\x86\xb5\xcd\x9f\x49\x9b\x26\x34\x9e\x32\xf3\xdc\x79\x53\xe7\x85\x89\x91\x45\x9c\x78\xf2\xe9\x9b\x57\x64\xa6\xae\xdc\x30\x33\xbd\xc8\x42\xe5\x37\x98\x6b\x5b\x42\xaa\x13\x05\x0a\xf0\x89\x5c\x47\x46\xe0\x57\xd0\x1b\x37\x06\x97\x06\x67\x7f\xee\x9a\x65\x9d\xd1\x13\x16\x77\xe5\xee\x79\x61\xf6\x95\x5f\xdd\xbd\xac\x7d\x6f\xfb\xc5\xda\x25\xae\x08\x9d\x7a\xf9\xcc\xf6\xe9\x51\x0f\x6f\xcb\xed\xcf\x5a\x36\xce\x3f\x87\xbd\x22\x85\xba\x37\x2c\x9e\x7d\xd1\xb4\xb0\x23\xfd\xb3\x4c\xe3\xc5\xa1\x8e\xa1\xf5\xcb\xf9\x7a\x97\xbd\x39\x19\x9e\xe4\x4f\x0b\xdc\x2b\x6d\x16\x87\x55\xe0\xe9\x0c\x26\x53\x68\xea\xe2\x6b\x7b\xb2\x67\x9d\x38\x35\x52\x1f\x7f\xf6\xae\x95\x5f\xbd\xe0\x94\xb0\x18\x30\x65\x53\x5e\x9f\x9f\x53\x01\xbf\x4e\xd3\xf2\x85\x7c\x88\x52\xb9\x0e\x96\x2a\xe8\xa2\x69\x17\x15\x44\xc9\x49\x92\x93\x93\x44\x26\x39\xb9\x16\x0a\x04\x45\x29\xa6\x13\xef\xb8\x3e\xce\x9e\xc0\xa9\x27\x35\x86\x1d\xb4\xf9\x62\xaa\x9f\xb1\x50\x96\xa3\x8f\x5d\x3b\x75\xf2\xaa\x2f\x84\x05\x67\xf3\xed\x49\x8b\x5d\xb4\xb2\xc6\xab\x3d\x2c\xe0\x75\x12\x79\x76\x73\x8e\xba\xb6\xba\xa6\x0d\xe1\x5b\x66\x65\x9e\xbc\xee\x53\x92\x2c\x3b\xe3\x33\x25\x96\x65\x75\xf1\x06\x47\x9d\xc0\x5d\xc8\xac\x82\x60\x65\xa9\xb4\x2d\xe9\x92\x27\x45\xa7\x3a\x76\x96\xff\xb0\xd8\xba\xe2\xf4\x4f\xb9\xbc\x7c\x63\x7b\x81\xf3\x31\xef\x28\xbe\x1e\x16\x54\x34\xe2\x5a\x20\x99\x0e\xb8\xcc\xdd\x30\x7d\x2e\xc7\x63\x4a\xb7\xb9\x13\x26\xb6\x91\x87\x74\x19\x40\x97\x05\xf4\x69\xd4\xc5\xba\x29\x1d\x30\x50\x54\x94\x94\x54\x07\x4b\x75\x70\x7a\x3b\x74\x5a\x1c\xf4\x79\xfd\x3e\xb1\x8a\xe0\x2e\x12\x13\x3a\x0e\x2b\x33\x48\xef\x11\x4f\x96\xe9\x02\x9d\x8e\xe7\x86\xa0\xeb\x64\x92\x92\xf2\x88\x2f\x45\xbd\xbe\xeb\x7c\x53\x7d\xd7\xf9\xbc\xd1\x45\x8b\x6a\x3d\x1f\xfd\x32\x6f\xff\x49\xfb\xde\xf6\xc4\xed\x09\x4a\x8a\xcd\x75\x7e\xa7\x65\x22\xef\xe3\x99\x90\x6a\x6a\x68\xe2\xdc\x0e\x12\xed\xb2\xd4\xc4\x3c\xe7\xa7\x17\x46\xac\xc4\x0b\x82\xad\x75\x77\x42\xe0\x62\xbd\xda\x1b\x27\xa5\x7f\x96\xe1\x3c\x9f\x5e\x5b\x2f\x8b\xc4\x78\xae\xee\x8b\xd1\x4d\x3e\xb9\x39\x1a\x9a\xe8\x54\x93\xa1\x07\x42\xa1\x07\x42\x49\x1e\x55\xd7\x10\xf8\xe1\x46\x81\x27\x22\xc1\x51\x47\xb4\x7e\x60\x51\x93\x93\x6f\x5f\x6c\x5d\x78\x0a\x59\xac\x1c\x23\xe2\xf9\xd3\x0a\xcb\xcb\x8f\xdf\xef\xbe\x74\x6e\xd4\xdf\xe6\x6e\xb5\x39\x5d\xc4\x7c\xde\x0c\x59\x1b\x23\x21\xe7\x44\xfa\xd4\x2a\xda\xb9\xea\x4a\xd6\x18\x0c\xfb\x78\x7b\xbd\xd3\xb1\xf1\x42\x16\xf2\xd2\xf5\x66\x1f\x73\x86\x3e\xe0\x3c\xdc\x05\xc8\x95\x7e\x4c\xf0\xc1\xc0\xb8\x4e\xcc\x29\x7a\xa7\x18\x9d\xd8\x42\x39\x9f\x3e\x0d\x8e\xd3\x8f\x5d\x2c\xab\xe4\xb2\x86\x41\xd9\xd8\x9e\xa4\x74\x33\x33\x36\x4c\xb8\x78\xac\x83\xb2\xf9\x5c\xd4\x17\xf0\x39\x49\x17\xea\x52\x4a\xb6\xd0\xc5\x65\xd2\xcd\xe4\x13\xfd\xd1\xac\x92\xed\xa2\xd3\xcc\xbe\x9d\x4d\xe7\x11\x36\x46\x83\xb5\x1d\xeb\xb4\x79\x84\x19\xcd\xd7\x2d\x5a\x3b\xd1\x4a\xc4\xe8\x98\xfd\x2a\x59\x39\x12\xf4\x1e\xe3\xeb\xbe\x38\xe1\x7d\xb7\xd9\xb7\x42\xb3\x7d\x7a\xa1\xc8\x87\x42\x7c\xb1\x30\xdd\xee\x70\x09\xdc\x10\x38\xc1\xe5\x18\x1f\xca\xeb\xa1\xc2\xf5\x8d\x02\xcf\x88\xa7\x48\x4d\x97\x2f\x98\x4d\x0e\x91\x31\x5e\x38\xad\xb0\x2b\x5b\x78\xf6\x81\xb9\xc7\xee\x72\xf7\x86\x6f\x7e\xfe\x51\x4e\x6a\xb2\x48\xf3\xe7\x9e\x96\x17\xec\x8d\x75\xf6\x8d\xab\x8d\x3e\x3f\x3c\x9c\x6a\xcf\x73\xfe\x4e\x3f\x97\x6f\x4f\xf9\x13\x2d\x71\xc6\xe2\x2d\x09\xff\x31\x03\xcd\x83\x65\x63\x75\x1a\xc6\xee\xda\xff\x66\x8f\x5d\x82\x12\xfa\xc8\xb0\x16\x11\x2b\x96\x2d\x47\x0c\xeb\x12\xc1\x50\xae\x2a\xa1\xc3\x86\x4f\x44\x25\xce\x48\xc9\xab\x21\xa5\x34\x6a\x6c\x72\xc1\x27\x38\xff\x8f\xe0\x36\xcd\x13\x39\xb5\x02\xb7\xe1\x13\xaa\xd6\x3a\x86\x8f\xfd\x3f\x80\xdb\xf3\x4f\xfa\xc7\xc2\x5d\xdb\xdb\xb5\x7d\xfd\x3f\xee\xe9\xff\x13\x98\x3f\xd9\xfd\x4f\xc2\xfc\x31\xba\xba\xf1\xbb\xc7\x9e\x4f\xf0\x1f\x0b\x6f\x3e\x2e\xfe\x93\xda\x4e\x90\x1d\x06\x6b\x7b\x9c\x97\x08\xd9\x71\xd8\xf0\x08\x45\x87\x7c\x18\xc7\x8b\x39\x9e\x7b\x60\xa4\x34\xba\xe2\x58\xce\xa1\xf7\x46\x9c\xfc\x31\x43\x8f\x9d\xcd\x3c\xac\x3a\xbe\x4f\x4d\x3d\x74\x2c\x45\x4a\xd6\xb4\xb8\xa5\xff\x25\x66\x90\x2a\x3b\x9c\x56\x6d\xc0\x6a\xa5\x88\xd5\xe9\x90\x05\x55\x76\x7c\x64\xb4\x50\x34\x40\x39\x62\xbc\xf9\xe2\x78\xf7\x68\x1a\x6e\xa0\x5c\x72\xc8\x7a\xf6\xb0\xfe\xfa\xe4\x96\xd5\x36\xf2\x98\x6d\xac\xe8\xfe\x4d\x7d\x4e\x3a\x68\xfd\x5f\xb7\xb1\x4f\x6f\xa0\xa1\x19\x74\x5a\x29\x22\xec\xf9\x67\x9b\xc8\x5e\x0c\xeb\x25\x98\xe6\x22\x56\x6d\x40\xb3\xfe\x13\x4d\x34\xf5\x8c\x86\xfd\x70\x8b\x31\x7e\x86\x14\x55\x6d\x53\x55\xb8\x6e\x22\x32\xb4\x4c\x12\x52\x0e\x7b\xa3\x57\x5b\xb7\x67\x63\xb9\xb8\x71\xcf\x9e\x8d\xac\xb4\x71\x0f\xdd\xe9\x6d\xb4\x3b\x52\x7c\xff\x91\xd2\x44\x8f\x20\xd3\x9d\x8f\x54\x63\xf6\x6c\x7c\x98\x76\xc8\x82\x67\x44\x9e\x92\x4c\x79\xc0\x89\x66\x74\xe8\x3d\xa9\xcb\x27\xf9\x34\x79\xa2\x39\x0a\x5a\xa9\x46\xa5\x9d\xf3\x64\x95\xe0\x38\xb5\x36\x53\xd7\xf7\xaf\x5f\xdf\xcf\xaf\x3f\xac\x52\xb1\x9f\x81\xe1\x23\xa3\x1d\xa2\xde\x13\x77\xd6\x5a\x41\xf2\x6e\x3d\xe1\xfa\x72\x49\x2b\x96\x8c\xa4\x14\x91\x1d\x47\x8c\x0e\xe3\x4b\x0e\x39\x72\xc4\x50\x65\xf3\xa5\x8a\xcd\xe2\xb0\x2a\xbc\x2d\xac\x81\x08\x1f\x1a\x90\x04\xa2\x85\x94\xe4\xcf\xf8\x29\x1b\x8f\x49\x24\xfa\x7d\x99\xb4\x2e\x7a\x5b\x29\xea\x21\x9f\x8b\xa8\x90\xcf\xe8\x9c\x20\xad\x39\xfb\xed\xb3\x55\x76\x55\xc0\x26\x95\xff\x28\x05\x6c\x12\x6b\x96\xf2\xd4\x3f\x54\xd2\xfa\x84\xb7\x93\x8f\x68\x7d\x8f\x24\xf2\x39\xe5\xed\xe4\xd9\x6f\x9f\xbd\x46\xe5\xfa\x03\x7a\x2a\x5b\x40\x4f\xf5\x33\xad\x6f\xa8\x44\xfd\x6c\x20\x97\x7c\x84\xfa\x1f\x56\x94\xbf\xa6\x2a\xfc\x27\x6f\xda\x7e\x04\xc7\x6a\x3a\x9c\x14\x53\x52\xa4\x18\x8a\x6f\xce\x34\xd2\xa0\xbb\xa3\xda\x4e\x77\xf7\xdc\x6e\x97\x76\x67\x94\xda\x69\x37\xb5\x73\x15\xdb\x0a\xac\x9b\x3d\x74\x38\xaa\x28\x51\x4e\x9c\xbd\x6e\x3f\xb5\x6b\xfb\xc7\xd8\x95\xc8\x40\xd2\x13\x33\xf6\xaa\xc6\x6c\x50\x63\xe7\xe1\x1d\x3b\x0e\x73\x3b\xc7\xed\x4a\xf5\xf1\x45\x73\x07\x8a\x1d\x3c\x7a\xef\xd0\xd4\xd7\x43\x28\xc1\x6f\xe8\x5f\xb3\xa9\x0e\x2e\xa5\xc4\x0c\xb6\xde\xef\x0b\xa4\xf3\x49\x1f\x22\xc8\xe9\xcc\x56\xa1\x8b\xd2\x81\x60\x33\x17\x0c\x30\xf8\xa8\x29\x10\x96\xf8\x18\x2f\x85\x03\x4d\xe4\xeb\xb9\xb8\x87\x41\xdb\xaf\x2d\xd1\xf6\x9f\x26\x5e\xf6\xe9\x4b\xc2\xd6\x74\x36\x63\x09\x5f\xf2\xe9\xcb\xc4\xd3\x48\x4d\x44\xa9\x2d\x5a\x08\xba\xdd\xc1\x42\xb4\x8d\xa2\x89\x5c\x4f\xcf\x13\xfb\xb5\xfd\xd4\xbe\xff\x8e\xcf\x5a\x1f\xbc\xf5\x37\xe7\x34\xc7\x62\xcd\xe7\xfc\xe6\xd6\x07\xad\xd7\x9b\xf3\x55\xfc\x50\x50\x21\xc2\x89\x13\xd1\x85\xb9\x00\x99\xa3\x09\x45\x22\x31\x50\x20\x79\x2c\x6a\x07\x03\x41\x9d\xd1\x4f\x8d\xd9\x50\x99\x41\xd9\x6e\xca\x07\x38\x63\xc8\x25\x2a\x98\x36\x70\xdc\xa6\x0d\xbb\x36\xf4\x31\x44\x3c\xda\x03\x9e\x88\x87\x96\x9f\xb6\x67\xe3\x90\x81\xe5\x5c\xb1\x3b\xef\xe2\x38\xfb\x14\xa7\x37\x18\x18\x32\xd0\x90\x2b\xce\x5c\x6e\x2d\xba\x5a\xfb\x28\x52\xee\xd3\x06\xf8\x65\xcb\xb4\x81\x65\xe1\x45\xe1\x5d\x61\xea\xdb\xb0\x6b\x43\x67\x1f\x2b\x8d\x94\x53\xfe\xc5\x33\x66\x29\x1b\xf7\x34\x48\x6e\x8f\x7d\x8a\x53\x14\x4d\x43\x90\xe5\x33\xaf\x73\x58\x8b\x2e\x37\x7b\x41\x1b\x28\xf7\x51\x84\x85\x97\x51\x64\x59\x38\xbc\x2b\xbc\x68\xa4\xff\x8d\x7d\xf2\x36\x2c\x1d\x6f\x6b\x3b\x25\x6d\xb2\xd3\xfa\xf2\x54\xdb\x32\x5d\x16\x0b\x06\x64\x73\xff\x72\x06\xc5\x23\x92\x28\x07\x8c\x59\xdf\xc1\xe7\xb2\x5d\xd2\x34\xca\x65\x0d\xeb\x20\x0a\xf8\x04\xb5\xda\x44\x0c\x3b\xe4\xd0\x82\x4e\x9b\xb8\xbe\xda\x3a\x6f\x38\xe4\x96\xfd\xef\x68\xaa\x31\xfb\xfb\xb5\xa7\xaf\xd8\x78\x02\x17\xb4\xf0\x6e\x9b\x2d\x70\xe2\xc4\xb8\xe4\x8f\x4f\x5b\x78\xe9\x2d\x4f\x5c\xdc\x9f\x72\xd8\x43\x32\xa9\x32\x8b\x6b\xe5\x6a\x3b\x65\x47\xa3\x10\x8a\xf1\xd5\x56\xbe\x22\xdb\x1c\xf5\x6e\x8b\x95\x5e\xd7\x54\x59\xf0\x4c\x2c\xdd\x78\xb3\xb6\x37\x58\xc7\x1c\xce\xd8\x85\x7d\x5b\x3a\xa7\x2c\xee\x5b\x74\xc6\x49\x53\x53\x01\x83\xc0\x68\xaa\x9c\xad\xb6\xfd\x7a\x41\xc5\x24\xc3\x72\xd0\x73\xac\x61\xd5\x9b\x78\xf4\xc0\xea\x94\x4c\x36\xf7\xe3\xc7\x5a\x39\x8e\x36\x77\x64\x44\x6d\x0e\x4e\x1c\x3b\xa6\x36\x87\x28\xfa\xfe\x32\xf4\xab\xfa\x99\xf5\xda\xe9\xf5\xf5\x97\xd4\xcf\xac\x27\x89\x7d\xbe\x7e\x66\xfd\x25\xf5\x6c\xb9\xf6\x83\xb1\x43\x69\x63\x23\x43\xa9\x39\xac\x45\x1b\x67\xa1\xfd\x43\xbf\xaa\xaf\xa7\xc7\x8c\x0c\xf5\xda\x47\xec\xf3\x46\x21\x95\x93\xf5\xc3\x90\x20\x02\x27\x57\xd6\x19\x43\xd5\xe4\xc9\xa4\x03\x55\x03\x02\x43\xb5\x14\xf5\xfb\xc4\xea\x2a\xab\x13\x67\x43\x27\x55\xdd\xa6\x37\x6c\x94\xa2\xb9\xac\xee\x91\x20\x0f\x43\xce\x2a\x9a\xaa\x86\x14\xc3\xa9\xbf\x94\x90\xaa\xa9\x8a\xe1\x94\x09\xc6\x46\x81\x1e\xad\x3b\xf5\x97\x12\x52\x49\x8f\x26\xb0\x7b\xfe\xb9\xf4\xf2\xd8\xda\x6a\xf4\x00\x4d\x00\xe5\x0d\x3d\x54\x8a\x94\xd4\x38\x5b\x2b\xbf\x27\x5f\xe0\x5e\x96\x43\x21\xb9\x3c\xd5\xca\xd7\x58\xcb\x5b\x85\x2b\x64\x7b\xe8\x70\x31\x64\x97\xd9\xb3\x56\x5b\x79\x69\x95\xe7\x56\x42\xe5\xa5\x36\x6b\xcd\xf9\x90\xb6\xf1\xe5\x1f\xa7\x1a\x23\x51\xbe\x20\x8e\xd4\x76\x74\x9d\xec\x59\x39\x74\x54\xcd\x53\x8f\x03\x02\x7b\x56\xb6\x87\xca\x53\x0d\x58\x36\x57\xf4\x5d\x0d\xc7\x80\x25\x3b\x52\xf3\x19\xb5\x35\xcb\xf2\xc7\xd4\x26\x67\xe5\xd1\xe2\x8d\xb6\x5e\x23\x5c\x2f\x6c\x41\x1d\x60\x25\xd1\x68\x96\x31\x47\x57\x1f\x7e\x29\x18\x8d\x06\x85\xc9\x41\x76\x5e\xb9\xd9\xe1\x0b\x09\xa5\x90\xcf\x51\x6e\x76\x24\x30\xc6\xa6\xd0\x55\x59\xe1\xc7\x2c\xaa\xc2\xf8\xa3\x3f\xa8\x58\xfe\x1b\xa7\x00\x86\xd4\x5a\x9f\x50\x1c\x95\x7a\x6a\x25\x20\xa5\x8a\xbb\xd5\x7a\x8e\xaa\x45\x1c\x23\x31\x8d\x29\x67\x34\xaf\x68\xf6\x5d\x70\xa4\x69\xc1\x4a\x0b\x25\xa3\xb5\xa2\x74\x82\xde\x75\xec\x59\xbd\xeb\xd8\xb3\xb2\xde\x7d\x21\xde\xaa\xf7\x9c\x50\x0a\xd9\xf5\x3e\xb5\xb1\x67\x0d\x87\x9c\xd5\x5f\xf6\x10\x7b\xd6\x66\x1d\x29\xbf\x8a\x27\x47\x95\x1f\xf4\x8c\xdd\x32\xd5\xab\x3a\x56\x8d\x63\xd1\xe4\xf8\xb5\x5b\x6d\xec\x91\xd1\x0e\x62\x8f\xd8\xac\xb5\xc0\x8c\x99\x13\x63\x61\x19\x0f\xc4\x48\xed\xb5\xf5\x8e\xad\x71\x5c\x45\xc6\x78\x13\x20\x92\x20\xa2\x0e\x8d\x80\x6c\x12\x05\x63\x34\xa8\x66\x44\xf4\x7a\x9c\xa3\x38\xa6\xe3\x9e\xf0\x6c\xcd\xb0\xb0\x13\xaa\x5d\x1c\x2a\xff\xd9\xb4\x85\x52\x42\xc3\x08\x55\xc6\xeb\x9e\xe1\x7b\xf8\x47\x84\x3f\xc3\x07\x58\x59\xc0\xb4\x1e\xaf\xd0\x23\x9d\x90\xf2\x77\x96\xdf\x61\xb2\x2c\x3f\xa2\x8f\x44\x48\x96\xd9\x9f\xe5\xac\xfc\x88\xcc\xbf\x5c\x7e\xa7\xfc\x8e\xe1\x34\x83\xd8\x9f\x8d\x34\x66\x99\x4b\x87\xef\xe1\x2f\xa8\x94\x79\x94\x21\xba\x5e\xe8\x19\xe5\x50\x25\xaf\x5c\x7e\xc7\x2c\x9c\xfd\x59\x66\x77\xea\x35\x18\x1e\x99\xc9\x66\x02\x3d\xe1\x18\xdc\x8f\x63\x12\x40\xb9\xac\x12\x8f\x7a\xcc\x23\x3c\x7e\x4f\xd4\x3c\xc7\x93\x89\x7a\xcc\xc3\x3c\x39\x4f\x34\x3d\xd6\x7a\xa7\xa4\x37\xd9\xe8\xf7\x61\xa3\xfd\x64\x7a\x0c\xc3\xb0\xe2\x78\xf3\x9d\x62\x25\xe6\xe8\x3c\xd4\x76\xb4\x2d\x53\x8d\x3d\x51\x05\xae\x2a\x34\x47\xc3\x50\x73\x16\xe8\x98\xb5\x56\x64\xde\xb6\x63\xd8\x05\x56\xeb\x69\x33\xf6\x4e\xb3\x93\xa8\x90\xcf\x65\x27\x91\x12\x8f\xb9\x0c\x65\x99\x4b\xe7\x6f\x5b\x48\x32\xde\x81\x4c\xba\xdb\xd0\x6d\x76\xd3\x58\x18\xae\x95\x9f\x78\x42\x96\x97\xca\x8d\x21\xdd\x11\x6a\x94\x97\xca\x47\x87\xd0\x8d\xe3\x60\xa3\xfb\x3e\x2e\x79\x25\x84\x5e\x3c\x6e\xdf\x04\x0d\x3b\x2f\x1d\xda\x98\x44\x29\xc5\x84\x35\xa8\x43\x59\xa0\x2e\xaa\x81\x4f\xe0\xbd\x67\xcb\x59\x59\x5b\xfd\x47\x39\x2b\x9f\xed\xf5\xd2\xc5\x7a\x15\xac\xc5\x3b\x34\xde\xae\x32\x16\xf6\x2e\x95\x65\xed\xa2\x3f\xca\xf2\x52\x6f\xb8\xd1\xab\xdd\x2d\xeb\xe9\xe6\x8f\x83\xa1\xd6\xde\x6b\x2a\x66\x03\xc9\xf1\xe7\xc6\xb2\x1d\x14\x8f\x49\xa2\xd1\x67\x15\xc3\x10\xbf\x4f\x94\x9c\x54\x4d\x91\xcb\xe6\x0b\x5d\x7c\x62\x9c\x09\xe8\x88\xcd\x38\x2e\x7d\xe4\xac\xf7\x54\x57\x70\x8b\x64\x77\x5b\x73\xd1\x58\x76\x72\x4f\xeb\xe4\xee\x8b\x8c\xc8\xb6\x68\x24\x36\xb5\xa5\x81\xd4\x71\xd0\xf7\x8f\x18\x97\xb3\xc7\x96\xdc\x7d\xfa\x7f\xd4\x7b\x57\x8a\xf6\x59\xf5\xf5\xd9\xa8\xd2\x11\x08\x5f\x79\x72\x42\x8f\x96\x67\xc8\x5e\xff\x94\x49\xf3\x67\x8c\x47\x86\xd1\x36\xe9\xb2\xd7\xd4\x6a\x9b\x3c\xa3\xa8\x67\xe8\xb9\x47\x90\x90\x1b\xd7\xe4\x31\x16\x7f\xf0\x3a\xfb\xaa\x06\xad\x7d\xa6\xb5\x72\xc9\xe9\xad\x69\x20\x3b\x0a\xf8\x7e\xa7\x97\x41\x8f\xed\x77\x7a\xb5\x92\xf1\xf1\x72\xb7\xf5\x57\x42\xbc\xdf\x1f\x0f\xef\x28\x1e\x4c\x32\xce\xfe\x8c\x9c\x05\xe9\xa0\xd4\x88\xce\xc5\x49\x52\x46\x67\x80\x74\x7f\x33\x05\x47\x8e\x89\x74\x91\xa9\x97\x71\x92\x34\x92\xb6\x83\x52\x23\x65\x74\x51\x61\x24\x6d\x33\x05\x33\xe9\x00\xff\x8d\x75\xfa\x44\x5a\x17\xb9\x7f\xad\x31\x9d\xd6\xde\x1f\x19\x1f\x40\x57\x28\xa1\xdb\x93\x6f\xdf\x6f\x78\xef\x7f\x3b\x79\xbb\x1e\x3f\x2e\x80\xe1\x78\xb9\x47\x02\xa8\xfd\xf8\xd9\x2b\x01\x63\xed\x32\xe3\x86\x15\x3b\xcc\x83\x3f\x92\x49\x18\xbb\x29\x65\x12\xc6\x96\xaa\x74\xe2\xa2\x60\xc0\x97\x3f\x9e\x1d\xe2\xbc\x1d\xb6\x90\xed\xe6\x9b\x6d\x21\xdb\x0e\x9b\xfe\xb5\x8d\xf3\xbf\xf0\x71\x96\x89\xf4\xd3\x63\x67\x1a\xf1\x37\x7c\xbc\x79\xf2\xd1\xb6\xd3\xd6\x1a\xee\xbb\x85\x2a\x8b\xc6\x71\x8d\x28\xef\xd4\x96\xea\xd3\xfb\x35\x59\xbe\x40\xce\xca\x77\x92\x4e\xe4\x2f\x90\x37\x7f\xac\x31\xe5\xcb\xda\x52\x59\x26\xc5\x48\x69\x64\xd1\xf3\x1e\xfe\x07\xe1\xfc\x1c\xac\xf0\x1a\xe7\x82\xb3\x29\x32\xf6\xec\x04\xc3\xae\x92\xfc\x3e\xb8\x2b\x67\x64\x2a\x27\x76\x84\xc8\x59\x65\xe7\xcd\xfd\x97\xfe\x74\xc7\x99\x43\x0d\xec\xbd\xcf\x3f\xbc\xf3\xf0\x0e\x21\xb2\xf9\x05\xed\x4f\xda\x73\xda\x9f\x5e\xd8\xbc\xf9\x05\x6a\xa2\x4e\x6a\x7a\x81\xdd\x78\xff\x4d\x65\xd7\xa7\xcf\xda\xf1\xf3\x7d\xec\xd0\xd9\x3b\x86\x76\x3e\x40\xdd\xda\xb3\xda\x1f\x0d\x0b\xcb\x66\x9a\x4a\x4d\xba\x4b\x5f\x07\x8b\xc3\x39\x11\x42\x0f\x22\xd5\xb3\x43\xc6\xe8\x9a\x7a\xb5\x9c\xa9\x58\x33\x8e\x64\x91\xc1\x58\x9d\x94\x2d\x17\x29\xa9\x28\x3d\xc9\x5c\x36\x55\xbe\x32\x99\x64\xb7\x2a\xb9\xac\xd2\xa3\x28\xda\x6f\x59\x29\x7b\x12\x53\xd5\x5c\x8f\xf6\x5a\x62\x6d\xa2\x37\x99\x64\xdb\x0c\x63\x85\x5b\x14\x65\xbe\x72\xb1\xa2\xfd\xb6\xc7\xe4\x47\x72\x42\xa9\x52\x9f\xa9\xdb\x32\x96\x5e\x1a\xd1\x51\x99\x03\x65\x48\x84\x42\x29\x59\xbe\x32\x95\xcd\xa4\x7a\x14\x85\x92\xe5\x62\xf6\xa4\x93\xb2\xac\xa4\xfd\x56\x51\x7a\x94\x6c\x4e\x61\xb7\x26\x59\x31\x9f\xd4\xc1\xe8\x51\x2e\x56\x28\xd9\x93\x53\x73\x3d\xa4\x24\xd6\x26\x7a\x14\xa5\x7c\xa5\x4e\xd0\x91\x1b\x56\xc5\x1e\xa1\x88\xa8\x61\xd7\x66\x36\x6c\x84\xeb\x31\x17\xfe\x4a\x33\x75\xc6\xa5\x27\xd9\xa3\xe4\xf2\x09\xed\x35\xa3\x28\xa3\x21\x3d\x8a\xc2\x6e\x8d\x17\xf2\x49\xbd\xba\xdc\xc7\xc0\xa2\xc3\x6a\xf2\x16\xb9\xe1\x27\xc4\x1e\x41\xad\x9e\xf5\xae\x76\x66\xa5\x59\x23\xbc\x57\xa5\x6f\xc5\x1e\xa3\x95\xb9\x64\xf9\x4a\x45\x99\xaf\x3b\x48\xe9\xcd\xaa\xd9\x5e\x52\xf4\xfe\xeb\x49\xb2\x52\x2e\x59\xde\xa0\xf7\x67\x22\x9f\x53\x7a\x92\x49\xed\x35\x56\xca\xf6\xf6\xea\x63\xa1\x24\x93\x3d\xa9\x51\x9e\xb3\x64\xdc\x09\x66\xca\x72\x39\x4f\x3c\xe6\x14\xfc\xbe\xa0\xaf\x72\xd6\xbc\x83\xa5\x58\x2e\x5b\xf0\x46\x33\x9e\xaa\xbc\xa6\xe9\x12\xd4\xc0\x8a\x2f\x7f\xe9\xb2\x15\x5d\x71\x41\xf0\xb8\xdc\x76\xc9\xee\xe2\xae\xcf\x3d\xc0\x7e\x3a\xa0\x64\x65\x06\xee\x9e\xac\x9e\x4a\x67\x2d\xec\x2d\xf9\x4f\x5d\xd9\xbf\xaa\x30\x4b\x8c\x5b\x5d\x3e\x8f\x35\x14\x93\xa8\xe9\x91\x9f\xdc\x44\x77\xea\x9c\x88\xac\x8d\xe1\x01\x82\x3a\x0f\xa4\x43\x12\x0c\x8c\x72\xe7\xd5\xe9\x67\xd8\xa9\x4d\xa2\x2a\xdf\xa5\x93\x17\x53\xe9\xf6\x9e\x4d\x7b\x7c\xbb\x6c\x1a\xd3\x2a\x59\x79\x3b\xf5\xda\x42\xb6\xcb\xb9\xa0\xee\xd6\x1e\xd7\xdd\x36\x1b\xf5\x6e\xaf\x58\xd0\xd2\x3b\x21\x23\xfd\x88\x51\xae\x9e\xde\x76\x39\x37\xcf\xb0\xc5\xd5\x33\xd8\x2e\xb7\x85\x8c\x0c\x59\xa5\x62\xc3\xe7\x18\xfe\x82\xf0\x9e\x70\x85\x09\xdf\xf1\xe0\x38\x1e\xdc\x86\xdd\xdb\x31\x00\x39\x0e\xdc\xac\x78\x4c\x40\xd8\x9d\xc7\x04\x7b\xe4\xee\x6f\xc1\x3c\xa3\x58\x99\x8f\x23\xc8\x3a\x32\x43\x46\x10\x48\x97\xa8\xd4\xce\x56\xad\xcf\x38\xbf\xa9\xf5\x19\x87\x05\xfa\x0d\x0f\xf5\xb7\x76\x72\x91\x63\x85\x1a\xe9\x2b\x75\x31\x08\x2a\x67\xca\x50\xe3\xf4\xc4\x7a\xb9\x47\x0c\x33\x57\xbe\x54\x29\xa9\x7a\x48\xd4\x94\x3d\x75\xf9\x29\x67\x9c\x89\x71\x91\x93\x52\xa3\xe7\xde\x04\xd1\x3c\xba\x73\x02\x75\x50\x37\x75\x51\x50\x18\x81\x37\x99\x0f\xe8\xf8\x2e\x09\xc2\xcf\x3a\x1a\x43\xc5\xd0\x85\x1d\xda\x07\x06\xa6\x6b\x1f\x74\x5c\x18\x2a\x86\x1a\x3b\xc8\xa6\x7d\x50\x89\x22\x9b\x39\x09\x6c\x95\x28\xed\x03\xfa\x73\xe8\xc2\x8e\x4b\x3a\x1a\x43\x5f\xd2\x5e\x30\x8e\x52\x67\xbe\x14\x6a\xec\xb8\xa4\xe3\xc2\xd0\x3d\xf7\x54\x63\x28\x63\x9c\xce\x7e\x61\x24\xa6\x76\x3d\xd0\x65\x94\x13\x0c\x2b\x4e\x6f\x95\xe2\x8f\x3f\x83\xcf\xc9\xd9\x94\x1e\x20\x89\x7e\xd9\x0c\x61\x93\x4c\x92\x5d\x25\xf9\xec\x5b\x5e\x47\xc9\xe1\xf3\x39\x4a\x0e\x2f\xf3\xda\x6c\xce\xd7\x9d\x36\x9b\xc7\xe7\x7c\xca\x29\x0b\xe3\xf9\x90\x23\x7f\x7b\xc6\x29\xfb\x1c\xcf\x38\x7c\x32\x5d\xc0\xd6\xd9\x45\x8b\x45\xb4\x97\xef\xb4\xb9\x5c\xd5\xbd\x2d\x11\x42\x11\x0e\x04\xd0\x82\xf9\x3a\x97\xe4\xc9\x45\xfd\x1e\x7f\x85\xef\xcb\x18\x3b\xcc\xbe\x40\x22\x6b\x30\xcf\x99\xb4\x79\x6e\xac\xf6\x4c\x98\x29\x61\x19\x37\x9d\x18\xab\x73\xc6\xbc\xfa\x24\x1d\xe0\xfa\xb5\x52\x22\x5c\x0a\x27\xb4\xce\x1f\x5e\x17\x6a\x6b\xed\xec\x64\xaf\x76\xb6\xb6\x85\xae\xfd\x41\x2b\xed\xf5\x3a\xfb\x3a\x5b\x8f\x94\x5a\x3b\x4d\x6e\xea\xc9\x73\x6e\xbc\xf1\x9c\x35\x33\x54\x75\xc6\x1a\xdd\x45\x4f\x3a\xbd\x8f\x77\xd2\xfe\x52\x49\x6b\xef\x6c\x68\x6c\xe4\x56\xdd\xdf\xd2\xb9\xa8\xb3\x73\x51\x67\xcb\xfd\xfd\x3a\x1b\x56\xc5\x29\xf3\xc4\xe1\x8d\xdf\xbd\x71\xc1\xc3\x0f\x2f\xb8\xf1\xbb\x37\x7a\x4d\x3d\x99\x64\xde\xe3\xb0\xd0\xd0\x2b\xc7\x63\xbc\x68\xe8\x67\x33\x69\xc3\xe8\x2c\x91\x49\x93\x4f\x12\x61\xea\x00\x29\x1e\x73\xb2\x78\x4c\x49\x75\x70\xb9\xac\x79\xee\x53\xd1\x1d\x85\x2e\xbe\xd0\xc5\x67\xd2\xcd\x4c\x80\x12\x7a\x54\x7b\xfd\x4f\x9b\x65\x25\x54\xef\x6f\x5c\xee\xbb\x99\xa4\xef\x84\x98\xe2\xeb\xd0\xde\xfe\xed\x2b\x03\x3b\x6f\x71\xed\x08\xba\x27\xb5\x75\x35\xb5\x4d\x68\x60\x16\x8e\xeb\x9a\xdf\x15\x66\xd6\xb3\xbe\xf8\xcc\xba\xc2\xe3\xdf\xfe\xd6\x5d\x29\x5b\xca\x17\x4b\xd5\xa7\xba\x23\x6e\x4e\xc9\x2a\xe7\xef\xf9\xbc\xbf\x3e\xa4\xc8\xf5\xcb\xe5\x6b\x56\x93\x78\xee\x8a\x01\xed\x07\xeb\xd6\x4e\x12\xe6\x17\x7b\x8b\xf1\x89\xbc\x53\x74\x48\xf1\x05\xf9\xa9\x32\x3f\xcb\x96\xc9\x5d\xf1\xab\xaf\x6e\x4c\x78\x5d\x9c\x35\x95\xb4\xa5\x3c\x41\xeb\xb2\x2d\x1b\xaa\x3a\x0e\x08\xaa\x08\xb8\x90\x01\x84\xf1\x3b\x2c\x3e\x83\xe8\xa6\x82\x86\x82\x53\xc8\x65\x53\xc1\x54\x33\x2f\xa8\xb5\xfb\x64\xc3\x98\x72\x6a\x5f\xdf\xa9\x53\x4e\xe6\x69\xe9\xb6\x9b\x97\x16\x4c\xdf\x4c\xce\xf4\xf5\x8f\x58\xaf\xf3\xf2\xc2\x2d\xe7\x9c\x31\x77\xee\xd9\x99\x3e\x95\x68\xc2\xe2\x0d\x37\x3c\xba\xa2\x1a\xb2\xfc\xb3\x95\x90\xea\x8d\xa9\x90\xc0\xab\xf0\x20\x8a\x29\x00\x29\xa9\x80\xbf\xa2\x0f\x17\xa5\x00\x1f\x49\x18\x63\x61\x2a\xca\x0d\x2b\x5e\xe8\xa3\x10\x41\x4a\xc9\x16\xf2\x88\x20\x28\xaa\xbb\xde\x9c\x61\x1a\x5e\xcd\x78\x73\xd7\xe7\xe8\x0e\xda\x4f\x77\x94\x9f\x08\xfb\xae\xfd\x76\xb8\x35\xbc\xf9\x4c\x1f\xb7\xd6\xb7\x4d\x4b\x95\x0f\x69\xa9\x6d\x3e\xdf\x36\xfa\x0d\x73\xd2\x6f\xb6\xb1\xe2\x81\x2b\x57\x5f\xfd\x94\xf6\x11\x49\x4f\x5d\xbd\xfa\xca\x03\x2f\xbc\xf7\x1e\x3b\xb1\x35\xfc\xed\x6b\x7d\xe1\xb0\xef\xcc\xcd\xda\xaf\x66\xc5\xff\xac\xbd\x4d\x81\x37\xe3\xb3\xe2\x6f\x52\x40\xfb\xeb\x9b\xc6\xb9\xda\x7e\x09\xfc\x00\xac\x68\xc0\x0c\x9c\x8c\x4f\x01\xc9\x42\x07\x19\xa0\x7a\xc7\xc3\x99\xd4\xe1\xac\x68\x57\x73\xd9\x42\x07\x99\x10\x47\xd3\xc6\xa9\xd2\x66\x2e\x18\x90\x7d\xa2\x44\x01\xde\x50\x3f\xf3\xf1\x42\x3e\x51\x50\x52\x85\x66\x0a\xb2\xb6\x85\x67\xad\x98\xf1\xe6\xae\xaf\xb1\x9b\x47\x5b\x41\x9f\xa7\x8b\xb5\x65\x17\x4d\xb1\x79\xed\x9b\xdd\xed\xb7\x1f\x5c\xe2\xf3\x7d\x89\x9e\x25\xc7\xa7\xcf\xce\xdb\xbc\x42\x28\xd1\x1c\xe5\xdc\xc9\xfb\x3e\x4b\xf5\x16\x2a\xf9\x52\xb3\xef\xd6\xae\xfc\xfd\xfc\xfd\x74\xd1\xd5\x57\x7c\xad\xfb\xdc\x6f\x9e\xf8\xd3\x2f\x74\x97\xd6\xe8\xed\xd4\x34\x76\xc9\x68\x33\xff\x26\xb1\xa7\xcb\xf6\x7d\x9f\x76\xcf\xb6\x79\xed\x3d\x27\xbd\x7a\x73\x4b\x6f\xcb\xdb\xe4\xf6\x9c\xe7\xb6\xcb\x5e\x99\xd9\xb4\xc9\xb7\xbe\x99\xa6\x0f\x4e\xd8\x32\x3b\x56\x3c\xed\xd1\x67\xb6\x78\xdf\xdd\xf7\xed\x2b\xd6\x17\xbf\x75\xae\x39\x76\xee\x61\x55\x1c\x34\xf0\x29\xaa\x63\x54\xf2\x13\x69\x12\x47\x01\x69\xc4\xca\x93\xba\x28\x1d\xe0\x6b\xf6\x6a\x99\xd7\xe6\xa8\x7b\xbd\xce\x51\xa1\x4a\x0e\x0e\xf1\xa4\x67\x5a\xec\x30\x62\xd3\x3c\xc9\x38\x07\xcf\xf4\xd9\xd3\xef\x7f\xc6\x29\xcb\x4e\xfd\x45\x5b\xe8\xe7\x76\xa9\xae\x4e\x72\x6a\x05\x9b\xc3\xc1\xed\x3d\xac\x76\x77\x37\xc5\x62\x4d\xdd\xdd\x82\xda\x92\x48\x54\xd6\xa4\xb5\xc2\x5a\xa4\x01\x0a\x88\x2e\x92\xab\xda\xee\x94\x95\x0c\xcd\x77\x1b\x29\x93\x98\x92\x52\xba\x4d\x96\xc6\x4a\xa6\x3b\x28\x14\xba\x48\xe8\x6b\x2f\xf6\xde\xdf\x2f\x78\x54\xc9\xce\x73\x2e\x51\xfb\x2f\xad\x9c\x13\x1c\x7d\x56\x27\x73\x59\x9f\x1e\xaa\x63\x64\xeb\xb3\x3a\x45\xf6\x03\xe2\x34\xde\xc9\xb1\x3a\xd5\xe9\x66\x5f\xea\xef\x2d\x09\x7d\xd9\x52\xef\xfd\xe5\xb9\xb2\xb3\x4f\x24\xce\x41\x43\x5a\xf9\x07\x1e\x67\x9f\x95\xd5\x0d\x3d\x2d\xb9\x1d\xf6\xf3\xac\x94\x23\x8e\x82\x16\xb7\xbb\x4e\x75\x08\x5f\xed\xef\x2d\xea\x2b\xd9\xb0\xb9\x47\x71\xb4\x2d\x74\xd5\x0a\xfa\x54\x5c\x01\x04\x2b\x96\xdc\xc9\x71\x5f\xaa\xf5\x8f\x28\x6f\x2a\xf4\xb8\x26\x5d\x61\x5c\x5c\x72\xdc\xa9\x91\x8a\xb8\x17\xad\xb9\x4b\x20\xa0\x52\x44\x1b\xa0\x3e\x2a\x6a\x25\xad\x7f\xbc\x9b\x0d\x18\x6e\x55\x7f\x73\xd0\x43\x4c\xb7\xd6\x3f\x7a\x94\x86\x0d\x8c\x86\x93\x51\x5a\x64\x34\x92\xd4\xde\xec\x61\xe3\x04\xbb\xba\x7c\x66\x71\xe6\x72\x32\x3f\x6a\xb6\xd7\xac\x37\x52\x34\xb2\x15\x8b\x14\x19\x02\x45\xa8\x64\x7e\x8b\x54\x64\x11\x8a\x18\x56\xaf\x03\x0e\x59\x1e\xfa\x86\x91\x44\xcf\x50\xaa\x09\x5e\x70\xc4\xb8\xf0\x44\x40\xb6\xb7\x6f\xe6\xf2\xe5\x33\xfb\xcc\x77\x6f\x45\x8e\xe9\x97\x20\x0c\xc0\x8b\x02\x2e\x03\x48\x94\x3a\xf8\x1a\x33\x85\xea\x1e\xf6\x0c\x8a\x39\xa9\x43\x4c\xe5\x0b\xcd\x7c\x26\x6a\x1e\x25\x20\xef\x48\x64\x34\xe6\x64\x92\x28\x39\x6b\x2d\x1c\x0c\x63\xbe\x2e\x71\x24\x35\xbb\x67\xfa\x82\x40\x73\x26\xd3\xd3\x3e\x60\x1c\x6f\x3d\x2c\x88\x56\xad\x64\x75\x3a\xe4\xc8\xc5\x9d\x4b\xb3\xbd\xe9\x99\xd9\xa9\x8d\xd3\x2a\x49\x08\xa3\xc7\xfd\xf4\x24\xc3\x98\xbc\x70\xfa\xc4\xfa\x48\x47\xd3\x84\x93\x67\x9c\x75\xce\xa6\x59\x66\x19\xe3\x02\xab\xb9\xf8\x96\x65\x4f\x9c\x50\x98\x3b\xa1\xc9\x50\x31\x0c\x39\xc3\x7a\x29\xb2\xa3\x44\xc4\x49\xce\x60\xac\x63\x46\xea\x9c\xc7\x8d\xf8\x92\xd3\x6b\xd3\xbe\xcf\x6d\xac\x26\x68\x9e\xde\xdd\xd1\xb5\x6e\xe6\xd2\x4d\x8b\xce\xcc\x44\x8d\xcc\x63\x42\xcc\xe4\xa3\xfb\x2f\x02\xa0\xb3\xa6\x6e\xc6\xc7\x63\x29\x51\x10\x25\x51\x49\xe5\x94\xbc\xa2\x2f\x82\x42\x41\x61\xb9\x6c\x17\x25\x32\x69\x5e\xc2\xa0\xb6\xf2\xfd\xd9\x3d\xcf\x6a\x87\xa7\x9c\xe4\x69\xe4\x39\x81\x6c\xcc\xce\xa4\xc9\xfe\x09\xf5\xcd\x75\x5f\x79\xe2\xb6\x41\xea\xfd\xce\xfb\x74\x2f\xd7\xa1\x3d\xa4\xfd\xe6\xeb\x96\x6f\x9e\xec\xb4\xb0\x80\x97\x78\x37\xef\xe2\x9c\xcc\x92\x0b\x76\x76\xcc\x6d\xfd\x34\x89\x77\x7f\xf6\x9d\x47\x57\x7d\x7d\xac\xcc\x9f\x31\x4e\xf2\xfa\x7d\x06\x57\x54\x5d\xc9\x9a\xc8\xd7\xcc\xa5\xbb\xb8\x91\x95\xed\x13\xb5\xf9\x3f\xd6\xee\xd7\xe6\x6a\xf7\xff\xd8\x3c\xb9\x31\x69\xfa\xe9\x1d\x13\x3b\x4e\x9f\x3e\xc9\xf4\x0e\x41\x09\x69\xe6\xad\x6b\x95\xcb\x89\x46\x7d\xac\xa4\xfe\x54\x7b\xe6\x89\x27\x68\xe6\x4f\x4d\x15\x63\xb6\x57\x09\xf0\x7c\x40\x17\x84\x42\x8a\xc2\x2e\x18\x4d\x5a\x9b\xad\xa2\x1f\x5e\x0a\xbf\xf8\x08\x1f\x81\x0f\x48\x4a\xb5\x37\x8b\x54\xf7\xa8\xee\x34\x54\xc3\x47\x69\x83\x5f\x78\xb8\xaa\xdd\x7d\x58\xce\xc9\xec\x4d\x59\x2e\x37\xca\xb9\xaa\x7e\x78\x40\x7c\x84\x7b\xbb\xaa\x1f\x3e\x6a\xf7\x4e\xbc\xd3\xd0\x0f\x1f\xa5\x0d\x66\xaf\x96\x1b\x65\xbd\xac\x9c\xfc\xb0\x2c\x9b\x8a\xe9\x87\x8d\x42\x4d\xde\x48\xe5\x55\x24\xd1\x53\xbd\xe3\xaa\x83\x9b\x4e\x33\x68\xcc\xc9\x57\xf3\xdc\x7f\xd4\xd8\xf5\xaf\x6e\xc4\xe5\xcc\x9d\x38\x53\x5a\x35\x2e\xf6\xe0\xc2\xd4\x44\x9e\x4c\x3a\x20\x40\x76\x0c\x15\x2d\x75\x12\xcf\x4a\x21\xc5\x45\x45\x79\xba\x4c\x45\x97\x12\x2a\xb1\xa2\xdb\xda\x2f\x31\xd5\xa5\x95\x7c\x53\x7d\x5a\x49\x0f\x2b\x97\xf4\x30\xd9\xc1\x95\xaa\x39\x22\x0e\x99\xb7\x89\x1e\xd1\x47\xfd\xd4\xaf\x84\xea\x3d\xa4\x06\x02\x9a\xea\xa9\x0f\x29\x9a\x5a\x57\xb2\xd1\x5d\xf5\x1e\x4d\x0d\x06\xc9\x08\x22\xd5\x5e\xb2\xd6\x8d\x66\xd1\xfa\x6a\xf4\x47\xaa\x60\x9e\xa1\x9e\x0a\x24\x2a\xd6\x16\x7c\xe5\x2b\x7b\x7c\xa2\x24\x04\xfc\x3e\x69\xe4\x72\x3e\x83\xcf\xe3\xe2\xe6\x2d\x7d\xe9\x66\x3e\x68\x58\x5d\x18\x37\x77\x70\xcf\x1b\x9f\xe7\xa3\xf5\x47\x0e\x38\xea\xb9\x5d\xc6\x85\x7d\x08\x29\x6e\x77\x23\xfb\xd7\xe7\x4d\x45\xb7\xbb\xc1\x69\xe7\x25\xe2\xff\x35\xa4\x64\x8d\xdb\x3e\xcc\x3f\xae\xa4\xa1\x3e\xc9\x6d\x9e\x6e\x73\x4f\x56\x74\x09\xab\x6e\x42\xcb\x14\x81\x2b\x28\x59\xc5\xe1\x6d\xf1\x2b\x92\x82\x31\xe7\xdd\x7c\x47\xef\x1f\x35\x19\xba\x0e\x75\xcb\xb2\x23\xc5\x65\x5b\xb6\x2c\xa3\xe2\xb2\x2d\xac\x7f\xd9\x16\xae\xbf\x6c\xf8\xb9\x92\xfe\x8e\x6c\x19\xd9\x13\x97\xce\x12\x54\xc8\x98\x68\x4a\xfb\xe6\xba\x5c\x3d\xee\x9e\x0e\x90\x3f\x1a\x13\x25\x92\xb2\x63\xcb\x97\xce\x6a\xd1\xf6\xb6\x7d\x79\xe6\x91\x52\x2c\xd7\x42\x8b\xda\xbe\x3c\x93\x2f\xc6\x72\xda\x9e\xa1\xd2\xf2\x17\x67\x68\xdf\x14\xa8\x52\x71\x64\xd9\x16\x36\xb7\x25\xae\x6d\xc8\xcc\x09\x35\xb7\xc4\x69\x5b\x66\x4e\x88\xa6\xf6\x9f\x3b\x57\xdb\x20\xf2\x1e\xbe\x06\x18\x42\x71\x18\xac\x24\x1a\xb6\x35\x30\x90\x68\xfc\x56\xee\xe8\xc6\x2d\x2b\x29\xa1\xf1\xdb\xb4\x35\xdb\xac\xfc\x6b\x59\x7d\xbe\xd6\xec\xc2\xf2\x18\xd9\x74\x35\xfb\x8f\x8a\x12\xb8\x92\x59\x57\x75\xef\x78\xfc\x4e\xf1\xd8\x7d\xe1\x63\x16\x38\xba\xeb\x3b\x6e\x97\xb7\xb2\xab\x5b\xb9\x87\xc5\x52\x3d\xdf\xe4\x80\x07\x7e\x7d\xcc\xa2\x1e\xf3\x14\x56\xd4\x93\xf1\x54\x7d\x4c\x1d\x86\xfe\x08\xf8\x10\xaa\x00\xd3\xc3\x54\x0d\x0c\x0c\x43\xe0\x71\x44\x55\x45\x1c\x56\x39\xb5\x0c\x0e\xa4\x1e\xd1\x67\xe3\xa8\xce\x62\x32\x8a\xc6\xea\x95\x2f\x88\x92\xc9\x84\x06\x3b\x28\xa5\x7f\x94\x94\xdf\x17\x08\xea\x3c\x4f\x33\x19\x9f\x40\x26\xdd\xc5\xe5\xb2\xa9\xfc\x51\x44\x11\x9d\x27\xcd\x6a\x38\xe9\x94\x19\xcb\xce\xfa\x8c\x70\xc3\x1f\x4f\x6d\x3a\x7b\x52\x6e\xe5\xbc\xa6\x80\x23\xe4\x5f\x33\x6b\xc3\x1d\xa1\xfa\x9d\x8f\xad\xff\xd1\xb6\x55\x53\xa8\x9b\x26\xee\xd9\x38\x64\xd8\x35\x71\xa5\x8d\x7b\xb8\xfb\x1a\xac\xad\x0b\x14\xc7\xcc\xcf\x9c\xd5\x24\x4b\x1b\xce\x4b\x77\x5e\x3e\x83\x1a\x58\xcf\x95\x4e\x0b\xdf\x7d\x3a\x2d\xe5\x96\xcf\xd9\xf8\xe5\x3d\x8b\xbd\xd6\x13\x88\x8d\xe6\xda\x33\x66\x2f\x34\x01\x8c\x6c\xea\x79\x32\x85\xb8\x4e\x2a\x0a\x39\xc5\xd0\xb3\xc7\xfd\x99\xea\x4d\x1b\x19\x7e\x40\xcf\xbf\xef\x27\xcd\x6f\x4e\x9a\xb5\xb9\xfb\x8a\xad\x0f\x3e\xf7\x5c\xf9\x80\x1e\x64\x98\x24\x14\x37\xee\x61\x67\xbc\xb5\xb3\xb3\x93\x7e\x61\xed\xdf\xf1\xf5\xb7\xca\xdf\x30\xeb\x32\x45\x8c\xd1\x3b\x71\x74\xbe\x2a\x8e\x14\x3a\xd0\x55\x91\xf4\x6a\xb8\xf6\x7c\xd5\xda\x2a\x9a\x8b\xc2\xad\x44\x44\x77\x20\xa2\xbb\xb9\xe8\x0c\x8a\x4a\xb5\x47\xe8\xcd\x8b\xd7\xfa\xbd\xce\x99\xcb\xbd\x61\x6f\x67\xab\xf3\x90\x61\x73\x34\x74\xb7\x88\xc3\xe0\xd5\xca\xc5\x7e\x43\x7f\x20\x55\xd3\x07\x6f\xe8\x47\xc5\xf2\x35\xa2\xda\x93\x3b\x8c\x5c\x4f\x4f\x4e\x44\xae\x87\x7d\x2b\xec\x5d\x3e\x53\x5f\xcb\x5b\x3b\x2d\x86\x59\xd2\xd0\x0f\x54\x6a\xa1\xae\x3f\xe8\x99\x79\xa6\x6a\xa5\xab\x6e\x51\xd5\x23\x46\x06\x41\x7f\x1b\x63\x3e\x57\xbc\xd3\x90\x53\xe7\x54\xec\x9f\xf4\x61\x36\xc4\x6d\xbd\x09\xfa\x00\x1b\x37\x6b\x76\xb0\x94\x14\xac\x28\xd0\x4c\x4b\xbc\xac\x37\x51\xb9\x0d\xb2\x50\x3d\x4e\xd9\xcc\x73\xc5\xf5\xfd\xeb\xe5\x09\x13\x17\xad\xaf\x7c\xb9\x1f\xae\xf0\x58\x53\xb1\x36\xae\xef\xf5\xf0\xc2\x89\xad\xe1\xf2\x79\x7b\x9f\x7e\xf0\x85\x67\x28\xdd\xff\xe0\x0b\x37\xd2\xf9\x7d\x5c\x47\x2c\xb2\xc2\xe3\xb0\x89\x8b\x16\x7f\xfa\x44\x6e\x6f\xff\xfa\xf5\x8b\x26\x4e\x90\xd7\x57\xbe\x1a\x3c\x2b\x22\xb1\x0e\x3d\x73\xeb\xc4\x85\x61\xf6\xd5\x1b\x5f\x78\xb0\x9f\xd2\xcf\xbc\xf0\xe0\xd3\x7b\xb5\xaf\xf4\x71\x6d\xb1\x94\xd5\xb3\xc2\x26\x2e\x38\x7d\xe9\x4c\x53\x8d\x80\x61\x97\xa4\x0a\x83\x90\xe0\x41\x23\xae\xc7\xd3\x38\x52\x63\xd7\x65\xb6\x2f\x90\xce\x7b\x46\x5c\x35\xf7\xfc\xf8\x3f\xe6\xa2\x9f\x7f\xfe\x9a\x9f\x9a\x4b\x7e\xc8\xb0\x09\x32\x2c\x83\x74\x21\x5f\x8c\xa5\xf4\x7a\x8c\xec\x4a\x4a\x31\xcd\x83\x8c\xb2\x58\x26\x1d\x08\xe6\xd3\xc1\x7c\x37\x99\x25\x04\x82\x01\xcf\xff\x26\x33\xa7\x1a\x58\xc4\xdd\xdd\xbb\xba\xb7\xe7\xe2\x1e\xf3\xad\xa9\x4e\xeb\x97\xeb\xfc\xb1\x4e\x49\x0a\x6e\x94\xeb\x6c\x57\x24\x5b\xeb\xec\x52\xf0\xbb\x75\x5e\x0a\xc6\x26\x5c\x25\x39\xea\x6c\xdb\x25\x5b\x97\x3b\x68\xdf\x65\x73\x8e\x24\x0d\x6c\xd2\x93\xc6\xda\x6a\x93\x5a\xec\x7a\x52\xfb\x74\x57\xb0\x6e\x97\xcd\xc9\xd4\xbb\xec\xde\x0c\xbf\x99\x59\x7a\x9d\x3e\x9f\xcf\xd9\x6b\x61\x9b\xf9\x8c\xd7\x7e\xd7\x5d\x0e\x4f\x86\xe7\xbb\x3a\x2b\x11\x99\x09\x22\xbf\x89\xcf\x78\x1c\x77\xfd\xb3\xe9\x2b\x57\x19\x0d\x1b\x4c\x78\xae\xa7\x87\xcf\x55\x1c\xda\xf6\xa7\x6c\x32\xd5\xc7\x27\x4c\x3e\xb9\xce\x6a\x97\x9a\x37\x4a\x4b\x65\xfb\xda\x49\xf5\x2e\xdb\x97\x6c\xfe\x4f\x4b\x96\xcf\x35\x5a\x6d\xce\x85\x81\x76\xa5\x9e\x3c\x75\xb5\x49\x2d\xcd\x57\x49\x4b\xbd\xce\xb5\x1d\x35\x49\x2d\x75\xee\xde\xc0\xe4\x58\x90\x79\xca\x03\xdb\xdc\xae\xc6\x86\xcb\x1a\x78\x6e\xce\x72\x3f\x63\xfe\xe5\x73\x38\xbe\xe1\xb2\x86\x46\x97\x7b\x9b\xdb\xd5\x14\xd4\x23\x58\x22\x72\x8e\x9f\xb1\x39\x13\xd8\x6c\x3d\x2e\xd8\xe4\xe2\x06\xff\x27\xb9\x46\xec\x46\x0c\x5e\x38\x69\x58\xbd\xba\x45\x83\x1b\x36\xae\x03\x52\x52\x4a\xb6\x4b\x28\x74\xf1\x86\x8a\x20\x9f\x88\xf0\xe4\x13\xa5\x66\x3e\xd8\x2c\xea\x98\x96\x52\x52\x4a\x4a\x8c\x47\xf4\x19\x9b\x28\x74\x51\x2e\x9b\x6a\x26\x41\xdd\xa7\x7d\xef\xdf\xcf\x5c\x7a\xcd\x3d\x89\x34\x57\x27\x33\x22\x8e\x09\x9c\x48\x42\xc2\xdd\xe4\xb7\x5d\x73\xdb\x3e\x3a\x85\xae\xa3\x53\xd8\xf4\xdb\xae\xb1\xf9\x9b\xdc\x09\x81\x44\x4e\x60\x1c\x11\xe7\xb3\xa7\x13\xf7\x5c\xb3\xf4\x4c\xed\xe0\x4f\xa7\x36\xdf\x4f\xad\x1b\xae\xbd\x29\x78\xc3\xdd\xdc\xad\xda\x5f\x0f\xdc\xec\x5e\xd2\x6a\x95\xdc\x0e\x4e\x12\x45\x5e\xe2\x24\x12\x15\x7f\xb2\xb5\x7e\xee\xaf\x36\xde\x7a\xe0\xe6\x9b\xcb\x37\x6f\xfa\xe5\xdc\xfa\xd6\xa4\x5f\x11\x49\xe2\x24\x5e\x14\x25\xce\xe9\x26\xc9\xda\xba\xc4\xbd\x85\x5f\xba\x78\xd9\xe0\x4d\x0b\x7a\xe6\xbc\x32\xc2\x77\x1b\x67\xe7\xa6\x63\xdd\xe8\x6d\x33\x94\x55\xe2\xd1\x6c\x3e\x97\x55\xe2\x23\x92\x90\x27\xa3\x73\x46\xba\x88\x99\xcb\xa6\xba\x28\x9b\xd2\xa3\x53\x5d\x54\xf0\x19\x33\xc3\x78\xc4\x36\xa6\x77\xd2\x28\x3d\xd5\x27\xa5\x2e\x39\x65\xd2\xcd\xfa\x0c\xcc\xa4\x03\x64\x5e\x49\xc3\x3f\xb2\x30\xad\xf5\xf7\x15\xfb\x42\xf5\xc9\x09\x81\x02\xaf\x34\xb4\x27\x26\xa4\xdc\x91\x88\x23\xd9\x34\x29\x38\x59\x78\xf9\xc6\xab\x4b\x42\x73\xdc\x9b\xf3\xb9\x22\x6d\xea\x14\xab\xc2\x4d\xa7\x47\xbf\x90\x38\xa7\xef\x7b\x9f\xd9\x10\xd0\x06\x74\xfa\x49\xde\xc4\xaa\xa9\x53\xea\x83\x4a\x5b\x2a\xb3\xf8\xa6\xd9\x93\xf7\xae\xde\x65\xde\x59\xc3\xd4\xcc\x82\xa9\x3f\x9f\xb6\x62\x79\xe8\xaa\xcf\xb5\x05\x67\x09\xe9\x48\x2e\x9e\xf0\x96\x55\x51\x72\x59\x3c\x6c\xde\xd7\x42\xcd\xee\x79\xf3\x23\xe9\x53\x1a\x66\x78\x68\x59\xe2\xd3\xf3\xa3\x89\x05\x27\xfb\x03\xab\x16\xdc\x7a\xff\x09\x6d\xad\x3d\x39\xa6\xe6\x7a\xea\x6f\xec\xc9\x35\x5c\xbd\x65\x62\xf2\xa4\x5b\xae\x3c\xe7\xfc\x5d\x18\xb9\x83\xc9\xb0\x25\xed\xd2\x65\xcb\x1a\x8a\x96\x32\xc6\xda\xe8\x8f\xbc\xa9\x31\x91\x9c\x82\xd9\x63\x42\x30\x10\x6c\x66\x41\x9d\x90\x2b\xb9\x68\x3a\x5f\xd0\x57\xc4\x2a\x99\x33\xcc\x46\x53\x4a\x6a\x74\xf9\x29\x74\x91\x4e\xc2\x24\xff\x48\x97\x8e\xf4\x57\x5b\xc4\xe5\xcb\x79\xe3\xcd\xc2\x8a\xb3\xd4\x1b\x5f\x16\x26\x07\x27\x35\x25\x1d\x91\x88\x3b\x35\x21\xd1\xde\xa0\xf0\x85\xc0\x84\x64\x7d\xa8\xaf\xd8\x47\x7d\xe9\x85\xea\xae\xd5\x7b\x27\xc7\xe3\x37\x2d\xce\xa4\x62\xad\x75\xf5\xf2\xe4\x69\xab\x12\xda\xbb\x46\xa7\x45\x02\x1b\xd4\x67\x2e\x5a\xbf\xed\x1b\x34\x9d\x53\xac\x53\x78\xf3\x90\xa5\x86\xf8\x32\xf2\xcc\x68\x38\x25\xdd\xa2\x24\xe7\xb9\x9b\x43\x9f\x3a\x7d\x1e\xf3\x58\x5c\x92\x58\x56\xbd\x89\x78\x2e\x92\x16\x66\x05\xdb\x3e\x77\x55\x68\xf9\x8a\x69\x3f\x9f\xba\x20\x7d\xe1\xae\xf3\xcf\xb9\x6a\xd6\x29\x27\x25\xa3\x2b\xce\x38\xd3\x9f\x5e\x70\x63\xbd\xd9\x6f\xad\xed\xed\xf7\xdd\x2c\x2c\x58\x15\xf0\x9f\xbc\x20\x11\x9d\x57\xe1\x09\xbe\xc1\x15\x0d\x99\x1c\xe4\x39\xea\x76\x5f\xae\x38\xfe\xf6\x5e\x61\xe0\xf0\x8f\x8f\xbe\x9e\xb7\x76\x6e\xaa\x08\xe3\x44\x80\xb2\x1d\x9c\x21\xa9\xeb\x1d\x19\x73\x72\x7e\x9f\x2e\x13\x15\x2a\x7c\xe6\xb8\x3b\x93\x45\xb5\xed\xe4\xbe\x65\xab\x37\xad\x9a\x5b\xef\xed\xf2\xd6\xcf\x5d\xb5\x69\xf5\xb2\xbe\x93\xdb\xbe\xc7\x4e\x61\xb3\xf6\xa9\x6f\x96\xef\xf0\x1e\xe7\x3e\x65\xee\xd1\xd3\xae\x99\xd7\xe1\xce\x2c\x38\x39\x1c\x08\x84\x4f\x5e\x90\x71\x77\xcc\xbb\xe6\xb4\xdd\xdf\x2b\xbf\xc4\x26\xed\xdb\xfd\xbb\x37\xcb\xbb\xbd\xc7\xba\x6e\x79\xd4\x4e\x35\x22\x00\xad\x3a\x3f\x97\xf4\x05\x9c\xac\x96\xd7\xf0\x57\x02\x2a\x76\x9a\x53\x59\x33\x37\xb2\x63\x36\x92\xcc\xdc\x21\x63\x2a\x23\xc1\xe5\xd0\x0c\x2b\x4d\x2a\x3a\xe4\x8a\x77\xe6\xf2\xe5\x33\x29\x42\x3e\xd1\x23\xda\x78\xae\x5f\x2e\x0f\xc8\x59\xc5\xd8\xfb\x09\x51\x49\xc9\xca\x2c\xd2\xc7\x47\xfc\x21\x87\x69\x98\x2e\x3b\x0c\xcf\xf2\x99\xe5\xe2\xcc\xe5\x8c\x97\xea\x58\x3a\xab\x67\x51\x42\x14\xa9\xdc\x71\x10\x09\x29\x72\x79\xa0\x7a\x0e\xd8\xe4\x75\x5d\x48\x22\x07\x14\x32\x9e\x78\xa1\x83\x8c\x55\xdb\xdc\x15\xf0\xe8\xbc\x96\x94\xc9\xc5\x03\x5c\xc6\x63\x2e\xc4\xfe\xf1\x6c\xe8\x3b\x7f\xf9\xcb\x07\x34\x7b\xc3\xbc\x39\x27\xd2\xb4\xb9\x6c\xde\x5f\x76\x6c\xda\x3a\x8f\xfd\x85\xe3\xfe\x22\xb9\xa6\xb7\x6f\xa0\xfd\xb5\xac\xe7\x66\xf6\x9d\x57\xb2\xb3\x66\x65\x33\xa7\x9c\x32\xf4\x35\xba\xed\x9e\xfb\xae\x5c\x35\xb3\xbc\x8d\xb6\x28\xde\xf8\x94\xaf\xb0\x2b\x6a\xb9\x4d\x43\xf7\x6d\xdc\x99\x52\x87\x0e\x1d\xb3\x0c\x76\xc2\x63\xf0\x13\x3a\x00\x9c\x93\xda\x28\x96\xe2\x0c\x09\x28\x9f\xf1\x54\x84\x3b\x5d\xe2\xf3\xa4\x03\x34\xe0\x0d\x7b\xbd\x61\x2f\xeb\x57\x42\xda\x19\x19\xe6\xb1\x53\xa3\xd0\xab\xad\x0d\x29\x5f\x39\x7f\xe4\xea\xc5\xec\xf9\x5f\x61\xfd\x64\x98\x76\x18\xf7\x92\x69\x8f\x85\x14\xad\xc9\xee\x69\xa4\x37\x95\xd0\x67\x7e\xcc\x60\xca\x79\x1a\x7e\x3c\x22\x7f\x19\xff\x67\xf0\x58\xf7\xff\x36\x99\xf7\xfb\xd6\x1a\xfa\x8f\xdc\xc2\x78\xac\x7d\xbf\x51\x93\x5c\x66\x00\x50\x2e\x8e\xd8\x1f\x1b\xd7\xa3\xa9\x4a\x56\xde\x5b\xde\x60\x6e\xff\xb1\x6d\x7b\x65\xd3\x54\x91\xf5\x69\xa5\xaa\x21\xae\x91\xb0\x6a\x84\x6b\x5c\xc8\xc8\x9d\xae\x21\xa4\x18\xf9\x8c\x5d\x40\x3d\x5f\x56\x51\x6a\xee\x98\x0a\x1a\xff\x4b\xf8\xd8\x38\x68\x1d\x69\x53\x56\xe9\x62\xd5\xd3\x0a\xf1\xe8\x44\xa6\x33\x9f\x66\x50\x80\x3f\x16\x0a\xd2\x15\x7b\x36\x6a\xa5\x0a\xce\x92\xd1\x12\x6d\xa0\x82\xb3\x95\xb0\x8d\x7b\x74\xf1\xeb\x58\xa8\x48\x99\x72\xb1\x06\x73\x59\xc9\xc4\x5c\x8b\x89\xd6\x23\xf2\xbe\x0a\x11\x0e\xcc\x03\x48\xc9\x45\xfd\xbe\x40\x32\x17\xf5\x49\x5d\x54\xf0\xfb\xcc\x15\x8c\x8c\x8d\x9f\xea\x38\x98\x7b\x24\x06\x55\x4e\x29\xa9\x8e\x8a\x62\x29\x57\x23\x15\xd3\xcf\xe6\x0f\xe3\x69\xfe\x87\xc3\x98\xff\x85\xa7\xd5\x33\xbe\xf0\xc2\x65\x13\x73\x4a\xd3\x8c\x93\x7b\xae\xf4\x3a\x87\x4a\x4e\xef\x95\x3d\x27\xcf\x68\x52\x72\x13\x2f\x7b\xe1\x0b\x67\x74\xb6\x52\x64\xf9\x4c\x56\x9c\xb9\x9c\x22\xad\x9d\xec\x0b\x0f\xfc\xb2\x6f\xe1\xee\x0f\xfa\x7e\xf9\x40\xd3\xee\x17\xd5\x39\xdb\x37\x9c\x2a\xe4\x27\xc4\x16\x64\xf2\xf3\xcf\x3e\xc5\xbc\x61\xe6\x94\xb3\xe7\xe7\x33\x0b\x62\x13\xf2\xc2\xa9\x1b\xb6\xcf\x51\x5b\x3b\x4d\x1d\x66\xa7\xf9\x0f\xf5\x46\xce\x2c\xe8\x92\x4d\x0b\x52\x68\x47\x1a\x37\xe0\x0e\x80\xf2\x29\x45\x12\x83\x01\xf3\x5d\xc8\xa7\x2a\xfe\x60\x5e\x49\x29\xc6\xd7\xf0\x37\x53\x36\x1e\xf3\x15\xf4\x90\x3c\x65\x11\x81\xdf\xe7\x0d\x06\x74\x59\xc2\xc9\x3a\xc8\x68\xb0\xb1\x22\x07\x9b\xc9\xb8\x80\x4a\x1f\xbf\x82\x52\xc8\x07\x5a\x74\x89\xbc\x8b\x05\x03\xfa\xda\xe3\xe4\x24\xf3\xa8\x76\xa0\x90\xf7\x8e\xc7\x67\x26\xf1\x92\x55\xe0\x25\x6b\x50\x90\x44\x51\x12\xc4\x49\x4c\x92\x88\x93\x2c\x01\x46\x9c\x68\x11\xc4\xb3\x59\x9d\x95\x67\x75\xd6\x0e\xbb\x6d\x06\x0b\x30\xe6\x63\x9f\x35\xcf\x3a\xfc\xe8\x1e\xaf\x87\x44\x39\xdb\xde\x66\x09\xc6\x98\x50\xc7\xd5\x39\x45\xef\x44\xbb\xbb\xad\x3d\xe2\x94\x42\x53\xe6\xcf\x4d\xe5\xea\x9b\xe4\x39\x0d\xa1\xa9\xdb\xa6\xd6\xc5\x7b\xe5\xa6\xfa\x5c\xb8\xad\x38\x43\x89\x93\xc7\x7b\xcf\x8f\x08\xb5\xf4\x82\x16\x89\x92\x24\x88\x92\xd4\x21\x71\xbc\xc5\xc2\xf1\x53\x78\x9e\xf1\x02\xc7\x64\x92\x98\x64\x91\xc4\x39\x12\xcf\x49\x12\xcf\xf1\x6e\xb7\x4b\xe2\x25\x0b\x4f\xa7\x18\x47\x43\xf6\x7f\x4d\xfb\x7b\x96\x73\xdb\xb3\x6d\xc4\x91\xb5\x25\x34\xcd\x45\x42\x9d\x45\xe2\x1b\x03\xe1\xb0\x24\x4e\x0a\x88\x0d\xb9\xf3\x67\x9f\x3a\xb5\x6b\xbe\xd8\xe8\x76\x7b\x3c\x52\xa0\x59\x9c\xdf\x35\xf5\xd4\x13\xcf\xca\x25\xdc\x7c\x4b\xb1\x75\x05\xb3\xbb\xb9\x2c\xd5\xb1\xcf\xd7\xd2\xa4\xea\xdd\x09\x25\x63\xec\x0c\x3a\xf0\xf1\xf7\xf7\x19\x17\x6d\xe6\x0b\x3a\xba\x99\xfb\xeb\x66\x54\x34\x96\x52\x2a\x2a\xb8\xe3\xdd\xe0\xf7\x75\xff\xf9\x33\x08\x33\xce\xf7\xd3\xd7\x8d\x4b\xfc\x26\x0e\xc3\xb4\x53\x1d\xc6\x44\x8f\xa7\x85\x4a\xde\xbc\x97\x4a\x2d\xca\x71\x2e\xf1\xeb\x9c\x3b\xb7\xb3\x93\xf5\xb5\x56\xa7\x69\x6b\xaa\x99\x4a\xb2\xac\xfd\xff\x98\x7b\x13\xf8\x36\xaa\x73\x6f\xf8\x3c\xe7\xcc\xa2\x6d\x46\xd2\x8c\x36\xcb\xb2\x2c\x59\x96\xe4\x55\x4e\xb4\xda\xf1\xa6\x38\x1b\x89\x9d\xc4\x59\x09\x24\x24\x26\x1b\xc1\x6c\x09\x10\xc2\x92\x65\x0a\x29\x10\x42\xd9\x52\x42\x4a\x4b\x63\x28\x2d\x50\xca\x2d\xa5\x2b\x6d\x68\xd5\x96\xd2\xbe\xa5\x50\xc2\x85\x4b\x17\xda\x6b\xba\x70\x69\x0b\x2d\x6f\x7b\x69\x4b\x6c\x8d\xbf\xdf\x9c\xd1\x66\xc5\x21\xf4\x7e\xdf\xfb\xfe\x3e\x88\x35\x67\x66\xce\xcc\x9c\x73\xe6\xcc\x39\xcf\x79\x96\xff\x3f\xeb\x2f\xcd\xb3\xec\x14\xab\xa0\xd9\x68\x8b\x36\xcf\xd2\xd0\x64\x4d\x1e\xa4\x66\x60\x1a\x96\x2f\x82\xf6\x55\x61\x27\x75\xe9\x70\x14\x03\xc3\x35\x01\x46\xca\x38\xb0\x0e\xf4\xa3\xe7\xa5\x17\xea\x3a\x36\xdd\x63\x50\xcf\x4b\xbb\x96\x1f\xbb\xfd\xc0\x1e\x10\xcd\x16\x93\xc1\x64\x62\x8c\xf2\x32\x47\xcf\x5b\xdd\xad\x17\xcd\xeb\x3c\x34\x77\xe4\xc0\xec\x1a\x97\xc7\xe5\xb9\xb0\xa6\xeb\x8d\xae\xaf\x5e\xf4\x91\x57\xf7\x28\xb7\x4f\x7e\x72\xef\x8f\xbb\x7e\xd3\xe9\xb9\xb0\x66\xf1\x36\x57\x4d\xe3\x62\x65\xed\xb2\xfb\xbf\x77\x7d\xcf\x7f\xcd\x91\x87\x1c\x2b\x96\x98\x18\x62\xc1\x36\x09\x3f\xd7\x76\xb8\xd6\xef\x6b\xf7\xba\xd7\xbb\xc2\x12\x18\x67\xb9\x3d\xae\xf4\xec\xc5\x7f\xf8\xcb\x47\x9a\xc6\x9a\xdd\xe7\xb6\xd5\xb9\xea\x1b\xdb\x5f\x03\xc7\xe1\xcf\xaa\xdf\x9a\xc8\xb4\xd5\xd5\x5d\xb1\xd8\xb3\xce\xdd\xf4\x60\xf3\x15\xaf\xbe\xf8\xb5\xb9\xdd\xbd\xcb\x66\x99\xb6\xad\x76\x9f\xef\x16\x3c\xc6\x00\xd3\xf4\x40\xa5\x2f\xc4\x72\x84\x34\x91\x5f\x07\xc9\xa2\xc2\x1b\xd2\x3e\x27\xa6\x00\x5e\x44\xb1\x65\xb5\x3a\x61\x6d\xd8\x29\x54\xcf\xed\x27\x3a\x74\x96\x96\xc4\x6e\x97\xdb\xc5\x2a\x0e\xb3\x73\xdb\xc6\x0d\xb5\xc9\xfe\xfa\x61\xe3\xe6\xa5\x07\xd4\x3f\x2f\x9f\x15\x22\x7e\xb3\xc4\x27\x3a\xe3\x35\xe7\xd6\x8a\xbc\x14\x32\x47\x02\x56\x52\x27\x76\xcd\xeb\x32\xf1\x4e\x18\x7a\xf6\x10\x6e\x10\x6b\x8d\x52\x67\xbc\xc7\x21\xd6\xb5\x30\x35\x5d\x0b\xe5\x85\x1c\x81\xa6\xda\x73\x6b\xe2\x9d\x09\x5e\x32\xfb\x49\x68\xd6\x72\x90\x0e\x2c\xdd\x6c\x1c\xae\xef\x4f\xd6\x6e\xd8\xb8\xcd\x69\x76\x10\x6e\xa1\xbc\xb0\xab\x86\x69\xa9\x13\x1d\x3d\xf1\x4e\xc9\x58\x2b\x36\xe0\x43\xcf\x0e\x81\x93\x37\x75\xcd\xeb\x12\xeb\x88\x35\x10\x31\x87\x24\xbe\x38\x87\x95\x30\x64\xd1\xd9\x02\xd3\x98\x91\x72\x7c\xc8\xc6\x5f\x97\x43\x48\xf6\x3c\xc6\xa2\xe2\xbc\xa3\x9d\x1b\x2b\x9f\xd0\xe7\x6d\x1d\xc3\x84\xd3\xf1\x0c\xed\x90\x71\x83\xfc\x81\x60\x26\xca\x24\x82\x47\xce\x3b\x0f\x1e\xb1\x9c\x11\xd5\x04\x4d\x44\xe0\xe8\x9a\x35\xea\x28\x7b\xfe\x07\xe3\x9b\x94\x75\x6c\x8b\xd0\xb9\x54\x86\x64\xa2\x31\xac\x1b\xff\x63\x38\x1a\x83\x92\x03\x80\x96\x64\x43\x0d\x3a\x16\x34\xe3\x76\x21\xb7\x9f\xa5\x80\x7d\xa7\x2b\xda\x98\xc0\xec\x58\x3b\xc7\xfa\x5c\x26\x6b\x6b\x63\xb3\xc0\xcb\x16\x17\xd9\x72\x47\x27\x16\x38\xbe\x79\x76\xb3\xc9\x41\x88\xc7\x5b\xeb\x36\x99\x67\xa5\x62\xf3\x59\x56\xe0\x25\xdc\x03\x5d\x0f\x73\xb3\xa4\xe6\x9a\x46\x5b\xd7\x11\xa7\xab\x6a\x58\x3b\xd7\x6c\x72\xd7\x7a\x3d\x84\x38\x4c\xcd\xb3\x9b\x79\x4e\xc0\x99\x3b\xb7\x10\x97\x45\xe6\x85\xe6\xc6\x56\xab\xc9\xe5\x63\xb9\xf6\xd8\xec\x00\xe3\x72\x1e\xe9\xb2\x35\xd6\x34\x4b\xb3\xb8\x87\xd5\x1f\xf6\x60\x89\x17\x58\x76\x7e\x2c\x45\xba\x2a\xc7\x25\x40\x6d\x08\x71\xab\x59\x44\xed\xf1\x54\x93\x81\x45\x60\xf4\x95\x6a\x26\x06\x85\x4d\x2f\xb8\xdc\xd4\xf6\xed\x62\xdc\x05\x7c\xad\x74\x86\xe3\xd3\xdc\xea\x79\x9b\x60\xe8\x93\xff\xa1\xbe\xfc\x05\xf5\x7f\xbf\x11\x6a\x7d\xe3\xc9\x8b\x3f\x57\x1f\xf4\xb5\xb6\xec\x3c\x32\x7f\xd9\xc0\xb2\xb6\xeb\x60\xfd\x73\x86\x67\x6e\xbe\x7d\xe4\xb2\x91\xf0\xc5\x17\x30\x3b\x36\x2f\x10\x7d\x37\xaa\xf9\x3f\x7f\xfd\xb2\xbb\x99\xdb\xf0\xbe\x0b\x59\xb3\xfb\x4b\xbb\x99\x08\x69\xbb\x63\xd5\xba\xc1\x7b\xbf\x6c\x8a\x34\xde\xfc\xcc\x76\x67\xd7\x55\xfd\x26\xba\x3e\xd8\x34\xa5\x90\xef\x70\x48\xd7\x7f\x53\x0d\x61\x90\x84\xec\x41\x7b\xc8\xae\xdb\xda\xc8\x77\x1e\x58\xdb\x03\xe1\xa8\xaa\xbe\x38\x85\xa6\x5e\x7a\xe2\x08\xfb\xdf\xea\x3f\xcf\x39\xe7\x19\xf5\x67\x79\x23\xfe\x07\x34\xfd\xe2\x9b\x2f\xe8\xb1\xce\x53\x8f\xd0\xf7\xba\x1a\x6d\x40\x5b\xd1\x25\xe8\x2a\x74\x3d\xba\x11\xdd\xaa\x7b\xd9\x38\x1d\x88\xe7\xf4\xa1\x28\xda\xc7\x68\xab\xb5\x68\x84\xb3\x42\xa4\x81\x8f\x61\x9e\x73\x6b\x43\x11\x71\x6b\x62\x42\x43\x24\x1a\x83\x0e\x68\xe0\xfc\x50\x0f\xf4\x8f\xf4\x03\x1d\xe4\xa2\x11\x94\x4a\x4a\x72\x69\xca\xad\xdc\x4e\xdb\xd5\xa6\xe6\x24\xdf\xe0\x74\x64\xe2\x19\xed\x5c\xd1\x71\x47\xfd\xe5\x5b\xb5\x5e\x48\x76\xad\xbf\x70\x6e\xf3\xf2\x70\xbb\x6f\x34\x1a\xb9\xe0\xb9\x0b\x6c\xa9\x2b\x7d\xed\xe1\xe5\xcd\xd9\x0b\xd7\x77\x45\x4d\xce\x59\x03\x73\xdd\x72\xb7\xc3\xe1\xb4\x71\x16\x9e\x77\xb5\x9a\x4c\x42\xdf\x39\xf3\x5c\x6e\xf0\xd6\xbe\xa5\xfe\xf2\xc5\x35\xc4\x64\x22\xc4\x64\x0c\xf1\x46\x13\xc7\x1b\x4d\x8d\x46\xa3\xc1\x68\x94\xe2\x06\x8b\xc5\x60\x14\x2c\x73\x89\xcd\x6a\xb0\x5b\xe7\xd9\x6d\x76\xdb\x1c\x6c\xb3\x31\x01\xea\x09\x74\x72\x42\xbd\x62\x29\xeb\x91\xc8\x91\xde\x0b\xdb\x39\x4f\x7a\xf9\x4d\x6b\xf6\x9c\xbb\x7e\x97\xb1\xc9\xe3\xf1\x7a\xcd\x81\x76\xe3\xae\xf5\xe7\xee\x59\x73\xe3\x70\xda\xc3\x35\xce\x33\x99\x5a\x9b\x03\x4d\x0c\x31\x8a\x22\xcb\x9a\x3a\xdd\xee\x48\x87\x00\x0c\x13\xd9\xc6\x48\x1e\x76\x29\xdc\x3d\x71\x12\x2e\x9c\x3c\xc0\xb3\x84\xe5\x59\xce\xcb\x9a\x8d\x1c\x6b\x36\x45\x78\x8b\xc0\xb3\xde\x46\x83\xd9\x62\x34\x98\x2d\x36\x33\xcb\xb8\x18\x8e\x17\xb0\x59\xc0\x4e\x33\x26\x1e\xc3\x34\x5b\x47\x78\x1a\x32\x75\x44\x7b\xe9\x89\xe9\x78\x3d\x9a\x34\x86\x02\x88\x53\x22\xde\xac\x37\x72\xf4\x95\xa3\x23\x65\x92\x01\x3c\xa6\x63\xee\x90\x5c\x31\xd6\x60\xf4\xe8\xd1\xd1\x5c\x67\x53\x05\xea\xe1\xd3\xc0\xab\xef\x97\xb0\xd3\xf5\x31\xad\xa6\x80\x43\x86\xaa\xb0\x81\x12\x4e\xda\xeb\x52\xc9\x48\xc8\x4e\xe3\x21\xb4\x41\x2f\x93\x0a\x3a\x13\xa9\xa0\x93\x1b\xd7\xc6\x31\x3d\xc8\x56\x90\x39\x45\x16\x04\xf9\x7d\x45\x16\x46\x00\x29\xa0\xb0\xca\xc6\x81\x72\x58\xad\x22\x0b\xe3\xe3\x82\x3c\x81\x64\x01\x8f\xe4\xc7\x04\x59\xd1\xfe\xd3\x7d\x62\xd8\x22\x5f\x52\x6f\x45\x04\xb0\x4b\x57\x72\x6a\xd3\x08\xd5\x6a\x66\xd2\xdd\xe0\x62\xdc\x2e\x89\x2d\x9d\xc1\xa8\xb1\x7c\xce\x42\x71\xe8\xf5\x80\x60\xbc\x13\xcb\x52\xdd\x2d\x35\x8d\xd8\xa5\x7e\xeb\xf7\x35\x41\xa7\xdd\xcb\x8e\x41\xe3\xae\x2b\x6f\xc1\x02\x76\x48\xbe\x3b\xbd\x61\xb0\x3c\xa5\xfe\x56\xdd\xf7\x5a\x4d\xc8\x21\x79\x09\x70\xf0\x9f\xdf\xfc\xd6\x7f\x80\x1e\x25\xac\xfe\xc0\xe7\x70\x06\x6b\x7e\x0f\x0b\x5c\xb8\xb1\xe6\x96\x3a\xc9\x2e\xdc\x72\xe5\x2e\xf5\xf5\x87\x6a\x1d\x8e\x50\xcd\x6b\x70\x13\xd4\x3d\x25\x40\xb8\xe6\x4e\x9f\x24\x09\xff\xf1\xad\x6f\xaa\xc1\x42\x9c\x29\x2a\xd8\xd6\xea\x51\xb3\x26\xe1\xa0\x2a\xfb\x9a\xbb\x9a\x5b\x26\x58\x84\x5f\x86\x19\xd1\x6a\x19\x5b\xc7\x40\x47\xc7\x00\x74\xd0\xcd\xf1\xca\x80\xe5\x89\x38\xf3\xa9\x07\x18\x8f\x38\xf9\x57\xd1\xc3\x30\x5f\xd2\x5b\xda\xf6\x03\xfb\x86\x0c\x11\x33\x1b\xec\x3f\xb0\xc1\x85\x03\xfa\x65\xda\xbf\x77\xa1\x8c\x98\x05\xef\xc0\x6f\x04\xbb\x5d\xc8\xef\x2f\x2c\x91\xb3\x35\x71\xbc\x31\x35\x30\x90\xca\x3f\x14\xa7\x73\xc0\x4d\x54\x8f\x10\x43\x49\xda\x1b\xb4\x55\xa1\x83\x0b\xa1\xb0\x08\x2e\xb7\x08\x7e\xec\x16\x41\x9b\xd7\xd3\x99\x12\xda\x79\x40\xeb\x34\xc4\x8e\x58\x3b\xc3\x29\xa9\xc1\xc1\xd4\x50\x52\xdd\xa4\xee\x9e\x33\xc0\x44\x1c\x9c\x34\xbb\x23\x52\xf7\xd9\x2f\xc4\xf8\x76\xb9\x96\x98\xec\xd7\xd3\x67\x8e\xc3\x97\xe1\x85\xe4\x90\xa2\x5e\xa3\xde\x06\xd7\x11\x85\xea\x7d\x93\x43\xb0\x3e\x28\x6f\xbc\x24\x1a\x9c\x9b\xe8\x6e\xf6\xcf\x89\xd7\xb6\xb8\x3f\xd2\x73\xcd\xea\x5d\xe9\x8d\x03\xb9\x81\x8d\xa0\x0c\x25\x27\x1b\xc9\x37\xd5\x97\x9b\xd5\xbf\xb6\x50\xbd\x53\x76\x0a\x71\x39\x0e\x21\x33\xaa\x41\x73\x11\x62\x92\x54\xa6\x6a\xd0\xd6\x33\x10\x44\xf6\x64\x0c\x37\x88\xd8\x69\xa3\x0b\x1b\x4a\x50\xa0\x35\xb1\x36\xc6\x49\x19\x1d\xd5\xd3\xe9\xe0\x5d\x92\x36\xc0\x91\xbb\x6c\xdd\x6b\x02\x17\x2d\xce\x5f\xc3\x3a\xd4\xbf\xcf\x3a\xff\x13\xdf\xfc\xc4\xf9\xb3\x98\xdc\x50\x52\xcd\x1e\x7d\xe5\xa8\x9a\x4d\x0e\xc5\x57\xae\xeb\x8d\xfe\xf1\xdb\x86\xce\xe1\x4e\xc3\xb7\xff\x18\xed\x5d\xb7\xf2\xc9\xc0\x9a\x6e\x9b\x6d\xf1\x45\x30\x0b\xda\xb0\x23\x71\xe9\xe6\xfe\xfe\xcd\x97\x26\xf2\x6f\xab\xaf\x24\x87\xb4\xaf\x6e\x28\xd9\xb2\xe1\xc8\xe7\xff\x7a\xf8\x18\xb0\x3e\xd9\xa1\x7d\x7e\x0e\xd9\xa7\x4e\x1c\x3b\xfc\xd7\xcf\x1f\xd9\x40\xbf\x79\x3c\xa5\xb0\x2a\xbb\x8f\xae\xcd\xdc\x2e\x9e\xb3\xd2\xdf\x0e\xd0\xa5\x28\x6d\x1b\x8d\xe8\xbf\xfd\x54\x85\xaa\xfd\x66\xd2\xfa\x6f\x3d\x45\x7d\xd4\x7e\xdd\x2e\xfd\x57\xbb\xda\xed\xe2\xd9\x91\xdb\xfc\x26\x4b\xd3\x89\x94\xa5\xbe\xae\xf9\x9b\xb3\x4c\xcd\x16\xbe\xde\x71\xcb\x2d\xbe\x96\x66\xd3\xac\x6f\x36\xd7\xd5\x5b\x52\x27\x9a\x2c\x26\xff\x6d\x55\xb9\x9a\xeb\x6e\xb9\xa5\xae\x79\x7a\x1e\xac\x54\x5d\x86\x5d\xda\x65\xe6\xe6\xf2\x65\x2d\xbe\xe9\xb7\x6e\x36\x59\xea\x0f\x1f\xf6\x9b\x4d\xd3\xf2\x94\x38\xc9\xb4\xef\x3c\x85\x76\x54\xeb\x53\xa9\x57\x61\xa8\x81\xe7\xf8\x82\x75\xc3\xae\xc9\x84\x89\x69\xfa\xd4\xa2\x8a\x90\x2b\x28\x54\x0b\x91\xbc\x45\x59\xa3\x8f\xd5\xe4\x4c\x46\xb7\xfa\x04\x4b\xda\x54\xf6\x73\xcb\xe2\xf9\x9c\xbf\xd1\x7f\xde\x22\xcf\x80\x47\x68\x3a\x67\x91\x7f\xc1\xa2\x40\xe0\x9c\x6f\xff\x60\xc5\x33\x05\x2d\x2a\x0c\x26\x87\x94\xfb\x2e\x7e\x8c\x09\x52\x4d\xea\x47\x9f\x79\xb8\xbb\xa0\x46\x0d\x98\xdc\x1e\x67\xad\xe8\xc1\x73\x43\x42\x53\x43\x47\x7f\x64\xdf\x67\x5c\x70\x4d\xa5\x32\xd5\xd1\x95\x5a\xd5\x3a\xaf\xf7\x70\x9b\x33\xbb\x62\x45\x4d\x57\x5e\xc9\x66\x2b\x95\xa8\x43\xa9\x8b\x8f\xf5\x75\xe9\x1a\xd4\x05\xdd\xba\x22\xd0\x28\xdb\x7d\x56\x1f\x59\x92\x71\xae\xec\xcb\x86\x6e\xbe\x7e\x7e\xcf\x31\x54\xd1\x3e\x29\xd4\x8b\x76\x21\x14\x4e\xd8\x75\x5c\x22\xfa\x7f\x8c\xa1\x86\x3b\x3f\x76\x52\xb2\x36\x57\x22\xa8\x89\x5e\x6e\xce\xe1\x72\xeb\x6e\x9b\x7d\x50\xb5\x8c\xa2\xab\x8c\x7e\xd0\x0d\x31\xfa\x52\x23\x11\xd4\x45\x17\x3f\xd1\x44\x71\x8e\xca\x67\x23\x81\x40\x68\x6e\x4f\x53\x9d\x81\x39\xa7\x49\xf4\x80\x2c\xb9\x9c\x86\x45\xe7\xf9\x1b\xfd\xf9\x5c\x7c\xd9\x50\x12\x06\x75\xcd\x2a\x73\xe1\xb9\xab\x9f\xfb\x36\xec\xd0\x97\x5a\x83\x29\x75\xbc\xfb\xe1\x6f\x1f\xb8\xe3\x49\x80\x5e\x12\x64\x1e\xbb\xf8\xbe\x63\x3b\xe0\x1a\xd7\x67\xf6\x45\xfa\x3b\x1a\x9a\x84\xd0\x5c\xec\x11\x6b\x9d\x1e\xb7\x09\x02\xa9\x41\x05\x2b\x9e\x78\x4b\xd0\xc8\xae\xc8\xba\x62\x24\x1a\x8c\xb8\x7b\xe7\xb5\xae\x4a\x75\x39\x96\x26\x92\x43\x54\xb1\x1a\x58\xb2\xd8\xe6\x09\xac\x59\x99\xcd\x46\x0a\x0d\x9b\x57\x52\x83\xdd\x0b\x3e\x79\x3b\x3b\xb4\xdd\xe5\xec\xea\x3b\x76\xf1\x45\xc7\x7a\xe6\x5f\x7f\x73\x28\xdb\xb7\xd2\x99\x59\x42\x7c\x56\x9f\x5d\x36\x0e\xa2\x4a\xfc\xff\x42\xbf\x62\x8a\xcd\x90\x0c\x35\xf0\x31\x68\xa0\x36\x62\xde\xae\x5b\x3e\xed\x14\xbe\x57\x67\xbb\xa3\xff\xd3\xa9\x8d\x2a\xea\xb9\x8a\x59\x2f\xc6\x16\x56\x2e\x69\x9d\x2b\x90\x2a\x47\x5c\x6e\x2a\xf5\x15\x97\x9d\x9f\x9b\xf6\x9a\x93\xa7\xf5\x04\xac\x64\xb3\x8a\xf6\xca\xf3\x33\xbf\xf2\x8b\xca\x1d\xe3\x7c\x9d\xca\xb0\xa7\xb2\x3f\x9e\xa9\xd3\xae\xfd\x10\xbd\xb3\xd4\x95\xa7\xb5\x4f\x12\xf5\xa0\x9d\x54\xaa\x07\xea\x04\x40\x75\x3f\xda\xff\x22\xa3\xf7\x20\x9c\xb0\xd3\xc5\x6a\xca\xae\xc9\xbc\xae\x78\x3a\xa3\xed\xe1\x12\xea\x04\xd7\x41\xd7\x1e\x1c\x4f\xed\xac\x91\x94\xbd\x08\x58\x4b\xbd\xbf\x2a\xa2\x48\xb5\x55\x5c\x36\x9b\xff\x80\xb7\x1e\xeb\x2a\xbf\x74\xa5\xb0\x8a\x2f\xbc\xec\xf4\x5c\xed\x65\xa7\x97\x5c\x77\x4b\xd5\xcb\xa6\xdf\x4e\xf7\x02\x9c\x5d\xfd\xdc\xb7\xcf\x39\x5b\xaf\x0d\xe9\x9d\x96\xf4\xd2\xa6\xcd\xcf\xd7\x7b\xaa\x9f\xff\xe0\x9e\x5a\xe8\xd7\xd3\xd7\x42\xf5\x54\x2a\xa2\xf1\x98\x99\x74\x21\xf4\x90\xe7\x1c\xf5\x00\xae\x78\x3f\x68\x47\xaa\xe2\x33\x59\x14\xf1\xaa\xa6\x67\x64\x79\xbd\x94\x96\xd4\xa3\xeb\x25\x69\x3d\x8c\x4a\x69\x69\xbd\x24\x3d\x03\x7f\xf7\x46\x00\xcd\x14\xb1\xf9\x8c\x1e\xa8\xa8\xe5\x4f\x4b\xeb\xd5\xa3\x92\xa4\x25\x9e\xf9\xe0\x18\x4e\x5a\x36\x94\xec\x00\xa0\xb1\x90\x8e\x7a\x28\xc5\x8c\xd2\x22\xba\xe2\x19\xc8\x54\x46\x1c\xb2\x2c\xbd\xb7\x5e\x18\xd5\x44\x25\xc4\xbf\x17\x8a\x0a\xa3\xeb\x41\xa8\x2e\xda\xb6\x34\x2d\x7d\xa1\x30\xde\x72\x41\x61\x74\xbd\x7a\xc6\x38\xcd\x42\xb9\xa2\x7a\x8c\x26\xe8\x45\xe9\x87\x52\x54\x2d\x25\x67\x68\x9c\x1e\xaf\x79\x5a\xcd\x4b\x0f\x03\xb1\xba\x54\xdb\x69\x69\xa5\x33\xd4\x25\x7f\xb6\x72\x75\xd0\xe6\x2a\x39\x87\xea\x81\xa4\x0e\x37\xd0\x62\x4d\xc3\x40\x61\x99\x19\x6b\x2e\xd1\x56\x39\xbd\x5c\x5b\xcb\x6f\x79\x86\x3e\x80\xa6\x3e\x28\x0e\xce\x0c\x3f\xc3\x9e\xaa\xb8\x07\x11\xf8\xb8\x8e\xee\x9c\x49\xbb\x23\xe9\x4c\x1f\xf4\x03\x17\x89\x3a\xf8\x64\x84\x8b\x16\x97\xe4\x0d\x22\x84\x22\x22\xe6\x45\xe0\xb5\x95\x56\x3a\x12\x4d\xd0\x53\x3c\xe7\x07\xa7\x4b\x9b\x1e\xb4\x53\x9c\xcb\xed\x12\xb1\x55\xbb\x3c\x12\x8d\xf0\xda\x9f\x96\xbb\x0f\x52\xe9\x4c\x1f\x0e\xb9\xa8\xdf\xbf\x1f\x12\xae\x74\xd4\x45\x73\x70\xee\x88\x08\xda\x13\x1a\xb4\x5b\xa6\xb5\x1b\x52\xe9\xcf\xc5\x6b\x23\x87\x8b\xd7\xd6\xc6\xda\x62\x30\xa2\x09\x23\xd4\x05\x87\xd7\x6f\xe2\xce\xb8\xdc\x11\x9e\xe3\x5d\x7c\x0c\x47\xb5\x29\xdd\xe5\xf6\xe3\x8c\x8b\x4f\x53\xe9\x44\x2b\x97\x2b\xd3\xc0\x39\x78\x37\xe7\xca\x70\x05\xa5\x10\xb8\x39\x17\xdf\xc0\x85\xa8\x1e\x28\x93\xd6\x81\xac\xe3\x7e\xcc\x73\xf4\x6c\x28\xee\xd2\xb5\x45\x14\xef\x2f\x9e\xa6\x54\x54\x19\xfd\x9c\xb6\x10\x77\x65\xd2\x29\x2e\x9a\x8c\xe1\x74\x22\x9e\xa6\xd7\x6a\xad\xc4\x39\x1b\xa2\x7d\x90\xe9\x23\x11\xaa\x8f\xe3\x39\xed\x8c\x36\xdc\xd3\xa3\xe0\xa2\x4e\x12\x21\x57\x5a\x5b\x93\x46\x32\xae\x0c\x7d\x78\x3a\x43\x27\x86\x3e\x88\x74\x40\x32\x15\x8d\x81\x6e\xa5\x8d\xc6\x33\x0d\x31\x08\xa5\xb5\x4b\x5d\x19\x7d\x93\x4e\xd2\x17\x92\x0e\x51\x75\x73\x24\x9a\xd6\xb6\x11\x92\xa6\xee\xef\xd1\x74\x01\xf7\x91\x17\x89\x3b\x12\x8d\x61\x8a\x6e\x19\x49\x47\x23\x22\xa3\xa5\x62\x90\xf2\x53\x69\x8f\xe7\xdc\x0e\xce\xed\xa8\x8e\x60\x21\xf3\xb1\x95\xc3\x2c\x0b\x9c\x4d\x8c\x34\xd8\xb1\x9b\x10\x0f\xc1\x16\x33\x70\x46\x11\x9b\x4c\x1c\x60\x2b\x06\x42\x58\xce\xc0\x03\xe1\x08\x87\x89\x99\x58\x6d\x26\xce\x48\x78\x16\xac\x0e\x62\x48\xf2\x2c\xf0\x20\xf8\x18\xe2\x25\x2c\xcf\x63\xe0\x58\x86\x98\x65\x86\x37\xba\x39\xb6\xb1\x26\xc8\x71\xbc\x85\x60\x62\x04\x0b\x4f\x42\x56\x56\x60\x8c\x26\x99\x15\x89\xd1\x62\x64\x18\x8b\xd5\x60\x02\xbb\xcd\x00\x46\xd6\x60\x20\x3e\x93\x5c\xcb\xd7\x72\x2c\x98\x4d\x02\x16\x39\x2c\x98\x80\x70\x2c\x6b\x20\x7c\xc0\xc4\x78\xec\x2c\xc3\x00\x61\x44\x12\x9b\xc5\x71\xac\x0d\x37\x18\x58\x91\xe3\xdd\x0e\xcc\x63\xc6\x2a\x1a\x6c\xdc\x3d\xe7\xf1\x2c\x83\x89\xc9\xc8\x41\xab\x8c\x89\x00\x36\x20\x3c\xcf\xb3\x80\x89\x5d\x10\x82\x1c\x26\x92\x85\x61\x2c\x06\xec\x06\x20\x40\x6a\x08\x60\x86\xc3\x5e\x2b\x26\x2c\xc6\x06\x23\x07\xc4\x24\x3a\x30\x67\x33\x18\x5d\x1c\xcb\x61\x2c\x58\x1c\x84\xad\x35\x98\x2c\x76\xd6\xea\xe3\x1b\x65\xcc\x9a\x79\xcc\x7a\x59\x0e\x88\xc3\x20\xd6\x4b\x2c\xc1\x98\x31\x62\x0e\xc0\x81\x59\x17\x4b\x04\x0c\x04\x83\x91\xc3\x66\x8b\xcc\x03\xc3\x71\x7c\x03\x2f\xc8\x2c\x70\xc4\xc2\x60\xad\xf0\x40\x08\xf0\xad\x9c\x95\x67\x31\xeb\x21\x35\x2c\x31\x10\x9e\x35\x61\xb3\x81\x37\x80\xf6\x9f\x95\x37\x99\x40\xb4\x33\x4e\x8e\x67\xc0\xc0\x83\x91\x67\x59\xd6\x68\x31\xf0\x6c\x3d\xe1\x31\x61\x5c\xd8\x4e\x88\x24\x98\x6c\xc4\x62\x24\x76\x6c\x75\xd9\x9f\x79\xf1\x6e\x22\x13\x89\x03\xde\x68\x23\xd8\xc4\x98\x39\x5e\x7b\x55\x18\x9c\x56\xd6\x62\x34\x73\x2c\x06\x5e\x64\x89\xd5\x28\x32\x02\x26\x1c\xc6\x32\x66\x08\x2f\xd7\x62\xc6\x66\x83\xd3\x02\x94\xd4\x1f\x80\x1d\x4c\x16\xe0\x0d\x1c\x67\x90\xb1\x0b\x30\xcb\xba\xc0\x26\x60\x8e\xc7\x0c\x10\xa3\x87\xb0\x16\x06\xf3\x1c\x6b\x32\x61\x00\x16\x30\x06\x96\x63\x80\xb1\x71\x8c\xd1\x80\x59\x23\xc3\x19\x65\xc2\x89\x2c\x6f\x17\x0c\x36\xc6\xe0\xe4\xa8\x1d\x00\xb3\x2e\x6b\x0d\x6b\x30\x0a\x82\x91\x05\xd1\x4a\x38\xb7\xf6\x62\xad\x16\xc6\xca\x7a\x58\x0e\x4c\xe0\x31\x80\xc4\x63\xc6\xc8\x30\xe0\xb6\x98\xa1\x06\xac\x06\x11\x2c\x56\x06\xb3\xbc\x91\x67\x18\x30\x31\xc0\x32\x98\x71\x30\x6c\x0d\x63\x24\xc0\x60\xde\x60\x61\x30\x11\xb0\xd5\x0b\x18\x1b\x41\xe4\x59\x9b\x91\x21\x1c\x67\xe1\x88\x68\x00\x18\xbe\x83\x07\xb0\x71\x9c\xc1\x0c\x3e\x3b\x63\xe6\xb1\x48\xd8\x5a\x08\x44\x19\xb0\xb4\x13\xd2\x64\x00\x6c\x36\x72\x6c\x88\xe3\x7c\x46\xcc\x8b\xda\x35\xd8\xd1\x52\xc3\xb0\x4e\x86\x30\x0c\xf0\x4e\x9b\x0b\x73\xb5\x4e\xa3\xa1\x91\xe3\x05\xce\x84\xb1\x9d\x30\x2c\xe0\x06\x46\x36\x80\x20\x99\x09\x27\x71\x0c\x6b\xf0\x60\x52\x67\x0d\x82\xd1\x60\xe4\x78\x89\x31\x78\x88\x11\x1b\xc0\x88\x81\xd4\x19\x18\x9b\x60\xe1\x01\x64\x62\x35\x10\x82\x19\x43\x8b\xcd\x14\xb4\xdb\xb0\x95\x00\x00\xc3\x00\x26\xc4\xc8\x99\x05\xb0\xb3\xb5\x12\x61\x08\xe6\x31\x61\x45\x53\x13\x43\xb0\xdd\xcc\x1b\x8c\x46\x03\x91\x64\x23\xb0\x06\x46\xb6\x19\x39\x86\x35\x13\x1b\xb6\x98\x0c\x06\x9e\xe7\xb0\xc1\xc6\xb0\x06\x30\x33\x58\x30\x1b\x39\x1e\x03\x60\x13\xc7\x4e\xde\xd8\xf8\x09\x42\x30\x0f\xbc\x45\x2b\xad\x81\x70\x58\xeb\x69\x04\xec\x2c\x18\x59\xcc\xb1\x0e\xc2\xd6\x70\x1c\xe1\xcc\xd8\x48\x18\x1b\x61\x58\x62\x8a\x0b\xf5\xf6\x1a\xab\x8b\xe1\x6b\x0d\x34\x3a\xc2\x39\xe5\xe4\xf6\xd3\x35\x93\x13\x75\x94\xd7\x4c\xc6\x42\x44\x6e\x2a\x99\x01\x3f\x80\xee\x31\x81\x6c\x88\x72\x51\x38\x78\xd6\xe9\xd6\xe9\x28\x74\xd1\x0a\x7f\x3e\xbf\x36\x9c\x4a\x46\x47\x23\x11\xfc\x58\xf4\x3e\xfc\xba\xbb\xe3\x4f\x1f\xd3\x83\x81\xe6\x1c\x68\xb3\xd9\xd4\x5f\x7e\x97\xfd\xf8\x0d\x46\xab\xbd\x60\x0b\xf9\x5d\x7e\x6d\x38\x7c\x69\x63\x3a\x15\xc1\x8f\x6d\xbe\x0f\x6e\x8f\xce\xbb\xf9\x11\x5d\xa9\x14\xf4\x9b\x1b\xcc\x8f\x8d\x5f\x42\xd6\x2f\x72\xa0\x4a\x4e\x4e\x3d\x8e\xa3\x16\xb5\xa2\x6e\x84\xc2\xc1\x54\x10\x8a\x7f\x67\xe1\x72\xad\xde\x67\x90\x26\xfb\xab\x0a\x83\x26\x11\xa6\xf8\xfa\xf8\x43\x21\x41\x52\x98\x7e\x50\x94\xc9\x6c\x51\xed\xe5\x8d\x44\xe0\xcd\x33\xed\x68\x6b\x6f\x76\x4a\x61\x6f\x60\x11\xf5\x53\x75\xf1\x25\x98\xbb\x48\xca\xae\x73\x45\xc5\xd9\x1b\xec\xf5\xaa\x4c\xd1\xed\xa6\x90\xac\xca\xf5\x76\x7b\x0b\x8b\x5a\x98\x9f\x37\xd7\xa9\x72\xde\x4b\x81\xed\x90\xec\x85\x37\xe1\x9d\xba\xe6\x68\x19\x07\x93\xbe\x39\x37\xaa\xa5\xb1\xab\xd3\xda\x20\xe8\x2c\x62\x4e\x85\x9c\x41\xca\x43\x50\x6d\x5a\xc5\x0a\x46\x2a\x62\x0a\xdc\x2a\x78\x2c\xe2\x85\xac\x37\x32\x32\x85\x18\xf4\x3e\xda\x38\x00\x23\xba\x0a\x0f\x46\x06\x36\xb2\x48\xc9\x23\x35\xa0\xab\x53\xc6\xb4\xaa\x8d\x29\x0a\x8c\xab\x0a\x28\x03\x1b\x75\x50\xf0\x8d\x95\x7e\xa7\x8b\x10\x32\xe2\x4c\xda\x5d\x54\xef\x45\x23\xfd\x60\xa4\x33\x50\x51\xf1\x94\xae\x07\x23\xf0\x45\x12\x23\x1d\x33\xcb\x0a\x46\xaa\x6d\x28\x88\xf6\xf4\x2c\x4b\xd4\x07\x60\xcb\x5d\x75\xcd\xd1\x22\x61\xd0\x5d\xea\x03\xea\x03\x77\x69\x0d\x54\x20\x03\xba\x0b\xb6\xa8\x0f\xdc\x25\x7b\x2d\x96\xa6\x88\x17\x72\x34\x0f\x6c\x81\x2d\x34\x0f\xe4\xbc\x11\x8a\x00\x46\x7e\x3b\xf3\x75\xfe\x68\xd5\x55\x32\xab\x5f\xa5\xe5\xa0\xcf\xa6\x39\xb4\x67\xb3\xb2\xee\x57\x89\x28\xce\xb9\x1d\xcd\x46\x5d\x68\x2e\x5a\x85\xd6\x53\x6d\xbe\xb6\x40\xb1\xe9\x9a\x84\x0c\xe7\x74\x40\xc9\xa7\x9d\x4d\xc4\x29\x87\x65\x22\xee\x67\x8b\x5a\xba\x22\x7b\x35\x85\x8e\xa0\xee\x4a\xd4\x81\x18\x12\x71\x5c\xc8\x81\x57\x3c\x74\xd1\xcd\x2b\x77\xee\xe5\x06\xaf\xed\x9e\x37\xc0\x32\xca\x3d\xd7\x4d\x1e\xbd\xee\x1e\xde\x19\x48\x2f\xdc\xd6\x6b\x1a\x18\xbe\xf9\xd6\x9b\x87\x07\x4c\xbd\xdb\x16\xa6\x03\x4e\x7e\x52\xc7\xe5\x23\x6b\x0b\xde\xb1\x24\xb8\x73\xe5\xcd\x17\x3d\xb4\x82\x1d\x98\xd7\x7d\xed\x20\xb7\x57\x77\x7e\xc4\x0a\x7b\xc3\x8a\x65\x70\x61\x4b\xab\x3b\x5c\x77\x38\x2f\x5e\x7b\xf8\xf0\xb5\xa9\x6d\xbb\xb7\x6e\x9a\xd7\xd4\x9a\x6a\x6d\x4d\xb5\x36\xcd\xdb\xb4\x75\xf7\x36\x36\x4e\x7d\x0b\xd5\xfa\x02\x55\x76\xfe\xf8\xb2\x15\x37\xb0\xbb\x0f\xd7\x85\xdd\xad\x2d\x30\x4a\x4f\x16\xe3\xd4\xee\xe2\x76\xb2\xef\xa2\x20\x9a\x87\x2e\x2e\xa0\xa5\x84\x1a\x78\x3f\x43\x97\x6d\x31\x12\x2d\x03\xbb\xa4\xa1\x08\xfc\x52\x3c\x96\x29\xba\x06\x11\x77\x1a\xe9\x91\xf8\xfa\x38\x13\x2d\x60\x00\x14\x82\xc7\x5c\x4e\x07\xef\xa6\x29\xf6\x49\xdf\x4b\xbe\xa6\x16\x3f\x09\x98\x65\xbe\xb3\xc9\x5a\xe3\xb5\xd4\x93\xa0\xef\xc5\xda\xe6\x26\xdf\x11\x5f\x7e\xae\xef\x45\x5f\x53\xb4\xee\x88\xcf\xf7\x52\x6d\x73\x75\x2e\x72\x60\xcd\x91\x55\xd7\x5e\xb7\xea\xc5\x55\xeb\xd6\xad\xbd\xfe\xda\xd5\x2f\xad\xae\xda\x87\x6c\x93\xef\x25\x5f\x80\xd4\x5b\xbc\x35\xd6\xa6\x4e\x5e\x36\x07\x48\x7d\x4b\x93\xef\xa7\xb5\xde\x7b\x7c\xf8\xad\x26\xdf\x4f\x7d\xb5\xf7\xf8\xa2\x4d\xbe\x97\x6a\xeb\xa7\x67\xca\xbf\xf1\xee\xaa\x7b\x56\xad\xf9\xe9\xaa\x6b\x6f\x58\xbb\x6e\xdd\xea\x97\x56\x4f\xdf\x2d\x60\x5c\x2a\x14\xdb\x1b\xe9\xfd\x02\xa5\x92\xd4\x57\x15\x25\xe2\x8c\x5b\x37\xc3\xf2\x7e\xe0\x95\x37\x8e\x4f\xe4\x9e\x56\xdf\xbf\xe3\x6a\x0c\x6d\xaf\x7c\x1a\xa0\x7b\xe1\xc8\xe8\xd1\xe6\x8f\x3c\x0a\xca\xf1\x37\x80\x7f\xfa\xe0\x2f\xd3\x3e\xeb\x2b\xd0\xf6\xe4\x1d\x7d\x47\x47\x07\xfb\xfd\x27\x11\x46\x57\x4d\x29\x9c\x40\xe3\xeb\x83\x08\x85\x75\xa8\xa5\x8c\xee\xd9\x5f\xf0\xb4\x69\xd5\xa6\x81\x20\x44\x53\xf6\x90\xdd\xc9\xfe\xa3\x73\xc1\xe8\x84\x32\xba\xa0\x13\xfe\x91\x2d\x42\x6b\x45\xbc\x59\xf5\x6d\xf5\x5d\xfc\x23\xf5\x5d\x87\xb2\xee\xbc\x03\x07\xce\x23\x35\x70\x67\xc1\x27\x6d\xd7\x7c\x75\x15\x3c\x51\x1f\x86\x3b\xd5\x5d\x61\x7d\xd8\x81\x82\x6f\x26\x8f\x96\xa1\x0d\x68\x14\x5d\x8b\x6e\x46\xb7\x97\x31\xff\x59\xa0\xfa\x45\x3a\xc6\x51\xe1\x5c\x2c\x7c\xea\x54\x66\x4f\x50\xc7\x5c\xea\xa3\xd9\x40\x39\x64\xa8\x39\x9a\x4a\xdb\xbc\xab\x1e\x0a\x2f\xdd\xed\xe2\xd9\x34\x85\xe1\xa6\xcb\x89\x44\x9c\xf4\x51\xc8\x20\x5e\xa4\x18\x41\xe0\x4e\x25\xfb\x21\x4a\x51\xdc\x81\xaf\x07\x88\x82\x93\xa7\x60\xfe\xf5\x00\x19\xed\xa9\x44\x57\x9c\xc1\xa5\x30\xe1\x23\xac\x5f\x11\x6c\x76\x31\xbf\xec\x72\x03\x23\x32\xfc\xe6\x55\x07\xef\xbe\x75\xed\xf9\x66\x7e\xf3\xca\x83\xf7\xac\x9a\x6f\x14\xae\xbf\x5e\x30\xce\x5f\x75\xcf\xc1\x95\x9b\x79\xb6\xb9\x75\xcd\xa1\xbb\x0f\xae\xda\xcc\x33\x22\x63\xb8\x1c\x3f\x25\xda\x6d\x82\xe2\x67\x89\x6f\x62\x43\x2c\xbe\x62\xc3\xd6\x25\x51\x7d\x13\x5b\x11\x8f\x45\x97\x6c\xdd\xa0\x6f\x40\x1c\x09\x8a\xcb\xbd\x44\x64\x31\x03\xaf\x8d\xe0\x71\x25\x8f\xc6\x8c\x98\x65\x44\xc6\x4b\x46\x94\xfc\x3f\xbf\x84\xcd\x58\x9f\x24\xbd\xea\x95\x8e\xc6\x90\x2d\xcb\x1b\xe0\xa6\x01\x06\x66\xcf\x5a\xfa\xb1\xd4\xea\x65\xab\x6f\x18\xba\x23\xb5\xba\x5e\x30\x2e\x5e\x6c\x14\xea\x57\xa7\xee\x18\xea\xbe\x34\xba\x7c\x75\xf2\x8e\xa5\xb3\x66\x03\x33\x00\x37\x19\xf8\xac\x2d\xd4\xe8\xb8\xad\xe5\x60\xa2\xbb\x51\xfb\xc9\x77\x27\x0e\xb6\x34\xd2\x1f\x3c\x36\xc7\xdc\xe8\x30\x74\x78\x89\x8d\xc1\x04\xfe\x10\xc0\xd9\xac\xba\x62\xd7\x88\x01\x33\x8c\x8d\xf1\xaa\xb9\x2c\x1c\xbb\x8d\x30\xba\x1d\x46\x9f\x37\xea\x51\x03\x0a\xa3\x04\xea\xa9\xb2\xc3\x14\x66\xc8\x62\xb4\x8a\xd3\x9e\x4e\xf0\x10\x34\x42\x50\xd6\x26\x91\x02\x45\x67\x32\x5d\xda\xe1\xc6\x8a\x16\xa1\xfc\x78\x53\x67\x93\x0f\x8e\xf9\x46\x9a\x60\xac\xa9\x73\x7e\x8f\xa2\xbe\x0a\xad\x79\xfa\xfb\x2c\xf4\xa8\x14\x99\x00\xa3\x26\xf2\x33\x3d\xc9\x94\x20\x05\x20\x50\xe0\x9e\x80\x63\xbe\xa6\xce\x26\xf5\x1b\x4d\xaf\xaa\xaf\xe2\xc7\xd5\x57\xd5\x87\xa1\x07\xc6\x28\x51\xa6\x02\xa8\x69\x64\xf2\x9f\x8c\xa2\xef\x51\x9d\x36\x33\x75\x90\xdd\xcb\xee\xa5\x28\xd0\x8e\x22\xaa\x86\x8e\xdc\x51\x70\xd0\x2f\x44\x6d\x00\x55\x36\x25\x2b\xf6\x9d\x55\xf9\xd9\xbd\x9f\xde\x7d\xcb\xd6\xc9\x7f\xec\x7a\xfd\xf8\xa7\xaf\xc2\x17\x98\x7a\x6d\x82\x29\xff\xd0\xf2\xed\xa3\xf7\x0c\x11\x43\xff\xca\xec\xea\xfe\xfc\xb7\xbc\x0d\x75\x91\x1a\xb8\xdf\xd4\x67\xb3\x98\xd4\xed\xfd\x57\xae\x5c\xd7\x8b\x17\x6c\xbd\x6f\xf7\xa7\xb7\x12\xc3\x55\x9f\x3a\xfe\xeb\x5d\xf9\x87\x4c\x16\x5b\xaf\x09\x6f\x5a\x7a\x74\xf4\xe2\xa1\xc9\x7f\xf4\xaf\xce\xae\xec\xc7\x0b\x3c\x91\xba\x40\xad\xba\xdd\x64\xb1\xf5\x99\xe0\xfe\xde\x75\x2b\xaf\xec\xcf\x7f\x6b\xf3\x34\xdf\xbe\x20\x9a\x8d\x16\xe8\x1c\x1f\xd4\x9f\x8f\xf2\xc7\x94\xe3\xfa\xed\x89\xa2\xca\xab\x3a\x06\xb5\x3a\xe6\xce\xad\x49\x69\x0a\x41\x79\x44\x14\xc5\x61\x52\xff\xcb\x34\xcb\xaa\x5b\xe4\x14\xa5\xb3\x89\x64\x9b\x3a\x55\xa5\x22\x32\x58\x29\x71\x93\xd2\xe6\xf7\xf8\x9a\x28\x39\x91\x22\xce\x36\x41\x8d\xc9\x51\x0c\xec\x9f\x40\x3a\x52\x04\x46\x15\xd6\x1d\x79\x92\x9e\x65\x29\x6b\xa9\xfa\x96\x6f\xe4\xec\x38\x7c\x95\xe6\x75\x66\x64\x7a\xd8\x8a\x6e\x9f\xa3\x76\x2d\x1d\xef\xf8\x5f\x46\xf6\x9e\x8e\xf3\x77\xa6\x74\x05\x7a\xf7\x9b\x33\x25\xe9\x1c\x9f\xe3\x11\x9b\x2d\xd8\xd7\xa2\x28\xa3\x49\x34\xc5\x08\x36\xa9\x68\x35\xac\x7a\x3a\x3a\xc3\xf1\xd3\x51\xa5\xa9\xdd\x50\xff\xc7\xbe\x5b\x69\x69\x3b\xa5\xcc\x70\xb0\x32\xfd\x12\xbd\x0c\xee\xd2\x01\x86\xc7\x4a\x40\xca\xe4\xb7\xd5\x47\xe0\x6f\x15\x28\xcb\x5a\xb3\x5a\x69\x6c\xe9\x3f\x90\x1f\xf5\xa0\x21\xb4\x01\x5d\x8a\xf6\x22\xc4\xd2\xaf\x20\xa3\x7f\x1d\x7c\xb4\x0f\x67\x52\x0d\x5c\x88\x12\x59\xf1\x7e\x90\x9d\x41\xaa\x74\xd5\xed\x25\xd1\x3e\x6a\x1c\x76\x88\x98\x4f\xa4\x4e\x07\x22\x0f\xa6\x12\x49\x4d\xda\xe4\xf8\x68\x26\x61\x3f\x6b\x23\xec\xbb\x6c\xc5\xe8\x40\xd7\xec\xae\xba\xd6\x8b\xbd\x86\xd9\x8d\xb2\x6d\xae\x6d\x14\x96\x6e\x4a\xf4\x60\xf5\x28\xd7\x31\x30\xd0\x51\x57\x13\x0b\xad\xf1\x6c\x9a\xb3\x78\xeb\xfc\x95\x0b\xe0\x00\xfb\x47\xbd\x1d\x24\x51\x6f\x28\xf5\x4b\x97\x00\x36\xb4\x2c\xba\x75\x94\x7d\xbb\xf2\x4c\x65\x6b\xad\x1e\xde\x30\xb0\xae\xbd\xce\x97\x35\x74\x9a\xe6\x35\x4b\x80\x53\xc7\xd6\x5d\x65\x59\x82\xb3\xc7\x1b\xa5\xc4\xea\x64\x6b\x9b\xbb\xa6\x76\x4e\x77\xa2\x6b\xd5\xa2\xf8\xaa\x58\xa6\xa6\x47\xfd\xae\xde\x66\xa2\x24\x93\x6b\xb6\x6c\x69\x7e\xb0\xd9\x62\x0f\x0f\x1d\x50\x2f\x55\xf7\x95\x4e\x54\xb5\x2b\xa9\x88\x7f\x4a\xa1\x6d\x74\x2c\x9d\xe6\xdc\x18\xd6\x83\x63\xd2\x3a\x28\xac\x4e\x20\xd1\x01\x85\x89\xad\x64\x1c\x20\xc1\x02\x5a\x6e\xd1\x1a\xa7\x07\xb4\x68\x72\x73\x2a\xa3\x7b\x2b\xb9\x0b\x58\x6f\xa9\x64\x34\xc2\xd1\x40\xe5\xf7\xa9\x17\x23\x7c\xdf\xe7\x9e\x75\xf3\x47\x81\x89\xef\x1e\xb8\xc2\x64\x16\x59\xcb\x6a\x31\x9e\x5a\x77\xfd\x95\xf3\xe7\x0d\x0c\xbc\xba\x60\xc7\x9c\xf0\xdb\xf0\x49\xbe\xd9\x3d\x2b\x7c\xce\xf0\xe2\xe1\x1b\xae\x5c\x71\x7b\x97\xd5\xa0\xad\x1b\xb7\x5b\xfd\x56\x36\xd4\xde\xda\xd7\xbd\x38\x3b\xb8\xb4\xbd\x63\x45\x03\x56\xca\xdc\x7b\xd9\x50\xfb\xe6\xf3\xbf\xaa\x1c\x90\x2d\x8d\x91\xe1\x1b\x7a\xa4\x5a\xc2\xe1\x7b\x3b\xd7\x77\xcf\x59\xb7\x78\xde\xbc\x3e\x47\xcc\xe7\x99\x42\xd1\xd4\x15\xdb\x3a\x67\x85\x62\xb3\x24\xa7\xbb\xc9\x66\x31\x88\xc2\xa5\xb3\xfc\x91\x70\x1b\x6e\x58\x12\x31\x74\x85\x1b\x9d\xae\x5a\x6f\x4f\xef\xfc\xd5\x8b\xeb\x2a\xf4\xa2\x5b\xd0\x55\x08\xc9\x91\x0e\x1d\x08\x97\xd6\x29\x9e\xe1\xdd\x4e\x4e\x6f\x10\x97\xd3\x2d\x57\xd4\x56\xaf\x71\x4c\x6f\x32\x2b\x44\x33\x09\xb7\x2b\xe3\x2e\x35\x96\x96\xdf\x25\xbb\xca\x2d\xa7\xdb\xb0\x52\xf6\x64\x34\x52\x8d\x6b\x38\x2b\x6c\x20\x42\x6d\x4f\xf2\x60\xc3\xda\x95\x57\xfb\x3b\xfd\x80\x7b\xb2\x3d\xb2\x00\x20\x72\xed\xa1\xde\x75\xe7\xed\x38\xb7\xb3\x75\x96\xbd\xd1\xee\xe4\xad\x1c\xc3\xca\x0d\xad\x5b\x45\xbc\xfa\x85\xa1\x6b\x25\x8e\x69\x8f\x2e\xe6\xac\xc4\x20\x72\x4e\xab\x37\xb2\x64\xf0\x92\xcb\xee\x79\x64\xf7\x9e\x9e\x5e\x97\xcd\x5e\xc3\xae\x95\xc4\x32\x8d\x3a\x1b\xc4\x78\x1d\x30\x3c\x61\x00\x8b\x59\xa3\xb1\x46\xbc\x46\x88\x72\xbf\x57\xdf\xda\xbb\xac\x3b\xd8\xe1\x93\x82\x8d\xbe\xce\x39\x8b\x3f\xb5\x7c\xf3\x91\xb5\xdd\xf3\x9c\x21\xc0\x64\xad\x89\x08\x38\x22\xf0\x1e\x0b\x98\x39\xab\x97\x6f\x32\xcb\xea\x2d\xdf\xbf\x6c\x28\x36\x77\x4e\x57\x20\x18\xeb\x18\x1c\xda\x33\xfc\x00\x2c\x3d\x51\xd3\x78\xea\xc6\xe2\xbb\x91\x10\x32\x95\x7c\x38\xaa\x39\x05\xee\x44\xc7\x75\xc4\x88\xca\xba\xdb\xab\xf6\xe1\xff\xf0\x7e\xf5\xf3\xaa\x39\x42\x31\x2a\xe2\xf7\x51\x8f\xe8\x8a\xf4\xf4\x33\x2a\x3a\xf3\xb9\x0f\x9f\xb3\x32\xad\x2d\x77\xa9\x2f\x02\x9b\x1d\xd8\x58\xc6\x34\x84\x3b\x4a\x49\xb5\x9c\x24\xe2\x4c\x47\xcf\x9a\xa1\xe2\x66\xb0\xac\x92\x61\x54\x1b\x87\x6b\xa7\x3e\x59\xc0\xa3\x90\x69\xbc\x64\x2b\x4a\x20\x64\x84\x28\x34\x52\x7f\xef\x8e\x12\x8e\x69\xd8\xad\x8d\x14\xfd\x00\x67\xd8\x32\x9f\x83\xf0\x25\xea\x2f\x71\x8b\x74\xea\x94\x94\x96\x9e\x93\x24\x96\xd3\xb6\xa7\x9e\xdf\xbc\xd9\xef\xdf\xbc\xd9\x0f\x7b\x9f\x7d\xb6\xa7\xe7\xd9\x67\x7b\xc8\xaf\x0b\x47\xf2\x9f\x2e\x24\xc8\xb7\xe8\xb5\xaf\xa6\xb5\x6b\xa5\xe7\xa4\xb4\x76\xad\xf4\xdc\xdd\xf4\xa4\x7f\xb3\x3a\x49\xaf\xeb\x79\x36\xbf\xb1\x70\x04\xfb\x0b\x09\xaa\x7b\xc8\x96\xe4\x7f\x1b\xf2\xa0\xa5\x15\x16\xf6\xa0\x5d\x5f\xe2\x95\xc2\x72\xec\x0e\x91\x89\x84\x74\x87\x08\xfa\x1b\x6a\xe0\xf4\x85\x9f\x3d\x19\xe9\x23\xfd\xd0\x07\x14\x1e\x23\x51\x0e\xf6\x56\x7f\x02\xca\xa7\x05\xe3\xf7\x8d\xac\xee\xda\x0f\x43\x06\x59\x0c\x5a\xa2\x44\x5b\x94\x6a\x2b\xd9\x2c\x89\x5a\x82\xa2\x6c\x88\x78\x01\x18\xa3\x2c\x3c\x27\xf7\xd7\x8e\x45\xbc\x0c\xf2\x46\xf4\x58\x00\xac\x00\x32\x7e\xdf\x28\xe4\xff\x8d\xee\x32\xb9\x49\x64\x75\x8b\x46\x02\x30\x7a\xf4\xe8\xa8\xf6\x07\x40\x8c\xa2\xdb\xea\x8d\x40\xd6\x90\x76\x75\xd4\x36\x08\xcf\xc9\xde\x9c\x0e\x20\x50\x96\x61\x96\x94\x70\x18\xb4\x81\x48\x5b\xda\xf7\x41\x8a\x82\x6f\x8a\xc4\xe9\x70\xb9\x75\x23\x44\x81\x05\x53\x17\x29\x23\x99\x82\x7f\x81\x36\xb8\x13\xce\x1d\xc1\xa9\xa4\xd4\x18\x60\x38\xf4\xa2\x7a\xfc\xe4\x15\x97\x74\xcb\xc6\x76\xc7\x68\xef\x75\xdf\xde\xb1\xe7\x37\x77\x5c\xfc\xb5\x03\xeb\x5b\x87\x97\xfa\x0d\xd8\x82\x39\x7b\xe2\xe4\x63\xf7\x3d\x76\xe8\x92\xde\x25\xa2\x21\xec\x4e\xc7\xfb\xd6\xd6\x6c\xb1\x33\x2f\xaa\x45\xf4\xd0\x15\x54\x4f\x1b\xb8\x60\x51\xc3\x97\xa2\x5d\x87\xde\x3d\x7a\xe5\x8f\xf6\xcf\x19\xd9\x77\xf3\xbc\x1d\x9f\x0e\x58\x02\xfc\x2c\xce\xed\xe8\x3d\xff\xbe\x9f\x3f\x7c\xd3\xe7\xff\x7c\x6e\x6f\x68\xf7\x79\xf5\xf1\x81\x2b\xd7\x2c\x9e\xad\x6e\x5c\x78\xc9\x7a\xd8\xfb\x87\x93\xba\x15\xa8\x5c\xb7\xa1\x0a\xb9\xbf\x58\x3b\x49\x27\x07\x2b\x54\x8e\x0e\xbe\x1f\x58\xb9\xd0\xb4\xf8\xe1\x7c\xeb\x1a\xb7\xb1\xcd\x79\x71\xcf\x57\x7f\xbf\xf0\x86\xaf\x8d\xee\xf8\xea\xbe\xf3\x5b\x97\x2f\x15\x9c\x8c\x89\xe5\xec\xf1\x9f\x3e\x72\xef\x23\xb7\x8c\xf6\x68\x95\x73\xa5\x66\xf7\xae\xf1\x6c\xf6\xd8\xbf\x5e\x19\x63\x7c\xfd\xba\x86\x2f\x46\x3b\x21\xfa\x9b\xd5\x0f\x5c\xb7\xb8\x6b\xe4\x86\x8f\x0e\x6c\xff\x54\x80\x35\x89\x6d\x76\xb7\xdc\xb7\xee\xe8\xab\x0f\x7d\xe4\xd1\xb7\xcf\xed\x69\xd8\x7d\x6e\xfd\xec\xb9\xbb\x56\x9d\x33\x5b\xdd\xbc\xf5\xfe\x52\x20\x72\xd9\xb6\x55\x4b\xe5\x35\x04\xc9\x68\xd0\x99\x10\x0b\x70\x02\x71\x77\x46\x2b\xb5\x4d\x13\x74\xc2\x89\x54\x28\x15\x72\x86\x9c\x09\x67\xa2\x5a\x42\x25\xf7\x72\xea\xd1\x9f\x93\xda\x59\x6b\xd2\x5b\x6e\xbf\x7d\xcb\x86\xde\x1d\x97\xde\x3b\x36\x3e\x3e\xf6\xd9\xe7\xe1\xbc\xcb\x2e\xbb\xfc\xf2\xcb\x2f\x07\xa9\x52\x86\xc5\x7b\xbc\x91\x83\x9e\x64\x3a\x74\xc7\x8f\xee\xe8\xde\xb6\xf5\x0d\xf5\x7b\x6f\xbc\xbc\x47\xcb\x76\x39\xfe\xe8\x34\xe9\x56\x9b\xff\x3e\x63\x44\xec\x05\x05\x2c\x60\x07\xae\x20\xc5\x0e\xb8\x79\xea\xca\xed\xa0\x3d\x8c\x64\x82\xa9\xa0\x2b\xec\xd4\xc4\xb0\x50\x2a\x91\x4a\x38\xd9\x07\xfe\x4d\xfd\xf6\x4b\xf7\xaa\xef\x3e\x7b\xf5\xd5\xcf\x82\xed\x5e\xf0\xbf\xf0\xc3\xdd\x5f\xbc\xe1\xe4\xf5\xd7\x9f\xbc\x61\xd5\xe1\xf3\xe7\xd5\x73\xea\x08\xfe\x8a\x85\x6c\x39\xf9\xf2\xc9\x93\x2f\xe3\x2b\x5e\x52\xbf\xf5\x75\x2d\x23\xb4\x80\xed\xd9\xab\x73\xdf\xd9\xb5\xf7\xd5\xc9\x57\xf7\xc6\x16\xac\x5b\x16\x9a\xec\xef\xd7\xf2\x9c\x3c\x59\xd2\x21\x2a\x2c\x42\x16\xe4\x43\x6d\x74\x25\x48\xa9\x4b\x79\x77\x3a\x93\xb0\x87\x1a\x1d\x22\x6e\x88\xe1\x64\x1f\x8e\xfb\x01\xec\xfa\x17\x1c\xb2\xc7\x5d\xce\x60\xf2\xb4\x11\x9d\x20\x50\x94\x2b\x3f\xbe\xb4\x45\xc0\x0a\x46\x2d\x4b\xf7\x1f\xdd\xbf\xb4\x45\xdf\xe0\x96\xd1\xa3\x13\x8a\xf6\xdd\x31\xca\xd1\x3f\x46\xbc\xef\x53\x8d\x03\x8f\xbc\x11\x50\x46\x20\x77\x68\x38\xec\x50\xc7\xdf\xbc\xfd\xae\xbd\xcb\x96\xed\xbd\x4b\xdf\xa8\x2d\x18\x69\x17\xa8\xf4\x97\x64\xcb\x7c\x41\x91\x02\xd6\x00\x83\x88\x82\x84\x62\x94\x0c\xc5\x33\x48\x04\xe3\x0c\x92\xd5\xac\x9c\xd4\x7e\x28\x59\x12\x39\x9f\xa6\x65\xc8\xc9\xc9\x22\xce\x03\x20\x06\x91\xac\x7e\xad\xce\xf5\xad\x3b\xf9\x33\x48\x67\x59\xa2\x99\x65\xc8\x01\xf5\x95\x90\x75\x87\x7c\xfd\xda\x2c\x52\xb0\xc2\xd0\xe7\x16\x98\x75\x0b\xd0\x06\xda\xca\xbe\xfc\x20\x26\x5b\x79\x1f\xb9\xc8\xa7\xac\xe0\x2c\x53\x51\x66\x1d\x48\xd0\x0d\x38\x4b\xcb\xac\x3f\x0b\xdf\x5f\x2e\x7c\xa4\xf0\xdc\xe9\xb1\x35\x75\x08\x25\x82\xd4\x37\x32\x6c\x0f\xda\x67\x98\x5b\xc7\xf0\x48\x5e\x91\xd9\xcb\xf2\x0a\x1e\xd1\xa9\xb3\x4b\xf3\x1d\xa3\x4c\x8c\x09\x72\x80\x19\x99\x50\x64\xe6\x85\x4a\x1e\x12\xad\x7f\xe6\x18\x1d\x7b\xae\xb6\xba\x55\xa5\xaa\x76\x9a\xde\xc6\x91\xaa\x66\xfb\x45\x45\x4b\xcc\xd0\x86\xf4\x39\x18\x9d\xfd\xdd\x4d\xbb\x51\xe1\x5a\x82\x0a\x65\x3c\xcb\xbb\x23\xd5\xcf\x2d\xc7\x13\x7b\xd1\x9c\xca\x95\xa9\xcb\xcd\xb8\xfd\xb8\x1b\x53\xdb\x77\x38\x2d\x3b\x38\x1e\xf1\x22\xd3\x8a\x69\x60\x41\x23\xb5\xe2\x16\x68\xa2\x74\x45\x79\x5b\x17\x8c\xde\xd2\xb5\xe8\x9a\x04\x40\xe2\x9a\x45\x5d\x9f\x87\x73\xba\x5a\x37\x2f\x56\x6f\xdd\x60\x9a\xdb\xda\x9b\x76\x03\xb8\xd3\xbd\xad\x73\x4d\xeb\xd5\xcf\x37\xf4\x5d\xbe\x6a\x29\x9b\x9b\xbb\x89\xcc\x99\x7c\x93\x7a\xe1\x7b\x67\x47\xfe\xbe\xa5\xa5\x63\xf6\xec\x8e\x96\x1b\x7e\x1d\x85\xb5\xcb\xef\x4a\xa8\x13\x59\xbe\xa3\xae\x51\x92\x1a\xeb\x3a\xf8\xec\x3b\x9e\x96\x23\xfd\xcb\x76\x6c\xa4\xef\xfc\x49\x0e\xb1\x97\xd2\xb8\xbf\xd6\x02\xbe\x85\x4b\x77\xd5\x4d\xa6\xe3\x2e\xaa\xd1\xd7\x29\xea\x9d\xf6\xa0\x64\xeb\x80\xa0\x33\x44\x43\x2c\xe1\x02\xf5\x6b\xb0\x09\x2e\x5a\x8d\x57\x6e\xbd\xe8\x73\x5b\x99\x3b\xd5\xaf\xaf\x58\xdb\xbf\xc6\x69\x56\xbf\x8e\x01\x60\x31\x76\xb4\x2c\xba\xa8\xff\xf1\x97\xc8\x9d\x93\x41\xf2\x9f\x10\x5f\xbc\x79\xf3\xe2\x25\x17\x5e\x38\xf9\xab\xfc\x8f\xb0\x74\xf1\x9e\x05\x09\x7f\x22\xff\x1a\xdc\x09\xef\xce\x9a\x75\x57\x60\x56\x67\xfd\x6f\xa7\xe3\xeb\x27\xe9\x9c\x48\x39\xfd\xa3\x91\x74\x3f\xa4\x13\x2e\x37\x1d\xb7\x30\x9d\x3b\x38\xbe\x4a\xcd\x4f\x49\xff\x5d\x1c\xba\xfe\x45\xf5\x77\x9f\xfa\x82\xfa\xe3\xcb\x78\x30\x1c\x32\x59\x6d\xfc\xe2\x57\xf6\x14\x99\xff\x37\x7f\x65\xe1\xa1\x0a\xcd\xfc\x8d\x97\x80\x7c\xe4\x53\xe0\x7b\x91\xf8\xd4\x1f\xa9\xbf\x7b\xf1\xfa\xbb\x0f\x9a\x6a\x0c\xb7\x19\xb1\x69\xd3\x8e\x02\xf1\xff\xa2\x81\xdb\x2a\x34\xf7\x1f\xd9\x76\xc5\xf5\x2f\x22\x40\x4d\x53\x4e\xee\x4f\xec\xcf\xd0\x2e\x84\x82\xd3\x40\x6b\x79\xae\x21\xea\xe7\x9c\x0e\x5e\x64\x0b\xc7\xfa\x18\x1a\x0e\xcd\xba\x0b\x5d\x28\xc6\xa5\x92\x99\x3e\xb6\xa0\x3b\x12\x19\x1a\x5a\xc2\x46\x5d\x0e\x2b\x14\xb1\x60\xff\x14\xbe\x84\xf2\xee\xde\x1b\x69\x9d\x42\xfb\xc5\x26\x11\x3b\x19\x1b\x63\x20\x3e\x52\x6b\xf6\x4a\x5e\xa1\xc9\xa7\xee\xf0\x19\x8d\x2e\xb3\x9f\xf8\x23\x26\x9b\xdd\x64\xe7\x1c\x58\x14\x61\xc3\x4c\x59\xe1\xd8\x0c\x59\xf7\x03\x6a\x4d\x25\xa3\x70\x49\x38\x15\xbe\x34\x1c\x86\x4b\x1b\xd3\xa9\x56\x40\xfb\x45\x11\x3b\x38\xbb\xc9\x6e\x33\x45\xfc\xc4\x6f\x76\x19\x8d\x54\x53\x26\x78\x25\xaf\xb9\x96\xf8\x88\x81\xb1\x31\x4e\x2c\x36\x69\xcf\x3a\x3d\xab\xba\x63\xa6\xac\xfb\xa7\x50\x6b\x58\xbd\x37\x5a\xc6\xf0\xd0\xfd\x89\x83\xa8\x99\x5a\x36\x06\xcb\xb1\xd5\x25\x61\x4e\x4e\xc7\x80\xe3\x89\x48\xfd\x3d\xd2\x99\x74\xa4\xb1\x2a\x47\xd1\x23\x0e\x6c\xbc\x6e\xf7\xb1\x17\x99\xdf\x41\xa1\x2c\xc8\x60\xd6\x37\xff\xd8\xc6\xd5\xc6\x63\xfc\xb6\x9e\x8d\x36\xc7\xf0\xfd\xb7\x39\x6c\x6d\x78\x33\x3d\x93\x7f\x9e\x6e\x70\x21\xdf\xe1\x8f\xc9\xa1\x53\x37\x87\xe4\x8f\xdd\xf1\x2e\x0c\xc1\xa5\x30\xf4\xee\x1d\x40\xcf\x0c\xe2\x02\x3d\xf2\x71\xd8\xef\x6d\x17\x6b\xbd\xea\x8d\xec\xd2\x9e\xa5\xb7\x35\x0d\x2f\xed\xb9\x52\xd4\x73\x3c\x4f\x37\xbb\xf5\x7c\x39\x75\xe2\xd7\x75\x75\xbf\x02\xee\x6b\xda\x4d\xee\x78\x57\xfd\x4a\x09\xbb\x91\xd6\xdd\xa5\xcd\x7f\x28\xc0\x68\x6b\xca\x7a\xe0\x39\x3e\xad\xa3\xd1\x37\xa6\x6d\x11\xa6\x0c\xc6\x15\x6a\xa8\x46\xe3\xa2\x20\xd1\x43\xea\x0e\xf5\x81\x93\x77\xde\x78\x6e\xad\x27\x76\xec\x86\xd6\xae\x05\xbd\x3f\x81\x2d\x27\x4f\xc2\x8a\x0a\x8c\x2e\xd6\xea\x39\x0d\xa4\xeb\x5d\xf8\x14\xbc\x05\x9f\x62\x94\xc3\x6f\x1f\xda\xf9\xfc\x92\xf8\xc8\xfa\x15\xfd\x97\x46\x38\xc3\xe1\xb7\x41\x7a\xfb\x87\x65\xe0\x2e\xa7\x7d\x06\xdc\xae\x7f\x83\xe8\xe3\x8f\x97\x75\x10\x08\x39\xd0\x1c\xb4\xb5\xb2\x16\xa5\x3a\x24\x23\xda\x5b\xf8\x00\x14\x05\xf8\x60\xfc\x04\xa7\x83\x23\xe7\xa9\x2f\xaa\x7f\x7f\x60\x74\xe4\xc2\x50\x83\xaf\x2d\xb5\x6c\xf0\x13\x60\x7a\xe0\x81\xfc\xa7\x61\x3f\x2c\x38\x71\x16\x74\x05\x76\xce\x87\x42\x55\xb8\x83\x51\x76\x3c\xb5\x7d\xe5\xb1\xce\xce\xd5\x0e\xb9\xde\x24\xee\x78\xea\x27\x4f\xbd\x75\xe8\xed\xb3\x40\x2d\x4c\xfc\xf3\xec\x28\x0b\x37\x5c\x7b\x12\x01\x82\x29\x44\xf6\xb2\x0a\xc5\x7e\x76\xf1\x85\xf0\xa6\x8c\xcc\xea\xc6\x89\x82\x33\xbc\xd3\xc1\x93\x70\x3a\x11\x27\xbb\x25\x73\xfe\x77\x42\x1d\x63\xb2\xdb\x99\x1f\xa8\xa3\x8c\x41\x12\x24\xf6\x7f\x31\x1e\x1b\x9c\x23\x7b\xd9\xc7\xe1\x76\x03\x23\x93\x1f\x3b\x3c\x13\x37\xd4\x60\xd6\x67\x23\x4d\xdb\xc0\x6c\xf5\x90\x2e\x51\xaa\xb1\x1b\x4c\xea\xec\xcd\xb8\x92\xfb\x63\xcd\x74\x7d\x68\x37\xa4\x82\xce\x44\x35\x39\xf2\x8c\xc7\xa8\xe1\x36\x34\x9d\x3c\xa3\x15\x9c\xc1\x02\x8a\x20\x8f\x3a\x9b\xf4\x90\xc2\x11\x15\x51\x8d\xec\x8c\x7b\x43\x49\xac\xef\xd3\xc0\xc3\xa6\x11\x8c\x92\x43\x23\x4d\x9d\x95\xe1\x88\xb9\x5c\x31\xf7\x0c\x7b\xc9\xa1\x5c\xf1\x5a\xed\x68\x6e\x28\x99\xeb\x2c\xcb\x26\x39\x24\xa3\xe5\xe8\xbc\x82\x5c\x54\x74\x78\x77\xc5\xd3\x29\x7b\x3a\xae\x6b\x19\xb5\x65\x13\x57\x34\x05\xc5\x20\x1a\x83\xaa\x5d\x3a\x99\xe9\xb8\x04\x69\xa4\xcd\x1a\x7e\x70\xbb\xc0\x19\x69\xe0\xe9\xed\x88\x72\xec\xa5\x63\x91\x64\x64\xd9\xd6\x65\xc1\x3e\x12\x94\x05\xb3\x65\xf6\xba\x39\xf3\xaf\x6d\xe5\x9d\x8c\xd9\x2e\x99\x19\x27\xdf\xba\xe7\xd6\x3d\x74\x57\xb2\xd3\xdd\x6b\xe7\xcf\x59\x37\xdb\x62\x16\x64\x68\x47\x53\xb0\xe6\xdb\xb7\x83\x30\xfe\xd9\x20\xe4\x51\x4b\x5b\x4b\x24\x19\xc1\xcf\xe6\x4f\xec\x38\x76\x6c\x87\x26\xc2\xc4\x97\x2d\x8b\xe3\xf9\xe6\x88\x20\x9b\x62\xb1\x25\x3d\xa6\x46\xce\x6e\xe7\x1a\x4d\x3d\x4b\x2a\xd3\xb1\x98\x49\x16\x58\xfc\x75\xb0\xdf\x3a\x7c\xe4\xb7\xb7\x61\xfc\xf2\x66\x8c\x37\x6b\x42\x29\x53\xb2\xab\x18\x90\x07\xd5\x6a\x2b\x10\x36\xa8\xdb\x52\x82\xa7\x29\x4b\x82\xa5\x18\xee\xde\xe9\xa4\x28\x54\x7b\x4f\x10\xa1\x36\x0e\x55\x01\x24\x0b\x79\xaa\xcd\xc4\x39\x41\x06\x04\xad\xea\xab\x18\x95\x8d\x2d\x9d\x4d\x4c\xb6\xa9\xd3\x69\xd5\xe6\x02\x05\x2b\x9d\x4d\x30\x06\x81\x12\x56\x6c\xfe\x32\x68\x55\xd7\xe4\xe9\x3b\x1f\xd3\xd5\xf4\x9d\x4d\xea\x37\x04\xab\xba\x83\xaa\xea\xf5\x77\x47\xb9\x60\x6c\xa8\x09\x6d\xa0\xb6\x49\x1a\x56\x5e\x58\x33\xf9\xc1\x5d\x88\x6a\x70\xe8\x4c\xd9\x89\x34\x5d\xef\x66\x1c\xbc\x88\xcb\x68\x23\xda\xca\x90\x06\x6c\xd1\x37\x57\xfc\x8b\x61\x1d\xb8\x37\xee\xc7\x78\x5c\xf6\xca\x97\x26\xb5\x72\xc5\xb7\x0c\x8e\x2d\xb8\xe2\x96\xdb\x6e\xb9\x62\xc1\x7c\x53\xb3\x49\x11\x7e\x27\x28\xa6\x66\xd3\x7c\xe5\xa2\xf6\xee\x1e\xa6\xa3\xa6\xa6\x5d\xe8\x8f\x39\x86\x37\x0e\x3b\x62\xfd\x42\x7b\x4d\x4d\x07\xd3\xd3\xdd\x7e\xd1\x79\x77\x7f\xfd\xdb\x5f\xbf\xfb\x3c\x42\x35\xaf\xb1\xb8\xec\x95\x03\x43\xc9\x73\xf6\x2e\x6f\x6f\x5f\xbe\xf7\x9c\x6d\xcb\xcd\x6d\xe6\x4f\xdc\x7d\xf7\x27\xcc\x6d\xe6\xe5\xdb\x3e\xb9\x6b\xf6\xd0\x55\x71\x5f\x3a\x5c\x5b\x1b\x4e\xd6\xb9\x3d\xb1\x78\x5b\x32\xd9\x16\x8f\x79\xdc\x75\x49\xed\x58\xda\x17\xbf\x6a\x68\xf6\xae\x4f\x6e\x79\x7c\xd7\xdc\xb9\xbb\x1e\xa7\xe3\xbf\x8e\x3d\xeb\xa5\x31\x28\x54\x4d\x5d\xb6\x0d\xe9\x3c\x92\xd4\x5d\xc2\x56\x81\x4b\x19\x29\x07\xaa\xeb\x70\x66\xc2\xa9\x31\x59\xb0\x58\xd4\xef\x1a\x8d\x90\xa5\x54\x91\x23\x82\x5c\x40\x99\x3c\x35\x46\x51\x7e\x47\x74\x14\x49\x18\xc9\x09\x72\x4e\x90\x4d\x90\x35\x0a\xa2\x96\x5b\x16\x72\x32\x0e\x16\xc1\x22\xa9\x6a\xb9\x04\x09\x59\xc4\x08\xa4\xdc\x44\x29\x1a\x03\xdc\x5a\xb6\x00\x15\x6d\x59\xf1\x0c\xa4\xd9\x0f\xb0\x2b\xb3\x48\x12\xc7\xe9\x8d\xc7\x05\xd9\x08\x23\x46\x9f\x11\x36\x99\x70\xd1\xda\x7c\xfb\x35\x18\xda\x5e\xf9\x14\x90\xee\x45\x9b\x46\x8f\x36\xdf\xf8\x08\x1e\x11\x25\x18\xa1\x76\x9e\x31\xca\x80\x39\x66\x34\xc2\x26\xcb\x2b\xd4\x06\x7d\xe3\xeb\x19\xbf\xf0\x0a\xb4\xfd\xdb\x5d\x7d\x47\x47\x87\xfa\xea\x4f\x9e\x5e\xc6\x28\x75\x5c\xd6\xf1\x29\x4a\x7e\xb8\x89\x02\x22\xc4\x19\xcb\xa8\x3d\xc6\x67\x54\x1f\x34\x55\x14\xf6\x03\xca\x38\x26\x6a\x35\x31\xaa\x0f\x5a\x2c\xa2\xa4\xd2\x36\x86\x11\x59\x7d\xe7\x0c\x85\x44\x95\x1c\xe9\x3c\x5a\x87\x46\xca\x16\x1d\xb6\xe4\xab\x41\x32\x5c\x1d\x50\x90\x02\x1d\x94\x20\x95\xcc\xb8\x02\x19\x57\x1d\x05\xdf\x2d\xa2\x99\x45\xe9\x70\x34\x6d\x3f\x12\x4d\xa6\x63\x38\xea\x67\x4a\x8e\x1d\xba\xa9\x97\x89\xe8\x6e\x1b\xe6\xf0\x9c\x1d\xf3\x5d\x73\x16\xee\x1c\xdb\xb9\xa8\xab\xe6\x20\x2c\x3c\x58\x33\x7a\x34\xd0\x39\xdc\x19\x18\xda\x31\x44\xb7\x0b\xba\x01\x18\x93\x61\xfe\x8e\x39\x61\xb3\x9a\x2b\xb8\x71\xfc\x82\x9a\xb0\xf7\x5d\x77\xdb\x6d\xd7\xcd\xdf\x7f\xf4\xaa\xf5\xd6\xe4\xfc\xe7\x1d\x5b\x7b\x87\x77\xee\x1c\xee\xdd\xea\x78\xbe\xaf\x7e\xc7\x8e\xfa\xbe\xec\xd1\xd1\xf3\xea\x5a\xb4\x8f\xbb\xa5\xee\xbc\xe4\xd0\x50\xb2\xbc\x37\x7f\x4f\x83\x69\x6e\x7d\xb2\x45\xb6\xae\xbf\xea\xe8\x7e\xf2\xb3\x82\x43\x47\x29\xb6\x5c\x6f\x8b\xa5\x65\x49\x2f\xe3\xe0\x78\xbb\x83\x09\x34\xf6\x82\x1e\xf7\x9b\x88\xbb\xa9\xd9\x87\x7e\x11\x76\x87\x2b\x90\xd6\x7d\xf1\xa9\x4e\x48\x7f\x7b\x76\x07\xc7\x3b\xf5\x33\x54\x92\x88\x97\xc2\x16\x16\x75\xe9\xf0\xd1\x0f\xbf\x1e\xf1\x72\x26\x7b\x4f\x28\x35\x38\x98\x0a\xd6\x9f\x00\xc3\x89\xfa\xa0\x96\x0e\xf5\xd8\x4d\x9c\x37\xf2\xfa\xc3\xda\xa1\xae\x45\x3b\xc7\x76\x12\xdd\xe9\x20\xdb\xb7\xd9\xa9\xee\x3e\xfe\xc6\x1b\xc7\x0f\x3a\x7e\x76\x17\x85\xd4\xf0\x37\x0e\x8e\x0e\x4a\xea\xe5\x54\x7b\x77\x8f\x34\x38\x3a\xd8\xe8\xc7\x11\xaf\x8a\xee\xfa\x99\xe3\x20\x3d\x78\xd8\xb9\xb9\x6f\x78\xe7\xce\x02\xd7\xa7\x6e\x57\xd5\x56\xb3\x61\xdd\x37\x8a\x2d\xc3\xa3\xdb\x83\xf6\x44\xc9\x15\xaa\x80\xa1\x9e\x28\x7a\x44\xa9\x63\x14\xd5\x91\x19\x9b\x44\x8a\xee\x02\x85\xd1\xc1\x0d\xd9\xec\x86\x83\x8c\xa2\x28\x13\xe8\xe0\x06\x92\xdd\x70\x70\x02\xb1\x48\xf7\x7c\x1a\x9f\xcc\x6d\x38\xc8\xa2\x83\x08\x57\xc4\x88\x25\xaa\x22\xc4\x3e\x7c\x54\x18\xc9\x7e\xc8\x40\xb0\x0f\x15\xf8\xa5\xcb\x86\xd9\x82\x6c\xdf\x40\xdf\x34\xad\x2c\x04\xf5\x4e\x8f\x6c\x9a\x2c\x31\x4d\x83\xc0\x29\x3b\x87\xb3\xd9\xe1\xf7\xdf\xe5\xd1\xd1\xd1\x09\x34\x7a\x94\xcf\xbe\x71\x3c\x7b\x70\x43\x3e\xbb\xe1\x60\xc4\xcb\x28\xc7\xc9\xac\xb1\x9d\xaa\x92\xcf\x8d\x1e\x3d\xca\x18\xd5\xef\xbd\x11\xd0\xda\x0b\x8f\x7b\x23\x95\x58\xe8\xed\x68\x40\x97\x06\xf8\x52\x84\xa9\xde\xa5\x68\x97\x71\xe9\xd8\x2b\xd3\xd3\x6c\x29\x67\xa8\x92\x77\x75\x51\x17\x05\xfe\xef\x5a\x54\x09\xa3\x10\x49\x46\x08\xa2\xc7\xc7\x05\xf9\xc4\x41\x40\xde\x08\x9b\xcb\x2b\xbd\x5b\x1d\x93\xef\x69\x1f\x01\x31\x3b\xb6\xf6\x62\x1d\x1e\x76\x84\x3a\xe3\x8d\x55\xa7\xdf\xa7\x9c\x19\x18\xc9\x02\x09\x1c\x3c\xa1\xdb\x7d\xf5\xf8\x15\x19\x79\x0b\x18\xb8\xab\x28\xa3\x81\xb3\xda\xc8\xce\xdb\x83\x91\x28\x44\xa0\x30\xc3\xdb\x61\x1a\xbc\x4c\x24\xc5\x56\x59\x01\xab\xad\x82\xec\x09\x5f\x53\xc9\xf2\xae\x34\x8d\xf8\x0e\xc2\xb5\x26\x8b\xfa\x43\x0b\x6c\xa1\xee\x0d\x08\x90\x24\x16\x21\x67\x44\x09\x8f\x17\x53\x95\x47\x25\x91\x39\xe8\x1b\x69\x9a\x50\xb4\xbb\x70\xd4\x0a\x3f\x5f\xbd\xb5\xce\x02\x5d\x96\x53\x12\x83\x34\x71\xe0\x14\x22\x23\x45\xa3\x91\x38\x56\xb6\xee\x4d\xa1\x72\x1a\x39\x2a\xf0\xeb\x4f\xb7\x25\x7d\x11\x7d\x07\xfd\x14\xfd\x27\xfa\x0b\x9a\x02\x2b\xd4\x43\x3b\xf4\x9e\xce\x5b\x9d\xaa\xda\x67\xab\xf6\xc3\x33\xf0\x54\x7f\xd0\xf9\xf0\xff\xcf\xae\x3f\x5b\xfe\xea\xfa\x82\x36\xc4\x14\xbd\x2d\x4f\xc3\x62\x02\xa5\x8c\xd2\x5d\x81\xd7\x8d\xca\xe9\xa9\x8a\x34\x39\xc3\xf1\xa9\xff\x8b\xf9\xf1\x19\x8e\x4f\x2f\x33\x28\x13\x8a\x56\x37\x0a\x8c\x85\x2a\xd9\xdf\xc7\x4b\x35\xfd\xdb\xe9\x15\xaf\x38\x96\xff\xdb\x0c\x07\xff\xf6\x7f\x30\xa3\xfa\xb7\x0f\x2c\xd9\xa9\x23\x1c\x3a\x85\xc6\x75\x01\xae\xc2\x1d\x18\x09\x1f\xf8\xcd\x7c\x1d\xfd\x12\xbd\xf7\x7f\xff\x2b\xf9\x9f\xf4\xd2\x92\x5f\x46\x45\x7f\xad\x81\x22\xdf\x40\x28\x35\xdd\xdb\xa8\x17\x12\xce\xd3\xf1\xed\x13\xc1\xd2\x0a\xe6\xff\x48\xef\xfe\xb0\xbd\x6f\x4a\x5b\x09\x67\x9b\x3a\xb5\xb4\xde\x0b\xe9\xa9\x8a\xf2\x28\x85\xfb\x15\xfb\x26\x64\x3b\x9b\x20\xd7\xd4\x09\xd9\xff\xcf\xfa\xe8\x59\x7a\xd4\xe4\x11\x46\x09\x68\x03\x76\x60\x42\xa1\xfd\x8a\xe4\xf4\x82\x8e\x8c\x94\x1c\xab\xf4\x74\x7b\xf9\xf3\x01\x7a\x85\x3a\x1e\x41\x2c\xb5\xbd\xea\x72\x9b\x0d\x79\x50\x0f\xda\x32\xdd\xfa\x4a\x21\x5c\x8b\xe2\x9c\x4c\x5f\x5f\x89\x3d\x22\x54\xa4\x90\x70\x96\xde\x66\x3c\xad\x03\x40\x4c\x33\xd0\x46\xa8\x75\x36\xad\xdb\x66\x4b\xd3\x30\x55\xbb\xa9\xcf\x83\xf2\x69\xd1\xf0\x7d\x1e\xb3\x88\x1e\x78\x5e\x12\xc7\xa9\xa9\x5b\xc7\xce\x2f\x26\x01\x45\xbc\xb9\xa2\xbd\x96\x7e\x37\x5e\xf9\x39\x39\xeb\x1d\xd3\xad\x38\x05\x15\x9e\x02\x08\xf3\xdf\xb7\x98\xf2\x4f\xd0\x7d\x12\x38\xed\x3e\x5a\x12\xc7\x26\x14\x6f\xa4\x68\xb9\x8d\x24\x23\x30\xe6\xcd\xca\xcf\xc9\xd4\x5f\x3d\x52\xc4\x96\xd0\x71\xeb\xa3\x68\x36\xea\xa7\x31\xee\x1f\xa6\xea\x1f\x4a\x2a\xa4\xab\xa7\x19\xaa\x98\xd7\xa5\x45\x85\x4a\x3f\x4c\x6e\x22\x37\x56\x96\x16\x03\x81\x0d\x07\x61\x6c\xe6\xda\xfc\xf9\x03\x85\xc8\x22\x3e\x07\xc5\x85\x9f\x83\x10\x70\x02\xf0\x21\x5d\x04\x6f\x25\xa9\x84\x3d\xc4\x87\xa2\xa9\x44\x2a\x91\x8a\xa6\x32\xa9\x50\x2a\x94\xca\x24\xdc\x09\x7b\x28\xd5\x8d\x75\x5f\x5f\x48\xb8\x59\x3f\xb8\x79\x05\xd4\x37\xd4\xb1\xf1\xac\xfa\xcb\x05\x5a\xf3\x8f\x8c\x65\xb3\x63\xb9\x91\x40\x40\xc9\xe5\x94\x40\x60\x24\xa7\xed\x53\x61\x68\x01\x84\xb3\xe3\x30\xa2\xdc\x65\xc0\xd9\x40\x36\x90\x55\xc7\x8c\xa2\x31\x00\x63\xe3\x81\x5c\xc0\xe0\x51\x3c\x86\x40\x2e\x30\x0e\x63\x01\xa3\xb6\x10\xcc\x06\x7c\xb3\x4c\x74\xfd\x90\x2d\xf8\x9f\x70\xc8\xa3\x5b\x27\x34\x31\xd7\x19\x4c\x65\x68\x7b\x46\x33\xc1\x4c\xd0\xcd\x53\x00\xee\xc1\x14\xa3\x4c\x28\x8a\x72\xfc\x8d\x6c\x00\xc6\x03\x24\x17\xc8\x62\x45\xfb\x5a\x53\x83\x6a\x36\x97\xcb\xbd\x71\x1c\xb2\x59\x45\xc9\x05\x26\xc7\xa7\x71\xa6\x26\x10\x0a\x97\xe9\x52\xab\xfc\x1e\x75\x78\x10\x8a\x7f\x78\x1a\x0e\x10\xf5\xe3\x53\x51\x99\xb7\x16\x17\x99\x53\x2b\x6d\xb7\x39\xdd\x76\xa5\xe6\x68\x37\xa2\xe6\x23\x6d\x40\x50\x73\xde\x48\x84\x7c\xb3\xca\x37\xb1\xaa\x5c\x1f\x86\xcb\x75\xa6\x72\xa9\x39\xbd\x6c\x39\xfd\x59\x7a\xa9\xb2\xd5\x25\xd3\xc9\x5c\xb3\x7a\xe9\xa6\x5f\x80\xe7\x4c\x2f\x18\x46\xed\x68\x29\xf9\x1b\x93\x40\x0e\xd4\xac\xad\x68\xab\xb9\x70\x79\x23\x30\x33\x1d\xc4\x57\x99\xe2\x26\xaf\x49\x8d\x99\x4c\xf0\xb2\xc9\x6b\x8a\x9b\x4c\xea\x1e\x38\x04\xb7\xcd\x78\xf8\x09\x9a\xa2\x47\xe0\x65\x93\x9e\x65\x8f\xba\xc7\x34\xf3\x61\x9d\x57\x0d\x2d\x25\xff\x5e\x2c\x17\x2a\xfb\xb6\x94\x39\x75\x99\x99\x0e\xe2\x55\xda\xc3\xf5\xfb\x1e\x52\xf7\xe8\x37\x85\x97\xe1\xb6\x19\x0f\xe3\xa5\x7a\x59\xe9\xde\x21\x38\x54\x28\x71\xcc\x34\xf3\x61\xad\x5c\x4b\xd1\xc7\x98\x04\xb3\x6a\x5a\x7b\x4d\xe7\x87\x90\x66\x3a\xc8\x24\xce\x56\xeb\x69\x87\xdf\x39\xad\xa8\xda\xf3\xe1\x9a\x19\x0f\x23\xbd\x5c\x4f\x30\x09\xe6\xaa\xca\xf6\xaa\xe2\x98\x90\x66\x3a\xc8\x24\xce\x5c\xdd\x19\x0e\xe3\x27\x4e\x7f\xb9\x26\x53\x5c\x2b\xd8\x0c\x87\xb5\xb1\xa8\x1d\x2d\xc5\x57\xd1\xf7\xa8\x95\xca\x08\xd5\x74\xcb\xf8\xaa\x62\xee\x69\xfd\x86\xbc\x33\x73\x63\xd1\xf1\x4d\x40\x4b\xf1\xaa\xd2\x3d\x3f\x74\x27\x38\xd3\xdb\xa6\xf7\x5c\x0a\x02\x93\x20\xab\xf4\x7b\xfe\x0b\x2f\x10\x2e\x3b\xd3\x3b\xd1\xee\xd9\xce\x24\xc8\x55\xe5\x72\x7e\xc8\xc6\x27\xed\x67\x68\xce\x82\x1d\x5a\x97\x1b\x3b\x74\xbc\xd4\x4a\x94\x1e\xdd\x96\xef\xf0\x97\x56\xe4\xc9\x3e\x48\x55\x8c\x21\x3c\x92\x85\xf7\xa9\x88\xc0\x65\xa9\x6d\x3f\x3f\x1e\x08\xe8\x24\xe9\x81\x40\x9e\x42\x24\x71\xd9\x81\x8d\x38\x40\xa8\x4c\x31\x49\x7d\x83\x97\x4e\xe4\x06\x36\x86\x57\xf4\x0a\xda\x18\x22\xf6\x0c\x47\xca\xee\x68\x15\x3e\x20\x56\x1a\xb1\xae\x8d\x6d\xd3\x2d\x0d\x21\xa8\xc0\x9e\xd3\xca\xaa\x89\x80\x05\x99\x31\xc1\xc6\x93\xad\xd0\xe0\x48\xc0\x58\xc9\xc9\x6d\x60\x62\x4c\x16\x18\xfa\xf8\x89\x9c\x20\xb3\x23\x63\x3a\x6c\xd3\x18\xd9\x69\xb3\x8d\xd9\x6c\x80\x74\xf4\x50\x1d\xfd\x96\x8c\x94\x15\xdc\xf2\xe4\x2a\xaa\xac\x1e\x19\x09\x04\x4a\xfe\xe0\x8c\x2e\xeb\xb8\x51\xb4\x2c\xe7\x84\x67\x6c\xb5\x4a\x95\x81\x8e\xf3\xf0\xb9\x42\x0b\x08\x44\x6f\xac\x32\x16\xde\x76\xaa\x40\x18\xd7\x35\xca\x93\x5a\x09\xc8\x0b\xd3\x1c\xf5\x18\xbd\x00\x54\x6f\xe2\xd6\xbd\xd1\xcf\xf4\x74\x4c\x9b\xa0\x1b\xaa\x29\x0c\xe0\x25\x0a\x88\x84\xa6\x64\x41\x45\xb4\x8e\x48\x90\x73\x5a\x13\x8c\xc1\xac\xa1\xa4\x8a\x74\xed\x43\x72\x68\x93\x8e\x9b\x44\x9b\x40\xd7\xf7\x93\xa5\x81\x40\x60\x92\x66\x60\xb4\xdf\xca\xf9\xc7\x8c\xdc\x08\xa1\x02\x53\x6d\x1f\xe8\xc6\xc9\x12\xcb\xf3\xc7\x4b\xa4\xb4\xf7\xdc\x73\x1a\x2d\x2d\x33\x56\x41\x5a\xfb\xcc\x4c\x58\x0f\x85\x39\x3d\x48\xd9\x7f\xca\xf5\xe9\xc3\xdd\x50\x24\x3a\x2e\xd1\x90\x55\xd2\xfd\xcc\x9c\x81\xa0\x9d\xc3\xaa\x32\xbc\x73\xc5\x6d\xcf\xec\xa0\xb3\x59\x76\xf4\x68\x67\xd3\xf8\xf0\x4e\xa2\x9c\xe1\x04\xce\x6a\x87\x77\x0e\xe3\xdc\x8e\x67\x6e\x5b\x41\xa7\xbe\xa3\xa3\x81\xa6\x4e\x3d\xfb\x0c\xc7\xd1\x8c\xe5\x16\x71\xc5\x32\x27\xdd\xab\x2f\x67\x2a\x69\x8a\x3e\x38\x03\x41\xa7\x15\x6c\xe7\x30\x28\x5a\xb9\xcf\x70\x82\xc9\xe5\xb3\xd5\x25\x06\x5a\xe2\x33\x1c\x47\x14\x2b\x2f\x3b\x95\xa5\xfa\x42\x23\xb2\x53\x54\x34\xed\xfb\xeb\x2e\xc4\x1a\xe8\x38\x3a\xf1\x52\xc4\x60\x31\xba\xc0\xa1\xab\x5f\xcb\xf1\x06\x33\xe7\xd0\xbd\xf6\xb0\x38\x98\x4a\x0e\x0d\x8e\xe2\x5e\xdd\xb8\x7e\x98\x6e\x98\x3c\xa5\x0a\x18\x1d\x9c\xec\xd9\x78\x70\xe3\xc6\x83\xcc\xbb\x05\xd3\xbb\x0e\x68\x76\xe3\xc1\x0d\x17\xdc\x74\xd3\x05\x1b\x0e\x7e\x7f\x74\x50\xcb\xa8\xfe\x97\x2e\xad\xeb\x86\xf4\xfc\x1d\xda\x0d\x07\x07\xc9\xff\xd6\x2e\xdd\x98\xff\x8c\x7e\x52\x0f\x49\x50\xaf\xd4\xaf\x3c\x38\xdd\x67\xc4\xac\xfb\x51\x16\x7b\x29\x57\x8d\x4a\x52\xf0\x6d\xac\xe8\x8c\xd3\xf8\x6b\xc1\x41\x44\xcc\x17\x41\x4c\xd3\xa9\x64\x8c\x6d\x9d\xee\x7f\xe5\xb4\x27\x02\xb2\x8b\x47\x07\x88\xd5\xc2\x5b\x6c\x56\x3b\xcb\x86\xfa\x36\xef\xfa\xc4\x27\x37\x8f\x47\x28\x5d\xad\xb6\x86\x4c\x46\xc6\xf1\xff\x7a\x28\x05\x63\x9f\x53\x7f\xcb\x37\x78\x8d\x76\x87\xd5\x18\xe2\xe6\x67\xb6\x8d\xed\x5e\x93\xae\xb7\x4c\x21\x6f\x84\x66\xd3\x7e\x22\xde\x29\xa4\x5e\x76\x73\x09\x4b\x16\xd1\xef\x6e\x36\x5a\xa7\xcd\x04\x22\x34\xc4\x20\x49\x59\xf6\x2a\xd2\x6e\x1d\x55\xaa\x21\xaa\xfb\x47\xfa\x49\x37\xc4\xfb\x88\xec\xe0\x45\x26\xd4\x10\x63\xa2\x45\xcb\x98\xae\x37\x77\xf7\x41\x82\x2a\x7f\xb1\x52\xd3\xbb\xba\xb7\x46\xfb\xc1\x9f\x28\x25\x9f\xbe\xed\x9a\xe6\xfb\x17\x7d\x61\xd1\xb1\xd6\x6b\x6e\xcb\x6e\xbe\xe7\xe6\x95\x8f\xae\xbc\xf9\x9e\xcd\xd9\xf1\xde\xc8\x2d\x47\xbe\x7b\x74\xc3\x32\xe5\x91\xdb\x6e\x1d\x0d\xf6\xdd\x5a\x9b\xb8\xf4\xe1\x4b\x8e\x3c\xf4\xf1\x83\x17\x3f\x7c\x49\xa2\xf6\x56\xd8\x31\xbc\x7a\xfe\xfc\xd5\xd3\x7f\xf6\x5e\xfb\xa8\xd3\x6c\x76\x3e\x7a\xed\xba\x9b\x06\xdb\x45\xb1\x7d\xf0\x26\x30\xfc\x74\xef\xd2\x9d\x3d\x21\x23\x27\x37\xf7\x6d\x9d\x7b\xc3\x4b\xef\x1c\x5f\xb9\xee\xea\xed\xcb\x57\x87\x02\x2b\x97\x6d\xbf\xfa\xdc\x15\x63\xd3\xbf\x2b\xb7\xf6\x16\x0a\xe3\x9e\xf6\xd5\x7c\xe0\xe8\xab\xb3\x25\xa1\xce\xa6\x7c\xb6\x6c\x7e\x66\x72\x4d\x9d\xa7\x11\x28\x8d\x63\x7a\x2e\x5b\x82\x14\xc4\x6f\x55\x33\x2a\xe9\x3c\x96\xbb\x59\x05\xd9\x51\x14\x2d\x40\x08\x92\x3a\x88\x1d\xe7\x74\x50\xd0\x5e\x48\x87\x83\xa9\xea\x82\x41\x1f\xb0\x65\xe6\xa5\xca\x72\x51\x8b\xb9\xdb\xc5\xbd\x97\x9a\xc8\x35\xad\xf7\xaa\xbf\x90\x52\x4c\xb6\x69\x43\x0d\x44\xa4\x89\xc3\x04\x15\xb1\x0b\xb5\x42\x03\x6a\xbb\x8b\xed\x8a\xa9\x3f\x6f\xbd\x67\xde\x44\xae\x54\xee\xc0\x86\x83\xb9\xf4\xf9\x2e\x2b\xbe\x20\xd4\x5a\xaf\xde\xeb\xb1\x85\xda\xea\xe1\x12\xd7\x57\xc6\xca\x55\x79\x1c\xba\x53\x0b\x3e\xd3\x37\x47\xbd\x37\xb5\xa0\x5c\x99\x0d\x63\xb3\x63\x81\x12\x7f\x51\x81\x8f\xdc\x87\x1a\x51\x92\xb2\x0c\x51\x13\x6a\x84\xc2\x8d\x50\x3c\xe8\x3e\xf0\x43\x35\xa8\x1f\xb2\xc5\x70\x40\xc4\x36\x3f\x0e\xf4\x81\x54\x49\x52\x7e\x79\xf8\xc7\xea\x8f\xc3\x06\x8f\xb7\xa6\xc3\x50\x73\xcb\xa3\xb7\xd4\x18\x66\xc5\x3d\xaa\x49\xf7\xa5\x19\xd4\x7d\x69\x06\xb7\x3f\xfe\x8e\x3a\xf9\xce\xe3\xdb\xb7\x3f\xfe\x0e\x30\xef\x3c\xfe\x66\x35\xd1\xfa\x0b\xd7\x7d\xfc\xe3\xd7\xd5\x74\x18\x0c\x1e\xef\xf0\x96\x2d\xc3\x5e\x8f\xad\x03\x7e\x3a\xaa\x5f\x4d\x3f\x7d\x55\xbb\x6c\x7b\xf9\x36\x38\x5b\xfd\xdd\xce\x5c\x37\x17\x85\xf1\xd3\xed\xfd\xd1\x18\x64\xb4\xcf\xe5\x5f\xa8\x9b\xc1\x13\x9f\x55\xa8\x55\x47\x8d\xd7\x63\xd0\xea\xaa\x66\xfe\xb5\xba\x25\x6a\x3a\x6c\xc5\x6a\x19\x0c\x1d\x35\xd7\x7d\xfc\xe3\xd8\xf8\x3f\xad\x9b\x99\xfa\xee\xb7\xa2\x4c\xd9\x0f\x51\xeb\x62\x1f\xbe\x4a\x4a\xc4\x9b\xa7\xeb\x4d\xac\x78\xd5\xc8\xbf\x56\x13\xdd\x28\x08\x5f\xfd\x97\x0a\x5f\x90\xf3\x18\x54\x98\x65\xe6\x7d\x38\x0d\x09\x53\xe5\xdf\xd5\x68\x43\xa1\x86\x68\x88\xd3\x21\x20\x82\x71\x92\x95\xc4\x9c\x24\x2a\xa2\xa4\x47\x3c\x14\x93\x38\x5b\xa8\x4c\x61\xa3\xbe\xf2\x4a\xee\x9e\xd7\xef\xc9\xbd\xa2\xbe\x02\x6d\xaf\x10\xe5\x15\xc8\x9d\x76\x8d\x96\xbc\x88\x56\xa7\xe0\xe1\x45\x71\xca\x15\x05\xda\xe0\x51\x68\x43\x9a\x84\x5a\xd4\x8b\x68\x63\x71\x08\x75\xd0\xb9\x72\x15\xda\x84\x2e\x41\x7b\xd0\x4d\x54\xf3\xfa\x19\xf4\x65\x6a\xc5\x6f\x85\x86\x5e\x48\x76\x43\x3c\x53\x91\x8e\x56\xa4\xc1\xe9\x08\x05\xb5\x74\x22\x18\x0f\x9f\x39\xcf\x59\x8f\x9f\x29\xcd\x56\xa6\xed\xa5\x74\x4a\xdb\x97\x29\x3b\x59\xb5\x4d\xc0\x36\x62\xb3\x8d\xd8\x14\xdb\xb8\xcd\x36\x6e\x2b\xec\x31\xc8\x36\x39\x66\xb3\x91\x11\x5b\xbe\x74\x9e\x6e\x60\xe6\xdd\xe2\x56\x45\x85\xfd\xf2\x76\xdc\x66\xdb\xa9\x5d\xf0\xbe\xc2\xa3\xc1\xd4\xfb\x14\x3b\x93\x53\x52\x83\xb0\x93\xe6\x78\xb7\xe2\x37\xff\xee\x69\x87\xd4\x19\x76\x0a\x1b\xd0\x37\x85\x7f\xea\x18\xcd\x67\xcb\x23\xa2\x4c\x2a\xda\x9f\xf6\x20\xa2\xfd\xa2\x02\x8e\xa6\xae\xab\x73\xa1\x16\xb4\x56\x93\xd6\x8a\xbe\x41\xbc\x9d\xf2\x84\x50\x6c\x00\xa8\x32\x1b\x16\xac\x83\xc5\xe8\xb8\x18\x0e\x35\x30\x25\xf4\x88\x0c\x75\x7b\x2d\x46\x8c\xb9\x5d\x9c\xf2\xd8\xa1\x95\xfd\x5b\x1f\xdd\xf8\xc4\x9b\xef\x9d\xc8\x5c\xb8\x25\x93\xf1\xb5\x75\x5d\x3b\x71\x59\xa8\x8e\xda\xbb\xea\x42\x83\xa3\x83\x6c\x2e\x64\xe2\x7f\x71\xdf\xba\x85\xbe\xec\xc2\x9d\x73\xb6\xab\xef\x6d\xb2\x4a\x36\x5b\xa0\x3e\x74\xee\xc7\x1e\x5e\xbc\xf3\x7b\x3b\x23\x89\xeb\x4f\xb8\x8c\xf5\xf5\xf5\xf0\x27\xbc\x63\x7d\x60\x76\xe6\x40\xfe\xb1\x5d\xd6\x70\x4d\xad\xe8\x22\xbb\x42\x73\xec\x13\x22\xb5\xbf\xfd\xd5\x3e\x27\x94\x1a\x1c\xdc\x9d\x67\xa3\x12\xcb\x5c\x1d\x12\x83\x7e\xdf\xba\x39\x46\x83\x1c\xc6\x6f\x86\x1c\xce\xd6\xde\x48\x5f\x46\xde\x69\x61\x6d\x92\x03\x21\xae\x54\x77\x16\x99\x51\x0b\x8a\xa3\x85\xe8\x4a\xed\x3b\xe4\x78\x67\x5a\xa6\xbf\x90\xe2\xa2\xa9\x48\x34\x66\x0c\x35\xf0\x4e\x5a\x29\xb7\xd3\x95\x88\xcb\x29\xad\xae\x4e\xd7\xff\xab\x66\x21\xd9\xaf\x3e\xff\xc2\x97\xbf\xf0\xca\x6b\xe4\x0f\x7f\xba\xd7\x21\xb3\x9d\x42\x5c\x8e\x79\xdb\x42\x6d\x2e\xb7\x57\xde\xfe\xd5\x4b\x64\x47\xcb\xec\x6b\x9f\x78\xec\x50\x7b\xf0\xe3\x13\x5f\xf8\x1f\xb5\x15\xf6\xe4\x6c\xdb\x9e\x1e\x81\x27\x7f\x60\xb8\xe6\x99\x2b\xd4\xce\x6f\x5c\xdd\x3e\xce\x19\x89\x8f\xf3\xf0\x32\x67\x66\x18\xf2\xeb\x39\x29\x23\x77\xc2\x8e\xf9\x67\xd6\x1b\x9e\x6d\x81\x3f\xff\xcf\x1a\x12\x23\x41\x93\x4b\xa8\xfe\xa0\x51\x67\xe3\xac\xd2\x1f\xb8\x1c\xd5\xf1\xa7\x78\xf1\x4c\x0a\x05\x13\xd3\x2e\x89\x93\xd4\x10\x4a\xb4\x51\xab\x79\x66\x2d\x8a\xda\x5e\x11\x79\xa7\xf5\xe1\xf6\xa9\x23\xfc\x2a\xe6\x1d\xfa\xfc\xae\x02\xc7\xe8\x74\xf5\x9a\xcb\x61\x04\x11\x3a\x20\x06\x19\xe8\xa3\x10\xd6\x33\x16\x13\x5f\x3c\x93\xb6\xcd\x84\x17\xa8\x87\x19\xb7\xa5\x4f\x10\x18\xd8\xad\x27\xf0\xc7\x66\xac\xc0\xa1\x99\x35\x51\x4c\xf0\xd4\x7b\x82\xc0\xd8\x19\xb7\xc0\x9a\xf5\x44\x7e\xc7\xcc\x95\x2b\xfb\xc6\x7f\x0b\x39\x51\x37\x1d\x3d\x0b\xf0\x34\x5a\x85\xdc\xae\x3a\xa0\x80\x75\x0e\x91\x14\x40\x1c\xa4\x68\x0c\xa2\x55\x99\x9c\x76\xc6\xed\xc2\x0a\x45\xb0\xd1\xc5\xed\xba\xe6\xa8\x7a\x95\x2c\x73\x42\x43\x6b\xca\xc7\x19\x1c\x1c\xa9\xc1\xad\xf7\x66\x5f\x7d\x70\x7a\x1e\xf8\xe4\x89\xc7\xe0\xb9\x85\x2d\x76\xb6\x28\x7b\xd7\xdb\xed\x2d\x0b\xd4\x2b\xe5\xa4\xac\x2e\x9d\x73\xdf\xbe\x7d\x9d\x16\x3b\x18\xbc\x70\xd7\x67\x17\x2d\x17\x26\xaa\xf2\xa9\xa7\x7c\xdf\x7d\x42\x97\x55\xf1\xd4\x13\xdc\x7e\x76\x1c\x99\x50\x13\x42\xd0\x0e\x1d\x40\xec\x6e\x96\x44\x8d\x20\x53\xfc\xd6\x30\xe5\x3c\xca\xc8\x10\x49\x67\xc2\xb2\x26\x81\xcb\xac\x1f\x98\x87\x00\xd4\x4f\x0d\xf8\x8f\x77\x43\x5f\x8f\x05\xde\x53\xef\x5d\xcb\xba\xdc\x76\xb7\xda\xaf\xf6\xbb\xed\x6e\x17\xbb\x56\xfd\x78\x40\x6a\x87\xbf\xbf\xe1\xa8\xf3\x39\xdf\x80\xbf\xb7\x4b\x78\xde\xa9\xa4\xa9\x07\x06\x26\x7b\xeb\x1f\x85\x2d\x03\x90\x52\x3f\xad\x5a\x82\x61\xcb\xdb\x6f\x5b\xc2\x41\xf8\x6f\xd8\x1c\xc8\xf0\x8b\xe1\x87\xcd\xcd\x6a\xd7\x62\x3e\x53\xc2\xde\x55\xa8\x8f\x31\x2a\x83\xea\x07\x1b\x62\x90\xa6\x0e\x66\x6e\x3f\xb0\xd7\xe5\x15\x7b\x13\x6b\x72\xd5\xe6\x73\xae\x90\x49\x72\xb0\x48\xb0\xd5\x4a\x56\x9e\xf9\xcc\x04\x0a\x61\x36\xe4\xc2\xd9\xda\xb6\x26\x13\x56\x78\x59\x6c\x2e\x62\x6d\x6a\xb2\x39\x46\x2c\xea\xa4\x08\xfe\x46\x08\xea\x16\xc0\x92\x99\x2f\x58\xf0\xa5\xd0\x17\xba\x65\x12\xea\x4c\x3a\xee\x76\x39\xac\xba\xd3\x4b\x3b\x5e\x95\x57\xf0\xaa\xfc\x13\x8c\x52\x34\x55\x4c\x8e\x4d\xb3\x5c\x90\x55\x7f\x37\x79\x4d\x46\xe3\x3f\xa8\x61\x07\xaf\xca\xff\x02\xaf\xca\x8f\x54\x58\x37\xc8\x48\x85\x85\xe3\x1f\x46\xa3\xc9\x6b\xfa\xfb\xe4\x13\x12\x2a\xf0\x17\x31\x65\x1e\x95\xc1\xb2\x1e\x45\xaa\xf2\x19\xcf\x38\x38\x5e\xe7\x88\xa9\x03\xaa\x00\xa3\xcb\xbd\x4c\x71\x9c\x73\x6a\x63\x5f\x3a\xd3\xc7\xa6\x0a\x07\x20\xd0\x39\xdc\x59\xfc\x87\xbf\x41\x37\xc7\x92\x6d\x78\x7c\xde\xad\xca\xaa\xb6\xe4\xce\xb1\x9d\xc9\xb6\xc2\x26\xbd\x35\x33\x77\xa8\x25\x6a\xa7\xbb\x1e\x7a\x09\xf3\x0d\xba\x39\x87\xfe\x8e\x24\xcf\xab\x51\xdf\x38\x10\x69\x6d\xea\x5b\xe0\xad\x39\x2f\xa9\x2d\xdc\x93\xe7\xd5\x90\x64\x39\xad\x5a\xbd\xf5\xf6\x9a\x70\x4b\xcf\xf2\xc2\x41\x1d\xeb\x5e\xa1\xb1\x9c\x02\xaa\x41\x61\x94\x45\x1b\xd0\x0e\x74\x35\xba\xb1\xc0\x10\x5c\xd0\x3c\xba\x1c\x6e\xdd\x27\x96\xfa\xb8\x44\x2a\xe4\x45\xb6\x14\xa3\x10\xcd\x80\x1f\xfa\x81\x42\x54\x64\x5c\x6e\x70\x01\x5f\x02\xcb\x71\x03\x1f\xa1\xce\x88\xfd\x85\x40\x04\xa6\xe2\x16\x50\x71\x6b\x76\xda\x43\xe1\xeb\x53\xc8\xec\x31\x1b\x8d\x80\xb4\x97\x37\xa6\x33\x2d\x8d\x57\xc4\xc2\xb2\x58\x87\xc0\x51\x9f\x72\x3a\xff\x02\xf6\xda\x95\xb5\x47\x7c\x3e\xf5\xcf\x52\xc8\x09\xc3\xab\xf3\xf7\xfd\x45\xfd\x4b\x01\x4e\x07\x24\x29\xe4\x54\x9f\x2c\x20\xe6\xc0\x32\x27\xbe\xa3\xe2\x36\xf9\xbf\xea\xb7\x86\xfb\xa6\x3d\x10\x8c\x53\x88\xf6\x04\xa0\x9b\x44\x45\x38\xee\x38\xcd\x3f\x76\xed\xaa\x7b\x56\xad\x81\xe5\xce\x90\xa4\xfe\xb9\x16\x74\x70\x1d\x90\xff\xe2\x74\xaa\x4f\xae\xc5\x1b\x25\x90\x0a\x80\x3b\xea\x9f\xdf\x75\x3a\x61\x78\xed\x35\xf4\x02\xf5\x4b\xce\x8b\x75\xd2\x28\x54\x71\xcb\xcf\x4e\x7b\x98\x36\x1e\x8c\x20\x44\x26\xa9\x5e\xb3\x47\xf7\xeb\x9c\x66\xf9\xd6\x46\x33\xb1\xf2\x28\x75\x74\x2f\xc0\x42\xd3\xb9\x14\x32\x52\x30\xee\xc7\x38\xe7\xb1\xbd\x6b\xf3\xd0\x1f\xe8\xa9\x8f\x2e\x6a\x8b\x36\x67\x3c\xb6\x77\xad\xce\x1b\x97\x75\xc7\x2f\xe8\x9d\xdb\x1a\x3a\x47\x90\x2c\xc2\xc3\x02\x6b\x18\x83\x59\xc3\x0f\xdd\xb8\x12\x3c\xc5\x0b\x3c\xf8\x9c\xf4\xc6\xee\x9e\x5a\x97\x7b\x75\x8d\xbd\x3e\x2c\xb7\xaf\x3a\x12\xaa\x9d\xd3\xd1\x92\xad\xab\x39\xdf\x66\xd8\x67\xf2\x0b\x60\xea\xdb\x71\x5f\x71\xad\x8d\xb5\xef\xd9\x8f\x62\xd3\x91\x2f\x74\x9a\xde\xe2\x44\xe6\xd4\xbe\x59\x52\x3d\xbb\x29\xba\x0e\x38\xe2\xcd\x66\x8b\x54\xd8\x59\x6f\x44\xd1\xb9\x68\x74\x20\xb2\x12\xec\x05\x28\x05\xc3\x58\x3e\x17\x61\xb6\x53\xc3\x92\x1e\xf8\x8a\xd1\x66\x84\xb0\xbf\xc4\x3b\x52\xf5\x10\x99\xe8\xeb\xe9\x28\x89\x14\x62\xb8\x2b\x6f\xef\xf7\x41\x54\xdb\x8d\x82\x0f\xc2\x5e\xc8\x7a\xc3\x10\x18\xd7\x4e\x6a\x3f\x0c\x97\xa7\x19\x09\x05\x44\xd3\x46\x2c\xc4\xaa\xec\x25\x28\x8c\x96\x68\x75\x0d\x75\x40\x24\x4a\x29\x0e\xad\x10\x4c\x25\x64\x12\x4a\x05\x29\xe4\x41\x22\xdd\x8f\x83\xce\x10\x91\xc1\x19\xa4\xee\xc4\x4c\xf1\x1d\x45\x75\x0e\x1b\x1a\xa9\x93\x48\x91\x8f\xfc\xf3\xb8\xc7\x40\x08\x10\x06\x4c\xd6\x4f\xaa\xaa\xf2\x83\xa7\x0f\x81\xe3\x30\x76\x1a\x08\x21\x86\x9a\xdb\x01\xf6\x7d\xe3\x27\xf8\x8f\x79\x95\x30\xc9\x65\xe7\x2f\x4b\x76\x37\x27\x62\xa2\xeb\x62\x6f\x78\xd5\xc5\x97\xdf\x3a\x7b\x70\xdd\x50\x86\xbc\xf5\xc8\x23\x93\x2d\x46\x0b\xe1\x8d\xd8\xe1\x39\xf5\x08\x84\xc0\xf6\xe8\xef\x98\x88\xd1\x62\xb4\xb4\xfc\xee\x51\xf5\x3d\xf5\x67\xf8\x91\x17\x6b\x7d\x52\x76\x74\x5e\x7f\xac\x2f\x18\x99\x1d\x35\xd7\x6e\x08\xd7\xcd\xdd\xb3\xa5\x73\x63\xf7\x9c\xd6\x9e\xe0\xb0\x3e\x0f\xb1\x53\x88\x43\xe4\x46\x14\x46\x8b\x3f\x5c\xdd\xd8\x33\xd7\x8d\x7c\xf8\xba\xbd\x9d\x57\x19\x32\xbd\x6e\xc3\x97\x5e\x7e\xeb\x82\x2d\x5b\x97\x30\x67\xaf\xda\xcf\x5f\xac\x6d\x87\xd3\x6b\x36\x70\xf1\xbc\x39\xf3\xa3\xc3\xb4\x5e\x80\x10\x7f\x80\xd5\xf1\xe6\x50\x18\x82\x46\x70\x71\x3c\xd0\x1e\x12\x8d\xd0\x79\x2c\x18\x77\x11\x05\x86\xf3\x48\x7d\x92\x7b\xcf\x6a\xae\x99\x54\x22\x73\xf2\x28\xd2\x6f\xb3\x9a\x6b\x88\x12\x99\x43\x50\xa4\x9f\xe2\xec\x31\xa9\x86\x41\xdf\x24\x6a\x6b\x6e\x68\x18\xf4\x31\xa8\xad\x59\xd7\xf7\xbd\x4e\xc7\xd2\x1d\x3a\x46\x16\x45\xcf\x76\x3a\x5c\xbc\xb3\x81\x17\xb1\x8e\xfe\x5c\x8a\x3d\xf6\xe3\x82\xf8\x41\x39\x42\xa2\x0d\x29\xbb\x1f\xeb\x82\x6e\x2a\x49\x29\x92\x0a\x40\x25\x14\x6c\x3a\x9d\x71\x6a\xcd\xef\x74\xb8\x75\xe4\xe9\xb8\x8b\x53\xce\x5b\xde\xbc\xb8\x7d\x7e\xf8\xf2\x00\xb8\xcc\x0d\x07\x76\xc4\x7a\x57\x87\x9a\x43\x97\xae\x58\x7d\x8d\x3f\xec\x8f\x85\x87\x37\x1d\x35\x86\x8d\x02\x60\x8c\xeb\xc3\xe4\xe8\xa6\xe1\x70\xcc\x1f\xf6\x5f\xb3\x66\xf8\xd2\x50\x73\x68\x75\x6f\xf6\xad\x0e\x60\x59\xf0\x84\xda\xda\x5d\x5d\xb3\x87\x5b\x57\xae\x87\xaf\xad\xd0\x4e\xed\x8d\x1e\x8b\xb2\x40\xec\xa6\x54\x57\x78\x7e\xfb\xe2\xe6\xe5\xe7\xad\x5f\xd9\x3a\x3c\xbb\xcb\xd5\xde\x16\xf2\x60\x06\x63\x00\x06\x55\x5d\x5a\x28\x49\x57\xca\x5f\xf5\xb4\x82\x5c\xc6\x28\x94\xcb\x2e\x41\xbf\x47\xc4\x3b\x4b\x6c\xe9\xd4\x01\x3d\x82\xb4\xaf\x93\x6a\xde\x51\xa0\x90\xd6\xa6\x84\x00\x9d\x12\x02\x2e\x46\x51\x7f\xfe\x73\x0a\x43\x58\xd0\x37\x00\xfa\xb9\xfa\xf3\x48\x32\xa2\x83\x2c\x46\x92\x91\x29\x74\x42\xfd\xe7\x89\x13\x60\x38\x41\xb2\xca\xaf\xd4\xa7\x3d\x07\x75\xe7\xca\x83\x1e\x58\xf4\x2b\x7d\xc8\xd0\xf1\x1b\x29\x4a\xce\x76\x15\x1d\x3c\x71\xe2\x20\xd6\x7e\x11\x41\xc2\x94\xc2\x5e\x45\xfd\x5d\xe7\x69\x33\x3b\xf0\x91\x52\x71\x8c\xa0\x7b\xd1\xf3\xae\x44\xbc\xa2\x90\xa7\x55\x20\xca\x57\x62\x1e\xb8\x1c\x61\xd0\x41\xd0\xc1\xba\xad\x25\x92\x8c\x30\x17\xab\xf7\x9d\x38\x98\x49\x8f\x5c\x78\xe9\xd3\xb4\xbc\xa7\xd5\x67\xdf\xe5\xaa\xc9\x6b\x5a\x69\x32\x31\x2f\xd3\xad\x7a\x7d\xfe\xc8\x89\x83\xdb\x3f\x8b\x97\x6f\xbb\xe8\x0a\xbd\x02\x29\xec\x57\xef\x53\x0e\x9e\x90\x47\x12\x85\x8a\x78\xa7\x55\x55\x98\xaf\x9a\x4c\x2b\x4d\x5e\xed\x16\xda\xf6\xfa\xfc\x11\xad\x86\xd7\x94\xfc\xa4\x75\x9e\xa4\x06\xdd\xcf\x21\x9d\x49\xcb\x76\x87\xc8\x52\xc2\xcb\x12\x16\x39\x93\x55\xb3\x7b\x36\xfe\x29\x37\x6f\xcb\xa1\xab\xf7\xa7\x6c\x16\x9f\xc5\x96\xda\x7f\xf5\xa1\x2d\xf3\x74\x87\x17\x9c\xc5\xca\xc4\x9d\xfd\x4b\xbe\x41\x9e\xcc\xa3\xb5\x8f\xdd\xb4\x77\xe5\x62\x2f\xcf\x71\xbc\x77\xf1\xca\xbd\x37\x3d\xb6\x56\x1f\x18\x0b\xf2\x12\x2a\xe1\x43\x84\xd0\x22\x84\xdc\x41\x7b\x30\x5c\xe5\xfd\x70\xfa\x7e\x55\xc4\x50\x41\xd0\x2b\xa5\x12\x71\x97\xc2\x2a\xa7\x14\xa8\x80\x78\x21\x15\x4e\xa0\xa0\x0c\x25\x4f\x51\xb6\x45\x65\xe3\x40\x76\x60\x23\xe8\x1b\x25\x39\xa4\x30\x28\x07\x01\x0a\xa2\x41\xe5\xbb\x8a\xf4\xb2\x09\x6a\xa2\x62\x51\x72\x48\x67\xce\xd3\x7f\x87\x68\xbb\x11\x2a\xf3\x8e\x23\x1e\x0d\x95\xfd\xcb\xc3\x05\x58\xc7\x70\x0c\x52\x41\xe7\x74\xc7\xda\x4c\x2a\xd4\x50\x58\x63\xc4\x20\xd3\xc7\x94\x1d\xa4\x83\xc9\x74\x26\x4c\xe1\x62\xb0\xee\x59\x4e\x3e\x67\x31\x58\x18\xa2\x66\xcd\xe2\x14\xba\xe2\x6e\x7d\xf2\xdb\xb7\x25\xd0\xbd\x73\x51\xaf\x83\xb1\x37\xd9\x04\xb7\xdd\xc2\xca\x9d\x73\x2f\xee\xac\xd9\x78\x70\xa3\x08\x31\xd1\x0c\x39\xc2\x58\x0c\x16\x56\x7f\xe7\x23\x6a\xce\x66\xe4\x61\x04\x4b\xe6\xed\xee\x27\xaf\x9a\xa4\x53\x15\x09\x8c\x3e\xe6\xbf\xa2\xa3\x7b\x49\xd0\x10\xe2\x2d\x71\x8f\x29\x30\x38\x77\x81\xd4\xd2\xa6\xd5\x2a\x58\x6f\x96\xf0\x08\xf0\x46\xad\x6e\x8d\x53\x01\x4e\xb7\x4b\xb6\x57\x30\xd0\x3a\x34\xe9\x95\x70\x3c\xab\x23\xf8\x64\x64\x28\xa5\xb4\xf2\x67\xd2\x8d\xc1\xb8\x8b\x1d\xa3\x82\x2a\x78\xee\x7b\x6a\xc5\x95\x0e\x2c\xaa\x0a\x6f\xb4\x98\xb3\x02\xbb\x46\xfd\x2f\xf5\x6d\xc2\x89\xc6\xac\xdd\x32\x6e\xb2\xc1\x0d\x23\xc3\x27\x60\x35\xb0\xa2\x83\xd1\x25\x56\x50\xde\x57\xef\xfd\xf2\xf0\x88\xfa\x51\x9b\x69\x9c\x31\x6a\x2f\xcd\x01\x35\x6b\xc0\x98\x95\x1d\xa0\x88\xd8\x71\xe5\x8a\x6f\xdd\x21\x97\xf8\x7d\x4e\xea\xeb\x0d\x20\x41\x39\x1d\x8d\xb4\x6a\xdb\x20\x09\xca\x24\x48\xf1\xad\xb9\x93\x0f\xab\x4f\x3d\x25\xf8\x6a\x3b\x1f\xfb\x89\xfa\xd4\x4f\xd4\xdf\x68\xbf\x9f\x60\x26\xb7\x7d\xa9\xbb\xa7\x05\x4f\xe4\x59\x92\xed\x0c\x04\x27\x17\x91\xa7\xb5\x3f\x58\xb4\x62\xf1\xe2\xef\x4c\xf7\x83\xd1\x06\x1c\x14\xce\xa4\x93\x51\x23\x14\xb1\xea\x39\x1a\x8d\x52\x69\xea\x21\x1f\xdb\x2e\xcb\xea\x0b\x90\x90\xe5\xed\xda\x8a\x6e\x8e\x2c\xc3\x73\x72\x12\xdf\x5c\xa5\xd5\xfc\x98\x76\x16\x12\x90\x90\x93\xb2\x76\xc5\x1c\x3d\x33\x7e\xed\x8c\xf8\xea\xfa\xf3\x21\x4d\xa3\x4d\x28\xa6\xba\xb1\x00\xfe\x5e\xf9\x7c\xfc\x02\x3c\x57\xb8\xdd\x76\x59\x86\x84\xfa\x02\x2d\x08\x59\x58\xfd\x7c\xad\x54\x5a\xd1\xf4\x62\xbe\xa0\xbe\x40\xaf\x38\xdb\xf3\x21\x93\x2e\x46\xbb\xe8\x10\xf8\xc6\xaa\xe7\x33\x1f\xab\xa8\x8d\x5c\xae\x24\x54\x37\x00\xe8\x2d\x50\x5d\x58\x78\xed\x74\x1c\xf7\x19\xda\x80\x36\xbf\xb1\xd8\x10\xd5\xef\xa0\xfd\xb4\x7a\xe9\x2f\xa1\x5a\xb5\xfc\x0e\x6d\x84\xea\x17\x86\xf7\xcc\xd0\x06\x59\x1a\x3b\x62\xa7\x3d\x2c\x13\x94\x83\x56\xe8\x80\x90\xcc\x26\x52\x61\x39\x18\x85\x20\x61\xc3\xcc\xa8\x6d\xf2\xf6\x0e\xbc\xd5\xf5\x83\x67\x85\x2f\xba\x60\x94\x81\x8b\xe2\xf9\xbd\x56\xb5\x93\x55\x94\xfc\xb7\xf3\xdf\x23\x8f\x7f\x31\xff\xc7\xdf\xa5\x52\xb7\xab\x7f\xdc\x0a\x5b\x70\xe0\xab\xf0\xea\xa9\xcd\x0f\x3d\x44\xfb\xaf\x65\x2a\xcb\xfd\x77\x01\x43\x2e\x68\xc4\x72\x90\x67\xc3\x72\x50\x0e\x66\x82\x20\xb3\x6f\xa8\x7f\x9f\x7c\x3d\xbf\x70\x11\x34\xd7\xc1\xe7\xe0\xcd\xf9\x13\xe7\xcc\x61\x9e\x8e\x4c\x9c\xc3\x2a\xa7\x9e\x57\xdf\x03\x33\x6c\x3d\xf2\xe0\x83\xb0\x0a\x9a\xbf\x53\x68\x2b\x1b\xaf\x73\x76\xac\xa9\xf8\x56\xf5\x71\xa8\x03\x38\x26\xd0\x18\x3d\x0d\x87\xd6\x0f\xee\x8a\x65\x73\xc5\x02\xd4\x99\x28\x5a\xb9\xed\x7d\x90\x29\x82\xd5\x92\x9c\x3e\x2a\x6d\x77\x18\x18\x8b\xf9\x82\x3d\xea\x2e\x35\xa9\xee\xda\x73\x81\x51\x64\x0c\x0e\x49\x84\x11\x97\xc1\x60\xdd\x3a\xef\xbd\x7b\x75\x61\x7b\xce\xc2\xa3\xaf\x1c\x5d\x38\x47\xdf\xb9\xf7\xbd\x79\x5b\xad\x06\x83\x0b\x46\x44\x89\x79\x93\x8e\x4d\x93\x63\xea\x98\xcb\x80\x8d\x17\xdc\xf9\xc8\x23\x77\x5e\x60\xc4\xfa\x49\x87\x6c\xdb\xba\x7e\x9f\x03\xdf\x42\xa5\xf7\xcf\x34\xec\x5e\x38\x7a\xf4\xe8\xe8\xc2\xdd\x0d\x9f\xa1\x07\xf2\xd7\x39\xf6\xad\xdf\x6a\x93\x1d\x92\xfe\xfd\x53\xb9\x21\x74\x1a\xc7\x56\x37\xd8\x75\x26\xd2\x02\x92\x00\x65\xeb\x65\x02\x65\x52\xaf\x40\x41\x32\x28\xd0\x7d\x95\x4d\x62\x14\x0b\x38\x4b\xf9\xbc\x9e\xd6\x4a\xae\x3d\x5d\xcd\x4d\xb7\x67\xe9\x6b\x7c\x2a\xad\x94\x91\x6e\x23\x01\xce\xe6\x0a\x20\x1b\x2a\xfc\x9d\xc9\x26\xa2\x43\xd8\x82\xab\x10\xfb\x04\x17\xea\x44\xa5\x54\xfd\xff\x85\xb3\x18\x45\xf0\x1f\x75\xc8\xda\x0b\xa1\xef\x0d\xed\x7a\xbc\xba\x74\x69\x5b\x7e\xff\x59\x2d\x3b\x54\x9f\x82\x11\xab\x90\x22\x9e\xd6\x69\x2b\x46\xf6\x6c\xbe\xd4\x4a\x67\x13\x6d\xa7\x5c\x53\x27\x46\x33\xa7\x49\xa0\x98\x9a\xf1\xa7\xe4\xf3\x02\x65\x5c\xaf\xd3\xca\x61\x3f\xcb\x7e\x65\x39\x66\xfa\x81\x72\x19\xe0\x67\x33\x25\x2b\x39\xa7\x79\x54\x8b\x52\x68\x41\x85\xef\x4b\x04\x45\x23\xd4\x4e\x44\x39\x12\x80\xca\x1e\x11\x1c\x83\xc6\x68\x84\xd7\x8f\xbb\x18\x49\x3f\x71\x3a\x43\x23\xd6\x5d\x86\xe1\xf3\x82\xfa\xf4\x1f\x44\x87\x5d\xb8\xff\x75\x33\x48\x82\x22\x38\xe0\x00\xbb\xfd\x4b\x7f\x50\xdf\xb8\x5f\x34\x9a\x24\xe1\x27\xb0\xe1\x24\x4f\x4f\x98\xcc\x50\x5f\xe9\x19\xa9\x47\xf4\x37\xfc\x01\x16\x09\xe0\x10\x14\x41\x02\xf3\xeb\xf7\x0b\x76\x87\x70\x3f\xd4\xff\xe1\x4b\xdb\x59\x30\x99\xe8\x51\xfe\xa4\xfa\xf0\x4f\x04\xc9\x64\x24\x2f\x54\xfb\x4b\x96\x6d\x78\xb5\x55\x0c\x18\x74\x28\xa7\xe4\x3c\x74\x2d\x71\x1a\x4b\xc2\x53\x81\x40\x7e\xbc\x3e\x18\x08\xd8\x6c\x76\xeb\x69\xc8\xf9\xf9\xfb\xa4\x25\x12\x64\x65\x49\x0e\xe7\x95\xb0\x6c\x30\x22\x82\xd2\x53\x29\xee\x79\xf6\xc7\x54\x96\xeb\x40\xc8\xc8\x96\x67\x0b\x6d\x90\xd6\x55\xc2\xe9\x64\xa4\x81\x8f\x16\x25\x60\xaa\x09\x73\xbb\x1c\x0c\x82\x9e\xfc\xb3\xea\xb3\x70\x31\x1e\x95\x65\xca\x3d\x92\x3f\x2a\xcb\x30\x2a\xa5\xc9\xe1\xc9\xdd\xe1\x4b\xc2\xfb\x3b\x77\x8e\x75\xee\x0b\x87\xc9\xe1\xf0\x25\xe1\x7d\xda\xce\xfe\x30\xd3\xa3\x3e\x9b\x7f\x16\x7a\x54\xed\xaa\xa4\x96\x5b\xbb\x2a\xa9\x5d\x8f\xef\x9c\xbc\x3a\x1c\xde\xdf\x39\xb6\xb3\x73\x7f\xf8\x92\x30\xb9\x2d\x1c\xde\xa7\xed\xec\x0b\x5f\x32\xad\x5d\xf4\xb5\x7f\x75\xc8\xf2\x0c\xbe\xac\xba\xc3\x2c\x51\x66\xf4\x5e\xd5\x55\x0c\xd3\xbd\x55\xc9\x34\x5e\xd3\x8e\x19\x34\x0c\x67\xf1\xeb\x62\x14\x9d\xf4\x59\x12\x89\x8e\xe4\x56\x76\xe8\x52\x2a\x79\x4f\xf1\x78\x49\x5f\xaf\xc6\x29\x2d\xaa\x9e\x93\xdc\x58\x49\x81\x8a\x40\x2b\x11\x39\xc5\x1e\x40\x3e\x84\x80\x6b\x85\x32\x58\x79\x3a\x11\xb4\x87\xca\xf4\xbf\xe4\x94\xd4\x94\x93\xc4\x7c\xd6\x69\x30\x58\xc6\x8c\x36\xc8\xe6\x9a\x24\xbb\x17\xb2\x52\x9f\x04\xd9\x5a\xf2\xd9\xf0\xe4\x98\x28\x49\x0e\x6b\xce\x8c\x95\x70\xb8\x1e\x14\x97\x4b\x55\x02\x74\x2e\x23\x53\x0a\x39\xc5\x22\xad\xb7\xc9\x45\xfd\x4d\xc1\x95\x30\xa3\x0d\xc7\x41\x2a\x21\xa6\x03\x38\x27\xc8\xb9\xa6\xc6\x5a\x35\x27\xf5\x49\x6a\xce\x6b\x97\x9a\x72\x6a\x4e\x34\x8f\x09\x46\x23\x8b\x64\x71\xf2\xc1\x25\x01\x55\x71\xb9\x40\xa9\x8f\x84\xb1\x62\xce\x89\x0e\x79\xba\x2c\xd0\x58\x21\x0b\x40\xb4\x2c\x0b\x9c\xf6\x19\x3e\x81\xb7\x17\x66\xf7\xf6\x7f\x2f\x88\x03\x9a\x4c\xb4\xbd\xf2\x2d\xbe\x83\xb7\x17\x64\x81\xf6\x7f\x2f\x64\xbe\x5f\x26\x37\x57\xbe\xcf\xf2\xb8\xcf\x21\x1b\x72\x16\xde\xa9\x9b\x0f\xa5\x42\x29\x0a\xaf\x40\xdb\xcf\x48\xec\x50\x20\x33\xb2\x9e\xee\x23\xf7\xf1\x63\xc9\xce\x11\x78\x59\xb4\xab\xbf\xb2\x0b\xa2\x1d\x42\x76\x75\x02\x07\xd4\xf1\xfc\x38\x51\x36\xf8\x7c\xc7\x7c\xc3\xbe\x0d\x78\x6c\x1a\x2b\xeb\x17\x8e\x25\x47\x3a\xe1\x9b\x82\x76\x89\x28\x68\x97\xe4\xb3\x38\x00\x81\xfc\xb8\x3a\x8e\x47\x36\xf8\x86\x7d\xc7\x7c\xbe\x0d\x23\x67\xfa\xee\x6b\x50\x73\xc9\xef\x92\xe7\xea\x8b\x8c\x41\x19\xd0\x15\x08\x33\x7a\x6d\x07\x28\x3c\x7c\xfe\x8f\x7a\x43\x60\xd7\x5d\x52\xad\x45\x88\x56\x75\xfb\x11\x18\xf7\x46\xa2\xcd\x75\x5a\x3e\xda\x72\xd8\x75\x97\xcc\xda\x71\x4b\x35\x5f\xbe\x5e\x0e\xca\xe5\x6f\x2c\x0e\x3a\x75\xd0\x20\xb2\xba\x8a\x22\x93\x8e\xe2\x4c\x1f\x24\xf4\xbd\xd3\x10\xca\xde\x81\x11\x59\x56\xc7\xfc\xd1\xa6\x3d\xdf\xbb\xe9\xc2\xce\xa0\xe9\x11\xb3\xc8\x73\x2e\xd2\x36\x1a\x7b\xf4\xf6\x26\x8b\xc5\x8b\x23\xd3\x9a\xeb\xcb\x30\xa2\x8d\x04\x23\xf5\x76\x7b\xcb\x58\xb4\x7f\xd3\xc8\xf5\xdb\x7a\xbe\xfa\x9f\x16\x62\xf4\xc0\xe6\x3d\xc9\x8e\xb1\x16\x3b\x8b\x73\xd3\x1a\xab\x3c\xfe\x63\xc4\x21\x09\xf9\xa9\x3d\x05\xec\x60\x47\xb6\x18\x14\x3c\x0f\xa7\xd1\x50\x61\x05\xd0\x14\x02\x45\x45\x24\x50\xe1\x62\x78\x9a\x03\x22\xe4\x14\x05\x96\xe7\x7f\x33\x85\xb0\x5f\xfd\x15\x75\x52\xd4\x73\xe3\x4d\x55\x53\x72\x19\xcf\x4d\x40\x75\xda\x2a\x0b\xca\x1f\x4d\x22\x18\xaf\x1e\x29\xaa\x5b\x89\xb9\x4e\x72\xab\x39\x79\x40\x56\x73\x6e\xc9\xde\x84\x95\xa6\x63\x05\x3f\x4f\x81\x50\x28\x85\xca\x26\x22\x17\x84\xea\xd5\x6c\x6d\x2d\xe4\xea\x43\xa1\x7c\x60\x9a\x53\x68\xd5\xf8\x55\x55\x26\x7d\xb8\x28\x0c\x12\x67\x2f\x93\xbd\x29\xaf\x34\xd9\x25\x37\x64\xe5\x01\x19\xb2\xee\xdd\x67\x2e\x13\x7c\x26\x14\x0a\xd5\x43\xae\xb6\x56\xcd\xd6\xab\xbf\xf8\xf0\x65\xa2\x7e\xca\xba\xfd\x37\xed\x86\xb3\x96\x29\xab\xdd\x3f\xa4\x3f\xeb\x97\x95\xb6\xd0\xaa\xce\xfd\x60\x45\x53\xda\xb5\xb6\xcd\xbf\x4d\xe8\x48\x4c\xaf\x20\x2f\x4e\xe7\x39\xd6\x04\x99\xbf\xb1\x0a\x1a\x41\x28\xec\x76\x71\x56\x10\xf9\x50\x03\x8a\x96\x44\xea\x48\xa6\x94\x4c\x23\xca\xd6\xed\xb2\xea\xe6\x52\x36\xd4\xc0\xf1\xba\x10\xce\x85\x82\x9c\x5b\x4f\x8a\x10\x0a\x52\x8c\x29\xa6\x1f\xd2\x6e\x17\x79\x29\x44\x2c\x66\x96\x11\x64\x4f\x6d\xb0\x21\x2a\xff\x51\x7d\xa8\x7f\x93\xd6\x40\x03\x98\xcc\xd3\x0a\xb5\x79\x1e\x5c\x38\xbe\x7d\x83\xd9\xc8\x91\x56\xe2\x12\x18\xc6\xea\xa8\xa9\xad\x17\xf7\xff\x28\x0e\xaf\xd8\x8c\x26\xe2\x61\x6b\x55\x0f\x21\xf0\xbc\xd5\x64\x24\x1e\x2c\x99\xd5\x7d\xb3\x9e\x3f\x20\x35\xd6\xfb\x9c\x36\x86\x15\x04\xcb\xef\x8f\x5b\x9c\x0c\x60\xc2\xb1\x2c\xcb\x60\x60\x7f\x25\x0b\xbb\x04\xb9\x6b\x96\x24\x5e\x29\x4a\x2f\x03\x72\x13\x8b\x59\x38\x2e\x08\x0c\x00\x61\x08\xc1\xca\x4e\x8b\x45\xbc\xd2\x1b\x9e\x6f\xb1\x58\x77\x9a\xad\xbb\x0f\x11\x86\x65\x19\xc0\x2c\xcf\x17\xd6\xe3\x64\x92\x55\x50\x7f\xd9\xab\x76\xba\x66\x5f\x47\x79\x89\xbb\xfd\x60\x05\x8e\xe7\x28\x15\x36\x57\x70\x58\xd3\x21\xd7\x0b\x9a\x1c\x32\x29\x89\x93\xf3\x45\x49\x16\x2e\xdc\xa4\xd5\x74\xd3\x3f\xbe\xf3\xf4\x51\x23\x36\x5c\x64\x14\x04\x13\xdb\x32\xd2\xbe\x66\x07\xcc\xa6\x81\x64\x3f\x85\x4f\x4b\xe2\x43\xa2\x04\x77\xaa\x77\x6b\x39\x8f\x0a\x32\x1c\x90\x85\x9b\x44\xe9\x3f\x1f\xff\xf5\x3e\x43\x8d\xe9\x80\x19\xb0\x91\xf5\x35\x6e\x1c\x7a\x4d\x12\x6f\x12\x64\xf5\xa3\x5f\xd5\x41\x8d\x01\x25\xa7\x10\x79\x99\x43\x68\xb3\xce\xb3\x5e\x12\x31\x63\x0c\x9d\x1c\x33\x69\xf7\x2c\x1d\xa2\x37\x9d\x4a\xc6\x48\x34\x66\x48\x25\xd3\x99\x92\xae\xc9\xcf\xd0\xd7\xa7\x55\xa3\x40\x25\xc9\xb8\xfd\x1c\x79\xf9\x87\xc7\x25\xf1\x16\x41\x1e\xb8\x61\x78\x7e\x0d\x6b\xb7\x5e\xc4\xdb\xac\x46\xbc\xeb\xc6\x70\x78\xc5\x0d\xfe\xf0\x70\x32\x1d\x6d\x5f\xd6\x31\xd0\x1c\xab\xb1\x3f\xfb\x80\x2c\xdc\x22\x4a\x5d\x97\xcc\xeb\x91\x38\xbb\x65\x85\xc1\x2a\x0a\xc4\x9d\xe9\x3b\xb7\x65\xd3\xb5\xf6\x96\xf0\x60\xac\x23\xd5\x39\x92\x59\x10\xf6\xc2\xa6\x4f\xfc\xca\xfb\x45\xad\x35\xbe\x68\x6c\x6b\x4f\x78\x38\xa7\xe3\x16\x13\xc6\x66\xbc\xc5\x6b\x58\xbb\xdc\x17\x6f\x68\x76\x3b\x6d\x52\xa8\xb6\xad\xb9\xab\x7b\x49\xf3\x6d\x2f\xf9\xbf\x22\xc8\x92\xf8\x24\xd7\x10\x6c\xb1\x71\x92\xe3\x1e\x2b\x10\x13\x91\x42\x75\xee\xb5\xf3\xbd\x6d\xd1\xda\x90\x2c\x39\xdc\x1d\x91\xbe\xb9\xeb\x0a\xef\xec\x46\x56\x41\x7d\x45\x19\x5c\x04\xde\x55\x60\x0a\x8e\xa2\x68\xc9\x79\x38\x53\x12\x60\x22\x45\x39\xbc\x18\x0a\xde\x0a\x2e\x77\x22\xee\x22\x37\x4a\xe2\xa3\xee\x57\x3e\xff\x08\x34\x8a\x26\x83\xf3\xfb\x36\xa3\xfa\x62\xce\x28\x0b\x3b\x0f\x3e\xe8\x52\xd7\x50\x9d\xda\x03\x5d\xff\x7e\xb7\x56\x34\x42\xbf\xbf\x3f\x74\xd8\x1f\x17\x25\xa6\x65\xbb\x28\xdd\xf5\x15\xc7\x53\xea\xfd\x36\x49\xb2\xc0\x15\x3f\x31\x0a\x07\x04\x79\xed\x4a\x49\xdc\x2e\x4a\xbb\x64\xe1\xa3\x5a\xde\xed\xa2\xd4\xbb\x4a\xa2\xa0\x86\x88\x4c\xb1\x8a\x26\xad\x07\x43\x05\x20\xff\x02\x4c\x49\xa9\xbb\xe9\x22\x47\xdc\x2d\xbb\xdc\x7d\x90\x91\x69\xda\xc5\x43\xa2\xd8\xcd\x9c\xe5\x0e\xe7\xe0\xf0\xfa\x2f\x08\xb2\x4a\x63\x14\x21\xa0\x6f\xff\x43\xfd\x8e\xc1\x60\x92\xbe\x27\x9b\x5e\x93\xc3\xa6\x66\xfe\x3b\x06\xe7\x77\xec\x26\xa3\x41\xfd\xe1\x6b\xb4\xcf\xfd\x1a\x1a\xf4\xad\x2c\x89\xb0\x44\x12\x2f\x12\xe4\x35\x92\xb8\x43\x90\xf1\x80\xcd\x66\x93\xd4\x73\x23\xe7\x7a\xd6\xd9\xe1\x61\xd9\x26\xda\xf3\xcf\xc8\xc2\x0e\x51\x5a\x23\x0b\x17\x89\x92\xfa\x35\x41\x2e\xf0\xde\xeb\xeb\x8e\x4e\xba\x56\xd7\x3a\x7e\x1c\xd9\xa6\x95\xac\xd4\x19\xcb\x9f\x4e\x29\xa5\x8f\x6a\x8c\x7c\xe3\xa8\x9a\x83\xec\x28\x5c\x91\xff\x91\xfa\x05\x78\x9f\x2a\x2c\x79\x59\x78\xa4\x68\xa2\x2e\xda\xad\x71\xed\x8f\xc8\x45\x3f\xda\xab\x66\xe1\x41\x75\xff\x7f\x5f\x53\xed\xc8\x76\x8d\x24\xde\x2b\xc8\x78\xb7\x28\x55\xf0\x0f\x19\x90\x05\xd9\x50\x0d\xaa\x43\x97\x23\x04\x72\x48\x76\x39\xdc\xc9\xb4\x9c\x09\xba\x83\x89\x68\x48\x3b\xe0\x70\x15\x0e\xe8\x6b\x44\x42\x7b\x0c\x09\x11\x9d\x49\x9a\x94\x4a\x5b\x1e\x0f\x49\xf1\xbd\x04\xe5\x69\x5b\x17\x4f\x4a\x0a\x07\x3e\x11\x77\x61\xbc\xe2\xf8\x20\x00\x5c\x1d\x52\x5f\x0f\xc0\x83\x87\x43\x0b\xe1\xf8\xb2\x87\x56\x00\xc0\x15\x41\xf5\x35\x8a\xdf\xfd\xea\xc3\xbc\xe7\xb8\x87\xff\xdc\xc9\x47\x78\xcf\x71\xb3\x1d\x8f\xbd\xa4\xd5\xe7\x8b\xc1\x3b\xb4\xcd\x65\xe7\xb1\x26\x93\xed\x90\x97\x3d\x1f\x2e\xba\x90\xf7\xec\xf7\xf0\x9b\xe1\xb2\x0b\x58\xef\x21\x9b\xc9\xc4\xae\xbf\x42\xcb\x72\x77\xc3\x97\x45\x09\xd6\x40\xab\xfa\x0a\x30\x00\x2c\x7c\x41\x51\x94\xfc\x2b\xd0\xa6\xbe\x0a\x2c\x00\x03\x4f\x28\x4a\x20\x2b\x4a\xf9\x63\x1e\x0f\xde\x91\x3f\xe6\x11\x4d\x78\x07\x95\xb5\x75\xcd\x32\xac\xb3\x0a\x16\x8f\x7a\x0c\x76\x78\xf4\x5f\x8b\x60\x55\x1f\x2d\x64\xd0\xd6\xb7\x9d\x53\x88\x79\x8b\x55\x50\x02\x9d\x43\x31\x87\x5c\xbc\x1f\x78\x91\xe1\x9d\xa1\x54\x43\xd4\x19\xb2\x37\x44\x5a\x21\x93\x88\x67\xec\x89\x48\xc8\x1e\x69\x85\x94\x3b\x9e\x49\x25\x9c\xe9\x44\x2a\xe1\xf4\x13\x92\x8c\x31\x0d\x14\x84\x34\xde\xc7\x69\x3b\x22\x68\x3b\x7d\x1c\x73\xa7\x74\xef\xee\xab\x05\x3e\xb1\xec\xea\x03\x2b\xef\x1f\x6e\xb9\x5f\x3a\x47\xfe\x51\xfd\x15\x71\x83\x8d\x33\x09\x43\x57\xbc\x92\x0d\xde\xbf\xb2\xe9\xfe\xe5\xd7\xef\xe8\x3d\xe9\x6f\x5b\xd4\xb3\x2e\xbe\xdc\x60\x98\x13\x99\x3f\x7b\x6e\x6c\xb6\x5f\x5e\x54\xd3\xd8\x13\x5f\xdc\x3a\x97\x67\xbb\x1b\x06\xda\xba\x23\x8d\x12\x51\xbe\x36\xe4\x3b\x7a\x78\xd1\xa5\x0b\x3b\x5c\xcc\xd4\x04\x4c\xa2\x29\xf8\x7a\x02\xee\x01\xa8\x9f\xff\x30\xc0\xe4\x3f\xf0\x7b\x93\x7c\x7d\xf7\x85\xf9\x07\x1a\x3b\x1b\x6b\x2c\x1c\x56\xff\x0d\x08\x6b\xb1\x79\x1b\x62\xf0\xcf\x60\x22\xe8\x36\x71\x00\xea\x0b\x00\xc4\x20\xba\xeb\x63\x3a\x2e\x06\xc5\x96\x28\xc4\x4b\xba\xdc\xe0\x72\xb3\x7a\xcc\x60\xc5\x94\xcc\x20\x97\x08\xc7\x44\x31\xff\x68\x67\x13\x0e\x94\x20\x22\x02\x0c\x82\x9f\x89\xa2\xba\x43\x74\x05\x9a\x3a\x27\xc6\x8b\x88\x0f\x3a\x9f\x47\xe9\xbe\x4d\xa8\x13\x9d\xa3\xb5\xa9\x3b\x68\x77\xb9\xc9\xf4\x5b\xdb\x1d\x2e\xf9\x2c\x30\xdd\xd5\xfb\xec\x09\x51\x54\x9b\x5c\xe2\xfc\xca\xa2\x74\xfe\x68\x26\x28\x8a\xea\x34\xd3\x28\xba\xb4\x22\xe7\x9f\x2d\x97\x36\x3f\xde\xd4\x99\x0f\x94\xd6\x66\x20\xce\x94\xd4\xe4\xcf\x86\x29\xc4\xed\xe3\x10\x32\xa1\x46\x34\x80\x56\x22\x04\x89\x0e\x88\xa4\x42\xbc\x83\xe3\x41\xc7\x61\x2a\x2e\x9f\xf4\x49\x87\xae\xaa\x58\x67\x30\x05\xe9\x7e\x48\x35\x70\x21\xae\x15\x28\x8b\x01\x70\x56\x70\x6a\x19\x53\xb2\x33\x98\x4a\x44\x43\x7c\x42\xdb\xca\x09\x99\x79\xe4\x4b\xe7\x58\x30\x43\x78\x26\xff\xae\x49\xfd\xae\x49\xb0\x98\xd5\x9c\xd5\x60\x70\xe5\xa8\x2f\x4b\x4e\x94\xc8\xfc\xfc\x37\x60\x97\xc5\x68\xc6\x46\x62\x91\xde\xba\x16\x67\xd4\x3b\x39\xab\x59\x34\x3a\xff\xf9\xb2\x3a\x3e\xd8\xf1\xb7\x8e\x41\xf5\x8d\x85\x6f\x3e\xf4\x26\xb3\xe3\x17\x1d\x36\xc6\x01\x0d\x96\x09\x7f\x11\x04\xca\x26\x3b\x58\x0a\xbd\x71\x6a\x4c\xfa\xe8\x1f\xce\xc7\x76\xc9\x68\x24\x40\xae\xfa\xfd\x79\xf9\x3f\x1b\x24\x33\xc6\x78\x0f\xf9\xc8\xe8\xe8\x5d\x77\x8d\x8e\xe2\xa3\xf9\x51\xdd\xf6\x53\x59\xef\xa4\x56\xef\x70\xb9\xde\xec\x19\xeb\x0d\x55\x35\x23\x1f\xd8\x0e\x1f\xa2\xde\x0f\x4c\xab\x9d\x7c\xc6\x56\x28\x55\xfb\x37\x33\xd5\x5a\x9d\x2c\x57\x8f\x39\x70\x5a\x13\x98\x08\x81\x3d\x88\xd5\xea\x4c\xf5\xb3\xda\xba\xec\xff\xa1\xed\x3d\xe0\xe3\x28\xce\x3e\xe0\x79\x66\xdb\xd5\xbd\xdb\xdb\xbd\xdd\xd3\xdd\xe9\xfa\xed\xaa\x9e\xa4\x6b\xab\xde\x5d\x24\xcb\xb6\x2c\xdc\x8b\xac\x50\x5c\x01\xcb\x36\xe0\x8a\x39\xdb\x90\x40\x12\x0c\x98\xde\x05\x18\x08\xc5\x09\x01\x43\x70\x28\x51\x20\x90\x84\x37\x94\x84\x10\x42\x02\xc1\x49\x0c\x09\x84\x9e\x02\xd8\xba\xf5\xf7\xdb\xbd\x93\x2d\x1b\x07\x78\xbf\xf7\xfb\xc0\xda\x9d\xb2\xbb\x37\x33\x3b\x3b\xf3\x3c\x33\xcf\xf3\xff\x37\xa0\x1e\xb4\x00\xa1\xf8\x97\xbc\xe2\xe3\x57\x0c\x88\xff\x65\x1c\x1f\x38\x79\x95\xc9\xd0\xc4\x95\x05\x5d\xd5\xcf\x19\x1d\x39\x67\x44\xb4\x02\xd1\xc2\xa8\x11\x39\x82\x8c\x08\x62\x5d\x43\x27\xab\xf5\x04\xe8\xf7\x4f\xbe\x22\x58\x98\xee\xc6\xeb\xef\x38\x56\xff\x13\x6b\x19\xff\x92\x57\x7f\xc2\x0a\xca\x57\xc4\xc9\xe3\x2a\xa0\x85\x4e\xde\x1a\x78\xe4\x84\x3a\x1f\xd7\x1a\xc7\xda\x29\x74\xb4\x2a\xeb\x4e\xd6\x14\xb0\xee\xab\x1b\xc0\xe8\xf3\xd4\x0b\xc5\x3e\xdf\x85\xe6\x22\x14\x37\x36\xf9\x8d\x9d\xfb\xff\xde\xe7\xe3\x02\x4b\x18\x6c\x0f\x6a\x41\x0e\x55\xa3\x2c\x1c\xf5\x7a\xd2\x3f\x80\x14\x67\xb0\x91\x30\xb4\x41\x1a\xc1\x51\x9d\xf3\x9b\xd2\xad\x3d\xdd\xc9\xc9\xf9\x5b\xfe\x4b\xa5\x3f\xf0\xd6\xf7\x9f\x3b\xa9\x35\xe1\x71\x29\x0e\x67\x5c\x9e\x7d\x86\x13\xbb\x67\x55\xad\xfa\xe6\xe5\x67\x6d\xd9\x13\xd0\x2a\xef\x06\xcc\x98\x5c\xad\x03\xa3\x5b\xde\x6c\x5b\xd5\xbb\xae\x2f\x3b\xf7\x64\x75\x56\x5b\x37\x9c\x35\x50\xe7\x34\x31\x6b\x19\xd2\x7e\xee\x3c\xc9\x7f\xd9\x19\x2b\x77\x3f\x81\x6b\xd6\xad\x83\x07\x18\x0f\xe5\xb4\xd9\x5d\x8d\x73\xf7\xe7\xd7\xa1\x2f\xd4\x5d\x35\xac\xa1\x8f\xd5\xfd\xcb\xc7\xb9\x13\xaa\xc7\x7f\x59\x73\x7c\x8d\xba\xbf\x34\xb1\x7e\x4f\x7f\x49\x43\x90\xc5\xca\x1f\xbe\xf7\x64\xb5\x1f\x3b\xb1\x9a\x54\xea\xa4\xed\x31\x8e\x1b\xd9\x5e\x5c\x87\x5d\x3c\xfe\xd6\x0b\x06\x1b\x27\xae\xfb\x51\x02\x23\xba\x45\x46\x34\xb8\xc4\x68\xa6\x12\x47\x0c\xd6\xdb\x02\x9c\x54\x01\x92\xb0\x15\x1b\xd4\xb9\xa9\x64\x80\x72\x0b\x2c\x30\x2c\x2e\xf2\xf2\x7b\x7d\xf1\xb8\xcf\x2b\x8f\xc8\x5e\xcd\xd8\xe3\x85\x90\x57\x26\x47\x54\x07\x91\xe0\x38\x87\x62\x6e\x6c\xbf\x28\xd6\xc7\x75\xde\x34\x6f\xfa\x96\xa8\x57\x8e\x95\x78\x56\xd4\x75\x87\x5d\x5e\xb3\x99\xb1\xfa\x05\xde\x9b\xe8\xa9\x09\x3b\xcc\xc0\xf3\x2e\x82\x35\x91\xe0\x9e\xb1\xce\xd8\xb5\xf1\xc5\xe3\xd8\x77\xd4\x81\x43\x96\xbd\x73\xdb\xaa\x42\x7d\x2d\xf5\x2d\x0d\xf1\xe1\x49\x7d\x38\xe8\xf3\x56\x02\xc4\xbd\x78\x7b\x49\x1c\xe3\x75\xed\xf3\xc2\xae\xe6\x78\x85\x52\xd5\x2c\xf0\xee\x60\xb2\xac\x39\xe0\x91\xfb\xaa\x22\xb4\x47\x60\xd7\xa1\xa3\xbc\xe9\xed\x86\x8f\x99\xaf\x88\xc3\x78\xf4\xe5\x9d\xa8\xc1\xc7\x45\xb7\xa1\x0d\x63\x29\x80\xdd\x82\x01\x67\x9c\xc0\x8a\x41\xde\x6f\x80\x68\x1a\x4d\xa2\xb7\x47\x13\x21\x4a\x22\x63\xfc\x31\xc2\x7f\x6b\x88\x95\x2a\xac\x9d\xa1\xfd\x83\x34\xb1\x84\xcb\x25\x80\xd9\x11\xae\xe9\x49\x78\x79\xc1\x6f\x65\xcc\x66\xaf\x2b\xdc\x5d\xb7\xc2\x53\x12\x93\xbd\xd1\x2d\xd3\xe7\xdd\xd4\xc9\xf5\xc5\x2e\x6a\x6f\x34\x2b\x0e\x8e\x4b\x10\xc4\x78\x4b\xe4\xdf\x2a\xb4\x81\xd1\x1e\x3f\x68\x99\x3f\x63\x1d\x2b\x78\xe8\x78\xd9\x74\xd9\x13\x68\x2e\x4b\x06\xdd\xbc\xd0\x5c\xa5\x54\xc4\x9b\x5d\xe1\x79\xed\xeb\x30\x8e\x97\xe0\xed\xde\x38\x40\xa5\xd7\x17\xc4\x7d\x93\x86\xe3\x0d\x2d\xf5\x2d\x7d\x21\x84\x6c\x47\xd7\x32\xcc\xc6\x3e\x52\x25\x6a\x41\x8b\xd1\xe9\xe8\x02\xf4\x5d\x74\x0b\x7a\x10\x3d\x65\xf0\x9a\x44\x23\x8c\x5b\x4c\x25\xd5\x54\x26\x1d\x71\xc7\xdd\x51\x2e\xca\x45\x33\x14\x17\xcd\x14\x37\xf1\x52\xc5\xe5\x7b\x8e\x2a\xda\x08\xb9\xa3\x9c\x2e\x3e\x26\x25\x51\x72\x0b\xe3\x2c\x31\x2d\x90\x36\x8c\x60\x4b\x21\xea\x16\x52\x49\x35\x9d\x4d\x67\xc0\x2d\x44\x5a\x20\x9d\x84\xb4\x41\x4b\x17\x0e\x19\xe8\xa4\x45\xf0\xcb\x90\xd1\xcf\x80\x8f\x32\x4a\xd4\x00\xc3\x74\xa7\xe2\x99\x74\x81\xc6\xa7\x14\x8a\x0b\x77\x52\x8a\x8b\x72\xc5\x72\x44\x8b\xe5\xf8\xc2\x02\xde\xb5\xa5\x9c\xd3\xc9\x95\x3e\xda\xd9\x99\x7f\xa6\xbf\x77\x06\xfc\xb0\x4b\x89\x87\xcd\x74\x27\x00\x2b\x88\xd0\xc6\xd8\xca\xa3\xe1\xae\xae\x50\xac\xdc\xc6\x1c\xc6\x84\xcd\x97\x49\x97\xba\x85\xd2\x65\x3e\xf7\x45\x11\x0f\x0d\xda\xf6\xf6\x76\xec\xe6\x2d\x9d\x95\x17\x6b\xef\x69\xef\x5f\x5c\xd5\x61\x11\x04\x4b\x47\xe5\x25\x58\xbe\xa4\xb2\xc3\x22\xe4\xed\x0b\xa7\xa5\x32\x33\x98\x90\x29\x6a\xed\x85\xb0\xbb\xb4\x2e\xe5\x73\xbb\x7d\xa9\xba\x52\xf7\xc3\x5d\x5d\x06\x9c\x75\x17\x6d\x0d\xc5\xca\xe1\xd3\x89\x0b\x3c\xef\xdc\x9c\x74\x1e\x70\xde\x17\x49\xa5\xfe\x3e\x59\x5b\x00\x77\x4f\xde\xa6\x5d\x51\x56\xed\xe7\xe2\x10\xd1\x3e\xf1\x60\x47\x10\x3c\x6b\x76\xa7\xdd\x15\xe5\x31\x78\xff\xb6\xb2\x0a\xf7\x23\xe6\x52\x56\x74\x95\xc9\xbe\xa6\xed\x4d\x3e\x59\x2e\x6d\xe8\xeb\x48\x79\xc1\xe6\xb6\x12\xf5\x37\xa5\x52\x37\xa5\xf3\xc4\x0f\x4f\xa9\x6a\xa2\x1c\x0e\xaa\xa9\x6a\xde\xde\x07\x66\x57\x36\xeb\xe1\xe6\xca\xd9\x44\x13\x94\x3d\xfd\xb4\xb4\x58\x5a\xae\xfe\x72\xe3\x8e\xc6\x52\x59\x2e\x6d\x34\x4e\xbe\x66\x58\xa7\xbd\x15\x74\x62\x0f\x38\xb5\x3f\xc6\x5d\xbe\x6a\x30\x1d\xbf\x86\x6b\x45\xbe\x23\x88\x7a\xcb\xf0\x97\x1d\xef\x1f\x8b\xd0\x69\xe8\x7c\x74\x09\xba\x11\xfd\xc0\xd0\xd3\xa3\x11\x85\xcb\xa6\x92\x94\x3b\x9a\x49\x27\xe3\xa9\x4c\xd8\x9d\xe2\x52\xe1\x93\xbc\x96\xf1\x97\x97\x89\x72\xa9\x8c\xf1\xf2\xe2\x99\xa8\xd1\x61\x5a\x20\xf5\x85\x17\xab\x66\x21\x93\x8e\x94\x82\x90\x34\x18\x70\x19\x3a\x64\x74\x91\x4c\xda\xe8\x15\x21\xa3\x87\x40\x8a\xe0\xa2\x9c\xac\xc8\x4a\x8a\x1f\xef\x7b\x85\x7e\xa6\xf7\xbd\xf8\x49\x7a\x28\xf1\x3f\x8a\x24\x8a\x92\x02\x03\x0b\x17\x8e\x35\xae\xd6\x7e\xb1\xf2\x74\x08\x2d\x58\x10\xf0\xb9\x08\x58\x60\xb2\x25\x6a\xb3\xb0\xd7\xcc\x65\x93\x95\x0b\x16\x54\xd7\x66\x39\x33\x0c\x2c\xc2\x4c\x38\xf1\x90\x4f\xe9\xea\x56\xfc\xa5\xca\xa4\xa9\x31\x17\x81\xf3\x23\x73\xe7\xe2\x17\xbd\xec\xfc\xc6\x47\xf3\xde\x47\x1b\x17\xd8\xbd\x5e\x76\x7e\xd3\x8f\xf0\xdb\x46\x78\xcc\xbb\x6c\xd3\xe9\x6c\x4d\xdc\xbf\x6a\x0a\x3c\xe2\x97\xbb\xbb\x64\xbf\x5f\xee\xea\x96\xfd\x30\x73\x51\x26\x99\xb0\x9b\x16\x01\xe1\xf2\x05\x20\xf6\x72\x97\x08\xd5\x62\x77\x22\xd1\x7d\xcd\xe0\x60\xfe\xe7\xf0\x81\xf6\xcd\x0a\x37\x11\x82\x33\xb5\x4d\x75\x9e\x78\xcb\xe0\x33\x3d\xde\xfa\xec\x6b\xf9\x95\xb5\xaa\xea\x3b\xc5\x9e\xb2\xc4\x26\xcd\x5b\x3e\x33\x9e\x4a\xc5\x67\xee\x9d\x19\x4f\x65\x7c\x3e\x33\xf1\xd4\x6f\x26\x4d\xfa\xcd\xe4\xfc\xbc\x77\xcf\x69\xea\xa7\xdd\x6e\xba\xbf\x69\xf8\x03\x3d\xcc\x08\x02\xd3\xdf\x34\x4c\xb2\xda\x5a\xed\x63\x70\xf4\x7e\x7b\xf9\x6c\xed\xf3\xc9\x3f\x98\x15\x4f\xa5\xe4\xfe\x1f\xf4\xeb\x0f\x19\xd0\xec\x6a\x6b\xdc\x93\x82\x6f\x6b\x57\x84\xb1\x58\x09\xe7\x17\x6c\x29\x73\xd4\x16\xea\x3f\x88\x47\x0a\x42\x40\x17\x34\x68\x95\x4f\x2a\xe3\x0a\x33\x88\x0c\xb8\xc7\x17\x65\x20\x0b\x7a\x22\x9e\x63\xf9\xd4\x27\x7f\xe8\x16\x2c\x79\x80\xdb\x6c\x56\xb3\xf4\x61\x99\x97\x78\xce\x6a\xcd\x7f\x04\xfd\x56\x8b\x45\xfc\xb0\xc2\xa3\xed\x75\x61\x28\x51\x3e\x16\x89\x33\x5c\x5a\x6f\x22\xc2\xc3\x28\x80\x24\x3a\x1c\xd5\x70\xba\xd3\x3d\xb6\x10\xf2\xd7\x0b\x9c\xa3\x1a\x9f\x1d\x22\x76\x55\x1f\xcf\x9d\xcf\x1f\xe5\x17\x91\x2b\xc1\xd8\x41\x70\x13\xb4\x24\x36\x41\x52\x05\x23\x05\x44\x30\x62\x59\x05\x32\x90\x95\xbe\xb0\xf9\xb2\xcd\x1d\x7c\xd4\x65\x62\x4c\xe7\xff\xcc\x6c\x36\x39\xf7\x07\x79\x42\x65\xb8\xc7\x02\xbc\x76\x06\x00\x25\x84\x1e\x75\x31\x26\xb3\x36\x06\xd7\x9b\xfe\x78\xdc\x22\x35\x01\x6f\x44\xac\x36\xee\xf7\xa0\xdd\xc5\xb2\xf6\x18\x31\xcb\x16\xcd\x2b\x58\x0b\x47\x6d\x76\x07\xbc\x0e\xf8\x65\xe7\xc5\x5f\xc4\xac\x41\x16\x06\x91\xff\x41\xd8\x40\x44\xaa\x06\x3e\x49\x06\x21\x19\xa0\x8a\x3c\xf8\xa5\x20\x32\x2c\x38\x80\xa5\xa3\x74\x58\x8e\xd5\xe0\xc2\x4c\x92\x00\xa5\x05\x64\x83\x6f\xbe\x95\x4e\x65\xf1\xcf\xe1\xa0\xe6\xdf\xff\x3d\x68\xe8\xe9\x81\x10\x1b\xf6\x84\x02\x2c\xcd\x2b\x8c\xc9\x0c\xc0\x33\x31\x96\x65\x03\x21\x4f\xd8\x11\x84\xc3\xda\xc5\x2f\x6a\x2f\xd6\xd6\xc5\x62\xf1\x0e\xcf\x17\xaf\x60\x43\x70\x18\xae\x3b\x94\x87\xe5\x66\x8a\x24\x08\xda\xe2\x94\x1c\x74\xc9\x62\xb5\xfd\x8a\xf2\xb2\x8b\xaf\xb8\x42\x5d\xc0\x71\x0e\xc9\x61\xa1\x09\x82\xc7\x66\x82\x24\x29\x4b\xa8\xe4\x0b\xf9\x4e\x3d\xdf\x85\x0a\x38\x58\xf4\x28\xf5\x6d\x63\x6f\x55\x42\x3e\x14\x44\xc8\x4c\xba\xc1\xad\x30\x19\xc8\x48\x90\x91\x54\xb7\xd9\x06\xbb\xe1\x03\xed\x5e\x4d\xa4\xaa\x34\x11\x40\x93\xae\x84\xb9\x00\x30\x2f\x3f\x0b\xe6\x6a\x2e\xed\xfb\x54\x02\x06\x34\x49\xbb\x07\xe6\xc1\x3b\xda\xf7\x35\x17\xd1\xa2\xbd\xa8\xfd\x15\xda\xb4\x83\x67\x6a\x7f\x34\xf8\xd8\xe3\x67\x0e\x81\x1f\x03\x60\xed\x20\xf9\x7b\xed\xaf\xda\x4b\xc0\x6a\x9f\x68\x1f\x6b\x3f\x85\x52\x62\x9b\xf6\x53\xed\x13\xa8\x45\x34\xb2\x1e\x41\xd4\xbf\x0d\x1b\x13\x2b\x72\x14\xcb\x83\xa8\x30\x17\xe5\xc2\x5c\x34\xae\x52\x0c\xa8\x60\xfc\x11\xc0\x98\x21\x13\x76\x53\xe6\xc3\xb7\x8f\x50\xb7\x8c\x8c\x0d\x84\x09\x47\x38\x3f\xbf\x0b\xbf\xd2\x95\xff\xd7\x32\xbc\x6c\xd9\x6b\xf0\x46\x4e\x8b\xe6\x1f\x24\x42\x43\x70\x20\x9f\xc3\xb9\xaa\x9b\xef\xbc\x09\x7b\x77\x6b\x7b\xaf\xc0\x8f\x6c\xc9\x1f\xd9\x42\x6c\xc9\x5f\x30\x84\xb7\x1f\xba\xed\xd6\x5b\x4f\x62\x7b\x31\x13\x2d\x9f\x80\xdb\x5f\x04\xa3\x1d\xc7\xb9\x8d\x45\x64\x16\x1b\x94\xa9\x84\x28\xd0\x85\x3e\x10\x20\xb2\x49\x51\x97\x9e\x40\x6d\x25\x64\x03\xc5\x56\x97\x23\x08\xe4\x9c\x30\xce\x39\x8f\x0d\x73\xe3\x66\x1a\xa1\xb7\xb5\x47\xdf\x7e\x1b\xa6\xc2\x40\xb6\x2f\x9b\xed\xd3\xa6\xb0\xdf\x99\xba\x69\x4e\x69\xb2\x4f\xb0\x3a\x28\xbd\xe5\x28\x87\x55\xe8\x4b\x96\xce\xd9\x34\xf5\x3b\xff\x3d\x0b\x9f\x4d\x59\x0e\xbe\x34\x5f\xcb\xce\x7f\xe9\xa0\x85\x32\xc2\xf0\x9c\x1e\xc6\xa2\x61\xd0\x01\x7b\x0a\xbf\xf2\xb6\xf1\x23\xd9\xdc\xd7\x7c\xec\xf1\x59\xda\xd9\x5f\x7c\xbe\x11\x3e\xee\xbb\x76\x18\x38\x1f\x27\xda\xcb\xa4\x8e\x7a\xbe\x8e\x7b\xab\x18\x54\x47\x85\x2f\x0d\x6e\xd8\xfa\xc0\xd6\xad\x0f\xe0\x07\x8c\xd3\x38\x8f\x51\xe1\x0b\x1c\xfb\x9e\x9e\x56\xfc\x37\xf1\x77\x30\x32\x1b\x3c\xe0\x7c\x98\x4a\x99\x21\xa5\x86\x8f\x33\xd5\x42\xbf\xd4\xce\xc6\xd9\x41\x2d\xa3\x65\x06\x57\x60\x0b\x1c\x3e\x11\x29\x61\xb7\xf6\xc2\x01\xfc\x50\x7e\xfa\x08\xd4\x9d\xcc\x3f\xb9\x9f\xda\x4e\xdd\x81\x2c\x86\x77\x65\x97\xde\x17\x40\xa4\x95\x04\x64\xd5\x6c\x00\xa4\x04\x30\x2c\x48\x01\x50\x5b\x81\x4f\x60\x25\x46\xb1\x98\x09\x60\x49\x54\x5b\x31\x6f\xf8\x43\xc8\x4a\x82\x50\x64\xa5\x0d\xc4\x90\x1a\x00\x9a\xa7\x0d\xdc\x85\xb8\xac\x24\x48\x3d\xa7\x95\x54\xb3\x6a\x8c\x12\xa5\x00\x10\x35\xa6\x73\x33\x4a\xa9\x5f\x8e\xf5\xa8\x6b\xd8\x67\x4f\x6d\x9b\x46\x90\x57\x2e\x5e\xb4\xf9\xa0\x30\xb5\xaa\x4e\x7b\x43\x7b\xbf\x32\xd1\xee\x0a\x2c\x56\x9b\x0f\xbe\xde\x96\x59\x3c\xd7\xe4\xb0\x57\xc5\xe6\xbe\xf8\xcc\xf2\xc4\x94\x81\x76\xa1\x24\x44\xbb\xde\xc4\xea\x01\x37\xed\x7c\xd8\x3b\x87\xaa\xaa\x0c\x8f\x69\x37\x7c\xb6\xdb\xe1\xb6\x53\x0c\x36\x47\xdd\x5e\x33\x51\x1a\xa9\x8f\x05\xce\x7f\x1c\xb6\x40\xf9\x8d\xcd\x4e\xc0\x77\xb6\xf5\x85\xb8\x81\x01\xce\x65\x6b\xe2\x56\xaf\xab\xf2\x6f\x9a\xb4\x28\x67\x32\x5d\x87\x37\xfb\xa2\x66\x53\x4d\x1d\x63\x89\x78\xfd\x51\x33\x53\xea\x37\x99\xa2\x63\x2e\xef\x19\x5d\x3d\x42\x6d\x0d\xc1\x99\x84\x48\x26\x3a\xf4\x33\xa7\xf9\xaa\xab\xe8\x48\x3d\xf1\xe8\xdd\x9a\x27\x90\xf6\x73\xdb\x64\xdf\xb0\xad\xb4\xdc\x97\x36\x27\x7f\xb1\xe5\xfe\xa9\xde\xea\x40\xc0\x61\x4d\xb8\xe2\xf3\x12\x7d\x42\xab\x81\x03\x5b\x78\x57\x26\x63\xb4\x6f\x44\x0b\x0a\xec\xd6\xb2\x41\x45\x9c\x55\x0d\x77\x76\xc3\x55\x9f\xd7\xdb\x47\x1f\x33\x75\xe5\x43\x0a\x60\x3e\x9d\x95\x15\x3a\xa4\x38\xc0\xe0\x30\xd4\x1b\x36\xab\xc8\x8a\x4c\xd1\x4c\xa1\xad\x03\x84\x24\x4a\xa4\xae\xab\xb8\xbe\x20\x18\xf6\x0f\xc4\x2a\xa1\x52\x99\xdd\x6b\x9a\x7f\xe1\x2a\x02\xab\xd5\x93\x2f\x7b\x44\xe8\x52\xaa\x6e\xbc\xa7\x4a\xee\x72\xdb\x13\x91\xc0\xb3\xbf\x09\xc7\x92\xf5\x56\xca\x71\x9b\xb6\xe2\x76\x1b\xe5\x75\xd4\xdc\xfc\xf9\x43\x91\x80\xe3\x5b\x66\xae\x72\xf8\xf7\xda\xc7\x17\x0e\xca\x95\x29\xd2\x24\xc6\x68\x30\xd1\x2e\xfb\xca\x87\x80\x78\xd8\x13\x0c\x92\xb5\x50\x76\xdc\x6e\xde\x0d\x95\x09\x51\x58\xe9\x92\xb2\x2d\x9d\x67\xdb\x16\x77\xd5\xcd\x17\x82\x03\xd0\xe8\xf6\xd2\x94\x20\xd0\x4c\x89\xc0\x7b\x18\x2a\x1a\xa1\x98\x92\x3c\xc1\x28\x25\xe4\xaa\x55\xb4\xed\x86\xfa\x59\xbe\xc4\x69\x7c\xc7\x2a\xfc\xf3\x8c\xa8\x86\xdb\x7c\xb6\x88\x43\xa8\x0d\x74\x7f\xf7\xb9\x18\x95\x16\x22\xd6\x7e\xc1\xbf\xc8\x2e\xc8\x6e\xb0\x42\xf2\x84\x79\x08\x50\xf7\x91\x1c\xa9\x37\x6b\x04\xa1\xb8\xa4\x0f\x2b\x09\x22\xc3\x45\x33\xad\xa4\x6a\x20\x0c\x86\xdd\x61\x4e\x08\x60\x35\x4b\x3c\xd0\x2f\x3d\xb0\x60\xc5\xde\xe1\x19\xe1\xef\x4d\x5d\xd7\x5d\x2b\x50\xc0\x90\xff\x82\xe9\xda\x83\xf6\x50\x57\xed\x8c\x17\xdf\x8f\xb6\x02\xae\x5f\xbc\x71\x63\x23\x0e\xbd\xea\x9d\xb7\x64\xcd\xbc\x6a\x8a\xd1\xe6\x8f\xe5\x0f\x05\xd2\x99\x00\xe0\x89\xfb\xfc\x05\x06\x59\x85\x8e\xd2\x09\x9c\xe1\xc2\x99\x30\x17\x8d\x30\x2c\xc1\xb8\x53\xc6\x6f\xb5\xc2\x17\xf6\x42\x87\x5b\xab\x9a\x62\xe9\x12\x0b\xc0\x11\xf4\xb8\x09\xa8\x92\xcc\x19\xdd\x3b\x2a\xe7\xdd\x78\xda\xa4\x6f\xc1\xed\x13\xdb\x6f\xda\x8f\x44\x90\xca\xca\x25\xd8\xf5\x14\x4c\xb6\x54\xcd\x5d\x31\xb7\xe4\x4e\x6d\xb0\xe1\x9c\x55\x1d\x18\x6a\xc9\x9a\xe3\xf7\x42\x89\x23\xed\x38\x4f\x23\x03\xb5\x47\x3c\xb9\x4a\x8f\xff\xed\xb4\x6b\xb7\x5b\xec\xac\x45\xbb\xd9\x6e\x32\x0b\x45\xbc\x40\x40\xb2\x53\xcb\x59\x2c\x90\x73\xf2\x3c\x69\xec\x59\x1c\x1e\xb7\x29\x41\x38\x4f\x8d\xea\xcf\x2c\xda\xad\x1c\x85\x4d\x56\x8b\x4e\x62\x38\x7f\xf4\x39\x6e\xa7\x1d\x06\xf5\xa7\xc3\x69\x76\x92\xe7\x0f\x1b\x06\xdc\xe4\x01\xd9\x09\x39\x8b\x45\xcb\x39\x8b\xdc\x56\x40\x30\x88\xc8\x1b\xcf\x1c\x47\xc1\x1f\xc7\xc0\x97\x0a\xe0\x19\x0c\xd2\x4b\x70\x42\xa1\xf0\x81\xe3\x7f\xe3\x54\xd6\xa8\x41\x91\x6b\x8b\xa0\x47\x8b\xcf\x2c\xec\x4b\x1f\x8f\x9e\x2f\x81\x48\x8f\xea\x45\x38\xa1\x54\x78\x27\x6b\xd1\x6e\x61\x4d\x13\xab\xa0\xdd\x6e\x39\x6a\x8f\xbf\x96\x46\x48\x36\xbc\x1e\x8b\xea\x9c\x2e\xac\x47\x23\x04\xce\x14\xa5\x6d\x5d\x66\x37\x34\xbe\x02\x47\x28\x8c\x73\xab\x16\x88\xee\x24\x41\xa4\xd6\x2a\xb3\xb7\xe7\xea\x16\xcd\xed\x68\x99\x35\x2b\x75\xdd\xd5\x57\xae\x5d\x7b\xdf\xd4\x95\x2b\x22\xd5\xa7\x2e\x9b\xb2\x61\x30\x9d\x9e\x19\xed\xf8\xb6\xf6\xe7\xd2\x40\x5b\x36\x1b\xef\x22\xa6\xf5\x3e\x00\x04\x00\x74\x9c\x7f\xfe\xcf\x42\xa1\x70\x04\x08\xa0\x3e\x39\xb8\xfb\xf2\x40\x20\x12\xe9\x88\xb5\x77\xa5\x06\xd7\x6e\x7d\x96\xdc\xdc\x32\x6d\x5a\x5b\xd6\x65\xa5\xaf\x3e\x73\x75\x39\xe1\x24\x48\xdb\x51\x7b\x7e\x03\x8b\xbc\x20\x1d\x20\xe0\xe2\x9c\xc1\xe6\x54\x3c\xe3\x7b\xf3\x73\xf5\x3f\x3a\x37\x76\x2e\xf1\x9d\xb1\x73\xb1\x2b\x7f\xee\x20\xae\xc6\x7f\xcb\x9f\x85\x33\xf9\x0d\x63\x1f\x9c\x8f\xaf\x26\xce\x1e\x7b\x1b\xdf\x6c\xf0\x47\x1a\xb8\xb3\xd4\x36\x63\xbe\xf7\x23\x15\x4d\x47\x8b\x10\x42\xc9\xac\x31\x3f\x91\xc5\x33\x55\x98\xc5\x0a\x9d\xbb\x00\x65\x69\x38\x54\xb6\xe8\xea\xae\xb1\xb8\xa0\x18\x7b\x84\x10\x00\x77\x38\x9d\x35\x2c\x59\x83\x90\x4d\x4a\x6a\x56\x12\x19\xe3\xcb\x28\x7e\x18\x49\x11\xde\x08\x49\x52\x48\x84\xc7\x43\xa2\x18\x92\xc6\x0e\x57\x34\x37\xcd\x6d\x6e\x26\x67\xb6\x57\x4f\x6b\x9e\xdb\xfc\xed\xe6\xca\x8a\x66\xe8\x4d\xb4\xe3\xef\xaf\xce\x8d\x9d\x96\x3b\x73\x0a\x63\xb3\x33\x53\x97\xfe\x76\xe9\x54\xc6\x6e\x63\xe0\x1a\x3d\xbf\xb9\xa2\xb2\x99\x2c\x95\xf4\xe7\x14\xfe\xbd\xd8\x5c\xa1\x0d\x54\x36\x37\x57\xc2\xf7\x2b\x9a\xf9\xfc\xb2\x44\xfb\x5f\xf5\xd8\x5f\x0b\xc7\xf6\x04\xbe\x01\xae\x56\x9f\x39\xf7\xdc\x67\xd4\x9d\x76\x86\xb6\x5d\x58\x51\x71\xa1\x8d\x66\xec\xf9\xab\xc7\xef\xaa\x6c\x6a\x42\x66\x43\xee\xfa\xdc\xe0\xdc\x70\xa0\x08\x98\xc0\x0d\x71\x48\x41\x0f\x7c\x6c\xe0\xa9\x44\xe9\x4c\x5a\x4d\x4a\xb4\xcc\x64\x25\x11\x64\x7d\xdc\x61\x68\x7d\xfc\x6e\x25\x9a\x41\x86\xb4\xa2\x0b\x3c\x05\x79\x47\x94\x0c\x0e\x59\x5d\xf2\x31\x66\x3a\x39\x5b\x5c\x4e\xd1\x07\x79\x86\x16\xd5\x6c\x3a\x93\x20\x14\x5a\x12\xa2\x09\xa0\x95\xac\xac\xc8\x34\x43\x07\x40\xd7\x0c\x19\xc3\x01\x4a\x4a\x8a\xb4\xe1\xbc\x6a\x4c\xb1\x84\x3e\xf6\x13\xfa\x94\x00\x05\x8e\x13\x86\x56\xe4\xc2\x8c\x40\x89\x92\xc0\x52\x0c\x8b\xf5\x79\x41\xef\x9d\x2c\x36\x86\x44\x51\xbf\x44\x7f\x0f\x46\x29\x0d\xeb\x4a\xe3\xee\x00\x76\x67\x95\x84\x3e\x60\x49\x62\xc1\x91\x5f\xbf\xc0\xd8\xc0\xcd\x1a\xd4\xf9\xad\x20\x82\x5e\x20\xb7\x28\x25\x19\x3a\x95\xa4\xf4\x2a\x91\x85\xa9\x4a\x49\x27\x80\x89\xe8\x41\x49\x50\xb3\x6a\x5a\x17\xe6\xa2\xac\x2e\xf6\x63\x49\xd4\x9f\x90\xcc\x42\x00\xeb\xc5\x01\x03\x9a\x85\x30\xc0\x8b\x18\x96\x50\x0a\x4d\xa1\xff\x80\xde\x08\xba\x74\x08\x19\xa3\x88\x7a\xe1\x08\x46\xa0\xa5\x82\x09\x28\x56\x5b\xb1\xb1\x1a\x27\xeb\x99\xc6\x3a\x1c\xa1\x66\xd5\xc2\xfc\x98\x32\xc0\x6c\x98\xe2\xb5\xa2\x21\x79\x1a\x8f\x65\x41\xaf\x86\x58\x7c\x70\xb1\xa5\x03\x14\xbe\xd6\x6a\x26\x29\x9e\x5a\x4c\x3a\x2c\x1e\x13\xa1\xdd\x48\x92\x14\x41\x30\x16\x33\xc9\x91\x80\x31\x60\x62\x8e\x4a\x32\x04\x81\x19\x30\x83\xa5\x37\xea\x09\xcf\x0b\x5b\x95\xa0\x03\xac\x66\xb7\xcb\x6e\x07\x36\x52\x22\x92\xa4\x60\x55\x1c\x4d\xb4\x89\x16\x4b\xe2\x7e\x8b\xd5\xe5\xb6\x53\x5c\x89\xe8\x5c\xed\x02\x73\x79\x09\x01\x11\xbf\xaf\x14\x83\x99\x63\x2c\x34\x69\x65\x38\x00\xc1\xc3\x09\x00\xa2\xd9\xa4\x80\x9d\xb2\xb0\xa2\xc5\x27\xd6\xa8\xb8\xc2\x17\xa2\xcc\x56\x8a\x30\xdb\x84\x1e\x73\x95\xb7\x24\x6b\x01\x70\x96\x54\x70\x72\x24\xec\x13\xed\x18\xd3\xb4\x95\xb1\x13\xfe\x99\x59\xd1\x5d\x21\x12\x10\x28\xb5\xbb\xa4\x99\x26\x0c\xb4\xc9\x1d\x22\x31\x4d\x52\x18\xc7\x12\x54\x19\x29\x7c\xcf\xec\x24\x82\x01\x53\x05\x9b\x50\x48\x3b\x0d\x84\x60\x49\x6c\xbc\xa8\x4a\xb2\xda\x30\x88\x66\xda\x4d\x48\x18\x73\x58\x74\xc4\xa0\x6b\x46\xfe\x36\xc2\x4a\x9b\x31\x61\x21\x08\x2b\x01\x77\x60\x33\x47\x53\x66\x8a\xc6\x04\x5b\xe1\x32\x5b\xf7\x59\x6c\x04\x4d\x92\x04\x4b\x9a\x70\x96\xb2\x13\x0e\xb3\x99\x22\x30\x58\x30\x49\x9a\x58\x13\x38\x59\xac\x0a\x22\x66\x3c\x52\xdc\x2b\x9b\xe4\xa5\x7e\x6e\x99\xec\x92\x2c\x91\x40\xd5\x5c\xbe\x4f\xa8\x9a\x12\x4b\xf9\x4b\xf7\xb4\xf3\xed\xb1\x4a\x0f\x65\x89\x00\x58\x2c\x60\x61\xe7\x72\x01\x8f\x3b\x13\x4a\x45\xcc\x76\x17\xb6\x51\x24\x44\x08\x22\x22\x6c\x8f\x7a\x4e\xef\x90\x2a\x2b\x09\x97\x60\xd9\x54\xdb\x5d\x6d\x25\x09\x00\x57\x80\x31\xc5\x45\x59\x38\x9b\xb5\x91\x38\xdd\xaf\x74\x64\x56\xc5\x1a\x26\x51\x54\x34\x72\x9a\xba\xc0\x61\xa2\x5d\x56\x8b\xcf\x97\x8d\xb8\x7c\x2e\x33\x8b\x45\xd9\xe5\x14\x78\x4b\xfd\xc2\xb2\xa6\x96\x9e\x4c\xad\x55\x09\x85\xc3\x04\x0b\xac\xc3\xeb\xf4\x91\x67\x00\x0f\xb4\x8d\x60\xc1\x41\x58\xed\xb4\x36\x00\x26\x8e\xa2\x4c\x56\x00\xa7\x85\x30\xe9\x2f\x1c\x6b\x37\xb8\x3c\x8e\x12\x9f\xb3\xd4\x12\x61\x2a\xa9\xda\xb3\x05\xa1\xed\xf6\x73\xca\x30\x59\xbd\x39\xa1\x34\x07\x5d\x36\x68\x1d\x08\xc4\x44\x77\x47\xc4\x44\x04\x00\x92\x69\x20\x3a\x4b\x78\x07\x43\xb6\x53\x81\x32\xb7\x99\x30\x6d\x73\x98\x09\x92\x69\xe8\x04\x68\x08\x3a\xaa\x82\x98\xb0\x9a\xa1\x94\x17\x03\x50\x11\x23\x1d\xac\x4d\x02\xd6\x4b\x99\x24\x87\x15\x30\x07\x36\x33\x67\x66\x69\xc2\x6a\x27\xe8\x20\xc9\x93\x14\x83\x49\xd2\x21\x01\xd8\x9c\xbc\xc3\x4c\x9a\x31\x45\x91\x34\xc1\x00\xdb\xec\xb5\x59\x5b\x83\x66\x82\x29\x69\xab\xed\x2e\xa5\xbf\xd7\xe0\x5a\x66\xf2\xb8\x83\x6d\x7e\x3f\x0f\x40\x76\x9c\x61\x0b\x91\xd2\xb7\xcc\x8e\x44\x19\xe1\x68\xaa\x4b\x78\xba\x4d\x4e\x13\xa6\xcc\x4c\xda\xe9\x98\x2a\x9b\xe8\x44\x49\x97\x54\x0a\xfc\x39\x21\xf7\xca\x05\x5e\x57\x3c\x64\x25\x2a\x38\x2f\xc6\x66\x0a\x1c\xc2\x53\x26\x86\x20\x09\x0b\xcd\x00\x76\xaa\x24\xb8\x0e\x58\x39\x13\x90\x24\x90\x3e\x82\xc2\xef\x62\xda\x84\x1d\x60\xb7\xd3\xa4\x9d\xa2\x09\xda\x46\x00\x79\xe8\x17\xb6\x12\x49\x14\x39\xc1\xee\x22\xf9\x5e\x9f\x93\x71\x99\x4b\x45\x0e\xf4\x29\xca\x1f\x2a\x01\x68\xb6\x93\x56\xc6\xc6\x59\xa5\x79\x56\x67\x6d\x3c\x66\xb6\x91\x16\x57\x24\xd2\x13\x16\x28\xc2\xee\xa8\xa0\x3d\x36\xd1\xea\xe8\x66\x39\x33\x5d\x62\xa2\x43\x2c\x41\x57\xa5\x3b\x14\xee\xc9\x74\x6f\xc4\xec\x71\x8a\xa5\x89\x5a\x97\x7b\x59\xb6\x5b\xb8\x2c\x3d\xfc\xec\xc2\x2d\x95\x6e\x28\xf5\x55\xdc\xda\xbd\x74\xc3\xda\x95\x4d\x2f\xcd\xab\x9b\x52\x86\x71\x24\x1e\x00\x30\xf1\xb6\x52\x2a\xce\xce\x56\x27\x9f\xdf\x31\x85\x0a\xd7\x45\x4b\x5c\xf1\x50\x89\xd5\xda\x3b\xc5\x16\x4c\x05\x7c\x56\x47\xd1\x3f\x5e\x97\xc5\x58\x14\x42\x0a\x4a\xa0\x24\x6a\x45\x73\xd1\xa9\x08\xc5\x65\x22\xca\xb0\x24\xa3\x88\xa9\x24\x21\x2b\x64\x58\x9f\xa5\xa5\x02\x1d\xb0\x22\x2b\x2c\x30\x21\x4a\x66\xf4\x41\x0e\x22\x4c\x96\xd2\xe7\x77\x51\x6a\x25\x79\x59\xd1\xef\x32\x46\x93\x56\x48\x06\x48\x29\x7b\x9c\x07\x41\xc5\xa9\x18\x3b\xb3\x57\x6d\xbb\x38\xea\x78\xf4\xdd\x0b\x5b\xdc\x21\xed\x97\xda\x35\x30\xbf\x3f\x79\xe5\xb7\xb7\xc8\x71\xd2\xb5\x7c\xe3\xd6\x6f\x8f\x86\x20\x41\xbc\xfe\x9b\x9f\xcf\x2b\x5f\x73\xd5\xd8\xc7\x00\x80\x67\xee\xff\xac\x6f\xe6\xce\xf5\x93\x36\x4f\x69\x76\x1c\x24\x76\x83\x59\xe8\x9a\x76\xfe\xa4\x12\x1e\x9b\x89\xd8\xf4\xc9\xdd\xcd\x99\xca\x80\x65\xf3\x09\x7a\x58\x4c\xbf\x93\x76\x4f\x9f\xb7\x6b\xba\xf5\x1a\x7c\x65\x5d\xeb\x12\x86\xdd\xfa\xe7\x05\x0b\x6e\x1c\xec\x66\xed\x40\xfd\xee\x95\x3b\x3b\x3e\xb9\xf6\xc3\xe6\xe0\x87\x6f\x4f\x7b\x8b\x38\x0b\xe0\x8a\x3d\xfc\xbd\xbf\xf5\x4e\xca\x36\xbb\xb5\xc8\xdf\x1f\x04\x5b\x49\x7b\x43\x8f\x3f\x53\x41\x79\x28\x8a\x24\x28\x9a\xa1\xf0\x2f\x4e\x86\xc7\x58\x6c\xbf\x56\x34\xa8\xeb\x1f\x09\xa2\x06\x12\x64\x26\x9d\x4a\x06\x88\x82\xed\x15\x44\x0d\x7a\x26\x03\x35\x47\x2a\x70\xf4\x26\x88\xf1\x7d\x94\x56\x5c\x20\xde\xa2\x0d\xa6\xd9\x02\xfa\x9c\x2e\x15\x65\x53\x49\x52\x74\xb9\x05\x46\x24\xaf\x56\x1a\xe7\x4f\xaf\x5b\x11\xf0\x57\xb8\x1c\x97\x57\x76\x97\xc5\xaa\xbc\x35\x0d\xc3\xf7\x0f\x75\xe7\xd6\x74\xc9\xbd\x73\x9b\x77\x2f\x14\x43\xfd\x1d\xa9\x59\x75\x15\xc9\xd2\x64\xea\x5f\xf7\xf4\x7c\x73\x4d\x27\xac\xfe\xf3\xad\x3b\x56\x4c\xef\xb9\x4c\x3b\xfc\xc4\x1a\x67\x7f\x31\x02\x94\x1e\x81\xd7\x92\xa7\x64\xab\x3c\x56\x0f\xc3\x38\x9d\x5e\x6e\xba\x27\x1c\xf1\xb4\x57\xab\x0b\x12\xc1\xb6\x35\x3d\x2d\x8b\x9a\xe3\x6c\x4c\x64\x85\x32\x25\x15\xaa\xae\x0e\x35\x57\x2f\xde\x19\x9f\x7c\xee\xe5\xb7\xfe\xb9\xdf\xb9\xe6\x09\xa0\x2e\xeb\x99\xbe\x62\x47\x21\xa2\x1d\xd6\x23\x86\x7e\x5e\x75\x24\x47\xfe\x8f\xe1\xcb\xd2\x86\xba\x0d\x8f\xab\xf1\xfd\x10\xd5\xc0\x27\x4f\x1a\x34\xc5\xf2\x84\x5d\xce\xac\x4a\x5b\x80\x61\x49\xc3\xc0\x17\x58\x50\x8e\xc1\xa7\x12\x59\x2f\x10\x7f\x8f\x53\x7e\x77\xbe\x5e\x0a\xd2\x10\x95\x02\xe1\x0f\xc5\x00\xe1\xb1\x93\x41\xb7\xf6\x87\x52\x59\x2e\x85\x85\xae\xc8\xdb\x8e\xe9\xad\x24\x4d\x8b\xbe\x64\x58\xfb\xd8\x6e\x36\x69\x83\x62\x8f\x4d\xed\x1b\x20\x36\x2e\x6d\x17\x6f\x21\x5b\xa7\x93\x33\x9e\x92\x22\x11\xe1\xf0\x43\x0c\x0d\x43\x5e\x47\xa9\x63\x47\x8b\x5b\x96\x4b\x2b\x4a\xe3\xbe\x0f\x7a\xb4\xf3\xb5\x9f\x73\xa2\xbb\x4a\x14\x2c\x66\xcd\x57\xc2\x98\xc5\x3e\x6a\x87\xba\x74\xd5\xaa\xb1\x77\x39\x68\x80\x9d\xe8\x84\x75\x87\x82\xa6\xf2\x05\x4b\xcd\xaf\xc0\x38\x1d\x75\xb1\x9a\x21\x33\xc3\x81\xe2\x8e\xed\xd1\xd8\x88\xec\x3d\x64\x6c\xc9\x50\x39\xaf\x3c\x4a\x1a\xfb\xbd\x63\xc8\x20\x26\xc7\xc6\x4e\xae\xb1\x9f\x4b\xb0\xc7\x2e\x92\x8f\x72\x21\x52\x88\x3a\x60\xf0\x3f\x16\x76\xa1\x14\x22\xea\xe6\x45\xc3\x8e\xe9\x38\x72\x96\xb4\xca\x67\xa2\x44\x91\xad\xcd\xf0\xfd\x96\xe0\x28\xa4\x1b\x85\xea\xcb\x52\xa5\x7f\xad\xfe\xd4\x2c\x7b\x47\x3b\x13\x23\x89\xce\x51\xaf\x6c\xfe\xb4\xfa\xaf\xa5\xa9\xb2\x7a\x27\xa0\x9e\xe5\x90\x5b\xde\x03\xc8\xa9\x0d\xed\xfc\xf1\xce\x9d\x3f\x86\x03\x65\xf5\x95\x30\xe7\x42\xed\x0c\x87\xcb\x2b\x6b\x1f\x25\x3a\x3b\x13\xe0\x94\xbd\x2e\x07\xdc\x78\xa1\x76\x5f\x65\x7d\x59\xa9\x07\x72\xab\x57\x6b\x39\x0f\x31\xa4\xdf\xb0\xb3\x50\x56\x52\x2f\x6b\xdc\xb0\xc4\x2d\x0a\xbb\xd1\xff\x72\x2e\xb4\xd9\x51\x7c\x36\x54\xdf\x5f\xdf\xde\xb9\xb8\xd3\xf8\xab\xef\xaf\x1f\xee\xc7\xb9\xfe\x61\xed\x80\x51\x1a\xa2\x5d\x2b\xf0\xe4\x0d\x8d\x0d\x1b\x25\x79\x49\xab\xd5\xcf\xc4\xe5\x9a\x81\xf1\x07\x23\xfd\xc3\xc3\xf0\xfc\xb1\x72\x14\xde\xa3\x1b\x85\x11\x8a\x43\x2b\xc8\x8a\x3c\xce\x6a\x87\x19\x16\x44\x29\x36\x71\x81\x87\x82\x41\x27\x57\x5a\x53\x36\xb7\xc5\x13\x6b\x6e\x8a\x79\x5a\xe6\x96\x27\x4a\x39\x27\x39\xff\x84\x01\xe6\x5d\x78\x4d\xec\x1d\x0a\x7a\x21\xe2\x2f\x2b\xf3\x47\xc0\x1b\x1c\xea\x15\x77\x9d\x64\x8c\xa8\x3a\x82\xe8\xdf\x52\x47\x90\x03\xf5\x20\x84\x0a\x84\x6d\x42\x00\x27\x5b\x21\x4e\x33\x06\x38\x94\x12\x37\x7c\xac\x29\xc3\x2c\x38\x2e\x2b\x72\x1b\xe8\x72\xa6\x1a\x37\x6c\x84\x29\xd5\x20\x9b\x37\x30\x7c\x28\xc3\x10\x57\x12\xa9\xd1\x45\x37\xbe\xf2\xee\x2b\x37\x2e\x2a\x9c\x60\x0d\xe9\xd4\x5e\xb7\x3b\x58\xed\xf5\x7d\x96\x90\x65\x9f\xf6\x3a\xeb\xb0\x6b\xaf\x3b\x49\xca\xbc\x6f\x9f\x99\x22\x9d\x10\xb3\x3b\x58\x88\xed\x33\x47\xcc\xfb\x20\xc6\x3a\xec\x10\x2b\x66\x62\xeb\xb1\xc7\x2c\x5a\x74\x63\xc6\x41\x0d\x69\x2f\x38\x2d\x16\x7a\xf0\x33\xbb\xfd\xb3\x41\xda\x62\x71\x42\x72\x88\x72\x70\xb6\xcf\x3e\xb3\x3b\x1d\xd4\x10\x24\x0b\xb9\x36\x5b\x21\x57\x7b\x61\x88\x72\x38\xed\x9f\x7d\x66\x2b\xea\x7e\x4f\x52\x17\x20\x17\xaa\x43\x28\xae\x8f\x6b\xfa\xb0\x46\x1b\x23\x60\x2a\x19\x8b\xd3\x64\x71\xa8\x73\x65\x63\x86\xa4\xcc\x82\xdb\x20\xd5\x36\x24\x71\xf2\x83\x6c\xfd\x23\xda\x73\xfb\x56\xfc\xf2\xc8\xb2\xfb\xde\xdf\x71\x39\x10\x20\x0f\x6a\x17\x1d\xb8\x49\x3b\xf8\xc2\xe6\xf5\xcf\x80\xeb\xfa\x2a\xce\x15\x9e\xbb\x68\xf7\xa1\xab\xce\x3b\xbb\x3c\xc8\x32\xef\x98\xf7\x41\xf6\x91\xd1\x3b\x9b\xb5\xef\xbf\xba\xe3\xfd\xfb\x96\x6d\x79\xfa\x7f\xfe\xb9\xf9\x05\xf0\xdf\x74\x3d\x48\xbf\x3a\x9f\xc6\xe5\xe5\xc1\x19\x2f\xae\xbf\xea\xd0\xee\x94\x2b\xc8\x96\x15\xb0\xcd\xe8\xd1\xe2\x9e\x76\x65\xd1\x82\xd1\xd8\xce\x0f\x7f\xc1\x8e\xff\x0b\xbe\x2d\xed\x13\xd0\x34\xf0\xb2\x89\x5f\x70\xbb\xec\x3d\x64\xe4\xd0\xc8\x2b\xe3\xbb\x0a\xf0\x7f\x68\xcc\x40\xfa\x30\x76\x61\xe1\xae\x63\x38\x1c\x06\x8e\x47\xe8\xc8\x08\x3d\x44\x8d\xa2\x4e\x34\xd5\xf0\xc4\xab\x04\x81\x91\x44\xc1\xe8\x06\x2c\x19\xe5\xa2\x5c\x24\x81\x6b\xc6\xa9\x17\xdb\xa0\x48\xfa\xd0\x04\x9c\xa2\x7f\x1f\x41\x03\x21\xa8\x08\x10\x04\xe1\x74\x36\x24\xd2\x43\xb2\xf7\x40\xd7\x4b\x3c\xef\xca\xba\x9e\xa5\x84\xf6\xce\x53\x6b\x73\xa9\x33\x7a\x9a\x58\xc7\x8f\x04\xbf\x87\xe7\x09\xee\xb9\xc6\x02\xdc\xc7\x5e\x5e\x4e\xf3\x7b\x89\xbe\xbd\x7c\x5a\xe6\xf7\x1e\xf0\x6a\x93\xf3\xb9\xc7\xc0\xf2\x18\x5e\x98\x96\xef\xdb\xf0\x6b\x3e\xcd\xf3\xfc\x33\x94\xb3\x3c\xe4\x25\x72\x63\x39\x9f\xa2\xd8\xd9\x17\xdd\x4e\x57\x46\xf8\xeb\xba\x11\xbd\x62\x72\xe1\xc6\xc2\x63\xb4\x3f\x60\x74\xd1\x63\x8f\x21\x04\x47\x8e\x20\x60\xce\x27\xa7\xa0\x8b\x0c\x9b\x41\x9a\x61\x71\x00\x1b\x40\x1a\x01\xcc\x42\x94\xa2\xe5\x1a\x48\x10\x0c\x4b\x4a\x82\x41\x81\x11\xa5\xf5\x1a\x26\x08\xac\x18\x68\x5b\xa9\x78\x00\xf4\x39\x52\x3f\x06\x88\xa4\xda\x4a\x1a\xd8\x11\x86\xc2\xa5\xf7\x14\x29\x40\x08\x06\x1e\x8c\xb1\x2a\xde\x8a\xd5\x6c\x61\xff\x03\x4b\xf1\xac\x28\x31\xe7\x4b\x7b\x3d\xe5\x65\x81\x20\xc3\x27\x22\x24\x5c\x9a\x24\x18\xc6\x54\x21\x1f\x41\x9e\x76\x41\x08\xf4\x37\x74\x78\x08\x8b\x87\x77\x00\x43\x92\xae\xe8\xfa\x29\xd7\xac\x5d\xe2\x29\xb1\x44\xcf\x5c\x71\x69\x33\x4d\x90\x8e\x0a\x70\xd9\x44\x8a\x72\x9a\x84\xb4\xc3\x59\x9a\xad\x2c\xf3\xdb\x31\xed\x32\x5b\x28\xcc\x32\x74\x49\xb3\xdd\xe5\x14\x33\x3f\x1e\xc8\x08\x3e\x96\xc1\x04\x06\x9a\x63\x4d\xae\x48\x45\x6b\xbc\xb9\x86\xb4\x51\x24\xa6\x05\x0b\x84\x94\x24\x4d\x7c\xd6\xfe\x76\x28\x93\xaa\x68\xf0\x55\x54\x05\x31\xde\xb9\x90\x72\xc8\x81\x12\x92\x12\x6c\x36\xf7\xdc\x49\x35\x26\xa0\x3c\xd1\x49\x95\x8e\x12\x9a\xe2\x09\xb2\xbc\xa3\xcb\xe3\xb1\x94\xed\x1a\x01\xfa\x52\xa7\x48\xd1\x3c\xc6\x66\x92\xb0\xba\x93\xab\xfd\xa5\xcd\xf3\xeb\xfc\x14\x98\x62\x8d\x2b\x7a\xca\x3a\xed\xb6\x88\x19\x8b\xbc\xd5\x8b\xc1\x46\x71\xc1\x70\x63\x7a\x81\x6c\x6d\x8d\xd4\x04\xcd\x98\xf4\x56\x2e\x6a\x5d\xb1\xc9\xe2\x20\x08\x20\x08\xc0\x94\xc3\x6c\x70\x05\xdf\x4b\x7f\x4a\x4d\x43\x16\x63\xc4\xab\x41\x73\xd0\x4a\x74\x01\x42\xf1\xa3\x3a\xb1\x3e\x1b\x1b\x41\x49\xcc\x4a\xe3\x78\x9f\x52\x00\xe2\x09\x88\x31\x34\xa9\x7f\x88\x6a\x36\x16\x17\x58\x7d\x54\x4c\x40\x26\xed\x52\xb3\x31\x5d\x1d\x0c\x40\xd6\xc0\x45\xd3\x3f\x5b\x43\xb5\xc4\x01\x28\x02\x86\x66\x65\x86\x2e\xa8\x94\x71\x23\xcd\x48\x52\x12\xa0\xab\xec\xba\x8a\x8e\xef\x70\x0b\xd1\xc8\x0c\xb7\xe8\xea\x9e\x75\x8e\xc9\x6c\x67\x4b\x19\x2e\xc0\x06\x1e\xae\xfe\xcb\x9a\xd5\xb3\x6a\x6a\x7e\xbd\x6a\xcd\x52\xb0\x9a\x47\xb4\x23\xbb\xdf\xd4\xfe\xc8\x9a\x47\x00\x76\xbf\x09\x71\x90\x7b\x2f\xff\xa9\x96\xd7\xde\xd6\xfe\xf5\xca\x8e\xef\xe4\xee\x81\x05\xbd\x1d\xd5\x24\xcd\x3a\x68\xfa\x3b\xbf\x4b\x54\x57\x63\x8a\xb5\xd8\x1a\x16\x77\x9f\x33\xbb\x84\x37\x55\x4a\x92\xc8\x08\xf3\xdb\x3c\x15\x24\xe5\xf5\x34\xc3\x9c\x79\x29\xc5\x9c\xcc\x7a\x4d\xfe\x58\x6b\xeb\xfd\xf3\xfc\xb5\xb6\xa0\x7f\xcb\x27\x63\x91\xc9\x0e\xd6\x1b\x8e\x4c\x0a\xf9\x6e\xb4\xfb\x28\xca\x6a\x0f\xb2\x94\x75\x70\xd9\x50\x2c\xb2\x7f\xe9\x92\xc5\xbe\xd2\x87\x9b\x87\xae\x9a\xcc\x4a\xef\xef\x2e\x9c\x76\x75\x5f\xb6\x73\x45\x6b\xd7\x86\x1f\x9d\xb9\x1e\xc8\xdc\x3d\xdf\xec\x6d\xbf\x82\xb5\x61\x02\xe3\xa6\x96\xb6\xf5\x76\xd6\x4a\x92\xae\xc6\x95\x78\xe9\xe0\x96\x7a\x49\x64\x4c\x95\x52\xdb\x90\x9d\xf2\x7a\x3c\xe5\x94\x7d\xe6\x50\x7e\xbd\xcf\xeb\x4a\xfa\x06\xf6\x75\x4f\xca\xb8\xe8\x60\x7d\x0d\xed\x9d\x36\x51\xb6\x58\x87\xcc\x88\x47\xa5\x08\x19\xfc\xb6\xad\xa0\x06\x00\x38\x01\x33\x32\x97\x76\xc5\xc0\xc9\xc8\x38\xc3\x89\xa4\x8b\x3c\xeb\xbe\x67\x7e\x76\xdf\xb7\x9f\x8e\x44\x9f\xd6\x6e\xcc\xff\xea\xe1\xbb\x21\x46\x66\x1e\xfe\x55\xfe\x21\x88\xdd\x1d\x19\x1c\x9c\xf7\xd9\xe5\x97\x7f\x46\xb5\x68\xbe\x31\xed\x1b\xa7\xbd\x0a\x9e\xc7\x60\xd2\xef\xf2\x15\xda\xdf\x5f\x3d\x0d\x6e\x1d\x83\xb7\x02\xbf\xd3\x1e\x2b\x62\x3d\x23\x6a\x33\x8d\xd0\x6a\x84\x80\x25\x74\x51\x95\x46\x8c\x81\xf2\x91\x8d\xa9\x2c\x4e\x10\x4a\x2b\x04\xb0\x94\xd5\xc3\x94\x1e\xa6\x82\x90\xcd\x24\xa8\xac\x1a\x20\x59\xec\x00\x51\x60\x5a\x29\x51\x62\xf5\x0f\x99\xd6\x83\xd4\xe6\xd0\xfc\xc1\x15\xa7\x0d\xce\x6c\x76\x72\x6b\xb5\x5b\x5f\xe2\xbd\x5e\x7e\x2f\x54\x2e\x8b\x4d\x1d\x9c\x7f\xea\xdc\x53\xc2\xeb\x7e\xf1\xad\x75\x6d\x25\x19\x2f\x23\x4e\xe9\x5e\x3a\x30\xb7\xbd\x9a\x9e\x7c\xc1\xa9\x73\x5b\x52\x61\x91\x22\x6d\x26\xdf\x94\xfa\x34\x2b\xa7\x7a\xce\x6a\x8e\x51\xb4\xe0\x32\x31\x00\x04\x5b\x93\x9d\xbf\x74\x7b\x37\x56\x5a\x66\xcc\x99\xdd\xd7\xc4\x71\x52\x92\xf6\x4c\xeb\xdf\x70\xce\x2e\xf8\x61\xff\x39\x2d\x21\x82\x0d\x94\x58\x2c\x07\xb5\xcf\xc1\x2b\x97\xc0\x2b\x8f\xb3\x2e\x93\xbd\xaa\x77\xdb\x29\x35\x42\x74\x46\x5f\xd5\xce\x11\x20\x30\xc1\x95\xd6\xf7\xae\x9f\xec\xe7\xf8\xf2\xa6\xb6\xb6\x3a\x87\x73\x73\x0f\x2d\x4c\xea\x1d\x5e\x7b\x69\x77\x49\x4f\xff\xc2\xf9\xa7\x4c\xce\x3a\x1c\xe4\x62\x2f\x23\xb5\x65\x1a\x83\x58\x9a\x71\xc1\x40\x4b\xc0\x05\x04\x41\x5c\x79\x31\x23\x35\x25\x64\x5c\x87\x48\xe4\x3e\x82\xc8\x7f\x50\xc8\xb0\x24\x17\x0c\xff\x2a\x43\xc2\x82\x82\xcd\x3e\xb8\xc3\x9c\xfe\x17\x77\x8f\x33\x32\x91\xff\x58\x3f\xab\x41\x1b\xcb\x7f\x38\x6b\x3d\xf9\xbb\xc3\x15\xe3\x7f\xeb\x67\x11\x33\x66\xad\x07\x5f\xe7\x9c\x0d\xda\x3f\xc1\xbe\x61\x4e\x27\x4c\x3e\x82\x8e\xc0\xd4\x23\xe8\xc8\x77\xbb\xba\x66\x6f\xd8\x30\x41\xce\x2c\x41\x71\x7d\xd6\x44\xff\x95\xc6\x54\xfc\x2f\xce\x5d\x64\xae\x48\x64\x3a\x4e\xb2\x59\x20\x32\xbd\xe7\xcb\x1c\xbd\xf0\xae\x93\xf0\x99\xde\xf7\x65\x0e\x5f\xc7\xc9\xc4\xc5\xb2\x1e\xcf\xc6\x3a\x91\x8c\xd5\xf5\x5f\xcb\xca\xdb\xb5\x11\xbd\x80\xc7\xa8\x58\x61\xc8\xce\x8f\x7c\x69\x61\x0f\x14\x8b\x08\x6d\x66\xff\x38\x23\xab\x76\xe4\x4b\x4b\xfb\x05\xf9\xbd\xb0\x66\x7a\xac\x98\xf0\x55\x9e\x57\x48\xf6\x0a\x5c\xc1\xed\x8c\x13\xbc\x32\xa0\x2f\x71\x50\x1b\xcd\xe7\xbc\xb2\xad\xe8\x36\x66\x93\xc7\x9e\xfd\x1a\xfe\x60\x0c\xe2\x51\xf0\x98\x1f\xbe\xeb\xbf\x30\x06\x14\xf7\x73\x2b\xbe\x8c\x37\xa0\xe8\x5d\x0f\xa1\x2f\xa5\x0f\x28\xda\xb8\x2f\xa1\x0e\x20\x37\xca\x22\x04\x92\x21\x8e\xe9\xd2\x98\x2a\xe9\x73\x2b\x4a\xe9\x42\xa9\x64\x8c\x46\x44\x01\x48\x4c\x35\xc8\x45\xdd\x02\xad\xf0\x61\x77\x58\x0a\x27\x25\x9e\x38\xb2\xac\x51\x7b\xe9\xb1\x9b\xb4\x4f\x6f\xfc\xf5\xbd\xdc\xe6\xdd\xc0\xec\xdf\xf6\xca\xb9\xd8\xd7\x78\x04\xd9\x9d\x65\xdc\x87\x5a\x99\x27\x4e\x0c\x61\x13\x3b\x37\xdb\x39\xb8\xa2\x3b\x0e\x77\x6b\x2b\x9d\xf0\xf3\x32\xee\x20\x2c\xf9\xd5\x43\x7f\xba\x11\xcc\x37\x3d\x0c\x15\xad\x3b\xb3\x6f\x5e\xb4\x5f\xfb\x7c\xc7\x1b\xde\x75\x39\x26\x0a\x6f\x84\x3d\x84\x95\x2b\x49\xb5\x0d\x76\x4e\xfa\x06\xa3\xbd\x99\xcb\x45\xb5\x86\x93\xf0\xfa\x64\x15\x99\xc8\xa6\x92\x0c\x0b\x86\x39\xa5\x5c\x58\xd2\x95\x0a\xbe\x59\x92\x98\x4a\xf2\xae\x2f\x58\x27\xda\x2c\xf7\xfd\x6d\x56\x95\x3c\xc7\x4a\x7e\x37\x5a\xa9\xd8\x43\x81\x1d\x4d\x2b\x7d\x67\xfa\xd2\x7d\xd6\x86\xa4\xa3\xd9\xd1\x3d\x74\xf3\x5f\x5e\x3f\x74\xdc\xfb\xdc\xf1\x7b\xda\xa4\xfd\x93\x1f\x6a\x78\xfd\x9e\xec\x2f\x9f\xb0\x31\x4b\x3c\x43\x9e\xae\xf4\x43\xea\x1f\xd5\x87\x40\x06\x1f\x5c\x70\xdc\x0e\x1a\x1c\xe5\xc1\xd0\xf5\x5f\x01\x93\x05\x35\xec\xa8\x81\x51\x1b\x64\x26\x86\xc7\xdd\xb0\xe2\x59\xb1\x14\x04\x86\x72\x8f\x07\xb8\x2c\x2a\x66\x92\xb9\x27\xb4\xc7\x7f\x32\xc2\xba\x5e\x25\x68\x8b\xd9\x2e\xbd\x33\x7e\x76\xb1\x23\xac\x0b\x36\x38\xbc\x92\xb6\xa1\x78\x7a\x1c\x48\x23\x15\x8f\xfe\x44\x7b\xfc\x09\x17\x8b\x4f\xeb\x04\xda\xe2\xcc\x49\xa6\x29\x4b\x8e\x86\x0e\xe9\x5a\xe5\xc3\xe7\x50\x82\x1e\xdb\xb4\x64\x3c\xa0\x95\xd8\x41\x78\x92\x75\xb9\x26\xf8\x7e\x47\x8b\xe8\xd3\xee\xa2\x9b\x51\xa1\x32\x47\x07\xa3\xa3\xbb\x62\x5f\xd3\x1f\x5c\x2b\xb0\x5a\x6a\x23\x86\xf2\x3b\x54\xf0\x41\x19\xfa\x4a\xef\xf0\x2f\x5c\x6f\x3c\xe9\xcb\xbc\xc5\x8b\x7e\xb1\xa6\x1c\x85\x90\x62\x30\xfe\xf5\x17\x76\xdf\x32\x05\x25\x38\x01\x05\x5a\xe3\x6c\x13\x64\x52\x49\x29\x6c\x48\x30\x86\x29\x2a\x30\xaa\x28\x30\x52\x36\xad\x40\x98\x66\x22\xb4\x03\x80\x85\x4a\x20\x52\x49\x22\xca\xa7\x92\xa2\x04\x01\x32\x45\x85\x65\x7c\xe6\xd9\xb7\xe4\xda\xed\x3c\xd3\x38\x7d\x7a\x23\xc3\xdb\xdb\x73\xb7\x9c\x4d\x2e\xa8\xd8\xee\x5c\xb0\xb9\xba\x7a\xf3\x02\xe7\xf6\x0a\x3a\x93\x99\xd5\xdd\x7d\x78\x0e\xf1\xe9\x6b\x1f\x36\x0c\xfb\xfc\xda\x01\xef\x82\xea\xa1\x25\xa5\x37\xdf\x5c\xba\x64\x28\x31\xdf\x0b\x21\x92\xad\x49\xf6\xc4\xe0\x17\x63\xe6\x73\x60\xa4\xbd\xbd\x26\xec\x29\xc1\x9c\x87\xc3\x25\x9e\x70\x4d\x7b\x3b\x23\x12\x8e\x54\x55\xac\x2a\xe5\x20\x44\x66\x2c\x36\x1c\x0b\xd4\x5e\x55\xab\xfd\x4e\xae\xa8\xf5\x78\xb4\x03\x5e\x19\x5e\x82\x03\xf0\x92\xec\xd5\x0e\x90\xf6\x70\x89\xbb\xbf\xbd\xf8\x7d\xe4\x68\x84\x06\x0c\xfb\x64\xfd\x63\xd5\x35\xc4\xc2\x2e\x52\x0d\x50\xc7\x82\xe3\x04\x0d\x6d\x40\x1c\x0b\x2a\x45\x33\xd6\x20\xc4\x8f\x05\x8b\xf0\x76\xb4\x03\x78\x35\x0b\x71\x82\xa2\x3e\x6c\x3d\x65\xc9\xfd\xf5\xcc\xec\xa6\x9a\xe9\x0e\x55\x7b\x4e\x35\xcd\x6e\xae\xe9\x73\xa8\xd7\x97\xba\x5b\x66\xa9\x55\x37\xad\xbc\xc9\x2b\x36\x0f\xa8\x55\x37\x67\x0a\x19\x59\xc8\x66\x4d\x73\xf4\x8b\x33\xb7\xbb\xc5\xe6\x39\xcd\x55\x37\xaf\xdc\xe3\x19\x1b\x83\xec\x4a\xed\x39\xfc\xd9\xac\x96\x6f\x84\x9b\xee\x76\x7b\x9b\xe6\x66\xab\xef\x5c\xb5\xc7\x23\xe9\x81\x3b\x32\xe6\xfe\x96\x9a\x3e\x47\x06\x1a\xb2\xa6\x59\xfa\x53\x32\xb7\x7a\xa4\xe6\x39\xd9\xea\x91\x95\x23\xfa\x25\x6a\xd5\x6d\x2a\x3d\xb3\xa9\xba\xc7\x91\xd5\x7e\x56\x6f\xd2\x0e\xad\x84\xa6\xd5\x27\xae\xd5\x94\x1b\x96\x54\x27\xd8\x88\x00\x57\x24\xb2\x6f\x80\x22\x95\xbd\x52\xec\xb1\xe3\x1d\xb8\x88\x97\x41\x27\x5b\x29\x35\xde\x0a\x13\x8d\x48\x88\x03\xc1\x70\xe4\x99\xcc\xa9\x9d\x9d\xa7\xd6\x3c\x59\x63\xab\xb0\xd4\x97\x11\xed\x65\xf5\x6a\xf9\xd8\x68\x59\x7d\x4b\xbc\xe6\x61\x85\xf0\xb3\x7e\xde\xe3\x16\xdc\x1e\xde\xcf\xfa\x09\xb0\x46\xdb\x8e\xb7\x35\x39\x7c\x00\xf6\x45\x05\x71\x5b\x6c\xd2\xa4\xd0\xa6\x90\x49\x36\x69\x7d\x65\xf5\xf5\xf8\x8c\xf2\xc6\xfa\xb2\xf8\xcc\x92\xd0\x3a\x2f\xe6\xcd\x9c\xd9\x42\x51\x16\x33\x67\xe6\xf1\xf7\xa5\x99\x68\x7c\x2f\xd1\xf0\x3d\xa0\x50\x1b\x9a\x82\x66\xa1\x6f\xa0\xb5\x08\xf1\x69\x15\x64\x6c\x20\x64\x12\xc6\xd6\x8f\xec\x28\xac\x69\xe8\xba\x13\x7f\x34\x29\x22\x47\xb3\xb1\x54\x92\x94\x0a\x2e\x9e\xb4\x24\x52\xbc\x28\x19\x73\xa0\xe8\x16\x30\xc3\x67\x33\x69\x14\x22\x45\x97\x13\xd3\x64\x28\x26\x63\xa7\x2b\x8b\x42\xb1\xac\xcb\x89\xe5\x58\x88\xa4\xb1\xd3\x25\x5e\xd0\x05\x6b\x7e\xf6\x01\x65\xa2\x1c\x26\x1f\xd9\xa7\xbd\x9b\xa8\xe0\x59\x9e\x7f\x7e\xda\x05\x36\x8e\x26\x1c\xb6\xfe\x8d\xdf\xd3\xfe\x5e\x4c\x63\x42\x96\x95\x70\xca\xb3\x57\x82\x75\xa5\x45\xed\x25\x49\x1b\xed\x62\x44\xa2\x4d\xa3\xdf\x07\x72\xdb\xf6\xe1\x95\xc4\x96\xa5\x2f\xfd\xe0\x1f\x4d\x63\xb7\xc3\x99\xd0\xf7\xd1\xae\x5d\x1f\x69\xfb\xb4\xab\xb4\x7d\x7a\x08\xe6\xc0\x42\x68\x79\xeb\xe2\x8b\xdf\xd2\x9e\xd6\xee\xd2\x9e\xd6\x43\x38\x77\xc7\x35\x63\xfc\x52\x38\x07\x4c\xbc\xd2\xec\x5f\x68\x3f\x82\x88\x46\x82\xc2\xe1\x52\xb0\x80\x19\x6c\x2e\x9e\x05\x93\xf6\xa8\x66\x22\xda\xc7\x53\x47\x1e\x5b\x35\x34\x4b\xb5\x79\x78\x9f\x23\x60\x8b\x51\xab\x5f\xce\x6f\xa2\xa9\xaa\x10\x39\xf0\xfd\xa7\x7f\xad\xdd\xba\x0c\xdf\x75\xcf\xea\x0a\x9c\x3e\xee\x87\xfb\x8c\xc2\x7c\xfe\xa3\x8b\xdf\x82\x96\x13\xca\x70\x94\x0b\x4a\x6f\x7f\x17\xf2\xe9\x12\x04\x25\xc7\xf4\x6f\x24\xa6\xba\x69\xd2\x2d\x90\x12\x07\x7c\x5c\x95\x95\x0c\x29\x91\xad\xda\x47\x07\xb5\xef\xfe\xee\x97\xb0\xe4\xb5\xd7\xb4\x77\x20\xf3\x2e\xb1\x37\x9e\xff\xe7\x95\x1b\x6e\x03\xf7\xaf\x68\x74\x08\xe5\x84\x3d\xf9\xdd\xdf\xfd\x74\x8f\xf7\x7e\xf9\xc0\x65\xd7\xbd\x1d\xa0\xfa\xb5\x36\x6d\xf3\xba\x53\x26\x97\xde\x1f\xde\x3a\x6e\x63\x6e\xf0\x4e\xd9\x90\x8c\x6a\x11\x32\x83\x3b\x5a\xec\xc2\xd1\x0c\x84\xb9\x14\x37\xe1\xef\x18\x76\x1c\x35\x1e\x4c\x11\xa3\xc4\x68\xae\xdc\x7f\xc8\xe2\x2f\xcf\x01\x02\x94\x1b\xff\xd7\xe4\x2f\xff\x3c\x57\xee\x6f\xa2\x9b\xfc\xe5\x9f\xe5\xca\xfd\x34\xd2\x72\x05\x04\x90\x23\x28\x8f\x88\x09\x7f\x05\x78\xd2\x51\xd9\xab\xe7\x17\xeb\x6f\x2e\xf8\xae\xeb\xf2\x02\x2f\x1a\x1d\x45\xe5\x29\x31\xa9\x16\xf9\xb6\xe2\x2c\x30\xa2\x5b\x60\xf8\xa2\x8d\xa7\xac\xf2\xfa\x60\x9b\x55\xe3\xe3\xbc\x5e\xf4\x07\x2e\xf2\x7e\xed\x77\xda\x1e\xed\x77\xf7\x93\x2e\xdc\x2a\xa6\x45\xb2\x5f\x3c\x3c\x42\xda\xc8\xfc\x39\x95\xf5\x74\x5b\x63\x23\xb6\x98\x1d\xa3\x0e\xb3\x05\x37\x36\x76\x58\xe7\x69\x0f\x89\x22\x39\x44\xda\x48\x72\x08\x3f\xae\xfd\x6c\xd2\x79\x93\x26\x9d\x37\x09\x9a\x1f\x66\x18\xec\x4c\x98\xb4\x11\x80\x17\x22\x37\x9e\x11\xeb\x99\x24\x6b\x33\x59\xab\xd5\x6a\x65\xe1\x87\xf2\xa4\x1e\xf9\xc5\x2d\x2b\x4c\x09\x13\x0c\x01\x68\x23\x08\xd0\x59\x47\x72\xd4\x95\x05\x9b\x16\xe0\xe5\x68\x84\xe1\x65\x84\x15\x31\x95\x54\x03\xe0\x92\x5a\x09\x55\x0f\xd6\xb1\x04\x43\x13\x8b\xec\xad\x95\xe5\xed\xf6\x32\xed\xc8\x03\x4b\x1a\x93\x55\x5d\x6d\x97\xfe\xb4\x22\x7e\xc5\xc2\x8d\x35\xd9\x4c\x7d\xa3\xbf\x3d\x3a\xc3\xb2\x1b\x77\xe5\x5b\xac\x56\xfc\xf4\x24\x78\x06\xca\xbe\xe3\x70\xac\x79\x5f\xfb\xd9\xa4\x96\x77\xae\x7c\x7e\x1e\xcb\x2a\xa7\x35\x7e\x93\xfb\xac\xc8\x89\x43\xfd\xd9\x98\x43\x11\x84\xf5\xaf\xac\xb0\xde\xe5\x74\x65\x63\xa9\x90\xc4\xc8\xd1\x88\x21\xe4\xa5\x92\xad\x84\x1a\x26\x10\x7e\xc5\xf6\x88\xf6\x83\x3f\xdc\xac\x1d\x7c\x61\xd3\xa6\x17\xc0\x7f\x33\x54\xbd\xfa\xeb\x2d\x3f\xda\xfe\xc7\x5c\xee\x8f\xdb\xe7\xed\x1e\x9c\x1c\xa6\xb5\x3e\xfc\x41\x57\xcb\x6b\xda\x7d\xa3\xfa\x05\xd0\x08\xfe\x17\x36\xfd\xf2\x97\x1b\x76\xbc\xa9\x7d\xf6\xe6\x8e\xda\xa9\x8b\x07\xe2\x05\xbb\xb2\xc2\x38\xe1\x44\x25\x28\x82\x66\x18\xbb\x11\x22\x43\x87\x14\xd9\x30\xa2\x4f\x25\xd5\x6c\x32\x56\x04\x6c\x4e\x52\x45\x89\x53\x54\xd3\x72\x84\x91\x15\x5e\x12\xc4\x64\xd6\xc0\x36\x55\x64\x86\xa0\x99\xa2\xa3\x87\x44\xbb\x05\x32\x95\x8c\x65\xd2\x4a\x2b\xc4\x26\x8c\x12\xb1\x10\x29\x92\x53\x9c\xce\x56\xed\x83\x56\xa7\x93\x76\xd1\xb5\x9b\x36\xd6\xd1\x2e\xed\xe5\x74\x6f\x26\xd3\x0b\x3f\xc9\xf4\xa6\xd3\xbd\x99\xc3\x93\x4f\x8f\xed\x78\xb8\xed\x17\x7a\x62\x3c\xeb\x7d\x83\xa7\x27\xed\xdb\x1e\x4d\x27\x27\xc7\x83\x34\x78\x9e\x79\x16\x3c\x4c\x20\x06\xcb\x4e\xf2\x3d\xc2\x5a\xa7\xa3\xb5\xd5\xe1\xa4\xe9\xba\x3a\xfa\xb7\xbd\xe9\x74\x5c\x4e\x2f\x8c\xeb\xcf\x4c\x0f\xd4\x4d\x8e\x2d\xa4\xc1\x57\x1d\x4f\x67\x7a\x33\xc9\x3a\xca\xad\xfd\x82\x59\x18\x9f\x5c\x17\x6d\x74\xf8\x4a\x77\x3d\xf7\xdc\xae\x50\x89\xa3\xe1\xb1\x13\x1e\xb8\x6b\xd7\x47\xc7\xe3\x60\x39\x0c\x36\x27\x7d\x3c\x35\xda\x29\x52\x6c\x27\xbd\x99\xe2\xe3\xcd\x24\x52\x47\x43\xaa\xd1\x38\xb2\xa2\x4a\xfa\xbb\xfb\x2f\x4d\x55\xf0\xb6\x57\xbe\x68\xb7\x44\xdc\x67\xb7\x67\xde\xcb\xd8\xed\x94\x93\xaa\x78\xa1\x82\x72\x6a\x5a\xa2\x35\x51\xdd\x5e\x0d\x03\x85\xf3\xab\xcd\x95\x15\xc1\xb5\x37\x64\xef\x83\xea\x60\xa8\xba\x3a\x54\xeb\x7e\x82\x23\x9b\x6f\x58\x13\xa8\xaa\x6c\x0e\x79\xa9\x8f\xee\xb9\xf7\x23\xba\x24\x08\xa9\xe3\xf0\x27\xae\xb5\xdb\x33\x19\xbb\x9d\xa6\x2b\x2a\xe8\x6b\x82\x89\x84\x71\x67\xf1\x3c\xa5\xa2\x39\x38\x83\xfc\xa7\x12\xaa\xaa\x6e\xaf\xae\xac\xa0\x5c\xda\xbf\xe8\xe9\xa1\xe6\x8a\x40\xd2\x5e\x22\x6d\xde\xbb\x77\x73\x89\xc7\x5e\x07\x07\x4f\xae\x97\x04\x50\xad\x81\xc8\xac\x16\xc1\xc7\x8e\x9a\xa5\x18\x15\x2c\x98\x9c\x94\x02\x95\x29\x1a\xaa\xb4\x00\xa3\xb8\xf5\x0e\x74\x9c\x99\xe4\xa9\x0b\xcf\x19\x39\xc7\x2f\xfb\xae\x5d\x3f\x30\x6b\xbd\x4f\xe0\x7d\x70\xc9\x35\xfa\x69\x61\xf3\x39\xb7\xaf\x87\x59\x27\xea\x2f\xfb\x7d\xad\x33\x87\xd7\xcc\xd4\xde\x12\x7c\x3e\x61\xe3\xe6\x81\x75\x6b\xfb\xc1\xc3\xfb\xfd\x7c\xf6\xcd\xcd\xdb\x04\x9f\x9f\xdf\xe2\xf5\x6f\xe9\x5f\xb7\x0e\xf6\x9e\xa8\xd5\xe8\x63\xd4\x1d\x4c\x8e\x5a\x62\x94\xdb\xc0\x45\x2a\x14\xba\xe0\x62\x7f\x94\xbc\xde\x28\x34\x43\x85\xc7\x73\x24\xb5\x90\x45\xca\xcd\xb3\x9b\xc7\x7e\xf8\xe0\x61\x98\xda\x3c\xbb\x39\xff\x83\x07\xc6\x9e\x86\xcb\x60\xea\xe1\x07\x7f\x38\xb6\xf3\xe9\xe6\xd9\xcd\x44\xfd\x79\x15\xcd\xcd\x15\xf9\x9b\x7e\xf0\xd9\xe1\x07\xc1\xa2\x1d\xaa\x6c\x6a\xaa\xc4\x67\xde\xf7\xc9\xbf\xee\xbf\xb8\xf1\x36\xed\x3f\x0f\x1e\xfe\xfc\x01\xb0\xb5\x34\x6a\x9f\x54\x34\x35\x55\x4c\xd4\x57\xec\xa8\x14\xa1\x38\x17\xe6\xc2\x05\x7a\xd4\x93\xc8\xc7\xd4\x68\xbe\x5d\x0b\x2d\xd9\x89\x47\xe1\xc0\x92\x9d\xed\x13\xdf\xef\x08\x1c\xc0\xa3\x3b\x97\x68\xa1\x7c\xfb\x4e\xb2\xf4\x78\x83\x3d\x13\x42\xc8\x6b\x42\xe4\xdb\x88\x42\x66\x64\x37\xb8\xc9\x4a\x51\xdc\xc0\xcd\xd1\xa7\x87\x70\x09\x44\x39\xe0\x52\x1c\xe1\x4e\x65\xf8\x30\x17\xce\x84\x33\xe1\x38\x17\xe5\x60\x62\x78\xea\xaf\xf2\xef\xc1\xd4\x2d\x70\xfd\xf3\xcf\x3f\x3f\x80\xdd\xf9\x7f\xc0\x54\xed\x51\x3d\xe1\x06\x2c\xe4\xdf\x83\x29\xda\x7e\x98\xb2\x85\x7c\x7b\xac\x1c\xef\xcf\xff\x03\xd6\x6a\x97\x61\x77\x7e\x0a\xde\x0f\x81\x5f\xfd\x4a\xfb\xcb\xd8\xc0\x1d\x03\x7b\x0a\x89\x47\x83\x13\xbe\x2f\xb3\x81\x8d\x5a\x8b\xda\x0b\xfc\x3b\x05\x9f\x8f\x09\x21\x67\x11\xc8\x9b\xe1\xd4\x8c\x98\x4a\x62\x23\x1e\x2d\x44\xbe\xa0\x88\x8b\x7d\x99\x4a\x9f\xbf\x22\xa3\xfd\xbb\x18\xc0\xdb\x1e\x38\x5f\xe0\x25\x75\xde\xd6\x97\x53\x9d\xe7\xdf\xfd\xc3\xf3\x7b\xbb\x7e\xfc\xb2\xda\x72\x3e\x21\x1d\x67\x44\xd9\x9d\x5b\xe8\x00\x37\x07\xb3\x72\x8b\xf4\x73\xbe\x0e\x6c\x4f\x12\x33\x1a\x97\xd2\xf9\x0b\xcb\x5f\xe0\xf1\x4a\xb0\x3d\x19\x1b\x7b\xb4\xfc\x05\x1e\x3e\x3b\xbe\x7d\x2d\xa8\xfc\x88\x99\x79\x9e\x46\x68\x07\x7a\x1c\x3d\x87\x5e\x40\xaf\xa3\xbf\xa2\xbf\xa1\x77\xd0\xfb\xe8\x43\x5d\x07\x0d\x10\x52\x00\x4b\x2c\x66\x12\x54\xd4\x01\xa2\x14\x60\x82\x20\xb2\x98\x91\x0b\x0e\x24\x69\xb5\x15\x2b\xb2\xa1\xa2\x1a\x96\x37\x64\x41\xd8\xd6\xa7\xc4\x56\xa2\xa0\x51\x4b\xe3\x12\x36\xa6\x8b\x28\x1d\x38\x93\x56\x15\x7d\x00\x31\x7c\xe4\x24\x95\x25\x24\x35\xc1\x28\x09\x5c\x01\xd1\x08\xd3\x4a\xa9\x01\xdc\x06\x6e\x29\xab\xb6\x9a\xda\x0a\x36\x4b\x2c\x66\x02\xe0\x16\x08\xfd\x81\x01\xa2\x20\xd9\xa9\x12\x03\x05\x60\x6a\xa5\x15\xa7\x80\x51\xf4\x4c\x3e\x25\x31\x90\x71\x3b\xa0\x0d\x93\xcf\x4e\xbb\xe4\xb4\xe5\x1d\x95\xe1\x45\xcd\x93\x6a\x37\xdd\x14\xab\x6a\xf6\x29\x89\xd3\x7a\x2c\x34\x69\xa6\xab\x98\x20\xe5\x22\x68\x00\x60\x4c\x1c\x11\xbd\x30\xa4\x84\x31\x81\x9b\x54\xf0\xf0\xb1\x6b\x5b\x4a\xce\x18\xf6\xd3\x6e\x2d\x10\x74\x7a\x38\x16\xde\x36\x59\xdd\xbc\x8f\x22\x25\xda\xe1\x65\xee\x30\x73\x25\x9c\xe3\x11\x80\x3b\xc5\x9a\xcb\x6b\xd4\x1a\x4b\x77\x25\x35\xd0\x5a\xa5\x56\x08\x6e\x8b\xc7\x96\x24\xca\xaa\xa3\xd0\x42\x71\x0c\x4b\x5b\x18\x33\xc9\x38\xbc\xae\x1a\x76\xdb\x22\x67\x59\x77\x5b\xe9\x14\x93\x2d\x14\x12\x6d\xe2\xa7\x5b\xfd\x55\xe5\x25\x11\x36\x6a\xad\x34\x31\xb8\x7c\xe6\xd8\x3e\xb6\xbe\x8a\x23\x2a\x3f\x55\xf6\x67\xcd\xbe\x52\xa9\x04\x6f\xda\xd2\xd2\xae\x7d\x5e\x7b\x56\x0f\xdc\x46\x44\x1b\x52\xf5\x24\xe3\x9e\xd9\xe1\xd7\x26\x0d\xd1\x96\x6a\x1b\xff\x72\xd0\x52\x4e\x6c\x02\xac\xff\xbf\x94\xa8\x99\xbc\xe1\x1b\x53\xeb\x57\xa9\x2d\x01\xb5\xcd\x19\xbf\x69\xef\xe3\x57\x7f\x03\x93\x94\x99\x8a\x33\xa5\xb6\x40\x49\x5c\x0c\x7b\xdb\xca\xfb\x1c\xe0\xb6\x38\x83\xbd\xa2\xbd\xa1\xc5\x8d\xbd\x99\x25\xdb\xae\x17\x48\xef\xb0\xe8\x74\x48\xc4\x2a\x56\xb4\x5b\x48\x0a\x83\x3d\xc4\xc5\x45\xce\x21\x12\x65\x4e\xef\x8f\x46\xea\x62\x11\x42\xf0\x38\x5d\x7c\x55\x8f\x37\xe4\x24\x58\x7b\x2c\xd8\xee\x2f\x29\x2b\xc3\x56\xc7\xef\x28\xb7\xc9\x41\x5b\x28\x0a\x13\x24\x54\x06\xc2\xde\x84\xef\x14\xb3\xb9\xda\x0f\xd0\x07\x4b\x97\xba\x63\x8a\x54\xcd\x35\xf0\x7d\x0e\x73\x66\xee\x9d\xcf\x56\x12\x66\x8b\x99\xcf\x32\xd6\xb1\xd9\xde\xca\x60\x36\x51\x4f\x55\x5b\x89\x98\xed\x87\xb5\xda\x4b\x0e\x60\x1c\x56\x13\x03\x95\xd8\xce\xe0\x73\x04\x0e\x6c\xf9\xad\xa7\xd8\xe8\x3a\x00\xe3\xc9\x05\x1d\xd7\x45\x23\xea\x03\x24\xa1\x2c\x5a\x82\x76\x22\x44\xc9\xc5\xd5\x90\x68\xa4\x60\x3e\x6e\x78\x5b\x1a\x66\xcd\x85\xaf\xcc\x30\xa9\x63\x52\x49\xc3\x60\x4d\xcd\x42\x3a\x81\x75\x41\x24\x4a\x27\x08\x43\x2d\x32\x66\xb5\xd6\x82\xed\xb3\x61\xf1\x25\x14\xe7\xfa\x4c\xba\x95\x52\x8d\x2e\xab\x16\xf5\x23\xf2\x32\x8a\x0f\xac\xeb\xdd\xde\x4e\x99\xac\x0e\x06\x4c\x91\xd5\xa7\x26\xcb\xe7\x55\x32\xb6\x2a\x5e\x90\x32\x35\x9e\xd2\x3a\x2f\x6b\xe6\x24\xc2\x41\xb3\x66\x27\xcb\x5b\x7d\x51\xab\xc9\x42\x59\x24\x58\x68\x91\xaa\x03\xe1\xdc\x8e\x98\xaf\x67\xe6\xfc\x61\x75\xfd\x1e\x8c\xfb\x4a\xbb\x26\x37\x5c\x73\xde\xe6\x90\x77\x46\xc7\x14\x21\x5a\x13\xf2\x97\x66\xb6\xbe\xa4\xfd\x43\x7b\x49\x7b\xfb\x95\x9c\xd2\x34\x30\x6d\xa0\x86\x67\x7b\xa3\x2d\x81\x58\x95\x69\x7b\x43\xd5\xfd\x95\xee\xd8\x9c\xae\x53\x54\x25\xc9\xb3\x62\xa4\x8e\xb4\xd1\x82\x25\xe4\x27\x08\x32\xec\x63\x6c\x17\xd6\xb0\x0e\x8b\xad\xca\x23\x98\x18\x01\xdb\x49\x0b\x49\x13\xd8\xc1\x3a\x38\x9a\xb4\x41\x8d\x58\x5d\xed\x3f\x65\x36\x94\x35\x36\x96\x01\xdc\x78\xc6\x70\x5a\xe0\x3a\xa6\xb7\x03\xb4\xf4\xb4\x02\x11\x49\x94\x6f\x7c\x61\x8f\xf6\xb7\x9f\x9c\xb9\xfe\xe7\xe0\x1f\x59\x70\xf7\xd6\xb5\xd3\xda\x4b\x2d\xa6\xb8\x50\xe6\xf1\x2f\x98\x75\xa3\x5c\x3a\xc3\x67\xf7\x4c\x9a\x7a\xde\xb6\xfb\xd0\x44\xec\xad\x00\x6a\x46\x0b\xd1\x46\x84\xc0\x81\x59\x50\xc6\xfd\x79\x55\x39\xdb\x06\x12\x43\x0b\x92\x98\x6c\x23\x08\x89\x51\xe4\x08\x2d\x04\x09\xa6\x06\x27\x40\x4d\x14\x70\x84\x44\x29\x2b\x16\x9c\x48\x15\x5a\xae\x01\x55\xd2\x05\xb0\x1a\x42\x0d\xe2\x00\x30\x01\x20\x04\x9a\x11\x0d\xcf\xe1\x6c\x5a\x8e\x38\x08\xa5\x0d\xb7\x82\x64\x0c\x1c\x64\x62\xe4\xda\x40\xc7\xde\x39\xce\xe1\x9e\x39\x1b\x17\x4c\x12\x13\x1d\xb6\x6b\xad\xf1\x78\x7c\x45\x3c\x70\xed\x6d\x4f\xda\xae\xb3\xc5\x57\xf4\xc6\x4b\xaf\x1b\xb9\xf6\xb6\x6b\x03\xdd\x55\xbe\xc9\x0b\x37\xce\xe9\x5b\x6f\x9b\x7d\x1f\xb1\x7c\xe3\x9c\xde\x75\xec\xdc\xc7\xba\xad\xd7\x1a\xd7\x04\xae\x1b\xb9\x6e\xe4\xba\xd2\xf6\x1a\x77\xdf\x19\x78\x59\x9f\x37\xd1\x65\xbb\xd6\x16\xef\x5d\x61\x64\xdc\x76\x5d\x69\xd7\xa3\x73\xad\xeb\x67\xcc\xd9\x08\x2f\x8e\x5c\x17\x68\x4f\xb8\x27\x2f\xdc\x34\x67\xea\xb0\x73\xee\xf7\x3b\x6c\xd7\x59\xe3\x2b\xe4\xb8\x7e\x21\x76\xe9\xbf\xd8\xbb\x52\xff\xc5\xeb\x46\xae\x0b\x74\xed\x9f\xe7\x18\xee\x99\xb3\xe9\xd4\x5e\xa1\xe6\xf0\xd5\x73\x36\x0d\x4e\xf1\x57\x75\x1b\x97\xac\x28\xfe\x60\xa0\x7d\xef\x1c\xeb\x7a\x52\x9a\x7e\x8e\x75\xce\x8f\xba\x8a\xe5\x2d\x66\x75\x55\x7b\xa7\x2d\xdb\x54\xe0\xed\x28\x60\x66\x4c\x42\xf3\xd1\x22\xb4\x14\x2d\x47\xab\xd0\x25\xe8\x0e\x84\x40\x6f\x2e\xc3\xf4\xb3\x60\xcc\xa9\x14\x2d\x14\x55\x59\x1f\x0e\x69\xa1\x60\xc8\xa9\xc8\x8a\xe1\x74\x9c\x4d\xe9\x99\x58\x12\x19\xc1\xb0\xf1\x2c\x98\x6c\x12\x86\x81\x66\x54\xbf\x4a\x35\x76\xc3\xd4\x24\x25\x29\x10\xe7\x28\x90\x08\x85\x90\x54\x09\x28\x0e\x24\x46\xff\x09\x03\x11\xa6\xb0\x2e\x62\xdc\x9b\x4a\x1a\x1f\x17\x70\xc6\x56\xb6\x92\x56\x38\xc3\xba\x45\xe5\xa8\x64\x15\xa4\x92\x6e\x0e\xef\x02\x49\x10\xaa\x2a\x99\x6e\xb2\xab\x6b\x96\x87\x0c\x12\x74\x9f\x7b\x3b\xcb\x75\x63\xd3\x32\x93\x12\xc0\x18\x28\xaf\xe4\x71\x59\x48\xa0\xe3\xd6\xc6\x9a\xd3\xb1\xa5\xd3\x6a\x2e\x21\x49\x4c\x94\xf8\x89\x92\x74\xbb\xed\x7c\x8a\xb4\xbf\x48\x30\x36\x39\x10\xf0\x4a\x2c\x09\x44\x58\xa8\x8d\xf1\x1c\x7e\xb2\xed\x3b\x87\x3f\xc3\x8f\xe4\x7b\xc9\xd7\x96\x3d\x7c\xfa\xef\x97\x55\xbf\xac\x25\x70\x8b\x76\xe8\x96\x6c\xd9\x8e\xdd\x8d\xe1\xd9\x33\x3f\x6e\x33\x59\x4c\xa4\x3f\x4c\xf6\xec\x9d\xb2\xf4\xf2\x39\x8e\x60\xdc\x02\x57\x8f\x1d\x62\xf3\x09\xc6\x4e\x01\x01\x94\x63\x75\x05\x4e\x60\x68\x81\x26\x52\x80\xe7\x08\xc6\x64\x16\x4a\xa9\x0c\x5e\x3e\x63\xa9\x03\x93\x98\x9c\xef\x79\xc4\x17\xb8\xc4\x0c\x11\x6c\x35\x01\xe6\xc0\x42\x31\x0c\xc9\xd1\x1c\xa6\x09\xa7\x33\x8a\xa3\x24\x61\x01\xb0\xb9\x71\xb2\x81\x4a\xce\xf2\xd3\x69\x0c\x75\x70\xc0\x61\x97\x1c\x36\x42\x72\x78\x09\x82\x24\x59\x1b\xde\xfd\xd7\x8a\xfc\xf5\x7f\x27\x4d\xef\xe4\xb3\x41\x7c\x45\x30\xff\xf7\xe0\xd9\x1d\x44\xd3\xa3\xb0\xf5\x10\x67\x1f\xe9\x3c\xa5\xc4\x36\x23\xc1\x98\x4d\x56\x87\x0b\xc7\xeb\x4a\x63\x0c\xe7\xa6\xc9\xdc\xe1\x5f\xfe\x87\xfe\xa7\x1d\x30\x99\x35\x03\x4d\xc5\x58\xc8\x3d\x7b\xf6\x6a\xb7\x36\x68\xf8\x1b\x8f\x63\x2f\x28\x48\x45\x53\xd0\x3c\xb4\x1c\x6d\x40\xdf\x42\xd7\xa2\xbb\xd1\x8f\xd0\xe8\xd1\x95\x9e\xa3\xe4\xb0\xd4\xf1\x90\xe5\xba\xfc\x10\x84\x00\xb8\x8f\xd1\xe8\x15\xf0\xd8\xb9\xaf\x88\xff\xff\x7d\x3d\x5f\x00\x16\x0b\x73\x10\xea\x1c\x1c\xec\xcc\xe9\x07\xea\x40\xe3\xe4\x6b\x56\x8d\x8d\x74\x0e\xd6\x97\xe1\x91\xb2\x21\xff\x75\xfe\xb2\x7c\xc8\x00\x3a\xfa\xaf\x07\x40\xff\xb7\xfc\xa1\x91\xb2\xfa\x7c\x8e\xcc\x0d\x76\x1e\x63\x57\xbe\x23\x72\xde\xa4\x3c\x5a\x75\xcd\x60\x27\x8d\xca\xea\xcb\xfc\xd7\xf9\x87\xca\x0e\xe7\x8e\xde\x06\xec\xc9\x82\x1a\xfb\x7f\xbd\x00\x76\x01\xaa\x2f\x1b\xd1\x10\x12\x0a\x36\xf4\x34\x2a\xee\xdd\xb4\xa1\x99\x68\x29\x5a\x83\x2e\x30\x18\x04\x7f\x80\x7e\x82\x5e\x44\x6f\xa2\x0f\xd1\x11\x70\x40\x10\x6a\xa0\xed\x24\x2b\x7e\x47\x49\x12\x0b\xed\xce\xfd\x2f\xe3\xc4\xff\xf2\x7d\x7e\x9d\xfe\x71\x22\x90\xcf\xff\xf5\x79\xff\x5f\x96\x8f\x32\x8c\x55\x0e\x17\xac\x54\x46\x8f\xd1\x0e\x7c\xf9\x21\xf7\x75\x2f\x3c\x76\xc0\x68\x02\x33\xd1\xd7\xbe\x0b\xd0\xff\xfe\x97\x68\x24\x7b\x3f\x37\xd6\xb9\xe8\x9c\x57\xd6\x26\x40\xce\x7e\xf2\x55\xc1\x07\xbf\x02\x02\xe9\xe4\xc1\xc3\xec\x51\xe0\x14\xfc\xbf\xb8\x6d\x8c\xfd\x7f\xf5\x6b\xc6\xfa\x64\xfb\x11\x27\x39\x4a\x0d\xa1\x20\x52\x10\x32\x9f\x68\x64\x07\x72\x5a\x1d\x37\x16\x92\x44\x61\xdc\xcb\x94\xdc\xa3\xbd\x5e\xb4\xad\xd3\x5e\xf7\xfb\x4b\x67\xfa\x0f\xc2\xf0\x41\x7f\xbf\xdf\xaf\x8d\x14\x0c\xec\x5e\xd7\x5e\x1f\xfb\x85\x61\x5a\x97\xd3\x72\x86\x69\x5d\x3d\xc4\xf4\x0b\xfc\x07\x0f\xea\x37\xbc\x55\xb0\xad\xa3\x8a\xdc\xcb\x39\xe4\x40\xa5\xc6\xae\xd1\x2c\x84\x40\x28\xe8\x3d\x99\xb4\xa1\x97\x40\x81\x2b\x06\x8a\x53\x28\x95\x24\x5d\x6e\xc1\xe0\x8b\x89\x46\xe8\x68\x24\x93\x6e\xc5\xf1\x09\x57\xbb\x05\x16\xe2\x06\x37\x4c\x41\x9c\x6a\x05\xc2\x26\xcf\x6f\xe9\xdb\xda\x2c\xcf\x6f\x99\xbe\xa5\x59\xbb\x77\xf6\xf4\xbe\x9d\x93\x8d\x03\x7c\xfb\x3c\x70\x3d\x1a\x69\xeb\xac\xec\xfe\xb0\xad\x33\xdf\xfb\xa3\xe1\xbb\x5f\x82\xa9\x2d\xf3\xe5\xe6\x2d\xd3\xf5\xe3\x56\x38\x7d\xfa\xec\xc9\x3b\xfb\xf4\x03\x59\xd6\xbc\x7a\xc6\xfa\x9b\x7a\xf4\xe3\x8d\xf9\x97\xfb\xcf\x5b\x73\x53\x6f\xff\x86\x35\x37\xd7\x3c\xad\xbd\xb3\x3e\xd1\x52\x6a\x5d\xb8\x60\xf7\xdc\x97\xbf\x7f\xde\xcb\x33\x56\x37\xf7\xde\xb8\x7e\xc6\xea\xe6\x9e\x9b\xd6\xaf\xd8\xd0\xdf\x7b\xd3\x9a\xf3\xfa\x7b\x6f\x5e\x83\x00\xb5\x1f\x41\x78\x94\x46\x86\x6f\xa8\x40\x33\xbc\x58\x74\x76\x2f\x14\x3e\x19\x00\x3c\xba\x6e\x69\x35\x8e\x79\x47\xbd\x31\x5c\xbd\x74\xdd\x9c\x6b\xee\xbd\x66\x0e\xf1\xd1\x15\xcf\xc4\xc7\xfe\xc7\xb0\x04\xcb\xc4\x9f\xb9\x22\xf7\xcf\x9b\x6f\xfe\xe7\x31\x4c\x91\x71\xbf\xa3\x20\x42\x14\x70\x94\x52\x0d\x76\xfd\x25\x16\x90\x54\x8b\x58\x21\xc6\x22\x6a\x00\x88\x1c\xce\xe5\x73\xed\xf8\xc7\xf9\xc9\xf9\xc9\xd4\xa1\x58\x30\xdf\xee\xef\xf4\xe7\xdb\x83\xb1\x84\x8c\x47\xc5\x2a\x11\x8f\xca\x89\x25\xb0\x04\x6f\x7d\x67\xad\xa6\x69\x38\x8f\xa2\xcd\x9c\x96\x73\x3a\x21\xc7\x35\x47\x09\x54\xd6\xc9\x02\x32\x99\x8e\x20\xb6\xb3\x00\x95\x87\x8e\x20\x53\x81\xc7\xe4\x98\x57\x74\x27\x42\x54\xdc\x28\x07\x05\xc5\xb3\x32\x1e\xd7\xcb\x45\xd1\x11\x25\x2e\x2b\xc5\x40\xb1\x80\x71\xe3\x90\x4d\x4a\xc6\xe4\x4b\x05\x00\x1b\x24\x42\xed\x70\x95\x76\xa6\x76\x26\xf5\xdb\x09\x91\xaa\x42\x78\xbf\x36\x45\x9b\x42\x7d\x2e\x87\xb5\xf6\x92\xf6\x12\xad\x9d\x24\x30\x55\x0c\x86\xe5\xca\x28\x3c\x58\x19\x85\x51\x29\x2b\xc1\x68\xb4\x12\x1e\x8c\x55\x0c\x8d\x42\xe3\x9e\xe1\xbd\x7b\xf7\xe6\x2f\x1d\x0f\x6d\xbc\x13\x2c\x7b\x86\x9f\x78\xe2\x89\x7c\x8b\x36\x14\x6b\x75\x1e\x60\xd9\x03\x18\x63\xac\x9f\x9d\xad\x31\x18\x91\xdb\x9d\x3f\x86\xcb\xe5\x76\xe7\xa8\xc5\x32\xea\x6c\x97\xb5\xe1\x1f\x3b\xdb\x0b\x7b\x2a\x9a\x09\x51\x18\x11\xc8\x8c\x82\x48\x46\x09\xd4\x81\x10\x84\xdd\x61\x22\x42\x33\x61\x99\x48\x66\xd5\x14\x0e\x47\x70\x26\x8d\x0a\x3d\x92\x09\x0b\x62\x3c\x9c\xcc\xa4\xa3\xe1\x4c\x58\xd7\xd5\xa3\xe1\x78\x38\x69\x50\x1c\x19\x1d\x96\x88\x86\x99\x7a\x0d\xe0\xc8\xd8\xc2\x61\x1a\xae\x73\xdd\xd5\x76\x1e\xf7\xc6\xe9\xda\xfe\xdf\xe5\x81\x7a\xe1\xdb\xcf\x9f\x81\xf3\x67\xaf\x3f\x9c\x85\xb2\xe7\x7f\xae\xfd\x06\x4a\x66\x2c\x7a\x52\x1b\xd3\xfe\x81\x07\xe6\x5d\x7c\x6e\xdb\xfd\xeb\xce\xa9\x3b\x65\x5d\x6e\x72\xfe\x66\x72\xef\x56\xed\x37\x2b\x17\x3e\x9d\xff\x51\xbb\xaa\x3d\x0f\xa6\x57\x5f\x02\xfe\xe2\x3f\x5d\xc2\x05\xd6\x6c\x4a\xde\xbd\xef\xc9\x9e\xe9\x97\xbf\xea\xef\xda\xb6\xe8\xe1\x81\xd0\x5d\x9b\xa6\x6d\x99\xdd\xe8\x2d\xbe\xc3\xf1\xf5\xcc\x00\x8a\xa3\x2a\xd4\x81\xa6\x18\x3c\x3f\x27\xcc\x86\xbc\xb1\xfa\x94\x49\x2b\xc6\x42\x03\x11\xcd\xa4\x92\x6e\xa1\x78\xa2\x22\x72\x26\x9c\xcd\x1c\x43\xf7\x51\xa3\x2c\x10\x49\x29\xda\x0a\x44\xd8\x1d\x9e\xb8\x13\xf6\xb2\x76\x29\x6c\x3b\x77\xe4\xb2\xd5\x4a\xef\xec\xe9\x0f\xdc\xb1\xe1\x1b\xfb\x9f\xd8\x8a\x2d\xdd\x53\xe1\x46\xb8\x7a\x7b\x6e\xcf\x2d\xdf\x7c\xbe\xf5\xdb\xd6\x9e\xba\xb5\x56\x8d\x9c\xbc\x0a\xda\xb4\x9f\x1e\xbf\x0b\xa6\x5d\x31\xf6\xfe\xfa\xb5\xb7\x54\xa4\x87\x1b\x66\x56\x70\xda\x53\x8f\x2e\x1c\xd4\x7e\xf8\xda\xda\x15\xa1\xbe\x49\x16\xe1\xc2\x1f\xde\xbf\xe3\x5b\x7b\x7e\x12\x29\x83\xb3\x37\xd7\x77\x82\x65\xfa\xb8\xae\xc5\x8c\xe3\xdc\x2b\xa8\x6d\x02\x6b\x81\xb1\x06\x2b\x8d\xdb\x9f\x29\xba\x64\x0e\x13\x10\x8a\x54\x01\x45\xc1\x18\x43\x6a\x80\xa3\x0c\xf3\x99\x2c\x4a\x25\x11\x9d\xb8\xec\xb9\xcb\x2e\x7b\x2e\x7f\xe9\xee\x15\x3e\xdf\x8a\xe9\x1d\xc1\xe0\x75\x7d\xee\x01\x21\x74\xde\x94\x15\xc4\x4b\x0f\x6d\xbb\xe0\xa1\x87\x2e\xd8\xf6\xd0\x35\xda\xbf\x1f\xd7\xa6\xd9\x9e\xba\x70\xd3\x8f\x4b\xde\x86\x8b\x66\x0e\xda\x45\xf0\x63\xb0\x3e\xf6\x38\x58\xc9\xa0\x7e\xff\x65\x87\x9f\x7c\x69\x37\x5d\x11\xbc\xb6\x6f\x7a\x7b\xd0\x14\x36\x35\xf7\x10\x6f\x6e\x7b\xe8\xa1\x6d\x17\x3c\xf8\xe0\x05\x4f\x68\xff\xd1\x7e\xba\xfd\xc1\xeb\xce\x59\x0c\x7b\x6f\xae\xc5\x70\xed\x63\x60\xd2\xfe\x8d\x8e\xd3\x1d\x4d\xc8\x87\xba\xd0\xf4\x22\x12\x80\x5b\x10\x0b\x8b\x63\xb2\x62\xb8\x2f\x67\xe5\x1a\xc8\x1e\x5b\x08\x6b\x19\x57\x3c\xe2\xc9\xe2\x7b\x62\x08\xbd\xf6\xf1\xf1\xf5\xe5\x42\x9b\xe8\xca\xe1\x1f\xd6\x8d\xac\x5d\x3b\xa2\x39\xcf\x19\xa8\x1f\x2c\x49\x27\x9a\x37\x96\x78\x52\x2d\x03\xa2\x30\x40\x8c\x15\xde\xc4\xfd\xc2\x95\x4b\x57\xdc\x60\x81\x05\xd7\xbc\xfc\xf2\x35\x57\xfd\x06\xff\xd9\xcc\x4f\x6b\xd5\x5e\x2d\xbc\xa0\x4f\x77\xfd\xe2\xd2\x4b\x4f\x3f\xe3\x52\xa2\x7c\x64\xed\xba\x99\xfd\x6b\xb5\x5f\xdc\xb5\xbe\xb1\x56\x10\x3c\xa9\x96\xe6\x8d\x9e\x30\x85\xcf\x2a\xbc\xcc\xeb\x27\x2d\xde\xf8\xdd\xe5\x63\x2f\x5f\x7d\xcd\xcb\xbf\xbe\x4a\x7b\x12\xe2\x1b\xe0\xb7\x1b\xee\xb9\x47\x1b\x39\xfd\xd2\x4b\x7f\xb1\xeb\x52\x44\x23\xe7\x91\xb9\xf4\x87\xd4\x11\x64\x47\x01\x54\x8d\x9a\xd1\x34\x03\x35\x89\x60\xe2\xc6\xe6\x6b\x2b\x56\x45\x1f\x28\x2c\xe1\x00\x22\x01\x6d\x90\x55\x15\x20\x58\x03\x59\x57\x22\x78\xbd\x05\x80\x26\xe2\x0a\xdf\x0a\x52\x80\x02\x5e\xa4\x19\x96\x62\x64\x22\xae\xa8\x44\x5c\x4d\x10\x35\x40\x65\xc5\x20\x88\x44\xb7\x03\x6b\x8b\x63\xad\x4e\x2b\xe3\x30\x47\xf0\x8c\xaa\x7d\x57\xb6\x7d\xa3\x36\x48\x90\x4f\x72\x98\x31\x45\x67\x7e\x97\xce\x3d\x6e\xab\xe3\x5d\x53\xae\x32\xbd\xfd\x32\x73\xef\x5f\x1a\xf2\x4a\xcd\x1f\xb4\xa7\xf9\x3f\x0b\xfd\x65\x9e\xba\x68\xad\xa7\x16\x5f\xfb\x5b\x97\x55\xb4\x97\xc5\x5a\xc2\x93\xad\x91\xbf\x41\xc3\xd6\x5d\xaf\x6b\x4b\xae\x8d\x0c\x4c\x6a\xe6\x38\xb8\x3a\x98\xb5\x59\x15\x58\xa3\x5d\x2e\x96\x12\x0d\x71\x5f\x7d\x6f\x6c\x31\x63\xc3\x8d\xda\x45\x8b\xa7\x5e\xb1\x72\xb6\xdb\x0d\x67\x78\x9b\x39\x57\xdb\xf9\x73\xf3\xef\x6a\xd7\x97\x46\x09\x92\xa1\xf6\xc0\x1a\x58\xb5\xd7\x29\x8a\xc4\x83\x6d\xda\x77\x1f\xb3\xc1\xe9\x41\x3f\x89\x05\xb1\xaa\x24\xab\x3d\xa3\x5d\x1d\x9f\x11\x15\x22\xa2\x68\x71\x11\x53\xe1\xcc\xa7\xdf\x3f\x45\xfb\x8e\x30\x77\xc1\x0d\x4b\xba\xec\x76\x20\x7c\x0e\x47\x4b\xa1\x8f\xb4\x9b\x0a\x7d\x9e\x43\x25\xa8\xeb\x18\x5a\x04\x1f\x26\x12\x60\x90\xeb\x1f\x4d\x99\xe8\x38\x1a\x1e\x77\x20\x1d\x27\x12\xe1\x5b\x41\xef\x1e\x12\x9f\x4a\x8a\x70\x60\xf0\xc2\xc1\xc1\x0b\x77\x10\x9f\x2d\xc0\x1e\x73\x1e\x99\x3d\x98\x22\x8c\x24\xcd\xc5\x0e\x0d\x8f\x0c\x8f\xa1\xe1\x91\xe1\x21\xd6\xb5\x73\x89\x7f\xa5\x74\xfb\xa9\x04\x3a\xf5\x76\x69\xa5\x7f\xc9\x4e\xd8\xa6\x5f\x34\x08\x07\xe0\x0c\x13\xcf\x9b\xf2\x25\x85\x28\xd2\x72\xac\x2b\xd7\x3f\x3c\xdc\x9f\x2b\x1c\x5d\x2c\xe4\x96\xec\x84\x3b\x06\x2f\xb8\x60\x50\x5b\xb2\xb3\xe0\x57\x6b\xd2\x87\xdb\x14\x6a\x42\x93\xf4\xbe\x7e\x54\x57\xfb\x92\x02\x17\x70\x96\xc3\x45\x46\x2c\x89\x1f\xf7\x9b\x85\x63\x75\x2f\xa6\x30\xa1\x25\x3b\x4f\x5a\xf4\x5c\x01\x15\x2f\xa7\x57\xe0\xf3\x43\x85\xe2\x9e\x3e\xa1\xde\x64\xd8\x48\xc3\xb9\x9d\x4b\xf4\x4a\xb4\xeb\xc5\x6f\x2f\x1c\x8f\x55\xa2\x00\x40\xab\x57\x45\x0b\x19\xcd\x04\x3b\x0a\x0d\x30\xf6\x98\x11\x45\x80\x42\x47\x10\x75\xc0\xa8\x1f\x8a\xe9\x1f\x6a\x60\x1c\xeb\x2f\x93\x36\x30\x87\xd3\xaa\x5e\xb3\xa3\xc7\x02\x9f\x30\x5d\x09\xc5\x23\x75\x40\xf6\x6a\x49\xb0\xc4\x4a\xb4\xd1\x92\x98\x05\xb4\xa4\x57\xe6\x61\xf7\x5b\xc6\xf1\x19\xfd\x98\xe3\xd3\xfa\x41\xf6\x3e\x03\xbb\x79\xd9\xfb\x16\xec\x5e\x98\x96\xb9\x4b\xe5\x92\x68\xb4\x44\xbe\x94\x93\xd3\x3c\x5c\x79\xf4\x90\xe3\x79\x2d\xc7\xa7\x65\xed\x2c\xe3\x30\x61\xac\x71\xa3\x4a\xd4\x6d\xd8\xc2\x14\x41\x93\x0a\xa3\x7c\xd1\x0d\x3b\xab\xa6\x15\x39\x3c\x21\x35\x64\xa4\xf2\x69\x45\x8e\x19\xeb\x89\x47\xaf\x26\x0d\x7a\x3e\x98\x68\x9a\xb6\x3c\xf0\x53\xed\xa2\x1b\x2a\x7c\x22\x15\xba\x70\xcd\x5f\xee\xe3\x59\xde\x3f\x14\x7d\x5f\xfb\xe5\xf5\xd7\xd4\x46\x4b\x98\xc0\xe6\xed\x20\xfd\xda\xc3\x96\x44\xcf\x2c\xdb\xa6\x3d\xf8\xc0\xaf\x46\xa4\x60\x79\xd0\x5a\x7a\xd1\xf7\x6f\x85\xea\xe5\x6e\xbe\xb4\xf2\xf9\x13\xe1\xe7\x27\x87\xf8\xf5\x11\x73\xa5\x50\x6a\xf2\x2d\xb7\xfa\xde\x2b\x73\x5f\x5a\x61\x4f\x95\x44\x4d\xe1\xad\xf6\x28\x70\x35\x52\xcf\xb4\x1a\x26\x1e\x08\x56\x98\xe2\xdd\x2d\xb6\xf2\x45\x27\x6c\x06\x41\x81\xcb\x96\x46\x88\xd7\xa5\x61\x29\xcc\x85\x19\x82\x09\x73\xa0\x84\xb9\xb0\xca\xab\x61\x12\x69\xbf\xf6\x80\xa4\x51\x55\xbb\x02\xda\xcb\x50\xe3\xd1\xde\x81\xc3\x55\xbb\x02\x50\x4d\xfe\x3a\xff\xe3\xa0\xf6\x8d\x80\xf6\x61\x00\x6a\xf0\x94\x00\xdc\x1a\x00\x2e\x80\x10\xe2\x10\x42\xdf\x35\x23\xf2\x1c\xc4\xa2\xb8\xc1\x68\xdf\x8c\xa6\xa2\xd9\xe8\x54\x74\x1a\x5a\x8b\x2e\x40\x97\xa2\xcb\xd1\x2d\xe8\x7e\x34\x8a\x7e\x8b\x50\x5c\xd5\x7b\x69\x84\x76\x13\xc6\x88\x1d\x57\x89\xb4\x22\xeb\x6d\xcb\x10\x82\x34\x4e\x1e\x90\x01\xc9\xb0\xf3\x57\xb3\x49\x55\x62\x74\x19\x58\x51\xd3\xa9\x24\x10\x12\x23\x44\x8d\xf4\x54\x32\x08\xc7\x32\x82\x45\xc3\x1d\x45\xd5\xc7\x78\x33\xf0\x8c\x60\x30\x23\xf1\xfa\x88\xaf\x9e\x18\x2b\x44\x0a\x7e\xe1\x0d\x40\xe8\xd9\xfa\x1c\xc8\xa7\xb3\xfa\xe7\x34\x1e\x6b\x85\xa4\xc8\x33\x75\x46\x0c\xf3\x99\x6c\xd1\x19\xdf\xc0\x6f\x36\xa4\x3a\x3d\x01\x19\x9b\x14\x84\xd3\xe9\x04\xbb\xc5\xcc\xb2\x2c\xd8\xcd\x22\x54\x58\x6d\x76\x93\xd3\x64\x07\x8b\x95\x36\xb3\x56\xb3\xf9\xf0\x7b\x82\x80\x59\xcc\x71\x98\x9d\xef\xf5\x62\x93\x59\x92\xcc\x26\xf0\x3e\x5e\x52\x62\xb5\x60\xb7\x1b\x5b\xac\x83\x92\x84\x6d\x76\xb7\xdb\x6e\x1b\x72\xbb\x31\x4b\x9b\x05\xc1\x4c\xb3\xb0\x5d\x7b\xd3\xed\xb6\x30\x4e\xec\x72\x61\x27\x63\x19\xe4\x79\xab\xc9\x85\x9d\x4e\xec\x32\x59\x4f\x75\xb9\xb0\xc0\x63\xa7\xd3\x6e\x32\xdb\xe0\x92\x67\x1d\x0e\x87\xc0\x02\xcb\x3a\x04\xc7\x69\x2c\xeb\x14\x9d\x60\xb3\x81\x53\x74\xbc\xc2\xba\xbc\x2e\xa0\x69\x1b\xb6\x98\xad\x26\x86\xc5\xe4\xb2\xbb\xce\x1d\xfb\xc0\xee\xf2\xcf\x19\x7a\x1a\x02\x5c\xa6\xe1\xdc\xbb\xf6\x7c\x8c\xad\x16\x96\xb5\xe4\xff\xfd\xb1\xc5\x9e\x7e\x19\xf7\x3a\x4d\x14\x65\x72\xd2\xf9\x27\xe0\x1f\x60\x61\xac\x66\xc6\x0e\x67\xe6\xb6\x99\xcd\xdb\x72\xe6\xc9\x2f\xfe\x8f\xd9\xf2\xdc\x8b\x66\x2d\x09\xff\xf8\xf7\xfb\x56\xeb\xfb\xff\xb6\x51\x63\xff\xb2\xdb\xff\x35\x66\x0f\xbe\xfb\x1f\xa7\x99\xf9\xcf\xbb\xb4\x59\x13\xf1\x59\xda\x85\xff\x61\xac\xae\xff\xc0\x56\x97\x75\xa6\x56\xf5\x2f\x93\x95\xff\x17\xfc\x96\xb7\x86\x34\xfa\x13\xb7\xfb\x13\x38\x64\xb6\xdb\xf3\x1c\x7e\x57\xc3\x1f\x5a\x1c\xac\xf5\x43\xd0\xac\x2c\x1b\xd0\x84\xf7\xac\x4e\xa7\xf5\x3d\x78\xcf\xe6\x74\x6a\xa6\xbf\xd9\x5d\x2e\xfb\xba\x73\xf1\x56\xc2\x61\x66\x28\x93\x2b\x7f\xd5\xb9\x77\x62\x97\x9d\xd8\x29\x59\x22\xda\xe7\xa3\xe2\x5d\x47\xf9\x06\x91\xc1\x61\xec\x33\x10\x48\x11\x0a\xc5\x54\xb7\x60\xac\xd0\xb7\x80\xf8\xe5\x31\xd2\x00\xa7\x2e\x44\xd3\x59\xcc\xc3\x1f\xe0\xa6\x0d\x2f\x68\xb7\x68\x43\xda\x2d\x2f\x6c\x80\x9b\xbe\x22\xbe\x1f\x46\xe0\xd4\x17\xc6\xe3\x2f\x10\x68\xee\xec\x7b\x0b\xf6\x18\xf7\xce\x1e\xbb\x77\x42\x04\x2a\x26\x44\xc8\x8a\x49\xe7\x4d\xca\x15\x62\xb9\x49\xe7\x4d\x58\xcf\xe5\x91\x17\x45\xd1\x20\x3a\x0d\x9d\x83\x2e\x40\xdf\x42\x08\xbe\xb8\x5e\x27\x31\x5c\x58\x56\x40\x36\x8c\xad\x33\x5c\x98\x03\x63\xb7\x4c\x12\x19\x81\x66\xdc\x85\x35\x73\x06\x1b\xbc\x7d\x8a\x6c\xe0\x1e\x49\xa2\x3b\xab\x66\xd5\x04\xa8\xd9\x26\x9c\x34\xfc\xef\xc5\x52\xa0\x19\x11\xb2\x2a\x0b\x40\x4b\x59\x35\xad\x66\x55\x39\x23\x67\x64\x45\x60\x08\xfd\x52\x45\x7f\x0a\x4d\xc9\x51\xfd\x9b\x4c\x53\x8f\xfb\xcb\x8e\x02\x28\xe7\xca\x86\xfc\x17\xc2\x46\x8b\x4d\xfb\xb9\x0d\x4e\xd3\x86\xca\xea\xf3\x08\x6b\xe1\x54\x53\xe3\x95\x01\x27\x8b\x81\xee\xa8\xfd\x66\xdb\x1b\xf7\x5d\xbf\xc0\x61\xf7\x00\x65\x21\xcd\x83\x73\x58\x33\x4e\xab\xdd\x31\x8f\xdd\x6e\x0d\xba\x41\xb2\xb9\xcc\x18\x03\xb6\xa9\x9a\x2f\x3d\x27\xd5\x03\xdb\x1d\x76\xa0\x19\x03\xa1\xc2\x06\x5b\xbf\x75\x35\x16\xa9\xbe\x94\xaf\x3e\x80\x37\x78\xce\xe9\xab\x65\x49\xf2\x42\x63\x89\x6d\x1c\x86\xb9\xcc\xdf\xad\x5d\x5c\x6a\x83\x06\xdb\x21\x17\x89\xea\xcb\x60\xe4\x10\xc2\xb3\xbc\x01\xa6\x4e\x0c\x00\x06\x90\xcb\xc2\x9e\x26\xed\x10\x63\x03\xd2\xe2\x2d\x5b\x5e\x6d\x76\x60\x3c\x67\xf8\xe2\x6d\x03\x37\x26\xcb\x1c\xee\x1a\x1a\x13\x54\x60\xcb\xa4\x3d\x9a\xcf\xf3\xcd\xb2\xf9\xc4\xe6\x8a\x85\x4c\x9c\x28\x23\x49\x00\x0c\x22\x0b\x90\x5f\x99\xf5\x01\x47\x75\x9d\x35\x77\x4d\xbd\xd5\xe3\x07\x40\xc7\xf5\xb3\xc2\x3b\x9a\xfd\xf5\xde\x0d\xef\x4e\xf1\x29\x3e\xab\x66\x33\x29\x29\x00\x12\x9f\xe2\x0d\x48\x3f\x82\x76\x40\x34\x9d\x80\x4c\x02\x14\x22\x6a\xc8\x76\x51\x45\x56\x88\x54\xe6\x2b\x5b\x7a\xe5\xe4\x3d\xb7\xe6\x18\x02\x93\x04\x50\x44\xee\xd6\x3d\x93\xb5\xdf\x2e\x3c\x8d\xc2\x98\x04\x0c\x34\xbe\x7c\xdd\xe5\x98\x02\x92\xc4\x98\x3a\x6d\xe1\xd7\x68\x36\x22\xb7\x3a\xbf\x1a\xde\x12\xbc\x4e\x93\x87\x88\x98\x35\x1f\xbe\x7a\xf5\x6a\xad\x57\xf0\xba\x09\xc6\x8c\xa9\x90\x19\x87\xf3\x6f\x9a\x83\xb4\xdb\xed\x15\xe0\x91\xd5\x5f\x6c\x87\x53\xbe\x5e\x3b\xc4\xdd\xe1\x4c\x54\x6d\xc5\x4d\x20\x4a\x01\x1c\x84\xa8\x1e\x27\x0a\x8d\x61\x40\xb8\x45\x65\x45\xae\x01\x23\xce\x13\x5f\xd9\x08\x50\x0d\x25\xd3\x96\x53\x16\x0a\x30\x90\x98\x62\x88\xd5\x7d\x10\xed\x1e\x7d\xba\x4b\x7b\xa7\x77\x39\x69\x23\x30\x06\x92\xb6\xae\xea\xd3\xfe\xd4\xfd\xc4\x53\x5f\xa3\x19\xde\x5d\xb5\xea\x36\x86\x37\x91\x34\xc9\x98\xc9\xdb\x56\xad\x02\x0e\xbc\xab\x57\xdf\xca\xf0\x24\x41\xd2\x56\xdb\xad\xab\x57\x6b\x1f\x69\x6f\x8d\xdb\xc8\x4c\xac\x7f\xbd\x61\x0b\xfc\x75\x5b\x20\x93\x4a\x16\x78\xba\x15\x39\x1a\x76\xa7\x38\x88\x72\xfa\x97\xeb\x16\x18\xfa\xab\xeb\x1c\x82\x29\x4b\x2e\xe9\xab\xe8\x9a\xd9\xdb\x56\x3b\xa0\x5d\xbe\x18\xa8\x0d\x1b\xd3\xc1\xfa\xd6\xe0\xd7\xab\xe0\xdd\x0e\x29\x37\x30\x6b\xa3\x8f\x5f\x9d\x7f\x05\x3c\x60\x73\x85\x07\x16\x04\x1d\x27\xab\x53\x05\x4a\x7e\xcd\x91\x87\x0b\x67\x54\x09\xc8\x82\xb9\x94\xf0\x95\x55\x20\x73\x63\x68\x34\x07\x39\xad\x7f\x64\x78\x78\x64\xf8\x6b\x94\x1b\x46\xb5\xd1\x51\xfd\x96\xdc\xb0\x7e\x0b\x42\xe6\xa3\x65\x1d\x5f\x97\xd1\xcb\xab\xa2\x5e\x03\x65\x3d\x13\x75\x53\x99\x68\x69\xf1\xec\xfe\xea\x3a\x44\xdd\xd1\x4c\x98\x03\xc3\x43\xd8\xb0\x82\xce\xf2\x99\x94\x3b\x95\x14\x71\x51\x8c\xc6\xb9\x1c\x20\xe3\x8f\x68\xfe\xd2\xda\xe5\x72\x1a\xc2\x97\xae\x36\x5d\xf1\xa7\x2b\x4c\xee\xd3\x72\x33\xc5\xc8\xe3\x06\xd7\x1b\x99\x9b\xf0\x1f\x7c\x55\x8d\x73\xb9\x43\x08\xff\x5a\xbb\xc3\x57\x72\xca\x59\x67\x9d\x52\xe2\x6b\x83\xe9\xb9\x9c\x57\xf3\x1a\xfc\x8c\x47\x6d\x5e\x27\xbc\xab\x06\xd4\x67\x58\xb3\x7d\xad\x79\xc2\x3d\xce\x1a\x79\x94\xb8\x41\xcd\x42\x52\xcd\x3a\x95\x02\xb2\x9a\xe8\x34\x50\x57\x94\xa4\x9a\x4d\x2b\x09\xd0\x53\x04\x23\xe5\xab\x3b\xe7\x7b\x82\xc1\x1d\x79\xd7\x4e\x5d\x31\xd8\x79\x97\x13\xf6\x05\xf9\xed\xdb\x9d\x59\xc1\x4d\x71\xa7\x9f\xce\x51\x6e\xd7\x13\x3e\x61\xde\x3c\x57\x56\xc6\x7c\x3a\xcd\x63\x5e\xf8\x3a\xa3\x53\xc2\x24\xe6\x0f\x88\x26\x6c\xbe\xdb\x58\x37\xbe\xdb\x91\x9f\xe2\xb9\x15\xae\xbb\xd5\x4d\x73\x5c\xc6\xbd\x45\x7b\x6a\x8b\x3b\xe3\x74\x5c\x25\x2c\x19\x5b\xc2\xe3\x58\x46\x68\xb8\xaa\x41\xc8\xb8\xb8\x93\xf4\xe9\xd4\xd7\xfd\x4e\x4f\x5c\x1b\xa2\xc6\x5b\xcd\x40\xc3\x4c\x25\xbf\x7a\x2a\x34\x58\x88\x35\xe3\x48\x9c\xa9\x37\x0b\x6b\xd6\x3e\x05\xb3\xf9\x6b\xcd\x63\x44\x6e\xfc\x5e\xc8\xa5\xfb\xb0\x49\xcc\x8f\xea\xf5\x07\xcb\x42\xb0\x98\x4f\xf2\xfe\x55\x34\x0d\x2d\xfa\x9a\x35\x6b\x85\x20\x04\xc0\x01\x06\xa3\x11\x6d\xb8\xaf\x84\x45\x86\x30\x78\x8b\xa0\x0d\x14\x39\xdb\x06\x59\x51\x82\x04\xa8\x7c\xe1\x5a\x3d\x53\xf9\xea\x97\x3f\x64\xf2\x5a\x53\x56\xc2\xf4\xc8\x23\x26\xc2\x9a\xb2\x7a\x4d\x7f\x61\x59\x92\x64\xd9\xbf\x9c\x98\xae\x9d\x67\x77\xe0\x6f\x63\xd1\xde\x56\x3c\x7f\xad\x16\xb1\x12\x26\xd9\xe4\xb5\xfe\xf3\x9f\x56\xaf\x49\x36\x11\x56\xa8\xe6\x79\x9e\xd7\x5e\x3e\x31\x3d\x4f\x63\xd1\x4e\xe8\x8f\xb6\x60\xd1\x3e\xf6\x53\xbb\x03\x23\x40\xca\x91\x6b\xa9\xd7\x68\x64\x58\xe8\xba\xe9\x28\x8d\x0b\xc4\x3e\x16\x50\xc2\xa2\x57\x97\x9d\x54\xf9\x28\xe3\x3a\xc3\x42\x24\x01\xca\xc4\xe5\x3e\xea\xb5\x33\xbe\xd1\xf1\xcb\xdb\x6b\xfa\x07\xfc\x1d\x2b\x4f\x5f\x3f\x34\xcf\x07\x3e\xef\xfc\x4d\x9b\x67\xde\x73\xde\xae\xdb\x5f\xda\xf7\xe0\x93\x8d\x4c\x49\x57\x53\x87\x2b\xd8\x98\xcc\xb4\xff\xe6\xf6\x56\xfc\xcc\xb3\xd2\xc5\xda\x27\xb7\x79\xab\x6b\xb9\xcc\xba\xcb\xfe\x0c\x0c\x9c\xfd\xe2\x1f\xb4\x6b\xb5\x0f\x9f\x1d\xba\xe7\xfd\xa9\x50\xb6\x7f\xf4\xdf\x2f\x8f\xde\x7a\x01\x90\x36\x25\xb4\x7c\xd6\xbc\x85\xa7\x2d\xfa\xf1\xab\xc5\x3d\x7d\xa6\x30\xae\xd1\xc8\x82\x58\xe4\x42\x6e\x54\x82\xaa\x11\xe2\x81\x8b\x53\xaa\x62\x86\xf8\xf8\x82\xb3\x19\x24\x8e\x8a\x03\x47\x71\x42\x91\x54\x4c\x57\x49\x0a\x2a\xf4\xef\xf1\x22\xed\x41\xed\xe1\x9f\xfe\x94\x48\xe1\x45\xda\x3f\xb5\x07\xa7\x83\x53\xfb\x48\xfb\xe8\x3b\x30\x23\x7f\x27\xf9\xfc\x4f\xb5\x87\xc1\x9e\xbf\x93\x48\x45\xc6\x9e\x77\x57\xb9\xc7\x9e\x8f\x44\x88\x94\xbb\xca\x4d\xa4\x22\xb0\x46\x3b\x1b\x96\xbf\x19\xdb\xbe\x7d\xec\x75\xd8\xbd\xef\xcd\x6f\x3e\xf2\xc8\x23\x4b\xde\x84\xe5\xda\xd9\xda\x87\xdb\x01\xc7\xf6\xc1\x6e\xed\xfa\xca\xfc\x9f\xca\xa5\xfc\x9f\xec\x76\x1c\x91\xca\x71\xa4\x5c\xc2\x11\xbb\x3d\xff\x27\x69\x1c\xaf\x15\x99\x10\xb5\x11\x45\xd1\xbc\x42\x9f\x34\x56\xed\xa2\xe1\x4a\x6c\xec\x70\x1c\x05\xf0\x88\xa5\x8c\x7d\x0e\x1a\x0c\xe5\x39\x01\xca\x51\xbc\xf0\x00\x95\x2a\xae\xe2\x31\xe3\x36\x60\xd1\x48\x81\x55\xcb\xb4\xe6\x92\xf7\xee\x26\x1d\xc4\xe1\x29\x80\xa9\x7b\xdf\x3b\x7b\xb1\x6d\xcf\xb9\x4b\xa7\x4f\x03\xe5\xa1\xbb\xc0\x73\x07\x1c\xfa\xd5\xf7\xb6\x5e\xb2\xdc\xd9\x66\xeb\x9a\xae\x4e\x9f\x9e\xa9\x9a\xd5\xd1\xd1\x33\x6b\x6d\xc7\xa6\xbb\xbf\xb7\xe5\xb2\x53\x97\x74\xf6\xa5\xfb\x7b\x1b\x2a\x67\x76\x74\xf6\x0c\xac\x69\xdb\x7c\x2f\x1e\x4b\xfc\x7c\xf3\x9e\x77\xc0\xf2\xb7\x3b\xcf\xfe\x71\x56\xa9\x5c\x7f\x7b\xe3\x0d\x8f\xdf\xa6\xbd\x77\x07\xed\xd1\x3e\xda\xbc\xeb\x34\xa1\x87\xed\xe8\xca\x66\xba\x2b\xba\x07\x06\xba\x2b\x2e\xdb\xb0\x69\xd7\x37\xce\x6c\xef\x4c\x35\x4c\x2a\x24\x5c\x7a\xbc\xff\x41\x01\x7b\x53\x41\x35\x48\x35\x38\x39\x8f\x73\x1a\x88\x85\x18\x29\x9b\x94\x54\x50\xe5\xb4\xaa\xd0\x4e\x14\x52\x15\x3a\xa2\x30\xae\x50\xd6\xe0\x96\xa5\xa4\xac\x53\x61\x44\x01\x3f\xf7\x45\xd3\x7f\x3c\xaa\x5d\x78\xdf\x53\x03\xf7\x0e\x3c\x75\xf8\xe3\xa7\xfc\xfe\xa7\x16\xe2\x4e\xd8\x5a\x48\x78\xae\x48\x15\x4b\x9c\xfe\xd4\xc2\x85\x4f\xf9\x69\x74\x12\x4b\x61\x76\xa1\x7e\xd3\xe1\x8f\x8d\x1b\xee\xd3\x2e\xcc\x3f\x69\x24\x80\xfc\xe7\xc2\xcd\xa6\xa7\xee\x2b\x3c\xce\x58\xaf\x09\xd1\x07\xa8\x57\x51\xd8\xf0\xd1\x1a\x37\x70\x72\xc5\x54\x37\x8d\xdc\x42\x00\x87\x5a\x71\x26\x8d\x94\x8c\x48\xba\xe8\x03\x97\xfc\x4d\x1b\xd5\x46\xb4\xd1\xbf\x5d\xf2\x14\xf4\xbf\xf0\x86\xf6\x46\x91\xd7\x76\x99\xf6\xc6\x1b\x2f\x40\xff\x53\x38\xf7\x80\x9e\x79\xc9\xdf\xa0\xfd\x81\x57\x60\xfd\x47\xc1\x83\xd5\xda\xc8\xdb\x3b\x0a\x34\xb6\x3b\xde\x86\xa1\xea\x83\xc1\x8f\xb4\x4b\x11\x02\xc4\x1f\x41\xf4\x07\x34\x42\xa7\x21\xc4\x67\x5d\x6a\xb2\x4e\x60\x58\xd2\x30\x26\x31\x1c\xd8\x21\xa1\x0f\x4f\x44\x0d\xa8\x01\x08\x42\xd6\xb0\x06\xd2\x05\x46\x3d\xd3\x08\xb0\x86\x57\x7c\xc1\xd9\x3d\x41\xd6\x80\x9c\x12\xeb\x02\x26\xc9\x55\xb4\x2d\xe7\x4d\xbf\x7f\x86\x02\x53\x59\x7b\x7d\x98\xea\x99\x9a\x5c\x31\xbd\xd5\xe9\x54\xfc\x0e\x9f\x9d\xb5\x94\x57\x57\xb0\xf6\x15\xca\x0c\x81\x07\xc5\x2d\xdc\x36\x12\x56\x08\x52\x9c\xe9\xf7\x2f\xaf\x1a\xe0\xf9\x60\x44\xa8\x09\x2f\x98\x35\x45\x74\x37\xf7\x78\xc8\x50\x45\x5d\x39\x6b\x67\x19\x4b\x59\xf5\xcc\xba\xee\xca\x5a\x3f\x0f\xc4\x9f\xb4\xb3\x8f\xec\xd7\xf6\xfd\xe3\x22\x7c\xcd\x6b\xb0\x79\x3b\x60\x53\x6a\xd9\x86\xeb\xae\xbe\x6b\x4a\x52\x71\x06\x39\x67\x6a\xe7\xba\xd3\x03\xa5\x25\x75\x61\x2f\x4d\xaf\xe7\x26\x7b\x7d\xb5\x6b\x42\xc1\x1f\x3d\x9c\x58\x1b\x09\xc7\xa7\x70\xdc\x7a\x76\x6a\x69\x69\xfd\x8d\xfb\xdb\xab\x83\x42\x98\x73\x66\xb6\x6e\xd8\x3a\xbc\xfc\x94\x16\x8e\xb3\x13\xa5\x91\xce\x64\x7f\xef\xb2\x15\x3b\xa6\x68\x79\xed\xf4\xb7\xaf\xfa\x0c\x06\x0a\x72\x8f\xd1\xd7\x6c\xc8\x87\xca\x50\x3f\x5a\x82\xce\x44\x9b\xd0\x25\xe8\x7a\x84\x28\xb7\x1c\x53\x54\x51\x52\x45\x89\x11\x81\x11\x25\x46\x76\xaa\x12\xcd\x48\xb4\x5b\x00\x89\x26\x99\x4c\x56\x55\xb2\xaa\x94\x25\x18\x51\x60\x24\x9a\x51\xf4\xbc\x88\xa2\xca\x0a\x23\x2b\x46\xb7\xd4\x73\x55\x25\x9b\x94\x18\xfd\x31\xe0\xa6\x8b\x97\x29\xd9\x18\x72\x32\x4a\xb6\x60\x7b\xa9\xca\x8a\xaa\xdf\x62\xdc\xa5\x77\x05\x34\xc1\x19\x86\x2c\x38\xc7\x1c\x67\x06\x4f\xac\x7a\x49\xbb\x65\x55\x63\x69\x55\xc7\x55\xaf\x73\x1d\xf9\xbf\x9c\x22\xfa\x1a\x4e\x3d\xb5\x21\xc0\x0f\x44\x29\x53\xe3\x2a\xed\x96\x97\xea\x3b\xb8\xd7\xaf\xea\xa8\xda\xfc\x0e\xcb\xfe\x3d\xd8\xb5\xbf\x61\x61\x6d\x7a\x71\xba\x76\x61\xc3\xfe\xae\xe0\xdf\x59\xf6\x9d\x70\xe7\xfe\xa6\xf9\xb5\x55\x67\x56\xd5\xce\x6f\xda\xdf\xa9\x55\x74\xd4\xeb\x97\xcb\xd1\x86\x55\x30\x44\x3a\x4f\x6d\xf0\x89\xa7\xc4\xa2\x03\x7c\xa0\x41\x6c\x88\xca\xfa\x8f\xd4\x77\xfc\x1a\x86\xc0\xfe\xad\x83\xda\xcf\xb4\xbb\xb4\x9f\x1d\xfc\xd6\xb7\x0e\x42\x33\x2c\x84\xe6\x83\x0f\x9d\xe4\x03\x59\xd6\x49\xbf\x78\x7f\xa4\x2e\xd9\xf0\xbd\xaa\xb9\x36\xcc\xf9\x9b\xd3\xe1\x7d\x70\xc3\xbe\x70\x7d\xbd\xff\xf4\xe1\xb3\xb4\xbf\x47\xee\x7f\x91\xee\x04\xdb\xdc\xaa\xef\x35\x24\xf1\xa2\xfe\x8a\xb9\x15\xfd\x8b\xa7\xdf\xde\xe5\xfa\xd8\x62\xf9\xd8\xd5\x75\xfb\xf4\xc5\x46\xd2\x92\xbe\xdb\xbb\x5d\x1f\x59\x2c\x1f\xb9\xba\x6f\xef\xc3\x72\x27\xb6\xce\xad\xb8\xa7\xbe\xa2\x3e\x7c\xff\x8b\xf9\xfb\xb4\x65\xfb\xc2\xff\x0f\x69\xef\x01\x27\x45\x91\xf6\x8f\xd7\x53\x9d\x26\xec\xc4\x9e\xe9\x9e\xbc\x3b\xa9\x67\xf3\xb2\x13\x37\xef\x90\x96\xb4\xe4\x9c\x17\x24\x83\x92\x24\x8a\x30\x24\x41\x51\x4f\x51\x31\x60\xe0\xce\x03\x11\x39\x14\xf5\x54\x14\x75\xf5\xce\x33\xa0\x9e\xde\xa9\xef\xe1\xa9\x87\x77\xde\xbd\xa7\xef\x45\x2f\x09\xbb\x53\xfc\x3f\x5d\x3d\x1b\x40\xbd\xfb\xbd\xef\x1f\xb6\xa7\xab\xab\xaa\xbb\xab\xaa\xab\x9e\x0a\xcf\x53\xdf\x6f\xb2\xc9\xb7\xf8\xca\x55\x0b\x7c\x75\x75\x41\x25\x58\x57\x5e\xf7\x70\xf9\x14\x23\x1e\xc4\xff\x34\x8f\x68\xca\xf6\xf4\x4f\x2d\x7e\xe0\x9b\xac\xf3\x85\x7e\xfb\x62\xad\xa8\x1e\x0d\x45\x4b\xd1\x5a\xb4\x13\xa1\xa8\x23\x1c\x4a\x25\x13\x71\xa6\x70\x96\x32\x29\x3e\xdc\x63\x76\xef\xe4\x9d\x0e\xfa\x13\xc0\x89\xb8\x3a\xed\x50\xc5\x30\x9d\x81\xc4\xd2\x62\x82\xf6\x1a\x61\x75\x7c\xc3\xa5\x34\xdc\xf8\xb8\x94\x48\x85\x55\x3f\x3f\x84\x9d\xaa\xf8\x4d\x38\xc3\x4e\x47\x80\xa1\xca\x23\x4d\x11\x93\xbe\x9c\x02\x15\xb7\xcd\x5e\x3e\x7f\x51\x64\xe4\xe8\xd1\x11\xe5\xc8\x98\xfa\x78\xd3\x94\xf5\x8d\x95\x4a\xd9\xea\xd2\x21\xed\x15\xe7\x3a\xc6\x78\x6b\x6b\x47\xcf\x30\x44\x87\x5d\x8f\xf1\xf5\x0c\x5c\x08\x28\xa9\xa4\x3e\xac\x5f\xca\xdc\xc8\x36\x45\x80\xb1\xb2\x98\xb3\x17\xd7\x29\x59\xf2\xda\x80\xe1\xb5\xf1\xb6\x5a\xbc\xa0\xbf\x4a\xec\xb3\x41\xad\x59\xb8\x63\xf2\xa4\x19\x89\xe8\xb5\x7e\xff\x9a\x29\xf1\x25\x16\xc6\x36\x24\xe5\x62\xa2\x8b\xaa\x06\x87\xad\xa7\x07\x67\xcd\x5c\xb1\xab\x52\x67\xb9\x6a\xac\xcb\xa7\x27\xf3\xbc\x19\xd8\x59\x2d\xcb\x03\xc8\xc6\xb8\x7e\x93\x73\xc2\xa7\x78\xdd\x04\x87\xab\xb8\x66\x1d\x03\xf8\x6c\x34\xdd\xa8\xb8\xf0\x87\x91\x4c\x3a\x1a\x49\xa5\x27\x5e\x86\xf1\xca\xa3\x21\x17\x11\x7f\x9a\x62\x60\x5b\xe9\x1a\xe6\x0a\xb4\x01\xa1\x68\x32\x1c\x72\x3a\x12\x71\x46\xed\x91\x54\x87\xda\x32\x28\x93\x3a\x45\x66\xe1\x9c\xd6\x60\x88\x9a\x26\xa7\xd4\xc9\x43\xaa\xa0\xc7\x97\xe3\x10\x4e\xa7\x6c\xc9\x58\x82\x77\xda\x1c\x51\x27\x45\xb5\x4a\xd9\x12\xa9\x10\x45\xec\x4f\xa4\x68\x48\xc2\x19\x52\x2a\xc0\xe6\x28\x58\x7e\x6b\xfd\x1f\x9e\x78\xf8\xfe\xe3\x77\x36\x36\x35\x6e\xd9\xb2\x01\x4c\x91\x0a\xeb\xfe\x2d\xa5\xb1\xaa\x61\x53\xa6\x0c\xab\x22\x77\x0c\xdd\x7c\xd5\xc0\xa7\x06\xb7\x0e\x9f\xfb\xc2\x8d\x1d\x13\xe6\xc3\x53\x9f\xb0\xec\x27\x2c\x9e\x3d\x6c\x71\xcb\x8c\xb8\x5f\x87\x05\x17\xef\x54\x3a\xf8\xdf\xf0\x8f\x58\xea\xcd\x93\xa7\x36\xe7\xff\x32\xa6\xbe\x61\xdc\xd8\xc6\x06\x69\xc1\x92\x85\xcc\xac\xe6\x09\xb7\xee\x81\xb7\xde\x28\x32\x54\x94\x6d\x7b\x42\xd6\x29\xb1\xe2\x32\xd9\x19\xa8\x9a\x58\x4f\xde\x71\xd7\x2f\x1f\x79\xb8\x89\x2d\x9b\x7c\xa5\x8f\x75\x3d\x3c\x7e\xdf\xa9\x9a\xee\x17\xaa\xa6\xe3\x79\x73\x42\xc1\x99\xf9\x83\xd3\x4f\xfe\x38\x56\xda\xd4\x31\xad\x11\xe6\xb2\x98\x7f\xa1\x3d\x1d\x2e\xdb\xf2\x02\x4b\x6e\xdb\xc9\x9a\xaf\x9e\x3a\xb5\xa1\x71\xda\xd7\x79\xa9\xf5\x10\x66\x78\x21\xc6\x84\xc1\x96\xf8\xda\x7e\x8f\x32\x30\xac\xba\xcf\xe5\x28\x3f\xb8\x11\x84\x85\xf8\xbf\x2e\x31\x4a\x77\xc0\xdf\xc8\x6b\x03\x2a\x67\x41\x1d\x11\xc9\x69\xe6\x86\x4b\xb9\x67\xeb\x2f\x22\xf6\x55\x1e\x21\x3f\xc5\x0a\xd2\xc0\xc1\x04\x2c\x4a\xbc\x10\x0e\x29\x31\x45\x43\x6e\x4c\x25\xd3\x71\xd6\xaa\x8a\xff\x02\x74\x07\x85\x12\xd3\x80\x85\x9c\x0e\x59\x03\x3f\x4e\x25\x5b\x70\x22\xce\x32\x23\xd7\x8c\x6d\x4a\xb4\xa4\xfe\x55\x05\x5e\x27\xe7\x08\x60\xb3\x53\x69\x1b\x52\xda\x3c\xcc\xba\xfa\x10\xfc\xe9\x5e\xf2\xb7\xfb\xb3\x83\x9d\x32\xc7\x45\x9c\x89\xfa\x79\x8f\xe7\xda\xdb\x73\x8f\xbf\xfc\x78\xae\x3d\x69\x30\x29\x65\x86\xec\xec\x7b\x7f\xb1\xfe\x7e\x30\xb1\x8e\x43\xab\xc3\x83\xc7\x92\x9b\x88\x4b\x0a\x62\xaf\x63\xeb\xdf\x5e\xfc\xe1\x8e\xa6\x19\xa3\xc2\xe5\xe3\x56\x57\x93\x1f\x93\xbf\xdf\x6b\xe6\xa2\x4e\x87\xcc\x9a\x0a\xb7\xb7\xe7\x1e\x9f\xb7\x66\x89\xa3\xd4\x61\x16\xaf\xb9\x79\xc3\x2f\xee\x9d\x75\x2f\x02\x64\x2f\xf4\x83\x4b\x11\x82\x82\xa1\x6c\x26\x69\xa7\x2b\xcf\x01\xbe\x18\xd4\x4a\xe7\x74\x04\xc0\x59\x18\x55\x55\xb3\x31\x25\x2c\xf0\x42\x40\x43\xdf\x0c\xf7\x50\xca\x50\x43\xdb\x6a\x26\xa5\x11\xcb\xc4\x33\xe9\x14\x05\x8a\x09\x09\x66\xd0\x0a\x29\x65\x05\xb3\x4e\x32\x81\xcd\x7c\xea\xda\x7d\xa7\x76\xef\xae\x9d\xd0\x14\x0f\x15\x3b\x8a\x20\x63\x67\xd8\xd1\x53\x63\x11\xbd\xd3\xe6\x34\x5a\x01\x30\xd7\x38\xc2\x31\x31\xa3\xc3\x2c\x97\xfd\x53\x6a\xed\xf8\xac\x45\x67\xce\xea\xca\x7e\x30\x21\x3c\x64\xfd\xa4\x81\x8e\x62\x63\xa3\x83\x35\x60\x3c\x60\xa3\x89\x63\x75\xf6\x11\x65\xc0\xb2\x8c\x8c\x3f\x14\x83\x8e\x06\xab\xd4\x52\xb4\x0f\x2a\x9a\x06\x65\x9c\xe9\x86\x31\x6d\x57\x8c\x6b\xe0\x26\x0e\x36\x27\x8b\x80\xe3\x60\xcd\xeb\x2b\x2a\xd6\x58\x1c\x25\xce\x62\x0c\xec\x3d\x43\x1d\xd1\xea\x72\xd6\xc5\xcf\xb3\x4b\x22\x87\x59\x80\xaa\x52\xc6\xe2\x49\x47\x4b\x63\x7e\x2c\x01\xc6\x98\x31\x3e\xdf\xc2\x38\xca\x06\xb3\x7a\x48\x57\x83\xd8\x33\xee\x6a\xd1\x21\xee\x65\x8a\x13\x1e\x44\x55\x68\x04\xc5\x90\xed\x1b\xb4\xf7\x57\x75\xe3\x6f\xf6\x06\x25\x1c\x62\xd5\xfa\x40\x1b\x67\x4c\xc8\x44\x6c\x49\xbb\x3a\x2e\x95\xc0\xc1\x0b\xb2\x06\x3a\x67\xa5\x23\x55\x09\x0f\x89\x97\x55\x0c\x1a\x54\x51\xc6\xb8\x13\xa5\xde\xaa\x2a\x6f\x69\xe2\x0f\xb5\x9a\x0f\x3e\x9e\x8c\xa9\x3e\xb1\x24\xf9\x67\x71\xec\x61\xf2\xd9\x83\x72\x38\xe8\x19\xd0\xe2\x9d\xa0\xcf\x0f\x27\x9f\xfc\x08\x46\xbf\xf2\x18\xd4\xff\x1c\xaf\xbc\x7e\x5d\xe6\xd5\x03\x43\xd4\x08\x0f\x82\xef\xe1\xef\x82\xef\x11\xd6\x30\x21\x9e\x28\x8d\x25\xc8\x5c\x5f\x65\x95\xd7\x57\x55\x09\x7f\xbe\xdc\xe3\x18\x7b\x0f\x39\x7f\xef\x98\x91\x0c\x63\x60\x6d\x78\xdb\x87\x67\xa0\xf8\x61\xf0\x3d\xb8\xeb\xf3\x7c\xeb\xba\xf7\xa7\xfe\xf0\xca\xe8\x4d\x5f\x42\xe0\xcb\x9b\x6e\xfa\x9b\x86\x5f\xc2\x5f\xe4\x11\x45\xe3\x90\x84\x02\xb0\x70\x94\xd1\x20\x92\x52\x36\x3d\x44\x95\x98\x86\xae\xcc\x7f\x16\xe4\x2f\x22\xce\x6b\xb6\x19\x4d\xa4\xf1\x4b\x7b\xb1\x49\x2f\xca\x4c\x47\xd7\xcf\xc9\xba\x28\x83\x43\x7c\xce\x62\x73\x70\xff\x70\x95\x5e\x40\x7e\xab\x8e\x3b\x45\xce\xca\xac\x10\x74\xc0\x6c\x36\xdc\x7d\xc5\xf7\xcc\x65\xa5\x22\xd3\xa9\xef\xc3\x4b\xb8\xc8\xfd\x0b\x79\x50\xc9\x25\x6f\x85\x9e\xb7\x16\xde\x09\x22\x70\x7a\xe8\xff\xde\xfc\x5f\xc9\x07\x76\xbf\x59\x2f\x4a\xa4\x34\xca\x30\x61\x3e\x17\x26\x67\x3e\xbe\xb0\x08\xc6\x31\x73\x49\xa8\xef\xed\xff\x45\x4e\x39\xe9\xdb\x7f\xfc\x92\xb9\x2c\xe6\x60\x3a\x9d\x17\xcc\x5c\x45\xf7\x2b\xd7\xe3\x6d\xdd\xbf\xb9\x44\xee\x24\xa9\x4c\x50\xc7\x1f\xe1\x50\x44\x9b\xcb\x26\xa4\x82\xe9\x3e\xb5\xe8\xe7\x05\x59\x12\x7a\x24\x11\x85\x0b\xa6\x1f\x97\xbb\x94\xd0\x56\xdb\xbe\xcf\xa3\xcd\x6f\x93\xcf\xee\x3d\x4e\xde\xb8\x52\x00\xdd\xf5\x06\x8b\x55\x18\xf1\xde\x86\x25\xcf\xdf\x30\x7e\xfc\x0d\xcf\x2f\x99\xff\x64\xdb\xf5\xc5\x36\x5b\x39\xc9\x7a\x94\xd2\x58\x60\xc7\x72\x10\x6f\xbb\x17\x7c\x6f\xe7\x2f\xf4\x18\xef\x9d\xa3\x46\x68\x8c\x8f\xbc\x46\x3e\x7b\x7b\xf3\xad\xbb\x0c\x6e\xdd\x0d\x7a\x6c\x98\xbb\x64\xfc\x0d\xcf\xbf\xf3\xfc\x0d\xe3\x87\x0d\xba\x21\x10\x2b\x55\x3c\xd0\x59\x6e\xb3\x15\x6f\x5f\xb8\x72\xf3\xdb\x77\x91\x5e\x6b\xbe\x8e\x1e\xfb\xb5\x3e\xfb\x15\xca\xf5\x6f\xc6\x56\x3a\x0e\xb7\x56\xc3\x25\xbb\xc9\x76\x90\x6e\x6d\x64\x4d\x87\xe0\x8b\x1e\x81\x5b\x2f\x53\x1c\x72\x68\xd1\x23\x7f\xec\x1f\x89\x3c\xfd\x35\xdd\x60\xcb\xc5\x1c\xff\x32\x97\x43\xbb\x11\xe2\x0a\xd6\x67\x54\x4a\x66\xd2\x29\x26\x19\xd3\xd8\xc6\x9d\x8c\x43\x0e\x30\x85\x59\x5d\xff\x18\x31\x5b\x32\x5d\xcd\xc6\xaa\xa1\x87\xf6\x29\x11\xd7\x66\x6f\x66\x2c\xf0\x4e\xd1\x21\x4b\x89\xa0\x2a\x8b\xc4\x64\xac\x1a\x7f\x73\x0c\xfa\x5c\x7e\x7f\xe5\xc9\xaa\xca\xc7\x2a\x5d\x9e\x50\x65\x83\x35\x08\x60\x8a\xe6\x67\x2b\x26\x80\xa8\x35\x1b\x2f\x75\xbb\x6a\x4e\x55\x57\x1c\x2b\x97\xdd\xc5\x65\x69\x4b\x10\x54\x19\xa5\x33\xeb\x2d\x4d\xd5\x11\x97\xab\xfa\x54\x75\xf9\xc3\xe5\x6e\x77\xa8\xa2\xce\x12\x06\x30\x79\xf0\x73\x6e\x13\x40\xd8\x3e\x3e\xe1\x76\x57\x3e\x56\x59\x71\xbc\xc2\xed\x0e\x57\x35\x58\xc2\x10\xb2\x36\xd5\x44\x5c\x39\x41\x28\x73\x17\x07\x58\x83\xc1\xb9\x01\xf6\x38\x0d\x2c\x6b\x70\x92\x9b\x6e\x96\x0c\x3c\xf8\x8b\x3d\x95\x82\x50\xee\x0a\x04\x38\x83\x41\xde\x58\xcf\x54\x31\xd5\xde\x78\x28\xe6\xe2\x0d\xac\x8f\x86\x55\x7a\x02\x5e\xcc\x1b\x9c\xfb\x48\xa7\xd3\xc8\x30\x46\x27\x64\xf7\x39\x8d\x8c\xac\x14\x02\x7d\xc0\x19\xe4\x1b\xba\xc7\x6f\x70\x1a\x04\xec\x0f\x78\x2a\x29\xc6\x90\xeb\x62\x8e\x25\x5c\x0e\x55\x16\xf0\x23\xe8\xf6\x93\x3e\x03\xed\x70\xaf\x4b\x89\xd1\x3e\x2a\x93\xce\xa4\xcb\x20\x2e\xb1\x24\xea\x8a\xb3\x1e\x9e\x89\xb8\x57\xb8\x23\xdf\x09\x7b\x56\x78\xc2\xb7\xcd\xdf\x3a\x28\x3b\x6d\xda\xa6\x95\x10\x87\x5f\xb9\x23\xdc\xe0\x11\xfe\x2c\xf0\x6e\x63\xaa\x2b\xe7\x8e\x44\xdc\xec\xcb\x5d\x2d\xea\x19\xfe\x52\x54\xd3\xb0\x69\xdd\xcd\x47\x36\xae\x2f\x8b\x46\xe8\x3c\x42\xad\x53\xa8\x1f\xef\x48\x0d\x6a\x45\x83\xd1\x30\x84\xa2\xce\x60\x2a\xfa\x35\x4b\xe1\x60\x4a\x74\x86\x53\xea\x99\xb9\x3c\xec\xf2\xb5\x32\x67\x98\xd2\x54\x42\x07\x39\x84\x29\xbd\x56\x01\xd7\xed\x50\xf7\xa1\x73\xe7\x78\x94\x2f\x39\xd7\xe7\xc9\xe4\xfa\xdc\x38\x7b\xee\x5c\xf7\xa1\x5c\x2e\x97\xeb\x07\x22\xa7\x40\x2e\x97\xc3\x28\x97\xeb\x46\xb9\x1c\x7b\x49\x08\x41\xfd\xaf\x0a\xd1\x34\xfd\x76\x81\x9b\x1e\x41\x5c\xb2\xf2\x25\x6a\x19\x46\xd5\x7a\x6a\x55\xfb\xd1\xa8\x5a\x39\x4b\x24\xab\x2a\x9d\x38\xc9\x21\x70\x69\xb6\x73\xf7\x73\xcf\x91\x7f\x3e\x87\xc9\x5d\xb3\xb6\xee\x7e\xee\xb9\xdd\x5b\x67\xc1\x12\xfc\x1c\x18\xa8\x93\xdc\x85\x31\x2c\x99\x85\x91\x1a\xe5\xb9\xdd\x45\xd2\x93\x53\xd4\xa0\x29\x4f\x4a\x45\xda\x6d\x53\x9e\x94\x5c\xd2\x93\x53\x2e\x69\xab\x94\x17\x3f\xa2\xed\x81\x4d\x27\x63\x19\x29\xa1\x2d\x25\x3b\x1d\x74\x83\x33\x25\xc7\xcb\xd0\x0d\xb1\xf1\xaf\x73\xf5\x5f\x3b\x6d\x52\xf3\x5f\x31\xfe\x6b\xf3\xa4\x69\xd7\x5e\xfb\xd8\x56\xfc\xd7\x96\x89\xd3\xae\xbd\x76\xda\xc4\x96\xbf\xe2\xad\x8f\xc1\xb5\xfd\x87\x4a\xf9\xc7\xb6\x36\x6c\xb4\x9a\xad\x1b\x1b\xb6\x3e\x76\xed\xb5\xd3\x04\xeb\xc6\xfa\x6b\x1f\xbb\xb6\x7e\xa3\x55\x98\x76\x2d\x73\xae\xff\xb8\x49\xe8\x9d\x3b\xda\x50\x0d\x6a\x41\xed\x68\x1a\x5a\x80\xd6\x22\x84\xe8\xb2\x2f\x5d\xe1\xa5\x8a\x89\x4c\x1a\x64\x41\x96\x1c\x16\x8a\x80\xd0\x37\x91\x4b\xc4\x65\x6a\x28\x2b\xd2\xc5\xe3\x82\xd5\xac\xe4\x90\xf9\xfe\x57\x69\xad\xee\x52\xf9\x19\x2b\x98\xae\x50\xad\xba\x86\xed\x92\xd4\xa0\xd1\x1c\x78\xa8\x63\x80\x7b\xc5\x91\x4a\x83\xc3\x6d\x32\x96\xdb\x43\xdb\x27\xb9\x99\x67\xaa\xff\x3e\x44\x14\xb3\xd3\x57\x3e\x4f\xba\xc8\xaf\x49\xd7\xf3\x2b\x29\x9c\xea\x53\xdf\xcd\x8a\x29\x71\x48\x97\xa1\xc8\x64\x98\xa9\xd7\x1b\x3c\x86\x19\x86\x8f\x8c\x2e\xe3\x0c\x83\x41\xef\xd5\xcf\xd4\x97\xd8\xcd\x14\xf8\xa4\xc3\x7c\xc2\xee\xb3\xdb\x7d\xf6\x3b\x67\xaa\x51\x0d\x86\x19\x06\x8f\x41\xcf\xdc\x13\x77\x18\x2a\x8f\xac\x70\x0f\x30\x70\xa5\x93\xb6\x87\x8c\xf0\x83\xea\xbf\x0d\x11\x53\x62\xf6\xbb\x4f\x7d\xa7\xe7\x1d\x10\x00\xee\xf9\x95\xd3\xb3\xa2\x38\x04\x2a\x0b\x37\xea\x67\xea\xbd\x7f\xa6\xbf\x7a\xea\xf3\x1c\x7d\xf6\xa1\xc2\xab\xec\xf6\xa1\x3d\xef\xd7\x1b\x3c\x05\x5c\x02\xb5\x6c\x59\xe4\x50\xbf\x3c\x44\x39\x26\x88\x2f\x5b\x02\x82\x74\x33\x08\x31\x51\x56\x62\x32\x17\xcd\xf0\x42\x46\x14\x62\x4e\x87\x9c\xe1\x44\x41\x8a\x67\x62\x62\x14\xcf\x83\x62\x28\xbe\x92\xdc\xc7\x7d\x7d\x0d\x88\xbd\xf2\x8e\x45\x7f\x69\xbd\xee\xc0\x9f\x53\xe4\x53\xf2\x69\xea\xcf\x07\xf6\xb4\xfc\x65\xd1\x1d\x01\x68\xdb\x77\xf5\xba\x7f\xae\xbb\x7a\x1f\xb4\xe1\x77\xde\x79\x87\x3c\xc6\xe6\xbe\x61\x82\xdb\x35\xfc\x4c\x17\x33\xfd\x1c\x0c\x2e\x7a\xbb\x7d\xcb\x03\x0f\x6c\x69\x7f\xbb\x88\x3c\x7f\x6e\x3a\xd3\x75\x66\x57\x29\xf9\x60\x68\x2c\x36\x14\xca\x4b\x11\xe5\xae\x2b\xf0\x43\xf7\xec\x29\x18\x41\x59\x43\x36\xa1\xeb\xd1\xf7\xd0\xe3\xe8\xb4\x2a\x1d\x7a\x98\xab\x0b\x54\xee\x97\x5d\xc3\x7f\x08\x8f\xf6\x18\x35\x85\xe1\xff\xe7\x93\x54\x59\x94\xe4\x58\x0a\xec\xd0\xc2\x46\x4a\xd8\x00\x6b\xbb\x2c\x8a\xad\x97\x38\x14\x34\x96\x48\x8d\x2a\xb2\xcf\x89\xb3\xdf\xe8\x9d\x7f\xd9\xa7\x60\xac\x78\xf1\xc5\xff\xcd\x5d\x90\xcb\x13\xb2\x83\xec\xc8\x13\x5b\x62\xdc\x4d\x4f\x80\x09\x5a\xa0\xe8\xc9\x9b\xc6\x25\x6c\x7d\x71\x14\x2f\xc9\x79\x95\x73\x7d\x3c\xa2\x7d\xec\xa2\x64\xcd\x37\xf9\xee\x57\xbc\xdb\xb7\x7b\x95\xfc\xff\xe2\x16\xb8\xc1\x64\x58\x82\x61\xa1\xc1\x64\x4b\xb6\x8f\x1a\xdd\x10\x8d\x36\x8c\x1e\xd5\x9e\x24\x53\xfb\x62\x4c\xda\xee\x55\x14\xef\xf6\x5e\xbd\x5f\x01\x17\xc1\x41\xad\x77\xea\x0b\x38\x60\xbd\x72\x49\x4c\x27\x82\x54\xd1\xd7\xe3\x41\x55\x09\x71\x19\x7a\xa1\xdd\xb8\x5e\x17\xee\x54\x3c\x8a\x87\x20\x8f\x72\x5e\x70\xe1\xdf\x5f\x44\x2c\xd2\x2e\x3d\x0a\x1c\x75\x09\xdd\x67\xc9\x21\xbb\x19\x4a\xcc\x76\x7c\xa8\xc7\xc5\x76\xe6\x91\x47\xc9\xd3\xae\x02\x23\x66\xa9\x9c\xcf\xe2\xce\xee\x1c\x29\x74\x0a\x8a\x87\x41\x32\x64\xce\xf5\x91\x9e\x6b\xe3\x5c\x9a\x66\xbf\x3a\xe2\x74\x08\x20\x0b\x3c\x1b\x83\x70\x0a\x14\x7b\x2b\xc8\x90\x8e\x53\x4f\x48\xc7\xf9\x5f\x46\xa3\x64\xe5\x81\x43\x0f\x92\xc6\x53\xe4\xc0\x0f\x61\xd9\x96\x9a\x07\x0f\x1d\x80\x5b\x94\x65\x23\xa3\x64\xd5\x17\x70\xab\xb2\x8c\x6d\x54\x96\x2a\x64\xd5\x81\x43\x0f\xd6\x6c\xa1\x51\x4e\xc1\x2b\x6a\x9c\x5b\xa3\x23\x97\x47\xc9\xca\x2f\xe0\x96\x28\xd5\xfd\xbb\x2f\x16\xf1\xff\x4d\x79\xfb\x9c\xa8\x81\xb2\x12\xf5\x47\x41\xf8\x06\xae\xcb\x00\x17\x4f\x27\xd2\x14\xde\x33\x2d\xc7\x03\xb8\x85\xcb\xf0\x82\x5d\xdb\x7d\x97\x61\xa8\xda\xbf\xc0\x97\x20\x52\xf2\x85\x00\xc8\x85\x3e\xc0\x69\xcb\xa4\x25\x66\xe9\xb6\xc7\xb7\x6d\x7b\x7c\x1b\xfc\x73\xeb\x8c\xe9\xdb\xb6\x4d\x9f\xb1\xf5\xd3\xec\xd8\xae\xa3\x13\x1b\x2b\x66\x0e\x9b\x99\x98\xee\x9b\x8c\x87\x78\x79\xd6\x13\x16\x56\x72\xad\xf2\x10\x65\x58\x62\x44\xf3\xc8\x9f\x6c\xea\x9a\xb4\x7c\xd0\xba\x25\x63\xa6\xb0\xa0\x0b\x0a\xc0\x4e\x1d\xbb\x64\xdd\xc0\xa5\x13\xbb\x36\xb9\xcb\x63\xac\x85\x99\x33\x98\xfd\x7c\xf0\x1c\x67\xac\x9c\xf1\x4d\xdc\xb0\x61\xe2\xa4\xf5\xeb\x27\x15\xce\xe4\x2b\x7c\x70\xea\x88\x21\xb3\xf2\x73\xe5\x90\x64\x11\x80\x05\x1f\xcf\xb8\x3d\x33\x59\x06\x80\xe1\x8d\x56\xb9\xd8\x75\xc7\x62\xf2\x9b\x27\x57\x87\x4b\x6a\x12\xab\xa1\x0d\xb0\x0e\xc8\x89\x35\xf1\x9a\x92\xc8\x9a\x27\xc1\xbb\xf8\x8e\x68\xd2\x8b\x0d\x0c\x7e\x6a\xf8\xa2\x45\xc3\xf3\x23\x2d\xde\xa4\x5a\x66\x0b\x2e\xe6\xf8\x7b\x0b\x7a\x5a\x0b\x72\xab\x35\x8b\xd2\x89\xd9\xc4\x8c\x2d\x68\x0b\x3a\x33\x60\x83\xa0\x10\x4e\x05\x6d\x22\x93\xbb\x15\x17\xdf\x7a\x6b\xbe\x6b\x0a\xb4\x9d\x65\x7c\x64\x0c\x79\xf6\xec\x59\xb2\xe6\x4a\x76\x0c\x19\x03\x8f\xab\x47\x5e\x47\x18\x6f\xd7\x7f\x9f\x3d\xcb\x1e\xeb\x36\x92\x31\x67\xcf\xb2\xd7\x41\x50\xab\xc3\xd3\x2f\x02\x77\x8c\xcb\x23\x09\x55\xa0\x56\x34\x06\x2d\x54\x25\x15\x56\x8b\x9a\x0e\xa2\xb4\x59\x30\x05\xf0\x8c\xf1\x16\x60\xe9\xbe\x46\xa5\x05\xe4\xb8\x4c\xb7\xbe\x81\xda\x01\xc6\x14\x86\x82\x73\x16\x78\x1e\x40\xfd\x36\xa0\x50\x58\x4f\x59\xb2\x73\x92\xc0\x73\xbc\x90\xe1\x35\xb4\x55\x6a\x52\x13\x00\x99\xe1\x80\x2b\x8a\xa5\x2f\x86\x4d\x2c\x70\x6c\xd3\x9d\xd0\x68\xa9\x75\xbb\xbc\x07\x98\xda\x8d\xe4\x8f\xb6\xb0\x58\xc4\xe9\xec\xe5\x61\xd3\xf3\xc3\x2a\x27\xc9\x6e\xa6\x5e\x78\x38\x11\xf5\x98\x8f\xd5\x98\x39\x5b\x78\x00\xac\x3f\x33\x46\xe7\xcb\xcf\xe0\x1a\x1b\xea\xc8\x75\x3a\x6f\x19\x8c\x6e\x28\xd5\x33\x0a\x3e\xc8\xf8\x2d\xe4\x27\x83\x5d\x20\x57\x9b\x03\x01\x18\x79\x6d\x5c\xef\x8b\x0e\x38\xc0\x9f\xdd\x46\x3e\x32\x95\xe8\xf4\x73\xca\x2d\xce\x22\xb3\x61\xe4\x13\x6d\xa2\x51\x6f\x50\x3e\xcb\x58\x62\xd3\x70\xc8\x1d\x6f\xff\xe1\x10\x3c\xda\x6f\x0f\xe9\x2b\xc8\xe9\xf4\x07\x0e\xb3\xd3\x00\xce\xd1\xce\xb8\xb3\xc2\x06\xb1\x41\x5e\x41\xc2\xe3\x17\x39\x6c\xd3\xf0\x94\xb0\xb7\x62\xb6\xc5\x10\xb6\xe7\x5f\x7a\x2d\xe6\x30\xb4\x5b\x74\x98\x77\x48\x35\xa5\xb0\xf0\x91\x41\xbc\x68\x93\x3f\xae\xa7\xfb\xfb\x35\x3d\x4e\xee\x92\xbd\x0f\x5e\x14\x46\x95\x94\xb3\x26\x68\x0b\xd2\x51\x9e\x8d\xc2\x3c\xa6\x2e\x39\xd4\x31\x2c\x5d\x24\x0c\xda\x1c\xc2\x25\x90\x0e\xc1\x14\x8b\x48\x0e\x72\xb9\x3c\xdd\xa9\xc1\x21\x82\x70\xbf\xa3\x1b\xe5\x94\xa4\xc2\xe7\x2e\x20\x23\x77\xc6\xa3\xe4\x56\x8d\x3b\x9f\x1b\xb7\x0a\x90\x7a\xd3\x45\x94\xcb\x31\x88\xde\x87\x7a\xf5\xf1\xf4\xe8\xce\x32\x9d\x1a\x90\x30\x9b\xed\xea\x0c\x16\x2b\xec\x87\x5d\xd4\x56\x95\xcd\xe6\x10\x8b\xca\x91\x49\xf8\x80\xe2\x2d\x14\xa3\x7a\x34\x1e\xa1\x48\xa1\xd5\x3a\x1d\x99\x50\x35\x84\x0a\xbb\x68\x32\x2d\x10\xd7\xe0\xe7\x29\xfe\x55\x38\x64\x66\x34\xff\x74\xa4\x84\xa5\xfe\x62\x28\xa6\x44\x4a\xd8\x02\x2e\x58\x9f\x3f\xeb\x28\xdd\x7f\xed\x84\x6b\x97\xe0\xf6\x6d\x3b\xb6\x8d\x62\xec\x77\x1a\xc6\xfc\xe1\x77\x7f\x18\x63\xb8\x13\x5d\x34\x16\xed\xfd\xfd\x5d\x93\x1f\xd9\xb6\xa0\x01\xdb\x0e\x18\x76\xc1\x46\xc8\xc1\xc6\x5d\x86\x03\xc4\x68\x7c\x82\x6c\x23\x75\x64\xdb\x13\x46\xa3\xed\x4e\xc3\x73\x98\xc5\x1e\xcc\x3e\x67\xb8\xd3\x74\x9b\xa3\xa4\xb2\xb2\xc4\xb1\x25\x1e\x8f\xc7\x0f\xd8\x4d\x86\xd1\xd3\xa6\x8d\x36\x98\xec\x07\xc0\xaa\x5b\x7a\x45\x65\x4b\x4b\xe5\x01\x7b\x91\x61\xd7\xfe\xfd\xbb\x0c\x45\xf6\x03\x60\xd1\xdf\xf7\xc0\x03\xf7\xe9\xd5\x88\xcf\xbe\xf9\xe6\xb3\x6a\x44\x84\x4c\xda\xbe\x19\xba\x8e\xd9\x5f\x2b\xd5\x8a\x46\xa1\x89\xe8\x0a\xb4\x1c\x5d\x83\x10\x7b\x19\x27\x1c\xfa\x5f\x9e\xc1\x56\x40\x11\x91\xe2\xe9\xfe\x7e\xfd\xb1\xee\xac\xfd\x6c\xb0\xfb\x8f\x71\x21\x37\x6a\xd9\xa8\x51\xcb\xe0\x0c\x3d\x11\xed\xc4\x8c\xea\x7f\xf5\x8d\x9e\xcc\xa8\xf6\x25\xed\xed\x4b\xda\x49\xcf\xfd\x3d\xdb\xf1\x38\xe4\x51\xa8\xd7\x99\xf6\xe4\x05\xaa\x39\xe7\x72\xc9\xf6\xd4\x32\xed\x6e\xf5\x0f\xce\xd0\x13\x39\xd3\xff\xea\x1b\x3d\xf3\x39\xe8\xd3\xde\xe3\x8b\x5a\x50\x27\x85\xa5\xd6\xe6\x1b\xe4\x30\xf5\x63\xd0\x05\xa4\xc6\xe3\xd5\x5f\x84\x91\xfe\x22\xe2\xfe\xcc\x23\x14\x43\x43\xe9\x3a\x08\x0e\x86\x43\xbc\x05\x18\xc1\x0c\x74\x13\x54\x0b\x93\x49\x37\x02\xa5\xbf\xa1\x02\x44\x92\xa5\x98\x46\xe9\xe4\x08\xc7\x42\x02\xcf\xd0\x22\xca\xf4\x58\xa4\x07\x80\xfb\xb3\x5d\x9a\x4a\x42\x95\x6e\x85\x63\x33\x98\x8b\xb9\xbb\x9c\x2e\x46\x1f\xb6\x47\xf4\x9c\xb2\x73\xf7\xe2\x47\x57\x2d\x4a\xb9\x8c\xc0\xb0\xec\xd8\xbb\xab\xc7\x7d\xb2\x7a\xdf\x8c\x19\x0b\xec\x78\x22\x18\xc9\x59\xc9\xcf\xfc\x9e\xab\xf2\xe3\x29\xa1\x6d\x03\x96\xaf\x66\x36\x4f\xda\x48\x86\x04\x3d\x22\x39\x62\xf1\x04\x03\xce\xba\x73\xab\x7e\x55\x17\xc5\x72\x6c\xe9\xdc\x3b\xdb\x5a\x79\x06\x98\xc6\x27\x96\x6f\xff\x7c\x42\x29\x06\xe8\xd0\xe5\xff\x69\x08\x4a\xdc\x8b\x7e\xc5\x23\x96\x7d\x5f\x95\xe1\xb1\x42\x5f\x6b\x40\x76\xe4\x46\xa5\xea\xac\x4a\x46\x62\x10\x33\x4a\x3a\x01\xbc\x80\x99\x74\xc6\x2e\xda\x55\x1f\x3d\x58\x19\x0c\x34\x40\xcd\x81\x1d\x4e\x05\x45\x30\x74\x90\x41\xdb\xfe\x52\x64\x77\x30\xdf\xaf\x6d\x1f\x7b\xb2\x94\xfd\xf9\xa7\xff\x03\x15\x61\xd2\x5c\x46\x10\xbb\x64\xe1\x60\xf2\x91\x7b\x3c\x2b\x5a\x61\xb1\x33\xcc\xad\x65\x3a\x3c\xe4\x76\xb2\x08\x4e\x41\xd2\x1a\x26\x07\x5f\x7d\x19\xd2\xe0\xfb\xf8\x33\x72\x1c\xbe\x43\x4e\xe7\x45\xb2\x1a\xdf\xcd\xc4\xf2\x9d\x64\x1a\xd9\x82\x07\x60\x23\x54\x81\xd7\xea\xf6\x38\xc8\x62\x4d\x37\xa2\xd7\xf6\x8d\x58\x90\x0b\xf9\x50\x8b\xc6\x43\x0f\xe1\x74\x2b\xb4\x40\x46\xe6\x18\x25\x1c\x14\xd8\x28\xa5\x05\x12\x13\xc0\x24\xc4\x30\x47\x77\x8a\xf0\x72\x61\x3d\xb5\x06\x04\x29\x21\xa5\x33\xc9\x98\xb6\x88\x9f\x2e\x86\x68\x38\x24\x30\x89\x4c\x42\x92\x13\x97\xd7\x62\xe1\xe9\x1b\xcc\x49\x86\x2d\x62\x8a\x2e\xec\x68\x30\x66\xc9\xdf\x31\x64\xc0\xf2\x3d\x9b\x67\xfd\xf0\x3d\x8f\x02\x17\x3d\xb2\xe4\x08\xbe\x6b\xe8\xb8\x6b\xee\x05\xd8\x3f\x40\x69\x8a\x4d\x69\x93\xe4\x91\x2b\x77\xdc\x87\x6f\xac\xad\xac\xad\x6e\x4b\x5b\xa0\x33\x37\x50\xfa\xe7\x89\xf0\x7b\x9c\xe5\x9e\x5c\x7b\xf2\x2b\x5a\x9d\x74\x28\xd9\x8e\x43\xd1\x9b\xf5\x86\x12\x43\x66\x23\xc4\xd2\xa6\xb1\xb3\xc8\xc8\xe9\x6d\x1b\xfc\x04\xe3\xed\xf9\xad\x78\x87\xd5\xbb\x7e\xce\xa2\xe1\x72\xc4\x19\x28\x09\x1a\x6f\x09\xc1\xc6\x05\xcb\x86\xb8\x43\x4e\x29\x08\x6e\xdd\xc1\x74\xfe\xc9\x0e\x69\x24\xf3\x72\x17\x7d\x18\x47\xeb\xa6\xab\xb7\x6c\x6c\xc8\x8d\x2a\x50\x02\x65\xd1\x30\x34\x0d\x5d\x81\x16\xa3\xd5\x68\x33\xba\x17\x3d\x83\x5e\x45\xbf\x45\xe7\xc1\x08\x6e\xa8\x82\x26\x18\x09\xd3\xe0\x1a\xd8\x87\x10\x28\x3d\xe4\x1c\x89\x78\x46\xc1\xf6\x0c\x8f\xed\x72\xda\x8e\x63\x92\x1d\x0b\x74\x4d\x3d\x45\xd7\xd5\x20\x91\x0a\x3b\x13\xce\x46\x9c\x0a\x0b\xb1\xb0\x33\x91\x92\x13\x19\xc6\x59\x01\xa9\x46\x70\x26\x62\xf1\x44\x26\x9d\xac\x81\x50\x05\x38\x13\xa9\x44\x24\xd9\xab\xd4\x8f\xc4\xe5\x30\xab\xc9\x62\x3e\x1c\x4a\x17\x5c\x21\x39\x14\x0b\x29\x54\x9b\x92\xcc\xa4\x6b\xe3\x29\x6a\xda\x5a\x2b\x3b\x25\xa7\xe0\x83\xb0\xc0\x87\xf9\x68\x22\x95\x54\x62\x21\x41\x63\x3f\x76\x26\x52\xc9\x44\xdc\x0f\xf4\xe4\x94\x13\xcd\x10\x76\xf6\x4c\xb3\x5b\x21\x59\x03\x8a\x1a\x20\x67\xb4\x95\x5f\xba\x8e\x1e\x0e\xc5\xd4\xf4\xa7\xe9\x22\x6f\xb3\x9a\xfc\x54\xd8\xa9\x66\xc1\x91\x88\x67\x7a\x76\x79\xa9\x61\x31\xf5\x4d\x89\xbe\xb7\xc8\x19\x45\x2a\x04\xc6\xb4\x2d\x45\xf4\xb9\x97\xbf\xf4\x92\x1b\x0a\x81\x3d\x61\x42\x28\xcc\x0b\x3c\xd5\xcb\x39\xe8\xe2\x64\x46\x9d\x18\x67\xd2\xa9\x64\x4c\x89\xa9\xe5\xa4\x7c\x0d\xdf\x67\x6e\xee\xee\xc5\xcf\xef\x1d\x3f\x7e\xef\xe9\x25\x77\xe7\x76\xce\x99\xfb\xe0\xd6\x59\x33\xb7\x6d\x9b\x39\x6b\xf6\x8e\xb9\x73\x76\xe6\xee\x5e\x72\x5a\x0d\x7b\x7e\xf1\xdd\x78\xa1\x60\x13\x18\x3f\xcb\xf1\x3c\xc7\xf0\x2c\xa7\xc3\x0c\x83\x19\x96\xd2\xc0\x02\x06\x9e\x81\x2e\x49\x12\xed\x92\x64\x17\xe1\x70\x13\xd7\x06\x7b\xa4\x88\x2c\x89\xf6\x0b\x72\x44\x96\x23\x7b\x30\x06\x6a\x02\x8b\x31\x66\x80\xc5\xf4\x26\x0c\x17\x4e\x07\xfc\xee\x12\x8b\xb9\xd8\x65\x09\x04\x82\x01\x7f\x30\x70\xc4\xef\xb7\x79\xfc\x8a\xe2\xf7\x59\x1e\xaf\x31\xcb\x6e\xd9\x51\x24\x05\x3d\x81\x1a\x93\xab\xd8\xed\x30\xb9\x83\xfe\xe0\x0e\x9d\xc9\x24\x0e\x18\x10\xf0\xf9\x6a\x9c\x0b\xfd\x4a\x2c\x10\x94\xcc\x76\x67\x48\x58\x18\xd9\x29\x17\x05\x02\x7e\x83\x4e\xaf\xb7\xc7\x82\x7e\xd1\x6c\xb7\xd9\x65\xd9\x2e\x5a\xcd\x0e\x5f\xf0\xed\x40\xc0\xe2\xf5\xc7\x62\x7e\x9f\x79\xb7\x5c\xe4\xf7\xab\xd1\x74\xdb\xfc\x7e\x4b\x5d\x2c\xe6\xf3\x9b\xc7\x60\x35\x69\xea\x88\x14\xb3\x0c\x8b\xd5\x2b\x9a\x42\x35\xd5\x8b\xfb\x37\x20\xf6\x91\xc9\xe3\xf7\x9e\x5e\xac\x16\xcb\xe4\xe5\xd0\x0c\x4d\x13\xaf\x20\x3f\x27\xef\x5d\x71\x05\x54\x42\xd5\x35\xcb\xc9\x8f\xc8\x8f\x96\xa9\x31\x96\x2c\x3e\xbd\x77\x7c\xf7\x59\x86\xb1\x39\x4c\x26\x87\xc5\x64\x22\xf5\x98\x31\x70\xa0\x96\x82\x89\xab\x54\x5c\x6e\xbb\xe8\x9a\x5a\x52\xac\x39\xdc\x11\xb7\x7a\xf2\x03\x4b\x53\x81\xb5\xf2\x61\xd5\x44\x60\x9a\x88\xc9\x2e\x3f\xb8\x5c\x0e\xeb\x9e\x51\x91\xc8\x28\xf5\x18\x32\xd8\xea\x28\x6d\x29\x75\xb8\x42\x3c\x66\x0d\x16\xa3\xcb\xec\x72\x04\x55\xa7\xcd\x2c\xdb\x5c\x66\xb7\x20\x35\x7b\xcb\xca\xbc\xcd\xf1\x9b\x4b\x8b\x4b\x62\xa2\x64\x09\x16\x95\xc4\x1c\xd6\x3d\xed\x61\xd6\xc7\x96\xb6\x94\x5a\x5d\x26\x70\x29\xae\x22\x97\x75\x5f\xcf\xa3\x36\xf7\x04\xef\x1b\xb2\x79\x98\xa3\xac\xa9\xcc\xc1\xa8\x5f\x4c\x2d\x11\x4c\x53\xa1\xfe\x53\xbf\x39\xa6\xb6\xd4\xc0\xfe\xb6\xbf\x28\xd0\xf8\xe9\xa9\x2c\x30\x20\x1b\x5d\xf9\x1b\x84\xa6\xa2\xf9\x68\x19\x5a\x8d\xae\x45\x37\xa0\x7b\x28\xcb\x21\x5f\x41\xf1\x5f\xa5\xa8\x83\x3a\xb8\xa4\x52\x01\xb6\x1e\x72\x78\xae\xa0\x43\x4e\xf7\x35\x29\x4a\x14\xaa\x61\x5c\xd3\x56\x45\x75\xc9\x05\x43\x9f\x54\x4f\xa3\x00\x9b\x19\x8a\x30\x17\xec\x1b\x2f\x44\x29\x13\xbd\x98\x51\x5b\x5f\xe1\x80\x04\xb5\xbc\x52\x5f\x97\xfa\x9a\xd6\x10\xea\x23\xfe\x26\x9b\xad\xd9\x17\xe1\xff\x92\x15\x1d\xad\xe7\x27\x2e\x18\x3b\x77\xee\xc8\xaa\xa6\xc0\xc0\x81\x90\x2d\xcb\xf8\x9d\x5e\xa7\xdf\x15\x2a\xab\xaf\x6c\x8a\x54\x47\x75\xa2\x4f\x1a\x20\x97\x57\x0e\x4b\x64\x41\x8a\x96\xd5\xb6\xb6\x56\x57\x28\xa5\xa5\x23\x17\x2f\x1a\x59\xce\xfe\x6b\xe0\x03\xe4\xc7\xe4\x61\xe2\x20\x84\x0f\x7a\x94\xee\x1f\x2c\x3b\xb0\x6c\xd9\x01\xc0\xb7\x0c\x9b\x31\x7d\xd8\xcd\xef\x3c\xb3\x61\xed\xda\x0d\xcf\xc0\x9e\x71\x4b\xdb\x5b\xea\xe6\x0d\xd4\x43\x70\x74\xe6\x2b\x5d\x66\xf4\xe8\x8c\xf0\x55\x66\x34\xfe\x57\x22\xe8\xf9\xc8\x5b\x6c\x4a\x2e\x5c\x33\x72\x36\x79\x42\x49\x4c\x87\xd1\xbf\x2f\xad\x74\x18\xec\x66\xab\xd3\x5b\x19\xcd\x94\x86\xcb\xac\x26\xbe\x48\x72\x78\x2b\x4b\xb3\xcd\x65\xa3\xa3\x03\xe3\x03\x06\x2b\xa3\x1d\x0b\xf7\x2f\xcc\x3f\x8d\x2d\xa5\xd3\xf6\x6f\xbf\x71\x80\x82\x7f\xac\xbe\x74\x99\x0e\xa6\x9c\x3b\x47\x8e\xe9\xeb\x66\xd4\x8d\xac\x27\x4f\xdc\x68\x1d\x53\x93\x24\x4f\xec\xc6\x91\xae\xa2\xba\x31\x63\xea\xd8\xbf\xd7\x8d\x19\xa3\x0e\xc7\xed\xbd\xdf\x0e\x23\x23\x32\x23\x27\xf2\xa1\x30\x52\x50\x03\x1a\x8b\x66\xa2\xb7\xd1\xaf\xd1\x79\xe0\x40\x0f\x11\x68\x85\xf9\x08\x89\x89\x18\x64\x54\x61\xec\x0c\x3b\xa3\x72\x4a\x4e\xaa\xe2\x37\x1e\xd5\x4e\xa0\x9d\xb8\x44\x2c\x6a\x0b\xa7\x84\x70\xcc\x19\x8e\x85\x85\xb0\x98\x10\x6d\x09\x39\x03\x0e\x33\x1b\x52\xc2\xce\x70\x4c\x08\xda\x82\x72\x26\x11\x8f\x3a\xc3\xb6\x84\x53\x7b\x58\xef\x26\x2e\x5b\x22\x93\x90\xa9\xac\x77\x06\x53\x99\xb8\x1f\x82\xa9\x00\x4e\xf7\x78\xda\xc2\xce\x98\xfa\x47\x45\xa1\xda\xf7\xd2\x2b\xa1\x77\x8e\x4b\x03\x42\x42\x2a\xe8\x54\x2a\x40\x3d\x04\xba\x07\x49\x4e\xa4\x12\xf1\x8c\xda\x51\x68\x38\xe9\x19\x35\xd1\x0e\x5e\x08\x80\x1f\xc2\xb4\x6a\xa8\x49\x89\x53\x15\x1d\xf5\x4b\xa6\xab\x19\xea\x29\xc7\x25\xe8\x9f\x4c\x5b\xd8\x06\x5a\x05\x4e\x25\x15\x6d\x7f\x7d\x23\x38\xc3\x21\xa7\x43\x4a\x07\x20\xe3\xe4\x7b\xc2\x78\xaa\x8f\x28\x84\x05\x80\xb1\xf5\x14\x47\x28\x95\x6c\x04\x67\x48\x31\xb3\x14\xfb\x22\x43\x4b\x27\xb5\x61\x7a\x15\x1e\x38\xb2\xed\xc1\x9b\x6f\x86\xe6\x2b\x9e\x2f\x9d\x34\xb1\x0c\x82\xe5\x13\xc6\x57\x90\x2f\xd4\x5f\x38\x33\xbd\xb2\x5b\x1a\x34\xa7\x7e\xce\x2e\xf7\x1e\x77\xdb\xd5\x1d\x57\x2d\x9b\x3c\x1a\xdf\x65\xb4\xf9\x5c\x31\x57\x99\x7e\xeb\xb8\x89\x17\x11\xb0\xe3\x26\xfc\xf4\x4a\xf2\xf1\xd9\xb3\x77\xdd\x7e\x3b\xf7\x9e\x56\xb7\x56\xba\x33\xee\x0f\xc5\xd5\x0e\xec\x37\x18\x40\x96\xb3\x65\x93\xf5\xee\x3a\xf7\x6f\x42\x4f\x3d\xe9\x3e\x25\x9f\x1f\x5a\x7a\xdc\x55\x9b\xbf\xb1\xa2\xe2\x27\xd2\xc3\x63\xb4\x6a\xb8\x31\x11\x38\x99\x91\xc9\x8f\x8b\xeb\xde\x95\x87\x7c\x91\x8e\x93\x07\x61\x6a\x26\xf9\x73\x67\x63\xf1\x09\x9d\x8e\xc5\xb6\xfa\xe2\xa3\x4d\xf9\x2a\x97\xe4\xb6\x0f\x74\x85\x86\x0e\xbc\x67\x40\x03\xf9\x1f\xb7\xd3\x63\x1b\x08\xc0\x15\xc9\xf6\xb6\xec\xdd\xb5\x0d\xd8\xf6\x8b\x5f\xdc\x79\xfb\xed\xe4\x8f\x83\xf0\xbf\x16\x6d\xdd\x1a\x0a\xd5\xc6\x43\xc9\xd2\x1d\x1b\x22\xe1\xda\xda\xf0\x9f\x5d\xd9\x6b\xaf\x0d\xba\xa3\x15\x51\x77\xaa\x74\xfb\xfa\x48\xc3\xd8\xdb\x67\x6d\xde\xe5\xb9\xce\x3d\x6a\xfb\xee\x56\xa1\xdc\x52\x5c\x64\xe3\xbd\x11\xff\xac\x79\x57\x5e\xb1\x86\x99\xb2\x22\x7f\xdd\xd8\xb1\xb5\x99\xf4\x98\xab\xce\x36\x05\x87\x96\xfa\x9b\xe1\x4b\x7f\x93\xb2\xa2\x86\xfc\xf5\xbd\xf7\xde\x7b\xaf\xa9\x09\x2c\xe4\x22\xc0\x33\xcf\xe4\xdf\x73\x04\x1c\x26\x01\xc3\xcc\x19\x33\xc0\x32\x7d\x7a\x77\x1d\x58\xea\x6b\x33\xe9\xfc\xbb\xbf\xcd\x8c\x1d\x9b\xc1\x47\x9a\x9b\xab\xab\x6b\x6a\xae\x00\xf3\x14\xb9\xa8\x08\x70\x73\x73\x43\x03\x6c\xae\xac\xac\xac\x94\x24\x49\x9a\x37\xaf\xb2\xf2\x09\xd8\xa3\xc6\xcc\xcf\x90\x0a\xff\x1a\x1a\xc8\x75\x8d\x8d\xd3\x4d\x8b\xae\x60\x75\x53\x5d\xae\x2e\xb9\x54\xaf\x0f\xf9\xd3\x55\x41\xe7\x15\x60\x09\xc0\x51\x57\xa9\x5e\x1f\x0c\xa4\xf4\x61\x8b\x64\x10\xe6\x83\x05\xfc\xf9\xab\xeb\xc0\x52\x57\x9b\x49\xe3\x87\xc9\x5f\xc1\x92\xbf\x7a\x4a\x83\xdb\x6a\x10\x94\x48\xac\xbc\xde\x6d\xd5\x03\x1f\x35\x2f\x0c\x37\xb8\x4d\x45\xc0\x19\xa3\x01\xd5\xd3\xc1\xf2\x78\x10\xf9\xf2\xcc\x99\xa6\xa6\xdd\x37\x34\x62\x60\x0c\x36\xbf\xa8\x94\xbe\x7f\x11\x01\x3a\x7d\x5a\x6d\x9f\xc6\xde\xf6\x69\x44\x32\x0a\xa3\x06\x34\x11\x5d\x85\x76\xa3\x07\xd0\x09\x74\x0a\xbd\x5e\x60\xa3\x2a\xac\x13\x45\x1d\x7c\x58\x50\x67\x04\xf1\x00\xf4\x5f\x3f\x8a\x52\xd0\x11\x81\xe1\xa5\x46\x88\xb7\x42\x0b\xa6\x5a\x32\x4e\x4c\x53\xef\x7e\xbb\xb7\x79\xa7\xa3\x11\xd4\xe9\x58\x05\x84\x2c\x40\x89\xfc\xa9\x71\x80\xac\x05\x64\xe0\xff\xf9\x49\x0e\xed\x0e\x31\x95\xa4\xf1\x05\x0a\x77\x92\x01\x33\x14\x12\x28\x5d\x2e\x87\xf1\xe7\x89\xa8\x3f\x1c\x8f\xfa\xa2\x8c\xad\xb2\xb2\xc4\x86\x8d\x76\xc9\xe3\x82\xb9\x89\x88\x3f\xa2\xfa\x5e\x38\x3a\xba\xe5\x90\x88\x07\x82\x8e\x6f\x77\x60\x3b\x14\xd9\xad\x12\x33\x65\x3e\xa4\xca\x54\x1f\x33\xe3\x1d\x32\x7c\xe1\xd0\x06\x5f\x93\x9d\x35\x0d\x15\xe1\x65\x1d\x37\xda\x28\x2c\xab\xe4\x6c\xa3\x38\x5d\xac\x0a\x26\x98\x46\x1b\x05\x74\x11\xb6\x8e\x6e\x79\xc0\x41\x1f\x32\xa1\x88\xfd\xfa\x43\x3c\x43\xd5\x87\xf8\x9b\x6c\xea\x43\x3e\x36\x8d\x34\xd2\xa8\x83\x44\x7c\x7e\x04\x57\x1e\x0b\xda\xb0\x51\x2c\x8d\x08\x6b\x2e\x19\x57\xaf\x8f\xd6\x96\xf8\xa2\x89\xe0\xc6\xf2\x00\x2c\x37\xb2\xce\x87\x23\x71\x7a\x7d\x73\x63\x4a\x24\x4b\x78\x83\x78\x95\xce\xc0\xe0\x79\xbf\x06\x8e\x37\x04\x4b\x57\x8c\x68\x6c\x73\x39\x8a\xf4\x56\x70\x1a\xf4\x86\x7b\x0f\x58\xf5\x1c\x5e\xb3\x8b\x5d\xa5\x33\x19\x60\x55\x5d\xe1\x16\xd3\xd5\x5f\xbf\x05\xac\xac\x15\x8e\x83\xd9\x48\x3a\x30\xa7\x17\x41\x0c\x4b\xb0\xdc\x28\xc3\xaf\x2e\xe9\x8a\x91\xa1\x5f\x5f\x6c\x41\x71\x34\x1c\x4d\x45\x33\xd1\x0a\x74\x35\xda\x87\x0e\x6a\xfd\x70\x38\x14\x53\x47\xbf\x5c\x38\x4d\x7b\x61\xda\xef\x16\xba\x5d\xa1\x80\xc8\xad\x8e\x65\x15\xda\xed\x66\xd2\x90\x09\xa7\x2c\x4c\xa2\xb0\x8d\x52\x33\xe8\xe2\x68\x07\x2c\xc4\xc2\xb6\x84\x2d\x9d\x88\x8b\xb4\x07\xa7\xbb\x5c\x63\x05\x34\xc9\x4c\xdf\x04\x9e\x06\xf0\x85\xfb\xe9\xf0\x57\x89\x25\xbe\x86\xc9\xc9\x37\x3b\xc5\xa0\x6c\xf7\xfb\xea\xe1\xa9\xab\xf8\x78\xe2\xfc\x1f\x06\x0d\x89\x94\x28\x0d\x83\xec\x83\x27\x8c\xae\x1e\x30\x70\x70\xac\x78\x80\x7f\x42\xb1\x7d\x78\xc7\xf8\x01\x09\x88\x89\x1d\xdb\xed\xd5\xb6\x96\x4a\x65\x44\x49\x4d\x49\x51\x39\x5c\x6f\x31\x95\xd4\x18\x0c\x3b\x0f\x78\xea\xac\x35\x07\x0e\xe0\xab\xaa\x4a\x87\x65\x53\xba\x5d\x07\x22\x25\x13\x13\xcd\xa4\xb2\x7a\x50\x75\xf5\x20\xe6\xb1\x01\xf1\x39\x1d\x2b\x5b\x33\xcb\x16\x36\x5a\xeb\x87\x55\x38\x64\xee\x2b\x7c\xe9\x2c\x69\xd3\xd0\x68\x58\x7f\x2e\x30\x65\xfe\xe7\x8d\x03\xdd\x26\xc9\xec\x09\xae\x2a\x51\x62\x6d\x0d\x03\x5d\x66\xd9\x5a\xec\xb6\xaf\x2e\x8b\x96\x41\x78\xe5\x1e\xe7\x1a\xdd\xe2\x5f\x4e\x8a\x04\x8c\xeb\x85\xf8\x2b\xee\x7d\x4c\x49\xa0\x8e\x94\x41\xbc\x98\x3c\x0a\xff\xf5\xc9\xe6\xfa\x64\x5d\x4d\xfe\x1a\xf7\x9d\xc6\xba\x81\xf0\x63\xf5\xcd\x35\xe4\x7f\x56\xb7\x66\x77\xad\xc9\x35\x65\x4a\x17\x17\x8b\x62\x8d\x19\x9f\xbc\xe4\xc3\x31\xc8\x7c\x11\x09\x5f\xf2\x88\xb6\xf3\x56\x84\xc0\x2e\xab\x05\xe4\xe0\x43\x4a\x8c\x8b\x27\x69\x5b\x56\x7b\x19\x90\x78\x41\x43\x63\x4b\xb7\x82\x92\x6a\x61\x53\x49\x7b\xa6\x67\xf1\x49\x08\x80\x0c\x69\x49\xe6\xa5\xe6\x3f\xb6\x27\x49\xf6\xc0\x7b\x77\x00\x20\xab\xb5\x71\x72\xc9\x62\x36\xa1\x03\xc3\x57\x8f\x19\xbc\xba\x49\x3a\x30\x3c\x2b\xc6\x27\x4c\x6b\x8e\x7d\xf1\x82\xae\x6e\x5c\x9d\x6e\xcb\x0b\x29\xf8\x9e\xc1\xab\xc3\xc7\xc9\xbd\xaf\x25\xdb\x97\x1d\xb8\x63\xd9\xa3\x25\x93\x1b\xad\xd6\x11\x8b\xf9\xac\xc1\xab\x3f\x7f\x4c\x87\x0d\x1d\x06\xaf\xee\xbb\x25\xa1\xf2\x59\xb7\x1d\xfb\x72\xdf\x5d\xc0\xf9\x44\x47\x69\x5d\x5d\xa9\x43\xb4\x6f\x9f\x0d\xcb\x75\xd8\xa0\xed\x67\xeb\xcb\x87\x84\x14\x34\x06\x21\xb6\x2f\xf1\x09\x3d\x14\xa8\x19\xad\xd0\x9b\xbb\x4c\x50\x61\x32\x76\x90\xff\x1f\x32\xc6\x6a\x59\x19\x91\xff\x17\x73\x65\xf9\x0f\x77\xcf\xbe\x7b\xc6\x00\xb6\xb3\x27\xa3\x77\xe0\x7f\x1c\x69\x5e\xd9\x0c\x83\x27\xfd\xc7\x8c\x3e\x56\xc8\x1c\xfc\x0f\xfe\x6a\xda\xba\xd6\xf9\x2b\x12\x24\x47\xb2\x5a\xc6\xb7\x3f\x07\xd6\x79\xe4\x5e\xf6\x68\xc7\xff\x6b\xc6\x7b\x31\x8e\xb9\x5c\xaf\x9e\x2b\x83\x66\x6a\xdc\x85\x54\x84\xda\x34\xb4\xa7\xff\x74\x0d\xc1\x98\x12\x0b\xf2\x02\xd7\xc3\x2b\xa8\x35\x90\x70\x0f\x07\x44\x46\x5b\xc7\x29\x06\x55\x5e\xa2\x6f\x86\x69\xea\xef\xce\x9f\x83\xce\x01\x82\x81\xfc\xc8\x20\x30\x2b\xed\xe6\x0e\x8d\xc0\x81\x2a\x1c\x21\xd5\x66\x19\x53\x0a\xd9\xd2\x31\x96\x36\x48\x99\xed\x87\x30\x55\xe5\xe4\xe9\xad\xdf\xe2\x66\xfe\xb4\x4e\x8f\xb1\xfe\x8e\xac\xd9\xde\xdd\x3e\x71\xd3\xba\x89\xcc\x33\xf4\x35\x0f\x45\x93\xc9\xe8\x43\xf6\x7e\x58\xc6\x95\xd4\xd2\x11\x81\x06\x39\x84\x34\x48\x17\xc6\xaf\x8e\x9c\x42\xcd\xfd\xad\xa5\x7a\xd4\x6a\xf8\xdb\x6c\x50\xd8\xad\x23\xd6\x6e\xaa\x7f\x8b\xfc\x11\xac\x67\x42\x13\x17\x4f\xa8\xb3\xae\xb7\xee\x1c\x7e\xe3\xc9\xa7\x6f\x1e\x72\xa3\x9e\xdf\xc0\x1b\xba\xff\x93\x8d\x0a\xbc\x7d\x65\x7c\x4c\x85\x04\xd2\x4f\xcf\x80\x55\xef\x2d\x1b\x5e\x75\xa5\xd5\xda\x56\x51\xfb\xf4\xfe\x3b\x5f\x19\x50\xde\x26\xe8\xf5\x4c\xc5\x7f\xb2\x62\xe9\xaf\x87\x37\xa3\xf9\x08\xd1\x3c\x98\xb1\x46\x27\x0a\x9c\xc3\x8c\x85\x90\x26\xd9\x0a\x4b\xbf\x76\x8a\x36\xd9\xaa\x31\x71\xca\x92\xc0\xd0\x0c\xb7\xb0\x29\x2b\x0a\x86\x68\x5e\x55\x19\x29\x15\x6b\x94\x6d\xd0\x0f\xae\x1c\x31\x6f\x2e\x9f\xd3\xba\x79\x7e\xf3\xf2\x79\x1d\x87\x26\xe3\xe4\xc8\x6b\x6e\x1c\xc5\x8b\xc2\xdc\x1a\x1f\x97\x7c\x60\xce\x77\x4f\xee\xfa\xf5\xee\xa9\x7b\x15\x6c\x04\x3d\xb7\x9e\xd3\x71\x78\x23\xe7\x2e\xf1\x35\x4c\x1b\x34\x80\x7c\x9f\x7c\xd4\x63\x09\xff\xd9\x49\xa3\x47\x57\xa6\x03\x6c\x58\xd4\xb5\x9b\xf2\xf8\x51\x7e\x3e\x98\x06\x47\xf1\xf9\x15\x9b\x9b\x57\x1c\x99\xb7\x6a\xf3\xee\x57\x6d\x2b\x8f\xcf\x4f\x60\x48\x05\xe3\x83\xa6\xbd\x78\xe2\x3e\x30\x1c\x1c\x96\x15\xeb\xf8\x22\x23\x67\xcc\xdf\xe3\x72\xc5\x3c\xa0\x8f\x35\xaf\x1f\x03\x11\x98\xd5\x53\x44\xb7\xe8\xb1\xb1\xb6\xa8\xc8\xa4\x9f\x38\x43\x7d\x24\xd4\x81\xef\xed\xcd\x64\x5a\xaf\xdd\x16\x5d\xd7\x0b\xa3\x52\x84\x90\x64\xb5\x00\xd5\xfa\xf3\xa1\x1a\x00\xbe\x02\xb8\x98\x98\x4a\x66\xa0\xa0\xb4\x2f\x86\x4c\x5a\x0f\x31\x70\xf2\x43\x4e\xcf\xf9\x74\x89\xc1\xf0\x33\x83\xc7\xb0\x34\x7f\x38\x9a\x3a\x73\x11\x65\x73\x51\x3c\x73\xa9\xe6\xb7\xe4\x57\xb3\xbb\x5f\xc1\xd9\xce\x7c\x27\x8f\x4e\x93\x7f\xcd\xfe\xd5\x12\x83\xc7\xf0\x33\x03\x8d\x9b\xcb\x02\x3a\x93\xa2\x71\xa9\xdf\x92\x4f\xe7\x5c\xc8\xd2\xb8\x9d\x05\x3b\x32\x42\xf5\x90\x65\x05\x8e\x0e\x01\x09\xbd\xe4\x9c\x94\xb8\x41\x42\xe1\x50\x35\x4e\x05\x98\x44\x3c\xd3\xc2\xf2\x63\xdb\x96\x56\x91\x27\x77\xcf\xdb\xb4\xf5\x87\xb3\xf0\xd6\xc6\xee\x67\x63\x7b\x26\x02\x4b\xfe\xf1\x5f\xd7\xbc\xb0\xb6\x41\x18\x52\xd7\x62\x29\x33\xbb\x07\x8e\x5c\xb4\x84\x47\xb3\xdb\x5a\xa7\xe5\xf7\x5d\x33\xf3\xd4\xb6\xdc\x24\x3c\x38\xdd\xf5\xcf\xf6\x15\xd2\xb0\xf7\xc9\xdf\x67\x7f\xef\xcd\xf5\x5c\x3c\x16\x8a\x0e\x9a\xdd\x18\xb1\x5c\xa2\x0f\xad\xea\x45\xd3\xa3\x08\xd5\x71\x8a\xa1\xa9\x41\x5c\xe2\x04\xbd\xc2\x6a\xb5\xa1\x2c\x95\x05\xc0\xe2\x00\x16\x9d\xa1\x6a\x88\x69\xd8\xb1\x02\x85\xf0\xfa\xe6\x0b\x75\x26\x93\x6e\x04\x5b\xb0\xf7\xbf\x36\xa3\xd1\xac\xa9\xd8\x54\x9f\x4e\xf1\xeb\x17\x02\x3a\x8f\xaa\xc6\x29\xbe\x40\x45\xd8\x55\x2a\x49\xfe\xc8\xb8\xea\xaa\x71\x91\x80\x53\x8e\xb9\xc2\x15\x01\x9f\x32\x6e\x86\x16\x18\xa2\x17\x55\x85\x38\x55\xd5\xe3\x22\x7e\x49\x2a\x55\xe3\x7c\xfd\x16\x1a\x1a\xa8\x08\xaf\x1a\x97\x05\xd4\xf3\x3f\x3b\x6e\x55\x17\x1a\x5e\x97\x1a\x25\xfa\x42\x3e\x51\x99\x81\xbf\xf5\x22\x47\x72\x90\xf3\x79\x5d\x5e\xc9\x6c\x15\xdd\x1e\x9f\xdf\xed\x16\xad\x66\xc9\xeb\xf2\xfa\xa8\x2f\x75\x41\xb6\x53\x0b\xf5\x79\xb4\xd0\xcb\x22\x7a\xdc\x5e\xa9\x73\xdc\x2a\xe8\x24\xd9\x9e\x63\x15\x63\x1d\x3d\x71\x54\xca\x5f\xe9\x2a\x29\x6e\x50\x6e\x6f\xff\xd6\x0b\xad\xcd\x53\x7d\x15\xa7\x8e\xc3\x83\xce\xa0\x2d\x61\xd3\x43\xd0\xa6\x07\x1d\xfa\x0a\xe5\x78\x04\xe8\x7c\x0e\x3a\x71\x36\xc7\xa3\x0b\x39\x16\x75\xe7\x70\x16\x67\xf3\x9d\xbd\xdc\x28\x9d\xb4\x1f\xb4\x22\x09\x21\x3d\x68\xac\x4f\x56\x7b\x24\x21\x06\x1d\x58\x10\x83\xb6\x38\x6b\x67\x10\x0e\x2d\x23\xbf\xbd\xef\x5d\x4d\xde\xbc\xfb\x1c\xc3\x6d\x5c\xf1\xfd\x3c\x7a\x17\xe6\xbd\x8d\xaf\xcb\x7f\xb2\x62\x63\x8f\x14\xca\xa3\xfb\xc8\x6f\x97\xe1\xef\x31\xe8\x6d\xf2\xc0\x25\x69\x2b\xee\x49\x9b\xda\x65\xa8\x2d\x4d\x6d\x6e\x31\xda\xc2\x20\xa6\x2d\x9c\xd3\xf4\x0a\x28\x66\xdd\x94\xdf\x63\xf0\x18\x3e\x27\x1d\x9d\x78\x84\xea\x80\x77\x36\x59\x6d\x4e\x78\xc2\x6c\xd7\xf2\x70\x8e\x8c\x76\xda\x68\xac\x9e\x48\x5a\x9c\x98\xbd\xc0\xb7\x24\x20\x76\x2a\xea\x50\x47\x92\x72\x80\x91\x59\xcd\x66\x98\x8f\x55\x33\x6a\x25\x2c\x80\x96\x68\x7b\x44\x82\x21\x8a\x64\x8c\x13\xf1\x00\x2f\x17\xd0\xb6\x79\x0a\xea\x2a\x07\x40\x0e\x07\xb0\x2c\x28\x31\x3a\x90\xe4\x8a\x0c\x86\x40\x32\x12\x85\xa1\x3f\xbf\xa3\x71\xe9\x98\xf6\x78\x7d\xa0\xd6\x58\xd2\x38\x6d\xe3\x84\x8e\x13\x8b\xde\xbf\xef\xe4\xf8\x3a\xef\x24\x8b\x1f\x76\x92\x8b\xb7\xfd\x63\xef\xd4\x5b\x5f\x5d\x3a\xf5\x96\xc5\x53\x1b\x1a\xcb\x1b\x3c\x1d\xd7\x8f\x5f\xab\xb4\x4e\x98\x3a\x6d\x64\x9d\x91\x79\x74\xe5\x98\xc9\x03\xa0\x48\x0a\xb0\xdb\x3d\x3e\x79\x64\x6d\x1b\x93\xe5\xc3\xfe\x32\xaf\xc9\x30\xf3\xaf\xfb\x5f\x8a\xa6\xe7\x8e\xdb\x36\xf6\x3a\xdf\xf8\xa5\xd3\x4a\x57\x3e\xde\x71\xe8\xcf\x73\x5b\x53\x77\x85\x22\x70\xd7\xfd\x00\xfb\x97\xbe\x71\xe7\x2c\xa5\x65\xfe\x82\xeb\xd6\xee\x4f\xbf\x36\x6f\x5c\x79\x53\x49\xb1\x5c\xd5\xb8\xb4\xcd\x6a\xbb\xea\xfb\x2c\x23\x97\x1b\xbd\x55\xdc\x15\xb5\x4e\x70\x0e\xba\xa4\x2f\x98\x4a\x75\xf6\xc9\x58\x35\x8e\x25\x7b\x96\xaf\xc2\x92\x9c\x51\x62\x1a\x1e\x89\x83\x22\xdf\x32\x7e\x90\xa8\xe1\x2a\xa7\x96\x91\xec\xd4\x64\x7f\xa6\x17\xba\x98\x36\x73\x21\xf1\x0d\x38\xf5\x77\x7d\x11\x8e\x94\xea\x59\x5c\x1b\x49\xdb\xc0\x21\xce\x8e\x19\x82\x43\x13\xe3\xb6\x60\xeb\xbc\x05\xfe\xd2\xb8\x17\x26\x36\xce\x6b\x93\xeb\x63\x43\xc7\xe6\x26\x2e\x7c\x6a\x19\xc3\xce\x3e\x71\xe5\xb3\xb3\x1d\xc6\xa6\xf2\x35\xd3\xd7\xde\xf5\xfd\x25\xab\xae\xae\xd6\x85\xa5\xb2\x48\xa6\xae\xbd\x7c\xf9\x5d\x4b\x2e\xe1\x31\xf8\xec\x07\x83\x0c\xa6\xa8\x0f\x9b\x8c\x38\x52\x63\xb1\x44\x86\xa5\x0d\x7e\xc7\xda\x71\x82\xb5\x63\x9a\x5f\x67\xf1\x95\x79\xb8\x86\xb6\x5b\x6a\xee\x58\xb4\x61\x78\xed\xaa\x67\x16\xc0\x8a\xa7\x56\x5f\xe5\x75\x5d\x39\x6e\xf8\x89\x75\x4b\x8f\x2e\xdf\xe0\x9c\xdb\x30\xb3\x7e\x48\xcc\xbb\x0f\xff\xf6\xd2\x0d\x0f\x4c\x41\xc7\xab\x61\x88\x26\x2e\x63\xde\x8d\x24\xab\x71\x38\x28\xd9\xad\x58\x08\xc6\x5b\xc0\x6e\x35\xe3\x70\x30\x54\x8d\xad\x2d\x38\x11\x8c\x07\x80\xcd\x15\xec\x58\xb5\x13\x43\xad\x62\xc9\xd6\x0d\xfb\xf6\x6d\x80\x1d\x4b\x9e\xbf\xe1\x5d\xb5\x6f\xcb\xa3\x9e\x5e\x8e\x51\x5d\xd8\xd5\x77\x43\xcf\x69\x06\xf9\x3b\x79\x93\xfc\x7d\xc6\xf8\x1b\xe0\xa1\xcb\xc6\x07\xfd\xf6\x13\x22\x8a\x96\x8f\x5c\xa0\xbd\x1d\x17\x52\x03\x6c\xaf\x59\xbf\x23\x00\xbd\xef\x59\xd4\xfb\x6e\xf6\xf1\x4b\xde\x08\xa4\xf0\xe8\x9e\x31\xc4\xad\x97\x24\x86\xca\x7f\x84\xf4\xea\xc9\x8c\xec\xc8\x85\x2a\x29\x2a\x57\x30\xa4\xb4\x82\x5a\xfb\xad\x6a\xdb\x88\x25\x94\x18\x07\x41\x41\x92\x59\x0a\xca\x2f\x4a\x9a\xc9\x33\x1d\x37\x94\x20\x2b\x2a\x41\xa9\x64\x3a\x13\x53\xbb\x51\xb5\xde\x20\x2b\x52\xe7\x6c\x94\x9e\x36\x11\x74\x06\x63\x05\x57\x5c\x86\x74\x22\x8e\x2f\x90\x9f\x94\x86\x5d\xa7\x07\x0e\xdf\x75\xfa\xf4\xae\xb5\x8f\x3d\xf8\xac\xbd\x1e\x56\x43\x09\x29\xb9\x62\xa9\x93\xe3\x4e\xef\x6a\x6a\x3e\x61\x31\x48\x16\x67\xd8\x7e\x62\xf6\x69\xd0\x41\x13\x39\x4f\x6e\x26\xe7\xc7\xb6\x0d\x24\x0f\xd8\x83\xaf\xc8\xdd\x47\x4f\x91\xf3\x20\x9c\x5a\xb3\xf0\x7a\x6a\x5a\x09\x39\x78\x62\xf2\x27\x9a\x61\x64\xd0\x01\xc6\x99\x0b\x4f\x41\xae\xad\xa4\xab\xf8\x34\xf9\xea\xf4\xad\x7f\x9e\xdc\x7a\x3b\xe4\x76\x2d\xbe\xe3\xc7\xa0\x3b\xed\x22\xdd\x72\xd2\x6c\xf4\x03\x3b\x77\xc7\xae\xd3\x40\x9f\x0b\xc2\xa9\x79\x3f\x68\x9d\x4f\x2a\x3c\xdf\xff\x08\x04\x58\x03\x42\xe6\x69\x25\xa9\xe4\x72\x4a\x52\xf1\x91\x55\x95\xfd\xf7\x55\x0b\xb4\xe6\x54\xa0\x51\x7d\x08\x5c\x3d\xfa\x64\xb1\x07\x8c\x8a\xe1\xa9\x2e\x18\x5f\xc2\x23\x1c\xbe\x1c\xdf\xca\x96\xcc\x88\x2d\x10\x29\x61\x25\x59\xec\xd1\x0f\xb3\x9a\xee\xd6\x3f\x9c\x0b\xcb\xdd\xcb\xe4\x30\x37\x9c\x53\x02\xac\x12\x50\xfe\xdb\xe7\xc8\xe7\x1c\x3e\x9f\x03\xe7\x1c\x70\x5c\x8d\x9c\x47\xa3\x96\x8d\xca\xb9\x17\xeb\x4f\x82\x17\xa6\x80\xf7\xa4\x7e\xa9\x0c\xc6\x7e\xfa\x5f\x5c\x04\x39\xd9\xef\x97\x49\x2e\x50\x5d\x8d\xaf\x2a\xf5\xf9\x4a\x7d\xf9\x99\xf9\xc3\xb9\xd4\xa8\x51\xa9\x9c\xf6\x8b\x67\xae\x5a\x09\x3f\x19\xb3\xbe\xa9\x69\xfd\x18\xd2\xb0\x88\xf6\x0b\x7b\x75\x88\xfb\x0a\x19\x51\x35\x9a\xa0\xed\x36\x09\x16\xbe\x1d\x97\x8c\x69\x38\x56\x89\xa0\x12\x29\x6c\x23\x08\x6a\x8a\xac\xa0\xc4\x26\xe2\x2d\x18\xd4\x89\x81\x66\x44\x19\x0e\xa1\x98\x26\x3f\x1a\x81\x0e\x38\x23\x89\x38\x92\x13\x71\x89\x7b\x3a\x1e\xc9\x0f\x8a\xc4\xe3\x11\xfc\x42\x04\x74\x72\x77\xb9\xea\x66\x6e\x9c\x46\x3e\xfc\xc1\x49\xf2\xf3\x47\x65\xe6\x03\xd5\xa3\xfb\xea\x69\x10\xfb\xc1\xae\x2f\x4f\x2c\x81\xb5\xf1\xc8\x4e\xdb\xce\x8f\xc8\x4f\x1f\xfa\x27\x59\x7e\xc5\xf3\x6a\xe8\x2e\xdb\xce\x8f\xa0\xf6\xe8\x3f\xe0\x8e\x2b\x4e\x47\xe2\xf8\x37\x6d\x89\x44\x5b\x62\xca\x94\x49\xf1\x70\x24\xfe\x9d\xa3\x8f\x92\xf7\x4e\xf6\xb8\x17\x3f\xfa\x57\xd8\x15\x8e\x4f\x9e\xfc\x10\xf9\xe9\xc7\x3b\xc1\x70\x36\x1e\xa1\x57\x50\xfb\xf1\x4e\xf2\xcf\xb3\x71\x84\x78\x64\xbc\x88\xd8\x7f\x14\xbe\xad\x17\x55\xa2\x75\x14\x53\x9c\x91\xed\xa9\x64\x38\x44\xf7\x4a\x57\x63\x70\x88\xaa\xf8\x64\xd4\x26\xc1\x50\x72\xea\x74\x2a\x49\xfb\x15\x9e\x29\xa8\xb4\xd2\xb6\x64\x35\x68\x00\x59\xbc\xd3\x11\x60\x33\x71\x0a\x9f\xa4\x41\x92\x3b\x1d\x92\x53\xe0\x9d\x4a\x8c\x0f\x17\xa8\xd7\x52\xc9\x8c\x54\xe8\x78\xe8\x72\x45\xdf\x46\x61\xcd\x54\x5c\x94\xe4\x16\x8e\xaa\x0d\x99\x00\xe3\x74\x60\x0d\xcd\x1f\x33\xa7\xd6\xac\x3b\xac\xd4\x93\x1b\x03\x4c\x34\x54\x54\x1e\x26\x6f\x3d\x60\x2b\xb1\x34\x6d\x1a\x35\x40\x74\x8c\x5d\xbc\x2b\x64\x96\x4b\x4c\x4a\xfd\x20\xbf\x23\x71\xbf\xbb\xf1\xfc\x7d\xbf\x39\x78\x17\x76\x3a\xea\xc8\xeb\x6b\xa3\x45\x45\x15\x43\xa6\x4e\x9b\xe0\xb7\x0a\x2e\xab\x85\xf5\x0d\x69\x2e\xc9\x4e\x8f\x32\xec\xf5\x7a\x5d\x10\x8f\x4f\x4f\x78\x38\x98\xd4\x8d\xae\x2b\xf2\x3f\xea\xaf\x48\xaf\x99\x3c\xc7\xb7\xb9\xd9\x5f\xf6\xe0\x84\x31\x3b\x5f\xe6\x31\x5f\x5d\x36\xb8\x65\x6c\x74\xd8\x84\x07\x9a\xc7\x2a\xe6\x39\xc7\xba\xef\x5a\xb9\xea\x8e\x0f\xd9\xeb\xc8\x33\x4e\xf8\xd1\xe0\xba\xee\x55\xe3\x74\xe5\x6e\x2c\x08\xcc\xee\xf9\x64\xba\x81\x83\xb9\x1f\x85\xbb\xff\x11\x39\x72\xa3\xc7\xec\x1a\x53\x32\x6e\x7e\x36\x4d\xee\x2b\x6b\xbd\xf5\xfb\xc7\x1e\x06\x5c\x31\xa0\xdd\x5e\x9b\x32\x72\x81\x50\xd2\x27\xb2\x2c\x16\xc5\x88\xcf\x23\xb9\xaa\xf7\x0e\x2d\x5e\x1b\x28\x2a\xc2\x86\xb7\xb1\x60\x4e\x8d\xb8\x77\x7c\x28\x98\x2d\x5a\x62\x2b\x0a\x7d\x32\x3d\xb3\x70\x8b\x67\x64\xa0\x65\xb3\x05\xde\x5e\x3a\x6e\x61\xfe\x39\x1b\x6f\xdd\x76\xd5\xad\x0b\x87\xcf\x1f\xb1\x82\xb4\x59\x5a\xe6\xcc\xce\x1e\x20\xdd\x2f\x5c\x55\x5e\x0f\xa6\x3e\xbe\x3f\xb5\xff\xf3\xa0\x34\xc5\x89\x47\x90\xe8\xdf\x99\x85\x0b\xbd\x9f\xda\xd1\x45\xbf\x35\x24\x1d\x4d\xaa\x83\xd7\x98\x12\x2c\x11\xcc\x58\xfb\x82\x72\x00\xcb\x12\x1b\x2c\xc9\xb4\xe0\x4c\x0b\x88\xb6\xa0\x8d\xb1\xfd\xd4\xfc\xf0\x8e\xef\x9d\x7a\xf6\xc6\xdb\x8f\x9a\xce\x70\xcd\x89\xfa\x56\x83\x27\x1d\x9b\x8b\x3f\x78\xdb\x7c\xb4\xc7\xff\x4d\xb6\x25\xae\xfa\xa7\x62\xb5\x19\xb8\xb2\xb8\x8a\xb7\xf8\xf0\x94\xfc\x7d\xf9\xef\x4c\xe6\xdc\x36\xbe\x2a\x10\xa8\xe2\xed\x32\x5f\x09\x7b\x40\xc4\xf3\xa7\x72\x2e\x1b\x57\x1d\xe8\xfc\x0a\x61\xeb\xfd\x3f\xfc\xfd\x6b\x2f\xff\xcf\x89\x43\xd9\xb6\x4d\xeb\x06\x0c\x1f\x1c\xd9\x77\xb9\x47\xfb\x53\x3f\x7d\xad\x59\x57\x64\xc7\xad\xad\xac\xc5\xa4\x6b\x7a\xf5\xdd\x77\x5e\x6d\xd6\x99\xcd\x5c\xb0\x64\x20\x6b\x36\xeb\x9b\x7e\xc2\x9c\xb9\xa0\x8a\xad\x9e\x7e\x85\xeb\xe0\x72\xc8\x8f\x1a\x35\x8b\xc7\x02\x40\xba\xd2\x8f\xd1\x91\xb6\x74\xca\x38\x6c\x86\x9e\xce\xbe\x87\xd9\x31\xdd\x73\xc1\x9c\xa3\xdc\x92\x87\x56\x91\xbf\x50\x87\xdd\x0c\xef\xec\xf9\x6c\x37\xe4\x76\x7f\xb6\x87\x0c\x50\xaf\x0f\x99\xed\x60\x5d\x75\x88\x3a\x98\x5b\x88\x95\xc6\xf9\xcb\xaa\x43\x5d\x14\xd8\x9b\xcb\x9a\xed\xbb\x3f\x83\x11\xdd\xb7\xec\xf9\x6c\xb7\xdd\xcc\x68\x93\x78\x74\x68\x15\xb3\x4a\xdb\x03\xc2\xf6\xdb\x03\xd2\x42\x2d\x78\xd0\xe5\xd6\xb1\x9c\x86\x55\x2d\xf4\x00\x56\x37\x42\xbc\x27\xe8\x9b\xae\xa2\xa9\x5e\x43\x1d\x1a\x56\xc0\x5b\xbf\x6c\x44\x53\xec\x75\xbd\xe1\xf2\xf9\x5c\x6f\xb8\xbc\x44\x1a\x98\xda\x3d\xc4\xe7\x1b\xb2\x23\x35\xd0\x99\x91\xbc\xee\x39\x2e\x9f\x33\x2d\xf9\x5c\xf3\x5c\x5e\x29\xe3\xc4\xa3\x07\xa5\xc8\x57\xa9\x41\x52\xc6\x59\xdc\xfa\x62\x6a\xd0\xd6\xbd\x1d\x5d\xef\x74\xec\xdd\xdb\xc1\x0e\xe8\xd8\x8b\x9f\x5a\xa3\x3e\x45\xfd\x21\x17\x52\x03\x93\xc9\x81\xa9\x0b\x92\xf4\x3b\xd5\xef\x77\xbd\xe7\xf5\xf7\xa4\x06\x0e\x4c\x91\x45\x4e\xe7\x93\xe5\x03\xf1\x7d\x7d\x77\xef\xed\xcf\x5d\x88\x91\x9e\x5a\x11\x06\xbd\x10\x54\xff\xeb\xbf\xb6\xaf\xf0\x36\xf2\xe1\x6d\x9f\x43\x86\x9c\x26\xc3\xc9\x69\xc8\xc0\x36\xbc\xec\xd8\xfa\xee\xec\xfa\x63\xc7\xd6\x33\x9d\xeb\x8f\xc1\xcb\x38\xd6\x7d\x27\x8b\xba\x11\x34\xe0\x23\x7d\xfe\xc7\xd4\xea\x20\xf7\xe2\x31\x8e\x46\x93\xd1\x3c\xb4\x04\x5d\x89\xd6\xa0\x8d\x68\x1b\xda\x85\xae\x47\xb7\xa2\x03\xe8\x5e\x74\x08\x7d\x1f\x3d\x84\x8e\xa1\x47\xd1\x33\xe8\x39\xf4\x02\x7a\x09\x9d\xd1\xb0\x8e\x19\xba\x23\x94\x29\x68\x41\x83\xbc\x7a\x68\x72\x8d\xa1\x1b\x6e\x19\x0d\xfd\x40\x4c\xaa\x5e\x62\x41\xb6\x05\xd3\xea\xa1\xc1\x4e\x88\x14\x47\x57\x0c\x00\x04\x21\x0c\xc1\x74\x1c\xa8\xaf\x9c\xb1\xc5\x78\x01\x82\x72\x34\xc8\x87\x20\x9d\x89\x09\xe1\x0c\x03\x32\x64\xc4\x20\xa4\xb9\x04\x04\x6d\xb2\xc4\x04\x33\x60\x81\x44\x4a\x90\x6c\x0e\xf5\x26\xd9\x96\xb1\xc9\x50\x03\x82\x2d\x13\xe3\xa3\x61\x4e\x76\xea\x71\x34\x66\xe3\x84\x04\xc8\x62\x0d\x56\x9a\x81\x51\x62\x7a\x9c\x62\xc4\xb0\x08\x42\x2b\x50\x3a\x3a\x23\xc8\x69\x1d\xf2\x38\xde\x62\xdc\x8e\x97\x98\xa0\xcb\x6d\x25\xab\x6c\x49\x1b\x59\x6d\xf3\xc8\x21\xf6\x25\x87\x9b\x79\xdb\xe1\xf6\x3a\x5e\x85\xd0\xbb\x6c\x48\xf6\xd8\xe1\x46\x6b\xda\x0a\x37\xdb\xd5\xd0\x9f\xca\x25\xc2\x73\xa2\xbb\x3b\x06\xbb\xc9\xb1\xef\x90\x63\xb0\xc4\x5e\xde\x3d\x13\xf0\x3b\x96\xd3\xcf\x99\xac\xf8\x28\xd9\xf2\x02\x2e\x27\xbf\xb7\x56\xe2\x47\x81\xcd\xda\x02\x52\x37\xf9\x45\x2b\x6c\xb0\x0e\x24\x93\x61\xb4\xae\x7b\x15\x07\x53\xc8\x3e\xd6\x6c\x87\xfd\x59\x72\xe6\xbe\x97\x1e\x3c\xca\x82\xee\x91\xc0\xdd\x50\xf6\xab\x5f\xb1\x6f\xbd\xc8\x33\x1b\xac\xf9\xdb\xde\x27\xff\x05\x19\x28\xcd\x5f\xb3\x17\x7e\x57\x3e\x19\xa2\x7f\xda\xc5\x80\xa4\xfb\x05\xa7\x23\xa3\x20\xdd\xdd\xf9\xe0\x83\x0f\x3e\xc8\x36\x0f\xd8\x51\xfa\x53\xcc\x3c\xb2\x7d\x34\x87\xb7\x3b\x8b\x59\x72\xaf\x5e\xef\x28\x66\xc9\xa3\x3a\x9d\x1c\xb2\x3b\x1c\x8e\xa0\x4b\x57\x04\x63\xd9\x62\x87\x5e\x0f\x0b\xb8\x62\x87\xb3\x98\x85\x69\xc0\x42\xc4\x02\xcb\x0d\x3a\x57\xd0\xe9\x74\x3a\x83\x2e\xbe\x88\xdc\x03\x41\xc9\x64\x26\xa7\xd9\xe2\xee\xb7\x60\x3e\xb9\xdf\xca\xf8\x58\xbd\x81\x23\x77\xf1\xaf\xc2\xcc\x97\x75\x18\x3a\x5f\x7b\xcd\xda\x35\x89\xe7\x86\x8c\x5d\x0a\x06\xf2\x56\x96\xdc\xe2\x83\x34\x79\x98\xb5\xc0\x7c\x72\x92\xe7\x60\xe3\x20\x18\x78\xe4\xe3\xe7\x4f\xea\x98\x14\x60\xb0\x9a\x4e\x82\xc9\x48\x5e\xbf\x0f\x1a\xfe\xf0\x89\x8e\x7c\x35\xf2\x75\x5c\x74\xee\xd3\x0a\xf2\x0a\x79\x09\x12\x96\x9b\xc8\x67\x1f\x57\xc2\xde\x2e\xbc\x8a\x03\xa7\xc9\x8a\x61\x23\xb0\xa4\x96\x9c\x82\x7f\xfe\x8a\xfc\xae\xfb\x7a\xf2\x5b\xf0\xfe\xe6\x37\x6d\xb0\xd4\xc0\x82\x05\x4a\xf3\xf7\x4e\x60\xb4\xf5\x12\x8a\xff\x6f\x42\x5e\x84\x68\xf5\xef\x6d\x0c\xd1\x58\x7f\x43\xbc\xa7\x77\xe2\xdf\x41\xc7\xd3\x3b\xbb\xff\xbe\xf3\x69\xf6\x9d\xc7\xb2\xd5\xc4\x57\x9d\x1d\x58\xc5\x4c\xdb\xf9\x22\x2c\xba\x30\x68\xd7\x0b\x2f\xec\x8a\x3c\x09\x0f\x57\x0f\x1a\x54\x4d\x1c\xd5\x83\x35\x79\xb3\x93\x47\xdc\xb5\xc8\x40\x99\xbd\xcb\x10\x02\x16\x31\xea\xc0\x25\x92\x88\x73\x92\xac\x5e\xc4\xec\x08\xec\x28\xaa\x5d\x70\x4a\x8c\x17\xd2\x28\xc3\x0b\x12\x73\x84\xfc\x88\x84\x36\x38\xde\x82\x8e\x77\x26\xc0\x82\xd9\xc3\xc8\x35\xf9\x57\x56\xce\x6e\x59\x85\xd3\xe4\xc1\xb5\xd8\x06\x57\x94\x9a\xc9\x47\x24\xbb\x61\x31\xf3\xd3\x97\x4e\xec\x39\x78\x25\x8c\x7c\xd3\x39\x6e\x20\xb7\x6c\x13\xf1\x93\x97\xa6\x4f\x7d\x07\xe6\xbd\x75\xc3\xc0\x19\xab\xf3\x2f\x91\x6b\x86\xcf\x80\x1d\xb8\xa1\xab\x09\x16\x60\xc7\xfa\x59\x8b\x37\x92\x16\xf2\x4b\xb3\x23\x3e\x70\x92\xfc\x16\x8c\xba\xea\xae\x5d\x8f\x16\x64\x83\x0e\xb1\xff\xa2\xb6\xbf\xaa\x24\x17\x35\x96\x1f\xaa\x21\xa9\x00\x31\x1d\x8c\xcb\xe9\x44\x09\xc4\x25\x3a\x5c\xa1\xfe\x8c\x3a\xd1\x95\xd3\x19\x8d\x9c\x4e\xa0\xec\x50\x72\x5a\x16\x16\x1e\xdc\xb9\xf5\xb5\x97\x7e\x7d\xfb\xed\xbf\x7e\xe9\xb5\xdc\x16\xee\xe0\x39\xc0\x9f\xdf\x73\xcf\xe7\x80\xc9\x5f\xb7\xbf\x7d\xdf\x96\x47\x5e\x39\x77\xe0\xc0\xb9\x57\x1e\xd9\xb2\x74\xd3\x63\x33\xde\x38\x7e\xfc\xcb\xcc\xcf\x6f\xbf\xeb\x93\xc7\x0e\xad\xd9\xf2\xee\xba\x77\x0f\x1f\x7f\x83\xdd\xd8\xa5\xab\x9f\x79\xfb\xed\x33\xeb\xd9\xaf\xb6\x2d\x5b\xd6\x75\xa4\x7e\x20\x93\x1f\x73\xd3\x4d\x63\xba\x99\x8a\xca\xf0\x8a\x15\x21\x66\x1f\x7b\xe7\xc1\x41\xdd\x13\x13\xf1\x45\xcb\x39\x6d\x1c\x7d\x58\x87\xb8\x99\xbd\xfb\x2d\x66\xfd\xef\xd7\xa1\xbf\x76\xdd\x07\xb0\xda\x0f\x69\x85\xca\x96\x00\x70\x1f\x05\x1c\xb3\x1d\x01\xfa\x43\x3e\x0b\x38\x16\xaa\xee\x85\x8e\x00\xf9\xe8\x9b\xdd\xdc\xde\x3f\x1c\xe9\x8a\x1c\xf9\xc3\xd6\xa5\x86\xef\xae\x5e\x34\xa6\x0a\xca\x9f\xbf\xa3\xfb\x36\xf3\x9e\xe3\x87\xf1\xc7\xce\x40\xc0\x99\x0f\xab\x11\xb1\xa8\xfe\xe6\xff\xa8\xfe\xc2\x0f\xd4\x5f\x32\x91\xba\x97\x51\xf7\x01\x47\x20\x70\xe4\xc8\x1f\xfe\x70\xe4\xea\x57\xe2\xa1\xd8\xea\xef\x0e\x7e\xfa\x8b\xdb\xba\xef\x18\x54\x17\xfc\x25\x42\x28\x86\xd0\xc5\x16\x5e\xdb\x3b\xa3\xf1\xb4\x39\x29\x53\x5b\x90\x72\xb5\x55\xa1\x5a\x94\x42\xf5\xa8\x19\x0d\x44\x43\xd1\x08\x34\x1a\x8d\x47\x93\xd1\x74\x34\x1b\xcd\x43\x8b\xd1\x72\xb4\x12\xad\x45\x1b\xd0\x35\x68\x1b\xda\x8d\xae\x47\x37\xa1\x5b\xd1\x1d\xe8\x6e\x74\x18\xbd\x8f\x90\x2d\x68\xd3\x43\x94\xfe\xa6\x82\x4e\xd1\x19\x4e\xc9\x97\x1f\x19\x59\xe8\x7f\xb4\xc2\xa5\x07\x38\xc3\xa9\xe0\xbf\x39\xd4\xf0\x84\x33\xf3\x2d\xa1\x72\x4a\x0d\x15\xbe\xe1\x88\xf6\x8c\xb0\x28\xf8\x4d\x00\xa7\x35\x73\xb4\x70\xaf\x3d\x1d\xf0\x8a\x86\xf5\x2f\xc9\x89\x4c\x35\x1f\x0e\x99\x31\x8f\xba\xbf\xca\xeb\xb8\x7b\x2f\xbc\x86\xef\xc0\x0f\x5e\x78\x6d\x7c\xb4\xe7\x5f\xab\x65\xa9\xa5\xd8\xb2\xd4\x12\xa0\xe7\x25\x96\xb1\x4b\x2d\x4b\x37\x2e\xb5\x2c\xdd\x54\x38\x77\x0f\x5c\x03\x8e\xb5\xe0\x5c\x0b\x8e\x35\xf4\xaf\xe0\xee\x7a\x26\xba\xf6\x7b\x97\xfb\xff\x65\xcc\xda\xde\x07\x47\xf3\x7b\xb7\x3f\xf3\xcc\xf6\x1d\x4f\x3f\x4d\xce\xc6\x9a\x86\x34\xc5\x56\xcd\xf3\x30\xc5\x83\xe7\xfa\x33\x75\xe1\xcc\xb8\xb1\x99\xb2\x52\x67\x68\x84\x85\x09\x30\x11\x7d\xc0\xec\x91\x8a\xfc\x99\x54\x90\x47\x17\x6e\x21\x27\x60\xc2\x40\xe6\xfe\xee\xf9\xe4\x43\xae\xf4\xf5\xd7\xc9\x07\x6b\xd7\xde\xde\xef\xef\x3b\xa1\x9a\xa0\x39\x54\x1d\x52\x0f\x53\xb0\x3a\x14\xaa\x0e\xd6\xcc\xa9\x0e\x55\xab\xc7\xec\x9a\x50\x35\xfb\x6e\xe4\xb2\x7f\xe4\xf8\xd8\xb5\x97\xfa\xac\x1d\x1b\xb9\xe4\x99\xb7\xaf\x5d\x1b\x7e\x7a\x87\x96\x5a\xb8\x36\x52\xa6\xe7\x40\x74\xd6\x26\x5a\xcb\x0d\x52\x65\x71\x75\x8d\x00\x46\x87\xd3\xc5\x4b\x72\x03\x58\x18\x23\xc3\x63\x83\x5c\xd5\xc3\x2f\xb0\x56\x87\xb8\x9b\x28\xde\x43\xf9\x65\x73\xd8\x6f\xda\x9c\x57\xa0\x91\x55\x07\x1a\x73\x1f\x38\x77\xff\xfd\xe7\x18\x72\xff\xb9\x07\x1e\x38\x07\xe7\x5a\xab\xbe\xfa\x45\x55\x6b\x6b\x15\x3c\x5a\x99\xc5\x5f\x66\x2b\xe1\xd1\xaa\x56\xd8\xab\x86\xdd\xaf\x46\x5c\xb5\xfa\x7e\xb6\xee\xc2\xe9\xca\xd6\xd6\x4a\x6e\x88\xfa\xfb\xdd\xef\x56\xb6\xb6\x16\xc6\xa1\xa5\x3a\xc4\x9e\x45\x08\xcd\x40\x08\xb8\x1e\xb8\x23\xa1\x4f\x3f\x4f\x17\x9a\x9d\x0e\x41\x9d\x47\xaa\xa3\x08\xd4\x1f\x22\xa9\x60\x39\x90\xd2\x94\x1c\x3d\xa6\xec\xda\x0d\x69\xee\x00\xb0\xb7\xff\xec\xc3\xfb\x27\xdf\xb3\x79\xcd\x92\xc5\x6b\x36\xde\x35\xf1\x9e\x1f\xbd\xf3\xc0\x82\x5f\x4c\xe6\x4a\x7c\x3a\xb3\xb3\x69\x21\xf9\xc7\xb6\xdd\x9f\xee\x01\xef\xdb\x1b\xdf\xbf\xff\xd6\xdd\xd7\x1d\x9e\xb1\x68\xf7\xf6\xb9\x81\xc5\x36\x47\xb1\xed\xbf\x1e\x68\x58\xde\x1c\xd7\x59\x9c\xee\xc6\xc7\xe6\xbc\x48\xd8\x7a\xe6\xd4\x9b\xaf\xec\xbf\xef\xdd\xcc\xac\x8d\xbb\x76\x6f\x9c\x95\x79\xfa\xee\xfb\x9e\x1d\xd5\xcc\xfa\x45\xa7\xd9\x95\x9a\xb6\xe2\xea\x0f\xae\x7b\x0b\xac\x53\xf7\x3d\x74\x74\xdf\xd4\x6b\x16\xce\xcd\x45\x03\x0e\xfb\x18\xc7\x03\xef\x44\x2b\xa3\x4e\x8b\xe8\x1d\x3c\xa2\xeb\x85\xa8\xdf\x52\x18\xcb\xe6\x38\x44\xf7\x12\x54\xa0\xa9\xb4\xd4\x2b\x34\x4e\x4a\x3f\x50\x53\xb1\x46\xa0\x20\x23\xcd\x40\x51\x31\x34\x3e\x8e\xc2\x59\xa4\x0c\x0b\x94\x57\x20\x18\x97\x7a\x44\x5d\x0b\x64\x98\x9e\x35\x95\x00\xab\x4e\xc3\xd9\x4e\xc5\x93\x53\x92\x8a\xc6\xe1\x4b\x1d\xf9\xdf\x69\x36\xe4\x9a\x29\xf9\x99\x12\x77\xd7\x1f\x40\xe0\x5c\xcc\x5d\x6a\x94\x6e\xe4\x51\xa4\x28\x3e\xf9\xa6\xb6\x6c\x62\x75\x5b\x8c\xac\x00\xec\x49\x8f\xc2\x5c\xfa\x14\xd5\x91\xef\x6f\x58\xce\x74\x12\xe4\x8a\x32\x9b\x05\xbf\xcb\x60\x1d\xa0\x24\x15\xc5\x63\x4e\x0c\x61\x99\x8c\x92\x54\x4c\xf6\x62\x29\x2a\x28\x7d\xb8\xf6\x6a\xbe\x35\x7b\xfc\x89\x5a\x6d\xb3\xf4\x98\xd1\x53\x06\x34\x19\xa4\x78\x06\xfe\xaf\x79\xe6\x90\x92\x14\x6f\x53\x92\xca\x6d\x62\x52\x11\x01\x89\x49\x11\x50\xfe\xb6\xff\x73\xae\xc5\xfd\x10\x55\x03\xc8\x2f\xf7\x8b\x4a\x52\xbc\x88\x44\xf5\x79\xa1\xff\x7d\xde\x35\x1e\x0d\x6d\xfc\xce\x21\x3d\x2a\xa2\x7b\xcd\x14\x84\x44\x3d\x13\x8c\x89\x41\x3d\x0e\x46\x83\x0c\x1d\xd0\x47\x35\x95\x39\x65\xf6\xc8\x80\x9a\xb7\xf7\xf0\x4a\xf2\x1e\x7c\x0e\xb3\xf3\x6d\xd7\xbf\x49\x2e\x90\x73\x4c\x1e\xaf\x24\xcf\x77\xbf\x8c\x8f\xbd\x49\xfe\x84\x57\xc2\x0c\x72\x8e\x5c\x80\xe9\x90\x33\x63\x6b\x77\xd6\xde\x60\xef\xce\x5a\xb1\x19\x72\xf6\x20\x9b\x0b\x32\x28\xbf\x18\xdf\xdd\xdd\xcd\xb0\x94\x6f\xa3\xfb\xbf\xf1\xdd\xd4\x01\xb9\x45\x04\xd9\x6b\x6c\xdd\xc8\xe1\x60\x91\xad\xc6\x8e\x91\x07\x31\x48\xbc\x88\x84\x3f\xf2\x08\x8d\x40\x77\xa2\x43\x08\x71\xe9\x78\x31\x08\x31\x0a\x45\xfd\xef\x7f\x32\xda\xe6\xd8\x6f\xfd\x89\xf6\x8f\x64\x63\x94\x74\x2b\xd8\x12\xa9\x60\x2a\xe8\x0c\x3a\x13\x36\x39\x00\x02\x63\xeb\x8b\xfd\x9f\x5e\x09\xce\x28\x97\x52\xbb\x19\x41\x14\x93\x62\x6e\xc6\xc4\x89\xf6\xb4\x7d\xe2\x44\x31\x29\x7e\xeb\x8f\x1a\xe9\xdf\x85\x4f\xbc\x50\xd5\x2f\x56\xf6\x67\x36\x47\xe0\x64\x4e\x53\x03\xe5\x4e\x06\x1c\xb6\x9f\x89\xfd\x9f\xf4\x6f\x5f\x07\x59\xc8\x41\x2e\x47\x90\x28\x6a\x0f\x14\xbf\xed\xf8\x37\xa1\x9b\xd4\xd0\x09\x13\x44\x71\x42\x16\xa2\xd0\xe0\x69\x36\x34\x40\x45\x2e\x97\xcb\x91\xf7\x1b\x0c\xcd\x1e\xf2\x13\xf2\x4b\xbb\x28\xaa\x11\xfe\xcd\x43\x58\x8f\x06\xb9\xd9\xd3\xfe\xb8\x1e\x2e\x97\xc1\x68\x3d\x42\x41\xb1\x06\x40\xb4\x00\x14\x48\x20\x43\x05\x2e\x48\x8d\xc6\x51\x9f\x88\xb7\x30\x8d\x10\x0f\x30\x89\x78\x8b\x4e\xdb\x18\xdd\xdb\xf6\x98\x4c\x2c\xa1\x0a\x5a\x4d\xd8\x66\xd4\xce\x3c\x4e\x41\x5a\x80\x02\xb9\x4a\x42\x42\x08\x30\x38\xdb\xd1\xa1\x16\x44\xae\x03\x10\xc6\x86\x29\x6d\xf3\x04\x9f\x30\xaf\x6d\x8a\x81\xda\xe9\x1a\x31\x36\x32\x45\x9c\xc9\x68\xb3\xcb\xa6\x48\xb5\x68\x30\x19\x8b\x8c\x26\x83\x58\x1d\x31\xc9\x76\x9b\xd1\xc4\x15\x31\x46\x1a\x0b\xbe\xb7\x7f\x53\xf7\x81\x4d\xfb\xf5\xfe\xea\xf1\xa9\x19\x1f\x48\xf8\xe5\x9f\xd9\x86\x46\x4a\x2a\x03\x2b\x9a\x56\x04\x2a\x4b\x22\x43\x6d\x3f\x7b\x59\xf0\x7e\x30\xa1\x75\x7a\xb9\x15\x3a\x73\xd9\x7c\x0e\xe7\xb2\x39\x1c\x67\xb1\x4e\xc4\x58\xd4\x61\xd6\xae\x67\x04\x81\x0d\xea\x3c\x3a\x87\x50\xc4\xb2\xee\x70\xc8\xed\x0e\x85\xdd\x2c\x5b\x24\x38\x74\x1e\x5d\x90\x15\x04\x46\xdf\xfd\xe0\xa6\x1b\x6e\xd8\xd4\xbc\xe6\xfa\xab\xe6\x79\x3e\xca\x66\x8b\x1c\xa5\x75\xf5\xe5\x2d\xb7\x94\x47\x5b\x5a\xa2\xe5\xb7\xb4\x94\xd7\xd7\x95\x8e\x1f\xfb\x69\x70\xdb\xa1\xef\x14\xf4\x06\x79\x0e\xa1\x76\x34\x0b\xad\x42\x08\x24\x33\x8e\x55\x43\x4c\xa1\x8a\x12\xba\x04\x1a\xee\xb7\xf0\xad\xf4\xee\x09\x0f\x60\x39\x98\x88\x85\x43\x4a\x86\xea\xda\xd5\xea\x5e\x58\x94\xe0\x2b\x40\x4e\xcb\x01\x80\x78\x3a\x13\xd4\x28\xd2\xe9\x72\x7b\x29\xa4\xbf\xb6\xc6\xae\xcb\x17\x0d\xd9\xf1\xdc\xe2\xef\xfe\xd1\x5a\x34\x76\xec\xb0\x8e\xab\xa2\xde\x8b\x68\x68\xef\x32\x78\x7b\xbb\xeb\x9a\x1f\xd2\xed\x60\xb9\x31\xd7\x5d\x51\xe9\xc7\x68\xed\xe4\x4f\x02\x0a\xc7\x2a\xae\x7c\xd0\xd1\xb6\x46\xf4\x2e\x54\x03\x9f\x58\xbb\xf3\x96\xef\xbc\xf1\xd5\x7b\x6b\x1f\x93\xc9\x4f\xc2\x0e\xbb\xed\xb6\x9a\xca\x5d\xa7\x4f\x73\x39\xd0\x9d\xbe\x74\xcd\x1d\xfe\xbe\xf8\xc5\xbd\xed\x82\xf1\xb3\x43\x2b\x5f\x1d\xb6\x7c\xdc\x67\x3b\xbc\xb1\x9e\x95\x71\x6f\xd5\x55\x4a\x52\xf1\xc6\xfd\x52\xae\x2a\x20\x07\x7c\x4b\xd7\x88\x8a\x27\xe7\x51\x8e\xb7\x7a\x3d\x67\xf3\x5d\xb7\xae\x2c\x2e\x29\x06\xa7\xe9\x34\xf9\xea\xf4\xe9\xcb\x97\xdb\x0b\xfc\x46\x5c\x8e\x3b\x87\x52\x68\xac\xda\x13\x06\x1d\x66\x5c\x52\x8d\x35\x3c\x0d\x49\x96\x78\xc1\xcc\x0a\x01\x36\xde\xc2\x64\x28\xb0\x06\xdd\xc2\xc8\x68\x6b\x55\xfd\x2d\x4e\x7a\xed\xf2\x0a\x3d\x06\x97\xbb\xe6\xad\x7f\x90\x0b\xff\x78\xeb\x9a\x41\x57\x6f\x1c\xe6\xa9\x64\xb9\x62\x4f\x43\x47\x7d\xa9\x05\x98\x01\xf3\x77\xbc\xf8\xde\x8b\x3b\xe6\x0f\x60\xc0\x52\x5a\xdf\xd1\xe0\x29\xe6\xd8\x4a\xcf\xb0\x8d\x57\x0f\x22\x39\xc5\x93\xd5\xb6\x38\x65\x3d\xca\xa8\x14\xe4\x52\xa3\x3a\x28\xd7\x55\xeb\xc2\xe6\xe2\xe2\xe6\x85\xad\xb5\x63\xd3\xe1\x22\xae\xd8\xe3\xa9\x64\x0d\x5e\x97\x6c\x65\x8d\xc5\xe1\x80\xc3\x11\x88\x14\x17\xb1\x66\x97\xec\x35\xb0\x95\x1e\x4f\x31\x57\x14\x4e\x8f\x65\xc6\x92\x9c\x47\x21\x39\x4d\x1f\xa1\x1e\xa9\x51\xa3\xe0\xa8\xc6\x89\x85\x7b\x39\x6b\xbc\xd4\x7a\x2a\x68\x06\x0b\x68\x18\x96\xb1\x60\x3c\x9d\xf1\x82\xc6\xe5\x22\xca\x12\x38\x84\x60\xac\x1a\x04\x5e\x30\x42\x35\x84\x78\x81\x09\x16\x30\x22\xb1\xdc\xc2\x24\xd4\x4e\x0f\x6a\x39\x03\xcb\xe4\x6f\xb5\x27\xed\xf9\x5b\x38\x2b\xac\x96\xc2\x5c\xdb\x0b\x7c\x48\x72\x86\xf8\xfd\x75\x76\x1c\x5b\x4c\xbe\xb3\x52\x17\x16\xab\x8c\xdb\x7f\xcc\x87\x2b\x43\xdc\xd5\x64\xfa\x62\x72\xae\x65\xfb\xca\x71\x91\xc8\xb8\x95\xdb\x5b\xce\x11\x8c\x78\x3d\xc3\xe6\x8f\xda\xed\x78\x06\xb6\x7b\x9d\xe0\xce\x2f\x74\x78\x3c\x0e\xf8\xed\xaa\x30\x1c\xbf\xf5\xe0\xc7\x36\x07\xe6\xca\xc8\x04\x7c\xc2\xe1\xf1\x3a\xc9\x80\x83\xb7\x7e\xf4\x55\xc5\x88\x6c\x24\x92\x1d\x51\xf1\x95\x3a\x86\xc3\x17\x11\x9b\xe3\xba\xe9\xde\x1a\x04\x0e\x24\xd8\x12\x3d\xb5\xba\x77\xa1\xae\x17\x6f\xd7\x56\x0d\x98\xb2\xcf\xb2\xf6\x88\x15\x51\x7d\x11\x9b\x23\x67\xcf\x9e\xeb\x03\x8d\xd1\x9c\x07\xfe\xb6\xbd\xc8\xb8\xef\xd3\xdd\xc7\xa0\xfc\x44\x37\xd2\x6a\x1c\x39\x4f\x6e\x66\x3a\x3f\x26\xa7\x5c\xa4\xbb\x5f\x54\xcd\x9c\x88\xb5\x9e\x00\xfb\xc1\xeb\x7e\xb7\xdf\x22\xee\x27\x5f\xd8\x35\x6d\x8e\x7a\x57\x7f\x3d\x68\x0c\xd5\x5c\xc6\x09\x49\xd9\x90\x71\xa8\x1a\x53\x05\xb0\x0c\x05\x20\x9c\x84\x96\x36\x64\xe5\x3a\x3d\x0a\x7d\x01\xd9\xb1\x75\xe6\xc1\xf7\xbf\x78\xff\xe0\xcc\x99\x07\xdf\x5f\x77\xe6\x5e\xd8\x4a\xba\xe8\x62\xe5\xe2\x9e\xa4\x91\xf3\x5c\x4e\xf1\x10\xcd\x6c\x89\x27\xdb\xef\x3d\xb3\x4e\x8b\xad\xde\xb4\x15\xb6\xd2\xc7\x5c\xc8\xf5\xe5\xa5\xd7\x16\x85\x55\x65\x73\xb3\xb6\x77\xce\xee\x74\x20\xc1\xf9\x6f\x8a\x30\xa5\x20\x6a\x71\x16\x53\x54\xf9\x21\x07\x54\xa9\x41\x25\x89\xc0\xf7\x24\x9a\x69\xb9\xf5\x24\x39\x7b\x56\x43\x6c\xa0\xaf\xd5\x9c\x67\xc9\xd9\x93\xb7\x1e\x6e\xe5\x45\xdb\x50\xa7\xae\xb2\xf3\x0f\x9d\x95\x3a\x7f\xb3\x4d\xe4\x5b\xf3\xdf\xef\xcb\x04\xfb\xe3\xe1\xe4\x7f\x1e\x52\x4b\x79\x57\xbf\x5b\xa9\x73\x97\x0b\x86\x7d\xfc\x10\x38\x87\x77\x9c\xb4\x7a\x1d\xcb\x76\xec\x58\xe6\xf0\x5a\x4f\x76\x7d\xd4\x2f\x4b\xb4\x3e\xd0\xbe\x66\x10\x1a\x89\x10\xf4\x18\xbc\xf7\x64\x43\x90\xfe\x63\xfe\xd4\x2a\x92\x46\xaa\x10\x88\xaa\xed\xbb\x27\x53\x2c\xb2\x9b\xa1\xa4\xe7\x6b\x6c\xfd\xa6\xfc\xdd\xf1\xb7\x1d\x45\x56\x28\x39\xb3\xfe\xa3\x69\xe8\xe2\x75\x66\x7b\x7e\x4f\xbf\x6f\x73\xce\x6c\x57\x3c\x84\x56\x99\xeb\x2e\xde\xff\xfa\x37\x67\xd0\x7a\x02\x6c\x07\xdf\x84\x0a\xd9\x3c\xa8\x8d\xd8\xcd\x5d\x1d\xfd\xbf\x16\xee\xdd\x5b\xba\x1c\xad\xfd\xbf\xe5\x4d\xfd\x76\x99\x98\xd0\x0b\x39\xec\xbc\x64\xb5\xbd\xa7\x33\xc8\xf4\x22\x15\xa7\x4b\x2e\x2d\x04\xee\x3f\x17\xc2\x59\x72\x76\x6b\x72\xa1\xde\x63\x18\x60\x00\xfd\xd2\x95\x34\x44\xf1\x40\x89\x1a\xb8\x7b\xd9\x94\x42\xc0\x8c\xfa\xfb\x61\xff\xfd\xff\xc7\x52\x52\xab\xc1\xeb\xf7\xa7\x56\x1a\x40\x57\xa9\xf3\x1a\xd6\xae\xba\x8e\xd6\xf9\x9e\x74\x2d\x9f\x53\x08\xb8\xa2\x6e\xeb\xd6\xaf\x95\x22\x42\x9c\x5a\x47\x78\xc2\xe5\x51\x1d\x6a\x41\xa3\xd0\x04\xaa\x99\x91\x30\xff\x4d\xa2\x23\xf8\x2d\x42\x44\xad\x21\x72\x5a\x96\x10\xa4\xad\x31\xde\xca\xc4\xe9\x80\x44\xa1\x1d\x2f\xd8\x94\x18\x2f\xd8\x20\x8e\xac\x28\x1c\x12\xe8\xb0\x84\x27\x45\xdb\xff\x76\xa0\x9f\xc4\x20\xe8\x32\x71\x63\x83\xd8\x5b\x6f\x3f\xf2\xc8\xdb\x6f\x41\xac\xfb\xb6\x5c\x2e\xd7\xb9\x76\xf1\x3d\xf7\x2c\x5e\x4b\x7b\x56\x7c\xfe\xfa\x0d\x1b\xae\xc7\xd9\x53\x6a\x2e\x4e\xd1\x00\xe6\xcf\x07\xc9\x9f\x4e\x58\x2f\x11\x45\x5f\x17\x48\x6f\x43\x95\xe8\x5c\xbb\xd6\x29\x92\x9f\xe7\xdf\xd8\x09\x2b\x76\xee\x24\xb7\x93\x7f\xd6\x1f\xfe\xf5\xb9\x87\xea\xb5\x22\x27\x39\x60\x2d\x63\xc7\x5a\x48\x37\x14\x64\x43\xfd\x43\xe7\x7e\x7d\xb8\x5e\x1d\xb7\xc1\x45\x5e\x50\xeb\x5b\x1b\x1a\x87\xe6\xa0\x15\xdf\x54\xe7\x02\x20\xf0\x48\xe0\x23\xb1\x6a\x26\xa3\x75\x9d\xd1\x5e\x3b\xcc\x4b\x2b\xa7\x5c\x68\x50\x90\xa4\x03\x15\xb9\x05\xa2\x0e\x49\x56\x52\x49\x94\xa9\x56\x07\x2c\x10\x47\xa9\xa4\x12\xa3\x95\x38\x00\xfc\x25\x35\xad\xbd\x55\x2a\x26\x5f\x3e\xfd\x33\xf2\xe0\xe0\x75\xef\xdc\x36\x4e\xa7\xbf\xe1\xd7\x7b\xd6\xff\x72\x3a\xad\x3f\xfd\xe3\x35\x86\x9e\xda\x4f\x3d\x09\x62\xbf\xf7\x21\xfb\xbd\x0f\xbb\x73\x9f\x1c\x66\xc0\x7c\x26\xf5\xf1\x9e\x53\xe4\x3c\xd3\x79\x0a\x84\x4f\x0e\x33\xe4\xcb\x33\xa9\x8f\xd9\x8e\xfe\x75\x6d\xee\x9f\x72\x4f\x91\x6e\x8f\xff\xc3\x17\xf9\xc5\x0f\x7e\xb2\x61\xcf\x17\x77\x58\xb4\x36\x98\xed\x1f\x6b\xe4\x5c\xfd\x5a\x62\x37\x93\x43\x0e\xc5\x7d\xe1\x21\xfa\x73\xb4\x5b\xf6\x07\x7e\x06\xad\xd1\x8d\xfb\xc9\xf9\x6e\x01\x84\x53\x47\xbb\x65\x5f\xf1\xcf\xc8\x4b\xd1\x8d\xfb\x11\x8b\xf8\x82\x5e\x63\x24\x1a\x87\x66\xa1\x25\xff\xa6\x0c\x63\xfc\xff\x9b\x60\xa2\x74\x23\x5a\x51\xd2\xba\x47\x87\x7a\x19\xc5\xaa\xd6\xbe\xde\x3a\x67\x15\x24\x3e\x77\x59\x11\x96\x90\x7f\xfd\xf0\x57\xcf\xae\xdb\xf7\xb5\x36\x7b\xf0\xfc\xb5\xb2\x1b\x4c\xcf\x9e\x7b\x76\xff\x89\xd7\x0b\xad\x12\xe5\x72\xb9\x7c\x0e\x84\x53\xeb\x16\xde\x73\xcf\xc2\x75\xa7\x98\x7a\xad\xf2\xd1\xcb\x4b\xdb\xe9\xdc\x3f\xe5\x9e\x24\xdd\xde\xd0\x96\x31\x96\xaf\x37\x56\xdb\x29\x08\x7d\xef\x39\xb0\xf8\x43\x5b\xe6\xd1\xd6\xf8\xdf\x85\x6a\x08\x2b\xd5\xea\x57\xff\x10\x74\x3e\x54\xdf\xdd\x5b\xf5\x48\xf6\xa1\xfa\x4b\x6c\x87\x1a\x29\x72\x7c\xff\x3e\x53\xe8\x35\x96\x14\x2e\xed\x3d\x33\x7d\x16\x93\xdf\xda\x8f\xbe\x7f\xa3\x5e\x5f\xad\xf7\x18\x6e\x1c\x73\x69\x7f\x3a\xe6\xb8\xe6\x7f\xfc\xfd\x7f\xdf\xaf\x7e\x70\xa3\xc1\xa3\xaf\xd6\xeb\x6f\x1a\x7b\x69\xff\x3a\xe6\xb8\xe6\x7f\xfc\xfd\x6f\xe9\x67\xf1\x45\x96\xf6\xb3\xf5\x94\xcf\x51\x42\x4e\x07\x66\xa9\x5a\xd7\x9e\xce\xa4\xfa\x3e\xb2\xa0\x81\x3a\x69\xd9\xe8\xc9\x67\x5f\xb5\xc0\x85\xfc\xe0\xdc\x59\x88\x9d\x20\x1f\x1c\xdb\xfd\xe9\x3e\xa3\x2a\x59\xa8\xf2\xf3\xd0\x2c\x2d\x11\x6f\x88\x49\xf1\x0d\x2d\x3f\xb3\xb4\x80\xf3\x7d\xb9\x61\xb6\xb8\xc8\xa9\x8f\x1f\x22\x5f\xec\x17\x2d\xfb\x7f\x77\xdd\x41\xb0\x9f\xb0\x6a\x9f\xed\xf0\x2c\xed\x9e\xd7\x45\xf1\x75\xed\x41\xb3\x0e\xd3\x80\xae\xdc\xa5\xfd\x10\x8b\x90\x90\x63\xb7\xf6\xe4\x85\xa2\xa0\x6b\xa9\xee\x27\x2e\x79\x14\x0e\x45\x0a\xa3\x2d\x49\x4e\xa4\x7a\x94\xa0\xc1\x1e\x30\xaa\x9e\x6f\x23\x5c\x29\x8a\xe4\x43\xbd\x57\x5f\x65\x30\x9c\x22\x1f\x16\x64\xfc\xb7\xa4\x11\x94\x53\x06\x43\x95\xde\xab\xef\xca\xf6\x65\x09\x5f\x29\x26\x45\xf2\xa1\x16\x70\x4a\x93\x82\x67\xc9\xd9\x13\x50\xde\x5b\x3e\x9a\xe7\x29\xed\x2d\xdd\x7f\xfc\x5a\xbf\x4a\xbf\x8d\x8c\x8a\x0b\x63\xc8\x5e\x20\x38\xa4\xce\x08\xe2\x01\xdc\x3b\x0c\x50\x87\x8b\x34\x25\x67\xc9\xd9\xc2\xc7\xcf\x0b\xfd\x4a\x97\x0e\x10\xf3\xf7\x52\x9b\xf0\x05\x6a\x4f\x55\xa8\x25\xf9\x33\x97\xbd\x13\x21\x36\xc7\xe6\x90\x80\x64\x84\x50\x61\x30\x8a\x7a\xab\x73\x3c\x00\x2c\x22\xe7\x7b\xc7\x91\x7b\xfa\x6a\xeb\x17\xef\x1f\x84\x7e\x7d\x26\x4e\xf5\xf9\xcf\x9c\x79\x10\xf5\xc3\x61\x8b\xf4\xe3\xda\xb4\x25\x32\x61\x75\xf8\x9e\xa1\xa6\x84\x7e\x08\x3b\x13\xb6\x5e\xe0\xb8\x47\xc2\xf1\x78\x98\x6c\x7a\x35\xf0\xdb\x9a\x21\x9b\x5b\xd7\xee\x7d\xf0\xb5\xd7\xf2\x41\xd5\x8f\xcb\xc5\xc3\x17\x8e\x85\xe3\x78\xe2\xef\x6f\xaf\xab\x83\x9f\xea\x0f\xed\x7f\xe4\xf7\xf9\x1f\xc4\xc3\xdc\x94\x70\x1c\x15\xde\xc5\xa9\xf2\xad\x1d\x21\x5b\x52\x9d\x17\xb0\x12\x25\x1d\x0d\x29\x31\x33\x6f\x01\x6a\xc8\x68\xcf\xf4\x2d\xbb\x6b\xb6\xe0\x2c\x5d\x34\xa5\xc0\xe6\x9a\xd6\xb6\x9a\x19\xb5\xeb\xf8\x4f\x16\xdf\x0f\xd6\x63\xca\x84\xf5\xc7\x17\x0f\xb9\xce\x6f\x88\x18\x03\x52\x79\x3c\x6a\xd6\x5b\x2a\x66\x08\x25\x4b\xc6\x35\x0f\x99\x36\x23\x9b\x99\xd3\x5a\xeb\x35\xfd\xf2\xb1\xd7\xc8\xdf\xdd\x7e\x77\x40\xc2\x96\xc4\xd8\x0a\x89\x79\x64\xc5\x8b\x37\x2f\x49\xee\x26\x87\x3a\x9e\x39\xb6\x7d\x74\xb6\x2e\x76\x5b\xc5\x15\x15\x13\x46\xc4\x39\xc3\x7d\xc5\xb3\x7e\x0b\x33\x02\x03\x97\x4c\xdc\x3f\xbe\x65\xd0\x85\x96\xd6\x89\xf1\x29\x4b\xd6\x2d\xad\xf9\xc1\x4b\x24\xff\x6a\xe5\x84\x01\x15\x7a\xdf\x0c\xc6\x32\x61\xf9\x95\x3d\xeb\xd2\x9b\x79\xc4\x5d\x87\x2a\x50\x0b\x1a\x8f\x10\xd2\x90\x49\xa8\xed\x39\x9d\x67\x67\x34\x3a\x32\x89\x5a\x23\x02\xcd\x10\xc5\x19\x92\x12\x71\xa6\x3f\xce\xad\x90\x91\xec\x3d\x30\x64\xe1\x50\x8c\x13\xa9\xf1\x11\xf3\xa6\xe7\x61\x0e\xdb\xac\x57\xd5\xd4\xef\x9e\x7f\x4b\xfb\x70\x60\x86\xb9\x7c\xbc\x4b\x10\x2d\x3a\x5d\x7c\x28\x17\x1a\x52\x37\xb7\xc8\x60\x59\xb5\xed\xf3\xa3\x0b\x16\x1c\xfd\x9c\x7c\x7e\x74\xc1\xc6\xb1\x5f\xde\x1f\x82\x38\xc8\x6f\x6c\xdc\xf8\x06\xf9\xfc\xee\x1f\x1d\x23\x73\xf7\xae\xd8\xf8\x06\x8e\x4f\xd3\x73\x86\x60\x45\x2c\xd5\x52\xb5\x7f\xd5\xf2\xa9\xba\x99\x83\x25\xc6\xe4\x74\xec\x15\x9c\x23\x0c\x82\x6e\x44\x36\x35\x40\x20\x63\x0b\x0f\x59\x70\xf4\xf3\x6d\x67\x0e\x7f\x3e\x7a\x09\xb7\x48\x7d\x08\x79\x9b\x7c\xfe\xc6\xc6\x39\xd7\xc1\x1d\x8f\xff\xfc\x6e\x90\xdf\xa0\xbc\x2e\x05\xfc\x31\x0d\x2f\x48\xa4\x6b\xc4\x31\x54\xa1\xce\x58\x32\xc1\x54\xd0\x16\x4c\x05\x7b\xb7\x2a\xf5\x73\xdb\x7b\x71\x46\x28\x1f\x0d\x3d\x72\x2c\xea\x46\xea\xc1\x97\xd4\x8d\xab\xab\x1b\x77\xc1\xd5\xef\x42\xfb\xbb\xeb\x3c\x12\x90\x76\xe4\x28\x28\xcd\x5d\x34\x80\x2d\xe9\x71\x61\x2d\x66\xbe\x84\xe4\x20\x87\x51\xdf\x6f\xaf\xde\x91\x62\x71\x57\xa0\x31\x08\xa1\x12\xc5\x9a\x2e\x91\xac\x50\x18\xc2\xf6\xb3\x22\xe9\xe9\x07\x82\x3d\xd6\x23\x94\xe0\xdc\xd9\xb3\x98\xc4\x25\x7a\x66\x30\x89\xb8\x4c\x99\xf1\xe6\x92\x97\x3f\xfd\x14\x5a\x3e\xc5\x59\xe8\x30\x89\xa2\x89\x1c\x12\x4d\x9d\x26\x91\x1c\x52\x2f\xa0\x83\x5e\xe4\x4b\xda\x93\x80\x86\x2c\xee\x3e\xb0\x69\xbf\xe0\x2c\x49\xb7\x2d\x6c\x16\x1d\x63\xef\x7c\xfc\xce\xb1\x0e\x71\xd7\xe4\x5f\x25\xdb\x71\xae\x00\xf0\x4f\x1e\xf8\xfa\xdd\xda\x73\xf3\x9d\xc9\xf6\x3f\xc5\x6f\xd8\x94\x5a\xb8\x6e\xc1\xdc\xc1\xa5\xb6\xe6\xe6\xe6\x66\x5b\x47\x7b\xb2\xc7\x26\x5a\xf8\x17\xcd\x5f\x02\x4d\xe9\x97\x3f\xb5\x26\x5a\x40\x43\xcb\xd0\xb0\x00\x53\xc9\x56\xda\xc4\x5a\x81\xd2\xf2\x69\xe4\x7c\x6a\x7d\xe5\x04\x0a\xb7\xd0\x3f\xa3\x52\x09\xcd\x26\x1d\x7c\xf5\xe5\xf3\x87\xe7\xf5\xfa\xbd\x7a\x93\x59\x7f\xfe\xbc\xde\x6c\xd2\xef\xd5\xab\x8e\xcb\x7c\xf2\xce\x1f\x46\xa3\x13\x9d\xf2\x25\x19\xbe\x07\x46\xde\xe3\x10\x7d\x7e\x9f\x27\xda\x9b\xdf\xfc\xaf\xbe\xfd\x21\x7d\x3e\x3f\x8c\xa6\x53\xd1\x89\x4c\x5f\xe6\x37\x6f\xb6\xf1\xde\xea\x60\x3a\xda\xcf\x2e\xd6\x8e\x3c\x54\x7e\xd1\xa1\x92\x66\xa7\x5f\xf8\x84\x3d\x55\x2f\xd8\x6b\x49\x03\x88\xef\xf4\x28\x17\xd1\x05\x74\x11\xd1\x45\x20\x9c\x3d\xf0\xde\x81\x03\xef\x71\x53\x3e\x7d\x20\x9f\xf5\x28\x18\x29\x1e\x92\x05\x55\xcc\x53\xac\x33\x22\xa9\xa1\x07\xb2\x0f\x7c\xaa\x78\x48\xae\x0f\x4b\x57\x95\x63\x12\xb5\x72\x61\x12\xce\xa0\x10\x74\x06\xf5\x6a\x5d\x8f\x05\x53\x09\x86\x9a\xbc\x88\x61\x1e\x75\x76\x92\x3f\x65\x60\x04\x59\x48\x0e\x92\x83\x64\x21\x8c\xc8\x90\x3f\x75\x76\x02\x82\xc1\xb0\x19\x06\x13\xb4\xe2\x17\x3c\x22\xd9\xce\x5c\x67\x77\x27\xa3\x9e\xa0\x33\x8f\x18\xd4\x95\x85\x3e\x5e\x6d\x54\xe8\x6b\xc2\xaa\x7c\x66\x55\xf9\x2c\xc8\x12\xfd\x54\xad\x1a\xad\x76\x24\x61\xef\x61\x16\xb5\x05\x6d\xac\x3a\xee\xef\x7a\xf2\x7d\xab\x55\xea\x3a\x27\x59\xad\xef\x3f\xd9\x05\xc2\xa9\xbf\x50\x12\x27\x06\x75\xe5\x78\xf4\xdc\xee\xee\xdc\x8e\x67\xb8\x37\x2c\xa5\xa5\x96\x37\xb8\x67\x76\x30\xb9\xdd\xcf\x5d\xe8\xa4\x9c\x4d\xf0\x0e\x46\x04\x5d\xca\x33\xa5\xbd\xbb\x42\x5b\x8d\xf8\xe6\xf7\xe3\x7e\xef\x47\xff\x31\x2d\xbf\xd6\x38\x4b\xb3\xf9\x73\x0c\xd1\x28\x4d\xb3\xf9\xce\x6f\x49\x96\x46\xf5\x0a\x2f\xab\xc9\xca\xf7\xbf\xe8\xd1\xd5\xdc\x20\x20\x6e\x3d\xe5\x5f\xf1\x51\xcc\x1b\x1b\xed\x20\x0a\x74\xde\x89\xb8\x0c\x92\xac\xc7\x36\x07\x1f\x8a\x45\xd5\xbe\x5a\x0f\x9a\x27\x9e\xec\x76\xd9\xac\xa4\xc6\xe9\x77\x88\xe6\x00\x5c\x64\xb2\x58\xca\x7f\xc1\x2e\xf7\x0d\x90\xc9\x30\xec\xce\x5f\xac\x24\x9b\x61\x88\x2d\x6c\x2e\xc2\x7e\x96\x9d\xd9\xb5\xdc\x1d\xd6\x7d\x6e\xa8\x91\xd9\xab\x1d\x3e\xcb\x45\xc4\x2c\xee\xbe\x1f\x0c\xb8\xad\xeb\xd7\xee\x62\xd3\x47\xcc\x6f\x99\xee\x17\x87\xe1\xcd\xd8\xe2\xe3\xc9\x97\xf8\x12\x7c\x75\xcb\xe5\xf8\xea\x41\xdb\xe5\x98\xea\x17\xd0\x65\x48\xea\xec\x31\xcd\xfa\xcd\x85\x26\x5d\xe4\x75\xdf\xe7\x2e\x16\xf6\x29\xd7\xa0\x21\x68\x34\xea\x06\x1e\xec\xe0\x85\x28\xc4\xa1\x09\x86\xc1\x78\x98\x03\x2b\x60\x03\x3c\x01\x2f\xc3\x59\xf8\x1c\x08\x36\x21\xc4\x99\x81\x62\xaa\xa5\x33\x69\x89\x0b\x80\xc6\xc4\x1c\x53\xf8\x0c\x75\x53\x52\x33\x5e\x8b\x93\x4a\xaa\x71\x20\x11\x12\x0a\xe0\x3a\xb1\x82\x3a\x33\xa9\x64\xaa\x41\x68\xc1\x01\x00\x49\x90\x9c\x92\xf6\x44\x36\x4a\x49\xaa\x33\xe9\x8c\xa2\x4e\x2e\x0a\xbf\x49\x6d\x7e\x2b\xa7\x0a\xdd\x5e\x3a\xd3\x82\x25\x39\xa1\x76\x75\x2d\x90\x51\x62\x4a\x2c\x99\xa9\x2e\xdc\x97\x96\x64\x47\x80\x91\x25\xf5\x11\x02\xc5\x58\xaa\x66\x63\x11\x90\x64\x29\x93\x68\x61\x5a\xa1\x05\x64\x6d\x49\x15\x04\x27\x2f\xf0\x42\x00\x64\x35\x52\xa2\x05\x02\x34\x84\xa2\xa0\x86\x1d\x42\x5a\x7b\xa7\x53\x52\x7f\x05\x49\x4e\x83\x43\xfd\x55\x73\xa6\x4e\x92\x34\x16\xc5\x18\x2f\x84\x62\x92\x1c\xcf\xa4\x15\x8e\x1a\x5a\x28\x94\x3b\x4b\x56\xd2\x99\x5a\x25\x66\x56\x67\x9a\xe9\x0c\x6f\x81\x14\x2f\xd3\x72\x0a\x40\x46\x4d\x30\x2a\xf0\x27\xa4\x92\x8c\x22\xa4\x78\x49\xf3\x57\xb8\x16\x50\x62\x29\x3e\xac\xd1\x98\x44\x79\xca\x70\xdd\x02\x19\x5e\x90\x04\x89\x95\xd3\x91\x8c\x92\x49\xb6\x40\x33\x38\xe9\x9b\x29\x66\x60\xcc\xac\x0b\xf3\x31\x33\x23\xf0\x61\x3e\xa6\xf9\xa8\x13\x7e\x89\x49\xa7\xd4\xa2\x32\x83\xac\x7d\x1e\x6a\xb0\xab\xde\xe5\xe0\x9d\x12\x85\x9b\x0a\xf3\xb2\x24\xb3\x94\xa2\x9e\xa7\xf7\x84\x9d\xf1\xa8\x9a\x2d\x21\x9d\xd2\xe0\xf2\x94\x14\x7d\x14\x97\xd6\xb0\x61\x1d\x5a\x32\xe1\x13\x9d\x62\x77\xa7\x30\x4c\xf0\xca\x12\x97\x14\x14\xd1\x9d\x02\x3c\xd1\x2b\x49\xf5\xa6\xa9\xa1\xaa\x91\x7b\x06\x94\xd6\x5c\x58\x63\x9a\xa2\x39\xab\xf1\xeb\x50\x16\xf6\x86\xd2\x4a\xd2\xc7\xad\x1a\x3b\x6e\xd5\xaa\x73\x57\xfc\x6d\x8b\x77\xe5\xb5\xeb\xc7\xe3\x2f\x75\xa2\x00\x33\x73\xe9\x01\xd3\xa4\xfc\xf8\xfc\x8f\xe5\xa9\xb5\x53\x9e\x03\xcc\x89\x3a\xde\x6d\xf6\x0a\x7a\xa3\xcf\x1f\x30\xc9\xbe\xb0\xc7\xee\x30\x0a\xa9\x69\x46\xbd\xde\x32\x06\x87\x14\x1f\x67\xaa\x36\x33\xd8\x50\x66\xb0\x58\xe4\x21\xd0\xb2\xda\x57\xe2\xd4\x59\x47\xca\x0d\x0c\x83\x59\x81\xf3\xd6\x0e\x88\x97\x6e\xae\x69\x5e\x74\xeb\xf5\x8e\xf2\x64\xb0\xa5\x08\x4f\x84\xd4\xfc\xa6\xc9\x11\xe0\x04\x16\x63\x60\x1a\xe4\x11\x76\xc1\x59\xe2\x5b\xd9\x34\xcc\x65\xb6\x19\xcb\xf5\xc0\x5a\x2b\x4d\x9c\x4f\x09\xe1\xb1\x66\xbd\xae\x68\x5a\xca\x20\x80\xc3\xee\x09\xfb\x64\x73\xd0\xe3\x35\x1a\x74\x3e\x93\x4c\xfe\xa1\x9f\x10\x60\xbd\x3e\x47\xc9\x98\xb0\xdb\x34\x38\x60\xe2\x98\xba\x84\x65\x64\xc0\x5c\x6e\x74\x4a\xd6\xc0\xf9\x17\x02\x13\xf4\x41\xd1\xe7\x2d\xf5\x0f\x31\xb9\xc3\x51\x4b\x22\xc3\xea\x9f\x35\x37\x8a\x91\xaa\x6a\x8f\x9b\x39\xab\xb3\x31\x8c\xc9\x56\x5a\x09\x2e\x72\xee\xf7\x47\x8e\xfc\xfe\x48\x7a\xe9\x32\x10\x0c\xfe\xed\xc5\x7a\x96\x23\x5f\xea\x18\x16\xbf\x87\x59\x9e\x37\x86\xae\x23\x77\x59\xcb\xea\x2d\x76\x86\x31\x70\x43\x5f\x66\xa2\xbb\x40\x3e\x72\x1c\x9c\x07\x83\x0c\x60\xdb\x20\x8b\xa7\x2e\x51\xcc\xb1\x82\x01\xf3\x7a\xa1\x48\x67\xd5\x89\xec\xb2\x7a\xb6\x28\x60\xf5\xf1\xcc\x13\x2e\x9c\xae\xa9\x2c\xd2\xd9\xf4\x0d\x7e\x18\xcf\xd8\x86\xc4\xca\x36\x4d\xe3\xc2\x3b\xd2\x89\x29\x26\x99\xfd\xd1\x2b\xf3\x0f\xcf\xe3\x65\x5c\xac\x2f\xaa\x34\x88\x80\x19\x71\x32\x76\xe0\x85\xe4\x44\xfb\x38\x9d\x6e\x60\xf6\x9d\x77\x00\xd8\x43\xac\xcb\x2c\x02\x63\xb1\x94\x9b\xf5\xc5\xd8\x5a\xf4\xe6\x13\x3f\xc1\x1d\xdc\xb4\x8d\xe5\xca\x50\x1b\x63\x98\x92\x48\xef\xd8\x67\x8d\x0a\x7a\xb7\x28\x0d\xe2\xd8\x84\xb3\x9f\x7b\x9a\x77\xa0\xde\x14\x0e\x56\x5f\xc9\x71\x93\x43\xfd\xdc\xec\x20\x8b\xae\xca\x1b\x8e\x57\xc8\xe2\xc8\xa5\x4b\x6f\x5f\xfa\xe1\x95\x55\x83\x9b\x46\xf0\xa5\x57\x5e\xf8\xc8\x58\x2c\xdb\xea\x56\xb7\x61\x5c\x53\xee\x76\x97\x0d\xc0\xcc\xc1\x89\x92\xbd\xd8\x68\xd0\x4b\x7e\xbf\xde\x60\x76\x98\xfd\xba\x22\x1f\x27\xb0\x96\x11\xd8\x30\x34\xa5\x54\xb4\x04\x6d\x51\x83\xdb\xce\xd9\x19\x16\x38\x30\xf2\xa5\x0c\xcf\xe2\x60\x71\x64\x55\xdd\xd6\x94\x55\xf6\x83\xc7\xea\x32\x33\x66\x5c\xed\x63\xed\xd5\x0d\xa9\x11\x26\x9d\xc5\xa4\x33\x33\x5b\xc9\xbf\x26\xdd\x60\x10\x19\xb3\xcb\x62\x36\xfb\x5c\xb6\xe4\xd6\xfa\x55\xe1\x92\x20\x36\xe0\x32\xae\x08\x38\xe0\x18\x3b\x67\x77\xe9\x14\x5b\x49\x6b\x69\x59\xaa\x4d\x8f\x6b\x5d\x16\x56\xe0\x7c\x45\x7a\x9f\xd5\x6e\xd2\x1b\x7c\x01\xa7\x8e\x79\xd4\xef\x2e\x59\x10\xbd\xc6\x2f\xb2\xeb\xcb\x77\x37\x98\x4a\xcc\xe6\xec\x42\xab\xc5\x00\x6b\xb7\x30\x43\xae\xab\x5d\x50\xe2\xf6\xdb\x59\xd1\x7f\xcd\xbe\x62\x73\xc3\xee\x72\xde\x62\x5d\x30\xd0\x36\x70\xcb\x4a\xd6\x2c\xc2\xf4\xe5\x4c\x4c\xb9\x49\xb4\x0b\x3a\xc7\xce\x26\x8c\x77\x1e\xbe\x7a\xdd\xe1\xc3\xeb\xae\x26\x0a\xc6\xe0\x5d\x2f\x98\xc1\xc8\x0c\x1f\xfc\x2c\x3b\x6d\x9a\x08\x8c\x63\xd2\x04\xce\x82\x5f\x6b\xdc\xe0\xd6\xf1\x76\xeb\xed\x7e\xbc\x43\x36\xdd\xf4\x93\x4c\xed\xcb\x77\x9b\x9c\x98\x61\x00\x00\x0b\x30\xa3\x5c\x89\xf1\x3a\x53\x2d\xa7\xe3\x39\x06\x63\x00\xbd\xc3\x26\x1a\x19\x0c\xb6\xfa\x56\xbd\xae\xda\x64\xf2\x47\x78\x16\xe7\x77\x99\xad\xc3\xd6\x1b\x8b\x52\xcb\xd3\xa9\x71\x18\x37\x7d\xd4\x5a\xb7\xba\x39\xb9\x77\x1e\xab\x07\x1e\xdb\x45\xd9\x68\x32\x4e\x1c\x1c\x7a\xcb\xe9\xbc\xad\x36\x2c\x31\x8c\xd3\xd7\x94\x83\x9a\xf4\x20\x25\x08\xa3\xdb\x75\x36\xbd\xcb\x61\x67\x39\x56\xf7\xc2\x9c\xc6\x1b\xd3\xcb\x53\x45\xc6\x0d\x6d\x56\x73\x6d\x13\xc6\xe3\xb4\x31\xc3\x60\x3d\x70\xcf\xd3\x91\x79\x23\xe5\xf3\xbe\xc4\x4a\x01\x02\x5c\x11\x24\xe2\x01\x56\x15\x49\x42\x0b\x57\xcd\x08\x7c\xa4\x5a\xe0\xfe\xde\xb1\x77\xde\xbc\xbd\xf9\xb5\xf3\xf6\x76\x74\xec\xcd\xcf\xa8\x5f\xbe\xe7\xfa\x1f\xbd\x05\x31\xa8\xff\xc5\xbe\x9f\xdf\x39\xaf\x8a\x29\x1f\xb6\x62\xcb\xe8\x53\x0b\xfd\x73\x67\x77\xfc\x7f\xcc\xbd\x77\x7c\x14\xd7\xbd\x3e\x7c\xbe\x67\xda\xd6\xd9\xbe\x23\xad\xa4\xd5\xd6\x59\xd5\x95\xb4\x55\x42\xd2\x6a\x11\xa2\x4a\x80\xe8\x02\x21\x21\x9a\x11\xa2\x89\x66\x30\xc6\x66\x0d\xb8\x02\x36\xc6\x80\x2b\x46\x31\x76\xdc\xed\xe0\x9b\xb8\x17\xd9\x49\xdc\x62\x13\x3b\x71\x8f\x8b\x5c\x63\x92\xd8\x71\x7c\x63\xc7\x46\xda\xd1\xfb\x99\x33\x2b\x21\x04\x29\xbf\x7b\xef\x1f\xaf\x3e\xda\x3d\x65\xce\xcc\x9c\x39\x7b\xe6\xd4\xe7\xfb\x3c\x13\x44\xdd\xf4\x9b\xa4\xe3\x77\x49\xef\xbf\xff\xd4\xce\x8d\x0d\x0d\xee\xb2\x62\xf9\xa4\xc5\xe4\xd4\xc5\x4c\x45\xcd\xfc\xc6\x70\x81\xc0\x33\x1a\xc1\x55\x56\x39\x69\xc6\xf2\xd5\x63\x8f\x2c\x08\x6f\x5a\x74\xde\x8c\xe6\x9a\x70\xbe\x91\xc2\x46\x67\x24\x3c\xa5\x7a\x76\x7c\xc6\x10\xe6\x20\xa3\xcb\x95\x4f\x58\x41\x1b\xd1\x0a\xb4\x85\x28\x73\x8d\x54\x2a\x12\x7d\xa3\x68\x9a\x2d\x21\x9b\xc9\x5a\x0c\x9e\xa8\x29\x12\xa6\xc9\x64\x91\x1b\x5e\x4e\x08\x42\x34\x82\x5d\xb4\x79\xc8\xe6\xd9\x62\x53\x30\x77\x0a\xc9\x75\x1e\x0c\x87\x44\x17\x3b\x9a\x0b\x91\x2e\x94\x1e\x90\x5e\xf9\x68\xf7\xee\x8f\x20\x02\x33\x21\x22\xfb\xd2\x6b\xce\x66\x7a\xde\x60\x34\xba\x8c\x46\xb8\xb0\xab\xd1\x9b\x47\xa6\xf8\x79\xde\x19\x8a\x65\xf3\x90\xa9\xf4\xef\x48\xf4\xae\xc7\x77\x11\xf7\x84\xf4\xfe\x09\xaa\x43\x74\x0c\xa4\x86\x08\xd5\x99\xde\xdd\x1f\x49\xaf\x8c\xba\xdb\xaf\xce\xc1\x0b\x9d\x9e\x66\x94\xe4\x7b\xf5\x19\x93\x8d\x51\xef\x18\xd3\x06\xde\x6c\xe6\x37\x98\xc6\x78\xa3\x54\xe3\x28\xc3\x6c\xe9\x6b\x65\x39\xad\x6d\xd7\xae\x36\xc5\x77\xe0\xc4\x89\x81\xab\x31\x61\x45\x24\x54\xbd\x43\xf6\x64\x6a\x85\x57\x5e\x20\xe3\x3a\x79\x2e\x16\x36\x79\x47\x15\x45\x94\x8c\xa6\x6c\xa3\xa1\x55\x21\x3b\x97\xfa\x31\xc5\xa1\x54\xca\xcc\xff\x40\x40\xf0\x1c\xb1\x91\x6f\x8c\xb6\xd7\xff\xd0\x5b\xdf\xde\x5e\xcf\x25\xeb\xdb\xa3\x8d\x34\x92\xc7\xb2\xe9\x5e\x48\x29\x0b\xfa\x03\x8a\xed\x7b\x8f\x94\x8a\x36\xf6\xc8\xc9\x28\x92\xb8\xa7\x11\x8d\xca\x53\xce\x70\x9e\x32\xeb\x11\xa3\xb2\x60\xcb\x86\xb3\xb2\x6a\x02\xc4\x20\x4c\xec\x83\x46\xe6\x62\x54\x16\x29\x94\x46\xb8\xb7\x31\x3a\x2a\x0b\xe9\x8e\x33\xf3\x08\xae\xff\x8b\xfc\x50\x29\x1a\xfd\xff\x29\x3f\x18\x31\xff\x77\xe5\x83\x87\xf3\x23\xa0\xe2\xd3\x2b\x47\xff\x49\x4e\x54\xff\x3a\x17\xd4\x7f\x74\x7f\x40\x68\x90\xa1\x2f\x64\x11\xca\x25\x2c\x9e\xac\xd7\x6d\x19\x92\xca\x24\x8a\x26\x62\x46\xf9\x5d\xa0\xd7\x10\xf9\x8f\x9d\x2f\x69\xac\x59\xc7\xb3\xcb\xb5\xcf\x48\x2f\x5a\x1c\x3a\x5d\x41\x81\x4e\x97\x63\x86\xaf\x9c\x81\x02\xc9\x97\x5d\xae\x6d\xd4\x58\xb3\xe0\x57\xd2\x8b\x16\xc6\x54\xc4\xf4\x15\x99\x18\x8b\xc2\x5f\x4d\xa5\x58\x44\x34\x0a\x5c\x36\x53\xd8\xe6\x35\x59\xdd\x61\x9b\xd7\x15\x60\xdd\xde\x68\xd8\x15\x35\x79\xa3\x61\x53\x84\xf8\x85\x98\x3b\x6c\xa3\x92\x52\x6f\x2a\x05\xc9\x64\x52\xfa\xa6\xbb\x5b\xfa\x26\x99\x84\x64\x2a\x25\xf5\x26\x93\x60\xec\xee\x06\x63\x92\x49\xf5\x49\x1d\xa9\x74\x5f\x5f\xea\xc0\x81\x54\x1f\x76\xa5\xa0\x87\x78\x95\xe2\x1c\xb2\x6b\x18\x52\x7b\x28\x26\xac\x17\xd5\x64\xe5\xd4\x6b\x0a\x9b\x08\x10\xc9\x24\xbf\xa9\x6e\x9b\x3b\xea\x66\x6c\x44\x84\x39\x6a\x8a\x7a\x6d\xfe\x68\xd8\x44\x10\xad\xa6\xb0\xa2\xa7\x9b\x31\x58\x97\x5d\x62\xbf\x6e\x53\xa1\x54\x4a\x4a\xf5\x23\x29\x95\x4a\x41\x8a\x41\x90\x1a\x44\xa9\x1f\x51\x2a\xc5\xa2\x54\xaa\x5f\x71\x25\x04\xa9\x81\x94\x94\xa2\x52\x69\x84\x53\xe9\x14\x8d\x06\x91\x94\xa2\x53\x03\x99\xb3\x68\x04\x43\xfa\xb8\xa7\x90\xfc\x4d\x67\x34\x1f\x64\x5f\x1a\x91\x1a\x94\xc2\x72\x2d\x92\x4f\xc8\x70\xe7\x20\xb5\xfc\x4c\xf9\xc3\x6b\x44\xe1\x8c\x86\xc5\xbc\x33\x9f\xea\xcc\x67\x33\x79\x87\x9e\x10\x46\x3e\xa5\xd7\x16\xf6\xbb\x4f\x3f\x2a\x44\x89\x3a\xb5\x5c\xcf\xa2\xee\xcc\xa5\xc2\x36\x77\x54\x4d\x9e\x55\x7e\x92\x94\x94\x52\xb2\x4e\xa5\x40\x76\xc8\x53\xa7\x51\xea\x54\x2a\x95\x62\x52\xa9\x54\x7f\x8a\x4a\xa5\x52\x03\x8a\x2e\x85\x1c\x31\x74\x0a\x45\x68\x8c\x95\x73\xe5\x0f\x26\xae\x94\x11\x07\x26\xdf\xfd\x99\xa2\xc0\x64\xfb\x23\xad\x1c\x41\x78\xe8\x9e\x72\x01\x9c\x9e\x0b\x9a\x50\x16\x79\x6b\x47\xbc\x1d\x26\xb7\x87\x15\xdc\x72\xad\xe5\x68\x34\xd0\x51\x50\x59\x59\xc0\x24\x0b\x2a\x89\x44\x31\x5c\x64\x08\x3d\x1a\x9a\x09\x2e\xa9\x43\x89\xad\x2c\x18\xe8\xa8\x9c\x34\x33\xf4\x68\xc8\x80\x46\xda\xda\xb0\x44\x57\x19\x81\xd7\x16\xab\x83\x98\x7f\x68\xf5\x43\x6e\xbb\x0d\x70\xda\x1c\x8a\x58\x0a\x6d\xfd\x21\x4f\xf7\x98\x4e\xfa\x16\x5c\xfd\x88\x4a\x55\xc2\x8b\x05\xb9\x8f\xe6\x76\x14\x0c\xa0\xa1\x5b\x03\xfa\x41\xa3\x7b\x4c\x77\x84\x4a\xf5\x23\x70\x15\x54\x52\x3d\x03\xa8\xa0\x23\xf7\xd1\xdc\x82\x4c\x26\x86\x34\x9d\x86\xf8\xb3\xb2\x50\x00\x8d\x45\xb3\xd1\x32\x62\x75\x39\x4c\x48\x18\x1b\xf6\xdb\xc3\x76\x86\x88\xa5\x78\x3d\x01\x9b\x13\xf2\xc1\xe5\x8f\xb2\x1c\x2b\x46\xc8\x7c\x31\x08\x65\x20\x12\x4b\xe6\x38\x31\x5d\x8b\x2a\x8a\xdb\x1e\xd1\xeb\x36\xb9\xcf\x36\x75\xe2\x8e\xe6\x0b\x2a\xcd\x8d\x37\x6a\x54\x82\xde\x29\x50\xba\x3d\x7b\x28\x2d\x08\xfd\x2b\x3f\x6b\x1a\xb7\xfa\x82\xe8\x15\x85\x45\x30\x09\xbf\xbc\x74\xf9\xea\x6d\xdb\x56\x2f\x5f\x5a\xde\x99\x9b\xbb\xe3\x91\x25\x25\x25\x4b\x1e\xd9\xb1\x9c\x9a\x3c\xb7\xbe\x2a\x39\xb3\x9e\x32\x33\x52\x15\xfc\x79\xca\xa2\x33\x29\x8a\x22\x11\x3f\x83\xf7\x62\xe6\xc1\x90\x87\x86\x4b\x80\xee\x83\x88\xf4\xca\x98\xc9\xd5\xdd\x06\x23\x80\x7b\x7d\x84\x53\x2d\x79\x7c\x89\x8a\x0b\x77\xeb\x0c\x18\xb3\x05\xcd\x1d\x9b\x3a\x9a\x0b\x58\xfa\xea\xd8\x78\x86\x52\x8d\x0b\xc6\xeb\x29\x90\xf0\x64\x2a\x76\x06\xff\x10\x33\x5c\x4e\x0c\xd2\x22\x07\x0a\xa2\x84\x5c\x03\x78\xb0\xda\x7d\x11\x31\x60\x8a\x21\xa2\x7c\x16\x24\xd2\x9d\x2e\x1a\x88\x21\x37\xb1\x50\x35\xd3\x61\x77\x28\x81\xcf\xb2\x9a\x5a\xd0\xb5\x7b\x37\x5e\xb2\xbb\xab\x0b\x5a\x8f\x48\xdf\x1e\xdd\xf2\xee\x91\xb6\x23\xc0\x43\x02\x78\x9c\xbb\xee\xd1\xff\xde\x25\xfd\xfe\x67\xd2\xbb\x0f\x3e\x00\x45\x0f\x40\xe9\x25\xdf\x3d\xba\x0e\x5a\x46\x3e\x25\x04\xf0\x2f\x0a\x9f\xfa\xd3\x53\x4f\xfd\xe9\xa9\xc2\xf4\x94\x42\x78\x5d\x7a\x4e\xfa\xf6\x48\xdb\x91\x77\xb7\x1c\x05\xfe\xc8\x11\xa9\x69\xcf\x77\x3f\xed\xb8\x4d\x7a\xeb\xf1\x7b\xa5\x3f\xdc\xb3\xfc\xee\xbf\x50\xec\x99\x3c\x58\xd4\x19\x63\xb5\x6a\x84\x98\x51\x6d\xfb\x59\xfc\xd1\x36\xef\x69\x03\x36\x3b\xe1\xed\x3b\xcd\x4d\x95\xb2\xe8\xfb\x7b\xf5\x16\x8b\x9e\x4e\xea\x2d\xa9\xf6\xfa\x7e\xd2\xd4\xd3\xc9\xfa\x76\x29\x35\x7c\xac\xa7\x67\x28\xb2\x43\x4e\x96\x89\xa6\xa7\x9e\x4e\xdc\x0e\x89\x9e\x9e\xa1\x23\xa9\x4c\x5c\x46\xef\x55\x25\xb7\xdd\x18\x31\x28\x8a\x6a\xd1\x1c\xb4\x06\x21\x35\xb8\xd5\xe0\x06\x1e\x38\xd3\xf0\xfa\xef\xf0\xaa\x6f\x10\x02\xc3\x01\xc2\x32\x3e\x94\x84\x1e\x5a\xd3\x52\x76\x5c\x08\xb0\x30\x16\x12\x9c\x34\x33\x3a\x82\xed\x95\x52\x14\xfa\x51\x6e\x41\x11\xfc\x82\xaf\x2b\xc0\x64\x14\x76\x8a\xf4\x6e\xb8\xa3\xa0\x8e\x97\x6c\xa4\x07\xfb\xb3\x6d\xc9\xf6\x25\x36\xf8\x33\xd9\x3e\xac\xab\x2f\x2b\xab\x2f\xa3\xf7\xb7\x5d\x7d\xdd\xee\xeb\xae\x6e\x9b\xb0\x61\x59\x27\x6d\x6e\x32\xd3\x9d\xcb\x36\x4c\xe8\x47\xe7\x8a\xa5\x93\xe9\x24\xee\x4d\x27\xa9\x54\x41\x1d\x7f\xea\xbb\xd3\xf4\x44\x8c\x96\xaf\x2b\x20\xbe\xaa\x89\x13\xab\x88\xc7\x58\x26\x5f\x7e\x60\xf1\xe4\x4d\xf5\x6e\x77\xfd\xa6\xc9\xda\xbd\xaf\x3f\xfc\x38\xe7\x76\x73\x8f\x3f\xfc\xfa\x5e\xed\x39\x63\x47\xae\x71\x96\xa2\xa9\x08\x81\x11\x73\x76\xf3\x10\xe4\xe1\xb4\x04\x97\xd1\x1c\x17\xb1\x69\xc4\x26\x3e\x39\x0c\x09\x2a\xea\xb6\x3a\xb1\xe0\x04\x2b\xcb\xf1\x94\xcd\x1d\x09\xe2\x40\x10\x22\x31\x26\xf5\x66\x4f\xcf\x9b\x4a\x99\x90\x2c\x77\x0c\x87\x19\xc5\x9e\xf2\xaa\xa9\xfb\x37\x4e\x18\x40\x13\x36\xee\x9f\x6a\x11\x04\x8b\x1c\xa2\x87\x42\x4c\x4a\xea\x97\xd6\x75\x75\x49\xeb\xa4\xfe\x11\xec\x4c\x0c\x5c\xdb\xd5\x05\xd7\x02\x33\x82\xa5\xa9\x26\x6f\xc7\x43\xdf\xee\xde\xfd\xed\x43\x3b\xf2\x38\x77\x81\x9b\x3b\x33\x38\x72\x6d\xb5\x94\xf4\x47\xff\x6f\x4f\x58\x0c\x6e\xab\xe0\x8e\x99\xe4\xc7\xf2\xf2\x94\xed\xdf\x3e\x56\xdf\x00\x52\x53\x5f\xab\x1b\xd6\xef\x6d\xfa\xa2\x69\xef\xfa\x86\xff\xfc\x49\xea\x13\xb5\xa7\xc6\xed\xfc\xeb\xf1\x1d\xf9\xf9\x3b\x8e\xff\x75\xe7\x99\xeb\xc2\x72\xde\xab\xff\x67\x79\xa7\x82\x10\xf0\xf2\xc0\xfd\x27\x59\x9f\x43\xcd\x9d\x53\x15\x7b\x64\xc5\x17\x2b\x1e\x89\xfd\xe7\x39\x3f\xf1\xd0\x43\x03\xfc\xbe\x97\x8a\x8a\x5e\xda\x77\x66\x7d\x9a\xf8\xbf\xab\x4f\x2c\xe7\x16\xff\x67\x95\xe9\xca\x55\xf8\xc9\x55\x57\xfe\xef\x2a\x52\xf8\xda\x6b\xc3\x4a\x15\x1a\xf1\x3b\x18\x50\x15\x9a\x8c\x10\x33\xaa\x49\x89\x27\x54\xf1\xa0\x2a\xe0\xe6\x55\x9c\x53\x25\x58\x46\x1d\x65\xfa\x4e\xe7\x7c\x09\xe5\xf0\x8c\xa9\x68\x8e\xcc\x2f\x29\x2e\x2e\x99\x1f\x69\xae\x18\xe3\x71\x50\xf4\xc0\xb9\x62\x97\x9c\x3e\x2b\x69\xe6\x89\x65\x72\x8a\x37\x27\xe3\x9d\x73\x5b\x92\x8d\xa5\x63\x9d\xb9\xb9\xce\xb1\xa5\x8d\xc9\x96\xb9\x9d\xf1\x73\xc5\xb1\xe8\xf4\x49\x23\xb0\x13\x08\x8d\x45\x5d\x08\x11\xab\x64\x6f\x46\x52\xdd\x14\x50\x3c\x79\x60\x15\xc0\x6e\x53\xda\xf8\x5a\x88\xc4\x2d\xb1\x0c\xe1\x98\x92\x36\x30\xd2\x1b\x08\x11\x2d\x70\xf2\x95\x07\x56\x42\xd2\xa5\x74\x0a\xa0\x3c\x76\x48\x50\xcc\xf8\x28\x14\x6d\x74\x25\xcb\x83\xf5\xe4\xcb\x0b\xb1\x80\xe8\xc0\x29\x87\xa8\x59\xad\x21\xb1\xa1\x00\xaf\x0e\xd6\xbb\xc6\x86\x18\xd5\xec\xb1\x55\xf5\xd5\x9d\x9e\x1c\xd7\xb2\xbd\xfa\x35\x6c\x77\x73\x3a\x35\x7b\xb5\xf4\x4a\xd3\xbe\xa5\x5a\x86\xdd\xb3\x28\x12\x9c\x44\xa7\x1a\xa3\xa9\xb6\xf2\x71\xf5\x41\x69\x96\xf3\x3e\xd9\xed\x2b\xf3\x4a\xef\x04\xea\xe4\x69\x6f\x76\xa1\x0f\x7e\xee\x2b\xfc\x5e\x8e\x76\x5d\x54\x30\x56\x85\xeb\x83\xa9\x6d\xe1\xa9\x0c\xa4\x42\x9e\x58\x05\x77\xcd\xb2\xef\xc3\x55\x52\x53\x56\x59\x73\xf7\xe6\xd9\x50\x30\xf9\xbc\xbe\xa5\xfb\x60\xd1\x4e\xdb\xf8\xd3\x7b\x3d\x1d\x2c\x42\x15\xa8\x05\x21\x24\x17\x8b\x57\xb1\x05\xc9\x86\x21\x12\x46\x20\x25\x13\xb7\xc4\xa2\x19\x2b\x11\xef\x08\x77\xb8\x2c\x62\xf2\x14\x89\xa3\x94\x21\x59\x00\x32\x56\x7f\xca\x36\x45\x8c\xba\x75\x61\xbd\xab\x7e\x61\xfd\x4d\x62\x32\xda\xe8\x80\x94\x98\xc4\x3f\xf3\xc4\xb8\x26\xa6\x5e\x89\x77\xfd\xfc\x8a\x8d\xf9\x16\x61\xe9\xbe\x95\xd7\xab\x9a\xf8\x8b\x66\xa4\x9b\x6b\xd6\xf8\xa4\x54\xf8\x70\xd7\xb4\xd0\xbe\xa5\x82\x25\x9f\x49\xd5\x07\xd3\xdd\xd8\x18\xac\xaf\x0f\xa6\xbf\x19\x44\xaf\x86\x1b\xa3\xc5\x1e\x09\x85\x4b\x3c\x70\xc8\x95\x03\xdf\x12\xbb\xd1\x6f\x86\x12\xe0\xfd\xc1\xe7\x26\xd6\xd2\xfb\x96\x9a\xd8\xbd\x2b\x25\xbe\xa0\x58\x5a\x3d\xbd\x33\x5e\x86\x51\xc3\xdc\xae\xc3\x1e\x78\x68\xe9\x3e\xba\x76\x98\x83\x8f\xec\xf5\x8a\x28\x8a\xa6\xa0\x25\x68\x17\x42\x8c\x3c\xbf\x52\x96\x59\xe2\x6e\x05\x32\x3e\xcc\x34\xcd\x64\xe0\x4a\x1c\xc3\x52\xf2\xf8\x53\xa1\x2f\xf2\x07\x21\x4a\xaa\x0c\xc7\x10\x8e\x5e\x39\x2a\x01\x94\x7f\x88\x96\x9a\xb1\x65\x38\x47\xe2\xd1\x48\x1d\x50\xe4\xa8\x62\xe3\xcf\x65\xb4\x2b\x6a\x21\x4c\x4c\x23\x6d\xf2\xa5\xe9\x8a\xe3\xc7\xea\x84\xc4\x64\x46\xea\xef\x3a\x7c\xb8\x6b\x7d\xc9\x94\xd6\xc3\x5d\xc1\x52\xbc\x09\xae\xed\x3a\xbc\x7a\xae\x74\xff\xc2\x6b\x6e\x3e\xe6\xf4\xd5\x07\x1d\x56\x98\x59\x51\x07\x49\xd9\x27\x7d\x98\x6b\x2e\x36\x1a\xeb\x42\x56\x33\x74\x38\x7d\x5f\xa6\xcf\xcf\xb2\x47\x1b\x4b\xfd\x98\x4f\x93\x19\x29\x16\x4e\x06\xd7\xad\x9e\x39\x19\x66\x15\xc7\x1a\xa3\xd2\x2b\x57\xf8\xe4\x72\xaf\x8a\x8c\x0f\x8a\xd2\xcb\xa9\x7d\x15\x51\xc6\xb9\x79\xbc\xa8\x39\xfc\xc6\x61\x53\xee\xae\xe6\xae\xc3\xa6\xbf\x1e\xee\x4a\x2f\x6b\xd9\x63\x9b\x23\xe0\x17\x26\x4e\xe1\xe3\xee\x60\xbd\xe6\x26\x4d\x73\x68\x10\x05\xeb\x35\xbb\xf5\x2a\x87\xcd\x6f\x0f\x25\xd5\x3d\x7c\x9c\x32\xfd\xa0\x6a\x8c\x16\xd4\xf3\x2f\x26\x1b\xbb\x1a\xbb\x9e\xaf\x2b\x3e\x6f\x00\x59\xe6\x68\xc7\x97\xe0\x5b\xa2\x8d\x17\xbb\x2b\xa4\x77\x82\x89\x09\xc1\xd7\x5e\x9b\x50\xa2\x9a\x11\x2d\x9a\x64\xda\x37\x5c\xf7\xc8\x7c\xd0\x47\xf8\xf1\x42\x76\xf9\x35\x1c\x96\xc0\xf4\x0f\x0f\x56\xe4\x1f\x21\xa0\xf8\xc1\x14\x09\x80\x32\xe4\xb2\x3a\x41\x7e\xd5\xdc\x36\x77\x86\x35\x29\xec\x26\xa8\x8a\xcc\xac\x40\x7e\xad\xe5\x7a\x2b\x30\x4e\xc8\x78\x63\xf4\x8e\xda\xb5\x3e\x5c\x73\x7e\x77\xb3\x94\x6a\xee\x96\x3e\x49\x7f\xd8\xdc\x7d\xf7\x16\xb8\xbd\x28\x3d\x73\xd9\x75\xaa\xb1\xdd\xcd\x6c\x6f\x5b\xfa\x97\x81\xe4\xc0\x58\x87\x48\x19\x4d\x9a\x70\x3e\x95\x1c\xe8\x75\x88\x94\x6a\x52\x29\x4e\xb5\x16\x54\x32\x49\x4d\x28\x5f\x1a\x5f\xdf\x2e\x3a\x70\x85\x51\x0f\xb5\x59\x79\xa2\x03\x52\x0e\x91\x45\x95\x15\x03\xff\x7d\xf4\x45\xe9\x48\x73\x77\x77\xf3\xf1\x6b\xba\x9b\x5d\x5b\xee\x4e\x5d\xbe\x74\xfa\x0a\x57\x73\xf7\x8f\xbd\xb0\xf4\xc8\x0e\x4a\x1f\x11\x1d\x2e\x6f\xd0\x9a\x2f\xba\x44\x47\x09\x5f\x32\xa6\xb2\xc0\x60\xe8\xcd\xf3\xb7\xd7\xbb\x1c\x22\x77\xab\x3e\x98\xf3\x6b\xb2\x80\xa5\x70\xe2\xc9\x63\xbb\x10\xda\x24\xb7\x59\x62\x80\x12\xa3\x11\xf2\x15\xcb\x50\xbc\xe5\x40\x86\xea\x0d\x6c\x56\x8e\xca\x50\x92\xb0\x1c\xb0\x5e\xca\xc3\x72\x94\x97\x1a\x22\x93\xb2\x8c\xf0\x3a\x41\xfe\x84\xdd\xa1\x38\x28\x86\x7a\x1c\x13\x8d\x38\x20\x3e\x44\x76\x42\x79\x2d\xb2\x17\x7e\x33\xf5\x02\xcb\x72\x3d\xb3\x89\xdb\xde\x66\xda\x35\x6f\xd6\x4e\xeb\xac\x15\xd6\x9d\xb3\xe6\x5f\xca\x2f\xdc\xca\x5d\xa8\x89\xdb\xcb\x3d\x15\xd9\x2b\x0f\x57\x85\x24\xa6\x61\x4e\x85\x58\xab\xbe\x7d\xc7\xb5\xea\x5a\xb1\x3c\x49\xed\x76\x2c\x55\x27\xc4\xb2\x7a\x6a\x13\x47\xab\x96\xa9\x22\x6e\xfc\x70\x91\x07\xfa\x2b\x1b\x23\xc5\x1e\xe9\xd5\xe4\x24\x8a\x4e\x96\x05\x6a\xd5\x9b\x1c\x87\xa9\xba\x41\xb4\xa8\x11\xae\xad\x0a\x97\xda\xe1\x83\x1c\x67\xdb\x15\x9a\x39\xab\x57\xcc\x90\x6e\x87\xfb\x66\xac\xd8\x38\x4f\x73\x55\x5b\x96\x57\x42\x5c\xb1\xd1\xa9\xd5\x1e\x5c\x99\xe8\x16\xa5\xdd\x61\x36\x55\x2e\xa6\xe7\xe2\x05\x62\x79\x7d\x99\x41\x9f\xfe\x00\x6e\xf0\x87\xeb\x83\xbc\x4e\xf2\xe4\x6e\x72\x4a\xeb\x5c\x85\x0e\xb8\xb0\x78\x5c\x64\xb2\xe3\x8b\x4f\x69\xd0\x41\x81\xde\xac\x2d\x6b\x28\x17\x25\x27\xee\xe6\xf9\xf2\x86\xcc\x9e\xaf\x5c\xae\x61\xc2\x40\xb2\x94\x30\x71\x9d\xbb\xa5\xab\x55\x44\xc6\xbd\xd1\x11\xfd\x80\xe2\x31\x45\xc4\x00\x69\xee\xc2\xa4\x27\x38\xdd\x11\x9c\xdd\xf0\x59\x32\x2a\x53\xf2\x07\xa7\xa2\x8d\xd7\x17\xd6\x47\xa6\x28\x8d\xdf\x09\xbb\x97\x59\x98\x55\xd9\x5c\xa9\x74\x11\x53\x62\xd1\x46\xd7\x94\xd8\xaa\x43\x76\xcd\xd2\x29\x65\x91\xf5\x13\x73\xf2\xda\x77\xe6\x2e\x34\x76\xd6\xa7\x43\x4a\x43\x78\x68\xe5\xc4\xea\xc3\x7f\x72\x81\x4b\xfe\x67\x52\x8d\x51\x09\x49\xa9\x97\x63\x4d\x11\xd2\x08\xe6\xd8\xa0\xbb\x63\xc9\xbb\x85\x35\x95\x05\xb5\x72\x3f\x90\x5c\x10\x9f\xde\x18\xed\xc0\x63\xe2\xd3\x53\x37\xaf\x7a\x1f\x8f\xb7\xcd\xe3\x2e\x6f\x7f\x77\xd3\x1a\x69\x7f\x72\x86\xd2\x0c\xae\xbc\xde\x8b\xbd\x5d\x87\x4f\x65\xec\xd0\x94\xcf\x88\x7d\x71\x3f\x51\xb1\x5d\x8c\x76\x12\xa5\x95\x91\x8f\x18\x35\x51\x19\x08\x53\x3e\x28\x5c\xab\x26\x39\xc0\x79\x58\x03\xa1\x22\x24\x95\x48\xf0\xf0\x54\x86\xc1\x52\xe9\x3a\x22\x22\x58\x05\x8b\x2d\x1e\xab\x86\xf8\x50\xf7\xa1\x54\x4d\xc8\x94\x38\x45\x58\x5f\x02\xca\xbc\x3a\x46\x26\x56\x06\x90\xa7\x5e\x8c\xaa\xa6\x6c\x9f\x30\xc7\xb6\xa7\x25\xbd\xac\xeb\xf0\x5f\x4d\x87\xbb\x9a\x77\xe5\x9a\x0e\xbf\x71\x38\xc7\x36\x7e\xf3\xe3\xee\x38\x3f\x65\x62\x3c\xd4\xac\xb9\x49\x53\xff\xa0\xdd\x6f\x73\xa8\xf4\xbb\x35\xf5\x41\x77\x9c\xef\x51\x27\xfb\xc7\xaa\x7e\x38\xaf\xb8\xee\xf9\xae\xc6\xae\xc6\xe4\x8b\x7c\x7d\x41\xb4\x91\xce\x2d\x19\xaf\x9d\x63\xd9\x67\x9a\x54\x14\x9d\xa1\x2a\x99\xf0\xda\x6b\xc1\x09\x89\xa0\xf4\x4e\x85\xfb\xe2\xc6\x28\x75\x81\x50\x77\xec\x78\xfb\x42\xe9\xfe\xb9\xab\x0f\x77\xc1\xb5\x78\x53\x69\xb0\xeb\x70\xeb\x94\x92\xf5\x72\x43\x2c\xf5\x33\x93\xe3\x3e\xe7\xb1\x9b\xeb\x2a\x60\xa6\xd5\x11\xac\xbf\xdc\x68\x2c\x36\xe7\x4a\x1f\xca\x7e\x9f\x13\x3a\xcc\xd6\x50\x1d\xac\xb0\x67\xa5\xcf\x1f\xbf\x2e\x78\x12\x0b\x72\xbb\x9b\x4e\x61\xde\x5f\xda\x78\xea\xcf\xb1\x62\x98\x35\x79\x66\xab\xf4\xb2\x18\x1c\x1f\xa9\x92\x7b\x3d\xdf\x15\xd2\x2b\xd1\xc6\x61\x1e\x18\xee\xe7\x34\x42\xd9\x64\xfc\x68\x3b\x37\x72\x27\x64\x67\x2c\x76\x8e\xc4\x06\xb4\x20\xbb\x01\x2d\x10\x61\x9f\x80\x18\xb5\x28\xc4\xa1\x16\xb2\x29\x6d\x51\x38\x61\xe6\x5b\xf4\xd2\x5b\x66\xfd\xe5\x7a\x8b\xf4\xb6\xde\x62\xe6\xa9\x6c\xbd\x85\xe6\xa7\x82\x5a\xa3\xbf\x4c\x67\x86\xe0\x53\x2a\xdb\x56\xab\xfa\xc9\x52\x30\xeb\x2e\xd7\x6b\xd4\xd3\xc0\xac\xbb\xda\xaa\x7e\x5f\xa3\xa1\xf4\xf4\x07\x6a\xeb\x3e\xbd\x99\xea\xdb\xac\x37\x0f\xbc\x41\x4e\x2e\x31\xeb\x37\xf3\x66\x8b\x66\xa0\x4e\xaf\xd5\x98\x74\xb8\x49\x9a\x67\xb1\xc0\xbd\xe9\x87\x74\x26\x8d\x86\xa7\x9e\xd5\x99\x2c\xe9\x1f\xb2\x72\x38\xaf\x1a\xab\x2c\xa6\x21\x0c\x83\x32\xa7\x56\xa3\x22\x34\x46\xb1\x43\x08\x28\x32\x0e\x31\x21\xf3\x2c\x01\xca\x7b\x26\xd5\x8d\x02\x26\xe3\xec\x78\xd4\x26\x09\x1a\xb1\x41\xe2\x73\xd1\x76\xda\x5c\xe3\x9e\x7d\xe1\x6d\xf5\x93\x22\xaf\xaa\xd4\x2a\xcb\x0d\x56\xd5\x73\x37\x9b\x79\x05\x07\x2d\xa6\x12\x73\x96\xcc\x99\xcc\x96\x4a\x6f\x48\xdf\xfc\x7a\xf3\xe6\x5f\x83\x11\x4a\xc0\x48\x7c\xef\x9d\x63\x17\x82\x1a\xdb\xe2\x36\x4b\x7f\x9c\xf2\xae\xb4\xc7\xc4\x1b\x4d\xb0\x46\xba\x4d\xbe\x0e\xd5\xcb\x9b\xb3\xf2\x6f\x39\x6f\xe1\x75\x3e\x0d\x15\xdb\xfc\x6b\xe9\x9b\x51\xd7\x93\x1a\x47\x5d\xe8\xea\xab\xbf\x19\xf9\xdc\xa5\xa8\x55\x51\xba\x82\x50\x3c\x56\x06\x62\x40\x34\x00\xcf\x0c\xd3\x1b\xe5\x83\x3d\x1e\xab\x83\x58\x20\x48\x2b\x63\x05\xf7\x7f\x96\xec\xac\xa2\x19\xb5\x7f\x84\xdb\x6e\xec\xe4\xb5\xa5\xac\xd9\xa8\xa5\x69\x83\x35\xc7\xe9\xb7\x34\x2d\xe9\x98\xe2\x1f\x6f\x34\x6a\x0d\x46\x55\x54\x6f\xa0\x8c\x25\xd1\x99\xa5\x07\x7f\xf5\x1c\xa5\xbb\xb1\x93\xd7\x94\xaa\x4c\xff\x26\xe9\x75\xbf\x7e\x2e\x70\x76\x61\xa6\x6f\x3f\x7b\xf3\x08\xca\x3a\xcd\xe6\x99\x7a\x1a\xeb\x29\x5a\x67\xe0\x75\xdc\xb2\xa9\x4d\x4b\x73\x79\x5e\x0b\x58\x37\xcd\x6a\xa1\x8d\xf9\xd9\xd6\x67\xf7\x1f\x78\x46\x4e\xc5\x53\xff\x2e\x15\x5d\x71\x8e\x62\x07\xdb\x39\x7e\x43\xf9\x3d\x4a\x0e\xf6\x71\xbd\x8c\x8b\x60\x4a\x90\x9a\x16\xb8\x80\x1a\xe2\x6a\x2a\x10\x17\xd4\xc0\x01\x07\xb8\x4f\x6e\xe8\xd2\x1d\xb8\xe7\xae\x8e\x49\x92\x0b\xfa\x9e\x95\x3e\xc2\x3d\xb8\x27\xdd\x71\x57\xc7\x24\xe8\x93\x5c\xcf\x82\xbb\x43\x4a\xe1\x3e\x29\x25\xa5\xe4\x03\x24\x99\x1c\x9d\x2f\x27\xca\x24\x93\x4f\xfb\xb8\x03\x52\xe8\x8c\x75\x23\xf9\x9e\x01\x84\xfc\x6a\xe0\x04\x4e\x0d\x42\x3c\xa0\x66\xe2\x81\xb8\x1a\x02\xdc\xe8\xaa\x8b\x5f\x05\x83\x74\xb2\xa5\xb7\x43\x3a\x09\x42\xc1\xbc\x1d\xd2\x18\xaa\x04\x9e\x97\xc6\x48\x7f\x03\xa1\xa5\xb7\x03\x04\xe9\x64\xc1\x3c\xaa\xe9\x1c\x0f\xf9\x30\x18\x40\x68\x79\xa6\x03\x04\xf9\xc4\x94\x34\x46\xaa\x87\xe7\xe1\x79\xe9\x6f\xd2\xc9\x96\x67\x3a\xa4\x93\xd2\xc9\x82\x16\xf8\xf1\x1c\x95\x52\x83\xd0\xe0\xfb\x6a\xc4\xf8\x90\x16\x59\x50\x6e\x46\x65\x73\x3c\x9a\x85\x5a\x51\xea\x4c\x55\x80\xa1\x5d\x55\x26\x03\x2f\x8b\x11\x11\x61\xa2\x95\x42\x52\xc9\xad\xbe\x2f\xe3\x0b\x2b\x30\x7b\x1e\x08\x01\x1b\x88\x6e\x17\x17\x72\x62\x5b\x24\x81\x87\x90\xbc\x16\x37\x4f\xe0\xe9\x98\x26\xed\x3b\x17\x04\xc2\x63\xe9\xc3\x51\x02\x9b\x71\x13\xf1\x73\xbc\x27\x2e\x06\xe2\xf1\x80\x18\xa7\x77\xc6\xa7\xc5\xe3\xd3\x06\x02\xeb\x7b\xd6\xaf\xef\x59\x4f\x5f\xb2\xbe\x79\xfa\x86\xf5\x3d\x03\xe3\x8f\x6d\xdc\x74\xec\xf6\x2f\x8e\xd1\x3b\x8f\x6d\xda\x78\xec\xd8\xc6\x4d\x03\x1f\x49\x7f\x7b\xe6\xa2\x37\xb6\x6f\x7f\xe3\xa2\x67\xa8\x7b\x25\xe9\x77\xd2\xb3\xd2\xe6\x37\x6e\x6c\x9d\x77\xe8\x04\x9e\x21\x7d\x2b\xed\x94\xfe\x06\x06\xb8\x98\x86\x1d\x25\x09\xf5\xda\x9b\xa4\x1f\x6e\xbe\xf4\xcb\xe6\xb2\x99\xda\x39\xae\xe6\x93\x97\xde\x2c\xfd\x70\xd3\x5a\x75\xa2\x04\xd6\x1c\x82\x5b\x3e\xe9\x83\xab\x70\x8e\x72\xfb\x38\x96\xef\x1e\x6b\x97\xef\xb9\x7e\x3d\x90\x3c\xf4\x92\x1b\x1f\x83\x2f\x8e\x1d\xfb\xe2\x98\x54\x00\x17\x83\x61\xfb\x9b\xa7\xde\xdc\x4e\x6b\xd7\xad\x6d\xbd\xe9\x8d\xcd\x1b\x5f\xbf\xa1\x3d\xcd\xc9\xd1\xd2\xdf\xe4\xdb\xd2\x74\x78\x47\xf8\xfa\xc7\x6f\x91\x7e\xb8\xb1\x7b\x69\xe5\x85\xf6\x0b\xfc\x4b\xd7\xdf\x08\xaa\x5b\x1e\xbf\x3e\xbc\x23\xbc\x6c\x7d\x37\xa2\xd0\x79\x83\x88\xbe\x89\xb4\x8b\x16\xd4\x84\x10\x21\x6b\x44\x2e\x64\xb3\x9e\x06\xe7\x80\x13\x78\xcc\xb1\x9c\x90\x01\xbf\x07\xc4\x40\x06\x5c\x1e\x87\xb8\x18\x08\x52\x0a\x0e\xc9\x49\x87\x43\x44\x5c\xcc\x09\x54\x8d\x74\x85\xf4\x3d\x68\x60\x2b\x68\xa4\xc3\x8f\xee\xda\xf5\xe8\x2e\x28\xd1\xd3\xfa\x82\xd2\xc0\xc6\x17\x27\x83\xd6\xe9\xd4\xe5\xcf\xcd\x1f\xf7\xa2\xf4\x5d\xfe\x5c\xa7\x2e\x3f\x1f\xb4\x93\x7e\xb3\x21\x50\x5a\xa0\xa7\xf5\x1a\x5f\x79\xd2\xcd\x58\xeb\x27\x75\x57\xb5\xfe\xd4\x2f\xba\x93\xe5\x3e\xbc\x19\x34\x4f\x3c\x09\x1a\xe9\xfb\x27\x9f\x80\x9b\x77\xb5\x2d\xdc\xb5\x6b\x61\x5b\xfa\xce\x9c\x52\x5f\xa1\x3b\x7b\xb2\x6d\x12\xb9\x8a\xde\xe9\x6c\x78\x51\xfa\xbb\xd3\xa9\x77\xce\x95\xaf\x67\x9b\x9c\xed\x2e\xf4\x95\xe6\x58\x9d\xbc\xd9\x41\xf3\x5e\x87\x3d\x9c\x9d\xed\x30\xf3\xce\x11\xfc\x61\x1c\x8a\xa1\x04\x41\xab\x0e\xed\xda\x07\x81\xe5\x78\xec\x11\xcb\x88\x8f\xb5\x0b\x76\x81\x63\x39\xd6\x9a\x0f\xf6\x50\x1d\xd8\x05\xf9\x3b\x16\x29\xc3\xf2\xf8\x17\x1b\x45\x17\x6b\xb4\xbb\xce\x5a\x3e\x3e\xda\xb6\xbb\xad\x6d\x37\x84\x35\xbe\xea\x7c\x8d\xb8\x7d\xe7\xf9\x39\x39\xf9\xd5\x3e\x8d\xbd\x60\xdc\xac\x6b\xc2\x57\x57\xd8\xed\x6a\x7b\xad\xfd\x99\x0d\x53\xed\xb5\x76\xb5\xdd\xfe\x4c\x64\xdf\xec\x71\x05\x13\x9f\x96\xfe\xfe\xf4\xd3\xa0\xc3\xdb\x46\x52\x9d\x52\x92\x7c\xa5\xb6\xf4\xf7\xd6\x2c\x26\x5b\x95\x55\xe0\x33\x9b\xb3\x99\x2c\x6b\x69\x75\x49\x94\x8f\x5c\x5d\x9e\xb9\xc0\xc6\x26\xe5\x92\x4f\x47\xf8\x68\x49\x35\x98\x41\xf7\xb4\x7c\x35\xf8\xf2\x4c\x7e\x53\x65\x0d\xe2\x51\x26\x85\xcc\x8a\x6e\x9d\x3c\xc9\x21\x48\x68\x9f\x88\x33\xe2\xe5\xc3\x23\x72\x35\x0c\x0f\x45\xd9\xbc\xb1\x0b\xae\xf8\x5c\x7a\xf6\xc1\x9f\x49\xcf\x7e\x71\xc5\xc2\x24\x7e\xb6\xcc\x0b\x07\xfd\xe3\x2b\xca\xbc\xd2\x53\xd2\x53\xde\x60\xc5\x78\x1f\x1c\x72\x33\xa9\xd6\xb1\xe9\x1f\x7f\x26\xf5\x7e\x71\xf9\xe5\x5f\x40\xf2\x67\x98\x4b\x2e\xec\x7f\xc7\x0d\xbb\xbd\xa1\x8a\xf1\x6e\xe9\x65\x88\xb9\xc7\x57\x84\x3d\xd2\x76\x77\x06\xa3\x7e\x83\x1a\x31\x2b\xe4\x3a\xc7\x00\x8b\x38\x56\x8c\x8a\x28\x10\xc4\xde\x88\x18\x75\xdb\x78\x2c\xd8\x91\x10\x33\xc7\x45\x1c\x10\x03\x51\xc6\xa6\x00\xb8\x08\xbc\x2e\x16\x89\x86\x12\x10\xb6\xf1\xc0\x51\x76\xb3\x00\x41\x1c\x88\x32\xf2\xcf\x84\x38\xe6\x2d\xe9\xdd\x6c\xe9\xbb\xb1\x10\x9d\x29\xdd\x31\xd7\xd6\xba\xa9\x04\xf0\xc4\xc0\x8c\x88\xd1\x01\x17\x95\xe6\xbf\x67\xb7\xbc\x95\x27\x1e\xc3\x50\x33\xce\xe6\x5e\xed\x5a\x5b\x97\xd5\xb0\x08\x92\x6f\x5e\x67\x49\x6c\x70\xbf\xa9\xff\x9c\x83\xc7\xf8\x89\xd5\x0e\x78\x05\x60\x4f\x22\xfd\xad\x7b\x05\x7e\xa4\x22\x3d\x78\x29\x00\x3c\x4b\x59\x5f\x0e\x6d\x9c\xcb\x88\xaa\x10\xce\x1d\xe3\xad\x1e\xd8\xbf\xac\x16\x6e\x2e\x0a\xc0\x67\xd1\xf1\x38\x04\x65\x38\x18\x9c\xf0\xd7\x86\xb7\x0e\xc5\x2b\x30\xe7\x63\x01\x2a\x70\x22\x24\x4d\x70\xa7\x25\x13\xf5\xa3\x58\xc1\x43\x88\xc6\x25\xf4\xbe\xfe\x64\xe3\x08\x3e\x6d\x0d\xca\x42\x1b\xd0\x4e\x74\x60\x44\x8b\x27\xcf\x3c\x79\x9a\x83\x04\xed\xb7\x72\x41\xec\xf5\xd8\xac\x02\x0f\x1c\x99\x15\xe4\x93\xed\xd6\x04\x8e\x46\x08\x65\x76\x10\x02\x64\xbe\x64\x90\xc7\xf9\x71\x27\x26\xc2\x3d\x65\x44\xd9\x4f\x1e\xe9\x96\x91\x79\x01\x4b\xe4\xdb\x9c\x20\x10\x71\x8c\x3a\x70\x82\x82\xf0\x18\xd9\x63\x9f\xd1\x1b\x50\xbf\x70\x67\x3b\x44\x4f\x48\x34\x40\xbb\x7a\xf3\x65\x7b\x16\x51\xd2\x31\x6e\xeb\xee\xbd\xed\xf8\xaa\x4e\x2a\x37\x9b\xd6\x57\x4f\xf9\x60\x97\x11\x78\x86\x05\xe3\xa4\x29\x2f\xdc\x0f\x59\x16\x3d\x6b\x17\xf0\xfa\x5b\xf3\xc7\x6b\xb4\x4c\x03\xbf\x06\xbb\x73\x68\x7d\xb6\xd5\x3a\xb5\x6f\xb7\x01\xeb\x19\x16\x0c\x13\xeb\x5e\x79\x30\xa0\xd3\xfa\xd7\xdd\x98\x5f\xa9\xd1\xd2\x55\xfc\x9c\x1d\x6f\x49\xef\x48\x8f\x4b\xef\xbc\xb5\x63\xc7\x5b\x50\x00\x13\xa0\xe0\xad\x8f\xce\xd1\xc1\xe0\x5d\x0e\x51\xce\x8e\x7b\x16\x1e\xaf\x5a\xb3\x7d\x67\x2b\x9b\x7e\x92\x5b\x7b\xe1\xae\xd6\x9a\x97\xee\xc1\x66\x83\x5e\xe3\xe9\x3e\xe2\x1a\xa7\xd1\xd2\x0d\x86\x95\xd8\xef\xa4\xf5\x79\x05\x54\xe3\xc7\xbb\x0d\x94\x4e\xbe\xed\xa4\x71\x27\xee\x07\xbb\x51\xc7\x5a\x74\xba\xee\x9b\x9c\xe3\x34\x5a\xa6\x5e\xbf\xa6\x52\xad\x4f\x36\x7e\xb8\x53\x87\xe5\x47\xd0\x4f\xfa\x23\xb9\xf9\x8e\x91\x19\xc2\x97\xfc\xb3\x71\x14\x64\xfa\x56\x3b\xf2\xa0\x22\x84\x20\x26\xd8\x05\xbf\x48\x73\x10\xf3\xa9\xc1\x4e\xc7\x29\xd1\x87\xa3\x46\xbf\xdd\x8c\x59\x8e\xf5\x43\x0c\x07\x7c\x21\x3b\x69\x58\xa8\x8b\xbe\xf9\xfd\x97\x5b\xd3\x8e\x1e\xe9\xef\x61\xe9\x2f\x29\x58\x9b\xfe\x00\x66\x4c\x02\xfb\x4d\x5f\xbc\x21\xfd\xf4\x05\xf6\x57\x63\xa8\x65\x27\xae\xf9\x42\xfa\x3b\x1c\x6a\xd1\x2e\x97\x2a\x4f\x1d\x3f\x7e\xea\x38\x8b\xf0\xb6\xcb\xbe\x0e\xa8\xef\x3c\x00\x77\x1d\xbd\x5f\x5a\x9d\x5e\x79\xcd\xc1\x3c\xa9\xd6\xfd\x23\xec\x78\x1f\xb4\xf1\xc3\xd2\x33\xd2\x07\xe9\x59\x97\xf2\x78\xdd\x2e\xa8\x3b\x9f\x3d\x2e\x9f\x24\xbf\x57\x58\xae\x5f\xcc\x4b\x64\x37\xc1\x85\x02\x22\x76\x40\x9c\x4a\x80\x3c\x16\x97\xdf\x21\x8a\x60\x3e\x31\x27\x04\x58\x27\x8e\x27\xb0\xe0\x04\x8e\xa7\x03\x3c\x04\x9c\x90\xc0\xf1\x58\x50\xf6\x08\x31\x1c\xa0\x91\xc5\x8e\x79\xa0\xa9\xcb\xa5\xcf\xa5\xf1\xab\xc7\x98\x27\xdc\xb0\x42\xab\xdd\xa0\x2f\xfa\x6a\x53\x6c\x17\x97\xdd\x18\x9e\xa3\x32\x68\xb3\x19\x61\x41\xa5\x61\x8f\xd9\x16\x6e\x2e\x0c\xb7\x4f\xf6\xd7\x56\xa9\x81\xe2\xed\x85\x8e\x9a\xbb\x2f\x9a\x72\xbc\xe7\xd0\xaa\x9c\x62\xd5\xb8\xd2\x79\xcb\x72\x0c\xd7\x5e\x09\x6a\x10\x69\x3c\xe7\xb6\x77\xa4\x93\x83\x08\x4a\x7f\xd8\x05\xb3\x61\x3c\x14\xb7\x49\x7f\xe4\x29\xd3\x8c\x0d\xb8\xf4\xb7\x35\x2a\x2d\x4d\x03\x33\xc3\xcb\x09\xe5\x9a\xa7\xc6\x15\x4f\xad\xcc\xe1\xd4\xe1\x00\xa6\xc7\xf8\x30\x67\xd6\xab\xa8\x45\x33\xb4\xb5\xc5\xf9\x93\xcf\x8b\xb6\xfe\xe6\x01\x51\x9c\x35\xf1\x1e\x58\xb0\x6e\xaa\xb4\x4a\xfa\xf5\x8e\x41\xf4\xfe\x7d\x4b\x47\xf1\xf8\xc7\x15\xbd\x46\x9a\x40\x5c\x9d\x20\xd8\xe9\x70\x28\x4e\x0c\x3f\x44\xb9\xc1\x8b\x98\x63\xbe\x6a\xb0\xd3\x60\xc5\x84\x4a\x21\x66\x8e\x46\x70\x80\x68\x2b\x9a\x99\x37\xef\x78\xee\x66\xe9\x2f\xe7\x35\xce\xa7\xe9\xf9\x8d\xe7\x81\xf5\xe6\xe7\xee\xb8\x40\x7a\xf5\xee\x3c\xfe\x41\xe9\x57\x9f\x5d\x26\xd7\x8d\x87\xa9\xbb\xa0\x02\x6e\xbf\xe9\x8a\xce\xf3\xaf\x3c\xff\xa6\x17\x9e\xbf\x69\xcb\xe5\x5b\x56\x5d\x7e\x3d\x93\xbb\xf6\xc0\x8e\xb6\x53\xfb\x8a\xf6\x9d\x6a\xdb\x71\x60\xed\xea\xad\xa0\x3a\xf8\x35\x34\x1c\x7f\x58\xae\x49\xb0\x65\xe0\x87\x5e\xe9\xde\x8b\xeb\x66\x57\xc2\x92\xcf\x3e\x85\x25\x55\xb3\xc6\x5e\x24\xdd\x97\x99\x9f\x18\x39\xc4\x7c\x83\x8a\x51\x14\xd5\xa1\x09\x44\xef\xc6\xad\xcc\x5a\xdd\x3c\xc8\xb9\x66\xbd\x1e\x53\x24\x1e\x8b\x9b\xfd\x2c\x65\x46\xee\x90\xe0\x0b\x87\x08\x0d\x8e\x9d\x22\x4d\xb6\xfc\xbb\x01\x59\xf3\x0b\x42\x80\x05\x37\x99\xd4\x72\x88\xeb\xbf\xe4\x0f\x07\x97\xde\x1f\x82\x3b\x2b\x3f\x97\x4e\xdc\xf5\xc4\xdd\x9f\xfd\xf4\xab\x52\xd3\xc2\x17\xc0\xfa\xe8\x7f\xd7\xc1\x63\x90\xed\x34\xa0\xc1\x87\x92\x9d\x73\xca\x1b\x97\x4f\xe8\x9a\xbd\xfa\xc0\x05\xbf\x19\x1f\xfe\xf1\xf9\xc5\x73\x37\x5e\xbf\xed\x91\xe0\x12\xf8\x01\xbf\xc3\xbc\x73\xcd\xfe\xb7\xf1\xbc\xca\xf2\x03\xbf\x6e\x9b\x7d\xf4\xef\x97\xce\xda\x04\xdc\xc6\x9e\x9a\xbb\xa1\xf3\xfb\xe9\xd2\x57\x60\x86\x45\xb0\xd9\x11\x5f\x52\xbf\xe9\x9e\x87\xe1\x67\xb3\x96\x4c\x28\xbb\x7b\xdd\xe5\xfd\xdb\xe7\xb6\xcd\x9a\xf4\xe1\x65\xaf\xe2\x29\x57\x3f\xfd\xf4\xd0\x3a\x5b\x8a\x53\x74\x46\xc2\x08\xc1\x39\x77\x35\x6d\x67\xed\x17\x46\x47\x6e\x4c\x23\x8b\xfe\x47\xb2\x63\xc9\x2a\xbb\x99\x69\x17\x90\x8d\x88\x01\xb2\x11\x01\x1d\x69\x57\x7d\x7b\x7b\x3d\x9b\xac\x6f\x07\x17\x45\x12\x0e\x24\xf5\x16\x0b\xf5\xea\x80\x82\x7f\x19\xda\x6f\x48\x65\x30\x2f\x4a\xbe\xec\x83\x29\xf6\x4f\x4c\x0a\x09\x28\x81\x90\x25\xcc\x72\x3c\xa5\x80\xa0\x05\xbb\x90\xb9\x7b\xe1\xb0\xb9\x63\x8c\x62\x78\x8a\x63\x03\x64\xab\x4d\x91\xbe\x76\x52\x82\x5f\xbc\xea\xd7\x13\x2a\x7d\x41\x9e\xca\x32\x5b\x68\x1c\x76\x56\x2d\x92\xbe\x29\x6f\x68\xa0\xbf\x84\x48\x79\x43\x43\xf9\x43\x6f\x18\xa5\x62\x6c\x2d\x9a\x1a\xbf\xb0\xc9\x55\x54\xeb\xf1\xda\x34\x66\xeb\x9c\x9a\xd2\xa9\x55\x61\xaf\x09\xde\x68\x60\x52\xc9\x39\x95\xe7\x5f\xba\xea\xc8\xa2\xf9\x16\xf5\xd7\xad\xf7\x76\x36\x94\x33\x59\xf2\x89\xa7\xbe\x2c\x6f\xf8\x1d\x2c\x5d\x5e\x3a\x65\x42\x85\xce\x51\x9f\xd3\xf0\xf4\xb1\x63\x2f\x4e\x13\x0b\x93\x7a\x9d\x56\x28\xab\x70\x2d\x7b\x70\x58\xbb\x86\xb9\x80\xac\x97\x4c\x40\xf7\xa2\x5f\x23\xc4\x70\x0a\x45\x88\x02\x85\x16\xe3\x0a\x88\x3b\x63\x16\x45\x26\x71\xb2\x17\x38\xc1\xce\x9d\x6d\xbd\x12\xcf\x98\xae\x08\x76\xc6\x4a\x28\x8a\x3d\xe4\x22\x51\x2f\xb9\x8e\x10\x36\x65\x2c\xae\x14\x28\xbb\x18\x8f\xe5\xc3\x10\xed\xb1\xa2\xc5\x64\xca\xb0\xb7\x29\x41\x03\x10\x46\x94\xcc\xcf\x68\xf5\xba\x4d\xe1\x0c\x4f\x8c\x9c\x07\xca\x6e\x1d\xce\xaa\x9c\x9a\x20\xdb\xc9\x8b\xc8\x5c\xc0\xae\x3f\x70\xd3\xb1\x3b\x6e\x38\xb8\x6e\x7d\xa2\x48\x47\x47\xc2\x0c\x98\x73\x43\xe7\x2d\x49\xed\xde\x7f\xcd\xa5\xa9\xc5\xac\xc6\xa0\xb3\xf9\x24\x5b\x7d\x9d\x2d\xd7\x64\xd0\xa8\x13\xf5\x8c\xc6\x60\xc4\x66\x55\x7d\xbd\xd1\x69\xd6\xb3\xdc\xd8\xb1\x66\x67\x0e\xbc\x10\x2c\x9d\xd1\xfc\xd6\xb7\x6f\x35\xcf\x2c\x36\x80\x3a\x12\xd2\xf8\x6b\x80\x5a\xba\xf2\xe0\x75\xaf\xbd\x7e\x60\x4c\x2c\xd7\x60\xcc\xe5\x79\x51\xdb\xb9\x7f\xd2\xc4\xce\x55\x13\x93\x6b\x77\x77\x3c\x74\xd9\xe4\x7d\x7b\x5f\x78\x71\x6f\x34\x0b\xab\x34\x6e\xbb\x2d\xdf\x66\xa2\xd6\x38\x9d\x03\x6f\x42\xc1\xf6\xe0\x9a\x6d\x17\xbc\xd5\x3c\xa3\x34\x98\xaf\xd6\x6a\x1d\x7a\x35\xd7\xb5\x3c\x75\xf0\xd2\x4b\x72\xcc\x6a\xa0\xf4\x3b\xef\xbe\xfd\x86\x2b\xb5\xec\xfa\x44\x32\x59\xd7\xdd\x7d\x60\xc5\xdc\x5c\x95\x2a\x17\xa8\x05\xe3\xb7\x9f\xb7\x24\x56\x59\x19\x5f\xcc\x6a\x68\xca\xe2\xc7\x33\x49\x8e\x35\xb5\xf5\x8c\x11\x1b\x78\x4e\x33\xb6\xde\x98\x67\x66\xea\xc7\x9a\x9c\x39\x53\xce\x5f\xbb\x72\x46\xf3\xc2\x85\xcd\x33\x3b\xdd\x5c\x8e\xc9\x98\xbb\xb4\x01\x66\xe1\x2b\x3a\x56\x9c\x38\x70\xdd\x6b\x46\x6d\x28\xac\xa2\x28\xf6\x9a\x15\xcb\x27\x4c\x6c\x9e\xd4\x22\x2d\x1d\x37\xf9\xb2\x9f\x2d\x7a\x7e\xdf\xde\xbd\x51\x0f\xd6\xaa\x35\x2a\x46\x30\xe0\xbb\x0c\xc2\x5a\x29\xaf\x68\xb6\x25\xb8\xb0\x79\xc6\xca\x6e\x78\x4d\x65\x35\xea\x1d\x5c\x6b\x51\x65\x85\xa6\x2c\x5b\x6f\xa4\xab\x92\x63\xe4\x3a\x93\x37\x88\xd8\x8f\x59\x84\x72\x50\x02\x6d\x42\x3b\x11\xf2\xc7\xec\x56\x8e\xa7\xbd\x9e\x20\x15\x08\x02\x11\x65\x16\x68\x7f\xcc\x6f\x67\x89\x78\x7c\x3c\x01\x81\x20\xc5\x63\x2f\x4f\x15\x61\x85\xe0\x26\x66\x07\xab\x13\xe7\xcb\x03\x92\x32\x10\x03\x3c\x45\xb6\xe9\x99\xb8\xf2\xcb\xf3\x14\xe7\x27\x06\x88\x4e\xca\x06\x56\x62\x8c\x10\xab\x05\x9e\x62\x0d\x06\xbb\x41\x9f\xb8\xe4\xc6\x8f\xce\xdf\xf2\xf5\xcf\xef\x58\xe6\x51\xd1\xac\x46\xcf\xf4\xae\x86\x4b\xe1\xa6\xa7\xe1\x06\xad\xc9\xea\x09\x9b\xcc\x6a\x5b\x99\x89\xb1\xb9\x1d\x25\x96\x62\x60\x79\x95\x9a\x61\x29\x0a\x80\xed\x0a\x05\xb7\x4b\xbb\x73\xfc\x22\xaf\xff\xb4\x60\x9a\xc5\xa2\xe5\xc5\x2d\x57\xec\xdf\xd5\x99\xa8\x6c\xb9\x68\xeb\xde\xa5\x21\x9b\x67\x1e\x6b\xab\x89\xd4\x98\xa5\xf7\x4a\x16\x5c\x7c\xfc\xbc\x65\xb7\x2d\x1e\x9b\x9d\xee\x98\x50\x3f\x79\xb6\x93\xaf\xee\x5c\x33\xb6\x86\x65\xf3\x2c\xc6\xf8\x8c\x71\x15\x89\xd6\xcd\x6d\x85\x6a\x83\x9a\x01\x7a\x73\xc5\xcf\xe6\x16\xfc\xce\xb8\xaa\x62\x56\x21\xaf\xb1\x94\xde\x68\xe7\xd4\x14\xc6\x58\x11\x8b\xc5\xd8\x58\xce\x72\x3a\xb8\x3b\xbf\x3e\x54\xa4\xd5\xf6\xf9\xa7\x5a\xad\x5a\x7b\xf5\xbc\x02\xb6\x7c\xd6\x35\xad\xb3\xf7\xb6\x4d\x2e\xcc\x55\xe3\x1d\x63\x5d\x51\x6c\xf7\xcf\x8c\xe7\xd4\x9c\xbf\x7a\x66\x45\x68\x72\xdb\x74\x4f\xfa\xd6\xb9\x65\x25\xf6\xec\x25\xa5\x95\xb7\x61\x6b\xd9\xa2\x61\x9b\x9f\x14\xe9\xa3\xc2\x04\xa1\xb5\x6a\x84\x4d\xe8\x10\xab\xf2\x69\xdb\xdc\x61\x9f\x3f\xc3\x69\x19\xcd\x70\x5c\x32\xa3\xc2\x0a\xbe\xf4\x5f\x58\xab\x67\x8c\xb5\x88\x44\x77\x46\x18\x3c\xd5\x5e\x2f\x37\x96\x8a\x33\x38\x52\x80\x69\x84\x9f\x4e\x9d\x4a\x51\xe8\x2c\x42\x16\x05\x09\x81\x9a\x22\xa7\xf1\x2b\x1d\x72\xf3\xdb\x91\xf9\x56\x6c\xd1\x15\x44\xe1\x08\xff\x29\x33\x8d\x06\x10\x4e\x8e\xbe\x12\xf1\x9e\x51\x3e\x06\xa2\x72\x10\x26\x08\x36\xdb\xc8\x3e\x21\x64\x07\xb7\xc9\xfd\xef\xb9\x40\xff\x4d\x81\x86\x43\x76\x3a\x65\xe6\xd3\x0a\x6c\x24\xc9\x9b\x07\x10\x93\x3a\x95\x82\x11\x1d\x05\x35\x52\x9f\x2a\x75\xce\x52\x4b\x45\x9a\xa0\x67\x28\x8d\x39\xfd\x3b\x1a\xf5\x9e\xf5\xcc\x8a\x7f\xda\xb9\x0b\xaa\xe9\xcc\x3a\x11\x40\x71\xa5\x4e\xf8\x4f\x53\x9c\x89\xa4\x55\x1e\xd6\x1e\xca\xd8\xa1\x0b\x76\xeb\xff\x59\x39\xcc\x0b\xaa\x1d\x9a\x27\x9f\x54\x6c\xcc\x9f\x7a\x4a\xb1\x3a\x1f\x0a\x3f\xf9\xa4\x7a\xc0\xf5\x3f\x2b\x9a\xeb\xcf\x7d\xb9\xe1\xb0\xd4\xf7\xbf\x2b\x2f\x2b\xca\x42\x05\xa8\x12\x2d\x24\x3a\x35\x9e\xc0\xb0\xa1\x7e\xc6\x5a\xff\xff\xaa\x80\x18\x41\x42\x1a\x87\x46\xea\x53\xb2\xfe\x3e\x28\xcf\xd2\xdf\xf1\x3f\x2b\x16\x5c\x23\x21\xb5\x1a\x5c\x4a\x81\xbc\x0f\x4a\x89\xa4\xc7\xfc\x0f\x0a\x03\x86\xc7\xbc\x79\x99\x76\x04\x48\xd7\x3c\xe4\x8c\x58\x9d\x80\x5e\x87\x88\xb3\x4c\xc2\xd0\xb7\xe8\xf8\x91\xe0\xe4\x59\x24\x3a\x06\x2e\x85\xfb\x79\xd1\x21\x29\x4e\xbf\x12\x9f\x72\x88\xca\xba\x22\xad\xcc\x7d\x88\xea\x08\x0a\xc5\x87\xd7\xc9\x87\xc8\x0f\xfc\x64\xa7\x64\x78\xc9\x28\x06\x4f\xef\x4e\x10\xb3\xcf\xd9\x70\x17\x94\x48\x6f\x48\x2d\xd2\x1b\x18\xc9\x0f\x73\xe0\x84\x39\xd7\x7c\x37\xf4\x1a\xd2\xeb\xe5\x5b\xe0\x6b\xe8\x0a\xe5\x30\x94\xc0\x5d\x4d\xe6\x5c\xf3\x89\x03\x72\xb2\x2d\x77\x2b\x6b\x9a\xfe\x41\xc4\xfe\x81\xf4\x51\x7e\x82\xc1\x21\x4b\x50\xa7\x97\x5b\x4e\xff\x58\x21\x01\x86\x77\x2a\x4e\xb7\xa6\x19\xe2\x06\x79\x18\x69\x63\x5f\xd7\x68\xf6\xe5\x16\x9c\x22\xf6\xa6\x38\xa9\x58\xa5\xa2\x82\xdc\x81\x27\x41\x31\x51\xa5\x08\x4f\xda\xa9\xde\x82\xdc\x7d\x24\x25\x46\x80\xe8\xb7\x35\x0e\xcd\xbe\x5c\xd1\x01\x0a\x13\x98\xe8\x48\xe6\xf6\xbf\x4f\x30\xfe\x0e\xaa\x57\x21\x08\xcb\xdd\x47\xd2\xf4\xf6\x2a\xeb\xed\x2a\xc4\xf4\x13\x5c\xb1\xfc\x2e\x23\x65\x2f\x99\x03\x36\xe0\x67\x86\x10\xd3\xb1\x38\xc4\x04\xc6\x1f\x63\x4c\x8c\xc9\x6f\xf2\x9b\xc0\xc4\x98\xb8\xcf\x72\xed\xe6\x74\x2a\x2b\x2b\x7d\x43\xfa\x06\x0d\x6f\x31\xe5\xda\xcd\x38\x95\x95\x85\x3b\x71\xa7\xab\x3f\x0b\x27\xfb\x3b\xb0\x8b\xee\x4b\xf7\x31\xdf\x59\xdd\xa7\x52\x56\x17\x37\x88\xb4\xda\xef\xbf\x67\xb4\x56\x37\x23\x07\x81\x04\xf5\x37\xf5\x6b\xbe\xa0\xbf\xd7\xf7\x6b\xde\xa5\xbf\x3f\x95\xa6\xbf\x7f\xb7\x5f\x33\x72\x6d\xd8\x84\xbc\x28\x3a\xd4\xdf\x70\xc0\x2a\x58\xc1\x38\xc4\xdc\xe7\x88\x19\xda\x08\x97\x5f\x2b\x39\xdb\x18\xe9\x2d\x26\xc9\xc5\xa9\xf4\x16\x13\xf4\x71\xf4\x97\x67\x04\xfb\xef\x52\xb1\x18\x99\x2d\x7a\x15\x2b\x21\xb3\x85\x45\x16\xfd\xa9\xa4\x55\x35\x88\x68\x8b\x9e\xe9\xb5\xaa\x40\xf6\x8c\x8e\xa1\x06\x91\xc6\x72\x2a\xa9\xb7\x50\x80\x34\x16\xa6\x57\x6f\x19\xda\xaf\x71\x71\xf2\x6b\xce\x21\x03\x12\x50\xe5\xd9\x8a\x2a\x43\xae\x82\xee\x0c\xb0\x0c\x4b\x4c\x31\xe3\x09\x2e\x1e\x04\x05\xea\x89\x15\xe1\x14\xf8\xcd\x99\xce\x37\xd2\xb2\xbf\xaf\x5d\x7e\xbf\x74\x2a\xe2\xd1\x59\x29\x3a\x8b\xf1\xf3\x6e\x83\x83\x37\x30\x07\xee\xfc\x06\x6e\x81\x2f\xe1\x16\xdc\x38\x82\xd6\x53\xf9\x87\xa0\x74\xbb\xf4\xee\xbd\xe6\xfb\x2b\x35\x14\xf0\x5a\x83\x9d\x71\xf3\x7e\x47\x79\xf9\xb8\xc0\x82\xf4\x35\x0f\x40\xe0\xde\x7b\xd1\x69\xbd\xb4\xe1\x7c\x07\x09\xa3\xeb\x28\xdb\xa0\x21\x17\xbb\x68\xf9\x7d\xc9\x07\x8e\xe5\x62\x75\x20\x8f\xcb\x7d\x31\xa3\x08\xd6\xe1\x07\xf2\x7a\xc4\x40\x54\x8c\x89\x09\x1c\x4f\x30\x71\xa2\x49\x05\x3e\x17\xed\x84\x73\x3e\xd9\x49\xa9\x53\x3a\xf2\xfa\x35\x3b\xe7\xe5\x64\x05\x6f\xb8\xb0\xb8\x6a\x7c\xed\x2b\xb0\xf4\xf5\xd7\x61\x86\xfc\xc0\x13\x1a\x9f\x97\x4e\x55\x8c\x65\x0c\x59\x34\xc5\x80\x06\xeb\x30\x57\x6e\x2b\xcc\x72\x6a\x8f\xfc\xe2\xf4\x52\x07\xfe\xc5\xd9\xcf\x9d\xda\xf3\x97\x2b\xbb\x7f\x33\x25\xd4\xd1\x3a\xa3\x6e\xb5\xc8\xaa\xf6\xfc\x05\xcc\x7f\x91\xf6\x3c\x20\xbd\x7b\xaf\xea\xc1\x71\xbc\xca\x66\x02\xda\x48\x1b\x28\x1e\xab\xa2\x42\x65\x70\x52\xc1\x7c\x60\x0f\xef\xfc\xea\xbe\xe5\xcb\xef\xfb\x8a\xfc\x8e\x6a\x1a\x31\xff\x40\x14\x62\x91\x06\xe9\xe5\x56\xda\xa4\x06\x13\x64\x03\x71\x31\xc2\x48\x42\x12\xf9\x96\xfd\x30\x1f\x02\xe9\xe3\xd2\x3b\xd4\x96\xf4\x71\x28\xa0\x6f\x95\xfd\x78\xba\xf4\xae\x1c\x4b\xd6\x0d\x67\x0e\xf6\xb2\xf7\x33\x49\x62\x87\xce\x02\xf2\x7a\x28\x91\xc2\x5e\x0f\x17\x48\x64\xac\x5e\xcd\xca\xfc\x26\x1e\xf3\x7a\x38\x33\x63\x67\xef\xd7\x48\x4f\x4b\xff\xf5\xf9\xd5\x4b\x4a\x5a\x26\xcd\x31\xaf\x99\x9a\x75\x57\xf0\x96\x39\x8b\x36\x09\x25\xf6\xf8\xd8\xf0\x8a\xe5\x2a\xfd\xb6\xaa\xe4\x56\x98\xd5\x4f\x9d\xfa\x8b\xb4\x58\x9a\x01\x5c\x0f\xd4\x03\xdb\xb4\xc4\x76\x7d\xc1\x55\x2a\xf5\x25\x7b\xa4\x8f\xe7\xfe\xf8\x93\x9f\xcc\xd9\xe3\x80\x2b\xb5\x2a\x74\x06\x0f\x0e\x85\x34\x84\x59\xdb\x0d\x94\xc5\x6d\xa1\x80\x45\xa7\x10\x5d\xfb\xc1\x07\xe9\xcb\x3e\xf8\x00\x6a\x99\xd4\x29\x04\x77\xe0\x2d\x50\x28\xbd\x9d\xbe\x52\x7a\x0d\x9d\xa1\x5d\x41\x21\x33\x1a\x8b\xe6\x64\xce\xe7\x08\xe7\x76\x3c\x10\x0f\x78\x03\x5e\x8e\x09\xd9\xb9\x78\x24\x88\x87\x48\x41\x42\x36\x82\x32\xb7\xb9\xa3\x81\x20\x4e\x40\xd4\x14\x8e\x7b\x3d\xf2\x48\x3a\x92\xc0\x10\x25\x20\xbd\xa8\xc9\xcd\x09\xf6\x4c\x3a\x39\x1f\xd4\x5e\x5d\x63\x7e\xf6\xaa\x55\xd9\xf9\x8d\xba\x45\x51\x57\x54\x3a\xec\xca\x86\x07\xbc\xf5\x93\x2a\x2e\xdd\xdd\xd1\x64\xd5\xe8\x27\x43\xef\x21\x96\xc1\x00\xcf\x88\x7f\x64\x69\x9a\xd2\xe5\xe0\xf3\x63\x1c\x83\xa5\xaf\x84\x59\x82\x8e\x9f\x20\x67\x9f\xee\x75\xcf\xda\x90\x5d\x55\x95\xbd\x61\x96\xbb\xa3\xe3\x98\xab\xcc\x16\x6f\xf4\xf3\x1b\x2f\x9a\x94\x52\x49\x3b\x79\x1d\x70\x2d\x73\x79\x00\x9a\xd6\x30\xb0\x2b\xc5\xb2\x54\x73\x4e\x4e\x9e\x76\xe0\x97\x73\xd5\x40\x51\x3a\x16\xab\x96\xdb\x39\xab\x74\x35\xaf\xc6\xea\xb9\xca\xb3\x2f\x23\x6d\x50\x19\xaa\x42\x33\x50\xab\xa2\x14\x41\x36\x64\x5c\x99\x4d\x98\x0c\x45\xbb\xdf\x92\x00\x81\x21\xd0\x12\xf9\x5d\x89\xfa\x29\x9a\x00\x1c\x40\xee\x5d\x48\x3f\x03\xb1\x48\x40\xf4\x64\x26\xa6\x1e\x8e\xb5\x2a\xca\x83\xe2\x10\x0d\xb4\x95\x43\xd5\x21\xdd\x9b\xd2\x7e\xa9\x59\xba\xf6\x4d\x6d\x38\xb1\x69\xd6\x9c\x9a\xf7\xa0\x70\x13\x95\xc5\xc3\x7a\xf3\xa4\xe2\x44\x4b\xcb\xf6\x79\xd2\x43\x9d\x50\xf2\x87\x31\x73\x66\x6d\x3a\x75\xdb\xbc\xed\x2d\x2d\x89\xda\x16\xaa\x48\xab\xd5\x38\xb5\x85\x3d\x3d\x3d\x85\x5a\xa7\x46\xab\x2d\xbe\xbe\xbd\xa5\xfd\x7a\xfb\xf6\x79\x2d\xb5\x89\x16\xfc\xd0\x98\x45\xd9\xc1\xd0\xcd\xd2\x0f\x37\xde\x08\xaa\x9b\xcb\xca\xb2\x17\x8f\x99\xb9\xb9\xee\x06\x0d\x56\xeb\x8d\xd4\x0c\x7f\xe9\xbc\xed\x2d\xf3\x12\x53\xa4\x02\xf5\xf5\xb5\x9b\xa5\x3f\x92\x9b\xb4\x48\x1d\x5a\xa7\x56\xa3\x29\x2a\x28\x28\xd2\x68\x34\xf9\xda\xe2\x90\x5a\x1d\xfa\x41\xbe\xd9\xbc\xed\xa4\x4e\x8f\x1f\xc4\xec\x13\x2c\x42\xe5\x08\x59\xc2\x09\xca\x17\x0e\xd1\x82\xdc\xa5\x39\xa9\x04\xc4\x4d\xac\x0e\x02\x22\x0e\x88\xe6\x38\x0f\x9c\x3b\x16\xa4\xcb\x80\xa7\xc6\x83\x71\xce\xb5\x4f\x03\x1c\xfc\x23\xac\x5d\xd7\xd9\x7f\x33\xac\xbc\xeb\xf7\x6f\xbf\x34\x79\xa1\xf4\x95\x74\xdb\xbe\xa7\xbe\xc3\xd4\x67\xbf\x2f\xaf\x31\xe2\x0b\x55\xae\xc4\xf4\x99\x0d\x76\xfb\xe5\x3f\x3e\x7f\x13\xfe\xfc\xe2\x3f\xfe\xe6\xd0\xdc\xdf\x3f\xff\xc4\xe0\x93\xeb\x8e\xcd\x74\x39\xc6\x85\xa5\xcb\xe3\x53\x70\x6c\x32\x74\xfc\xea\x5b\x98\xbd\xa4\x66\x57\xfb\xd4\x8b\xa7\x56\x3a\x0c\x00\xcc\xf4\x9d\xd7\x0f\xd5\x57\x82\xad\x57\xd8\xe8\x73\x10\x8a\x9a\xdc\x99\x21\x85\x5c\x21\xdd\x36\x77\x74\x78\xb0\x14\x56\xa3\xf6\xfa\x1f\x92\xf5\xed\x38\x05\xa9\x34\x02\xc4\x76\xd4\xb7\xff\x03\xb5\xd7\xbb\x70\x47\xba\xa7\xbe\xbd\x1d\x3c\xc4\x84\x25\xd5\x5e\xdf\xd7\x57\xdf\x3e\x8c\xed\x7c\x82\xd8\xad\x94\xcb\xfd\xbb\x9f\x6c\xc9\xc9\x15\x41\xd1\x93\x8c\x13\x35\x29\x65\xc1\x3a\x1c\xf2\xa9\x81\x45\xee\x11\x82\xa3\x02\xe5\x25\xf2\xf7\x4e\xe0\x81\x2d\x7f\x6f\xca\x77\xfb\xae\xfb\x61\xff\x9c\x6b\x5f\x58\xbb\xeb\x64\xd3\xdb\x6b\xa5\xa3\x2f\xff\x44\x7a\xef\x8d\x8b\x2f\x7e\x03\xc4\x9f\xbc\x09\xeb\xa5\x24\xfe\xc5\x26\xa9\x51\xfa\xfa\xe1\xa1\x15\xde\x87\x81\x86\x3b\x2e\x3a\x1a\xe8\xb8\xc2\x55\xaa\xd3\x94\x7e\xbf\x6e\xeb\x55\xfb\x7f\x38\xb0\xf6\x85\x6b\xe7\x5c\xb0\xfa\xa2\xbb\x7b\x2f\x7e\x43\x7a\x4f\x7a\x5a\xbe\xc4\x5b\x78\x82\xd4\x93\x96\xde\x3b\xdd\x56\x4a\xdf\x9d\x94\x36\xf5\x00\x31\x27\x41\x34\x72\x0d\x22\xb6\x2f\xc3\xa7\x9b\xe1\x23\x88\xbb\x21\x60\x82\x7c\x30\xa9\xb1\x1b\x98\xeb\xd2\x37\x2d\xa4\xe6\x9d\xfa\xc5\xa3\xf4\x51\xeb\x75\xe9\xbf\xc0\x42\x49\x37\x70\x37\x2c\xa3\xaa\x61\xe7\xf5\x03\x1f\x6e\xa2\x16\xa4\xb3\x3b\x16\x0d\xfc\x14\xa6\xe3\x1d\x03\x1f\xe2\xea\xa1\xb2\x49\x31\xdf\x90\xfd\xdc\x8b\x10\x02\xa2\x48\x3e\x2c\x59\x33\xec\x67\x4c\xee\x0c\x92\xc5\x6d\x8a\x54\x43\x28\x0f\xc2\x43\x6e\x74\xd8\x4d\x60\x7b\xd8\x34\xac\x49\x6c\x53\xe8\x72\x62\xe1\x50\x9e\xb2\xfb\xe0\xf5\x70\xb6\x50\xcc\x89\xcf\x38\xa7\x1a\x42\x36\x93\xe2\xe2\x94\xb1\xc3\x68\xec\x30\x62\x34\xe4\xa6\x53\xdd\x3d\xdd\x69\x39\x7a\xf8\xc3\xe8\x38\x23\xb8\xdc\x25\x6e\x57\xa9\x68\x9b\x6a\x34\xd5\x70\xc6\x09\x39\xe6\xc9\x96\x82\x10\x18\x39\x1d\x33\x32\x2d\x36\xf6\x19\x4f\xff\xa7\x8d\x90\x6c\xee\xee\x6e\x96\x7a\xf1\x37\x46\x63\x37\xee\x36\x1a\xbb\xc9\x87\xe5\x28\x00\xb8\xdc\xe0\x15\x5c\x2e\xc1\x6b\x30\x69\x0c\x06\xe3\xef\x0c\x7a\x83\xee\x52\x00\x8a\x63\xbb\x33\x09\xd3\xfb\xbb\x8d\x8a\xc6\x23\xa9\xab\x5d\x0a\x03\x96\x32\xdc\xaa\x05\xb7\x5d\x70\x32\x64\x5c\x3f\x44\xf2\xa6\xcc\x24\xbd\x9e\x20\x13\x08\x52\x5e\x37\x01\xfc\x28\x2a\x4f\xe1\x90\xdc\xd7\xb2\xd5\x90\x69\x7c\xe4\x1e\xd8\xeb\xe1\x69\x8e\xe5\xe4\x1a\x2e\xa8\xbe\x31\x1a\xa5\x5e\x95\x4a\xcd\x19\x07\x7e\xea\x0f\x1a\x4d\xf9\x42\xbe\xcb\xd4\x61\xe6\x81\x8c\xf9\xa5\x5e\xde\xdc\xe1\x1a\x53\x12\xcc\x0d\x98\x2d\x42\x6e\x49\x69\x96\x74\x83\xfd\xaa\x96\xae\xc3\x87\xbb\x5a\xae\xb2\x77\x66\x95\x96\xe4\x0a\x16\x73\x20\x37\x58\x32\xc6\xb5\xca\xb6\x24\x21\x3f\x74\x62\x89\x6d\x95\xc9\x95\x2f\xe4\x9b\x8c\x41\x3f\xbd\xc0\x65\xc4\x7f\x50\x89\xaa\x5e\x86\xd6\x98\x53\x63\x56\xf9\x7d\x09\x97\xcf\xd8\x31\x74\x71\x33\xdf\x61\xcd\x89\x89\x4d\x81\xc2\x68\xd5\x64\xcf\xec\xd5\x87\xdf\x38\xbc\x7a\xb6\x67\x72\x55\xb4\x30\xd0\x24\xc6\x72\xac\x55\x13\xbb\x7b\xba\x27\x56\x19\x7d\xae\x84\xcf\xbf\x6a\x4c\xca\x6c\xd5\x9e\x89\x0d\xe0\x90\x09\xb9\xc9\x98\x84\x80\x5f\x90\x51\xf4\xba\x4d\x61\xe2\x1b\x05\x6a\xb9\x78\x7a\x65\x3a\x5d\x09\xf8\x91\x5d\xd2\xf4\x9f\xa7\x77\xe2\xcb\xcf\x85\x56\x49\x74\x4f\x03\xbd\xf4\x0f\xa0\x1f\x1d\x48\x81\x1e\x56\x9e\x63\xf3\x44\x6e\x43\xde\x55\x23\x26\x80\x02\x68\x0c\x9a\x8a\x16\x13\x0d\xe2\x00\x3b\xc4\xdf\x14\x8f\x45\x23\xca\x5a\xb5\x5d\x90\x9b\xfb\x80\xb2\xc5\x4f\x10\x70\xa7\xd5\x3b\x14\x8d\x38\x27\x08\x8a\x0c\xbc\x7c\x9a\x31\x20\x92\x25\x2a\x9f\x71\x38\x2a\x1a\x51\x16\xa5\x04\x76\x4d\x43\x94\x33\x72\x85\x59\x3a\x5d\x7e\xae\x46\xd8\xf6\xbb\x0b\x2f\xfb\x24\xb6\xba\xd9\x5e\x92\x14\x1a\x57\xca\x3f\x07\x6d\x9f\xbe\xee\xc6\x97\xae\xee\xff\xd3\xdd\xdf\xbc\x78\x28\x01\x89\x5f\xfe\x19\x5a\x85\x4d\x37\x9e\x5a\x2c\x14\x66\x59\x1c\x3a\xf3\xc4\x89\x66\x5d\xa4\xce\xbc\x18\xd0\x65\x42\xa1\x60\x71\xe8\xcd\xab\x57\x9b\xf5\x0e\x47\xc2\x0c\x0f\x57\x2f\xb2\x95\x96\x65\xe5\x52\x9a\x2a\xe7\xc4\x49\x17\xbe\xbe\xed\xc0\x05\xb9\xd3\x84\x64\x89\xbd\xf1\xd0\x1b\x87\xd6\x4d\xbb\xfa\xc5\xbf\xde\x7d\xe3\x67\xf6\x47\x3f\x93\x7e\xf9\xc7\xec\x27\x2e\x78\x70\xbf\x5b\x6f\xaa\x73\x74\x02\xee\x74\x24\x7c\x7a\xc7\xd5\x0d\x52\xd6\x0b\x1e\xbd\x39\xe1\xb8\xfd\xb9\x5f\xde\xe6\xa8\x33\x99\x75\x39\x08\x23\xdf\x20\x62\xde\x27\xfb\xf0\x6b\x11\x62\x48\xaf\x27\xbf\xab\x0a\x2f\x23\x2b\x57\xd5\x68\x24\x41\x85\x9c\x14\x81\xe7\xe6\x03\xd1\x24\xa5\x03\x62\x20\x48\x45\x87\x96\xd8\x08\xc7\x97\xb7\x08\x82\x34\xb1\xf8\x22\xaa\xa6\x4e\x4a\x70\xaa\x98\xf7\x2f\xfe\xf9\x8e\x1d\x3f\xbf\xf8\xe4\xc6\x9b\xdd\x07\x4e\xae\x79\xf4\xc2\x25\x31\xaf\x4e\x9d\x5b\x3a\xab\x6b\x66\x49\x8e\x4a\xc8\x5d\x1d\x28\xd8\x78\xd8\x5c\x1a\x6b\x6f\x9b\x9c\x6b\xd8\x74\xf5\x8a\xc2\xc2\xd6\xcb\x5e\xd8\xb6\xf5\xc5\x4b\x16\x88\xce\xe2\x58\x89\x09\xb3\x16\x47\xc4\x17\xcc\xb5\x1a\x5a\xfc\xfe\x86\xa5\x45\x1a\xb1\xe1\xe2\x79\x4d\x17\xb5\x4d\x2e\xf7\x58\x34\x58\x3f\x7f\xc7\x8e\xf9\x0b\x76\xec\x78\xc6\xf0\xe0\xf9\x53\x92\xd3\x8a\xc6\xcd\x9d\x3d\x33\xcc\x5b\xca\xc6\x86\x7d\xde\xb2\xea\x00\xef\x29\xcb\x71\x62\x38\x6f\xa6\xa3\xb4\x44\x0c\x95\x7a\xf4\x5c\x7c\xc1\x86\x2b\xdb\xa7\xed\xdf\xb5\xb8\x2a\x32\xb3\x6b\x65\x38\x38\xb9\x38\x4f\xa3\x31\x8b\xb1\x79\x31\xa3\x05\x20\x31\xcd\x9f\x25\xc6\xca\xab\xf3\xb2\xab\x62\xc9\xf8\x84\xd8\xe4\xf0\x48\x3b\x3c\xc5\x7e\xfd\xac\xdd\x03\xff\xa8\xf0\x48\x21\x6e\xdc\x6b\xe6\x07\xc9\xdc\x13\x10\x6f\x86\x33\x43\xa9\xd1\x9a\xdb\x1d\x98\xbc\xc9\xa7\x17\x85\x32\x7e\x18\x1c\xa5\xac\x4d\x8f\xe0\x9f\x11\xc8\xaa\x0d\x42\x23\xac\xe1\x91\x2b\x01\xc6\x20\xb8\x78\x30\xda\xfd\x23\xb5\xd2\x46\xae\x35\x64\xc2\xb8\xec\x4c\x9b\x76\xb8\x15\x0a\x4e\x1d\x38\x70\x4a\x7a\xe7\xd4\x81\x03\xf0\xb5\x9c\x87\xde\xd3\x99\x22\x5f\xcc\xe8\x8c\xf7\x3f\x70\xe0\xd4\xf0\x59\xd3\xce\xc8\xfa\x08\xff\x19\xe3\x57\x83\xdc\x9f\xc3\xbf\x28\x39\x3a\x39\xf2\x0a\xd0\xfb\xaf\xca\xea\xac\xf2\xa1\x46\x95\xcf\x3f\x2d\x9d\xf8\x48\x5b\xcd\x7f\x57\x1a\x6b\x4f\x3f\xcf\xff\x43\x11\x8c\xc6\x47\xf9\x51\x2d\x42\x7e\x0b\x31\x68\x26\xf4\xea\x60\x71\x5b\x08\x8a\x5b\x01\xc1\x0f\xbb\x21\xbb\xdf\x44\x5e\xc6\x4c\x0f\x9b\xf1\xc7\x5c\x76\xf6\x03\x2f\x65\xb1\xe4\xfd\x98\xca\xb3\x58\x28\x2f\xdb\x36\xf7\xc7\xd9\x73\x29\x5f\x36\x20\x32\x69\x92\xbf\x50\xb6\x4f\xda\x25\x46\xc4\xc3\x6f\x1c\x16\x23\xe2\xc7\x90\xf8\x38\x25\xbd\x90\x6b\xb7\xd9\xec\xb9\x50\x45\x4d\x1c\xf8\x91\xe2\xb2\xdc\x23\x15\x37\xdd\x3f\x19\x44\x8a\xf6\x84\xdc\x42\x0d\xf9\x8f\x7e\xfc\x71\xc6\xce\x4e\x76\x6c\x84\xa1\xa8\x1a\x4d\x46\x6b\xc8\x2c\x5e\x6e\xc7\x87\x30\xbf\x19\x05\x0c\x48\x40\x80\x0a\x02\xaf\xc0\xac\xfd\x43\x39\xb7\x2b\x6f\xc9\xb0\xdf\x12\x0b\x02\xd1\x23\x15\xc2\xa1\x18\x50\x5e\x82\xdb\xcc\xfc\x0c\x04\x3f\xeb\xa5\x82\x50\x3c\xc4\xf2\x2f\xb7\xcf\x24\x97\x86\x8d\xaa\x49\xc1\x7e\x14\x9c\xa4\xda\x68\x90\xc3\xb0\xdc\xe1\xc5\x2e\x5c\x18\x91\xbf\xfd\xd9\xd0\x23\x46\x44\x31\x22\x42\x2a\xe3\x76\xb8\xb0\x37\x52\x88\x5d\xd8\xeb\x60\xb2\xfd\xfd\x17\xb7\xed\x5e\x6e\xd9\xbb\xe0\x4e\x05\xaf\x7e\xe7\x82\xbd\x96\xe5\xbb\xdb\xb4\xe3\x4b\xef\x14\x1d\x92\x1c\x51\x3a\x9e\x92\x4b\x30\xdd\x15\xac\xa9\x09\xe2\xc3\x8d\x5d\x8d\x03\x7d\xb8\xd0\x01\x3d\x0e\x2f\x5d\xe8\x90\x3a\xb2\x3d\x49\xe8\x21\x34\x0b\x1d\xa4\x78\x4e\xfb\x6d\xd0\xe3\x28\xa4\xbd\x72\xa0\x10\x7b\xe8\xf7\xa4\x65\xf0\x58\xcb\x3a\xf9\xf0\xba\x16\x69\x22\xdc\x52\x52\x29\xfb\x2b\x11\x46\xee\xc1\x14\xfb\x11\x99\x83\x4d\x47\x08\x2c\x5e\x0a\xe4\x7a\x40\xb9\x43\x82\x9d\x2c\x2e\x51\x04\x0d\x2a\xc6\x2d\xde\x61\x9f\x5c\x4b\xc8\x3a\xd2\x08\x5f\x2c\xa3\x8f\x1f\x1e\xf6\xc9\x57\xa0\x3e\x4a\x4a\x49\x4a\xaa\xe4\xb2\xa4\xc7\x92\x10\x37\x68\x34\x74\x25\xe3\x90\x1e\x9b\xc1\x65\xf5\x19\x35\x6a\x6a\x9a\x34\x83\xcb\xfa\xd8\x40\x7c\x2f\xc9\x4e\x25\x97\x05\x13\x93\xb2\x9f\xa4\x84\x89\x33\xb8\xec\x3e\x43\x26\x65\xc6\x27\x5f\x47\x8d\x11\xa0\x41\x04\x3f\xf4\x65\x0d\x22\x1d\xcf\xf7\x65\x49\x8f\x66\xe9\x74\x46\xa8\x1c\x72\x75\x3a\x63\x5f\x16\x28\xc7\x60\x92\x1c\x27\xbd\x38\xe4\xea\x74\xca\xfc\x73\xd5\x20\x62\x0e\x65\xec\x35\x4d\xc4\xe2\x5e\xe0\x4c\x02\x47\xa9\x29\x13\xc5\xa9\x41\x00\x64\xc4\xc4\xda\x12\x1b\xcd\x84\x65\x93\x9a\x7c\xf0\xd0\xa1\x83\xbb\xe0\x35\xe9\x04\x84\xa4\xf2\xc1\x36\x48\x4a\xbd\x6d\x68\x10\xff\x36\xb9\xee\x9e\x67\xbf\x7f\xf6\x9e\x75\xc9\x21\x0f\x7c\x7a\xf0\x10\xb5\xf7\xd0\xc1\x81\xc5\xf0\x1a\x84\x20\x04\xaf\xa5\x8f\xa0\xc1\x36\xe9\x19\xe9\x99\x36\x34\x08\xdd\x52\xbb\xf4\xc2\x4b\xdb\x2b\x2a\xb6\xbf\x04\x55\x70\x1b\x54\x29\x7e\xe5\xdd\x2c\x18\x44\xd4\x3b\xc3\xf9\x42\xfe\x78\xc0\x14\x0f\x58\xd4\x60\x82\x80\x1a\xe2\x60\x02\x3c\xfb\xfe\xfb\xef\xbf\xdf\x05\xcb\xd2\x9f\x4b\x6f\xaf\x86\x4d\xd2\xde\xd5\x50\x88\x73\xd6\xdf\x77\x1f\xac\xbd\xef\xbe\xf4\xdf\xa4\x5b\xd2\x9f\xe1\x17\xa4\x77\x56\xc3\x66\xd8\xbc\x5a\x7a\x07\xbf\x90\xfe\x4c\xb1\xab\xc9\x60\xbd\x0c\x48\x40\x85\xa8\x02\xa1\xe1\x95\xa3\xe1\x15\x24\x96\xb0\xf9\x59\xac\x1c\x28\xeb\x87\x91\x38\x90\xc6\x99\xce\x1c\x61\x50\x53\x67\x53\x53\x67\xba\x89\x38\x74\xd3\xc7\x0a\x53\xdf\x25\xfa\xfe\x3e\x8b\xab\xc7\x21\xea\x69\x17\x71\xd3\x1d\x99\x23\xaf\xc8\xe9\x9a\x28\x92\xbc\x49\xca\x1f\x22\xf6\xeb\xb5\x9a\x4f\xa5\x1c\xa2\xc3\x6a\x66\x52\x0e\xf1\x89\x4c\x34\x59\x37\xa2\x06\x27\xb2\x69\xe6\x31\xb2\x4a\x62\x44\x02\xca\x43\xc8\xa2\x86\x20\xc4\x2d\x85\x00\x15\x72\xf3\x14\x0b\x81\xc5\xce\x72\x6a\xa8\x90\xfd\x42\x27\x95\x35\x70\x8b\x99\xe7\x96\xc3\x09\x7c\x50\x7a\x38\xfd\xcd\xf3\x52\xe8\x79\x55\x88\x29\x5f\xce\xf1\xe6\x81\x5b\xa8\x2c\x12\x54\x51\x89\x01\x35\x3e\x5f\x5f\x6c\x83\xc8\x80\x9a\x6d\x4d\xdf\x82\x97\x09\xe9\x4b\xa5\x57\x6c\xc5\xfa\xf4\x55\xd4\x3f\xf0\x32\x41\x18\xb1\xde\xd6\x87\x28\xb2\xeb\x52\x81\x10\x84\xa3\x5e\x20\x36\xe4\x01\xc1\x09\x71\xc2\x30\xc9\x58\xe5\xe9\xba\x02\x9f\xf4\x28\xe0\x49\x45\xf6\x43\xee\x2c\xcc\x90\xea\xe9\xa1\xc6\x77\xee\xb9\xfc\xc7\x0e\x68\xf9\xe1\xe0\x25\x52\x01\xe1\x36\x48\x2d\x9d\x2f\xa5\x1f\xdd\x76\x62\x8c\xa5\xc9\x32\xe6\xc4\xb6\x47\xa5\xf4\xfc\xa5\xdf\xc0\x11\xf8\x02\x8e\x7c\x83\x7b\xfb\xd2\x6f\x2c\xf4\x61\x58\xd4\xd8\xd1\xbc\x18\xe0\xa2\xbe\xde\x27\xee\x38\x6f\xc7\x91\x0f\x57\xb6\x00\xb4\xac\xfc\xf0\xc8\x8e\xf3\xee\x78\xe2\x75\xa5\x33\x18\xe2\x6e\x18\x5a\x3f\x51\xe6\x59\x16\x54\x80\x8a\x33\x36\xdf\x36\x6f\xd4\x42\x94\xc8\xdc\xa7\x3f\x64\xa9\x1f\x02\x1c\x31\x3e\xc9\x74\x71\x10\x77\x33\x71\x37\x33\x0a\xb7\x87\xa9\x81\x81\x01\xea\x5b\xe9\x5e\x98\x93\xee\xc0\x3d\xe9\x0e\x2a\xa0\x53\xb9\xa4\xcb\x7e\xf7\x3b\xe9\x32\x97\x4a\xa7\x53\xd1\xef\xa8\x74\x03\x77\x3f\x26\x75\xe1\x3d\x1f\x48\x5d\xf8\x93\xb9\x89\xfe\x82\xc4\xdc\xb9\x09\xfa\x9d\xc4\x5c\xbc\x3e\x95\x42\x83\x3b\x76\x48\x90\x4a\x01\x52\xfc\x03\xb7\xcb\x67\x0c\xa2\x7b\xef\x05\xa4\x53\xf5\x17\xa8\x74\x3a\xba\xfd\xf0\xe1\xc3\xd6\xd3\xa7\xcd\x3d\x03\xb3\x92\x2f\xf7\x4a\x90\xd9\xb0\x67\xf3\xc1\x49\x09\x76\xc1\x49\x0b\xf6\x78\x4c\x8e\xc1\x10\x64\x70\xc0\xa5\x03\x27\xc5\x03\xc7\xda\xc0\x0b\x3c\x0e\x62\x2a\xd5\x59\xb9\xe7\x35\x8f\x6f\xbe\x26\x10\x48\x2c\x6f\x89\x96\xa8\xe9\x92\xe6\x4d\x1b\xaf\x6b\xbc\x11\x20\x14\xcd\x9d\xfa\x8a\x34\xb3\x69\xfd\xac\xea\x31\xc1\xc6\x00\x98\xe0\x59\x88\x9e\xbc\x6a\xa6\x93\xe1\xf5\x7a\x18\xd7\x29\xfd\xd1\xbe\xa7\xf3\xbe\x43\x8f\xe3\xd7\x7e\x35\xf3\xe5\x4d\x16\x53\x81\xd1\x99\x5f\xbc\x7c\x77\xfb\x6c\x93\x6a\xf6\x55\xf7\xec\xdc\xec\xaa\x67\x29\x8f\xcf\x36\x06\x42\xd2\xc5\x35\x3b\x8f\xdc\xf0\xfe\xf3\x10\xba\x62\x52\xf7\xf1\xbb\x3e\xbf\xe7\xd3\x2d\xb3\x67\x0b\xd2\x63\x90\x87\xb3\x78\xec\x9a\x8b\x46\x60\xdb\xca\xc8\x0e\x16\x51\x98\x47\x41\xe0\x68\x97\x5f\xe4\xc9\x5e\x32\x8f\x0d\xc0\x12\x00\x42\x1d\xc4\xe2\x61\x7b\x3e\xd8\xc3\xa1\x78\x02\xca\x20\x88\x03\xf2\x18\x3f\xf3\x46\xd2\xa3\xe6\x22\xe8\xdf\x00\xf0\x99\x65\xba\x52\x87\xd4\x2f\x7d\x29\xf5\x3b\x4a\x75\x39\x8e\xe7\xd6\xe0\x1c\x47\xae\x5a\x63\xcf\x56\xf3\x25\x46\x55\xcc\x54\x64\x8a\xa9\x8c\x25\xbc\x3a\xdb\xae\x51\xe7\x3a\x72\xf0\x9a\xe7\x1c\xd2\x23\x64\x81\x13\xef\x59\xf7\x94\xd4\x2f\x7d\x22\xf5\x3f\xb5\x6e\xdd\x53\xc0\x80\x13\x98\xa7\xa4\x46\xe9\x45\xe9\xb3\x13\xdb\xb6\x9d\x80\x5c\xa8\x84\x5c\xe2\x7b\xf1\x5c\xf3\x9f\x39\x91\x1c\x36\x91\x60\x73\x22\xa5\x6c\x50\x77\xeb\x87\xf3\x27\xda\xb2\xcb\x35\x74\xa1\x75\xcf\xd6\xad\x7b\xac\x85\xb4\xa6\x3c\xdb\x36\x71\xfe\x87\xb7\xea\x82\xec\x31\xb2\x9c\xba\x7e\xd4\x9d\x64\xdf\xea\x6d\x27\xa4\xcf\x46\xdd\x50\x2a\x3f\x17\x0c\x0d\x51\xa8\x61\x10\x31\x4f\x64\xca\x78\x12\x42\xc8\x4e\xcc\x61\xc8\xec\xc7\x42\x68\xed\x03\x19\x04\x67\x20\x16\x87\x00\xc7\x06\x81\x60\x72\x05\xb9\xfc\x0d\xe0\xc7\x0a\x68\xda\x0a\xa1\x38\x99\x55\x40\x34\x12\x17\x58\x9b\xd5\xce\x6c\x6f\x60\x4a\xe8\xda\x42\x96\x2a\xa9\xa2\xbc\xd7\xc4\x0f\x5e\xd9\xfa\xea\xb5\x97\x9d\x77\xe5\xd6\xdb\x41\x75\xe8\x17\xee\x96\x31\x8c\xeb\xaf\x8e\x06\x27\x7c\xe9\xd3\x99\x8a\x5f\x85\x8d\x85\x07\x3b\x3b\x0f\xae\x1c\x78\xaf\x6b\xc1\x9e\x03\x4f\x1d\xec\x3f\xb0\x69\x4f\xcd\xab\xf8\xfb\x09\x65\xe9\x77\x8b\x2a\x81\x1a\x57\x02\xf7\xab\xd6\xef\x78\xe7\x96\x2b\x97\x5f\x76\xed\x89\x85\x57\x6d\xc8\x81\x92\x79\x3f\x71\x32\xf5\x2d\x79\x6f\x0a\x9c\x59\xfa\xdc\x56\x36\x2e\xf4\xa5\x15\xee\xee\x94\x2f\x73\xea\xe9\xda\x3d\x9b\x0e\x9c\x3a\xf8\xe4\xc1\x3d\x2d\x6b\xae\x7d\xf5\x2c\x8d\xdf\x69\x44\x0b\x6e\x94\xc6\x2f\x58\x79\xcc\xf1\x58\xd9\xec\x26\xd1\x09\x2a\x4e\x78\x2d\x88\x6c\x11\x41\xb3\x04\x15\x90\x09\x76\xf1\xd8\xe8\xc4\xae\x04\x36\x06\x61\xe4\xf8\x96\xea\xce\x48\x14\xf7\xf0\x66\x40\xce\xda\x62\xd1\x95\x27\x90\x90\x2d\x27\x9c\x9f\x17\x2d\x99\x17\xa9\x0c\xe4\x85\xd5\x46\xad\x6a\xb5\x86\xe6\xb6\x7d\x7a\xc9\x1f\xbe\x1e\x25\xca\x0f\xd7\x8e\x1e\x14\x37\x0f\x5d\xd1\x0c\x9f\x84\x9a\xc7\x38\x6d\x66\x6b\xae\x81\xec\xe3\x35\x78\xab\x7d\x5e\xa3\x3e\xdb\x97\x5f\x54\x9d\x63\xad\xd3\xb1\x33\x39\x87\xa6\xf7\xbf\x60\xdc\x69\x01\x7e\x72\x59\xe9\x91\x51\x43\x69\x44\xa3\xc0\x20\xc5\xcc\x27\xf3\xc3\x04\x9a\x8e\x3a\x10\x42\x9e\xa1\xd5\x1c\xb0\xb2\x62\x00\x82\x60\x00\x36\x1f\x2c\x14\xc1\x6a\x90\xd9\x70\x0e\x70\x82\x9d\xbc\x73\x41\x2a\x4a\x59\x14\x4e\xce\x7c\xe0\xec\x8c\x3c\x83\xb4\x0b\x76\xb9\x7a\x04\xbc\x62\x80\x22\xfc\xb4\x72\x40\x04\x7b\xac\x0e\x62\x51\x78\x20\xb5\x70\x61\xaa\x15\xf6\xd6\x8c\xe3\xa5\x6b\x39\x9e\xa6\x38\xed\x36\xf8\xc9\xb8\x6c\x83\x3e\x14\xcd\xcb\xa6\xf0\x2f\x99\x39\x5e\x5a\x63\xb6\x72\x9c\x25\xdf\xa4\xa5\x83\xbf\x17\x16\x34\xba\xe0\x2e\x8e\xa3\x80\x93\xd6\x14\xb7\x66\x65\xf9\x58\x6d\x99\x37\x51\xa0\x06\x16\x6f\xa7\xae\xcb\xa7\xd4\x5a\x2b\xbb\x41\xfa\x0d\xa5\xa2\x28\x2d\xfd\x52\xeb\xd8\x64\x6b\x6b\x72\x6c\xda\x1b\xf2\xda\x05\x78\x58\xc7\x61\x4a\xa5\xdf\x23\xdd\x2a\xc5\x7b\x8b\x1c\xac\x23\x5b\x5f\x93\x63\xc2\xf3\xa1\xe7\xf6\x0f\xb3\x7c\x16\x3d\x60\x4a\x67\xcd\x32\x60\x28\x86\x8b\x3c\x05\xe9\x7f\x30\x3a\x0a\xf4\x3f\x5d\xdf\x57\x19\x6f\x73\x4d\xc8\xb1\xeb\x5c\x16\xa3\x1a\x16\x49\xf7\x57\xa8\x18\xcc\x68\x0b\x35\xf7\xc1\x49\xa0\x31\x56\xab\x08\xf7\x19\x85\x3e\x55\x23\x3a\x17\x61\xa4\x45\x5e\x54\x81\x1a\xd1\x72\xb4\x43\xee\xe1\x28\x26\x92\xb1\x01\x02\xcb\xb0\xba\x04\x99\x13\x88\x8a\xdc\x9a\x3c\x02\x18\xd1\x47\x80\x95\xa7\x38\x6f\x82\xaa\x83\x48\x90\x0a\x84\x9d\x54\xfe\x7f\x10\x23\xc0\x0f\xf7\x02\xd5\xb2\xbc\x23\x16\x69\x5d\x9d\x7e\x0e\x2c\xfc\x3b\xbc\x45\xfa\x20\xae\x31\x4b\xdf\xd9\x2c\x7a\x5c\xa2\x36\x43\x13\x6f\xa5\xaa\xfb\x5f\x90\xbe\xe5\xad\x56\x1e\x74\x2f\xc2\x0d\x60\xc8\xad\x2d\x0e\x8b\x55\x0e\x23\x00\xf0\x8e\x4a\xb1\xb8\x30\x91\x67\xc2\x8f\x81\x21\x37\x71\x3a\x3e\x7b\x28\xfe\xe1\x4c\xfa\xca\x33\xe3\x01\x3b\x41\xfd\xd3\x79\x5d\xd2\xf6\x0d\xf0\x72\x5a\x27\x5f\x3d\x31\xc3\xe0\x33\xe1\xef\x78\xeb\xf3\xd2\xc5\xef\x5b\x79\xfc\x77\xde\x2a\x2d\xd3\xfa\x56\x2d\xde\x52\x5c\xba\x65\x65\x6b\x4e\x8e\x2a\xaf\x75\xe1\xae\xea\xb2\xad\x2b\xe6\x3b\x1c\xff\x8f\xf1\xca\xfe\x27\x93\x62\xbe\x45\x53\xd0\x42\xb4\x06\xed\x44\x88\x89\x04\x81\x90\xea\x13\x71\xc6\x40\x90\x0a\x88\x91\x78\x82\xca\x10\x76\x13\xb5\x74\x9c\xb1\x6e\xe7\x08\x59\x9e\x3c\x25\x14\x4e\x23\xd5\x12\x60\xf1\x88\x11\x65\x69\x27\x12\x0b\x09\x76\x2b\xc7\xda\x3d\xf2\x45\x62\xc6\x4c\x8c\x91\x53\x22\x12\x60\x14\x33\x51\x66\x23\xe6\xf0\x4a\x87\x0f\x83\x4a\xad\x36\xf8\x84\xf6\x2c\x8f\x9e\xd5\x30\x2a\xf0\xfb\x41\xc5\x68\x58\xbd\x27\xab\x5d\xf0\x19\xd4\x6a\x15\x60\x9f\x63\x9e\xcb\x9a\xed\x49\x56\x4d\xaf\xcb\xcb\x67\xa9\x0a\x51\xac\xa8\xcc\xa9\xdb\x44\x51\x49\x4f\xb6\xd5\x35\xef\xa8\x43\xb4\xf8\xfd\x16\x31\x62\x69\x6c\xb4\x3d\x1a\x33\x5b\x2c\xdd\xdd\x72\xe8\xf0\xe1\x63\x72\x60\xc1\xe2\xc5\x0b\xe4\xe0\x9a\x4d\x9b\xd6\xdc\xa8\x6d\xdf\xaa\xa6\x4b\x73\x54\xbc\x56\xcb\xd8\x2c\x79\x74\x4a\x4a\xd1\x79\x16\x1b\xa3\xd5\xf2\xaa\x9c\x52\x5a\xbd\xb5\x5d\x6b\xaf\xd5\xa9\xcc\xa6\xb2\x39\xf1\x71\x3a\x6e\xd5\x7b\xd2\xb7\xef\xad\xda\x16\x68\xf5\x01\x98\x55\xba\x5a\xea\x4e\x31\x6a\xf1\x47\x23\x01\x4b\x44\xb4\x34\xbe\xd1\x68\xf9\x85\xc5\x12\xb1\x6c\x80\x9a\x0d\x72\xc4\x61\xa9\xe5\xf0\x8b\x72\x44\xeb\x9f\x00\xfd\xa9\x55\x8e\x5a\x23\x7d\x29\xbd\x22\x7d\x49\x78\xd2\xad\x84\xa7\x39\x35\x3c\xd6\xcd\x27\xda\x46\x71\x54\x87\x26\x12\x3d\xad\x45\x68\x05\x5a\x87\xb6\xa0\x1d\xe8\x72\x74\x0d\xba\x1e\x1d\x25\x76\xf6\x64\x47\xc5\x97\x71\x71\xc6\x1d\x1d\xff\x4f\xd3\x8d\xda\xd1\xfc\x67\xe1\x7f\xe7\xfe\xb3\xf3\x01\x2b\xcc\xc5\xb7\x11\x47\xf9\xc7\xb7\x8d\x8c\x4b\xdf\x76\x76\x8a\x1f\x5d\x84\x65\x19\x77\x13\x47\xea\x3e\x47\x88\x51\x9c\xf4\x19\xa1\x73\xa6\xcc\x84\xa0\xa3\xfd\xf4\x1d\xb0\xe2\x48\xed\x67\xc7\x9d\x11\x18\xe0\x7b\x94\xb3\xe5\x7f\xd8\x7f\x76\xa0\x5f\x71\xa8\x33\x42\xe7\x4a\xa8\xfc\x67\xb8\xcb\xd8\x01\x16\x0d\x33\xc2\x37\xa1\xd9\x68\x25\xba\x10\xed\x45\xc8\x9e\x29\xb5\xd8\x90\x52\x26\x70\x30\x64\x41\xa5\xf4\x96\x94\x6d\xd8\x58\x2a\x46\x64\xd5\xe4\x57\x8f\x58\xfb\x90\xf5\x46\x32\xdf\x1b\x2a\x7b\xbf\x12\xa7\x80\x3a\x94\xe5\x48\x97\xdd\xaf\xe8\xce\xc9\x03\x54\x45\x7f\xcd\xce\xd8\x87\xb0\x9b\x99\x08\x65\xde\xff\x05\xf9\x9e\x05\x68\xc1\x20\x82\xfb\x49\x00\x9f\x14\x22\x3e\x6f\x7e\x9e\x68\xf8\xf8\xa8\x3c\x13\xef\x3a\x2c\x84\x7d\x9e\x82\x80\x4f\xd1\x4c\x10\x23\xe2\x90\x76\x43\x9a\xa4\x87\x09\x62\x44\xdc\xd5\xb6\x70\xb7\x18\x11\x4f\x80\xef\x04\x5c\x45\xc6\x73\x16\x37\xd7\x70\x8b\x4d\x65\x34\x45\x6c\x8f\x80\x5f\x6d\xcb\xd6\xea\x4a\x8c\x0b\x5f\xb5\x73\x46\x63\xc4\xf6\xe7\x9f\x92\x45\x87\x9b\x94\xa5\x87\xd2\x41\xb4\x00\xd0\xe5\x4a\x00\x55\x2f\x6d\x29\x2b\xf4\x8a\x89\xfa\xc2\xa3\x1f\x8b\x11\xf1\x70\x57\xd5\xe2\x39\xe5\x81\x60\x64\x71\x5c\x51\x51\x91\xf3\x94\x11\x86\xf8\x03\x39\x85\xa0\x3d\xda\x76\xed\x6a\x93\xdd\x03\x27\x4e\x5c\x23\x0f\xed\xec\x96\x87\x36\x1b\x23\x36\x9b\xca\x78\xe5\xa5\x64\xa8\xf7\xf5\xcd\xc6\x88\xcd\xce\x19\x33\x38\x5c\x6a\x10\xa9\xd2\x19\x9c\xc5\x0a\xf4\x33\x32\x9e\xcf\x58\xbe\x93\xd1\x6e\x2c\x1e\xf3\x47\xca\x88\x75\x4d\x46\x5c\x51\xee\x7d\x78\x62\xfa\xcd\x85\x14\x48\xac\x5c\xa2\x21\x82\xcc\x87\x62\x10\x03\x7e\x45\xea\x4f\x8c\xd5\x81\x25\x66\x8e\xc7\x9c\x20\x9f\x1a\xcb\x68\xe2\xb1\x9c\x22\xb5\xe8\x27\xc4\x7c\x14\xab\xa0\xd9\xc5\x58\x3c\x16\x1f\xfa\xad\x88\x5f\x19\x23\x26\x08\xcc\x20\xee\x19\x3e\x10\xce\x44\x57\x63\xbb\xc0\xc8\x8d\x32\xad\xaa\xce\x36\x25\xfc\xd1\x46\x9f\xc6\x53\xee\x4f\x98\xb2\xf1\xc6\x21\x5f\x75\xe6\x88\x34\xd7\xd4\xe4\x4d\x4c\x0a\x97\x53\x7a\x6a\xe1\x91\x02\x53\x8e\xcf\x6c\xb3\x99\x7d\x39\xa6\x82\x23\x0b\x59\x63\xae\xf4\xe1\x5f\x79\x43\x81\xa9\x47\xcb\xdb\x5f\x3f\x68\x3a\x74\x41\xfe\xf4\x10\x97\x3f\xa1\xec\xc2\xfd\x05\x75\x34\x53\x5e\x30\xbb\x31\x18\xdd\xb8\xc2\xe7\xa0\x8e\x0f\xa7\x70\x78\x4b\xf3\xb2\x95\x34\xb4\xca\x17\x1f\x99\xca\xfc\x2f\x6e\x05\x7c\x2e\x78\xe5\x7b\xe1\x24\x8e\x7a\x02\x8d\xd1\x4a\xb7\x2a\x3f\xe0\x89\xee\xcc\xb8\x98\xc4\x82\xd9\xeb\x30\xe5\x9b\x60\xd9\x2c\x5f\xa3\x49\xad\x36\x35\xfa\x66\x2d\xc3\x38\x67\x2b\xe7\x85\xa4\x50\xa1\xdf\x02\xda\x9b\xc1\xb4\x2c\x9b\x4b\x4c\x73\x54\x8f\x9f\x6d\x62\xca\x0b\x0a\xea\x68\x4d\xa9\x26\x64\x6e\xdc\x2e\xf5\xca\x29\xa4\xef\x6e\x96\xfe\xba\xcc\xee\xcd\x57\x52\x40\xb9\x6f\x38\x85\xef\x9f\x5c\xfb\x0c\x9b\x63\x0b\x6a\x40\xd3\xd0\x42\x84\x40\x41\x47\x89\xae\x61\x9c\x54\xc8\xae\x68\x53\x90\x10\x79\x13\x79\x18\x7a\x4f\x59\x02\xff\x57\xde\x53\x2a\x1a\x09\x02\x08\xc3\x76\x77\x82\xdd\x6a\xa0\xc4\x40\x1d\xc4\x42\xb4\x4b\x7e\x41\xa4\xf7\x4f\x88\x11\x71\xf7\xa3\xbb\x3b\xe5\x57\x48\xae\xf0\x44\xda\xc4\x17\x28\xf0\xf8\xc2\xc2\xe1\x2e\xb9\x0e\x1f\xfd\xd8\x20\xe6\xe5\x7b\x7d\x11\xa1\xf5\xe6\xf4\x73\x9f\xa4\x9f\xd2\x79\x74\x77\xe9\x74\x6c\xf2\x2e\x9d\xee\xa4\x63\x62\xfd\x25\xad\xbf\xd5\x7b\x70\x6f\xa6\xba\x1f\xc8\x54\x7f\xf8\xb4\xf5\xe6\x37\x37\xcb\x01\xe5\x3d\x89\x2f\x8e\x04\x03\xe5\x73\x16\x57\x75\x91\x65\xcd\xa3\x85\xf5\x09\xd1\x5b\x58\xd6\xb2\xb4\x7a\xf3\x9b\x37\xa7\xf7\xca\x97\xd5\xdd\xa5\xf3\xe8\x58\xf6\x2e\x9d\x47\x7f\x32\x7b\xe2\x8d\x2b\x5b\x7f\xab\x1b\xb9\x86\x6f\x45\x2d\x44\x75\xc9\xca\xf1\xa0\xf0\x8c\x67\xf6\x78\xc2\x21\x3b\x64\x86\x02\x01\x79\x28\x2f\x0f\x09\x30\xb1\xdd\x57\x50\xe8\x5e\x4f\x34\x22\x17\x05\x79\xa3\x32\xa4\x27\x09\xc2\x25\x9e\x01\x8c\x87\xcf\x66\x47\xa3\x96\xe8\xb5\x85\x1a\xcc\x68\xad\xda\x31\x91\x09\x0d\xb9\x42\xae\x09\xbe\x98\xa6\xb7\xe9\x5b\x2f\xc7\x54\xc5\xb7\x59\x25\xed\x87\xa6\xfc\xe4\xba\x6c\xa0\xed\x7c\x63\x69\x91\x2d\xcf\x69\xe7\xb2\xc6\xe7\x7b\xab\xb2\x57\xcc\x9b\x79\x60\xbe\x8d\xb5\x30\x94\xf6\xfc\x35\xe5\xd3\x81\x62\xd4\x8f\x9e\x61\x9c\x97\xce\x19\x17\x7a\x31\xa4\xa5\x00\x2f\x4d\xb6\xdc\x27\xf2\x6e\xa9\x8a\xbf\x90\x51\x4d\xc5\xf6\x4f\xc6\x9e\x64\x4d\xd7\x3e\xb9\xe8\xc0\xad\x2c\xf6\xcc\x8a\x2c\x29\xcb\x2a\x73\x65\x1b\x80\xe2\xec\x79\x0d\x33\x3d\x2d\xab\xbb\x0e\x34\xdb\xe7\xdb\x75\x6c\x8d\x19\xd4\xd8\x70\xa6\x99\x1e\xc2\xc8\x3f\x88\x98\xf7\x98\x41\x94\x8d\x96\x23\x44\xf8\xea\x3c\x1c\x8b\x6d\x56\x27\x0e\x87\xec\x09\x1c\x97\x1b\x01\xb0\xb2\xde\x80\x72\x84\x94\x22\xe5\xf5\x0c\xcb\xa4\x5b\xe5\x0a\x24\x17\x0d\x15\x8f\x46\xc4\x22\x05\xd2\x45\x54\x34\xc3\x2e\x93\x15\x73\x0a\x35\x90\x13\xf0\x97\xb4\x3e\x4f\x08\x04\x56\xae\x36\xf9\xc6\x97\xd1\xb9\x3a\xab\x06\x1b\x93\x46\x0b\xfe\xd6\xa0\x62\xed\xcd\xc9\xfc\x3b\x1f\x35\xb0\x9a\x3c\x95\xd0\xbe\xeb\xa1\x8e\xcb\x8f\x06\xe6\xc5\xc4\xdb\xc1\x1d\x0c\xba\xdc\xae\xd2\xe6\x68\xb1\x9d\xe1\x34\x1a\x0d\x7c\x7a\x6a\xfc\x85\x4f\xad\x8d\xc4\xe0\xfc\x26\x86\x5a\x7e\x6c\xae\x3d\xdf\xb2\x8d\xfe\x6d\x56\x5e\xbe\x41\x18\x23\xfd\xe3\xca\x92\x59\xd3\xca\x00\x18\x9d\x66\x2a\x44\xa7\xb6\xa6\xef\xe4\xf4\x40\x19\xd5\x6d\x2a\x8b\x6f\x4f\x7e\xeb\xf1\x1b\xda\xef\xbc\x22\x9a\x5a\x39\x2e\x17\x84\x40\x68\x92\xe8\x2e\xa8\x6b\x3b\xbf\xa3\x48\x8d\x29\xf8\xee\x93\xd5\x9f\x3c\xb7\xcf\xa2\x96\x6e\x58\x22\xdd\xe6\xa3\xaa\x12\x7a\xee\x19\x44\x21\x18\x44\xec\x0e\xa6\x1f\xd5\xa2\x99\xe8\x72\x84\x20\x94\x2f\x4f\x69\xc8\x2c\x98\xd3\x43\xa6\x22\xf9\xdd\x44\x53\x35\x5c\x0a\x4a\xdb\x06\x8c\x9f\x78\xc2\x21\x81\x11\x42\x8a\x81\x9c\x3c\x41\xe2\x84\x32\x4c\x0d\x01\xd9\xf3\x41\xae\x8a\x76\xb0\xd8\x0d\xc0\x1a\x20\x56\x06\x22\x69\xa7\x39\x4a\xd9\x52\x54\x83\xe2\x5a\x32\x61\x8b\xe0\x24\x89\x62\xf1\x90\x9d\xaa\x73\xe5\x7c\x58\x5b\x71\xa0\x40\x3b\x89\x2d\x73\xa5\xff\x26\xf5\xa8\x03\x55\x31\x11\x68\x29\x59\x58\x85\x71\x4d\x00\x1e\x4f\xff\xa3\x30\xc4\xb2\x55\x7e\x0d\x7c\x2c\xfd\x44\x2c\x67\xd9\x98\x97\xe5\xa1\xf7\x5d\xa0\x41\x30\x58\x1f\xf7\xf2\xd9\x39\xb6\xc7\xdf\x63\x7c\x5f\x03\x05\x59\x5a\x57\xfe\x94\x9c\xab\x31\x0b\x2e\x33\x75\x87\x81\x36\x94\xeb\xe2\x5d\xb8\xf0\x40\x34\xf9\xa1\xa7\x28\xec\xff\x73\x36\xef\x71\x4f\xcd\x02\x8d\x74\xca\x66\xf3\x7b\x1b\xad\x7f\xbb\xc2\x60\xf3\xf8\xa7\x99\x9e\x5d\xae\x72\x66\x81\x0e\x57\x16\x06\x2a\xa9\x45\xe6\x83\x05\x55\xf7\x04\x6b\xa4\xa5\xae\x62\xba\xd2\x55\x59\xe0\x8f\x31\xae\x9a\xc2\x40\x04\x92\x4c\xb2\xd0\x5b\x5a\xd3\xae\xa9\xf3\xfb\x4a\x71\x87\x1f\x82\xfa\x8b\x84\x19\x6e\xf1\xe5\x8b\xfc\x58\x04\x16\x18\xc8\x9f\x96\x2d\x68\x73\xaf\x03\x06\x97\xae\x86\x3b\xa5\xef\x27\x4f\xf9\x43\x75\x6e\x2c\x51\x76\x4f\x6d\xd1\x41\xc1\x0f\x95\xee\x19\x82\xdd\xe8\x92\x7a\xe0\x05\x6f\xb3\xc5\x9c\xe5\x91\x16\xc2\x0c\xef\x34\x93\xc5\x21\x4a\x8b\x7f\x65\x60\xac\xc6\xbe\xc2\x1a\xa8\x52\xda\x40\x27\x87\x98\x25\x68\x26\x6a\x43\x6b\x50\x37\x42\x7e\x45\xbc\x20\x1a\x49\xb0\xf1\x98\x5f\x8c\x46\x14\x5b\x93\x58\xd8\x85\xe4\xb1\xbd\x62\xa2\x4d\xa6\xef\x98\x50\xfe\x3b\x40\x09\x06\x80\xe5\xec\xc8\x66\xf5\x7a\xc4\x32\xa0\x88\x60\x81\xc5\xea\x17\x7c\x16\xec\x27\x34\x0d\x48\xae\xf1\xf6\x4c\x4b\x2a\x7a\x3d\xfe\x80\x00\xd3\x31\x3d\xf7\x8e\x2a\x1b\x4d\x6b\x38\x9e\x35\xe3\x47\x41\xb7\xd6\xb4\x49\x67\xd6\x6c\x5f\xb8\x0c\x34\xf0\xdb\xeb\xac\xd6\xd6\xc1\xeb\xd7\x9a\x36\x69\x2d\x9a\xed\x49\xa9\x81\x1b\x53\x48\xfd\xf0\xb5\x5a\x5f\x5d\x45\x49\x95\x81\xe2\x2c\xd8\xae\xe5\xaf\xa4\xbb\xfa\x4a\x3c\xd8\xc5\xfd\x8c\x8a\x54\x80\xe9\xf8\xcf\xa5\x93\xe3\x26\xb5\x4b\x6b\x73\xad\x73\xb7\xe5\x16\xe4\x3e\x74\xb1\x15\x66\xaa\xb9\x9f\xe3\xaa\x9f\x2d\x74\x06\xd4\x56\xa3\x55\x67\x57\x09\x54\xff\x86\xe7\xf5\x16\x4d\xd2\xf8\xb9\x45\xfa\xea\xcb\xfc\xa6\xfc\xab\x3f\x4a\x3e\xaf\xb7\xaa\x93\xc6\xcf\xb7\x50\x11\x2e\x4b\x60\xa4\x98\x34\x89\xe2\x30\xc5\x51\x93\x73\x0b\x8a\xd3\xe3\x68\x4d\x09\xfb\x6b\x38\x12\x8d\x52\x25\x3a\xe9\x31\xcd\x79\xad\xeb\xc0\x0c\xb6\xee\xe4\xdd\x0b\xbb\x9e\xc2\xd5\x05\xb9\xdb\xe6\x5a\x73\x73\xad\x17\x3f\x64\xa2\xb9\x21\x1c\xd9\xf5\xb4\xc4\xac\x44\xf9\xa8\x8c\xe8\xe5\xca\xad\xa9\x02\x2f\x25\x8d\x80\xc0\x72\x19\x38\xae\x4b\x9e\x39\xc5\xe2\xf6\x80\x15\x1b\xc0\x13\x48\xd0\xd1\x48\xc0\x1e\xb0\x89\x01\x27\x58\x3c\x01\x79\x68\xc0\x03\xa7\x34\xbf\x72\x43\xaa\x08\x2b\xd1\x8e\xeb\x0e\x7e\xf1\xe5\x81\xeb\xae\xf8\xf6\xba\x8e\xb9\x2e\xae\x7e\xea\x9d\x9f\x7e\x0c\x33\xfb\x5c\xf5\x55\x85\xaf\x1c\x3d\xca\xe7\xb9\x67\xed\x98\x54\x6a\xa0\xe2\xf1\xc9\x97\xb6\xac\x49\xcf\x9a\xfa\xde\x24\x0b\x2e\xfa\xe5\x2a\xaf\xc7\x11\x5c\x57\xdd\x9e\x33\x25\xcb\xb5\x1e\x1e\x78\xfb\xe8\x4f\x7e\x72\xf4\xed\xeb\xfe\x71\x20\x3f\x91\xcc\xfd\xfe\xae\x7b\xbe\xfa\xea\x9e\xf9\x53\xf5\xbe\x25\x8d\xbd\xd2\x89\x65\xc0\xb8\xf6\xdd\xf5\xbb\x07\x5b\xc7\x7b\x7a\x6e\xc3\x6f\x7d\x52\x3d\x28\x3d\xd6\xb8\x75\x87\xdf\xd2\x7e\x6d\x76\xac\xda\x3f\xdb\x51\xe2\x34\xce\x19\xb3\xf2\xe0\x9a\xda\xa9\xab\x86\xf8\xb1\x48\xdf\xe1\x40\x85\x28\x88\x1a\xd0\x6c\xc2\xe0\x41\xe0\x63\x6c\x86\x2e\x40\x88\xc5\x15\x95\x64\x57\x8c\x22\x82\x57\x9c\xbd\x1a\x62\x26\xb9\xb7\x08\xd8\x99\x08\x41\x1c\x10\x91\x43\xf9\x89\x33\x43\xb1\x51\x9d\x05\xed\xc8\x2d\x2c\xb1\xdf\xf4\xe5\xcd\xb7\x6c\x8c\x96\xd2\x42\xcd\xd8\x9b\x7e\xfb\x5b\x88\xfc\xf6\x21\xac\xc9\x0f\xcd\xab\xb2\xd9\x34\x7f\x10\xe9\xe6\x31\x0b\xe1\x92\x70\xe1\xac\xf1\xcd\x59\x53\x2e\xcd\xa3\xf7\x35\x44\xc6\x84\xa7\xd9\x4c\x30\x79\x64\xe7\x00\x7f\x9d\x36\x3e\x5b\x1d\x4a\x6e\x3e\x76\x6c\xf3\xc6\xbb\x2d\xc5\x25\xb6\x77\xa5\x97\xdf\x78\x13\xd2\x59\x65\x75\x5b\xaf\xdd\xb8\xd8\x4e\xed\x01\xe3\xa6\x35\xcd\x8f\x04\x6e\x29\x3c\x6f\xd2\x5c\xc1\x32\x7e\x6c\x81\xdf\xb4\x6c\x6c\x64\x8b\x18\x99\x12\x2d\xfa\xe6\xac\x3e\x61\xe8\xf9\xa7\x13\xdc\x5c\x64\xe8\x1d\xc2\xca\x08\xdd\xeb\x09\xc4\x32\xdd\x22\xc7\x2a\x80\x01\xe5\xe7\x27\x06\x82\x2c\x89\x93\x7b\x0f\x22\x15\x1c\x0e\x11\x6c\x15\xe9\x3a\xcf\xdc\xee\x1d\xb4\x8f\x3b\x2f\x8f\x0b\x94\x05\xfc\x56\x5d\x81\x96\x56\x31\x26\xdf\x65\x73\x5e\x68\x32\x31\xb4\x46\x57\xa0\xb1\x79\x03\x65\x01\x2e\x79\x99\xfd\x4a\xac\x32\x18\x75\x61\xde\x9b\x2c\x99\x58\x58\x3c\xa9\x38\xe9\xe5\xc3\x7a\x23\xaf\xc2\x57\x02\x8c\x5e\x0d\xdb\x6d\x67\x0c\x2d\x49\x0b\x6b\xb0\xeb\xf2\xec\x96\x6c\x23\x5e\x64\x99\xee\x9d\x36\xef\x0e\xef\x74\xcb\x22\x6c\xc8\xb2\xda\xf2\x74\x76\x03\x6b\xb9\x2a\x8f\xb1\x07\xed\x4c\x91\x45\xed\xf4\x3a\x9d\x5e\xa7\xca\x5a\xc0\xd8\xa1\x7f\xf4\x3a\x18\x20\xc3\x60\x8a\x5d\xcf\xa4\x48\x29\xc4\x14\x1d\x30\x05\xc8\x44\x74\x07\x09\x01\x97\x90\x91\x07\xc3\x0a\xae\x29\x63\xcf\xa4\x14\x93\x52\x6c\x4a\x55\x8f\x45\x23\x41\xac\x10\x4d\x84\x43\x19\xf1\x72\xaa\xf9\xb2\x37\xab\x72\xd4\x3c\x6f\xae\x37\xe7\xc5\xea\x1a\xeb\x74\xfe\x5d\xd3\x73\x23\xb9\x7f\xe0\x54\x56\xc1\x3a\xdb\xee\xcf\x76\x25\x62\x89\x05\xb1\xc8\xfc\xda\x58\x22\xdf\xe1\xcf\x9a\x65\xca\xb6\xaa\xb8\x3f\xe4\x46\x72\xa7\x5d\xea\xd3\xd5\x35\xd5\x45\xf2\x0c\xf5\x56\x33\xaf\xce\x49\xbe\xc3\xa4\x60\xcf\x85\x63\x2e\x28\xdb\xcf\xe5\xf8\x72\x5d\x25\x96\x40\xae\x21\x77\xe6\x15\x6e\x9d\x96\xcd\x9b\xe0\xd6\x56\xfa\xf5\x0c\xe3\x2d\x2c\xc8\xc9\x29\x28\xf4\x32\x8c\xc1\x3f\x46\xeb\x9e\x90\xc7\x6a\x75\xae\xab\x66\xe4\x1a\x72\x03\xd6\xe2\xfc\x1c\xbf\x83\xbb\xba\x7c\xdb\x98\x2b\xb7\x8d\xaa\x03\x8b\xfe\x4f\xeb\xc0\x68\x06\x03\x06\x29\xf5\x20\x18\xf0\x5b\xb5\x05\x3a\x52\x0f\x2e\x9d\xfb\xfc\x54\x33\xab\x61\xb4\x85\x1a\xab\x37\x10\x24\xf5\xe0\x2a\xac\xe2\x8d\xfa\xb0\xde\x3b\x56\xa9\x07\x63\xbd\xfa\x88\xde\x60\x50\xc1\x55\x80\xce\x78\x19\x76\xdb\x19\xbe\x65\x2c\xaf\x1d\xae\x04\x75\x91\x69\xbe\x69\xf3\xee\x10\xa7\x8a\x4d\xd8\x98\xad\x54\x02\x2d\x2f\x57\x82\x32\xb9\x12\x68\x94\x4a\xa0\xb6\x14\x53\x76\x4a\x3b\xea\x5d\x00\x05\x93\xc8\x22\xd2\xea\xf1\x8c\x32\xfc\xe1\x58\xce\xc7\xb0\x5c\x02\xea\x20\x41\xc5\x63\x0c\x99\x3f\x51\x6c\x80\x58\x00\xb3\x41\x5c\x06\x91\x68\x24\x1c\x8a\x9b\x51\x38\xe4\x64\x84\x78\x82\x8e\x27\x28\x35\x1a\xdf\x5d\x1f\xb5\xdb\x29\x4d\x58\x30\x4c\x18\xdb\xac\x2a\xeb\x94\xee\x95\x3e\x5a\xf8\xfb\xb2\x69\x46\xc3\xc4\x47\x67\x5d\xda\xf4\x38\x08\xa0\xd6\xb2\xec\x73\x06\x57\xea\x93\x03\x12\xba\x62\xe6\x65\xcd\x45\x3a\x60\xaf\x3a\xd9\x0b\x6b\x5e\x62\x2c\x55\xd1\x09\x95\x11\xfe\x3c\x2c\x86\x27\x2e\x8e\xd4\x6f\xdf\x52\xcf\xa2\xe0\xc2\x09\x93\x8b\xca\x58\xf3\x57\xc1\xbc\x3a\xb1\x84\xcd\x7f\x91\xbf\x2f\x7a\xb1\xd1\xc9\x71\x39\x8d\x2e\xbf\x3e\x5f\xa4\x58\xbb\x56\xba\x33\x8f\xcb\x9a\x8f\x21\x37\xe8\x31\x01\x00\x1b\x87\xb5\x50\x03\x6a\x83\xa7\x74\x72\xf0\x38\x3d\xb5\xe3\xc2\xfd\x63\x67\x6e\x99\xe2\x1e\xc1\x83\x35\x01\xb5\xa0\x76\xb4\x8c\x60\xdb\xac\x5c\x40\x60\x47\x7e\x3c\x81\x38\x27\x8e\xfc\x44\x23\x71\x21\x10\x1b\xf9\x09\x87\x04\x2e\x6e\x3f\xe3\x13\xc1\x3e\x2f\x99\x7c\xc8\xd5\xc1\x67\xb6\x10\x5c\xb6\x49\x81\x67\x93\x2f\xa6\x88\xf9\x4b\x9f\x25\xf0\xd6\xf1\x92\xba\x23\x2b\x6a\xa7\x4f\xe7\xc5\x26\x91\x9f\x36\xa5\x7e\xc5\x91\xea\x8a\x87\xde\x0a\x58\xfa\xbe\x62\x98\xaf\x3f\x96\x13\x04\x6b\x6f\x5d\x31\x6e\xf2\x54\xbd\x2f\x20\x2a\x29\x6e\xad\x0d\x1e\x7f\xd3\x6f\xeb\xfb\x8a\x71\x1e\x91\xfe\xfb\xd6\x2d\xef\x1c\x59\xb8\xf0\xc8\x3b\x5b\x6e\x05\xfd\x91\xc9\xe9\x75\xe9\x75\xf8\x5a\xfc\xab\x74\x4d\xba\x86\xf9\x55\x9a\xe8\x17\xe0\x54\x69\x3e\x3f\x6d\x72\xc3\x8a\x5b\x6b\xcb\x1e\x7a\xdb\x6f\xff\xec\x1b\x96\xfd\xfa\x13\x4b\xc1\xdb\x0f\x15\x8f\xbd\xb5\x73\xfc\xa4\xe9\x7c\x91\xc7\x5b\xc4\x4f\x9f\x3c\xae\xf3\xa8\x9c\x22\x60\xe9\xfb\x0b\xcb\x7e\xf5\xb1\xa5\xe0\xad\x87\xca\x6a\x8f\x76\x26\xa6\x4f\xe3\xf3\x83\x3d\x60\x38\xd2\x76\xe4\xbd\xad\x5b\xde\x3b\xd2\x76\x04\x0c\xd8\x99\xc6\xd2\x25\xb0\x03\x4b\xb0\xe3\xc7\xdf\xc0\x2d\x54\x1c\x6e\x96\x96\x0f\xbc\x44\xb5\x0e\xa4\xa4\x24\xf4\x52\x29\xe8\x1d\xc6\x59\x12\x5b\xa2\x42\x14\x43\x08\xdc\x5c\x06\x0f\x23\xd8\xc3\x43\x64\xca\xfe\x30\xf0\x2c\x17\x8d\x91\x85\x48\x08\x5b\xc0\xe4\x8e\xc5\xdd\xa6\x88\x18\x88\x3b\x01\x66\xe1\xff\x72\xa4\x57\xac\x3d\x72\x41\x9b\xd0\x58\xba\xf7\x85\x17\xa8\x8f\xfe\x21\x39\x05\x6f\x3c\xda\x34\x6b\x75\xe2\x58\x95\xd5\x2a\x7d\xfa\xd9\x13\xd4\xdc\x81\xcf\xfd\x2a\xfc\xd3\xa5\xcd\xd9\xcb\x2f\x62\xc4\x49\xb7\xae\x1d\x48\x2f\x3a\x64\x61\x26\xbd\xb8\x97\xa2\xf6\xbe\xf8\xde\xa9\x6f\x6b\xe7\xac\x6b\x9a\x51\xe1\xc6\xbf\x74\xdc\x12\x89\xc6\x22\xf8\x83\xf4\x23\xf0\x6d\xff\xdd\x71\x33\xcd\xcf\xd9\x9b\x37\xce\xf3\x5f\x68\x88\xeb\x3d\x83\xe5\xb3\x22\x37\x2a\x45\x55\xa8\x15\xad\x45\x5b\xd1\x7e\xf4\xc7\xd3\xd6\x06\x54\x34\x22\x66\xd8\x07\x43\xb1\xf8\xb9\x03\x67\xfa\x81\xcd\xd0\x64\xc7\x59\x9b\xd5\x2c\x0c\x33\xcb\x0d\x51\x8d\x9a\x03\xf2\x84\x8c\x95\x27\x61\x71\x85\x51\x2d\x1e\x53\xf8\xe9\xc8\xd9\x19\x10\xdf\xd0\x11\xd2\x22\x73\x09\x60\xac\x98\x63\x69\xc3\x90\xea\x15\xb1\x63\x0f\x90\x19\x09\x69\xb1\xe2\x62\x80\xb4\xbe\xa4\x25\xa3\x48\x27\x2e\xcf\xe8\xb0\x32\x5a\x27\x93\x3a\xb9\x61\x27\x94\x94\x9c\x5d\x89\xa0\x66\x7b\x2a\x3d\x9e\xca\x9d\x85\x35\x05\x85\x79\xce\xc2\xfb\x0a\x6a\x0a\x0b\x9d\x79\x85\x0f\x14\xd6\x14\x16\xd6\x0c\x39\xa0\x9b\x2d\xbd\xf3\xe0\x85\x6f\xee\x9f\x69\xeb\xdc\xb9\xd5\x59\x5b\xe9\x74\xc5\x2b\x9d\xae\xb5\x2e\x67\x65\x6e\x85\xbe\x7b\xe7\xd5\x93\x4c\xce\x45\xb1\x4f\x9c\xb3\x1e\x3a\xb0\x6e\xa9\x5e\x9a\x90\x5c\x92\xac\x5b\x56\x87\x37\x37\x5e\xbf\x64\xea\xfe\x78\x79\xeb\x79\xd1\xf9\x3e\x53\x38\x4a\x37\xce\x01\x61\x5c\xcd\x18\xe9\xeb\x56\xba\xba\x38\x73\x81\xb8\xcb\x59\x59\x56\xb9\x60\xf5\xf9\x6d\xb1\xc8\xfa\xf1\xae\xc0\xfc\xc6\xde\xf2\x2c\x73\xe9\xd8\xd5\xf5\xd5\x76\x8b\x80\xad\x94\xc6\x91\x65\x9c\xf7\xe3\x15\xde\x9c\xea\x79\xb3\xaa\x18\x9d\xde\x02\x26\xd1\x78\xa4\x20\xdb\x5b\x1a\x5f\x40\x7f\x39\xa6\xac\x6c\x4c\xd9\xa9\xd9\x1b\x9c\xc5\xc5\xce\x0d\xce\x92\x12\xe7\xbf\xf4\xe1\x97\x7b\x5e\x58\x71\x6f\xdf\xd6\x96\xb9\x0f\xbe\x7d\x9b\xf4\xc6\xf2\xaa\x10\xf9\xcb\xcf\x6e\x07\xcb\x7f\x35\xb2\x96\xff\x9e\x7b\xfe\x8e\x83\x87\x3f\x98\x50\x8e\x1f\x0a\x4d\x9f\x1e\x0a\x4f\x9f\x2e\xf5\x75\xfc\x74\xf5\x84\xea\xa3\x6b\x3a\xbb\x2c\x6c\x65\xc4\x61\x6d\xf8\xe5\x86\x75\xd2\x9f\xeb\x93\x47\x1c\xb0\xa1\x38\xa9\x9c\x3f\xae\xbc\xa1\x19\x2c\xf9\x1d\x5c\xb0\x77\x43\x65\x67\xd5\x95\xb7\x5c\x3c\x3b\x92\x97\x4d\x59\x59\x43\x50\xb4\xae\xdb\x4d\x27\xab\x18\x8e\x31\x19\x2c\xc0\x66\xe9\x58\xcb\x55\xdf\x38\x2b\x9a\x47\xce\xe1\xb3\x91\x9f\xa0\x04\x22\x01\xb7\x2d\x3c\x0c\xa0\x15\x32\x23\xb0\x70\x28\xe6\x0f\x47\xbd\x51\xaf\xcd\x6b\x0b\xdb\xc2\x67\xec\xb9\x1d\x62\xa5\xc3\xef\xea\x2e\x6a\x5e\xba\x77\xef\xd2\xb6\x9a\xce\xd5\x87\x7a\xfa\xfa\x7a\xee\xf8\x0d\xcc\x5f\xb3\x66\xed\xda\xb5\x6b\xc1\x3c\x6a\x08\x81\xb7\xb8\xf3\x77\x37\xcd\xbf\xe6\xf9\x6b\xaa\x97\x2f\xfb\x58\x7a\xee\xe3\xdf\x6d\x59\x4b\x12\x9e\x3f\x7a\x74\x20\xf7\x0d\xfe\x4c\x7b\x19\x20\x2a\x75\x72\x6d\xf5\x79\x3d\x9c\xc9\x6b\x0a\x66\x48\x02\xad\x2c\x41\x3f\x93\x85\x37\x85\xc5\x92\x45\x15\x0f\xdc\x3e\x59\xfa\x74\xce\xed\x27\x7a\xea\x9a\x52\x0f\xa7\x9a\xea\x9e\xbe\x71\xe9\x52\xfe\x97\x91\xa9\x2d\xda\xab\xac\x0e\x91\x46\x03\x8f\x95\xf3\x91\xea\x72\xe9\x01\xa6\x25\xbb\xbb\xa1\x35\x95\x6a\x6d\xe8\xce\x6e\x28\x31\xe0\x42\x33\x16\x45\x65\x7c\x3a\x83\xe8\x74\x30\xa8\x0a\xcd\x45\x0b\xd1\x41\x84\xcc\xa1\x98\xe8\x61\x99\x20\x13\x50\x44\xe2\xea\x20\x88\x59\xaf\xc7\x00\x5e\x53\x28\xe6\xa4\x04\xb2\xf9\x6d\x8f\xc5\xed\xf1\x04\x04\x48\x57\x2c\x0a\x61\x93\x37\x20\x16\x83\xc7\x00\xac\x3c\x94\xa9\x83\x98\x13\x38\xa7\xa2\x5e\x46\x93\xeb\x29\x9d\xb5\xb2\x70\xc2\x43\x80\x87\x20\x04\x60\xb8\xf3\x4e\xb0\xd5\x10\x12\x62\xd5\x10\x72\xb2\x82\x3b\x64\xbf\xa1\xd9\xe5\x6a\x76\xb1\x6a\x4d\x95\x23\xe4\x0d\xda\x2f\x9a\xd5\xdf\x5c\x05\x63\x8e\xdb\xc7\xf8\x9b\xb4\x0b\xeb\x6f\xbd\x99\x71\xe9\x72\x78\x9b\x0a\x0a\x37\x76\x4f\x2b\xab\x5a\x67\x9a\x12\xb5\xba\xb0\xc6\x5d\xdc\x90\xcf\xed\xee\x68\x3b\x52\xbf\xe2\xce\xf9\x55\xaf\xe7\xe6\x14\x5f\x56\xf2\x6c\x76\x95\x5f\x63\x6c\xb6\xe6\xad\xd2\x46\x00\x91\xcb\x82\x4a\x74\x48\xd3\x72\xd6\x4e\x70\x2f\x8a\x17\x5d\x54\x5f\xb3\xfb\xc2\x75\xe5\xd2\xc7\xd2\x4d\x04\x98\x75\x07\x5f\x9f\x57\x5d\x54\x93\xf4\x6d\x5e\x3a\x73\xe6\xd2\x3b\xbd\xc9\x8a\x98\x37\x9c\x13\xe7\x61\xa9\x43\x84\x54\x32\x99\x64\xf5\x53\x3c\xc9\xa2\x88\xb0\xb7\x9d\xee\x18\xff\x50\xc3\x09\xad\x16\x70\xfd\xad\xe9\x3e\x00\x8a\xd5\xaa\xa4\xf7\xd7\x95\x59\x2b\xab\xd8\x90\x39\x2e\x68\x8a\x92\xd3\xb3\x30\xfa\x79\xd3\xb8\xff\x76\xcf\x76\x87\x71\xe8\x3d\x81\x0a\xe7\x5b\x5a\xb2\x7c\x7b\x0c\xf5\x53\x92\xc9\x24\x46\xe9\x94\x43\x1c\x3b\x4b\x53\x3e\x4e\x17\xad\xa2\x3d\xda\x40\x43\x19\x38\x44\x07\xee\x71\x88\x7c\x43\x6e\x44\xc8\xd5\x56\x56\xea\x4c\x3e\x47\x34\x7f\xac\x51\x3c\x03\x73\xf1\xff\x51\xf7\x1e\xe0\x71\x15\xd7\xe2\xf8\x9c\x99\x5b\xb6\xf7\xa2\xba\xea\xbb\x96\x2c\xad\xa4\xad\x92\xb1\x24\xab\x1a\x5c\xe5\x0a\x18\x6c\x79\xb5\x7b\x57\x5a\x6b\xb5\xbb\xde\x62\x59\x0e\x45\xe0\x18\x53\x82\xe9\x84\x8e\x09\xd5\x21\xbc\x84\x40\x4c\xe8\x86\x24\x40\x48\x48\x1c\xfa\x83\x84\x80\x43\x92\x97\x06\x4e\x42\xf2\x02\x58\xd7\xff\x6f\xee\xbd\x92\xe5\x42\x92\xf7\x7e\xdf\xef\xfb\xfe\x3f\xd9\x3b\x73\x66\xee\x9c\x39\x33\x73\xce\x3d\x33\xf7\xde\x33\x73\xea\xa4\x55\xc4\xb1\x05\x50\xb8\x93\x0b\x77\x12\x9f\x0b\x3b\x5d\x9c\xd3\x01\xb5\xb2\x75\x02\xf0\x1c\x6f\x20\xd5\x5e\x2c\x59\x66\xc8\x46\x0c\xac\x8b\xf1\x75\x12\x1e\x6d\xea\xf9\x6c\x51\xcf\x26\xad\xaa\xd3\x3e\x30\xb0\xe3\xde\x14\x3b\xd4\x32\xb8\x60\xd0\x77\x2e\x97\xba\x77\xc7\xc0\x80\xbd\x53\xa5\x9d\xfe\x31\xf0\xab\xb5\x44\xe5\x56\x95\x68\x7f\x9b\x61\x37\xb5\x0e\x2e\x18\x6c\xdd\xc4\x3e\x71\xbb\xb6\x44\xe5\x56\x11\xed\x6a\xe0\x35\x83\xbe\x15\xcb\x97\x2c\x5f\xd5\xb2\x9a\x64\x8f\x78\x25\x97\x2c\xaf\x1a\xd5\x7c\xd8\xbc\x20\xb8\x71\x72\x90\x39\xbd\xaa\xae\xae\x7a\x80\x1d\x9c\xdc\x18\x5c\x60\x0e\xf3\xea\xe9\x07\x9e\xed\x50\x15\x6b\x03\x5a\xa2\xda\xb7\x8a\xd0\xab\x55\xa7\x93\x4b\xf2\x2a\xa2\x0d\x68\x8b\x55\x1d\xcf\xaa\x16\x56\x37\x39\x1c\xcd\x95\x5d\xc7\xdb\x3d\xb6\xa2\x41\xfa\x04\x0e\xca\x19\x30\x06\x32\x1f\xd3\x2e\x49\x27\x59\x28\x1e\x01\x5d\xe4\x34\xec\xeb\xc4\xe1\xda\x70\xc8\x61\x35\xbb\x3d\xee\x3a\x2f\x2d\x25\x7d\x6a\xe7\x39\xfe\x64\x0f\x04\xe1\x10\x0a\x77\x52\x24\x3a\x62\xd8\xe9\x60\x9f\xf7\xa8\x88\x66\xfe\xfd\x17\x30\x9e\x86\x95\x4b\xea\x00\xea\x96\xac\x68\x74\xb3\xdb\xef\xf7\x68\x89\xaa\x4e\x55\xaa\xdd\xf4\x3a\xbb\xbc\xb1\xbf\x08\xa0\xa8\xbf\x71\x39\x0b\x38\xac\x2d\x79\x61\x43\xff\x39\xe2\x9b\x64\xb0\x61\x80\x66\x0f\x34\x0c\x92\xb7\x7e\xb8\x20\x68\xe0\xad\x7a\x56\xf6\x36\x40\x07\xb8\xfe\x4b\xf0\x02\x57\xeb\x5d\xbe\x94\xd6\xb9\x74\xb9\xb7\x76\xfe\xa1\x43\x67\xd5\xe3\xb4\x5f\x5b\xac\xaa\xbe\x28\x42\x2a\x2b\x7d\x4e\xa7\xaf\xaa\x82\xd9\x78\x91\x4b\x1a\x1b\x46\x7d\xc6\xdd\x4c\x67\x45\x75\x75\x45\x27\xf3\x42\xa3\x8a\x4c\xbb\xc9\xde\x35\x6d\x4b\x7e\x83\x7b\x5c\x35\x35\xae\x1e\x7c\xdf\x9d\xad\x3e\x1d\x7f\x64\xb3\xde\x6a\x25\x0f\x1d\x91\x76\xd3\x92\xbd\x6d\xee\x2c\x44\x58\x57\x4d\x6b\x51\x51\x6b\x8d\xab\xf6\x1b\xfb\x57\x53\x71\x41\x5a\x64\x3f\x8a\xd8\x3f\xcc\xd9\xdf\x51\x82\x5c\xa8\x1a\xb9\x91\x17\xf9\xd0\x36\x84\xea\x9c\xcd\x00\x75\x1e\x16\x9c\xc4\x03\x75\x84\x05\x67\x33\xd8\x1c\x9c\x11\x9c\x0e\x60\x49\x1d\x84\x79\xa7\x94\x1d\xf6\xf0\x92\x1d\x46\xd8\x88\x3d\xbc\xcd\x08\x5c\x33\x38\xa5\x9d\x0a\xee\xa0\xc7\x4d\xdc\x5d\xe0\xf6\xcc\x84\xe1\x3a\x9f\x93\x75\xd8\xad\xd2\x46\x6f\xbb\x33\x1c\xaa\x80\x70\xa0\x0b\xa4\xa3\x36\xe8\x83\xac\x11\x38\x58\xf2\x72\xf5\xdb\x60\x01\x8b\x56\x7c\x5d\xfc\xe8\x57\x2d\x7f\x83\x85\xd0\x61\x10\xf7\xc2\x95\x43\x78\x04\x63\x66\xc5\x3a\x7e\xba\x0b\x50\x9f\xf8\x3b\x26\x6e\xfc\x0d\x9e\xfe\x00\x0a\x56\xf1\x6c\x72\x8b\xed\x10\xbe\x9a\xc3\x3c\x60\xd7\x23\x36\xeb\x62\x15\xf3\x7b\x9e\x1f\xe6\x19\xf1\x5d\x06\xab\x3e\x64\xc2\x98\xef\xd8\x04\xa7\x63\xd5\xa6\x5d\x78\x33\x56\xc3\xc3\x2c\x81\x0e\xce\xc6\x6d\xbb\x80\x65\x27\x59\x6e\x2d\x61\x7f\xc2\xb1\x7f\x63\xb0\xd1\xc6\x3c\xcb\xc1\x9b\x7f\x7c\x43\xf4\xbf\xf3\xb7\xb7\xe0\x92\x37\x60\xf1\x8f\xa7\x0f\xbd\x09\x7d\x2f\x89\x77\x0f\x7e\xbc\x12\x8c\x6a\x12\x18\xe0\xf0\x1d\x2f\xc1\xcf\x1e\xfa\xfc\x91\xdf\xdf\x73\x18\x6f\x7d\x1e\x1e\xbf\xfb\xc8\x93\xbf\xdb\x93\x18\x62\xd8\x89\x73\xdf\x9b\xfa\xb0\xaa\xb5\xc0\x92\x27\x59\x76\xcd\x5d\x2c\xf9\x3d\xc6\xf0\x17\x06\xcc\x3c\x53\xb7\x9e\x83\x21\x9e\x6d\x8a\xa9\xe0\x55\x0d\xd9\x0d\x37\x33\xac\xd8\xca\x93\x8e\x75\x98\xfb\xd2\x12\x86\x69\x4b\x71\xe4\x02\x42\x76\x33\x5c\x76\x37\x61\xf1\xcd\xec\xdc\x35\x5c\x39\xf2\xa0\x75\xd2\x5b\x53\x52\x63\x60\xe8\x83\x5f\xb5\xfc\x36\xb4\xca\x17\x22\xc7\x16\x2b\x76\xe5\x88\x84\xe3\x7d\x6e\x1d\x3b\x3c\xe1\x38\x88\x79\x58\x5b\xd1\x32\xe8\xe7\xc2\x2e\x7f\xb3\xb7\xd9\xef\x0a\x73\xfe\xc1\x96\x0a\xed\xda\x0e\xbc\xa8\x63\xed\x43\x37\xbf\x79\xf3\xcd\x6f\xde\x8c\xcf\xb3\x18\x36\x6f\xea\xf9\x7c\x91\xe4\x31\xe3\x40\xcf\x26\xd9\x2f\xd8\x6c\x08\x0d\xed\x31\x61\x71\x13\x53\x65\x2a\xd2\x68\x8a\x4c\x55\x4c\xd3\x62\x21\xd6\x7e\x46\x24\x82\x6f\x4d\xde\x74\x53\x72\xec\xa6\x9b\xc4\x95\x07\x0c\x96\xf7\x29\x3a\x2b\xb9\xdd\x78\x5f\xb2\xf4\x9e\x52\x42\xe5\x7b\x82\xd4\x47\x35\x9a\x8f\xce\x46\x09\x69\xff\x9c\x62\x05\x42\x7c\x2e\x66\xa6\x3b\x81\x4e\x72\x1a\xb8\x58\x5f\x27\x73\x8a\xbe\xcc\x1e\x0e\x71\x52\xcf\xed\x27\xf9\x68\x63\xe4\xae\xb5\x78\xcf\x68\xae\x34\xf1\x2b\x7b\xa6\x0f\xf4\xac\x54\x97\x35\xad\x0a\xb2\xbc\xcf\xde\x54\x5e\xef\xae\x2f\x6f\xb2\xfb\xf0\x23\x56\xfd\x66\xc9\x81\xb2\x12\x1e\x37\x0a\x7a\xeb\x51\x64\xd5\x7f\x2e\x79\x15\x61\x0e\xe8\xad\xe4\xbc\xb1\x9b\x6e\x1a\x4b\xde\x74\x93\xf8\xdd\xea\x8e\x33\xce\x5e\x56\xdf\x3b\x32\xd2\xdb\x72\xce\x96\xe5\x01\xa6\x42\xeb\x54\xab\xd5\x6a\xa7\xb6\x02\x18\xbd\x75\x4a\xf2\xcc\x2c\x87\x73\x47\x85\x56\xc6\x4a\x47\xfb\x7c\x46\x2b\x55\xfc\xe4\xa8\xe4\x35\x49\x15\x6a\x45\xdd\x68\x15\x2a\x20\x84\x02\x5e\x3c\x2b\x01\x58\xea\x11\x9e\x71\x96\xad\xb8\x4b\x99\x39\x8f\xdb\xfc\x2f\xd2\xf2\xf4\x10\x94\x0f\x0d\x90\xb6\xba\xcd\x40\x73\xde\x1c\x21\x4b\xfd\x60\x3b\xd7\x52\xda\xd8\xd0\xd0\xd0\x58\xda\xc2\xb5\x0f\xd6\x5b\x96\x84\x30\x0a\xad\xd9\xf5\xd4\xae\x5d\x4f\x31\xd5\x73\x4d\xe9\xed\xc6\xe9\x97\x8c\x76\xbb\x11\xb7\x19\xed\xc7\x99\xd8\xa3\x4d\x3d\xe2\xde\xb9\x07\x70\x88\x92\x6b\x16\xee\x40\xcf\x26\x58\x37\x35\x16\x6d\x67\xca\x8c\x36\xb5\xda\x66\x2c\x63\xda\xa3\x63\x53\xeb\x70\x17\xad\x7c\x97\xf8\x9b\xd9\x03\x28\xc0\xd2\x46\x6b\xa6\x01\x68\x8f\xe5\xae\xa0\x3c\x99\x2b\x93\x32\x7f\x36\xc9\xbe\x01\x4f\x1e\xbf\x5d\xd2\x93\x04\x15\x92\x40\x27\xf6\x4b\x53\x5d\xd8\xe7\x02\x3c\xf3\x3d\xf9\x84\xf3\x38\x82\xff\x22\x6d\x3d\x4e\xb6\x4e\x71\xc4\xc2\x29\xfc\xda\x30\x68\x49\x48\x44\xa1\x25\x27\x0f\xec\x15\xff\x83\x21\x9d\xb2\xea\x3f\x5d\x24\xfb\xfa\x9e\x7b\x3e\x03\x6c\x96\x66\x96\x4f\x17\xcd\x0e\xef\x1b\x53\xeb\x4e\x1a\x61\x78\x52\x1a\xde\xe9\xcd\xb3\x03\xf9\xd1\xec\xe8\xfe\x6d\x36\xef\x88\x8f\x91\x04\x92\x4a\xf9\xdc\x21\xb6\x32\xaf\x1c\xbb\x13\x36\xa1\x13\x7c\xfb\x38\xd1\x3c\x84\xea\xa4\x43\x48\xab\x65\x27\xb9\xd2\x1a\x59\x3e\x54\x12\x99\x66\x4e\x66\x9c\x31\x71\xfc\xab\x63\xe7\x44\xef\xe3\x3f\x79\xbc\x77\x62\xa7\x63\x0b\x2c\x81\x0b\x60\xc9\x65\x8a\xb5\x31\xfe\x60\xcf\xc7\xe2\xa3\x8f\xed\x3f\xce\x60\xf0\x07\xb7\xbe\x62\x5a\xb2\x66\xcd\x12\xd3\x2b\xb7\xde\xf8\xcd\x6f\xe2\x6f\xcb\xde\xc0\x3f\x80\x90\x78\xbd\xf8\x9d\x3f\x9f\x60\x58\x78\xac\x5d\x26\x54\x8b\x1a\xa5\xbd\x1a\x0e\x8b\xdd\x76\xcc\xcc\x12\x42\xc1\x80\x72\x78\xa0\xdd\xe6\xb4\xf8\x1d\x95\x61\x9f\x5b\x69\x2c\x7e\x59\xae\xe9\xca\xc3\xe2\xa3\xe2\xb5\xe2\xa3\x1f\xef\xd9\x73\x98\x19\xbf\xe1\x98\x59\xe3\x0d\x3d\x87\x77\x42\x72\xe7\xe1\x7d\x4a\x83\x39\xb4\xe7\xb0\xf8\xe8\xfe\xef\x88\x8f\x1e\xbe\x6a\xcf\x9f\x61\xa9\x84\xfe\xf9\xe2\x57\x3e\xbb\x4d\xb6\xb5\x14\x3f\xbc\xed\xb3\x57\x60\xf1\xd4\xd4\x5d\x4a\xab\x8f\xf7\xc7\x52\x21\xef\xb6\x81\xe3\x54\x5e\x78\xc6\x80\xc1\x6e\x43\x52\xab\x42\x26\xab\x8f\x36\xda\xc3\x55\x7a\x38\xe9\x2b\x22\xf3\x70\xf3\xba\x8d\x3d\x8d\x2f\x5d\x79\xe4\xeb\x57\xbe\xd4\xd8\xb3\x71\x5d\xf3\xca\x55\x97\x3f\x7d\xf0\xe9\xcb\x57\x89\x77\x2a\xb6\xd8\xf3\xcf\x3a\xff\xf6\xeb\xae\x11\x2f\xbe\xe6\xba\xdb\xcf\x3f\x0b\x1f\x36\xb4\x0c\xef\x7a\x6d\xe7\x2d\xef\xbe\x7b\xcb\xce\xd7\x76\x0d\xb7\x18\xce\xbf\x6e\xf4\xe9\xcb\x57\xad\xba\xfc\xe9\xd1\xeb\xb0\x55\xe9\xcc\x67\x1f\x5c\x15\xff\x18\x6c\xfc\x85\x17\xf2\xe2\x1f\x3f\x8e\x5f\x35\x7b\xde\x34\x2b\x9f\xb7\x50\x8c\x6a\x50\xc7\x71\x77\x93\xc3\x77\xdc\xad\x64\xae\x3a\xa5\x63\xa7\x59\x6f\x9a\xc7\xdd\x0a\xab\xda\x06\xdf\x1e\x6c\x5b\x55\x7f\xe9\xee\x67\x76\xef\x7e\x06\xee\x3a\x82\xac\x7a\x22\xaf\x92\x8e\x48\xb2\x46\xc5\xfc\x00\x95\xef\x9e\x4d\xb0\x7e\x6a\xfd\xfa\xa9\x64\xac\x7d\xe9\xd2\xf6\x18\x3c\x2e\x89\xf2\xe7\x7b\xd9\xcd\x9f\xed\xd5\x5b\xad\xec\x2b\x9f\x2d\x9a\x51\xab\x8a\x46\x40\x48\x35\xab\x0b\xac\xa8\x14\xcd\x47\xa7\xa1\xa5\xe8\x1c\x24\x50\x7d\x2a\x7d\x87\xe4\xaa\x3d\xf2\xe7\x6a\xda\xdc\x2f\x52\xa7\x27\xa6\xeb\x66\xf5\xa5\xdc\xa3\x93\xd4\xeb\xac\xd7\xf8\xaa\x13\xbf\xdd\x4e\x19\xab\xfb\x9a\x17\x7d\x77\x51\x73\x5f\xb5\xb1\xab\x11\xbe\xde\xd8\x35\x25\x99\xc2\x30\x19\x8b\x61\x5a\x76\x74\x79\xc0\x60\x11\xa7\x66\x36\x47\x82\x74\xe8\x8a\xb2\x45\x4a\xde\x32\x35\x5b\xea\xd3\x29\x1e\x59\x0c\x9f\x2e\x32\x58\xf8\xe3\x6f\xfc\xbe\xd0\xc6\x33\x7d\x8b\x16\xf9\xce\xdc\x18\x0a\x2f\x5f\x0e\x77\x4b\xb6\x36\xe2\xfb\xc7\x74\xe7\xec\x79\x2e\x73\x82\x39\x99\x90\x92\xc6\x6f\xee\xad\xfe\xcf\xc6\x71\x56\x64\x15\x41\xc0\x5f\xa4\x53\xeb\x4e\x48\xb3\x27\x58\xc0\x9e\xac\x63\xab\xbe\xc0\x43\x18\x99\xea\x6a\x14\xd7\x37\x76\xcd\x19\xcd\xff\xfd\x38\x4e\x7d\x8a\xac\x7a\xee\xc0\x89\xea\xb3\x2f\xbc\x7c\x79\x78\x76\x24\xe1\x4d\x69\x14\xa7\x8f\x1d\x8c\xf4\x97\x53\x0c\xe2\xb1\xbc\x23\xdf\x66\x36\x7f\x4e\xc5\xf2\x78\x95\x89\xa5\x33\xca\x0e\x71\x08\x95\x48\xde\x19\x4d\xb8\xa6\x1a\x9b\x4d\x16\xbf\x2f\xec\x65\x24\x23\x67\xe9\xcd\x14\xf8\x1d\x06\x52\x43\x9f\x65\x38\xf9\x34\xdb\x80\x25\x54\x2b\x6f\x89\xc4\xbc\x64\x61\xc3\xfc\xf6\xd5\x0f\xde\x3b\x78\xf0\xbd\x25\xed\x8e\xea\x50\xf0\x8c\x7a\x6f\x55\x6b\xe2\xc1\x2f\xdf\xdf\xdb\x0b\x97\x14\x88\x66\xfe\x19\x57\x9e\xbb\x78\xe2\xdc\x9e\xaa\x48\xf2\x46\xf1\x57\xbf\xd8\xbd\xfb\x3d\x28\xbf\x61\xf2\x0f\x2f\xde\xbc\xfe\xae\xcb\x9b\x37\x2e\xe8\xe8\xc1\x7f\x82\x4e\x68\x17\x5f\x10\xbf\x27\x7e\x5f\xfc\xa1\x79\xfe\xc2\x81\xf9\xe5\xa6\xc8\x39\x49\xe1\x06\x71\x57\xe9\x60\xea\x9c\x6e\xf7\x92\xd5\xe1\xd2\xfc\x0f\xa1\x7e\xdf\xd7\x61\xfe\xcb\xf9\xd3\xbf\xf2\xf4\xa7\x97\x3d\x23\xfe\x60\x6c\xe0\x8c\xa5\x33\xfa\x40\x50\x23\xf6\x56\x54\x89\xbc\xe8\x66\xf4\xac\xb4\xc7\x53\x32\x9b\xc2\x66\x93\x55\x7a\x0d\xa1\xbc\xa4\x37\x49\x36\xff\x75\xb3\x3b\x5f\x25\xfe\xd9\x8e\x99\x49\xcc\x9c\xaa\x67\xb7\xc9\xa7\xef\x05\x03\xa1\xb9\x06\x11\x76\xe9\xe3\xbf\x6c\x3d\x69\xb7\x49\x46\x3f\x8a\xcd\x84\xf4\x8a\xcd\xef\x73\xba\x18\xa7\xcd\xc5\x4a\x96\x25\x6e\x29\x0d\xac\xe9\x98\xfd\x40\x38\x64\x96\xfc\x0b\x79\x59\xf9\x9b\x9a\xc3\xe2\x74\xc0\x0f\x2a\xed\xa0\xeb\x8a\x7e\xf0\x86\x27\xe3\xb6\x56\x76\x0d\xb7\x4e\x7c\xc9\xb7\x1e\x17\x1b\x6c\x6a\xb6\xab\xa6\xfc\xf3\x17\x4b\xdc\x35\xe5\x4c\x7b\x89\xfb\xad\xde\xe2\xb3\x3d\x26\x2d\x6f\x72\x7b\xdd\x35\xe5\x66\x62\x9c\xef\xec\x21\x1a\xfd\x02\x07\xcb\x90\x4a\x77\x28\xe8\x6e\x28\xf7\x99\x00\x2c\x5c\xe9\xc4\x4d\xad\x8b\x07\x5a\x8b\xcb\x4b\xad\xf5\xbe\x85\xf5\x0b\x3d\x65\x26\x15\x47\x54\x1a\x9d\x59\xe3\x2c\x9b\xa7\x29\xed\x39\xbd\x03\xbf\x76\xb9\x75\xc1\x8a\xb5\x95\x26\xd7\x82\x95\xea\xc7\xea\x03\x0b\x12\xd8\xa1\xb5\x6a\x55\x95\xd6\x81\x0b\x86\x37\xeb\xb0\x60\xaf\x22\xc6\xf3\xa1\x0c\x2e\x85\x75\x60\xf6\x27\x4a\xad\xa5\x5d\xf1\xd5\x2f\x7e\x26\xfe\xf6\xd5\x75\x67\x91\x12\x53\xb1\xe3\xbc\x72\x8f\xbb\xa4\xdc\xe3\xc6\x67\x5c\x12\x75\xaf\xb2\x69\x74\x9c\xba\xc1\xb7\xce\xbb\x2c\xd4\xc0\xea\x9a\xf5\x8e\x92\x65\xc6\x05\xc6\x62\x7b\x71\x3b\x30\x0c\x6e\x71\xd5\x75\x7a\xbd\x9d\x75\xc3\x9d\xf3\x6d\x2c\x8b\x89\x49\x3b\xff\xb9\x1d\xe1\xc9\xf1\xe4\x44\x20\x58\xdf\x62\x52\xeb\x6c\xe5\x56\xbf\x7f\xc9\xa2\x16\xa8\x32\x57\xd9\x1d\xda\x32\x67\xf1\x5a\xdb\xc0\xb2\xbd\xbb\xc5\x8f\x7e\x5d\x39\xb8\xb1\xa3\xc2\x64\x5c\xbc\x46\xfb\x1b\x68\xda\x79\x70\x6c\x62\x9c\xd8\x75\x4e\xb3\x4d\x6d\xad\xda\xb7\x53\xfc\xf0\x1b\x0d\x73\xdf\x37\x14\x49\xb3\xbe\x35\xe4\xe6\xc1\x00\x8e\x0a\x80\x90\xd3\xc1\x43\x3b\xf0\xbe\x2e\x70\x3a\x4e\xda\x84\x7d\xef\x75\x6a\x4f\xe5\x91\xbd\xe5\x76\x53\xd1\x2f\x30\xd8\xb5\xbc\x56\x8c\x98\x9c\x8e\xe4\xfb\x8b\x70\xf2\x14\xfb\x11\x7e\x8d\xbf\xd3\xe8\xd6\x89\x8f\x68\xcb\x8a\xf9\x7e\xe8\x35\xa8\x58\x8d\x78\xd9\x87\x8e\xd1\x7b\x6b\xf1\xad\xa7\xda\x50\xc0\xcd\x9e\xed\xa4\x97\xbe\x24\xfb\x25\x3f\xa8\x48\xb1\xfd\x0b\x85\xcd\x7e\xb3\x0b\x9c\x01\xb7\x47\xd9\x38\x28\x89\x58\x65\x28\x6c\x93\xce\x09\x0f\x4b\x1b\x21\xed\x66\x87\x55\xd9\x79\x43\x7f\x98\x6a\x96\x81\x05\x53\x0b\x06\xa6\xfa\x16\x66\xf6\x66\x16\xf6\x3d\x09\x9a\x27\xa7\x64\x23\xbf\x29\x09\x9e\x3a\x20\xfd\x0d\x66\x32\x83\x0b\x63\x76\x72\xc5\x91\x82\x3d\xb6\x70\xf9\x25\x4d\x04\xd1\xac\x69\xd4\x74\xc9\xf2\x5d\x4f\x3e\xb9\xeb\x71\xf1\x53\xe0\x1f\xdf\xbf\x13\xbf\x48\x53\xd3\xed\x3b\xe1\x72\x79\x73\x8d\xb4\xc1\xe6\xff\x17\x6d\xc7\x57\x4c\xff\x3f\xdb\x76\xb8\x42\xfc\xbf\xd2\xf6\xa0\xdf\xfe\x7f\xbd\xed\x57\x5c\xf1\xbf\x69\xf9\xdc\xb6\xab\xa5\x79\x59\x6e\xfd\x6c\xdb\x7d\x8e\xff\x45\xbb\x33\x7b\x33\xff\x4e\xab\x57\x6e\xdd\xba\xf2\x7f\xdc\x62\xd3\xac\x0f\x26\x37\xf2\x4a\xa7\xd5\x0f\xa0\x15\x68\x3d\xda\x84\xe2\x28\x85\xb6\xa1\x0b\xd0\x25\x68\x0f\xba\x11\xdd\x21\x9f\x78\x01\x33\x67\x05\x7a\x21\x2c\xfb\x96\xab\x32\x2b\x07\xa9\x84\x1c\xce\x70\xc8\xe7\xc4\xca\x91\xd4\x8c\xb2\x0f\x28\x34\x93\x9e\x89\x03\x72\x4e\xed\x89\xf9\x27\x96\xff\x02\xfc\x19\x3c\xee\x84\x98\xbd\x59\xa3\x99\xde\xa3\x29\xd1\xac\xd6\x68\x1a\x4f\xb7\xb6\x2d\x89\x6f\xb9\xf1\x28\xa2\x0b\xe9\x2d\xcf\x2c\xde\xf4\x93\xd5\x8d\x9a\x12\x4d\x95\x6c\xa8\xbb\x41\x8a\x64\x43\xde\xe9\xfb\x14\xe3\x5d\xd9\x22\x18\x1d\x97\x39\xb7\xa0\xf8\xce\xdc\x84\x52\x40\xde\x81\xbc\x61\x4e\xc8\xf2\x9a\x12\xda\x0e\xcd\x6a\x4d\x89\xa6\xf1\x9c\xff\x8a\x2e\xbe\x71\xcb\xe7\x88\x45\x74\x55\xbf\x7a\x89\xa7\xbc\xbb\x51\xa3\x11\xef\x97\xf0\x36\x9c\x14\x06\xa4\x2a\xa6\xbe\xe0\xea\x3b\x27\xe5\xb8\x4f\xca\x41\xe6\x39\x67\xf5\xd5\xa1\x26\xc9\x63\x6a\x3f\x5a\x8e\xce\x47\xbb\xd0\x95\xe8\x06\x74\x3b\xba\x17\x3d\x84\xbe\x83\x9e\x46\x3f\x90\x76\x3c\x1d\x73\xb6\x2f\x6d\x54\x9f\x4d\xb9\x3b\x00\x9d\x60\xed\xed\x56\x62\xc7\x09\x69\xf7\x29\x56\x97\xa7\x81\xe2\x0f\xcf\x21\xbd\x56\x74\xf0\xc0\x35\x83\x7b\xae\xd8\xf8\x1c\xe8\x0b\xea\x71\xfc\x9b\xf9\x33\x69\x6e\x4a\x3e\x1c\xb1\xab\x7b\x1a\x75\x77\x59\xf5\x8b\xf4\xd6\x29\xbc\xc8\x52\x66\xb1\x94\xad\x96\x42\xaf\x14\x5e\x3b\x07\x96\x43\x66\xb5\xbc\x5a\xb7\x18\x36\xdf\xb8\x25\xb9\xcc\x3b\x5a\xef\xd0\x6a\x1b\xb4\x5a\xf1\x05\x29\x72\xd4\xaa\xcb\xea\xfc\xc1\xa5\xec\xfb\x06\xcb\x91\xa9\x93\xb0\x5f\xfd\xa7\x39\x32\x35\x38\x70\x60\x5f\xe1\x79\x4a\x61\x9b\xc3\x91\x32\x3b\x9d\xe6\x27\x0a\xfb\x0e\xc0\x7f\xd0\x6b\x16\xef\x9c\xd0\x72\x52\xce\xf4\xec\xe3\x01\x9e\xda\x72\xe3\x0a\xab\xa1\xf2\xf8\xc6\x79\xf3\xbe\x9a\xa5\xc1\xe9\x29\x0b\x1c\x38\x09\x77\xf5\x3f\xcd\x91\xff\x4b\x6b\x46\xa0\xcf\xbb\xac\x88\xf4\x68\x11\x3a\x1d\x6d\x95\x6d\xbc\x78\xae\x52\x5e\xca\x55\x82\x0d\xf1\x9c\x74\x56\x32\xfd\x67\x09\x06\x70\x2d\x6f\x20\xd2\x8a\x8d\xae\x21\xc1\xe9\xe0\x3c\x5e\xc0\xe1\x90\x25\x54\x1b\x0e\x31\x0e\xcb\xec\xb6\x0a\x9b\x7c\x56\x9e\xc7\x2d\x6d\x98\xf3\xca\x46\xb8\xd2\x7e\x30\xde\x00\x92\x3d\x38\x0e\x87\x5c\x40\x0e\x99\x2b\x8a\x1c\xe2\x11\x47\x51\x85\x19\x0e\x60\x97\xf8\xc9\xdb\x2a\x03\xf0\x84\xc1\xa0\xba\xf3\xb9\xfd\xe2\x4b\xdf\x39\xef\xd0\x5d\x43\x00\xdf\xbf\x93\xc7\x84\x80\x0a\x83\x51\x75\xfd\xa1\x49\x15\xbf\xed\x59\x20\x57\xdd\x03\xcd\xef\xee\x9c\x3e\xb4\xf3\x89\x9d\x3b\x9f\x80\xbb\xc7\x36\xaa\x4c\x98\x73\xf2\x9a\x05\x3d\x85\x17\xb6\xee\x3a\xa0\xd7\xf4\x76\x6b\xf8\x22\x16\x9b\x54\x43\x63\x98\x7c\xf9\xbd\x8b\xaf\xfe\xc7\x35\x70\xd6\xfa\xf4\x5b\xc3\x1b\x36\x0c\xbf\x95\x3a\xf3\x01\x40\x87\xc5\xf3\xd6\x13\x9d\xba\xc5\x52\x69\x54\x93\x55\xe0\xfb\xee\xa3\xd0\xf4\x80\x86\x4f\x3e\xf4\xdb\xf3\xbf\x2b\xfe\x74\x25\x51\xdb\x8b\xd4\xcd\x3a\xb5\x8e\x59\xf0\x4b\x68\xbd\xff\x2a\x60\x9f\xdb\xa1\xd6\x6c\x3d\x28\xbe\x5b\x47\x69\xee\x3c\x8a\x76\xbc\xb1\x98\x53\x69\x02\xf3\x34\x9a\xd0\xb5\xab\xd3\x4f\x44\x74\xc6\xef\xef\x3a\xf7\x81\x85\x1a\x4d\x7d\x40\xad\xe2\x96\xbc\x73\xfe\xce\x43\x97\x71\xfc\x25\x7f\x56\xce\x26\x97\xf7\x15\x5b\x11\xaa\x93\xbc\xb9\x9f\xe0\x65\x19\xb1\xe8\x73\xc4\x29\x9f\x7b\xe4\xe7\xe6\x29\x82\x60\xf3\xdc\xe7\x15\x90\xeb\x81\x29\x64\x44\xe8\xc4\xe7\x37\xfe\x38\xdc\xf7\xa5\xd7\x99\xca\x8b\x21\x32\x7b\xbe\x03\x41\x3a\xe4\x46\xa8\x1e\xcc\xf5\xd8\x5c\x65\x96\xdf\xcb\x2a\x5e\xb8\x8e\x35\x67\xb6\x4d\x04\x4d\x23\x06\x61\x34\x8d\x36\xf7\x6c\x22\x68\x53\xcf\xf4\xde\x99\x17\x01\x78\xb3\x7c\xc8\x39\x46\x04\x1d\x45\x9b\x7a\x30\xa2\xf9\xe2\xac\xc3\x7f\xd8\x2c\xd3\x3e\xd6\xf7\x1a\xe4\x47\xa8\x2e\x1c\x0a\x34\x83\x14\xb8\xab\x8d\xe0\x71\x4b\xdf\x22\x2b\x60\xd6\x0b\x8a\xd3\xe1\x3b\x71\x6c\x98\xaf\x5e\xab\xd1\xfc\xee\x77\x1a\xcd\xb5\x9a\x12\x1a\x97\x68\x4e\x48\xe3\xdc\xdc\xae\xbf\xf5\x45\xc5\x94\x34\x63\x9d\x3b\xa6\x64\x4e\xfb\xe4\xf7\x3e\xff\xf6\xb9\xb8\x27\xb4\xf2\x77\x94\xce\xbe\x7d\x32\x9d\x7d\xfb\x64\xba\x73\xd2\x47\xf4\x27\xb3\x18\xf6\x9d\xba\xec\x6c\x5a\x7c\x85\x41\x9b\x8f\x7f\x66\x9d\xd1\xf1\x92\x2c\xa9\xa1\x0a\x4e\x5a\xd6\x7b\xc1\x37\x9d\x15\x7f\xc2\x6e\x3e\xc5\x1a\x1e\xe2\x38\x30\xfd\x63\x38\x78\xaa\xf5\x3a\x2f\xd5\x8d\x25\xdb\x0f\x2b\xaa\x41\x5e\xd4\x8b\xbe\x8f\x5e\x47\x08\xdc\x06\x70\x3a\x3a\x81\xe5\xe4\xad\x71\x3e\xa7\xc3\xe6\x9c\x1d\x22\x79\x60\x3c\x33\xd7\x1c\xb6\x3a\xe9\x36\x97\xbc\xf6\xf0\x06\xb0\x86\xa4\x4f\x80\x7c\x27\x54\x40\xc8\xd3\x09\x92\x1f\x91\x90\xdb\xe3\xa6\xea\xc0\x05\x4e\x2f\x78\xdc\x61\xb7\xa7\x5a\xb2\xae\xa2\xcf\x9a\x1c\x1f\x0a\x73\x2e\x70\xd2\xeb\x46\xa0\x94\x9d\x1c\xcf\xd9\x1c\xe1\x4e\x08\x7b\x31\xdf\xc9\xf8\x1d\x92\x9d\x8c\x43\xbe\xce\x3a\x9c\x6e\x8f\x81\x71\x38\x1d\x21\x8b\x64\x63\xea\x74\x84\x4f\xf2\x3d\xc2\x6a\x8d\xf3\x74\x5a\x43\xc0\x24\x6e\x50\x39\x79\x95\x8a\x77\xaa\xf8\x3b\x6a\x74\x35\x7a\xb7\x4e\x27\x47\x93\x34\x8b\x57\x39\x4c\x70\x45\xf5\x75\x21\xb7\x97\x59\xb2\x7c\x91\x1b\x3b\x78\x2b\x67\x20\x2c\xe1\xbf\x47\x9c\x95\xd5\xdc\xbc\xb3\xfa\xad\x0d\x3a\x1d\xae\xe5\x80\x90\xf9\x6d\x9c\x66\xcb\xda\x85\xc9\x32\x17\x5f\xeb\xaf\x68\x5a\x6f\x28\x5b\x68\xd2\xfb\x3c\x56\xaf\x5e\xaf\xd7\x34\xb5\xea\x31\xe6\xa1\xce\x55\xec\xa8\x11\xaa\xab\x36\xec\x37\x81\xc6\x68\xb4\xcf\x6f\xa8\x3f\xdd\x8a\xd5\x95\x66\x67\x5b\x51\x85\x5d\x6f\x50\xf1\xf3\xb6\xb0\x50\xa6\xd7\x33\x2e\x47\x85\xd5\x88\xd5\x35\xd8\x51\xdc\x60\x35\xe8\xad\x4d\x2f\x3c\x56\xb1\x7e\x5b\x69\xf3\xd8\x68\x97\xe7\xef\x7b\x0e\x8b\x8f\x88\xd7\x8b\x8f\x48\x1c\x5b\x0e\x49\x58\x7e\x98\xa9\x35\x9b\xe7\x59\xcc\x6c\xed\xeb\x2a\x95\xca\x41\xbb\xe4\x58\x5d\xa3\xd7\xbb\xf5\xd5\xfa\x1a\x9d\xce\xa3\xab\xd9\x46\xf3\x55\x2a\x93\x63\xc3\xa2\xf9\xee\xb2\xe5\xc3\xeb\x6d\xae\x5a\x6c\xe7\xec\x1a\xbb\xd1\x61\x2b\x12\x2d\xb6\x72\x83\x4d\xb3\x38\x6c\xd2\x6b\x01\x9a\x9a\x6c\xf5\x1a\x4d\xd1\x6a\xdf\xda\x5d\x1a\xde\xdf\xea\x8f\x2d\x09\x19\x99\x45\x6d\xc9\xac\x5d\x6b\x2d\x2a\x01\xf0\x95\xd9\x8d\x8e\x72\x86\x94\x0d\x5d\x11\x34\x38\x4c\xe3\xcd\xde\xea\xc7\x16\x9b\xb4\x3a\x4b\xf1\x02\x87\xd9\xda\xe1\xc2\x9c\x1a\x58\x23\xcb\x03\x5f\x5f\x17\x8c\xb7\x8c\xe4\xcb\x1b\x38\x8e\xf7\xd5\x77\x9d\xd6\xdb\xe3\x0a\x95\x14\xb9\x42\xee\xc6\x4a\x6d\xf1\xb7\x41\xbd\x39\x70\x61\xdb\xc6\x75\x6b\x08\x86\xc9\x53\xee\x41\x87\xd9\xf7\xb0\x8b\x11\x02\xb3\x43\xda\x5f\xde\x05\x7e\x62\xad\x91\x2c\x12\x95\x97\x50\x9d\x4c\x17\xf8\x39\xcc\x7b\xc1\x53\x53\xc5\x06\x29\xdf\xad\x16\x8f\x17\x9a\x21\xc8\x56\xf9\xc2\x54\x30\x68\xf9\x9a\xaa\x6a\x0e\x73\x23\x0f\xd7\xd5\xf5\x35\x99\xab\x46\x0c\xfc\x48\xb9\x71\x61\xe8\x4c\xf1\xbf\xcf\xdc\x00\x42\x4d\x6b\x47\xb3\xaf\xc1\xb2\xf1\x6c\xce\xcf\x5e\xfb\x87\xa6\xc6\xe9\xaf\x88\x97\x5e\xd8\xdb\x0a\x2a\xa2\xc5\xcd\x7d\x17\xc2\x76\xfc\xcc\x15\x7f\xe0\x4c\x0c\xbb\xb1\xb2\x62\xfd\xc0\xf4\xcf\xcb\x8c\xec\x19\xd3\x5b\x81\x25\x04\x37\x9d\xbe\x47\x7c\x46\x7c\xee\xc2\x3e\x1f\xa8\xa6\x5f\x5f\xb1\x94\xd1\x16\x7b\x3a\x1b\xde\xae\x13\x57\x77\xb0\x1c\xe8\xe2\xc5\xfa\x96\x30\xde\x09\xd7\xfe\xb5\xc3\xab\x2f\x8a\xeb\x4a\xfb\xa6\x37\x9e\x7b\xde\x64\xc1\xac\x7c\x0f\x91\x6c\x5c\xcc\xa8\x11\xb5\xa0\x4e\xb4\x46\x79\x73\x67\xb7\x39\x0c\x4c\x8d\xd9\xe7\x22\x65\xc0\xd2\x04\x96\x0c\xae\x17\x12\xba\xc4\x96\x32\xfd\xe6\x1a\xf0\x9b\x6b\x78\xb7\xa7\xc6\xec\x37\x5b\xfd\x56\x36\xe0\xf1\xb2\xd5\x35\xd5\xf3\xc1\xec\xf3\x3b\x42\x1e\x37\x1b\x94\xf7\x73\x04\x6b\xcc\xfe\xf0\x29\xf7\xab\xdc\x02\x80\x59\x95\x41\xad\x36\xa8\x58\x0c\x0b\x01\x18\xad\x4a\xcd\x32\x84\xe1\x58\x4e\xc5\x12\xf8\xfc\xbd\x1d\x3b\xe0\xdb\x5b\xee\x2c\xb3\xe9\xee\x18\x6b\x5a\x36\x1f\xf6\xb1\xc4\x64\xa9\xb4\xd7\x9b\xed\x2a\xe6\x1c\x5b\xed\xbe\x36\x02\xd0\xc1\x18\xab\xcb\xbd\x15\x85\x14\xef\x6a\xf6\x55\x3e\x3a\xf7\x93\x1c\xfe\xd5\x7e\xc6\xa1\x32\xf1\x2a\x02\x41\xac\x22\x26\xd6\x11\x9d\x04\xa7\xca\xc8\xa9\x35\xb7\x62\x0d\xaf\xe5\x54\x84\x70\x9c\x96\x35\x7c\x04\x6f\x8b\xf3\xe0\xed\x5f\x5c\x7f\x86\x38\x0f\xda\xc4\x97\xa0\xcb\xd0\xeb\x34\x15\x9b\x74\x2c\x11\xe7\x81\xff\xd6\xce\x3b\x77\x95\x57\xd6\x18\xab\x6f\x11\xe7\xb9\x6a\x3b\x88\xe5\x84\x6f\x1d\x2c\x6a\x39\x8a\x55\x4b\xd9\x7f\x20\x1d\xb2\xa3\x12\xb4\x06\x5d\x85\x10\xeb\xf6\x48\xa7\x96\x39\x10\x55\x2b\xcd\xc0\xf1\x0e\x2b\xd5\x26\x10\xc0\xd2\x49\x8f\x3c\xc7\x77\x92\x0a\x70\x11\xde\x6d\xc0\xbc\x0b\x3b\x1d\x9d\xb8\x4b\xf6\x44\xc0\x73\x2c\xe7\x71\x11\xc9\x05\xa1\xc5\xca\xf1\x1c\x96\x36\xba\x73\x35\x95\x88\x54\xbb\x6b\x38\x17\xae\x00\x87\xd3\x4b\x9a\xc1\xcb\x79\x5c\xd8\xa9\x2c\x8c\xa8\x2a\xab\x65\x9c\x0e\x0b\x33\xc1\xb1\x7a\xef\x05\x63\x85\x0a\xf3\x1d\x3d\xb0\x5a\xdc\xf8\x40\x71\x25\x61\xd6\xd6\xb1\x3b\xe6\x57\x37\xba\xd8\xbd\xe7\xbd\x26\xbe\x77\xe7\x75\xe2\x27\x5b\x5c\xc6\x85\xf7\x7d\x75\x77\xfd\xbc\xaa\x79\x6a\x86\x5c\xf0\xa3\xbb\x77\x0c\x30\xc6\xb6\xea\x2f\x7d\xfa\xe8\x35\x75\x75\x8e\x9a\x12\xc6\x10\x3c\x28\x4e\xef\xde\x5f\x7f\xf9\xa5\xe7\x7b\x3c\x57\x6d\xff\xde\x47\x4b\x0c\x25\x03\xbf\xfc\x69\x4b\xf5\xe9\xe7\xd4\xd6\x89\xbf\x16\xfb\x97\x00\x87\x39\x73\x4d\x9d\xde\xa0\xf2\x2e\x1e\xf3\x95\x13\xcc\xb6\xcf\xeb\x69\xf5\x57\xab\xac\x5d\x77\x2f\xc2\xda\x35\xf5\xbb\xcb\x82\xc6\xea\xca\x3b\xa0\x06\xda\x6f\xfc\xf9\xa1\x1f\x00\x51\xb9\x62\xe3\x0f\x9e\x49\xaa\xdf\x10\xdf\xc4\xa7\x95\x2d\x7b\x2c\x14\x5c\xbd\xa7\x1b\xb7\x2c\x5a\xeb\x75\x88\x77\xdc\x05\xb5\xaf\x9f\x9f\xd8\xbc\x20\xee\xef\xb6\x73\x0c\x81\xf2\xba\x3a\x8d\xd6\xde\xb3\x7c\x61\xed\xd6\xbf\x2e\xe0\xea\x7b\xfa\x8a\x8b\x4c\x6a\x6b\x71\xa4\x28\x52\x67\x63\x36\xdf\xb5\xb1\x5b\xab\x73\xba\xa3\x70\x1e\xa8\x77\x2f\x3f\x28\xfe\x21\x57\xa5\x2d\xd1\x10\xd8\x00\x7a\xf0\x9d\x9f\x38\xa7\xa4\x44\x37\xe0\xbe\xec\xaa\x9d\x0d\x0d\xd8\x6e\x2c\x29\x2a\x2d\xd5\x69\x2a\x16\xaa\x2a\x6f\xb8\xf2\xe5\xbb\x73\xd1\xb2\x6a\xe3\x92\x85\xee\x15\x39\x71\x00\xb1\xa8\xee\xa8\x8e\x7b\x9b\xfd\x04\x39\x51\x0b\x5a\x84\xce\x94\x4e\x9c\x0a\xb9\x3d\x8a\x6b\x34\x17\x76\xba\xf8\x10\x18\x30\x53\x4b\x57\x99\x9d\x24\xcc\x95\x80\x0e\x6a\xc3\x21\xde\x86\x6d\xd2\x19\x42\xd2\x07\x19\x60\xbd\xd0\x08\x3a\xe0\xb0\xd3\x8d\x3b\x19\xc9\xbf\x3c\x09\x21\x4f\xb5\xc7\x1d\x76\x31\x06\xc2\x77\x12\xb6\xa3\x7c\xf1\xfa\x05\xbb\x05\x8b\xce\x58\xe3\xac\x58\x50\x5a\xdb\x35\xbf\xae\xc8\xa6\xd7\x6a\x60\x6b\xe0\xb9\x3f\x8a\x7f\x11\x3f\x3b\xfc\xe8\x08\x0b\x46\x8d\x9b\xf1\x8f\xfe\x05\xd6\xc2\x66\xd8\x90\xb7\xe1\xbf\xae\xba\xf4\xa9\x83\x4f\x5d\xba\x4a\x8e\x20\xd3\xfd\x5b\xf1\x4f\xe2\x8f\xc4\x77\x45\x71\xff\xa0\xab\x95\x5d\xb6\xe7\xe9\x0f\x3e\xfe\xfb\xa1\x9f\x2c\xad\x5a\xb0\x50\x27\xbe\xf5\x0f\x15\xc6\x25\xe7\xbf\x7a\xe9\x66\xbb\x33\x76\xcd\x07\x97\x26\x9f\xbc\x6b\x18\x1f\x6e\x7c\xb0\xdd\x53\x6e\x2b\x75\x6a\x58\xc2\x18\x35\xfa\xba\xba\x79\xb5\x55\x45\x7a\x98\xfe\xd1\x85\x4f\x44\x8a\xfc\x3b\x0f\x80\xf3\x9e\xfa\x33\xeb\xb7\xeb\x0f\x8a\x97\x88\xe2\x2d\xba\xbb\xee\x29\xd5\x33\xb8\xe2\xe0\x33\x97\xaf\x5a\x75\xf9\x33\x72\xc4\x5d\x77\x30\xaa\x5a\xf5\xf0\xdf\xc5\x7b\x5e\xbc\x0b\x9a\x3e\x79\xf5\xab\x42\xbd\x73\xdd\x3d\x39\xdf\x1e\xf1\xa2\x4f\xe0\xac\x3e\x96\x25\xcc\xb9\xd7\x3f\xfd\xb3\x9f\x3e\x75\xed\xd9\xd8\x15\xbb\xf6\xa7\xb2\x3d\x89\xa4\x63\xa4\xef\x80\x15\xa8\x19\x75\x49\x36\xdd\x69\x74\x21\xba\x0a\xdd\x89\xbe\x89\x90\xd5\x5e\x53\xdd\x01\xf4\x17\x38\x0d\x82\x01\xff\xff\x69\xfa\xc4\xb5\x10\xd8\x6d\xf3\xa5\x5f\xd0\xef\x2b\x07\xbf\x2f\xf8\x7f\x98\x3e\x90\x31\xb5\x98\x4c\x2d\xa6\xcc\xbf\x88\x99\x6f\xb5\xcd\x3b\x72\x60\x5e\x5b\xdb\x3c\xb2\x68\x5e\x1b\xa0\x7f\x03\x45\x8a\x01\x4d\x99\x4c\xa6\x4a\x93\xe9\xdf\x86\xf6\x7e\xb6\x88\x92\x61\x29\xb1\xcf\x55\x34\x67\xca\x64\x3a\xfc\x2f\x62\xd9\x86\xb0\xf9\x28\xe2\x56\x71\x08\x5d\x4d\xd7\x9a\xf2\x3e\xdc\x66\xfa\x34\xe5\xf6\x90\x3a\xb3\xd3\x05\x06\x70\x37\x83\xb4\xef\xa4\x83\x5e\x93\x8e\x58\x31\xb3\xc4\x40\x1f\xa1\x67\x4c\xfd\x24\xff\x29\x4e\xb6\x09\x58\x69\xd7\xc1\x4c\x4e\x05\x78\xdc\x21\x87\xd3\xca\x9a\x65\x07\x2b\x8a\xeb\xe2\x72\x08\x77\x82\x0b\x38\x23\x98\xeb\xac\x9d\xe0\x30\x82\xbc\xbb\xd7\x08\x12\xb9\x9a\x6a\x4f\x9d\x1e\xea\x42\x2e\xe0\x38\xd7\xfd\x4f\x38\xf5\x7a\x83\xcf\xf9\x44\x58\xef\x5b\xac\x8f\x8b\x7f\x3e\x68\xc2\x45\x55\xf5\xa6\x8c\x3b\xe0\xce\x98\xea\xab\x8a\xb0\xe9\xa0\xf8\xe7\xb8\x7e\xb1\x4f\x1f\x7e\xc2\xe9\x33\xe8\xf5\xce\x27\xee\x2f\x2f\x51\x37\x94\x43\x48\x72\x0c\xf9\x32\xa3\x2e\xad\x66\x4a\x4a\x69\x45\x25\x01\x87\x52\x0f\x18\x4f\x51\x0f\x18\x4f\xa8\xa7\xb4\x84\xa9\x2e\x55\x33\xe2\xcb\x92\x4f\xcb\x50\x79\x83\xba\x04\xee\xae\x1a\xd3\xfb\x9d\x4e\xbd\x7e\xcb\x5e\xb7\x5f\x53\x07\x8d\xb7\x89\x2f\x7e\x64\x69\xa8\xb0\xaa\x2c\x53\x6f\x96\xb8\xdd\x25\x6f\x4e\x59\x54\xd6\x8a\x06\xcb\x47\xd0\x7e\x9b\xf8\x7a\x9d\xc6\xef\xde\xbb\x45\xaf\x77\x3a\xfd\xfa\xb1\x2a\xce\xdb\x5c\xc5\x75\xde\x7e\x7b\x27\xd4\x36\x36\xb0\xb4\x26\xaf\xc1\x20\x57\x24\xbe\x7e\x1b\xb4\x9f\xba\x22\xf1\xc5\xdb\xa0\xf1\xf8\x8a\xd8\x86\xc6\x5a\xa0\x15\x71\x55\xcd\x5e\x74\x9c\x8d\x9f\x85\x3e\x51\x01\x5d\xe4\xd2\x49\x85\xa3\xb3\x4a\xad\x45\x0d\x0e\x0b\xcf\x61\x86\x67\xc1\x4d\x9f\x91\x6b\xc3\xa1\x5a\xf6\x39\x7e\xf0\xda\x83\x85\xfc\xbb\xf7\x26\x78\x7e\xf0\xda\x9f\x15\x6e\x05\xdb\x37\x60\xb1\x78\xf7\xf6\x49\x8d\x76\xbf\xf8\xfa\xfe\x23\xc5\x70\x8e\x04\x43\xd3\xfe\xfb\xf1\x2d\x78\x68\xdb\x7f\xde\x25\xf0\xfc\x8a\xab\x7e\x5a\x90\x20\xf5\xa5\xe8\x28\xd3\x21\xde\x53\x10\x5f\xbe\xef\x31\xf1\xa5\x17\x8b\xbf\x0c\xe7\xe4\x21\x7c\xdf\x77\xa1\xed\xc5\x62\xc7\x59\xf2\xfb\x47\xc5\xff\x9f\x01\x59\x90\x03\xb9\x25\x8b\x73\x6b\x8d\x16\x6a\xac\x9e\xb0\x93\x07\x96\x34\x81\x93\xf7\xd4\x39\x79\x0f\xf3\xaf\xdc\xf5\x3d\x7a\xb7\xff\x9b\x0f\xb6\x3e\xb2\xc2\x7e\xd8\x2e\xf6\x43\xcb\xc5\xe2\x41\x78\xe7\xf0\xc8\xc7\x70\xe1\xb3\xab\x9f\xc1\x1d\x74\x42\x13\x9f\x17\xdf\x7b\xed\xbc\xf3\x5e\x83\x6a\xe8\x84\xea\xd7\xfe\x78\xaa\xe7\x8d\x23\xe2\x63\xb0\x49\xfc\x1a\x6c\xab\x6a\x8d\xfb\x70\xe2\x62\xf1\xe0\xc5\x13\x23\x1f\xc7\x37\xac\x7a\x66\xd5\x26\x09\xeb\xbc\xb9\x35\xe1\x89\x53\xac\x0a\x75\xc8\x7d\x14\xf8\x0d\xec\x51\x74\x16\x1a\x46\x49\x34\x81\x2e\x42\x0f\xa2\xc7\xd0\xf3\xe8\x15\xf4\x36\xfa\x10\x7d\x84\x10\x78\x89\xc7\xdd\x09\x1e\xd9\xa5\x30\xa9\xf6\x82\xc7\xcb\x49\x8f\x18\x44\x3e\xef\x8a\x37\x10\x3b\x27\x3d\x42\x48\x4f\x09\x4e\x87\xfc\x56\x22\x24\xbd\x8c\x70\xfa\xa4\xf9\x9e\xce\x3a\x21\xc6\x21\xbf\xbe\xe8\x04\x70\x18\x40\x02\x1c\x48\x79\x6f\x01\x4e\x07\xcd\xf4\x42\x28\x1c\x72\x58\x1d\x98\xe7\x3c\xb4\x88\xf2\xbe\xc3\x8b\x43\x61\x7a\xdb\x49\xfe\x4a\x43\x2e\xc2\xbb\x30\x07\x4a\x6d\x32\x82\x54\x9f\xe4\xd6\x88\x66\xcb\xd5\xc0\x2c\x3d\xc7\xdc\xc2\x1e\xb9\x44\x27\x38\xd8\x10\xd3\x1c\x68\x22\xec\xb2\x25\xac\x61\xa4\xc9\x45\x18\xcc\x13\x9e\xe5\x09\xd1\x71\x5a\x95\x56\xcb\xb9\x6a\x4b\xc1\xa4\xb6\xeb\xb4\x21\x57\xfd\x16\xa7\xc9\x57\x37\xdf\xb1\x6a\xc0\x55\x6f\xe1\xaf\x66\xb9\x0a\x43\x29\x87\x87\x81\xf3\x0f\xd8\x98\x35\x83\x9c\xcd\x5e\xce\xe0\x0b\x79\x9d\xaf\xd5\xdc\xb7\xd4\x77\xa4\x9b\x33\x19\x0d\xc5\x84\x98\xca\xf0\x99\x3a\xbe\xba\x5e\xa7\xe5\xab\xeb\xa7\xed\xb5\x5d\x25\x25\x3a\x8b\xa5\xab\xa4\x84\x65\xac\xba\xb6\x6e\xb7\xae\xb4\xac\xfb\xcb\xfd\xc1\xe4\x86\x71\xdb\x45\x77\x74\xe8\x60\xe4\x93\xc5\x3e\xb2\x66\xa2\xc1\xdd\x59\xcb\x04\xb7\xf4\x55\x5e\x72\xe7\xc3\x8b\x4f\xbf\x74\xf2\xac\x66\x2e\x30\x60\xaf\xfc\x3c\x6b\x50\xdb\xac\xad\x7a\x29\xfc\x06\x63\xa9\x2e\x63\x88\xd5\x64\x2e\x63\xee\x65\xec\x36\x6b\xb5\xca\x6e\xb3\x55\x4d\x27\x4d\xc6\xb2\xd2\x0e\x93\xc9\x18\xea\xc4\x9f\x31\x26\xa3\x91\x36\xc3\x68\x28\x7e\xca\xa8\x76\x38\x42\x2e\x4d\x63\x10\xbc\x45\x36\x28\x2a\x69\x7e\xfc\x61\x8f\x80\xc1\x8c\x31\x10\x20\x0c\xc1\x7a\x56\xc3\x72\x04\x58\x93\x13\x8c\xbc\x1e\xe3\x52\xbd\xc5\xdb\x50\x76\xe5\x79\x57\x43\x7f\x8c\xc1\x25\x55\x7a\x28\xa8\xb4\x06\xde\xe8\xb6\xfc\x55\xeb\xae\x73\xba\x55\x0f\xdc\xa9\x2e\x07\xb7\x49\xfc\xb4\x2c\x18\x2b\x52\xeb\x49\xc5\x03\x2e\x99\x58\x09\x27\xbe\x63\xae\x2f\x52\x99\x69\x40\x42\x21\x9d\xd5\xb2\xa8\xa4\x54\x67\xb1\x4e\x43\x59\xaf\x5b\xd7\xd6\x63\xb3\xea\xf0\xa2\xad\xe2\xa7\xcb\xba\xc8\xe0\x26\x36\xac\x86\xc5\x4d\xa3\x67\x9c\x63\xd8\x7a\xd5\x5d\x0b\x16\x5e\x9a\x5d\xa3\x5e\x77\x41\xbb\x33\x6c\xe7\xbb\x87\x76\x9f\x61\x5a\xbd\x79\x04\x67\x6c\xad\x06\x83\xda\x26\x85\xc0\x9a\xca\x55\x56\xb3\xb9\x8c\x61\xac\x47\x4e\xb3\x55\x33\x8c\x7d\x5e\x35\xcb\x38\xc9\x96\xd2\x2e\x93\xc9\x58\x5a\xd6\x59\x6d\x9a\x5e\x6b\x2c\x66\x88\xd9\x60\x2c\x21\xc4\x74\xc8\x11\x32\x19\x35\x8d\xa1\x4a\x0d\x42\xa8\x08\xdc\xf2\x89\xd3\x08\xa1\x66\xb4\x59\x81\x01\x69\xd1\x03\x0a\x8c\x11\x8f\xbe\xaf\xc0\x04\x99\xd1\x61\x05\x66\x90\x16\x4a\x14\x98\x45\x16\x58\xa6\xc0\x1c\xd2\xc2\x84\x02\xf3\x68\x15\xf6\x28\xb0\x0a\xe9\xf0\x75\x0a\xac\x46\x1a\xbc\x5f\x81\xb5\xc8\x8e\xff\xa4\xc0\x06\xe4\x22\xdd\x88\x20\x60\xd4\x08\x21\xf9\x8d\x12\x85\x01\x39\xd0\xd5\x0a\x8c\x91\x01\x3d\xaa\xc0\x04\x55\xa3\x1f\x2b\x30\x83\x1c\x80\x15\x98\x45\xb5\xe0\x56\x60\x0e\x39\x60\x48\x81\x79\xf4\x35\xd8\xa9\xc0\x2a\x54\x84\x27\x15\x58\x8d\x6c\x78\xaf\x02\x6b\x51\x03\x7e\x4e\x81\x0d\x68\x21\x21\xa8\x17\xa5\x51\x06\x4d\xa2\x2c\x4a\xa0\x11\x34\x8a\xf2\xa8\x12\xf5\xa1\x08\xda\x86\x04\x54\x89\x16\xa3\x08\x4a\xa1\x18\x9a\x44\x95\xc8\x87\x5a\x50\x2b\x0a\x21\x2f\xaa\x44\xdd\x28\x89\x92\xa8\x72\x0e\x56\x4e\x4a\x09\x28\x87\x04\x94\x95\xb0\x63\xc8\x8b\x50\x6f\x3a\x33\x99\x4d\x8c\x8c\xe6\x2b\xfb\x22\xdb\x84\xca\xc5\x91\x54\x6c\xb2\xd2\xd7\xd2\x1a\xf2\x56\x76\x27\x93\x95\xd2\xa5\x5c\x65\x56\xc8\x09\xd9\x6d\x42\xcc\x8b\xd0\x00\x4a\xa3\x14\xca\xa3\x6e\x34\x21\xd5\x96\x46\xe3\x48\x40\x68\x20\x9d\xca\x77\x4f\x08\xb9\xf4\xb8\x80\xd0\x6a\x24\xa0\x11\x54\x40\x49\x14\x41\x59\x84\x56\x0b\x23\x85\x64\x24\x4b\x71\x57\xa2\x15\x68\x2d\x5a\x86\xba\x51\x0f\x5a\x80\x56\xa2\xb5\x68\x00\xf5\xa3\xb3\xd0\x20\x5a\x89\x56\xa3\xb5\x08\x0d\xac\x5c\xb1\x76\x59\x77\xcf\x82\x95\x6b\x07\xfa\xcf\x1a\x5c\xb9\x7a\xed\xbf\x47\x71\xbd\xd4\xab\x1c\x4a\x48\x65\x2b\x51\x00\x79\x51\x18\x79\x51\xcb\x9c\x71\x41\xeb\x85\x6c\x2e\x91\x4e\x55\x06\xbc\x61\x6f\x8b\xd4\xc9\x7f\xaf\xf2\x41\x94\x44\x02\x8a\x48\x43\x27\x0f\x62\x5c\x22\x57\x89\xf2\x28\x2d\x85\xa3\xd2\x95\x53\xb1\x8a\xe2\x44\x51\x7e\xb6\x61\x71\x94\x56\x30\x65\x9c\xb8\x42\x9f\xe6\x64\x51\x04\xc5\x90\x80\xc6\xa5\x61\x1b\x43\x95\x28\x82\xf2\x52\x7e\x02\x0d\xa3\xc2\x9c\x5a\x52\x28\x2d\xa5\xa2\x52\x9b\xbd\x08\x0d\x26\x85\x48\x4e\xa8\xcc\x0a\x71\x21\x5b\x99\x4f\x57\xe6\x47\x85\xca\x63\xac\xcd\x09\xd1\x3c\xed\x78\x3c\x9d\x95\xae\xc4\xd3\xa9\x7c\x65\x3e\x1b\x89\x09\xe3\x91\xec\x58\x65\x24\x9f\xcf\x26\x86\x0b\x52\x91\x54\x3a\x9f\x88\x0a\x39\x85\xd1\x59\xa9\x65\x27\x8d\x4d\x36\x5f\x39\x3b\x38\xa7\x92\x45\x74\x4c\x96\x90\x34\x0e\x79\x94\x41\x0b\x50\x33\x6a\x9e\xed\x6f\xe4\xb8\x3a\xbd\x52\xcf\xd0\x68\x3e\x9f\x59\xd0\xdc\x4c\x9b\x17\x91\xeb\xf7\x26\xd2\xff\x93\x1a\x9a\x51\x52\x19\x95\x94\x34\xf2\xcd\x5f\x50\x67\x73\x32\x11\x15\x52\x39\xa1\x59\x59\xe3\xfc\xb3\x3f\xfc\x3d\x49\x27\xd1\xbb\x7b\x0f\xba\x02\x5d\x8e\xae\x44\x57\xa3\x6b\xd0\x57\xd0\xb5\xe8\x2a\xa0\xea\x9a\x01\x16\x38\xe0\x41\x05\x6a\xd0\x80\x16\x74\xa0\x07\x03\x18\xc1\x04\x66\xb0\x80\x15\x6c\x60\x07\x07\x38\xa1\x08\x8a\xa1\x04\x4a\xa1\x0c\xca\xc1\x05\x15\x50\x09\x55\x50\x0d\x35\x50\x0b\x75\xe0\x06\x0f\xcc\x83\x7a\x68\x80\xf9\xd0\x08\x4d\x40\x1f\xeb\x5b\xa0\x15\x7c\xe0\x87\x00\x04\x21\x04\x61\x68\x83\x76\x58\x00\xa7\xc1\x42\xe8\x90\x5e\x16\x2d\x82\x6e\xe8\x81\x5e\xe8\x83\x7e\x18\x80\xc5\x70\x3a\x9c\x01\x4b\x60\x29\x2c\x83\xe5\xb0\x02\x56\xc2\x20\xac\x82\xd5\xb0\x06\xd6\xc2\x3a\x58\x0f\x67\xc2\x59\x70\x36\x6c\x80\x73\xe0\x5c\xd8\x08\x9b\x60\x08\x36\x43\x04\x86\x91\x01\x7d\x8c\xf4\x10\x85\x18\x08\x10\x87\x11\x18\x85\x04\x6c\x81\x31\x48\xc2\x38\xa4\x20\x0d\x19\xd8\x0a\x59\xc8\x41\x1e\x0a\xb0\x0d\x26\x60\x3b\x4c\xc2\x0e\xf8\x12\x9c\x07\xe7\xc3\x05\x70\x21\x4c\xc1\x45\x70\x31\xec\x84\x2f\xc3\x2e\xb8\x04\x76\xc3\xa5\x70\x19\x5c\x0e\x57\xc0\x57\xe0\x4a\xd8\x03\x57\xc1\xd5\x70\x0d\x5c\x0b\xd7\xc1\xf5\x70\x03\xdc\x08\x5f\x85\x9b\xe0\x66\xb8\x05\x6e\x85\xdb\xe0\x76\xb8\x03\xee\x84\xbd\x70\x17\x7c\x0d\xee\x86\x7b\xe0\x5e\xb8\x0f\xee\x87\x07\x60\x1f\x7c\x1d\x1e\x84\x6f\xc0\x43\xf0\x1f\xf0\x4d\xf8\x16\x3c\x0c\xdf\x86\x47\xe0\x51\xf8\x0e\xec\x87\xc7\xe0\xbb\xf0\x38\x3c\x01\x4f\xc2\x53\xf0\x34\x3c\x03\xcf\xc2\x01\x78\x0e\x9e\x87\xef\xc1\xf7\xe1\x07\xf0\x02\xbc\x08\x2f\xc1\x0f\xe1\x65\xf8\x11\xfc\x18\x5e\x81\x9f\xc0\x4f\xe1\x20\xfc\x0c\x5e\x85\xd7\xe0\x75\x78\x03\xde\x84\xb7\xe0\x6d\xf8\x4f\x78\x07\xde\x85\x9f\xc3\x2f\xe0\x3d\xf8\x25\xbc\x0f\x1f\xc0\x21\xf8\x15\x7c\x08\xbf\x86\xdf\xc0\x6f\xe1\xbf\xe0\x77\xf0\x7b\xf8\x03\xfc\x11\xfe\x04\x1f\xc1\xc7\x70\x18\xfe\x0c\x7f\x81\xbf\xc2\x27\xf0\x37\xf8\x3b\xfc\x37\xfc\x03\x3e\x85\xcf\xe0\x73\x38\x02\xd3\x20\xc2\x51\x8c\x30\x60\x8c\x09\x66\x30\x8b\x39\xcc\x63\x15\xaa\xc6\x6a\xac\xc1\x5a\xac\xc3\x7a\x6c\xc0\x46\x6c\xc2\x66\x6c\xc1\x56\x6c\xc3\x76\xec\xc0\x4e\x5c\x84\x8b\x71\x09\x2e\xc5\x65\xb8\x1c\xbb\x70\x05\xae\xc4\x55\xb8\x1a\xd7\xe0\x5a\x5c\x87\xdd\xd8\x83\xe7\xe1\x7a\xdc\x80\xe7\xe3\x46\xdc\x84\xbd\xb8\x19\xb7\xe0\x56\xec\xc3\x7e\x1c\xc0\x41\x1c\xc2\x61\xdc\x86\xdb\xf1\x02\x7c\x1a\x5e\x88\x3b\x70\x27\xee\xc2\x8b\x70\x37\xee\xc1\xbd\xb8\x0f\xf7\xe3\x01\xbc\x18\x9f\x8e\xcf\xc0\x4b\xf0\x52\xbc\x0c\x2f\xc7\x2b\xf0\x4a\x3c\x88\x57\xe1\xd5\x78\x0d\x7a\x15\xaf\xc5\xeb\xf0\x7a\x7c\x26\x3e\x0b\x9f\x8d\x37\xe0\x73\xf0\xb9\x78\x23\xde\x84\x87\xf0\x66\x1c\xc1\xc3\x38\x8a\x63\x58\xc0\x71\x3c\x82\x47\x71\x02\x6f\xc1\x63\x38\x89\xc7\x71\x0a\xa7\x71\x06\x6f\xc5\x59\x9c\xc3\x79\x5c\xc0\xdb\xf0\x04\xde\x8e\x27\xf1\x0e\xfc\x25\x7c\x1e\x3e\x1f\x5f\x80\x2f\xc4\x53\xf8\x22\x7c\x31\xde\x89\xbf\x8c\x77\xe1\x4b\xf0\x6e\x7c\x29\xbe\x0c\x5f\x8e\xaf\xc0\x5f\xc1\x57\xe2\x3d\xf8\x2a\x7c\x35\xbe\x06\x5f\x8b\xaf\xc3\xd7\xe3\x1b\xf0\x8d\xf8\xab\xf8\x26\x7c\x33\xbe\x05\xdf\x8a\x6f\xc3\xb7\xe3\x3b\xf0\x9d\x78\x2f\xbe\x0b\x7f\x0d\xdf\x8d\xef\xc1\xf7\xe2\xfb\xf0\xfd\xf8\x01\xbc\x0f\x7f\x1d\x3f\x88\xbf\x81\x1f\xc2\xff\x81\xbf\x89\xbf\x85\x1f\xc6\xdf\xc6\x8f\xe0\x47\xf1\x77\xf0\x7e\xfc\x18\xfe\x2e\x7e\x1c\x3f\x81\x9f\xc4\x4f\xe1\xa7\xf1\x33\xf8\x59\x7c\x00\x3f\x87\x9f\xc7\xdf\xc3\xdf\xc7\x3f\xc0\x2f\xe0\x17\xf1\x4b\xf8\x87\xf8\x65\xfc\x23\xfc\x63\xfc\x0a\xfe\x09\xfe\x29\x3e\x88\x7f\x86\x5f\xc5\xaf\xe1\xd7\xf1\x1b\xf8\x4d\xfc\x16\x7e\x1b\xff\x27\x7e\x07\xbf\x8b\x7f\x8e\x7f\x81\xdf\xc3\xbf\xc4\xef\xe3\x0f\xf0\x21\xfc\x2b\xfc\x21\xfe\x35\xfe\x0d\xfe\x2d\xfe\x2f\xfc\x3b\xfc\x7b\xfc\x07\xfc\x47\xfc\x27\xfc\x11\xfe\x18\x1f\xc6\x7f\xc6\x7f\xc1\x7f\xc5\x9f\xe0\xbf\xe1\xbf\xe3\xff\xc6\xff\xc0\x9f\xe2\xcf\xf0\xe7\xf8\x08\x9e\xc6\x22\x3e\x4a\x10\x01\x82\x09\x21\x0c\x61\x09\x47\x78\xa2\x22\x6a\xa2\x21\x5a\xa2\x23\x7a\x62\x20\x46\x62\x22\x66\x62\x21\x56\x62\x23\x76\xe2\x20\x4e\x52\x44\x8a\x49\x09\x29\x25\x65\xa4\x9c\xb8\x48\x05\xa9\x24\x55\xa4\x9a\xd4\x90\x5a\x52\x47\xdc\xc4\x43\xe6\x91\x7a\xd2\x40\xe6\x93\x46\xd2\x44\xbc\xa4\x99\xb4\x90\x56\xe2\x23\x7e\x12\x20\x41\x12\x22\x61\xd2\x46\xda\xc9\x02\x72\x1a\x59\x48\x3a\x48\x27\xe9\x22\x8b\x48\x37\xe9\x21\xbd\xa4\x8f\xf4\x93\x01\xb2\x98\x9c\x4e\xce\x20\x4b\xc8\x52\xb2\x8c\x2c\x27\x2b\xc8\x4a\x32\x48\x56\x91\xd5\x64\x0d\x59\x4b\xd6\x91\xf5\xe4\x4c\x72\x16\x39\x9b\x6c\x20\xe7\x90\x73\xc9\x46\xb2\x89\x0c\x91\xcd\x24\x42\x86\x49\x94\xc4\x88\x40\xe2\x64\x84\x8c\x92\x04\xd9\x42\xc6\x48\x92\x8c\x93\x14\x49\x93\x0c\xd9\x4a\xb2\x24\x47\xf2\xa4\x40\xb6\x91\x09\xb2\x9d\x4c\x92\x1d\xe4\x4b\xe4\x3c\x72\x3e\xb9\x80\x5c\x48\xa6\xc8\x45\xe4\x62\xb2\x93\x7c\x99\xec\x22\x97\x90\xdd\xe4\x52\x72\x19\xb9\x9c\x5c\x41\xbe\x42\xae\x24\x7b\xc8\x55\xe4\x6a\x72\x0d\xb9\x96\x5c\x47\xae\x27\x37\x90\x1b\xc9\x57\xc9\x4d\xe4\x66\x72\x0b\xb9\x95\xdc\x46\x6e\x27\x77\x90\x3b\xc9\x5e\x72\x17\xf9\x1a\xb9\x9b\xdc\x43\xee\x25\xf7\x91\xfb\xc9\x03\x64\x1f\xf9\x3a\x79\x90\x7c\x83\x3c\x44\xfe\x83\x7c\x93\x7c\x8b\x3c\x8c\xae\x67\x47\x92\x91\x5c\x8e\x1d\x2f\xe4\x12\x51\x2e\x27\x44\xb2\xd1\x51\x95\x90\xda\x26\x24\xd3\x19\x81\x1d\x15\x22\xd9\x3c\x93\xcb\x47\xb2\x1a\x1a\x0c\x09\xe3\x99\xfc\x24\x53\xc8\x09\x59\x26\x9e\x48\x8e\xab\xf2\xa3\x43\xc9\x48\x76\x44\xc0\xf9\x51\x9e\xc2\x89\x5c\x1e\xa7\xc7\xb8\xac\x30\x9e\xde\x26\xf0\x3b\xd2\xe9\xf1\xa1\x44\x4a\x25\xc5\xe9\x42\x9e\xa4\xe3\x71\x2e\x97\x18\x49\x45\x92\x24\x9a\x1e\x61\xf3\xd9\x48\x6e\x94\x19\x4d\x8f\x0b\xaa\x78\x22\x29\x0c\x45\x92\x79\x26\x9f\x18\x17\x98\x6c\x3a\x12\xd3\xc5\xd2\x13\xa9\x64\x3a\x12\xa3\xd9\xaa\x99\x04\x57\xc8\xd0\x88\x4d\xa4\x86\xd3\xdb\xb5\x99\x64\x64\x72\x28\x9a\xc8\x46\x93\x02\x97\x15\x32\x42\x24\xcf\x67\x85\x78\x56\xc8\x8d\xaa\x68\x53\xa4\x0a\x93\xe9\xe8\x18\x13\x4f\x46\x46\x34\xa3\x42\x24\x96\x19\x4d\xa7\x84\x9c\x66\x5b\x3a\x59\x18\x17\x86\xd2\xf1\xb8\x56\x01\x29\x01\xb5\x02\x17\x32\xdc\xd6\x6c\x34\x1d\x13\xf8\xe1\x88\x14\x93\x7c\x64\x84\xc9\x47\x46\x72\xcc\x70\x3a\x3d\xa6\xa2\x01\x9d\xe1\xd9\x4c\x36\x91\xca\x73\xd1\xc8\xb8\x90\x8d\x30\x74\x2a\x64\x86\xd3\xc9\x18\x97\xc8\x47\x92\x89\xa8\x36\x2f\x6c\xcf\x0f\x8d\x0a\x74\xa9\xa0\x91\xe0\x89\x44\x2c\x3f\xaa\x89\x24\x13\x23\xa9\xa1\xa4\x10\xcf\xeb\x64\x30\x2a\xa4\xf2\x42\x56\x2b\x27\xa4\x95\x85\x5e\x86\xb7\x14\x72\xf9\x44\x7c\x92\xa1\x7d\xd1\x26\x52\x31\x21\x95\x97\xf1\x14\x58\x2a\x6b\x88\x47\xa2\x02\x1d\xb5\xa1\x6d\x89\x98\x90\xe6\x33\x89\x68\xbe\x90\x15\xb8\x8c\x90\x8a\x26\x92\x9a\xf1\x48\x66\x88\xb6\x55\xc8\x72\x91\x18\xad\x90\xc9\x27\x52\x79\x46\x88\x25\xf2\x6c\x6e\x34\x92\x15\xd8\xe8\xa8\x10\x1d\x63\x28\xc3\xf4\xb9\xbc\x90\x19\x1a\x8e\x44\xc7\x26\x22\xd9\x98\x3e\x1e\xc9\xe5\x67\x53\xaa\x19\x80\xa1\x83\xce\x66\x22\x85\x9c\xc0\xe4\xf2\xe9\x0c\x1f\x4f\x67\x69\xbe\x4e\x2a\x3e\x93\x90\x6a\x52\x12\xac\xb0\x45\x88\xe6\x75\xd1\x51\x61\x5b\x36\x2d\xf7\x5c\x3f\x93\x90\xba\xa0\xce\x24\x0b\xb9\x21\x2a\x18\x9a\xf1\x44\x4a\x01\xb5\xb2\x10\x49\x30\x9f\x1e\x93\x62\xfd\xd6\x82\x90\xa3\xeb\x29\x29\xa5\x4e\xa4\xe2\x69\x19\x2d\x17\xcd\x0a\x42\x2a\x37\x9a\xce\xeb\x15\x34\x59\x2a\xd4\xe9\x31\x05\xd2\x0c\x47\x52\x33\x60\x24\x9b\x4d\x4f\x48\xed\xd0\xca\xa0\xd4\x0a\x95\x0c\x17\x32\xca\x75\x49\x22\xa4\x21\xa2\x72\xa4\xcd\x0a\xb9\xc4\x0e\x61\x28\x5e\x48\x26\x75\x0a\x9c\x1b\x8f\x24\x93\x26\x61\x7b\x34\x19\x19\x8f\xcc\x36\x8b\x19\x49\xc4\xf3\x4c\x52\x88\xc4\x99\x78\x22\x2b\xa8\x84\x49\x61\x28\x9d\x11\x52\x6a\x0a\x44\x93\xe9\x9c\xa0\x9b\x88\x64\x53\x89\xd4\x88\x54\x9c\xcd\x24\x23\x29\x41\x15\x8d\x24\x85\x54\x2c\x92\xe5\xb2\x91\x54\x2c\x3d\xce\x47\xd3\xe3\xe3\x42\x2a\xcf\x8d\x47\x46\x52\x42\x5e\x33\x33\x5e\x85\xcc\xec\x38\xd2\xf6\xf1\x59\x21\x3f\x21\x08\x79\x7d\x6e\x34\x9d\xc9\xd0\x2a\xa3\x91\x6c\x5e\x17\x4f\x27\x63\x42\x56\x26\xa6\x55\x12\xb4\x09\x46\xa5\xe1\xdb\x84\x6c\x3e\x11\x8d\x24\xcd\x4a\x7a\x34\x9d\x4d\xec\xa0\x2b\xb9\xa4\x7a\x38\x92\x1d\x8a\x8e\xd2\x4a\xf2\x13\x89\x7c\x5e\xc8\xca\x03\x4f\x85\x8c\x8a\xbd\x94\xd2\xc9\x12\x3f\x94\x15\xf2\xd9\x34\x19\x13\x26\x99\x68\x7a\x24\xa7\x52\x9a\x9c\xd3\xe7\x47\x0b\xe3\xc3\xb9\xa1\x42\x86\x0e\x9c\x51\x49\xd1\xe6\xd2\xb4\x5a\x52\x24\xa3\x91\x64\x5c\x2b\x69\x17\x59\xa7\xf0\xb4\xde\x74\x21\xaf\x4f\x26\x52\x63\x42\x2c\x21\x0f\x25\x9f\x29\xe4\x46\x33\x89\x94\x5e\xd8\x9e\x17\xb2\xa9\x48\x72\x88\x5e\x96\x54\x48\x22\xc5\xe5\xb3\xe9\xcc\xe8\xa4\x76\x24\x91\x1f\x2d\x0c\xcb\x72\x20\x6b\x07\x4a\x86\x4d\x0a\xe3\xe9\x14\x2b\xdd\xef\x5a\x49\xc4\x65\x42\x86\x99\x9b\x57\x4e\x6a\xa4\x02\x32\x31\xa5\xc3\xaa\x99\xbe\x72\x72\xcd\x5c\x21\x45\x75\x88\x36\x9a\xa5\x37\x0d\x1d\xe0\x18\xc9\xe6\x72\x64\x34\x16\x53\x0d\x17\x92\xc9\xd1\x74\x36\xc5\x0c\x0b\xc9\xa4\x36\x4a\x87\x35\x9e\x88\x46\xf2\x82\x66\x34\x92\x8a\x29\xd2\x2d\x81\x54\xda\x78\x09\x2a\x64\xe4\x1c\x3a\x20\x66\x59\x22\x87\x8e\x49\xa4\xe5\xb8\x1c\xa9\x02\xe3\x71\x59\x85\xcc\xf1\x48\xb4\x1a\x76\x24\x99\x1e\x16\xb8\x89\xac\x90\x8a\x8e\xb2\xf9\x48\x6e\x2c\xc7\xc5\x13\xc9\xbc\x90\x55\x0f\x67\x13\x42\x3c\x1a\xc9\x09\x1a\x2a\xb9\xf2\x7d\xc2\x8e\x64\xd3\x85\x0c\x43\xc7\x92\x8d\x26\xd3\x85\x18\x37\x2c\x44\xc6\x84\x2c\x89\x16\xf2\x4c\x34\x9d\x99\xd4\x64\x22\x19\x49\x7e\x12\x19\x26\x17\xd9\x26\x68\xe8\xf8\x0c\x0d\x27\x23\xa9\x31\x3e\x2b\xa4\xb3\x31\x21\x8b\x0b\x49\x9c\x4e\xea\x73\xf9\x6c\x62\x4c\xc8\x8f\x66\xd3\x85\x91\x51\x75\x21\x15\x13\xb2\xc9\x44\x4a\x60\xf3\x91\xe1\xa4\xc0\x8e\x47\x46\x12\x51\x36\x9f\x2d\x44\xc7\xd4\x99\x04\xd5\x72\x42\x2e\x6f\x98\x85\xa4\x61\x37\x8d\xa4\xd3\x23\x49\x61\x68\x56\x07\x68\xe7\x64\xb0\xe3\xe9\x94\x30\xa9\x89\x46\xb2\x42\x5e\xea\xa9\x4a\x06\x0b\x19\x25\x4f\xba\x89\x65\x50\x1a\x2b\x3e\x4a\x55\x78\x2a\xc7\xe4\xd2\xd9\xbc\x9a\x06\xf2\x7d\x22\x41\x85\x8c\x6e\x66\x66\x93\x26\x95\x19\x59\x63\x0a\xa9\x58\x9a\x4d\x0a\x23\x91\xa4\x3a\x16\xc9\x8d\x0e\xa7\x23\xd9\x98\x56\x11\x67\x5a\x52\x37\x23\xda\xd2\x8c\x32\x9c\x4e\xe6\xf9\x5c\x22\x2f\x8c\x47\x32\xaa\xc2\xf8\x70\x56\x48\x26\x23\x6c\x26\x92\xcb\x0b\x9a\x24\x6d\xc4\xd0\x70\x21\x39\xac\x12\xb6\x47\x47\x23\xa9\x11\xc1\x20\x0d\xf1\xd0\xcc\x0c\xa6\x93\x93\xb2\xa4\xf2\x74\x2a\x1d\x1a\x8f\x69\x73\x79\x21\x3f\x9a\xce\x45\xd3\x19\x41\x95\x2b\x24\xf2\x94\x63\x2a\x2a\x54\x94\x22\x17\x4d\xc7\xe3\x82\xc0\xc4\xd3\xe9\x98\x5e\x9a\x29\xa5\xe9\x84\x76\x61\xb8\x90\x48\xc6\x12\xa9\x11\xd5\x68\x3a\x97\xa1\xf3\x8e\x3a\x32\x3e\x5c\x48\x46\x52\x51\x81\x1b\x17\x62\x63\x89\xbc\x36\x4e\x9b\x24\x64\x87\xb6\x08\x79\x66\x58\x10\xb2\xdc\xa8\xac\xa6\xe2\x2d\x71\xc1\x1c\x4b\x17\x86\xa9\x28\xa5\xe8\x88\x4b\xf2\x77\x5c\x8e\x2c\x7f\xc7\x65\x15\x32\xc7\x23\xd1\x7e\x69\x8e\xe1\x6b\xe7\x20\xaa\x66\x30\x34\xc7\x8a\xf2\x31\x21\x37\x96\x4f\x67\xb8\x64\x24\x43\x23\x49\x50\xf2\xba\xf1\xf4\x30\xed\x97\x74\x37\xea\x14\xf9\x96\xe4\x4d\xb3\xb5\x90\xce\x2b\x55\xcb\xa0\xcc\xe7\x5c\x26\x91\x4a\x09\x59\x4e\x2e\xcb\x66\x85\x4c\x72\x52\xa3\xa8\x82\x48\x32\x6f\x9a\xab\x02\x25\x35\x34\x47\x0d\xd2\xb4\x46\xd8\x9e\xa1\x77\xa1\xcc\xdd\x64\x32\x92\x91\xcb\xb1\xb9\xf1\x44\x52\x60\xe3\xd9\xf4\x44\x8a\x8c\x0b\xa3\xfc\x48\x64\x5c\xc8\x44\x62\xaa\x31\x61\x52\x92\x0b\x15\x5d\x4b\xd0\x92\x06\x09\x90\x54\x8b\x90\x15\x62\xaa\xbc\x90\x1d\x4f\xa4\x22\x49\x86\xae\x18\xd4\x52\x83\x86\x22\xc9\xa4\x71\x56\xdf\x29\x0a\x28\x99\x8e\xca\x93\x85\x74\xff\x32\xd1\x6c\x3a\xa3\xa6\x28\x74\xba\x1c\xa3\xca\x26\x91\x1a\x63\x86\x7c\xe1\x76\xed\x9c\x99\x45\x9b\x2b\x64\x84\x6c\x2e\x9a\x4d\x64\xf2\xea\x5c\x61\x58\x86\x98\x21\x5f\x9b\x5f\x97\x29\xec\xd8\x41\xc7\x2e\x21\x44\x05\xcd\x78\x82\x56\x48\x87\xd1\x70\x0c\x1c\x92\x16\x5e\xa3\x09\x21\x19\x33\xcc\x4c\x34\x72\x6b\xcc\x74\x8a\x1a\x12\xb6\xe7\x13\xa9\x91\x42\x22\x37\x2a\x64\xb9\x6c\x3a\x3a\x26\xd0\x89\x67\x7b\x34\x96\x32\xcf\xcc\x36\xb9\x99\x45\x8b\xe5\xb8\x1c\x45\x41\xcd\xcd\xa2\x0a\x6a\x6e\x5a\x52\x50\xa3\xf9\xf1\x64\x90\x89\xe6\x72\x7e\x2e\x92\x8a\x8e\xa6\xb3\x1a\x59\xab\x2a\x42\x9c\x4c\xe6\x84\x49\xc1\x2a\x24\x93\x89\x4c\x2e\x91\x9b\x33\x21\x99\x67\xf3\x66\x26\x2d\x66\xc8\xdf\xe2\x57\x4b\x4b\x3f\x5a\x3f\x97\x4f\xd0\xf6\x1a\x8e\xad\x1c\xa4\xe9\x5a\x56\xf9\x52\xa6\x2a\x29\x6c\x13\x92\x54\x0c\x65\x40\x92\x58\xf9\xba\xb4\x8c\x90\xd4\xba\x74\x4b\x0c\xf9\x5b\x7d\x1a\x79\xca\x97\x66\x84\x68\x7a\x3c\x13\xc9\xd1\x99\x4d\x16\x90\x63\x92\x92\x4f\x67\x68\xe9\x30\x11\x0a\x59\x32\x32\x9c\x21\x85\x5c\x8c\x24\x52\x59\xb2\x25\x33\x49\xb2\x85\x61\x32\x96\x9d\x20\xc3\xf9\x28\x5d\x26\x0b\xea\xd9\x7b\xd6\x24\xe9\xa1\x61\x2a\x18\x99\xd1\xc8\xb0\x90\x67\x86\xfc\xbe\x76\xcb\x6c\xae\xf2\xc6\x48\xc8\x39\x4e\xce\xa2\xdd\xd2\xcf\x64\x4b\x3a\xd8\x7c\x5c\x4a\xd2\x4d\x43\x7e\x7f\x80\x06\x41\xdd\x64\xba\x90\x2f\x0c\x2b\x1d\x51\x12\xcc\xf6\x44\x6a\x44\xbd\x7d\x66\xe9\x31\x5b\x86\x0e\x26\x1f\xcb\xa6\x33\xc3\xe9\xed\xfa\x5c\x3e\x12\x1d\x9b\x51\x5e\xea\x44\x2a\x97\x8f\x8c\x64\x23\xe3\x5c\x3c\x99\x88\x8e\x65\x49\x24\x96\x62\xe2\xad\xe1\x56\xc3\x70\x22\x3f\x5c\xa0\x43\xaf\xb0\xa1\x30\x3e\x9c\xcc\x6a\xe5\x48\xca\x32\x26\xd3\xa9\x91\x39\xb3\x94\x7e\x4e\xba\x90\x99\x7b\x95\xca\x95\x69\x4e\x5a\xbe\xc5\x27\x12\xa9\x58\x7a\x22\xc7\x47\x52\xb1\x6c\x3a\x11\x63\x93\x89\x54\x61\x3b\x1f\xcb\x26\x86\xe9\xdc\x92\x1b\x9b\xcc\x08\x9a\x78\xba\x90\xcd\x6d\x2d\x44\xb2\x02\x97\xa7\x7a\x38\xcd\xc5\x85\xf1\x48\x52\x60\x68\x40\x27\xf0\x7c\x22\x43\x72\x05\xca\xda\x50\x88\xa7\x0f\x37\x89\x6d\x02\x19\x2e\x8c\xe0\x6d\x63\xec\x84\x90\x18\x4e\x73\x59\x21\x95\x15\x68\x81\xb0\xcf\x20\xf5\x7d\x68\xa6\xf3\x34\x2f\x60\x97\x9b\x34\x33\xe7\x26\xe5\x39\x87\x5e\x0a\x19\x62\xe9\xfc\x9c\x0b\x34\xaf\x4d\xb7\x2d\x31\x2e\xa4\x87\xe4\x36\x31\x43\xfe\xb6\x16\xbd\x3c\xb3\x49\x19\x43\x69\x9a\xe5\xa3\x81\x9f\x06\x94\x57\x6d\x41\x1a\x84\x68\x10\xa6\x41\x1b\x0d\xda\xf9\x42\x2a\x31\xd0\xda\xdd\xc2\xc4\x5b\x23\xad\xcc\x90\xbf\x9d\x22\xb5\xfb\x69\x92\x22\xb5\x53\xa4\x76\x8a\xd4\x4e\x91\xda\x29\x52\x7b\x3b\x33\x14\x68\x91\x30\x86\x29\xe4\xa3\x81\x9f\x06\x01\xb9\xb6\x9e\x56\x9a\x08\xd1\x20\x4c\x83\x36\x1a\x50\xa4\xd6\x16\x1a\xd0\xab\xad\x14\xa9\x95\x22\xb5\x06\x68\x10\xa4\x01\xc5\x68\xa5\x18\xad\x14\xa3\x55\x69\x5b\x6f\x8b\x12\x53\x3c\x1f\xc5\xf3\x51\x3c\x1f\xc5\xf3\x51\x3c\x1f\xc5\xf3\x51\x3c\x1f\xc5\xf3\x51\x4a\x7e\x4a\xc9\x4f\x31\xfc\x14\xc3\x4f\x31\xfc\x4a\xf3\xfa\x94\x0a\xfb\x5a\x95\x58\x2a\x41\x51\xfd\x0a\xc9\xbe\xa0\x12\x87\x94\x98\x56\x1e\xa0\x75\x04\x28\xd5\x00\xa5\x1a\xa0\x54\x03\xd2\x05\x8a\x1a\x50\x50\xfb\x29\xe1\x20\x25\x1c\xa4\xd5\x06\x29\x52\x90\x22\x05\x29\x52\x90\x22\x05\x29\x52\x90\x22\x05\x69\x53\x43\x14\x23\x44\x31\x42\x14\x23\x44\x31\x42\x4a\x53\x07\xa4\x6b\x14\x29\x14\x66\xe2\xad\x71\xe9\x1a\x45\x0a\xd3\x0b\x61\x8a\x14\xa6\x48\x61\x7a\x21\x4c\xc9\x84\x29\x99\x70\x88\x16\x8e\x52\x88\x92\x09\x53\x8c\x36\x8a\xd1\x46\x31\xa8\x5c\x04\xa8\x5c\x04\xa8\x5c\x04\xa8\x5c\x04\xa8\x5c\x04\xa8\x5c\x04\xa8\x5c\x04\xda\x28\x46\x3b\xc5\x68\xa7\x18\x54\x28\x02\xed\x14\xa3\x3d\xc0\xc4\x7d\x12\x1b\xdb\x43\x14\x92\x2e\x50\x0c\x2a\x14\xc1\x96\x16\x1a\xb4\xd2\xc0\x47\x03\x3f\x0d\x02\x34\x08\xd2\x20\x44\x83\x30\x0d\xda\x68\xd0\xce\x6e\x13\x52\x85\x1c\x33\x14\xa4\x22\x11\xa4\x75\x05\xa9\x48\x04\xa9\x48\x04\xa9\x48\x04\xa9\x48\x04\xa9\x48\x04\xa9\x48\x04\x5b\x29\x11\x1f\x25\xe2\xa3\x18\x54\x18\x82\x54\x18\x82\x54\x18\x82\x54\x18\x82\x54\x18\x82\x54\x18\x82\x54\x18\x82\x54\x18\x82\x54\x18\x82\x54\x18\x82\x54\x18\x82\x54\x18\x82\x54\x7d\x05\xfd\x14\xc3\x4f\x31\xfc\x14\x83\xca\x40\xd0\x4f\x31\x02\x14\x23\x40\x31\x02\x14\x83\xb2\x3e\x48\x59\x1f\xa4\xac\x0f\x52\xd6\x07\x29\xeb\x83\x94\xf5\xc1\x00\xc5\x08\x52\x0c\xca\xf7\x20\xe5\x7b\x90\xf2\x3d\x48\xf9\x1e\xa4\x7c\x0f\x52\xbe\x07\x29\xdf\x83\x94\xef\x41\xca\xf7\x20\xe5\x7b\x90\xf2\x3d\x48\xf9\x1e\xa4\x7c\x0f\x86\x28\x46\x88\x62\x50\xa6\x07\x43\x14\x23\x44\x31\x42\xed\x4c\xdc\x17\x6a\xa1\x01\xc5\x08\xfb\x28\x44\x31\x28\xd3\x83\x94\xe9\xc1\x30\xc5\x08\x53\x0c\xca\xf4\x20\x65\x7a\x90\x32\x3d\x48\x99\x1e\xa4\x4c\x0f\x52\xa6\x07\x29\xd3\x83\x94\xe9\x41\xca\xf4\x20\x65\x7a\x90\x32\x3d\x48\x99\x1e\xa4\x4c\x0f\x52\xa6\x07\x29\xd3\x83\x94\xe9\xc1\x76\x8a\x41\x35\x41\x90\x6a\x82\x20\xd5\x04\xc1\xf6\x36\x26\xee\x0b\x0b\x92\x98\xfa\xda\x5a\x94\xb8\x95\x19\x0a\x51\xd6\x87\x28\xeb\x43\x8a\x3e\xf0\xb5\x05\x95\x38\x44\x33\xc3\x34\x68\xa3\x41\x3b\x33\x14\xa2\xb2\x14\xa2\xfc\x0f\x51\xfe\x87\x28\xff\x43\x94\xff\x21\xca\xff\x10\xe5\x7f\x88\xf2\x3f\x44\xf9\x1f\xa2\xfc\x0f\x51\xfe\x87\x28\xff\x43\x94\xff\x21\xca\xff\x10\xe5\x7f\x88\xf2\x3f\x44\xf9\x1f\xa2\xfc\x0f\x51\xfe\x87\x7c\xf2\x6d\xe9\xeb\x56\x5a\xd8\xdd\xaa\xc4\x3e\x25\xf6\x2b\xb1\xd2\xd4\x6e\xa5\xa9\xdd\x21\x25\x0e\x2b\x71\x9b\x12\xcf\xd4\xd7\xad\xc4\x3d\x4a\xdc\xab\xc4\x7d\x4a\xdc\x2f\xc7\x3d\x0a\xdd\x1e\x85\x6e\x8f\x42\xb7\x47\xa1\xdb\xa3\xd0\xed\x51\xe8\xf6\x28\x74\x7b\x14\xba\x3d\x0a\xdd\x1e\x85\x6e\x8f\x42\xb7\x47\xa1\xdb\xa3\xd0\xed\x51\xe8\xf6\x28\x74\x15\xa5\xe9\xeb\x55\xe8\xf6\x2a\x74\x7b\x15\xba\xbd\x0a\xdd\x5e\x85\x6e\xaf\x42\xb7\x57\xa1\xdb\xab\xd0\xed\x55\xe8\xf6\x2a\x74\x7b\x15\xba\xbd\x0a\xdd\x5e\x85\x6e\xaf\x42\x57\xd1\xad\x3e\x45\xb7\xfa\xfa\x14\xba\x7d\x0a\xdd\x3e\x85\xae\xa2\x61\x7d\x8a\x86\xf5\xf5\x29\x74\xfb\x14\xba\x7d\x0a\xdd\x3e\x85\x6e\x9f\x42\xb7\x4f\xa1\xdb\xa7\xd0\xed\x53\xe8\xf6\x2b\x74\xfb\x15\xba\xfd\x0a\xdd\x7e\x85\x6e\xbf\x42\xb7\x5f\xa1\xdb\xaf\xd0\xed\xa7\x92\xd2\xae\x10\xed\x57\x88\xf6\x2b\x44\xfb\x15\xa2\xfd\x0a\xd1\x7e\x85\x68\x7f\xbf\xfc\x69\x09\x8e\x1e\x45\x58\xfa\xfa\x6c\x40\x08\x15\x29\x5f\xbc\x01\x01\x7e\x1e\x01\x62\x66\xbf\x4d\x49\xdf\xa7\x7f\xdc\xf1\x35\xc9\xec\xed\x47\x2b\x17\xb6\xd0\xf8\xf5\xd6\xd1\xc7\xff\xbf\x00\x00\x00\xff\xff\x5c\xbc\x44\xc5\xac\x86\x02\x00"), }, "/static/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff": &vfsgen۰CompressedFileInfo{ name: "fontawesome-webfont.woff", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 98024, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\x6c\x92\x53\x70\x25\x0c\xb0\xad\x77\x6c\x3b\x13\x4c\x6c\x4c\xec\x89\x6d\x4e\x6c\xdb\xb6\x6d\xdb\xb6\x6d\x27\x3b\xb6\x6d\xdb\xb7\xfe\xba\xe7\xbc\x9d\xae\xfa\xaa\x1f\xfa\xa1\x57\x7d\xb5\x5c\xe5\x44\x45\x01\x20\x00\x00\x00\xc4\xe7\x14\x80\x00\x00\x00\x40\x43\xaa\x00\xe0\x00\x28\xc0\xff\x31\xa2\xa2\xca\x32\x00\x00\x08\x23\x00\x00\xc0\xfb\x0f\xcb\x1e\xb1\x76\x31\x61\x11\x51\x00\x00\x44\x1a\x00\x00\x10\x02\x00\x80\xdf\xa0\xb7\x00\x70\x39\x25\x06\x26\x00\x00\xc4\x0a\x00\x00\xf0\x01\x00\x00\xbd\x30\x26\x0f\x7e\x43\x6b\x7d\x3b\x00\x00\xa4\x0a\x00\x00\x31\x07\x00\x40\xef\x61\x7b\xb9\x7c\x4d\xf5\x1d\xed\x00\x00\x30\x6c\x00\x00\x00\xfd\x1f\x3f\x3f\x00\x30\x53\x2b\x77\x13\x00\x00\xec\x37\x00\x44\xd7\x1d\x00\x2a\xdd\x15\xfb\x52\x23\x63\x66\xac\x6f\x04\x00\x31\xc8\x02\x00\x00\xcc\x00\x00\x80\x0d\x39\xfc\x88\xce\xcc\xcc\x58\x1f\x00\x62\x30\xfb\x3f\x7f\x49\x91\xc0\x60\x9b\xcd\xac\x9d\xdc\x00\x20\x06\xb7\x00\x00\xe8\x23\x00\x00\x7b\x2b\xe2\x8e\x1d\x6c\x65\x6b\xa8\x0f\x00\x31\x3e\x04\x00\xa0\x30\x01\x00\x38\x64\xd0\xa7\x02\x2d\x6b\x7d\x37\x3b\x00\x88\xd5\xe7\xff\x66\x06\xa3\x05\xc5\xb3\xd1\xb7\x36\x06\x80\x58\xe3\x01\x00\xa0\xc2\x00\x00\x78\xc8\x41\x6a\x64\x95\x9d\xad\xa3\x13\x00\xc4\x56\x0f\x00\x40\x0a\x06\x00\x70\x9d\x6b\x63\x33\xf3\xff\x33\xf5\x9f\x8b\x29\xde\x82\x99\xff\xf6\xa4\x1c\xcf\x7f\x3e\x00\x8b\x7f\xcc\xda\xdd\xb2\x0c\xf5\x8c\xf4\xf4\x76\xc1\x0c\x60\x20\x91\xf5\x0c\xf4\x8c\xf4\x8c\xb8\xc0\x49\xd5\xfb\x78\x20\x01\xf0\x6d\x80\x17\xc0\x7f\x77\x93\x49\xa3\xac\xbe\xbe\x89\xbe\xbe\xf9\x41\x83\xa9\xbe\xbe\x59\xc8\xfc\xf4\x08\x1c\x6c\xec\x4e\xec\x5b\xbf\x80\x89\x02\x03\x48\x28\xc8\xe0\x5a\x78\x2b\xf8\x1f\x7f\x2f\x36\x48\xd1\x38\x46\x92\x04\x54\x08\x48\x51\xc0\xec\x24\xb4\x0d\x00\xe0\x96\x35\x9d\xb0\x23\xb9\x6f\x8f\x3c\x7c\x62\x6a\x61\x7c\xfc\xc6\xd7\x47\x7c\x0e\x26\xdc\xed\x37\xc6\xe7\x07\xed\xb9\x20\x12\x26\xf7\x9b\xcf\xff\x15\x7c\x1f\x2d\x2c\xf5\x17\x2d\xf1\x9c\xf3\x98\xce\x65\x31\xb4\xa6\xa6\xe6\xdb\xe0\x96\xc5\x87\xad\x63\xc9\xd3\xb2\x6e\xaf\xcc\x69\xc1\x05\x19\x17\xa3\x29\x07\xe3\x14\x54\x08\x4a\x3c\x44\xfa\x0a\xd4\x9d\x20\xd6\x0d\xbd\xf4\xb6\x63\x8c\xc7\x60\xdd\x4a\xd1\xef\x3f\xea\xa9\x51\x56\x52\x6a\x2e\x47\x99\x78\xc6\x8e\xed\x4e\x35\x05\x54\x32\x96\x3a\x91\x1a\xcb\x15\xcb\xcd\xe5\xd6\x57\xe7\x31\x88\x8b\x2b\xe1\xc0\x34\x83\x0c\xcb\xa9\xc6\x31\xa6\xca\xaa\xc6\x71\xb6\xce\xcd\x03\x3f\x3e\x8a\x2c\xf5\x89\xf9\x94\xd6\x82\xe4\x6a\x0b\x67\x4b\x8d\x8d\x8e\x16\x53\xb0\x07\x6b\xa6\xe4\xdf\xd0\xe3\x38\x6f\x9f\x11\x94\xe7\x2c\x95\x10\x74\xe6\x22\x96\xeb\xb3\x29\x2e\x4d\xa5\xde\xf8\xe7\xff\x92\x05\x47\xe1\x57\xd4\xf5\xc2\x31\x96\x57\xf5\x22\xf1\x9f\x57\x4f\xe2\x0c\x2b\xc2\x39\x27\x35\xfa\x25\x55\xeb\x33\x58\xab\x8c\xf1\x2f\xd4\x77\x42\xd8\xbe\xc5\xe0\x81\x01\xd5\x7a\xcc\xaf\xe8\x5e\xf0\x6c\x9f\x95\x73\x5f\xa7\x91\x9a\xce\x12\xa9\x76\x93\x36\xe3\x74\x1d\x6d\x91\xed\x65\x9a\x76\x28\xd2\x77\x58\xb1\x8c\xc8\x11\x50\xd2\x76\xb1\xdc\x9b\xfb\x90\x2b\x6d\x03\x64\xdf\xbb\xa0\x27\x1c\x83\xb6\x9f\x03\xd8\x7c\xa2\x1c\xc3\x30\x31\x77\x68\x62\x1c\x43\x48\x78\x7a\x84\x3b\x6a\xbd\xc0\xda\xaf\x96\xfb\xfd\xfb\x80\x27\xe2\x7c\x11\x1d\xa4\x29\xdd\x3d\x5e\x4a\x02\x29\x5a\xd1\x44\xa9\x49\x9a\x1f\xf7\x1b\x34\x83\xb7\xc1\x87\xff\x5f\x77\x90\x9f\x1f\x00\xa8\x5b\x56\x57\x37\x8c\x9f\xf2\x52\x32\xe3\xe7\x75\xb7\x6d\xb9\xb7\x67\xb3\xb3\xb3\xb3\xab\x8a\xda\x52\xe5\xb9\xcd\xa9\x8d\x85\xb5\x07\x5d\x46\xb6\x8d\x0b\x38\xf8\x10\xa6\x48\xbc\x88\x80\x00\x32\x96\x24\x11\x75\xd8\x2f\xca\xfd\x6d\x33\xe1\x71\x26\x43\xcc\x07\x32\xd1\xac\x89\x92\x44\x11\x03\x54\x03\xb6\xde\xb7\x75\x52\xf2\xf4\xb6\xa8\xc4\x43\x76\x94\x0e\x82\x9d\xf6\x17\x15\x15\x35\x76\x84\xd3\xa9\x4f\x42\xa7\x6e\xd7\x97\xa7\x4d\xcf\x19\xce\x97\xac\x07\x8e\x29\xeb\x63\x0e\x03\xb4\xbd\x7e\x09\xbc\x54\x98\xf5\xc0\x21\x82\x26\xa4\xfc\xae\x8c\xad\x28\x28\x76\x38\x7f\xa5\x4c\x91\x6b\x74\xb1\x1f\xa2\xeb\x04\xe6\xac\xd7\xa8\xb8\x03\x8b\xbe\x83\xa4\x38\x5e\x6c\x57\xee\x61\xf9\x3a\x1d\x89\x12\x34\x01\x6e\x45\xc5\x71\x9b\x24\xe8\x11\xcb\xf8\x57\x69\xa5\x3d\xfa\xa4\x27\xaa\x08\x5b\x0e\xb1\x5c\x4a\xcd\xb6\x4a\x2a\xbc\x07\x68\x4e\x39\x5a\xda\x29\x68\x01\x27\x7f\xa5\x04\xd8\x4f\x14\xc4\x1b\x33\x58\xf7\x0a\xe7\x0e\x0b\x0d\x28\x28\x67\x3b\x79\x31\x34\xb7\x4b\x59\xb8\x1a\xdb\x91\x71\x9b\xac\x30\xcf\xcb\x01\x33\x5b\xa6\x6c\x81\x33\xe1\x4d\x3a\x87\x85\x65\xed\xe6\xfd\x0a\xe7\x85\x5d\xd6\xbb\x73\xe3\xe0\x39\x9d\xe2\x14\x23\x99\x96\x7f\x99\xc8\x1c\xbc\xd8\xb9\x2b\x87\x0e\xac\xd3\x9d\xa0\x3a\x0a\x5a\x4f\x3e\xf9\x85\x4c\x7e\x5d\xaa\xa9\x8c\xbf\x63\x6c\x0f\x18\x2d\x85\x10\xd7\x7f\xdb\x0b\x9c\xb6\x46\xc3\xcd\x12\x06\xd4\x2c\x8b\xa1\xf0\x0c\xc0\xb6\x70\xce\xef\x01\x6e\x5c\xda\xf4\xb0\x37\xbd\x64\xbf\xfe\x75\xab\x7d\x61\x4b\x9c\x72\x11\x3f\x51\x2c\xe8\x3f\xad\xaa\x6d\x77\xc8\xf1\x7a\x7f\xae\x5b\xc6\x92\x80\x2c\x11\xef\xbd\x36\xb3\x17\x1a\xa3\xc0\xc3\xc4\x15\x91\xa9\x3a\x8e\xfb\x40\xd0\x75\xbb\x93\x0e\x37\x8f\x2e\x2d\xbc\x74\x3f\x61\x3c\xfd\x0b\x02\x42\xba\x92\x53\xd8\x83\x8e\xbe\xb5\xd1\xdb\xd0\x8f\x8a\x5c\x16\x0c\x49\x61\x6e\x82\x93\xf8\x15\x48\x0a\x87\xaf\x67\xdb\x60\x5f\x34\x75\xa3\xb1\xa3\xa5\x81\xcd\x1d\x3d\xb6\xf1\x36\x7b\x41\xc5\xb8\x26\x4a\x73\x2d\x44\x33\xb9\x58\x3b\x28\xba\x70\xf1\x32\xca\xb7\xf3\x0b\x7f\x6d\x24\x86\x5f\x96\xa8\x06\x69\xb0\x1b\xa3\xc9\x55\xf8\x46\x82\x1b\x35\xc6\xb1\x4f\x8a\x23\xcb\x74\x28\xa9\x37\x7a\xdd\x6a\xda\x86\x5d\x3d\xa5\x9b\x50\x08\x02\x8f\xa5\xbd\x3b\x5f\x47\x5a\xe7\x53\x0f\x55\x5f\x72\x26\x9e\x6b\x74\xb6\x68\x0e\x3d\xd5\xa0\xa0\xb1\x6a\x78\xeb\x4b\xcb\x9d\xe7\x8b\x96\x4b\x78\x29\x2c\x06\x21\x80\xb4\x93\x5e\xf0\xdc\x8f\x2e\xd9\x02\x71\xd3\x33\xb6\xbc\x9f\x55\x8c\xe3\x58\xf6\x1c\xc4\x3d\x12\x03\x8d\xa1\x99\x04\xd8\x1c\xd9\xa5\xed\xee\x1a\x21\x6c\xa3\x4d\xb6\x9c\xc0\x19\x7b\x1e\x78\x73\xe6\xdc\x00\xcc\x11\xcb\xfa\xd2\xcc\xbe\xa0\xf9\x3f\x64\xb1\xe4\xf8\xc1\x1f\x08\xf9\xdf\x40\x4c\xe7\xb2\x8f\x16\x4b\xac\xa0\x41\xb8\x9a\xee\x6a\x4f\x71\xef\xd2\x5b\x7e\xa0\xbf\xda\xe9\x40\xaa\x8e\xfd\xcd\x62\xeb\xf7\x1c\x0b\xf7\x2f\x44\x53\x53\xf6\xaf\x83\xea\x9f\x2f\xd9\x3d\xf7\xea\x4b\x86\x81\x4d\x04\xfb\x27\xdc\xa8\x09\x79\xbc\xec\xd6\x30\x80\x1c\x60\x36\x4a\xba\x9f\x05\x2d\x7e\xc1\x3e\x96\xb6\x2f\xed\x75\x31\x34\x85\x38\x55\xc9\xa5\x9c\xd7\x02\x49\xba\x0c\x8e\x41\x85\xb0\xca\x42\x88\xb0\x9b\xce\x75\xc2\xb6\x30\x76\x7d\x2c\xda\x26\xf7\xbd\xc8\x22\x61\xaa\x06\x77\xc1\xf3\x26\xdd\x42\xab\x00\xe2\x0b\xa1\xba\xdc\x45\xe4\xb1\x71\xce\x12\x01\xe1\xfc\x70\xcd\xa3\x83\xcf\xae\xdd\x86\x37\x58\x87\x37\x02\x5b\xdf\x42\x42\x98\xb2\xf9\x60\x73\x7a\xb7\x35\xaf\xad\x63\xff\xd5\xde\x19\x22\x62\x46\x94\x7b\x2e\xfa\x94\x75\xb9\x26\xc4\x91\x1d\x8e\x5b\x41\x88\xbd\x43\xa5\xbb\x5b\xf3\x2b\xb8\xe3\xbe\x79\x25\x2c\x7f\x71\xea\xd5\x5d\x43\x62\x23\x0d\xed\x74\xb5\xf3\x94\x3a\x06\x9d\x88\x14\x06\xec\x06\xd1\x68\xbf\x39\xa8\x31\x1c\x64\x38\x05\x11\x7a\x93\x6e\x32\xf4\x6f\xeb\x27\xa6\xe7\xc3\x94\xf5\x57\xe7\xdc\xc8\xd6\xd7\x86\x09\xdb\xc6\x8c\x9d\x6d\xe5\x8e\xcf\x87\xf5\x62\xb7\xeb\xc2\x41\xac\x6d\xc7\xe9\x9e\x18\x9b\xcc\xcc\x51\x89\xad\xc7\xa1\xfe\x3d\x1d\xdd\xa7\x35\x36\x14\x89\xf6\x5f\x54\xed\xbf\xaa\x35\x31\x96\x7b\x1e\x6d\x6f\x9b\xc5\x9b\xcd\x9b\xf4\xd7\x7c\xd7\x54\xd7\xb9\x9c\xb2\xe2\x64\xc9\xe4\xca\x0c\xcb\xbf\x4b\x3b\xc1\x40\xa0\x75\xfb\x62\x2f\x25\x82\x05\xdc\x50\x0e\xe7\x56\x5f\xe5\xd2\xbf\x05\x9f\xa2\xb5\x39\x28\x4b\x5f\x57\xe9\x5d\x62\xa0\x66\xa8\x7a\x40\xc5\x78\xc1\x73\x06\x37\xc5\xa3\xe4\xe3\x95\xa6\x55\x4a\x3a\xe4\xd3\xeb\x0e\xf9\x4c\x22\x45\x83\x44\x12\xe9\xc4\xf2\xc5\x46\x1d\x31\xbd\xd2\x30\xaa\xe6\x29\xfe\xa2\xfa\x78\x0c\x49\x50\x27\x96\x1d\xa4\x28\xee\x79\x9d\xa1\x57\x6a\xea\xc1\xa5\x94\xf6\xd1\xa9\x02\x29\xb6\xd2\xc5\xa2\xe5\x31\x70\x99\x0d\xb0\xc2\x28\xb4\x7c\x15\x8f\x12\xbe\xbe\x24\xa6\x72\x48\x6c\x12\xb8\xd5\xe0\x8f\x4f\x53\xd6\x72\x85\x1f\xc3\x7d\x95\xf7\x70\xbe\xe7\xda\x0d\x38\x5a\x18\xd7\x74\x1c\xd9\x68\x1d\xc6\x8a\x9b\x2b\xe0\xcc\xab\x1b\x62\xef\x62\xa3\x7f\x72\x9f\x63\xab\x91\x1c\xad\xff\xb0\x12\x5a\x5a\x46\xe6\xd3\x7a\xc7\xb4\xd9\xd7\xcc\xab\x8d\x65\x73\x5f\x27\x96\x56\x39\x15\x02\x1c\xe7\xa1\xde\x8d\xd7\xd4\xb1\xed\x13\xec\x85\x18\xd2\xf2\x0a\x18\x01\xf9\xf6\x27\xfb\xbe\x5e\x98\x7c\x6f\x65\xb0\xc8\xcc\x53\x03\xd0\x41\xd9\xc7\x40\x7c\xb5\xb3\x6f\x86\x98\xa5\xb2\x7c\x3f\xc7\x73\x51\x20\xf1\xf6\xb8\x6f\xba\x63\x20\x12\x10\x4a\xa2\xca\x56\x40\x5c\xe2\xf9\x37\x07\xca\xe3\x6d\x99\xd0\x7e\xf6\xf7\x40\x50\xe7\x27\xdc\xa7\x6b\x79\xe8\xa7\xcf\x39\x3f\x6c\x4f\xee\xfb\xb8\x2e\x66\x1d\xe5\x8f\xb6\x19\xef\xd3\xc7\xd7\x79\xed\x2d\xd8\x6e\xb0\x43\x2d\xe7\x83\xff\xee\x2e\x92\x1d\x51\x0c\x1c\x77\xb5\x78\x55\xec\x39\x0a\x9d\xa6\x84\xc9\x63\xe1\xa4\x2b\x37\x19\x2f\x2a\x5e\x95\xd1\xd3\xca\x79\x6d\x73\x42\x1c\x68\x8d\x81\xb5\x38\x55\xca\xb7\x25\x34\xaf\x6d\x55\xaf\x56\x44\x48\xa7\xd9\x87\x08\x34\xb0\xdf\x7c\x1d\x9e\xdd\x1c\x89\x8b\x8e\xc8\xda\x86\x4b\x4f\x33\x44\x6c\x53\x3b\x70\xf7\x52\x4c\x84\x36\x92\x1b\x2b\x65\xd8\xb1\xc1\x5d\x9c\x0d\x2c\x82\x09\xfc\x74\x24\xcc\x11\xfd\x7a\x29\x95\x0b\xeb\x3a\x38\x14\x38\x21\x91\xed\x5b\xc6\x3f\xa6\xa3\xb5\xe3\x8a\x18\x54\xd5\x20\xa7\x0a\x1c\x6c\xce\x81\x68\xce\xad\xfa\x0a\xe6\xa9\xc6\x30\xfd\xab\x5d\xa9\xee\xf9\xd7\x5e\x2a\xd2\xb4\x4b\x3c\x55\x13\x2c\xb5\xe0\x1f\x32\xe6\x1b\xa0\x89\x3c\xd9\xc9\x68\xde\x26\x56\x33\x89\x76\xf6\x5d\xa3\x0f\x8d\x48\x3c\x9c\x8d\xa4\x0f\x83\xd7\x06\x6a\xab\xb1\x19\x3f\x63\x7f\x91\x5b\xae\xac\x57\xed\x47\xe5\xeb\x2b\x3c\x5b\x0c\x91\x45\x5b\x1b\xab\x8e\xad\x66\xad\xce\x6e\xe7\x8e\x3d\xe6\x46\xb3\x4d\x5f\xa6\x90\x55\xbe\xb5\xe7\xae\x2f\x5e\xb0\xc6\x57\xfb\xef\xe7\xde\xe6\x01\xcb\x11\x10\x6d\xec\xe7\x75\x45\xfe\xa6\xc4\xaf\xb8\xfc\xee\xbc\x2f\x8b\xdd\x56\x0b\x6a\x9c\x68\xa5\xe3\xd7\x4e\x16\x5a\x5b\x47\xfd\x38\xea\x6a\x51\x4f\xc0\x09\xfa\x2a\x64\xf4\x1a\x24\xc2\x4f\x10\x13\x1f\x47\x03\x83\x5d\x3c\x53\x9b\x19\x3f\x6a\xbd\xa5\xcf\x7a\xcf\xdd\xe7\xa9\xa0\x0f\x50\x7f\x5c\x13\xef\xd2\xdf\x21\x17\xc8\x2b\xef\xc0\x51\xa3\x94\x8e\x66\xbc\xf7\x96\x0a\xea\x68\x78\x2e\xba\x82\xb0\x90\x1a\x3c\xfb\xfb\x31\x55\x69\x8a\x44\x7e\x66\xcc\x8b\xd1\x63\x1f\xf7\x96\x22\xd9\x63\xee\x2c\x46\x09\x3a\xe0\x89\xaa\x3f\x8a\x43\x5f\x54\xb0\x4e\x54\x04\xe6\x7b\x41\x75\xd0\x21\x5a\x12\x3d\x2e\x89\x52\x04\x0d\x24\x35\x34\xcf\x44\x18\x0a\x0c\xd3\xae\x04\x3d\xc3\x4f\x25\x0b\x52\x2b\xf7\x09\x19\xb3\x89\x02\xcc\x8c\x45\x1e\x04\x3d\xb8\xe5\x37\x4c\x80\x05\xc8\x35\x62\x36\x8f\xd3\x29\x29\x9f\x11\xb3\xb7\x90\x4b\x88\x09\xce\xe3\xd2\x4b\xa7\x4c\x8a\x37\x9a\x86\x95\x49\xf9\xf1\x0e\x2d\xfd\x61\xee\xa2\x5d\x6c\xbf\xc5\x9f\x6d\xdc\x64\xa7\x65\xf5\x18\x8b\xc9\x1f\xa6\x0d\xab\x91\x54\x5a\x95\xfa\x72\xc8\xee\x1b\x90\xd6\x35\x1e\xae\xbb\x6e\x8f\xca\x35\x27\xcd\x34\xb2\x67\x75\xa2\x3f\x2e\x0b\xb8\x88\xf9\x32\x3f\x26\x0e\x86\xbe\x5c\xa8\xba\x36\xf7\x38\xc4\x2f\xe7\xec\x1e\x55\xae\xc3\x5f\x2e\x0f\x2b\xd6\x35\x08\x1e\x07\xce\xe6\x81\x6b\x46\x4e\xd5\x55\x11\x72\x15\x23\xf4\xcc\x52\x1b\x9b\x3c\xee\xf9\xe3\x46\x8c\xa1\x37\xcc\x56\x65\xd2\x56\xab\x39\xb3\xea\x4d\x43\xd5\x3e\x97\x06\xa6\x50\xbb\xd5\x24\x1c\xe2\x50\xec\xc9\x9d\x92\x83\x42\xd4\xa6\xea\x6d\x7e\xba\x90\xeb\xcb\xea\x52\xe6\x8b\x36\x41\x01\x8c\x1d\x02\x0a\xa8\xd8\x45\xc9\x28\x29\xf2\xe6\x32\xa6\xd8\x74\x70\x86\x63\x40\xe4\xd0\xe0\x69\x2a\x9e\x59\xce\xcd\xf6\xbd\xac\x61\x49\xf1\x94\x7f\x74\xc1\x20\x49\xb6\xc9\xf0\xe7\xae\xf0\xa8\xed\xcb\xfa\x38\xff\xb6\xb8\xe1\x5f\x17\x01\x60\xd9\x8b\xf0\x17\x3c\x1e\x03\x53\x8d\x40\x7e\xaa\xc8\x40\x70\xea\xbe\x31\x07\x44\xd7\xfc\x14\x2f\xe7\x36\x42\xbd\x6d\x82\xbd\x13\xab\x05\xc3\x2a\x5f\xe8\x80\xd0\x0f\xac\x9d\x36\xeb\x3f\x6f\x5c\x95\x5f\xed\xe2\x4c\x38\xee\xc0\xfc\x6a\x5f\x42\xf8\xd5\x64\xd0\x3d\xa3\x96\x6f\xf5\x95\xbc\x03\x91\x4f\x9a\x62\xb1\x6b\x78\x80\x46\x58\x36\xbc\x02\xac\x65\x52\x02\xa4\x3c\xf5\xf5\x28\x7d\x27\x14\x1b\x46\x9f\xdc\xd2\x26\x4e\x5f\x3b\x40\x6d\x98\xb7\x0d\xea\x2b\xd7\x26\x3b\x3d\xcd\x39\xf8\x5b\xb0\x77\xdc\x68\xd9\xf9\xa2\x0e\xe4\x87\xa3\x8e\xe7\x96\xbd\x85\xc5\xc7\xb0\x8f\x23\x0f\x92\xd2\x40\x0a\x45\x9b\x25\xc8\x2d\xc8\xa7\x9a\xda\x6d\x02\x8f\x37\xe5\x36\x69\xa0\xf7\x14\x79\x79\xe6\x8f\xf2\xc5\x2d\x53\xee\x8d\xd8\x4e\xbe\xb7\xd2\x8a\x77\xf4\xfc\xe7\xfa\xb6\x64\xe9\xbf\x90\x94\xc1\x76\x08\xf9\x0b\xdc\x40\x7e\x0f\x52\x4f\xf9\xf0\x81\xf4\xc2\x27\x62\x33\x2c\x9d\xe7\xd1\x75\x83\xd2\xd5\x74\x49\x87\x7a\x90\x1f\x82\xa6\x41\x3d\x45\x5d\xe6\xfc\xc9\x25\x10\x7e\x2f\x0e\x9f\x58\xdf\xdf\x2e\x5c\x62\x07\x22\x1c\x9d\x86\xdf\xe6\xe7\xda\xac\xe4\x2c\x6b\x4e\x13\xfd\x83\x6b\x31\x90\x38\x4a\x81\x49\x2b\x25\x68\xcf\xd7\x30\x24\x69\xd5\x2d\x37\xe8\xfd\x21\x8d\xac\x85\x7e\x10\x6b\x16\x0a\xbf\xa7\xd7\x18\x2f\x4b\xea\x9a\x07\x81\xb2\x7a\x89\xb3\x2e\x41\x44\x08\x78\x90\x48\x59\x8a\xbe\xee\xe7\x7d\xfe\x4a\x94\x2e\xb0\xda\xae\x82\xde\x92\xda\xd5\x7c\xce\xfb\xe0\x1d\xf0\xbc\xd1\xf4\x24\x42\x16\x38\x36\x94\xb4\xe8\xca\xe2\xce\x79\x69\x60\xba\x1a\xe9\x8f\x43\x30\x6c\xb1\xf6\x7d\xa9\xc7\xfd\xcf\x66\x50\x66\x27\xf2\x11\x2c\x24\x92\x25\xe2\x43\x64\x16\x4e\x31\xcc\xe0\x8b\x32\xe8\x01\x54\xcd\x24\x28\x28\x65\xd9\x1e\xab\xd8\xc8\xc1\x9b\x1e\x1d\xed\x75\x46\x4e\x27\xd0\x73\x7f\x84\x6d\x7c\xd2\xb1\x38\xa7\x19\xd2\xb3\xc7\x22\xf1\x4a\x7a\xd3\xf1\x5e\x0b\x8f\x05\x97\x2f\xf9\x65\xa1\x55\xff\x06\xd9\x51\x38\xa4\xc1\xad\x99\x10\x72\x15\xc0\x71\xcf\x19\x40\xd7\x0b\x8e\x29\x88\x1b\x04\x93\x9a\xd5\x33\x57\x09\x89\x79\xad\xce\x90\xb8\x30\x95\xbb\x6f\x1b\x35\x82\x58\x53\x65\xa2\x18\x83\xa5\xcd\xf4\x39\xba\x74\x64\xba\x4e\xf8\xac\x55\x5d\x65\x9a\xd8\xe5\xf8\xd4\x76\x0a\x8b\x85\xa1\xc3\x34\x39\xa0\xd4\xc0\x31\x26\xed\xeb\xfc\xf3\x98\x2c\x2c\xd9\x3a\x88\x79\x99\x5d\x0a\xdd\x44\x1d\x36\x8c\x4b\xc8\xb7\x22\x47\xf8\xad\xf5\xac\xa7\x35\xcb\x21\x2e\xae\x5f\x5b\x08\x40\x84\x97\x10\xfa\xdb\xde\xf8\x75\xf7\xdc\x39\xfb\xab\x9e\xed\x29\xf3\x99\x8b\xf5\x42\x9c\x7b\xd1\x2a\x7b\x6b\x3b\xcc\x8f\x45\x28\xe9\x75\x1f\x37\x96\xbc\x59\xeb\x11\x09\x42\xf4\xb6\xa7\x73\x7d\x17\x69\xe3\x97\xc5\x62\x15\x6d\xa1\x97\x8c\x10\xfa\x11\xce\x56\x52\xb5\x1f\x06\x03\x96\x09\x87\x5f\xe3\x66\x0d\x53\x59\xdb\x25\xcc\x2a\x7d\x44\xdf\x7c\xb4\x15\xac\x2e\x08\xc3\xa7\x9f\xc0\x57\xca\x9c\xa5\xf2\x83\x6a\x36\x30\xdb\x14\x0e\xea\xdb\x47\x39\x24\x1d\x0c\x0a\x18\x80\xcb\xa3\xc7\x54\xbe\x33\x7f\xa1\xb0\x4c\xce\x8d\xb3\xf9\x6f\x51\x00\x2a\x46\x8d\x7f\xfd\xae\x91\xdf\x34\xab\xc5\xc2\x33\xab\x05\xc7\x82\x16\x3a\x02\xa6\xc0\xb1\xd5\xd9\x59\x04\x0e\xa1\x0c\x2a\x23\xba\x61\x39\x37\xa7\xb5\x1c\x89\x6b\x49\xa0\x65\x1c\x81\x83\x96\x1c\xed\x7c\xee\x62\xa9\x0b\xc1\xdb\x2b\xa7\xc4\x00\x12\x0d\x1d\x82\xb1\x31\x99\xd0\x4a\x54\x01\x95\xd4\xce\x0d\x82\xb7\x7f\x0c\x9a\xc5\xc8\xc8\x9a\xfd\x79\xcc\xc6\x01\xd2\x99\x38\x40\x16\x93\x4b\x6e\x00\xce\x59\x27\xa2\xc1\x8d\xff\x2e\x3b\x20\xba\xe2\x1c\x4c\x68\x42\xac\xa1\x27\x69\x2f\x90\x3a\x8b\x4c\x34\x8a\x4f\xd9\xfa\x76\xe2\x6f\xf5\x32\x13\xfd\xa1\x6d\x67\xa7\x5d\x55\x45\x4f\x4f\xc5\xed\x64\x4d\xc4\x9f\x06\x87\x25\x2d\xe5\xc1\xc1\xb5\x7c\x29\x1a\xe9\xc1\xd5\x2c\xc3\xb5\x87\x40\xff\x81\xb8\x25\x9b\x46\x08\xd0\x7e\x2e\x3c\x8e\x9b\x82\xd1\x19\xa0\x7d\x99\x7b\xb7\x6c\xcc\xae\x96\xb0\xcb\x98\xc5\x77\xe8\x89\xe6\x53\xd9\x66\x89\xb0\x3b\x43\x04\x35\xaf\x38\xcc\x92\x26\xe3\xae\x55\x38\x07\xef\xcd\xc1\xa3\x5e\xaa\x70\x4f\x94\x11\xf9\x3e\x4f\xd6\x97\xdf\xba\x3d\xba\xe2\xaf\xab\xe7\x0e\x6f\x24\x9f\xde\x20\x2f\xeb\xbf\x9c\x9a\x0d\xea\x08\x9e\x4f\xe2\xad\x12\x5f\xfd\x58\xa2\xf2\xcd\x81\xe2\xdb\x76\xdc\xfc\x6d\x7d\xe5\xea\xb9\xa8\x91\xcb\xd7\x1b\x9a\xc2\x77\xcb\xda\x16\x7d\xef\xde\x1d\xd4\x83\x39\x50\x66\x92\x8b\x21\x9f\x14\x2e\x3a\x9d\xcf\x6c\xff\x84\x93\x5f\xa5\xd3\x32\xc7\x55\x41\x8e\x03\x9e\xf4\xf9\xff\x89\x3e\x5b\xe6\xf1\xec\xa6\x45\xa7\xc6\x27\xce\x0f\xc8\x36\xd4\x24\xdd\x65\xd1\x1f\xee\x06\x54\x5d\xd9\xa9\xfe\xa0\x18\x2f\x39\x9f\x43\x41\x2d\xfe\xac\xda\x65\x66\x15\x2d\x40\xd0\xc8\x6d\x73\x3f\x54\xa6\x6e\xdd\x95\xe2\x8c\x88\x02\xc4\x1a\xb5\x44\x3e\xa0\xf2\x67\xbb\x0d\x76\x2d\x4d\xdc\x61\x3d\xd0\xc7\xa1\xe2\x1c\x07\xaf\xe2\x10\x10\x60\xfe\x7d\x65\xbe\x27\x5b\xd6\x74\xc9\x2c\x47\xc8\x27\xdc\x6f\x6f\xab\xb7\xea\x9a\xf6\x0e\x90\xa0\xa5\x9b\x84\xc6\x79\x7b\x36\x03\x1a\x83\xa4\xcd\xe8\x9d\x64\x54\x29\x29\xcf\x81\xe3\x0c\xbb\xb3\xd8\x51\x2c\xce\x20\x3f\xff\x3a\x58\x9c\x41\x7a\x79\x42\x2c\xc9\x72\x87\x83\xe7\xa1\xfd\x1d\x79\xdd\xc2\x08\x4d\x08\x06\xc6\xa2\xee\xb6\xe2\x4e\xd1\x1f\xe4\x6b\x6e\x28\x7b\xe8\x71\x29\xb1\x5e\x56\xec\xb5\x82\xef\x40\x69\x0a\xd0\x82\xda\x43\xcd\xbd\x3f\x37\x25\x43\x18\x34\x0f\xba\x46\xe4\x6a\x0b\x2d\x79\x44\x5c\x3d\xd5\xc8\x62\xc3\xe6\x03\xec\xbe\x15\x25\x67\x11\x26\xd3\x0b\xaa\x48\x35\x89\x3b\xc0\xc4\x43\xd9\x48\xb4\x7f\x2f\x8b\xb6\x7d\xbe\x0b\x85\x2e\x57\x0a\x41\xb4\xe8\x1a\x86\x01\x7d\xf1\xcf\x16\x7d\xbd\x78\x77\x44\xf7\x98\x34\x8b\x48\x2e\xb5\x42\xfa\x8d\xdd\x07\x03\xaf\xe8\xab\xf5\x03\xd1\x2b\x6d\x46\xf2\x3d\xa2\x91\xa4\x56\x38\x87\xd3\x41\x8c\x65\x87\xce\x9a\x41\x17\x73\x8c\xf1\x27\x9e\xab\x6f\xd0\xee\x55\x96\x7a\xdd\x9a\x2e\x52\x54\x5c\x67\x80\x95\x84\xeb\xd6\x7c\xc5\xc0\xa5\xef\x6d\x76\xb6\x2e\xa7\x4a\x54\xb9\x9b\x0e\xa3\xfa\xb5\x52\xe8\x4d\xda\xa3\xa6\x60\x97\xac\x9f\x48\x26\x9a\xa5\x95\xd6\xea\xdf\xca\x2a\x9a\x2d\xb2\xe2\xb2\x1c\x79\x6a\x5e\xaf\x48\x20\xb1\xc5\x26\x62\x9e\xa1\x9b\x69\x56\xca\xd8\x5b\xba\xfb\xc5\x4f\x73\x98\x1a\x7f\x7e\x7f\xd7\xcc\x71\x58\x20\x7c\xea\x09\x14\x25\x60\xb7\xe0\x5e\x3a\x2c\xcf\x1d\x74\x45\x65\x24\xeb\xc1\x9b\x81\xc3\x77\x53\xa3\xa6\x19\xd4\x2c\xbc\x21\xbc\x6c\x1f\x91\xac\x9e\x4e\xfd\x3a\x2f\x5d\xea\xca\xfb\x16\xfc\x6a\x78\x8f\xc4\xb2\x28\x59\xda\x61\x74\x24\xb5\x79\xd3\x79\x61\xcf\xca\x76\x85\xcf\x27\x3d\x17\x1b\xcf\xe7\xbe\xed\x29\x44\x92\x85\xa5\xdf\x46\xc6\x16\xe0\x03\x63\xe6\x96\x49\xad\x71\x47\x0e\x8f\xfd\x5b\x93\xe3\x61\x37\x5d\x5c\x02\x4c\xf7\x47\x29\x62\xa9\xd3\xb7\xb7\x9b\x0f\x14\x23\x14\xdd\x5e\x71\xbd\xf6\xd2\xfe\x4a\x5c\xae\x05\xec\xbd\x12\xf5\xed\xad\xf6\x40\x8c\x1a\xe0\xb8\xec\xe5\xd9\xa3\x71\x54\x1a\x3f\xd1\x9c\x53\xb5\x20\x45\x9a\xd1\xd3\xaa\xf8\xdc\xb2\x68\xef\x99\xd1\x07\xc9\xb3\x38\xd6\xb4\x40\x52\x75\x81\xbf\xe2\xd1\x58\xee\xbf\x16\xdb\xaf\x0b\x33\x8d\x38\x37\xa4\xd7\x5d\x80\xcd\xb4\x39\xe7\x6d\x8a\x30\xc3\xab\xe6\xee\x57\xd7\xbe\xcc\xe7\xee\x37\xe2\x9a\x44\x29\xd5\x9f\x73\x74\x6d\x30\x08\x57\x68\xb3\xd6\x54\xa4\x6c\xa7\x50\xbb\xa9\x89\x05\x59\x40\x76\xd4\xed\x78\x83\x1d\x5b\x91\x5b\xce\x58\xd9\x0c\x96\x9a\xa3\xe1\x95\x0f\xcb\xbb\x50\x80\x3d\xb2\x91\x6c\x8f\x8c\x80\x04\x43\xf9\x9d\xd6\xed\x51\x92\x8d\x4d\x52\xf1\xd9\xc7\xce\x8a\xe4\x6e\xd8\xb2\xa9\xd0\xcc\xb1\x9d\x64\x0d\x47\x9e\x70\x6c\x14\x44\xcc\x58\x6d\xc7\xf2\x95\x7e\x4f\xc1\xeb\xe1\x26\x9f\x17\x1d\xdf\xca\x7c\x3c\x6f\xa1\xdb\x40\x52\x44\x7e\xae\x51\x10\x06\x47\x79\x08\xd2\x39\x41\x47\x30\x9c\x57\xd5\x97\xe4\xbe\xbd\x33\x9b\x5b\x46\x33\xc3\xce\xee\xdc\xb1\xb2\x96\x5f\x6b\xc0\xfc\xd1\x47\xb2\x3d\xae\xf4\xa2\x89\x47\x18\x8e\xb7\x2e\xae\x85\xed\xca\x61\x24\x55\x1f\x4f\xc7\x8e\x97\xd3\xcf\xd9\xfe\x83\xab\x6f\x9a\xcc\x89\x94\xd5\xe6\x6c\xb7\xdf\xda\xc7\x29\xb6\x52\x41\x93\x94\xb0\x87\x15\x44\x68\xd0\x14\xc1\x2b\xbe\xe3\x77\xbd\xa1\xf0\x07\xcf\xac\x55\x79\x8c\xa0\x01\x4a\x3b\x1c\x7d\x3e\x61\x55\x01\xf1\x3b\x1e\x2f\x4e\x27\xe9\x32\xef\xef\xc0\xdc\x09\x4e\x4d\xdc\x81\x23\x27\x6e\xf5\xf1\x6a\x27\xe0\x07\xe2\x75\xee\xf7\xc0\x9c\xd5\x20\xf4\x95\xe0\xb0\x17\x0b\xe6\x89\x32\xa6\xec\xdb\x14\x72\x98\xba\x20\xae\xb4\x2f\x5e\x27\x14\x6d\x36\x82\xe9\x0b\xc9\x04\x2b\xc6\xc7\xbc\xc0\xdb\x41\x78\x1c\x2f\xd1\x0f\xbb\x0f\xef\x2d\x03\xf2\x3f\x6d\xb5\x17\xf0\x4f\x67\xd7\x1d\x0d\xb5\x95\xc1\xef\x9c\xd3\x33\xff\x5e\xcd\xb5\x9d\xf3\x9c\x9c\x83\x4a\xb5\x05\x23\x5e\x5e\xc1\xeb\x45\xeb\x81\x9a\x9f\xf9\x58\x60\xa4\x4b\xc9\x5f\xd2\xae\xc9\xe7\xd3\x0c\x58\x02\x11\x14\x12\x50\xd8\x02\xe9\x70\x22\xf6\x89\xc1\xe3\xd5\xd6\x9c\x5e\xa2\x82\x8e\x82\x71\xe5\xa2\x38\x45\xc5\x2f\x09\x96\xb4\x09\xaa\xd7\x50\x94\x6d\x71\x92\x8f\x45\x2b\xea\x02\x2e\x12\x94\xcf\x42\x71\xfa\x60\xc8\xc4\x2f\xaa\xe2\xb8\x98\x14\xbb\x85\xd0\x22\x84\xe1\x0e\x45\xac\x0a\x99\x59\x41\xff\xf7\x40\xde\xf8\x91\x60\xd4\xdc\x3c\x0c\xca\xd1\x80\xc1\xe9\xe6\xd3\x69\xe8\xe8\xc9\xe2\x10\x3e\x81\x8f\x04\xda\x59\x5d\xa8\xf4\x3c\xa6\x4f\x30\xb2\x62\xd6\x4c\x3b\xc8\x3e\x77\x9b\x20\x36\x86\xbd\x9a\xdd\x16\xd0\x21\x50\x19\x83\x7c\x27\x2c\xda\x13\x69\xd4\xe5\x9a\x84\xb3\x11\x2b\x1c\x9a\x47\xce\x65\x10\x85\x02\x31\x03\x6d\xea\xe3\x44\x61\x24\xee\x63\x10\x84\xd8\x0e\x88\xf8\x76\x4f\x79\x0d\x1c\xa2\x23\xea\xcf\x7d\x95\x3f\xad\xef\x3d\x5e\x5f\x49\x7b\xcd\x8e\x37\x0f\x9e\x5b\xc4\x01\xcc\x28\x99\x5a\x05\xa6\x01\x31\xd0\x69\xaf\xe1\x95\xf1\x62\xa8\x33\xa1\xee\xed\xc1\x62\x5c\x51\x74\x36\x0a\xa6\xec\x93\x40\xbd\xc5\x58\x74\xe6\x6f\x37\x20\x68\xeb\xbb\x80\xdb\x31\xd9\x60\xac\xca\xaf\x68\xc8\x1b\xc4\xfb\x7f\x32\x1a\xa1\xe4\xe2\xff\x38\xbf\xf8\x6c\x1b\x76\x41\x1c\x31\x6e\x40\xc5\xf4\x91\xf1\x2e\x80\xb0\x7b\x17\x14\x33\xb8\x3d\x44\x9d\x56\x83\x5d\xe5\xd9\x5e\x8d\x22\x6a\x74\xb8\xd9\x4b\x90\xc6\x81\x06\x61\x67\x51\x4f\x06\x6e\x8e\xdd\x3d\xea\x8c\xa1\xe0\x3b\x6c\x22\x58\xf3\x17\x59\x7c\xd9\x54\xa8\x51\xaa\xed\xf1\xe2\x8f\x99\x27\xf0\x3b\x75\xde\x1d\x4b\xaa\xbc\x85\x40\x31\x9f\x03\x44\x75\xcb\x49\xb3\xc8\x0c\x06\xee\xe6\xce\x8d\xd0\xe0\xfd\x6e\xc6\x08\x4f\x16\x7a\x80\x61\xe0\x19\x8e\x96\x99\x1e\xc8\x09\x6b\xef\xce\x01\xac\x68\xa1\x40\x7b\x05\x6b\x11\x50\xd9\x34\x44\x93\xa5\x77\x92\xe4\xf0\xf1\xb8\xe5\x5d\xc9\xb7\xd6\x96\xf9\x02\xf4\xd4\xdd\xd9\x3d\xee\x1d\x82\xf7\xf5\xa9\xb8\x9b\x87\xc2\xc2\x33\x1e\xc6\xec\x5b\x36\xc6\x72\x96\x0d\x6d\xe4\x05\x26\x85\xff\x8f\x21\x43\x43\x15\x2b\x3c\x9d\x32\x57\x4e\xa4\x9e\xfa\xe8\x3f\x74\x74\x6d\xbf\x2d\x53\x6c\x9f\xc0\xc7\x9a\xe0\x19\xf3\xa0\x32\x2b\x82\x79\xbb\x54\xa2\xc6\x2e\x63\xbe\xdd\x3f\x6e\x8c\x6c\xbb\x7f\x2f\x63\x8d\x4f\x6c\x05\xf0\xb6\x1c\xd7\x0d\x02\x21\xa2\x9f\xa7\x2a\xc0\x4c\xdc\xe3\x0c\x98\x03\xf9\x05\x91\x80\x3b\x01\x60\x49\xea\xf6\xab\x7f\x91\xb9\x07\xad\xa9\x26\x40\xcc\x58\x1c\xe3\x2c\xfd\x08\xe4\xe3\xe1\xfa\x0a\x23\xc7\xfa\xa0\x41\x55\x4c\xd4\x30\xde\x66\xd9\x98\x3e\x02\x0d\x47\xf9\x38\x44\x43\x28\x27\x9c\xa8\xc5\x72\x85\x60\xdc\xad\x61\x1d\xcb\x9b\x1d\x0a\xec\x96\xa0\xff\xa6\xc3\xe3\x15\x4a\xdc\x5d\x0a\x5d\x84\xaa\x73\x81\xce\x74\x92\x4f\x67\x71\x9e\xd5\x2c\x70\x2a\xa7\xa8\x63\xef\xd1\x59\xb6\x6d\x82\xa6\x91\xa1\x42\x0d\x51\x15\xf2\x5f\x79\x89\x8a\xe2\x87\xa1\x9a\x21\xa6\x71\x52\x47\xf8\x51\x12\x2a\x3a\x2d\x81\x0d\xcc\x48\xf9\xbd\x8e\x76\x06\x2b\xa3\x22\xb6\x86\x41\xff\x93\xa1\x93\x90\xa7\x27\x8b\x46\x17\x22\xfe\x7e\x3b\x09\xf8\x9b\x43\x4b\x33\x19\xe2\xeb\xc7\xdb\x5d\x0d\x33\xfc\xc8\x77\xff\x5c\xec\x74\xf8\xb4\xeb\x0f\x79\x31\x8f\x5b\xaa\xb2\x6d\x8a\xa1\x10\x9b\x71\xa5\xf6\x83\x77\xe4\x4a\x12\x0b\x2c\x66\x87\xdb\x8a\x8c\x5b\xbf\xd2\xbc\xb8\x91\x7f\x87\x19\xb8\xfa\xd9\xae\x89\x8c\x83\x38\xa4\xb0\x60\x8f\x85\x1b\x64\x9f\x4a\x8d\x82\xe4\xd4\x08\x5d\xd9\x4b\xc4\x94\x40\x98\x52\x22\x6c\x6f\xfa\xf6\x6d\x95\x63\x51\xb7\x14\x16\xc1\xbc\xec\x9a\x0e\xc8\x10\xf4\x01\x01\xea\x05\x4a\x98\x72\xdf\x5b\x07\x6c\x2c\xbd\x54\x6e\x3a\x23\xe6\x2d\x17\x78\x84\x2a\x99\x52\xcd\xcf\x5d\x5e\x3a\xf4\x23\xfa\xe2\x8c\x8a\x6c\x86\xfb\xf1\xe2\x58\x43\xae\x4b\x05\x00\x39\x87\x35\x84\xb1\xaf\xa1\xb5\x07\x59\xa2\x9e\xd6\xc6\x31\x7d\xd8\x77\xc2\x15\xd9\xc4\x37\x02\x28\xc3\x21\xc7\x2d\xc2\x27\xcd\x89\x50\x01\x48\x5d\x82\x56\x46\x76\x0b\x59\x3a\x4d\x85\xf9\x1e\x1e\x37\xc5\x8d\x1b\xa6\x1f\x28\xa2\x5c\xf5\xf6\xe7\x05\xd9\x96\xa8\x57\x6a\x56\x57\xd1\x0c\xb3\xf9\x03\x37\xf5\xce\xbe\xff\x98\x22\x40\x1d\x1e\xf6\x94\x1d\x05\x77\x57\xf2\x76\x6e\x9e\xab\x6e\xa7\x5e\xa7\xa6\x2b\xd7\x03\xd0\x52\x9d\x4a\x09\xbc\xbd\x47\x5a\x4a\x73\x74\x59\xf7\x82\x61\x2e\x96\x2c\xab\x40\x58\x7e\x3a\xb6\x61\xb2\x05\xb8\x6d\xc5\xb3\xa5\xcf\x5b\x66\xda\xc1\x7b\xa9\xde\x3c\x5a\xe8\xd3\xed\x9d\x43\x77\xf0\x7e\x04\x0a\x3c\xba\x6b\xdd\xdd\x1e\x2c\xb6\x2d\x59\x97\x44\x3f\xe9\x6a\xda\xf8\xb7\xad\xe6\xd3\x9f\x40\x63\x31\x0d\x71\xde\xd6\x53\x37\xe7\x53\xb5\xd8\xda\x79\x77\x11\xba\xdf\x67\x31\xe4\xb4\x39\xb7\x18\x3a\x58\xd7\x93\x4a\x2f\x1a\xb3\x0f\xb4\x9c\xe4\x02\x9b\x4f\x85\xe6\x94\x99\x63\x4c\x28\xcd\x61\xb5\x4b\x5c\xe1\x50\x1f\xe5\x87\x6e\x8b\xf0\xcc\x15\x2a\x4a\x33\x5d\xc3\x80\x8d\x5b\xbc\xbe\x92\xcd\x3b\x51\x2e\x35\x62\xdb\x35\xee\x0d\x78\x9f\xa5\x9a\xeb\x9a\x2b\xdb\x07\x58\xb4\xcd\x2f\x22\x4e\xe4\x0a\xb1\x95\xb6\x4d\x86\xad\x83\x01\x71\x5f\xee\x06\x6c\x6c\x38\x96\x2d\xef\x2f\x32\x52\x5e\x5f\xcb\x91\xa4\xea\x2d\x41\x1e\x64\x59\x43\x23\xf2\xc9\x6b\x94\x71\x95\x75\x3a\xc8\x8f\x1c\xb8\xec\xc2\x55\x0e\x52\x75\x5b\x9f\x7a\x7b\x57\x64\xef\xac\x91\xf4\x0d\x5c\xaf\xe7\x30\x38\xfb\x43\x31\x28\x6e\xbc\x10\xd6\x35\xc7\x36\xfe\x6b\x91\x9d\xd5\xeb\xd6\xd8\xda\x93\xb3\x35\x04\x57\xe4\x51\x4c\x62\xc8\xc5\x20\x94\x74\xfc\xa9\x0a\xec\x90\x6e\xce\xcc\xc8\x18\x64\xfc\xe3\x76\x4d\xe9\xb3\x3e\xb3\xdd\xab\x07\x4e\x7d\x78\xa9\x00\xbc\x09\x38\x25\xec\x10\xed\x80\x98\x30\xde\x70\x2a\x01\xb1\xbd\x2c\x94\x0e\x4c\xf8\xb5\xab\xfd\x5f\x02\xa1\x0f\xaa\xa6\xdc\x9f\x78\xfd\x10\x70\xd4\xbc\x84\x3f\xa4\xd6\x1e\x08\xc7\x74\x5e\xba\xd8\x22\x43\x1a\x85\x93\x05\x96\x87\xd9\x3c\x98\x05\xac\x2a\xac\x43\x26\xa2\x05\x12\x29\x16\x75\x5f\xf7\xaf\x5d\x7e\x04\x77\x01\x7a\x61\xbc\x84\x98\xe2\xde\xbd\xef\x1f\x54\x8c\x89\x43\x3e\x77\xa2\xb5\xb4\xc4\x53\x68\x07\x83\xfd\xf8\xb2\xed\x6c\xa7\x96\x4d\x87\xc4\x3d\xa5\xde\xb7\x58\x7b\xed\x09\x96\x69\x07\x33\xca\x83\x9f\xc4\xa4\x69\xd1\xd0\xd6\x04\x1a\xf2\x86\x7b\x14\xb4\x73\x33\x99\x31\x4e\x1e\x01\x28\xfb\x6f\xc1\xe9\x4b\xc1\xb5\x04\xf5\xda\xdc\x34\xa7\x16\x0d\xc3\xf0\x98\x34\x03\xb2\x62\xa0\x67\x95\x60\x7c\x52\x24\x1d\x66\x74\x1e\x76\x57\x6c\x5a\x57\x77\xdc\xee\x89\x2b\x06\xdb\x3e\x18\xcf\x9c\xb3\xf4\xd6\x51\x30\x07\x50\x5a\x23\xbc\x43\xf6\x0e\xf6\x78\x83\x5d\xa3\xbc\x26\xc8\x4a\xb0\xf8\xe8\x6c\x61\xce\x94\x47\x45\x93\xbb\x78\x07\xab\xd1\x89\x7e\x60\xcc\xfe\x0d\x73\x24\xe1\x65\x69\xc8\xdd\x8c\xfe\x47\x0b\xf0\x60\xd9\xb0\x5c\x5b\xb2\x1e\x9e\xa0\x4a\x45\x00\x02\x99\x53\x6d\xe2\xaa\x3e\x3d\x45\xff\x2e\xb8\xe6\xfa\x6c\x7f\x7a\xa1\xcd\xe7\xbc\x52\x07\x3d\x3a\xc8\xce\x59\x15\xcf\x8b\x80\xe8\x68\x0f\xf0\x48\x9b\x4d\xfb\xe4\x47\x70\x18\xa7\x21\xb7\x83\x41\x04\xdf\x46\x73\x43\x9a\xc5\x0c\x2e\x66\xf5\xed\x93\x83\xc6\x74\xd9\xc4\x35\xea\x38\xfd\x18\x68\xd5\x87\x55\xf9\x9c\x10\xd8\x4e\xbd\xa9\x3f\xfb\x0a\x79\x06\x63\x27\x40\x7e\x13\x14\x43\x9d\x7f\x69\x9c\x59\x53\x5d\xef\x8f\x55\x77\xa1\x9b\x2d\x4f\xb9\x37\x9f\xa0\xf1\x16\x4e\xf3\x59\xea\x70\x0b\x01\xe5\xeb\x66\xeb\x3d\x31\xd1\x6f\xe5\xcc\x73\x30\xe6\xfb\x16\x8e\xf1\x8f\x41\x65\x34\x5a\x58\x03\x1c\xca\x58\x2e\xd1\xbf\xc6\xcc\xbd\x56\x14\x78\x10\x5c\x3a\x9f\x77\xda\x0d\x53\x39\x86\x5f\xfe\x24\x62\xa2\x44\x26\xd0\x95\xa6\x3b\x85\xf7\xa5\x55\x46\xdc\xa0\x3f\x84\x6b\xfd\x89\x29\x3e\xdc\x4b\x27\x44\x61\x6b\xbf\x07\x05\xfe\x88\x5d\x2d\x0f\xa1\x49\xd4\xac\xda\x1c\xa3\x49\xce\x73\x4d\x85\xfe\xf8\x9a\xbd\xfc\xc3\x09\x86\x7b\x13\x6b\xed\x74\x68\xa2\x19\x7d\xef\xe5\x99\xff\x91\x5b\xf7\xd2\x7f\x29\xb5\x7a\x70\x77\x73\x36\xb4\x8d\xbd\xc2\xba\x8d\x85\x62\x3f\x89\xec\x95\xdf\x41\xa1\xc8\xc4\xb1\xf0\x8c\x09\x85\xbe\x2b\x4d\x13\x03\x1c\xbe\xa0\xbb\xd6\xa4\x39\xb6\x87\x4e\x14\xe7\x5f\x8c\x3a\x22\xfe\x34\x5f\x1e\x8e\x22\xe0\xff\xfd\xd5\x19\xf9\xd7\x52\x9a\x95\x8f\xa5\xfb\x44\xdc\x02\xb5\x35\xd7\x85\x05\x88\x9b\x9d\x65\xd5\x72\xba\x44\xd4\x4d\x00\xf1\x88\xd9\x48\xeb\xf7\x63\xb8\x2c\x14\xcf\x7a\xc4\xe2\x79\xbf\x56\x7f\x1d\xcf\x62\x14\x16\xa1\x38\x7b\xe9\xf3\xde\x66\x37\x43\xcd\xcd\x69\x43\x18\xd9\xe5\x1b\x9d\x2b\x44\x66\xf4\xdd\xe9\x8d\x97\x87\x6f\x94\x25\x00\xc7\xa2\xc0\xf1\x6c\xde\x19\x26\xf7\x6a\x0e\x93\xd1\x06\xdd\xa6\xfc\x55\x7a\x5a\x30\x62\x6a\x74\x3f\xe8\x6c\xf5\x8d\x8d\xa1\x72\xae\x14\xde\x56\x23\x10\x66\x9f\x4e\x4a\x6f\xc1\xa6\xc2\xbd\x28\x33\xda\x82\xd5\xb0\x11\x8b\xbf\x11\xf3\xb0\x11\x9b\x1f\x18\x63\x91\xc8\x29\x99\x2e\x1c\xed\x22\x20\x0a\x15\x9b\x62\x10\x63\xed\x8b\x89\x0f\x00\xef\x90\x96\x93\xc0\xe5\xd5\xdb\xb3\x68\x37\xe1\x4a\x48\xe2\x93\x18\xf5\xaf\x92\x24\xc2\x1e\x83\x4d\x61\x53\xae\x72\x1b\xa9\x6b\xb6\xb7\x79\xd8\x3d\x9e\x0e\xfc\x3c\x56\xe2\x4c\xc2\x1f\xf2\x93\xf1\x9a\x7a\x27\x9a\x8f\xe7\xf8\x47\x05\x31\xbe\x61\x36\x30\x1d\xdc\x95\x31\xdd\x58\x44\x09\x08\x1c\x85\x8c\x0a\xa5\xf5\x5f\x88\x4a\x9e\x3e\x89\x64\x8a\xf4\x6b\xed\xa5\xb1\xda\x15\xce\xbb\xaf\x68\x83\x1e\x85\x60\x56\x18\x4f\xb6\xcb\x27\xd5\x3b\x83\x96\x77\xca\xd3\xf4\x7b\x0c\x79\x5e\x43\xf9\x4d\x18\xd6\xe0\x0f\x82\x26\xfc\x4b\xb5\xa7\x93\x29\xd4\xd6\xee\x57\xd1\x80\x2d\x99\xdb\xbe\x06\x55\x34\x64\xe8\xc3\xb9\xdf\xad\xcd\x61\x19\x97\x1d\x4b\x96\x2c\xd5\x8d\xe8\xef\xa5\x10\x3c\x1c\xa7\x05\x65\x48\x76\x99\x27\x30\x67\x3d\x8e\x58\xc8\x3b\x79\x6a\x07\x74\x04\xbe\x4a\x4a\xdf\x18\xcc\x3b\x39\x9d\xc4\xaf\xdb\xa8\x63\xa7\x7f\xc8\x47\xe6\x94\x51\x77\x32\x2c\x44\x08\x4e\x94\x65\x7c\x66\x17\xe9\x4b\x86\x2a\x48\x90\x73\xe0\x8f\x3c\x19\xfc\x11\x0d\x18\x9b\x25\x38\x83\xa5\x01\x11\xa8\xa4\xfb\x51\x32\x14\x73\xe0\x4f\x87\x94\xed\xa8\xe9\x92\x61\x2b\x8d\x9d\x15\x0a\x58\x8b\x9b\x81\x8f\x35\xe1\x3c\x1c\xc7\xaa\x16\x7e\x33\x16\xec\xf2\xaf\x7f\x67\x7a\xb8\x17\x5f\x9f\xb2\xe2\xa0\x32\x42\xef\x75\xfd\xd7\x89\x14\x8a\x73\xf2\x9f\xe8\xcd\xbc\xb8\x04\x6f\x26\xa8\x16\x12\x00\xc9\x68\x50\xe0\x31\x6e\x9b\x69\x8e\x05\xb8\xad\xba\xfb\xfe\xcb\x0f\x60\x46\x9c\x1f\xcb\x2f\xfa\xb2\xbc\xe5\xf4\x6a\x72\xf4\xe8\xad\x5a\x5e\xd1\xba\x84\x72\xe4\x4e\xdf\x96\xf4\xdb\xc4\xf4\xc2\xed\x76\xc8\xac\x10\xcc\x04\x99\xd3\x89\x30\x6c\xf9\x7a\x1c\x4b\x2b\x2f\xfb\x12\x18\xef\xce\xf7\xfe\x1b\x4f\x33\x9b\x5f\x95\x52\x16\x17\x17\x96\x0c\x6f\x4b\x5b\x33\xa7\xae\xe6\x17\x2a\x9f\x50\x8f\x4a\xe0\xd8\x99\x53\xce\x8e\x8d\x79\x2a\xeb\x56\x0e\xb0\x53\xc5\xdc\x81\x87\x73\x79\x32\xc6\x7a\x55\xca\x6d\xf9\xf7\x82\x10\x29\xe4\x79\x1f\x36\x03\x25\x5a\x01\x30\xa6\x4c\x76\x46\xa3\xcb\x83\x9a\x50\x8c\x58\x75\x95\x72\x1b\x60\x2e\x4d\x1e\x7b\xf5\x57\x83\xf0\x13\x12\x2d\x14\xd6\x64\x43\x2c\xe3\xfb\xb7\x6d\xa1\x38\xd8\xa8\x80\x3f\xde\xcb\xb8\xbf\xf8\xfd\x07\xfc\xb8\x86\x6a\x35\x8a\x11\xab\xef\x19\x00\x0e\xf8\x08\xfc\x7f\xac\xc1\x38\x74\xe9\x4b\x6f\x0f\xd4\x9a\x14\x5b\x08\x2b\x13\xac\x5c\x28\x45\xd1\x59\x05\xe2\x96\xba\x5b\x33\xf2\xd1\x7f\xf9\x68\xe3\x53\xf3\x2b\xac\xf6\xc2\x42\xa8\xbe\xe5\x27\x41\x1c\xdd\x99\xbe\x1c\xca\x6c\x46\xd4\x37\xb4\x24\xee\xe3\x72\xc9\xc4\x96\x4e\xe4\x28\x68\x4c\x1d\xa4\x34\x7f\x4c\xd2\xa3\xc3\x8a\x17\x5c\x9a\x54\xe6\x48\xae\xb8\x4a\x3d\x86\x04\x4b\x40\x09\xa4\x06\x6b\x95\x47\x6e\xe2\x34\x5e\x66\x6e\x98\x20\xb3\xa7\x7a\x9c\xdc\x7e\x58\x35\x5c\x78\xb3\x8e\xaa\xfe\xe4\x79\x7c\xbe\x5f\xa1\x85\x8b\x8d\x6e\xc0\x43\xbe\x1c\x8e\xc4\x1d\xc2\x3a\x4f\x75\xba\xec\x44\x5e\x40\xe9\x4f\xde\x8e\xd7\x25\x1e\xc4\x69\x50\x3e\x29\xb1\xa9\xc1\xf5\x78\xf4\x2c\x4e\xb2\x1b\x07\xae\x59\x2e\x9c\xcd\x69\x5a\x20\x3e\x47\x8e\x7c\x5e\x77\x9f\xc3\x11\x90\xb0\x69\x9e\xd7\xe2\xae\x2e\xb0\x99\x8f\xf7\x05\x0c\x2b\xad\x17\xda\xb4\xf4\xf3\x27\x18\x95\xdf\x74\xea\xd5\x68\xa6\x1d\xe6\x79\x77\x99\x17\x6b\xf3\x78\x1a\x9c\xc9\x92\x5b\xbe\xdc\x15\x16\xe3\x89\x75\x68\xe6\x28\x04\xa6\x87\x15\x9e\x2c\xea\x61\x8a\x9c\x10\x86\xfa\x9e\x5f\x3d\x55\x44\x76\x6d\x5b\xee\x46\x93\x7a\x51\x74\xd5\xdc\xed\x2f\x9d\xb7\x8a\xc9\x15\x83\xa4\x96\x2a\x06\x97\xb3\x20\xe3\x73\xc1\xb8\x77\x9f\xe6\xfe\x83\xac\x7d\xff\x63\x54\x1c\x6c\xe6\xc1\xac\x4c\x90\x33\xd1\x2a\x4d\x97\xc3\x1c\xb5\x24\xbc\x26\x46\x06\x02\x3a\xa2\x01\xdb\x91\x65\x70\x96\x54\x9c\xc9\x7c\x20\x91\x5c\x73\x96\x1e\xa5\x18\xa7\x63\xe8\x8e\x4c\xfb\xc2\x9c\x95\x05\x8e\x87\x21\x4f\x74\x5c\x84\xc4\x1f\x05\x30\x37\x96\xc5\xb1\xbf\x2c\xf0\x13\x55\xa2\xf0\xe6\x67\x29\x98\x0b\x1b\x8c\xf5\xe9\x78\xbc\x3f\x5d\xa7\x7e\x05\x28\x23\x51\x4e\xbf\xca\xcf\x5e\x9e\x62\xab\xd3\xa4\xf2\x66\x13\xfd\x4d\xf4\xe6\x6b\x9f\xad\x39\xa1\x29\x3a\x7a\x1a\x78\x6a\x18\x77\xa5\xbe\x60\x1e\x7f\x55\xe9\xce\xaf\x2b\x08\x72\x04\x1b\xe9\x1e\xc8\xab\x9d\x45\x32\xc7\xd5\xfc\xe6\xac\xd0\x0f\x9f\xc7\xa9\xd7\xda\x58\x73\xde\x57\x33\xde\x51\x67\x6d\xcd\x2d\x84\x89\x5b\x3d\xa4\x69\x6a\x6c\xb9\xa4\xbd\xef\xac\x18\x31\x97\x6a\xd0\x7a\xd8\x9f\xc8\x30\x7e\xe3\x69\xee\x3f\x8d\x41\x9f\x79\xf7\x68\xac\x93\x5a\x15\x6a\x26\x7f\x14\x37\xda\x32\xb0\x74\xda\x2a\x67\xe7\xe9\xcf\x13\x33\x7b\xda\x9d\x84\x6d\x36\x29\x95\x1b\xfb\xc8\x32\xb1\x0b\xa6\x31\xe2\x89\xe4\x98\x52\xbf\x7f\x1d\xf8\xb7\x44\x58\x43\xf9\x36\xd3\x04\x08\x71\x4c\xe6\x23\xe2\x16\x7c\x52\x56\xe4\x97\x84\x71\x91\x7a\xca\x52\x89\xe4\x88\x30\xc0\x55\x01\x8a\xeb\x28\xfc\xe2\x96\x6b\xb7\xcc\x31\x40\x22\x5b\xd6\x54\xc8\x10\x0f\x45\x84\x0c\x2b\x95\x4b\x47\x24\x84\xc7\xc7\xe7\x3c\xad\x0b\x8f\x29\x07\xe9\x9d\xc0\x63\x74\xb8\x65\x7c\xbb\xad\x84\xf4\x6e\xff\x44\xcd\xca\x52\xe9\x19\xe5\x7b\x9f\x48\x52\x65\xd5\x89\x2e\xec\x3f\xdc\x6c\x0e\x3c\x38\x1d\x03\xec\x15\x42\x7a\x1b\x1b\x8a\x56\x87\xcf\x59\xe3\x6c\x84\x39\x5c\x25\x3f\xc5\xd4\xd8\x4b\x8b\x58\xf5\xe4\x43\xa2\xc0\x10\xf7\x49\xb0\x8e\x8e\xaf\x97\xf4\x99\x80\xa9\x4c\x41\x57\x8f\x32\x81\x1a\xa2\x3f\x07\xa9\xd1\x94\x40\xc8\xd1\x22\xd4\xd7\xde\x42\xc9\x60\x4a\xde\x65\xfb\x97\xb2\xe5\xc4\xe6\xb8\x27\xfd\xa5\xfe\x04\x61\x24\x97\x8d\xdd\xca\x78\x74\xb3\xff\x5b\xf0\x8b\xca\xb7\xee\x96\x2f\xc5\xf8\x8d\x32\x1b\x86\x90\xff\x8d\xb0\xcf\x5e\xf9\xd8\x57\xd5\xad\xf7\x96\xcf\xd1\x42\xe0\x36\xcf\xbc\x89\x49\x8d\x3f\x5d\x0d\x73\x92\x47\x0a\x39\x1b\xb3\x03\x3b\x62\xfe\x7e\x42\x1e\x96\x06\x0f\xb6\x0f\xca\x1c\x61\x0a\xec\xa7\x19\x9c\x65\x8f\x72\xb5\xf4\x25\x14\x6f\xe9\x1a\x06\xe2\x2a\x03\x36\x76\x92\x60\xf1\xd1\x0d\x55\xa0\xb3\x64\x2a\xb1\x61\x10\xe6\x8f\xa4\x07\x85\x5c\xe7\xd4\xc8\x17\xfc\xc5\xdf\x79\x1e\x69\x46\x5a\x6e\x55\x2f\x0a\xcd\x28\x4e\x6e\x24\x0b\x2e\xcd\x94\x72\xc1\x9c\xb2\xd5\x1a\x45\x4b\xa0\x8d\x50\x30\xfd\x6c\x5b\x33\xa6\xf9\x76\x7d\xb3\xf2\x73\x6f\xf8\x56\x36\xb9\x26\x32\x06\x96\x59\x7e\x02\xab\xea\x08\x6d\xa3\xe2\x67\x0b\xa2\xc4\xe5\x99\xec\x90\x27\xb6\x2d\x9a\xa8\x97\xf2\x2f\x9b\x78\x5d\x2f\x85\x14\xb5\xb1\x25\xbe\xf3\x5b\x95\xc0\x87\x4b\xe4\x26\x4f\xe9\x8d\xd9\xc4\x13\x29\x1d\x78\x01\x0a\x20\x27\x1b\x01\xf9\x89\x88\x26\x9c\x19\x47\x5e\x72\x55\x35\xc1\xba\x24\x75\xeb\xbf\x39\x3e\x7f\xd7\xaa\x20\x77\xb5\x95\x2f\xcc\x1c\x1a\x7c\xc4\xa6\x1c\x55\xff\x0b\xbc\x41\xc3\x23\xea\x8b\x2f\xc4\x32\xf5\xee\xf7\x56\xf9\xe6\x41\xa4\xa0\x29\xa2\xf4\x92\x4c\xe6\x12\x84\xe4\x7b\x9d\xab\x4d\xf8\xbe\xb4\xd1\xf3\x68\xb2\x4c\x14\x64\x28\xe2\x5f\x8d\x05\x7a\xd0\x59\xe3\x09\x10\xc9\x8a\x7d\x6f\x99\x67\xc7\x83\x86\xc2\xfc\x93\x4c\x07\x9b\xcd\x62\xa9\x5f\xac\xa6\x4f\x97\xf1\xd2\x6c\xde\xd4\xff\x72\xad\xae\x22\x9b\x9f\xb5\xa6\x89\x33\x03\xfc\xdf\x9f\x3b\xa8\x93\x7e\x2d\xbc\xf7\x37\xd8\x71\x7e\x97\x1e\x85\x62\x7e\x6d\x5e\xb4\x09\xb2\xc8\x3c\x78\x24\x0a\x14\xaf\x5d\xed\xb0\xb1\x4a\x17\x1e\xd1\xaf\xed\x65\x2c\x32\x95\x5a\xd2\x32\x46\x3d\x86\xcf\xeb\x5c\x15\xf3\xad\x89\xf1\xc7\xde\xb5\x4f\xf2\x8b\x8f\x38\xb9\x27\x0d\x11\x9e\xd4\xc1\x27\x81\x6b\x40\xb1\x98\x1b\xdb\xa9\x39\x21\xe7\x2e\xbd\x0a\x40\x1f\x9a\xd1\x72\x2c\xf2\x78\x72\x8e\x75\x07\x0e\x23\x8f\xb6\x8e\xb4\xb8\x82\x23\x6a\xa4\x5d\xcb\xa9\x63\x15\xe1\x88\x4c\xf2\x60\xc1\x25\xa0\xa2\x83\x14\x7c\x6b\x1c\x52\x55\x86\x3b\x91\x44\x33\x80\xdd\x1d\x35\xc5\xd5\x6a\x89\xb2\x4f\x24\x2d\x08\xf2\x51\x06\xfe\xec\x93\x77\xc4\xb1\x41\xc4\x58\x19\x4d\x9a\x1f\xc4\xf7\xad\x02\x9c\xba\xf7\x3b\x19\xee\xaf\x51\x8e\x79\xef\x6d\x0e\xf9\x70\xff\x92\x03\x1c\x4f\x26\xb4\x11\xf9\xd1\x80\xd9\xdd\xd8\x8c\x1a\xf4\xcc\x43\x45\xab\x9c\x32\x77\x62\xf3\x6c\x23\x04\xff\x90\x25\xae\x24\x0b\xc4\xb3\xff\xe9\x1f\x71\x2d\x9c\x24\x08\x65\x79\xf7\xed\x32\x5f\x6e\xc1\xc5\x82\x41\xbe\xb3\x45\xdd\xf5\xfa\xf0\x8d\x0b\x3f\x7e\xdd\x31\x27\x7f\xa9\x9c\x60\xc9\xf1\x69\xba\x68\xe8\xfa\x7b\xaf\xe4\xef\xe7\xdb\xcb\x12\x4d\x04\x9e\xc3\x76\x74\xf9\xd2\x4d\xaa\x0d\x7c\xfc\x2e\xc8\xfc\x4c\xbe\x07\x3e\xc0\x2a\x7d\xc3\xdf\x8f\x89\xeb\x53\xa9\x63\x66\xbc\x2c\x52\x58\x9d\x98\x72\xf0\x9e\xe8\x79\xf4\x8f\x53\x1a\xb8\xba\x80\x26\x56\x82\xe7\x05\x84\x98\x73\x31\x89\x44\xe3\x13\xd5\x55\xe9\xad\x71\xbb\x5d\xbd\x20\xd1\xe2\xd7\x0c\xf8\x76\x3f\xa8\xff\x2e\x0c\xee\x03\xae\x2c\xed\x94\xff\x54\x7c\xc7\xc0\xf2\xf6\xa7\xcc\x86\x58\xe8\x8c\x76\xc6\x6e\x2a\xd4\xe9\x74\x5d\xf6\x21\xe9\x8e\xf8\xaa\xbb\xeb\xbd\xf6\x97\x2a\xc4\xbe\x57\xbc\x6b\x92\xeb\xab\x47\xae\x2b\x20\x38\xcf\x39\x32\x7a\x92\x43\x58\x9f\x06\xc6\x53\x9f\x23\xd6\xaf\x2d\xbd\x5a\x50\x45\xd7\x8f\x28\x37\x20\x0b\x55\x95\x90\xc2\xa9\xa3\x2b\x24\xf1\x51\x87\xc8\xaf\x62\x86\xef\x76\x9e\x79\x8b\xe7\x16\x94\xf5\xf6\xbf\x1d\xa2\x67\x4d\x16\xbf\x2f\xea\x86\xb2\x87\x7c\x10\xd9\xfc\x45\x53\x5d\x2d\xa5\x74\x4c\x7a\x8a\xcb\x93\x1b\x14\x53\x14\xec\xf9\x97\x3b\xb2\x61\x20\xc6\x40\xfd\x50\xd6\x14\x6e\x80\x9e\x1f\x17\x8b\xde\x22\x92\x18\x4e\x99\x14\x4b\x1c\x6c\xe5\x30\x91\x44\x0a\xac\xec\xf5\x7f\x4f\x36\x92\xec\x77\x15\xb3\x63\xc3\xcf\x9f\x3e\x0d\x84\x95\x2f\x62\x80\x68\x26\x81\xb0\x08\x85\x0f\xb6\x76\x12\x3a\x51\x64\x1c\xf1\x16\x4c\xb1\x98\x2a\x54\x1c\x9d\xf8\x17\xeb\x72\x8b\xd5\x29\x81\x92\xca\x47\x19\x6e\xc1\xfb\x95\x81\x31\xcc\x05\x2a\xb2\xd7\x29\x94\xee\x14\xa4\x9a\xca\x25\xa7\x69\xa6\xc9\xba\x49\xec\x7c\x2c\x52\xc6\xac\x36\xff\x44\x8f\x60\x52\xaf\x69\xbc\x59\xc9\xd1\x22\x4f\x75\x65\x0c\x9b\xc3\xa8\xb8\xe8\x9f\xf4\x6d\x44\xbf\x16\x8b\xce\xe5\xe3\x8d\x92\x15\xda\x56\xed\xc4\x43\x15\x5b\xca\x80\xaa\xe0\x8b\x60\xb8\xb5\x23\x77\x22\xe8\xdf\x23\x26\x66\x07\xe4\x09\x7e\x21\xa6\x13\x3b\x2a\xa7\x03\xc5\x33\x00\x16\xd4\xb8\x33\xc7\x18\x9c\x56\x92\xa4\xd5\xa5\x9e\xb2\x26\x2b\xca\x0b\x59\x12\x78\x1a\x4d\x66\x5c\xc7\xfd\x5e\xad\x66\x4b\x34\x6a\x48\xd0\x2e\x2f\xbd\x7b\x09\xf5\x9b\x18\xc0\x03\xa9\x90\x2e\x36\xc2\xda\x97\x76\x3e\x8b\x6c\x41\xa8\x99\x96\x46\x13\xf2\xa8\x5c\xa8\x79\xe9\x97\x50\x77\x7c\x6c\xe6\x9e\x15\x88\x08\xe7\xa7\xb6\x59\x74\x5f\x2f\x68\x1e\x3a\x20\xe8\x07\x4a\x4d\xc6\x8e\x97\x37\xe7\xa1\x6e\x8b\xb4\x62\x45\x9f\x3d\xab\x05\xbe\x2f\x7d\x18\xcb\xa4\x61\x56\xf4\x12\x3e\x0d\x16\xf4\xc6\xb8\x95\x69\x7e\x51\x3b\xff\x82\x2f\xfb\xf9\x2e\x00\xa7\xf3\xd8\x19\x9d\x4f\x0d\x76\x30\xf7\x10\xe7\xcb\x1c\xdf\x9f\x87\x8f\xdb\x1e\x65\x22\x4d\x2e\x80\xcf\x7d\x9b\xe2\x1d\xd0\x0d\xbe\x68\x7e\xce\xae\xc4\x3f\xb1\x60\x4f\xf4\xfc\x55\x4a\x74\x62\xc6\x0e\x8c\xd9\x40\xf6\xb2\xdb\x34\x71\x24\xe3\x94\x16\x58\x50\xa0\xad\x19\x65\xaa\x4b\x51\x13\xc7\xf1\xa3\x14\x11\x71\x36\x85\x4a\xfb\x26\x5f\x62\xc8\x87\x25\x9d\x0a\x84\x34\xb4\x26\x65\xd4\xa1\x94\xd2\xad\x82\x13\xd2\x16\x2e\xcc\x1f\xb9\x0d\x37\x6f\x2f\x4d\x4f\xa3\xc9\x65\x48\x51\x56\x44\x5d\x32\x93\x93\xfc\x5b\x9c\x26\x1b\x85\x81\xd8\x73\x1a\xb6\x9d\xf9\xdb\xa2\x82\x1b\x6d\x0f\xfe\xd2\xbf\x71\x86\x24\x69\xe3\x97\x84\x92\x35\xa3\x02\x6a\x10\x21\x8b\xda\x47\x43\x4f\x65\xc6\x52\x2c\x76\x51\x25\x21\xab\x2e\xc4\xf7\xb9\x89\x11\xa0\x14\x33\x18\x7e\x9d\x98\x11\xbd\x70\x31\x76\x96\xf0\xf7\x2b\x6e\x98\x8f\xb0\x77\x76\xb9\x22\x05\x81\xff\xad\xe5\xef\xef\x39\x31\xa9\x3f\x94\xfd\x4d\x8d\xba\x0c\xa3\xca\x39\x50\x49\xa2\xe9\x63\x45\x1c\xf8\xc5\xf8\xbe\x55\x88\x7c\xf1\x89\x0a\xb8\x00\x8e\x8a\xaa\xe0\x5d\x4c\xeb\x49\x7a\xeb\xb7\xd7\x49\x44\xc7\xed\x4b\xa7\x81\x41\x7f\x7c\xc8\xc0\x23\xba\xc8\x7e\x3d\x57\x8d\x1e\xfd\xf8\xe0\x7a\xb7\xb1\xb3\x1f\xb7\x61\x62\xee\xe9\xda\xb4\x6c\xa6\x0e\x54\x5b\xa6\x70\xae\x6c\x33\x6a\x3c\x96\x7f\xd5\xc5\x9d\x74\x66\x6a\x29\xcc\x8e\x36\x79\x29\x27\xf2\xb4\xe3\x39\xb0\x1d\x97\x35\xc4\xdb\xa9\x7a\xec\x53\xb2\xae\x1c\xe3\x71\x27\xc2\x5a\x0b\xbf\x2a\x17\x61\x16\x28\x69\x4d\xce\x82\xb2\x81\x30\xd3\x8f\x12\x9b\x32\x90\x4b\x5e\xab\xb9\x2f\xa1\x4b\x2d\x37\x9b\xe7\x96\x01\xe9\x83\xbd\x56\x91\xac\x6f\x36\x6f\x2e\xf0\xdd\x00\x37\x74\x69\x06\xe9\xd2\x10\x19\xef\xaf\x84\xad\x4e\x86\xb5\xd9\xe4\x49\x67\xeb\x3c\xfa\x47\xe7\xc8\x83\x4a\xeb\x53\x23\xbe\x5a\x59\xb3\xca\x8a\x1a\x72\xcb\xd8\xc5\x66\x3a\xb3\xc0\xde\x0e\x92\x40\x74\x04\x9a\xfe\xa4\x12\xfb\xb6\x8f\xe2\x2d\xc7\x5c\x6f\x17\xfa\x2e\x3c\xdc\x5c\xe9\xf9\x4b\x8e\x29\x43\xaf\x23\x79\x5e\x06\xa6\x6f\xda\xbc\x1a\xe5\x53\xda\xac\x3c\x2d\x93\xf8\x05\x37\xbf\xb0\x73\x24\x79\x22\x2e\xea\xb4\x8a\x33\xef\xf9\x49\x67\xe9\x23\x97\x0e\x77\x0b\x4f\x21\x00\xde\x09\xdc\xb9\x66\xef\x06\x4c\xe5\xe4\x45\x85\xce\xd5\x66\x64\x51\xed\x5b\xdd\xbe\x95\xea\xce\xd7\x74\xa6\x10\xd2\x75\x23\xc1\xed\xaa\x46\x46\x87\x65\x06\x6e\x45\x5d\x4c\xdc\x35\xe7\x96\x4f\x95\xee\xf3\x2d\x4d\x26\x93\xee\xd7\x44\x2a\x61\x04\x6e\x01\xf0\xbd\x8c\x7d\x1d\xad\x0e\x85\xac\x5c\xcb\xe7\x52\x36\x15\x4b\x35\xcb\xb5\xd9\xeb\x81\x8b\x54\xa7\xc3\x44\xfc\xeb\xb9\x24\x9a\x6e\x20\xcb\xca\x97\x6d\x71\x4c\x53\xb8\x11\x3d\x23\xd3\x26\xf5\xcd\x3c\x44\xf8\xfc\x3d\x97\xaf\x99\xf7\xb2\x0e\xd5\x9b\xc5\x20\x6c\x9d\xf7\x5d\xc5\xb3\x25\xc5\x0d\x6f\x56\x28\x3e\xd0\x39\xd1\x6f\x89\xeb\x39\x64\x78\x9c\x6d\xab\x2c\xf4\x0f\x07\xc4\x6a\x3f\xef\x9c\x46\xce\x36\x59\xf4\x66\x62\xf6\x1e\xf9\x34\x21\x76\xda\x5f\x73\xea\x58\xd5\xcb\x9d\x4e\xe2\xc2\x37\x8f\xf0\xe3\x5f\xb4\x52\xb5\x0f\xf7\x5d\xbc\xa9\xb4\x39\xac\x96\xc6\x06\xbf\x43\xe5\x07\x13\xaa\x5b\xbd\xf5\x65\xa8\x8c\x9e\xae\x86\xe3\x88\xe9\x05\x46\xb3\x4b\x99\x8e\x05\x6c\x50\xab\xa4\xc8\x60\x3b\x7b\x46\x90\xb0\xc8\xd8\x01\xdc\x99\x70\xd1\x0a\xc0\x22\x37\x4e\x2e\x38\x90\x18\x49\x8a\xa2\xbd\x2b\x14\xc7\xd0\x9d\xb3\x79\xf0\xda\x8e\x6d\xce\x4f\x9c\x47\x00\x57\x38\x01\x65\xd7\xa9\xeb\xf6\x3d\x86\xef\x54\xaf\x63\x79\xa2\x95\xd3\xb5\x5a\x61\x70\x6f\xd9\xdc\x97\xec\x89\xcf\x23\x8d\x95\x40\xef\x7a\x6c\xe3\x8d\xb5\xa6\xeb\x01\x7b\xd9\xc4\x2d\xbb\x8d\x56\xeb\x55\xf7\xca\xcf\xbb\x1a\x0f\xe7\xf1\xcf\x04\x9d\x6c\xef\x4e\xbb\x53\xe9\xfb\x82\x79\xfe\xdf\xb2\x1b\xe2\x17\xee\x7c\xf3\x7c\xd7\x38\xcd\xaf\x07\x6e\xe9\x5a\x17\xf9\x02\xa6\x35\x8f\x9a\x88\x8b\xfd\x12\x07\x2c\x90\x43\xd3\x0c\x14\xcb\x0a\x43\x2b\x6e\x92\xa6\x6c\x91\x6b\xea\xa2\x3c\x03\xac\xa6\xe1\x7e\x8e\x05\xea\x62\x1e\x1f\x1c\x33\xa2\xc3\x63\x9c\x8f\xf4\xd0\x44\xae\x2c\x85\x02\x1c\xfe\x26\xfb\x85\x2e\x63\xcb\x3c\x86\x99\xbd\x6e\x92\x6e\x7e\xd7\x82\xa7\xf3\x8a\x4a\x0a\x1c\xbc\x92\xec\x16\x98\x97\xaf\x13\x87\xd2\x07\x94\x47\x6a\x26\xdd\x2e\x26\x6b\x3b\xe8\x1e\x3b\xeb\xb8\x55\x62\xb9\xed\x98\x2e\xae\x24\x57\x51\x53\x3c\xc5\xd6\xaf\x8d\xac\xc4\xd3\xf3\x5f\xb5\xbe\x35\x27\xf3\xbe\x39\x9f\x5f\x9e\x1e\xf7\xbf\xcc\xfe\xaa\x60\xe8\x32\xcf\x4f\xff\xc4\xdd\xde\x05\x9c\x1d\x45\x5a\x33\xe7\xad\xf6\x50\xf5\x6e\x6a\xae\xe8\xbe\xd0\x37\xac\x31\x34\xa6\x1b\x85\x46\x21\x58\x5c\x6c\xdd\x0c\xcd\x89\xa1\xbd\x4c\x95\xcd\xd0\x7f\x0e\xd0\x78\xe2\x11\x76\x7d\x26\x5f\xb0\x9b\xf6\x7a\x95\xb3\xb9\xb2\xad\xe6\xf2\x19\xdd\xa2\x17\x21\xb3\xa6\x7c\x73\x7b\xca\x11\x8f\xd1\x25\x17\xf3\xa0\x74\x5f\xee\xd2\x5c\x5b\xe8\xab\x31\xfd\xda\x61\xca\x88\xec\x4c\x48\xb7\xcb\x0f\xeb\x2e\xfc\x46\x57\xdb\xd1\x8f\x0d\x82\x36\xbd\xc9\x9a\x73\x07\x67\x23\x5f\x13\x24\x34\x43\x7a\xcf\x97\x60\xc2\x25\x8b\xcc\xf8\x93\x36\x7d\x18\xac\xd4\x9e\x93\x93\xf1\xfe\x8e\x4b\xdd\xa3\x89\x85\x88\x35\x53\x14\x3d\x20\x5a\xf1\x02\xb5\xd1\x8a\x31\x4e\x66\xe3\xaa\x1c\x8b\x7d\xd2\x09\xa3\x50\xef\x5b\x81\x3c\xd4\x42\xc4\x3b\xbf\x49\x00\x92\xd2\xc5\xc8\x48\xb4\xe1\x6b\x24\x5f\x77\x42\x8a\x26\x57\x55\xf0\x7e\x63\x41\x44\x96\x06\xf5\x88\x69\xb5\x44\x48\xc8\x66\x60\x04\x68\x0d\xeb\x8d\x0e\x9b\xd0\x84\x66\x3b\xa6\x65\xfb\x1c\xd3\xf3\xd5\xc1\x16\x3f\xfe\x88\x45\x37\x19\x4f\x01\x41\x41\x61\xc6\x55\x85\xdb\x69\xd1\x84\x7c\x5c\xe5\xf0\xd2\x6a\x48\x97\x49\x3d\x53\x80\x45\x39\x9c\x5b\xb3\x1a\xc9\x52\x77\xb3\xa8\xfb\x2b\x25\xd7\xc0\xbc\x8e\x3f\xbc\xd6\x30\x4b\x46\x75\xfa\xb6\xf9\x84\x77\x42\x25\xe9\x20\x36\xd2\xa5\x50\xdc\x3b\xd5\x45\x75\x3d\x8a\x71\xc6\x64\xb8\x4f\x5c\x18\x44\x30\x79\xa8\x53\x37\x90\xe2\xc7\x1d\x0a\x7a\x8e\x8c\xcb\xaf\xce\x5a\x8b\x18\xe3\x7c\x40\x74\x0c\x9c\xa3\xd8\x33\x0b\x3b\x56\x85\x12\x53\x36\xff\x2d\xc3\x89\x57\x3f\x0f\x4a\x12\x4f\xb9\x92\xcb\x33\xcc\xb2\xea\x58\xe9\xd9\xd8\x5d\x19\xff\x1c\x80\x5c\xbd\xcd\x9f\x62\x3c\x69\xa2\xa0\x87\x3d\x21\xe6\x7e\x85\x90\xcf\xe1\x07\x2a\x7d\x9e\x8c\x4b\x88\xfd\x4d\x2c\x25\xc8\x7c\x48\x13\x70\x92\x63\x02\x29\x07\xee\x86\x38\x7b\x11\x0c\x72\xb5\xa6\x5b\x64\xa8\xc7\x0b\x27\xc4\x3f\x6c\xd4\x46\xa7\x5c\x2a\x67\x71\x4c\x33\x84\x2e\xe9\xba\xaa\x0d\x1d\x96\x61\xf2\x27\x03\xb8\x78\x1f\x9e\x57\x22\xe9\x87\x77\x34\xf6\x1b\x0f\xa2\x2e\x88\x2e\x19\x15\x51\x3a\xad\x56\x93\xb6\x74\x24\xd6\x05\xe8\xbc\x42\x8e\xea\x8d\x16\x92\xe6\x71\x41\x25\xb0\x58\xe9\xee\x91\x8b\xff\x6f\xa7\x85\x78\x8d\xf0\x46\xa6\x45\xcd\x15\x3d\x51\x9e\xee\x34\xa1\x83\x50\xc6\x21\xc4\x32\x7b\x65\xed\x14\x81\x65\x85\x45\xfa\x4a\xc3\x65\x3c\xc6\x5c\x03\xc7\x10\x54\xaa\xfd\xb5\x43\x85\x41\x76\x6a\xca\xa2\x4c\x9f\x36\x44\x3f\x32\x37\x05\xf4\x02\x8e\x88\x58\x9d\xe7\x69\x5a\x7b\x4e\xaa\x67\x62\xbf\x9c\xa0\xe0\x9d\xae\xa1\x3b\x29\xaf\xa5\xb1\xb4\xdd\x53\xe9\x26\x02\x1f\x2e\x85\x3c\x80\xf6\xa1\x0c\x99\xee\x6d\xec\x0b\xce\x2a\x14\x9d\x15\x22\x08\x5c\x35\x89\xb2\x8f\xa0\x44\x58\x49\x52\x23\x3f\x34\x2f\x2e\xff\x18\xa5\x03\x45\xa5\x28\xb1\x0d\x69\x89\xe6\x9b\xad\xf0\x46\xe5\x69\xb1\x88\xea\xd9\x22\x07\x7a\xcc\x4f\xe6\x9f\x85\x33\xab\x9b\x65\xb4\x5c\x97\xdb\x4d\x68\xd9\x8f\xa5\xaf\x50\x6c\xa2\xc9\x53\xe3\x79\x2d\x5f\xed\xc7\x49\x39\x26\xbe\x0b\x37\xb2\xed\x41\xf5\x50\x80\x33\x95\x9c\xe6\x43\xd5\xea\xb0\x38\x8f\xd3\xc7\x87\xee\xbf\x8f\xb7\x39\x16\xdf\x00\xf3\xfb\x8e\x2c\x78\x1a\xea\x6c\xa3\xba\x9f\xc5\x04\x37\x76\xaa\x5c\x2b\xac\xc3\x63\x5f\x39\xde\x02\xa0\x62\xac\x97\xdc\xc2\xa6\xd9\x99\xd6\xe2\xe6\x6a\x57\x59\xa3\xc8\x83\x22\x98\x30\xb5\xe1\x6f\x45\xc2\xbf\x13\xa1\x0f\xed\x37\x95\xb5\x5d\xaf\xc4\xe7\x5f\x3d\x23\x06\xd2\xcf\x34\x36\x39\xae\x4a\x82\x61\xf7\xa1\xb5\x78\x12\x1a\xe9\xd5\x63\x84\x3a\xfd\xed\x43\x85\x5e\x7e\xf7\x0e\x24\x8a\xc5\xc6\xf1\xf3\xf8\x4b\x02\x23\xb8\x7c\x91\xbf\x3e\xdf\x1b\xc9\xae\xaf\x1b\x1d\x24\x47\x6e\xc6\x1c\xf2\x35\x64\x93\x5f\x07\x85\xf6\x15\xee\x6d\xc2\xff\x7a\x2d\x5f\x65\xbb\xc5\xdd\x85\xce\xec\x43\x1e\xe8\x0a\xe2\x34\x55\xa1\xa3\x53\x5b\x46\x9d\x99\xaa\xe7\xe3\xda\x24\x05\x32\x73\x09\x36\x57\xb1\xfc\x52\x9b\x2e\x42\x73\xce\x57\xc8\xa8\xcd\xd8\xf6\x8d\xdb\x7a\x4f\xa5\xdf\x57\x5c\x97\xc9\x12\xad\x66\x1a\x24\x18\x42\x2a\xe2\xeb\xae\x44\xe3\xa8\x10\x2b\x65\x96\xe4\x81\xd4\x18\x88\x68\x70\x28\x8d\x6a\x50\x1d\x4e\x1d\x55\xcf\xf4\x91\x1f\xe0\xac\xcc\x70\x6d\xe1\x5e\xe2\x41\xa0\x39\x34\xc7\x5e\x6a\xa7\x39\xf2\x63\x05\xfe\x12\xee\x3c\x15\x0e\x34\x43\xb6\xa3\xe5\x9e\x68\xdf\xb2\x00\x5e\x17\x0f\x98\x8c\x74\x81\xf0\x1e\x36\x57\x72\xc6\x42\xd5\xff\x4e\x62\x3e\x7a\x1a\x89\xa7\x3d\xe7\x87\xf8\xa1\xa4\x30\xe3\x5a\xbc\x5a\x1c\x89\x24\xb7\xee\xc7\xda\x51\xb6\x94\x47\x3d\xc5\xb7\x5f\xe3\x20\x1c\x7c\x28\x6b\xaa\x5f\x26\xda\x1e\x2c\xa2\x4f\x3b\x42\xbc\x27\x79\x7e\x57\x98\xf5\x7c\xe7\x6d\x4c\xc5\x2b\x79\xe0\x85\x67\x29\x99\x56\x8d\xee\x7d\x24\x89\x9e\xb3\xae\x6c\x48\x73\x83\xb9\xd3\xbd\xa7\x92\x30\xb9\x12\xfa\x20\x71\x4f\x7e\x10\x1d\x03\xca\x06\x56\x27\x47\x34\x7c\x44\x21\x38\x27\x82\x27\x80\xb4\xae\x29\x9c\x28\x16\xcd\xe3\xcb\x2b\xec\x4c\xbb\x3f\x7f\x29\x20\x1c\x38\x1f\x3e\x57\x71\x65\x6b\x37\x9b\xce\x50\x83\xcb\xf1\xb4\x59\x20\xe1\xd0\x32\xfe\x1d\x5f\x30\xd5\x93\x7b\x93\xd5\xd2\x80\x3c\x1a\xd3\x2a\x14\xbd\xb2\x3c\x71\x90\xd8\xca\x96\x24\x53\x90\x81\x21\x25\x13\x4b\x65\xa0\xab\x54\xd2\x35\xf3\xa8\x7a\x71\xea\xe1\x53\x09\xc5\xf4\x8b\x9c\x59\x2e\x5d\x34\x1c\x7c\x5b\xa2\xe8\x58\xf4\xc5\x94\xaf\xdf\x07\x7c\x9a\x2c\x05\x2f\x56\x87\xa7\xf7\xac\x77\x20\xaf\x23\xd9\x2e\xf2\xb9\x9d\xd1\x3a\x57\x8e\x6d\xbc\x45\x8c\xc8\xeb\x20\x86\x3e\x10\x27\x56\xef\x61\x23\x47\x77\x4f\xe0\xb7\xb7\x0d\xbb\xff\x33\x32\xac\x31\xa7\xa9\x51\x7f\xd3\xa5\x38\xf3\xa8\x6e\x0b\x3e\x6a\xbf\x2f\xae\x64\xf3\xa1\xa4\xb1\x27\xad\x5d\x52\xe9\xe0\x26\xf0\x54\xe2\x79\xd7\x71\xdb\x04\x15\xb3\xf1\x1e\xdd\xbc\xc7\xb4\x75\x8e\x74\xf9\xe7\x44\xf6\x45\xce\xac\xd7\x46\xcf\x65\x2a\xd0\x59\x12\x8c\xd1\x44\x71\x49\x46\x08\xec\x87\xee\x93\xdb\xfd\xee\x07\x61\xb4\x20\xa8\xe0\x17\x39\x72\x0d\xf1\xdf\xe7\xca\x0e\xc4\xbf\x41\x9f\xed\x82\x88\xb1\x30\xca\x2e\xa9\xb4\x0f\x32\x9d\x9b\x30\x5e\x3b\x4b\x86\xe4\x51\x16\x12\xe4\xf5\xb3\x99\x4f\x45\x85\x08\x5a\x14\xb2\x27\xe8\xa3\x39\x8b\xbc\x3f\xf3\x33\x0a\x2f\x99\x59\x47\x6f\x6f\xa1\x5a\xa8\x28\x91\xbe\xd1\x68\xbe\x24\xdf\x6b\xd9\x01\xd6\xaa\xaf\x25\x74\x18\xb8\x44\x6f\x5c\x3a\x5a\xa7\xb5\x3c\x81\xe4\xbe\xf4\xfb\xae\x7f\x6e\x7d\x59\x52\x80\x58\x6f\xba\x59\x7d\x30\x26\x5a\x12\xbf\x5d\x8d\x8e\x25\xaa\xbc\xaf\x6a\x0d\x6f\x7a\x2e\x34\xe0\xaa\xaf\x7b\xa8\x77\x5d\x75\xd0\x2b\x07\x7f\xb4\xa8\x3b\x79\xcd\x10\x37\x05\x54\xe5\xb4\x7f\xd5\x1b\x4a\xe1\xbd\x87\x43\xc7\x1e\x72\xb1\x9d\xd3\xb3\x48\x3f\x29\x45\xa4\x7a\x3c\x0b\x93\x0b\xb7\x46\x48\x4b\xea\x7b\x3d\xc7\xd1\x28\x34\x34\xc5\xef\x86\x9a\x7d\xa7\xea\x56\x7a\x97\x1a\xaf\x03\x73\x2e\x6e\x3c\x8e\x75\x7f\x9a\x6f\x09\x10\x0c\x88\x61\xe4\x39\x74\x3e\x4b\xa1\x36\xd6\x67\x63\x9f\x02\xa1\xf8\x7e\x4a\x07\xb0\x9a\x3b\x58\x50\x0d\x87\xc8\x11\x87\x2b\xcb\x42\xd4\x99\x57\xb4\x8b\x1e\xa9\xeb\x9e\x9d\x24\xd6\xa9\xd3\x60\x1d\xd8\xc8\x7e\xaf\x6f\x82\x9c\x93\x0b\x00\xd0\xca\x15\x83\x75\x98\xbb\x20\x9b\x48\x31\xee\xed\x9a\x86\x69\x7d\xf5\x99\xc4\x06\x43\xcb\xbc\xe5\xf8\xd4\x58\x2e\xd9\x3f\xd9\x96\xc2\x02\x6d\x10\x7d\xd9\x35\xdb\xd4\xa7\x9e\x8a\x65\xed\xcb\x7b\x7a\x92\xa0\xe5\x3e\x8d\x7b\x0d\x9d\x19\x78\x27\x0d\xad\xb9\xc8\x53\x58\x3e\xaf\xf0\x2a\x84\xb6\x6c\x17\xa6\x78\xa6\x7c\xbf\x43\xbc\xdb\x37\xcd\x53\x04\xf2\xe4\xd8\x4e\x1a\x87\x02\xa3\x64\xb3\xd5\x93\x7c\x0b\x16\xa6\xc6\xac\xd7\x21\xb8\xfa\xa7\x1a\x4c\x98\x63\x24\x73\x88\xc1\x64\x12\x87\xa4\xb8\x06\x44\x2c\xe3\xd2\x13\xb8\x8c\xe9\xe4\x1a\x32\xa1\xd8\x27\x11\xa2\xe1\xd8\xb0\x76\x0e\xb9\x2d\x2f\xdf\xcd\xbc\xd1\x70\xdc\x26\xff\xd6\xfe\x39\x66\xd0\x7a\x1e\xb8\x33\xd5\xf1\x85\x18\x86\xca\x75\xf7\x66\xef\xf0\xf2\x63\x59\x81\x5a\x5e\x9d\x86\xb4\xef\x4f\x88\xa4\x48\xc4\x82\x64\xb7\xd5\x99\x5d\xfd\x6d\x4b\xdf\xa3\x02\xec\x21\x07\x84\x82\x19\xc5\xb0\x02\x1f\x0e\x4a\x5d\x7a\xbf\xa7\x7e\x47\xf4\xde\xbf\x33\x8f\xea\xca\xe7\x62\xff\x96\xb1\x1b\x5b\x5b\xc1\x1e\x6a\x8f\x54\x7d\xb4\xb0\x02\xbf\x8e\x52\x99\x80\x21\x1c\x80\x5f\xd3\xd7\x71\xb1\x1f\x6d\x5f\xd8\x0c\xd3\x4a\x5d\xfe\x7b\x9a\xde\x7d\x59\x51\xf7\x70\xc0\x15\x9b\x9f\x2b\x67\x7b\x5c\x3a\x30\x86\x64\xc0\x24\x20\xcd\x14\x86\xfa\x56\xc7\x39\xeb\xf1\xcf\x25\x38\x02\x4c\xe1\xee\xb7\x2a\xa6\x8a\xfd\x73\x9f\x0e\xc8\x91\x25\x19\x7f\xe5\xe5\x4f\xf6\x14\xe9\x68\x5e\x18\x5e\x00\x49\xbe\xad\x77\xee\xb3\xb2\x23\xe6\x97\xa1\xa8\x9a\x77\x26\xa9\x7b\xcb\xa4\xe8\xe0\x53\x7c\xda\x1c\xa9\xbb\x0e\x13\x57\x5c\x69\xcf\x1e\xe4\xb8\x15\xcb\x26\x03\x4e\x87\x35\xc1\x82\x7e\x60\x71\xd6\x62\x77\x20\x79\xb5\x6d\x85\x74\x05\xf3\x5c\x51\x89\x6c\xe5\x28\xb4\x84\xfd\x35\x51\x22\x49\xff\xcd\x50\x87\x4f\xe4\xc2\x59\xd3\xe3\xc5\xad\x2c\xdf\x1e\x23\xef\x63\xdc\x5a\xce\xee\xdb\x75\x8b\x81\x70\x81\xc0\xa1\xeb\x2d\x4c\xe7\x5b\xbe\x5c\x66\x8f\xd9\xc4\x29\xbc\xd0\x00\x88\xdf\x9b\xf2\x5c\xfe\xf6\x0f\x42\x60\x54\x57\x7e\xc8\x72\xb9\x68\xb7\x44\xc5\x16\x7d\x75\x9c\xcc\x2f\xcd\x2e\xd5\x41\x12\xc8\x95\xe1\x84\x6b\xe6\x25\x8f\x40\xe3\x1c\xcf\x80\x7d\x11\x17\x43\x63\x45\xed\x2b\x84\x79\xd8\x50\x63\x43\x47\x11\xc5\xec\xb9\xe5\x1b\x9b\xea\x17\x3d\x4f\x7d\xb3\xde\x69\x0d\xed\xe6\xe2\x08\x0a\x66\xb5\x4e\x46\x97\xea\x1c\x09\xb7\x5b\x55\x4d\x6b\x64\x85\x83\x7c\x14\x0e\xbc\x36\xf0\x02\x13\xb6\x5d\x1c\x16\xa0\x92\x21\x19\xe1\xb7\x9a\x43\xf2\x91\x28\x36\x3d\x9e\xbe\x62\x2d\x5b\xbc\xfe\xe0\x14\x1e\xb2\xb4\x0b\x2a\xe3\x9e\x4d\x4e\x3d\xf4\x29\x2f\x34\xad\x34\xcc\x6d\xb0\x46\xbc\x20\xae\x8a\x56\x4c\x44\x3e\x40\xbb\x5e\xdf\x4f\xf2\x5f\xe7\xa2\xf4\xec\xe4\x39\xfb\x8f\xf1\x59\x44\x26\x21\xc2\x68\xb8\xc2\x88\x5f\x93\xa1\x7f\x98\x38\xf4\x86\x85\x56\x48\xe6\x8d\x37\x8e\x8c\x58\x6b\xc1\x59\xdb\xc3\x76\x26\x42\x0d\xae\xe6\x3f\x7e\xe2\x25\xb5\x20\x23\x59\x25\x9e\xcf\xd3\x69\x9a\x94\x8a\x9f\xb7\xaf\xe7\x75\x12\xca\x96\xa7\x14\x6e\x9e\x56\x7c\x62\xd7\x4a\x5f\x1f\xdb\x5a\x6b\x77\x69\xa4\x24\x8a\x78\xe1\xf8\x54\x68\x8c\x0d\x3b\x11\x83\x6d\xf5\xbf\x5b\x3e\x2f\x9e\x9e\x2f\x98\xcf\xd7\xaf\xe3\xb4\xb6\xb4\xfb\x8a\xc2\xe0\xf1\x5d\x94\x92\x43\x06\x42\x09\x7c\x2d\x9b\x2d\xa1\xba\xf5\x46\x4b\xa1\xae\x53\x57\x99\x6f\x26\x38\x37\x26\x1d\x8e\xd9\x9b\x25\x28\x96\xcc\x61\xdb\x31\xe4\x0b\x8f\x3e\x3d\xd2\x30\xfd\x28\x88\xbc\xc5\xa4\xe4\x8f\x95\xbf\xfa\xfd\x85\xdc\x8d\xea\x88\xb3\xad\x8c\xeb\x72\x57\x83\xce\x7e\x47\x5f\x96\x3a\x29\x28\x4e\x84\x9f\x67\xf1\x83\x52\xe3\x56\xa7\x17\xed\xc5\x02\x23\x2b\x03\xc1\xd6\x40\x72\xd9\xe7\x77\x81\xb7\x92\x4b\x41\x76\x42\x8b\x98\xd0\x69\x24\xac\x74\x39\xaa\x7b\xa6\x9d\xb6\x53\x70\xcd\x44\x62\x13\xe6\x08\x2c\x47\xe4\x67\x18\x7d\xb2\xbd\x76\x72\xaf\x09\xfe\xb6\xdb\x4d\x4b\xd5\x88\x73\x5f\x68\x9c\x03\x96\x1b\x14\xee\xbc\x92\x4a\x2c\xf5\x87\x31\x38\xd5\x0c\x55\xdc\x55\x6b\x55\xfd\xed\x43\x9b\xcf\x84\x2e\x55\xea\x57\x9d\x7b\xcc\x32\x39\xe6\x82\x3c\x71\xb0\xc1\xf8\xc1\x59\x94\xea\xce\x2e\x3c\x1f\x9c\xba\xd5\xd6\xcf\x59\xfc\x5e\x1e\x2a\xa9\xf8\xd5\xb0\xba\x3c\x14\xd8\x39\xdc\x4b\x47\x3a\xdc\x2f\xd7\x24\x68\x99\x06\xde\x54\x59\x52\x4f\xee\xae\x2f\xc5\x15\x36\x9b\x0b\xd8\xe9\x0d\xb6\x1b\x64\xa9\x84\xc7\x13\x6c\x69\x69\xb4\xe6\xec\xc5\x74\x34\x2e\x4d\x94\x99\x96\x6c\x04\xe6\xd1\x86\xc4\xea\xe0\xd6\x43\xe0\x15\x27\xa1\xbc\x4e\x24\x6a\x8a\xca\xe9\xc9\x39\x61\xc5\xd6\x31\xe1\xd1\x8a\xbf\x34\x8f\x0e\xa0\xf2\x42\x6c\xf4\x13\x2a\x79\x8a\x8e\xee\x2c\x60\xff\x65\x53\x89\x95\xa9\xfe\x6b\xa4\x6d\xfd\x30\x15\xac\x2c\x2d\x26\x37\x40\x04\xb7\x9a\x0b\xb9\x0d\xa2\x0e\x9e\x69\xfb\x45\xac\x43\x08\x4f\x89\x1b\x36\x33\x89\xaf\xf3\x22\x68\x49\xe9\x34\x9a\x20\xdc\xc4\x67\xf2\x38\x51\x8d\x6f\x39\x78\x0e\x65\x35\x0b\x7a\x5d\xdd\xae\x56\xb3\xdd\xf5\x13\x59\x96\x48\xf9\x2e\xd1\x55\x62\x54\xee\x90\xaf\x32\xb6\xad\xc2\xca\xab\x53\x2a\x6c\xb2\x61\xe1\x8d\x45\x97\x11\x7d\xc5\x55\x49\x8a\xe9\x10\x63\x47\x89\x11\x06\xb7\xc0\x23\x93\xdb\xde\xdf\xea\x21\x33\x8a\xb4\x71\x32\x52\xcb\xe5\xf5\x46\xc6\x2e\x9d\xc9\x47\x86\xaa\xd5\xe8\x56\x4e\xc3\xe7\xda\xaa\xf6\xab\x75\x35\x08\x46\xee\x1a\xe3\xb8\xc6\xb9\xb3\x04\x88\x00\x65\x8a\x65\x1f\xc0\x90\x40\x5b\x38\x0e\xa2\xc6\x35\xd9\xc1\x30\x1e\xd3\xbc\x4d\x03\x9f\xfd\xbe\xbd\x76\xec\x4e\xb3\x42\xbe\xe4\x9b\x2d\x6d\x4b\x95\x09\x53\xb8\x78\xc6\xbf\xac\x09\x8d\x97\xc9\x8f\x66\x1c\xe1\x76\x8c\x9d\x39\x6e\x50\x63\x7e\xde\x57\xe1\xcc\xbd\x0c\xbc\xe7\xea\xc0\xdf\x56\xb7\x74\xad\xd2\x64\x65\x6c\x3e\xcb\x74\xe3\xca\x79\x76\xb8\xce\x1e\x00\x8b\x71\x5c\x55\x22\xd7\xfd\xe7\xf6\x70\x69\xa2\x69\x70\xad\xdc\xbb\x71\x95\xcb\xc5\xae\x6f\x99\xe3\xfd\x30\x70\xd2\xab\xee\x06\xd6\xda\xf5\xc9\xc3\x5a\x71\x89\x3d\xb3\xe9\x80\x43\x81\x05\x56\x97\x3a\x44\xc9\x87\x65\xdf\x41\xd7\x86\xba\x62\x87\x01\x16\xe1\x90\x71\xd5\x96\x92\x64\x3b\x35\x31\xde\xf4\x8b\x29\x6b\x50\xbc\x2e\x43\x85\xbc\x58\x82\x4e\x0a\xa3\x3b\xe9\xc5\xbf\xec\xc8\xba\xd3\x6c\x77\x3c\x4f\x0b\xbb\x20\x20\x4c\x5d\x34\xed\xf0\xac\x59\x5d\xcf\x0f\xa9\xcd\xcb\x44\x86\x51\x9b\x8d\x79\xe6\x7c\x5b\xb0\xc5\x95\xf5\x98\x8c\x24\x86\xc2\x1c\x53\x1c\x8f\x72\x9d\x03\x1a\xd0\xa0\x89\x4d\x7d\x06\x62\xd9\x46\xdf\x2c\x02\xe1\x64\x48\xae\x8f\xd4\x0f\x1c\x95\xb5\xbe\x52\xf5\x93\x54\x58\x94\x0a\x57\x1e\x93\xe9\x9b\x46\x34\x58\xf9\xc7\xf2\xf8\xf5\xf7\xfb\x8e\x84\xc5\xf0\xe2\x32\x3d\x51\x61\x94\x96\xe7\x23\x16\xca\x65\x93\xf5\xd7\x4f\x7c\xdc\x5f\xc9\x65\x20\x8c\xe6\xdc\xb8\xe4\xa2\x23\xc5\xf7\x7a\xe6\xb8\xf9\x42\x42\xf8\xd9\x42\x68\xae\xd0\x0b\xdf\xfb\x61\x4b\x73\x77\xf0\x97\x59\xec\x3e\xb4\x8c\x07\xa8\xae\x6e\xb8\x35\xd3\x36\x7b\x63\xba\x41\x11\xd3\x93\xb8\x10\xc5\x25\x7c\x6e\x1e\xc2\x6f\x4c\x0b\x58\x5a\x49\x6c\x88\x24\xd9\xd5\xc8\x21\xfc\xe2\xd7\xcb\x3a\x38\x04\x90\x10\x28\x5f\xec\x53\x69\x67\x7b\xd0\x0d\x99\x32\x8d\x53\x35\xf6\xf7\x24\x0a\x7a\x86\x4c\x1d\x69\x9d\x6f\x70\x02\x61\xe9\xa6\xc0\x35\x32\xa5\x1f\x18\xe8\x39\xdc\xc4\x6e\xdc\xee\xc2\x57\x9b\x77\x82\x63\x16\x2e\xb9\xa3\x1e\xb5\x92\xde\x53\x1d\x5c\xfc\x99\x6f\xdb\x68\x93\x9d\x56\xc5\xd9\x5e\xab\x60\xfb\x2e\xcf\x5e\x94\x78\xad\x29\x5c\xf9\xb1\x94\xa3\xd8\x74\x77\x16\x6a\xb7\x77\x41\xfd\x4a\x97\xaf\xd0\x97\xde\xdf\x96\x05\x11\x6e\xfc\xd3\xa9\xe0\xf6\xea\x03\x09\xc8\xf4\xcc\x63\xe2\x98\x0a\xf9\xa2\x29\xb1\x5b\xa0\xf3\x5e\x8f\x5c\x0e\x43\x23\x49\xa1\x03\x67\x9c\x7a\xf2\xba\xd7\x4a\x8a\x20\xd2\xa5\x65\xd5\xc8\xb0\x6c\x06\x11\x5e\x16\x02\x36\x3e\x3c\xc8\xc2\x2b\x84\x1b\xb2\x18\x6b\x38\x53\xc4\xcb\x68\xce\x65\xd0\x8d\xc3\x8c\x7d\x8f\x84\xf8\x84\xe8\x0a\x05\x71\xd5\x7e\x5a\x59\x2b\xbf\xd5\x4a\xfd\x9d\xd3\xb7\x4b\x1b\x6e\x4c\x6c\xd8\xba\x6d\xc5\x41\x9e\x4e\x62\x8a\x02\x64\x61\x64\x29\x52\x95\xb8\xfb\x91\x3b\x5f\xa9\xa6\x03\x5d\xc4\x06\x5c\x8c\x2d\xe4\x8a\xc6\xfe\x49\xaa\xc8\x0f\x9f\x42\x39\x02\xed\x46\xdf\x6e\xb2\xf6\x8e\x37\x1d\x79\x5a\x5f\x73\x56\x5a\x59\x4a\x92\x32\x6a\xca\xbd\x37\xf0\x52\xf4\xd3\x12\xac\xbd\x95\x3a\x2d\x92\x94\x0f\x52\x56\x6e\xd4\x37\x31\x85\x40\xcc\x70\x8c\x9d\x21\x0d\xac\x5f\x73\x4a\x7d\x99\x18\x6f\xde\x62\x21\x7d\xee\x9d\xa6\x1f\x28\x1c\x98\x6f\x76\xb8\x74\xc5\xd9\x17\x67\x64\x8a\x4e\xaa\xb2\x6a\xd4\xd3\xd2\x7b\x1c\x64\xb9\xfe\xb4\xf6\x10\xd1\x4d\xed\x78\xfc\x4c\x69\x55\xc9\x1c\xe8\xcf\x4f\xca\x7b\x07\x03\x41\x8b\xad\xce\x01\x39\xe4\x76\xf6\xd7\x6c\xd7\x20\xd4\xba\xbf\x54\xca\xd4\xc1\xaf\xd2\x25\xc4\x22\x7d\xe4\x70\x3b\xfa\xb7\xa7\x74\xa5\x54\x38\xb2\x70\x70\x13\x44\x95\x3d\x07\x8e\x9c\xfc\xd0\x80\x94\x70\x25\xad\x98\xb3\xfa\x2e\xc4\x42\x82\x26\x7e\x11\x40\x5d\xd1\xf1\x59\x6e\x85\xb4\x13\x9b\x4b\xfb\x85\xc6\x51\x41\x52\x19\x95\x5f\xd4\x0e\x51\xc1\xa6\xb4\x77\x09\x3a\x7e\xb9\x62\x00\x3c\x61\xd4\x21\x4c\x5a\x89\x30\x71\x2e\x76\x51\xe1\x45\x98\x7d\x49\xab\xc5\x87\x5b\x4b\x36\x9c\x8e\xba\x5f\x86\x14\x3d\xda\x0b\xce\xaf\xd7\x85\x88\xdc\xa8\x47\x87\x41\xe4\xd9\xa5\x04\x70\xa2\x06\x4d\x61\x31\xa2\x89\xd5\xe6\x82\x7d\xc4\x6f\xe4\xd3\xe9\x18\x32\xee\x96\x87\xe9\x2a\x3d\xcf\x5f\x57\x23\xf2\xbd\x5a\x07\x32\x6f\x99\x0d\xda\x92\xd0\x6b\xf8\xb1\x3e\x58\xf6\xc9\x1f\x10\x1a\xbf\x25\xe5\x5b\x49\x59\xa5\x82\x56\xce\xa0\xff\x86\x9f\xfc\x61\x40\xa6\x25\x81\x91\xe2\x92\xc8\xa2\xba\x13\x0e\x20\xb4\x6d\x54\xcf\x1f\xe6\x22\x90\x31\xad\x20\xa2\xc8\x55\xfa\xe9\x25\xad\x4f\x4f\x90\x09\xfb\xed\x9d\x5d\x3b\x18\x01\x5e\x28\xbb\x5f\xb9\xe5\xd3\x4b\xda\xd2\x36\x5c\xb1\x78\xc4\x7c\xdc\xea\x3a\x83\x52\x69\xcd\xd6\xa9\xed\xb0\x12\xe1\xd8\xb1\x71\x22\xa7\x93\x02\xbb\xf1\xda\x61\x65\x85\xc0\xb6\x26\x8e\x8a\x73\x97\x9d\xec\xa9\x38\xee\x22\x98\x33\x8d\xbf\x01\x05\xb4\xed\x8d\xc5\x59\x97\x36\xa5\x6c\x33\x7f\xb9\xd0\x40\x6f\x36\x53\x35\xea\xcf\x9e\x0c\xd8\x39\xd1\x4e\x75\x25\xaa\xb9\x70\xc0\x7a\xe7\x61\xde\x5f\x11\x0f\x66\x28\x3f\x3c\xc2\x89\xc1\x65\x17\x72\x87\x9a\x52\xef\x91\xe5\x0c\x45\xe9\x6d\x51\x6f\x5c\x5f\xbf\xe5\xaf\x6a\x92\x36\xf4\x2b\x3f\x36\x56\x9f\x5e\x4e\x99\x51\xdf\x83\xef\xdb\x25\xbd\x76\xf0\x00\x32\x2d\x19\x45\x20\x35\x58\xea\x95\xa4\x20\x05\x61\x2c\x71\xb8\xfc\x89\x47\x34\x95\xf8\x93\x45\xcc\x18\x13\x85\x66\x19\xe2\xd3\xd4\x44\x5b\x38\x62\xb8\x40\x0a\xd9\xdc\x04\xdf\xb4\xeb\x04\x89\xee\x9e\x3a\x6c\xc6\x74\x0a\x0f\xa9\xc3\x30\xe3\xe8\xf2\x5d\x5e\x78\x56\x51\x6e\xed\x59\x0a\x7f\x99\xa1\x7c\xf4\xdc\xd1\x9d\xaa\x22\xe3\xe3\x79\x1f\xa9\xb6\xf5\xfc\x70\xd5\xfe\x35\x18\xbb\xf5\x19\x38\xde\x6b\x1d\x58\xb7\x66\xb9\xa5\xb2\xb7\xd6\x5e\xfc\x40\xf0\xf5\x0c\x04\xfe\x6d\x99\xfc\x02\x06\x3b\xee\x82\xb3\xe8\x67\x82\xf5\x72\xed\x5d\x9f\x6b\xfc\x08\xe7\x9a\x16\x73\xef\xf3\xbf\xab\xc6\xae\x64\xe7\xb0\x7c\xec\xfc\x1c\xb4\xac\xea\x05\x9a\xae\x05\xe1\xba\x6a\xbb\xed\x33\xc4\x3d\x5c\x9b\x2e\xd9\xe6\x00\xa5\xcb\xca\xdb\x5d\x5a\x5c\xdb\x29\x5c\x8a\xf6\xd6\x73\x73\x5f\xd7\x93\x62\x6a\xdc\xab\x43\x9a\xa5\x78\x68\x78\x4c\x6a\xf9\xfa\x46\x73\xca\x92\x82\xf3\x3a\x7c\x64\x45\x33\x41\x79\x81\x71\xec\x31\xf4\x14\x3d\x66\x5d\x61\x6b\x29\xc5\xde\x03\x4e\x1b\x54\x2e\x33\x4a\x52\x2c\x0b\xea\x8b\xe1\xe5\x21\x21\x71\x8e\xb8\xda\x96\x6a\xb5\x15\xb2\xcf\x8b\x74\xb3\xb5\xe9\x9d\x52\x5f\x7a\x3e\x96\x61\x8b\xb8\xf8\x8a\x05\x74\x3a\xcd\x55\xeb\xc4\x9c\x82\xa2\x64\x7a\x64\xac\x29\xe3\x4a\x14\xbf\x48\xb1\xce\x7f\xae\x75\xb4\x6c\xcb\x97\xb9\xd7\xf7\xb3\x65\xa5\x64\x48\x74\x59\xdd\x43\x78\x84\x48\x29\x55\xbb\xab\xa8\xb7\x53\xe2\xf0\x46\x34\x50\x2d\xb2\x63\xf1\x3a\x8f\x6b\xe6\x18\xca\x2e\x24\x54\x6b\x35\xba\x97\x8d\x9d\x50\x51\xe6\x65\x6a\xf6\x7f\x59\xd2\x02\x81\x6e\x99\x42\xba\xd6\xe5\xa3\x9e\xbd\x1b\xb1\x5a\x09\x20\x13\x2d\x8b\xc8\x96\xfc\x7f\x42\xf0\x14\xcf\xe0\x69\x36\xe2\x8e\xe8\x8b\xd2\x46\x90\xa2\x4e\x43\xab\xbe\x5b\x51\x30\x12\xae\x46\xc1\x6b\x9c\xae\x67\xdb\xfa\xe3\xa1\xaf\x36\x97\xad\xd2\xc2\x32\x78\x85\xb8\x27\xdc\xe2\xbc\x74\x0c\xc9\xdb\xf5\x11\x79\x5d\xef\x86\x4f\x39\x17\x38\xab\x33\xec\x4a\x31\x9c\x4e\x0b\x22\x17\x9f\x06\x22\x1e\x36\xd8\x71\xf6\xea\xa7\x0f\x53\xfe\xe0\x25\xc4\x2a\x76\xa2\x3f\xde\xe7\xe2\xfe\xe1\x37\x06\x01\x9c\xa3\x03\xba\xf5\x5b\xf2\xfc\xef\xf7\x78\x9a\x41\x99\x57\x5d\xd9\x0a\xa3\x91\xa4\x2d\x72\x28\x61\x7d\x5a\xfb\xd7\xd1\x6d\x18\xa5\x1a\xc6\x65\xe8\x7b\x5b\x11\x32\x45\xca\xf5\x15\x03\xfb\x25\xc2\x56\xd4\xae\xfe\x60\x6b\x2a\x4d\x2f\x80\xf7\xd3\x72\xda\x51\x64\x7c\xaa\xd7\x2f\xcd\xc9\x63\xb4\xc8\xf0\x9d\x3a\xc4\xae\x2d\xa7\xe0\x20\xe4\x58\xe4\xa6\x22\x97\x82\xdc\x4b\x15\xe0\x98\x5e\x77\x66\xb5\xc9\x34\x18\xd9\x40\xb3\xab\x23\xd8\xf4\xfe\x96\xb5\xca\x41\xdf\xdd\xaa\x09\x4c\xb4\xde\xab\x80\x14\xab\x7c\x55\x7f\x6a\x96\xbd\x8c\x9b\x0a\x60\xac\xe6\x14\x21\x57\xbb\x96\x0a\x9b\x30\x08\x97\xda\xf5\xca\x1d\x6a\x8b\xa8\x7b\xae\x83\xb8\xc3\x2d\x96\xbc\xa9\x6f\x56\xc3\x72\xf0\x5c\xdd\x6a\xcd\x7c\x41\xbf\xb2\x54\xf8\x36\xd4\xd0\x62\x7a\x52\x5c\xfc\x59\xcd\x3c\x97\xeb\xcd\xfb\x3e\xd9\xc8\x2f\x69\xd5\x6d\x7b\x37\xd3\x9e\xdd\x59\x6c\x7b\xdb\x6d\x72\xef\x7e\x20\xdf\x0c\x53\xed\xa9\xe0\xf6\x19\xfd\xf6\x97\x01\x8b\xaf\x64\xd8\x5b\xa9\x4e\xb7\xb9\xdb\xa9\xc1\xe4\x7b\xd5\xcd\x24\xd8\x7d\xd9\xd3\xa4\x47\x8b\xca\x61\xb0\x3e\xc0\x60\xda\xdb\x1e\x9e\xfc\x20\x78\x8f\x10\x80\xd9\xb1\xff\x94\x5c\x39\xbc\xf0\x84\x8f\xe2\x6b\x7b\x94\x8e\xf9\x84\xdb\x95\x89\xfa\x99\xe6\x08\x12\x40\x2d\x78\x36\xb9\x5c\xd7\xfe\xf5\x96\x4a\x91\xe2\x52\x20\xae\xac\x22\x97\xb5\x07\xec\xba\x1b\x0e\x1c\xd8\x59\xf4\x9d\xca\x70\xd6\xfa\x32\x16\x88\xfd\x89\x31\xe8\xf5\x39\x73\x8e\x39\xe3\xca\x75\x8f\x99\xbe\x40\xb5\xc1\x70\x85\x68\xf5\xef\xcc\xd9\x18\xdf\x02\x6e\x15\x4b\xac\xb5\x65\x65\x91\x5a\x68\x2a\x34\x65\x96\x2e\xe2\xe2\xa5\xa9\x52\x1b\x6c\xc1\x9f\xfa\x87\xda\x88\x0c\x09\xcd\x81\x53\x83\x04\x68\x00\xc6\xab\x45\x92\x6c\xc1\xff\xce\x07\xae\x92\x43\x59\xf2\x26\x3b\x8d\x1d\x91\xb4\xde\xf3\x4e\x48\xc5\x1e\x17\x29\xdf\x38\x98\xec\xe3\xe0\xaa\xa1\x6e\x2a\xf8\x3e\x94\x5a\x10\x4a\xca\xea\xb8\xaf\x25\x85\xbc\xc5\x87\x7f\x3f\x29\x1c\x25\xa8\x31\xd4\x17\xd7\x3c\xc8\x45\x4d\xd9\x8e\xe9\xb4\x38\x38\x2c\xee\x5a\x5c\x65\xef\xc7\x73\x67\xc9\xa6\xca\xb0\x48\x24\x74\x8e\xeb\x31\xba\xce\x64\x9c\x3f\xff\xd6\x7d\xca\x5d\xdc\xc9\x6a\x0b\xc3\x86\x0f\xc2\x7e\x24\x92\xb0\x45\xde\xc3\x5a\xbe\x70\xf6\xe8\x26\xa9\x61\x4e\x77\xf2\x68\x34\x87\xad\x07\x89\xb6\xcc\xb6\x68\x5d\xb3\xbe\x5a\x35\x39\x00\x93\x46\x3d\xa5\x28\x5d\xb2\x3c\x81\xd5\x81\xe2\x5c\x75\x5e\x13\x9e\xcb\xcc\xe9\xfd\x28\xb8\x9a\x54\xb5\x99\x1b\xed\xd2\xc9\x9d\xc1\x4e\x2b\xdb\x69\x70\x58\x7b\x8e\xb4\xd1\x8d\x7b\x8e\xd8\x2b\x87\x14\x52\x12\xfa\x3d\x82\xd6\x3d\x4c\x0c\x1d\xc2\x16\x2b\x66\xfe\x87\x24\x47\x6d\xf9\x1e\xb1\x96\x11\x8b\xd7\xee\x9d\xe2\xb4\x61\x4f\x3b\x81\x1f\x9c\xc3\xc3\x3b\x40\x81\x01\x56\x34\x90\x38\x7d\x2a\x61\x17\xee\x22\x8a\x9c\xf7\xd3\x4a\xd4\xdf\xf5\xa1\xc0\x68\x44\x94\xd9\x05\xe7\xcf\xdd\xb9\xe8\x96\xb3\xb0\xa8\x7a\x89\xea\x69\x11\x85\xe8\xc6\x45\xfe\x2a\xb6\x1e\xbd\x81\xec\x5d\x3f\x8e\xf3\xe9\x61\xbe\x7f\x7c\x2c\x3c\x40\x15\x68\x75\x1d\xe7\x25\xb1\xe2\xb7\x7e\x38\xde\x3a\x4c\x5d\x45\xe0\x13\x98\x71\x48\x75\x77\x19\xb9\xa3\x51\x4e\xbd\x4e\x44\x73\x57\x32\xe9\xdc\x8e\xbd\xa8\xe0\x12\x9a\x7d\x26\x34\x2b\xc3\x90\x58\xe0\xb2\x18\x40\x6f\x1f\x76\x6d\x98\x91\x50\xad\x8e\xe9\xd8\xb0\x46\xeb\x0b\x3f\x03\x32\x74\x84\x9c\xd4\xd9\xe1\x2a\x5c\x8d\x19\x10\x1a\x32\x75\x6f\x2e\xcb\x76\xe0\x3f\x90\xa7\x5e\x72\x3c\xef\x90\x21\x1d\x95\x77\x06\x80\x2a\x57\xd9\x69\x80\xac\xd3\x34\x74\x98\x37\x0c\xb2\x67\xa5\x82\x42\x53\xcd\xdd\x20\x4a\x32\x64\xc4\x22\x08\x67\xfe\xc3\xfd\x98\x21\xc8\xb8\x1d\x65\x2c\x36\x9d\xad\xa2\x7f\xa9\xda\xfb\x26\xab\x32\x6b\xfc\x02\x13\x48\xd9\x75\xd4\xc1\x5d\x8f\xc3\x8d\xff\xfd\xe1\x85\x62\xf4\xde\xf0\xce\xfd\x94\xa2\xab\x1c\x9c\x85\x48\x28\x40\xfc\xfe\x97\xc1\xfb\x41\xa6\xc8\x1c\xa6\x72\xe7\x81\x5b\xbb\xbf\xc2\x75\xd6\x89\x1d\x51\x6d\x4b\xfd\xa0\x2e\xf3\xa6\xcb\x26\xf2\x7d\x79\x61\x49\xd6\xb4\xec\x1c\xcb\x8c\xbd\xe2\xad\x01\x47\xa4\xe2\x1a\x4c\x70\xfc\xf3\x98\x5d\x57\x31\x50\x84\x57\xa9\xc6\xad\x55\x75\x94\x55\x1e\x3e\xf4\x97\x63\xef\x31\xce\x87\x75\xba\xde\xf8\xa7\xc3\x70\x8f\xba\x7e\x75\x4a\x6b\xf3\x63\x4b\xd3\x63\x01\xe6\xb3\x47\x85\xa2\xfe\x9b\x53\x96\xef\x27\xcc\xb6\x25\xce\x77\xe4\xf0\xe4\x83\xee\xbc\xe8\xfa\x33\xef\x47\x05\x7c\xbd\x91\xea\x5a\xaf\xa9\x50\xea\x93\xc5\xda\xe9\x4e\x28\x59\xe0\xa4\xf2\xd2\x87\xf7\xa3\x66\xe3\x96\x0d\xfd\xa6\x06\x69\x7c\xa3\x8a\x7d\x17\xd7\xd2\x46\x26\x35\x0f\xbe\xa9\x69\x9f\xcd\x88\x98\xd9\x71\x02\x3c\x2e\xa5\x0a\xf4\x5f\x7a\x03\x7f\xde\xd9\x80\xdd\xb4\x96\xdf\x1e\x35\xa5\xcc\xc6\x96\x27\x20\xb0\x2c\x43\x40\x18\x17\x9d\x29\x05\x55\x49\x5f\xc5\x6e\xe5\xad\xe5\xed\x49\x1a\xd9\xb9\x3f\xe5\x22\xe5\xee\xcf\x70\xd3\xf3\xc2\xed\x19\xd8\x97\xdc\xea\xd9\x42\xa7\x34\xa7\x4f\x46\xbe\xb2\xdd\x02\x5b\xa1\x36\xa4\x9c\x23\x2f\x32\xcf\x85\xc9\x02\xee\x4f\x21\x66\x76\x92\x05\x85\xf9\x2d\xbc\x3a\x5b\xa7\xed\xd5\x0f\x21\x64\x9a\xf3\x95\x9e\xe5\xd1\x73\x5a\xbe\x0e\x1c\xd2\x3a\x8a\xbe\xeb\x79\xdf\xc5\xf1\x77\xd9\x0d\xa6\x1c\xf1\xdb\xc5\x38\x20\x3e\xa5\x00\xfd\x1c\x23\x0e\x15\xde\x62\x53\xf9\xb8\x46\x8a\x4c\x90\x3f\x7d\xf4\xbf\x48\xac\x56\xa1\x60\x4f\x91\x17\x78\x81\xf1\x73\x55\x1e\x8a\x6c\x09\x81\x36\x76\x87\x3e\x9a\xa3\x22\xfe\x95\x26\x58\x36\xc8\x59\xe7\x62\xd5\x34\x04\xee\x67\xf1\x18\xd5\x5e\x04\x5c\x09\xc1\x10\x25\x26\x89\x5f\x77\x22\x93\x9d\x05\xbe\x3e\x22\x2b\x2d\x79\x32\x2f\x13\xb9\x85\xda\x93\x58\xdd\xc8\x6d\x65\x83\x26\x99\xde\x18\x16\x22\x68\x75\xcc\xf5\xf6\x32\x72\x33\x19\xd1\xe1\x03\x9e\xe7\xe3\x46\x7f\xb5\x9d\xbf\xc6\x47\x54\xa0\xfe\xbe\xa4\x76\x22\x91\xf4\x33\x70\x9f\xdd\x3b\x4e\xf8\x3c\x3d\xee\x75\xfe\xdc\xb7\x07\x56\xae\x66\x8c\xfa\x49\x55\x0c\xd0\x45\xb1\x81\x4d\x08\x36\x35\x50\x60\x9c\xa5\xa6\x4d\x35\x0f\x49\x57\x2d\x98\x22\x19\xe6\xcf\x9b\x92\x57\xf3\x5e\xa4\x2d\x89\xbd\x3f\xb6\x35\x53\x4c\x23\xbc\x05\xfb\x7b\x37\x43\x2a\x5d\x1e\x25\x95\xd7\x94\xec\x15\xab\x0a\x05\x4a\x54\x38\x6e\xbb\x97\xf6\xd6\xf7\xcf\xbe\x2b\x0a\xc9\x64\x53\x3d\x39\x4c\x19\x95\x6d\xb1\x93\xab\x08\x4d\x67\xbb\x2e\xb3\x44\xc9\x06\x3a\x1a\x36\xe8\xb3\x4f\x9b\x58\x61\x8f\x2f\x9f\x12\x6a\x3b\x05\xf6\x2b\xbb\xbe\x6c\x35\x8b\x0e\x96\xb1\x1c\xd9\x26\xcc\x39\xe7\xec\x2f\x47\x1f\x95\x32\x95\x0b\x56\xf0\x91\x60\xd8\xb2\x53\x06\x22\x3f\x77\x4b\xfa\x58\x84\x8b\x50\x62\xe2\x54\x88\xc8\x6c\xa3\xd6\xcc\xd1\xc9\xf3\x24\xae\xd8\x78\x07\x18\xdb\x54\xd8\x39\xe9\x74\xc5\xd5\x22\xac\xe8\xf0\x2c\x6c\x5c\xb0\x8e\x9a\x4c\x57\x65\xf3\x31\x23\xa7\x3d\x4d\xbc\x60\x12\x30\x38\x28\x28\x10\xf2\xef\x0f\xaa\x11\x1e\x04\x46\x25\xbe\xa7\x1f\xe4\x5e\x51\x36\x28\x80\x41\xc6\xae\xa8\x58\xdf\xed\x53\x11\x39\x56\xf5\x14\x8b\xb5\x1f\xe1\xb0\x77\xe4\x27\xa4\x9f\x67\x65\x69\x6c\xb2\x34\x5f\x5c\xc3\xd4\x5c\x0e\x04\xab\x24\xc2\xb5\x5b\xb5\x24\x84\xaf\xe7\x76\xbc\xdb\xbd\x18\x45\x07\x72\x75\x0b\x19\x82\x9f\x1b\x77\xee\x9c\x53\x38\x32\xd5\x88\x6c\xad\xcd\xe2\x73\x97\x3a\x13\x1c\x53\x8f\x50\x40\x74\xee\x62\xc6\x44\x92\x5e\x66\x68\x13\x3f\xe7\x66\xc0\x1b\xb2\xf8\x47\x7a\x57\x21\xb8\x20\x45\x78\xb8\x0b\x7b\xec\x8c\x97\xbd\xd8\xb0\x84\x44\x19\x28\x8b\x22\xcd\xd3\x1b\xb0\x28\x92\xa0\x2c\xca\x63\x51\xc7\x9c\x94\x63\xe0\xf8\xb0\x21\x43\x07\x95\x38\x8d\x58\x38\x7d\x56\xa5\x0d\x47\x1a\x85\x6e\x14\x67\xba\xff\x81\x57\x23\x22\xcc\x5d\xc9\x15\xf6\xc6\x35\x4d\xee\xb5\x5a\x4b\x50\xd3\x15\xb8\x60\x51\xac\x64\x28\x46\x74\xf6\x7a\x4e\xd6\x7e\xe9\xf1\x93\xc7\x82\xb9\x1f\xad\xf1\x79\xbd\xe5\x72\x0a\xfc\x48\xd7\x4c\xca\x49\x79\x4f\xe3\x64\x81\xf0\xa4\x5b\xa2\xaf\x1d\xf5\x03\x2d\xef\xc1\x03\xba\x1f\x44\x0b\x74\xd7\x31\x5e\x40\x0e\xfc\x2e\x73\xeb\xf8\x7f\x00\x03\x40\xfc\xbf\xa6\x36\x2d\x4e\x4d\x76\xce\x4d\x24\xfb\x19\x63\x35\x30\x67\xb6\xcd\x1b\xb8\x68\x51\x36\xab\x14\x07\xb6\x00\xe3\xd4\x31\xfd\xb1\xfd\x42\xff\x95\x6e\xd7\xe4\xee\xc3\x57\x5f\x75\xb8\x73\xda\xce\x3b\x42\xd9\xee\x45\xae\xcc\x1c\x02\xe3\x67\x97\xf5\x7d\x5c\xa5\xfd\xff\x22\x5c\xf1\xa5\x61\xa0\xa6\x1a\x9a\x51\x3d\xbb\x23\x96\xec\xda\xcd\xa7\x9d\x99\xef\xd5\xbe\x76\xc7\xfe\xb3\xa3\x8d\x31\xea\xc5\x8a\x53\xaf\x59\x28\x52\x2e\x69\xed\x5b\x81\x8c\x39\x02\xf8\x0b\xc5\xfa\x4a\x64\xe7\xd1\x51\xd3\x9c\x3c\x0b\x12\x30\x40\x42\x8e\x4e\x79\x61\xfc\x29\xbf\x6a\x04\x30\x56\x68\x9f\x32\xec\xac\x84\xc7\x73\x01\xed\xd2\x4f\x00\x9d\x65\x50\x1e\x35\x3e\x49\xae\x93\x7e\xaf\x91\xea\xa9\x31\x21\x00\xc6\xfb\xa1\xff\x2d\xbc\x06\x41\x38\x61\x67\xc4\x6a\xca\x4e\x71\x5e\x37\xac\x36\xea\xc3\x65\xab\x13\xb0\x2f\x89\xec\xbe\x87\xdd\xb3\x52\x75\xd4\xa2\xc1\x5a\x26\xfd\x55\xa1\x45\x4a\xa9\xb8\x6c\xb6\x70\x9e\x59\x6f\x9e\x3c\x32\xe9\xb9\x22\x15\x5f\x9c\xec\xf4\x14\x3a\xd9\xe9\x39\x37\xde\x39\x66\xb2\xd9\xda\xe9\x98\x8e\xb3\x00\x88\xb3\x2e\x04\xb5\x21\x0d\x68\x49\x17\x1b\xda\xc2\x34\x0d\x52\x6b\xa5\xf3\x43\x6a\x11\xae\x47\xd3\x42\x75\x0c\x2b\x62\xfa\x98\x99\x74\x51\xf5\x50\x12\x9d\x75\x08\xd1\x2f\x0c\xd0\x90\x31\xfa\x99\x54\x18\x5a\x35\x1c\x97\xe5\x95\xf4\xdb\x01\x87\x56\x3a\x1c\x2b\xd1\x7a\x70\x82\xe3\x38\xfa\x88\x6a\x84\x8e\xa7\xb1\x79\x5c\x53\x54\xa4\xe9\x21\xa9\x7a\x08\x72\x81\xe3\xf8\xf9\x75\x38\x59\xdb\xb8\x24\xfd\xf8\x13\xd5\x85\x84\x46\x95\x75\x46\x59\x13\xdd\xf1\x0c\xca\x54\x6a\x1c\x0a\x02\x2b\x5b\x6b\x8c\x6a\x60\x18\xe2\x47\xc5\xa6\xa2\xf5\x2b\x91\x79\x6c\xd3\xd6\xa6\x59\xeb\x8b\x8d\xf1\x8d\x34\x14\x52\xab\xe7\xd4\xd3\x2c\xb6\x2b\xaa\xe9\x68\x22\xad\x29\x3d\xa8\xac\x55\xcb\x3e\xce\x10\x1e\xad\xaf\x79\x56\xcf\xcb\x95\x21\xcb\xd8\x56\x5d\xc9\x5a\xeb\x38\x47\x5f\x0a\x17\x6a\x57\x0b\x1b\xae\xb2\x70\xa8\xa6\x48\xea\xf4\x20\xd6\xac\x51\x36\x50\xa8\x1e\xe9\x38\x3d\x77\xb0\x51\x39\xbb\x5d\x57\x8c\xcc\xf2\x38\x30\xc0\x9d\x39\x9f\x1e\x9c\x11\xfd\x12\x7b\xb9\xd1\x7a\x0f\x16\x24\xc5\x35\xeb\xce\x70\xbe\x2b\x94\x8d\xd2\x83\x44\x25\xea\x94\x92\x8a\x18\x2d\x91\xe4\xf5\x16\x14\x52\x60\x35\x43\x62\x4a\x69\xa5\x95\x68\x82\x45\x49\x40\xa7\xb9\xdc\xf4\x78\xa0\x51\x40\x87\xb9\x2d\xd8\x4a\xb3\xc3\x7f\x89\xfe\x68\xea\x6e\x94\xa2\xd7\x90\x21\x37\x93\xfb\x87\x23\xd7\x9d\x8e\xba\x59\x0a\xd1\xa3\x58\x10\xad\xa1\x9e\x16\x99\xa6\x05\x32\xec\xcf\x4d\x8d\xe9\x89\x6e\x89\xd2\xc6\x94\x18\xa4\xd2\xcd\x69\x26\x82\x23\x69\x85\x78\x32\x6e\x8f\x42\x85\x02\x80\x7e\x8c\xd2\x23\x9d\xf2\x7d\x32\x6e\x29\xcd\xb0\x13\xda\x2e\x77\x06\xb6\x14\xc9\x03\x6f\xb1\xc8\x14\x42\xe0\xa1\xc6\x1e\x19\x1f\x28\x93\xd6\x0c\x59\xc7\x6b\xa1\x22\x16\x1b\x8a\xbb\x35\x6e\x11\xb3\xf7\x47\x19\x0d\x50\x54\x46\x8b\xa3\x84\xb8\x3b\x93\x4e\x89\x51\x40\xf7\x28\xe3\x9a\xe5\xa5\xa3\x24\xba\xea\xe9\x25\x6c\x37\x51\x18\x3f\x8e\xca\x6c\x52\x1a\xbe\x1b\xb1\x50\xe4\x66\x42\x12\x21\x77\x9a\xd2\xa4\x4a\xc6\x9d\x61\x95\xc3\xae\x47\xdb\xd9\x8d\x00\xf1\x4a\xa6\x20\x83\x76\x4b\x1b\x8d\x67\xea\x01\x57\x4f\xd3\xac\x94\xbb\x4c\x5f\xe9\x24\x9b\x90\x74\x88\xb1\x9b\x61\x8c\xe8\x5b\x21\x69\x26\xfe\x1e\x4d\x17\xed\x3e\x4a\x16\xe2\xa1\x4c\x42\x66\xdd\x52\x81\x04\x16\x9e\xba\xa0\x25\xb5\x0c\xdb\xa3\x36\x21\xe1\x6f\xac\x06\x0b\x99\x86\xad\x22\x16\x04\x24\xda\x2c\x4a\xbd\x1d\x7b\x08\xf1\x12\x6c\x32\x22\x51\x6f\xc1\x06\x83\x88\xb0\x15\x23\x42\x04\x51\x27\x21\x22\x12\x11\x13\x23\xb1\xda\x0c\xa2\x9e\x48\x02\xb2\x3a\x89\x2e\x09\x6f\x09\x99\xfd\x3c\xf1\x01\x39\x2a\x61\x24\x0a\x3c\x31\xca\x94\x2f\x2d\x0a\xe1\xaa\xa0\x28\x4a\x26\x82\x89\x1e\x99\x24\x12\xb2\x0a\x66\x5e\x6f\x90\x05\x0b\xd1\x9b\xf4\x3c\x6f\xb2\xea\x0c\xc8\x6e\xd3\x21\xbd\xa0\xd3\x11\xbf\x41\xae\x96\xaa\x45\x01\x19\x0d\x66\x6c\x11\xb1\xd9\x00\x35\x0a\x82\x8e\x48\x01\x03\xef\xb5\x0b\x3c\x8f\x08\x6f\x21\xcd\xad\xa2\x28\xd8\x70\xbd\x4e\xb0\x88\x12\x74\x48\xc2\xbc\xd5\xa2\xb3\x89\x07\x2e\x96\x04\x1e\x03\x61\x2e\xa2\x26\x19\x13\x33\xb2\x21\x22\x49\xd0\x3a\x4c\xec\x66\x73\x10\x5a\xee\x30\x41\x95\x3a\xec\x41\x88\x20\x52\x45\x10\xe6\x45\xec\xb3\x62\x22\x60\xac\x83\x5c\xc4\x60\x71\x62\xd1\xa6\xd3\xbb\x45\x41\xc4\xd8\x6c\x72\x12\xa1\x5a\x67\x30\xd9\x05\xab\x5f\x0a\xcb\x58\x30\x4a\x58\xf0\x09\x90\xd0\xa9\xb3\xd4\x39\x04\x82\x31\xaf\xc7\x22\x42\x4e\x2c\xb8\x05\x62\x86\x71\xc2\x48\x2f\x62\xa3\x49\x96\x10\xbd\xf2\xaf\x97\xcc\x32\x15\x26\x30\xf1\x98\x36\x1e\x86\x11\x49\x4d\xa2\x55\x12\xb0\xe0\x25\x55\x02\x81\x9e\x09\x06\x6c\xd4\x49\x3a\x44\xff\x59\x25\x83\x01\x59\xec\xbc\x4b\x94\x78\x04\xc3\xad\x97\x04\x41\xd0\x9b\x74\x92\x50\x47\x24\x4c\x78\x37\xb6\x13\xe2\x30\x1b\x6c\xc4\xa4\x27\x76\x6c\x75\xdb\x8f\x9f\x78\x80\xc8\xc4\x21\x22\x49\x6f\x23\xd8\xc0\x1b\x45\x89\x4e\x15\x46\x2e\xab\x60\xd2\x1b\x45\x01\xc3\x62\x12\x88\x55\x6f\xe1\xcd\x18\xe6\x0e\xcb\x98\x27\x92\x5c\x8d\x79\x9b\x0d\x9d\xa5\xa0\xa4\x7e\x0f\xd9\x91\xc1\x84\x24\x9d\x28\xea\x64\xec\x46\x00\x16\x6e\x64\x33\x03\x48\x61\x18\x7a\xbd\x97\x08\xd0\x13\x49\x14\x0c\x06\x8c\x10\x8c\x2b\x46\x82\xc8\x23\xde\x26\xf2\x7a\x1d\x16\xf4\xbc\xa8\x97\x89\x68\x11\x24\xbb\x59\x67\xe3\x75\x2e\x91\xdd\x03\xc0\xd8\x58\xab\x04\x9d\xde\x6c\xd6\x0b\xc8\x62\x25\xa2\x87\x4e\xac\xd5\xc4\x5b\x05\x2f\x8c\xa5\x81\x2a\x57\x38\xa0\x02\x00\x07\xe4\x01\xb8\xab\x42\x56\x9d\x05\x99\xac\x30\x66\x92\x5e\x82\x40\x03\x8f\x60\x5e\x79\x27\x2f\x54\xf1\x7a\x82\xa0\x05\x3a\x68\x06\x0c\xb7\xd5\x07\x4d\xd0\x23\x8b\x24\xd8\xf4\x3c\x11\x45\x93\x48\x2c\x30\x92\x0b\xee\x95\x10\xb2\x41\x17\x8c\xc8\x6f\xe7\x61\xce\x2c\x30\x8d\x28\x10\xe5\x91\x69\x22\x21\x31\x1d\xc2\x94\x5f\x12\x12\x45\xbf\x1e\x36\x33\x9a\x07\x3b\x1b\xab\x78\xc1\xc5\x13\xa8\x4d\x72\xd9\xdc\x58\xac\x76\xe9\x75\x61\x51\x32\x8b\x06\x0c\x83\xce\x43\x5f\xeb\x79\x59\x87\xcc\x0e\x23\x11\x1d\x22\x2f\xe8\xbc\x98\xd4\x58\x83\x48\x0f\x70\x23\x39\x78\x9d\x97\xe8\x31\x40\x31\x40\x00\xe0\x0a\x36\xb3\x09\x5a\x20\x13\xab\x8e\x10\xcc\xeb\x1a\x6d\x86\xa0\xdd\x86\xad\x04\x51\xfb\xa5\x00\x8d\x44\x2f\x1a\xcd\xc8\x2e\x54\x3b\x08\x4f\x00\x7c\x89\x60\x31\xc4\xc0\x65\x37\x4a\x3a\xbd\x5e\x47\x1c\xb2\x1e\x09\x3a\x5e\xb6\xe9\xa1\x26\x23\xb1\x61\x93\x41\xa7\x93\x24\x11\xc3\xa8\x0a\x3a\x64\xe4\xb1\x19\x7a\x00\x2b\x0d\x61\x83\x28\x0c\xdf\x1e\x7e\x04\xea\x01\x64\xc1\x44\x5b\xab\x83\x69\xa6\x90\x46\xa0\x02\x58\x56\x58\x14\x00\x8a\xab\x44\x58\xb9\x46\xac\x27\xbc\x0d\x3a\x43\x0c\x71\x73\x9d\xbd\xca\xea\xe6\xa5\x6a\x1d\xd3\x8e\x70\x9d\x71\x89\xb7\x32\x9a\xc9\x45\x35\x21\x4b\x28\xbe\xbe\xa8\x91\x4b\xe5\x57\x6b\x01\xcc\x99\xc4\x04\x67\xe3\xd8\xb7\x28\x9c\x92\xe0\xf2\x68\x9f\xa3\xd0\x50\x2b\xfc\xb9\xc2\x52\xaa\xa3\xba\x5e\x51\xf0\xb1\xe8\xc3\xf8\x2d\x4f\xcb\xbb\xf7\x68\xca\x40\xed\xbb\x26\xd8\x6c\xea\x6f\xbe\x25\x3c\x78\x93\xde\x6a\x2f\xde\x85\xfc\x1e\x92\x47\x36\x52\x2d\x56\x7c\x6c\xcd\xc3\x68\x7f\x74\xea\x1d\xcf\x69\x4c\xa5\x60\xad\xb1\xde\x78\x6c\x68\x03\x59\x39\xd3\xc9\x55\x7e\x93\x53\xd3\xe3\xa8\x86\xd3\xb5\x03\x28\x97\x60\x2a\x88\x4a\xbf\x0b\x7c\xcb\x75\xac\x9f\xe7\x28\xee\xaf\xe6\x78\x6e\x18\x5c\x54\x9a\x10\x7f\x22\x4b\x90\xcc\x4c\x3f\xfc\x0d\x67\x4b\x6c\x2f\x6a\xfe\xe2\x0f\xe7\xf2\x50\xda\x5b\x00\xda\xfb\x26\x81\x63\x72\xaa\x6e\xa9\x6c\xe6\x8e\x2a\x1c\xb3\x6f\x45\xc5\x85\x9b\xec\x75\xaa\xcc\xac\xdb\x9d\xe1\x64\x55\xa6\x1f\x81\x12\xb8\x46\xfe\x57\x0d\x35\xaa\x5c\xf0\x31\xc3\x76\x9c\xec\x43\x7f\x40\xef\xd7\x34\x50\xa5\x62\xbe\x7c\xcf\x4d\x98\xdc\x65\x0b\xfb\x5e\x49\xc5\x18\x04\x5d\x25\x9b\x53\x21\x57\x90\x7d\x87\x60\xec\xd5\x2a\xa6\x5f\x10\xe0\xf8\xe2\xb7\x55\xe8\x15\x3c\xfd\x10\xfa\xc0\x19\x28\xfb\x63\x6e\x75\x2f\x1a\xd0\x58\x78\x68\xa0\x77\xb5\xc0\xe5\x0a\x9c\x1a\xd0\xd8\x29\x83\xb4\x6b\x83\x30\x04\x54\xf1\x24\xd7\xbb\x5a\x33\x0a\x5e\xfa\x5e\x76\x91\xa7\xcf\xe9\x31\x65\x13\xb8\x46\xbe\x0c\xa4\x67\x27\x50\x89\xf1\x94\xa6\x4a\x41\x52\xe9\x23\x46\x9a\xcd\x2c\x2b\x04\x45\xb5\xf1\xa0\x19\x59\xac\x40\xd4\x27\xd0\xe5\xf7\x43\xa7\x4b\x1f\x0c\xba\x5f\x7d\x42\x7d\xe2\x7e\x3a\x40\xc5\x8f\x01\xdd\x8f\x2e\x87\x00\xd9\x67\x32\xc5\xe8\x1d\x1a\x4b\x83\x2e\x87\x4c\xec\x4b\x5a\x79\x9f\xc2\x2c\x80\x91\xdf\x8d\x9f\xaf\x36\x3a\x26\x17\x35\x00\x46\x73\xd1\x14\xac\x6e\x96\x82\xd6\x2d\xc8\x9a\x5c\x25\xc7\xec\x9c\xdb\xb9\x49\xdc\x64\x6e\x0a\xb7\x98\x5b\xc9\xb8\xf9\x94\x40\xb1\x69\x9c\x84\x0c\x35\xac\x5d\x96\x69\x17\xa8\xf4\x8b\x76\xf3\x24\x94\xb8\x74\xa5\xaf\x57\x33\xd3\x11\x4c\x5c\x89\x09\x10\x43\x5e\x5c\x4c\x81\x17\x3e\x7d\xd5\x1d\x8b\x36\xdf\x2c\xf6\xed\xe8\x98\xda\x2b\xf0\xb9\x03\x37\x0e\x1f\xba\xf1\x80\xe4\x0a\xa4\x67\xac\xed\x32\xf4\x2e\xb8\xe3\xae\x3b\x16\xf4\x1a\xba\xd6\xce\x48\x07\x5c\xd2\xb0\x66\x97\x8f\x2c\x2d\x4a\xc7\x92\xe0\xe6\x45\x77\x5c\xf5\xf4\x42\xa1\x77\x6a\xc7\x8e\x3e\xf1\x66\x4d\xf8\x11\x03\x14\x2e\x9c\x87\x2e\x6b\x6c\xf2\x44\x6a\xee\x2e\x58\x76\xdc\x7d\xf7\x8e\xd4\xda\x6d\x57\x5c\x3a\x35\xd6\x94\x6a\x82\xbf\xd8\xd4\x4b\xaf\xd8\xb6\x56\x88\x33\xd9\x42\xb5\xae\xf8\xa9\xec\xc2\x53\xf3\x16\xde\x24\x6c\xbb\xbb\x26\xe2\x69\x6a\x44\xeb\x59\x64\x49\x4f\xed\x7e\x71\xb3\xf0\x21\x17\xe4\xa6\x72\x57\x17\xad\xa5\x00\x29\x5c\xcb\x33\xb2\x0d\x48\xb1\x11\xc3\x2e\x69\x54\x32\xfc\x52\x0a\xcb\x94\x44\x83\x88\x27\xcd\x69\x9a\xf8\xda\x3e\x13\x2d\xda\x00\x28\x2a\x8f\x51\x1e\x8b\x87\xb9\x84\x17\xfc\x6f\xf8\x63\x8d\xb5\x24\x60\x94\xa5\xb6\x98\xb5\xca\x67\xaa\x23\x41\xff\x89\xea\x86\x98\xff\xa0\xbf\x30\xc5\x7f\xc2\x1f\x8b\xd6\x1c\xf4\xfb\xdf\xa8\x6e\x18\x9b\x8a\xec\xba\xe8\xe0\xe2\x1d\x37\x2e\x3e\xb1\x78\xf9\xf2\xa5\x3b\x77\x2c\x79\x63\xc9\x18\x3f\xca\xc6\xa0\xf4\x00\xa9\x33\xf9\xaa\xac\xb1\x36\x49\x36\x82\xbb\x31\xe6\xff\x71\xb5\xef\x80\x1f\xff\x09\x1c\xfe\xea\x03\xfe\x28\x24\xaa\xae\x1b\x9d\xa8\xf0\xf6\x87\x8b\x0f\x2c\xbe\xe8\xc7\x8b\x77\xdc\xb4\x74\xf9\x72\x28\x79\xb4\xb7\x68\xe3\x32\xc7\x6c\x7b\x73\x1a\x5c\x70\xd4\x40\x0b\x35\xa9\x48\x3f\x88\xa5\x5d\xc3\x4a\xb5\x48\xca\xbd\xfd\xd4\xe9\x3c\x6c\x97\xf7\x6e\xc5\x68\xc2\xc9\x27\x11\xea\x98\x31\xb0\xfe\x50\xc3\x6d\xcf\xa3\xdc\x53\x6f\xc3\x1e\xba\xe7\x37\x69\xbf\xf5\x24\x9a\xf0\xc2\xbd\xdd\x87\xd6\xf7\xf5\xd4\xfe\x04\xe8\x8d\xeb\x61\xcd\x99\x99\x7e\x7d\x90\x5a\x7d\x67\x50\x97\xd1\x24\xfb\x8b\x92\x36\x4d\xf4\x18\x08\xa2\x68\xca\x1e\xb2\xbb\x84\xbf\xb7\x4d\x5f\x7f\x3a\xb7\x7e\x7a\x1b\xfa\x7b\xb6\x64\x5a\x4b\xf1\x65\xd5\xf7\xd4\x0f\xf1\xbf\xaa\x1f\x3a\x73\xcb\x2f\xde\xb5\xeb\x62\x52\x85\xee\x2b\xca\xa4\x6d\x99\xa6\x2e\x46\x5f\xac\x8b\xa0\xfb\xd4\x2d\x11\x6d\xdb\x41\x45\xd9\x4c\x89\x9b\xc7\xad\xe2\xd6\x73\x3b\xb8\x3b\xb8\xfd\x5c\xd9\xe6\xbf\x80\x18\x7f\x91\xed\x71\x0c\x39\xb7\x14\x97\x3a\xc3\xd9\x13\x4c\x30\x97\xc9\x68\xd6\xb3\x6f\xc8\xb0\xeb\x68\x86\x6d\x53\x21\xe1\xe2\xa4\x53\xe6\x62\x9a\x99\xe1\x66\xe4\x44\x22\x4e\xba\x99\xc9\x20\x28\x8b\xfa\xa8\xb5\x15\x28\x84\x59\x71\x47\x12\xe4\x8a\x22\x97\xc4\x8c\xf9\x83\x3b\x43\x6b\x25\x1a\xe3\x0c\x6d\x44\xa7\xfd\x44\xa8\xcd\x99\x6d\x76\x4b\x61\xde\x35\x3a\x1e\x70\xe2\x35\x8b\xf7\x3c\x70\xd7\xd2\x15\x46\x69\xcd\xa2\x3d\x07\x16\x4f\xd3\x9b\x77\xee\x34\xeb\xa7\x2d\x3e\xb0\x67\xd1\x1a\x49\x68\x68\xba\x68\xef\x03\x7b\x16\xaf\x91\x20\xa5\xee\x1a\xfc\x65\x8b\xdd\x66\xce\xd5\x0a\xc4\x7f\x7a\x55\x73\x7c\xe1\xaa\x2b\xe6\x44\xb5\x57\xf3\xc2\x78\x73\x74\xce\x15\xab\xb4\x17\xb2\x0c\x04\x2d\xf3\x7d\xc4\x22\x00\x9e\xf4\x8b\x01\x3c\x04\x3b\xe6\xa0\x1e\x70\x3e\x0b\xef\x23\x03\xb9\xc2\x3f\xbe\x84\x8d\x58\x3b\x24\x7d\xea\x75\xce\x70\xc8\x96\x05\x94\x6f\x77\x2f\x8f\x26\xb5\xce\xbd\x27\xb5\x64\xde\x92\x9b\xfa\xef\x4d\x2d\xa9\x33\xeb\x67\xcf\xd6\x9b\xeb\x96\xa4\xee\xed\xef\xd8\x18\x9d\xbf\x24\x79\xef\xdc\xd6\x49\x88\xef\x45\xbb\x75\x52\xd6\x16\x0a\x3b\xf7\x35\xee\x49\x74\x84\xe9\xa3\xd0\x91\xd8\xd3\x18\x66\x0f\x3c\xd8\x6e\x0c\x3b\x75\x2d\x3e\x62\x03\xb4\x08\xfd\x7b\x00\x67\xb3\xea\xc2\x2d\x03\x3a\xcc\xf3\x36\xde\xa7\xe6\xb3\xe8\xf0\x3e\xc2\x6b\xf7\x30\xda\xb9\x51\xc7\xd5\x73\x11\x2e\x41\xbf\x2c\x31\xea\x1e\xa6\x78\x42\x96\xb4\x55\x5c\xf6\x74\x42\x42\x41\x3d\x0a\xca\xf4\x10\x29\x7e\xa2\x33\x99\x2e\x7b\xc4\xc1\xd2\x8d\x50\x61\x88\x7e\x11\x02\xd1\x4f\x42\x50\xbb\x02\xd3\x3a\x73\xea\xcf\x51\x53\x81\x3d\xbf\x8b\x3a\x55\x66\x99\x00\x73\x31\xf2\x4b\xcd\xc9\x97\x4d\x0a\xa0\x40\xf1\xdb\x13\x90\x19\xca\x50\xbf\x1e\xfb\xb9\xfa\x73\xfc\x79\xf5\xe7\xea\x67\x51\x27\xd5\x29\xa2\x5f\xad\x40\x5c\x6c\x60\xf8\x1f\x7c\x4e\xf3\x31\x9e\x36\x7f\x66\x8f\x70\xb3\x70\x33\xb3\x02\xed\x2c\x59\xd5\xd0\x2c\x77\x14\x05\xf4\x8b\x5a\x1b\x88\x31\x9b\x92\x15\x7e\xd7\x98\xf4\xc2\xcd\x4f\x6e\xbb\xf3\x8a\xe1\xbf\x6f\x79\xeb\xa9\x27\xaf\xc7\x97\x18\xba\x6c\x66\x43\xe1\xe9\xf9\x57\xae\x3f\xd0\x4f\x74\x3d\x8b\xb2\x4b\x7a\x0a\xdf\xf4\xd5\xd7\x28\x55\xe8\x51\x43\xb7\xcd\x64\x50\xaf\xec\xb9\x6e\xd1\xf2\x2e\x3c\xfd\x8a\x87\xb7\x3d\x79\x05\xd1\x5d\xff\xf8\x53\xff\xb6\xa5\xf0\xb4\xc1\x64\xeb\x32\xe0\x4b\xe7\x1e\x5a\x7f\x75\xff\xf0\xdf\x7b\x96\x64\x17\xf5\xe0\xe9\x5e\xa5\x26\x50\xad\x5e\x09\x71\xdd\x06\xf4\x68\xd7\xf2\x45\xd7\x41\x61\x6b\x46\xc9\xf6\x51\x1d\xed\xe9\xda\x37\x3e\x98\x3c\x1f\xfb\x7e\xcc\x88\x5e\xbf\x3d\x51\x62\x79\x8d\xd5\x41\x1d\xab\x73\xe7\xa1\x58\x1a\xfd\x20\x10\x47\x72\x39\xa7\x41\xfd\xa3\xa1\xd5\xaa\xdd\xc8\xe5\x60\xb8\x09\x0c\xb7\x9a\xab\xd0\x0c\xce\x95\xbf\x4d\xca\x86\xdf\xeb\x8f\xb1\x8f\x13\xe5\x2c\x93\x0c\xa8\xca\xe0\x2c\x29\xf6\x9f\xe6\x34\x4b\x11\x98\xab\xb8\xdd\x91\x87\x59\xac\xc0\xbe\x5a\xaa\xfe\xc9\x3f\x30\x4a\xf7\x64\x5c\x3b\x7c\x95\xd7\xeb\xfc\xc0\x68\xb5\x15\xed\x7e\x8e\xdd\x6b\x69\xf6\x8e\x3f\xb5\x65\xef\xd1\x76\xfe\xce\xe5\xae\xb0\xde\xfd\x87\xf1\x9c\xec\x8c\xcf\x4b\xd4\x0e\x83\x76\xbf\x16\xe5\x32\x14\xa3\x29\x69\xb0\x39\x4a\xb7\x86\x63\x6a\xe7\xce\x11\x7e\xb6\x55\x69\x76\x6f\xa8\xfd\x09\x1f\x56\xde\xb4\x9d\xca\x8d\x13\x58\xe9\x7e\x83\x65\x43\xf7\x6b\x06\x86\x07\xcb\x86\x94\xc9\xef\xc6\x86\xa0\x11\x4b\xd3\xda\xb0\x5a\x99\x6e\xe9\xdf\xb9\x5a\x58\xf1\xfd\xb0\x6b\x6f\xe4\x6e\x86\xed\x80\xad\x82\x8c\xb6\x3a\xa4\x68\x37\xce\xa4\xea\xc5\x10\xfb\x90\x15\x9c\x47\xb2\x2b\xc8\x98\xae\xda\x7d\x49\xb4\x9b\x5d\x0e\x53\x66\x6e\x22\x75\xb6\x21\xf2\x60\x2a\x91\xa4\xd8\xa6\x28\x45\x33\x09\xfb\x05\x07\xe1\x96\x4d\x0b\xd7\xf7\x4e\x9e\x34\xb9\xa6\xe9\x6a\x9f\x6e\x52\x58\xb6\x4d\xb1\xad\x47\x73\x2f\x4d\x74\x62\xf5\x90\xd8\xd2\xdb\xdb\x52\x53\xd5\x1c\xba\xc8\x7b\x69\xfb\xec\x2b\xa6\x2d\x9a\x8e\x76\x09\x7f\xd6\xc6\xc1\x61\xd1\x06\x4a\xfd\xd2\x06\x84\x75\x8d\x33\xef\x5a\x2f\xbc\x57\x19\x53\x39\x5a\x4b\x16\xac\xea\x5d\x3e\xb1\xc6\x9f\xd5\xb5\x19\xa6\x36\x38\x10\x4e\x1d\x5e\x7e\xbd\x69\x0e\xce\x3e\x15\x76\x24\x96\x24\x9b\x26\x78\xaa\xaa\xdb\x3b\x12\x93\x17\xcf\x8c\x2f\x6e\xce\x54\x75\xaa\xdf\xd2\xc6\xcc\xe2\x90\xc9\x0d\x97\x5f\xde\x70\xa4\xc1\x64\x8f\xf4\xef\x52\x37\xaa\xb7\x94\x23\xc6\x8c\xeb\xc8\x5d\x8a\x95\x4b\x71\x6b\xd9\x5e\x3a\x4a\xb8\x31\xa2\x29\xc7\xa4\x35\xa3\xb0\xda\x07\x24\xa8\x32\x0d\x3b\xd8\xca\x97\x03\x24\x58\xb4\x96\x5b\xba\x8d\xd3\x14\x5a\x28\xde\x9c\xca\x68\xd2\x4a\x9e\xa2\xad\x37\x2a\xfd\x25\x32\x45\xe5\x8f\x99\x14\x23\xfa\x8e\xdf\xd3\x7a\xc7\x67\x10\x1f\xdf\xd6\x7b\xad\xc1\x68\x11\x4c\x4b\x2c\xf1\xd4\xf2\x9d\xd7\x4d\x9b\xda\xdb\xfb\xf3\xe9\xeb\xda\x23\xef\xa1\xc7\xa4\x06\x4f\x6b\x64\xd6\x82\xd9\x0b\x6e\xba\x6e\xe1\xfe\xc9\x56\x1d\xa5\x1b\xaf\xb4\xd6\x5a\x85\xd0\xc4\xa6\xee\x8e\xd9\xd9\xbe\xb9\x13\x5b\x16\xd6\xe3\xdc\xc8\xb7\xf7\xb2\xa1\x89\x6b\x56\xbc\x98\xdb\x25\x9b\xc2\xca\x82\x9b\x3a\x1d\xd5\x40\x53\x3e\xd4\xb6\xb2\xa3\x7d\xf9\xec\xa9\x53\xbb\x9d\xcd\x7e\xef\x19\x2e\x9a\xba\x76\x6d\x5b\x6b\xa8\xb9\xd5\xe1\xf2\xc4\x6c\x26\x9d\xc5\xbc\xb1\xb5\x56\x89\x4c\xc0\xf5\x73\x14\xdd\xe4\x48\xd8\xe5\xae\xf6\x75\x76\x4d\x5b\x32\xbb\xa6\x82\x2f\x7a\x39\xd5\xb6\x97\x95\x16\xcd\x10\x2e\xeb\x53\x3c\x23\x79\x5c\xa2\x36\x20\x6e\x97\x47\xae\xe8\xad\xd6\xe3\x66\x6d\xc8\xac\x08\x40\xcb\xe3\xce\x78\xca\x83\x45\xd3\xbb\x65\xf7\xc8\xc8\x69\x77\x58\xb0\xe1\x44\x95\xb1\x76\x0d\x5b\x23\x3a\x62\xae\xee\x4c\xee\xa9\x5f\xba\x68\x6b\x6d\x5b\x2d\xc2\x9d\xd9\x4e\xd9\x8c\x90\x45\x9c\x18\xea\x5a\x7e\xf1\xba\x65\x6d\x4d\xad\xf6\xb0\xdd\x25\x59\x81\xe6\x96\xeb\x9b\xae\xb0\xe0\x25\xaf\xf7\xef\x00\x5a\x7f\x62\x74\xb6\x68\x25\x3a\x8b\xe8\xb2\xfa\x94\x39\x7d\x1b\x36\x1d\x78\x6e\xdb\xf6\xce\x2e\xb7\xcd\x5e\x25\x2c\x75\x58\x46\x3e\xa3\x2e\x04\x31\x5e\x8e\x78\x89\x00\x8d\x6f\xc9\xea\xf5\x55\x96\x1b\xcc\x51\xf1\x1d\xf5\x4f\x37\xcf\xeb\x08\xb6\xf8\x1d\xc1\xb0\xbf\xad\x7d\xf6\xe3\xf3\xd7\x1c\x5c\xda\x31\xd5\x15\x42\x98\x2c\x35\x10\x33\x56\xcc\x92\xd7\x84\x8c\xa2\xd5\x27\xc5\x8c\xb2\x7a\xe7\x77\x36\xf5\x37\x4f\x69\x9f\x1c\x08\x36\xb7\xf4\xf5\x6f\x5f\xf0\x04\x9a\xfb\x72\x55\xf8\xd4\xed\xa5\xb9\x71\x70\x9c\xa1\x2c\xc3\x31\xf6\x9b\x02\xf7\x71\x4f\x69\x16\x23\x2a\xfb\x6e\x1f\xe3\x1f\x3b\x36\xff\xd3\xfe\xb1\xf5\x8d\xfd\x46\x28\xfd\x4e\x79\xc5\x27\xea\x2b\xdc\xa3\x63\x54\xee\xdc\x71\x9f\x3c\x65\xa5\x9b\x92\xbb\x4c\x16\x41\xa0\x22\x71\x65\x9b\x86\xe8\xde\xb2\x53\x1d\x71\x12\xcb\x78\xa1\x17\x4c\x50\x51\x18\x9a\x57\xf9\x85\x51\xba\x0f\x57\x9f\x79\xac\x68\x8f\x42\x66\xfa\x92\x4d\xd4\xc2\x07\x10\xbe\x28\xcc\xe4\xbd\x5b\xca\x76\x4c\x23\x9e\xff\xcb\xdb\x9b\x00\xb6\x51\x9c\x7d\xe3\x3b\xb3\x97\xce\x95\xb4\xab\xcb\x92\x2d\xeb\xb0\x24\xc7\x67\x6c\x59\x92\x6f\x2b\xb1\x73\x38\x71\x12\xe7\x4e\xc8\x65\x72\x3a\x0e\x90\x9b\x40\x42\x82\x08\xa1\x90\x70\x85\x00\xe1\x26\xe6\x2a\xd0\x90\x42\xb9\x79\x09\xad\xda\x02\xa5\xdc\xe1\x85\x52\x5a\x68\x4d\x4b\x79\x0b\x2d\x47\xdb\x97\x02\xb1\xb5\xf9\xcf\xcc\xae\x0e\x1f\x21\xbc\xef\xff\xfb\x3e\x88\xb5\xb3\xbb\xb3\xbb\x33\xb3\xb3\x33\xcf\x33\xcf\xf3\xfc\x7e\x78\xa4\x68\x03\xe0\x34\x5b\xe6\x87\x20\xb8\x41\xfe\x3d\x2c\x13\x4f\x9e\x14\x63\xe2\x8b\xa2\xc8\x72\x78\x7b\xf2\x95\x95\x2b\x3d\x1e\xf4\x07\x2e\x7a\xfe\xf9\xe6\x66\xf4\x47\xff\x41\x3d\x92\xbe\x53\x4d\xd0\xcf\x92\x6b\xdf\x89\xe1\x6b\xd1\xa5\x31\x7c\xad\xf8\xe2\x75\xe4\xa4\x67\xa5\x3c\x44\xae\x6b\x7e\x3e\xbd\x5c\x3d\x02\x3d\x6a\x82\xac\x3d\x24\xb2\xf2\xbf\x99\x72\x52\x33\xf2\x2c\xec\x18\x0b\x1a\xab\x78\xd9\xb0\x1c\x8b\x55\x60\x42\x01\xc5\x21\x82\xfc\x22\x01\x4c\x51\xfc\x90\x20\xd3\x4a\x63\x40\x28\x02\x8f\x11\xc9\x05\x7b\xcb\xaf\x82\xe4\x9d\x46\xed\x2f\xb5\xac\xe2\xda\x0f\xba\x34\x92\xe0\x33\x84\x69\xac\x94\x62\x4d\x36\x41\x87\x0d\x3e\x41\xd2\x20\xc5\x1d\x30\x5a\xc9\xf8\xa2\xd4\xe6\xee\x0f\xb9\x18\xa4\xc9\x28\xb1\x00\x10\x09\x8b\xe8\x7a\x63\xfa\xc7\x64\x97\x49\x0d\x51\x26\x87\xa0\xa5\x01\xc0\xbe\x12\xf8\x0f\x00\x5a\x2b\x38\x4c\x18\xd3\x54\x13\xb3\x57\xbb\xfd\xe8\x26\xae\x94\x02\x20\x90\x93\x61\xa6\x51\x19\x1c\x06\x3c\x10\x61\xd5\x1e\x87\x18\x11\x90\x22\x1a\xc7\xff\x2a\x46\x08\x95\x05\x53\x11\x29\x31\x87\x5e\x54\x8d\x7d\x75\xd0\x9c\x03\xe3\x35\x60\xeb\x0e\x87\x2d\x71\x27\x36\x6e\x68\x92\xb4\x95\xd6\xbe\x96\x0b\x7f\xda\xbb\xe3\x4f\xd7\xac\x7f\xf2\xe2\x25\xe5\xdd\x33\x3c\x1a\x68\x80\x9c\x25\x72\xe2\xc1\x9b\x1e\xdc\xbf\xa1\x65\x9a\xa0\x09\x3a\x62\xb5\xad\x0b\x0a\x56\x59\x98\xd7\xe5\x0c\x7a\xe8\x6c\xb2\x4e\xeb\x5d\x36\xc5\xff\x93\x70\xc3\xfe\x2f\x0f\x6f\x79\x69\x4f\x63\xcf\xee\x1f\xb4\xf7\xde\xe9\x35\x78\xf9\xf1\x9c\xc3\xda\x72\xd6\x4d\xef\xdd\x7b\xe9\x8f\x3e\x5f\xd8\x12\xd8\xbe\xb8\xb8\x76\xe2\x96\xf9\x9d\x35\xf2\xf2\xc9\x1b\x96\x80\x8b\x3e\x39\xa1\x58\x81\x72\x75\xeb\xca\x93\xfb\x33\xb5\x13\x15\x72\x30\xb5\x72\x64\xf0\xfd\xce\xca\x65\xf0\xa6\x94\xf8\xe1\x74\xf9\x7c\x87\xb6\xc2\xb6\xbe\xf9\x89\xbf\x4c\xde\xf5\x64\x5f\xef\x13\xbb\xcf\x2a\x9f\x35\xc3\x68\x63\x74\x2c\x67\xa9\x7d\xe3\xfe\x1b\xef\xbf\xbc\xaf\x19\x57\xce\x1e\xad\x69\x99\xef\x5c\xe9\xb4\x3c\x95\x1f\x63\xbc\x73\x91\xff\xe1\x70\x3d\x08\xff\x69\xde\x1d\x17\x76\x36\xf4\xec\xba\x6c\xe2\xda\xdb\xbd\xac\x4e\xa8\xb0\x38\xa4\xd6\x45\x87\xdf\xb9\xfb\x92\x07\xfe\xbe\xb0\xd9\xbf\x7d\x61\x71\xcd\x84\xcd\x73\xa7\xd6\xc8\x2b\x57\xdf\x9a\x0d\x44\xce\xd9\xb6\xdc\x44\x5e\xc3\xd8\x89\x3e\x5b\x44\x50\xe1\x04\x6a\x1d\x71\x5c\x6a\x33\x16\x74\x82\x91\x68\x20\x8a\x64\x1c\x5b\xc4\x16\x19\x29\xa1\xd2\x37\x72\xf2\xe1\xf7\x68\xf7\xf8\xf9\xb1\x55\x57\x5d\xb5\x6a\x69\x4b\xef\x39\x37\xf6\x0f\x0c\xf4\xdf\xf7\x0a\x58\x7c\xee\xb9\xe7\xa1\xff\x80\x98\x2f\xc3\xc2\x1d\xae\xd0\x3e\x67\x5d\x2c\x70\xcd\x4b\xd7\x34\xad\x59\x8d\x57\x5f\xde\xda\x81\xb3\x9d\x07\x2f\x1b\x26\xdd\xe2\xf9\xef\x1e\x2d\xc5\x2e\x53\xb1\x80\xad\x30\x8f\x14\xdb\xeb\xe0\x89\x2b\xb7\x95\xf4\x30\x3a\xee\x8b\xfa\xec\x41\x1b\x16\xc3\x02\xd1\x48\x34\x62\x63\xef\xf8\xb1\xfc\xd3\x37\x6f\x94\xbf\x7c\x7e\xdb\xb6\xe7\x81\xf9\x46\xe0\x79\xed\x57\xdb\x1f\xde\x75\x62\xe7\xce\x13\xbb\xe6\x5e\x79\x56\x7b\x31\x87\xf4\xaa\xc7\x0d\xf4\xaa\x13\x6f\x9d\x38\xf1\x16\xdc\xf8\xa6\xfc\xec\x53\x38\x23\x28\x03\xe6\xe7\xb7\xa5\x7e\xb6\xf9\xa2\x77\x86\xde\xb9\xa8\x6a\xd2\xa2\x99\x81\xa1\xb6\x36\x9c\xe7\xc4\x89\xec\x1a\x22\xc6\x68\x30\x50\x85\x54\x05\xd1\x04\x09\x75\x29\xef\x88\xe1\x20\xa3\x12\x24\xea\xf9\xab\x60\x5d\x2b\xac\x45\x3a\x85\x45\xf9\x82\x71\xd8\x8e\xcd\x57\x37\x6a\x44\xc7\xd1\xf3\xc9\x2d\x37\xcc\x28\x33\xe2\x75\xc5\xb2\x19\x7b\x0e\xef\x99\x51\xa6\x6c\x60\x59\xdf\xe1\xc1\x24\xfe\xee\x98\xe4\xe1\x4f\x43\xae\x6f\xc9\x8a\x03\x8f\x01\x85\x93\x3d\x20\xb5\xbf\x3b\x68\x95\x07\x3e\xbe\xea\xe0\x45\x33\x67\x5e\x74\x50\xd9\xc8\x65\x90\xc2\x17\xc8\xe4\x97\x4e\xe4\xf8\x82\x42\x2a\xd6\x00\x83\xf4\x1b\xca\x98\x89\x92\x21\x78\x06\xa8\x18\x0c\x25\xc9\x09\x8c\xd6\x99\x90\x08\x59\x12\x7d\x16\x49\x4b\x20\x25\xd5\x65\x70\x1e\x90\xda\x48\xd1\x09\xe5\x5a\x52\x05\x15\x01\x01\x03\x90\x0c\x11\xcc\x81\x14\xc6\x1c\x48\x01\xe2\x2b\x21\x29\x0e\xf9\xca\xb5\x09\x2a\x09\x31\x42\x80\x31\xcb\xac\xab\x42\x1b\x60\xcd\x3e\xf7\x20\x26\x91\x7f\x1f\x29\xc3\xa7\x9c\x84\x09\x26\xaf\xcc\x0a\x90\xa0\x03\xc0\x04\x29\xb3\xf2\x2c\x1c\x7e\x93\x29\x7c\x48\x7d\xee\xf0\xd8\x9a\x22\x8a\x8a\xf8\x88\x6f\x64\x10\xf3\x41\x8e\x9e\x5b\xfb\x61\x4f\x3a\x29\xb1\xe7\xa6\x93\xb0\x47\xa1\xce\xce\xce\x77\x4c\x72\xb0\xdf\x28\x79\x99\x9e\xc1\xa4\xc4\xbc\x96\xcf\x43\x82\xfb\x67\x8a\x51\xb0\xe7\xdc\x23\x5b\x55\x1c\xd1\x4e\xc3\xdb\x38\x34\xa2\xd9\x7e\x97\xd7\x12\x63\xb4\x21\x79\x0e\x7a\xdc\x19\xdf\xdd\xb0\x1b\xa9\xd7\xd2\x94\x5a\xc6\x33\xbc\x3b\x7a\xe4\x73\x73\xf1\xc4\x2e\x8c\x46\x92\xfb\xee\xed\x0e\xc6\xe1\x81\x4d\x90\xd8\xbe\x83\x31\x0c\x1d\x46\xf1\x02\x53\x0e\x49\x60\x41\x09\xb1\xe2\xaa\x34\x51\xca\x42\x79\x45\x03\xe8\xbb\xbc\x61\xca\xf9\x11\x00\x22\xe7\x4f\x69\xf8\x11\x98\xda\x50\xbe\xb2\x53\xbe\x62\xa9\x6e\x42\x79\x4b\xcc\x81\xa6\xe7\x58\x4b\xf9\x04\xdd\x12\xf9\x47\xfe\xd6\xf3\xe6\xce\x60\x53\x13\x56\xd0\x8d\x43\x1f\x13\x2f\x7c\x57\x4d\xe8\xdf\xab\xca\xaa\x6b\x6a\xaa\xcb\x76\xfd\x21\x0c\x16\xcc\x3a\x18\x91\x07\x13\x7c\x75\x51\x89\x28\x96\x14\x55\xf3\x89\xcf\x9c\x65\xd7\xb7\xcd\xec\x5d\x4e\xde\xf9\x23\x68\x3c\x3b\x87\xc4\xfd\x95\xab\xf8\x16\x76\xc5\x55\x17\x7b\x13\x92\x15\x7d\x85\xa2\xde\x66\xf1\x89\xe6\x6a\xe0\xb3\x05\x48\x88\x25\x58\x26\x3f\x09\x56\x80\x75\xf3\xe0\x9c\xd5\xeb\x7e\xb8\x9a\xb9\x56\x7e\x6a\xf6\x82\xb6\xf9\x36\xbd\xfc\x14\x12\xfb\x41\x27\xb4\x96\x4d\x59\xd7\x76\xf4\x4d\xfa\xda\x21\x1f\xfd\x47\x50\xdb\xb9\x72\x65\xe7\xb4\xb3\xcf\x1e\xfa\x20\xfd\x12\x14\xd7\xef\x98\x14\xf1\x44\xd2\xef\x82\x6b\xc1\x97\xe3\xc7\x1f\xf4\x8e\xaf\x2f\xfe\x73\xe6\xbd\x29\xe3\x6b\x1d\x99\x13\x71\x38\x76\x49\x38\x84\xc3\xff\x23\x78\xd5\x0d\xfb\xf4\x90\xb9\x83\xe3\x47\x2c\xf3\x63\x80\x3f\x06\xa9\xe6\x3b\x5f\x97\x3f\xba\xfd\x21\xf9\xe5\x73\x79\xa0\xd9\xaf\x33\x99\xf9\xce\xb7\x77\xf4\x3e\x77\x60\xf6\xec\x03\xcf\xf5\xae\x7c\x7c\xf2\xfe\xbc\x95\xf9\xbd\x1b\x80\x74\xfd\xed\xa0\xf0\x75\xba\x50\x7e\x49\xfe\xe8\xf5\x9d\xd7\xed\xd3\x15\x68\x0e\x68\xa1\x6e\x45\x2f\xca\xfe\x26\xba\x6a\xca\xc4\x03\x79\x2b\xf7\x97\xac\xd9\xb8\xf3\x75\x54\xc6\xd2\x53\x36\xee\x6f\xec\x6f\xb1\x4f\x9b\x6f\x18\x68\x2d\x0e\x4e\xf5\x70\x38\xde\x97\x55\x8f\xb5\x32\x24\x1c\x9a\x75\xa8\x5d\xa8\x8a\xc3\xc8\x01\xac\xba\x76\x24\x30\x24\xb4\x84\x0d\x63\xec\xdb\x0c\x16\xec\xdf\x82\x1b\x08\xef\xee\x8d\xa1\xf2\x53\xd4\x1e\xa1\x54\x80\x36\xc6\xcc\x68\xe8\x42\xda\xad\x77\x89\x2e\x63\x69\xa1\xdc\x5b\xa8\xd5\xda\xf5\x1e\xda\x13\xd2\x99\x2d\x3a\x0b\x67\x85\x82\x00\x96\x8e\x95\x15\xdc\x3c\x46\xd6\x3d\x80\x2a\xc7\xab\x54\x1b\x82\xd1\xe0\x39\xc1\x20\xc0\x96\xb1\x72\x80\x9e\x25\x40\x2b\x87\x32\x99\x75\x21\x74\x81\xde\xae\xd5\x92\x95\x32\x23\xba\x95\xde\x8d\x6e\xaa\x41\x37\xb7\x41\xf4\x18\xf4\xac\xd1\x59\x51\xa9\xc6\xc8\xba\xe7\x14\x55\x8e\xea\x12\xce\x61\x78\x28\xfe\xc4\x98\xbd\x15\x5b\x36\xa6\xe7\x62\xab\xb3\xc2\x9c\x14\xab\x02\x38\x8a\x9d\xf8\x7b\x60\x2e\xe1\x92\x11\x39\x32\x1e\x71\xc0\xcc\x2b\x76\x1f\x4b\x86\xf9\x1d\x24\x09\x0b\x32\xd0\x2b\x9b\xaf\xd7\x70\xee\xda\x2a\x7e\x4d\xf3\x72\xb3\xb5\xfb\xd6\x03\x56\x73\x05\x5c\x49\xce\xa4\x5f\x21\x1b\xa8\xe6\xbb\xf2\x6a\x29\x70\xf2\x07\x01\xe9\x6a\x8c\x66\x05\xce\x01\x5d\x5f\x5e\x03\xc8\x99\xe9\x50\xa5\x47\x3e\x02\xf6\xb8\x2a\x05\xb7\x4b\xde\xcb\xce\x68\x9e\x71\xa0\xb4\x7b\x46\xf3\x16\x41\xc9\xf1\x0a\xd9\x6c\x57\xf2\xa5\xe4\xc1\x3f\x14\x15\x7d\x00\xb8\x27\xf1\x4d\xae\xf9\x52\x7e\x3c\x33\x2e\x28\x98\x5b\x76\x3c\xff\x51\x48\x50\x43\xb2\x0f\x86\xa4\xe7\x63\x0a\x1a\x7d\x49\xcc\x1c\x62\x72\x60\x5c\x18\x7e\x60\x38\x1a\x17\x01\x89\xee\x92\x7b\xe5\x3b\x4e\x5c\xbb\x77\xa1\xdb\x59\x75\xf3\xae\xf2\x86\x49\x2d\xaf\x82\x55\x27\x4e\x80\xd9\x79\x18\x5d\xac\xc9\x39\x0a\xa4\xeb\x4b\x70\x3b\xf8\x2b\xb8\x9d\x49\x5e\xf9\xf7\xfd\x9b\x5e\x99\x56\xdb\xb3\x64\x76\xdb\x39\x21\x4e\x73\xe5\xdf\x81\xf8\xf7\x5f\xe5\x80\xbb\x6c\x96\x31\x70\xbb\x7e\x0c\xc2\x47\x8f\xe6\xd6\x20\x70\xec\x46\x23\xb5\x3a\xbf\x16\xd9\x3a\xd4\x85\xf0\x5b\xf8\x0e\x14\x05\xf0\xdd\xf8\x09\x48\xfc\xa3\x17\xcb\xaf\xcb\xff\xbe\xa3\xaf\xe7\xec\x80\xbf\xb0\x22\x3a\x73\xfa\x2d\x40\x77\xc7\x1d\xe9\x3b\x31\x6e\xc2\xf1\x33\xa0\x2b\xb0\x8d\xdf\x0b\x55\xe1\x1a\x26\xd9\xfb\xe8\xda\x39\x37\xd7\xd7\xcf\xb3\x4a\xc5\x3a\xa1\xf7\xd1\x57\x1f\xfd\xeb\xfe\xbf\x9f\x01\x6a\x61\xf0\x9b\x33\xa3\x2c\xec\xba\xe0\x04\x1a\x1f\xc0\x29\x8a\xbe\x08\x8d\x61\x3e\xc5\x0e\xab\x18\x20\xe2\x12\xab\x18\x27\x54\x67\x78\x34\x4a\xd0\x41\x1c\xf0\xb2\x5d\xd4\xa7\x3f\x32\x16\x31\x3a\x8b\x85\x79\x41\xee\x63\x34\xa2\x51\x64\x7f\xcd\x38\xcd\x60\xaa\xe4\x62\x8f\x82\xab\x34\x8c\x44\xbf\x6c\x75\x0e\xee\x2a\x80\x6c\xa1\x99\x2e\x5d\x03\xf4\x26\x27\xdd\x20\x88\x05\x16\x8d\x4e\xae\x59\x09\xf3\xb9\x3f\xe6\x0f\x5f\x0f\x45\x4a\x0f\x92\x4f\x47\x92\x23\x8f\x79\x8c\x18\x6e\x03\xb9\x09\x5e\xc1\xf3\xb1\xf9\x54\x14\x41\x9e\xaa\x2f\x55\x42\x0a\x7b\x64\x8a\xac\xc8\x8e\xb9\xd7\x55\x07\x95\x7d\x12\x78\x58\xda\x03\x31\x72\x5f\x69\x7d\x7e\x38\x62\x2a\x95\xc9\x3d\xc6\x5e\x5d\x57\x2a\x73\x2d\x3e\x9a\xea\xaa\x4b\xd5\xe7\x64\x93\x14\xd2\x66\x67\x51\x8b\x55\xb9\x28\xe3\xf0\x8e\x91\x73\x2c\xb1\x5a\x65\x95\x11\xab\x4d\x5c\xc6\x14\x84\xbd\xc9\xc0\x88\x5d\x32\x99\x29\xb8\x04\x31\x0a\xcf\x1a\xd8\x24\x04\x6c\x21\x3f\x4f\x6e\x47\x27\x6f\x7e\xf3\xe6\x50\x5d\x68\xe6\xea\x99\xbe\x56\xda\x27\x19\xf5\x86\x9a\x45\x8d\x1d\x17\x94\xf3\x36\x46\x6f\x11\xf5\x8c\x8d\x2f\xdf\x71\xc5\x0e\xb2\x2b\x5a\xc8\xee\x05\x1d\x8d\x8b\x6a\x0c\x7a\xa3\x04\x2a\xa9\x53\x60\xfe\x4f\xaf\x02\xc6\x81\xfb\x7c\x20\x4d\x95\x55\x94\x61\xdf\xdf\xe7\xd3\xc7\x7b\x6f\xbe\xb9\x17\x8b\x30\xb5\x33\x67\xd6\xc2\x0e\x7d\xc8\x28\xe9\xaa\xaa\xa6\x35\xeb\x4a\x38\x8b\x85\x2b\xd1\x35\x4f\xcb\x4f\x57\x55\xe9\x24\x23\x0b\x9f\x02\x96\x2b\xba\xaf\xff\xf3\x01\x08\xdf\x5a\x09\xe1\x4a\x2c\x94\x32\x59\xbb\x8a\x06\x69\xc4\x6e\xac\x81\xb0\x3e\xc5\x96\xe2\x1b\xb5\x58\xe2\xcb\xc6\x70\xb7\x0c\x27\x45\x21\xab\xf7\x34\x92\x6c\xf1\xba\xbb\x9c\xc4\xec\x8c\x69\xb2\x9a\x09\x53\xa8\x0e\x14\x28\x97\xdf\x81\x54\xce\xd8\x52\x5f\xca\xa0\x94\xcd\x84\xe7\x82\x24\x5e\xca\x07\xfd\xc0\x9b\xc5\x8a\x4d\x9f\x8b\xf2\xcf\x4f\x93\x77\xde\xaf\x2c\xd3\x63\xd3\x8a\xd1\x84\xe6\x83\x9e\xac\x5c\x49\xb8\x60\xcc\x54\x29\xb5\x94\xd8\x26\x49\x58\xb9\xaa\x33\xa1\xe6\x57\xa3\x1a\xac\x0a\x53\x76\x24\x46\xf4\xdd\xb8\x15\x7b\xb8\x65\xa1\x31\xb0\x66\x48\x02\xb6\xc8\x9b\xcb\xfc\x61\x77\xf2\x28\x51\x1d\x20\x1c\x90\x5c\xd2\x39\x75\xb8\x5c\xb5\xab\xa6\xf7\x4f\xda\x78\xf9\x81\xcb\x37\x4e\xea\xd0\x8d\xd3\x25\x8d\x1f\x19\x93\x68\xdb\x91\x5c\x57\xd9\xd4\xcc\x54\x17\x14\x54\x1a\xdb\xaa\xac\xdd\xcb\xbb\xad\x55\x6d\xc6\xca\x82\x82\x6a\xa6\xb9\xa9\x72\xdd\xe2\xeb\x9e\xfa\xe9\x53\xd7\x2d\xa6\xc9\xca\x6b\x55\x2d\xba\x9b\xb7\xab\x6e\xea\x45\xb3\x2a\x2b\x67\x5d\x34\x75\xcd\x2c\x7d\x85\xfe\x96\xeb\xae\xbb\x05\x6d\x66\xad\xb9\x6d\x73\x4d\xd7\xd6\xda\xc2\x58\xd0\xed\x0e\xd6\x15\x39\x9c\x55\xb5\x15\x75\x75\x15\xb5\x55\x4e\x47\x51\x1d\x3e\x16\x2b\xac\xdd\xda\x55\xb3\xf9\xb6\x55\x47\x37\x4f\x98\xb0\xf9\x28\x19\xff\x15\xec\x59\x17\x89\x41\x21\xcb\xd4\x39\xdb\x90\xc2\x23\x49\xdc\x25\xcc\x79\xb8\x94\xa1\x5c\xa0\xba\x02\x67\x66\x3c\xd9\x2f\x19\x0d\x06\xf9\xe7\x5a\x2d\x48\x10\xaa\xc8\x1e\x4c\x86\x48\x50\x26\x4f\xf6\x13\x94\xdf\x1e\x05\x45\x12\xf4\xa0\x5a\xa0\x7f\x3a\x94\x0f\x33\x2e\x26\x30\x42\xa4\x04\x7d\x19\xb0\x48\xb2\xb4\x9c\x85\x84\xcc\x60\x04\x12\x6e\xa2\x28\x89\x01\x2e\xcf\x59\x80\x32\xb6\x2c\x4c\x10\xc8\x7e\x87\x5d\x99\xa5\x44\x61\x80\xdc\x78\x00\x93\x51\xf6\x60\x32\xca\x15\x3a\x98\xb1\x36\x5f\x75\x3e\xb6\x36\xdf\x0e\xe8\xa6\x29\x2b\xfa\x0e\x8f\xdb\x7b\x3f\xec\x11\x44\xd0\x43\xec\x3c\xfd\x84\x01\xb3\x1f\x55\x6b\x85\xe1\x6d\x62\x83\xde\xfb\x7e\xdc\x63\x7c\x1b\x54\xfc\xf8\x60\xeb\xe1\xbe\xae\xd6\xe2\x13\xa3\xcb\x18\x26\x8e\xcb\x0a\x3e\x45\xd6\x0f\x37\xa2\x22\x42\x9c\xb6\x8c\xf8\x31\xa8\x15\xee\xd2\xe5\x15\xf6\x3b\xca\xd8\x2f\xe0\x9a\xa0\xfc\x06\x83\x20\xca\xa4\x8d\x41\x8f\x24\x7f\x76\x9a\x42\x66\xfa\xbb\x1a\xff\xb5\x88\xea\xc9\x59\x74\xd8\xac\xaf\x06\x1d\x47\x5f\x29\x01\x29\x50\x40\x09\x70\x14\xa6\x37\x8e\x3a\x00\xfe\x7a\x33\x68\x66\x61\x32\x1c\x0d\xdb\x0f\x85\xeb\xb0\x0f\xa6\x87\xc9\x3a\x76\x28\xa6\x5e\x26\xa4\xb8\x6d\xe8\x83\x8d\xbd\x1d\xf6\xc6\xc9\x9b\xfa\x37\x4d\x69\x28\xd8\x07\x26\xef\x2b\xe8\x3b\xec\xad\xef\xae\xf7\x76\xf5\x76\x91\xed\xa4\x26\x00\x18\x9d\xa6\xa3\xb7\x31\xa8\x97\x53\xaa\x1b\xc7\xef\x88\x09\x7b\xf7\x85\x07\x0e\x5c\xd8\xb1\xe7\xf0\xd6\x25\xa6\xba\x8e\x57\xac\xab\x5b\xba\x37\x6d\xea\x6e\x59\x6d\x7d\xa5\xb5\xb8\xb7\xb7\xb8\x35\x71\xb8\x6f\x71\x51\x19\xfe\xb8\xcb\x8a\x16\x63\xbc\x8c\xdc\x5e\xc7\x0e\xbf\x6e\x42\x71\x5d\x99\x64\x5a\xb2\xf5\xf0\x1e\xfa\xb7\xaa\x43\x47\x36\xb6\x5c\x69\x8b\x19\x39\x49\x2f\x8e\xd4\x1f\x8b\x95\xf1\x96\x60\xc2\x12\x95\x62\x94\x98\x7d\xc8\x17\x81\xde\xa5\x37\xa6\xf8\xe2\x93\x35\x21\xe5\xed\xe1\x70\x61\x9b\x72\x86\x48\x12\xb5\xd9\xb0\x85\x29\x0d\x0a\x7c\xf4\xbd\xef\x87\x5c\x9c\xce\xd2\x1c\xc0\x6e\xef\xbe\xe2\xe3\x40\x73\xbc\xd8\x87\xd3\x81\x66\x8b\x8e\x73\x85\xde\xbf\x17\x1f\x6a\x98\x82\x5a\x87\x56\x9c\x0e\x12\xad\x2b\x6d\xf2\xf6\x23\x1f\x7e\x78\x64\x9f\xf5\xb7\x07\x09\xa4\x86\xa7\x04\x49\x71\xa2\x7c\x1e\x59\xbd\x3b\x24\xa2\x9d\x12\x0f\xc4\xfc\x60\x07\x7f\x6b\xdd\x47\x0e\x5e\x69\x5b\xd9\x8a\x9a\x46\xe5\xfa\x54\xec\xaa\x58\x9b\x0d\x2a\xbe\x51\x6c\x0e\x1e\x1d\xe9\x4e\x91\xac\x2b\x94\x8a\xa1\x1e\xc9\x78\x44\xc9\xfd\x04\xd5\x91\xe9\x1f\xa2\x92\x8a\x0b\x14\xa4\xf6\x2d\x4d\xa0\x83\x4c\x12\x83\xc6\xed\x5b\x4a\xa3\xf4\x20\x92\xb7\x14\xcf\xa7\x81\xa1\xd4\xd2\x7d\x2c\xb5\x0f\xb5\x69\x2e\x46\x2c\x32\x22\x42\xec\xfb\x47\x85\xd1\x89\xef\x19\x08\xf6\xbd\x02\xbf\x14\xd9\x30\xa1\xca\xf6\x7e\xf2\xa6\x49\x65\x81\x4f\xe9\xf4\xa8\xc3\x96\x8f\xe0\x5b\xe5\x92\x9b\xba\x13\x89\xee\x6f\xbf\xe4\xa9\xc3\x7d\x83\x54\xdf\x61\x3e\xf1\xe1\x91\xc4\xbe\xa5\x18\xed\x12\x2f\xc2\x1c\xa1\xc7\xf7\x6f\x92\x93\xe9\x14\x7a\x3e\xa3\x45\x7d\xca\x8b\xdb\x0b\x0e\x60\x76\xae\x1c\x16\x7a\x25\x35\x51\x91\x06\xf8\x6c\x84\xa9\xd2\xa5\x48\x97\xb1\x2b\xd8\x2b\xc3\xd3\x6c\x36\x67\x9e\xb4\x03\x93\x53\x1a\x08\xf0\x7f\xc3\x94\x7c\x18\x05\x1c\xc5\x42\x91\xe3\x68\x98\x38\xbe\x0f\xbb\xda\xb1\xa9\x74\x12\x7d\x16\x43\x5f\xe1\x8f\x80\xd6\xa3\x0f\x05\x2a\xf0\xb0\x3d\xc4\x19\xaf\x7f\x64\xfa\x5b\xc2\x99\x01\xd1\xe8\x4d\x7b\xf7\x1d\x57\xec\xbe\x4a\xfc\x8a\x84\x66\x03\x05\x03\x77\x2e\x61\x34\xb0\x8d\x34\xb2\xf3\x16\x1f\xe6\x44\x05\xea\x0c\x6f\xc9\x01\xe4\x2a\xf9\xd8\x11\x56\xc0\x91\x56\x41\xf6\x38\xf6\x73\x50\x2d\xef\xc9\xd2\x9e\xc2\x7d\xe0\x02\x9d\x41\xfe\x95\x01\xac\x22\xee\x0d\x14\x06\x1d\xce\x40\xce\x08\x22\x1c\xc8\xa4\xf2\x8f\x8a\x02\xb3\xaf\xb0\xa7\x74\x30\x89\xef\xc2\x11\x2b\x7c\x87\x7c\x45\x91\x01\x34\x18\x4e\x8a\x0c\x85\xc5\x81\x93\x14\xdd\x93\x31\x1a\x09\xfd\x39\xeb\xde\x29\x2a\x97\xc6\x11\xdf\x59\xfc\xfa\xd1\xb6\xa4\x87\xa9\x9f\x51\x6f\x50\x7f\xa4\xbe\x40\x12\x94\x09\x14\x83\x4a\xd0\x32\x9a\xb7\x3a\x3a\x62\x9f\x1d\xb1\x3f\x32\xff\x48\xde\xea\x91\xe7\xcf\xb4\xff\xff\xfa\xfa\x33\xe5\x1f\x59\x5f\x8c\x08\x6e\xc9\x78\x5b\x8e\xc2\x62\xc2\xbc\xd2\x59\x31\x2d\x87\xd7\x4d\xe5\xd2\xa7\xf2\xd2\xf4\x69\x8e\x9f\x2e\xfd\x7f\x23\x3f\x3c\xcd\xf1\xe1\x65\xc6\xf8\xa9\xb8\x6e\x04\x18\x8b\xca\x67\x7f\x1f\xc8\xd6\xf4\x5f\xa3\x2b\x9e\x77\x2c\xfd\xaf\x31\x0e\x8e\x95\xfa\x3f\x95\x51\x1e\xeb\x60\xee\xe7\xe4\xf5\x18\x74\x74\x40\x11\xe0\xf2\xdc\x81\xf1\x0a\xe4\x77\x7c\x33\x4f\x51\xbf\xa7\xbe\xfa\x7f\xff\x95\xfc\x6f\x7a\x69\xd6\x2f\x23\xaf\xbf\x16\x80\x0c\xdf\x40\x20\x3a\xdc\xdb\xa8\x05\x44\x6c\xa3\xf1\xed\x23\xbe\xac\x06\xf3\x7f\xa5\x77\x7f\xdf\xde\x77\x0a\x6b\xc2\x68\x1c\xc4\x69\xa5\x17\x92\x53\x79\xe5\x49\xaa\xf7\xcb\xf4\x4d\x90\x40\xa3\x24\xe6\xc1\x49\xfc\x1f\xeb\xa3\x67\xe8\x51\x43\xd7\x33\x49\x2f\x1e\xb0\xbd\x83\x49\xd2\xaf\xe8\x94\x52\xd0\x9e\x9e\xac\x63\x95\x92\xae\xcc\x7d\x3e\x80\x5c\x21\x0f\x84\x90\xd0\x91\xc8\xf2\x98\x63\xdb\x6b\x33\x46\x06\xca\xb7\xbe\x12\x08\xd7\x8c\x38\x27\x91\xd7\x97\x65\x8f\x08\x64\x28\x24\x6c\xd9\xb7\x59\x1b\x53\x00\x20\x86\x19\x68\x43\xc4\x3a\x1b\x53\x6c\xb3\xd9\x69\x98\x2c\xbb\xc9\xaf\x80\xe4\x9d\x82\xe6\x97\x3c\x64\x29\x72\xe0\x15\x24\xad\x13\x53\xb7\x82\x9d\x9f\x49\x62\xae\xca\x54\xc6\x5e\x4b\xbe\x1b\x97\xf4\xa2\x94\x70\xf5\x2b\x56\x1c\x75\x09\x0f\x69\xb8\x90\xff\xa5\x41\x97\x3e\x46\xf6\x69\xef\xa8\xfb\xe0\x24\xac\xc2\xe6\x9f\x8c\xe5\x16\xfb\x74\xf6\xbb\x12\xe8\x6e\xc4\x5f\x3d\x94\xc1\x96\x50\x70\xeb\xc3\x54\x0d\xfa\x16\x3b\x95\x28\xca\x33\x56\xfd\x7b\x49\x85\x44\x7b\x1a\xa3\x8a\x69\x45\x5a\x4c\x12\xe9\x87\x49\x0d\xa6\xfa\x73\xd2\xa2\x17\x1d\x04\xfd\x63\xd7\xe6\xf3\xef\x14\x22\x33\xf8\x1c\x04\x17\x1e\x5b\x2a\x38\x23\xe0\x03\x8a\x08\x5e\x4e\x47\x23\x96\x00\x1f\x08\x63\xab\x60\x34\x1c\x8d\x63\x43\x66\x34\x1e\x71\xa0\xa3\xd1\x26\xa8\xf8\xfa\x82\x88\x83\x45\xda\x3a\x9f\x04\xf2\x87\x72\xff\x40\x42\xfe\xfd\x24\xdc\xfc\x3d\xfd\x89\x44\x7f\xaa\xc7\xeb\x4d\xa6\x52\x49\xaf\xb7\x27\x85\xf7\x89\x30\x34\x09\x04\x13\x03\xa0\x27\x79\x50\x03\x13\x5e\xf4\x3f\x52\xc3\x04\xad\x17\xf4\x0f\x78\x53\x5e\x8d\x33\xe9\xd4\xa0\xed\x00\xe8\xf7\x6a\xb1\x22\x98\xf0\x16\x8e\xd7\x11\xfd\x21\xa1\xfa\x9f\x70\xa8\x17\x12\xeb\x04\x16\x73\x6d\xbe\x68\x9c\xb4\x67\x38\xee\x8b\xfb\x90\x98\x84\xf1\xb6\xa7\x47\x19\x34\x31\x24\x93\x47\x3e\x4c\x78\xc1\x80\x97\x4e\x79\x13\x38\xde\xe2\x14\x15\x9d\x2e\x27\x52\xa9\xd4\x87\x47\x40\x22\x91\x4c\xa6\xbc\x43\x03\xc3\x38\x53\x31\xf3\x49\x8e\x2e\x75\x84\xdf\xa3\x02\x0f\x42\xf0\x0f\x47\xe1\x00\x11\x3f\x3e\x99\xca\xf1\xd6\xc2\x0c\x73\x6a\xbe\xed\x36\xa5\xd8\xae\x30\x05\x46\xc6\x86\x85\x07\x04\x19\x7b\x01\xd0\xff\x31\xc2\x37\x71\x44\xb9\xbe\x0f\x97\xeb\x58\xe5\x92\x53\x4a\xd9\x52\xca\xb3\x94\x52\x25\x46\x96\x4c\x21\x73\x4d\x28\xa5\x1b\x7e\x01\x6c\x1c\x5e\x30\x88\xe4\xec\x19\xf4\xbf\x98\x08\x92\xe2\xc6\x61\x8d\x76\x24\x17\x2e\xaf\x05\xcc\x58\x07\xe1\x56\x5d\xad\xce\xa5\x93\xab\x74\x3a\xf0\x16\x4a\xd4\xea\x74\xf2\x0e\xb0\x1f\x1c\x18\xf3\xf0\x31\x92\x22\x47\xd0\x8f\x92\x65\x87\xbc\x43\x37\xf6\x61\x52\x2e\x23\x2a\xd7\x7f\x66\xca\x45\xe5\x7c\x5b\x72\x9c\xba\xcc\x58\x07\xe1\x5c\xfc\x70\xe5\xbe\xfb\xd1\x13\xc8\x4d\xc1\x5b\xa8\x5c\x63\x1d\x86\x33\x94\xb2\x92\xbd\xfd\x60\xbf\x5a\xe2\x2a\xdd\xd8\x87\x71\xb9\x66\x50\x57\x33\x11\x66\xee\xb0\xf6\x1a\xce\x0f\x21\x8e\x75\x90\x89\x9c\xa9\xd6\xc3\x0e\x7f\x36\xaa\xa8\xf8\xf9\xe0\xfc\x31\x0f\x53\x4a\xb9\x8e\xa1\x72\x6d\xcd\x6f\xaf\x11\x1c\x13\xe2\x58\x07\x51\xb9\x4e\x5b\xdd\x31\x0e\xc3\x63\xa3\x5f\x2e\xca\x81\x0b\x36\xc6\x61\x3c\x16\xa1\xfe\x05\xb7\x92\xf7\x88\x4b\xa5\x05\x23\xe9\x96\x51\x47\x52\x73\x0f\xeb\x37\xf4\x67\x63\x37\x16\x19\xdf\x50\xdf\x80\x73\xb3\xf7\xfc\xde\x9d\xe0\x74\x6f\x9b\xdc\x73\x06\x30\x32\x11\x7a\xae\x72\xcf\xff\xc1\x0b\x04\xe7\x9e\xee\x9d\xe0\x7b\x56\xa2\x7b\x6e\xcd\x95\xf3\x7b\x36\x3e\x5d\x79\x9a\xe6\x54\xed\xd0\x8a\xdc\x58\xad\xe0\xa5\xe6\xa3\xf4\x28\xb6\x7c\xab\x27\xab\x91\xd7\xb5\x82\x68\xde\x18\x82\x97\x1a\xbf\x25\x22\x02\x97\x20\xb6\xfd\xf4\x80\xd7\xab\x90\xa4\x7b\xbd\x69\x02\x91\xc4\xe1\x60\x2e\x2f\x4d\x64\x8a\x21\x9c\x95\x9e\x81\x5d\xd0\x82\xb3\x5b\x8c\x78\x0c\x11\x9a\xbb\x43\x39\x77\xb4\x3c\x1f\x10\x13\x89\x58\xc7\x63\xdb\x70\x4b\x43\x00\xe4\x61\xcf\xe1\xb2\x62\x11\x50\x95\x19\x23\x6c\x6d\x1d\x1a\x01\xad\x11\xd0\x9f\x75\x72\x9b\x38\xd8\x2f\x19\x19\xf2\xf8\xc1\x14\x5e\x08\xed\x57\x60\x9b\xfa\xe9\x4d\x66\x73\xbf\xd9\x0c\x28\x05\x3d\x54\x41\xbf\xa5\x7b\x72\x0b\xdc\xd2\xd0\x5c\xb2\x58\xdd\x83\x66\xa9\xac\x3f\x38\xa3\xc8\x3a\x0e\x34\xb3\x67\xe5\x9c\xe0\x98\xad\x96\xbf\x64\xa0\xe0\x3c\xfc\x50\x6d\x01\x23\xad\x34\x56\x0e\x0b\x6f\x2d\x59\x40\x18\x50\x56\x94\x87\x70\x09\xe8\xd7\x86\x39\xea\x31\x4a\x01\xc8\xba\x89\x43\xf1\x46\x3f\xdd\xd3\x21\x69\x82\x26\x30\x92\xc2\x00\xbc\x49\x00\x91\xa8\x53\x48\xaa\xa3\x48\x1d\xd1\x6f\x0a\x37\x41\x3f\x18\xdf\x55\x27\x53\xca\xea\x43\x5d\xd7\x0a\x05\x37\x89\x34\x81\xb2\xde\x4f\xcf\xf0\x7a\xbd\x43\x24\x03\x83\x7f\xf3\xe7\x1f\x3d\x2a\x0f\x45\xa9\x4c\xb5\xad\x40\x31\x4e\x66\x59\x9e\x6f\xc8\x92\xd2\x1e\x3a\x34\x8a\x96\x96\xe9\xcf\x23\xad\x7d\x6e\x2c\xac\x07\x75\x4e\xf7\x11\xf6\x9f\x5c\x7d\x5a\x61\x13\xc8\x10\x1d\x67\x69\xc8\xf2\xe9\x7e\xc6\xce\x40\x53\x9b\xba\xe5\x64\xf7\x26\x6c\xe2\x27\xb3\x59\xa2\xef\x70\x7d\xe9\x40\xf7\x26\x3a\x79\x9a\x13\x30\x81\x0f\x6f\xea\x86\x29\xec\x1a\x40\xa6\xbe\xc3\x7d\x48\xf8\x55\xb2\x8f\x71\x9c\x1a\xb3\xdc\x02\xcc\x53\x73\x90\xac\x47\xe6\xe9\x7c\x9a\xa2\xef\xce\x40\x53\xa3\x0a\xb6\xa9\x1b\x24\x71\xb9\x4f\x73\x82\x49\xa5\x13\x23\x4b\x0c\x48\x89\x4f\x73\x1c\x17\x59\x83\x64\xf9\x04\x59\x2f\xd4\x52\x16\x82\x8a\x86\xbf\xbf\x26\x35\xd6\x40\xc1\xd1\xa9\xcd\x46\x0c\x66\xa2\x0b\xac\xca\xf2\x6b\x2e\xde\x60\xec\x1c\x8a\xd7\x1e\x14\xa6\x47\xeb\xba\xa6\xf7\xc1\x16\xc5\xb8\x7e\x25\xd9\x30\x69\x42\x15\xd0\x37\x7d\xa8\x79\xf9\xbe\xe5\xcb\xf7\x31\x5f\xaa\xa6\x77\x05\xd0\x6c\xef\xbe\xa5\x98\xf5\x71\xe9\xbe\x5f\xf6\x4d\xc7\x19\xe5\xff\x52\xa4\x75\xc5\x90\x9e\xbe\x06\xdf\x70\xfa\x74\xfa\x1f\xf8\xd2\xe5\xe9\x7b\x94\x93\x4a\x48\x82\xbc\x45\xb9\x32\x23\xc7\x66\xfb\x2c\x95\x8f\x74\xc1\x8d\x44\x25\x51\x7d\x1b\xf3\x3a\xe3\x30\xfe\x5a\x60\xa5\x31\xa4\x82\x0a\x62\x8a\xfd\xc1\xd9\xf2\xe1\xfe\x57\x36\x4b\xc4\x2b\xa1\xd1\xf1\x62\xda\x64\xe0\x0d\x66\x93\x85\x65\x03\xad\x2b\x37\xdf\x72\xdb\x4a\x4c\x5a\x2b\x53\x12\xd6\x21\xd1\x07\x0f\x7f\x7d\x77\x14\xf4\xff\x50\xfe\x33\xef\x77\x69\x2d\x56\x93\x36\xc0\x75\xc4\xd7\xf4\x6f\x9f\x1f\x2b\x36\xe0\x98\x5d\x92\x0d\xff\x60\x14\x57\xf9\xdc\x1f\x64\xb1\x64\x29\xf2\xdd\xd5\x50\x8b\xf0\x4c\x20\x00\x7f\x15\xa8\x23\x2c\x7b\x79\x69\x87\x82\x2a\xe5\x0f\x2b\xfe\x91\x1e\x1a\xd3\x95\xd1\x92\x95\x17\x98\x80\xbf\x8a\x09\x67\x2c\x63\xca\xba\x39\x5e\x56\x27\x8b\xbf\x30\x59\xd0\x32\xaf\xa5\x00\xff\xc0\x5b\xb2\xc9\x67\x0e\x9c\x3f\xee\xd6\x29\x0f\x4d\xb9\xb9\xfc\xfc\x03\x89\x95\x87\x7e\x30\xe7\x81\x39\x3f\x38\xb4\x32\x31\xd0\x12\xba\xfc\xfa\x9f\x1f\x5e\x3a\x33\x79\xff\x81\x2b\xfa\x7c\xad\x57\xb8\x23\xe7\xdc\xbb\xe1\xfa\xbb\x6f\xd8\xb7\xfe\xde\x0d\x11\xf7\x15\xa0\xb7\x7b\x5e\x47\xc7\xbc\xe1\x3f\x17\x5d\xf0\x80\x4d\xaf\xb7\x3d\x70\xc1\xa2\x4b\xa7\x57\x0a\x42\xe5\xf4\x4b\x81\xe6\x8d\x8b\x66\x6c\x6a\x0e\x68\x39\x69\x5c\xeb\xea\x09\xbb\xde\xfc\xec\xc8\x9c\x45\xdb\xd6\xce\x9a\x17\xf0\xce\x99\xb9\x76\xdb\xc2\xd9\xfd\xc3\xbf\x2b\x07\x7e\x0b\xea\xb8\x87\xbf\x9a\xef\x1c\x7d\x15\xb6\x24\xa4\x8a\xa7\x13\x39\xf3\x33\x26\x8d\x1d\x45\xa0\x34\x00\xc9\xb9\x44\x16\x52\x10\xfe\x75\x24\xa3\x92\xc2\x63\xb9\x9d\xc5\x3c\x96\x61\x1c\x21\x05\xea\x14\x10\x3b\xd4\xc2\x04\xb4\x17\xc4\x82\xbe\xe8\xc8\x82\x21\xc5\x95\xcd\x31\x2f\xe5\x97\x8b\x58\xcc\x1d\x76\xee\xab\xe8\x60\xaa\x74\x89\x4b\xfe\x9d\x18\x65\x12\xa5\x4b\x0b\x40\x48\x1c\xbc\x92\xa6\x32\xd8\x85\xb8\xd0\x80\xaa\x38\xc8\x36\x54\xc9\xef\x95\x1f\x6a\x1f\x4c\x65\xcb\x8d\x34\xbb\x54\xec\x2c\xbb\x09\x2e\x0b\x94\x17\xcb\x37\x3a\xcd\x81\x8a\x62\xb0\xc1\xfe\x78\x7f\xae\x2a\x47\x41\x53\x74\xd2\x3d\xad\x8d\xf2\x8d\xd1\x49\xb9\xca\x2c\xed\xaf\xa9\x22\xf3\x1a\x9b\xc7\x47\x5e\x48\x95\x50\x75\x84\x65\x88\x98\x50\x43\x04\x6e\x84\xe0\x41\xb7\x02\x0f\x18\x09\xea\x47\x99\xab\xa0\x57\x80\x66\x0f\x44\x23\xbf\x98\x4f\x52\x7e\x5e\xf0\x65\xf9\xe5\xa0\xc6\xe9\x2a\xa8\xd6\x14\x5c\xfe\xc0\xe5\x05\x9a\xf1\xb5\x4e\x59\xa7\xf8\xd2\x4c\x57\x7c\x69\xa6\xaf\x3d\xfa\x99\x3c\xf4\xd9\xd1\xb5\x68\x0b\x98\xcf\x8e\x7e\x3c\x92\x68\xfd\xb5\x0b\x6f\xb8\xe1\x42\x74\x03\x74\x9b\xee\x55\xab\xba\x5d\x4e\x73\x35\x78\xa3\x4f\xb9\x9a\x7c\xfa\x32\xbe\x6c\x6d\xee\x36\x68\xb8\x1e\xf1\xdd\x8e\x5d\x37\x3b\x81\xf1\x53\xec\xfd\xd8\xe3\x02\x7f\x2e\xff\x83\xba\x69\x9c\xb5\xe3\xd5\x5a\x55\x17\xb8\x9c\x1a\x5c\x57\x39\xfe\x3f\xab\x5b\xa4\xa0\xda\x9c\xa9\x96\x06\xdd\x06\x55\x15\x6a\xff\xb7\x75\xd3\x13\xdf\xfd\x72\x6c\xe5\xcf\xf8\x21\xe2\x2e\xf6\xfd\xab\x94\x0c\xb9\xd2\x44\xdf\x84\x49\x97\x1c\xfa\x9f\xd5\x44\x31\x0a\x82\x27\xfe\x47\x85\x57\xe5\x3c\xb4\x51\x66\x99\xf6\xef\xb7\x42\xc2\x8c\xf0\xef\x2a\x31\x53\x01\x7f\x38\xc0\x29\x10\x10\xbe\x5a\x3a\x21\x0a\x29\x51\x48\x0a\xa2\x12\xf1\x90\x49\xc2\x84\x5a\x19\x75\x23\xbf\xfd\x76\xea\xd0\xfb\x87\x52\x6f\xcb\x6f\x83\x8a\xb7\xe9\xe4\xdb\x20\x35\xea\x1a\x9c\x5c\x47\xaa\xa3\x7a\x78\x11\x9c\xf2\x64\x12\x54\x80\x07\x00\x66\x31\x37\x65\xd7\x45\xf0\x58\x8c\xfd\xa8\xf1\x5c\x39\x97\x5a\x41\x6d\xa0\x76\x50\x97\x92\x95\xd7\x7b\xa8\xc7\x88\x15\x1f\xd5\x09\x0d\x07\xa8\x1e\xf1\xbc\x74\x38\x2f\x8d\xf2\xa0\xf7\x86\xd2\xa8\x16\xc1\xd3\xe7\x39\xe3\xf1\xd3\xa5\xd9\xfc\xb4\x25\x9b\x8e\xe2\x7d\x89\xb0\x93\x8d\xb4\x09\x98\x7b\xcc\xe8\x5f\xd2\x3c\x60\x46\xff\xd4\x3d\x86\x32\x0f\x21\x81\x91\xee\x31\xa7\xb3\xe7\xc9\x06\x8c\xbd\x9b\xd9\xca\x94\xba\x9f\xdb\xa2\xdb\x6e\xc2\x17\x7c\x8b\xa6\xd5\xe9\xd1\x6f\x09\x76\x26\x46\xd0\x04\x9b\x48\x8e\x2f\xf3\x7e\xd3\x5f\x8e\x3a\x24\x8f\xb1\xa3\x6e\x80\xb2\x51\xff\xc9\xfd\x24\x9f\x19\xc7\x9f\x0e\x25\xf1\x1f\x7e\x10\x8d\x7f\x15\x91\x3a\xa1\xae\xd5\xd9\xa9\x32\x6a\x01\x96\xd6\x32\xbe\x41\xbc\x85\xf0\x84\x10\x6c\x00\x30\xc2\x6c\xa8\x5a\x07\x33\xd1\x71\xd8\xd1\x94\xc9\xa2\x47\xc4\x89\xdb\x6b\x26\x62\x0c\x0d\xee\xc9\x07\xf7\xcf\x69\x5b\xfd\xc0\xf2\x63\x1f\x7f\x75\x3c\x7e\xf6\xaa\x78\xbc\xb0\xa2\xe1\x82\xc1\x73\x03\x45\xc4\xde\x55\x14\x40\x7d\x8b\x4d\x05\x74\xfc\xef\x6e\x5a\x34\xb9\x30\x31\x79\x53\xe3\x5a\xf9\xab\x15\x26\xd1\x6c\xf6\x16\x07\x16\x5e\x7d\x6f\xe7\xa6\x5f\x6c\x0a\x45\x76\x1e\xb7\x6b\x8b\x8b\x8b\xc1\xdf\x60\xef\x12\x6f\x4d\xfc\xe2\xf4\x83\x9b\x4d\xc1\x02\xb7\x60\xa7\x37\x07\x1a\x2d\x83\x02\xb1\xbf\xfd\xd3\xd2\x88\x8d\xda\xdb\xd3\x6c\x58\x64\x99\x6d\x01\xc1\xe7\x29\x5c\xd4\xa8\xd5\x48\x41\xf8\x71\xc0\x6a\x2b\x6f\x09\xb5\xc6\xa5\x4d\x06\xd6\x2c\x5a\x71\xec\x4f\xa6\xee\x2c\xea\xc1\x65\x54\x2d\x35\x99\xda\x82\xbf\x43\x8e\xb7\xc5\x24\xf2\x8b\xd2\xe1\x28\x1a\x2a\xb5\xa8\x39\x6c\xa4\x52\x0e\x1b\xaa\x17\x3a\x89\xea\x6a\xb3\xff\xff\x6a\x16\x3a\xf1\xc4\x2b\xaf\x3d\xf6\xd0\xdb\xef\xd2\x9f\xfc\xed\x46\xab\xc4\xd6\x1b\x6b\xa5\x2a\x57\x45\xa0\xc2\xee\x70\x49\x6b\x9f\xd8\x20\x59\xcb\x6a\x2e\x38\xf6\xe0\xfe\x4a\xdf\x0d\x83\x0f\xfd\xaf\xda\x0a\x3a\x53\xe6\x35\xcf\xf4\x80\x47\x5e\xd0\x9c\xff\xdc\x46\xb9\xfe\xe9\x6d\x95\x03\x9c\x96\x2e\xe4\x9c\xbc\xc4\xe9\x19\x86\xfe\x43\x63\x54\xcb\x1d\xb7\x40\xfe\xb9\x25\x9a\xe7\xcb\xc0\xe7\xff\xbb\x86\xc4\x6b\x4b\x48\x2e\x21\xeb\x07\x25\x0a\x1b\xe7\x88\xf5\x03\xbb\x75\x64\xfc\x29\xec\x1c\x6b\x41\x41\xc7\x54\x8a\xc2\x10\x31\x84\xd2\x78\xd4\x1a\x37\xf6\x2a\x8a\x5c\x99\x17\x79\x87\xfb\x70\xe5\xa9\xeb\xf9\xb9\xcc\x67\xe4\xf9\x0d\x2a\xc7\xe8\xf0\xe5\x35\xbb\x55\x8b\x66\x74\x4c\x92\x86\x03\xe9\x31\x84\xf5\x98\xc5\x84\xeb\xc7\x5a\x6d\xd3\xc1\x49\xf2\x95\x8c\xc3\xd0\x6a\x34\x32\x60\xbb\x92\x80\x57\x8f\x59\x81\xfd\x63\xaf\x44\x31\xbe\x93\x5f\xa1\x8b\x2d\x8c\xc3\xc8\xea\x95\x44\xba\x77\xec\xca\xe5\x7c\xe3\x9f\xa5\x6c\x18\x53\x07\xd8\x32\xf0\x34\xb8\x42\x18\xb7\x92\x00\xd6\x61\x22\x0a\xc5\x4f\x52\xc4\xee\x7a\x23\x32\xd9\xd0\x13\x90\x28\x4b\x10\x6c\x14\x71\xbb\x68\x5c\x58\xde\x2a\x49\x9c\xd1\x5f\x1e\x2d\xe4\x34\x56\x8e\x2e\x80\xe5\x37\x26\xde\xb9\x6b\x78\x1e\x70\xdb\xf1\x07\xc1\x8b\x93\x31\xba\x8a\x2a\x7b\x63\x47\xf0\x49\xf2\x16\x1c\x09\x30\xa3\xf1\xa6\xdd\xbb\xeb\x0d\x16\xa0\x71\x81\x83\xf7\x4d\x99\x65\x1c\x1c\x91\x4f\x3e\x59\xf8\xf3\x63\x8a\xac\x0a\x4f\x1d\xe3\xf6\xb0\x03\x94\x8e\x2a\x45\x75\xa8\x44\x6d\x4f\x5b\x1c\x2c\x1d\xd6\x02\x89\xe0\xb7\x06\x09\xe7\x11\x66\x3c\x8a\x61\xc2\x23\x24\x81\x4b\xac\x07\x30\x77\x03\x20\xdf\x3e\xd1\x73\xa4\x09\xb4\x36\x1b\xc0\x57\xf2\x8d\x0b\x58\xbb\xc3\xe2\x90\xdb\xe4\x36\xb4\xb1\xb3\x0b\xe4\x1b\xbc\x62\x25\xf8\xf7\x87\xd6\xa2\x42\xdb\x87\xe0\xdf\x95\x22\x6c\x3f\x59\xa7\x6b\x06\x13\x87\x5a\x8a\x1f\x00\xab\x26\x82\xa8\x7c\xa7\x6c\xf0\x05\x0d\x7f\xff\xbb\x21\xe8\xc3\x5c\x49\xde\x38\x8f\xa9\x92\xc6\xc9\x0d\x9d\x7c\x9c\xca\x60\xef\x26\x89\x8f\x31\x95\x03\xd5\xf7\xf9\x31\xe0\x1b\x50\xb0\x2f\xd8\x0b\xd3\x49\x4b\x29\xab\xb3\xbb\xd3\x29\x7b\x40\x27\x5a\x59\xca\x68\x76\x8b\x26\x9e\xb9\x67\x90\x0a\x40\x36\x60\x87\x09\x77\x45\xa9\x0e\x26\x79\x49\x18\x97\xc1\xda\xc4\xb2\x39\x44\xa3\x49\x3d\x41\xf0\xd7\x02\x9f\x62\x01\xcc\x9a\xf9\x7c\xaa\x2f\x85\xa2\xe8\xe6\x48\xa8\xe3\xa8\xf7\xe1\x75\x3c\xe2\xf4\x52\x09\xe7\xa6\x93\xe8\xef\x18\x93\xcc\x98\x2a\x86\xfa\x87\x59\x2e\xe8\xb9\xff\x46\xfd\x45\xab\xfd\x9a\x18\x76\x50\xd6\xdf\xa1\xbf\x9e\x3c\xeb\x06\xdd\x93\x67\xe1\xf8\x5a\xab\x45\xb9\xff\x3d\x74\x4c\xa4\x54\xfe\x22\x26\xc7\xa3\x32\x3d\xb7\x8e\x22\x8e\xf0\x19\xc7\xbe\x47\x0a\x47\x4c\x11\x20\x0b\x60\x44\xdd\x8b\x67\xc6\x39\x1b\x1e\xfb\x90\x58\xcc\x46\xd5\x03\x00\xfb\x4d\x65\xfe\xc1\xa7\xc9\xe6\xe6\xba\x0a\x38\xd0\x7e\x45\x72\x6e\x45\x1d\xd2\x46\xeb\x2a\xd4\x4d\x6c\x75\x7c\x42\x57\x59\xd8\x42\x76\x9d\xe4\x12\xe6\x69\xb2\x99\x4a\x7e\x7b\xea\x16\x17\xc8\x1f\x5e\x1c\x2a\x2f\x6d\x9d\xe4\x2a\x58\x5c\x87\x15\x77\x74\x88\xae\xcb\xa5\x65\x93\xab\xd8\x52\x10\x2c\x6b\x9e\xa5\x1e\x54\xb0\xee\x93\x24\x96\xd3\x88\xb4\xf7\x20\x92\x74\x97\x52\xbd\xd4\x36\x6a\xaf\xca\x10\xac\xae\x3c\xda\xad\x0e\xc5\x27\x96\xf8\xb8\x84\xf2\xe4\x45\x36\x1b\xa3\x10\xc6\xe0\x5a\x68\x50\xc0\xce\xff\x71\x3b\x1a\x19\x00\x9f\x05\xcb\x71\x00\x3e\x44\x9c\x11\xdb\xd4\x40\x04\x26\xef\x16\x20\xef\xd6\xec\xb0\x87\x82\xa7\x4e\x51\x7a\xa7\x5e\xab\x05\x14\x7e\x79\xfd\x0a\xd3\xd2\x40\x5e\x2c\x2c\x0b\x15\x08\x1c\xf9\x51\x9b\xed\x0b\x60\x71\xcf\x71\x5f\x5f\x58\x28\x7f\x2e\x06\x6c\xa0\x7b\x5e\xfa\xa6\x2f\xe4\x2f\x54\x38\x1d\x20\xa2\x63\xf2\x23\x2a\x62\x0e\x98\x69\x83\xd7\xe4\xdd\x26\xfd\x4f\xe5\xd6\xe0\xa6\x61\x0f\x04\xda\x53\x14\xe9\x09\x80\x6c\x22\x79\xe1\xb8\x03\x24\x7f\xff\x05\x18\x26\x07\xcc\xb2\x05\x44\xf9\x73\x37\x50\xc0\x75\x80\xf4\x85\x0d\x3d\x6a\x01\x5c\x2e\x02\x51\x05\xdc\x91\x3f\xff\xd2\x86\x8a\xb4\xe0\x7c\x72\x81\xfc\x13\xdb\x7a\x85\x34\x8a\xca\xbb\xe5\x7d\xc3\x1e\x86\xc7\x83\x1e\xf4\x91\x0c\x91\x75\xcd\x66\xc5\xaf\x73\x98\xe5\x1b\x8f\x66\x42\xfe\x51\xe2\xe8\xae\xc2\x42\x93\xb9\x14\xc4\x45\x1f\x76\x5e\x4d\x39\x91\x34\xe3\x24\x3f\xa0\xb9\x38\x3c\xa5\x22\x3c\x2e\x8e\xf6\x4c\xb6\xbd\x33\x9b\x6a\x97\xb5\x4c\x28\x0f\x4c\x35\x8a\x06\xe3\xbd\x46\x56\xd3\x0f\xc6\x77\xdf\xbd\x77\x0e\x70\x66\x2e\x70\xc2\xa9\xb1\xe5\x4d\xcd\x6e\xbb\x63\x5e\x81\xa5\x38\x28\x55\xce\xbd\x3e\xe0\x6e\xac\x2e\x4b\x14\x15\x9c\x65\xd6\xec\xd6\x79\x8c\x40\xd7\xda\x7b\x53\x46\xd7\x86\xf8\x7b\xf6\x60\x1e\xad\x7c\xe4\x0b\x85\xa6\x37\x33\x91\xd9\xf0\x37\x4b\x8f\x9c\xdd\x92\xca\x1a\x70\xc8\x95\x48\x64\xa8\xb0\x51\x22\xa9\x70\xd1\x28\x40\x64\x59\xd8\x0b\x90\x54\x0d\x63\xe9\x54\x88\x59\x4b\x0c\x4b\x4a\xe0\x2b\xa4\x56\xa2\x1f\x4f\x96\x77\x64\xc4\x43\x24\x5a\xd1\xa7\xc3\x74\x48\x8d\xe1\xce\xbf\xbd\xa7\x10\x84\xf1\x6e\x18\x14\x82\x20\xb6\xcc\x06\x81\x77\x00\x9f\xc4\x3f\x0c\x97\x26\x19\x69\x02\x88\x86\x47\x2c\x8a\x95\xd9\x0d\xe8\x9b\x99\x86\xeb\x1a\xc0\xd1\xfd\x84\xe2\xd0\x04\x7c\xd1\x88\x44\x07\xa2\x3e\x02\x79\x10\x89\xb5\x41\x9f\x2d\x40\x4b\xc0\xe6\x23\xee\xc4\x4c\xe6\x1d\x85\x15\x0e\x1b\x12\xa9\x13\x89\xd2\x97\x7c\x73\xc4\xa9\xa1\x69\x40\x33\x40\x67\xba\x4d\x96\x93\x2f\x3c\xb3\x1f\x58\xaf\x84\x36\x74\x90\xd6\x14\x5c\x05\xc0\xee\xa7\x5f\x85\x9f\xa6\x65\x9a\xa9\x9b\x79\xd6\xcc\xba\xa6\x71\x91\x2a\xc1\xbe\xde\x15\x9c\xbb\xfe\xbc\x2b\x6a\xa6\x2f\xea\x8a\xd3\x7f\xbd\xff\xfe\xa1\x32\xad\x81\xe6\xb5\xd0\xea\x3c\x79\x3f\x08\x00\xf3\x03\x1f\x31\x21\xad\x41\x6b\x28\xfb\xe8\x01\xf9\x2b\xf9\xb7\xf0\xfe\xd7\xdd\x85\x62\xa2\xaf\xbd\xad\xaa\xd5\x17\xaa\x09\xeb\xdd\x4b\x83\x45\x13\x76\xac\xaa\x5f\xde\xd4\x58\xde\xec\xeb\x56\xe6\x21\x16\xfb\x90\xd1\x7b\x51\xdd\x3a\xbf\x5f\xdd\xd8\xd3\xd7\x8d\xfe\xfe\x75\xfb\x7b\x5a\x66\xe8\xe1\x75\xeb\x3e\xe7\xbc\x2b\x26\xad\x5a\x3d\x8d\x39\x73\xd5\xde\x7b\xdd\x5d\x09\x46\xd7\x6c\xe2\xfa\xf6\xc6\x8e\x70\x37\xa9\x17\x40\xba\xd7\xc5\xac\x82\x37\x47\x05\xb1\x0f\xbb\x1d\x2f\xc3\x90\x1e\x11\x22\xf3\x18\x5e\x39\x4d\x82\xee\x34\x25\x3f\xc2\x7d\x65\xd2\x17\x0c\x25\x43\x8d\x69\x2a\xd4\x66\x46\x69\x1a\xa5\x69\x94\x26\x38\x7b\x4c\xd4\x3f\xbd\x70\x88\xaa\x18\xe7\x47\x5b\x06\x6d\x95\xf5\xbe\xf7\xc9\x58\xda\xab\x60\x64\x11\xf4\x6c\x8c\x27\x6b\xf3\xf3\x98\x14\x26\x14\xad\xcb\xc5\x1e\x63\x62\x1f\x35\x6e\xa0\x1a\xf8\xc3\xfe\xa8\x05\x63\x64\x60\x41\x17\x07\x30\x67\x02\x96\x09\x2d\x12\xa6\x8a\xb1\xe1\xe6\xc7\x58\x1b\x0a\x01\x10\x52\x10\x16\xcf\x1a\xd7\x59\xd9\x11\x3c\xcf\x0b\xec\x7a\xff\xc5\xbd\x55\x2d\xf3\x02\xe3\x02\xe7\xcc\x9e\x77\xbe\x27\xe8\xa9\x0a\x76\xaf\x38\xac\x0d\x6a\x8d\x00\x42\x58\x1c\xa4\x0f\xaf\xe8\x0e\x56\xa1\xe3\xe7\xcf\xef\x3e\x07\xe5\x9a\xd7\x92\xf8\x6b\x35\x60\x59\xe0\x0c\x54\x54\xda\x1b\x6a\xba\xcb\xe7\x2c\x01\x4f\xce\xc6\xa7\x2e\x0a\xdf\x1c\x66\x91\xd8\xa1\x8b\x36\x04\x3b\x2a\x3b\xc7\xcd\x5a\xbc\x64\x4e\x79\x77\x4d\x83\xbd\xb2\x22\xe0\x84\x0c\x84\x00\x30\xd4\x88\x4b\xd5\x92\x34\x44\x3d\x23\x9e\xa6\xca\x65\x4c\x92\x70\xd9\x45\xc8\xf7\x48\xf1\x36\x5f\x86\x2d\x9d\x38\xa0\x87\x28\xfc\x75\x92\x95\x77\xca\xab\xa6\xf1\x94\xe0\x25\x53\x82\xd7\xce\x24\xe5\xf7\xde\x23\x30\x84\xea\x7a\x03\xa0\xde\x93\xdf\xc3\xcb\x07\x04\x64\x11\x25\x4e\x51\xc7\xe5\x6f\x8e\x63\xff\x5b\x3a\x91\xfc\x40\x7e\xc6\xb9\x4f\x71\xae\xdc\xe7\x04\x53\x3e\x50\x86\x0c\x05\xbf\x91\xa0\xe4\xac\x95\xa9\x7d\xc7\x8f\xef\x83\xf8\x17\x7b\xd7\x22\xb9\x66\x2b\xf1\x77\x6d\xc7\x33\x3b\xba\x61\xb6\x38\x5a\xa0\x78\xd1\xf3\xa8\xd1\xf3\x0a\x39\xaa\x02\x61\x3e\x1f\xf3\xc0\x6e\x0d\x02\x05\x04\x1d\x98\xd6\xe0\x10\x0d\x66\xbd\x7c\xd3\xf1\x7d\xf1\x58\xcf\xd9\xe7\x3c\x43\xca\x3b\xaa\x3e\xbb\xcf\x93\xd1\xb8\x3f\x47\xa7\x63\xde\x22\x5b\x79\x67\xfa\xfa\xe3\xfb\xd6\xde\x07\x67\xad\x59\xb7\x51\xa9\x40\x14\x7a\xe4\x9b\x92\xfb\x8e\x4b\x3d\x11\xb5\x22\xae\x61\x55\x35\x76\xc8\x3a\x74\xa5\x0b\xdf\x02\x6f\xd1\x1d\x70\x0d\xcf\xcf\xfa\x49\x2b\x3c\x49\x7e\xc5\xcf\x01\x7d\x9d\x92\xc5\x2a\xb0\x84\xf0\x32\x8b\x45\xce\x24\xe4\xc4\x8e\xe5\x7f\x4b\xb5\xaf\xda\xbf\x6d\x4f\xd4\x6c\x28\x34\x98\xa3\x7b\xb6\xed\x5f\xd5\xae\x38\xbc\xc0\x04\x4c\x0e\x5e\xdb\x36\xed\x69\xfa\x91\x34\xb5\xe0\xc1\x4b\x2f\x9a\xd3\xe9\xc2\x8c\x6d\xae\xce\x39\x17\x5d\xfa\xe0\x02\x65\x60\x54\xe5\x25\x2a\x8b\x0f\x11\xc0\xb6\x00\x87\xcf\xe2\x0b\x8e\xf0\x7e\x18\xbd\x3f\x22\x62\x48\x15\xf4\xb2\x29\xd4\xa2\x68\x72\x39\x89\x3e\xbf\x9c\xe3\x27\x9d\xe7\x04\x8a\x09\x2f\x4e\x12\xb6\xc5\xe4\xf2\x89\x98\x41\x4f\xd9\xa0\x23\x48\x7a\x4b\x01\x2f\x01\xd1\x20\xf2\x5d\x5e\x7a\xe6\x20\x31\x51\xb1\x38\x92\x88\x30\xe7\x29\xbf\x5d\xa4\xdd\x68\x22\xf3\x0e\x20\xb9\xaf\x2b\xe7\x5f\x1e\x54\x61\x1d\x83\x55\x38\xd4\x69\xb8\x63\x6d\x3c\x8a\x91\x07\xd4\xcf\x1a\xc7\xa5\x65\x1d\xa4\x7d\xe8\x64\x90\xc0\xc5\x40\xc5\xb3\x9c\xfe\xa1\x41\x63\x60\x68\x39\xa1\x17\x4e\x51\x1b\xaf\x53\x26\xbf\xdd\xab\xbc\x4d\x9b\xa6\xb4\x58\x19\x4b\xa9\xd9\xe8\xb0\x18\x58\xa9\x7e\xc2\xfa\xfa\x82\xe5\xfb\x96\x0b\xa0\x4a\xd0\x83\x14\xcd\xa0\xab\x58\xe5\x9d\xf7\xc8\x29\xb3\x96\x07\x3d\x50\xd4\xaf\x75\x3c\xb2\x75\x88\x4c\x55\xb4\xb7\xef\x41\xcf\xc6\xea\xa6\x69\x3e\x4d\x80\x37\xd4\x3a\x75\xde\xe9\x13\x26\x89\x65\x15\xb8\x56\xbe\x62\xbd\x08\x7b\x00\xaf\xc5\x75\x2b\x39\xe5\xe5\x14\xbb\x64\x65\xae\x6e\xc0\x8a\xa5\x57\x1a\xb3\xf0\x11\x04\x1f\xa4\x6a\x64\x53\xb8\xfc\xf1\x58\x09\x36\x3e\xf5\x13\x41\x15\x38\x6f\x7a\x74\xf6\x16\x2b\x14\xe4\x24\xaf\x35\xe8\x13\x46\x76\xbe\xfc\x5f\xf2\xdf\x69\x4e\xd0\x26\x2c\x86\x01\x9d\x19\xec\xea\xe9\x3e\x0e\xe6\x01\x56\xb0\x32\x8a\xc4\x0a\x92\xdf\xca\x37\x3e\xd6\xdd\x23\x5f\x66\xd6\x0d\x30\x5a\xfc\xd2\xac\xa0\x60\x3e\xd0\x26\x24\x2b\x48\x0a\xd0\xba\x65\xf6\xb3\xd7\x48\x19\xff\x21\xee\x84\xa2\x6f\x00\xda\x87\xb9\x92\xca\xf1\xd6\x87\xfe\x68\x1f\xc1\xb7\xe6\x4e\xdc\x2b\x3f\xfa\xa8\xb1\xd0\x5d\xff\xe0\xab\xf2\xa3\xaf\xca\x7f\xc2\xbf\xb7\x30\x43\x6b\x7e\xd2\xd4\x5c\x06\x07\xd3\x2c\x9d\xa8\xf7\xfa\x86\xa6\xd0\xcf\xe0\x3f\x30\x65\x76\x67\xe7\xcf\x86\xfb\xc1\xe0\x01\x87\x0a\xc6\x63\x75\x48\xc3\xca\x60\xd5\x73\x24\x1a\x25\xdf\xd4\x43\x5f\xbd\x56\x92\xe4\xd7\x40\x44\x92\xd6\x62\x8d\xae\x51\x92\xc0\x8b\x52\x1d\xfc\xc1\x88\x55\xcd\xab\xf1\x59\x10\x41\xf9\xea\x24\x7c\x45\xa3\x92\x19\xbe\x7b\x5a\x7c\x75\xe5\xf9\xe8\xd1\x61\x15\x90\xde\xa1\x55\xc1\xdf\xf3\x9f\x0f\x5f\x43\x8f\x53\x6e\x87\x6e\x0b\x22\xf2\x6b\xa4\x20\xf4\xe4\x91\xcf\xc7\xa5\xc2\x45\x53\x8a\xf9\x1a\xca\x87\xaf\x38\xd3\xf3\x41\x3c\x96\x89\x76\x51\x20\xf0\xb5\x23\x9e\xcf\x5c\x9d\x57\x1b\x29\x57\x49\x30\xb2\x01\x80\xd2\x02\x23\x0b\x0b\x46\x16\x60\x8c\x77\x90\x69\x7e\x6d\xa6\x21\x46\xbe\x83\xca\x51\xf5\x52\x5e\xc2\xc8\xa5\xe5\xcf\x48\x23\x8c\x7c\x61\x70\xc7\x18\x6d\x90\x20\xb1\x23\x16\xd2\xc3\xe2\xa8\x67\x61\x48\x9a\x80\xc4\x46\xa2\x41\xc9\x17\x06\x3e\x9a\x0d\x32\x7d\xe6\xa1\xab\xaa\xe1\x6a\xfb\x0b\xcf\x1b\x1f\xb6\x83\x3e\x06\xac\xab\x4d\x5f\x64\x92\xeb\xd9\x64\x32\xfd\xd3\xf4\x2f\xe8\xa3\x0f\xa7\x3f\xfd\x28\x1a\xbd\x4a\xfe\x74\x35\x58\x05\xbd\x4f\x80\x77\x4e\xae\xbc\xfb\x6e\xd2\x7f\x0d\xa7\x12\xdc\x7f\xab\x18\x72\x3e\x2d\x94\x7c\x3c\x8b\xee\x2b\xf9\xe2\x3e\x20\xb1\x1f\xca\xff\x1e\x7a\x3f\x3d\x79\x0a\x18\x57\x04\x7e\x08\x3e\xee\x18\x9c\xda\xc8\x3c\x13\x1a\x9c\x8a\x86\xb7\x57\xe4\xaf\x80\x1e\xac\xbe\xfe\xae\xbb\xc0\x5c\x30\xee\x67\x6a\x5b\x99\x79\x85\xb3\x63\x7e\xde\xb7\xaa\x8c\x43\xd5\x80\x43\xad\x14\x1e\x85\x43\xeb\x01\x8e\x3c\xb5\x39\x4f\x01\xb5\x45\x32\x56\x6e\x4b\x2b\x88\x67\xc0\x6a\xe9\x94\x32\x2a\xad\xb5\x6a\x18\x83\x7e\xd9\x0e\x79\xb3\x5c\x27\x6f\xde\xb1\x4c\x2b\x30\x1a\x2b\x1a\x31\x7b\xec\x1a\x8d\x69\x75\xfb\x57\x37\x2a\xc2\x76\xe3\xe4\xc3\x6f\x1f\x9e\xdc\xa8\xec\xdc\xf8\x55\xfb\x6a\x93\x46\x63\x07\x3d\x82\xc8\x7c\x4c\xc6\xa6\xa1\x7e\xb9\xdf\xae\x81\xda\x65\xd7\xde\x7f\xff\xb5\xcb\xb4\x50\x39\x69\x95\xcc\xab\x97\xec\xb6\xc2\xcb\x89\xf4\x7e\x8f\x7f\xfb\x64\xec\x0d\x39\x79\xbb\xff\x1e\x72\x20\x7d\xa1\x75\xf7\x92\xd5\x66\xc9\x2a\x2a\xdf\x3f\x91\x1b\x02\xa3\x38\xb6\xb0\x3f\x27\x61\x22\x55\x91\x04\x08\x5b\x2f\xe3\xcd\x91\x7a\x79\x55\xc9\x40\xa5\xfb\xca\x99\xc4\x08\x16\x70\x82\xf0\x79\x3d\x83\x4b\x8e\x9f\x2e\xa7\x86\xdb\xb3\x14\x1d\x9f\x48\x2b\x39\xa4\xdb\x90\x97\x33\xdb\xbd\x94\x99\x52\xff\x4e\x67\x13\x51\x20\x6c\x81\x5d\x8d\x7d\x02\x67\x2b\x44\xa5\x64\xf9\xff\xa1\x33\x18\x45\xe0\xa7\x0a\x64\xed\xd9\xa0\xf5\x43\x7c\x3d\x9c\x97\xbd\xb4\x22\xbd\xe7\x8c\x96\x1d\xb2\x9e\x82\x44\xf7\x24\x9d\xc1\xd3\x1a\xa5\x31\x8e\xf4\x9d\x1e\xe5\x4b\x9d\xac\x2f\x25\xed\x94\xc2\x1e\xa0\x63\xa7\x69\x6f\x26\x35\xe6\x4f\xd6\xe7\x05\xe4\x70\xbd\x46\x95\xc3\x72\x86\xfd\xfc\x72\x8c\xf5\x03\x72\x65\x00\xbf\x1d\x2b\x99\xcf\x39\xcd\x53\x6e\x2a\x8a\xad\xae\x59\xdf\x17\x4c\xb4\x49\xec\x44\x84\x23\x01\x10\xd9\x23\x04\xab\x40\x09\x66\x71\x20\xc7\xed\x8c\xa8\x9c\x18\xcd\xd0\x08\x15\x97\x61\xf0\x23\xa3\xfc\xcc\x27\x82\xd5\x62\xbc\xf5\x7d\x3d\x10\x8d\x49\xa3\x15\x5c\xcc\xae\xfd\xc9\x27\xf2\x87\xb7\x0a\x5a\x9d\x68\x7c\x15\x2c\x3d\xc1\x93\x13\x3a\x3d\x28\xce\xf7\x8c\x54\x22\xfa\xfd\x9f\x80\x29\x46\x60\x45\xe7\x45\xa0\x7f\xff\x56\xa3\xc5\x6a\xbc\x15\x14\x7f\xf2\x93\xb5\x2c\xd0\xe9\xc8\x51\xfe\x84\x7c\xef\xab\x46\x51\xa7\xa5\x5f\x1b\xe9\x2f\x99\xb3\xe1\x61\x9c\x93\x7c\x06\x0c\x32\x94\x13\x72\x1e\xa2\x4b\x8c\x62\x49\x78\x14\xbb\x58\x15\xfb\xbc\x5e\xb3\xd9\x62\x1a\x85\x9c\x9f\xbe\x49\x9c\x26\x82\x84\x24\x4a\xc1\x74\x32\x28\x69\xb4\xe8\x5d\xc6\x4e\x45\xb9\x57\xd8\x97\x89\x2c\x87\xde\xa5\x96\xcd\xcd\x16\x78\x90\x56\x96\x84\x63\xa8\x6d\xf9\x70\x46\x02\x26\x2b\x61\x0e\xbb\x15\x29\x0a\xcd\xe9\xe7\xe5\xe7\xc1\x7a\xd8\x87\x06\x64\xcc\x3d\x92\x3e\x8c\xc6\xed\x3e\x31\x46\x5f\x39\xb4\x3d\xb8\x21\xb8\xa7\x7e\x53\x7f\xfd\xee\x60\x90\xbe\x12\xed\xec\xc6\x3b\x7b\x82\x4c\xb3\xfc\x7c\x1a\x63\xad\xe2\xab\xea\x70\x6e\x7c\x55\x1d\xbe\x1e\x5e\x3b\xb4\x2d\x88\x2e\xea\xdf\x84\xf2\x6d\x08\xd2\x07\x82\xe8\x22\xb4\xb3\x3b\xb8\x61\x58\xbb\x28\xba\xff\xc8\x90\xe5\x31\x7c\x59\x15\x87\x59\x7a\x94\x5f\x2d\xf1\x5e\x55\x96\x18\x86\x7b\xab\xe6\xf8\xf7\xf2\xfa\xf6\xb0\x15\x86\x33\xf8\x75\xe1\x05\xca\x21\xb2\xe6\x43\x2b\x48\x6e\x39\x87\xae\x64\x3e\xef\x29\x1c\xc8\xae\xd7\xcb\xb5\x84\x16\x55\xc9\x49\xef\xcd\xa7\x40\x45\xe3\x24\x2a\x11\x7d\x92\xbd\x98\x2a\xc4\x7e\xd6\xe5\x20\x07\x56\x8e\xbd\xc1\x03\x39\xfa\x5f\xfa\xa4\x58\x9a\xc2\x41\x57\x36\x8d\xc6\xd0\xaf\x35\x83\x44\xaa\x54\xb4\xb8\x40\x42\x6c\x45\xaf\xdc\x4d\xdf\x17\xc4\x2b\xa6\xa2\xd5\x94\xd2\xc3\x64\x30\x58\x0c\x92\x76\xbb\x9c\xf4\x92\xb9\x0c\xc9\xc1\xe8\x19\x14\xee\x6d\x52\x66\xfd\x46\x75\x25\xc4\x54\x82\x16\x1f\x91\x10\x63\x5e\xec\xfe\x95\x2a\x2d\x71\xcb\x29\x74\x53\x39\xe5\xb2\xa0\x47\xca\x29\x41\xdf\x6f\xd4\x6a\x59\x4a\x12\x86\xee\x9a\xe6\x95\xd1\x7d\x41\xb2\x38\x14\x84\x49\x7d\x4a\xb0\x4a\xc3\x65\x81\x92\x3c\x59\x00\x84\x73\xb2\xc0\xa8\xcf\xf0\x18\x5c\xab\xce\xee\x95\xff\xa9\x8a\x03\x58\x26\x5a\x9b\xff\x16\x3f\x83\x6b\x55\x59\x00\xe5\x51\x32\xdf\x2a\xd1\x3f\xc8\x7f\x9f\xb9\x71\x9f\x43\x23\xbb\x4d\x7d\xa7\x0e\x1e\x3b\xa5\x13\x78\x05\xd2\x7e\x5a\xda\x02\x54\x32\x23\xd3\x68\x1f\xb9\x1b\x6e\xae\xab\xef\x01\x6f\x09\x16\xf9\x03\x8b\x51\xb0\x80\x80\x45\x1e\x84\x5e\x79\x20\x3d\x40\x27\x97\x16\x16\xde\x5c\xd8\x5d\xb8\x14\xf6\x0f\x63\x65\x7d\xe8\xe6\xba\x9e\x7a\xf0\x1f\x46\x7c\x89\x60\xc4\x97\xa4\x13\xd0\x0b\xd0\xb7\x29\x0f\xc0\x9e\xa5\xe8\x8a\x9b\x0b\x0b\x97\xf6\x9c\xee\xbb\x2f\xc0\xfe\xb5\xaa\xdf\x25\xcf\x15\x67\x18\x83\xe2\x40\x59\x40\x18\xd3\x6b\xdb\x4b\xe0\xe1\xd3\x9f\x2a\x0d\x01\xed\x07\x45\xb7\xc1\x18\x1e\xd1\xed\x7b\x00\x52\x22\xc2\xe3\x8a\x70\x3e\xd2\x72\x28\x9f\xc4\x5a\x60\x59\x7e\x49\x72\xe5\x08\xe2\x58\x69\x6d\x66\xd0\x29\x02\x7e\x81\x55\x96\x28\xe2\xb1\x30\xc4\x24\xc6\xca\xde\x28\x84\xb2\xcf\x40\x0f\x7a\x29\xfd\x9e\x70\xe9\x8e\x5f\x5c\x7a\x76\xbd\x4f\x77\xbf\x5e\xe0\x39\x3b\x5d\xd1\x57\xf5\xc0\x55\xa5\x06\x83\x0b\x86\x86\x35\xd7\x63\x28\x3f\x1a\x09\x7a\xb0\xb9\xa4\x3f\xdc\xb6\xa2\x67\xe7\x9a\xe6\x27\xfe\x68\xa0\xb5\x4e\xb0\x72\x47\x5d\x75\x7f\x99\x85\x85\xa9\x61\x8d\x95\x1b\xff\x21\x7a\xb3\x22\xe5\x21\xf6\x14\x60\x01\x16\x34\x79\x03\xd5\xf3\x70\x18\x0d\x15\x0e\xe4\xc0\x41\x37\x32\x45\x7b\xf3\x5c\x0c\x47\x39\x20\x82\x54\x32\x09\x66\xa5\xff\x74\x8a\x42\x1a\xf9\x07\xc4\x49\x51\xc9\x0d\x57\x8c\x98\x92\x73\x78\x6e\x18\xf1\xaa\x52\xc5\xeb\x50\x3e\x1a\xd4\x0c\x23\x47\x8a\x91\xad\xc4\x5c\x28\x3a\xe4\x94\x34\x51\x92\x53\x0e\xd1\x52\x0a\x93\xa5\x37\xab\x7e\x9e\x46\xec\xf3\x39\xfc\xcd\xd1\xcb\x02\xc5\x72\xc2\xed\x06\xa9\xe2\x40\x20\xed\x1d\xe6\x14\x3a\x62\xfc\x1a\x51\x26\x65\xb8\x50\x07\x89\x33\x97\xc9\x52\x9a\x4e\x96\x5a\x44\x07\x9a\x25\x26\x4a\x20\xe1\xd8\x7e\xfa\x32\x81\x7b\x02\x81\x40\x31\x48\xb9\xdd\x72\xa2\x58\xfe\xdd\xf7\x2f\x13\xf1\x53\x56\xec\xbf\x31\x07\x38\x63\x99\x12\xf8\xfe\x01\xe5\x59\xbf\xcf\xb7\x85\x8e\xe8\xdc\x77\xe5\x35\xa5\x05\xb7\x6d\xfa\xef\x34\x19\x89\xc9\x15\xf4\xeb\xc3\x79\x8e\xb1\x20\xf3\x2f\x54\xa6\x1e\x34\x22\x39\xec\x9c\x09\x08\x7c\xc0\x4f\x85\xb3\x22\x75\x28\x9e\x4d\xc6\x28\xc2\xd6\x8d\x84\x6e\x62\x2e\x65\x31\x08\x88\x22\x84\xa3\x82\x72\x0e\x25\x89\x17\x9e\x09\xc6\x14\xd3\x86\x8d\x8d\xf4\x9b\x01\xda\xa0\x67\x19\xa3\xe4\x74\xa3\x17\x20\x7d\x2a\xdf\xdd\xb6\x02\x37\xd0\x44\x48\xb7\xe3\x42\xad\x6c\x07\x67\x0f\xac\x5d\xaa\xd7\x72\x74\x39\x6d\x37\x32\x8c\xc9\x5a\xe0\x2e\x16\xf6\xbc\x54\x0b\xde\x36\x6b\x75\xb4\x93\x75\xcb\x4e\x9a\x06\xaf\x98\x90\x84\xe0\x84\xa2\x5e\xde\x3d\xfe\x95\x8b\xc5\x92\xe2\x42\x9b\x99\x61\x8d\x46\xc3\x5f\x8e\x18\x6c\x98\xa6\x85\x63\x59\x96\x81\x80\xfd\x40\x32\x6e\x36\x4a\x0d\xe3\x45\x61\x8b\x20\xbe\x05\x28\x07\x7a\xbe\xf1\x08\x36\xcf\x02\x9a\xa1\x69\x98\xdc\x64\x30\x08\x5b\x5c\xc1\x0e\x83\xc1\xb4\x49\x6f\xda\xbe\x9f\x66\xd0\x85\x00\xb2\x3c\xaf\xea\xe3\xf4\x10\x6a\x8f\xb6\x9c\x57\xed\xf0\x95\x7d\x05\xe5\x05\x1b\x02\x71\xf8\x16\x47\xa8\xb0\x39\xd5\x61\x4d\x81\x5c\x57\x57\x72\xe8\x21\xd4\xe4\x1d\x82\x28\x19\xcf\x5e\x81\x6b\xba\xe2\xeb\x9f\x3d\x73\x18\xa9\x08\xeb\xb4\x46\xa3\x8e\x2d\xeb\xa9\x9c\xdf\x0b\x6a\x48\x20\xd9\x1b\xe0\x4e\x51\xb8\x1b\xbd\xc8\x6b\xe5\xeb\x70\xce\xc3\xa8\x8b\x5d\x2c\x19\x2f\x15\xc4\x3f\x1e\xfd\xc3\x6e\x4d\x81\xee\x62\x3d\x80\x5a\xb6\xb0\x64\x79\xd7\xbb\xa2\x70\xa9\x51\x92\x2f\x7b\x42\x01\x35\x06\x54\xdd\x29\x8a\x7e\x0b\xe9\x0f\x2b\x15\x9e\xf5\xac\x88\x89\xbd\x18\xdb\x30\xf0\x93\x63\xbc\x02\xd1\x8b\xd7\x5b\xe9\x70\x95\x06\x1b\xea\xb2\x6b\x4d\x98\xa5\x5b\xad\x86\x4a\x25\x89\xa1\x85\xe8\xb7\x7e\x75\x44\x14\x2e\x37\x4a\x13\x77\x75\x77\x14\xb0\x16\xd3\x3a\xde\x6c\xd2\xc2\xcd\x7b\x83\xc1\xd9\xbb\x3c\xc1\xee\xba\x58\xb8\x72\x66\xf5\xc4\x71\x55\x05\x96\xe7\xef\x90\x8c\x97\x0b\x62\xc3\x86\xf6\x66\x91\xb3\x18\x66\x6b\x4c\x82\x91\x76\xc4\x5b\x17\x96\xad\xb8\xc0\x52\x16\x9c\x5e\x55\x1d\xad\xef\x89\x4f\x0a\xba\xc0\x8a\x5b\x3e\x70\x3d\x8c\x5b\xe3\x61\x6d\x45\x65\xc4\x89\x9e\x75\xb9\x0e\x42\x3d\x5c\xe5\xd2\x2c\x98\x55\x58\xeb\x1f\xe7\xb0\x99\xc5\x80\xbb\x62\x5c\x43\xd3\xb4\x71\x07\xde\xf4\x3c\x8e\x61\xa2\x1f\xe1\xfc\xbe\x32\x33\x27\x5a\x0f\x99\x00\xad\xa3\xc5\x40\x91\x63\x41\x87\xab\x22\xec\x0e\x48\xa2\xd5\x51\x1d\x6a\x9d\xb0\x48\x7d\x67\x7b\xd1\x3b\x6b\xcd\xc8\xe0\x02\xe0\xed\x2a\x53\x70\x98\x0a\x67\x9d\x87\xe3\x59\x01\x26\x94\x91\xc3\x33\xa1\xe0\xe5\xc0\xee\xc0\xd6\x9a\xbd\xa2\xf0\x80\xe3\xed\x1f\xdd\x0f\x4a\x04\x9d\xc6\xf6\x4b\xb3\x56\x7e\x1d\x63\x7d\x6c\xda\x77\x97\x5d\x9e\x4f\xd6\xd4\xee\x68\xf8\xcf\xeb\x70\xd1\x68\xf2\xfd\x7d\x52\x6d\x39\x8a\xb4\xc1\xb2\xb5\x82\x78\xf0\x71\xeb\xa3\xf2\xad\x66\x51\x34\x80\x8d\xaf\x6a\x8d\x17\x1b\xa5\x05\x73\x44\x01\x9d\xd8\x2c\x19\x2f\xc3\x79\x51\xb2\x65\xae\x48\x40\x0d\x91\xa8\x81\xca\x8b\xa4\x75\x5f\x40\x05\xf2\x57\x61\x4a\xb2\xdd\x4d\x11\x39\x6a\x31\xc2\x32\x52\x5f\x25\x92\x46\xe3\x6a\x24\xd3\xcd\x6c\xb9\x0e\x67\xe5\xe0\x92\x87\x50\xa7\x20\x31\x8a\xc0\xab\x6c\x7f\x23\xff\x4c\xa3\xd1\x89\xbf\x90\x74\xef\x4a\x41\xdd\x38\xfe\x67\x1a\xdb\xcf\x2c\x3a\xad\x46\xfe\xd5\xbb\xa4\xcf\xfd\x01\xf8\x95\x2d\xaa\x0a\x98\x26\x0a\xeb\x8c\xd2\x7c\x51\xe8\x35\x4a\x70\xa2\xd9\x6c\x16\xe5\x85\xa1\x85\xce\x45\x16\x70\xaf\x64\x16\x2c\xe9\xe7\x24\x63\xaf\x20\xce\x97\x8c\xeb\x04\x51\x7e\xd2\x28\xa9\xbc\xf7\x8a\xde\x51\x4f\x74\x75\xdc\xf1\x31\x57\x4a\x7e\xc9\xb2\x9d\x31\xf7\xe9\x64\x53\xca\xa8\xc6\x48\x7b\xfb\x70\x54\x57\x1f\xd8\x98\x7e\x49\x7e\x08\x7c\x4b\x16\x2c\x79\xc9\x78\x7f\xc6\x44\x9d\xb1\x5b\x43\xf7\x4b\xf4\xba\x97\x2e\x92\x13\xe0\x2e\x79\xcf\x7f\x9f\x3f\xd2\x91\x0d\x1d\xb8\x11\x95\x7d\xbb\x20\xe6\xf1\x0f\x69\x28\x03\x92\x76\x0a\xd0\x68\x7b\x1e\xea\x19\x52\x40\xb2\x5b\x1d\x75\x31\x29\xee\x73\xf8\x22\xe1\x00\x3e\x80\x94\x20\xe5\x80\xa2\x23\xd2\xa4\xc7\xd0\x01\x5a\x61\x92\xa6\xb3\xa5\xcd\x8d\x87\x74\xe6\xbd\xf8\xa4\x61\x5b\x3b\x4f\x67\x17\x1c\x78\x6c\xab\x87\xb3\x8f\x4c\x07\x00\x6c\x0b\xc8\xef\x7b\xc1\x5d\x57\x06\x26\x83\x23\x33\xef\x9e\x8d\x8e\x6c\xf4\xc9\xef\x12\xfc\xee\x77\xee\xe5\x9d\x47\x9c\xfc\x0f\x4f\xdc\x8f\xb6\x7a\x0b\xec\x7f\x13\xd7\xe7\x61\xdf\x35\x78\x73\xee\x62\x56\xa7\x33\xef\x77\xb1\x67\x81\x75\x67\xf3\xce\x3d\x4e\x7e\x25\x38\x77\x19\xeb\xda\x6f\xd6\xe9\xd8\x25\x1b\x71\x96\xeb\xfc\x8f\xa1\x31\x63\x3e\x28\x47\xea\x33\x83\x19\xbe\x1e\x4a\x26\x93\x69\xa4\x4a\xcb\xef\xa0\x1d\x74\xe8\x58\x32\xe9\x45\xbd\x34\x7d\xb3\xd3\x09\x7b\xd1\xaf\xa0\x83\xbd\x44\xd6\x56\x56\x96\xc1\x22\x93\xd1\xe0\x94\x6f\x06\xbd\x4e\xe5\xd7\x60\x34\xc9\x0f\xa8\x19\xb0\x7e\x5b\x7f\x8a\x62\xfe\x8a\xda\x31\x42\x4d\x25\x98\x43\x76\x4c\x7c\x22\x30\xbc\x2d\x10\xf5\x87\x6d\x01\x8b\x1f\x7d\x46\x71\x24\x05\x59\x22\xa1\x80\x05\x3b\x28\x3a\x6a\xe3\xd1\x88\x2d\x86\x81\x50\x3d\x34\x5d\x57\xc5\xf8\x09\x08\x69\x6d\x2b\x87\x77\xd0\xd4\x80\x76\x5a\x39\xe6\x5a\xf1\xc6\xed\xdb\x8c\x7c\x64\xe6\xb6\x8b\xe7\xdc\xda\x5d\x76\xab\x38\x55\x7a\xa9\x78\x63\xad\xc6\xcc\xe9\x8c\x5d\x1b\xdf\x4e\xf8\x6e\x9d\x53\x7a\xeb\xac\x9d\xbd\x2d\x27\x3c\x15\x53\x9a\x17\xd5\xce\xd2\x68\x1a\x43\x1d\x35\x13\xaa\x6a\x3c\xd2\x94\x82\x92\xe6\xda\xce\xf2\x09\x3c\xdb\xe4\x9f\x58\xd1\x14\x2a\x11\xe9\xe4\x93\x5d\x85\x87\xaf\x9c\x72\xce\xe4\x6a\x3b\x73\x6a\x10\x0c\x51\xa7\xc0\x53\x11\x70\x08\x80\xe2\x8e\x7b\x01\x18\xfa\x1a\x7e\x35\xc4\x17\x37\x9d\x9d\xbe\xa3\xa4\xbe\xa4\xc0\xc0\x41\xf9\xc7\x80\x66\x0d\x66\x97\xbf\x0a\x7c\xe3\x8b\xf8\x1c\x3a\x0e\x00\xf9\x35\x34\x3d\x68\x04\x47\x71\x95\x82\x8b\x41\xb0\x25\xd4\x78\x49\x6c\xe4\x77\xb0\x4a\xcc\x60\xde\x94\xcc\x50\x76\x01\xdc\x2c\x08\xe9\x07\xea\x4b\xa1\x37\x0b\x11\xe1\x45\xea\xe0\x6f\x05\x41\xee\x15\xec\xde\xd2\xfa\xc1\x81\x0c\xe2\x83\xc2\xe7\x91\xbd\x6f\x29\xfa\x6e\xa6\xe2\x36\x75\xf8\x2c\x18\x54\x7e\x78\x8c\xb6\xd5\x2e\x9d\x01\xa6\x7b\xe4\x3e\x7b\x1c\x3d\xb3\xd4\x2e\x74\xe4\x17\xa5\xfe\xa5\xb1\xa0\x28\x46\xa6\x99\x12\xc1\x8e\x8b\x9c\x7e\x3e\x57\x5a\x8c\x59\x95\xf6\x66\x75\x33\x20\x8c\x95\xc4\xf2\xa7\x1f\xd5\x69\x37\x87\x51\xce\x4b\xa8\x89\xd4\x1c\x54\xa3\x08\xa6\x06\x0a\xf0\x68\x32\x02\x0a\x0e\x53\x46\x7d\x52\x26\x1d\xa2\x55\xb1\x98\xe8\x2a\xd6\x06\x30\x85\x01\xf6\x82\xc1\x2c\x06\x00\x09\x1f\x36\x9c\x31\x2a\x61\x86\x82\x70\x80\x8f\xe0\xad\x14\x91\x98\xfb\x7f\x32\xd5\x80\xa9\xf0\x98\xf4\x97\x3a\xf9\xe7\x3a\xa3\x41\x2f\xa7\xf0\x4a\x5c\x8a\xf8\xb2\x60\xb7\x97\x8e\xf4\xd3\x60\xb3\x41\x8b\x49\xd3\x0c\xe2\x5f\x2f\x80\x71\xf9\x5a\xce\xa4\x17\xb4\xb6\x6f\xde\x92\x07\xa6\x57\xff\xab\x7a\xba\xfc\xe1\xe4\x8f\xef\xfe\x98\xe9\xfd\x5d\xb5\x99\xb1\x02\xbf\x61\xd0\x93\x01\x81\x32\x4b\x56\x96\x40\x6f\x9c\xec\x17\x2f\xfb\xe4\x2c\x68\x11\xb5\x5a\x1a\xd0\x5b\xff\xb2\x38\xfd\xb9\x46\xd4\x43\x08\x77\xd0\x97\xf4\xf5\x1d\x3c\xd8\xd7\x07\x0f\xa7\xfb\x14\xdb\x4f\x7e\xbd\xeb\x70\xbd\x83\xb9\x7a\xb3\xa7\xad\x37\x18\x51\x33\xfa\x3b\xdb\xe1\x7b\xd4\xfb\x8e\x61\xb5\x93\x4e\xdb\x0a\xd9\x6a\xff\x69\xac\x5a\xcb\x43\xb9\xea\x31\x17\x8f\x6a\x02\x1d\x92\xbf\x76\xa0\xfe\xeb\x57\x71\xd3\xb0\x5e\xd6\x40\x75\x62\x0c\xb9\xe0\x77\xbc\xe2\xe1\x2b\x06\x23\x1d\x21\xce\xb4\x0f\x07\xc6\xae\x32\xe3\xcd\x5f\x59\xc0\xaa\x7e\x92\x74\xe4\x24\xd9\x91\x49\xe7\x04\x29\xb2\x73\x8a\x22\x3b\xe8\xb7\x67\xac\x5a\xe7\x41\xbf\xff\xf3\x0c\x49\x65\xba\xcb\xd4\xdf\x94\xab\xff\xc8\x5a\x9e\xbe\x3d\x46\xad\xa0\x9c\x61\x9f\x19\x56\x01\xd9\x3b\x76\x6b\xc0\xfe\x11\x75\x1e\xd6\x1a\xb9\x76\xf2\x66\xab\xb2\x65\xac\xa6\x00\x5b\xce\xdc\x00\xa4\xcf\xb3\xaf\xab\x7d\xbe\x1d\x7b\x04\x07\x89\x91\x9f\x58\xee\x4f\xdf\xe7\x83\x56\x0c\xed\x1d\x0e\x85\xe3\x8a\x1c\x1a\x0f\x60\x5e\x42\x35\xea\x09\x7f\x00\x18\xc0\x00\xc9\x08\xd8\xed\x02\xf3\x91\xb0\x13\x17\x35\xd5\xb5\x76\x76\xd4\x4e\x4e\xdf\x79\x9a\x4a\x7f\xee\xaa\xef\xde\x3e\xa9\xb5\xca\x29\x86\x4d\xe6\x60\x68\xde\x1a\x33\xb4\xcd\xae\xe8\xfb\xc1\xc1\x73\x77\xdd\xeb\x91\xcb\xef\x07\x90\xd7\x88\xad\x73\x52\xbb\xfe\xd8\xd6\x37\x6d\x4b\x57\x6c\xc1\x58\x75\x8e\xb7\xee\x38\x77\x4e\x8d\x59\xc3\x6f\xe6\x19\xe3\xf6\x85\x8e\xc2\x6b\xd7\xac\x3f\xf4\x1c\xac\xde\xb2\x05\x3c\xc2\x3b\x59\xb3\xc1\x28\x36\x2e\x78\x26\xbd\x85\x1a\x55\xf7\x38\xf1\x86\xce\xd5\xfd\xbb\xc7\xb9\x11\xd5\x93\xbe\xab\x39\xbe\x47\xdd\xdf\xcc\xaf\xdf\x2f\xbf\xa3\x21\x18\xb5\xf2\x83\x3f\x1a\xab\xf6\x43\x23\xab\xc9\x46\xc6\x6c\x8f\x0c\x6e\x64\x42\x5d\x87\x5d\x9a\x00\x00\x40\xff\xbf\x79\xeb\x8a\xc3\xc6\xc8\x75\x3f\x16\xa3\x0c\xda\x79\x3b\xe1\x12\xe3\x78\x8c\xcd\x0c\x08\x6d\x2f\x31\x1b\x13\x48\x42\x0c\xc7\x0a\x15\x44\x5f\x9b\x15\x93\x82\x41\x1e\x2f\x2f\x51\x21\x97\x3b\x18\x74\xbb\x42\xfd\x21\x97\x4c\x6c\xbc\xc0\xeb\x0a\x31\xfd\x71\x13\x5d\x65\xb1\x98\xc2\xda\xc6\xc4\x65\x25\x5d\x96\x89\xb7\x2f\x9c\xb1\x2b\xe0\x0a\x95\x14\x38\x7b\x6b\x3a\x7c\xa2\x4b\xab\xe5\xf5\x85\x56\xc9\x55\xd5\x59\xed\x33\x69\x81\x24\x89\xb4\xa0\x61\x80\x6d\xe6\x16\x62\xb5\x41\xf7\x84\xee\x6c\x00\x07\xfa\x5d\xd0\x56\xe1\xed\x6a\xa9\x6f\x69\x08\x6e\x9a\xd4\x05\x8b\xdd\xae\x72\x00\x82\x2e\x78\x49\x41\x10\xc2\x2d\x89\x85\x3e\xb1\x39\x58\x16\xae\x68\xb6\x4a\xb6\xe2\xda\xd2\x66\x8f\x33\xd4\x55\xe1\xe7\x9c\x56\x61\x8b\xba\xe6\x8f\xc6\xfd\x04\x89\x31\x73\xab\x38\x8c\xd9\x97\x37\x52\x83\x0f\xda\x6d\x44\x1b\x86\x0e\xec\x04\x43\xe0\x8c\x31\xf9\x2f\x54\x68\x8c\xd5\x26\xc1\xed\xd1\x44\x63\x0e\x35\xf2\xc7\x5b\x4f\xd7\x10\xeb\xe3\x60\xf3\x4c\xf9\x6f\x8c\x46\xa0\x45\xd1\x0a\xb4\x26\x5f\x75\x67\x95\x4b\xb2\x16\xea\x79\xad\xd6\x25\xfa\x3a\x6a\x7a\x9d\x05\x25\x21\x57\x60\xd7\x8c\x85\xb7\x4f\xb4\x74\x95\x5c\x96\x68\xd4\x86\x4d\x16\x4b\x15\x4d\x67\x5a\x22\xfd\x17\xa5\x0d\x48\x7b\x3c\xdc\xb2\x68\xe6\x16\xc1\xea\xe4\x82\xa5\x33\x42\x4e\x4f\x73\x69\x6d\xb1\x4d\xb2\x36\x57\x84\xcb\x82\xcd\xa2\x6f\x61\x62\x0b\x84\xc1\x02\x78\x89\x2b\x08\x40\xb9\xcb\x5d\x0c\xbb\x26\x6d\x0a\x36\xa0\x86\xeb\xf2\x62\x14\xfa\xcc\x5a\x86\x96\xd8\x91\xca\xa9\x16\xd4\x1a\xab\xa9\x8b\xa9\xab\xa8\x3b\xa9\x47\xa9\x5f\x10\x5e\x13\xec\x19\x8f\x57\xc9\x22\x18\x5a\x2d\x88\x04\x46\xf4\x7f\x94\x45\x7f\xaa\x11\x2f\xa2\x2e\xdf\x5b\x58\xd5\x47\x08\x65\xc1\xe2\x23\x5e\x65\xb0\x59\x33\x2c\x31\x68\x40\x24\x4e\xb0\x45\x20\x60\xb3\xa2\xdc\x75\xb1\x3a\xcc\x69\x84\x83\x34\x6a\x41\x1d\xa1\xa5\xf3\x79\x09\x3a\xa9\x0a\x7e\xe9\x25\xfd\x0c\x89\xf7\x7c\x38\x40\xc0\x30\x6d\x11\x4c\x74\x4a\x3c\xb6\x90\xb8\xa4\x2c\xdc\x61\x20\x0e\x8b\x5a\x8e\x80\x5a\x8e\x51\x0b\x78\x37\x15\x59\xcc\x66\x4b\xd1\xd3\x13\x27\xa6\x5f\xe8\x9e\x36\x13\xfc\xa4\x3d\x1c\xf4\x69\xb9\x89\x00\x08\x56\x3b\x68\xe3\x0d\xe3\x02\xbe\xf6\x76\x6f\xc9\x38\x03\x3f\x08\x69\x83\x3b\x5a\x57\x64\xb3\x16\xad\x75\xdb\x2e\xf3\x3b\x39\x20\x5f\x92\x48\x40\x9b\xa4\x9b\x58\x7e\x85\xfc\x77\xf9\xb3\x2b\x2a\x26\xe8\xac\x56\xdd\x84\xf2\xfd\x30\xb4\xbf\x1c\xa5\xd3\xc6\xb3\xa6\x47\xa2\x33\x79\xaf\x26\xa0\x9f\x06\x7c\xb6\xa2\x9a\x88\xdb\x66\x73\x47\x6a\x8a\x6c\x4f\xb4\xb7\x13\x38\xeb\x76\x4e\x8f\xee\x0e\xbe\xce\x5f\xe0\xf9\xe4\x8e\x5a\xf3\x80\xf9\xa8\x3f\x12\xf9\xeb\x64\x79\x31\xb8\x7f\xf2\x1e\xf9\xba\xd2\xca\x42\x4b\x10\xf8\xe5\x7f\x3a\xa1\xa9\x18\x38\x37\x1e\xaa\xb3\x95\x8d\x2b\x01\x9f\xdd\x55\x5a\x66\x7b\x52\x5b\x24\xd8\xc5\xd2\x90\xbb\xe9\x92\x26\x77\x28\x54\xd4\xd0\x35\x21\xe2\x02\x06\x9b\x9e\xae\xbf\x3d\x12\xb9\xbd\x2e\x4d\xff\x64\x6e\x45\x13\x6b\x32\xb1\x4d\x15\x0b\x8f\x3d\x32\xaf\xbc\x19\xa7\x9b\xcb\xe7\xd1\x4d\xa0\xf4\x97\xbf\x74\x2c\x75\xac\x8b\xff\xfa\x82\xbd\x8d\x45\xe8\xda\x46\xb2\x71\x37\x83\x2d\xf2\x5f\x8a\xcd\xd0\x09\xcc\xf2\xef\x83\xa2\xbb\x12\x68\x86\xaf\xe1\xa2\xaf\x03\x8d\x97\x7f\x21\xf1\xb2\x99\xfe\xb1\x84\x5a\x45\xed\xa6\xf6\x53\xb7\x51\x0f\x13\x3d\x1d\xa3\x14\xa2\x77\xcd\x22\xa1\xa7\xae\x36\x18\xc1\x78\xba\x96\x88\x6f\x8c\xd7\x92\x79\x79\x51\xd4\x3b\xa2\xe4\xe5\x05\xa3\x01\xd2\x61\x5a\x40\x64\xd4\x8b\x8d\x63\x86\x1b\x3f\xda\xad\x25\x0c\xb8\x3c\xe7\x25\x5d\x04\x43\x86\xa3\x5e\xe1\x25\x3d\x04\x44\x68\x74\x77\x0c\x9e\x1c\x91\x32\x7d\x4f\xe9\x67\xb8\xef\x05\xc7\xe8\xa1\xf4\x2b\x61\x87\xdd\xee\x08\x83\x39\x67\x9d\x35\xd4\xb8\x41\x7e\x69\xfd\x6a\xe0\x5d\xbc\xd8\xe3\x16\x69\xb0\x58\x63\xa8\x1a\x1f\x03\xc7\xb4\x96\x58\x6d\xf9\xe2\xc5\x95\xe3\x63\x16\x2d\x98\xb3\x04\x0d\x6b\x55\x8f\xb9\xc3\xed\x1d\xe1\xc2\xa2\xf0\xa4\xa9\x48\x51\x81\xe9\xfe\x05\x0b\xe0\x1b\x2e\x61\x51\xe3\xd3\x69\xd7\xd3\x8d\x8b\x8d\x2e\x94\x6e\x7a\x0a\x7e\x4c\xd2\x43\xae\xb5\x17\xae\x16\xaa\x83\x85\x7d\x53\xc0\x93\x85\xa1\x8e\xf6\x50\x61\x61\xa8\xbd\x23\x54\x08\x66\x2d\x89\xd6\x56\x19\x35\x4b\x00\x2d\xba\x3d\xa0\xe4\x3f\xdb\xed\xa0\xd2\xde\x51\x55\xd5\x71\x78\xf9\xf2\xf4\xaf\xc0\xe7\xf2\x0f\xca\x6c\xb4\x17\x9c\x23\x5f\x58\xe3\x0c\xb6\x2c\x7f\xa1\xd3\x55\x1f\x7b\x2f\xbd\x7e\x7c\x3c\xee\x9e\x6b\x8c\xe8\x4a\x26\x2d\x5c\x37\x2b\x18\x89\x04\x67\x1d\x43\x9b\xa8\xdb\xad\xa5\x7f\xf1\xd6\xa4\x49\x6f\x4d\x4e\x2f\xfc\x74\x5b\x53\x37\x67\xb3\x71\xdd\x4d\x9b\x3e\xc7\x69\xde\x6a\xe5\x51\x9a\x11\xe4\xcd\xf2\x3f\x80\x69\xda\x81\x75\xf3\xe4\x6f\x27\x3f\x3c\x1b\x5d\x1d\xea\x7e\xb8\x1b\xdf\x64\x8e\x6c\x8c\xb7\x06\x9d\x11\x70\x40\xbe\xce\x07\xed\xe5\x60\xb7\xe2\x4b\x89\x79\x73\xff\x4d\x49\x38\xfa\x1f\x70\x8a\x06\x1d\x97\x6a\xc3\x19\x85\x19\xaf\x0a\xdb\x32\x8b\x32\x20\x06\xf0\x41\x38\x5f\xf7\xb5\x3b\xf4\x85\xcd\xaa\x4b\x03\x70\x97\x41\xaf\x75\x7c\x51\xea\xa2\x5f\xd6\xeb\xd3\x5f\x82\x6e\xbd\x4e\x67\xff\xa2\xcc\x29\x1f\x13\x21\x28\x08\xff\xc3\x4e\xaf\x11\xe5\x69\x55\x7e\xcc\x5b\x80\x5e\xa1\xc9\x54\x09\x56\x9b\x6d\x43\x67\x81\xf4\x2d\x56\x8b\xa9\x12\x9e\xe7\xa5\xaf\xa9\xcc\x8c\xd1\xca\xd8\x24\x65\xf9\x45\xf0\x7a\x0f\xb6\x20\xd8\x68\xce\x81\xbd\xb0\xe2\x80\x1c\x01\x76\x40\xf6\x62\x61\x80\xc4\x70\xc7\x28\xe3\xcb\x1e\x5b\xf1\xd3\xa2\x86\xd7\xec\x7e\x5e\xab\xd5\x98\x9f\x29\x96\xe8\x38\x6f\x79\xd6\x23\xc9\x6b\x90\xba\x6d\xf5\x3e\x2d\xf2\x1a\xad\x3c\x04\x6e\xd1\xfc\x7e\xd8\x22\x35\x0d\x3e\xf0\xeb\x0d\x96\xdf\x02\xf9\x87\x82\x60\x2c\xa1\x67\x1b\x02\xe9\x30\x94\x7d\x01\xa4\x60\x83\xf7\x01\xfc\x4f\xf3\x15\xa3\x31\x6b\x28\x1d\x4f\x31\xff\x46\xa9\x4e\xb2\x86\x2f\xd5\x32\xc5\x00\x83\xde\x2b\x6c\xf6\x45\x00\x53\x73\x9a\x80\x80\xf4\x04\x5f\xa8\xa4\x1a\x2a\x33\x09\xea\xd9\x2d\x20\x44\xf8\xe6\x5b\xb9\x48\x0c\xfe\x0a\x7c\x24\x17\x3e\xf3\x00\x68\xe8\xec\x04\x5e\xc1\xe7\xf4\x7a\x04\x4e\x0a\xa3\x52\x02\x20\xf1\x25\x82\x20\x78\xbc\x4e\x1f\x1a\x21\x06\xe5\x2b\xde\x90\xdf\x18\x5f\x53\x52\x12\x9c\xe0\x1c\x9d\x43\xf0\x82\x41\x70\xf3\xc9\x34\x58\xa7\x65\x19\x9a\xe6\x74\x66\x87\x89\x2b\x58\x1a\x4f\x5c\x37\xae\xf4\x8a\xeb\xae\x8b\x2f\x46\x13\xb2\xc3\xa4\xe3\x68\x5a\xc2\x2c\xd5\x0c\xab\xf3\x16\x8c\x3a\x6f\xc6\xe7\x45\x4a\xc1\xc1\xe2\x52\xec\x01\x62\x5b\xc5\x0c\xc8\xc5\x68\x58\x60\x6c\xc0\x16\xe6\xa3\x20\xea\x40\xff\xe2\x36\xad\x01\x29\xec\x9f\xcb\x3f\x92\xed\x6c\x85\x6c\x47\xfa\xb8\xe3\x7a\xb0\x00\x00\xb0\x30\x3d\x1b\x2c\x90\x45\xf9\xc7\x6c\x15\x98\x23\x3b\xe4\x07\xc1\x42\xf0\x89\xfc\x63\x59\xa4\x5b\xe4\x37\xe4\x3f\x83\x36\xf9\xa3\x73\xe4\xdf\x13\x3e\xf6\xe0\x39\x3d\xa0\x10\xb3\xa5\xc9\x1f\x31\xbf\x95\xff\x2c\xbf\x09\x04\xf9\x9f\xf2\x3f\xe4\x9f\x83\x22\x7a\x8f\xfc\x73\xf9\x9f\x60\x3c\x12\xde\xf5\x68\x5c\xfa\x8a\xf8\x98\xe8\xd1\xc8\xa4\x94\x07\xe3\x3f\x07\x2c\xe8\x2f\x18\x67\x79\x4c\x49\x8a\xff\x68\xc0\x6b\xb1\xe7\x1b\xab\x1d\xbc\xbb\x9f\xbd\xb3\x7f\x68\x8e\x8f\x36\xf9\xd2\x8b\xda\xe1\x3b\xed\xe9\xff\x5e\x0b\xd7\xae\x7d\x0f\x7c\x90\x94\x03\xe9\x47\x69\x6f\x0f\x18\x48\x27\x61\xb2\xe2\x8e\xfb\x6e\x87\xae\x43\xf2\xb1\xeb\xe0\x93\xbb\xd2\xa7\x76\xd1\xbb\xd2\x17\xf7\xc0\x4b\x4e\xde\x75\xe4\xc8\x18\xbe\x17\xb3\xa8\x75\x39\x2f\x97\x0c\x18\x6d\x06\xe7\xb6\xc4\x1f\x42\x72\x11\x96\x8e\x68\xbb\x95\x53\xfa\x80\x87\x8e\xd5\xda\xb1\xf4\x04\xe2\xad\x74\x88\xa0\xd8\x62\x39\x82\xa6\xcc\x79\xe3\x9c\x39\x37\xcc\x65\xdc\x34\xbc\x1f\xcb\x4f\x7f\xfc\x31\x98\x0a\xe6\xc4\xba\x62\xb1\x2e\x79\x8a\x70\xe5\xd4\x0b\xe7\x17\xd5\x76\x59\xf5\x26\x16\xb7\x1c\x6b\xd2\x5b\xbb\x6a\x8b\xe6\x5f\x38\xf5\xca\xd3\x9f\x82\xe7\xb1\xba\x8f\xde\x5c\x24\xc7\x16\xbd\xf9\x91\x8e\x25\x69\xf0\x32\x4e\x43\x3b\x71\xe8\x00\xf7\x2a\x4f\xf9\x98\x3c\x24\x96\xfc\x9e\xb7\x1d\x7e\x4a\x3e\x6f\xf4\xfd\x49\x7a\xd8\x77\x6d\x22\x38\x1f\x23\xfd\x65\x22\xd9\xc8\xd7\x4c\xb4\x0a\xa1\x3a\x52\xbe\x34\x70\xeb\x45\x8f\x5c\x74\xd1\x23\xf0\x11\xb2\xc9\xf0\x18\x29\x5f\xe0\xd0\x03\xf8\x98\xfa\x2f\xff\x39\x10\xcd\x5e\x98\x07\x5c\xf2\xb1\x11\x2d\x88\xc4\x7d\xc3\x5c\xb5\xa8\x5f\xcb\xe7\xc1\xd8\x72\x39\x2a\x47\x97\xf7\x42\x1d\x18\x1c\x89\x94\x70\x48\x7e\x7d\x00\x3e\x96\x9e\xd1\x0f\x6a\xc6\x8a\x4f\xee\x66\x2f\x61\xef\x41\xfa\x04\x8e\xae\x6c\xc7\x7d\x01\xd8\xb9\x30\x8e\x33\x8a\xa1\x77\x57\x85\xc9\x72\xd1\x4b\x44\x6f\x53\x42\xef\xb9\x84\x45\xbd\x01\x3b\x4e\x23\x69\x51\x22\xf1\x10\x48\x86\xa4\xd1\xfc\xd5\x06\x90\xb8\xe3\x01\x9c\xc4\x11\xdc\x85\x20\x3a\xcc\xe0\x33\x98\x33\x23\x5e\xc2\x62\xdf\x0f\xba\x5a\xb3\x3d\x1a\x2e\x2a\x0c\x95\x74\xc6\x37\x0a\x2f\xae\x6c\x9b\x4e\x33\xd7\x2f\x5d\xb2\xf3\x23\xeb\xd4\x8a\x1a\xf9\x03\xf9\xb3\xf2\xaa\x84\xe8\x59\x1a\x6f\xfe\xe8\xfd\xb6\xe8\xd2\x05\x1a\x93\xb1\xa2\x64\xc1\x1b\x2f\xac\xab\x9a\x32\x27\x61\x2d\xf0\x72\xe2\x1f\x61\x7c\xc0\xc6\x99\x9f\x70\xcd\x67\x2b\xca\x7d\x43\xf2\xad\xdf\x1c\x32\xd9\x8c\x2c\x0f\xb5\x01\x9b\x4b\x4b\x17\xf9\xeb\x4b\x3c\xbb\x8f\x83\x5d\x60\xdc\x6d\xcd\x66\x00\xef\x6b\xeb\xf2\x5a\xe6\xcc\xb1\x88\x86\x26\xcb\x86\x2d\x15\x85\x17\x4e\x5a\x92\xd4\x68\x6e\x86\x3b\xdd\x01\xad\xa6\xba\x86\xd7\xf9\x5d\x85\x01\x2d\x5f\x54\xa8\xd1\x04\x86\x44\xd7\x9a\xf6\x4e\xeb\xf8\x6a\xda\xa2\xb1\xfa\xa3\x81\x9e\xe7\xcd\xda\x1b\x6e\xe0\xfc\xf5\xf4\xd3\xf7\xcb\x4e\x4f\x5d\xa1\x65\x4f\xc8\xbd\xc9\x50\x34\xce\x5d\xa7\xad\x7d\x69\xd7\x43\x53\x5d\x95\x1e\x8f\x49\x5f\x25\x06\x17\x56\x75\x59\x5b\x09\x0e\xac\xf2\xae\x34\x64\xb4\x6f\x44\x3a\x39\x61\xb7\x0e\x11\x2a\xe2\x58\x9c\x84\xb3\x93\x50\x7d\x09\xb7\x0f\x1e\x33\xb1\xf2\x81\x46\x55\xa9\x2e\x16\x0a\xa3\x8f\xc6\x04\x08\x87\x21\x6e\xd8\x18\xe6\x53\x60\x39\x5e\x69\x6b\x0f\x8d\x8e\x33\x58\x57\x11\x47\x09\x86\xdd\x73\x4a\xca\x41\x79\x78\xde\x34\xcd\xa2\x7d\x7d\x34\x8c\x57\x4e\xbe\xf6\x49\x6b\x7b\xb8\xe2\xb6\x07\x2b\x42\xed\x36\x63\x95\xdf\xf3\xe2\x5b\xbe\x92\xda\x7a\x3d\x6b\xba\x4b\xee\xbd\xdb\xc0\xba\x4c\xd5\x77\x7c\xfb\x98\xdf\x63\xba\x5c\x6b\x29\xdf\xf4\x5b\xf9\x1f\xfb\x96\x87\xca\x23\x8c\xc6\x5e\xc2\x01\x0d\x27\x1a\xd7\x3f\x06\xe8\x27\x9c\xc5\xc5\xcc\x78\x50\x3a\xcc\x9a\x77\x6b\x79\x95\xdd\xba\x5e\x74\xc4\x5a\x26\x9e\x67\x58\xda\x5e\xb3\xc8\x5a\x3c\x07\x34\xda\x5c\x1c\x6b\xb5\x72\x7c\x81\x55\x72\xf2\x48\xb1\x60\xf9\x82\x34\xcd\x87\x0b\x98\xbe\x3e\xce\x70\x6b\xfd\x6c\x77\xd5\x2a\x69\x42\x1f\xfc\x55\xd4\x1e\xf7\xb5\xb9\x0d\x7e\x93\x75\xbc\xa7\xe3\xaa\x97\x4b\xd8\x3a\xab\x5f\xdf\x6d\x2d\x5c\x62\xb4\x86\x6c\x40\x0f\x6a\x47\xcc\x43\x80\xea\xc0\x31\x60\xa8\x59\xfd\xd8\x1e\x88\x87\x95\x2a\x1a\x49\x62\x51\xd4\x9f\x08\xc2\xa0\xcf\xe6\xb3\x58\x3d\xa8\x05\xe9\x47\xba\x1d\x8f\x2c\xee\x3d\xb6\x69\xa6\xef\x81\xa9\x5b\x3a\xc6\x5b\x59\xc0\x33\xff\x0d\x66\xc8\x8f\x1a\xbd\xed\xe3\x67\xbe\xf1\x59\xa0\x15\xc0\xfa\xa5\x17\x5c\xd0\x08\xbd\xef\xba\x16\x2e\xdb\xb8\xb0\x92\xe5\xe5\x45\x43\xe9\x93\x9e\xba\xa8\x07\xc0\x7c\x3b\xbf\xc2\x20\x1b\x46\x53\x5b\x15\x8c\x5a\x7c\x51\xec\xd0\x81\x06\x3e\x1e\x09\x84\xf8\x59\xad\x60\x94\x2d\x74\x53\x6b\x45\x53\x49\x5d\x81\x0e\x80\x53\xd4\x71\x0d\x60\x0b\xa2\x6b\x3a\xf6\x96\x2f\xbc\x6d\xd5\xa4\xcb\xc1\xdd\xf9\xed\x37\xfd\x29\x3b\x70\x94\x8e\x73\x80\x6b\x7e\x01\x26\xeb\x2a\x16\xf4\x2e\x28\xb8\x4f\x5e\xde\xb0\xad\x6f\x02\x04\xe3\x99\xea\xe1\xb6\x50\xfa\x54\x02\xa6\x51\xdd\x31\x6a\x8f\x7d\x6c\x95\x1e\x7e\x65\x36\xca\x77\xeb\x8c\x82\x4e\xbe\xc3\xa8\xd1\x5a\x55\xbc\x40\xa4\xb4\x99\xe5\xa4\x4e\x07\x92\x66\x49\x62\x88\xcd\x62\x30\xe3\x53\x42\xc1\x34\x9b\xc2\xf7\x54\xfd\x56\xb2\xb0\xc9\x71\x35\x48\x0c\xa6\xb3\xf7\xb1\x99\x8d\x60\x39\xbe\x3b\x58\x65\x64\x24\x69\x90\x38\x70\x33\x03\x21\x33\x40\x37\x97\x93\x66\xe5\x1d\x25\x00\xcd\x53\x74\x9a\xdc\x33\x83\x82\x9f\xc1\xc0\x77\x28\xe0\x19\x3c\x85\x4b\x30\xa2\x50\x70\x60\xf8\x33\x56\x0a\xa4\x06\x8a\x1f\x32\xa0\xb9\x94\x7a\x4f\xc5\x2e\x3d\x1c\x3d\x1f\xb3\xea\xa4\x70\x11\x46\x94\x0a\x5e\x8a\x9a\xe2\x4e\x41\x93\x5f\x05\xd4\x40\x59\x7f\xfc\xcd\xa8\x3d\x43\x24\xea\x51\x55\xe7\xb0\xb0\x1e\xf0\xd3\x30\xaa\x4a\xdb\x58\x66\x27\x1a\x9f\xc2\x11\x0a\x32\xdc\xaa\x0a\xd1\x9d\xc3\x6a\x67\x37\x87\xe7\x5d\x92\xac\x59\xb2\x60\x42\xcb\xec\xd9\x91\x9b\x6f\xbc\x7e\xf3\xe6\xa3\x53\xd7\xf7\xfa\x2b\x57\xae\x9d\xb2\x63\x79\x5d\xdd\xac\xc0\x84\x03\xf2\x87\x45\x9e\xb6\x58\x2c\xd8\x4e\x4f\x9f\xf6\x08\xa0\xd1\x0c\x33\x61\xf7\xee\xe7\xbd\x5e\x9f\x1f\xed\xb0\xff\xfc\xe8\xd0\x41\x8f\xc7\xef\x9f\x50\x92\x68\x8f\x2c\xdf\x7c\xd1\x8b\xcc\xce\x96\xe9\xd3\xdb\x62\xa2\x9e\xbb\xf1\x9c\x0d\xe3\x68\x33\xcd\x18\xb2\xfe\xfc\x04\x8b\x5c\x91\x0e\x28\x60\x09\x5a\x08\x9b\x93\xba\x85\x3f\x4a\x2f\xc0\x7f\x5c\x72\x68\x3b\x76\xed\x82\x62\x7a\xfb\x72\x58\x09\xff\x2b\x7d\x2e\x8c\xa6\x77\x0c\x7d\xbe\x1b\xde\x48\x9f\x37\xf4\x31\xbc\x03\xbb\x75\x2b\xb8\xb3\xec\x1e\x32\xdf\x17\x22\x49\x74\x06\xd2\x81\x28\xaa\x36\x46\xe6\x27\x46\xdd\xb2\xca\x2c\xa6\x74\x6e\x05\xca\x92\x04\x54\xb6\x60\x75\x97\x2c\x2e\x84\x89\x8d\x10\x07\x5a\x62\xef\x7a\xec\xc9\x5a\x8c\xdd\x18\x70\xa0\x38\x4f\xbe\x0c\xf5\xc3\xa8\xb5\x83\x0f\xbc\x0e\x87\xd7\x0e\x8e\x7b\xed\x76\xaf\x63\x68\xb0\xac\xb9\x69\x41\x73\x33\x33\x2b\x51\x39\xbd\x79\x41\xf3\x81\xe6\xf2\xb2\x66\x30\xad\x2a\x01\x7f\xbc\x21\x39\xb4\x2a\x79\xce\x14\xde\x60\xe4\xa7\xae\x78\x7b\xc5\x54\xde\x68\xe0\xc1\x61\x7c\xbe\xb9\xac\xbc\x99\x29\x72\xe0\xfb\x28\xff\xde\x68\x2e\x93\xe7\x94\x37\x37\x97\x83\x1f\x97\x35\x4b\xe9\xb5\x55\x89\x3f\xe3\xbd\x3f\x2b\xbf\x89\x2a\x78\x2b\xb8\x31\xfe\xc2\xf6\xed\x2f\xc4\x2f\x35\xf2\x9c\x61\x5f\x59\xd9\x3e\x03\xc7\x1b\xd3\x37\x66\xae\x2a\x6f\x6a\x42\xf3\x28\x96\xbb\xbe\x25\x9c\x1b\x26\xca\x0f\x34\x48\x15\x08\x82\x08\xe8\x04\xff\x20\x78\x2a\x01\x4c\xe9\x54\xeb\xe0\x42\x3c\xaa\x14\x08\xe1\x71\x87\xe7\xf0\xf8\xdd\x4a\x37\x83\x10\x12\xe0\xb1\xc0\xa3\xc8\x3b\x78\x99\x04\x9d\xc4\x92\x0f\x99\xe9\x42\x31\x75\x39\x05\x0f\xf2\x68\xd4\x8f\xc7\xea\xa2\xe8\x30\xe7\xb0\x06\xaa\x50\x37\xc6\xc4\xf4\x1c\xe6\x40\xc2\x9a\x21\x4f\x02\xa0\x1c\xb5\x76\x8e\x04\xaf\x92\x29\x96\xc6\x63\x3f\x8d\xa7\x04\xa0\x70\x9c\xa0\x59\x22\xa4\xcc\x08\x68\xfa\xc4\xc1\x23\x02\x5e\xb1\xc1\xde\x86\x56\x01\x92\x21\xd1\x8e\xb3\xe0\xf7\x40\x4a\x49\xbc\x2b\xc9\xd5\x1e\x68\x8b\xa1\x19\x06\x0d\x58\xe8\x6a\x12\xc8\x8f\x33\x10\x03\x6e\x0c\xcf\x41\x91\x56\xa4\x70\xe0\x02\xd9\xec\x8e\x5a\x9e\x43\xba\x2f\xae\x12\xa3\x4c\x55\xe1\x3a\x34\xe7\xfb\x71\xd2\x61\x45\x17\xd7\x61\x61\x2e\x20\x60\xb1\x1f\x4d\xfb\xf8\x0e\xb5\x31\xe0\x81\xb8\x38\x80\x40\xb3\xd0\x04\xbc\x08\x0d\x93\x61\xa5\x29\xf0\x03\x70\x23\x60\xe9\x10\x44\x49\x11\x71\xe1\x68\xde\x8a\x1a\x92\x94\x10\xaf\xbb\x91\xd5\xb8\x10\x3e\x49\xd6\xe1\x50\xbd\xe3\xca\xfc\x18\x21\x60\x36\xbc\x9a\xd7\x4e\x24\x4f\x72\x5b\xd4\x46\xb8\x59\xd5\x1b\xab\x2d\xed\x61\xe1\x4d\x7a\x2d\xc3\x4a\xec\x52\xc6\xa4\x73\x6a\x68\xf9\x36\xa4\x05\xd0\x34\xaf\xd3\x32\x16\x06\x40\x08\x20\x3d\x3f\xce\xf0\x34\x0d\x79\xa0\x05\xba\x69\x01\xa7\x6f\xa1\x4f\x1f\x2e\x36\x01\xbd\xd6\x26\x1a\x8d\x40\xf0\x17\xd8\x19\xc6\xaa\x0f\x9b\x9a\x38\x0d\x67\x2f\x08\x16\xea\xf4\x22\x92\x2a\x2c\x05\x76\xf3\x06\x11\x68\xc7\x15\xd0\xc0\x5f\xe8\x2e\x82\x40\x6b\xe1\x75\x1c\xa3\xe7\x2d\x00\x58\x9d\x16\x2b\x00\x76\xad\x26\x0c\x8c\xac\x4e\xb0\xeb\xdc\xf6\xea\x38\x2c\x73\x7b\x59\xad\x9e\xa5\xb5\x06\x6b\xa7\xb6\xc2\x55\x10\x43\xd3\x82\xb9\xa0\xcc\x12\xf2\xfb\xdc\x76\x23\x84\x1c\xa7\xe7\x8d\x74\xe1\xac\x98\xdd\x56\x66\xa7\x81\xa7\xc8\x28\x3a\x66\x69\x20\xe0\x34\x36\x2f\x03\x39\x86\x85\xb0\xa4\x8a\x2d\x65\xac\x0f\x68\xcd\x74\xb1\x47\x53\x26\x54\x85\x19\x23\x07\x68\xab\xae\xea\x82\xcb\x2a\x1c\x7a\x03\x44\xcf\xe4\x6c\xb4\x03\x42\x0b\xb4\x9b\x4a\x40\xfb\xcc\xf4\x5d\xb4\x9e\xd3\x42\x5a\x47\xd3\x7a\x1a\xdc\x03\xb5\x16\x8e\xd5\xb2\x1c\xa4\x85\x32\x51\xab\x7f\x5c\x67\xa0\x39\x86\xa1\x05\x46\x03\x63\xac\x91\x36\x69\xb5\x2c\x0d\x81\x0e\x32\x8c\x46\xd0\x00\xb3\x00\xe3\x56\x3b\xe4\x9d\x8e\xa0\x2b\xa4\x09\xad\x28\xb4\xac\x0d\x89\x0e\x9d\xdf\x53\xb1\x40\xea\xb2\x56\x4c\x29\x89\x14\x16\xdd\x9b\x90\x12\x25\xe5\x4e\x56\xe7\x07\x00\x0d\xe1\x3a\x61\x81\xc5\xe3\xb4\x45\xbd\x11\xbf\xd6\x28\x42\x03\xcb\x00\x3f\x4d\xfb\xad\x97\x04\x9c\xab\x27\x38\xca\xcb\x69\xd1\xaa\xbb\x70\x7c\x47\xa5\x9e\x41\x83\x9f\xe8\xe1\x35\x41\x7b\xc8\x7a\x9e\x60\x60\x60\x5d\x77\x78\x42\xb4\xaf\xa4\x61\x12\x8b\xe4\x84\x55\xf1\xc5\x26\x24\x6e\xe8\x75\x6e\x77\xcc\x2f\xba\x45\xad\x00\xed\x21\xd1\x6c\x95\x74\xf5\x67\x95\x36\xb5\x74\x46\xc7\xeb\xc3\x5e\x9f\x8f\x16\x80\x60\x72\x99\xdd\xcc\x1a\x20\x01\xce\x80\x76\x4d\xb4\xde\xc8\xc9\x73\x80\xc6\xc2\xb2\x1a\x3d\x6a\x5f\x1d\xad\xc1\x2f\x1c\xca\xb7\x8a\x4e\x53\x81\xdb\x5c\xa4\xf3\xf3\xe5\xec\xf8\xf3\xac\xd6\xb6\xbb\xb7\x95\x42\xa6\x72\x67\x55\xb8\xb9\x58\x34\x80\xd6\x39\x9e\x12\xbb\x6d\x82\x5f\x43\x7b\x00\xa8\xad\x03\xf4\xc4\x02\xc9\xc4\x33\x09\xd6\x53\x6a\xd3\xd2\x9a\x3d\x26\xa4\x40\xf2\x0d\x13\x01\x68\x28\x36\x55\x14\x43\x5a\xaf\x05\x45\x92\xdd\x03\xca\x4a\x18\x93\x60\x70\x00\xc1\xc5\x6a\x1c\x26\x3d\x80\x16\x60\xd0\x5a\xb4\x02\x87\x4a\x42\x73\xc5\x8c\xc4\x20\x09\x94\x61\x4c\x0e\x00\x0c\x66\xc9\xa4\x65\xb4\x90\x65\x19\x8e\xe6\x81\xd0\xec\x32\xe8\x5b\x8b\xb5\x34\x5f\xd0\x36\xbe\xa3\x88\x7b\xa0\x41\x5c\xab\x71\xda\x8a\xdb\x0a\x0b\x25\x00\x98\x09\x6b\x0c\x5e\xc6\x71\xb9\xd6\x54\x55\x4a\x9b\x9a\x6a\xaa\x9c\x1d\x1a\xb3\x06\xb2\x5a\xbe\xce\x6c\x9a\x1a\xd2\x70\x55\x05\xed\x48\xdd\x96\xb6\x79\x6d\xeb\x17\xbb\xc4\xa0\x57\x4f\x97\x59\x5c\x10\x6a\x59\x60\xb2\xfe\x42\xc3\xd3\x0c\xad\xe3\x78\x00\xcd\x71\x06\x88\x03\x7a\x8b\x06\x30\x0c\x60\xdc\x34\x0b\x3f\x85\x9c\x06\x9a\x80\xd1\xc8\x31\x46\x96\xa3\x51\xbb\x01\xe6\xe4\x4b\x86\x02\x87\xdd\x6e\xb1\x1a\x45\x46\x9a\xe6\x36\xf3\xa2\xb6\xc8\x8e\x7a\x32\x7a\x4b\x85\xde\x02\x00\x9a\x8d\xa8\x67\x1b\x2c\x7a\xc7\x42\xbd\x79\x7c\xb0\x44\x6b\x60\x74\xa2\xdf\xdf\xe9\xb3\xb2\xb4\xd1\x54\xc6\x39\x0d\x76\xbd\xa9\x43\xb0\x68\xb9\x02\x0d\xe7\x15\x68\xae\xa2\x6e\x42\xd8\xf2\xd3\xba\x69\x7e\xad\xd3\x6c\x2f\xc2\x74\xde\x6b\x63\x1d\xd6\x6b\xeb\x36\xbd\x78\xd6\xae\x72\x1b\x28\x72\x97\x1d\xe9\x58\xb1\x63\xf3\xfa\xa6\x37\x17\xd6\x4c\x29\x85\xd0\x1f\x44\xad\xae\x91\x0c\x45\x6c\x50\x98\x17\x9f\xbc\x7b\xc2\x14\xd6\x57\x13\x28\x40\xd5\x2a\xd0\xeb\xa7\x4d\x31\x14\x47\x3c\x6e\xbd\x49\x8d\x8f\xc7\xb2\x98\x40\x79\x91\x1c\x5d\x45\xd5\x52\xad\xd4\x02\xec\x55\x14\x0c\xd1\x01\x6c\xf4\xc7\x1c\x63\x74\x28\xcc\xf8\xf0\x2c\xed\x50\xe8\x80\xd1\x58\x82\x06\x0a\x2f\x1b\xe2\xf1\x20\x07\xfc\x7c\x8c\xc5\xf3\x3b\xda\x61\xa4\x50\x18\x5f\x45\x46\x93\x56\x50\xeb\x61\x1c\xb1\x61\x11\x04\x65\x2b\x21\x34\xc7\x6e\xd8\x73\x45\xc0\xf4\xf4\xa7\xfb\x5a\x6c\x5e\xf9\xd7\xf2\x61\xb0\xa8\xbb\xf6\xfa\x03\xbb\x42\x41\x46\x5c\x77\xc1\x45\x07\x52\x5e\x50\x45\xbf\xff\xd6\xaf\x16\x8e\xdb\x78\xc3\xd0\x3f\xd0\xa4\x0e\x67\x3d\xf3\x4d\xd7\xac\x4b\xb7\x4e\xda\x39\xa5\xd9\xf4\x11\x7d\x08\x68\xad\xed\xd3\x77\x4f\x2a\xc0\xab\x10\x25\x33\x26\x77\x34\x47\xcb\x3d\xba\x9d\x23\xf4\xb0\x12\x7c\x25\x67\x9b\xb1\xf0\x9a\x19\xfa\xc3\xf0\xfa\x9a\xd6\x65\xbc\x70\xd1\x87\x8b\x17\xdf\xb6\xbc\x43\x30\x02\xf6\x37\xef\xdc\x37\xe1\x9f\x37\x7d\xd1\x5c\xfc\xc5\xc7\xd3\xff\x42\x9f\x0b\xc0\x75\xf7\x4a\x3f\x7a\xdb\x35\x29\xd6\x6c\x93\xfd\x7f\x7d\x14\x18\x0a\x12\x0d\x9d\x85\xd1\x32\xd6\x89\xba\x17\x8d\xb4\x03\x16\xbe\x34\x16\x1e\xa3\xda\x7e\xad\xd4\x72\xac\x7f\x54\xd1\xd5\x00\x73\x27\x47\x6a\x3d\xb4\xe2\x7b\x85\x99\x88\x21\x8e\x87\x2d\x06\x84\x5b\x1e\xc7\xcd\xd2\x19\x3b\x4a\x2b\x54\x88\xb7\x38\xc2\x34\xab\xa0\xcf\x61\xa9\x28\x86\x09\x19\x45\x8c\x3d\xc7\xdc\x18\x6e\x5c\x34\xa3\xa6\xd7\x53\x58\x26\x9a\x0e\x96\x77\x94\x96\x54\xb8\xaa\x1b\x36\x3d\xd4\xd3\x91\xdc\xd8\x1e\x9a\xb6\xa0\xf9\xd0\x59\x76\x6f\xf7\x84\xc8\xec\x9a\xb2\xda\xa2\xda\xc8\x7f\x3f\xd8\xf9\x83\x8d\x13\xc1\x86\x0f\x8f\xec\xed\x9d\xd1\x79\xad\x3c\xf8\xdc\x46\x73\xb7\xba\x03\x58\xbc\x03\xde\xab\x9d\x1b\xab\x70\xea\x9d\x3c\x6f\x36\xbb\x2c\x33\x9c\x3e\xbf\x33\x51\x19\x5f\x5c\x55\xdc\xb6\xb1\xb3\x65\x49\x73\x50\x28\xb1\x0b\xd6\xd2\x70\xc4\x5b\x59\xe9\x6d\xae\x5c\x7a\x69\x70\xf2\xf6\x83\x47\x3e\xec\x36\x6f\x7c\x0e\xb0\xd7\x76\xce\xe8\xdd\xab\xec\xc8\x83\x78\x87\xe8\xe7\x15\x48\x77\x78\x85\xc4\xb2\xb4\x51\x1d\x24\xe2\x2a\x63\x0f\x89\x13\x7c\xf2\x5a\x42\x53\x1c\xca\xb3\x72\xc6\xe2\x9c\x0e\xbb\x94\x10\x07\x5f\x80\x09\xed\xb2\xf0\xa9\x74\xcc\x05\xe8\xbf\x06\xd9\x42\x5b\xba\xde\x51\xcc\x81\x80\xc3\xe3\xfb\xc2\xee\xa1\x9d\x46\xa6\xd8\x26\xff\x0e\xaf\x46\x83\xb3\x44\xff\xc7\xa6\x19\xad\x0c\xc7\xd9\xdd\xb5\x3e\xf9\x1f\x46\xad\x46\x5e\x6e\xef\x34\xc4\xbb\xe6\xd0\x17\xac\x48\xd8\xef\x64\x5a\x67\x30\x33\x7f\xe1\xf0\xfb\xad\x83\x8f\xa1\x07\xf4\xb8\x4c\x45\xa6\xbd\x2d\x36\x74\x6d\x59\x51\xd0\xfd\x79\xa7\xbc\x5b\xfe\x95\xc5\x6e\xab\xb0\x5b\x75\x5a\xd9\x5d\xc0\x6b\xed\x5d\xec\xde\xf8\x8a\xbe\xbe\xa1\x4f\x2d\xa0\x01\x5c\x4a\x8d\x58\x77\x50\x34\x95\x51\x9e\x9a\x67\xc0\x38\xc5\x76\x69\x22\x33\x83\x01\xd5\x62\x9b\xdd\xeb\x0f\xb9\x4e\x12\x93\x0c\x8b\x7e\x53\x0c\xb1\xf7\x0e\x51\x84\x98\x1c\x12\x4b\x2e\xb1\xe7\xd2\x42\x2e\x53\x28\x13\x57\x86\xfd\xaf\x06\x08\xff\xa3\x62\x85\x0a\xd3\x01\x9b\x64\x27\x7e\x4c\xc3\xc8\x59\xea\xe2\x52\x34\x40\xab\x6c\x6d\x24\xf6\x1b\xc9\xf2\x99\x98\x1f\x96\xaa\x2f\x8d\x14\xfd\xb9\xf2\x6b\x6d\xc8\x95\x9a\x58\xd5\x5f\x35\x31\xe5\x0a\x69\xbf\xae\xfc\x73\x51\xa4\xb4\xde\x0c\xa8\xce\x75\x20\xb9\xae\x13\x50\x66\xb9\xe7\xd2\xff\xb8\xf4\xd2\xff\x00\x03\xa5\xf5\xe5\x60\xfe\x3e\x79\x8d\x49\x74\x85\xe4\x2f\xab\x26\x4e\xac\x02\xe6\x90\x4b\x34\x81\xdb\xf6\xc9\x47\xcb\xeb\x4b\x8b\x9c\x20\xb9\x61\x83\x9c\x74\xd2\x3d\xf8\x82\x4b\x95\xb2\x32\xb8\xac\x41\xe2\x89\xab\x0a\xbb\x81\xd3\x6c\x95\x36\xcb\xe2\xb3\x51\xf5\xdd\xf5\x89\x89\x4b\x27\x92\x3f\x94\xde\xd4\x0d\x93\xdd\x9b\xe4\x01\x52\x1a\x3a\x21\x2b\x3c\x79\x3d\x43\x9b\x48\x49\xde\x94\xc7\xe3\x2d\x7d\x50\x26\x18\x7f\xa0\xbf\x7b\xd3\x26\xf0\x5a\xae\x1c\xca\x7b\xb4\x61\x56\xc1\x20\xea\x92\xa1\x70\x28\xc3\x6a\x87\x17\xdb\xec\x8e\x92\xfc\x05\x1e\x16\x2c\x37\x5b\x8a\xaa\x4b\x17\xb4\x38\x4b\x9a\x9b\x4a\x9c\x2d\x0b\xc6\x55\x15\x59\xcc\xcc\xa2\x11\x03\xcc\xa7\xe0\x3d\xfb\xb4\x9e\x62\x17\x92\x57\x4a\x4b\x0b\xfd\xc0\x55\xdc\x33\xcd\x7e\xcd\x18\x63\x44\x05\xd2\x2f\xde\x66\x4f\xa1\x7e\xd4\x89\x57\xfe\x08\x61\x1b\x1a\x10\x6a\x5b\x41\x10\x0d\x2b\x38\xce\x2d\x1c\x24\x31\xd6\x2c\x71\x0b\x0e\x86\xb0\x0b\x27\x96\x33\xe3\x41\xe2\x23\xcc\xc6\x09\xd9\x3c\xc1\xf0\x61\x89\x23\xae\xc3\xce\xa6\x96\xdc\xf6\xce\xa7\xef\xdc\xb6\x44\xd9\x80\x8d\x8c\x59\x7e\xdf\x68\x12\xe4\xf7\x1f\xd7\x79\x75\x8f\xcb\xef\x0b\x26\xa3\xfc\xbe\x99\x61\xb5\x8f\x3f\xae\x65\x19\x33\x28\x41\x27\x41\xc9\xe3\x5a\xbf\xf6\x71\x50\x82\x4e\x82\x12\xf5\x24\xd4\xe7\x6e\x83\x36\x51\x13\xdb\x23\xbf\x6e\xd6\xe9\xb8\xe5\xdf\x18\x8d\xdf\x2c\xe7\x74\x3a\x33\xa8\xed\x61\x4d\x16\xc3\x37\xdf\x18\xcd\xe8\x2c\xa8\x55\xce\x1a\x0c\xca\x59\xf9\x75\x74\xd6\x6c\xfc\xe6\x1b\x83\xaa\xfb\xfd\x94\xbd\x98\x12\x51\x0f\xa5\x82\x78\x5c\xc3\xc3\x1a\x47\x46\xc0\x48\x6d\x49\x90\x63\xd4\xa1\x4e\x8c\x95\x10\x49\x19\x43\x7c\x60\xc7\x61\x22\x89\x33\x9f\xc7\xea\x9f\x94\x5f\x7e\xbc\xf7\xd7\xa7\xd6\x1e\xfd\x6c\xef\x41\x34\x5f\x86\x96\xcb\x97\x0d\xdc\x8e\x29\x66\xb7\xbe\x00\xc4\x5b\x2a\x2c\xa2\x6f\xc1\x92\x43\x27\x6f\x38\xff\xbc\x71\xc5\x02\xff\x09\xaa\x4d\xec\xc9\xd4\x7d\xcd\xf2\x8f\xdf\xdd\xfb\xd9\xd1\xb5\xbb\x7e\xf9\xca\xbf\x76\xbe\x0e\x0a\x6f\xbf\x05\x38\x5e\xdd\xcd\xc1\x71\xe3\x8a\x67\xbe\xb1\xf5\x86\x93\x87\x22\x62\xb1\x50\xaa\x60\x9b\x71\x29\xd5\xa6\x5d\xae\x7a\x30\x12\x73\xbe\x6f\x94\x1f\xff\xa8\xd8\x96\x44\x1e\x9a\x06\x5c\x9b\xff\x05\xa3\x33\x27\xc9\x19\x0e\xf3\x60\xfd\x50\x81\xff\xa3\x86\x08\xd2\x07\xb1\xc2\x82\x1f\xe6\x70\x38\x08\x8e\x87\xf7\x54\x3f\xd7\xc3\xa6\xa8\x89\xd8\x1b\x8c\x22\xfc\x0e\xbc\xc3\x6e\x25\xdd\x00\x8d\x8b\xe8\xb3\xf0\x57\xc1\xea\x0c\xf5\x62\x1b\x50\x49\x1f\x9a\x80\x25\x8c\xbf\x8f\x62\x82\x10\xa4\x02\x04\x01\x1f\x06\x12\xe0\x7a\x42\xae\x81\xf6\x37\x25\x49\x8c\x89\x2f\xb2\xd6\xc4\xc4\x95\xe3\x93\x91\x35\x9d\x4d\x82\xe9\x29\x6b\xa1\x53\x92\x68\xcb\xcb\x8d\x0a\xdc\xc7\x31\x29\x54\x27\x1d\xa3\xbb\x8e\x49\x75\x21\xe9\xd8\x80\x4b\x9e\x9c\x4e\x3e\x0b\x74\xcf\xc2\xb3\xea\x42\x47\x77\x9c\x90\xea\x24\x49\x7a\x81\x35\x8f\xf3\xba\x30\x38\x9c\x3b\x1c\x36\x0a\x6f\xd8\xcc\x62\xd4\xfa\xe7\x2d\xfd\xb8\x62\x21\xe5\x42\xe5\x36\xf2\xef\x20\x75\xd9\xb3\xcf\xa2\x0f\xfc\xd4\x29\x0a\xf0\xbb\x99\x29\xd4\x65\xc4\x67\x10\xaf\xa7\xe1\xa5\x4b\xac\x59\x40\xa4\xea\xb1\x5c\x08\xcd\x8d\x34\x1a\xf5\x1d\x56\x42\x81\x81\x97\x7d\xf0\x11\xa4\x66\x11\xe0\x1c\x24\xb2\xe0\x39\x12\xff\x7a\xe8\xda\x78\x2b\x43\xb0\x23\x88\xc2\x85\x7b\x0a\xd2\x69\xac\x04\x0f\x86\xac\x8a\xe3\xd5\x3c\xc5\xfe\x01\x1d\x41\xa4\xc3\xf0\xbb\x1d\xc7\x9c\xe3\x4a\x3d\xc5\xbc\x54\xe5\x67\xc0\xd5\xb5\x34\xcf\x6b\xca\x42\xa7\x28\x67\xc2\x6a\xf5\x74\x37\x4c\x70\xd2\x3a\xa7\x64\x02\x3c\xc3\x88\x81\xad\x53\x0e\x6f\x5e\xe6\x2c\xd0\x05\xce\xe9\xbd\xba\x99\xa3\x19\x53\x19\x10\x0d\x76\x96\x35\x6b\xac\x75\x26\x73\x51\xac\xbc\xb4\xd0\x08\x39\x51\xab\x63\xa1\xc0\x73\x05\xcd\x46\xd1\x6c\x8f\xfe\xc7\x9c\xa8\xd5\x2d\xf0\x10\x09\xf4\x9c\x45\xd0\x88\xfe\xb2\xd6\x60\x73\x35\x83\x44\x72\xc8\x59\x75\xc0\x1b\xae\xe5\xe8\x6f\x12\x1f\x7b\xa3\x91\xb2\x06\x77\x19\x12\x69\xe1\xa5\x67\xb1\xa6\x90\xa7\x80\x61\xad\x06\x83\x6d\xc1\xa4\x6a\x0d\x60\x9d\x81\x49\xe5\xa6\x02\x8e\x95\x68\x66\xdc\x84\x76\xa7\x53\x57\x7a\x4d\x3f\xe0\xae\x36\xdb\x59\x4e\x42\xb2\x26\x43\xeb\x6d\xb5\x1b\x0a\x8b\x9a\x17\xd5\x14\xb2\x40\x53\xd2\xd8\xdb\x59\x3a\xd1\x68\xf0\x6b\xa1\x5d\xd2\xbb\x20\x30\xb0\x96\x62\x5f\x63\xdd\xe2\x90\xbe\xd5\x5f\x5d\xac\x85\x8c\xab\x7c\x49\x6b\xef\x85\x3a\x13\x06\x1f\xa1\x01\x64\x4d\x5a\xc2\x15\xfc\x23\xee\x6b\x76\x3a\xa5\x23\x23\x5e\x35\x35\x9f\x5a\x4f\x5d\x8c\xbe\xc6\xac\x4e\x8c\x67\x63\x92\x44\xfa\xa7\x23\x83\xf7\x89\x1a\x35\x58\x05\x4a\x78\x8e\xc1\x1f\x62\x3c\x56\x12\x44\x7a\x2f\x1a\x15\x71\x6c\xad\x88\x76\xb1\x3a\xe8\xc1\x4e\x6b\xd8\x28\x8f\x3e\x5b\xa2\x5a\x42\x0f\x50\x01\x43\x63\x48\xbb\x54\x54\xca\x20\x39\x46\x0e\xa1\x13\x58\x65\xc7\x2a\x3a\xbc\x07\x9b\x7e\x67\xda\xec\x62\xc7\xec\x6d\x1a\xad\x51\x28\xe2\x2d\x1e\xc1\xf3\x44\xe5\x9f\x36\x6e\x98\x5d\x5d\x7d\xa2\x6f\xe3\x0a\xa4\x23\xf6\xcb\xa7\x0e\xfd\x51\xfe\xbd\xa0\xed\x07\xe0\xd0\x1f\x41\x10\x84\xa6\x1d\xfc\xb9\x9c\x96\x3f\x96\xff\xfb\x9d\xbd\x57\x26\x1f\x04\x8b\xa7\x4d\xa8\x64\x38\xc1\xc4\x71\x57\xfe\xa6\xaa\xb2\x12\xb2\x82\xce\xd0\xb0\xb4\x63\xdb\xbc\x02\x49\x53\xee\x40\x05\xb3\x2e\x6a\x73\x96\x31\xac\xcb\xd9\x0c\xe6\x2f\x8c\x84\xb5\xb5\x31\x97\xa6\xb0\xa4\xb5\xf5\xa1\x85\x85\xe3\x0d\xc5\x85\xbb\xfe\x39\xe4\x9f\x6c\x12\x5c\x3e\xff\x24\xaf\xfb\x36\xa3\x9b\x65\xf5\xc6\x62\x81\xd5\x2f\x5f\xdb\x53\xe2\x7f\x66\xc5\xb2\xa5\xee\xa2\x27\x9a\x7b\x6e\x98\x2c\x38\x3e\x3b\xa4\x6c\xae\xe9\xb8\xf6\xd2\xde\xd6\xf6\x1d\x4f\x9d\xb3\x15\x30\xc9\x07\x7f\x30\x2d\x71\x9d\x60\x40\xbd\x00\x36\xb5\xb4\x6d\x35\x0a\x7a\xd4\xa1\x1a\xd7\xc3\x15\xcb\x77\xd5\xa3\xa7\xa3\x32\xb4\xf5\x18\xd1\xd3\x9d\xe3\x58\xe3\xac\x9e\xf4\x56\xb7\x4b\xac\x75\xcf\x79\xbc\x63\x52\x54\xe4\x8a\xeb\xab\x39\xd7\xf4\x7c\xd9\x62\x0b\xa5\xa5\x24\xcc\x17\x4f\xf8\x6d\x91\xa6\xed\xc1\x6b\x9e\x90\xc7\xa4\xcc\x25\xc0\xcc\xa3\x81\xd2\x62\x67\x44\xe6\xdc\xa3\x2f\x3c\x7f\xf4\xc0\x2f\xfd\x81\x5f\xca\xb7\xa5\x5f\x7d\xe2\x7e\x50\xc2\x44\x9f\x78\x35\xfd\x18\x28\xb9\xdf\xbf\x7c\xf9\xc2\x6f\x0e\x1e\xfc\x86\x6d\x91\xdd\x43\xf2\xd9\xab\xde\x05\xce\x67\xc1\xa4\xdf\xa4\xcb\xe4\xbf\xbe\xbb\x0a\x1c\x19\x02\x7f\xf1\xfc\x46\x7e\x56\x59\xeb\x43\xb2\xc3\x4e\x24\xa7\x6d\xc0\x6b\x2f\x34\x16\x55\x39\x8a\x27\x28\x1f\x68\x2c\x16\x20\x36\x1f\x00\xf4\x71\xc5\x70\x9a\xc5\x69\xb6\x18\xc4\xa2\x55\x2c\xd2\xfb\x19\x01\x69\x38\x68\x78\xc2\x6b\x23\x02\xfe\x90\x39\x9c\x64\x77\x7a\x17\x2d\xef\x5d\xb5\x7c\x56\xb3\xd9\xb2\x59\x3e\xf2\xa6\xe4\x72\x49\xc7\x40\xf9\xda\x92\xa9\xcb\x17\xad\x5c\x30\xd7\xb7\xe5\xa5\xcb\xb7\xb4\x15\x44\x5d\xbc\x7d\x4a\xc7\x8a\x39\x0b\x12\x95\xdc\xe4\x8b\x57\x2e\x68\x89\xf8\xec\x2c\x63\xd0\xb8\xa7\xd4\xd7\x09\xa1\x48\xe7\xb9\xcd\x25\x2c\x67\x15\x35\x3c\x52\x8f\x84\xea\xd8\xa2\x15\x97\x74\xc0\x70\xcb\xcc\xf9\xf3\xba\x9a\x2c\x16\x47\x2d\xe7\x9c\xde\xbd\x63\xdb\x35\xe0\x27\xdd\xdb\x5a\xbc\xb4\xe0\x29\xd0\xe9\x3e\x92\xbf\x05\xae\x50\x01\x78\xe7\xb8\x20\x6a\x8c\x15\xd3\xf6\xcc\xad\xb6\x06\x66\x76\x55\x5c\xda\x0f\x68\x48\x5b\x8a\xea\xa7\x6d\x9d\x5c\x68\x91\xc6\x35\xb5\xb5\xd5\x98\xcc\x3b\x3b\x39\xeb\xa4\x69\x9b\x36\x5f\xdd\x51\xd0\xd9\x7d\xd6\xa2\xb9\x93\x63\x26\x13\xb3\xd4\xc5\x3b\xda\xa2\x8d\xc5\xd0\x31\xf3\xe2\x39\x2d\x1e\x11\x7d\x3e\xf4\xf5\x57\xf0\x8e\xa6\xaa\x10\xac\x41\x62\x8b\x0d\xc9\x2e\x7f\x63\x29\xe2\x49\x6e\x25\xf1\x55\x44\xc2\x02\x8a\xcf\x3e\xb0\xf9\x2c\xf8\x2f\x68\xcb\x30\x32\x31\x7f\xdb\x3a\xbb\x41\x1e\x4a\x7f\x31\x7b\x2b\xf3\x9b\xc1\xb2\xcc\xdf\xd6\xd9\xf4\xcc\xd9\x5b\x81\x7b\xe2\xfc\x1d\xf2\xbf\x80\x71\xc7\xfc\x89\x60\xf2\x29\xea\x14\x98\x8a\x7e\xae\x6a\x6f\x9f\xb7\x63\x47\x9e\x9c\x89\x11\xca\x6a\xd4\xf8\xa0\x31\x69\x4c\xed\xa7\x09\xee\x62\x92\x2a\x91\x69\x86\x64\x53\x21\x32\x7d\xf0\xbb\x02\xbd\xe0\x35\x63\xf0\x99\x1e\xfd\xae\x80\xaf\x61\x32\xb1\x5a\xd6\xe1\x6c\xac\xf9\x64\xac\xe2\x69\xcb\x8a\x39\x4b\x71\x01\x73\x54\xac\x98\xc9\xb4\xff\x3b\x0b\x3b\xa0\x16\x11\xb4\x61\x66\x54\x85\x91\x55\x3e\xf5\x9d\xa5\x1d\x25\xbf\x2b\x6b\xa6\xb9\x62\x8e\x94\xdf\x47\x59\x1b\xa8\x90\xcb\x6a\x51\xc2\xce\x2c\x56\x1c\x43\xfb\x1d\x01\x6a\x29\xec\x5b\x65\x50\xc3\xc6\x0c\xa1\xa1\x17\xbf\x47\x3c\x18\x8f\xbe\xfd\xe2\x5c\x1c\xbe\x78\x1a\xc6\x00\xd5\x9e\x5b\xf6\x5d\xbc\x01\x6a\x74\x3d\xf0\x7e\x27\x7d\x80\xea\xe3\xbe\x0c\xc9\xe4\x36\x2a\x86\x23\x41\x89\x38\x86\xa5\xb1\xb8\x03\xcf\xad\x54\x04\x0b\xa5\x0e\x32\x1a\xd1\x0a\x90\x58\x9c\x90\x8b\x62\x4b\x83\xe4\xb3\xf9\x70\xb4\x97\x44\x9f\x5a\xdb\x28\xbf\xf9\xec\xed\xf2\xd7\xb7\x9d\xf8\x91\x65\xe7\x21\xc0\x3f\xb3\xe7\x9d\xed\xd0\xdd\x78\x8a\x32\x9a\x4b\x2d\x5f\xc8\xa5\xce\x20\xdd\x03\x35\xc2\x82\xd8\xc4\xe5\xbd\x1d\x41\x70\xbf\xbc\xde\x0c\x7e\x55\x6a\xf9\x08\x2c\x7b\xf5\xb1\x3f\xdc\x06\xb4\xb7\x3f\x01\xca\x5a\x2f\x8d\xfd\xf1\xb2\x67\xe4\x6f\xf7\x7e\xe0\xda\x92\xe4\x03\xe0\x03\x9f\x93\xd6\x5b\x0a\x22\x6d\xcb\x27\x4e\x3a\x9b\x97\xff\x98\x4c\x06\xe4\x86\x61\x3a\xb6\xc2\xeb\x13\x0b\x87\x68\xf4\xfa\x78\xec\x3e\xa9\x2c\x6a\xe2\xa5\x51\x87\x12\x9b\x85\xed\x0a\x92\x38\xca\x3b\xd1\xa0\x3b\xfa\x5f\xb3\x2b\x42\xf3\xf5\xcc\x55\x81\xf2\xb0\xd1\xeb\xd9\xdb\xb4\xde\x7d\x8e\xbb\xae\x4b\xdf\x50\x6b\x6a\x36\x75\xf4\xdc\xf1\xa7\xf7\x4f\x0e\x7b\x9f\x7b\x7f\xcb\x69\xe4\x7f\x49\x3d\x0d\xef\x3f\x18\xfb\xf5\x73\x06\x7e\x99\xb3\xc7\xd9\x5e\xf7\x58\xfc\xf7\xf1\xc7\x40\x08\xb8\xc1\xc5\xc3\x2c\x68\x2a\x9e\x03\x2a\x23\xd6\x7f\xad\x90\x51\xd4\xb0\xac\x83\x51\x1b\x88\xe6\xa7\x33\x61\x58\x48\x70\x29\x42\x72\x1f\x6b\xcb\x24\x2c\x31\x4a\x3d\xc9\x24\x9f\x93\x8f\xff\xac\x5f\x10\xdf\xa5\x39\x9d\xd6\xe8\xf8\x24\xb3\x15\x05\x74\x10\xec\x30\xb9\x1c\xf2\x0e\x75\x73\x1c\x30\xe4\x28\x4c\xfd\x4c\x3e\xfe\x9c\x28\xc0\x55\x13\x01\xa7\x33\x27\x1d\x9a\x29\xcb\xb2\xa9\x93\x58\xab\x7c\x62\x1b\x6b\xc5\x7b\x17\x2e\xcb\x24\xe4\x02\x23\xb0\xfe\x14\x7b\xfa\xe6\x62\xbf\x03\x2a\xfa\xb4\x4d\x0d\x33\x52\x2a\x93\x1d\x8c\xb2\x56\xb1\xef\x19\x0f\x2e\x2b\xac\x96\x72\x3f\x51\x7e\x7b\x94\x18\x94\x9e\x33\x46\x87\x8f\xca\x4f\xee\xf4\x5d\xd1\xe2\x6a\x5c\xac\x06\xe3\x78\x86\x09\xe3\x5f\xb7\x62\x7d\x8b\x2a\x4a\x70\x15\x50\x68\x8d\xb1\x8f\x3d\xea\x2d\x3e\x22\xc1\x10\x57\x54\xc0\xc7\xd1\xe4\xe6\xc0\x91\xbe\x3e\x8e\xf7\x23\xf1\x14\x08\xa0\x1c\xd0\x91\x5a\x3a\x20\x61\x88\x5e\xe0\x61\x22\xac\x2f\x04\xcf\x39\xef\xce\x24\xfa\xa4\xf9\xc6\x19\x33\x1a\x79\xc9\x98\x48\xde\x79\x1e\xb3\xb8\xec\x12\xf3\xe2\x9d\x95\x95\x3b\x17\x9b\x2f\x29\xe3\xa2\xd1\xd9\x1d\x1d\x83\xf3\xe9\xaf\xdf\xfb\xa2\x61\x93\xbb\x50\x1e\x70\x2d\xae\xec\x59\x56\x74\xc7\x1d\x45\xcb\x7a\xaa\x16\xb9\x80\x97\x11\xaa\x6b\x3b\x4b\xc0\x4b\x43\xda\x6d\xa0\x3f\x91\xa8\xf6\x39\x0b\xa0\xc5\x69\x81\x05\x4e\x5f\x75\x22\xc1\xdb\x69\x53\xa4\xa2\xa4\x22\x62\xa2\xed\xfc\x50\xc9\xa6\x12\xcf\xf8\x1b\xc6\xcb\xbf\x09\x95\x8d\x77\x3a\xb1\x57\x28\x78\x13\x0c\x80\x37\xb1\x87\x28\x63\xf4\x15\xd8\xba\x13\xea\xf7\x81\xb1\x44\xe6\x10\xff\x64\xfc\xb1\x62\x0d\x51\xb1\x22\x21\xa5\x32\x97\xcc\x10\x34\xb4\x01\x3a\x97\x0c\xab\x6e\xac\x48\xc3\xcc\x25\x55\x78\x3b\xd4\x10\x52\x3c\x06\x82\x34\xcb\x7e\xd1\x3a\x77\xd9\x43\xf5\xfc\xbc\xa6\xea\x19\xa6\xb8\xfc\x72\x5c\x33\xaf\xb9\xba\xcb\x14\xbf\xa5\xc8\xd6\x32\x3b\x5e\x71\xfb\xfa\xdb\x5d\xf6\xe6\x39\xf1\x8a\x3b\xa2\xca\x89\x18\x88\xc5\x34\xf3\x71\xe6\xe8\xdd\x36\x7b\xf3\xfc\xe6\x8a\x3b\xd6\xdf\xeb\x1c\x1a\x02\xb1\xf5\xf2\xcb\xf0\x9b\xd9\x2d\x67\xfb\x9a\xee\xb7\xb9\x9a\x16\xc4\x2a\xef\xeb\xbb\xd7\xe9\xc0\x89\x7b\xa2\xda\xee\x16\x74\xed\xff\x47\xdb\x77\xc0\x47\x55\x65\xff\xbf\x7b\xdf\x7b\xf3\xa6\xb7\x37\xbd\x66\xfa\xa4\x27\x33\x99\x99\xf4\x4e\x80\x90\x84\x10\x7a\x68\xa1\x77\x09\x20\x1d\x61\x68\x62\x03\x15\xa5\xa8\x28\x51\x11\x1b\x76\x2c\x28\xba\x59\xfb\x5a\x50\x17\xb7\xe0\xcf\x82\xbb\xb8\xbb\xb6\xb5\x17\x20\x73\xf9\xdf\xfb\xde\x4c\x08\xc8\xfe\x74\x3f\xff\xff\x3f\x30\xef\xdd\xfa\xca\x7d\xb7\x9c\x73\xcf\x39\xdf\x13\x03\x65\x71\xe9\x08\x72\x95\xd8\x3e\x8b\xb9\x72\x74\x3c\xbf\x67\x6e\x0f\x29\x92\xc8\xbb\x3d\x21\x19\x5e\x91\x3f\x54\x13\x47\x2f\x96\x4a\xd1\xe9\xb9\xa0\x62\xfe\x85\x7b\x35\xd9\x82\x26\xd5\x05\x3a\x22\x40\x97\x76\x64\x5f\x06\xd2\xae\xec\x43\xe9\x1e\x9b\xe9\xc0\x69\xbc\x0c\x49\xa4\x9a\x4d\x04\xaa\xc1\x40\x25\x12\xfa\x84\xdb\xe3\x7d\x29\x36\xad\xbe\x7e\x5a\xe1\x73\x85\xca\x1c\x79\x69\x98\xae\x0d\x97\x26\xb2\xfb\x7a\xc3\xa5\x55\x81\xc2\xc7\x43\xb4\x43\xed\xe0\x2d\x46\x83\xd1\xc2\xe3\x10\x0d\x14\xbe\x9a\xf3\x75\x4d\xce\x9c\x00\x87\x7c\x06\xd3\x3a\xff\xa0\x41\x59\xab\xb2\xa4\x41\x29\x6a\x21\xce\x14\x66\x66\x97\x97\x86\x03\xc3\xad\x59\x4b\x6c\x90\x97\xe9\x64\x44\xe9\x05\x9f\x78\xf8\xa0\x79\x38\x95\x91\x25\x0a\xb6\x07\x2c\xee\xcd\x83\xa9\x11\xd4\x54\x6a\x31\x45\xf1\x78\x05\x0b\x42\x01\x21\x93\x16\x44\x3f\x41\x8d\xb8\xa7\x41\x78\x27\xbe\x3f\xc9\x1b\xf4\xc5\xfd\xc4\x85\xb7\x68\xe2\x89\xa9\x7d\x96\x37\x99\x85\x35\x10\x7f\x5b\xc8\xf1\xf1\x58\x09\x95\xc5\xe0\xa5\x1a\x12\x90\x9d\x20\x5e\x6e\xe2\x54\x96\x3f\x8e\xe3\x41\xe2\x03\x04\xc7\x4d\xeb\x1b\xc0\xa2\x17\xff\xcd\x4a\x59\x8d\xd4\xce\xb4\xa0\xcf\x0a\x72\x78\x35\xcf\xbf\x39\x6c\xbd\x52\x27\xa1\x35\xca\xf6\x95\xf7\xa0\x7f\xa5\xd3\xb8\x2c\xf9\x5c\x30\xf2\xe5\x1b\x80\x62\xae\x3c\xd1\xcc\x30\x4a\x89\x1e\xf7\xe6\x1a\x24\xf9\x12\x30\xeb\x36\x74\xcf\xa5\xd7\x4c\x79\xfb\xa1\xcf\x2b\xfa\xee\x00\x0b\x40\xcb\xd7\xdb\xb7\x7f\x8d\x0e\xa1\x1b\xd1\x21\x12\x02\xa3\x41\x27\xa8\xfa\xe4\x8a\x2b\x3e\x41\x2f\xa0\x03\xe8\x05\x12\x82\xc9\x3b\x77\xf5\xf1\x53\xc0\xa5\x40\xca\x87\x2a\x1d\x9d\xaa\xb3\x14\x5d\x4e\xb3\xd0\xe3\x04\x72\x20\x03\x4a\x3d\xaf\x06\x52\xf4\x14\x92\xd2\xb5\x99\xd4\x9e\x67\xe6\x75\x8d\x48\x28\x2d\xbc\x5d\xe3\x52\xfa\xd9\xf9\xc7\x52\xab\x24\x6c\x5e\x16\xd3\xf1\xe0\x0b\xef\xa0\x7d\xb3\xe0\x81\x7b\xe7\xe7\xc0\x92\xf3\x6e\xdc\x22\x3c\xcc\xa9\x27\xaf\xf8\x04\x54\x5d\xf0\x0c\x99\xb5\x47\x68\x7f\x3d\xd1\x17\x03\x3a\x36\xe8\x27\x63\xc4\x9f\x30\x4a\x18\xa3\x81\x31\xeb\x00\x1f\x48\x04\x43\x31\xc6\xcc\x54\xa3\xaf\x4f\xa2\x6b\xfe\xfc\x07\x30\xe9\xf8\x71\xf4\x29\x88\x7d\x46\x3f\x10\x48\x7d\x77\xc3\x8a\xdb\x81\xf1\x0d\xe2\xa2\x34\x69\xd8\x9f\xda\x71\xcd\x4f\xfb\x6d\x07\x83\x27\xae\xdd\xf3\x0f\x17\xdb\x8e\x6a\xd0\xea\x25\x23\x9b\x9c\x07\x3d\x6b\x33\x3a\xe6\x82\xdf\x29\x25\x15\xa4\x8a\x08\xf2\x80\xd1\x97\xee\xc2\xbe\x18\xf0\xe8\xa2\xba\x01\xbf\x73\xd8\x71\x6c\x26\x18\xa5\x7b\xe9\xde\x64\xb6\xe3\xb4\xdc\x91\x9d\x04\x78\x4d\x4a\x66\xfe\x57\x38\xb2\x4f\xe1\x8c\x0a\x09\x0e\xfc\x8c\x03\x12\x0a\x25\x45\x04\x90\xb3\x54\x0a\xdf\xf8\xdc\x4f\x84\x27\x25\x1e\xed\x92\x19\x5f\xd1\x49\x99\x68\xbb\x4e\xe8\x05\xde\x24\x74\x94\x04\xcf\x9a\x22\x89\xb4\xbf\xad\x00\xb1\xba\x35\x1a\x38\x3e\xad\xe3\x89\x73\xc9\x64\x1b\x4f\x04\x32\x7e\xbd\x24\xff\xd6\x33\x07\xd1\x9f\xd1\x7e\xf4\xe7\x83\x8c\x1e\x56\x9b\x4a\x4c\x4c\xbb\xe9\x4c\x0f\xa3\x64\x52\x97\xe6\x96\x4a\x6a\xca\xcb\xa1\x5c\xa6\xe9\xd5\xc8\xe4\xb0\xbc\xbc\x4e\x31\x16\x3d\x66\x32\x31\x5d\x38\x9b\xe9\x82\x47\xd0\x8b\x83\x96\x0f\xc2\xff\x41\xe5\xe3\x1c\x07\xb5\x05\x52\x84\x79\xc3\xa3\xde\x5b\x66\xfa\x87\x0e\x0a\xa2\xe1\x6a\x05\xfe\x53\x83\x47\x82\x83\x86\x06\xdf\x5a\x33\x47\x5a\x20\x05\x5d\x00\xa0\x1e\xfc\xfe\x0b\xcf\x26\xd9\x1b\x44\x9d\x16\xc0\x13\x01\x05\x1f\xa4\x20\x91\x67\x60\x36\x4b\x6f\xae\xa6\x13\x24\x58\x4c\x00\xed\xe8\x09\xaa\xea\xdc\xec\x5a\x55\x18\x9d\x7d\x78\x52\x79\x24\xaf\xa1\x66\xdb\xef\x73\x02\xd7\x77\xae\x2c\x8c\xc7\x4a\xcb\x1d\xb5\xbe\x36\xf9\x0e\xd8\x90\xaa\x52\x28\xe0\x0b\x83\xc0\x4b\x20\x7c\xb5\x46\xb3\xe8\x4b\xfc\x64\x55\x9f\xde\xf0\xe6\x58\xb5\x3a\x34\xbd\xfc\x72\xdd\xcf\x69\x9f\x38\xec\xc7\xc2\x1a\x4a\x01\x0f\x19\x65\xe2\x7e\x17\x1e\x59\xfe\x68\x96\x99\xc3\x4f\x21\x10\x79\x98\xce\xa2\x13\x1e\x9a\x82\x7f\x52\x3e\x81\x1e\x7a\xef\x56\x74\xf2\xe8\xaa\x55\x47\x81\xe3\x56\x90\xf7\x97\x77\xd6\x3c\xb9\xe1\x7f\x92\xc9\xff\xd9\x30\x76\xc7\xe4\x26\x8f\x04\xb5\xc0\x7f\x37\x54\x1d\x47\xf7\xf7\x92\x02\xa0\x1c\x38\x8e\xae\xfa\xc3\x1f\x56\x6c\xfc\x08\xfd\xfc\xd1\xc6\xa2\x21\x13\x3b\x02\xa2\x5e\x99\x38\x4f\x10\xbb\x57\x2f\xd5\x26\x48\x23\x4c\x44\x39\x30\x28\x28\xd1\x93\xfd\xb5\x88\x3f\x0d\xd8\x1c\x61\xd3\x14\xa7\x29\x41\x80\x6d\x82\x21\xde\x4c\x3c\x7c\x0b\xd8\xa6\x98\x9e\xa2\x25\x5c\xda\xd0\xc3\x8c\x0f\x4c\x34\xe2\x8f\x95\x60\x6e\xd0\x3f\x60\x96\xc0\xb3\x83\x89\x19\xac\xd5\x56\xa3\x7f\x57\x6b\xb5\x12\xbd\xa4\x68\xd5\xca\x62\x89\x1e\x1d\x2b\x69\x8e\xc5\x9a\xc1\xef\x62\xcd\x25\x38\x74\xa6\x69\x86\x7f\xe3\xe3\x35\xaf\x92\xc4\x40\xdc\xf6\x01\x2f\x19\x74\x68\x83\xaf\x24\xd2\x14\x70\x4b\x80\xe5\xa5\x97\x81\x85\x73\xf9\xc1\xac\x8b\x8c\x47\xb0\x58\xab\xa9\xae\xd6\x68\x25\x92\xe2\x62\xc9\xbb\xf8\x62\xb8\x2f\x75\x06\xc8\x35\x4b\x3a\x8a\x9b\xfc\x9d\x12\x60\xcf\x0f\x94\xc4\x9a\x63\x91\x62\xd6\x88\x5e\xe5\x3a\x03\x4d\xc5\xbe\x72\x8d\xdd\xb9\xfd\xb5\xd7\xb6\x67\x59\x35\x65\xcf\x5c\x70\x41\x1c\x3a\x1f\x07\x4b\x23\x78\x73\x22\xf3\xa9\xd0\x4e\xde\x74\x3b\x91\x66\x0a\x64\x9a\xc9\xc4\xf6\x87\x12\x42\xe3\x04\x43\x09\x33\xf9\x76\xff\xa1\xa9\x44\x6b\xfb\xd0\x2f\xf5\x96\xe8\xfb\x55\xaa\xd8\x17\x31\x95\x8a\xd5\xb2\x39\x47\x73\x58\x2d\x42\x05\xd5\x05\xf9\xb5\xf9\xa0\x43\x3c\xff\xa5\x32\x37\xc7\xbd\xf8\xe6\xf8\xfd\x20\xdf\x4d\xe4\x2e\x45\xc6\x67\x75\x4c\xe5\xcd\x8b\x5c\x79\xb9\x95\x59\x36\xf6\xeb\x7b\xef\xfb\x5a\x62\x75\x83\xe8\x79\xf8\x13\xbb\xf1\x45\xf1\x35\x25\x92\x9c\x1c\xc9\x2e\x77\x41\x81\x50\x33\x7d\x1e\x9c\x53\xe9\x6e\x63\xbe\x0b\x65\xe5\xe1\xab\xe7\xe6\xb0\x7a\xf4\xbd\xa4\x35\xab\x32\xc7\x15\x51\x59\xcd\xab\x1f\x78\x60\xb5\xd5\xa2\x2a\x06\x27\x2f\xce\x97\xb8\xf0\xec\x43\x10\x99\x13\x69\xf0\xb1\x7e\xb5\x14\xe1\x05\x45\x95\x13\x27\x60\x63\x69\x45\x95\x2a\xc0\x85\x8c\xa4\x03\x9d\xa7\x26\x39\xad\xf3\xd2\x9e\x4b\x1d\x41\xfb\xee\xa5\x1d\x23\x96\xda\x0d\xbc\x1d\x5c\xb9\x8b\x9c\x3a\x2b\x2f\xbd\x63\x29\x18\x71\x21\xff\x72\xd8\x5e\x3d\xbc\x7b\xd1\x70\xf4\x89\xc1\x6e\x37\xac\x5c\xdd\xb1\x64\x71\x3b\xc0\x8b\xa9\x83\x8f\x7f\xb4\x7a\x9d\xc1\xee\xe0\xd7\xd8\x1c\x6b\xda\x97\x2c\x01\x0f\x5c\xc8\xd5\x90\x39\xea\x4e\x2e\xc9\x4e\x12\x9e\x5b\xc0\x45\x12\x1f\x5a\x34\xb1\xef\x77\x5e\x2f\x3c\x34\xc7\x7a\x32\x39\xe6\x84\x98\xc5\x04\x2b\x47\x55\xf6\x3d\xf2\xe8\x19\x30\x04\x07\x52\x0f\x3d\xdc\xf7\x02\xb8\x16\x0c\x39\xf3\xe8\x23\x7d\x9b\x5e\xc0\x29\x74\xe9\x72\xa2\x1e\x93\xda\xfb\xd0\xcf\x67\x1e\x05\x72\x74\x3a\xb7\xa2\x22\x17\x2e\xb8\xff\xdb\xef\x0f\x5e\x51\x7e\x3b\xfa\xf1\xd1\x33\xa7\x1e\x06\xca\xaa\x72\xf4\x6d\x4e\x45\x45\xce\x40\x7e\x85\xe0\x7d\x50\x01\xe2\x66\x5c\x74\x8f\x7a\x11\xfa\x98\xed\x4d\xd5\xa2\xac\x49\x9b\x60\x2f\x38\x31\x69\x53\xed\xc0\xef\xdb\x03\x4e\xc0\xde\x4d\x93\x50\x56\xaa\x76\x13\xe3\x3c\x5f\x61\x4f\x8a\x7f\x36\x29\xc5\xfc\x03\xf7\x68\x19\xbe\x8f\x4e\xb0\x76\x0f\x08\xb8\x39\x64\x79\xf0\x58\x81\x4f\x07\xf0\x4a\x41\x1b\xa3\x31\x9e\x60\x53\xe0\x7f\x01\x1d\x4e\x1b\x18\x1e\xf2\x46\xea\x0b\x30\x64\x0d\xb8\xe9\xcd\x37\xdf\xec\x80\xc6\xd4\xe7\x60\x08\x7a\x8a\x24\xdc\x0c\x0d\x38\x67\x30\x3a\x0c\x06\xaf\x61\xfe\xd1\x97\x0d\x0f\xe3\xbc\xc5\xe8\x5a\x5c\x66\x30\x3c\x0c\x5c\x6f\xbc\x81\xfe\xd6\xd7\x71\x67\xc7\x7e\x31\xb1\x3f\x38\x60\x7c\xc9\x04\x6c\xd4\x22\xe2\x5b\x88\x12\xd8\x6e\x62\xf3\x31\x20\xa4\x4d\x03\x79\x73\xba\x04\xb1\xed\x80\x42\xdc\x27\x46\x7e\xc1\x88\x9b\x5a\x62\xb9\x76\x47\x4e\x0c\xfd\x90\x0e\xc0\x75\x0f\x5f\x66\xe0\xcd\x89\xb1\x6b\x8f\x45\xeb\x2f\xbb\xfb\x91\xcb\x9a\x1b\x9e\x3e\x96\xa8\xba\x8c\x36\x9f\xa7\x44\xd9\x98\xec\xd4\x00\xa3\x0e\x8c\x48\x4e\x20\xe7\x54\x31\x50\x3e\x47\xb7\x95\x4f\x91\xa4\x36\x67\x1f\xe5\xe1\x5c\x1c\xf5\xf7\x3d\x85\x83\xe0\xe7\xf3\xdb\x57\x4e\x65\x9f\x95\x71\x6f\xe2\xf9\x74\x23\x75\x84\x7a\x8d\x3a\x4a\xbd\x4f\xfd\x9d\xfa\x27\xf5\x29\xf5\x25\xf5\x15\xe1\x41\x5d\x34\x51\xd0\x57\x43\xae\x80\xf5\x11\x4d\x52\x17\xe7\x06\x26\x1c\x0d\x8a\x06\x24\x25\x89\x6a\x88\xa7\x07\xc2\xa2\x0a\x9a\x37\x8c\x48\x6c\x93\x25\x11\xcf\xfb\x02\x47\x6d\xce\x50\xd8\x50\x92\x46\xe9\x20\x82\x92\x10\x99\x40\x04\x1b\x39\x73\x42\x4d\x9b\x13\x05\x5c\xa8\x00\xe6\x10\xd7\x2b\x98\x2c\x75\xc1\x1a\x60\x34\x63\xe2\x4e\x5a\x23\xea\x2c\x11\x85\x55\xcc\xa5\xd1\xe4\x82\xf8\x89\x04\xca\x2e\x61\xe6\x80\x08\x4c\x1d\xaa\x86\x51\x3c\x34\x49\x26\x1f\xc5\xa9\x31\xa3\x06\xd4\x40\xe6\xe5\x61\x57\x4e\x9f\x5d\x97\xeb\x99\x50\x39\xa8\x68\xd5\x5e\x7f\x5e\xa5\x3d\x54\x30\x7d\xa8\x5c\xc2\xc8\x24\x79\x9c\x9b\xd5\xd3\x12\x00\x00\x27\xd5\xd1\xbe\xcd\x59\x21\x0f\xa4\x61\x45\x02\x8f\x44\xff\xee\x2a\xeb\xcc\x6e\x87\xc4\x88\x5c\x6e\xad\x45\xa7\x06\xff\x90\x2a\x8c\xbc\x9d\x65\xcc\x12\x8d\x8d\xbb\x53\xa6\xb3\xea\x34\x4f\x00\x70\x97\xa9\xf0\xba\xc2\x44\xa1\xbc\x31\x97\xed\xa8\xce\x4b\xe4\x18\x8c\x72\x8b\x32\x42\x87\xf3\x7d\xa0\x8a\xd5\x71\x6a\x89\x9c\x93\x31\x9c\xc6\xa6\x2f\x54\xaf\x9b\xa0\x0d\x37\xd6\x38\x07\x4b\x95\x59\x59\x26\xa5\xe9\xa7\xb5\x8e\xbc\x6c\xab\x57\xed\x53\xe4\x4a\x39\x98\x3d\xbc\xef\x90\xba\x34\x4f\x47\xe7\xfe\x14\x3a\x1c\x97\xd9\x9d\x66\x2b\x5c\xb5\xa6\xaa\x16\x9d\x2a\x5a\x38\x14\xdc\x4e\xfb\xca\xa2\xa5\x0c\x67\x1c\x5e\xe7\x40\x83\xba\x24\xf2\x7c\x25\x7f\xcc\x2d\xcf\xa6\x57\x01\x48\xfe\x4d\xa1\x0b\x9b\x56\x4c\x1d\x52\x3a\x2f\x51\xe5\x4a\xd4\x68\x03\x7b\x1f\x38\xb2\x73\x2a\x64\x58\x19\x1b\xe0\x9c\x4a\x97\x35\x60\xf2\xd8\x6a\xb2\x5b\x70\x9f\x90\x6b\xdd\xcd\x26\x55\x59\x95\x11\xda\x62\x93\xd6\xdd\x64\x60\x6c\xdd\x26\xad\xc6\x4c\xcf\x53\x9b\x54\x72\x86\x85\x40\x95\xa5\x0b\x98\x74\x1a\x13\x1d\xd6\xda\x9e\xec\x29\xf6\x7b\x69\x83\x45\xab\xe7\xf3\x86\xda\xb2\xb4\xb4\x5a\xe5\x77\xd7\x3a\xac\xe1\x30\x54\x68\xfe\xcc\x1a\xa5\x1a\x09\x26\xe0\x21\xcd\x80\x5c\x97\xc7\x56\x60\x1f\x29\x93\xe5\x3b\x00\x5e\x81\xa6\x4c\x31\xfa\x43\xe6\x7c\x5d\x19\xdf\xa2\x91\xc5\xc6\xdc\xf5\x72\x2e\x2d\x93\xcb\xf8\x38\xa7\xe8\x1b\x65\xcb\x75\xc7\x0b\x4a\xd9\x7c\x05\xed\x57\x3e\x52\x84\xde\xd6\x00\x4e\xa3\x90\x72\x20\x17\xaa\x38\x78\xa9\x41\x07\x94\xa9\xb5\x23\x95\x92\x62\x00\x84\x2b\x8b\x3c\xae\x1e\x8f\xb1\x7f\x53\x66\x4c\x93\x4d\xa2\x36\xe1\x65\x2d\x98\xde\x0d\x21\xfa\xb3\x64\x23\x5f\xb0\xb6\x14\xd4\x9a\xc5\x51\x26\xa8\xd4\x71\xb8\x93\x08\xba\xe5\x71\x50\x42\xd0\x6b\x88\xfa\x1d\x91\xc7\x00\x41\x99\x8d\x28\x23\x08\x5a\x71\x82\xc6\x97\x21\xbd\xd6\xc7\x4a\x70\xbf\x13\xba\x6c\x22\xcd\x1f\x31\xd7\xb2\xbc\x6b\x49\xf3\x86\x5a\x56\xaa\xd0\x70\x40\xea\x9d\x3f\x2d\x92\x3d\x36\x97\x53\xe6\xf1\x06\x73\xac\xd0\xe2\x2c\xb6\xa9\x65\x3a\x33\xad\x91\xa8\x65\x5a\x35\xaf\xb0\xfb\x14\x52\x39\x2b\x37\x83\x4e\xb9\x39\xdf\xe5\x49\x6e\xf4\xdb\x87\x0e\x1f\xd7\x9d\x58\xba\x1f\xc2\x16\x67\x43\x53\xd9\xae\xe5\xab\xb3\x6c\x6d\x75\x83\x0d\xbe\xc2\x2c\x87\x33\xb6\xf6\x6d\xf4\x39\x7a\x1b\xfd\xe3\x4f\xc9\x50\x45\xc7\xb0\x8e\x42\x5e\xdd\xec\xab\x72\xf9\xf3\xa4\x1b\xca\xf2\x0e\xe6\x1a\xfd\xa3\x1b\x46\x26\x42\x11\x5e\x6d\xf2\x16\x63\x0e\xc3\x20\xcf\x72\xd0\x34\xe3\xb1\x73\xca\xcd\x85\x6a\x8d\x5c\x99\x67\x31\x48\x39\x03\x54\x31\x72\x46\x42\x43\x8d\x5a\xa3\x93\x30\x4a\x50\x68\xca\xcf\x77\x8c\x1c\x05\xc2\xe5\xe5\x61\x00\x6e\x99\xd9\x5d\x62\xd0\xd5\xb5\xd6\x02\x50\x35\xb4\x1a\xd0\xde\x82\xec\x95\x47\xf7\xa3\x7f\xfe\x6e\xc1\xd2\x57\x80\xa3\x67\xfc\xdd\x6b\x17\x0f\xab\x75\xca\xa5\x01\x43\xd8\xe2\x18\x3f\xe2\x96\xa0\xb3\xcd\xae\xb2\x0c\x1a\xb2\x7c\xdd\xfd\xd4\x40\xec\x2d\x17\x5e\x25\x3b\xa9\x95\x78\x3e\xd0\x40\x35\x08\x65\xec\x79\x13\x41\xcc\x55\x9b\x39\x89\x01\x93\x13\x35\x34\x6d\xc6\x84\x82\x57\x62\x70\xd3\x5c\x21\x2c\x00\x89\x02\x11\x47\x08\x8f\x7f\x93\x68\x44\x1a\x22\xdb\xe9\x09\x33\x21\xc0\x0a\xe9\x84\x9b\x48\x54\x5c\x80\x36\x48\x38\x93\x60\x39\x4c\xb4\x45\x35\x74\xa8\x06\x56\x13\x85\x1a\x5c\x91\x29\xe8\xd9\xed\xaa\x7b\x60\xb4\xb6\x7b\xe8\xe8\x95\xe3\x07\x99\x0a\xea\x94\xbb\x15\x81\x40\x60\x4e\xc0\xb5\xfb\xf6\xe7\x94\x7b\x94\x81\x39\xcd\x01\xe7\x9e\x9e\xdd\xb7\xef\x76\x35\xe6\xd9\x9b\x3a\x57\x8e\x6e\x59\xaa\x1c\x75\x3f\x3d\x7b\xe5\xe8\xe6\x25\xea\x31\xcf\x34\x2a\x76\x0b\x65\x5c\x7b\x7a\xf0\x3f\x67\x6d\xa1\xb1\x65\x26\x9c\xd5\x62\x2b\x68\x50\xe2\x8c\xe6\x39\x42\xc6\xed\x7b\x9c\x0d\x4f\x8d\x51\x2c\x6d\x1b\xbd\x12\xbc\xd5\xb3\xc7\x55\x5b\x60\x6c\xea\x5c\x35\x7a\x48\xb7\x76\xcc\x83\x75\xca\x3d\x8a\xc0\x9c\x60\x80\x14\x84\x7a\x72\xc7\xe6\xb9\xe4\x8e\xf8\x9f\xab\xe1\xf0\x58\x0d\x7e\xb0\x55\xd3\x9a\x0d\x85\x67\x76\x8e\x5e\x35\x79\xb0\x23\xaf\x51\x28\x32\x27\x7d\x43\x57\xed\x03\xa3\x15\x4b\x19\x73\xeb\xa5\x8a\xd1\x4f\x36\xa4\x9f\x37\x9d\xd5\x90\x6f\x1b\x36\x6b\x95\xe8\xb7\x43\xc4\xcc\x18\x44\x8d\xa3\x26\x50\x53\xa8\xd9\xd4\x3c\xea\x4a\xea\x4e\xb2\x9f\x13\x2c\x14\x5c\xd5\x85\x44\x65\xce\x50\x5a\x43\x31\x11\x24\xd3\xa1\xc4\x20\x2a\x72\xe2\x7f\x82\xd1\x31\xd1\xbd\xc4\x63\x81\xc8\x85\x04\x1d\x4f\x51\x65\x93\x16\x14\x34\x7d\xa4\x54\x42\x90\x86\x25\x22\xac\x39\x04\x02\x3a\x16\x98\xe9\x10\x9e\x76\xcd\x80\xd5\xe1\x4f\x48\x6e\x21\x20\xc2\x88\xfb\x22\x42\x5d\x62\xba\x8d\x07\x17\xd0\x09\xa2\xec\x50\x49\x48\x27\x68\xb7\x24\x74\x6c\x24\x0f\x67\x1a\x75\x70\x3b\x30\x1b\x0c\x79\xb9\x5c\x23\xd3\xd0\x30\xc2\xc2\xb8\x69\x49\x8b\x71\x83\x5a\xd7\x08\xa5\xb3\xa4\x21\x17\x84\x80\xb5\x99\x2d\x7a\x39\x03\x24\x01\x45\x79\xe1\x0c\x28\xaf\x57\xc8\xac\x0c\x03\x69\xab\x83\xb6\x96\xd4\x2a\x2f\x63\x19\xd5\x5b\x34\xa7\x0c\xba\x5c\x36\xb3\x9a\x01\xb4\xc7\x50\xe4\xe7\x75\xf0\xb9\x9a\xab\xcf\xfc\x0c\x9f\x48\x35\x33\xc7\x67\x3d\x3e\xe3\xaf\xb3\xf2\x8f\xa1\x02\x58\x85\x4e\xdf\x16\x0f\x6f\xdc\x51\xee\x19\x35\xfc\x9b\x1a\xa9\x5c\xca\x38\x3c\xcc\xd0\x07\x06\x4f\xb9\x6e\xb4\xc6\x1d\x90\x83\x9d\x7d\xa7\xd5\xa9\x02\x4e\xc5\x12\x85\x68\x0d\x66\x7f\x0b\x20\x66\x74\x2b\x18\x03\x78\x8d\xe6\xa4\x32\x83\x93\x8d\xc1\xd9\x6d\x53\x34\x90\x81\xcc\x38\xcb\x13\x76\xd7\x95\x32\xe0\x85\x0a\x29\xd1\xbb\x93\xb3\x1c\xc7\xe8\x24\x3a\x28\xa1\xb5\x5a\x1f\xf4\x31\xb4\x1c\x00\xa5\x11\x46\xca\xd8\xc8\x08\x87\xa4\x04\x82\x62\x70\x42\xa3\x32\x6b\x94\xb4\x59\x63\xc3\xc3\x90\x51\x2b\xe1\x8e\xbf\xe7\xa4\x6e\xfa\x17\x23\xfd\x34\x15\x77\xc3\xeb\xdd\xa9\x7f\xb9\x2f\xa9\xa3\x2b\x9e\x02\x6b\x4f\xeb\x54\x3d\xf5\x23\xad\xca\xb6\x02\x4e\x86\xa7\x0e\x3d\x0c\x14\x3b\xfd\x9c\x0e\x33\xd2\xc9\x33\x7f\xf8\x51\xf2\x9d\x0a\x40\x26\x2e\x03\x12\xd6\xaf\x06\xc9\x97\x2f\x99\x6f\x44\x93\x05\x7b\xe3\x0c\xf6\x02\xb1\xe9\x1b\x4c\x8d\xc5\x3d\x61\x05\xb5\x95\xda\x4d\xdd\x4d\x3d\x49\xf5\xf6\xef\xf4\xf4\x3b\x87\x65\xcf\x87\x2c\x27\xf4\x03\xf1\xed\x64\x3c\xe7\x46\x4f\xc4\x63\xd7\xfd\x4a\xfc\xff\x77\x79\x5e\x04\x16\xf3\xe8\x40\x16\xd9\xcf\x4c\x92\x03\x7b\xa2\xbc\x69\xd7\xbc\xbe\x9e\xfa\xc9\xa5\x61\xd8\x13\xee\x72\xec\x71\x84\x53\x59\x02\xd0\xd1\x7f\x3c\x00\xea\xff\x2e\xbf\xab\x27\x5c\x9a\x4a\x32\xc9\xc9\xf5\xe7\xbc\x2b\xdf\xe9\x5d\x3e\x28\x45\xcd\xdb\x35\xb9\x5e\x42\x85\x4b\xc3\xf8\x31\xba\xc2\x67\x92\xfd\xd5\x80\xfa\x62\x41\x74\xd1\xd4\xff\xa6\x00\xd8\x0e\xa8\xd2\x70\x0f\xa2\x88\x37\x6f\xa2\x43\x2f\xa1\xd2\xb2\x9b\x1a\x6a\x38\x9e\x03\x16\x51\xeb\x05\x0f\x82\x0f\x51\xbf\xa3\xde\xa2\x3e\xc2\x94\xd8\x59\xa0\x01\x6e\x50\x08\x6a\x2e\xb2\xe3\xd7\xef\x24\x51\x6c\x77\xdd\x7f\x19\xa7\xff\xcb\xef\xf9\x5b\xfa\xc7\x85\x40\x3e\xff\xb7\xd7\xfb\x7f\xf9\x7c\xac\xa0\xac\x72\x46\xd4\x52\xe9\x3d\xe7\x76\xe0\x7f\x3f\x24\x7f\x6b\xc1\x73\x07\x48\x0d\xf0\x4c\xf4\x9b\x6b\x01\xea\xbf\xbf\x93\x84\x0a\xda\x4e\x09\xfb\x5c\x12\x7c\x44\x03\x20\x67\xbf\xfd\xb5\xe0\xa3\xfd\xc1\x8b\x43\x20\x5d\x3c\x78\x46\xc0\x4c\x11\x0e\xf0\xbf\xa8\xd6\xf7\x5f\x94\x3d\x0f\x86\x09\xf3\x9a\xb5\x67\xb5\x4c\x2f\xdb\x85\x47\x49\x88\xec\x18\x5e\xa0\x54\x47\x64\x9d\x19\x65\x21\xb3\xc9\x90\xb1\x32\x65\xf6\xa3\xf7\xd3\xba\x75\xe8\x7d\x87\xc3\x39\xdc\x71\x12\x74\x9f\x74\xb4\x3b\x1c\xa8\x47\x54\xb0\x7b\x1f\xbd\xdf\xf7\xaa\xa0\x5a\x97\x44\x49\x41\xb5\xae\x14\xf8\x49\x01\xc7\xc9\x93\xa4\xc2\x27\xa2\x6e\x1d\x9b\xf6\xbd\x4c\xf6\x53\x9c\x82\xd4\x68\x04\x91\x7f\x89\x7c\x0f\xa6\x1d\x09\x5f\x02\x44\x5f\x31\x20\xbd\x84\xb2\x11\x46\x4f\x2c\x2a\xf0\xec\xe7\xf3\xe2\x0c\xe2\x34\x26\x30\xa0\x34\xc1\x06\x09\x08\xbe\x61\x44\x72\x0a\xd3\x67\xca\xe0\xb8\xaa\x96\xb5\x95\xf8\xd8\xba\xa6\x12\xdd\x37\xaa\xb5\x65\x53\x93\x70\x00\x57\x2d\x07\xfa\xa7\xbc\x35\xf5\xb9\x8d\x5f\xd5\xd4\xa7\x9a\x9f\xec\xbe\xfb\x6d\x30\xa4\x6a\x5c\xb0\x72\x4d\x2b\x39\xae\x05\x33\x5a\x47\x35\x6d\x6a\x21\x07\x26\x5c\x39\xbf\x6d\xe9\xde\xa1\xe4\x78\x4b\xea\x58\xfb\xf2\x45\x7b\x9b\xdb\x57\x2c\xba\xb5\xf0\x05\xf4\xe9\xd2\x82\x2a\xa7\xa2\x73\xfc\x8e\x31\xc7\x1e\x5c\x7e\xac\x6d\x7e\x65\xf3\x2d\x4b\xf1\x71\xe8\xde\xa5\x73\x56\xb4\x37\xef\x5d\xb4\xbc\xbd\xf9\xd6\x45\xc4\xfe\xea\x2c\x05\x89\x2f\x70\xa3\x88\xb9\xc8\x9b\xd2\xc6\xee\xe2\xc3\xe3\x67\x87\xbd\x4b\xa6\xe4\x43\xbf\xad\xd7\xe6\x87\xf9\x53\x96\x8c\xde\x75\xdf\xae\xd1\xf4\xd7\xd7\xbf\x14\xe8\x7b\x5d\xd0\x04\x8b\x05\x5e\xba\x3e\xf9\xdd\xad\xb7\x7e\x77\x0e\x53\x24\x63\x77\xe4\xc6\x54\x3c\xd0\xb1\xa1\x7c\xa0\x22\x1f\x51\x44\x52\x4d\x63\x85\x08\x9b\xa8\x98\x6a\x49\xc2\x64\x2a\x59\x0b\x9f\x4e\x35\xa5\x9a\xd8\xd3\x7e\x77\xaa\xd6\x51\xef\x48\xd5\xba\xfd\x05\x41\xd8\x6b\xca\x33\xc1\xde\x60\xc1\x24\x30\x09\xae\xfd\x74\x31\x42\x08\xa6\x28\x5f\xa5\x0e\x25\xb5\x5a\x90\xd4\x55\xfa\x68\x2a\x5c\xaf\x06\x94\x54\x7a\x96\x52\xd7\x8b\x50\x79\xf8\xfe\x52\xd1\x8f\xc9\x39\xab\x68\x9c\xc5\x06\x84\xe7\x60\x41\xfa\x1c\xca\xc4\xc9\x73\xb1\x64\xc7\x17\xd3\xac\x62\x20\xfd\x80\x01\xe1\x80\x9f\x52\x58\x7c\xf1\x01\x0a\x4e\x84\x6a\xc1\x8d\x68\x01\x5a\xc0\xbe\x3b\x20\x92\x27\x86\x0f\xa3\xc1\x68\x30\x7b\x2a\xe8\x41\xb5\xd6\x5a\x2b\xaa\x65\x68\xc8\xa6\x83\x9e\x60\xae\x0f\x3c\x8a\x7f\xbd\xe6\xb8\x19\xf4\xfa\x72\xc1\xa3\xfe\x9c\xae\x5e\x50\xbe\xbf\xfb\x81\x07\x1e\x48\x6d\xcb\x84\x56\xde\x05\xe4\xfb\xbb\x9f\x7d\xf6\xd9\x54\x15\xea\xf2\x57\x6b\x4f\xa8\xd5\x27\x20\xfe\x23\x67\x6d\xb5\x1f\xf4\x04\x6b\xb5\x4f\x83\xeb\xf0\xb1\x57\x2e\xef\xd5\xd6\x06\x51\xf7\xd3\xda\x5a\x51\xa6\x82\xa4\x14\x0b\xf1\x7b\xcb\x70\xbb\x07\xa9\x02\xaa\x8e\xec\xd6\x1a\x3d\x34\x41\x36\x0d\xd2\x98\xc2\x8b\x42\x8f\x17\x33\x3f\x94\xd8\x23\x39\x8f\xc1\x14\xf0\x44\x62\x25\x3e\x4f\xcc\x43\x78\x75\x9f\x27\x40\x3c\x8f\xe1\x1c\xa1\xc3\xd2\x3e\x0f\x57\x8a\x00\x38\xdb\xd7\xd9\x2d\x01\x7b\xf4\x07\x6a\x96\xeb\x3e\x98\x81\x0e\xff\x39\x05\xd8\xa3\x57\xbd\x39\x13\xa6\x2e\x59\x7a\x26\x0e\xc2\x6f\xbe\x82\xfe\x08\xac\x6d\x13\x9e\x43\x7d\xe8\x73\xd8\x31\xf6\x8a\x65\x35\x07\x97\x5c\x5a\x3c\x72\x49\xb2\x29\x75\x2b\xf3\xc0\x5a\xf4\xc7\xb9\x9d\x2f\xa4\x9e\xac\x4d\xa0\x37\x81\xf4\x2f\x6f\x03\xfe\x8a\x0f\xaf\xd4\xb9\x16\xad\x8a\xdc\x7d\xe8\xb9\xa1\xad\xd7\xfd\xc5\xd1\xb0\x6e\xc2\xe3\x1d\x59\x07\x56\x0d\x5b\x33\xaa\xdc\x96\xfe\x86\x99\xfd\x4c\x17\x15\xa0\xf2\xf0\x9b\x0c\x16\xfc\xfc\x5c\xb0\x1a\xf2\xc2\xee\x13\xd9\x5b\x20\x1b\x0d\xb4\x2f\x86\x29\x55\x43\xfa\xc4\xe2\x32\x9e\x78\xec\x1c\xba\x0f\x81\x26\xa2\x23\x66\x1f\x1e\x7a\xb8\x51\x06\x4a\xc2\x8e\xa1\x6d\x60\xdd\xb2\x9e\x6b\xe7\x87\x9a\x47\xb5\x3e\x7c\xe7\x8a\xa9\x87\x9f\x5d\x0b\xe5\x8d\x43\xc0\x2d\x60\xe7\x86\xe4\xfe\xdb\x2e\x7f\xb3\xfa\x2a\xc5\xd0\xe2\xc5\x0a\xc4\x34\xcd\x03\x35\xe8\xf7\xe7\x4b\xc1\xd0\xf5\x7d\x5f\x2e\x5d\x7c\x5b\x4e\x49\x77\xd9\xf0\x1c\x1d\x7a\xfe\xa9\xce\xc9\xe8\x91\xe3\x8b\xe7\x64\xb5\x0c\x92\x1b\x36\x3f\x72\x70\xe3\xd6\xfd\xbf\xf3\x86\xc1\x25\xab\x4b\xeb\x81\xbc\x35\xc3\x6b\x71\x19\x9c\xfb\x10\x41\x67\xed\xf7\x5a\x20\xec\xc1\x9a\x33\xfa\x67\x21\x42\x99\x83\x01\x08\x45\x09\x03\xe5\x03\xc2\x1c\x52\x88\xc7\x95\xa0\x3e\x43\x80\x6c\x29\x49\xc1\xb5\xaf\x5d\x7b\xed\x6b\xa9\x6d\x3b\xe6\xd8\xed\x73\x5a\xeb\xdc\xee\x3d\x2d\xc6\x0e\x43\xd6\xf2\xc1\x73\xe8\xb7\x1f\x5b\xb7\xfe\xb1\xc7\xd6\xaf\x7b\x6c\x17\xfa\xe1\x08\x1a\xa6\x7c\x7e\xf3\xaa\xa7\xad\xff\x00\x5b\x86\x4f\x56\x99\x08\xc6\x80\xe2\x99\x23\x40\xc1\xb8\x49\xfd\x6b\xcf\x3c\xf7\xf6\x0e\x49\x8e\x7b\x77\x4b\x6b\xad\x5b\xea\x91\x56\x0e\xa5\x3f\x5a\xf7\x18\xae\xff\xe8\xa3\xeb\x9f\x45\x3f\xa2\xdf\x6f\x78\x74\xcf\xa5\x13\xc1\x03\xb7\x16\x41\xb0\xfb\x19\x20\x45\x3f\x50\xe7\xf1\x8e\x52\xfc\x3e\x0d\x54\x6b\x1a\x09\x80\x6c\x9f\x52\x22\x37\x28\x98\x2f\xc7\xf1\x43\xc7\xcf\x6d\x84\x55\x65\x18\x8f\x40\x24\xfd\x9d\x38\x9a\xbc\x7d\x20\xb3\xbf\x2c\xb6\x09\x61\x0e\xdf\x5b\xd2\xb3\x78\x71\x0f\xd2\x5e\xda\x51\x3a\xd9\x5a\x52\x50\xb9\xd2\x6a\x89\x56\x75\x98\x0c\x1d\x74\x9f\xf8\x25\x0e\x1a\x6e\x98\x32\xe7\x66\x39\x18\xbf\xeb\xd8\xb1\x5d\x37\xfe\x11\x7e\x2c\xe3\x87\x55\xa3\xbf\x88\x1f\xe8\xa7\xed\xaf\x6e\xdb\x36\x63\xe6\x36\x3a\xbb\x67\xf1\x92\xe1\xed\x8b\xd1\xab\x07\x96\x96\x17\x19\x0c\xf8\x1a\x95\x2b\x2d\x1e\x16\x2e\x14\x3f\xe6\x4d\x83\x26\xae\xbc\x66\x76\xdf\xb1\x9d\xbb\x8e\xbd\x73\x23\x7a\x0e\x04\x56\x80\x77\x71\x3a\xea\x99\xb1\x6d\xdb\xab\xdb\xb7\x11\xb4\xf1\xb3\x63\x24\x5f\xb1\x67\x29\x15\xee\x97\xf9\x98\x4f\x1e\x26\xa0\x26\xd1\x5c\x40\x10\xbe\x62\x06\xca\x64\xc7\x1c\x33\xad\x01\x34\xd1\x6e\x8d\x27\x42\x80\x58\x1b\x01\xcc\xa1\xd1\x3c\x69\x01\x20\xa1\x03\x21\x9e\x68\x25\xb2\x44\xea\xc4\xa9\x59\x2e\x88\x53\x12\x74\x20\x41\x14\xd7\xd8\x38\xa6\xea\x4d\x74\xa3\x06\xa2\x89\x78\xec\x2b\x38\x8d\xcc\x0b\xdb\xf2\x0e\xdd\x50\x33\xb5\xc8\x4d\x33\xcf\xe9\x20\x27\xf5\x0d\xbf\x46\x92\x3c\xa2\x2c\xe6\xf5\x83\x6f\x94\xfe\xe3\x18\x77\xdf\xdf\xca\x52\xa1\xc2\xf7\xd0\x0b\xfc\xc7\x86\xf6\xb0\xa5\xd8\x57\x64\x29\x82\xbb\xdf\xd5\x2b\x4c\xaa\xb0\xbf\xca\xd3\xa4\xf0\xfe\x13\x94\xad\xdd\xfe\x3e\x9a\xb4\xdb\xdb\x31\xa8\x52\xa7\x03\x3b\xdd\x71\xa5\x22\x04\x16\xa1\xeb\x4c\x4e\xba\x2c\x60\x2f\x6d\xf6\x4f\xe4\x94\xb0\x1c\x6d\x99\x38\xe4\xfa\xb9\xa3\x8c\x46\x30\xd3\x56\xa9\xd3\xd7\x5c\x36\x26\xf5\x19\xba\xc9\xe9\xa3\x19\x8e\xdd\x0f\x16\x81\x79\x0f\x68\x4d\x26\xfa\xd1\x1a\x74\xcd\x33\x4a\x30\xc3\xed\x60\xa0\xc1\x94\x67\x8d\xa3\x97\xd0\xce\x40\x9b\xcf\xe0\x35\x99\xe4\x7a\x7a\x08\x58\xf0\xc2\x97\x23\xd1\xd5\x86\x31\xe3\x6f\x9e\xd4\xa0\x52\x01\xda\xae\xd1\x54\x89\x7d\xa4\x56\x2a\xf6\x79\xb2\xaf\xdb\x70\x0e\x2d\x82\xf7\xe0\xd6\x22\x44\x24\xd7\x9f\x32\xd0\x70\xd4\x93\x31\x20\xcd\x38\x12\xc1\xed\x47\xba\x87\x99\xa8\x30\x80\x13\x93\x37\x4f\x9e\xbc\x79\x23\xfd\xf3\x78\x68\x91\xa5\x28\x99\x05\xb2\xb4\x90\x84\xf4\xea\xae\xee\x9e\xee\x3e\x0a\x1f\xba\xd4\xfa\x4d\x93\x1c\x73\xcd\x77\x4c\xa3\xa9\x69\x77\x98\xe7\x3a\x26\x6d\x02\xeb\x48\xa1\xc9\xe0\x04\x98\x29\xe5\x79\x69\xca\x2a\x46\x29\x84\x49\xf6\x24\x71\xbd\x99\x14\x8f\x98\x9e\x4b\xe2\xd2\x77\x4e\x5e\xbf\x7e\x32\x9a\xb4\x49\xb4\xab\x95\x92\xe9\x36\x4a\x55\x60\x3e\xbe\x75\x00\xaf\xf6\xbf\x3c\xb0\x88\xb3\xec\x49\x7b\xc4\x32\xf3\x19\xbb\x59\x70\xee\xdd\xd3\x29\x5c\xd6\xa4\x4d\x17\x7d\xf4\xa4\x88\x8a\x97\x24\x2f\x70\xea\xb4\xf8\xb8\x33\x06\xbc\x37\xe3\x11\xd2\x60\x72\xd3\x24\xf2\x12\xb5\xe4\xf1\x6b\xc5\xe3\xb9\x97\x38\x41\xc8\xac\x13\xe4\x55\x50\x96\xd0\x4c\x60\xa3\xd8\x00\x7d\xcf\x08\x51\x4c\x0f\x64\x61\x1e\xe5\x84\xf0\x7e\x94\x9f\x0c\x54\x57\x06\xeb\x8f\x6c\x02\x11\xf7\x69\x09\xf2\x66\xfd\x47\xd1\x9f\x30\x51\x22\x14\x8f\xec\x89\xa0\x0d\x45\x80\xdc\x6f\x45\xbd\x56\xbf\x1c\xa0\x88\x2d\xc8\x83\x1d\x9f\x08\xc7\x97\xc8\x31\x49\x60\xe1\x93\x7c\xd0\xf6\x12\xd8\x81\x8f\x9f\x80\x1d\x9d\x25\x41\xdd\xb6\xa0\xd5\xe7\xb3\x06\xb7\xe9\x82\x38\xf7\x86\xfe\x43\x92\xe7\x11\xae\x10\x44\x0b\x85\xc3\x80\xb9\xc6\x48\xe5\x52\x8d\x82\x2e\x4c\x1a\x34\x49\x9c\xe5\xd3\x66\xd8\xf1\x04\x4e\xf5\x0c\x48\xcd\x12\x52\x79\x9c\xea\x17\xf6\x13\xfb\x4b\x33\x82\x7b\x3e\x30\x50\x35\x6d\xb6\xeb\xf7\x68\xcb\xcd\x39\x76\x13\x9b\xb5\x79\xd1\xdf\xee\xe7\xd5\xbc\xa3\xcb\xf7\x25\xfa\xc3\x4d\xbb\x8a\x7c\x56\xce\xb5\x7a\x03\x30\xbf\x63\x51\x5b\x7d\x0b\xc2\xeb\xd0\xa3\x0f\xbf\xd1\x63\x76\x67\xbb\x15\xce\x2d\x0f\xee\x03\xf9\xb3\x8d\xbc\x33\xf7\xcd\x0b\xe1\xe7\x9b\xb2\xf8\xa5\x5e\x59\xae\xc1\x29\xb5\xcf\x56\xd8\xbf\x08\x1b\xb7\xe5\xa8\xa2\x56\x9f\xd4\xb3\x56\xe5\x03\xba\x42\xf3\xd0\x61\x85\x5c\xc0\xe5\xce\x91\x06\x1a\xab\x94\xd9\x13\x2e\x10\x06\x01\xd1\x97\x2d\xfe\x26\x3c\xa1\x86\x89\x5f\x36\x8e\xe6\x30\x8f\x1d\xc2\xa1\x04\x9f\xf0\x30\x14\x7a\xc7\x02\xcc\x88\xcd\xdb\xee\x42\xc7\x40\xa1\x05\x7d\x0a\xce\xe0\x30\xc8\x67\xde\x49\x3d\xed\x46\x53\x5d\xe8\x2b\x17\x28\x84\x83\x5d\x60\x9f\x0b\xe8\x5c\x78\xec\xe9\xf0\xef\x1a\x19\xc5\x5c\x4a\xa9\xf1\x0a\x4b\x3c\xda\x57\x52\x43\xa8\x51\xd4\x34\x6a\x3a\xb5\x18\x73\xa4\xdb\xa8\xeb\xa8\xdb\xa8\x83\x54\x2f\xf5\x2e\xf1\xb6\x45\x7a\xa9\x97\x18\x8d\x92\x19\x1b\x47\x71\x33\x92\xb6\xe5\x68\x83\x39\xe3\x3c\x20\x46\x76\x07\xbd\x85\xc4\xb6\x37\x61\x26\x8a\x38\xb1\x50\xa2\x04\xcf\xf6\xb4\x99\x33\xf8\x84\xf4\x28\xa6\xd9\xcf\x65\xb8\xd3\x8a\x3b\x38\x82\x73\x64\x80\xe7\x0c\x82\x67\x24\xe2\x22\xd9\x94\xb8\x30\x26\x46\x44\xbb\xf0\x32\x40\x93\x6c\xb2\x06\xf2\x44\x8c\x69\xee\x8f\x61\x7a\xd5\xc4\x73\xc5\x42\x0c\xf2\xb1\x78\xda\x18\x5f\xc0\x6f\x16\xa8\x3a\x92\x40\x09\x42\x0a\x5a\x8b\x49\x48\x95\x5c\xa6\x56\xab\x81\x4a\x66\x02\x39\x0a\xa5\x4a\xaa\x95\xaa\x80\x5c\x21\x91\xa9\x15\x32\xd9\x99\x2f\x0c\x06\xa8\x86\x3a\x1d\x54\x8f\xb3\xd9\xa0\x54\x66\x36\xcb\xa4\xc0\x76\xc4\x6a\x55\xc8\xa1\xd1\x08\xe5\x8a\xc9\x66\x33\x54\xaa\x8c\x46\x95\xb2\x0b\xc7\xd5\x12\x99\xc1\x20\x93\xa8\xc1\x06\xf4\x91\xd1\x28\xe7\xb4\x10\xf3\x4b\x5a\x4e\x3e\x99\xe7\x15\x52\x1c\xc2\x71\xa9\x62\x1a\x4e\x33\xf0\x38\xa2\x92\xca\x94\xe0\xca\x97\x35\x1a\x0d\x66\x09\xd4\x6a\x8d\x41\x33\x5d\xad\xd6\x9a\xb4\x40\xa9\x04\x5a\x93\xe6\x4f\x6a\xbd\x4d\x0f\x24\x12\x25\x94\xcb\x14\x52\x4e\x0d\x99\x59\x07\x96\xf5\xfd\x5b\xa5\x77\x8c\xee\x7a\x01\xb8\x74\xb1\xb2\x65\x07\xf6\x7f\x03\x15\x72\xb5\x5a\x9e\xfa\xe1\x1b\xb9\xaa\xe4\x18\x6c\xd6\x4a\x59\x56\xaa\x95\xa4\x9e\x05\x9f\x03\x39\xa7\x90\x71\x2a\xb0\x20\xb9\x4e\x26\x5b\x97\x94\x35\xbd\xf5\xba\x4c\xfe\xda\x5b\x32\x3c\x32\x3f\xff\xe1\x4b\x85\xe2\xcb\x1f\x94\x6c\xdf\xf7\x2a\xd5\xf7\x7d\x2a\xf7\x67\x3f\x6a\x65\xdc\x8f\x9f\x49\x64\xc8\x04\x17\xa2\xcd\x3f\x72\x0a\xfd\x8f\x60\xad\x5e\x31\x1c\xe5\x7d\x2f\x55\xf0\xdf\x83\x77\x79\x45\x16\x92\x7c\x6b\x34\x7e\x0b\x4e\xcb\x54\xaa\x94\x0e\x7e\x86\xe0\x57\x72\x8d\x5a\xf1\x15\x40\x0a\xb5\xda\x85\x0c\x5f\x28\xb4\x5a\xc5\x17\xe0\x0b\xa5\x56\x8b\xa4\xff\x54\xe9\xf5\xaa\x25\xcb\xe0\x5a\x5a\x23\xe3\x58\xa9\x3e\x75\xe3\xb2\xbb\xa0\x5e\x45\x6f\x32\xcb\xbd\xe8\x54\xaf\xe9\x00\x95\xc1\x27\xa0\x04\x1f\xc6\x76\x01\x81\x94\xa2\xb2\xfc\x09\x3c\xd5\x90\x1d\xfa\x2a\x60\xfa\xdf\x63\x8c\x00\x4e\x2d\x46\x4b\xe2\x90\x07\xef\x81\xbd\x2b\x8e\xa2\xdb\x50\x17\xba\xed\xe8\x0a\xb0\xf7\x57\xe2\x87\x41\x0f\x98\x76\x34\x13\x3f\x4a\x53\x63\x46\xdd\x27\xea\x63\xdc\x37\xaa\xef\xbe\x01\x11\x90\x33\x20\xc2\xe4\xe0\x53\x52\x8c\xe1\xd3\x80\xfd\x5c\x9e\xb2\x51\x3e\x6a\x32\x1e\x3b\x97\xe2\xb1\xb3\x15\xcf\x49\xbf\xdc\xaf\x33\x73\x3a\x0f\xf1\xa7\x2c\x28\x5b\x13\x11\x2e\x10\xa4\x65\x64\x13\x57\xc2\x19\xc5\x3d\x73\x0e\x0a\x7e\xfb\x88\x3d\x3b\x20\xd6\x21\x46\xb2\x07\x4b\x6c\x0e\x2a\x60\x44\xb0\xbf\xc7\xaf\x8d\x0f\x98\xb2\x50\x03\x20\x31\xe3\x49\x8e\x98\xbc\xc7\xf0\xbf\x90\x81\xa3\x49\xd1\x10\xb9\x8a\x84\x0d\xfa\xc8\x98\x2c\x61\x8f\x38\xc2\xfd\x00\xca\xc9\x70\x97\x63\x33\x58\x29\x57\xa2\x57\x94\x60\x3a\xb1\x35\x4b\x51\x10\x79\xa2\x15\xe5\x37\xb8\xb4\x6a\x08\x24\x75\x45\x97\xd7\x7c\x70\xff\x4d\xe3\x35\x2a\x0b\x60\xe5\x8c\x6c\xf2\x68\xb5\x0c\x96\x24\x1a\xfd\x16\x95\x4a\xe1\x36\x02\xb3\x52\x2f\x23\xc6\xf0\xca\x04\xb2\x97\x8c\x8e\x0e\x05\x1b\x34\x2a\xfc\x38\x02\x42\x85\x12\xac\xdd\xba\x13\x9a\xd8\x96\xa8\xbd\xd4\x05\x57\x58\x2e\x6d\x29\x52\x33\xcc\x66\x61\x8b\x2d\x03\xc3\x1c\x76\x34\xa2\x2b\x9c\x4a\x50\xa6\x3c\xad\x67\x28\x62\xd0\x76\x9a\x82\x23\x6c\x2e\xae\xd8\x84\x99\x2b\x00\x82\x61\x8f\xa5\x02\x9d\xe6\x94\x80\x91\xdb\xc2\xb3\xf3\x65\x1a\x08\x47\x77\x5f\xb1\xae\xe3\x96\x48\x58\x63\x2c\x94\x40\x9a\x75\xad\x19\xb4\x1f\xd9\x2d\x97\x87\xc7\xd1\xab\x73\x3a\xb9\x00\x1d\x66\x18\x80\xeb\x9a\x70\x7b\xa4\xe6\xc6\xed\x98\x28\x6e\x58\x38\x66\x51\xa9\xc2\xe2\x00\x80\x3a\xaf\x9f\x89\xdf\x68\xd4\x6f\xfb\x36\xbc\x91\x00\x1a\xe3\xd6\x8f\x45\xc9\xe6\x3a\x0e\x0b\x90\x7e\xb4\x44\x03\x7c\x25\x05\xc4\x35\x1b\x01\x56\x27\xb4\x9d\x0f\xb7\x38\x1d\x8d\xfd\x6a\x4b\xcf\x6d\xda\xbf\x2f\xc9\xd1\x90\xa1\x01\x4b\x27\xf7\xed\x6f\x42\xef\x76\x4e\x67\x21\x64\xf0\xd3\x4b\xe0\x75\x4b\xae\x83\x2c\x60\x18\x08\xd9\xe9\x9d\xbf\xa1\xd9\xe8\xe4\xfc\xd4\x7c\xf0\x89\xc1\xa6\x95\x5a\x68\xaf\x0c\xd9\xe1\xce\xf9\xf3\x51\xb3\xc1\x66\x24\xce\x76\xd9\x2c\x19\xf4\xa4\x3e\x92\xb9\x25\x46\xa3\xcd\x00\x9e\x98\xff\xcb\x76\x18\xf9\xdb\xda\x81\x98\x02\xf8\x08\xa8\x27\x91\x06\x43\x37\xf0\x91\x38\x2d\x36\x86\x00\xe1\x46\xc4\x0d\x85\x40\x88\xf3\xf4\xaf\x36\x02\xc8\x07\xd6\x61\xb3\x59\x39\x8b\x5f\x9a\x81\x2c\x47\xcf\x6f\x01\xbe\xc6\xde\x17\x1a\xd0\xa7\xcd\xb3\x19\x25\x8d\x7b\x17\x23\x51\xcc\x6b\x41\x1f\x36\x3e\xfb\xfc\x6f\x68\x86\xcf\xe6\xcd\xbb\x9d\xe3\xa5\x8c\x84\xe1\x64\xcc\xed\xf3\xe6\x01\x1d\xb0\xcd\x9f\xbf\x8f\xe3\x19\x1a\x5f\x47\xb9\x0f\xb7\xc9\xd7\xe8\x93\x8c\x8e\xcc\xc0\xf7\x2f\x15\x74\x81\x7f\x6b\x0b\x60\x8e\x52\xf4\xd3\x8d\x29\x0d\x82\xec\x08\x7c\x3a\x32\x72\x09\xd8\xe2\xaf\xbf\x73\x16\x18\x3c\xe9\xca\x96\x9c\x86\xe1\xcd\x35\x45\x1d\xe8\xba\x89\x80\x5d\xb1\xb2\xc4\x5d\x5a\xed\xfe\x6d\x2f\x78\xb7\xc6\x9c\xec\x18\xb1\xd2\xce\xcf\x4f\xfd\x09\x58\x80\x52\xef\xe9\x18\xef\xd6\x5c\xec\x9d\x72\xa8\xc8\x6f\x9c\x79\x74\x9e\x58\xc2\x0c\x18\x51\x5d\xca\xf0\xab\xaf\xc0\x24\xfb\xa8\x5e\xb2\xf9\xd1\xde\xd3\x8d\x69\xd2\xdf\xf0\xdc\xa0\x17\xf5\xf6\x92\x2a\xc9\x6e\x52\x85\x20\x67\x66\x9e\x35\xb3\x2f\x43\x9e\x37\x41\x35\x0b\x28\xeb\x31\x9f\x91\x8d\xf9\x9c\xe9\xb3\xf1\xd7\xdf\xc1\x47\xc0\xc5\x75\x40\xb0\x10\x16\xb4\xa0\xe3\x7c\x2c\x4a\x9c\x24\xc2\x34\x19\x0d\x93\x44\x49\x90\xfc\xe8\xca\xff\xf5\xed\x92\x49\x44\xc1\x6d\xf3\xa5\xd7\x7f\x78\xbd\xd4\x38\x3d\x39\xdc\xe4\x3d\x22\xf8\x7a\x63\x92\x03\xfe\xc0\xaf\xbd\x71\x32\x89\xa7\xb2\x77\xd0\x9d\x76\xeb\xc8\x85\x0b\x47\x5a\xed\x35\xa0\x35\x99\xb4\x21\x9b\xe0\x9f\xb1\x5f\xe7\x75\xc0\xb7\x2a\xa3\x5a\x04\x6d\xb6\xdf\xb4\x4e\x18\x33\x5e\x23\xfb\x1d\x37\x24\xe2\x04\xe8\x51\x1b\x12\x91\xd5\x4c\x5a\x01\x75\x25\x14\x21\x5e\x41\x0b\x00\x49\x31\x08\x29\xbf\xde\x39\x31\x91\x43\x7c\x47\x1e\xd8\x44\x18\x83\x4d\x07\xb4\xe0\x90\x9b\xdf\xb0\x41\x1b\x37\x18\x59\xdd\x8c\x19\x3a\xd6\xa8\x7f\xd6\x6e\x18\x3b\x56\x1f\x0f\x42\xbe\xa4\x84\x87\xbc\xe1\xb7\xcc\x4e\x05\x52\x53\xea\x04\x71\x25\x79\xb7\xb0\x6f\x7c\xb7\x26\x35\xd8\xb2\x0f\xec\xd9\x67\x94\xe8\x74\x31\xe3\x1a\xf4\xfc\x1a\x63\x4c\xab\xb9\xd1\x30\xa9\x6f\x12\x0f\xfd\x31\x43\xd9\x8d\x65\x86\x98\x5e\x77\x91\x3e\x1d\xfd\xad\xe3\xf4\xc2\xbd\x21\x36\xd3\x6a\x02\x1a\x66\x34\xf2\xeb\x4b\xa1\xe0\x85\x18\x09\x47\x7a\x01\x69\x16\xb5\x0c\xfd\x04\x64\xb2\xdf\xb4\x8e\xd1\xc9\x4c\x5d\x80\x8f\x10\xbf\x7f\x2f\x79\x7f\x20\xef\x04\x72\xd9\x45\xbe\x7f\x82\x1a\x46\xf0\x93\x7e\xd3\x9b\x55\x13\xdb\x51\x40\xb4\xdf\x89\x85\xa9\x60\xbe\xe2\x31\x71\xb4\xe0\xb7\x08\x10\x55\x77\x62\xbe\x88\xa9\x5c\x4c\x28\xf0\x62\x59\x92\x19\xfa\xf5\x8f\xdf\x25\xb5\x29\xa2\x0a\x5a\xfa\xc4\x13\x52\x1a\x07\x6c\xd2\xbf\xa9\xf1\xcb\xaa\xd5\x7f\xbb\x30\x1d\x2d\x57\x69\xe0\x55\xd0\xa4\xaa\x49\x9f\x7f\x53\x8b\xe0\x2b\x04\xf1\x95\xbe\xfb\x0e\x5f\x21\x88\xaf\x04\xf2\x79\xfc\x87\x8e\x5d\x98\x9e\x92\xe0\x2b\xd2\xe4\xd2\x72\x1c\xe8\xfb\x3d\x0e\x60\x9e\x27\x74\x76\x37\x7b\x1c\xb7\x17\xd1\xd0\xc5\xe4\x91\x04\x8a\x8e\x7d\xe4\x98\xeb\x31\xd9\x08\xed\x94\x08\xf6\x7b\x5c\xc7\x83\x80\xa8\x24\x0d\xdc\xee\x63\x8f\xcf\x9c\x5a\xf7\x87\x3b\x0a\xdb\x3b\x1c\x75\x73\x67\x2c\xed\x1a\x6b\x07\x76\xdb\xb8\x55\xab\x87\xdf\xbb\x7c\xfb\x1d\x6f\x1f\x7a\xf4\xb9\x72\xce\xda\x50\x51\xa7\x77\x97\x47\x62\xb5\x7f\xbc\xa3\x1a\xbe\xf4\xb2\xf9\x0a\xf4\xed\xed\xb6\xfc\x22\x5d\x6c\xc9\xb5\x1f\x03\x0e\x5c\xf2\xd6\x7b\x68\x37\xfa\xea\xe5\xae\x7b\xbf\x1c\x02\xc2\x87\x7b\x7f\x38\xd6\xbb\x6f\x3d\x60\x94\xa1\xac\xd9\x23\xc6\x76\x4e\x9f\xf0\xf4\x5f\xd2\x32\x7d\x4e\x9c\xd7\x24\x94\x1c\x73\x53\x7a\xcc\x99\x5a\x09\x36\x00\x0f\x74\x01\x36\x11\x92\x81\x40\x66\xc3\x19\xf3\x6e\x3a\x36\x80\x69\x14\x9d\x21\xed\x54\x8c\xb0\x24\x22\x0b\xfd\x57\x38\x01\x3d\x8a\x1e\xff\xfd\xef\xe9\x28\x0e\x7d\x87\x1e\x6d\x05\x5a\xbc\x78\x7d\x7d\x35\x68\x4b\xdd\xc5\xbc\xf9\x7b\xf4\x38\x50\xa5\xee\xa2\xa3\xde\xbe\x37\x8d\x79\xc6\xbe\x37\xbd\x5e\x3a\x8a\x03\x38\x01\x2c\x42\x97\x80\xd9\x1f\xf9\x37\x6c\xe8\x7b\x1f\xec\x38\xf4\xd1\xe5\x4f\x3c\xf1\xc4\xa4\x8f\xc0\x6c\x74\x09\xfa\x6a\x03\x80\xfe\x43\x60\x07\xba\x29\x37\xf5\x61\xb6\x39\xf5\xa1\x4a\x05\xbd\xe6\x6c\xe8\xcd\x36\x43\x2f\xa6\xe4\x3f\x34\x67\xf0\x5a\xf1\x8b\xb0\x2b\x71\xbf\x1c\x2b\xf6\x49\x61\xd7\xce\xe7\xc9\x85\x82\x84\xa3\x1f\xc0\x83\xe8\xdd\xeb\x71\x26\x10\x98\x67\xa2\xad\x90\xc1\x0b\x77\xb1\xd1\xf4\x2e\x1e\x97\xd1\x01\xf3\x79\x45\xaf\x5a\xd2\x45\x57\x7e\x71\x37\xa3\xa1\xcf\x0c\x06\x90\xbd\xef\x8b\x4b\x26\x2a\xf7\x2f\x9b\xd2\x3a\x0c\x84\x1e\x3b\x00\x2c\x77\x82\xd3\x6f\xdc\xb3\xf6\xca\xd9\xda\x1a\x65\x43\x6b\xa2\xb5\x35\x96\x37\xa2\xae\x6e\xe8\x88\xc5\x75\xab\xee\xbe\x67\xcd\xb5\xd3\x26\xd5\xb7\x94\xb4\x37\x97\xe5\x0e\xaf\xab\x1f\xda\xb1\xa8\x66\xf5\x7d\xb0\xaf\xe0\x95\xd5\xfb\x3f\x05\xf2\x7f\xde\x75\xc9\xd3\xf1\x50\xee\xd2\x3b\xca\x6f\x3e\x72\x3b\xfa\xe2\x4e\x89\x05\x7d\xbd\x7a\xfb\x74\xc3\x50\x75\x5d\x43\x3c\xd6\x98\xd3\xd8\xd1\xd1\x98\x73\xed\x8a\x55\xdb\xa7\x2e\xa8\xad\x8f\x96\x0d\x12\x13\xb6\x9d\x6f\x7f\x20\x62\x6f\x12\xab\x9a\x04\xe1\x3f\xce\x37\x1a\xf0\x67\xe1\x57\x89\x98\x13\x20\x11\x2c\x49\x84\x24\x5a\x2a\x0b\x1f\xbd\x21\x4e\x9f\x15\x17\x7c\xcb\xb2\x66\x3c\x01\x73\x26\x03\x7c\xed\x97\xaa\xff\xb0\x17\x6d\xbe\xff\xf9\x8e\xfb\x3a\x9e\x3f\xf3\xcd\xf3\x0e\xc7\xf3\x9d\xb0\x1e\xac\x15\x13\x5e\x4b\xbb\x8a\xa5\x67\x3c\xdf\xd9\xf9\xbc\x43\x42\x5d\x44\x53\x58\xdd\x49\x2a\xe1\xaa\xa4\xc2\xfd\x68\x73\xea\x39\x21\x01\x04\x3f\x16\x2b\x4b\x9f\xbf\x5f\xbc\x9c\xb0\x5f\x93\x25\x39\xc1\xfe\x85\xa0\x40\x80\x73\x0a\x4e\x7a\xa2\xcc\x4f\x11\x7c\x82\xac\x6a\xb2\xe5\x1f\x8a\x99\x18\xbd\xe4\xc4\x95\xff\x44\xbd\xa8\x07\xf5\xfe\xf3\xca\xe7\x41\xfb\xd1\x0f\xd0\x07\x69\xbf\xb6\xb3\xd0\x07\x1f\x1c\x05\xed\xcf\xc3\xe4\xc3\x24\xf3\xca\x7f\x82\xda\x87\xff\x04\x96\x7e\xed\x3e\x99\x8f\x7a\xfe\xb1\x51\x74\x63\xbb\xf1\x1f\xa0\x2b\xff\xa4\xfb\x6b\xb4\x8d\xe8\x84\xf3\x78\x3e\xfb\x37\x6e\xc3\xe9\xb8\xa7\xc7\xf5\x89\x48\x31\x1e\x85\x8c\xa0\x4c\x22\x18\xb0\x03\x62\xe6\x4e\x36\x35\x13\xc4\x7c\x23\x2e\x68\x03\x11\x82\x91\x64\x0a\x01\xb5\x60\x15\x2f\x1a\xbb\x17\x30\x98\xeb\x89\x9a\x8a\x5d\x52\xb3\x3e\xad\x5b\xce\x4b\xff\xfa\x12\x0b\xa4\xe1\xda\x52\x0f\x3b\x74\x48\x64\x4e\x6b\xb5\x56\x1b\x72\x68\xec\x2a\xb5\x3c\x3b\x3f\x47\xad\x9a\x13\x6a\x33\xf0\x20\x64\x34\xdc\xde\xe3\x09\xd1\x8c\x69\xb8\xc3\x31\x3b\xaf\x83\xe7\xdd\x5e\x43\xa1\x67\xfc\x88\xc1\x26\x63\xe5\x50\x0b\x93\x95\x53\x9c\xad\x56\xa9\x39\x79\x38\x7f\x78\x71\x63\x6e\x91\x83\x07\xf4\x87\xe8\x92\xb3\x87\xd1\xa1\xcf\xb7\xc0\x5d\xc7\xc1\x6a\x3c\x42\xa4\xd1\x59\x2b\xf6\xec\x3c\x30\x38\x12\xd2\xba\x75\xda\xe8\xa6\x25\x33\x5c\x4e\x6b\xb1\xc7\x26\x91\x2c\xd5\x35\xd9\xec\x45\x8b\xb2\xdc\x4f\x3e\x5e\xb0\xd8\xeb\x09\x0c\xd6\xe9\x96\xaa\x87\x38\x9d\xa5\xb7\x1c\xae\xcd\x77\x1b\x3c\x3a\x6d\x6c\xed\x8a\xb5\xdd\xb3\x47\x56\xe9\x74\x2a\xda\xe9\xad\x8f\xb4\x37\xcf\x9a\xb3\x71\x30\x4a\xa1\x19\xff\xb8\xf1\x67\xd0\x21\xd2\x3d\x42\x5f\x53\x62\x3e\x37\x4c\xb5\x53\x93\xa8\x05\xd4\x2a\xea\x4a\xea\x26\xe2\x6f\x23\xe8\x27\x9e\x13\xf0\x7f\xcc\xd4\x71\xf8\x18\xd4\x26\xcc\x12\x8e\xa8\x5d\x13\x2b\x46\x2e\x16\x4f\x84\xe2\x09\x73\x9c\xe6\x88\x21\x97\x84\xa8\xee\x98\x71\x17\x4c\x04\x43\x44\x6b\x9b\x74\x4b\x92\x8b\x8f\x11\x7c\x01\x7c\x19\x3c\x51\xa6\x8b\x85\xe2\x7e\x4a\x8b\x8f\xa2\xee\x25\xae\x90\x20\x55\x84\x5a\xa4\x2b\x50\x03\x8c\x61\x18\xd1\x38\xe6\x3c\x35\x78\x7a\xde\xdb\xe8\xb6\x79\xe5\x00\x00\x40\xff\xbf\xce\xbc\xba\x1b\xdf\xd7\xd5\xa5\xfe\x36\xd2\x64\x2f\x9b\x36\xad\xcc\xc5\x77\xf8\x58\x69\xf9\x3c\x74\xdb\xdb\xa5\x75\xba\xf7\x6f\xac\xcb\x5b\xfd\xa9\x5a\xfd\x2f\x77\xc3\xe1\xb2\xce\xa2\x92\x89\x25\x45\x9d\x65\x87\x1b\xdc\xff\x52\xab\x3f\xf5\xd4\x1f\xae\x18\x57\x94\xb7\x20\xaf\x68\x5c\xc5\xe1\x7a\x94\x53\x57\x4a\x8a\x07\x7d\x65\xf3\x40\x17\xa3\x9d\x56\x66\x37\x8d\xf4\xfb\x3a\x78\x57\x99\xa9\xcc\x17\x24\x37\x29\xad\x7b\x07\x74\x01\xd5\xd6\x93\xe8\x45\x74\x00\xbd\x78\x72\xeb\xd6\x93\xa0\x12\x74\x82\xca\x93\x8f\x5d\x64\x80\xcc\xaa\x97\xbc\x75\xd0\x5b\x1c\x29\xbb\x27\x6f\x8c\x12\xea\x1c\x95\x25\x9e\x43\xe0\xe6\x43\x9e\xd2\x52\xc7\x8c\xee\x85\xe8\x5f\xde\x83\x6f\x49\xea\x81\x72\x4c\xde\x3d\x65\x11\x38\xa1\x3d\x67\x4c\x4e\xfb\xc4\xd6\x3b\x1a\xf4\xdf\xc8\xe5\xdf\xe8\x1b\xee\x68\x9d\x28\x24\x4d\x6a\xb9\xa3\x51\xff\xb5\x5c\xfe\xb5\xbe\xf1\x8e\x16\x18\xac\x87\x8a\x31\x39\xf7\x96\xe6\x94\x7a\x0e\xbe\x95\xba\x1f\xcd\x3a\xe4\x29\xa9\x74\xcc\x5e\xd8\x3d\xc3\x51\x5a\xea\x09\x7a\x70\xc6\xbd\x39\x63\x14\x10\xdf\x1a\xaf\x9d\xe4\xc9\xb6\x0e\x7c\x5a\xb8\xef\x62\xda\xf9\xe7\x64\x59\x1c\xa5\xc5\x54\xdf\x20\x6a\x2e\xb5\x94\x68\x37\x06\x0c\x44\x4a\x1c\x8d\xd0\xe9\xb3\x29\x11\x93\xf8\x32\x6a\xf7\x46\x82\xfe\x4f\x0e\x04\x5e\x84\xb0\x1d\x64\x1a\x16\x38\x90\x50\x9c\x8f\x0a\xab\x86\x8f\xd0\x37\x6c\x4c\xc4\x8d\x8f\x98\xa2\x31\x1f\x49\x23\x6e\x05\xc8\xf4\x1b\x35\xfa\x70\x65\x5a\x10\x1e\x89\x82\x98\xf8\x85\x2e\x50\x61\xd3\xa4\xf9\xd3\x66\xf9\x9b\x5b\x5b\xfd\xc1\x03\x6d\x65\x91\xca\x31\xcb\x2b\xf2\x82\xd9\x8b\xc3\x8d\x2d\xb9\x27\xba\xda\xec\xc5\xc5\xad\x9d\xf2\xc0\xe0\x2b\x21\xbc\x92\x06\xa7\x5d\x78\x9a\x97\xf9\x64\x73\xe9\x6b\x98\x4a\x3f\xa0\xb5\x98\x7b\xd3\xbb\x4b\x83\xb5\xe8\xd5\xa2\x21\xc5\x91\xa6\x62\x38\x63\xa0\x48\xec\x64\x7d\x4d\x2d\xd8\x39\x7a\x54\x67\x34\x70\x99\xd3\xb9\x64\x4c\x64\x8e\x86\xd6\x35\xc6\x2c\x74\x60\x56\x7e\x83\x4f\x7b\xa4\xa1\x56\xcd\xba\x2d\x79\x52\xcd\x25\xc3\x2d\x0e\x19\x9a\x6a\x4f\x80\x4d\x05\x66\x73\x11\x5a\x19\x91\xad\x32\x76\x7c\x0c\x97\x75\x18\x2c\xee\xc2\x65\x34\x80\xc7\x03\xf1\x8a\xa0\x05\xbe\xe7\x4f\xc4\x03\xfe\x58\x7c\xe4\x05\x18\xaf\x12\xaa\x11\xcf\x43\x47\x04\x0c\x6c\xad\xb0\x87\xb9\x80\x5a\x41\xbc\x7a\xf8\xbc\xc4\xbf\x02\x4d\x56\x24\x12\x20\x23\x43\xf0\xa4\x2e\x20\xb3\xb0\x46\xad\xc7\x2b\xa8\x26\xc7\x08\xf3\x10\x4b\xcb\xf1\xcd\x11\xe0\x23\x5a\xf5\xa1\x28\x51\xb5\x0f\x18\x05\x54\xab\x98\x2e\x1a\xf3\x0a\x88\xfd\x04\x9e\x1f\xe7\x44\x8d\xc4\x55\x98\xce\x90\xd6\xfc\x16\xd7\x3f\x38\xf2\xae\xdb\x0e\xee\xae\xa8\xac\x58\xbb\x76\x05\x50\xf9\x73\xb5\x3b\xd6\x86\x43\xf9\x83\xc7\x8c\x19\x9c\x8f\x76\x0e\x5a\x7d\x49\xdd\x13\x0d\x35\x43\xa6\x3c\x77\x4d\x57\xc7\x34\xf0\xc4\x87\x0c\xf3\x21\x03\x27\x0d\x9e\x5d\xdd\x19\x71\x4a\x21\x67\x91\x18\x83\x5d\x92\xbf\x4b\xee\xd7\x94\xa9\x47\x8f\xad\x4a\x7d\xdd\x56\x56\xde\x3e\xbc\xa2\xdc\x34\x63\xce\x4c\x7a\x62\x55\xc7\xf5\x5b\xc1\x9b\xaf\x29\xe5\xb9\xd9\xeb\x1f\x33\x4b\x83\x21\x77\xb6\xd9\xe8\xca\x1f\x59\x86\xde\xb6\x96\xcd\x6f\xbe\xab\x92\xc9\x1e\xbd\xd0\xc1\x58\xee\x1d\x71\xf5\xe1\xc2\xbe\xe7\xf2\xc7\xc3\xa9\x93\xbd\x9e\x09\xa9\x5b\xc6\x3f\xf2\x62\x28\x5c\xd9\x35\xae\x02\x4c\x61\xa0\xe4\xb9\x96\xb8\x2f\x7b\xed\x73\x0c\xba\x61\x13\xa3\xbe\x74\xec\xd8\xf2\x8a\x71\xd4\x2f\xfc\x52\xcb\x80\x8f\xc6\x93\x07\xed\x03\xba\xe8\x2f\xec\x3d\xb2\x81\xbc\xfb\x56\x8b\x21\xe7\x96\x95\x80\x9b\x09\xff\x72\x9e\x52\xba\x01\x7c\x87\xbb\x42\xde\x44\x50\x8a\x78\x74\x84\xbe\xea\x7c\xdf\xb3\x65\x67\x29\xe6\x15\xfc\x8d\x9c\x02\x56\x90\x08\x0e\xc6\x41\x22\x01\x23\xdb\x5e\x41\x11\xb9\x91\x98\xa4\x10\x0b\x71\x01\x1b\x46\x80\x9d\x24\xda\xbb\x22\xb0\x10\xd9\x64\x16\xc0\x8f\x89\x62\x05\x26\x42\xe8\xe6\x25\xc3\x2b\xa3\xd5\xb1\x9f\xf2\x81\xdd\xc8\xe2\x61\xa2\x36\x06\x9b\x1a\xc3\x55\x83\xb5\x8b\x7b\xc0\xbf\xf7\xa2\xef\x6e\xab\x6d\x30\x9a\x59\xd6\x6f\x8c\x96\x4d\x7d\x34\xd9\xd2\x92\x7c\xf4\x79\x7c\x2a\x91\xab\x82\xd9\xf2\xda\x49\x7b\xff\xba\xfc\x36\xa0\x62\x0c\x3d\x8b\x7d\x0d\xc3\xd1\x36\x64\x31\x79\xa0\xdd\xb0\xee\xbb\xdf\x3d\xbe\xb1\xb2\x73\x98\x2f\xa7\x7d\x71\x01\x1e\xd8\xdf\xef\x55\xb3\x01\x7c\x67\x46\x95\xae\x8e\x4f\x53\x97\xcc\x31\x84\x0d\x6a\x7e\xcd\xf6\x15\x7f\xdd\x3b\x71\x2f\x5e\x07\xf5\xe9\x75\x90\x20\x35\xa7\x15\x65\x13\x04\x5a\x84\x58\x6e\x4b\xdc\x44\x6b\x9d\x8c\x63\x60\x4c\x53\x55\x04\x85\xd2\xc7\x11\x78\x4d\xb3\x88\xd6\x94\x76\x29\x23\x28\xda\xe2\xde\x26\x3a\x96\x21\xfb\xe9\x02\x50\x0c\x11\x55\x88\x8d\x14\xd3\x02\xb5\xd4\xa4\x02\x3a\xf5\xe1\xcb\xae\x3e\xbc\x65\x4b\x71\x47\x65\xc4\xeb\x36\x28\x41\x42\x4f\x33\xad\x63\x43\x7e\x99\x51\x67\x54\x68\x01\x26\xb2\x2a\x86\x1a\x46\x26\xa4\x90\x61\x6b\xff\x1d\x5b\x3a\xa2\x56\x23\x55\xd7\x4a\xb3\x1f\xe8\xf0\x35\x2e\x1f\x55\x67\x70\x2b\x2a\x0c\x8c\x1c\xc2\xa2\x95\x2a\x96\x91\xea\x87\x66\x03\x86\xa1\xcd\xf0\x3d\xde\x63\x28\xd7\x9a\xaa\x95\x57\x83\xdc\xca\xfa\x84\x31\x5e\xde\xd6\x34\xbd\xbd\x9c\x1d\xd9\xa0\x2e\x51\x02\x96\x05\x4b\xfe\xb0\x20\x77\x89\xc6\x90\x65\x74\x43\xc0\xdc\x3c\xc8\x10\x28\xc8\x61\x2c\x92\xa9\x7a\x13\xcf\x42\x06\x80\xfc\x30\xad\xb1\xc5\x03\xe1\x90\x13\x9a\x00\x84\x90\x56\x3c\x5b\x4d\x1b\xb2\x1b\x18\x19\x88\x17\x00\x3e\x43\x77\x55\x63\x3a\xf3\x79\x01\x27\xdc\x83\x69\xe4\xa1\x02\x86\xec\x39\xa2\x7d\xa0\xa8\x1b\x5e\x3c\x19\xe0\x20\x43\xfa\x83\x30\x38\x43\x5c\xc2\x4f\x50\x45\x08\xb2\x1c\xd1\x5e\x31\x8b\xa0\x73\x5a\x81\x52\x35\xc1\xc6\x48\x76\x6e\x7d\x7d\x6e\x36\x6d\x8d\x86\xed\xf9\xf9\xf6\x70\xf4\x8b\x62\x31\x05\x1e\x2c\x09\x91\x94\x50\x09\xfa\xd1\x1d\xba\x17\x9d\xbc\xd3\xec\xf3\xd8\x8a\xaa\xed\x1d\xb2\xd4\x10\xf4\xe1\x0b\xa0\xf5\xa5\x87\x41\xd9\x31\xb8\xe8\xca\x65\x89\x57\x76\x35\x92\x02\x77\x02\xc7\xbd\xb7\x03\xc7\xfd\x8c\xbc\x23\x12\x0d\x87\xa2\x68\x8a\x23\x2f\xdf\xee\xc8\xcf\x03\x5f\x5d\x98\x70\x1f\x73\x33\x3a\xb5\xb7\xad\x99\xa6\xe5\x8c\x0e\xae\x7f\xef\x75\xe0\xbe\x17\x38\xee\xdc\xfc\x69\xaa\x66\xd9\x9f\xc6\x3e\xbe\x30\xb0\xed\x5b\xe0\xfa\x76\xdb\xb6\xef\x44\xfc\x12\xc9\x59\xdc\x34\xae\xb4\xaf\x61\x81\x67\x0d\xd0\x22\x44\x52\x0c\xf3\x0c\x04\x39\x4b\xc0\x76\x90\x9c\xf4\x48\xce\x52\xac\x5d\xad\x53\xa8\x50\xc5\xb7\x7a\xb7\x4a\xc6\x9b\xe9\xae\x33\xc7\xd0\xb2\x00\x0d\xbd\x92\xa4\x06\xaf\x08\x3f\x58\xc2\xa7\x29\xa7\x56\xca\x1e\x46\xc7\xcd\x0c\xe7\x31\x80\x49\x8c\xaf\x6f\xfa\x1d\xea\xec\x30\x4f\xf7\xca\xce\xe1\x25\x9c\x65\x7f\xc2\x9c\x68\xd6\x79\x77\x05\x99\xbb\xa6\xef\x09\x78\xc0\xca\xc0\xc0\xfb\xa6\xbe\x41\x7f\xd6\x3b\xd5\x32\xde\x84\xc2\x01\x9a\xf6\x49\x92\x3e\xf4\xfa\x07\xa7\x67\x81\x76\x7a\x0a\xf2\x9e\xbb\xfb\x5f\xd0\x61\xa3\x70\xf7\x17\x7f\xaf\xce\x0e\x19\xe8\x5e\xe3\x69\x35\x9b\xdb\xf7\xd2\x95\x70\x7d\xdf\xdf\xcf\x9b\x77\x4a\x84\x39\x81\xd0\x1f\xf8\xcb\x89\xbc\x6c\xd4\x94\x56\xdd\x17\x34\xfa\xf1\x57\x35\x71\x99\x99\x48\x80\x0b\x16\x3e\x2e\x7b\xbe\x43\x5b\xd1\x7c\x5f\x42\xad\x3e\x8a\x4e\xee\x3d\x88\x5e\x5b\xc8\x01\xe9\x95\x72\x8d\x96\x1b\xfa\xee\x8a\x39\xcf\x5e\x35\x62\xc4\x55\xcf\xce\x99\x76\xa8\xe9\x4a\xe2\x8e\x1a\xd5\xda\x82\xe1\x90\x6b\xe3\x7c\xc0\xdf\xb0\x17\x38\x8e\xa6\x4e\x67\x94\xf7\x4e\x08\x4a\x68\xb4\x03\xbd\x4a\xb0\xb9\xae\xdf\x2c\xb7\x4a\xaf\x92\x41\xf9\x94\x39\xb8\xfa\xdb\xf8\x2a\x83\xeb\xaf\x72\x85\xc2\x44\x97\x90\x78\xe6\xde\x30\x73\xd1\xea\xa3\x7b\x50\xbf\x36\x5f\x57\x46\x7f\xed\x9c\xfe\x8a\x9d\xf0\x15\x6a\xa8\x15\xe8\x70\x6d\x01\x38\xcf\x9a\x6c\x23\xea\x13\x29\x6b\x81\x04\x9f\x75\x3f\xb8\xfe\x02\xc1\x21\x4b\xe1\xcc\x81\x85\xd0\x93\xbf\x90\x0d\x56\xe3\x7b\x3d\x8f\xef\xb5\x05\xd3\x93\x69\xed\x33\x61\x96\xc4\x33\x08\x11\xd3\x09\x60\x84\x46\xda\x60\x76\xd1\x69\xae\x6e\x60\x89\x10\x6e\x37\x82\x3c\x0c\x32\x6e\x9f\xf0\x08\x13\xb8\x37\xa2\x75\x6e\xe4\x89\x68\xcf\x43\xe6\x22\xbe\x24\x54\x00\x2f\x5e\x42\xb8\xae\x64\x47\xde\x23\xf9\x79\x0f\xe7\x59\x6c\xde\xbc\x72\xad\x07\x00\x55\x20\x35\x29\xa8\x02\x20\xa0\xad\x8d\x84\xad\x96\xc2\xc3\x05\xb9\xf7\xe5\x98\xad\xee\xec\xb8\xc6\x43\xb0\x2f\x59\xa9\x5a\xa6\xa9\x2c\xf0\x5b\x2c\x05\x87\x0b\x72\xee\xcd\xb1\x5a\xbd\xb9\xa5\x1a\x1f\xae\x68\x83\xcf\x58\x71\x45\x9f\x7e\x44\xd4\x6a\xc5\x97\xcc\x3d\x98\x6b\xb5\xfa\xf2\xcb\x71\xa6\x57\x5b\x59\xe8\xb7\x24\x39\x2e\xdb\xea\x76\x31\x72\xb9\x71\x05\xd8\x6a\x94\x33\x8c\xdc\x88\xb6\x6d\x37\xc9\x25\xc0\xe9\xb6\xe5\x71\x5c\x8e\xc5\xe5\x62\xe5\x72\xf3\xca\x32\x3a\x9f\x2e\xb0\x47\xbc\x21\x8b\x44\xce\x38\x84\xbc\x3c\x9b\xcb\x0e\x25\x72\xe3\xd5\xa8\xd7\xa8\xa0\x69\x85\x11\xd4\x5e\x8d\x03\xe6\x60\x3a\xd3\x01\x58\xb9\xf9\xaa\xbe\x11\x2b\x8c\x72\x0e\x3a\x5d\xb6\x3c\x01\x63\xc8\x72\x36\xc9\x20\xdc\xc6\x79\x69\xfc\x08\xc1\xfc\xe4\x9c\x82\xb6\xaf\x3f\x44\x94\xef\x45\x3b\xe1\x78\x36\xc1\xbb\x40\x01\x4b\x84\xb1\x49\x68\xbf\x75\x81\xd5\x7f\xad\xcf\xb6\xc0\xe6\xbb\x61\xda\xba\xfa\xda\x71\xe3\x56\x2d\x02\x11\xf0\x91\xd5\xcf\x36\x0c\x75\xd6\x02\x89\x55\x11\x3b\x93\xb4\xfa\xfd\x56\xe6\xf9\x33\xd5\xe4\x0c\xbe\x56\x16\x96\xaf\x5a\xb6\xfd\xc0\xca\xe5\xd9\x01\xbf\xc0\x47\x90\x3e\x45\x0d\xf0\x3b\x42\x34\x88\x1b\xa8\xc1\x98\xda\x31\x7a\x62\x81\x5f\x68\x0a\x7b\x62\xbc\xd1\x17\x23\x67\xfa\xc2\xbc\x0b\xf7\xca\x70\x39\xe2\xa6\x12\x74\xa1\x1e\x28\xb8\xd7\x4a\xe3\xba\xf5\xf4\xf5\x9c\x38\x21\xa1\x52\x59\x27\xce\x25\xd2\xc9\x73\x61\x58\x7b\xe2\x44\x5f\x0f\xd9\x21\x1d\x00\x22\x17\x04\x38\x0e\xa9\x64\xb2\x0f\xff\x98\xf3\x72\x10\x35\x30\x96\x2e\x26\xca\xb7\xd3\xbe\xe9\x89\x36\x05\xf1\x1e\x82\xdb\x90\xe0\xec\xe1\x99\x1c\xaf\xa3\x01\xd2\x39\xb3\x70\x3a\x9e\x9d\x58\xcc\x09\xb1\x71\xa6\x77\xcb\x33\xcf\xa0\x1f\x9f\x81\x68\xcf\xc4\x75\x38\xb8\x65\xdd\x44\x30\x07\x12\xb8\x37\x12\x44\x7b\x20\x04\x73\x26\x42\x8a\x14\x79\x66\x8b\xd2\x74\x68\x0c\xc9\x1a\x73\xc8\xa4\x14\xab\xe1\x90\x05\x27\x9e\x37\x56\x03\x54\x8c\xa2\xfc\xa2\x0d\x6c\x1c\xb3\x4c\xa6\xa8\xb8\x95\x8c\x97\x1a\x2e\xe3\x1c\x2f\x21\x18\xc4\xfe\xc2\x94\x8f\xa5\x2e\x1b\x37\xaa\xea\x1b\x08\xbf\xa9\x1a\x35\xee\xb2\xcb\x1e\x5e\x07\xbf\xa9\x1e\x89\x03\xe3\x46\x56\x7f\x03\xd7\x3d\x0c\x2e\x1b\x48\x2a\xa5\x1e\x5e\x57\xbe\x52\xab\xd6\xae\x2c\x5f\xf7\x30\x2e\xc2\x69\x57\x96\x5d\xf6\xf0\x65\x65\x2b\xb5\xdc\xb8\xcb\xe8\x13\x03\xe9\x26\xae\x9f\x77\xd4\xe1\x6f\x5d\x4d\xb5\x50\xe3\xa8\x19\x98\x7b\xa0\x28\x61\xdb\x57\xd8\xe1\x15\x04\x13\x89\x38\x30\x13\x9c\x3d\x8d\x80\x80\x70\x8e\x91\x8b\x12\x5c\xf5\x88\x1b\xf0\xc2\xe6\x71\x5a\x6b\xd6\x84\x97\xce\x81\xb1\xb8\xd8\x77\x85\xf9\x33\x94\x56\x5d\x11\xa4\xea\x22\xb6\x4b\x89\x08\x8d\x66\x80\x83\x0c\x45\xd6\x05\x07\xf2\xe4\x06\xab\x4a\x91\xa3\xf7\x6e\x18\x65\xa5\x9f\x2a\xf8\xbe\x91\xe7\x6b\xc7\x13\xdc\x54\xf4\x37\x02\xcb\x2a\xc0\xa9\x3e\x71\x7b\x2d\x1f\xe3\x1b\xcf\xc8\x95\x2a\xf9\x04\x99\x4c\x6e\x93\x77\xca\xdf\x57\x58\x14\x9d\x72\xb9\xcc\x2e\x9b\x20\xcb\xd2\xab\x05\xe0\x93\x2e\xf5\x83\x7a\x87\x1e\xff\xdf\x3d\x81\x14\x95\xe3\x62\x36\xb9\x8c\xbe\x39\x62\x90\xe7\x1d\x58\x60\x2d\x92\xb3\xe1\x51\x1b\xbc\x0a\xf0\x40\xc1\x77\x8d\xf8\x82\xb5\xb7\x3f\x71\x6d\xe6\x1e\xc0\x45\x70\x5f\xc7\xd7\xf2\x7c\x23\xc8\x4b\x57\xc4\x57\xb6\x7f\x25\x1c\x65\x42\xca\x33\xc2\xb5\x7b\xd2\xb7\xd2\xeb\x07\x65\xee\x8f\x9f\x28\x8d\x4b\x40\xda\x96\xa1\x0c\xe4\xcb\x83\x00\x4b\x7b\xe0\x05\x5b\x40\x20\x4e\xcc\x80\x79\x73\x30\x64\x66\x03\x09\x09\x97\xe0\x89\x51\xb0\x39\xc1\xf2\x9c\x29\x92\x08\xf1\x01\x38\x15\xb8\x81\x7b\x21\xba\x95\xfd\xe5\x1e\x10\xb3\x70\xe7\xac\xaf\x6b\x2e\xdf\xf5\x55\x0c\x7d\x8c\x3e\x8e\x7d\xb5\x6b\x6b\xf5\xd7\xb3\x76\xba\x40\xd3\xd5\x97\x2e\xfb\x71\xd9\xa5\x57\x83\x26\xf8\xf6\xdb\x6f\xa3\x87\x99\xe4\x45\x18\xdc\x33\x43\x5e\x3f\x43\x8f\x3f\x01\x1a\x94\x47\x5b\xd6\xee\xdb\xb7\xb6\xe5\xa8\x12\x3d\x7b\x62\x3c\x7d\xe6\xf5\xcd\x61\xf4\xe7\x41\xa1\xd0\x20\x90\x13\xa6\x04\xdf\x75\x69\xff\xd0\x19\x9b\x82\xa1\x82\xd7\x10\xb2\xc3\x70\x07\xf5\x28\x75\x84\xcc\x0e\x19\xcf\xd5\x69\x57\xee\x17\xc4\xc1\xaf\xe4\x07\x32\x4a\x4d\xbe\x5f\x2b\xf9\xeb\xf9\x9e\x58\x09\xcb\x08\xc0\x0e\xd5\x0c\x5e\x01\x5d\x8c\xee\x82\x22\xba\x7e\xc7\xa1\x40\xf4\x12\x29\xba\x8a\x3c\x17\x84\xb5\x17\x4d\x4e\x3d\xef\x08\x42\x18\xb4\xc3\xb3\xff\x4d\x2d\x90\x4c\x21\xb4\x11\x6d\x4c\x21\x5d\xb4\x7d\xdb\x63\x40\x05\xaa\x81\xf2\xd0\xb6\xf6\xa8\xee\x5c\x99\xa0\x1d\x25\xed\xc1\x13\xfd\x3a\xf0\x03\xbc\x8b\xa2\x25\x17\x4b\xdd\x11\xb4\x6f\xd8\x60\x0f\xa6\xfe\x8b\x2a\xe0\x2a\x95\x7c\x0e\x04\x33\xe5\x2a\x5d\x49\xcb\xb0\xd6\xf2\x40\xa0\xbc\x75\x58\x4b\x09\x1a\x7b\xae\xc4\x28\x7c\x49\x7c\xe1\x7e\xb9\x5f\x1a\x17\xc1\x20\x68\xef\x94\xa5\x71\xc0\xfa\xe7\x25\x9e\x20\x1a\x11\x41\x5f\x26\x41\x10\x25\x44\xcc\xa0\x1f\xda\x8d\xed\x0f\xc1\xde\xa0\x2d\x68\x43\x78\x42\x3e\xc5\x59\xe0\xbf\x08\xbc\xad\x18\xc5\x33\xf9\x3d\x16\xae\xef\x38\x81\x3a\x02\x59\x04\xec\x37\x13\x62\x7a\x53\x38\x3f\x25\x2c\x15\x90\xa2\xe7\x9a\x53\xb5\xb0\xb7\x2f\x89\xd2\x8b\x02\x5e\x24\x28\x33\x48\xa4\xdd\x9d\x93\xa3\x48\xe7\x0a\xcf\xec\x24\x14\xa7\x81\x23\xda\x42\x4c\x08\xe0\x05\x2a\xa8\xaf\x01\x66\x40\x04\x91\x9c\x70\x96\xfc\x4f\x20\x80\x16\xed\xea\xb9\x13\x55\x1c\x46\xbb\x1e\x07\xf3\xd6\x16\xde\xd9\xb3\x0b\x5c\x17\x9c\xd7\x1c\x40\xdd\x9f\x81\xeb\x83\xf3\x98\x8a\xe0\xdc\x20\xea\xc6\x65\x0a\xd7\x0a\x45\x0e\x83\x97\x48\x99\xeb\x03\xcd\xf3\x71\xdd\xcf\xc0\x75\x01\x41\xf6\x6f\x3d\xab\x94\xfc\x53\xf0\xdb\x67\xa4\xca\x05\xaf\x44\x03\x51\x10\x2e\xe2\xeb\xd2\xc5\x62\xea\x26\x2e\xc0\x7b\xc6\xcd\x11\x17\xac\x66\xf1\xa8\xd7\x8b\xd6\x77\x09\x5a\x10\xfb\xa7\xfd\x25\xf0\x82\xf3\x05\x17\x30\xa7\xd7\x00\xa3\x2e\x11\x37\xd1\x73\xd7\x3f\xba\x1e\xff\x07\x3f\xae\xeb\x1c\xbf\x7e\xfd\xf8\xce\x75\x1f\xd7\x0e\x3f\x73\xcf\xc8\x8a\xdc\x09\x83\x27\x44\xc7\x3b\x46\xc3\x46\xbb\x84\xb1\xf9\xb8\x45\x6c\x8d\xb9\x31\x38\x38\x3a\xb4\xaa\xf9\xe5\x55\x67\x46\xcd\xaf\x5f\x36\xa7\x6d\x0c\x03\xa4\x1e\x0e\x30\x63\x87\xcf\x59\x56\x37\x77\xe4\x99\x55\xd6\x9c\x10\xa3\xa1\x27\x37\x30\x9f\x36\x4c\x36\x86\x72\x68\xc7\xc8\x15\x2b\x46\x8e\x5a\xbe\x7c\x54\xfa\x8c\x7e\x86\xb7\x8c\x1d\xda\x38\x31\x35\xc5\xec\x35\x69\x70\x4d\xe0\x90\xd0\x56\xdb\x04\x82\x9a\x4f\x4b\x14\x5a\xb3\xdb\xb2\x73\x36\xfa\xfb\xa1\xc5\xbe\xac\xc2\xe8\x62\xd0\x04\xa0\x14\xa0\x07\x97\x44\x0a\xb3\xfc\x4b\x0e\x01\xfb\xec\x9d\x81\x12\x3b\x94\xd3\xf0\x89\x21\xb3\x66\x0d\x49\x35\x6b\xec\x25\xa4\xcd\x66\xe0\xf5\x70\x6f\x5a\x4e\x4b\xf0\x24\x70\xcf\x12\xdc\x89\xe9\xf8\x04\xb1\xc1\x37\x26\x80\x0e\x78\x38\x22\x7e\xe5\xe9\xe4\xf5\xd0\x7d\xfd\xf5\xa9\x33\x63\x40\xd3\x71\x4c\x34\xb7\xa1\xa7\x8f\x1f\x47\x4b\x16\x32\x6d\xa8\x0d\x3c\x4a\x7e\x29\x29\xa2\xed\x67\xfe\x79\xfc\x38\x73\x5f\x9f\x02\xb5\xe1\xf3\xe5\xc0\x23\xf6\xe1\xf1\x67\x01\x7b\x1f\x9b\xc2\x9c\x60\x2e\x9e\xb5\xda\xa8\x99\x64\xa6\x82\xa4\xa9\x05\x22\x4a\xe4\x82\x05\x00\xcf\x90\x44\x03\x18\xc1\xae\x31\x88\xe3\x78\x31\x22\x22\x2e\x40\x16\xc0\x50\x90\x16\xc0\x39\xd3\x7e\x1e\x08\xe6\x85\xe0\xe4\xc6\x4f\xbe\xa0\x9e\xc5\x51\x16\x4f\xda\x12\x11\x6d\x55\x50\xa9\xc1\xc5\x68\x16\xb0\xca\x50\xfc\xac\x4f\xc5\x00\x96\xa9\xdc\x0d\x2a\x34\xc5\x56\x8b\x7d\x17\x5d\xbc\x12\x7d\xa9\xf3\xf1\x4a\x56\xaa\xcf\xf1\xa9\x9e\x1d\x9c\x37\xca\x6c\xa5\xcb\xb8\x7b\xa3\x01\x9b\xfa\xbe\x42\x35\xab\xf3\x15\x81\xe5\xaf\xb7\x49\x1d\xa9\x4e\xb6\xa2\xbc\x14\x5d\x2e\xb5\x67\x83\xd6\xf2\xb0\x8c\x0e\xc2\x5b\x68\xa7\x06\xbd\xdc\x60\x01\xe6\x02\xb5\xcb\x05\x9a\x2f\x8b\xc8\x1c\x81\xa2\x5d\x92\xe3\xeb\xd1\xfb\xaa\x2c\xa9\x6c\x72\x8e\xc6\xa8\x54\xcb\x9b\x1f\x6b\xe2\x15\x32\x79\xf0\x64\x42\x13\x1a\x07\xbd\xd6\x48\xcb\xe3\x8d\xb0\xd5\xa9\xf7\xca\x72\xd1\x91\xf8\x9f\x0d\x6a\xa3\x1c\x18\x5b\x8d\x11\x63\xae\x0e\x84\xea\xed\x9c\x09\x8e\x98\x65\xd0\x8d\x83\x63\x7c\xf6\xdc\x49\x1a\xb9\x4f\x9f\xfa\xfd\xab\x21\x83\xbc\x45\x23\x85\x98\x20\x29\x0c\x83\x99\xf7\xd7\x4b\x78\x9d\xf9\x83\x32\xc1\xbe\x5f\x94\xe3\x24\xcf\xb3\x7d\xb0\x53\x3e\x4c\xb7\x12\x9f\x35\xf8\xeb\x09\x54\x9e\x4e\x80\x79\x8c\x9d\xf7\x23\x34\xac\xb0\x49\xe8\xd1\x19\xb8\xf3\x20\x1d\x3c\x31\x86\x42\x44\x92\x9f\x12\x2c\x35\x58\x0a\x61\xa2\xe9\xdc\x0f\x13\x79\xc1\x92\xa0\x24\x79\x9a\x52\xb0\xaf\x63\x9a\xae\xbb\xfd\x54\xb2\xbd\x1b\x50\xa4\xd2\x59\x4c\xdd\xd1\x94\x50\x8f\xea\x97\xc7\x0b\xbf\xbe\x5a\xba\x57\x04\x12\x66\x6a\xcf\xf4\x7a\xdc\x41\xe6\xbd\x33\x82\xae\x2a\x53\x9b\xc4\x55\x73\x28\x15\xf7\x67\x01\x6f\xc1\x8d\xe7\xb6\x11\x98\x2e\x4b\x8f\x5a\xa3\x21\xe1\xc5\xcc\x4a\xda\x8a\x26\x41\xf4\xfd\x04\x20\x30\x01\xff\xca\xe7\x25\xce\x88\x05\xf2\x1b\xaf\x2d\x42\x3a\x8f\x29\x18\x1c\x4e\xe3\x82\x9d\x4b\x67\x0c\xe1\x1d\x97\x75\x5c\x36\x07\xb6\xac\xdf\xb8\x7e\x18\xad\xdf\x2d\x6f\xfb\xe2\x1f\x5f\xb4\xc9\x77\x53\x67\x15\xca\x2b\xfe\xb5\x67\xf4\xfd\xeb\x67\x94\x43\xdd\x2e\xf9\x66\xb0\x12\x24\xc1\xca\xcd\xf2\x5d\x48\xa1\x78\x0c\xad\x47\xa5\x68\xfd\x63\x0a\x85\x6e\xb7\xfc\x19\xc8\x40\x1b\x64\x9e\x91\xef\x56\xdd\x60\xc8\xca\xcb\xcb\x32\xac\x8d\xe0\xbf\x5d\x7a\x95\xbc\x75\xdc\xb8\x56\xb9\x4a\xbf\x0b\x68\xa5\x73\xa7\xe7\x55\x57\xe7\xed\xd2\x2b\xe5\x9b\x77\xec\xd8\x2c\x57\xe2\x44\x8d\xec\xd6\x7d\xfb\x6e\x95\x91\x82\x4f\xbf\xf1\xc6\xd3\xa4\x20\xd1\x82\x13\xec\x66\x84\x7d\xcc\x81\x52\xa9\x1a\x6a\x18\x35\x92\x9a\x4e\xcd\xa7\xd6\xe0\xc1\x79\x81\x4f\x38\xea\xbf\x3c\x13\x6c\x48\x11\xd5\x2e\x12\x1f\x98\x36\x10\xeb\x4e\x3b\x40\x07\x7b\x20\x8d\x0b\x92\xc3\x88\x5e\x04\x78\x5d\x38\x21\xf1\x44\x0f\x1b\x18\xbb\x68\x22\x3d\xac\x65\x4e\x0b\xfe\x8f\x32\xf5\x33\xe6\x78\x2c\x3e\x0a\x49\xaf\xb7\x94\x9c\x16\x24\xe7\x2c\x3e\xc6\xe6\x89\xb5\xc9\x7f\xf0\xba\x70\x42\xaf\x0f\x8c\x5d\x34\x31\x95\x04\xe7\xa4\xf7\xf0\xac\x98\xd5\x2b\xc0\x52\x8b\xfc\x06\xba\x4b\x48\xa3\xa9\xd3\x14\x29\x27\x21\x47\xe2\x11\xef\x2c\xc5\x7e\x25\x21\xb8\x7a\x83\x84\x7d\x10\xe8\xf1\x11\x98\x3c\x02\x1f\x20\x18\x41\x91\x8d\xc9\x0a\x20\xb8\xbf\x11\x26\x10\xa2\x64\x21\xba\x74\x32\xf8\x42\x98\x09\xa4\x85\x26\x4a\x64\x34\xd2\x31\x51\xfa\x95\xde\x34\x16\x79\xf3\xac\x41\x96\x49\x40\x36\x64\x3d\x63\xb4\xd0\x32\x9f\xde\x2f\x63\x83\x9b\xb6\xcc\x7e\xa8\x7b\x56\xcc\xa2\x00\x34\xc3\x0c\xbf\xa9\xa0\xfd\xc3\xc5\x57\x77\x76\xce\xd0\xc3\x91\x40\x81\x8e\x9b\x9c\xf4\xbf\xd8\x7c\x27\x1c\xe3\x5d\x5f\x34\x7f\x31\xbd\x7a\xd4\x4a\xd4\xe8\xb1\xf1\xe8\x80\xc6\xe6\x71\x19\x4b\x4f\x74\x7f\x54\x1a\x80\xe6\xd0\xdc\x29\xbb\x9b\x6a\x24\x34\xa0\x2b\x1e\x9b\xbf\xe1\xd3\x8e\x30\x04\xa0\x4b\x9a\xfa\x51\xee\x31\xb1\xbf\x73\x06\x6d\x7c\xf6\x7e\x32\x87\x87\xd2\x6b\xad\x9c\xd2\xe3\x19\x3c\x4c\xb8\x2a\x33\xc5\x7b\x20\x1d\xc4\xcc\x9f\x84\x83\x74\x3c\xa1\xe7\xf5\x24\x45\x06\xb4\x34\xf1\x6f\x13\x14\x75\x0f\xf4\xe0\xb0\x87\x07\xf2\x2e\x54\xbf\xfe\x6b\xa5\xde\x40\xef\x2f\x6e\x19\xfe\x48\x98\x39\xf6\xf1\xe7\x20\xd7\x87\xaa\xb2\x11\xc5\xcc\x99\xd9\x80\xde\xb7\x8e\x60\x78\x2d\x98\x6d\xf4\xb1\x4b\xe9\x2e\x1b\xa6\x5d\x67\x81\xc3\xa0\x44\xeb\x43\xb7\xbc\xf2\x3c\x88\x03\xc7\x07\x27\xd1\x41\x70\x2d\x3a\x92\xe2\xd1\x62\x78\x13\x1d\x4a\xf5\xa2\x71\x68\x2d\x2c\x82\x0a\x90\x0f\xec\x5a\xab\xcd\x80\x66\x8b\xb2\x11\x99\x68\x37\xa2\xa1\x2c\x94\x03\xf3\x38\x82\x1f\x7a\xe0\x8b\x13\x09\x62\xc2\xcc\xd2\xb8\x6f\x72\x4c\x40\x70\x0b\xc4\x47\x01\x1d\xe5\x7d\xac\x60\x29\x42\xc0\x1d\x8c\xa2\x8a\x30\x67\x8a\x9a\x88\xba\xb7\xb8\x89\x1f\x77\x83\x00\x66\xe1\xe8\x68\x22\x6a\x32\x47\x2f\xec\xc5\xdc\x93\x57\xa9\x4b\x68\x46\x49\x2b\x4f\x6f\x2c\x57\xd4\xa2\xef\x21\x48\x00\xcd\x1d\x3a\xdb\xf2\x21\x5b\x1f\x02\x6c\xe0\xc0\x9c\x03\x70\xcf\xa0\xf6\x35\x7b\x01\xd8\x51\x14\xac\x0c\x8d\x69\x32\x99\x9b\x17\x6d\xbc\x15\x5e\x53\x9c\x57\x5c\xd0\x14\xd7\x80\xde\x64\x9d\xe9\xc7\x07\x7d\xef\xb2\x9a\x9b\x93\x2d\x25\x3f\x0b\xdd\x49\x8a\x8f\xd0\x1b\xd8\x2e\x93\x67\xc9\x13\x2b\x41\x28\xae\x1a\x3e\x11\x35\x8f\x6f\x5a\xe1\x44\x10\x6e\x48\xad\x83\x1b\xb5\xf6\xe5\x93\x67\x0d\x31\xfb\x8d\xae\x2c\x8f\xe2\x3a\x2f\x58\x39\x63\x5e\xa3\xd5\x6b\x34\x79\x80\x55\x7a\x4b\x3c\x75\xa8\xcb\xd4\x4c\x3f\x7f\x46\xb8\x18\x2b\xf4\x4d\x4b\x7f\xdb\x10\x6b\x89\x5c\x2a\x4a\xd5\x62\x4e\x7f\x1c\x9e\x09\x66\x53\x8b\xa9\xd5\xd4\x5e\xea\x29\xea\x15\xea\x13\xea\x14\x50\x00\x2b\x6e\xd3\x4a\xd0\x0c\xc6\x81\x35\xe0\x6a\xb2\x0b\x9d\x71\xce\x81\x99\xc3\x20\xd4\x27\x24\x50\x6f\x8e\xeb\x61\xc8\xa4\x87\x9c\xb0\xa7\x1e\x13\xf6\xd5\x40\x34\xe6\x33\x46\x8d\x15\x30\x46\x7c\x4b\x1b\xa3\x31\x73\x34\x41\x1b\x73\x41\xac\x02\x18\xa3\xa1\x48\x34\x11\x2f\x29\x04\xde\x5c\x1c\x89\x45\xfd\x25\xfd\x42\x7d\x7f\xc4\xec\x63\xc4\xb9\x18\xc7\xe2\xe9\x90\xd7\xec\x0d\x79\x83\x82\x34\x05\x4f\xb3\xc5\x91\x98\xa0\xda\x5a\x6c\x36\x9a\x8c\x9c\x83\xf8\x8b\xf7\x49\x02\x51\x22\xc9\xf2\x72\xa2\xf7\x63\x7c\xd5\x92\x68\xc4\x09\x84\x93\xd1\x1c\x25\x50\x4c\x19\x36\xbb\x06\xe0\x3b\x07\x49\x86\x39\x21\xee\xfc\x0a\xfb\xe8\x98\x1d\x25\xcf\x1f\x17\x36\x79\x89\xb7\x64\x1f\xbe\x0c\x79\x05\xe2\x48\x3b\x63\xe5\x45\xf2\x42\xe4\x4e\xd1\x73\x77\xc1\x57\x31\xa5\x33\x43\xa2\x49\x91\x70\xdd\x0b\x6f\x7a\x5e\x85\x74\x66\x26\x8f\xf3\xfa\xc8\x96\x0f\xd9\x0d\x30\x08\x9b\x93\x09\xc2\x18\x27\x88\x70\x35\x18\x22\xed\x14\xfc\x05\xbe\xcf\x94\xe4\x4d\xb3\x9f\xbd\x62\xc4\x88\x2b\x8e\xcc\xb9\x29\xb9\x69\xf2\x94\x3b\xd7\x4d\x9c\xb0\x7e\xfd\x84\x89\x93\x36\x4e\x99\xbc\x29\x79\xd3\x9c\x23\x24\xef\xd9\xd9\x37\xc1\x99\x9c\x8e\xa3\x9d\x0c\x2b\x91\xb0\xb4\x84\x61\xa5\x90\xa6\x09\x28\x8a\xf0\x07\x01\x1e\xec\x67\x4c\x26\x5e\x6f\x32\xe9\x79\x70\x57\x25\xdb\x04\xb6\x9a\x30\x7d\xc3\xeb\x4f\x9b\xfd\x66\xb3\x7f\x2b\xd1\x99\x24\xe5\xc8\x9e\x3b\x60\xa0\x50\x09\x82\xd3\x47\x5c\x4e\x6b\x96\x46\xed\xb6\x68\x5c\x2e\x8f\xcb\xe9\x71\x1d\x70\x3a\x75\x36\xe2\x68\xc4\xa1\x79\xb4\x50\x6d\xb6\x9a\x0d\x4a\x93\xc7\xe6\x2a\x54\x59\xdc\x56\x83\xca\xea\x71\x7a\x36\x4a\x55\x2a\xbe\xa8\xc8\xe5\x70\x14\x1a\x67\x3a\x83\x21\x97\xc7\xa4\xd6\x1b\xbd\xdc\x4c\xff\x26\xb3\xd2\xe5\x72\xca\xa5\x32\x99\x3e\xe4\x71\xf2\x6a\xbd\x4e\x6f\x36\xeb\x79\xad\xda\xe0\xf0\x1c\x75\xb9\x34\x76\x67\x28\xe4\x74\xa8\xb7\x98\x95\x4e\x27\x29\x26\x5d\xef\x74\x6a\x4a\x43\x21\x87\x53\xdd\x46\x34\x86\x21\xa1\x48\x21\x43\x33\x90\xc4\x84\x27\x24\x4f\x3d\x7b\xe0\x00\x62\xee\x1f\x8d\x9b\x6a\x36\x69\x96\xd1\xf3\x41\x15\xa8\x1c\x39\x1d\x1d\x43\xef\x4e\x9f\x0e\xf2\x40\xfe\x9a\xf9\xe8\x05\xf4\xc2\x3c\x52\x62\xce\x6c\x5c\xa2\xef\x38\x4d\xeb\x0c\x2a\x95\x41\xa3\x52\xa1\x32\x48\xcb\x59\x40\x5a\x41\xc5\xe6\x05\x2d\x56\x3d\x6f\x19\x9b\xe5\x16\x03\x56\xbf\x95\x9c\x9c\x80\x11\x9e\x02\x8a\xed\x43\x94\x6e\xc9\x33\xe0\x87\x18\x8d\xf3\x2c\x16\x83\x76\xeb\x30\xbf\x7f\x18\xf9\x35\x36\x68\x0d\xe1\xea\xb0\xc1\xe2\x95\x40\x46\xae\x51\x58\xd4\x16\x83\x87\x04\x75\x6a\xb3\xce\xa2\xb6\x72\xa6\x2a\x7b\x76\xb6\xbd\x2a\xb2\x3d\xec\xce\x0a\xf1\x26\x8d\x47\x99\x15\xc2\xf5\x5b\x7c\x8c\x83\xc1\x15\xb5\x16\x15\xb0\x04\x2d\x4a\x8b\xf6\xea\xcc\xa5\x56\x67\xb2\xaf\x6e\x5c\x3d\xd8\x90\x5d\x99\x6d\xa0\xc9\x17\x23\x2d\x02\x85\xa7\x20\x7f\xe4\x9b\x43\x41\x97\x1a\x30\x9f\x0c\x9c\x0a\x44\xff\xf4\xc2\x5c\x20\xc7\xb3\x01\xd9\xf9\xab\xa7\xc6\x52\xd3\xa8\x79\x78\x26\xb8\x8c\xba\x8a\xba\x59\xf0\x72\x48\x10\x61\x05\x87\xdf\x06\x21\xc0\x12\x43\x78\x5d\xc6\x39\x3c\x9b\x96\x21\xc7\xcf\x0d\x29\xc1\x51\xa8\x88\x71\x2d\x8c\x2a\x41\x96\x9c\x56\xf4\x89\x65\x06\x05\xd0\xa9\x81\x12\xb2\x9e\x73\xf4\x42\x40\xf0\x44\xcf\x27\xc8\xe8\x4b\xff\x40\x54\xd0\xbc\x22\xb7\x8b\xfd\x42\x6a\x08\xca\xfc\xce\x4a\x9d\xae\xca\xe1\x97\x7c\x5d\xcb\x1b\x6a\x4e\x8d\x9c\x31\x7c\xca\x94\xe6\xfc\x4a\x57\x5d\x1d\xa8\xcd\x4e\x38\x8d\x76\xa3\xd3\xe2\xcd\x2e\xcb\xab\xf4\x17\x04\xa4\xbc\xc3\x54\x64\xce\xc9\x1b\x1c\xad\x05\xa6\x40\x76\x71\x4d\x4d\x41\x6e\x30\x1c\x6e\x9e\x3d\xab\x39\x87\xf9\xa9\x6e\x1f\x7a\x11\xdd\x8b\x0c\x08\x49\x3c\xb6\x60\xdf\x03\xf3\x76\xcd\x9b\xb7\x0b\xc0\xeb\x06\x77\x8e\x1f\xbc\xfd\xed\xa7\x56\x2c\x5d\xba\xe2\x29\xb0\xb5\x7d\x6e\x4b\x75\xe9\xd4\x3a\x19\xf0\xb4\x26\x7e\x96\x26\x5a\x5b\x13\xdc\xcf\x89\x56\xf8\x53\xd4\x63\x7b\xdf\xee\x56\x95\xcc\x5c\xd2\x3c\x09\x3d\x16\x8c\x8e\x07\xad\xff\x0a\xe7\x19\xe4\x7a\xb5\xd6\x68\xcf\x0b\x24\xc2\xbe\x6c\xad\x4a\xa2\x34\x19\xec\x79\xe1\xda\xaa\xec\xd6\x40\x5d\xa4\xa8\x21\xd8\x6a\x98\xb9\x63\x66\xea\x49\xa8\x09\x8f\xdb\xb1\xe1\x9a\xa2\x20\x7c\x91\xdc\x74\x9e\x14\x8c\x39\x71\x02\xdd\x27\x2b\xed\x2c\x6d\x2e\x43\x8f\x5d\xa3\x6d\x2b\x2c\x41\x8f\x6d\x81\xfe\x33\xca\xd2\xb6\xb6\x52\xe6\x7b\x7c\x24\xe4\xb8\xbe\xff\xdb\x41\x4c\x91\xab\x31\x1f\xea\xc0\xf4\x78\x10\x73\xa3\xc3\xa9\x09\xd4\x51\xea\x6f\x78\x06\x67\x81\x0c\xf8\x41\x0d\x98\x46\x51\x7c\x34\x04\x12\x64\x32\xc6\xf3\x5a\xc0\x1c\x33\x97\x90\xe9\x37\x12\x10\x4f\x40\x3c\xb1\xd1\x10\x71\xea\xce\xf9\x42\x46\x5f\xc8\xc7\xf9\x78\xbc\xca\x45\xcd\x09\x60\x50\x33\xde\x20\x9e\x10\x43\x1c\x26\xf4\xcd\x09\x5c\xcd\xe8\xd3\x45\x8d\xe2\xc5\xfa\x8d\xb8\x74\x78\x61\x34\x0b\x73\x3d\x26\xfb\x13\x11\xb2\x17\xe3\x82\xf1\x4c\xa2\xce\x67\x0c\x91\xff\xc2\x54\x48\xd6\x5e\x21\xc6\xf5\xf3\xb8\x42\x06\xfe\x79\x8c\xf8\x73\x93\x1f\x27\xd8\x20\xe1\xba\xb8\xa7\x91\x85\x42\xc4\x49\x4f\x90\x87\x36\x48\x38\x17\x70\x62\x0e\x9f\x74\x0d\xf2\x28\x11\x41\x44\x27\xa4\x95\xc4\x0b\x68\x21\xd1\x4c\x76\x85\x06\x3c\x26\x41\x70\x13\x3b\x30\x41\xbc\x2b\x10\x51\xa5\x8d\x44\x86\x6f\x8a\xbb\x40\xc2\x28\xc9\xe4\x49\x04\x79\x44\x3a\xcf\x05\x68\x5d\xa6\x39\xbc\xb1\x12\x9c\xea\x0d\xaa\x19\x01\xfb\x22\x21\xb4\x4e\x6c\xc5\xf8\x7c\x58\xd7\xdc\x74\xe7\xf6\xed\xa0\x6a\xfa\xb3\xe1\x51\x23\xb3\x81\x27\xa7\x63\x44\x2e\xfa\x8c\x1c\xc1\xeb\xe3\xf3\xfa\x4c\xf5\x93\xcb\x26\x6f\xb6\x6e\xb5\x36\x5d\xda\x75\xc9\xbc\xd1\xad\x70\x8f\x42\xe7\xb0\x84\x2c\xd9\xb2\x75\xed\x23\xcf\x52\x80\x69\xef\x78\x6b\x21\xfa\xe0\xf8\xf1\x3d\x37\xde\xc8\xbe\x2b\xf6\xad\x45\xd6\x84\xf5\x3d\x7e\xb1\x01\x3a\xe5\x72\x60\x36\xd7\x66\x8f\x96\x59\x4b\xad\x7f\xf7\x3e\x71\xc8\x7a\xd8\x7c\x6a\x50\xf8\xa0\xa5\x38\x75\x4d\x6e\xee\xcb\xa6\x7b\xdb\xc4\x6e\xb8\x32\xea\x7a\x24\x61\x46\x2f\xba\x4b\xdf\x31\x37\x7e\x16\x8f\xa0\x3b\xc1\xd8\x44\xc9\x31\x63\x85\xfb\x41\xa9\x94\x81\xba\x32\xf7\x3d\x95\xa9\x7c\x8b\xc9\xaa\xaf\xb3\x78\x07\xd5\xdd\x5c\x54\x8e\x3e\xb7\x1a\x6d\xba\x3a\x80\x99\x56\xb3\xbe\xa9\xf6\xa6\x62\xcc\x97\xfc\xf5\xaf\xbb\x6f\xbc\x11\x7d\x59\x0f\x7f\x9a\xb5\x6e\x9d\xd7\x5b\x1c\xf1\x96\x84\x37\xae\xf0\xfb\x8a\x8b\x7d\x5f\x59\x6a\x2f\xbb\xcc\x63\x0d\xe4\x06\xac\xb1\xf0\x86\xe5\xfe\xf2\xe1\x37\x4e\x5c\xbd\xd9\x76\xb9\x75\xd8\x86\x2d\x35\x5c\x8e\xc6\xad\xd4\x49\xec\x7e\xe7\xc4\xa9\x0b\xa7\x2f\xa1\xc7\x2c\x48\x5d\x3e\x7c\x78\x71\x22\xde\x76\xc9\xf1\x4a\xcf\xa0\xb0\xb3\x0a\x7c\xeb\xac\x0c\x2e\x28\x44\xdf\xbc\x8b\xff\x2a\x2b\x81\x06\x9d\x05\xe0\xa9\xa7\x52\xef\x1a\x5c\x06\x15\x07\xc1\x84\xce\x4e\xa0\x19\x3f\xbe\xaf\x14\x68\xca\x70\xbd\xd4\x3b\x9f\x24\x86\x0f\x4f\xc0\x03\x55\x55\x05\x05\x85\x85\xd3\x81\x7a\x8c\x59\xa9\x04\xb0\xaa\xaa\xbc\x1c\xac\xce\xc3\x7f\x26\xfc\x37\x75\x6a\x5e\xde\x63\x60\x2b\x29\x99\xea\x34\xa5\xff\xca\xcb\xd1\xe5\x15\x15\xe3\x55\xb3\xa6\x33\xd2\xb1\x16\xcb\x19\x73\x58\x26\xf3\x3a\xe3\xf9\x1e\xe3\x74\xa0\x71\x81\x7b\x2c\x38\xee\x71\xc5\x64\x3e\x8d\x49\xce\x4d\x03\x1a\xe0\x4c\x5d\x8a\xef\x5a\x8a\xef\x0a\xef\x45\xdf\x00\x4d\xea\xd2\x31\xe5\x56\xad\x9c\x0b\xfa\x43\x39\x65\x56\xad\x0c\x48\x02\xea\x99\xbe\x72\xab\x4a\x09\x58\x45\xc0\x45\x12\x0d\x8c\x04\xd6\xa3\x6f\x5f\x7f\xbd\xb2\x72\xcb\x55\x15\x78\x76\x95\xeb\x9c\x7c\x30\xfc\x27\xfc\x35\xa9\x23\x47\xc8\xf8\x54\xf4\x8f\x4f\x05\xe6\xba\x7c\x78\x5c\x8e\xa4\x2e\xa1\xb6\x50\xfb\xa8\x07\xa9\xc3\xd4\x1f\xd2\xde\xa8\xd2\xfb\x44\xb8\x4b\xfb\x38\xc2\x11\x10\xc4\x87\x81\xe9\x02\xe8\x08\x47\x4b\x08\xe6\x08\xd1\x67\x13\xa4\x64\x2c\x1f\x17\x92\x07\x58\x6f\xe3\x33\x2e\x41\x09\xc5\x35\x20\x24\x40\x95\x90\xde\x6b\x16\x33\x12\xe0\x37\x5f\xc9\x20\xd6\xe0\x63\x25\x42\x79\x4e\x80\x3b\x49\x10\xd3\x70\xf1\x01\x4d\x17\xce\xc3\xf0\xd3\x68\xc0\xe9\x8b\x04\x1c\x01\x5a\x87\x99\x55\x1d\x54\xe8\x4d\x36\x0b\x98\x12\xf5\x3b\xfd\x24\xf5\xf4\x3d\xad\xd5\x3d\x3c\xac\x03\x52\x49\x8b\x01\xea\x81\x52\xaf\x35\xd1\x63\xa6\x81\x58\x36\x49\x51\xd3\xf6\xc6\x21\x33\x07\x95\x3b\x2a\xf5\x8c\x6a\x10\x0f\x9e\x97\xb2\xad\x0a\x6e\x5e\x1e\xab\x1b\xc6\x4a\x43\xf9\xa0\x43\x85\xa3\xd4\x59\xb0\xae\xb5\x7a\x9f\x41\xb8\x48\x87\x92\xf9\xe5\x45\x6c\x83\xc8\x45\xf0\x7a\x40\x2e\xf2\x81\xaa\x59\x21\x14\xad\xe7\xe1\xa9\xa1\x6c\x0e\x9e\x49\xa0\x82\x0f\xfb\xb9\x25\xe7\xd1\xd5\xcb\x03\xc5\x59\x8e\x40\xd4\xb3\x32\xc7\x05\xe6\x2b\x18\xe3\xbd\xfe\x88\x10\xdf\x5e\x11\xe3\xd1\x1c\x89\x9c\xbf\x44\x2a\xa7\xe1\xd4\xbf\x01\x56\x22\xf7\x84\x17\x0c\xad\x68\xb2\x18\x94\x32\x2d\x30\xca\x65\xf2\xbd\xbb\xb4\x32\x16\x2e\xd9\xcc\x74\x4b\x55\x72\xd0\x5d\x9a\xae\xa2\xba\xf4\x97\x55\x80\x96\xd1\x82\x83\x40\xad\x40\x5d\x90\x95\xf1\x80\xf7\x99\xf0\xed\xcc\xe0\xa3\xf3\x96\x62\xb2\xc7\xd2\xbf\x16\x6b\xa8\x08\x35\x04\xaf\xc4\x13\xa8\x05\xd4\xa5\xd4\xd5\xd4\x2d\xe2\x3a\x8c\x17\x54\x42\xfd\xb2\xbe\xb8\xb0\x0a\x0b\xeb\x6e\x7a\xd9\xe5\xd2\x88\xdc\x84\x96\x0d\x0a\xcb\x6e\x22\x0e\x12\xbe\x98\x86\x8e\xa6\xcd\x28\x45\x85\x2e\x56\x58\x80\xf1\xe4\xab\x8b\x12\x5c\x49\x5e\x58\xc1\x05\x2b\xd7\x50\x1a\x4d\x32\x71\x8e\x81\x17\x32\x24\xe9\xfa\x02\xf9\x1b\x0c\x45\x7f\x81\xc9\x29\xa9\x32\xf2\x1e\xb3\xde\xe9\x28\x03\x4f\x5c\x22\x89\x44\x4f\x7d\x51\xdf\xe8\xcf\x0a\x96\xd7\xeb\x1b\x3a\x5a\x0b\x8a\xea\x1a\x42\xee\x22\x67\x87\x5b\x3f\xa4\x6b\x44\x51\x14\x33\x5b\x5d\x1b\xf4\x05\xba\xea\xbc\xe0\xd0\xac\xc2\x2c\x65\x0e\xb8\x52\xa3\xca\x2a\x94\xcb\x37\xed\xb2\x95\x6a\x0b\x77\xed\x82\x97\xe4\x87\x07\xd7\xc6\xa4\x9b\x77\xf9\xb3\x46\x46\xab\x50\x5e\x41\x7d\x41\x41\x3d\xfd\x70\x51\x64\x72\xd7\xa2\x9a\xc4\xbc\x99\x15\xda\xb2\xc1\xb9\x06\x33\xfb\x33\x3c\x9f\x4b\x5a\x35\x28\xe0\x93\x9d\x70\x8d\x99\xf6\x69\x45\x9d\x55\x65\x52\xdb\x3c\xdd\x59\xc1\x50\x53\x79\x9d\x45\x6d\xd6\xba\xad\xfa\xc5\xd9\x81\x6c\xe0\x5b\xb4\xd5\xb8\x44\x3a\xfb\x7f\x46\xf9\x5d\x8a\xe5\x5c\xe4\x25\xeb\xd5\x74\x96\xab\x14\x65\x83\x88\x1b\x3d\x04\xfe\xf2\xe1\xea\xb2\x92\xd2\xc2\xd4\x1a\xeb\x6e\x45\x69\x1d\x78\x91\xdc\xb9\x10\x7d\xbe\xb8\xa6\x76\xf3\x92\x64\x65\x22\x3c\xdb\xcd\xf3\x85\x6a\xf8\xc8\x79\x1f\x8e\xa6\xd4\x98\x27\xfe\x56\x42\x09\xe3\x9c\x20\x2b\xe9\xcd\xa4\x81\xc8\x7e\x70\x88\x8d\x94\x08\x63\x99\xac\x32\xc0\x44\x60\x4a\x08\x1a\x5b\x9c\xf8\xa7\xaa\x66\x88\x1b\x89\xcc\xe6\x13\x5e\xbc\xcc\x44\xd5\x5e\x62\xaa\xfa\xb2\xa5\x04\xd5\xee\x7a\x77\x27\x00\x94\x56\x5b\x31\x3a\x6b\x36\x13\x95\x02\xf9\xcf\x0f\xcb\xed\xd2\x51\x38\xf0\x34\x1f\xe9\x18\x57\x15\xfa\xec\x39\x69\x69\x7b\xa9\x74\xed\x73\x31\x70\x07\xce\x81\x07\xd1\xde\x57\x4b\x5a\xe6\xed\xda\x39\xef\xa1\xac\xd1\x15\x5a\xed\xd0\xd9\x92\x5a\xb9\x5d\x76\xea\x3e\x29\x94\x77\xe1\x02\xb7\x67\x79\x73\x26\xde\x70\xdf\xb7\x57\xef\x01\xac\x83\x37\x10\xfd\x7a\x03\xaf\xdf\x30\x09\xcc\xc7\x05\x44\x7b\xb6\x73\xef\x61\xc2\x74\x44\x1b\xd9\x15\xea\x7f\xf8\xa8\x0c\xa4\x5d\x33\x6a\x41\xff\xdb\x25\x3c\x41\x3a\xa1\x27\xd6\x03\xbf\xfa\x62\x8c\xf8\x2a\x43\x53\x3f\xd1\x0b\x73\x1e\xdf\x32\xe9\xa6\xce\x22\xa6\x37\xf3\xa2\x3b\xe1\x0f\x07\xaa\x16\x55\x81\x86\x51\xbf\xfa\xa2\x0f\xa7\x5f\x0e\x7c\x0e\x7f\x1e\xb7\xac\x66\xda\x82\x28\x4a\xa2\x5a\xf1\xc5\x37\x3c\x03\xb4\x53\xd1\x5e\xe6\x9e\xae\xdf\xfa\xe2\xfd\x18\xc7\x6c\xb2\x5f\xce\x95\x20\x9a\x43\xc4\x77\xa1\x30\x85\xea\x44\xb4\xa7\x5f\x8b\x03\x0f\x1e\x1a\x1e\x09\xc7\x66\xfc\x0a\x8a\x03\xc4\x97\xf1\x01\x91\x10\xf7\x71\xdc\xc4\xd3\x0b\xa4\x2e\x0e\xd3\x34\x30\x9c\x3a\x01\x7a\x8b\x38\x39\x7a\x41\xce\xd1\x8b\xf4\xea\x2e\xd1\x81\x83\x20\x70\x04\xb1\x26\x4d\x5b\x18\xd4\x86\xdb\x34\x4d\x20\xa6\xd6\xf7\x40\x41\x94\x93\x12\xaa\xfe\x87\x30\xfd\xef\x65\x32\x08\x65\x3b\x71\xb8\xaf\x65\xe4\xaa\x65\x23\xe9\xa7\x84\xdb\xdc\x1d\x28\x29\x09\xdc\xad\x1f\x80\x65\x9c\x27\x68\x3a\x12\x5d\x04\x02\x39\x44\x89\x90\x2e\xb4\x93\x50\x4e\xde\xaa\x81\xda\x52\x19\xb1\x1a\xfc\x4f\x3a\x28\xcc\xba\xa1\x4b\x57\x95\xbd\x89\xbe\x04\xda\xd7\xbd\x23\x67\x77\x94\x6a\x97\x6b\x37\x0d\xb9\xe6\x91\x27\xb7\x37\x5e\x23\x93\xac\x90\xc8\xfb\x7e\x4d\x47\x05\x1c\x5d\x18\x69\xcb\xc5\xe3\xe6\xad\xd7\x81\x56\x66\xcf\x1e\x92\xbf\x50\xab\x6d\xca\x2d\x7e\x72\xc7\xee\x97\x8a\x72\x9a\x38\x99\x8c\xce\xfd\x35\x2d\x96\x81\x72\x78\x35\xf1\xd3\x2a\xbc\x03\xd9\xc4\x10\x6c\xf3\x59\xa2\x6c\xe2\x15\x67\xb6\xf4\xd6\xaf\x5e\x40\x9b\xac\x11\x3d\x71\x9a\x4d\x78\xc5\x24\x65\x71\xa7\xd6\x52\x1e\xaf\xf0\xae\x64\x8e\x24\x70\x1a\x02\x9e\xe2\x00\xb8\x72\x8a\x7e\x63\xfe\xe4\x9a\xd5\xd3\xaa\xe6\x4f\xed\xea\x19\x0d\x4b\x9a\xd7\x5c\x33\x4c\xc2\x73\x53\x0a\x1d\x6c\xc9\xbe\xc9\xb7\x3f\xb2\xf9\x6f\x5b\xc6\x5e\x11\x84\x0a\x20\x63\x97\xb3\x52\x16\xae\x64\xad\x59\x8e\xf2\x71\xf5\x45\x68\x3f\x7a\x3f\xa3\x09\x7f\xf2\x11\x85\x4d\x9a\x2d\x05\x50\x3e\xeb\xcc\x16\xc1\x8f\x9f\xe0\x9f\x0f\x8c\x03\xf7\xc0\x53\x0b\x56\x57\x2d\x38\x30\xb5\x7b\xf5\x96\x57\x74\x8b\x0e\x4e\x8b\x42\x10\xf3\x44\xea\xc7\xfd\xee\xc1\x5b\x81\xfc\x96\xc1\xb5\x7c\xa9\x44\xa9\x60\x15\xa9\x9b\x2d\x96\x90\x0d\xc8\x42\x55\xcb\xdb\x30\xf5\x3f\x31\xd3\x44\xd7\xc9\xa0\xa2\x58\xa9\x54\xc9\x46\x76\x92\x4b\x82\x52\xe0\x38\xba\x1a\x8d\xeb\xd7\xdb\x12\xf6\xf5\x7c\x64\x4f\x8f\x32\x69\x89\x4d\x90\x41\x03\x88\x3c\x9f\x78\x04\x61\x43\x3c\xf1\x8a\x99\x16\xda\x13\x7f\x17\x32\x10\x02\x46\x49\xe3\x91\xc9\x1f\xcf\x91\xcb\xff\x28\xb7\xc9\xe7\xa6\xee\x0a\xc4\x5e\x3f\x4b\xd5\x26\x03\x70\xc2\x5c\x31\x6d\xce\x47\x93\xfa\x5e\x82\xb5\xbd\xa9\x5e\x09\x75\x04\xfd\x34\xe9\xa3\x39\x38\xf1\x8f\x72\xa1\x6c\xb2\x16\x50\xaf\xc7\x84\xb2\x42\xda\x9c\x8f\x27\x9f\xae\x15\xca\xf6\xa6\xf5\xc8\x90\x20\x87\xcc\x4e\xfb\xe8\xe0\xa8\xcc\x5e\x3b\x88\x0b\x8e\x1b\x4c\x94\x8f\x68\xda\x12\x5d\xe4\x44\x35\x23\x19\xde\x34\x37\x1f\x1d\xda\x32\x75\xd5\xba\xc7\x27\xc2\x75\x15\x7d\x4f\x87\xb6\x8e\x04\x0c\xfa\xe1\x2f\x6b\x9e\x5b\x5a\xce\x35\x96\x56\x6b\xb2\xd5\xd6\xba\xe6\x59\x73\x24\xd4\xa4\xa6\x9a\x71\xa9\xab\xd7\x4c\x38\xbc\x3e\x39\x0a\x36\xc4\xcf\xfc\xd8\xb2\xc0\x34\xf8\x4f\xe8\xfb\x49\x77\xbc\xb1\x9c\x8d\x84\xbc\x81\xfa\x49\x15\x7e\xcd\x79\xf2\xd0\xfc\x7e\x34\x3d\x01\xa1\x3a\x22\x60\x68\x8a\x10\x97\x30\x2a\xc4\x20\xe9\x36\x82\x97\xca\x34\x60\xb1\x0b\xf2\x46\xa2\x83\x29\x62\xc7\x72\x02\x84\xd7\xc5\x23\x84\x93\x21\x9a\x66\x9e\xfe\x7f\x22\x47\x23\x6a\x53\x31\xb1\x73\x32\xc5\x5f\x46\x38\xea\x14\x95\xdf\x1e\x74\xb8\x72\x7d\x96\xb0\xc9\xe4\xf4\xb7\x17\xe4\xb7\xfb\x5d\x46\x73\xc8\xe2\xcb\x75\x39\x82\xed\x9d\x62\xa6\x57\x88\xe4\xa7\xcb\xe4\x17\xb4\xfb\x9d\x26\x53\x98\x94\xf9\x65\x15\x21\x17\xd7\xe9\x6e\xaf\x25\x7e\x11\xc4\x7f\xb5\xed\xdd\x67\xa8\x21\xa5\xb1\x61\xbc\xc3\xeb\xe0\x83\x9d\xf0\x3f\x46\x92\x44\xa8\xe3\xb0\x5b\xec\x26\xb5\x96\xb7\xda\x1c\x4e\xab\x95\xd7\xaa\x4d\x38\xc1\x21\xa4\x0a\x21\x50\xdb\x2b\xe6\x3a\x6c\x62\xee\x05\x05\x6d\x56\xbb\xa9\xb7\xbd\x1b\xf4\xa2\xda\xcc\xaf\x9b\xd6\xb6\x8e\x1c\x16\x73\xe6\x59\xb2\xdc\xe5\xc1\x1b\x5b\xfe\x63\x44\x1c\xf3\x82\xbc\x8a\x25\x74\xb8\xc7\x48\xbc\x40\x60\xb6\x1d\xff\xa4\xd4\xcf\x14\x9e\x0e\x00\x75\x2a\x09\x7a\x61\x2d\x0e\x9e\x4e\x32\x54\x5f\x12\xe2\xbe\x97\xea\xed\xf7\x8d\xd2\x2b\xac\x83\x5a\xbc\x12\x52\x98\xfc\x17\xbc\x3e\xe1\x59\x2d\xca\x7b\x88\x1f\x10\xfc\xfd\x19\x3d\x4d\x41\xef\x3c\xf4\xc9\xad\xef\x88\xf3\xcd\x3b\xcf\xd0\xec\xca\x05\xfb\x53\xd4\x3b\x78\xde\x81\x97\xa7\x3e\x5c\xb0\x32\x33\x0b\xa5\xa8\x5b\xd1\x27\xf3\xe0\x1d\x34\x85\x27\xb8\xf3\x9e\xcd\x9d\x79\x36\xb2\x64\x90\x91\x46\x86\x5b\x48\x18\x61\xc4\xf8\x8e\x2c\x19\xc2\xf3\x72\x54\x48\xbb\x2a\xb5\x15\x0f\x94\x4f\x51\x57\x2f\x1c\x4a\x02\xe0\xed\x55\x5a\x9d\x11\x3c\xa6\xd6\x8b\xef\x70\x02\xb5\x1a\x75\x42\xa9\x4c\x21\xb1\x4c\x48\x9f\xf6\xb7\xc4\x51\xcc\x58\xaa\x8b\x50\x92\x04\xb7\x98\x11\x75\x86\x25\x21\xe2\x5d\xb9\x1f\xb4\x44\xb4\x11\xc1\x6b\x17\x14\xd5\xa1\x89\x13\x14\x11\x6d\x5b\x22\x80\xba\x12\x29\xa7\xcf\x05\xcd\x5c\x30\x24\x10\x92\xac\x52\x2e\x77\x95\xf8\x03\x60\xd0\xb1\x9d\x15\x73\xdb\x5a\x22\x65\xae\x62\x45\x56\xc5\xb8\x95\x1d\x5d\x0f\xce\xfa\xd3\xad\x8f\x8c\x28\xb5\x8f\xd2\x38\xc1\x26\x74\xf6\x86\x1f\xae\x18\x7b\xfd\x2b\x73\xc7\x5e\x37\x7b\x6c\x79\x45\x4e\xb9\xad\xeb\xca\x11\x4b\x83\x35\x1d\x63\xc7\x35\x97\x2a\xe8\x87\x16\xb5\x8d\x2e\x02\x4a\x93\x8b\xd9\x60\x73\x98\x9b\x8b\x9b\xe8\x5a\x89\xcf\x99\x6d\x57\xc9\x27\x7c\xb3\xe3\xf7\x81\xf8\x94\xf6\xf5\xc3\x2f\x77\x8c\x98\x3b\x2e\xbc\xe8\xd1\xae\x9e\xaf\xa6\xd4\xc4\xf6\x78\xfd\x60\xcf\x6d\x00\xec\x98\xfb\xda\xee\x89\xc1\xea\x69\x33\x2e\x5f\xba\x23\xfe\xea\xd4\xf6\x9c\xca\x2c\xb7\x39\xbf\x62\x6e\x93\x56\x77\xc9\x7e\x86\x36\xe7\x28\xec\xf9\xec\xf4\x62\x23\x30\xd6\x9f\xb7\x16\x8c\x15\x64\xf6\x44\xf7\x30\x54\x92\xd9\xbe\xf2\x99\x30\x29\x1d\x12\xf1\x48\x0c\x02\xf2\x2d\x5e\xf8\x4c\x82\xe2\x2a\x4b\xda\xc8\x6c\x14\xe7\xfe\x44\x3f\x74\xb1\x30\xcc\xb9\xe8\x45\x70\xea\xf7\x7c\xe6\xf3\x87\x65\x0c\x2c\xf6\xc7\x75\xc0\xc0\x4f\x0a\xc9\x3d\x83\xa2\xed\x6b\xa1\x76\xea\x0c\x67\x38\x62\x07\x23\x2b\xa6\x36\x99\xcb\x42\x83\x86\x27\x47\xce\x7c\x62\x1e\xcd\x4c\x7a\x70\xe1\xd3\x93\x0c\x8a\xca\x9c\x25\xe3\x97\xee\xd9\x3f\xa7\xfb\xd2\x02\xa9\xcf\x94\xed\x4f\x94\xb6\xe4\xcc\xdf\x33\xe7\x3c\x3f\x06\x27\x1f\xa8\x97\xab\x02\x0e\xa8\x52\x40\x7f\xa1\x46\xe3\x1f\x1c\x97\x3b\x0d\x4b\xdb\x39\x6d\xd7\x38\xa7\x54\xe3\xc8\xb6\xb1\xe5\x4d\xd7\x15\xee\x9c\xb5\x62\x48\x71\xf7\x53\x33\xc0\x82\x27\x16\x5f\x62\xb7\x2c\x6c\x1f\xf2\xe0\xb2\xb9\xf7\xcc\x5f\x61\x9c\x52\x3e\xa1\xac\x31\x64\xbf\x1a\x7e\x72\xbe\xc1\x03\x9d\x96\xf1\x8a\x18\xa2\x51\xea\x7c\xcf\xbb\x7e\xb2\xb1\xef\x21\x2a\x4c\x9c\x07\x47\xf5\x5a\x3c\x83\x11\x43\x07\x2d\xee\x25\x1e\x3c\x0d\x32\xc9\xb4\x1e\xab\x78\xa2\x05\xad\x58\xb4\x6e\xc5\xd5\x57\xaf\x00\x1b\xe7\x3c\x7b\xd5\x3b\x64\x6d\x4b\x51\x99\x55\x8e\x26\x21\x68\x39\x57\x21\x73\xea\x44\xdf\xa3\x37\xd0\xf7\x9d\x23\xae\x02\x77\x5f\x40\x1f\x0c\xb0\x27\xa4\x04\xb4\x7c\xca\x02\xc4\xbb\xc3\xf4\xd3\x00\xa6\x5f\xad\x1f\xb3\xbe\xfd\xf7\x99\xd5\x7f\x6f\xe6\xd1\xf3\xee\x08\x50\xfa\xd2\x19\x1a\xe2\xfa\xf3\x1e\x46\x98\xff\x89\x8a\x07\x3e\x11\xeb\x4b\x0b\xa6\x8e\x08\x2a\x17\xfe\xce\x35\x44\x14\x22\xd1\x92\xb1\x11\x8a\x62\x32\x1f\x78\x38\x93\x99\x11\x40\xf9\x89\xed\x81\xe0\x0f\x8e\xd0\x0d\x59\x78\x0a\xc9\x22\x3e\xca\x12\x21\xb2\x8c\x92\x7e\x83\x53\x08\xcf\x26\xb8\xa7\x8d\xe2\xd1\x1f\x4a\x87\x08\xe0\x5a\x34\x02\x4f\xa3\x97\xc3\x3e\xcb\x91\xba\x21\x9b\x8f\x1c\xd9\xbc\xf4\xe1\x3b\x9f\xd6\x97\x81\xc5\x20\x0b\x65\x4d\x9f\x6b\x64\xd9\x23\x9b\x2b\xab\x1e\xd4\xc8\x4d\x1a\xa3\x4f\xff\xe0\xa4\x23\x40\x0a\x2a\xd1\x29\xb4\x1d\x9d\x1a\xde\x54\x87\xf6\xe9\x3d\x2f\x99\xfb\xee\x39\x8c\x4e\x01\xee\xf0\x92\x99\x57\x0a\xaa\x95\x20\x09\x1e\x1b\xfd\xa1\xa8\x18\xe9\x31\x00\xc5\x84\x99\x87\x41\xb2\x29\xeb\x8c\xfb\x08\xfa\xf9\xc8\xf5\x5f\x8d\xae\xb9\x11\x24\x37\xcf\xde\xf9\x22\x90\x1e\xb1\xa0\x3e\x73\x89\x5a\xe1\x04\xcc\x94\x8d\x9b\x8f\x00\xe1\xba\xf8\x4a\x53\x1f\xa8\x99\x86\x72\x6d\xfb\xdf\x07\x1c\x58\x02\xb8\xc4\x93\xc1\x92\x60\x92\x88\xe6\x1d\xa8\x3b\x6f\xa0\x5d\x35\x27\xf4\x9c\x5c\x82\xa7\x47\x5d\x20\x4f\xe6\x33\x60\x54\xb4\x44\x90\x05\xc3\xf3\xfc\x08\xfb\x2e\xc4\xb7\xd2\x95\x10\xc9\x27\x31\x17\x33\xf3\x19\xf9\x30\x23\xca\x6e\x9d\x43\x58\x9f\xb9\x6f\x9e\xd9\xc7\x0e\x61\x83\x2e\x26\xe8\x0a\xfe\xd3\x61\x48\x25\x0d\x0e\x87\x01\x26\x0d\xe0\x20\x29\x9c\xa2\xf0\x21\x69\x9d\x2d\x7b\x04\xd8\xc1\x18\x60\x7f\x44\x36\xd7\x0c\x14\x03\xe4\xbf\x50\x09\x92\x66\xa7\xd3\x8c\x92\xae\x82\x02\x78\x49\xd8\xe1\x08\x3b\x52\x13\x52\x77\x25\x63\xc3\x86\xc5\x92\xe2\x11\x4e\xe8\x5e\x04\x5e\x6e\x5b\x5e\x59\xb9\xbc\x0d\x95\xcf\x12\xd6\x85\x2b\x70\xdf\xfb\x19\xaf\x0b\x05\x04\x5b\x80\x12\x87\xbc\xf0\xed\x30\x0f\x2d\xe2\x58\x45\x3d\x04\x05\x4a\x30\x23\xf0\x88\x82\x2c\x8f\x89\x21\x92\x31\x40\x18\x03\x51\x89\x12\xf7\x81\x90\x38\x7f\x54\x00\x81\xe0\xf4\x13\xe8\x20\x3c\x97\xb0\x4f\x46\xfc\xa9\x7a\x7f\x24\xe2\x87\xcf\xf9\x81\xd4\xdc\x97\x43\xc2\xf4\x35\xe3\xd0\x7b\x0f\x3c\x82\x8e\x3d\x64\xa6\xff\x4c\x12\xfa\x2e\x1d\x07\x42\x0f\x6c\xfe\xf6\xc1\x39\x60\x69\xc4\xbf\x49\xb7\xe9\x7d\xf4\xd6\xdd\x3f\xa2\xf9\xd3\x9f\x25\xb9\x9b\x71\x1c\x14\xdf\xf3\x03\xd8\x39\xfd\x88\x3f\x02\xff\xde\x14\x8d\x36\x45\xc7\x8c\x19\x15\xf1\xf9\x23\xd7\xde\xf3\x10\x7a\xf7\x91\x4c\x78\xf6\x43\xdf\x80\xcd\xbe\xc8\xe8\xd1\x77\xa3\xb7\x3e\xd8\x04\xe4\xc7\x23\x7e\x21\x06\x8a\x3f\xd8\x84\x7e\x3c\x1e\x21\x76\x15\x8a\xb3\x14\xf3\x43\xfa\xdb\xda\x71\xff\x5f\x26\x60\x8a\xd3\x66\x7d\x0c\xf3\x86\x82\xad\x74\x01\x7e\x35\x82\xa5\x64\x26\x10\x7b\x12\x5a\x70\x4e\x4d\x84\x57\x64\x5d\x91\xd0\x69\x91\x56\x5c\x57\x42\xac\x51\xfc\xe2\x46\x85\x8b\x49\x44\x04\xf8\x24\x11\x92\x1c\x8f\x13\x23\x4e\x0e\x86\x24\xbe\xb4\xeb\x35\x4c\xe4\x99\xd2\x0b\x8f\xb0\x5d\x71\xce\x50\x58\x54\x15\xe7\x4d\xe6\x6a\x56\x10\x1b\xd2\x44\x49\x1c\x8a\x68\xfe\x90\x3e\xbc\x64\xd9\x5d\xc1\x32\x74\x8d\x8b\x0e\x78\x95\x39\x3e\xf4\xe6\x3e\x5d\x96\xa6\x72\xd5\xb0\x22\xde\x30\x7c\xf6\x66\xaf\xda\x9c\xa5\x0a\x96\xd5\x3b\x0d\xd1\xdb\xac\x15\xa7\x6e\xfd\xfb\x2d\x7b\xf0\x77\x2a\x45\x7f\x58\x1a\x50\x2a\x73\x1b\xc7\x8e\xeb\x70\x6a\x39\x8b\x56\xc3\x38\x1a\xab\xb2\x6a\xc7\x07\x68\xe6\x4a\x99\xd4\x03\x47\xc4\x3b\xee\xf5\x94\x48\x5b\x4b\x95\xce\x87\x9c\xb9\xf1\x25\xa3\x27\x3b\x56\x57\x39\xb3\xef\xec\x68\xdb\xf4\xbc\x04\x4a\x0a\xb2\x1b\xaa\x87\x07\x06\x77\xec\xab\x1a\x1e\x54\x4f\xbe\xaf\x6f\xcf\xa2\xee\x9d\xef\x31\x97\xa3\xa7\x8c\xe0\x85\x86\xd2\xbe\xee\x76\x69\x8e\x15\x72\x1c\xbd\x65\x1a\x1a\x2f\x67\xc1\x94\xf7\x7d\x7d\x3f\xf8\x0f\x5c\x63\x53\x5b\xda\xb2\xda\xa7\xd5\xc6\xd1\xad\xd9\x35\xd7\xef\xbf\xef\x5e\x00\x73\x8b\x5a\xf4\xc5\x31\x05\xeb\xf2\x96\x38\x78\x86\x81\x3c\xef\x77\xd8\x4c\x96\x82\x2b\x06\xb9\x97\xba\x94\x4a\x28\x3f\x0a\x39\x75\x6c\xe8\xde\x11\x5e\x4f\xad\x72\x8e\x4e\xe9\xfd\x70\x7c\x62\xe6\x5a\x5b\xb3\xab\x7a\xb5\x06\x1c\x9d\xdb\x3e\x33\xf5\x8c\x4e\xa2\x5d\x7f\xc9\xf5\x33\x87\x4c\x1b\xba\x00\x35\x69\xaa\x27\x4f\xaa\xdd\x85\xfa\x9e\xbb\x24\xa7\x0c\xa8\xce\xf9\xfb\x23\xeb\x9f\x8d\x8a\x0b\x38\xf1\x14\x88\x0e\x5c\xcc\x7c\xe9\xd5\x8f\x2c\x74\x81\xff\x98\x13\x0f\x90\xcd\x27\x18\x0a\x7a\xb2\x08\x88\xbc\xf0\x05\x89\x7f\x0f\x13\xe3\xc9\x22\x60\xef\xd5\x80\xc7\x34\x2c\xad\x7b\x4b\x7d\xef\xc6\x3b\x0e\x3f\x7d\xcd\x8d\xf7\xa8\x5e\x67\xab\xa2\x65\x35\x72\x5b\x3c\x34\x05\xfe\xf9\xa8\xfa\x9e\x4c\xfa\x1b\x4c\x75\x84\xa4\xc7\x42\xc5\x09\xb0\xd0\x9d\x2f\xd1\x38\xe0\x98\xd4\xad\xa9\x6b\x47\xb3\x56\x9d\x24\xdf\xe5\xca\x97\xe8\xcd\x92\x3c\xb0\x15\xf0\x70\xda\x58\xd6\xa2\x63\x0b\x5c\xbd\x3f\x53\x50\x7b\xdb\xe3\xff\x7a\xf5\xf9\xcf\x1f\xec\xa9\x6d\x5a\xb5\xac\x68\x48\x83\xff\xea\x0b\x13\x5a\x9e\x78\xeb\xd5\x2a\xa9\x52\x0f\x6b\x6a\x18\x8d\x4a\x5a\xf9\xca\x3b\x6f\xbf\x52\x25\x55\xab\x59\x4f\x56\x1d\xa3\x56\xcb\x2a\x5f\xa6\x5f\x3f\x4d\xa6\xad\xcc\xba\xc2\x76\xe1\x76\x71\x52\x15\xa2\xc6\x63\x1a\x20\x3d\x38\xc0\xa3\xa3\x30\xd2\x05\x8f\xc3\x6a\x90\x59\xec\x33\x9e\x1d\xe3\x99\x08\x7d\x42\xf0\x2d\xd9\xd3\x8d\xbe\x16\x02\x98\x61\x7f\x7b\xeb\xc9\x2d\x20\xb9\xe5\xe4\x56\x54\x44\xe2\x38\x11\x68\xbb\x7b\x84\x00\x7d\x1d\xd2\x0a\x65\xbe\xee\xee\x39\x93\x24\x21\x16\xb3\xe5\x5b\x4e\xfe\x1f\xe6\xbe\x3b\xb0\x89\x23\xfb\x7f\x67\x8b\x56\xbd\x17\x5b\x96\x65\xc9\xb2\x24\x57\xb9\xc8\x92\x6c\x83\x65\xd9\x98\x62\x6c\xc0\x98\x66\xba\xe9\xa6\x9b\x4e\x80\x80\xe8\x24\x40\x42\x4f\x80\x40\xb8\x10\x52\x08\x29\xe4\x9b\xde\x30\xb9\x4b\x42\x0a\x1c\xc9\x41\x0e\x12\x92\x38\xb9\x34\xee\x92\x5c\xbe\xb9\x4b\x0e\x6c\x69\xf8\xcd\xcc\x4a\xb6\x6c\xb8\xdc\x7d\xef\xfb\xfd\xe3\x07\xd6\xee\xec\xec\xec\xec\xcc\xec\xcc\x9b\x37\x6f\xde\xfb\x3c\x50\x13\xd9\x81\x9e\xd2\x2a\x19\x61\x11\x4f\x1d\x69\x61\x5a\x04\x1b\x10\x36\xc1\x06\x24\x48\x34\x78\xa8\x9e\xda\xb1\x9c\x80\x55\xcd\xc7\x01\xab\x51\x5c\xfc\xd6\xad\xae\x9c\xbe\x4e\x45\x1d\x72\x2f\x86\xb7\xde\x83\xa3\x49\x4b\x49\x7a\x27\xc9\x62\x41\x87\x14\x68\xac\xf4\x6d\xac\xb6\x58\xaa\xd7\xf9\x2a\x0d\x01\xc4\xba\x4f\x48\xb2\x18\xfc\x46\x4b\xd2\x24\xc4\xdd\x07\x0c\xf4\xa0\x2a\x1f\xbc\xe6\xab\x42\xc1\xb4\x8a\x53\xbe\xaa\xd5\x5b\x9a\x3a\xce\x37\x6d\xd9\xd2\xc4\x16\x34\x6d\xa1\x9f\x5b\x88\x73\xc1\x07\xd8\xee\xab\x2c\x2e\xae\xf4\xb5\x1b\x8d\x5f\xe3\xb8\xaf\x3b\xcf\x4b\x0f\xf8\x2a\x2b\x7d\x70\xba\xc1\xf0\x4c\x76\x25\x7d\xa8\xeb\xe9\x2d\x89\xbe\x0b\x69\x34\x35\x63\x2d\x42\x7b\x0a\xb0\xe3\xff\x92\x9b\xec\x0a\x77\xc3\x8f\x76\x5f\x05\x01\xf8\x0a\x1c\x00\x5f\x01\x01\xb0\x86\x9e\x75\x7c\x69\x24\xb4\xf4\xf8\xf1\xa5\x4c\xeb\xd2\xe3\xe0\x75\xda\x1d\xb9\x07\x71\xff\x14\x28\xa3\x1f\xea\x8a\x3f\x8e\xbb\x83\xa9\x13\x8f\x71\x10\x35\x82\x9a\x44\x35\x53\x73\xa9\x85\xd4\x72\xb4\x0a\xdc\x40\xdd\x41\xed\xa4\xf6\x51\xf7\x51\x47\xa8\x07\xa9\x87\xa9\xe3\xd4\x93\xd4\x0b\xd4\xcb\xd4\x6b\xd4\x69\xea\x5d\x01\xeb\x98\x21\x16\xa1\x4c\x6c\x17\xd4\x2e\xc2\x3f\x81\xae\x31\xc4\xe0\x96\x11\xd0\x0f\x74\xc5\x38\x4a\x17\xa3\x6d\x76\x3f\xfe\x09\xb0\x13\x3a\x82\xa3\x8b\x8e\xa8\x62\x0e\x80\xee\x00\x12\x6b\x0a\x68\xdc\x22\x1e\xd8\x4d\x4e\x94\x27\x86\x01\xe5\x1d\x01\x06\x98\x40\x40\x67\x07\x7e\xce\x8b\x56\x38\x26\x23\x63\x0f\x00\x15\xf0\xfa\x78\xa3\x46\x8f\x1f\x32\x69\x02\x1a\x13\xc8\x07\xbc\x26\xe0\x16\x39\x1d\x9c\xc9\x20\xa1\x9d\x6e\x0d\xc7\x7b\x81\x49\x97\x4f\xa3\x5e\xc3\xb8\xdc\x12\xda\xc7\xe8\x1c\x3a\xc0\x57\x00\xe2\x8e\x4e\x06\x4c\x7e\x31\x65\xd6\x9f\x65\x92\xf5\xa7\x19\x7b\x52\xb2\x1a\xb6\x68\x8a\x35\x70\x81\xc6\x6c\x4a\x67\x4f\xeb\x93\x99\x73\xfa\xe4\x14\xfd\x5b\x20\xfd\x7d\x36\xdd\x64\xd6\x82\x6d\x6a\xbf\x1a\xdc\xa5\xc5\x77\x7f\x6f\xb2\xf1\x2f\xeb\x92\x23\x6e\xb0\x11\x1e\xbf\x1b\x1e\x07\xcd\xda\xec\xc8\x58\x40\x9f\x57\xbd\xf2\xb2\x42\x4d\x3f\x02\x57\xbd\x46\x67\xc3\x6f\xd5\xb9\xf4\x93\x80\x0d\x69\xac\xc6\x08\xbc\x54\x01\x96\xa9\x2b\xe1\x08\x30\x48\x1c\x69\xe1\xc0\x48\xb8\x95\x45\xa3\x64\x57\x08\xbe\x7b\xe8\xf4\xd1\x47\x58\x20\x7e\xcc\xba\x1f\x64\x7d\xf6\x19\x7b\xf6\x94\x88\x59\xa6\x8e\xee\xbe\x08\xff\x88\xbe\x67\x66\x74\xe5\x16\xf0\x75\xf6\x08\xe0\xfc\x61\x03\x03\x8c\xe2\x4b\x9c\x18\xd6\x02\x7f\xa4\xf5\x28\xfa\xc7\x96\x17\xac\xcb\xfc\x3d\xcd\x3c\xb6\x76\x10\x47\xaf\x35\xa4\xb1\xf0\x3e\x89\x44\x8f\x4e\x4f\x8a\xc5\xa6\x74\xad\x5e\xaf\xb7\x27\x89\xe5\x60\x08\x9b\xa6\x97\x48\xc0\x54\x2e\x4d\x8f\xd2\x80\x46\xc0\x82\x0c\x15\x98\x2d\x15\x27\xd9\x0d\xe8\x9f\x3d\x49\x24\x87\x07\x80\xdd\xa8\x50\xc2\x57\xd8\xb4\xc8\x59\x30\x19\x1e\x56\x33\x16\x56\x22\xe5\xe0\xbd\xa2\xb7\xc0\xd8\xd7\xc5\x34\x68\x3d\x73\x46\xdd\x31\x5c\xc4\x55\x0f\x99\x09\xa4\xf0\x6c\x08\xee\xb0\x00\x3f\x7c\x94\x55\xa1\xd4\x27\x45\x1c\x58\x5e\x05\x2a\x1f\xfa\xe4\xd5\x93\x62\xc6\x07\x68\xa0\x56\x9c\x04\x0a\x19\x7c\xfb\x10\x28\xfb\xee\x53\x31\xbc\x36\xf0\x6d\x5a\xde\xf6\x79\x0e\x7c\x03\x9e\x06\x5e\xd5\x76\xf8\xe5\x27\xb9\x60\x4b\x07\x8d\x1a\xc2\x80\xda\x0b\x2c\x07\x2c\x2c\x84\x2f\x82\x5f\x3e\x83\x5f\x47\xee\x80\x5f\x81\x94\x3f\xfd\xa9\x1f\x98\x29\x65\xd1\x67\xce\x8c\xde\xd7\xc0\x08\xf2\x12\x82\xff\x8f\x31\xef\x28\xd2\xfd\x3b\x07\x03\xfa\xd6\x09\x8a\x78\xcf\xaf\xa7\xbf\x06\x4d\xcf\xaf\x8f\xfc\x7d\xfd\xf3\xec\xf9\xa7\x42\x1e\x68\xf1\x84\x2a\xf3\x98\xc6\xf5\xa7\xc0\xf4\xf6\xaa\x0d\xaf\xbd\xb6\x21\xe3\x19\xf0\x28\xc6\x30\x87\x7a\x4f\x1f\x81\xde\xac\x47\xe3\xed\x76\x4a\x4a\x3c\x7b\x63\x79\x0c\x4b\x31\x98\x71\x41\x7c\x0b\x87\xd8\x5e\x74\x81\x16\x99\x40\x4b\x39\x85\x0b\x0e\x23\xc5\xf9\xa9\x80\x88\x37\x32\x0f\xc1\xdf\xc2\xf4\x65\xfa\xb3\xa0\xe9\x7c\x03\x98\x3a\xbe\x3f\x5c\x19\x7d\x63\xfe\xf8\x60\x0b\xed\x87\x47\x17\xd1\x1a\x30\x25\x53\x09\xaf\xc0\xd0\xb2\x19\xcc\xef\x4f\x3f\xb1\xf9\xe0\x5c\x30\xf0\x3d\x43\x7d\x25\x37\xeb\x36\x98\x0a\x4f\x8f\x1e\x75\x1e\x4c\x3a\x7b\x67\xe5\x98\x05\xd1\xd3\x70\xe5\x80\x31\x60\x1d\x5d\xd6\xd1\x1b\x4c\xa5\xf5\x4b\xc7\xcd\x58\x0e\x83\xf0\x63\xa5\xbe\xa8\x72\xb8\xe9\x2c\xa8\x9d\x77\xef\x86\x27\x63\xb4\x41\x4c\xb1\xff\x20\xba\xbf\x98\x92\xeb\x04\x2f\x3f\x64\x87\x24\x07\xe8\xfc\x88\xcd\xf6\x7b\x6d\x58\xb9\x93\x89\xc7\x33\x78\xa1\x8b\x18\x19\xc1\x39\x1d\x4f\xbc\x43\x99\xfc\x26\x7e\xda\xc1\xf5\xab\xcf\x9c\xfe\x62\xcf\x9e\x2f\x4e\x9f\x09\xaf\xe2\x0e\xb6\x01\xfa\xea\x81\x03\x57\x01\x0d\xff\x7b\xed\xb9\x43\xab\x1e\x7b\xa3\x6d\xdf\xbe\xb6\x37\x1e\x5b\x35\xf3\xb6\xa7\xc6\xbc\x73\xe2\xc4\x4f\x81\x3f\xec\xb9\xf7\xd3\xa7\x8e\x2c\x5c\xf5\xfe\x92\xf7\x8f\x9d\x78\x87\x5d\xde\x21\x2e\x1d\xbb\x67\xcf\xd8\x52\xf6\xda\x9a\x59\xb3\x3a\x1e\x2a\xad\x64\xa2\x83\xb7\x6f\x1f\x1c\x61\x72\x72\x1d\x73\xe6\xa4\x33\x5b\xd9\x7b\x0e\x56\x45\x86\x79\x8b\xa6\xcf\xe6\x04\x3e\xfa\x18\x9a\x9b\xc7\x76\xda\x5b\x8c\xfb\x9f\xcb\xa1\x6f\xba\xee\x02\x58\x4d\x40\x5a\x21\xb4\xc5\x0a\xb8\x2b\x56\xfd\x78\xbd\x95\x1c\xe0\x97\x56\xfd\x34\x1c\x46\x07\x78\xe5\xd6\x61\x6e\xcb\x77\x0f\x75\x64\x3c\xf4\xdd\xea\x99\xd2\xdf\x2c\x98\x3e\x38\x0f\x64\xbf\xba\x37\xb2\x5b\xb9\xf9\xc4\x31\xfa\x13\x83\xd5\x6a\x88\x3a\x70\x42\x5a\x87\x8f\xd1\xef\xf1\x11\x3c\x8e\x8f\x70\x18\x09\xcf\x22\xe1\x7d\xe8\xf8\xd0\x43\xdf\x7d\xf7\xd0\xe2\x37\x8a\xd2\xdd\x0b\x7e\xd3\xe7\xf9\x3f\xef\x8e\xec\xad\x2a\xb1\x7f\x4c\x61\x6d\x49\xea\x46\x50\x24\xd8\xce\x08\x7e\xda\x0c\xc4\x53\x9b\x9d\xf8\x6a\xcb\xa3\x0a\x29\x1f\x55\x4a\x95\x53\x95\x54\x5f\xaa\x06\xd1\xe5\xa1\x88\x32\x8f\xa6\xc6\x23\xea\x3c\x83\x9a\x4d\xcd\xa7\x16\x51\xcb\xa8\x95\x88\x42\x6f\x44\x14\x7a\x3b\xa2\xd1\x7b\xa9\xfd\xd4\x31\xea\x22\x1a\x11\x58\xf4\xe3\x24\x47\x9f\xdd\x80\xad\xd7\x4c\x3d\x7f\x01\x13\x9f\xf8\xc3\x2e\x89\x12\x7f\x00\xe3\x82\xfd\xca\x0f\xdf\xf7\x1a\x02\xff\xe4\xae\x09\xeb\xb3\x18\xf8\x5b\xfc\x9c\x71\x0e\x8b\x80\xdf\x58\x69\xbf\xa0\x8e\xe6\xe8\xd4\xa7\x03\x22\x97\x80\xf5\x6f\x34\x79\x03\x1e\x11\x16\x5e\x8b\xa8\xc8\xb5\xa8\x98\xbb\xaf\xfd\x0c\xbd\x97\x3e\xda\x7e\x66\xa8\x33\xfe\xaf\x42\x35\x53\x95\x86\x7e\x56\x72\x6e\x56\x0d\x99\xa9\x9a\xb9\x1c\xfd\x6e\x8b\x9d\x23\x95\x0b\x81\x7e\x11\x30\x2c\x02\xfa\x85\xe4\x2f\x16\xee\x78\xc1\xb9\xe8\x81\x9e\xf1\x3f\x0e\x5e\xd4\x99\xb1\x33\xba\x65\xed\x0b\x2f\xac\x5d\xf7\xfc\xf3\xf0\xb2\xbb\x77\x75\x6f\x77\xcb\x24\x33\x93\xd6\x67\x62\x6a\xa0\xc4\x11\xa8\x1f\x12\xc8\xca\x34\xa4\xd7\xa8\x10\x37\x9e\x21\xb1\x2a\xcd\x46\x79\x6a\xc0\x67\x17\x51\xed\x3b\xe0\x13\xa0\xa1\x92\x39\x1c\x99\x0c\x3f\xe2\x32\xdf\x7e\x1b\x7e\xb8\x68\xd1\x9e\x84\xbf\xbb\xd3\xf3\xed\xca\x74\x4f\x3a\xfe\x29\xec\x9e\xf4\x74\x8f\x3d\x7f\x82\x27\xdd\x83\x7f\xe3\xf3\xd3\x3d\xec\xfb\x19\x3d\xfe\xc1\x13\x43\x16\x75\x8f\x59\x34\x24\xa3\x5b\x9e\xe8\xcf\xf1\xfc\x3a\xa1\xb4\xe0\xf6\x8c\x2c\x09\x07\x74\x86\x42\x6f\x45\xb6\xd4\x98\x9b\xe6\xc9\xe7\x81\x4c\x6f\x48\x12\x19\x4d\x65\x40\xc5\xc8\x18\x11\x2d\x35\xe5\xc5\xfd\x0b\x2c\x42\xe3\x6f\x3b\xc1\x7b\xc8\xee\xb1\x86\xbd\x95\x71\x5e\xcc\x8d\x2c\x66\x34\x26\xde\xdf\x76\xf8\x70\x1b\x03\x0f\xb7\xdd\x7f\x7f\x1b\x68\xab\xc8\xbb\x76\x29\xaf\xa2\x22\x0f\x3c\x99\x1b\xa2\x7f\x0a\xe5\x82\x27\xf3\x2a\xc0\x16\x7c\xef\x30\x4e\xd8\xb2\xe0\x30\x5b\xd2\xfe\x4a\x6e\x45\x45\x2e\x57\x8d\x8f\xbf\xf9\x0d\x3a\xc6\xf8\xd0\x4c\x44\xbf\x2e\xa3\xf3\x18\x44\xbd\xb8\x38\xdc\x11\xdf\xb5\x3f\x4f\x04\xcd\x18\x1f\x90\x15\xbc\x44\x50\x89\x10\x49\x31\xcd\x01\x9f\xb0\xc9\x11\x57\x65\x17\x1e\xf0\x73\xfb\x00\xbb\xe7\x83\x8f\x0e\x8f\x38\xb0\x62\x61\xf3\x8c\x85\xcb\xef\x1d\x76\xe0\xb7\xe7\xef\x9f\x7a\x69\x04\x67\xb3\x88\x95\x86\xde\xd3\xe0\xcf\x6b\x36\x7e\xbe\x19\xa4\x9c\x5b\x7e\xf1\xf0\xce\x8d\x9b\x8e\x8d\x99\xbe\x71\xed\x44\xeb\x0c\x8d\x3e\x4d\xf3\xc7\xfb\xcb\x66\x97\x17\x89\x55\x86\xe4\x5e\x4f\x4d\x38\x05\xd9\x52\xe6\xc5\xf7\xde\xd8\x75\xe8\xfd\xc0\xb8\xe5\x1b\x36\x2e\x1f\x17\x78\x7e\xff\xa1\x97\x6a\xcb\xd9\x54\x9d\x41\x99\xe4\x6b\x9c\xb3\xf8\xc3\x4d\x67\x81\x7a\xd4\xd6\x87\x1f\xd9\x3a\x6a\xe5\xb4\x89\x61\xa7\x55\xaf\x1d\xac\xbf\xff\xbc\x33\xd7\x69\x50\xe9\x52\xfa\xd4\x74\xbc\xe6\x4c\x55\xc5\x78\x59\xec\x7f\x1c\xdb\x12\xe4\x60\x8c\x28\xa2\xc2\x40\x7c\x52\xa6\x02\xa2\x2a\xd6\x0b\x10\x90\x11\x8c\x45\x12\xc7\xb2\x67\x63\x67\x1d\xf1\xb0\x40\xfc\x0a\xa0\x8f\x10\x27\x75\x41\x10\x60\xe2\x32\x15\x2b\x8b\x97\xe1\x2c\x76\xd0\x8b\xa5\x16\xc4\x87\x2f\x09\x44\xbf\x16\x74\xc8\x05\x55\xf2\x77\x6d\xc9\x1d\xdf\x01\x9e\x4b\x62\xee\xc5\x49\x22\x94\xd9\x65\x74\xd2\x27\xdf\x13\xc4\x26\xea\x64\x95\x8c\xe5\x01\x7b\xd2\xec\x62\xba\xe7\x82\x03\xd1\x44\xc5\x72\xa6\x15\x52\x49\x4e\x66\x05\x9f\x9a\x24\x55\x17\x60\x8c\x3e\xb3\xd2\x5b\xcd\x32\x01\x14\x54\x68\xd3\x8c\x4e\xde\xd5\x85\x6b\x8f\xeb\x2d\xe8\xe3\x0f\x13\x7a\x9b\x2a\xae\x46\x4f\x3c\xa0\x99\x80\xb1\x28\x00\xfe\xd3\x3a\x73\x94\xab\x58\xb7\x1b\xbd\x76\x37\x62\x32\x75\x80\xc2\xd0\xd8\x54\x74\xf7\x7f\x5c\x6b\xdd\x2e\xe0\xc4\x37\xe0\xc7\xbb\x74\x28\xe7\x1b\x94\x0e\xe7\x97\xfe\x3f\xaf\xbb\xe0\x47\x43\xe0\xdf\xb1\x37\x4e\x39\xb1\x35\x43\xb7\x74\x12\xc6\xee\xd6\xd9\x25\xb4\xdd\x69\x67\x08\x43\xef\x14\xb6\xcc\x89\x67\x0f\x8c\x53\x60\x2f\xba\x40\xcf\x87\x17\xc0\x55\x30\x3e\xda\xef\x8e\xf7\x60\x3b\x6c\x63\xa2\x28\xe6\xd5\xc8\xeb\xf4\xf1\xf7\xe0\x0f\xf4\x7c\x30\x06\xb6\xc1\x76\x30\x1a\x84\x95\xb4\x3a\x12\xd2\x96\x69\x23\x21\x35\xad\x04\x61\xad\x9d\x0d\xdb\x19\x2a\x3a\x83\xde\x1f\x89\x30\x2c\xf1\xb7\x11\xf9\x86\xde\x4f\x02\x20\x3c\x1d\x52\xda\x7c\x4d\x84\xd2\xeb\x59\x4a\x93\xaf\xa5\x29\x6c\xc7\x89\x2a\xc9\x7f\x8f\xe6\xa2\x1a\xea\x1e\xc4\xe9\x53\x1c\x16\xcb\xf3\x6e\x02\x45\xfd\xeb\x87\x80\x60\x1c\xfb\x4f\x0f\xce\xc4\x44\x1a\x06\x6f\x9b\x6b\xbc\xd8\xcd\xa8\x01\x43\x80\x62\x1f\x0d\x8c\xa6\x2b\xf5\xbf\x7a\x25\x30\x38\x39\x1f\x9e\x66\x78\x1d\xfa\xc8\xe1\x31\xc3\x86\x69\xfd\xda\x61\xc3\x50\xf8\x9f\x1e\x70\xa2\x5f\xbb\x3f\xac\x3d\x2f\x21\x55\xe8\x03\x8d\xde\x7a\x32\x2c\x6c\x03\x85\x4f\x5a\xf5\x9a\x0f\x74\x89\x39\xfd\xea\xeb\x40\x08\x60\x13\x1f\x88\xfa\x8b\x90\xa1\xee\x9f\xfd\x7e\xe5\xee\x6d\xf8\x6e\x43\x83\x4e\xd7\x10\x02\x4e\x50\x66\x2e\x97\x96\x81\x1c\x6c\x1c\x0e\x2f\x96\x49\xcb\xcd\xf0\x4d\xf8\xb1\x16\xdd\x6c\xf8\xd5\x4c\x58\xb3\x00\xb9\x19\x1f\x7f\x5c\xdc\x97\x4b\x1f\x6a\x29\x45\xd9\x75\xa8\x25\x75\x2a\x00\x62\x4e\x20\xd3\x63\xbe\x20\x05\x37\x8e\x12\xec\x80\x1a\x6b\x67\x31\x28\x20\x16\x0c\xa3\x3b\xc7\x1e\x13\x70\x7b\x31\xa1\x15\x88\x2d\xc6\x67\x31\x16\x11\x90\x16\x40\x80\x5c\x8d\xbc\x97\xb7\x32\x74\xa8\xa9\x09\x37\x44\xb8\x09\x50\x34\x2d\x1d\xd9\x6f\x12\x6f\xe1\x27\xf5\x1b\x29\x25\x7a\xba\x32\xf4\xc7\xc8\x39\x85\x4c\xa3\x35\x29\x32\x3c\x3a\xa9\x42\x26\x97\x29\xa4\x3a\x4f\x86\xc2\xa4\xd5\xc8\x14\x9c\x9c\x91\x91\x54\xe0\x81\x5d\xb7\x45\xf6\xdd\xb6\x4b\x92\xea\x19\xea\x1b\xf3\xa1\x91\x7e\xfd\x03\x4d\xdf\x0c\x5b\xae\x75\x4e\xef\x39\xd6\x5c\x5b\x46\x5f\xcd\x07\xaf\xf3\x29\x1f\x36\x54\x8c\xce\x56\x83\xd6\x70\x08\x9b\x48\x85\xc2\x74\x11\x4b\x8b\x75\x34\xad\x13\xd3\xac\x56\xc2\xf0\x3c\x6b\x17\x9b\xc5\x7a\x5e\xce\xb2\xc9\x8e\xf4\xe4\xe4\x74\x47\x32\xcb\xca\x79\x3d\x8a\xb4\xb3\x3c\xcf\x48\x22\x47\x6f\xbb\xf3\xce\xdb\xca\x17\xde\x31\x6f\x92\xf9\x4a\x28\x24\xd7\x67\x96\x94\x66\x07\x77\x64\x3b\x83\x41\x67\xf6\x8e\x60\x76\x69\x49\xe6\xd0\x21\x9f\xdb\xd7\x1c\xb9\x3b\xb6\x6f\x10\x45\xb4\xac\x0e\x71\xac\x2d\xd8\xda\x45\x49\x63\xab\x0a\x17\xd9\x28\x21\x22\x50\x47\x82\xe0\xdb\xd5\x69\x13\x6e\xa5\x4d\x76\x2f\x96\x84\x06\xc8\x5e\x3b\xee\xee\x31\xa1\x04\x62\xd5\x4d\x78\xaf\x09\x71\xb0\x01\xbb\xe0\x22\x9d\x88\xdb\x33\x81\xff\x26\x19\xbb\x38\x2a\xaf\x5e\xf7\xf2\x8c\xdf\x7c\xaf\x96\x0f\x19\xd2\xbf\x69\x9e\x33\xe5\x06\xd5\xb7\x53\x0c\x5e\x57\x97\xb4\xf2\x59\x62\x0e\x16\x1e\xbc\x69\x4a\x6e\x2a\x4d\x2d\x1a\xf1\xa9\xd5\xc5\xb1\xae\xa4\xa8\x5d\xdf\x6f\xa1\x2e\x65\x1a\xbe\xf9\x5f\x8b\xd6\xef\xb8\xfb\x9d\x6b\x17\x16\x3d\x65\x82\x6f\x3a\xf4\x5a\xcd\xee\xfc\xdc\x0d\xaf\xbc\xc2\x85\x81\xf8\x95\xee\x32\x77\xf0\xf7\x19\xa7\xb6\xd4\xf1\xb2\x2f\x8f\xcc\x7f\xab\xff\xec\xfa\x2f\xd7\xa5\xb8\xe3\x92\xf1\x94\xbc\x79\x88\xd4\xa5\x14\xa5\x1a\xc3\x79\x56\x93\xd5\x32\x73\xa1\x0e\xbd\xd6\xec\x3a\x51\x91\x62\xbe\x1c\xed\xd8\x39\x3f\xcd\x96\x86\x56\x74\x58\xf0\xfe\x4a\x4f\x71\x7b\xcc\xbf\x11\x17\xe6\xda\x10\x8f\x3b\x04\xcf\x84\x76\xbd\x92\xb6\x79\x68\x01\x4f\xc3\x88\x95\x6c\x94\x2c\x6f\x65\xb1\x27\x74\x02\xac\x41\x4c\x18\x19\x41\x56\x95\xa8\x71\xd2\xa9\x97\x17\x9b\x31\xb8\xf0\xca\xb3\x3f\xc3\xf6\x9f\xcf\xae\xac\x5a\xbc\xbc\xbf\x39\x97\xe5\xd2\xcc\x65\x4d\xa5\x99\x2a\xc0\x14\x4c\x5e\x77\xea\xc2\xa9\x75\x93\x0b\x18\xa0\xca\x2c\x6d\x2a\x33\xa7\x71\x6c\xae\xb9\xff\xf2\xc5\x55\x30\xec\x32\x87\x04\x13\x27\xd4\x7a\xb5\x3e\x10\xf6\xd5\x36\x11\x5f\x57\x15\xd3\xca\xd3\xd2\xca\xa7\x55\x14\x0e\xf1\x3b\xe4\x28\x2b\x94\xa1\x34\x25\xc9\xa4\x66\x65\x69\x0e\xab\x5e\x6f\xcd\x48\x93\xb3\xca\x24\x53\x8a\x14\xe5\x84\xf2\x93\x3b\xfc\x43\x98\x21\x10\x3b\x14\x0b\x0b\xfb\x11\xf8\xe7\xab\xad\x05\x8f\x08\x3e\xb1\xe8\x4e\x9f\x35\x29\x44\x7b\xca\x8e\x21\xfc\x04\x0c\x4b\xb7\x1d\x7d\xff\x14\x20\xf8\x72\xd1\x99\x8c\x00\xcd\x79\x18\x98\x56\xc4\xcb\xd0\x8c\x80\x77\x13\xec\x31\x8c\x48\xda\x14\x64\xb0\x00\x9d\x02\x85\x9c\x94\x65\xa2\x3b\xb5\xc5\xda\xe8\x0e\x4e\x0d\x16\x18\x1d\x5c\xbf\xd7\x44\xe9\x46\x43\xba\x68\x57\x89\x96\x76\xcf\x80\x77\xcf\x17\x3b\x74\x79\xb2\xb5\xbf\x13\x39\x72\xd3\xb9\xc5\x70\xf4\x0c\xd8\x16\x5c\x3b\xbf\x3e\x23\xa3\x7e\xfe\xda\x60\x1b\xa4\x29\x91\x84\x61\xa3\x8f\x68\xb5\xf4\x18\x5a\x9b\x62\x00\xc9\xd1\x69\x7a\xb3\x59\x0f\xbe\x6a\x71\x80\x13\x3b\x0f\x7e\xa2\xd1\xd3\x5c\x16\x6c\xa0\x9f\xd0\x9b\x53\x0c\xb0\xe0\xe0\xce\x2b\xd7\x72\x6a\x42\x19\x19\xa1\x9a\x9c\x6b\x98\x87\xa3\x6f\x50\x6c\x98\x8b\x10\xdb\x1a\x0a\xe8\x29\x5e\xe3\x8d\xf7\xea\x4e\x41\x5d\x27\xde\xae\xc6\x03\x68\xe2\x7d\x96\xd5\x66\xe0\xbd\x22\xf4\x63\xc3\xf0\xf2\xe5\xb6\x2e\xd0\x18\x21\xb8\xef\x6f\x6b\xe5\xb2\xad\x9f\x6f\x3c\x0e\xb2\x9f\x88\x50\x42\x8f\xc3\x7b\x3f\x4c\xeb\x27\xf0\x45\xd4\x97\x12\x92\x0a\xea\x44\xac\xfa\x09\xa0\x3d\xb8\xe9\xeb\x5d\x2a\xdd\x2e\xf8\x67\xad\xb0\x9b\x83\x9f\x4a\xdc\x07\xc5\xb6\x80\xdd\x7d\x42\x12\x6f\xc8\x74\xba\x87\x26\x1b\xc0\x26\x10\x03\xc2\xf1\x0a\x65\xa3\xd4\x5c\xab\xd9\x45\x5e\x00\xd7\xad\x1e\x7b\xf0\xe2\x9f\x2f\x1e\x1c\x8b\x4e\x4b\xde\xbd\x0f\xac\x86\x1d\x44\x58\x39\x23\x5e\x34\x78\x9d\x43\x5f\x1b\x0a\x6a\x4b\x22\xb8\xf6\xbe\x77\x97\x08\xa9\xf1\x43\xab\xc1\x6a\x92\x4d\x7b\xb8\xab\x2e\x9d\xba\x28\x2c\xa6\xcd\xe5\x82\xed\x9c\xd6\x80\x9a\xd0\xf0\x2b\x4d\xe8\x73\x51\x44\xe3\x0c\x51\x1c\xac\xb2\x63\xc5\x54\x83\x50\x12\x5e\x14\x2f\x34\x13\xdc\x79\x12\x35\xaa\x80\xd8\x40\x5e\x2b\x04\x2f\xc3\xcb\x27\x77\x1e\xab\x10\xe9\x34\x7d\x0d\xe2\xdc\xd6\xef\x5a\x73\xc5\xa9\xe5\x1a\x9d\xa8\x22\xfa\x60\x57\x25\xd8\xdf\x0d\x80\x7f\x79\x18\xb7\xf2\x86\x84\x47\x49\x70\x43\x12\xe8\xff\xc9\xc3\xc0\x30\xa0\xe9\xa4\x3a\x45\x3f\x6b\xdd\xba\x59\xfa\x14\xf5\xc9\x8e\x2b\x09\x55\x22\xfd\x81\xcc\x35\x55\xd4\x40\xbc\xe7\x1c\x53\x78\x8f\x57\x03\x83\xc7\xfd\x8b\xfa\xe1\x2e\xe2\xa7\x30\x11\x70\xe2\xf1\x1d\xaf\x14\x4b\x61\x9b\xf9\xf8\xd7\x58\x7d\xab\xfa\xed\xfd\xdb\x3a\xb9\x1a\xd8\xde\x5d\x7a\xa5\x91\xba\xb1\x49\xa9\x8d\x6e\x4e\xf8\x36\xa8\xb3\xa0\xaf\x43\xba\xcc\xa6\x1b\x87\xdf\xbe\x75\x05\x51\x27\xd2\x1c\x7c\x0f\xe4\x98\x94\x55\xfd\xa0\x56\xd9\xd1\x94\xf8\xb5\xe8\x4e\xdb\xd2\xd9\x18\x3d\xe4\x3f\xa9\x1b\xfe\x76\x01\x37\xdf\x09\x39\x6c\xe8\x26\x6d\x8f\x4f\x06\x81\x4e\xa4\x62\xbf\xad\x7b\x23\x70\xff\xba\x11\xd0\x47\x5e\x5d\x3c\x4d\x62\x96\x16\x48\x81\x64\xe6\x7c\x72\x07\x11\x21\x1b\xbe\xb9\x71\xd6\xc8\xd8\x8d\x31\xa5\x87\xc1\xae\xc3\xff\x61\x2b\xe1\x6e\xf0\xf6\x61\xdf\x7c\x29\x10\xe7\x8a\x53\xa4\x8b\x5a\x36\x91\x3e\x1f\x2f\xd7\xec\x09\xb1\x1b\x53\x4a\x56\xaf\xbe\xa9\x15\xb1\xec\x87\xc6\xfa\x4e\x5c\x94\x2a\xa1\x82\x54\x2d\xd5\x40\x76\x66\x8c\xb4\xe8\x56\xa4\xc3\xfe\x4f\x88\x08\xee\x21\x68\xd6\x34\x52\x68\x92\x74\x8b\xd4\x4c\x11\x61\x48\x5c\x64\xe2\x05\x1a\x2c\x93\xd3\x80\x22\x14\x46\xf3\x27\x61\x4b\x44\x50\xbe\xf6\x6f\xfb\x12\x28\x06\xa4\x7a\x90\x1b\x0d\x70\x9f\x3d\xf7\xd8\x63\xe7\xce\x02\x77\x64\x37\x62\x5d\x5a\x17\xcd\x38\x70\x60\xc6\x22\x32\xb3\xd2\xd7\xef\x58\xb6\xec\x0e\x3a\xf4\x22\xae\xc5\x8b\xe4\x06\xf3\xd7\x83\xf0\x87\x27\xd4\xdd\x48\xd1\xcd\x04\xe9\x1c\xc8\xd3\x19\x16\x2d\x32\xe8\xe0\x1f\xa2\xef\xac\x07\x73\xd6\xaf\x87\x7b\xe0\x2f\xa5\xc7\xbe\x68\x7b\xb8\x54\x68\x72\xc4\x90\xb3\xaa\x21\x43\x54\x30\x02\x62\xb4\xa1\xf4\xe1\xb6\x2f\x8e\x95\x62\xbe\x0d\xdc\x10\xf1\xb8\xbf\xf5\xa3\xea\xa9\x09\xd4\x9c\x5b\xf5\x39\xc4\x3e\x8b\x28\x5e\x94\xe1\xf6\x30\x01\x61\xea\x74\x76\xea\x61\x76\xef\x9c\xa6\xd8\x80\x02\xc5\x84\x51\x31\x05\x81\x53\x6f\x34\xa1\x56\xa3\x02\x78\xb7\x0b\xd1\x45\x0a\x1b\x16\x92\x4e\x6c\x05\xa2\x6e\x3d\xad\xae\xc2\x98\x06\x7f\x7a\xfe\x03\x78\xb4\xcf\x92\xf3\xbb\xeb\xc5\x92\x3b\xbf\xd8\xbc\xf4\xe3\xd1\xa4\xff\x24\xa6\xeb\x95\xfe\xdc\x2e\x12\x09\x29\xf6\x81\x8f\xd0\x5f\x24\xfc\xe9\x31\x06\x28\xdf\xf5\x7d\xb2\x19\x35\x24\xd3\x8a\x1a\x10\x45\xc0\x9f\x50\x04\xdb\x94\xd8\xd7\x26\xfe\x10\x7e\x0e\x46\xcc\xa9\x1f\x9d\x12\xcd\x38\xfa\xe9\xb2\xcd\x7f\xde\xab\x12\xc6\x60\x28\x31\xd5\xc0\x89\x92\x45\x28\x0e\x1e\xd1\xbb\x92\xdb\x1f\x26\x87\x47\x22\xa6\x54\xeb\x07\xa0\xc2\xb9\x7c\x17\xbc\x1e\xe1\x11\x17\x84\x62\x2c\x69\x1f\xc0\xd3\x28\x06\xb5\xa1\x28\xb6\xaf\x31\x10\xb5\xe1\x38\xaa\xf9\x57\xda\x10\xf5\x99\x7f\x8b\x30\x11\x77\x23\x42\x53\x92\xbe\x47\x58\xbd\x80\x4b\x8d\x7b\x5f\x67\x9f\x53\xa3\x2e\x17\xee\xd1\x84\x36\xf8\x8f\x67\x3f\x7b\x69\xc9\xd6\x9b\xc6\xec\xc1\xeb\xb7\x9b\x92\x81\xe2\xa5\xb6\x97\x76\x3d\xf1\x76\x6c\x54\x52\x61\x0c\x15\x80\xaa\xb3\x64\xda\x81\x03\xd3\x96\xbc\xc8\x94\x0a\x9d\x8f\x5c\x76\x1f\xa7\xa8\xed\x9e\x81\x91\x94\xf4\x55\x83\x55\x37\x0f\x56\xcd\x8b\x20\xfd\x81\x97\x81\x2a\x35\x7d\xd5\x24\x32\x1a\xbf\x89\x75\x43\x30\x1f\x77\xbf\xd2\x87\x41\xeb\xc3\xa5\x91\xce\xae\x07\x43\x0f\x97\x76\xd3\x1d\xea\x45\x90\xe3\x13\xe7\x4c\xbe\x53\x59\x92\xef\x3e\x7b\x06\xba\x34\x26\xff\xe9\x3c\x7a\x71\x9b\x44\xe2\x41\x44\x68\xdb\xe0\xee\xf3\xe9\xe0\x13\x42\xfc\x89\x8b\xbf\x3e\xaf\x7e\xb8\x4d\x6a\x46\x09\x25\xdb\x87\x74\x9f\x5f\x07\x9f\x10\xe2\x4f\x5c\xfc\x27\xf3\x2c\x7d\x83\x25\xf3\x6c\x29\xf1\xe7\x68\xa4\x0c\x7a\x9a\x25\xdb\xba\x5a\x7f\xc0\xd7\xf5\x91\x79\x01\xd4\x49\xa8\x46\xbc\x9e\x5d\xdd\x82\x8e\xd5\x87\x0e\x5f\x06\xee\x27\xe0\x87\xc7\x37\x7e\xbe\x55\x86\x29\x0b\xd9\xfc\x3c\x32\x4e\x28\xc4\x3b\x68\x2d\xf8\x8e\x50\x9f\x71\xc2\x8d\xeb\x5d\xb5\x61\x56\x25\xc1\x17\x3f\x79\x18\xfe\x79\x97\x4e\xb5\xeb\xeb\x4d\x07\x81\xf6\x09\xb5\xf0\xd9\x8e\x8d\x13\x9e\x79\x5b\xa7\x7b\x5b\xc8\x68\xdc\x31\x72\xa3\x23\xdc\x7d\x1e\x42\x2b\x3a\x3e\xcc\xae\x8e\xd7\x85\xa0\xa0\x0b\xa5\x4e\x20\x97\x22\x0a\xeb\xf1\x09\xdc\x96\xd1\xe4\xf5\xc5\x37\x41\xed\x71\x30\xaa\xf8\xb7\xe1\xe7\xea\x74\xf0\x23\x49\x8a\x24\x4f\x2a\x7d\x11\x7e\x14\xa3\xf1\xff\xa4\x8c\xc0\xf5\xa2\x54\x9a\x87\x12\x77\x84\xba\xaa\x44\xcf\x45\x15\x86\x1f\x09\x37\x5e\x14\xa8\x20\x9a\x87\x9e\x00\xd9\x9d\xed\x23\x44\xbe\x28\xbc\x25\xf2\xfd\x4d\xf3\x2a\xf9\x36\x58\x3e\x24\xf0\x90\x9d\x40\x70\x14\x5e\x11\x20\x96\xb7\x93\x0d\xc0\xec\x22\x29\x09\x7a\x41\xec\xe3\x47\xf9\x84\xd6\x25\x0c\x62\xf4\x3e\xa2\x13\x3e\x15\xcf\x54\xb1\x5e\x12\x7d\xb7\xc7\x3b\x11\x81\x0d\xb3\x18\x4f\x18\x83\xb7\xc7\x98\x51\xaa\xb3\x3b\x63\x2d\x2f\x0a\x5e\xef\xe4\x23\x37\x77\xf5\x56\x74\x02\x09\x73\x26\xed\xeb\x8a\x47\x27\x2a\x01\x87\x2d\x23\xc1\xd7\xa6\xc6\x1b\xc0\x8a\xaf\xde\x00\x51\x25\xc4\x00\xc3\x5e\x4d\x27\x70\xdc\x63\x8e\xa2\x22\x07\xbc\xed\x2d\xeb\x57\xf9\xd5\x2b\x2a\x16\x6d\x39\x7a\xe6\x4c\xd4\x8e\xe3\xb8\x70\x91\xa3\xfd\xb8\xa3\x88\x1e\xf6\xed\x9e\x92\x12\xf0\x7b\xc9\x91\x5d\x8f\x7d\x1b\x7d\x1c\xdd\x18\xe9\x28\xa2\x62\xef\xe2\x30\x7d\xab\xc3\x3b\x61\x78\x5d\xc0\x1a\x89\xd3\xd1\x74\x97\x5b\x29\xc2\xc6\x51\xe8\xa5\xda\x40\x97\xd8\x5d\xd0\x05\x67\x89\xd0\x94\x00\x9b\x0b\xbb\xb6\x1e\xa6\x76\xc3\x89\x37\x67\x1c\x06\xea\xe3\xae\x86\xa5\x27\x66\x54\x6f\x4a\x95\x66\xc8\xac\xc6\xec\x22\xa7\x52\xa2\xca\x19\xc3\xdb\x9a\xeb\xcb\xab\x1b\xc7\x84\x02\x13\x2a\x0a\x53\x14\x1f\x3f\x75\x06\xfe\x3d\x39\x35\xd9\x6a\xa4\x55\xde\x21\x39\x46\xe6\xb1\x39\xa7\xee\x6a\x2e\xde\x08\x8f\x34\xbd\x70\x7c\xed\xa0\x50\x89\x7b\x77\xce\x94\x9c\x86\x9a\x22\x4e\x7a\x28\x6d\xdc\x57\x60\x8c\xb5\xb2\x79\xd8\xae\xa1\xc1\xaa\xf6\x60\xc5\xb0\xa2\x91\xcd\x4b\x66\xe6\x3f\x7e\x1a\x46\xdf\xca\x6d\x28\xc8\x91\x58\xc6\x30\xaa\x86\xd9\x73\xe3\x72\xe9\x15\xa8\xed\x36\xa1\xf5\x44\x10\x23\x96\x50\x02\x32\x09\xd1\x3d\x27\xeb\xec\x80\xe0\x8e\xcc\x48\xb4\x11\x01\xa9\x10\xc1\x19\x42\x11\x4c\x22\xce\x2d\x1f\x30\x6a\xe3\x30\x64\x18\xef\x4e\x47\x94\x8f\x98\xf7\xcc\x8f\x72\xb4\x46\x3d\x2f\xbf\x74\xe3\xe4\x1d\x75\x03\x00\xd3\x3f\xc9\x22\x4a\xe2\x75\x2a\xb1\xb8\xa8\x2f\x97\x5e\x5d\x32\x51\x2e\x55\xb5\xac\xb9\xfa\xc8\xd4\xa9\x8f\x5c\x85\xe8\xb4\x7c\xc8\x4f\x87\x11\x59\x07\xa6\x77\x96\x2f\x7f\x07\x5e\xdd\xff\xdb\xe3\x70\xe2\x96\x39\xcb\xdf\xa1\x8b\x1a\x25\x9c\xd4\x9e\xe3\xf6\x05\xf3\x76\xb5\xcc\x1e\x25\x1e\xdb\xc7\xc8\x28\x0c\xfa\x2d\xbc\xa1\x46\xca\x8b\x6b\x42\xbe\x02\x1e\x0e\x89\x65\x82\x4e\x6b\xde\x3d\x76\x75\x50\x33\x37\x1d\x67\x02\xcf\xc1\xab\xef\x2c\x9f\xb0\x09\xec\x7d\xfa\x0f\xfb\x51\xce\xc4\xaf\x4b\x0c\x7f\x4c\xc0\x0b\xd2\x11\x19\xb1\x1b\xb5\x02\x5a\xb1\x04\xec\x3e\xbb\x06\xfd\x3a\x4d\x95\x12\xc2\xda\x4e\x9c\x11\xe2\x8f\x86\xfc\xb0\x8a\x2f\x85\x7f\x22\x5b\x49\x7d\x49\x49\x7d\x7b\x52\xc2\x85\xf0\x77\xef\x75\x0a\xeb\x52\xe3\x5f\x98\x80\xd2\xdc\x4b\x6e\xb0\xb6\x78\x88\x16\x52\x46\x6d\x58\x60\x48\x53\x5d\xc7\xce\x7d\x47\x82\xc5\x9d\x83\x2d\x67\x28\x9b\x4b\x8d\x71\x05\x41\x8c\x85\x4d\xd0\x22\x89\xcf\x03\xf6\xb8\xf6\x08\x71\x70\x6e\x88\x0b\x93\x38\x6f\x7c\x05\x83\x35\x52\xb1\x67\xbc\x89\xf0\xf5\xcf\x31\x3a\x3f\x1d\x02\x4d\x0a\x9d\x4e\x01\x8f\xe8\x14\xad\x0a\x1d\x3c\x82\x2f\x40\x13\xb9\x88\xda\xea\x8a\x01\x55\x3d\x03\x8b\x86\x78\x83\xcd\xdf\x6f\x5a\xb9\x4e\x3f\xe4\x9e\xa7\xef\x19\xa2\xd7\x6d\x18\xf1\x59\x71\x1d\x1d\x8e\x01\xfc\xc3\xfb\x6f\x7e\x5a\xc8\x37\xda\x5a\x5c\xf7\x43\xd1\x9d\xb7\xf9\xa6\x2d\x99\x3a\xb1\x4f\xa6\xa6\x1c\xfd\xd3\x34\xd5\x15\xc7\x75\xa2\xf9\x7f\x90\xfa\x79\xa9\x91\x09\xf5\xc3\x3d\x51\x05\x04\xb4\x0c\x01\x0b\xd0\x57\x5c\x41\x86\x18\x46\x5b\x25\x32\x1d\x7c\xc4\xfd\x95\xe3\x09\xdc\x42\x62\x45\x8d\x36\x52\x4d\xc2\x7c\x75\xd5\xf3\xd9\xeb\x12\xc9\x16\x89\x42\x29\xb9\x7e\x5d\xa2\x54\xa0\x20\x0e\xf4\x88\x89\x1a\x9e\x75\x3a\x87\x19\x4c\xdd\x2a\x7c\x00\x0c\x3c\xa0\xd7\x59\x52\x2d\x66\x67\x67\x7d\xa3\x9f\xfd\xf3\x4c\xba\x62\x9e\x75\xfa\x7d\xce\x61\x4c\x57\xe5\x57\xac\xd0\x88\x52\x3c\x76\xbf\x33\x41\x2f\x56\x4b\x99\x09\xfd\x22\xac\x92\xa0\xa7\x1f\xfb\x84\xf1\xae\x67\xef\xd4\xa4\x01\x94\x08\xcd\xef\x37\xa8\x76\x44\xc8\x89\x10\x88\x0e\xed\xbb\xb0\x6f\xdf\x05\x6e\xe4\xe7\xf7\x47\x43\xe8\x12\x23\xa1\x85\x00\x26\xf3\x04\xeb\x0c\x1a\xf1\xdd\x7d\xa1\xfb\x3f\x47\xe1\x70\x17\x96\x2e\xa6\x63\x46\xa2\xe5\xc2\x78\x0d\x76\xde\x6e\xb0\x4b\x70\x5f\x77\xdb\x7d\x5e\x86\xa8\xbc\xe8\xd0\xac\xd6\xda\x0a\x7f\x08\x80\x1a\x38\x0d\x1e\x44\xff\xa7\x81\x9a\x00\xfc\xa1\xb5\x15\x50\xa0\x0f\x58\x01\xfa\x40\x6a\xce\x25\x11\x05\x43\xad\xe1\xd6\x48\x2b\x83\x4f\xa0\x35\x8a\xaa\x85\xa6\xab\x38\x7d\x11\xde\x83\xe7\x1a\x07\xa6\xcf\x2c\xa6\xcf\x88\xa7\x21\x9f\xaa\x42\x70\xab\x9d\xe1\xd5\xc6\x3d\x8b\xa2\x7a\xb3\x98\xef\xef\x78\xe6\xa2\x5a\x6d\xec\x68\x33\xaa\xd5\x17\x9f\xe9\x40\x7c\xd9\x8f\xc4\x89\x13\xca\x19\xd1\xfa\x97\x37\x46\xc2\xeb\x5e\xe0\xde\x51\x65\x66\xaa\xde\xe1\x5e\x58\xc7\x84\x37\xbe\xdc\xde\x4a\x7c\x36\x81\xf3\x18\xde\xa9\x13\x6f\x2e\xe1\xdd\x39\x82\x34\xe2\xd6\xef\xa7\x13\xde\x4f\xfd\xcb\xb2\x7c\x21\xf8\x2c\x0d\x45\xdb\x18\x28\xb8\x34\x0d\x61\x2b\x94\x5b\x16\x4b\x70\xf5\x0a\x5e\xc7\xc5\x8a\x26\x5e\xc4\xf7\x6a\xee\x44\x74\x68\x29\xf1\xbf\x62\x21\x98\x37\x1a\x32\x41\xc4\xdc\x79\x63\x21\x89\xd1\x24\xa1\xb1\x0f\x79\xb7\x13\xcf\xd5\x12\x20\x44\xd2\x23\x92\x93\x34\x6a\x98\x6f\x48\xd5\xeb\x94\x56\x70\x83\x09\xd1\xc6\xe8\x9f\xd9\xd9\x96\x02\x13\xec\x4f\x27\x47\x6f\xe4\xc2\x15\xa0\x5a\xe3\x50\xca\xe9\x54\x96\x1d\xdb\x31\x3b\xd9\x21\xbe\x2a\xcd\x37\xb1\x8b\xf5\x16\xd5\x0d\x8a\x99\x11\x39\x0c\xa4\x74\xbf\x8e\x2f\x92\xd3\x14\x57\x98\xaf\x98\xc8\xa9\xfe\xf4\x0a\x5a\x65\x11\xc1\x9f\xe8\x6e\xf8\xea\xaa\x9e\xf8\xea\x76\x4d\x4f\x4c\xf5\x76\xaa\x07\x92\x3a\x7b\x5c\xd0\x7e\x4b\xa2\x86\xdf\x10\x89\x1f\xe4\x6e\xc4\xec\x94\xf3\xa9\x6a\x6a\x10\x15\x01\x22\xa0\x05\x29\xc0\x89\xe8\x7c\x6f\xd0\x1f\x0c\x05\x13\xc0\x1c\xb0\x0c\xfc\x17\x78\x1d\x5c\x06\x57\x01\xa4\x15\xe8\xf3\x61\xa4\x34\x17\xc1\x49\x33\x72\x58\xda\x8d\x3d\x31\xbb\x5d\xa2\x00\x09\x13\xa7\x66\x22\x21\x0d\x56\x40\xf0\x1b\x81\x37\x9d\x8f\x81\xeb\xb8\x63\xdb\x99\xc5\x2e\xb4\xd4\xe2\x83\xb4\x15\x00\x23\xe2\x9d\x8d\x42\x8e\xac\x93\x38\xa9\xc6\xd8\xed\x78\x71\x11\x3b\x16\x0b\xeb\x5b\x93\x2f\x36\xed\xe1\xbd\x50\xc4\xc6\xe1\xa9\x2e\x08\xb0\xf8\xc7\x5d\x1c\xf0\xc4\x9e\x43\xab\x3e\xbd\x95\x31\x61\x80\x25\x17\x4f\x30\x96\x3c\xac\x3b\x03\xc3\x2c\x05\xbc\x41\x06\x5b\x77\x99\x04\x91\x2a\xe0\x0d\x58\x0b\x15\x95\x18\x27\xf2\x06\x81\x95\xdc\x21\x28\xa8\x0e\x3d\xef\x17\xde\x69\xc0\xa8\x7d\xa8\x80\x26\x3f\xd0\xe3\x23\xae\x19\x5e\x24\x09\x5e\x14\xd1\x32\x29\xdd\x6d\x34\x15\xa1\xda\x73\x44\xd1\xc2\x45\x7c\x67\x99\x50\xc3\x14\x62\xbb\x32\x00\x03\x40\xfc\xbf\xfc\x44\x00\x71\x1e\x3e\x91\x89\xb4\x93\x15\xcb\x6e\x03\x2e\x2a\xe6\x3f\xc1\x57\xcc\xb8\x78\x9f\xc8\x28\xc4\xbb\x38\xf4\x73\xfb\x44\x0e\xc1\x8d\x89\x53\x44\x3c\x5c\xa3\xf4\x22\x1e\x15\x80\x35\xf9\x33\x50\x73\x14\x07\x41\x39\x30\x90\x37\x13\xcc\x40\xb7\x52\xec\x10\xb9\x95\x0c\x46\xc3\x71\x0b\x31\x78\xc1\x6f\x64\xfc\x18\x59\xd0\xa5\x04\x26\xe1\xf3\x10\x85\x5d\xfc\x14\x62\x12\x8c\x04\x6e\xca\x81\xca\x64\x62\x89\x8b\x7a\x11\x79\xc6\x61\x28\x72\xe2\x6a\xf1\x7e\x9f\x00\x97\x87\x7d\x40\xa2\xac\x38\xbf\x80\x0d\xab\x17\x8a\x09\x3e\x15\xbb\xb4\xc9\x3e\x1a\x34\xa4\xa0\x4a\x15\xf3\x2e\x5d\xb2\x0f\xd0\xc3\x52\x8c\xc6\x52\xc5\xa8\xf4\xbc\x81\x9b\x0b\x32\xf3\xdb\x17\x2a\x46\x0a\x41\x0f\xfd\x36\xc8\x72\xa4\xa4\xfb\x5d\xc5\x16\xae\x65\x48\x7d\x4b\x4b\xdb\x94\xbf\xad\x4a\x99\x7f\xfb\xd2\xa1\xf4\x4f\x62\x1d\x0f\xc6\x86\xfd\x05\x8d\xc6\xe8\xd0\xe8\xef\x4c\xa3\x0a\x47\xbe\x0c\x68\x4e\x27\x16\x25\x2b\x53\x78\x89\xcc\x92\x6a\x55\x98\x2c\x0e\xb3\x56\x2f\xe3\x7d\x8d\x32\x89\x44\x35\x98\x4e\x77\x59\x38\x85\x47\xc9\xd0\xd2\x2c\xa9\x4a\x65\xaa\x06\xc1\x05\x16\x9b\x41\xac\x1e\x68\x2a\x63\x18\x9a\xe5\xb9\x94\xc2\x82\xa2\xcc\x15\xf9\xe5\xd3\x77\xde\xa1\xcf\x2e\xb6\x07\xe5\xf4\x30\xe0\x9b\xdc\x7b\x44\x06\xe0\x78\x96\xa6\x01\x53\x66\xaa\xd1\xa2\x89\xc3\x32\xbf\x77\xff\x24\xa5\x46\x96\x2d\x01\xac\x3a\x57\xc1\x59\x5c\xe9\xf4\x10\xa5\x44\x2c\x6f\xf4\x49\x79\xa0\xd7\x9a\x1d\x16\x93\xd2\x6e\x4e\x91\x49\xc5\x16\x85\x09\xfe\x2c\x69\xb0\xb2\x29\x16\xbd\x6d\xb0\x23\x59\xd1\xc7\xaa\xe0\x98\x12\xaf\x6a\xa0\x55\x99\x2d\x33\x18\xd5\xd6\xeb\xaf\x59\x1b\x24\x76\x9d\x25\x25\x33\xb5\x5a\x91\xec\x70\xaa\xbc\x01\x56\xf2\x92\xb2\x97\x2e\x23\xcf\x63\x4e\x66\x2e\x8b\x35\x0c\xa3\xd0\x64\xe6\x82\x24\xd8\xf6\xed\x43\x0f\x7d\xfb\x90\x7f\xe6\x2c\xc0\x4b\x53\xd7\xa6\x49\x58\x0e\xfe\x24\x66\x58\xfa\x02\xcd\x8a\x44\xb2\xf4\x4d\xf0\x5e\x75\x56\xa9\x4a\xcb\x30\x52\xae\xef\xeb\x8c\x73\x03\x30\x3d\x74\x02\x18\x0e\xda\x19\x40\x6b\xaa\x54\xe6\x12\x6f\x1a\xc7\xf2\x52\x5a\x24\xe1\xe5\x62\xb5\x58\xc7\xce\x2a\x65\xe5\x56\xb5\x45\xc4\xfc\x57\x12\xed\xcf\xcf\x95\x8b\x35\x92\xb2\x54\x30\x94\xd1\x54\xbb\xb3\x6e\x6b\xe4\x1c\xeb\xfc\xde\x91\x0a\x13\xfb\xdb\x37\x26\x1f\x9b\x24\x32\xd1\x69\x12\x79\xae\x54\x07\x68\x46\x37\x82\xd6\xd3\xd3\xe0\x13\x75\xf5\x62\x71\x65\xe8\xfc\x79\x00\xd8\x23\x6c\x92\x52\x07\x18\x95\x2a\x5b\x29\x49\xa3\xd5\xf2\xf7\xfe\xeb\x4d\xba\x89\x6b\x5c\x9e\xed\xea\xab\x61\xa4\x23\xbd\xfe\x75\x5b\xd5\x4e\x5e\x92\xac\x33\x56\x71\xac\xd7\x90\x10\x6e\x4c\xa9\x94\x28\x1c\x76\xcf\x5c\x8e\x1b\x91\x9e\x10\x66\xab\x54\xe2\xbc\x14\x47\x51\x8e\x49\x37\x70\xe6\xcc\x3d\x33\x3f\x9a\x9b\xd7\xa7\x77\x8d\x28\x73\x6e\xfb\x15\x59\x9a\x49\x53\xb2\xa0\x1f\x4d\xe7\x67\x27\x27\x67\x15\xd0\xcc\xc1\x61\x46\x6d\x9a\x4c\x2a\x31\xa6\xa6\x4a\xa4\x4a\xbd\x32\x55\x2c\xb7\xa0\x4f\xa6\xaa\xa1\xa5\x7d\x7d\xae\x9c\xa0\x5d\xe3\x94\x26\x6b\x39\x2d\xc3\x02\x0e\xc8\x44\x99\x8c\x88\xa5\xed\x69\x19\x2d\x25\xab\x7d\x6a\x53\x2a\x30\xab\x93\x94\x8c\x92\xf6\x58\x58\xad\xa7\xcc\x57\xa3\x10\xab\x14\x62\x25\xb3\x1a\xfe\x63\xf8\x9d\x52\x1d\xa3\x4c\x52\x29\x95\x96\x24\x4d\xf1\xea\xd2\x16\x87\xcd\x4e\x4b\xe9\x2c\x4e\x8e\xf2\xe1\x18\x94\x63\x92\xd8\xa5\xb1\x55\x64\x66\xf9\xfa\x49\xe8\xc2\x24\x15\xea\x44\x16\xb9\xc4\xa2\xd6\x2a\x24\x52\x8b\xd5\x20\x66\x9e\x4c\x4d\xb6\x4d\x75\xae\x4c\xd5\xb1\x4b\xb3\x37\x96\x29\x6c\x4a\x65\x68\x9a\x5a\x25\x05\x8b\x56\x31\xd5\x9b\x0a\xa7\xda\x92\x53\xb5\xac\x2e\x75\xe5\xd6\x34\x65\xd9\xc6\x6c\x91\x4a\x3d\xb5\x52\x53\xb9\x6a\x3e\x8b\xda\x72\xf4\x6c\xc6\xed\xda\xae\xd3\xf2\x62\xfd\xfa\xde\x34\xbd\xfe\xd8\xe2\x25\xc7\x8e\x2d\x59\x0c\x5d\xa8\x23\xa6\x2c\x45\x83\x4a\xc6\x0c\xe8\xf3\x12\xdb\xd8\x88\x9a\x5d\x3f\xbc\x81\x53\xd1\x67\x7a\x2d\x4b\x16\x8b\xb4\xea\x3d\xa9\xf4\x3a\x93\x62\xfb\x9b\x81\xc2\xd7\xf7\x2b\x0c\x34\x83\x41\x7c\x68\x1e\x8c\xc9\x46\x43\x52\xac\x28\xe4\xc4\x22\x0e\xbb\xb6\x04\x12\xbd\x46\x27\x63\x68\xa0\x29\xad\x90\x88\x3d\x0a\x45\x6a\x06\x6a\x96\xe8\x06\xa5\xba\xff\x52\x99\xdc\x37\xdb\xef\xab\xa7\xe9\xde\x57\x2a\x4a\x16\x94\x17\x6f\x99\xc4\x4a\x80\x88\xd6\xea\x4c\x32\x85\x6c\x58\x9f\xf4\xb3\x06\xc3\xee\x42\x87\x91\x61\x0c\x96\xde\x61\x90\xef\xaf\x72\xd9\xc1\xa0\x3a\xd4\x7f\x92\xf4\x5a\x96\x63\xc5\xaf\x4d\xe8\xb5\xcd\x3f\xdb\x27\x97\x2d\xeb\xa7\x56\x16\xa2\xe2\xd7\x0b\x3c\x43\x1f\x09\xe0\x5e\x25\x9c\x79\x2f\xe2\xcf\xbb\x9b\x96\x02\xb0\xa2\x76\xf5\x16\x59\x59\x4c\x92\xf8\x20\xe7\x41\xa7\x0c\x0f\xcf\xfd\xbd\x69\xcb\xa4\x49\x5b\xa2\x8b\x26\x6d\x69\x6a\xda\x12\x1d\x53\x3a\x7b\xf3\x1d\xbf\x3d\x0b\xdc\xa0\xf4\xd2\xd6\x3f\xdc\x33\x29\x8f\xc9\xee\x3f\x67\xd5\xa0\x17\xa7\xa5\x4e\x1c\xdf\xd4\xcf\x25\x1f\x72\x00\x9e\x7c\x04\x5e\xb9\xf2\xea\xba\x45\xd5\xd5\xf6\xfc\x1c\xfc\xd0\x24\xf2\xe8\x24\xae\xb0\xf7\xe8\x5a\x6f\xa6\x49\xc9\x49\x4d\xb6\xfc\x92\x01\x43\xa7\xcd\xa9\x3c\x34\xc6\xbb\x78\xe2\xf4\xa1\xf5\xbd\xbd\x69\x6a\x86\x56\x5b\x8b\xbd\x03\x7b\x0d\x0f\x0c\x8d\xeb\x1c\xc4\xfc\x72\xa5\x11\x54\xd0\x5a\x6a\x06\xf6\xe6\x42\x75\xf7\x54\x84\x11\x1d\xbb\xc1\x34\xeb\x8a\x10\x2b\x82\xf8\x76\x34\xcf\x7b\x59\xb2\x58\xe4\x3b\xc5\x09\x58\xf9\x86\xb6\xb1\xda\xb8\xcd\xb3\xce\x20\xe8\xdc\x09\x20\xd7\x88\xeb\x8f\x5f\xb9\x6c\xa2\x9e\x58\x88\x6c\x16\x7c\x02\xbe\xf7\xd9\x86\x0d\x9f\x81\x62\xd0\x00\x8a\x71\x28\x3a\xf7\x66\xa4\xe7\x85\x6a\xb5\x4d\xad\x06\x2b\x67\xd5\x3a\x52\xc9\x12\x3f\xd5\x31\x54\xb0\x6c\x8e\x9b\x4a\x7f\x40\xa2\xd7\xbf\xb4\x9e\x9c\xcf\xc1\x2b\xe7\x98\x26\x97\x39\x12\x8e\x03\xaa\x73\xad\x1b\x3e\x83\xef\xf5\x78\xdb\xef\x6e\x81\x0b\x1d\x1d\xac\x86\xf8\x5d\x6d\xea\x50\xad\xcf\x51\xa6\x59\x88\xe5\x05\x0b\x35\x65\x0e\x1f\x53\xdb\xc3\x30\x1b\xfe\x20\x88\xd3\xc6\xaf\x5f\x3f\x5e\x08\xed\x3a\x77\x2e\x72\x17\x4d\x50\x11\x09\x54\x6f\xdc\x9e\x4c\x22\xe0\xca\x9b\x08\x5f\x87\xd7\x62\x5e\x8d\xa3\x47\x53\xf8\x08\x37\x65\xe8\xa9\x5a\x55\x64\xe4\xc3\xd7\xc3\x3c\x5a\x8b\x69\x95\xd7\x88\x12\x3c\x4f\x6c\xe4\x6b\x7d\x13\xaa\xae\xb5\x56\x4d\x98\x50\xc5\x87\xaa\x26\xf8\x6a\x59\x0a\xf3\xb2\xd1\x56\x10\x16\x04\xfa\x11\xc1\xf6\xfd\x08\x0c\xfb\x6a\x8f\xe0\x64\x0c\x49\x7c\xa4\x96\xea\x51\xa6\x94\xce\x32\xc5\xe4\x11\x3d\x8a\x60\x48\x06\x37\x15\x15\xb1\xf5\x1c\x45\x13\xfb\xa0\xc4\x52\xf4\x28\x22\x2a\x0e\x45\xb7\xd6\xfa\x7a\x14\x21\xda\xd4\xbd\x8c\xc0\xf6\x7f\x51\x1e\x06\x2d\x6d\xff\x7f\x2a\x0f\x8d\x38\xd2\xff\xb3\xf2\xd0\x9d\xe5\x31\xa1\x51\x4b\xfd\x4f\x4a\x22\xfe\xf5\x52\x30\xff\xd6\xfb\xb1\x2c\x89\x63\x57\x22\xba\x61\x21\x28\x9e\xe8\xb5\xba\xb8\xab\x4c\xe2\xd1\xc4\x15\xf3\xfc\x6e\x62\xe7\x12\xf7\x1f\xeb\xde\x96\xea\x93\x4e\x26\x17\xc8\x4e\xc1\x33\x3a\xb3\x5c\x9e\x99\x29\x97\xa7\x68\xc1\xf7\x56\x77\x26\xcc\x40\xd1\xb5\xe8\x36\xf8\x1d\xba\xc7\x69\xb2\xb9\xb6\x6c\x0d\xa7\x13\xf0\xab\x19\x2c\xeb\xc3\x3e\x0a\x6c\x06\x8c\x58\xa5\xd1\xdb\xd1\xd1\xe6\x16\xd9\x1d\x3e\xaf\xcd\xa7\x41\x47\x4d\x31\x09\x9b\xfc\xe8\x0e\x13\x82\xad\xe1\x30\x08\x85\x42\xf0\xc7\x96\x16\xf8\x63\x28\x04\x42\xe1\x30\x6c\x45\x67\x75\x4b\x0b\x50\x87\xb8\x70\x1b\x6c\x0a\x47\xdb\xda\xc2\xbb\x76\x85\xdb\x68\x5b\x18\x1c\x21\x41\xa1\x39\xe3\x76\x0d\x71\x6f\x0f\x39\x04\xf5\xa2\x17\x91\x9c\x62\x5c\x18\xa2\x88\xa4\xc1\x23\x15\x9d\x7d\x76\xce\x40\x9c\x30\xfb\x34\x3e\x87\xc1\x89\x0a\x42\x34\x5a\x51\x29\x89\x3f\xdd\x98\xc1\x3a\x3e\x13\xfb\x75\x83\x18\x8d\x58\x18\xee\xa0\x20\x76\x6e\x1b\xe6\x28\x80\xb1\x7a\xb1\x48\x45\x84\x7e\x1d\xc2\x19\xa2\xd8\x08\x4a\xc5\x84\xb1\x73\xd4\x28\xea\xc1\x37\x50\x7a\xec\x0b\x58\x78\x8a\xa5\x40\xdc\x3f\x6e\x3b\x16\xfa\xa3\x08\xc1\xe7\x03\x0e\x45\x29\xd2\x83\xc2\x34\xee\x45\xf8\x01\x4a\xc0\xce\x41\x15\x43\x75\x4a\xeb\x94\x11\x79\x63\x3e\x2c\x46\x75\xaf\x55\xf7\xba\x69\x1c\xf1\x1a\x82\xc4\x5a\x3a\x0c\x5e\xa7\xbd\xab\xaa\xd8\x7b\xb0\x1d\xfd\x50\x3f\xf3\xd9\x63\x59\xa1\xd5\xb8\x4f\x42\xea\x8a\x6b\x82\xfe\x84\xa2\x33\x58\x74\x84\x35\x9e\x50\xad\xa3\x54\xb8\x1d\x45\x72\xe8\xd7\x81\x6e\xa0\x2a\x08\x7e\x29\x70\x44\xfc\x11\x86\xc0\x18\x0b\xcf\xe2\x1f\x4d\xce\x30\xe6\x1c\x98\x1c\x3b\x62\x4d\x41\x93\xed\x8f\xa8\x70\x07\xb5\x5b\xec\x9d\xb8\x01\xba\xd6\x82\x1a\x8c\xef\x09\x34\x89\xa3\x03\x5d\x88\x4c\x76\xdc\x6b\x79\x96\x8a\x34\x61\x00\x14\x2e\x94\x59\x42\x5c\x14\x83\xdb\x55\x45\x2f\x14\x35\x00\x1b\x6c\x12\x62\x4b\x32\x23\x4d\x25\x03\x1a\x50\xa4\x8a\x4a\xb4\xb5\x11\x11\xbf\xca\x14\x76\x02\x57\x01\xfc\xce\xb8\xf4\x03\xd3\x6e\xec\x70\xb1\x9b\xa5\xd0\xf2\x6b\xa9\xf2\x17\xe5\xf0\x27\x60\xeb\x40\x1d\xbb\x04\x9c\xc9\xb4\xbc\x60\x69\xca\x8c\x50\xf1\x57\x03\xea\x9a\x14\xa5\x38\xc4\xa0\x0e\x01\x6c\x99\x25\xcc\x11\x74\xaf\x09\x25\xca\x8c\x15\x02\xf7\x53\x51\x02\x7e\x56\x12\xfa\xa6\x95\xd4\x70\x6a\x2a\xb1\xba\xec\x04\x24\xf4\x77\x86\x8d\x5e\x23\x47\x9c\xa5\xa0\x31\x69\xc0\xe0\x10\x36\xa7\x0f\xe3\x7d\x17\x93\xf5\x22\x76\x77\xe5\x22\x96\xcc\x01\x62\xba\xe6\x13\x3c\x6e\x63\x3f\xa4\x1a\xfb\xcd\xa6\x4e\xfc\xfd\x69\x26\xb1\x74\xff\x7e\xa9\xd8\xa4\xb0\x9a\x18\xf9\xd6\xad\x8c\x0c\x98\x3a\x66\x7e\x59\xd7\x67\xce\x6d\xbe\x2d\x59\xd9\x60\x00\xfd\xce\x94\x69\x73\x56\xac\x98\x33\x6d\x4a\x41\xb3\xc5\xb2\xe6\xf9\xc9\xb9\xb9\x93\x9f\x5f\x33\x8d\xa9\x19\x59\x55\x1a\x6a\xa8\x42\xec\x24\x2c\x05\x7f\x19\x38\xb1\x3b\x44\x51\x71\xb1\x93\xa3\xb7\xd1\xdc\x93\x45\xe9\x2c\x58\x0b\xd8\x36\x50\x0c\xdf\x2b\xab\xe9\xd5\xa2\x52\x03\x60\x5f\x50\xcc\x8b\x27\xbf\x34\x59\xcc\x7b\x5b\xe4\x2a\x9a\x16\x65\xd6\x37\x2d\x6e\xaa\xcf\x14\xb1\x77\xf9\xfb\x72\x8c\xb8\x8f\x27\x50\xc5\xa0\x75\x77\x0d\xe3\xef\x86\x3f\xc4\x75\xb6\x13\xc6\x3a\x30\x53\x1e\x2a\x88\x7b\x80\x12\xf1\x1f\x19\xa8\x92\x1a\x3f\x45\x3c\x9f\x79\x88\xeb\x4e\x1b\x0b\x88\x21\x37\xb1\x50\xd5\xb2\xa8\xb6\x41\xfa\x26\xab\xa9\x31\xb3\x36\x6c\xa0\x27\x6f\x98\x35\x0b\x8c\x3d\x04\x7f\xba\x7f\xd9\xe5\x43\xe3\x0f\xa1\x6f\x1c\x04\x4a\xda\x32\xff\x85\xbf\xad\x87\x7f\x78\x0a\x5e\x7e\xf2\x09\x90\xfd\x04\xc8\x5b\xfb\xf3\x0b\xf3\x41\x63\x62\x2d\x81\x9b\x7e\x36\xeb\xd5\x3f\xbf\x8a\xfe\xb2\xa2\x03\xb3\xc0\xfb\xf0\x75\xf8\x13\xca\xe1\xf2\xb2\xfb\x81\xf2\xd0\x21\x58\xb7\xf5\xe7\x87\x9a\x1e\x80\x1f\xbe\xf4\x18\xfc\xf8\xf8\xb4\x47\xbf\x63\x44\xdd\x71\xb0\x98\x6e\xbc\x1a\xe2\x2d\xb9\x1e\xb4\xfd\x26\xfc\x68\x83\xa3\xcb\x80\xcd\x48\x70\xfb\xba\xb0\xa9\xc2\x3a\x45\x47\x2b\x96\x6e\xb2\x21\x85\x2e\x3c\xa1\xaa\x83\x90\x7a\x16\x4d\x07\x68\xec\xc4\xef\x1d\x39\x12\x8f\x6c\xc2\xc9\x62\xd1\xec\xa0\xae\xc4\x13\x40\xf0\xc8\x91\xf8\x9d\x70\x2c\x2e\xe6\xef\x55\x8c\x69\x37\xd6\x65\xf5\x51\xe5\xd4\x08\x6a\x2e\x96\xc5\x60\x29\x1d\xc6\x91\xd7\x74\xca\x7f\x3b\xa5\xbe\x68\xf9\xdd\x79\x41\x50\xc6\xe3\x49\xd8\xb8\x4c\x4b\xd8\x71\x21\x8a\x85\xfe\x22\x93\x95\xe5\x7a\x46\x88\x5a\x11\xed\xa4\xae\x63\x0a\x4a\x81\x67\x95\x15\x99\x34\xe1\xc2\xda\xc9\xec\x46\x37\x65\x56\x28\xa1\x81\xcc\x60\x7f\x31\x4c\x5e\x35\xd9\x00\xfe\x42\xb6\x0f\x2b\xaa\xf2\xf3\xab\xf2\xd9\x1d\xe3\xef\xda\xbd\x61\xf7\x5d\xe3\xfb\x2d\x9c\xda\xcc\x6a\xeb\xb4\x6c\xf3\xd4\x85\xfd\x3a\xa8\x5b\xc5\xb2\x21\xec\x7d\x21\x1a\x62\xc2\x28\xcb\xf6\x9f\xbb\xe0\x89\x38\x19\x7a\x29\x09\x95\xf6\xef\x5f\x4a\x02\xea\x7c\x9c\x7d\x64\x52\xcd\xe2\x2a\xbb\xbd\x6a\x71\x8d\x6c\xdb\xfb\xcf\xbd\xc4\xdb\xed\xfc\x4b\xcf\xbd\xbf\x4d\x76\xcb\xd8\x44\x19\x67\x1e\x35\x08\xf5\x5a\x35\xcd\x1b\xb5\x71\x95\x87\x2e\x17\x5c\x6a\x6d\xc0\x45\x6b\x12\x36\xf1\xc9\x6d\x10\x64\x7c\x76\x34\xa6\x4d\x56\x6c\x71\xa7\x64\x0c\x76\xd4\xb5\xdd\x1e\x94\x84\x0b\x5f\x3c\x72\xe4\xa2\xd0\x26\xa4\xc8\x4d\x9d\xd7\x9c\x60\x4f\x79\xe7\xa0\x1d\x8b\xfa\x45\xa8\x7e\x8b\x76\x0c\xd2\x99\x4c\x3a\x7c\xc5\xc6\xaf\xb8\x30\xec\x80\xf3\x67\xcd\x82\xf3\x61\x47\x02\x3a\x13\x07\x76\xa2\x11\xb1\x13\x70\x09\x28\x4d\xbd\x53\xd7\x3c\xfd\xd3\x86\x0d\x3f\x3d\xbd\x26\x95\xb7\x67\xda\xf9\xee\x97\x89\xb2\xd5\x3c\x32\x1f\xfd\xcf\x6a\x98\x03\xec\x7a\x93\x1d\x9b\x4e\xd3\x6e\x07\xaa\xdf\xbf\xac\x56\x5b\x84\x92\x30\x3f\x48\xaa\x17\x6c\xab\xfb\xba\x6e\xdb\x82\xea\x7f\xbf\x26\x55\xc1\xf2\xf6\x3e\xeb\xfe\x7a\x72\x4d\x5a\xda\x9a\x93\x7f\x5d\xd7\x5d\x2e\x8c\xcb\xde\xeb\x3f\x2b\x3b\x83\x7a\xbb\x03\x8d\x83\x7f\xa7\xe8\x23\x98\x91\x23\x4a\xfd\xcf\xcf\xf8\x7a\xc6\xf3\xfe\x7f\xbf\xe4\xe7\x9e\x7e\x3a\xa2\xdc\xfe\x76\x76\xf6\xdb\xdb\xbb\xf7\xa7\xfe\xff\xbb\xfe\x24\xe2\xed\xae\xff\xac\x33\xdd\x31\x9b\x7e\x65\xf6\x1d\xff\xbb\x8e\xe4\xdd\xb9\xd3\x2b\x74\xa1\x84\xef\xa0\xa2\x4a\xb1\x47\x3b\xae\x07\x49\x09\x04\xc5\x01\x8f\xd8\x6d\x57\x8a\x79\xab\xd8\xa4\xeb\x71\x97\x6b\xeb\x2a\xf9\x64\xc6\x9c\x5e\x56\x58\x5f\x3c\x3a\x37\x27\x27\x77\x74\x71\x7d\x61\x59\xba\x99\x61\x23\xb7\x8a\x9d\xdc\xf5\x54\x48\xab\x0c\xe3\x33\x3a\x84\x02\xcd\x23\x1b\x43\xb5\x79\x95\x56\x8b\xc5\x5a\x99\x57\x1b\x6a\x1c\xd9\x1c\xb8\x55\x1c\xd6\x95\x89\x3f\x94\xa0\x3b\x41\xa1\x59\x7c\x16\xfa\x2e\x64\xb7\x37\xe6\x52\x5d\xe3\x16\x02\xa8\xd4\x26\xbc\x4f\x44\x68\x3c\x2a\x7a\x40\xe7\x8f\x01\x8e\x09\x69\xdd\x89\x41\x77\x11\xf1\x05\x4e\x0e\xe8\x41\x02\xd2\x25\x4c\x0a\x40\xa8\x76\x91\x49\x30\xe3\x63\xd0\xe2\xc8\x16\x2a\xf0\x54\x91\x83\x03\xf8\xdd\x2e\x33\x8d\x96\xc5\xd2\x39\x52\x12\x5b\xe4\x56\x4a\xd0\xa9\xb2\x88\x13\x0f\xaf\x2c\xad\xea\xd5\x9c\x9e\x62\x9b\xba\x4d\x31\x57\xd4\x52\x1f\x0d\x0f\x9f\x03\xdf\xab\xdb\x3e\x45\xc6\x89\xb6\x4e\x2c\xf6\x0c\x60\xc3\xb5\xbe\xf0\xf8\x82\x3e\x55\x1e\x38\xcc\x7a\x02\x9f\xdb\xf2\x1d\xf0\x92\xbb\x02\x2f\x7b\x93\xb3\x32\xc0\x33\x19\x59\xbf\xe0\x68\xdb\xed\x99\x95\x62\xba\xca\x13\x5e\xe1\x1d\xc4\x81\x70\x51\xba\xbf\x90\xbf\x7b\xea\x2f\xde\x52\x58\x97\x94\x5f\xdf\xb2\x64\x38\xc8\xac\x99\xde\x36\x65\x3b\x98\xb8\xce\xd0\xb7\x6b\xaf\xa7\x09\x7d\xe3\x42\x0a\x03\x72\xe1\x66\x71\x08\xb6\x20\xc9\x20\x0e\xc2\x08\x48\xcb\xa0\x66\xf1\xc5\xac\x44\x1c\x09\xe7\xce\xb6\xf0\xe3\x25\x12\xcf\x08\x2c\x99\x1b\xc4\xac\xfe\x84\x6d\x0a\x3f\x73\x78\x5c\x95\xad\x6a\x5c\xd5\x01\x57\xc8\x57\x8b\x55\x71\x43\xf4\x53\xe9\x7e\xbe\x8e\xab\x12\xe2\x6d\xcf\x6c\x59\x94\xa6\x33\x4d\xd9\x3e\xf3\x1e\x71\x9d\xf2\xf6\xa1\xd1\xfa\xde\x73\x33\x60\xd8\xbb\x6f\xd6\xe0\xa2\xed\x53\x4c\xba\x34\x2e\x5c\xe5\x89\xb6\xd0\x6a\x6c\x1e\x1a\xfd\xf1\x06\x75\xd6\x5b\xeb\xcb\x49\x87\x94\x37\x37\x1d\xec\xb5\xa5\x80\x9f\x88\xdd\xe8\x8f\xf1\x04\xf4\x0e\xcf\xeb\xfd\xcb\xd9\xed\x53\x34\xa2\x6d\x33\xa1\x32\x33\x07\xce\x19\xd2\x1c\xc8\xa7\xa9\xea\x91\xb3\xf6\xa5\x83\xa7\xa7\x6c\x67\xcb\xe3\xfb\x40\x82\x0e\xb0\x0b\xcd\xa2\x03\xa9\xc9\xd8\x8f\x31\x87\xd7\x57\x82\x98\x25\x60\x17\x54\xc6\x3b\x91\xa6\xb9\x98\xba\x12\xcf\x89\x18\xcc\x7f\x0a\xf0\x45\x78\x43\x86\x74\x19\x9e\x23\x18\xbd\x38\x2a\x08\x18\x67\x1c\x96\x9a\x33\xc4\x30\x47\x02\x78\x7b\x92\x21\x77\x05\x1b\x7f\x3e\xe6\xbb\xa2\x1c\x78\x89\x69\x24\x16\xf4\x70\x6c\xe1\xc9\xa3\x15\xa6\x60\x0d\x07\x3b\x66\xed\xdb\x37\x6b\x41\xee\xc0\xb1\xfb\x66\x79\xf2\xe8\xc5\x68\x00\xef\x9b\x33\x12\x3e\x3e\xee\xee\x83\x47\xad\x19\x55\x1e\xb3\x1e\x34\x14\x56\x80\x10\x0e\xc1\x4f\x2d\xda\x1c\xb5\xba\xa2\x48\xaf\x05\x4d\xd6\x8c\x6f\xa3\x4b\x93\x8c\xbe\xda\x3c\x27\xad\x8c\x92\x15\x29\x6d\xba\xea\x99\x3f\xa7\xa1\x06\x0c\xcb\xf1\xa3\x25\xe8\x7b\x5b\x32\x70\xbb\x97\x16\xf7\xf5\xb8\xe0\x3b\xe1\xed\x85\x3e\xce\xba\xa4\xaf\x4b\xba\xef\xc2\x3e\x8d\x65\x7d\xfd\xac\x7d\x9a\xbf\xee\x9b\x15\x9d\xda\xb8\xd5\x30\xc2\x44\xbf\xd5\x7f\xa0\x32\x60\xf7\x54\x49\x0f\x48\xeb\x8b\x6e\x50\x28\xb0\x41\x21\x36\x1b\x9c\xc6\xa2\x90\xe4\x88\x32\xc0\x68\xae\x89\x6b\x7d\x99\x55\xca\x33\xa1\xda\x59\xb5\xb3\xde\xac\xc8\x99\x1e\xa1\x74\x23\x64\x7d\x73\xe9\xfb\x7c\xb5\xab\xed\x85\xf0\x92\x27\xd8\xcf\x73\xfe\x7c\xbf\x5c\xf1\x50\x5f\xf6\x00\xcd\xf6\xce\xbe\x47\xd6\x83\x19\x04\x1f\x0f\xf5\x24\xd0\xe9\xc4\xaf\x1c\x38\x3b\x99\x15\xfc\x11\xdc\x42\x18\x68\x8a\x51\xd7\x22\x2c\x17\xc6\x98\xc5\xe0\x86\x06\x7b\x0c\x35\xc9\x6b\x27\x5a\x15\xb1\x55\x01\x1e\xd6\xb8\xdf\x9a\x38\x8c\xce\x1c\x13\x7e\xad\x29\x9f\x97\x41\xf7\x5e\xda\x52\x0f\xc3\xf5\x2d\xf0\x8b\xe8\xa7\xf5\x2d\x8f\x2e\x03\x0f\x66\x47\x1b\xa6\xee\x16\x57\xb6\xd4\x8b\x5a\xc7\x47\x7f\xeb\x0e\x45\x2a\xcd\x2e\x46\xad\x91\x7a\xd3\x98\x50\xa4\x15\x85\xc5\x03\xf2\xe8\xf0\xd8\xcc\x12\x2e\x24\x2d\x4a\x83\x7d\xab\x26\xa0\xb1\x5c\xa8\x56\x80\xf2\xa4\x54\xac\x54\x6e\x76\x89\xa8\x92\xc2\xc8\xdf\xee\x3f\x03\x0f\x61\x8f\x2f\x27\xef\x6e\xa9\xb7\x2d\x7b\x34\xbc\x79\xca\x90\x19\xb6\xfa\x96\xeb\xad\x60\xca\xa1\x35\x8c\xa2\xd8\x65\xb6\x39\x3c\xfa\x34\x97\xcd\x65\xce\x55\xe6\x96\x95\x64\xaa\x54\xad\xa9\xce\x09\x55\x36\xb3\x8b\x3f\xac\xf0\xa4\xbc\x41\x04\x58\x02\x26\x1e\xe6\xed\x8a\xa8\xc5\x98\x66\xa1\x35\x3f\x1a\x4d\xe4\xe0\x8f\x41\xbc\xa5\x80\x18\xd4\x1b\x36\xa8\x65\x62\x90\x24\xd8\x64\xc9\xc1\x60\xed\x74\x07\x13\x07\x93\xd2\x25\x04\x51\x83\xe9\x70\x33\x15\x05\x80\x60\xa8\xc7\x73\xbe\x62\x33\x08\xc4\xc1\x4e\x18\x87\x0e\x07\xc1\xbb\x83\x6e\xd3\x4d\x53\x70\x8b\xf9\x55\xe3\x35\xeb\x47\x0d\x5b\xa7\x1f\x36\x43\xbf\x6e\xd8\xe8\x8d\xca\x71\xcb\xf9\x95\xd2\x80\xb1\x20\xbd\x30\x79\xe6\xbe\xd2\x22\xc8\x55\x8f\x28\x74\x95\x4b\x1e\x5c\xb3\x53\x52\xee\x2a\x08\x31\x1b\xcc\x53\x24\x41\x57\x7e\x15\xb3\x98\x67\xc5\x53\xc5\xc5\x76\xfa\xb9\xec\x74\xd0\x51\x52\x5b\x8c\x86\xea\xd9\xd0\x00\x86\x0d\xe5\xbb\xcb\x25\x8b\xcd\xfb\x98\x8a\x1b\xd4\xc4\x5a\xb0\xb3\xd4\x9b\x67\x04\x9f\xa4\x58\xc7\x6f\x91\x8e\x98\x33\x63\x28\x7c\x10\x9c\x18\x3a\x63\xd1\x28\xe9\x9d\xe3\x93\x1c\x90\xe2\x73\xd4\x56\x99\x6c\xcf\xcc\x60\x8b\x0b\x6e\xf0\x8a\xc2\x05\xae\xe8\x48\x7a\x8c\xab\xa0\x2a\x5f\xa5\x88\x7e\x02\xee\x75\x7a\xab\x3c\x4a\x39\x4c\xb7\x2c\xb6\xc2\xf9\xb6\x2c\x33\x58\x99\xd3\xa7\xb8\xc6\xfc\xf5\x9f\x58\x20\x07\x99\x0a\xad\x2c\xbf\xba\xc0\x05\xad\x74\x8b\x52\x59\x50\x1d\xdb\xf3\xc5\xed\xea\x25\x08\x24\x53\x08\x12\xd7\xad\x29\x5d\xb9\xe0\x64\xdc\xe1\x4b\x98\x07\x84\x00\x1a\xb5\x6e\x42\xee\xbc\x64\x26\xe8\x9a\x08\x6e\x26\x7c\xba\x98\x97\x29\xfc\xc3\xb2\xbb\x7b\xb2\xaa\x8a\x07\x0a\xc4\xef\x9c\xd1\xc1\x8d\x4b\x2a\xa9\x2f\x11\xa6\x88\x81\x7e\x34\x59\x0c\xf4\xcf\xde\x6b\x94\x4e\x19\x98\x5f\xbc\xa0\x7f\x4a\xea\x84\x75\x96\x71\xea\xe6\xaa\x68\x91\x40\x08\xf7\xce\xec\xdf\x6b\xdf\x9f\x6d\xc0\x86\xff\x38\x34\x1f\x40\x0a\x86\xdf\xf1\xd7\x15\x13\x22\x98\x62\x00\x2d\x4d\x93\x2f\x67\xf5\x2e\xc9\x2c\xc7\xf3\x40\x68\x4c\x60\x48\xad\xaf\x89\x2e\x0b\x0c\x09\x1f\x9c\x7d\x85\xee\x6b\x18\xc5\x6f\x9e\x70\x79\xf1\x5c\xb8\x23\x34\x54\x20\x83\x33\xef\x71\xd0\x8e\x59\xfb\xda\x63\x76\x68\xc2\x2f\x61\x5f\xdc\x49\xbc\xd8\x4e\xa2\xd6\x11\x4f\x2b\x89\x55\xf4\x69\x98\x98\x0a\x53\x1a\x10\xb0\x56\x31\xa0\xaf\x91\x4f\x17\xa9\x08\x14\x21\xe9\x44\xa6\x74\x25\x13\x43\xb0\x14\xa6\x0e\xd4\xaf\x50\x17\x34\x60\xfd\xf8\x40\x7c\xfa\x10\xba\x26\x88\xb5\x38\x43\x50\x5f\xdc\xc2\xba\xda\x4f\x16\x56\x2a\x80\x97\x5e\x9c\xb8\x77\xfe\x76\xd3\x08\xc3\xd6\xc6\xe8\xd4\x59\xfb\xfe\xaa\xd9\x37\xab\x7e\xbd\x45\x83\x08\x55\x8a\xa1\xef\x92\x97\xec\x01\xe5\xc0\xfe\x81\xa2\x7a\x44\x9b\xaa\x9e\x34\x3a\x0d\x66\xb1\x62\x83\xb4\xca\x83\xa2\x8f\x48\x42\x1d\x95\xe2\x6b\xd3\x73\x2a\xde\x44\x54\xa9\x36\x74\x46\x59\x95\xe9\xab\x65\x2d\xb9\x7d\x65\x23\x74\xdb\x35\x03\xb2\x7d\x43\xc5\xb9\xfd\xce\x9f\xf7\xf4\x0b\x7a\xe0\xa5\x42\xfb\xea\x5a\x1f\x73\x9b\xa9\xe2\xe8\xc9\x09\xe3\xe0\xe3\x23\xe7\xec\x43\xbc\x12\xbd\x38\xcf\x33\x6b\xdf\xd8\x81\xb9\x0b\x30\x21\x86\x1d\x5c\x4d\x20\xc3\x7a\xf4\x60\x45\x21\x68\xd0\x9b\x3d\x55\x9b\xd5\xea\x1c\xad\x05\x7e\x8a\xc3\x19\x56\xd0\xa4\xd5\x17\x55\x80\x19\xc6\xa4\xe8\xd2\xbe\xf3\x3d\x57\x69\x13\xa6\xbb\xd1\x30\xad\x74\xe6\xd5\xb6\xff\xc5\x9f\x03\x86\xd5\x34\x8c\x85\xef\xb8\x3c\x7d\x8b\x4b\xf1\xac\x97\xb1\x05\xbe\xe7\xab\xed\xc4\x81\xe1\x9f\x61\x29\x2a\x99\xf0\x8f\x86\x5b\x6b\xee\x14\x19\x39\x9d\x91\x27\xb1\x6e\x19\xc6\xf5\x4a\x47\x27\xe2\xd8\xc7\xed\xf2\xe9\x04\xe0\x50\x1d\xd9\x94\xd6\x09\x98\x30\xa3\x75\x0a\xf8\xa1\x56\xb1\x59\xa1\x83\x7f\x54\xe8\xb4\x4a\x26\x59\xa1\x63\x95\x83\x80\x44\xaa\xd8\x24\xd7\x02\xcf\xab\x62\xc3\x72\xbd\xe4\x95\x3c\xa0\x95\x6f\x56\x48\x25\x83\xd1\xf9\x2e\xbd\xe4\x8a\x54\xca\x28\xd8\x4f\x24\xfa\xed\x0a\x2d\xd3\xb6\x44\xa1\x8d\x5c\x20\x0f\xe7\x6a\x15\x4b\x94\x5a\x9d\x34\x52\xa1\x90\x49\x35\x72\xba\x0e\x8e\xd2\xe9\xc0\x63\xd1\xa7\xe5\x1a\xa9\x54\xc9\x9c\x96\x6b\x74\xd1\x6b\x49\x29\xbc\x43\x42\x8b\x75\x9a\xb8\x0e\x83\xb0\xa6\x96\x50\xd9\x54\x99\x60\x87\xe0\x16\xdc\x38\xf8\x4d\xb1\xba\xb8\x99\x2e\x6f\xb3\x02\x20\x99\x30\x0f\x1a\xe9\x1e\x9b\x24\x54\xc2\x06\x09\xde\x30\x61\xb5\xbd\xed\xc3\x57\x3e\x50\x35\xa0\xf8\xac\x58\x22\xd6\xdd\xab\x17\xbf\x7e\x50\xab\x14\xf4\xa0\x5d\xe1\xe0\x88\xc9\x23\x6a\x44\x79\xf0\x02\xfc\xf1\x8d\x25\x4b\xde\x00\x6a\x90\x0b\xd4\x24\xf4\xd1\x2d\x76\x21\x98\xca\x46\xbb\x16\x7e\x33\xf0\x32\xdc\xaa\x51\xaa\x35\x60\x2e\x7c\x00\xe7\x83\x61\x70\x92\xd2\xee\x9b\x3e\x6e\x77\x86\x94\xf1\x2f\x79\x03\xfe\xd8\x23\x3f\x58\xdb\x23\x23\x14\x4a\xac\x77\x1e\xa2\x35\xc4\xd3\x15\x28\x0a\xf8\xf3\xb1\x91\x1f\x9a\xa0\xb8\x4e\x78\xa3\x34\xec\x8a\xa9\x02\x71\x87\x1e\x56\xe0\x15\xec\xff\x5e\xb2\x9b\x9a\xa6\xc7\xfe\x11\x3d\x7e\x7f\xb3\x52\x96\x27\xd2\xaa\x65\x2c\xab\xd2\xa7\x58\x9d\xba\xba\xc9\x4d\x03\x9d\x7d\xd5\x6a\x99\x4a\x2d\xf6\x29\x54\x8c\x3a\xd7\xd7\x90\xb7\xe7\x77\xaf\x33\x72\x94\x54\x9a\x27\xd6\xfc\x8b\xa4\xbb\xdf\x78\xdd\x7d\x73\x63\x46\x1f\xbc\x79\xf3\x08\xe4\x37\x6b\xb5\x0d\x0a\x96\x56\x30\xac\x5c\xa5\x94\xf3\x53\x07\xd5\x4d\xb1\x28\x95\x32\x40\xcb\x07\xeb\x75\xac\x3a\x2d\x59\x7f\x7a\xc7\xae\x53\x38\x95\x92\xf9\x57\xa9\xd8\xc2\x5b\x34\x3b\x30\xdc\xe2\x1b\xe2\x71\x14\xba\xd1\xc6\xb7\x72\x36\xa2\x53\x42\x49\x58\x13\xef\x96\x80\x80\x84\x71\x07\x4c\x12\xc0\xa3\xff\x74\x1b\x26\x74\xd1\x26\xfa\xc8\x23\x4d\x03\xa0\x0d\xb4\x9d\x86\x9f\xd1\x47\xe8\x23\xd1\x26\x74\x0d\xda\xa0\xed\x34\xb0\x37\xc1\x30\xdd\x86\x85\x9c\xf8\x06\x49\x86\xa3\xd3\x70\xa2\x58\x32\xfc\xd8\xe7\x4d\x20\x4c\x75\x93\x1b\xe1\x77\xba\x11\xe9\x44\x6f\x32\xf1\x12\x60\x0a\xb8\x25\x5c\xc0\x1d\x90\x00\x37\xdf\xb3\xeb\xd2\x67\x81\x0a\x5e\x6d\x6c\x6d\x82\x57\x81\x29\x73\xd4\x1a\x58\xc6\xe4\x82\x37\x61\x19\xfc\x6f\x60\x42\xb1\xc0\x04\xaf\x66\x8e\x62\xea\x6e\x51\xc9\xe7\xb0\x31\x4a\xe3\x29\x94\x04\x3f\x18\x46\x8f\x54\x81\x37\xd1\xa3\xff\x8d\xb2\x3b\x85\xb2\x43\x0f\x36\x82\xeb\xb7\xe8\x94\x58\x56\x7d\x45\x42\x71\x19\xa8\x9c\x3a\xca\x12\xf3\xb2\xd9\x97\x1a\x86\x7a\x68\xb8\xbb\x57\x80\xf8\xae\x2a\x17\x53\x2f\xf3\x13\x27\xc2\xc4\x57\x0a\x49\x85\xa9\x7e\x46\x2c\xe4\x15\xd4\xec\x95\x80\x00\xb0\x01\x0c\xcd\x55\x64\xa5\x0d\xc5\x41\x3a\xae\xc9\xab\xb3\x2b\x89\x7a\x3a\x96\x06\x62\x8d\x0e\xb4\x34\x27\xf0\xc5\xb4\x8f\xa8\xcd\xd8\x89\xf3\x73\x7a\x6b\xc0\xe5\x0e\x04\xdc\xae\x00\xbb\x2e\x30\x38\x10\x18\x1c\x71\x2f\x38\xb2\x00\xfd\xb1\x6b\x17\xd4\x0f\x59\xb8\xe0\x48\xa4\xef\xd1\x45\x8b\x8f\x3e\xf8\xf5\x51\x76\xdd\xd1\xc5\x8b\x8e\xa2\x8b\xc8\x67\xf0\xbf\x4f\xdd\x7e\x61\xd5\xaa\x0b\xb7\x9f\x62\x1e\x83\xf0\x03\x78\x1a\x2e\xb9\xb0\x7f\xec\xa8\xbd\xe7\xe8\xa1\xf0\x27\xb8\x0e\xbb\x54\x00\xab\x59\xb0\x26\x37\x28\x99\x77\x00\x5e\x3b\xb8\xf1\xdb\xfa\xfc\x06\xd9\x08\x5b\xfd\xd5\x8d\x07\xe1\xb5\x03\xf3\x24\xc1\x5c\x30\x77\x2f\xb8\xef\x8b\x36\x70\x27\x9d\x22\xbc\x3e\x40\xe3\xb7\xfb\x27\xe0\x77\x2e\x58\x00\x48\x19\x5a\xc9\x8b\x8f\x02\xf4\xfb\xfa\x28\xcc\x04\xab\x81\x6a\xd5\xc5\xf6\x8b\xab\x58\xd9\xfc\x79\x63\x0f\x5c\x58\xb2\xe8\xfd\x7b\x27\x44\x79\x1c\x8d\x3e\x03\x7a\x2d\xcb\x7a\xd7\x78\xef\x79\xe9\x3e\x78\x6d\x7f\xcb\x94\x92\x95\xc6\xdb\x9c\x53\x16\xec\x07\xe2\xfb\x5e\xba\x07\xc5\x4f\x5d\xd0\x82\xfa\xcc\xf4\x1b\x14\x7b\x80\xd0\x45\x1d\xd6\x17\x26\x60\x8d\xe8\x60\xd0\x77\x29\xe7\x00\x2b\xc0\x1e\xc9\x79\x53\x4c\xf9\x1d\xad\x3e\x63\xca\xe5\x01\xac\x75\xe4\x61\x04\x3d\x24\x2b\x8b\x68\x29\x56\x2c\xb2\x02\xa6\x37\xdc\x02\x7f\x01\x52\xb0\x1c\x48\xe1\xbe\x17\xd6\xaf\x7f\x61\x3d\xc8\x55\xb0\x8a\xcc\x3c\xf7\xa2\x33\x35\x40\x66\xb5\xca\xd3\x46\xa6\xf5\x39\x03\x7f\x4e\x1b\x89\x82\x69\x40\x36\xe0\xdd\x85\xee\xbc\x4c\x94\x44\x9a\x51\x10\xb2\x73\xfa\xaa\x01\x2d\xa5\x63\x1f\x72\xba\xec\xa1\x82\x0c\x7a\x09\x90\xbe\xfc\x0a\xca\xe9\x97\x57\x5e\x06\x07\xd7\x8f\x1f\xb7\x7e\xfd\xb8\xf1\xd1\x87\x53\xf2\x32\xb2\xec\xc9\x35\x86\x01\x24\x17\x85\xd5\x5a\x7d\x06\xfe\xdd\x8a\x02\x23\x71\x7e\x86\x9a\x64\x7b\x56\x46\x5e\x8a\xde\xaa\xd4\x9a\x59\xa5\xc3\x6c\xf4\x26\x27\x9b\xb5\x4a\x6b\x02\x7e\x18\x4f\xf9\xa9\x20\xd1\x56\x8d\xef\xda\x7b\x80\x88\x57\xd2\xe9\xae\x7c\x12\xc2\x9a\x47\x26\xac\x24\x84\x9d\x64\xa1\x19\x15\x5d\xa2\xa3\xbf\x38\x9f\xc6\xfc\x2f\xad\x76\xd9\x44\x6a\xa3\xed\x26\xf1\xf1\xfd\xe3\x37\x8c\x1f\xbf\x01\x78\xa5\x19\xbd\xd2\xa4\xae\x55\xeb\x96\xa6\xa4\xa4\xf5\xca\x90\x1a\x33\xfb\x0c\xbb\xdb\x7b\x57\xa1\xd1\x28\x31\x96\x1b\x4f\x2d\x1c\x84\x8e\x12\xa3\xf1\x54\xf1\xf6\xe1\x7d\x32\xfb\xbf\x06\xff\xfe\xda\x6b\x40\x4e\xaf\x48\x84\x3a\x65\x20\xce\x69\x7c\xf4\x17\x7d\x12\x97\x2c\x4e\xca\xcc\xd0\x6a\x93\xb9\x24\x7d\x5e\xaf\x5c\x9f\xb2\xf8\xae\x82\x58\x06\x8b\xea\x84\x2c\x5f\x2b\x56\xfa\x72\x7b\x01\x2d\x90\xbf\x86\x73\x03\xdf\x76\xc7\x37\x15\x64\x10\x2f\xa0\x7a\x6b\x05\xbf\x75\x78\x91\x43\x34\xa1\x11\x39\x88\x39\x2f\xef\xe4\xc8\x25\xa0\x93\x15\x15\xa5\x56\x8e\xd9\xf2\x15\x3c\xfd\xe4\x53\xf0\xf4\xd7\x5b\xc6\x85\xe8\xd3\xf9\x0e\xb0\xc7\xd9\xb7\x10\xad\xfd\x5f\x85\xaf\x3a\x3c\x85\x7d\x33\xc0\x5e\x3b\x17\x1e\x5b\x19\xbd\xfe\x14\x6c\xfd\x7a\xf3\xe6\xaf\x41\xe8\x29\x9a\x0f\x8d\xeb\xb8\x64\xc7\x00\x8b\x85\x7d\xed\xf0\x1d\xe0\xb7\xf7\x2d\xf4\xa6\xc3\x55\xf6\x98\x8e\xfa\xbd\x88\x06\xcc\xc0\x7d\x8e\x03\xd8\xd4\xc6\xe5\x73\x51\x18\x10\xba\xd8\xe5\xb3\x1b\x94\xb4\xc9\x48\x99\xb0\x92\x3a\x8d\x7a\x9b\x8f\x33\x08\x0a\x5c\x44\xbd\xce\x5f\xec\x2b\x42\xab\x0e\x14\xc5\x33\x46\xad\x09\x78\x68\x94\x00\x7f\x26\x8a\xe7\x3e\x84\x97\x93\xe1\xcf\x95\xc0\xd7\x00\x8f\x8d\x34\x8c\x5d\x9c\x0b\xe8\xfe\xee\xa1\xc5\x6a\x33\xb8\x3d\x2f\xed\x23\xa3\xee\xc3\x54\xd7\x51\x1a\xf4\xee\x63\xb0\xcf\xb1\xcd\xab\x48\xaa\x9e\x08\x42\x17\x77\xeb\x82\x0b\xed\x17\x15\x5f\xf1\xe0\x45\x65\xff\x5e\x66\xf0\x1e\x00\x5b\x83\xd1\x9f\xec\x33\xe8\xe7\x0b\xa3\x37\x36\x02\x00\x4e\x33\xfa\x77\x8a\x16\x8d\xe4\x5c\xe2\x22\xda\x52\xe6\xe8\x15\xd9\x31\xb5\x1c\x1c\xcc\x76\x83\x2f\x7d\x7d\xe9\x22\x90\x4f\x7b\x3c\xfd\xfe\x5a\xfd\xe1\xde\x40\x21\xcd\x67\x88\x00\x28\xa4\x83\x45\xb0\x9f\x3d\x0a\x35\xcc\x75\x57\xa1\x12\x20\xaa\x92\xcb\x6e\xef\x08\xd5\x26\xe0\x69\x4b\xa9\x24\x6a\x21\xe2\x6a\x77\x25\x50\x3c\xbc\xf2\x54\xb2\x3c\x08\xb2\x4e\x3d\x8f\xb1\xb1\x51\xfb\xa3\x5a\x92\x55\x41\x1a\xd9\x6e\xc5\x80\x38\x04\x32\x1b\xd1\x2b\xb2\x5e\x52\x61\x3e\x3f\x80\x31\x09\xd1\x45\x3e\xf1\xec\x87\x39\xdd\x7c\xb2\x2e\x10\x11\xf7\x6d\x56\xec\x0f\x18\x0d\xe5\x0a\x34\x30\x05\x0d\x8f\xc4\x19\xbb\xdb\x6c\xc0\x3c\x6b\x4f\x36\xbb\xd2\x8b\x50\xb6\x13\x24\x4b\x36\x6d\x9d\xc8\xc0\xa3\xfc\xf2\x0d\xdb\x26\xd0\x77\x36\x33\x96\x64\x56\xd1\x6b\xe0\x27\xeb\xd5\x88\x21\x10\x01\xf5\x80\x81\x6f\x3d\x0e\x92\x74\x0a\x34\x48\xe8\x05\x87\xd3\xfa\x4a\x65\x5c\xb5\x72\x2e\x6d\x4f\x61\x15\xc9\x7a\xfd\xa0\xb6\x0d\x2a\x5a\x81\xd2\xa9\xfa\x57\xbc\xf7\xa4\x5b\x2e\x73\xce\xdf\x9f\x56\x22\x95\xb1\xa5\xca\x11\x6b\x3e\x84\x97\xe0\x4b\xf0\xd2\x87\x6b\xd6\x7c\x08\x32\x41\x3f\x90\xf9\xe1\x67\xb7\x98\x60\xe8\xf5\x66\x17\x2e\x8e\x7d\x18\xdd\x57\x3c\x77\xd5\xba\xb1\xa2\xe8\x2b\xfc\xbc\x95\xeb\xc7\xf6\x7e\xfb\x38\xad\x55\x29\xa4\xe9\x2d\x87\x6c\x7d\x50\x96\xd5\xaa\x99\xb4\xd3\xca\x2a\x52\x33\x99\xda\xcf\x37\xa8\x18\x39\x7e\xed\x80\x3e\xe7\x1e\x07\x46\xb5\x5c\xa4\x93\xcb\x5b\x0e\x58\x51\x3a\xae\x4a\x31\xb7\x44\xa2\x08\xd5\x7e\xba\x4e\x4e\xe3\x2a\x28\x06\x7c\x43\x5e\xbe\x26\xb1\x40\xf4\xda\x7f\xc6\x47\x81\xd8\xdc\x6a\xa4\xd2\x31\x3a\x0e\xc0\x3b\x6b\x4e\x17\xfa\x5c\xfe\x0c\x09\x30\xb2\x01\xc6\x85\x66\x12\xb5\xd3\xa8\xa5\x11\xc5\x70\x02\x3f\xed\xce\xc0\xf8\x24\x88\xb0\x30\xb7\xff\xf8\x87\x6f\x97\x47\xcd\x47\xe0\xdf\xbd\xf0\xbb\x30\x98\x87\x16\x8d\x43\x07\x00\xe3\x81\xaf\x2f\xc0\x87\xde\x12\xfd\xae\x8c\x99\x7a\xee\xee\xaf\xe1\xdf\xc1\xde\x46\xd9\x34\x58\xd2\x7e\xf2\x64\xfb\x49\x11\x45\xaf\xd8\xf4\x83\x5b\xf2\xf0\x2e\xf0\xc8\xfd\x8f\xc3\x39\xd1\x99\x77\xef\x49\x85\xe5\xf6\xeb\x60\xcd\x15\x20\x0b\xec\x83\xa7\xe0\x27\xd1\x61\x1b\x95\xf4\xfc\xf5\xa0\x62\xa9\xe8\x24\x7e\x08\x8f\x2b\x1a\xf7\x2f\xee\x6d\xb2\x9b\x60\xa3\xdc\x2e\x1a\x2d\xac\x99\x20\x16\x51\x04\xf0\x18\x62\x88\xce\x27\xcd\x9b\xdc\x22\x2b\x36\x04\xc2\x58\x1b\x4a\x16\xcd\x83\x6e\x2b\xc0\x66\x41\x1e\x1c\x30\xa1\xb2\xb3\x94\xce\x48\x2b\x01\xcb\x6c\x86\x5f\xc1\xbe\x73\xca\xb4\xfd\xee\x9d\x21\x93\x2d\x54\x64\x7f\xbf\xd8\xbf\x9e\x4f\xae\xf5\x8e\x10\xab\x64\xc9\x9c\x69\x4c\x89\x6a\xab\xd6\xe0\xad\xcf\xf2\x4e\xa8\x71\x96\x97\x4a\xd0\xf2\xc9\x98\x65\xee\xfd\xe8\xed\x03\x4f\x1e\xd9\x3b\x3b\x25\x47\xdc\x27\x6f\xd4\xd4\x14\xd5\xce\x3b\x00\x22\x29\x2c\x3d\xe2\x81\x4b\xf0\xea\x0d\x0a\xe4\x5d\x5b\x0f\x86\x83\xbe\x20\x67\x3c\xfc\x46\xc9\x68\x86\x2e\xa4\xf3\x7e\xdf\x5b\x8c\x18\x3f\xc0\x0d\x75\xf0\xa6\x02\xe9\xab\x7d\x72\x06\x95\xa4\xf0\x12\xaf\x9b\x66\xcb\x32\x68\x5e\xab\x10\x33\x13\x87\xca\xca\x73\xd2\x6a\xa6\xfb\xc6\xbe\xfb\x84\xcb\x35\xac\xff\x71\x30\x66\xfe\x20\x38\x1b\xbe\xb1\xe6\x06\x75\xe5\xc4\x94\xb8\x2c\x27\x86\xe3\x1f\x10\xfc\x35\xb2\x44\xc5\x15\x6b\x7f\xa2\xf9\x29\x40\x0c\x3f\x5c\x98\xe0\x61\xd8\xd9\x5e\xe8\xbb\x01\x3d\x4d\xa0\x14\xfc\x5a\x5f\x31\xed\x26\xbe\x15\xb5\xdc\xc5\x63\xaf\x1f\x84\xdf\x4d\xaf\x1d\xcd\xb2\xa3\x6b\xa7\x03\xfd\xc1\xd7\x8f\xdd\x06\xcf\x3e\x9a\xaa\x7c\x12\xfe\xee\xcb\x4d\xb8\x6f\x3c\xc7\x3c\x02\x0a\xc1\x83\x07\xb6\x34\x2f\xbd\x63\xe9\x81\xb7\xde\x3c\xb0\x6c\xf3\xb2\xd9\x9b\xef\xe1\x2c\xf3\x76\xad\x19\xdf\xbe\x3d\x7b\x7b\xfb\xf8\x35\xbb\xe6\xcd\x59\x0e\xc4\x7b\x7e\x00\xd5\x27\x9f\xc3\x3d\x09\x2c\x8b\x5c\x6b\x85\x8f\xad\xae\x18\x5e\x02\x26\x7f\xf9\x27\x30\xb9\x74\x58\xe5\xed\xf0\x44\x6c\x7d\xa2\x46\xdf\xed\x47\x2a\x87\xf2\x51\x15\x54\x3f\xe2\xef\xc6\x2e\xac\x5a\x11\xdb\x82\x4b\x8d\x0a\x89\x75\x2d\x02\x5a\xa7\x88\xd1\x52\x68\x75\x82\x81\xcc\x30\x0c\x8e\x91\x21\x24\x1b\x7f\x37\x40\x64\x7e\x58\xc1\x15\xd8\xc9\xa2\x16\x11\xc5\x8e\xb5\x1f\xef\x99\xf2\x78\x11\x78\xb8\xe4\x2b\x78\xee\x91\x97\x1f\xfd\xf2\xa1\xef\xf3\x34\xe3\xde\x02\xfa\x17\xfe\x56\x01\x5e\x04\xc9\x56\x15\x75\xe3\xe9\x50\xf3\x88\x82\xda\x69\xfd\x66\x0d\x9f\xb3\xeb\xb6\x77\xfb\x7a\xaf\xbf\x39\x69\xe4\xa2\x7b\x56\x3c\xef\x99\x0c\xae\xd1\x97\xb8\x4b\x77\xef\xf8\x23\x3d\xaa\xa4\x60\xd7\x1b\xe3\x87\xdf\xff\xf7\x8d\xc3\x16\x03\x7e\xd1\x91\xde\x8f\x82\xe6\x5f\x86\xc0\xef\xd1\x84\x33\x11\x2c\x31\x07\x26\x57\x2d\x3e\xfe\x1c\x78\x6a\xd8\xe4\x7e\xf9\x8f\xce\xdf\xdc\xb1\x6a\xe4\xf8\x61\x03\x3e\xdd\x74\x96\x1e\x78\xd7\x6b\xaf\xc5\xe5\x6c\x61\x5e\xf0\x33\x82\x71\x01\x6e\xb9\xab\x69\xb8\x69\xbf\xd0\x97\xb8\x31\x4d\xe9\x14\xd7\xc9\x8e\xa5\x48\xd8\xcd\x8c\xda\x00\xd9\x88\x88\x90\x8d\x08\xd0\x14\xb5\xe1\x0d\x4b\x51\xa8\x6a\x02\xb0\x31\x24\x61\x04\xef\x67\x32\x67\x23\x82\xfe\x4b\x7c\xbf\x21\x1c\xd3\x79\x11\xca\x65\x44\xf3\xe2\x9f\x51\xb9\x4c\x78\xe7\x58\xe7\xc5\x7b\x69\x82\x12\x34\xfa\x1f\x7b\x7b\x56\xa7\xb9\xa3\x9f\xe1\xb0\x4e\x9f\x9b\x6c\xb5\x09\xae\xaf\xd1\xa8\x72\xba\xee\x7c\xa3\x5f\x49\x86\x47\xc9\x24\x69\x75\x2c\xed\xb5\x96\x4e\x84\x3f\x16\x54\x57\xb3\xdf\x82\x62\x74\x2a\x78\xfa\x82\x1a\xe6\xd0\xfa\xec\x41\x81\x95\x75\xb6\xec\xf2\x74\x87\x41\xaa\xd5\x8f\xe8\x9d\x37\xa8\xd4\xeb\xd0\x80\x0b\xd5\x5c\x38\x34\xa2\x64\xe9\xc6\xd9\x87\x26\x8e\xd6\x49\x7e\x18\xfb\x58\x73\x75\x01\x97\x84\x1f\x6c\xff\xb6\xa0\xfa\x03\x30\x65\x5a\xde\xc0\x7e\x85\x72\x73\x55\x4a\xf5\x6b\x47\x8f\x9e\x19\xec\xca\x0a\x29\xe4\x32\x53\x7e\xa1\x6d\xea\x93\xc2\xfa\x56\x79\x83\xe2\x6e\x23\xf2\x92\x7e\xd4\x63\xd4\x1b\x68\x56\xe5\x05\x88\x10\x41\x15\x1a\x2b\x90\x63\x25\xee\x98\x59\x14\x59\xc4\xe1\x20\x5a\x21\x18\xf9\x9b\xad\x57\x02\x31\xd3\x15\x93\x91\xd3\x13\x88\xe2\x74\x92\x89\xcf\x41\xf2\x31\x79\x35\x31\x8b\x2b\x41\x95\x1d\x45\xa6\x81\x38\xec\xb1\xe0\x8b\x49\x13\x43\x6f\x13\x2e\xd1\x1a\x12\xb7\x56\xec\x33\xea\xb1\xe5\x5b\x0c\x27\x06\x97\x81\x31\xea\x3b\x8b\x8a\x53\x13\xcd\x76\x32\x10\x51\x8d\x16\xec\x3a\x70\xf4\xd8\xbd\x7b\xe6\x2f\x08\x66\xcb\xd9\x62\x2f\x07\xb4\x96\xa2\xe9\x93\xc3\x1b\x76\xdc\xbd\x31\x3c\x49\x24\x55\xc9\x0d\x19\xd0\x50\x55\x61\xb0\x68\x54\x52\x49\xb0\x8a\x93\xaa\xd4\xb4\x56\x5c\x55\xa5\xb6\x6a\x15\x22\xbe\xb2\x52\x6b\x4d\x01\x6f\x79\xf2\x86\xd6\x7f\xf8\xd3\x87\xf5\x0d\x39\x2a\x20\x29\x2e\x92\x3a\x7b\x03\x66\xca\xcc\x3d\xbb\xcf\xbf\xbf\xab\xcc\x6f\x51\xa9\xd1\x6a\xcf\x25\x6b\xde\x31\xa0\x7f\xf3\xec\xfe\xa1\x79\x1b\x9a\x9e\xde\x54\xb3\x7d\xdb\x5b\x67\xb6\xf9\x92\x68\xb1\xd4\x6e\x34\xa4\x19\x34\xcc\x5c\xab\x35\x72\x11\x64\xae\xf2\xcc\x5d\x71\xdb\x87\xf5\x43\xf3\x3c\x69\x12\x99\xcc\xac\x90\xf0\xb3\xa6\x85\xf7\x6c\x5c\x9b\xa2\x45\xa4\x4f\xb1\xee\xd1\x07\xef\xbd\x43\x26\x5a\x10\x0c\x85\x2a\x5a\x5a\x76\xcd\x18\x69\x11\x8b\x2d\x80\x19\xd3\x77\xd5\xf4\xc9\xfe\x92\x92\x00\x2a\x31\xcb\xe8\x9c\x74\x03\x29\xb1\xb4\xbc\x8a\x53\xd3\x2a\x25\x2f\xad\xac\x52\xa7\x6a\xb9\xaa\x4a\x8d\x35\x65\xe0\xd2\x79\x33\x87\xd6\x8f\x1b\x57\xdf\xd0\x6c\xe7\x53\x34\x6a\xcb\x94\x6a\x30\x8c\xde\xd2\x34\xe3\xdc\xae\xdd\xe7\xd5\xb2\x22\xaf\x98\x61\x44\x77\xcf\x98\xd6\xaf\x7f\xfd\x80\x46\x38\xa5\x4f\xcd\xa6\xa7\x26\xbe\xb9\x7d\xdb\x36\x5f\x3a\x2d\x93\x48\xc5\x9c\x49\x45\x3f\xa2\x32\xcd\x83\xa9\xd9\xc3\x75\x9e\x71\xf5\x43\x67\xb6\x80\xf3\x62\xbd\x5a\x61\xe6\xc7\x66\x97\x14\x4a\xf3\x93\x15\x6a\xb6\x34\x54\x86\xfb\x4c\xea\x0d\x4a\xf4\xb9\x08\x63\x8f\x05\xa9\xc5\x58\xc2\xe6\xf4\x1b\xf5\x68\x3a\x70\xa4\x7b\xb0\x5b\x60\xe2\x94\xd9\xc4\x3a\xfd\x4e\x8c\x36\x83\x38\x34\xd4\xd9\x11\xb7\xaf\xa4\x1d\x4a\x26\x9b\x16\x00\x6e\xfc\x46\x8c\xd9\x97\x86\x19\x12\x2c\x2d\x50\x32\x64\x9b\x9e\x0b\x08\x5f\x1e\x0d\x14\x27\x31\x40\xb4\x32\x06\xa0\x27\xc6\x08\xfe\x72\xa0\x64\x44\x2a\x95\x51\xa5\x08\xae\xdd\xff\xd9\xd2\x65\x3f\x3c\x73\x6c\x6a\xba\x98\x15\x49\x15\x5c\xeb\x1c\xb0\x11\x1c\x78\x0d\xdc\x2b\xd3\xe8\xd3\xbd\x1a\xad\xc4\x90\xaf\xe1\x0c\x76\x73\xae\x2e\x07\x88\x94\x62\x09\x27\xc2\xfa\xbf\xa2\x59\x45\x9e\x55\x70\x43\x8a\xd3\xa5\x54\xfc\x29\x73\xb0\x4e\x27\x53\xba\x96\x6d\xd9\xb1\xbe\x39\x58\xd2\x78\xfb\xf2\x6d\x53\x8a\x0c\xe9\xa3\x44\x86\xde\xc5\xbd\xb5\xf0\xa3\xdc\x31\xab\x4f\x4e\x9f\xfa\xc0\xa4\xca\xe4\x68\x53\xbf\xaa\x9a\xe1\x56\x65\xaf\xe6\xb9\x95\xbd\x45\xa2\x54\x9d\x3a\x30\xb4\x4f\x61\x70\xec\x92\xf1\x59\x12\x95\x84\x03\xec\x92\xc2\xa7\x46\x66\x7e\xa0\x9e\x5d\x38\x2c\x4b\x29\xd5\xe5\xed\x37\xf2\x12\xec\x42\x54\x70\x16\x4b\xd3\xea\x02\x11\x2f\x07\x8f\xa6\x55\x15\x65\xcb\x64\x6d\xce\x41\x7a\xbd\xcc\xd8\x6b\x54\xa6\xa8\x60\xd8\xdd\x63\x87\x6f\x1b\x5f\x93\x65\x91\xd0\x6b\x2a\x6d\x3e\xda\xe8\x6c\x08\xa4\xf4\x5e\x3a\xa7\xa1\xb0\xa8\x66\xfc\x90\xf4\xe8\xe1\x91\xf9\xb9\xc6\xe4\xc9\x79\x25\x0f\xd0\xfa\xfc\x89\x9d\x36\x3f\x61\x32\x47\x79\x89\x86\xd6\xec\x04\x9b\xd0\x38\xaa\x72\x97\x6d\x6e\x67\xc8\x19\xc3\xb4\xf4\xc5\x30\x2e\xb9\x1e\xd7\x82\x7e\xe9\xaf\x58\xab\xc7\x8c\xb5\x88\x8b\xee\x98\x63\x70\x44\x08\x31\xb1\x14\x4e\x37\x12\x1d\x30\x25\x84\xd9\x70\x7b\x98\xa1\x12\x90\x0c\x12\x82\x1c\x55\x57\xdc\xa5\xbf\xd2\x84\xc9\x6f\x53\xec\x28\xd8\xa2\x0b\x1a\x85\x09\xe1\x76\x2d\x36\x3d\xa4\x43\x3d\x73\x22\xc1\x6e\xed\xa3\x22\x5e\x0e\xbc\x44\x83\xcd\x90\x38\x27\x14\x19\xb1\xbe\xdd\xbf\xc6\x02\xfd\x17\x0d\x8a\xda\x8a\x45\x93\x42\x54\x50\x1b\x41\x45\x88\xa0\x55\x21\x96\x44\x77\x55\x9d\x49\xf4\x4f\x15\xbe\x65\xab\xa1\x18\x70\x24\x9e\x46\x1b\xfd\x80\xa5\x5a\x6f\xaa\xb3\x10\x1e\x7c\xeb\x86\xaa\xeb\xde\x27\xdc\x88\x73\x21\x7d\xc2\xd9\x05\x71\xe6\x22\x54\xb9\xd3\xf7\x50\xcc\x0e\xdd\x64\xd4\xff\x9f\xb5\xc3\x28\x6c\x65\xfe\xca\x2b\x82\x8d\xf9\xab\xaf\x0a\x56\xe7\xf1\xeb\x57\x5e\x91\x44\x6c\xff\x59\xd3\xdc\x73\xeb\xec\x3a\xaf\x61\xdb\xff\xae\xbd\xf4\x68\x1d\x95\x49\x95\x60\xac\x58\x89\x00\x9a\x14\x6b\xa5\x98\xb5\xfe\xff\x55\x03\x71\x26\x48\x49\xcd\x52\xd8\x26\x14\xfd\x0a\x10\xea\xd2\xd1\xf4\x9f\x35\x0b\xdd\x1b\x52\x12\x09\xb0\x09\x0d\x82\x72\x23\xd9\x46\xcb\xfe\x83\xc6\x00\x9d\x3c\x6f\x6a\x8c\x8e\x00\x32\x35\xc7\x4f\x09\xd2\x09\xd0\x6a\x76\xd1\x49\x1a\x53\xfc\xe8\x32\x5f\x27\x7a\xf2\x22\xca\x65\x8e\x6c\x04\x8f\x2b\x5d\x66\x28\x9c\x3a\x84\x78\x74\x14\xe4\x8a\xac\xb0\xf6\x21\x5e\x47\xa8\xa2\x40\xa7\x9c\x3c\x0e\x7e\xe0\x24\x3b\x25\x9d\x22\x23\x3f\x78\x6d\x43\x90\x98\x7d\x0e\x07\x8f\x80\x5c\x78\x01\x36\xc2\x0b\x34\x85\x2b\xb3\xeb\x9c\xd6\xa2\x7d\x14\xb4\xaa\xa2\x0b\xf0\x2b\xe8\xbb\xd9\x42\xe1\x36\xc8\x05\x8f\xd4\xa1\x7b\xe7\x76\xe1\x64\xcb\x1e\x15\x64\x9a\x4e\xf4\x9d\x3f\x26\x73\x94\x93\xe8\xe0\x10\x11\x54\x97\xb8\xa5\xeb\x63\x61\xa4\xa6\x78\xb1\xba\xa8\x69\x0c\xb8\x01\xb3\x91\x06\xd1\xfb\x52\xe9\x76\x4b\x66\x3b\xb1\x37\xa5\x43\x82\x55\x2a\x95\x69\x89\xbc\x02\x04\x13\x55\x86\xe0\xa4\xb5\xb7\x66\x5a\xb6\x93\x94\x34\x6a\x5b\xf6\x8f\xe8\xab\x6f\xb7\x60\x40\x48\x82\x04\xe6\x32\x87\x2c\x1d\x57\x88\x8e\xbf\x99\x69\x15\x00\xc2\x50\x72\x9c\xa6\xb5\x55\x90\xb7\x8b\x29\xae\x83\xe8\x15\xe3\xb1\x4c\x09\x7b\xc9\x3c\x10\xb9\x9d\x5c\x5c\x63\xda\x1f\x40\xdc\x17\xe7\xf4\x73\x1a\x4e\xe3\x44\xff\x01\x3a\xf3\x5f\x5a\x8c\xda\x68\x38\x29\x29\x7a\x6f\xf4\x5e\xa9\x52\xa7\x41\x97\x34\xba\xa4\x9b\xe9\x66\x5b\x47\x12\x1d\xea\x68\xa2\x6d\x6c\x5b\xb4\x8d\xfb\x59\x6f\x6f\x0f\xeb\x6d\xfc\x0d\x4a\x26\xfb\xe5\x17\x4e\xa6\xb7\x73\xf8\x12\x90\x4b\xc5\x81\x0e\xe9\xd7\xec\x2f\x8a\x0e\xe9\x65\xf6\x97\xf6\x28\xfb\xcb\xe5\x0e\x69\xa2\x6c\x58\x83\x4a\xe5\x8b\xcf\x37\x78\xa3\x96\xb4\x24\x2a\x8f\xfd\x16\x31\xf1\x8d\x70\x3c\xac\x70\xb1\x69\x4a\xa1\xd3\x40\x1b\x2f\x46\x27\xd0\xc6\xb3\xdf\x76\xbb\xec\x78\x44\x2c\xa2\x29\xad\x4e\x21\x16\x41\x74\x12\x21\x66\xbd\x3d\xa4\x17\xa3\xce\xa3\x43\x73\xbb\x5e\x0c\x70\xa0\x67\x0c\x73\x83\x92\xea\xda\x11\x93\xce\x00\x14\xe0\x10\xcf\x1e\xdf\xaf\xb1\xf1\x78\x98\x63\xfb\x1a\x13\x85\x15\x62\x7b\x78\x54\x89\x9f\x05\xed\x4e\xb7\x88\x13\x11\x53\xcc\x40\x90\x0f\x60\x25\x09\xac\xea\x49\x0b\x8e\x53\xc0\xbb\xdd\x4f\x3f\xc2\xa9\x7f\x9f\x37\xed\x71\xd8\x5e\x9c\x2e\xd7\x33\x6c\x12\xe7\x54\xda\x55\x66\xa5\x8a\xdb\xf5\xf0\x8f\xe0\x3e\xf0\x2d\xb8\x8f\xae\x4d\x80\xf5\x14\xfe\x80\x07\x3e\x08\x2f\x3f\xa6\x7d\xbc\x44\xca\x00\xa5\x4c\x65\xe4\xec\x4a\xa7\xb9\xa0\xa0\x8f\x7b\x4c\xf4\xee\x27\x80\xfb\xb1\xc7\x3a\xed\x79\x13\xca\xed\x21\x88\xae\x3d\x6c\x83\xe2\x67\xbc\x77\x82\xc6\x4b\x1a\xc6\x73\x43\xfc\x38\xe6\xcb\x33\xfc\x6a\x17\xd0\x77\x56\x08\xcb\xa9\x7d\x2e\xbf\x0b\xbb\x94\xe0\x02\xc4\x27\x15\x76\x0a\x63\x05\xb7\xac\xd9\x55\xd8\x0c\x0f\xbd\x7f\xf7\xba\x51\x29\x49\x9e\x7b\x57\xe6\x94\xf6\x2d\x7f\x0f\x4c\x79\xff\x7d\x30\x14\x57\xb8\x5f\xed\x9b\xb0\xbd\xb0\x92\x53\x25\xb1\x0c\x07\xa4\xb4\x9c\xe6\x0b\x0c\x59\x49\x56\xd9\xa1\x67\xbb\x44\x1d\xf4\xb3\x37\xd7\x3b\xbc\xf5\xbb\x3b\x5a\xde\x1d\x58\xd4\x34\x76\x68\xc5\x1c\x97\x48\xbc\xf5\x3b\xa0\xfd\x0e\x6e\x7d\x02\x35\x86\xf8\xc9\x3e\x4a\x31\xa2\x33\xac\x9a\x55\x21\xb6\x50\xec\x33\x95\x78\x06\x64\x8e\x06\xa2\x7d\xeb\xbe\x3f\x31\x6d\xda\x89\xef\xc9\x77\x94\xb0\x14\xf7\x0f\xd4\x03\x45\x94\x94\x52\x60\x2a\xad\x41\x7f\x20\x19\x90\x33\x36\xe3\x85\xe8\x3f\x4d\x7e\x68\xc0\x8d\x06\xee\xe8\x49\x78\x89\x59\x16\x3d\x09\x32\xd9\xc3\x38\x4c\x0f\x81\x97\x71\x2c\x91\x1b\x36\xdc\x68\x15\x3d\xce\x85\x88\x1d\xba\x08\x50\x8e\x74\xc6\xc5\xd0\xd8\x7b\x6b\x30\x66\xf5\xaa\x15\xd6\x37\x01\x3f\x8a\xd4\x72\x46\xd1\xe3\x52\xf8\x1a\xfc\xaf\xaf\xee\x9a\x9c\xdb\x38\x60\x84\x76\xee\xa0\xa4\x47\x3c\xf7\x8d\x98\xb8\xd8\x94\x6b\x0c\x54\x7a\x67\x4c\x13\x2b\x56\x94\x86\x96\x83\x61\x1d\x4c\xfb\x77\x70\x12\x1c\x0a\xf8\x23\xa0\x0a\x88\xea\x26\x1b\xee\xc9\xbc\x53\x2c\x59\xbb\x15\x7e\x3e\xf2\xfa\x6f\x7e\x33\x62\xab\x19\xdc\x21\x13\x77\xae\x63\x45\x02\x2e\x83\x94\x20\x6b\xdb\x01\xa3\xb3\xa3\x0e\x2c\xa2\xda\x29\xb6\xfc\x93\x4f\xa2\x9b\x3e\xf9\x04\x94\xa3\x89\x81\x02\xc7\xe8\x65\x20\x0b\xfe\x31\x7a\x07\x3c\x1f\xef\xd7\xf1\x67\xb5\x54\x25\x35\x22\xf6\x3c\x4f\x30\xb7\x03\xee\x80\x1b\x3b\xda\xe6\xd0\x4a\x37\x80\xd5\x94\x63\xa0\x20\xd8\x06\x0b\xad\xa1\x0c\x76\x1f\x5a\x75\x62\x8d\x1d\x6f\xc0\x91\x8e\x39\xe9\xe2\x20\x0d\x7c\x44\x49\xcf\xa7\xb1\xa3\x95\x5c\x2c\x1d\x2e\x07\xb3\x4d\x5e\x9b\x96\x3c\x7b\x76\x72\x5a\xad\x7c\xa2\xcf\xe6\x83\xfb\x6c\xc9\xe0\x09\x47\xd5\x80\xc2\x8d\x1b\x9a\xea\xf4\x52\x45\x0d\x68\xdd\x2b\xe2\x68\x00\x4e\xb9\xbe\x11\xb1\x2c\x23\x4f\xa1\x97\xfa\x79\x8e\x86\xdf\x9b\x86\x99\xe4\xca\x7e\xb8\xf8\x6c\xab\x7d\xd8\xc2\xe4\xd2\xd2\xe4\x85\xc3\xec\x4d\x4d\x47\x6d\xf9\x86\x40\xad\x53\xb9\xe8\xf6\x01\x61\x31\x5c\xa7\x94\x03\xbe\x71\xa4\x12\x00\x96\x95\x72\x60\x7d\x58\x24\x62\xea\x53\x52\x52\x65\x91\xdf\x8e\x44\x4b\x21\x46\x2e\xa2\xc5\xd3\x8c\xbc\x1e\xde\xa5\x94\xd0\x92\x91\x42\xdd\xa7\x12\x1a\x84\xf7\x7b\x86\x62\x2f\xa3\x58\xcf\x90\x6c\xc8\xd8\x62\x9b\x30\x31\x88\x76\xa7\x2e\x08\x4c\x1c\x51\x2d\xc1\x63\xc5\xe7\x64\x58\xa2\xe0\x00\xf0\xec\x42\xe6\x19\xe0\x47\x0b\x8c\xf4\xd8\xc2\x14\xad\x19\xf5\x82\xe7\x41\x57\x1c\x06\x5a\xcf\x53\xbd\x8a\xe4\x17\xe1\x0e\x58\x0f\x77\x5e\x94\x79\x83\x8b\x87\x8d\xe8\xfd\x11\xc8\x5a\xcc\x24\x29\xc1\x02\xed\x80\x9c\x60\x63\xe3\xaa\x51\xf0\xe9\x66\x90\xfb\x71\xd9\x88\x61\x8b\xdb\x1f\x18\xb5\xaa\xb1\x31\x58\xde\xc8\x20\xf6\x5e\x6a\x95\x65\x1d\x39\x72\x24\x4b\x66\x95\xca\x64\x39\xf7\x4c\x68\x9c\x70\x8f\x71\xd5\xa8\xc6\xf2\x60\x23\xfd\x74\xd9\xc4\x64\x4f\xd1\x41\x78\x6d\xff\x7e\x20\x3e\x98\x9f\x9f\x3c\xa9\xac\x61\x49\xc5\xbd\x52\x5a\xa2\x50\x33\x43\x9d\x79\x28\x97\x51\xc1\x81\x30\x53\x72\x4f\xf9\x12\xf8\x0d\x79\x49\x23\x6c\x92\x59\x65\x52\x69\x76\x66\x66\xb6\x54\x2a\x4d\x93\xe5\x14\x49\x24\x45\xd7\xf0\xcb\x46\xad\x22\x7d\xba\xef\x0d\x5a\xf4\x32\x6a\x97\x02\x2c\x7d\x08\x32\x78\x1b\x0a\x6b\x3a\xd8\xad\x0c\xea\xd4\x1a\x91\x1c\xb1\x7e\x18\x94\x28\xa0\x04\xbc\xdd\xef\x61\xf3\xd1\x0a\xaa\x2f\x50\x8f\xd8\xf9\x1a\x00\x7b\xbe\x01\xf3\xe6\x37\x77\x1c\x04\x33\x1f\xf9\xc3\x1f\xdf\xae\x19\x07\xbf\x87\x0f\x6c\x7f\xf5\x67\x9a\xf9\xf2\x0f\x05\xbd\xd5\xf4\x4a\xb1\x2d\x38\xa4\xa1\xda\x68\xdc\x7c\xfd\xcd\x03\xf4\x57\xab\xbf\x79\x77\xef\xc8\x3f\xbc\xf9\xf2\x8d\x57\xe6\x1f\x6d\xb0\x99\xfb\x78\xe1\xe6\xc0\x40\xda\x5f\x03\x9a\x7e\xf7\x13\x18\x3e\xb9\xf7\xfa\x09\x83\x56\x0f\x2a\x31\xab\x00\xe0\x86\xac\xbb\x27\xde\x5f\x89\x6e\xbd\x80\x46\x9f\x42\x51\xa8\xa7\xc5\x58\x0a\xdc\x21\xb1\x11\x49\x27\xb3\xe4\x95\x50\x13\xaa\xae\x21\x06\x07\x1b\x71\x60\x33\x15\x11\xe2\x51\xfe\x81\xe2\x6c\x74\x53\x14\xab\x98\x83\x74\x62\xc2\x82\xb8\xa0\xb6\xb6\xaa\x09\x9d\xba\x9d\x2f\x13\xbb\x95\x02\x3c\xbf\x3b\xc9\x96\x1c\xee\x08\x82\x3f\xc9\x00\xf1\x26\x25\x08\xac\x11\x79\x44\x2c\x1e\x65\x4f\x70\x38\x6a\x62\x1c\xd8\x3e\xa5\xc8\x0a\x94\x40\x54\xf0\xd1\xc0\x9f\xb7\xef\xbe\xb6\x63\xc4\xce\xb7\xe6\xad\xbf\x5a\xf7\xc7\x79\xf0\xfe\x77\x7e\x03\x3f\xba\xb0\x7a\xf5\x05\xe0\xfa\xcd\x45\xb0\x00\x86\xe8\x67\x17\xc3\x5a\xf8\xc3\x73\x71\x09\xef\x73\x80\x05\xc7\x6e\xbf\xdf\xdd\xb4\xc5\x96\x27\x97\xe6\xfd\x32\x7f\xf9\x9d\x3b\xae\xed\x9a\xf7\xd6\xce\x11\xb7\xcd\xb9\xfd\xd1\xd6\xd5\x17\xe0\x47\x88\x7a\xa0\x2c\x3e\xa4\xfb\xc1\x23\x51\xf8\x51\x17\xad\x84\x3f\x5f\x85\x8b\x8f\x00\x62\x4e\x82\xda\xc9\x86\xea\xd1\x16\xc3\xd3\x8d\xe1\x11\x04\xec\xc0\xad\x01\x69\x88\xce\xd1\x76\xc0\xed\x8e\x1e\x18\xc7\x8c\x6a\x7f\xf6\x05\xf6\x7e\xfd\xee\xe8\x77\x60\x1c\x94\x47\x1e\x05\x53\x99\x5e\x60\xdd\x3d\x91\x4f\x17\x33\x63\xa2\xc9\x4d\x13\x23\x0f\x81\x21\xf4\x9a\xc8\xa7\x74\xaf\x78\xdb\x84\xb9\x1f\xc9\x7e\xee\xed\xa8\xa3\x10\x8f\xe4\x9d\x2e\x6b\x3a\xc3\x1c\xb6\x44\x21\x9a\x2c\xe8\x8c\xae\x11\xbf\x1a\x3f\xfb\x3a\xcf\x41\xda\xe8\xd5\x74\xfa\x24\x36\x08\x70\x39\xe8\x98\x2a\xec\x3e\x20\x62\x69\x28\xf2\x5b\xe9\x6e\xcf\xa0\xb3\x41\x23\x9c\xe9\xb0\xba\x49\x8d\xfe\x68\x2a\x7e\x8e\x86\x5b\x8e\xb4\x44\x71\x74\xe7\x8f\x93\xf3\x6a\x60\xb3\xe7\xda\x6d\x79\x2e\xc3\x20\xb5\xa6\x37\xaf\xee\x97\xa2\xad\xd1\x65\x16\x01\x35\x2f\xe7\x12\xd3\xd2\xea\x36\x75\xd7\x5f\x54\x0d\x42\x58\x61\x0d\xb6\xd2\x3f\xaa\xd5\x2d\x74\x0b\x3a\x90\x9f\x88\xc7\x06\xbf\x9b\x55\x0e\x93\xcd\x66\x72\xa8\x34\x52\x95\x4a\xfd\x81\x4a\xa1\x92\x6f\x04\x80\xe1\x45\x2d\xb1\x84\xd1\x1d\x2d\x6a\xc1\xc7\x23\xe9\xab\xb3\x04\x04\x2c\x81\xdd\x2a\x07\x76\xa3\xc9\xca\x11\xbe\x3e\x0e\xf2\x26\xac\x24\x51\x3f\xe3\xb0\x97\x2e\x3b\x51\xf8\x11\xbc\x3c\x61\xa9\x55\x20\x28\xea\x05\x62\xc4\x07\xcf\xc0\x8e\x74\x25\x8b\xd5\xa1\xb1\xfb\x47\x31\x2a\x1f\x6c\x15\x8b\x25\xbc\x3a\xf2\x90\xd3\xa3\xd6\xa4\x99\xd2\x6c\x9a\x26\xc4\xa9\x13\x9e\x1f\xa2\xa5\x64\x93\xad\x2c\xd7\x63\x71\x6b\x75\x26\x4b\x6e\x5e\x12\xbc\xd7\x78\x67\x23\x56\xda\x69\xbc\xd3\xd8\x9c\x94\x97\x6b\x31\xe9\xb4\x6e\x8b\x27\xb7\xcc\x36\xdb\x30\x39\x88\x2b\x1d\x9c\x6c\x98\xad\xb1\xa1\x7c\x34\x6a\x8f\x93\x1d\x63\x53\xd3\x1f\x8b\x5d\xe2\x56\x8e\x95\x6a\xc3\x65\xb3\x9d\x19\x41\x5b\x86\xba\x29\x9e\xb9\x56\xd9\xa4\x4f\xf1\xbb\xea\xdc\x59\xbe\xd2\x9a\xf4\xe1\x73\xf6\x5d\xd8\x37\x67\x78\x7a\x4d\xa9\x2f\xcb\x5d\xe7\xf2\xa7\xe8\x4b\xfb\xa3\xaf\xd2\xbf\x54\x9d\x61\x0b\x66\x38\x67\x97\x85\xb5\x7a\x59\x77\xdd\x00\x1e\x8d\x62\x3b\xe1\x49\x88\xf2\x0b\xa5\xc6\x36\x40\x5e\x12\xea\xa1\xd4\xb2\x7a\x48\x49\x34\x5a\x02\xe8\xe7\xd7\xc3\x21\xcf\x44\xd7\xd1\x9b\x6f\xa5\xad\x12\x6c\x19\x0c\x14\xf0\x1f\x80\x7d\x21\x12\x06\x0a\x30\xf3\x16\x9b\x27\x98\x86\x5c\x46\xdf\xc5\x8d\xb8\xe1\x32\x6a\x10\x35\x89\xf8\x20\x76\x8b\xe2\xf8\x4d\x78\x1f\x4b\x90\x55\x1b\x4d\x98\xdc\xbb\x85\x2d\x7e\xa2\x01\xd7\xe5\xbd\x43\xf0\x11\x67\x05\x26\xc1\x0d\x3c\x7e\x4c\xed\x76\x11\x11\x55\x86\xba\x33\x0a\x8b\x9d\x08\x17\x20\x9a\x5b\xed\xe3\xd5\x7c\x56\x92\x5c\x9e\x66\x91\x9a\x56\x7c\xb0\x72\xd3\x17\xfe\x39\xf5\xc6\xdc\x90\xa9\x76\x26\xfe\x1c\xac\x71\xc8\xfc\xfd\x6f\xdf\xd5\xf1\xe7\x47\x7f\x3c\xb3\x37\x08\x82\xbf\xfd\x0b\x18\x6b\x5a\xbc\xbf\x7d\x92\x29\x2b\x49\x67\x96\x6b\xfb\xf7\xd7\xca\x8b\x2b\xb4\x93\x00\xb5\xc9\x94\x65\xd2\x99\x15\xda\x39\x73\xb4\x0a\xb3\x39\xa8\x05\xcf\xf5\x9a\x68\xc8\xcb\x4f\xb2\x30\xd2\x52\x6b\xff\x01\x2b\xdf\x5f\xb1\xeb\x36\xcb\x60\x53\x28\xd7\x58\xbb\xf7\xc2\xde\xf9\x83\xef\x3a\xf3\xd7\x47\xf7\x7f\x69\x7c\xe1\x4b\xf8\xdb\x6f\x92\x5f\xbe\xed\xc9\x1d\x76\x85\xa6\xc2\xdc\x0c\xe8\x66\x73\x30\x43\x61\xbe\xab\x1a\x26\xbd\x95\xae\xd0\x06\xcd\x0f\xbe\xfe\xdb\x07\xcc\x15\x1a\xad\x3c\x05\xf1\x14\x19\x37\x28\xee\x0a\xd9\x87\x9f\x87\xd8\x48\x32\xeb\xe1\xb1\x2a\xe0\x32\x62\x0f\x08\x1c\x36\x7f\xc1\x82\x34\xac\x9e\x9b\x06\x88\x4f\x52\xd6\x8d\xb7\xdf\x7d\x71\x11\x1b\xc1\xf8\x72\x64\x03\x0f\x4b\x2c\xbe\x88\x57\x53\x2b\x63\xb2\x8a\xb9\x2b\xab\x9f\x59\xb3\xe6\x99\xd5\x57\x17\x1d\xb4\xef\xba\x3a\xf7\x85\x95\x93\xfd\x0e\xb9\xc4\x92\x37\x6c\x56\x43\x6e\x8a\xd8\x64\x99\xe3\xce\x5c\xb4\x4f\x9b\xe7\x9f\x30\xbe\xc6\xa2\x5a\x7c\xd7\x8c\xac\xac\xb1\x9b\xde\x5a\xb1\xfc\xcc\xda\x31\x2e\x6b\x8e\x3f\x57\x43\x8b\x74\xe6\xe2\x0c\x8f\x45\xaf\x6a\x74\x3a\xab\xa7\x64\x4b\x5d\xd5\xab\x47\xd5\xdd\x3e\xbe\xa6\x20\x5d\x27\xa5\x15\xa3\xd7\xac\x19\x3d\x66\xcd\x9a\x53\xaa\x27\x97\x0e\x0c\x0d\xce\xee\x33\x72\x78\x83\x57\xa9\xcb\xaf\xf4\x66\x38\xf2\x7b\xb9\x95\xe9\xf9\x29\x56\x1a\x4c\x6f\x30\xe7\xe5\xba\x8a\xf2\xd2\x15\x7c\x60\xcc\xc2\x3b\x26\x0c\xde\xb1\x7e\x52\x69\x71\xc3\xac\x99\x5e\x4f\x4d\x4e\xaa\x54\xaa\x75\xf9\x47\xf9\xd5\x3a\x00\x82\x83\x9d\x49\x2e\x7f\x41\xaf\xd4\xe4\x52\x7f\x28\xd0\xcf\x5f\xe3\x4d\xb4\xc3\x13\xec\xd7\x6f\xda\x3d\x70\xf6\xb8\x4e\x74\xc4\x4d\xb7\x6a\x95\x37\xc8\xda\x13\xa0\x23\xe8\x7e\x15\xee\xe9\x73\xbb\x89\x26\x23\xb9\x4b\x28\x14\x0b\x83\x1b\x3d\x3c\x6b\x77\xf1\x72\x82\xbe\x4d\x80\x58\xd3\x77\x5a\xc3\x53\xb6\x20\x50\x7b\xd0\x02\x1e\xa8\x8d\xce\x44\x5f\x69\x89\xb2\x86\xd8\x35\x9d\xdf\xdd\xa6\x1d\x1c\x06\x99\xed\xbb\x76\xb5\xc3\x4b\xe8\x08\x7e\xc0\x65\x68\xed\x2a\x14\x39\x70\x3d\x0b\xde\xf1\xc4\xae\xf6\xce\xa7\x06\x77\x2b\x7a\x42\xb8\x1b\xff\x8a\x3d\x1a\xde\xd4\x92\xdd\x5c\x98\x87\x12\x73\x00\xad\xbf\xd6\x56\x37\xb5\x0f\xd3\xa3\x7d\xfe\x69\xeb\x04\x12\x6d\x35\xff\x55\x6b\xcc\xeb\xaa\xcf\xff\xa0\x09\x7a\xea\x47\x39\xa9\x72\xc4\x6b\xe8\x88\x41\x33\x81\x57\x07\x88\x81\x27\x5a\xdc\x82\x12\x7c\xe7\xb9\xc8\x88\x85\x43\x82\x27\x3c\xd2\x46\x42\xd8\x6f\x33\x8a\x3e\x71\x30\x3a\x5d\xea\xf5\x70\xaa\x4e\xc7\x38\x44\xe3\x47\x5e\x1f\x3e\x92\xc9\x48\x06\x14\x59\x34\xe1\x03\x95\x9c\x01\xd7\xbb\x8a\x5d\x88\x46\xa3\x23\x86\xe3\x0a\xc3\xb7\x2c\x46\x83\xc1\x68\x01\xa5\x4c\xff\xc8\x75\x86\x4f\xb2\x27\x7a\xdc\xb4\xff\xe6\x06\x25\xf8\x9e\xc0\x14\x2a\x1e\xbe\xff\xf3\xcf\x63\x76\x76\xf8\x64\x20\x08\x45\xbd\xa8\x1a\x6c\x67\x07\xf0\x14\x95\x03\xe2\x3a\xbf\x31\x0f\x18\x68\xee\x72\x33\x1e\xc4\x11\x11\x35\x6b\x67\xbc\xe4\x46\x61\x94\x74\x86\x75\x7e\xac\xe3\xc2\x88\xf0\xa4\xe7\x07\x8c\x83\xe8\x6d\xc6\x3e\x03\xd1\x9f\xc5\x7a\xb1\x39\x71\x94\x7f\x4c\x9f\x49\x29\x55\x8b\xc4\x03\x3c\x1d\x94\x67\x80\x78\x91\x0a\x5f\x83\x69\x66\x07\x6d\xa3\xb3\x8a\xf1\xd1\x99\x0c\x8e\x60\xc7\x17\xc5\x2e\x10\x8e\x9d\x9b\x6c\xb4\xa3\x38\x0b\xdd\x73\x98\xb9\x64\x67\xc7\xea\xf1\x1b\xa6\xe9\xb6\x8d\x79\x58\xd0\x57\x7f\x78\xcc\x36\xdd\xb4\x0d\xe3\x65\x7d\xf3\x1e\xc6\xb0\x5f\x28\x22\xaf\x2f\x83\x5b\x30\x3a\xcb\xd3\xbb\xb7\x87\xde\x87\x82\x91\x36\x3a\xcb\x0c\x8e\x98\x1d\x6c\x96\x19\x36\x25\xa7\x87\x50\x18\xc3\x2c\x34\x91\xe6\xe9\x0a\x1b\x50\x38\x8b\x75\xe0\x8b\x2c\x3a\x9d\xfd\x08\x4e\x05\x2f\x36\xce\xc7\xb7\xe7\x37\xc2\xfe\xe0\xbe\xdc\x12\x1c\x2e\x41\xfd\xdf\x8e\xfa\xe5\x67\x64\x0d\x36\x04\x7b\xc8\x72\x30\x78\xf3\xcb\xce\xd8\x8b\x4c\x46\x22\x5c\x62\x88\x36\x28\xea\x15\x8e\xce\x10\xee\x25\x44\x8e\x94\x10\x22\x60\xdb\x46\x9e\xf1\x76\x86\x70\x0e\xcc\x67\x21\x18\x62\x60\x09\x9f\x04\x5f\x0c\x81\x80\x4a\x2a\x65\x4b\x38\x33\x7c\x71\x28\x9f\xd4\xa6\x96\x4a\x98\xc1\x10\x85\x3e\x57\x91\xd0\xdb\xf8\x84\x52\x82\xfe\x21\x1c\x26\x29\x41\xff\xa1\x7c\x72\x9b\x2a\x96\x32\x16\xc2\xf9\x48\xb0\x38\xea\x06\x05\xae\xb5\x25\xdd\xa0\xe4\x4a\x65\x5b\x12\x7c\x01\x4d\x6f\x6a\x50\x12\x3f\xa3\x43\x5b\x12\x10\xee\x81\x01\x38\x0e\x9e\x89\x9f\xe5\x72\x61\xfd\x39\x1b\xcd\x33\x7b\x63\xf6\x9a\x1a\x62\x71\x6f\xe2\x35\x26\x9e\x91\x30\x1a\x06\xeb\x0a\x02\x34\xfe\x89\xb5\x25\x1a\xa4\x04\x65\x93\xa9\xd9\xb3\x77\xef\x9e\xf5\xe0\x3c\x3c\x07\x8a\x60\xc1\x8d\xf1\x20\x04\x5b\xc7\x53\x37\xe8\xdf\x87\xe6\x1f\x3f\xfd\xcb\xe9\xe3\xf3\x43\xf1\x00\xf8\xd3\x9e\xbd\xcc\xb6\xbd\x7b\x22\x93\xc0\x79\x50\x84\xfe\x9f\x8f\x1e\xa2\x6e\x8c\x87\xa7\xe0\x29\xf4\x00\x68\x41\x63\xf5\xad\xb7\x57\x15\x16\xae\x7a\x1b\x94\xa2\xf1\x5a\x2a\x84\x85\xb1\x99\x79\x83\x62\x2e\x75\x96\x8b\x72\x06\xdc\x9a\x80\x5b\x87\x25\x05\x58\x71\x12\x9d\xe8\xe1\x8f\xa3\x7f\x36\x30\x35\xfa\x15\xfc\xe3\x1c\xb0\x18\x6e\x9b\x03\xb2\xe8\x94\x05\x27\x4e\x80\x79\x27\x4e\x44\xff\x1b\xde\x17\xfd\x92\x7e\x0b\x5e\x9a\x03\x96\x80\x25\x73\xe0\x25\xfa\xad\xe8\x97\x82\x5d\x4d\x4c\xd7\x0b\xcb\x63\xb2\xa8\x42\x8a\xea\x94\x1c\x75\x4a\x90\x44\x04\xcd\x4f\x87\xa5\x5f\x44\x7e\x88\xa5\x5f\x98\x38\xb3\xb1\x3b\x1c\x55\xd7\x5c\x57\xd7\x1c\xad\x23\x27\xb6\xee\x73\x01\xa9\x6f\xad\xa2\xa3\x4d\x67\x43\x3d\x50\xc1\xda\xc8\x39\xda\x14\xbb\xf3\x1e\x4e\x57\xc7\x90\xe4\x75\x30\x2d\x0e\xec\xd7\xaa\xd7\xb6\xa3\x4e\x6e\xd6\x6b\x39\x74\x7a\x39\x16\x4d\xe4\x46\xcc\x8d\xfe\xa2\x28\xf7\x22\x91\x92\xa8\x51\x49\x53\xb1\x3f\x18\xec\xf6\x45\x97\x05\x40\x21\x26\x4f\xfe\x22\x80\xdd\x3e\x48\x40\x21\x0e\x9b\x9a\x99\xa4\xc8\x7d\x5a\x25\x3f\x0d\x9c\xa3\xf7\xc0\xe7\xa2\x3f\xbe\x09\x8b\xde\x14\x17\x71\x05\xd3\x78\xa5\x36\x72\x1f\x93\x44\x2e\xc5\x4c\x30\x22\xa1\x97\x2a\x72\x0c\xa0\x38\x22\x11\x8d\x8d\xde\x47\x4f\x35\x45\x37\xc2\xf7\x0c\x39\x8a\xe8\x9d\xcc\x3f\xd0\x95\x29\x41\xde\xd6\x86\xbe\x04\xde\x75\x29\xc4\x7e\x51\x7d\x0e\x40\x6c\xc8\xdd\x18\xf0\x8a\x20\x4c\x72\x7a\xbc\x5c\x17\xd4\x27\xd3\x05\xe5\x49\xc1\xed\x07\x9e\x2c\xd0\x5c\x7a\xe4\x08\xd3\xb7\x79\xeb\xe6\xeb\x4d\xa0\xf1\xda\x9e\xb5\x30\x93\x60\x1b\x84\xa7\x8c\x86\xd1\x17\x56\x9c\x2b\xd3\xd5\xe9\xca\xce\xad\x78\x01\x46\x47\x4f\xf9\x11\x1c\x02\x5f\x83\x43\x3f\xd2\xad\x6d\xd1\x0b\xe3\x32\x68\x30\xb1\xb6\xa9\x7e\x12\x00\xb7\xb7\xb5\xbe\x7c\x6c\xfa\x9a\x43\x9f\xce\x6c\x04\xa0\x71\xe6\xa7\x87\xd6\x4c\x3f\xf6\xf2\xfb\xc2\x64\x10\xc7\x6e\x88\xcb\x4f\x84\x75\x96\x8e\xca\x44\xfc\x80\x60\xf3\x6d\x70\xf8\x74\xc4\x13\x99\xbd\xeb\x47\x44\xfd\xc0\xcd\x13\xe3\x93\xd8\x14\x87\x56\x66\x1c\xfa\xeb\xa1\xb7\x47\x33\x91\x48\x84\xf9\x09\x3e\x06\x46\x60\xb5\xdc\x68\x13\xe3\x96\x8b\x6d\x70\xd3\x07\x1f\xc0\x4d\x36\xb1\x5c\x2e\x66\x2f\x89\xd1\x92\xed\x45\x38\x8b\xde\xfa\x09\x3a\x7c\x31\x32\xd8\x91\x19\x1c\x39\x32\xc8\x5e\x0a\x8e\xa4\x17\x84\xc3\xd4\x8d\x35\x6b\x20\x46\x3f\xa0\x84\x70\xe4\x41\xfc\xc4\x0d\xea\xb1\xc7\xd0\x98\x14\x77\x64\xa2\x3c\xd8\x09\xfb\xf6\xed\xd3\x77\x3d\x36\xb2\x9b\xce\x4a\x1a\x9e\x95\x40\x6c\xc3\x5e\x94\x06\xb0\xb6\x8e\xc9\xca\xe2\x7d\x53\x1c\x43\x03\x0f\x47\xbb\x6d\x72\x14\x8f\xc1\xd9\x0c\xc0\x01\x94\xb4\x87\x66\xc2\xcd\x25\x5b\xcf\xa7\x67\x8c\x96\xba\xdd\xc1\x69\x8d\xbe\x5c\x09\x9b\x5b\xbf\x78\xd1\xee\xda\xfd\x00\x14\xf9\x2c\x83\xde\x83\x0d\x75\x0b\x86\xf5\x2a\xf3\xd4\xba\xd1\x30\x3a\x0d\x7c\x57\xef\x6c\xb0\x72\x4a\x85\x02\xf4\x69\x86\xdf\x18\xb7\x36\x9f\xd8\xfb\x12\x7d\xfe\x77\x0d\xef\x2c\xd6\x69\x32\xd5\xd6\xb4\x9c\x69\x1b\x26\x0c\xd7\x88\x87\xdf\x79\x7c\xdd\x12\x5b\x95\x88\x49\xcf\x30\x94\xa1\x91\xbf\xba\xf7\xba\x43\xf7\x5e\x79\x13\x14\x6d\x19\xd0\x72\xf2\x91\xaf\x8e\xff\x69\xd9\xf0\xe1\x26\xf8\x22\x48\xa5\x93\x94\xb4\x6d\x24\x95\xa0\xdb\x96\x4f\x76\xb0\x88\x87\x79\xca\x03\x78\xd6\xe6\x74\x29\xc9\x5e\xb2\x92\x46\xf4\x95\x28\x20\x20\x0a\x1a\xf0\x62\x75\x72\x6f\x51\x20\x88\xa1\xef\x69\x37\xe6\xf1\x63\x23\x92\xed\xb1\x16\xe9\x89\x52\xd4\x73\xad\xc2\x4d\x95\xe7\x99\x61\x07\xfc\x16\x76\x98\xf3\xe4\x29\xe6\xd7\xe7\xd2\x29\x66\x8b\x44\x6a\x4c\x96\x28\x73\xd5\x62\xbf\x26\x5b\xe3\x17\xab\x73\x95\x92\x64\xa3\x54\x62\x31\xa7\xd0\x73\x5f\x37\xc3\xe7\x89\x80\x93\xde\x3a\xff\x55\xf4\xe4\x17\xb0\xe3\xd5\xf9\xf3\x5f\x05\x1c\xb0\x02\xee\x55\x58\x0b\xcf\xc0\x2f\xcf\xad\x58\x71\x0e\x58\x40\x09\xb0\x90\xd0\x99\x5b\xad\x7f\x46\x14\xa7\x88\x82\x41\x51\x4a\x71\x9e\xc8\x23\x3f\xfc\xe9\xe8\xfe\x86\xe4\x02\x29\x9b\xa5\xdf\xba\x7c\xf9\x56\x7d\x16\x2b\x2d\x48\x36\xf4\x1f\xfd\xe9\x61\xb9\x47\x74\x94\x88\x53\x17\xf4\x78\x13\x0e\xcd\x59\x71\x0e\x7e\xd9\xe3\x85\xb0\xe0\x56\x6a\x68\xa8\xd7\x57\x23\xfa\xfd\x72\xac\x8d\x07\xa0\x18\x23\x31\x87\x21\xab\x1f\x1d\x81\xb5\x77\xc7\x34\x38\x51\x7b\xa2\x6e\x2f\xf2\x00\xa2\x93\x8b\x11\x1a\xd1\xe4\xe6\xa4\x05\xa5\x69\x3d\x28\x0a\x90\x55\x05\xb6\x2d\xc4\x7a\x82\x46\x6e\x55\x35\x97\xcb\x96\x67\x89\x98\xdc\x52\xc6\x71\x77\x60\xcf\x1d\x63\xcf\xee\xdc\x34\xfd\x8e\xe5\x0f\x02\xf1\xde\x67\xed\x8d\x65\x9c\xed\xaf\xe6\x6a\x2b\xf8\x36\x43\xae\xc9\x39\x0b\x16\x65\xed\x69\x6e\xde\x33\x33\xf2\xd1\xac\x31\x5b\x77\xbd\xba\xa7\x63\xd7\xe2\xad\xbd\xcf\xd2\xbf\xf4\xcb\x8f\x5e\xce\x2e\x01\x4c\x9f\x5c\xf0\xb8\x78\xc1\x9a\x4b\xf7\xdd\x31\x6d\xd3\xce\x73\xe3\xee\x5c\x98\x02\x72\x47\xfd\xc6\xca\x55\x35\xa6\x5e\x34\xf1\x5a\xf8\x95\x21\xbf\x4f\xd1\xb7\x7a\xf0\x68\x33\xce\xa6\xfd\xb5\xf2\xad\x8b\x77\xb5\xef\x79\x65\xcf\xd6\xc6\xb9\x3b\xcf\x52\x3d\x7d\xfc\x0e\x26\xbe\xe0\x7a\xf8\xf8\xc5\x28\x01\xbc\x92\x16\x36\xbb\x49\x74\x90\xf9\x7f\xd5\x7d\x09\x7c\x1b\xc5\xd9\xf7\xce\xec\xa5\xfb\x5a\x69\x65\xdd\xb2\x4e\xcb\x87\x64\x4b\xb2\xe4\xdb\x8a\xed\x38\x89\x1d\x27\x8e\x73\xc7\x89\xe3\xdc\xf7\x09\x39\x49\x88\x21\xe4\xe0\x86\x04\x52\x20\xe4\x6a\x80\x70\xb6\x25\xd0\x70\x15\x1a\xa0\x25\x94\x16\x48\xb9\x1b\x5a\x9a\x04\xde\xb6\x94\x12\x28\x94\xb6\x90\x68\xf3\xcd\xcc\xca\x8e\xed\x84\xd2\xbe\xef\xf7\xfe\x7e\xdf\x97\x58\x3b\x3b\xb3\xb3\xb3\xb3\xb3\xcf\xcc\x3c\xcf\xcc\xf3\x3c\xff\x34\xf1\x6b\x41\x60\x8b\x88\x36\x4b\x54\x56\x32\x81\x5e\x1d\x34\xb8\xa1\xb7\x0e\x22\x96\xb3\x3f\x7f\x4b\x2f\xcf\x41\x14\xef\xc7\x6e\x79\xdc\xb5\x45\x21\xaf\xcb\x4a\x62\x16\x47\xc2\xe3\x2a\x2f\x9e\x98\xac\x08\xbb\x12\x4a\x83\x5a\xb1\x58\xc5\xf0\xeb\x3f\xbc\xea\xfd\x33\xd2\xb9\x4f\x1f\x9a\x3b\xf7\xa1\x4f\x01\x43\x42\x70\xeb\x60\xa6\xb8\xbd\xb7\x44\x13\x38\x1d\x6f\xaf\x72\x5b\x4c\x66\xa7\x9e\xec\xe3\x35\xf9\xab\x03\x7e\x83\xd6\x16\xf0\x14\x56\x3b\xcc\xf5\x1a\xae\x83\xb7\xab\x8e\x3e\x06\x1a\x51\x71\xfd\x8b\x95\x9e\x18\xc4\x4a\xa3\xf6\x08\x9f\xa7\xd9\xc9\x44\x3e\xac\x43\x5c\x4b\x37\xb6\x91\xed\x5d\xcd\x41\x2d\x10\xc2\x08\x61\xa8\x6f\x79\x80\x40\x13\x5d\x0d\x22\x0d\x3b\xb0\x76\x0f\xe9\x73\x48\x48\xa4\x05\xd9\x27\xa7\x07\xf0\xd8\x07\xa3\x07\x13\x04\x26\x8f\xb0\x1f\xfb\xf2\x21\x80\x7a\x58\xa5\x03\x88\x58\x35\xa8\x1c\xfc\xa0\x67\xea\xd4\x9e\x4e\x70\x43\x4d\xa3\x4e\xba\x95\xd7\x31\x34\xaf\x5e\x0f\x0e\x34\xda\xf4\xda\x78\xb9\xcb\x46\xc3\x17\xd9\xf1\x7e\x46\x65\x32\xf3\xbc\xe0\x31\xaa\x99\xe8\x9b\xd6\x29\xad\x5e\x70\x3f\xcf\x23\x66\x4a\x5a\x52\xd4\x99\x97\x17\xe0\xd4\x31\x7f\x5d\x01\xf6\xb5\xb6\x81\xde\xe9\xa1\x95\x6a\x33\xb7\x52\xfa\x25\xad\xa0\x69\x35\xf3\x8b\xce\x21\x99\xce\xce\xcc\x90\xac\x3f\xee\x17\xad\xe0\x88\x86\x87\xb4\x42\x7b\xbd\xb4\x57\x4a\x1f\x2d\xb4\x73\x76\x9b\xb6\xc6\x61\x84\x93\xc1\xfe\x7b\x3e\xc8\x0b\x08\x5a\x00\x69\x8d\x39\x4f\x0f\x11\x3f\xba\xd1\x57\x90\xfd\x07\xab\xa1\x81\xf6\xbe\x15\x27\x2b\xd2\xd3\xbc\xcd\x0e\x51\xe3\x15\x0c\x4a\x30\x5d\x7a\xa4\x4c\xc1\x42\x56\x1d\x51\x3d\x0c\x3e\x06\x0c\x84\x4a\x05\xf1\x7d\x46\x53\x1f\x2a\x29\xc6\x89\x46\x5a\x35\xe2\x9e\xcb\xa8\x56\x6a\x0e\xb5\x09\xcf\x70\x34\x9b\xcc\xd9\x00\x01\xa1\x0f\x5d\x82\xc8\x04\x21\x19\x6e\x0d\x73\x00\xfd\xe6\x08\x44\x73\x34\xef\xc7\xee\x33\x93\x51\x3a\x9c\x70\xd3\x9e\x7f\x23\xc5\x0a\xfe\xf9\x10\xa0\x27\xcd\xe9\x4e\x25\x3b\x17\x67\x5f\x00\x82\xee\x3d\x9d\x20\xfd\x2e\xad\x32\x49\x5f\x59\x04\x2d\x2c\x56\x9a\xc0\x48\x9d\x99\xae\x3e\x7b\x4c\xfa\x42\x67\x36\xeb\x80\xe6\x65\x70\x07\xd0\x3b\x6b\x8b\x12\xa1\x4a\xbb\x01\x00\xa0\xb3\x57\x84\x8a\x22\x75\x2e\x23\x7c\x0a\xa5\xd7\x5d\x48\xb7\xf5\xa6\x1f\xc9\xe5\xaf\x18\x98\x0e\xa0\x1b\x28\xef\x9b\xb8\x50\xda\xb0\x12\xbc\x92\xd5\xe0\xd2\xeb\xc6\xe8\x03\x46\xf8\x95\xce\xfc\x92\x74\xe5\x6f\x51\x1f\xfa\x9b\xce\x2c\xcd\x56\x07\x16\xcd\x58\x53\x54\xb2\x66\x41\xa7\xc3\xa1\x70\x75\x4e\xdd\x5c\x1d\x5b\x3b\x6f\xb2\xdd\xfe\x1f\xa6\xcb\xfb\x9f\x6c\x0f\xfb\x05\xd5\x42\x4d\x45\x12\xca\xd5\x68\x5a\xc0\xc0\xf7\xd8\xa9\x3e\x01\x67\x0c\xa3\x36\x09\x25\xd3\xd8\x91\x07\x59\x81\x24\x68\xe9\x30\x67\xdd\xce\x13\x67\x79\x58\x24\xb4\x5e\xd0\x54\xab\x03\x02\x1a\xb3\xe4\xa5\x1d\x44\xef\x56\x11\x11\xaa\xe8\xc3\x85\xe0\x05\x20\x92\x62\xe0\xe5\x04\x24\x52\x86\x72\x49\x68\x96\xe0\xe1\x02\x3b\xe2\x2c\x14\x4a\xa5\x3e\x60\xed\xca\xf3\x69\x39\x15\xab\x00\xc1\x20\x50\xb0\x2a\x4e\xeb\xcb\xeb\xb2\x06\xf4\x4a\xa5\x02\xc0\x80\x7d\xa2\xd7\x8c\xe4\x8a\xca\xd1\xf5\x2e\x0f\x47\x97\x85\x42\x65\x15\x8e\xfa\xcb\x69\x3a\xe3\xb3\x99\xbd\x13\xf7\xd9\x43\x42\x30\x88\x31\xff\x5a\x5b\x2d\x4f\xa6\x4c\x82\xb0\x7c\x39\x8e\xed\xda\x75\x10\x47\xa6\xcc\x98\x31\x05\x47\x97\x5c\x7e\xf9\x92\x3b\xd5\x5d\x6b\x95\x4c\x89\x43\xa1\x53\xab\x59\x8b\xe0\x62\x7a\xa4\x1e\x0c\x09\xc9\xaa\xd5\x3a\x85\xa3\x84\x51\xae\xed\x52\x8b\xb5\x1a\x85\xc9\x18\x1b\x9f\x6e\xd4\xf0\x8b\x4e\x48\x5f\x9c\x58\xb4\x3e\xdc\x19\x00\xc0\xa4\xd0\xd4\xd2\x87\x42\xe5\x42\x10\xbd\x29\x86\x2c\x6c\x7d\xab\x55\xf8\x31\xc6\x99\x5b\x09\x6a\x56\xe2\x84\x5d\xd2\xa4\x5d\x2f\xe3\x84\xce\x3f\x03\xea\xcf\x9d\x38\x69\x09\x9a\xf2\x7e\x25\xfd\x89\xf8\x49\x37\xe3\x83\xa2\xa7\x8f\xd7\xf5\x10\x6c\xa3\x34\x55\x8f\xe6\x62\x8c\xa7\x35\x1d\xcd\xc7\xcb\xa8\x35\x88\xf2\xb7\x51\x37\x53\xdf\xa3\xf6\x11\x3b\x7b\xb2\xa3\x12\xc8\x85\x30\x17\x0e\x4e\xff\xd6\x7c\x83\x76\x34\xbf\x2d\xfe\x5d\xe1\xb7\xdd\x0f\xa0\xec\xb9\xf8\xfb\x24\x90\xff\xe0\xf7\xfb\xa7\x65\xbf\x7f\x71\x8e\xaf\xbd\xc4\xcb\x32\x5c\x4e\x02\x69\xf9\x25\x62\xac\x1c\x64\x07\xc4\x2e\x99\x33\x17\x03\xdd\x5d\x17\x9e\x00\xe5\x40\xea\xba\x38\x6d\x40\xe4\x9c\x6e\xbf\x7c\x37\xfe\x03\xb7\x5c\x1c\x39\x2b\x07\xf4\x80\xd8\xa5\x32\xca\x7f\x39\xdf\x65\xdc\x39\x8e\xea\xf3\x08\x3f\x92\x1a\x47\x2d\xa0\xae\xa0\x6e\x40\xac\x40\xae\xd5\x52\xbd\x48\x99\x80\x07\xbd\x16\x54\xf2\x6c\x49\x5b\xfa\x8c\xa5\x52\x04\x56\x0d\x77\x3d\x62\xed\x43\xd6\x1b\x89\xbc\xd7\xdb\xf6\x41\x39\x4d\x56\xea\x90\x97\x23\xbd\x62\x50\xc6\x9d\xc3\x0c\xaa\x8c\xbf\x26\xb2\x62\xaf\xee\x66\x2e\x41\x96\xfb\xff\x40\x8e\x63\x01\x35\x05\x49\xac\x8f\x90\x08\xfc\xd8\x9a\x0c\xf8\x3d\xae\x90\xfe\xd4\x3e\x2c\x89\x2f\xdc\x65\x4d\x04\x7c\x05\xe1\x80\x8c\x99\x80\xf2\xf4\x62\x37\x64\x49\x7e\xd0\x8c\x82\xcd\xd3\xa6\x5e\x83\x82\xd7\x40\xe0\x35\x70\x1d\xe1\xe7\x84\x7c\xbe\xe9\x6e\x8b\xc2\x60\x4c\x5a\x9e\x00\x41\xa5\xc5\xa6\xd6\x14\x1b\xa6\xbe\x2a\xf2\x06\x43\xd2\xf2\xc9\x7d\x64\xd1\xe1\x2e\x79\xe9\xa1\xe4\x3c\x35\x05\x50\xdb\xe4\x08\x55\x3d\x6b\x52\x2c\xe2\x0f\xd5\x35\x44\xf6\x9d\xc2\xab\x32\x0b\x2b\x67\x8c\x2f\x0d\x47\x93\x33\xd2\x32\x8a\x0a\xae\x53\x0e\x18\xe2\x7d\x72\x0b\xd1\xf6\xc0\x2e\x1e\x71\xb8\xe3\xb5\xd7\x6e\xc6\xac\x9d\x28\x1c\x5e\x85\x1e\x84\x2a\x70\xed\x16\xc2\xea\x9d\xd9\x8d\xa2\xe8\xe9\x39\x3d\x5c\xfa\x3c\xa5\xc8\xe6\xf4\x2c\xe6\x51\x3f\x22\xfc\x7c\xce\xf2\x9d\x70\xbb\x29\xec\x81\x2b\x46\xac\x6b\x72\xe0\x8a\x78\xf6\xd1\x11\xd3\x6f\x3e\x2e\xab\xc4\xe2\x16\x8d\x13\xcd\x7c\x34\xdf\x85\xc2\x41\x19\xea\x0f\xa3\x64\x0a\x29\x53\x3a\xe5\xc6\xa6\x49\x7c\x2a\x87\x89\x87\xce\x88\xc7\xfc\x20\x71\xcc\x47\x73\xb2\x36\x3b\x5e\x05\x4f\xf7\x7e\x2b\x72\x2e\xf3\x88\x75\x44\xcd\x20\xed\xeb\xbb\x90\xc8\x25\x57\x43\xd1\xca\xe2\x41\x99\x51\x54\xdb\x8c\x75\xc1\xf2\xd6\x80\xca\x57\x1a\xac\x33\xda\xe0\x65\xbd\x67\xd5\xb9\x2b\xd2\x04\xe3\x48\x7f\xdd\xf0\x44\x29\xad\xa5\xa7\xee\x29\x30\x3a\x02\x26\x8b\xc5\x14\x70\x18\x0b\xf6\x4c\xe5\x0c\x4e\xe9\x83\xcf\x74\xfa\x02\xe3\x7e\xb5\x4e\xfc\xf5\x6d\xc6\xdb\xd7\x79\x46\xc7\x79\x4f\x73\xec\x8a\x5b\x0a\xea\x19\xb6\xb4\x60\x5c\x6b\xb4\xfc\xb2\x79\x01\x3b\xfd\x68\x5f\x0e\xbb\xbf\xc4\x65\x93\xf3\x30\x8a\x40\xba\x7f\x2e\xd3\xbf\x78\x14\xd0\x39\x81\x1f\x3f\x0b\x66\x60\xb9\x2f\xdc\x5a\x5e\x91\xaf\xf0\x84\x7d\xe5\x57\xe7\x42\x48\x52\x81\xc9\x6f\x37\x7a\x8c\x60\xf6\xd8\x40\xab\x51\xa9\x34\xb6\x06\xc6\xce\x86\xd0\xb1\x96\xf7\x83\x8c\xb5\x4c\xbb\x06\xa8\x77\x03\xe3\x6c\x1b\x5f\x37\xca\x5e\x3d\x74\x9c\x11\x3d\x1b\xd5\x53\x55\xa2\x8a\x9b\x5a\x37\x48\x47\x71\x0e\xe9\xab\xdd\xd2\x67\xb3\x45\xbf\x47\xce\x01\x4a\x03\x7d\x39\x02\xdf\x52\xf6\x00\x9b\x63\x81\x6a\x42\x3c\xec\x54\xbc\xdf\x4d\xb4\xa3\x42\xde\x3e\x3d\x29\xc4\x9c\x12\x6c\x0a\x12\x23\x3d\x11\x89\x76\xb9\x7e\xca\x11\xf5\x7f\xb9\x9f\xd2\x78\x8f\x04\x71\xf1\xbd\x76\x77\x18\x6f\x87\x0e\x85\xb1\xaa\x1b\xe3\xc5\x1d\x44\xfa\xed\x6b\x28\xb8\xe6\xc9\x6b\xe6\xe3\x2e\x84\x09\x9e\x40\x9b\x04\xc2\x05\xbe\x40\xc2\xba\x6b\x21\xa6\xe1\x7d\xa7\xf4\x21\x97\xc7\x1f\x48\x5a\x3b\x77\x67\x5f\x38\x9d\x7d\x56\xe3\xd3\xdc\xaf\xd1\x70\x19\x74\xf8\xd8\x3e\xac\xe1\xaa\xce\xd7\xb5\x3e\x78\x34\x47\xee\x3b\x72\xe4\x0f\x3e\xc4\x70\x3c\x38\x22\xf7\x93\xf4\x8c\x64\x34\x5c\x3a\x7e\x46\xe5\x42\xb2\xac\xb9\x2f\xd2\x50\x17\xf2\x47\x62\x93\x66\x55\xa3\xde\x93\xbd\x01\x17\x8b\x4a\xf5\x69\x38\x0e\x1d\xb5\x1f\xdb\x86\xdd\xb9\xa0\xf3\x75\x4d\xff\x35\x7c\x33\x35\x89\xa0\x2e\x61\x08\x0f\xd9\xcf\x78\x6e\x8f\x07\x6f\xf1\xe7\x58\x81\x30\x66\xe5\x31\x4b\x00\x89\xed\xbe\xac\x85\xee\xf7\xe1\xbd\x0e\x34\x3f\xe2\x1e\x95\x73\x7a\x52\x47\x7c\x89\xe7\x14\xc6\x13\x17\x7b\x47\xa3\x67\x6a\x11\x43\x88\xb8\x42\xb3\xba\x2a\xd9\xdc\xe4\xb4\x3a\x8d\xe0\x0f\xa3\xb4\x16\x6d\xe7\x36\x48\x97\x7d\x91\x57\xdc\x75\x7b\xcb\x81\x9d\x36\xc0\x88\xba\xd6\x92\x42\x8b\xcb\x2d\xf2\x79\x43\x3d\xfe\x4a\xdb\xbc\x89\x1d\x3b\x26\x5b\x38\x81\xa5\xd5\xab\x97\x94\x8e\x06\x34\xab\x7c\x72\x80\x71\x5e\xd6\xd1\x18\x7f\x39\xae\xa6\x01\x9c\x95\x99\xf4\x70\x48\x97\x2f\x55\xea\xae\x60\x15\x6d\x50\x3c\x3d\xe4\x63\xce\x78\xeb\x4f\xa6\xef\xd8\xcb\x41\xdf\xd8\xe4\xcc\x58\x5e\xcc\x6b\x43\x9d\x93\x17\x5d\x4d\x1d\xbe\x49\x8b\x17\xee\x68\x17\x27\x8b\x1a\xae\xc6\x04\x94\x50\x3f\xd0\x4c\x0f\x71\xa9\x41\xc4\x43\x9d\x60\xcf\x53\x36\xc4\xa7\x52\xc4\x5f\x1d\x92\x68\x20\x06\x66\x41\x0d\x84\xad\x74\x4c\x32\xfa\x6a\x58\xbe\x42\x5a\x91\xf6\xfb\xfa\x60\xd2\xcd\x98\x80\x70\xd3\xd0\x69\x44\x6c\x85\xb2\x4a\x17\x41\xd1\x4c\x78\x8d\x66\xc8\xcb\xae\x81\xdc\x00\xfe\x89\xd1\xba\xac\xe1\xf0\x82\xc5\xc6\xc0\xd0\x18\xe3\xd4\x98\x55\xd0\x90\x31\x08\xf0\x0b\xbd\x82\x13\xdb\x33\x9e\x43\x4f\xea\x39\x95\x4b\x61\xed\xda\x7c\xb8\x7b\xdb\xbe\xf0\xc4\x54\xe8\x1e\x90\x1f\x8d\x7a\xf3\xbd\x25\xed\xe5\x45\x22\xcb\xab\x54\x2a\xf0\xe1\x37\x43\xaf\x78\x76\x69\x32\x05\x56\x8f\x64\xe9\x39\x07\x27\x88\x1e\x61\x3d\xf3\x7a\x9e\xcb\xa3\xb7\x56\x49\xff\xb8\xb6\x78\xec\xa8\x18\x00\xac\x46\xd5\x06\xca\xdb\x3a\xb3\x87\x78\x2d\xa0\x0d\xca\x69\x0a\x21\x70\xbd\xa7\xf3\xd1\x3b\xba\x0e\x6d\x2f\xef\x59\xd0\xe8\x04\xd6\x70\x7c\x78\x28\xbf\xa0\x7e\xda\xea\xee\x42\x25\xa4\xc1\x57\xa7\x17\x9f\x7e\xe1\x46\x41\x29\xdd\x31\x53\xfa\x7e\x80\xae\xac\xd3\xf2\x3f\x45\x34\x04\xd0\xfc\xb7\x89\x3d\x4b\xd5\x52\x1d\x88\x8f\xa1\x30\x6a\x2a\x5e\x46\xc0\x52\x30\x2a\x39\x47\x48\xd8\x67\x0b\xf6\x50\x52\x02\xe4\xb1\x0d\xb0\x41\x72\x82\x1d\xe7\x58\xe3\xb2\x81\x1c\x16\x90\x78\x6b\x0c\xd2\xbd\x8a\xec\x1e\xec\xaf\x8e\x13\x81\x80\x17\x81\xf5\x00\x5b\xbf\x93\x71\x9a\xa7\xe5\x2d\x45\x25\x90\x43\x21\x17\x17\x50\x0b\xe2\x4c\xa9\x34\x22\xb2\x7a\xaf\xe3\x83\xda\xb2\x1d\x05\xea\xe1\x5c\xcc\x9b\xfd\xab\xb4\x5f\x19\xae\x4c\x85\x00\x23\x65\x22\x95\x10\xd6\x84\xc1\xd3\xd9\x7f\x44\xe2\x1c\x57\x19\x54\x81\x53\xd2\x81\x50\x29\xc7\xa5\xfc\x9c\x0e\x1c\xfd\x0d\x60\x80\x55\x6f\x7e\xda\xaf\xb3\x39\x2c\x4f\x9f\x60\x03\x67\x00\x0d\xf2\xd4\x5e\x4f\x8b\xe3\x26\xc8\x01\xaf\x89\xbe\x57\xcf\xe8\x4b\x35\xe9\x85\x30\xb2\xa3\x3c\xf3\x81\xaf\x30\x11\xfc\xc4\xa6\xf3\xe5\xb7\xe5\x01\x95\xf4\x8d\xc5\x12\xf4\xb7\x9a\xff\xba\x5d\x6f\xf1\x05\x47\x19\x9f\x9f\xa3\x70\xe7\x01\x0d\xac\x88\x84\x2b\xe8\xe9\xa6\xdb\x0a\x2a\x1f\x8c\xd6\x48\xb3\xbc\x45\x4c\x85\xb7\xa2\x20\x98\x62\xbd\x35\x91\x70\x12\x64\xd8\x4c\xc4\x5f\x52\xd3\xa5\xaa\x0f\x06\x4a\x60\x77\x10\x44\xb5\x1b\xad\x63\xf2\x43\xaf\x6c\x0c\xc2\x10\xe0\x00\x0b\x3c\xa3\x6c\x56\xb5\x73\x27\x60\x61\xc9\x62\x70\x48\xfa\xfb\x88\x96\xf7\xab\x9d\xa9\xba\xd8\x83\xb5\x85\xb7\x59\x83\xa0\x22\x7f\x0c\xe2\xba\xbd\xd2\x7e\x70\xcc\xdf\x2e\x98\xf2\x7c\xd2\x54\x30\xc6\x3f\xca\x28\xd8\x43\xd2\x8c\x9f\xe9\x59\xb3\xe1\x64\xa4\x06\x54\xca\x63\xa0\x9b\xa7\xd8\x99\xe8\x6b\x4d\x43\xf2\x00\x62\x61\x82\x32\x78\x01\xa2\x47\x0e\x4d\x85\x78\xad\x95\xd8\x9a\xa4\xb0\x36\x87\x48\x46\x04\x22\x8b\x22\xf1\x1d\x12\x97\xff\x76\x20\x47\xc3\x68\xd6\xc3\x10\x5d\x7e\x6c\x9d\x4b\x13\xc0\x02\xc1\x1c\xb4\x06\x04\x18\x24\x6e\x1a\x28\x4c\xf1\x62\x6e\x24\x45\x9f\x2d\x18\xb6\x82\xd1\x90\x99\x70\x6f\xa5\x85\x61\x54\xbc\x8e\x33\xc1\x27\x81\x66\xa9\xf1\x72\x8d\x49\xb5\x61\xea\x6c\xa0\x02\xaf\xef\x34\x9b\x3b\xcf\x7f\x0f\x25\xa9\x05\xd5\x86\x8c\xd4\xc4\x57\x45\xe8\x7f\x9e\x51\x6a\xab\x2b\x69\xa9\x22\x5c\x94\x07\x36\xa8\x75\xd7\x32\x0b\x4f\x16\xfb\xa0\x97\xff\x11\x9d\x2c\x03\xc6\x47\x1f\x97\x3e\x6e\x1c\xde\x25\x2d\x75\x9a\x27\xac\x77\x16\x38\x0f\x5f\x69\x06\x1d\x4a\xfe\x71\x58\xf9\xa3\xa9\xee\xb0\xd2\x6c\x30\x6b\x44\x85\x95\x3e\xbb\xf2\x25\xad\xa0\xca\x18\xfe\x4b\x90\x3e\xfd\x93\x67\xa4\xe7\xa6\xdf\x67\x5e\xd2\x9a\x95\x28\x61\x0d\x9d\xe4\xf3\xac\xac\x94\x92\x86\xd3\x48\xe6\xe5\xe9\x11\xce\x82\xa2\x6c\x23\xa3\x2a\xe6\x7e\x0e\xf6\x94\x97\xd3\xc5\x1a\xe9\x29\xd5\xdc\xce\x65\xc0\x04\x2c\xcb\x33\x0f\x4c\x5d\xf8\x2c\xac\x2e\x70\xae\x9f\x60\x76\x3a\xcd\x57\x1e\x36\x32\x7c\xaf\x1e\xd9\xf7\x18\x89\x5d\x80\xb8\xfc\x18\xc1\xcb\xc5\xa3\xa9\xac\x5e\x4a\x06\x01\x2b\xc7\xe7\xd4\x71\xbd\x58\x72\x4a\xa5\xc5\xb0\x19\xea\x81\x2f\x8c\x61\x9e\xc2\x62\xd8\x12\x0a\xbb\x91\x60\x85\x17\xdd\xb0\x5a\x91\x3c\xfc\xe2\x81\x54\x06\x56\x62\xec\x3b\x6f\xfb\xc3\x9f\x76\xec\xdc\xfe\xc5\xce\xee\x09\x5e\xbe\xa1\xed\xd0\x87\xa7\x40\xc7\x49\x6f\x43\x65\xe4\x57\xfb\xf6\xe9\x5c\xf9\x63\x37\x0d\x2f\xd1\xd3\xe9\xf4\x88\x2d\x93\x96\x64\xc7\xb6\x9d\x18\x2e\xc0\xc2\x17\x17\xf9\x7d\xf6\xe8\xb2\xea\x2e\x47\x4b\x9e\x77\x05\xf8\xc1\xbb\xfb\x0e\x1c\xd8\xf7\xee\xce\x7f\xec\xf0\xd4\x65\x9c\x7f\xbf\xff\xc1\x4f\x3f\x7d\x70\x72\x9b\x36\x30\xb3\xf5\xa8\xf4\xda\x6c\xc0\x7a\x6f\xbc\xff\x8d\x1f\x76\x0e\xf5\xed\xff\x3e\x7c\xe7\x74\xf5\x79\xe9\xa9\xd6\xb5\x9b\x82\x42\xd7\xad\xb6\x54\x75\x70\x9c\xbd\xd8\x6d\x18\x5f\xb5\xe0\xb6\x25\xb5\x6d\x8b\x7a\xfd\x63\x91\xb9\xc3\x4e\x45\xa8\x28\x9a\x4f\xc7\x11\x0f\x1e\x44\x7d\x8c\xcb\xb9\x0b\xc0\x38\x19\x04\x25\xd9\x9b\xa2\x09\xe0\x15\x2f\x56\x83\x94\x11\xcf\x16\x61\x91\x4d\x12\x8d\x03\x02\x72\x88\xdf\x38\xc7\x8a\x0d\x9a\x2c\x18\xbb\x33\x52\x2c\xde\xf5\xa7\xdd\x77\x5f\x56\x5e\xc2\x58\x6b\x86\xdc\xf5\xfa\xeb\x20\xf9\xfa\x61\xa8\xf2\xc4\x27\x56\x5a\x2c\xaa\xf7\x43\x4c\x7b\xd5\x54\x70\x55\x22\x32\x76\x68\x7b\x5e\x8c\x96\x53\x70\x26\x00\xb4\x98\x93\x8d\x36\xb6\x9d\x0d\x36\xb6\x6d\xdb\xb6\x6d\x9b\x1b\x6f\x6c\xdb\xb6\x9d\x8d\xed\xe4\x8f\xff\xd8\xc9\x1f\x77\xda\xe9\xbd\xb7\xd3\xce\xb4\x7d\xf9\xce\x37\xdf\xcc\x79\x39\x4f\x67\x0a\x0b\xdb\xd5\x54\xb5\x89\x86\xf9\x9f\x09\xe4\xaf\x37\x45\x24\x40\xb3\xb2\xa8\xfd\x3f\x2f\x8b\x95\xc1\xd0\x6a\x06\x5f\xa1\xdf\x34\x6d\x1f\x12\x3e\xc7\xb5\xed\xc2\x1c\x8c\x1a\xfd\xcf\xab\x53\x16\x51\x8f\x4f\x03\x4e\xaf\x49\xcf\x54\x43\x9e\x92\x27\x48\xf9\x46\x98\x11\x48\xd4\x3f\xf1\x2c\x91\xa5\xeb\x60\x29\x74\xff\xc1\x0b\xf6\x5b\x29\x00\xfd\xbf\x17\xc4\x1c\x19\x36\xb6\x22\x0b\xa6\x0b\x4d\xdf\x47\xb7\x5b\xa2\xec\xfd\x6b\x9b\x64\x90\xa9\x4c\xbd\xf7\x9f\x48\x2e\x33\xe1\xd0\xc2\x89\x09\x50\x76\x68\x58\xdc\x91\xb6\xaf\xf9\x19\x39\x66\xdd\xef\xf6\xb5\xb8\xac\x56\x31\x2a\x70\xa1\x6c\x11\xec\x08\x03\xed\x4a\xfe\x9a\xab\x65\xfd\x48\x1d\x4d\xa8\xbb\xcd\xac\x3d\x68\x55\x2a\xe4\xb4\x42\xe3\x09\x2c\xf3\xd2\x2a\xb1\xf2\x52\x1e\xab\x97\xb5\x42\xe4\x81\xea\xc1\x0a\x1a\xac\x36\x5e\x8b\xaa\x09\x50\x91\x00\x3c\x16\x8d\x51\xc0\x71\x40\xe4\x30\xc4\x3e\x27\x64\x79\xd5\x07\xb6\x30\x11\x9e\x3f\x4c\x63\xa5\x4b\x2c\xbb\x0e\xb9\x33\x68\xc4\x46\xdb\x15\x16\xb8\xbd\xef\x00\x15\x8d\x19\x8c\xc4\x9d\x3c\x6e\x79\x70\x0a\x1e\x2b\x08\x35\x0a\x3c\x06\x6a\x13\x93\x9c\x07\xcc\xc4\x29\x43\x78\xa5\x08\x9c\xb4\x5d\x6f\x8d\x94\x56\x6d\xff\x6d\xb0\x4e\xce\x90\x73\x66\xcb\x9d\x6b\x85\xfe\xf8\x17\x4f\x89\x76\x47\xe0\xc5\xbd\xd3\xf7\x74\x25\x13\xa9\x52\xce\xca\x9e\xa1\x57\xf9\xb6\xea\x23\xef\xf4\x60\x65\xb9\xf8\x2a\x50\xcf\xa4\x3b\x73\x38\x52\x30\xa3\x9b\x5e\x95\x9d\x24\xa3\x50\x27\xbf\xe2\x7d\x39\xd8\xd3\x28\x91\xad\x3d\xd8\x9f\xd0\x14\xbb\x89\x36\xbf\x9c\x50\xa3\xd8\xf5\x88\x68\x91\xac\x70\x36\xd1\x33\xfe\x1c\x74\x51\x5f\xa1\x83\xdd\x1d\xee\x09\x99\xb3\x6b\x42\x7a\xb9\xcc\xcb\xdb\x76\x6a\xbb\x9c\x53\xcd\x6d\xa8\x8f\xba\xdc\x54\x23\xa8\x02\x70\xc2\x10\xfb\xa0\xab\x46\xd6\xa8\x7c\xc8\xd6\xcf\xd1\x39\xec\x75\x40\xf8\x87\xc3\x81\xed\x4d\x20\xcc\x1b\xa8\x7a\xf6\x56\x65\xbb\x86\x5c\x14\x7c\xf6\xad\x69\x6d\xd4\x00\x03\x91\x96\x74\x46\x12\x0d\x14\xd2\x2f\x20\x75\x6b\x30\x1f\x92\xb5\xa7\x54\x08\xc7\x5e\x9b\x8e\xba\x23\x71\x73\x22\x54\x03\x22\x6c\x86\xad\x0a\x8a\x95\x85\x92\x06\xd8\xab\x54\xaf\xd1\x0e\xb8\x07\xe1\xcd\xe3\xa2\xa0\x02\x29\x11\x07\x75\x96\xb8\xc9\x2a\x14\xe3\xe1\x48\xc8\x7e\xb6\x86\x4b\x88\x84\xca\x53\xfe\x68\x45\x42\x17\x46\x40\x0f\x96\xa1\xfc\x51\xaa\x24\x16\xd3\xe2\xa3\x64\x08\xd6\xa4\x40\x76\x50\x7d\x57\x51\x6e\x6a\xfe\x0c\xd3\x6b\x14\x74\x0c\xe2\x51\x42\xbe\x3d\x40\x93\x3d\xa2\xca\x82\x47\x87\x37\x62\x80\x33\x25\xd1\xce\x13\xcb\xdf\x10\x2b\x5c\xb3\xac\x3d\xe3\x81\x66\x5e\x91\xb1\x01\xde\x47\xb8\x28\x97\xa8\xc3\x56\xf7\x79\x4b\x75\x93\x71\x18\xfa\x48\xbd\x7d\x2e\x73\x9a\x16\x23\xbc\x19\x2b\xc6\xef\xb0\xdc\x5b\x8f\xb8\xd2\xae\x10\xbc\x84\xec\x6e\xb9\xfa\x44\x8a\xd9\xdf\xac\x6f\x1a\x54\x80\x6f\xbb\x13\x13\x43\xc9\x06\x0c\xc2\xa5\x1e\xcf\x60\x4a\xef\xe8\xe1\xc8\x20\x64\xff\xb5\x5b\x6f\x28\x0b\x2e\x2e\x52\xcd\x96\xc4\x18\xe3\x5a\x2a\x57\xd6\xf4\xaf\xc8\x78\xe8\xa9\xf1\xed\xf8\x90\x09\xcd\x3e\x25\xac\xdd\x2d\x58\x45\x2f\xe2\x56\xa6\x27\x74\xb9\xf3\x4e\x26\x75\x92\xf0\x97\x00\x03\x4b\x87\x96\x15\x46\x54\x3a\xf7\xa7\xf8\x55\x94\xc0\x62\xbf\xa3\xb9\xcd\x52\x62\x2a\x2f\x1b\x20\x28\xa8\x35\x13\x65\x79\x5d\x64\x81\xbe\xc3\xc1\x4a\x2c\x71\xe8\xdb\x9f\xcf\x98\x73\x22\xfa\x19\xe8\xa5\x4e\x1c\x77\xf5\x19\x60\xe5\x75\xb4\x74\x10\x64\x88\x06\xfd\x21\x06\x1a\x38\x42\x61\x82\x15\x63\xdc\xfa\x5d\x6d\x99\x0c\xa1\x3b\xf1\x75\x5c\x82\x12\x70\xba\x70\xf0\xc6\xff\x60\x23\x99\xb0\x1a\x2e\x11\xe1\x56\xac\x83\x77\x72\x55\xc9\xc0\xfb\xa1\xa0\xc5\xf5\x4a\x3d\x95\xc7\x1d\xce\x2a\x66\xfb\x32\x6b\x4b\x10\x0c\xfd\xe2\x24\x35\xdb\xd8\xce\xf1\x06\xdc\x12\x86\xff\xb7\xbf\xfb\xcb\xbf\xd3\x73\xc6\xd7\xb7\x4c\x61\xe7\x61\x37\xab\x57\xa8\xdb\x52\xcc\x43\xdb\x03\xb7\x07\xf3\x8b\x4e\x37\xb9\xd6\x38\x30\x8d\x02\x04\xd5\x50\x3e\x52\x8c\xcf\x5e\x04\xbb\x83\xc3\xfb\xe1\xa0\xf4\x01\x74\x8d\xe7\x75\xd5\xf9\xed\xf5\xe2\xb4\x90\xd8\xfb\x10\x89\x44\x5c\x4b\xfb\xf8\x0a\xef\x5e\x2c\xc9\x36\xbb\x17\xe9\x5a\x10\xf9\x1d\x7e\x28\xc0\x4f\x81\xd1\xe3\xca\xa5\xd1\xed\x18\xb0\x03\x54\xe6\x51\x74\x13\x9c\xbf\xc9\x6c\x3b\x1d\xd9\x64\xa7\x6a\x18\xb7\xe0\x77\xb3\x2c\x74\xc3\x5c\x87\xa4\x68\x38\xbb\x30\x0c\xe9\x3e\x63\x5b\xa7\x9f\xe1\x7e\x81\xef\x7a\xd0\x4b\x48\x01\x97\x3c\x23\x72\x6a\x51\x9c\x4b\x5a\x47\x13\xaf\xc0\x18\xe3\x3c\x74\x7d\x63\x92\x2a\x00\xba\x97\x11\xc8\x81\x11\x8e\x9b\x36\x6b\x2e\x8f\x0b\x89\x80\x8d\x7d\xa8\xe1\x5d\xe8\x47\x2c\x39\x80\x8d\x0d\x8d\x5f\x6e\x78\xcb\xbe\xd4\x64\x5b\xd8\xd3\x77\xee\xaf\x33\xbf\xbd\x7c\x27\x6e\x6b\x04\x76\xf9\x1d\xad\x8f\xba\xc3\xd0\xce\x58\x9c\x0d\x27\xe4\x15\x52\xe5\xbc\xd7\x17\xfc\xd8\xe5\xac\xde\xe1\xb0\xfc\x85\x8f\xd7\xe7\x79\xd6\x79\xf9\xb8\x05\xe5\x01\x9a\xe2\x9c\x7f\x44\x64\xcc\x07\x9d\xc4\x6c\xde\x4d\x49\xc4\x53\x4f\x45\x32\x6e\xde\x28\xa4\x95\x27\xdd\x7a\x6e\x50\x0d\x60\x5b\x12\x4b\x65\xe3\xec\x80\xf0\xf5\xe2\xfa\xc6\x2b\x0c\x0c\x6f\xb8\xf5\x05\x58\x53\x15\x53\x95\x52\xad\xd8\xf4\x64\x6a\x4b\x1d\x0a\xbf\xbc\x06\x37\xc1\xfe\x48\x17\xe6\xbc\x08\xb3\x2d\xe9\xf3\xb0\xdc\x12\x38\x71\x73\x6e\x58\xb3\xa9\x65\xf8\xf4\xfe\xd3\x56\xed\xad\x93\x90\x37\xa6\x4b\x74\xd6\xfa\x29\x3b\x45\xb4\x32\x3f\x2f\x8c\x21\x33\xb1\xc3\x4d\xd1\xb7\x4b\x6b\x26\x26\xf1\xf9\x77\xf4\xf9\x29\xb6\x0f\xfb\x29\x7a\xbd\x31\xf2\x8f\x98\x88\x44\x8d\xdb\x6f\x39\x09\x43\x96\xa4\x05\x33\xb4\x71\x34\xc2\x94\x4e\x77\xb2\xe5\xfd\xe0\xdc\x8e\x92\x23\x71\xee\x60\xa2\xd3\xea\xdb\x57\x9a\xba\xf8\x65\x0c\x31\xbd\xeb\x89\x61\x28\xf6\xbf\x51\x5b\x98\xaf\xc2\x90\xe1\xec\xbd\xe0\xf3\xb1\xc9\xbb\xef\xfb\x98\x8e\x7b\x8b\xc6\x99\x81\x4f\x3a\x9e\xf6\xe1\x5b\xd9\x12\xfd\xa5\x06\x9e\xe1\xcd\x72\xdd\x1f\xe7\xd9\x11\xf8\x3b\x4b\xaa\xe5\x3b\xa6\xc8\x37\x5a\x1c\xb2\xb4\xec\x96\x16\x16\xe7\x96\x6b\xc3\xea\xb5\x7b\xd9\x1b\x1e\xb2\x5d\x2d\xae\x0e\xaf\x47\x41\xcc\xca\xb3\x2d\xf1\x30\xab\x63\x59\x34\x67\x72\x54\xaa\xfa\x29\xb4\x24\x71\x01\x8d\xd1\xd4\x31\x9a\x8a\xb2\x14\x9a\x08\x4f\x11\x54\xed\x44\xf4\x33\xac\xa9\x08\xda\xdb\x4a\xf4\x70\x1a\x56\x65\xea\xcf\x7c\xc3\x23\xf5\xed\xef\x84\x2b\xe8\xe3\x1a\x4d\x78\xf4\x64\xe9\x89\xc6\x8a\xc1\x33\x86\x49\x79\x43\x1f\x95\x34\x58\xd5\xd1\xfe\xac\x0e\xa5\xdd\x15\x13\xbd\x8b\xfa\x7a\x97\x5f\xe9\x96\xb7\xa9\x9f\xe3\x27\xfc\x6e\x2e\x57\x25\xb0\x82\x7e\x2f\xef\x8b\xba\xae\x34\x87\x47\xf9\xe3\xab\x50\x61\xe3\x3a\xdc\xfb\x53\xb0\xd5\x9c\x3b\x6d\x17\x9e\x33\xa5\xb7\x4e\x7e\x8f\x40\x2f\x93\x47\xab\x33\xb3\x17\xff\x98\xec\xea\x17\xfa\xcc\x7e\x25\x00\x4d\x92\x87\xeb\x52\x0c\x6d\xba\x74\x3e\x9b\xd9\xf3\xfa\xe0\xbf\xa2\x58\xbf\x40\x53\x6b\x55\x5e\x14\xbe\x1d\xbf\x47\xe0\xbf\xe8\xd7\xd4\xb5\x5d\xff\xe3\x8e\x92\x29\x89\x6c\x6e\x7f\x36\x33\x03\x0f\xc4\xe4\x4a\x33\xef\xd5\x0a\x6c\xb0\xf4\x72\xe1\x87\x87\xd3\xeb\xa6\xe7\x2f\x96\x9e\x38\x38\x34\xfa\x60\x33\xae\xbd\x24\xa0\x6a\x41\xeb\x09\x17\x93\x98\xf9\xa0\x58\x67\xff\xb6\xe3\x9d\x2e\x5a\xda\x48\x10\x7f\xfb\x16\xb7\xf5\x9a\x23\x1b\xfe\x96\xe5\x8e\xd3\x70\x8d\x35\xfb\x03\xf6\x5e\xdf\xf7\xd1\xe4\xe7\xcb\x17\x9a\x9c\x41\x93\x19\xf5\x1b\x8c\x5c\xa8\xd6\xcf\x0e\xca\x3d\xd7\x99\x89\x49\xce\x7e\x37\xd7\xa7\x9c\x0d\xad\xfe\x83\x38\x76\x59\xe9\xb1\x95\xd0\x4e\x08\x3e\x4e\x48\xd7\x43\xf3\x8c\x82\x65\x63\x1b\xf1\x50\x02\xc7\x47\xfc\x62\x6e\xaa\x60\x9c\x41\x09\x03\xe6\x5f\xd9\xf0\x51\x72\xdc\x55\x97\x30\x2f\xb1\x89\x02\x04\x81\x73\xb6\xef\x17\x92\xcf\x04\x67\xb8\xda\xdf\xdb\xb9\xcd\x16\x67\x06\x72\x6d\xf2\x2a\x86\x96\x6d\x91\x38\xe7\xdb\xaa\xa5\x5d\x66\xee\x95\x8f\x10\x1e\x49\xf6\xde\xaa\x96\x8a\x8a\x96\x4b\x2e\xba\xaa\x8d\x44\x12\x72\x28\xef\xff\x46\x0e\x1f\x71\x42\x96\x06\x8b\x76\xb9\x82\xb3\x64\x76\x24\x94\xcb\xbc\xe0\xdc\x91\x38\xfe\x45\x98\x27\x76\xf8\xa0\x84\x57\x08\xf8\x00\x38\xc7\x1a\xe7\xc0\x9a\x5e\xe3\x98\x27\x1b\xf4\xd9\x33\xa3\x45\x57\xc3\x16\x12\x76\x16\x0b\xe5\xd6\x4b\xc0\xe5\x2d\xa8\x39\xa1\x8b\x29\xf5\x10\x45\xff\x25\x53\xd9\x7a\xef\x8b\x45\xf2\x6b\x91\x32\x80\x3d\xca\xef\x6a\xb9\xe3\xba\xe3\xbb\x39\xb9\xae\x37\xbe\x11\x5e\x19\x38\x76\xa7\xab\x56\xd1\x5c\x39\x07\xaa\x6d\x73\x3d\xdb\xf9\x52\x54\xf8\xa8\xd5\xc0\xc5\xab\x29\xda\xaf\x77\x67\x3f\xd9\x10\xf0\xc4\xfc\x10\x63\xd0\x15\xa0\xd1\xe8\x9c\x5e\x57\x71\x78\x16\x51\x0f\x50\x4e\x8e\xec\x2f\xf3\xdd\xcc\x8b\xf0\x8e\xa4\xd4\xfc\xda\x3c\xfb\xbd\xa9\xf3\xd1\x83\x38\x59\x17\xe1\xd1\x6c\xfb\x97\x07\xf6\xb7\x0a\x9d\x52\xd8\xe5\xe2\xef\xf1\xc5\x93\x8f\xb3\xb3\xa1\x38\x44\xf6\x35\xbd\xc6\x1a\x35\x1e\x8a\x1d\x71\x8c\xe6\xeb\x15\xf6\x8e\x2a\x78\x5b\x96\x60\xf5\x66\x1e\x1e\x0b\xc2\x7b\xcb\x7f\x2a\x5f\x61\x10\x8d\xbb\xcd\x97\xa4\xf3\xc9\x93\x66\x5c\xf6\x31\x8c\xaa\x19\x2d\xbb\xf3\xa3\x6e\xc8\xfc\xdb\x8f\x59\x3a\x88\x46\xc3\xbb\x97\xd2\x41\x25\xbc\xad\x22\x6f\x57\x4d\x19\x9d\x45\x49\x31\xd9\x8b\x1a\xea\xc6\x16\x6e\x44\x25\x44\xc4\x1b\x20\xf3\xaf\x8e\x0f\xc8\xd8\xfc\x86\x45\xd8\x04\x26\x6a\x46\xa7\xde\xbe\x42\x28\xcc\xf0\xd6\x85\xab\x42\x52\x53\xf5\xd2\xb8\xac\x7b\x99\xb1\x72\x24\xce\xd1\x20\x7e\xb3\xc8\xf7\x2b\x52\xfd\x64\x56\x6b\xf7\x2a\x5a\x1a\xb6\xb1\xa0\xde\x6d\xd6\x11\x14\xbc\x02\x57\x54\x72\xbd\x11\x28\xe8\xdf\x71\x23\x2a\x35\x96\xf0\xb5\x15\xe0\xe2\x28\x89\xad\xe8\x0d\x7f\xd2\xe2\x9f\xf7\xed\x6b\x9c\xa2\x92\x53\x71\xb4\x38\xd1\xeb\x8b\xbd\xab\xaa\xf7\xb3\xe5\x44\xd3\x75\x94\x2d\xad\x1d\x0c\x02\x6f\x54\x3c\x7c\xac\x7d\xd5\x7d\xfd\x68\xda\x1f\x77\x9f\x66\x66\xd2\x78\xc2\x79\xde\x69\x07\x3c\x2b\xac\xc5\xa5\x8c\x35\xbf\x9d\xb9\xb7\xd4\x23\xea\xd2\xdd\x1b\x15\x6f\x94\xb7\x94\xf1\x6a\xaf\xc1\x7a\xaa\xf8\x05\xaa\x6a\x4b\xed\xe5\xac\x61\x7a\xef\xf5\x52\x84\x9a\x7a\x0a\x35\xef\xad\x4d\xd5\x5f\x5b\xdc\xaf\xa6\x6f\x3f\x8c\xe6\xd7\xa6\xdb\xea\xb3\x35\x0c\xcc\xe5\x1e\xfe\x5d\x7e\x0a\xd6\xaa\xaf\x2f\x4b\xab\x01\x21\x4c\xad\xfc\xd8\x03\xb9\x7a\x9f\x5c\xd4\x34\x54\xec\x55\x97\xbf\xd4\x94\x0f\x69\x51\x47\x33\xda\x03\x0a\x76\x4d\x71\x57\xe2\x29\x9c\x12\x1f\xc0\x8b\x8b\x63\x1a\x8a\xd2\x2f\x27\xc9\x22\x7f\x02\xcb\xaa\x49\x35\x82\x91\x4b\x54\x8b\x8c\xc4\x18\xf1\x63\x0f\xf4\xcc\xaa\x09\x5b\x07\x47\x7f\x42\xe2\x7c\xf5\x20\xed\x85\xe9\x22\x14\x69\x78\x93\xd6\x14\xa8\x8b\x47\xd6\x99\x0d\x85\x17\xeb\x86\x80\x41\xea\x4a\x60\x46\xae\xb7\x46\x0e\x55\x34\x09\x87\x8b\xee\x3c\x61\x6d\x69\xf0\xb1\x21\x07\xf5\x14\x8e\xda\xd3\x05\x59\xb7\x7e\x96\x52\x8b\xf2\x96\x7a\x02\x9f\x87\x2c\x72\xb6\xf5\xd6\x15\xfa\xdf\x63\xaa\x5c\x08\x13\xe2\x20\xff\x64\x23\x6f\x0f\xfc\xa5\x1d\x90\xd5\x23\xd9\x5c\x8d\x9e\xb2\xb3\x8f\x81\x8e\x56\xc8\xcf\xc3\x08\x9e\x42\x03\xc6\xf9\x6b\xce\x14\xf4\xee\x76\xac\xe0\xcd\xbd\x30\x2d\xd5\xb9\x24\xb7\x19\xa7\xfc\x42\x62\x71\x27\xca\x9f\x53\x1d\xef\x51\xab\x29\x68\x26\xf5\xf9\x5e\x8f\x4e\x13\x1c\x80\x6e\xdf\xbb\x71\x08\x7a\xb9\xa2\x8d\xb1\x05\xb9\xe2\xbc\xa5\x06\x1c\x11\x34\x96\x95\xbe\x68\x86\x69\x84\xe0\xd6\x6c\x19\xa6\xa5\x6b\x9e\x78\xc2\x10\x09\x2c\x06\x4f\x86\xab\xa8\xa6\x3d\x60\xbc\x4b\x0b\xbe\x23\xf1\x1e\x97\xf9\xa9\xfd\x9c\x2c\x72\xb6\x61\x27\xfb\x65\x8b\xa0\x4e\x3b\xfd\x83\x96\x10\x5a\x18\x2f\x9c\x99\xad\xdc\x65\x5d\x02\xbf\xc1\x0d\xa5\xc4\x9b\x56\x5a\x21\xd2\xbb\x28\xf2\xef\xea\x30\x53\x82\xbc\xb6\xa9\x56\x71\xee\xf1\x47\xe1\xbd\x53\x14\xd2\x0a\xc4\xa5\x99\xa6\x40\x59\xa8\x33\x2d\xad\x0e\xa4\x09\xd0\xbe\xd1\x84\x18\xdf\xda\x6e\x2a\x5a\xdf\xde\x48\x18\x6b\x07\x41\xc7\xe0\xae\x17\x46\x6e\xa0\x24\x6d\x37\x69\xd6\x4f\xeb\x0d\xd3\x84\xcc\xd6\x7d\x31\xc0\xe9\xd0\x8d\x0b\x59\xc4\x62\xd9\x4b\x40\x17\xb9\x82\xf2\xcc\xd4\xa2\xee\x0b\x99\xc9\x17\xae\x06\xad\x64\xf2\x51\xff\x64\xe9\x16\x0b\xe9\x1e\xac\x8b\x98\x15\x7e\x18\x63\x3a\xdf\x3b\x80\x72\x4e\xea\x86\x55\xe9\x0e\x35\x39\xc2\xcf\x1e\x1b\x07\x09\x53\x5f\xd7\x88\x53\x2d\x44\x52\x1b\x6f\xd9\xc5\xc2\xe1\x29\x95\xae\x3b\xfe\x78\x6c\xe1\xd2\x96\xe0\x1d\x13\xe2\xc9\xe2\xa4\x9c\xc0\xeb\x94\xd1\x51\xf6\x0f\xba\x61\x2f\x7c\x5b\x1f\x62\xc4\x27\x8d\xef\x1b\xe1\xfc\x63\x93\x5b\xc3\x67\xf3\x82\x50\x7d\x49\xf2\x0c\xc1\xf6\x3b\x0b\xe8\xe9\x97\x25\xf1\xfb\x03\x7f\xfe\x30\x26\x63\x50\x39\x52\x9e\xef\xc9\x61\x36\x96\x9c\xe5\x3a\xbb\xaa\x20\xf0\xf5\x77\xbf\x1d\xa6\xac\xe0\x70\x93\x29\x72\xc3\x63\x3e\x29\xa4\x21\xd3\xc0\x04\xeb\x20\x2c\x41\xc6\x6c\x33\x45\x33\x26\x00\x11\xb3\x17\x71\x7b\xb2\x41\x05\x57\x71\x2d\x3e\x72\x1b\x93\x1e\x41\xb5\x31\xa5\xb8\xbe\xe4\xcc\x1e\xa1\xdd\x05\x7f\x66\x88\x77\xe3\x8b\x2f\x07\x3e\xee\xe3\x70\xb2\x8a\xfa\x6a\x8d\x59\xeb\xf6\x61\xb2\xba\x30\xca\xee\x0c\x7e\x3a\x9a\xe2\x94\xcc\x98\xe4\x64\x15\xea\x14\x16\x62\x36\x43\x72\x25\x6f\xf1\x19\x32\xdd\x83\xca\x64\x41\x6b\x28\xf7\x04\xed\xaa\x94\xe8\xa9\x43\x27\xa3\x92\xf0\x65\x22\xf7\x66\xfb\xcf\x17\x00\x3a\xb9\xae\xbb\x7a\xdf\x2e\x82\xc4\x82\xc0\x1e\x48\x46\x89\xbf\xe3\x2f\xa9\xa4\xc5\xed\x3b\xdb\x80\x46\xb9\x97\x58\xae\x72\x8c\x7b\x9f\x99\x64\xec\x6a\xa1\x19\x9f\xc1\x0c\x71\x6d\xe0\x37\x4e\x18\x83\xbd\xe3\x1c\xc9\xf6\x56\x31\xeb\x86\xb6\x37\x8b\xb6\x1e\x97\x2c\xb6\xd4\x4d\xe5\x39\x7d\x45\x95\xe8\xa9\xa6\x22\xbe\x6c\x66\x03\xde\x98\x3f\x65\x1d\x5c\x80\x1a\x73\xe6\x4f\x38\x22\xa9\x0e\xc1\x89\x5f\x6f\xca\x70\xc7\xe0\x3f\x4b\xca\xe0\xe3\x3a\x25\x8e\x63\x1f\xfb\x61\x53\xba\x80\xca\x5c\x1f\x4c\xbc\x93\xc8\xbf\xc9\xa4\x73\x46\x87\xab\x3a\x7b\xef\x2c\xfb\x87\x16\x2d\xba\x43\x86\xce\x19\x94\x51\x70\x45\x09\xf6\xaf\xf3\x30\x48\x63\x1e\xee\x94\x5a\xd8\x37\xad\x20\x9a\xa9\x82\x73\x09\x7f\xbe\x9a\x41\xa4\x9e\x8e\xff\xac\x9a\x90\xd9\xdb\xac\xc4\x79\xb7\x67\x6c\x71\x36\xdc\x5e\x7a\xac\xb8\x8d\x66\x41\xb0\x7a\x13\x02\x67\xf9\x0a\x96\xa5\xd9\xef\x72\x8f\xa6\x83\x29\xad\xe3\x79\x50\x63\x58\x04\x89\x4a\x92\xf4\x81\xfc\xd5\x2a\x16\x5f\x24\xae\x50\xc3\xd8\x77\xff\xf7\x65\x31\x98\xd4\xee\xcf\xe7\x10\xf3\x53\x80\x8a\xcf\xa7\x33\x7e\xff\x2f\x06\x45\xe4\xe3\xa6\x25\x30\x93\xf3\x55\xdf\x55\xc7\xe3\x28\x16\xf1\x4d\xda\x4e\x15\x49\x67\x63\x63\xe3\xc6\xe2\x94\x6a\xbb\x84\x0c\x1d\x95\x44\x99\xb8\x9d\xfb\x64\x7a\xdd\x80\x21\xd0\x5b\xf5\xa2\xee\xe3\x46\xfa\x13\x56\x0c\x91\x06\x90\x1e\x42\xed\x72\xc1\x8e\xec\xea\xe6\x26\x48\x94\x6c\x9e\x8e\xc0\xc7\x93\xa9\xcf\x72\xa1\x46\x66\xac\x92\x93\x36\xd5\xa2\x37\xb9\x32\xa7\xb5\xc2\x92\xaf\x66\x3c\xdc\xf1\xef\xd7\xfc\x69\xd0\x8f\x0c\x1a\xa7\x49\x10\xd8\x32\xb6\x8a\xe4\xbe\xe3\x62\x3e\xe5\xf1\xcd\x12\x85\x29\x84\xc1\x76\x80\x6e\x14\x79\xf0\x1f\x48\xdd\x83\xbf\x95\x0c\x84\x9e\x10\xeb\xdd\xf9\x7c\x13\xc4\x92\xaf\x9e\x23\xe1\xe0\x2d\xee\xb0\xd8\xf0\xe9\x03\xad\xc6\x15\x69\x29\x62\xa5\x3a\x0c\x0e\xeb\x17\xdf\xa1\x94\xe2\x18\x8f\xee\x12\x63\x6f\xd7\x37\xf9\xe0\xa2\x01\xc5\x99\xc7\x17\x72\x86\x0f\x7d\x3b\xac\x5f\x45\x58\xd0\x73\x89\x27\x33\x1e\x2f\xec\x47\x99\x7d\xab\x9f\x55\x8c\x57\x7a\x39\xa4\x90\x7f\x2a\x7b\x02\xd1\xe1\xa7\xab\xb1\x7d\x44\xd6\x06\x3a\x71\x6c\xad\x30\x0a\xbc\x43\xb9\x48\x9f\x26\x49\x3a\xc3\x24\xd3\x72\x65\x54\x22\x0c\xe6\x62\x7b\x69\xe2\x0d\xa3\xb3\xd7\xd8\x04\x9e\x36\x55\xe3\x6c\x39\x62\xe0\x85\xe1\x3b\xd0\x5a\xf4\xb2\x97\x38\x22\xca\x1d\xde\xe4\x7c\x3e\xfe\xfc\x82\xc0\x80\x0e\xec\x7b\x57\x17\x9d\x5a\x6f\xa4\x8f\xd0\xf4\xbc\x79\xdb\x47\xde\x37\xc6\x45\xfc\xc0\x90\x92\x6e\x97\x16\xfc\xba\x20\x19\x1d\x82\x7f\x62\x51\x02\xaf\xca\x58\xb7\x89\xa2\x8c\x79\x0d\xc9\xa2\xf0\x40\xc8\x74\x25\xb2\x62\xd6\x95\x87\x5d\xc8\x8e\x8f\x74\x49\x0d\xaf\x9f\xa0\xd8\x89\xc2\x24\xf7\x94\x4a\x08\x8c\xf8\x67\x96\xb6\x1d\x20\x5c\x7b\xf7\x1c\x31\xc7\x19\x3a\x9a\x2d\x18\x48\xa2\x69\x1c\x3f\xd4\x95\x22\x19\x10\x4b\xe3\xf7\x20\x1f\x08\x55\x7b\xf4\xdc\x3c\x6c\xf0\x79\xe2\xa0\xbd\xa6\xf2\x06\xbc\x76\x34\x80\x1a\xf6\xf1\x41\x3a\xb2\xe1\x47\x49\x18\xfd\xa5\xbb\x15\x04\x2e\x6a\xd0\xa5\x19\x3c\x68\x52\x26\x55\xab\x02\x0d\xee\x08\x35\xc0\x74\x8a\xe8\x6a\x86\xfd\xd7\x9b\x8d\x23\x40\x47\xf4\x6e\x8a\x33\xcf\xf7\x76\x2c\x3d\x06\xbf\x2c\x2e\x21\x8e\xc8\x75\xa7\x79\x3c\xbf\xd7\x01\x21\x89\xcb\x4c\xff\xb2\x48\x1a\xff\xe5\xb2\x47\xbd\xeb\x6d\x35\xd7\x97\x43\x21\x24\xff\x42\xc6\xd2\xc1\xdb\xf5\x41\xff\xa6\x3f\x70\xed\x84\xb3\x7d\x9a\x6e\xc5\x7e\x9b\x9b\xf8\x58\x82\x73\x66\x0f\x36\x7c\x7b\xca\xcf\xf5\xfc\xa4\x33\x1f\x9c\xb5\xdf\x1a\x9d\xf1\xf3\xb8\xb9\x93\xf3\xe5\x35\xdb\xc2\x3c\x10\x9e\xe3\x5f\xc2\x93\xcf\xfb\x13\x25\xb3\x40\x01\xad\x71\xe8\xa6\x2c\x18\xef\x53\xa1\x35\x12\x10\xce\x94\x66\x73\xcf\xb6\x1e\x07\x7d\xa3\xef\xaa\xd3\x7e\x2b\x0f\x02\x66\xb6\x70\x21\x35\xad\xb3\xc4\x35\x6c\x95\x29\x93\x78\xf4\x31\x4e\xca\x47\x64\x2e\x0c\x96\x3f\xc6\x52\xb3\xad\x4d\x63\x16\x5a\x11\x55\x45\xa0\x3b\xff\xea\x0b\xfa\x17\x77\x63\x7d\x40\xf2\x19\xa1\x86\xeb\xaf\x1f\x11\xde\x37\x84\xf0\x0d\x0e\xd2\xa8\xea\xf2\xad\x2a\xb9\xcb\x04\x7c\x79\x49\xfe\x52\xe4\x7d\x53\x5b\x2b\x1d\x5d\x7b\x1c\x39\x48\xf1\x30\xef\x63\xb2\xaf\x71\x0c\x78\x06\xef\x4a\x87\x0f\x30\x37\x3b\xcf\x40\x7f\xf9\xc6\xe9\xe4\x4c\xad\x64\x45\x43\x43\x04\x22\xba\xba\x1b\xd2\x2a\xa6\x69\x97\xe5\x51\xe9\xef\x50\xa0\x7e\x69\x9e\xc1\xa1\x94\x50\x4e\xdd\x91\x5c\x89\x59\x72\x65\x9f\x1e\x8e\xdc\x52\xc9\x3b\xde\xe8\x6b\x30\x61\x3f\x35\xbb\xbd\x09\x5f\xf2\x1f\xc5\x9c\x34\x99\xf6\xd6\xe0\x50\xb1\x35\x09\x1e\x6f\xe3\xcb\xcb\x87\xd3\xc5\x9b\x79\x46\x54\x3a\x8a\xab\xb5\xfe\xea\xef\x6a\x8f\xcb\x5f\x1b\x04\xa4\x03\x8e\xf8\xaa\xa1\xa1\x07\x97\x24\x88\xeb\x31\xe3\xeb\xb2\xe8\x68\x0e\xe3\x6f\x26\xd6\x22\xce\xfe\xfd\xab\x1f\x37\xed\xa6\x73\x6b\x51\x47\x1d\xc5\xa1\x91\x73\x94\xcb\x1e\x67\x7d\x69\x90\x37\x89\x1a\xd3\x06\x4e\xb1\x8f\xa3\x14\x78\x77\x22\x9b\x9d\xc3\x72\x2f\xda\x72\x69\x10\x91\x72\x52\x7e\x29\xb9\x12\x9f\x13\x0a\xf3\xb8\x88\xf3\x37\xa1\x12\xa1\xb0\xbc\xdc\x66\x51\x49\xac\xda\x99\x3f\x60\x51\x1d\x83\x7e\x09\x47\x24\xf7\x6e\x98\x9c\xc6\x37\x49\x93\x1b\x70\xcb\x90\x18\x9c\x24\x38\xe6\xbc\x01\x40\x77\xc8\x3a\x34\xe2\x86\x55\x7e\x62\xe4\x59\x86\x6d\x80\x42\x5b\x24\x76\x8e\x90\xda\xea\xc4\x0e\x96\x83\xb1\xca\xe1\x55\x39\xfb\x89\xfc\x46\xaf\xf4\xc7\xfd\x9b\x36\xfb\x77\xb0\x0e\x07\xc3\x97\xc9\x46\x5e\x2a\x82\x0e\x06\x8e\xda\xaa\x36\xf0\x80\xe8\x91\x62\x99\x33\x8a\x33\xf1\x33\xcb\x45\xc6\x58\x71\xf6\x19\x71\x86\xe1\xd8\xd9\x51\x57\x87\xf4\x36\xae\xcd\x74\x0f\x24\xd8\x56\xb7\x12\xc2\xf4\xef\x1f\x62\x44\x5e\x28\x18\xbd\x2e\xaf\xb7\xf8\x79\x9f\x6f\x9b\xa7\x25\xf9\x8c\x36\x44\x0b\x9b\xbc\x44\xd3\xca\x2a\x97\x0e\xff\x62\xc8\x23\x78\x2b\xf3\xd1\xf0\x15\x8b\x38\xc2\x0d\x24\x49\xa6\x50\x3a\xc5\x7d\x20\x16\x5e\x91\x9f\xb5\xfb\x92\x6e\x2c\xfb\x0a\x28\x17\x2e\xd4\x91\xdd\x45\x9a\x4a\x22\x9a\x1e\x35\xa3\x1a\x12\x67\x02\xb5\x7d\xd1\x1c\xd3\xd0\x46\x70\x8a\x58\x85\xd3\xd6\x6f\x87\x60\x4c\xd9\xbb\xb5\x8b\xb4\xd1\xc8\x9c\x07\xf0\x18\x80\xc8\x25\xaa\x12\x21\x8c\x61\x57\xf2\xe6\x96\x19\x52\x21\xaf\x9d\x6b\x3f\xd8\x9e\x9a\x15\x7a\x09\x0d\x88\xd0\x7a\x9e\x58\xa7\x56\xf5\x50\xf3\xc1\xec\x79\x9a\x93\x6a\x5f\xba\x67\x89\x9a\x23\x3f\x18\xca\x16\x89\x7c\xda\x17\x38\xb8\xed\x94\x1e\x22\x94\x30\x4a\x71\xac\xfd\xff\xb6\x06\x6b\x58\x57\x8b\xa5\x15\xf6\x16\xaa\x79\x57\xcc\x63\x72\x82\x19\x1d\x10\xd8\x5e\xff\xc6\x5f\xd5\xb3\x70\xe5\x0e\x93\xea\xa1\x54\x41\xf7\xc0\xc3\x20\xa8\x55\xb2\x8e\xa5\xa9\x6e\x16\x3a\xb6\xc2\x31\x80\xdf\xeb\x51\xa8\xc0\x63\x9f\xb5\x75\xd2\x8c\xd3\x10\x40\x95\xd6\xa0\x0f\x2a\xd2\x51\xa2\xed\x11\x79\x48\x65\xed\x66\x77\x8a\xa7\xc8\x5f\x75\x84\x54\x68\x20\x8c\x85\x19\x1b\xf9\x11\x09\xa8\xc8\xdf\x72\xbe\xc4\x3f\x4b\x70\x8c\xcd\x17\xdb\x42\xe4\x70\x0e\xa5\x25\x68\x2a\x26\x26\x68\x74\xd7\xb0\x8a\xd5\x2e\xdd\x4f\x09\xbf\xbb\x5b\xf8\x5b\x29\xa2\x81\xbe\x14\xfd\xfc\xf7\x8d\xa6\x77\xc6\xa4\x1a\x12\x01\x42\x76\x67\xb0\xcb\xaa\x85\x81\xab\xb9\x6e\x62\xba\x29\x91\xa3\x22\x26\xcf\x30\xdf\xa0\xdd\xec\x2e\xcb\xcc\xbb\x64\xb9\x60\x39\x43\x5f\x84\x6c\x21\x89\x7a\xf4\xab\x84\xae\x68\xd3\xba\x35\x8e\x95\x33\x61\xbb\x5f\x9e\xe7\xc1\x70\xf7\xd9\xba\x95\x28\x34\x60\x5d\xeb\x89\x58\x68\xf2\xe4\x30\x66\x95\xae\x90\x1e\xaf\x7a\xa1\x06\xe3\x9e\x78\x9d\xce\xff\xd1\xc9\xf8\xfb\x29\x82\x8f\xe5\x02\xbe\x12\x25\x21\x8c\x0b\xb5\xbb\xb2\x29\x9a\xaf\x02\xd2\x8f\xc0\x37\xa8\x73\xe2\xe7\xfb\x6e\xee\xbf\x86\x97\xed\x80\xf4\xd1\xc4\x17\xde\x9f\x74\x36\x06\xf4\x33\x42\x18\x4d\x20\x33\x68\x86\xbe\x30\xfe\xa1\xc0\x41\x62\xec\x48\xb6\x45\x53\x9b\xf2\x38\x62\x38\x3c\x77\x38\x0d\x0a\xfd\xf7\xbf\x5c\xdf\xbb\x60\xdb\xfe\xd4\xa1\x3f\xea\xe6\xda\x93\xd3\x2e\xc9\xa9\x7e\x22\xd1\xa4\x2e\x7d\xca\x96\xc6\xc1\x16\xe3\x6b\x31\x47\x17\xd9\x71\x49\x49\x4d\x67\xcb\x64\xff\xc9\xbf\x65\x63\x0e\x6b\xc1\x11\x27\xb5\xf4\x0e\x0d\x44\x49\xa0\x9b\x51\xe7\x57\x9f\xe1\x97\x67\x07\xb6\x94\x9d\xe1\x16\xf8\x94\x49\x6a\xdc\x5f\x90\x9e\xf2\x4b\x4e\x0a\xda\x7d\x18\xb0\x6e\x89\x18\x06\x3a\xa4\x9a\x7b\xc8\x6f\xad\xa2\x65\x0d\x49\x6b\x57\x99\xd9\x6e\xa5\x59\xe6\x6d\xdc\xa7\x3c\xb2\x03\xf2\x79\x9a\x70\x89\x86\x1b\xed\x8e\x2d\x9c\x72\xed\xf4\x44\x11\xec\xbe\xf2\x2b\x78\x7b\x04\xde\xbf\xed\x77\x06\x9f\x16\xbf\x65\x76\xa6\xd0\xd3\xbe\x9f\xba\x0c\x03\x3f\x03\xcb\x4f\x3e\x2f\xea\xc8\x1f\x9a\xf4\xde\xfb\xba\x8a\x3b\x8f\x04\xeb\x39\xdf\xde\x3d\x6d\xf8\x7d\x46\xa3\x17\xbe\x9d\xe3\x10\xfd\x71\xe4\xbc\x4a\x61\x7d\xab\x1d\xcb\x24\x94\xd1\x2b\x18\x6c\x18\x5a\x53\x74\xe4\xf5\xa5\xed\x4b\x1d\x8a\x3c\x94\x7d\xcd\x13\xb0\x0b\xd6\x34\x8d\x30\x4a\xcc\xed\x3a\xfd\x4c\x67\xff\xca\xc8\xb4\x98\x5c\xca\x65\xb8\x4a\xcf\x1c\x5d\x06\xa9\xf4\xde\xed\x32\x51\x97\x43\x42\x97\x23\xcf\x7e\xd3\xbf\xbc\xec\x8e\x23\xc2\x6d\xf0\xaa\x57\x5d\xca\xd3\x74\x57\x89\x96\xd2\x10\x31\xa8\xb5\x4c\xeb\x77\x5c\xf0\x85\xe3\x9e\x85\xcf\x21\x5e\xf8\xd4\x16\xe3\xe8\xff\x4b\xc7\x74\x2f\x4f\x14\xd2\x38\x9a\xd9\x4d\x57\xdd\x4d\x65\x0f\xa9\x04\xff\xf3\xc9\x2a\x43\xf5\x26\xe9\x82\x6b\x06\x7f\x44\xfd\x19\x4f\x97\x90\x17\x7a\x1e\x5c\x65\xac\x89\xe9\xf9\x65\xbd\xda\xa0\x0f\x3f\x47\x26\x41\xe8\xfa\x44\x48\x6f\xbc\x96\x68\x92\x2a\xc3\x23\x76\x9d\xed\xb2\xc0\x2c\x1d\x0d\x7c\x4d\xab\xa6\x62\x90\x81\xd5\x4f\x09\xa1\xd7\x7d\xf7\x7b\x82\xaa\x44\x0b\xc9\xe0\x49\xb1\x29\xe6\x20\xf3\x7e\x97\x38\xf7\xb0\x41\x76\x67\x7c\xfa\xf9\x64\x7a\xae\x7d\x39\x88\x7d\xe3\xf5\xd4\xe8\x37\xa2\xd4\xcb\x18\xf1\x55\x21\xbc\xb9\x5b\xa8\xf7\x1b\x29\x3a\x92\x61\x50\x5f\x23\x94\x80\x28\x4f\x2a\x0d\x73\x01\x72\x84\xb4\xeb\x4c\x91\xc3\xf9\xef\x5b\x9a\x4b\x5f\xed\xc7\xe0\x59\xaf\x73\x9d\xa4\x47\xbc\x96\x20\xb9\x2c\x62\x25\x76\xcb\xba\x33\xeb\x74\x46\x0e\x65\x72\x73\x28\x41\xf1\x51\x47\xf1\x5e\xa7\x9f\x19\x8f\x99\x03\xa1\x34\x65\x37\x16\x03\x11\x6e\x2e\x31\xea\xca\xb9\x48\xab\x8e\xcf\x1f\x48\x13\xa1\x33\x04\xca\x7f\xba\xcc\x7d\x87\x9d\x79\x31\xd7\x01\x87\x86\x65\x13\x8a\x10\x92\x09\x02\x0d\xe7\x50\x1f\x61\x2b\x45\x1d\xcb\x56\xad\x78\xf9\x06\x4f\x03\xca\xb7\x10\x7e\x33\x18\x57\x9e\x6c\xfa\x29\x49\x57\xe8\xc8\x46\x73\x43\xfa\xc5\x90\xb9\x9e\x46\xc7\x45\xe9\xe3\x9f\x38\xae\x93\x90\xf1\x06\x6e\x8e\xe3\xfd\x72\x7f\xbf\x7f\xce\x45\xb9\x13\x52\x6b\x88\x1c\xda\x45\xe0\x29\xd4\x26\xba\xf7\x78\x91\xcf\xa2\x69\xcc\xc2\x4f\xe3\x70\x80\x57\xf7\x1d\x7c\xaf\xfb\x7b\x83\xdd\x39\x87\x99\x0e\xf3\x91\x1b\x9c\x48\x6e\x13\x6b\x60\xcb\x43\x2d\x52\x93\xcf\xbd\x64\xaa\x67\x98\x1b\x7a\xaf\xeb\x12\x0d\x44\x8f\x86\x75\x93\x3f\x1b\x79\xc9\x52\xcb\x3c\x1b\xaa\x3a\x08\xe5\x73\xf8\xdc\x8b\x9d\xe5\x64\x9c\x32\x87\x14\xcf\xd3\x7f\x5e\xf1\x43\x49\xe8\x1b\x91\x28\x5d\xfa\x7e\x45\x3d\xde\x27\x70\xe6\x08\x30\x11\x06\xe5\x5f\x1d\x92\xca\x43\x40\x41\xfa\x8c\xda\x97\xaf\x51\x83\x56\x04\xa1\x1e\x67\x5e\x82\xd6\xdf\xb3\x9b\xcb\x39\x05\x7b\xbd\x1f\x96\x00\x80\x22\x6b\xb8\x91\x2d\x2d\x6f\x75\xf5\xe1\xaa\x74\x0d\x3b\xee\x2a\x75\x76\x24\xe5\x3b\x6f\x3a\xb6\xdf\x65\x8c\x21\x8f\xec\xc4\x7a\xfe\x53\x82\x8e\x50\xc9\x94\x74\xbe\x9e\x27\x29\xd4\xac\x7b\xfa\x3c\x77\x01\x42\xfe\x0c\xf6\x19\x42\xb6\x29\xa5\x94\xf5\x06\xd2\x09\xe0\x77\x54\xc4\x30\x14\x2f\xd5\xa0\xd1\x84\x0f\xe7\xc3\xe4\xc5\x8b\x62\xeb\x52\x0a\x45\xdc\xa5\xdf\xec\x72\x2b\x37\xc2\x1b\x85\xd9\xe0\xef\x1f\x3e\xa5\x36\xa3\xce\x67\x9f\x24\x01\x27\x27\x0f\xcb\x6f\xed\x91\xce\x70\xea\x4d\x42\xa5\x32\x57\x40\xad\xe7\x47\x84\xb8\x2f\x4b\xdd\xb2\x5d\xc3\x62\x15\xf1\x24\x19\xa8\x35\x17\x93\xc3\x93\xa5\x35\x97\x8f\xd5\xfe\x13\xbf\xe4\x29\x8f\xd1\x1f\x59\xc8\x3f\xb3\xde\x49\x52\xcc\xd9\xe4\x72\xc4\xf7\x44\x77\xe3\x12\x8f\x2d\x10\x04\xb7\x77\x0c\x0d\xc0\x5d\xb8\xc1\xb6\xe8\x55\x42\x8f\x39\x03\x06\x7a\xa9\x26\x5d\x2c\x1c\x8c\xa3\xae\x1f\x6e\x84\x54\xf1\xd8\x56\x55\x51\x8d\x62\x85\xd8\x7c\xa6\x2e\x9a\xb8\x31\xea\xe0\x57\xce\xaa\xd1\xe5\xcd\x51\x0b\x8d\x7e\x7b\x91\xdf\x2c\x01\xc1\x37\x3e\x7b\xe1\xc1\x1b\x74\x3d\x5c\x90\x94\xcb\x1e\x80\x70\x25\x4e\x5d\x3d\x79\x51\x4b\x77\x70\xc2\x9a\xf9\x86\x1e\x1f\xd7\xeb\x6b\x0c\x98\x72\xe5\x49\xcc\x42\x48\xa4\xf9\x44\x61\xa2\x66\x8c\x68\xbc\xd4\xd3\x85\x05\x5a\x7f\x47\x04\xbd\x4a\xaf\x7d\x79\xd5\xaa\x12\x04\x35\x2a\x3d\x0a\x8c\x31\xc3\x3d\x56\x0a\xb8\x7a\x6a\xbe\xab\xfb\xdf\xed\x37\x5c\x9c\x25\x80\x7b\x65\x6e\xfd\x6f\x93\x17\x02\xdf\x6d\x86\xdb\xc2\xad\x1f\x38\x82\xa7\xc1\x30\x47\xa7\x05\x4a\xec\xbf\x03\x14\x7c\xef\xa8\xa0\x91\xf5\x78\x1c\x0d\xf5\x7c\x52\x0b\xbb\x60\xfe\xd5\xf4\x9a\xf2\x15\x52\x20\x84\xf9\xa3\xea\x12\x43\xdd\x5d\xca\x9c\xb1\xb7\xbd\xa3\xf1\xf1\x65\xc0\x27\x6f\x18\x06\x1f\xa6\x1f\xac\x79\xab\x70\x90\x77\x11\xaf\x63\xdb\xa6\xd8\x94\x04\x48\xf4\x86\xd7\xca\xb9\x01\x5b\x2f\xc0\xa6\x26\xcb\x9c\xd7\x15\x66\x37\xd7\xc4\x5c\x86\xc3\x7c\xeb\xff\x9c\x90\x9c\x9d\x40\xb6\xc2\x3c\x79\x91\x8a\xb7\x81\xbd\xf2\x00\xc0\x2b\x99\x76\x6f\x47\x5c\x48\x76\xcf\xc4\xb0\x17\xb8\x42\x9e\xa6\x17\x0b\x1b\x12\xac\x34\x8d\xb5\xd1\x75\xf3\x9d\x80\x3f\xfa\xe2\x9d\x19\x16\x9c\x42\x95\x5d\x6e\x25\x3c\x78\xe0\x5e\x79\x28\x49\xd1\xf8\x71\x95\xfb\x66\xa3\x57\x95\xb4\xc6\x0b\xc0\x29\xcd\xc9\x78\xca\xd6\x8b\xfc\x99\x9e\x7f\x56\xaf\x62\x5b\x2d\x77\x95\x08\x67\x15\x35\xdc\xc3\x41\x39\xaa\xdf\xfa\x7e\xe2\xf5\x73\x94\x2c\x4c\x0c\xf2\xe4\x8c\xd0\x8a\x41\x74\xec\xb6\xb3\x62\x46\xb3\xd0\xdb\x67\xa2\x60\x78\x07\x2f\x2d\xd0\xcd\xf4\x4b\xe9\xf6\x0a\xd4\x19\x2d\x2a\x15\x2a\x15\x07\x83\x23\xcd\xbb\x29\x43\x95\xeb\x70\xd5\x59\x34\x2e\xcd\xc0\xa0\xe5\x25\xc1\xf2\x58\xc6\x09\xe3\x23\xc3\x2b\xd7\x6a\x54\xd3\x50\x2f\x89\x4c\x84\x16\x6c\x51\xbe\x9d\x82\xee\xcb\x09\x98\xc1\x52\x0d\x1c\xa9\x69\x62\x11\xb0\x0b\x16\x6d\x5b\x34\x8e\xbc\xe9\x74\x72\x43\x18\xb5\x26\x7e\x94\x6b\x4c\x75\x88\x27\x14\x44\xca\x08\x62\xd8\x87\x87\x28\xd0\xa6\xf4\x3c\x86\x59\x0e\xd9\x48\xda\x2d\x7c\xbc\xdd\xee\x2d\x44\xfa\x21\xf8\x37\x8e\x4f\x60\xdb\x8a\x1a\xd6\x5c\xb9\x52\x1a\xb1\x61\x65\xc4\xda\x01\xe8\xc3\x45\x48\x0f\x34\xd1\x78\x3f\x74\xec\xa5\x2e\x96\xde\xd8\xb3\x1a\xc6\xfa\xf1\xca\x69\x31\xa0\x9d\x65\xca\x7e\x1f\xd9\x65\x73\x0f\x5e\x22\x09\xc1\x5b\x2a\x6b\x3f\x16\x71\x2b\xb2\x64\xea\xf3\x34\xdb\x68\x6d\x16\xa8\x43\x28\xa9\x98\xc4\x57\xa8\x79\x13\xde\x39\xeb\xaa\xf9\x15\xd1\x31\x77\x53\x94\x5a\xb2\x60\xc6\x68\xea\x2c\x8b\xe4\x11\x06\x75\xa0\xef\x1c\x99\x58\x9d\x3e\x5e\x4c\xb9\x17\x19\x4b\xd3\x9d\xfb\x9a\x64\x08\xd7\x32\x6f\x54\x89\x15\x2b\x5d\x44\xe4\xa0\x35\xf8\xa4\xc1\xf8\x91\x6b\x09\xb4\xbb\xed\x1e\xd7\x89\xc4\x1f\x1e\xfe\x7d\x3b\x1f\x83\xf6\xfc\x97\x77\xaa\x10\x1e\xdd\x6b\xb3\x65\x5c\x70\xa9\xe0\x50\x95\xc1\x11\x40\x87\x38\xd8\x25\xbb\x59\x10\xda\xe7\xae\x15\x8b\x62\x85\xf1\xc7\xdf\x9b\x5f\x6a\x3e\x24\xdf\x8a\xfc\x04\xab\xf0\x1c\x27\x65\x4c\x38\x56\xed\x70\xce\x72\xea\xce\x13\x5b\xce\xf8\x32\xbd\x2a\x67\x26\xa1\x9c\xd9\x18\xf0\xe1\xb5\x83\xec\xf2\x40\x84\x08\x9d\x2d\x13\xfb\xfa\xe0\xf6\xc1\x97\xde\x47\xc9\xae\xfc\x36\x3e\x42\x6d\x14\xdf\x5f\xc3\x81\xc5\xc8\x26\x9f\x3d\x4d\xb1\x4e\x98\x9f\x82\x61\xe9\x98\xd8\xe6\x68\x43\x07\x01\xa7\x83\x68\x2a\x9f\x3d\xa0\x03\xda\x7e\xca\x77\x82\x8e\xc8\x3d\x79\x92\xb3\x9a\xfd\x5a\xad\xb4\x94\x34\xd3\x04\x4b\x2b\x33\x9e\xbc\xcd\x2e\x39\x2d\x39\xe5\x64\x1f\x0d\x26\x7b\x5f\xad\xd0\x90\xb0\x87\x5f\xc3\xec\xc3\x4e\xe1\xb1\xd1\x46\xb2\x3a\xd9\x6c\x29\xb5\xee\xc0\xbd\x04\x35\x71\x54\xcd\x64\x57\x3b\xb3\x99\x97\xcb\xef\x34\x38\xa4\x32\xb7\x13\x8b\xb8\xe9\xc5\xaa\x31\xab\x47\x7b\x5d\x37\x76\xa6\xf2\x92\x23\x03\x71\xfa\x99\xaf\xcb\x72\x83\x46\x51\xa5\x30\xea\x6c\xad\xa6\x4d\x92\x47\xc2\x16\x90\xe7\x13\x90\xc3\x3f\xa5\xc2\xd0\xd1\x7e\xc4\x74\xc1\x5f\x3c\xbc\x47\x07\x31\xe7\xa1\xa8\xee\xa3\xe8\x32\x6c\xb9\xa6\x14\x23\x9c\xc9\x6e\x56\x6f\x43\x81\x99\x61\xf2\x94\xa2\x49\xdf\xa0\x2c\x83\x0d\x54\x60\xca\xa4\x15\xe2\xc6\x1f\x63\xd0\x21\xce\x06\x34\x04\xf0\x73\xf5\x38\xe5\x2f\xd5\x6c\x74\x57\x98\x99\xa1\x7a\x05\x95\x22\x52\xd6\x53\x98\xb4\xfc\xce\x50\x70\x05\x04\xc3\xe1\x05\xe9\x48\xdc\xb8\x8a\xf3\x57\xa7\xdd\x5f\x6b\x6d\xbf\x7b\x7d\xd3\x73\x83\xf6\x51\x25\xd4\x70\xbc\xa0\x10\xff\x15\x86\x70\x34\x1c\xd4\xb8\x0f\x54\xcd\xbb\xca\xac\x38\x54\x1c\xac\x10\x40\xe3\x00\x96\x6b\xae\x11\xbc\x14\x69\xc0\x6e\x3e\xaf\xdb\x50\x7f\x57\x24\x1a\x40\x3f\x75\x49\x54\x0f\x5a\xcc\x37\xb0\xc9\x48\x5d\xd6\x6d\xb5\x8f\x1e\x3f\x5d\xf8\x7b\x4a\x43\x5d\x0b\xd1\xdb\xe3\xb5\xac\x0d\xaa\x94\x9e\x16\x16\xa5\x7e\x52\x65\x2d\xd0\xa5\x10\xb6\x1e\xcc\xfc\x66\xc6\xa0\x34\x98\x12\x83\x43\xa6\x65\xae\x59\x62\x04\x2c\x40\x02\x66\xa0\x8a\xaa\x26\xd7\x16\xd6\x1f\xa0\x88\x87\x64\x0c\x51\xe2\xac\x1b\x0c\x24\xc8\x00\x0b\xef\x91\x8d\xc1\xec\x44\x7c\xf3\xf2\xeb\x8b\x71\xa7\x43\x39\x7b\xb2\x0b\x7d\x89\xf9\xc3\x4c\x90\x45\xec\x32\xe3\x42\x18\xc7\xa1\xab\x04\xa6\x61\x91\x4d\x60\xa1\x1d\x64\x16\x88\xe3\x36\xc5\x9a\x0c\x3a\xc7\xcc\xd7\xf6\x60\x84\x8b\x2d\xef\xf6\x06\x59\xb8\xd8\x66\x6b\xd8\xaf\xd1\x3b\x97\x5f\x88\x8e\x32\xc4\x97\x5b\xd4\x9f\xf6\x85\xba\x86\xae\x7b\x2f\x6d\xe2\x70\xf7\xf0\x29\x08\xfe\xc7\x8c\xc8\x75\x8e\x16\x8f\x98\x7d\xb4\x7d\x01\x1f\xab\x46\x4a\x8f\x5b\xb8\xfa\xaf\xce\xd4\xdd\x57\x52\x47\x5d\x57\xf8\xc3\xfb\xd9\x6b\x7d\x5e\x65\xe2\x96\x8e\x5f\x9f\x17\xa5\x7d\xfb\xb9\xc1\x24\x12\x53\xd6\xe0\x51\x25\x71\x5f\x24\x78\x7c\x45\xc3\x58\xa3\xfa\x6c\x66\xb4\xf0\x78\xff\xd0\x04\xc2\x95\x02\x99\x20\x56\x4c\x7f\x6d\xe5\x1c\xfb\xe4\x7b\x32\xde\x86\xfe\xd3\xef\xe7\xff\x74\x15\xa2\xdd\x6e\x4e\xe7\x63\xfb\xfb\xdc\x4b\xdf\x0b\x51\x9d\xfb\x2b\x5f\x2a\xd5\x73\x9b\x0d\x32\xcd\x62\x4c\x5c\xdc\xfa\x06\x1c\xc5\xcb\xf6\x30\xe4\xba\xaa\xf3\x0f\x29\x56\x7c\x61\x30\x2d\x8e\x5a\x25\x3d\xa2\x3d\x7b\x30\xa6\xa1\x86\xf3\xdf\x08\x4a\xdd\x3c\x61\xea\x75\x8b\xa3\x99\x9f\x59\x99\xd7\x10\x4b\x11\x15\xec\xab\xf3\x74\x0d\xe0\xbf\xdb\x5b\x09\xd3\x05\x3a\xe9\x0c\xed\x35\x17\x8c\xe0\xe6\x43\x40\x63\x50\xb9\x1e\xdd\x65\xdc\x6e\x57\x33\xd9\xf0\xf0\x85\xe2\x8e\x73\xae\x5c\x6c\x34\x8a\x71\x43\xbe\xef\x71\xf5\x04\x3d\x76\x69\x4b\xe5\x8e\x95\xb0\x71\x5d\x72\x36\x12\x7b\x8c\x5e\x06\xc3\xbd\xe3\x5f\x71\x4d\x45\x06\x89\x85\x94\x68\x09\xaa\x95\x4a\x5c\x30\x71\x11\x98\x02\x20\x8c\x79\x61\xca\xa0\xce\x69\x1e\x9e\x99\x8d\x60\x68\x12\x8d\x64\x4e\x51\xd6\x3b\x52\x31\x0e\x33\x30\x7c\xa8\x51\xe0\x0f\x98\x5a\x52\xad\x71\x14\x3f\x6f\x1e\xf1\xf0\x46\x43\x0a\xce\xe2\xe2\x05\x18\x4b\x5b\xfd\x61\x4a\x35\xfb\x6c\xd3\x45\xe0\xa7\x86\x62\xea\x2f\x25\x43\x8c\x69\x56\xdb\x15\x9a\x06\xb2\xd7\x0f\xc3\x12\xc6\x12\x47\x81\x40\x3f\x22\xf8\xc7\x2a\x94\xe4\x8c\x6f\x28\x1c\x98\xae\xc1\x94\xa9\x99\xdb\x29\xe6\xad\x40\x97\x0f\xaa\xad\xf1\x09\x70\x2d\x81\xa3\x84\xc5\xf2\x45\xc6\xd2\x17\x8a\x33\xa9\xee\xee\x58\x42\xef\xa5\xe6\x72\x81\xf7\xf7\xb3\x35\x9d\x87\x6a\x1b\xb6\xc5\xee\x6f\x35\x21\xab\x3d\xd0\xd8\xb3\x43\x8c\xfb\x73\x6d\x79\x1b\x63\xc0\xc9\x80\x1c\xc8\xfb\x4e\x34\xd5\x38\x7d\xc3\x58\xbd\x91\xad\x58\xd3\x3a\x74\x30\x44\x28\x20\x0f\xcb\x2c\xb0\xf3\xec\x0c\xd7\xfb\xcf\x8c\x64\xf0\x53\xde\xc4\xc8\x84\xce\x95\xb3\x75\x35\xf9\x4e\x29\xb7\x53\x82\xe8\x94\xd0\xdc\xdd\xe9\x2d\xe5\xbc\xab\xcb\xc0\x15\x9f\x80\x2c\xf3\xc9\x42\xbf\xec\x0b\x01\x2f\x98\xcc\xd7\xf3\xd8\xcb\x89\x58\xcd\xe1\x4d\x27\x5d\x40\xb2\xdb\xca\xde\x40\x09\x25\x56\x2a\xdf\x53\x9b\x65\xe0\xe7\x9b\xa2\x87\x5c\xc4\xf5\x06\xaf\x41\xfa\x93\xf4\x04\x8e\xe8\x33\xf8\x1d\x9e\x0c\xff\xc2\x99\x81\x84\xbd\x88\xbf\x19\xf1\x93\x68\x34\x1a\x5d\x00\xf1\xb3\xd2\x1f\x2f\xc9\xcb\x4e\x96\x3b\xc1\x38\xe4\x93\xf0\x79\x2d\x0d\xb1\x80\xe3\x75\x28\x2b\x32\x83\x2f\xc1\x58\x62\x7d\x87\xdf\xec\x05\xfd\xc7\x7b\xa8\x2c\x82\x55\xbf\xb9\x3c\x31\xde\xe5\x4a\x59\xa1\x30\xa3\x98\xdf\xae\x75\xa5\x7e\x56\x10\x85\x0e\x02\xc4\xfb\x03\x5f\xec\xbe\x39\x71\x3f\x70\xb0\x04\x2f\x6b\x7e\x94\x17\xd0\xe6\x07\x4a\xfe\xbe\x40\x19\x9b\xff\xe0\x80\xf6\xcf\xd6\x65\xaa\xa7\xde\xda\x1f\x6b\x60\xc3\x84\x5b\x12\x2e\xc6\xb4\xdd\x0b\x33\x09\x5a\xcf\x5d\x3e\xb0\x1d\x19\x8d\xfe\x5b\xea\xae\x15\x76\xad\xfe\xf4\x0b\x44\xad\xd1\x06\xd9\x30\x72\x5e\xc0\x39\x1a\x1a\x37\x23\x56\x3d\x80\x67\x1e\x94\x4a\xe0\xd6\x08\xaf\x5b\xde\xd9\xb8\x91\x89\xfa\x2e\x80\xf5\x24\xd4\x76\xbd\x02\x71\xcf\xc5\x36\x03\xd9\x4a\x12\x45\x1f\xc8\xfd\x52\x58\x5e\xab\x53\xcb\xe0\xe0\xcf\x53\x1b\x87\xbc\x34\x9b\xfa\xe5\xb3\x0d\xf6\x70\xff\x2b\xe2\xb8\xd0\xcc\xaa\x93\x34\x29\x1f\x06\x71\xbc\xb4\x7f\x76\x05\x29\xc6\x76\x49\x51\xf7\x90\xa7\x76\xf5\xed\x91\x34\x5d\x5f\x1b\xf8\x83\xfa\x07\xc2\x2b\x5c\xb1\x1b\x08\xa7\x1b\x02\xdb\x4c\x31\xba\xd3\x25\xe8\x0b\xed\x18\xec\xb3\xc0\x85\xc0\x63\xec\x54\x89\x65\x91\x16\x72\x89\xe5\x98\x46\x6d\x73\x70\xf0\x43\x7c\x33\x0c\x53\xdd\x66\xff\x4b\x49\x04\x13\x72\xd4\x53\x76\x7c\x36\x03\x8e\x3f\x64\x68\xf9\x01\x69\x15\xca\xaf\x7c\xbc\x04\x85\x2f\xbc\x8c\xb5\xe0\xde\xe1\xac\xb6\x80\x06\x75\xb3\x1f\x25\xd5\x42\xde\x0a\xfb\xd8\x75\x41\x4b\x40\xb3\xdd\x52\x91\xf0\x27\x06\x76\x53\x47\x49\x85\x02\x15\x36\x79\xaf\x3b\x67\x45\x8f\x9b\xf0\x62\x63\xb7\xf0\xdd\x40\xc8\xfa\xd0\x01\xd8\x00\x94\xf3\x6b\xa3\x55\xfd\x4c\xec\x74\x64\x76\x83\x18\x14\x53\x72\x0c\x15\x26\xd2\x1c\x0d\x78\x32\x5a\x14\x25\x5b\x24\x13\x1f\xbc\x88\x96\x84\xc4\xa1\x46\x90\x7f\x9e\xe3\x9e\xb3\xdf\xca\xf1\xcd\x5e\x77\x90\xa4\x65\xbf\x41\x2b\x7e\x06\x31\xf4\x70\x49\xa8\xed\x5a\xe5\xb2\x64\x49\x7b\x7c\x4e\x73\xb0\x82\x0b\x92\x4c\x3c\x41\x88\xe7\xe0\x59\x75\xa0\xab\x11\xd2\x5c\x42\xd7\xeb\x93\xfa\x91\x5c\x67\x2e\xcf\xdc\xb2\xcc\x4b\x4d\x92\x41\xe7\x0d\xec\xd9\xb1\x69\x9b\xad\xd0\xe9\x31\x89\xff\x5e\x72\xc1\x41\x86\x7c\x0e\x79\xbd\xe0\xc9\xed\xb7\x5b\x85\x01\x59\x95\x76\x34\xa8\x40\x15\xa2\x1f\x45\x41\xd7\x7b\xa4\x27\x05\x8c\x96\x18\xa9\x88\xf8\x41\xdf\xc9\x3f\x81\x58\xee\xe3\xb6\xb0\x69\x5c\x42\x5b\xa0\x5d\x4a\x54\xf8\x6c\x65\xd1\xd9\xe9\xe0\xc1\x3b\x3f\x58\x5e\xf0\xca\x0b\x69\xf5\x00\x56\xde\x47\xf8\x0d\x30\x83\x88\xbf\x0b\x29\x20\x66\xdf\xc7\xf9\xed\x42\xed\x7d\x98\xf3\x08\x09\x4c\xea\x43\xd6\x38\x4d\x9f\x89\x1b\x86\xaa\x48\xa9\x5e\x9b\x7e\xb7\xbb\x4e\x61\x9e\x8b\x3b\x23\xf3\xb4\x07\x1a\xa2\xe9\xb9\xc2\xd6\xa1\x4c\xd6\x9c\x82\x0b\x86\xf3\x2b\xca\x17\x59\xa8\xc4\x54\xb2\x2f\xab\x2f\x8b\x2e\xa3\x2f\xc3\x2f\x57\x2f\xfb\x2e\x4b\x2e\xe3\x3e\xc6\xaf\x43\x97\x23\x85\x99\x4b\x19\xe3\xe9\x1e\x14\x78\xe3\xc5\xe0\xb4\x5c\xde\xc0\x65\xf3\xbb\x8a\x85\x91\xa8\x84\xa8\xa7\x68\x52\xa8\x98\x31\x0f\xe1\x51\x3d\xf0\xe7\xb9\xab\xc4\xfe\x66\x34\x5c\x06\x27\x39\x07\xe3\x46\xad\xdc\xee\x82\x5a\x6d\x47\x97\x4e\x1f\x81\x8b\x25\xeb\xa2\x88\x6d\x3e\x5a\xe5\x2d\x62\x4a\x1d\xdb\x89\x07\xa4\x96\xa1\x24\x07\xaf\x9b\x24\xd2\xca\xf7\x05\xa7\x48\x1a\xc5\x39\x35\xe9\x21\x00\x7d\xf3\xd6\x05\x5d\xb5\x66\x83\x55\x36\x30\xd0\x65\xd3\xe6\x2f\x27\xb0\x34\x38\xeb\x47\xe4\x59\x13\xcb\xbd\xd3\xc6\x05\xe6\x57\xe0\x5a\xb3\x5c\x61\x08\x06\x0a\x5a\xac\x96\xa9\x3d\xcd\x0a\x57\x50\x90\xb1\xfe\x98\x66\xed\xa0\xa2\x07\xc2\x4f\x79\xbb\x21\x21\xcd\x42\xea\x15\x6d\x4c\xc7\xda\x9f\x4e\x63\x61\x43\x70\xde\x65\x79\x65\x36\x56\xb2\x07\x38\xfc\xb4\x9c\xbf\xb0\x63\xb3\x77\x1a\xfa\x83\xb7\x8b\xbd\x50\xb1\x40\x6a\x0b\xbb\x5c\x2c\xbd\x6d\x26\x22\x99\x86\xca\x86\x29\x2a\x82\x17\xe9\x3a\xc1\x2e\x3a\x85\xad\xa8\x6d\xd2\x67\xe3\x58\x0b\x3d\xfd\xbe\xd5\xc0\xc5\xef\x21\x6f\x5c\xc1\x30\x90\xc2\x68\x77\xef\xb0\xf3\x02\x6c\xd8\xdf\x5a\x93\x8f\x76\x9e\xb4\x88\x79\xb9\x94\xc9\x5d\xa4\x4b\xb1\x9e\xbc\x33\x1e\x3b\x72\x65\x69\x31\x62\xe2\xc9\xf4\xc5\x8d\xd1\xbe\xa5\xa6\xb3\x70\x0d\xf0\x68\x14\xbe\x71\x5b\xc6\x43\x78\x53\x23\xfc\x88\x60\x06\x3e\x75\xe0\x55\xb0\x08\x2e\xd0\x8a\x33\x1f\x6b\x60\xa6\x87\x5a\xe5\xe1\x1e\x6d\x98\x2a\xf2\xe3\xe5\x41\x04\xa3\x8a\x08\x41\x64\x15\x16\xa6\xa9\x37\x12\x20\x6a\x85\x62\x02\xbd\xc9\x4d\xb9\x5b\xca\xac\x0a\x1f\xc6\x10\xdb\x83\x0a\x9b\x71\xad\xe6\xd6\x42\xd4\xe1\x5a\xe3\xd7\x22\xe5\x0c\xab\x44\x85\x6d\xa5\x9c\xbf\x05\x4a\xe1\xc3\x10\x16\xd7\x66\xef\x37\xbc\x65\xe8\xaf\x3a\xf7\xe8\x05\xa7\x67\xa5\xa9\x62\xff\xf2\x85\xa3\x12\x03\xd5\x64\x7e\x65\xb0\x78\x44\x8e\x91\x9b\x05\x37\x33\x97\x54\x5a\x31\xc1\xe3\x65\x68\x93\xfa\xf3\x37\xe5\x39\xdc\x98\x2c\xc9\x30\xd5\x98\x7d\x45\x29\xec\x44\x67\x23\xab\xad\xd8\x19\x72\x6b\x70\x7f\xfd\x93\xb1\xdd\x1c\x42\xce\xec\xb3\x0f\x2b\x2c\xf6\x25\xd2\x73\x60\x58\x2a\x6c\xa7\x94\x54\x13\x4e\x17\x61\x2a\x5a\xb3\x08\x73\x5d\xb1\x20\x1e\xd6\x82\xf3\xa3\x33\x2d\xc5\xe6\x39\x5f\xb0\xe5\xcd\x71\x17\x10\xf5\xc8\xd9\x1d\x9b\x97\xc8\xdd\x8d\x3f\x77\xd5\x91\xc3\x7d\xac\x3a\x48\xd1\x7c\x0a\x04\x53\x83\xdf\x6f\x03\x03\x03\xf3\xca\x31\x35\x32\x33\x32\x32\x32\xe6\xe3\xdf\xf7\x13\x37\xe3\xeb\x9f\xd1\x84\x76\xf0\x80\x46\xe9\x30\xf1\x5b\xfd\x29\xf1\xfd\xfd\x9d\x1f\x9c\xfc\x17\x71\xe4\xd8\xc8\xc8\x04\xec\x1c\x0c\xcc\xec\x17\xfc\xda\x7f\xec\x98\x82\xe6\x06\x06\x06\x26\x6f\x89\x7f\x72\xe1\xe2\x06\x91\x4d\x04\x59\xd3\x82\xf9\xc2\x41\xcd\x82\x79\xe5\xc4\x69\xc8\xda\x62\x08\xa3\xd4\x79\x3f\xf2\xc5\x66\xd3\x45\x60\xb2\x43\x6a\x48\xcb\xa5\xd0\x45\x57\x00\xc5\x4f\x1a\x88\x7a\xa3\x88\x10\xa2\xc8\x0e\xc4\xc9\x42\xa8\x5c\x6d\x3e\x70\xbf\x90\x07\x8b\xfb\x65\x7a\x6a\xd5\x59\xd5\xf9\xf7\x5a\x92\x6b\x64\x05\xaa\xba\xbb\xba\x76\x57\x92\xa7\x97\x2c\x0f\x0c\xdf\x92\x7e\xbf\x8a\xab\x2d\x06\xee\xbb\x0f\xb6\xdc\xf2\x2b\xae\xfe\xa0\xf2\x15\xe4\x33\xf5\x73\xcf\x13\xc8\x94\x33\xf6\xc4\xa9\x3b\xd4\xa7\x75\x9b\xf3\xbc\xc9\x9c\xc6\x39\x32\xd8\x3d\x73\x10\x63\x58\xf2\xb7\xdd\x7a\xf1\x59\x89\x84\x9f\xfd\x80\xcc\x24\xb8\xac\x8f\x53\xf7\x9f\xac\x2c\xc7\x71\xe4\x3e\xca\xe5\x79\x24\x9c\x8d\x49\x41\x7b\x3e\xe6\x3d\x04\xd5\xac\x4b\xcc\x57\xe4\xc1\x84\x34\x9d\x2a\xe6\x20\x77\xf2\x8e\x6e\x6b\x21\x61\xa8\x62\xaf\x88\x1c\xc7\xeb\x7a\x45\x15\x4f\x99\xff\x62\x51\x4f\x71\x9c\x82\x58\x2f\x9f\x16\x25\x7a\xcb\x0a\xeb\xf8\x9b\x55\x5f\x27\x28\x78\x90\xd3\x03\xcb\xdd\xa4\xe5\xe3\x8b\xe6\x19\x2d\x90\x0f\xab\xc8\x1a\xb7\x25\xde\x9a\x4f\xf3\x39\xf4\x21\x66\x7e\xdf\x91\x8e\xa3\x0b\xd1\xcf\x7f\x95\x92\xe6\x29\x5e\xcb\xe3\x5a\x6b\x7e\x5e\x29\xcd\xee\x38\x36\x9c\xa7\xb2\x13\xb9\x2e\x99\x53\x3f\x72\x1f\xce\xaf\x2a\xf2\xa1\xd4\x0d\xed\x8a\x36\xeb\xa7\x49\x1c\x47\x0b\x9a\xe8\xc2\x8a\x85\x5d\x03\x64\x06\xf9\xeb\x32\x0d\xed\xda\x1d\xe9\xc7\x31\x6b\x4c\x3d\x35\x94\x17\x07\x04\x6f\xb4\x34\x4b\x9c\x3a\x0e\xbd\x87\xef\xca\x6f\x8c\x2f\xbb\x14\x3d\xd6\x1e\xfd\xb9\x8b\xbf\xe1\x05\x9f\xa2\x0a\x7f\x1b\xba\x47\xcf\x56\x34\xb0\x94\x7b\x19\x3b\xaf\xf5\xee\xb4\x6a\x76\xec\x19\x41\xbe\xff\x9c\x07\xd9\x71\xa2\xd7\x64\x33\x56\xec\x7c\x5e\xe2\x2f\xc5\xba\x94\x3b\xb3\xfa\x43\xf2\x7b\x88\x0e\x7c\x60\x85\x0f\x8a\xd6\xa3\x5f\x49\x21\x4b\xf0\xf7\xa0\x8e\x17\x7a\xa4\x5f\x21\xdc\xe5\x0b\x3d\x58\x3f\xd8\xb9\xec\x33\xbc\xbb\x94\xb0\xf5\x88\x96\xde\xb7\x20\x3d\x2c\xd6\x6b\x80\xca\x9a\x2e\xed\xcc\x34\x86\x6a\xa2\xe5\xa0\xbe\x74\x7b\xcd\x9f\x2f\x14\xbe\x20\xf7\xce\x98\x34\x97\xfb\x91\x8f\x1d\xbb\x30\xe7\x92\xdf\xac\x1d\x5d\xf1\x35\xe3\x3c\x7d\x78\x6a\x7d\xbe\xb6\xcf\x95\xeb\x2b\xb5\xc3\x20\x1e\xb4\x3f\xf3\x59\xdb\x06\xc7\x54\x3e\xbd\xa7\x2f\x64\x49\x22\x05\x04\xf7\x1f\x68\x7f\xdd\x88\xc4\x56\xc7\xbe\xf8\x7d\xc9\x7c\xf6\xd5\xfa\xd8\x94\xc1\xb4\xbe\x11\x85\x1e\x73\x40\x81\xf4\x85\x7a\xd5\xc5\xe8\xfb\x95\x22\x3d\x66\x04\x1c\x00\xdd\xb1\xee\x03\xbc\xa1\xad\xab\x9a\x2f\x5b\x50\xc0\x65\x22\xc5\xda\x7a\x40\xaf\xbc\xb9\x84\x76\xdf\x7c\x73\xca\xda\x95\xde\xba\x9d\x50\x6e\x68\x1d\xcd\x3d\xe9\xf5\x9f\x73\xe4\xde\x0a\x77\xc1\x34\xaa\x0b\xfb\xd8\xee\xa0\x87\xa4\xd9\x1b\xc4\x69\xaa\x93\xa6\x0f\x66\x2e\xf8\xcf\x89\x67\x81\x16\xcf\xc0\xe7\x37\xd1\x8f\xe1\x2c\x3d\x8b\x4e\xf9\xb2\x6e\x53\xff\xc2\x1b\x50\x00\xfb\x6c\x20\xd1\xeb\x0b\x86\xdd\xcc\x0c\x76\x94\xbd\x23\x1d\xc3\x8a\x7f\xee\x0b\xb1\xf6\x4d\xe1\x7d\xb3\x4b\x85\xee\xaa\x6c\x6e\xe0\xd9\xf8\xb4\x85\xde\x13\x8c\x77\x7b\xd1\xa7\x48\xbf\x24\xd2\x95\xf7\xe6\x10\x51\xa3\x63\x6a\xde\xcd\x9a\xa8\x6e\x73\x45\xff\xd7\x19\x22\xe0\x66\x73\xc7\x0f\xf2\xb6\x5f\x1c\x6d\x4e\x5c\x08\xae\xf7\xfa\xac\xee\x48\xcf\xbf\x07\xdd\x8c\x6f\x07\xc3\x67\xf7\x86\xf1\x09\xce\xef\xce\x2b\xa7\x34\xcd\x57\x6d\xce\x92\x60\x7c\x6f\xee\x50\x81\xa1\x33\x02\x05\xcf\x7a\x46\xe4\xaf\x59\x34\x8a\x09\xe9\x21\x4a\x4c\x27\x6b\xb3\x75\xb6\x7c\xc4\x1f\xf3\x58\xf2\xb5\x4e\xb6\xf4\x5a\xf9\x09\xfe\x23\x22\x2a\x36\x17\xe4\xce\xc8\x44\xeb\x3a\xd2\x4b\xf3\x6f\x50\xe0\x45\xce\xcb\xeb\x57\xdf\xdc\x43\x67\xcf\xde\xcd\xdc\x83\xbf\xc2\x62\x7f\x20\xd1\x37\x38\x73\x52\xe5\x4f\x2c\x29\x8e\x1f\x66\x52\xe1\x21\xc2\x79\x6a\x5c\x6a\x34\xe7\x70\x75\x52\xa3\x92\x32\x14\x63\x3f\x9e\x65\x9b\x0c\xfe\x21\xe6\x24\x11\x14\x95\x2c\x42\x94\xb2\xc0\xaa\x68\xef\x4e\xdd\x5d\x4b\x69\x8f\x8f\xaa\x78\xbb\xd0\xcc\x17\x8b\x94\xa9\x39\x93\xfd\x4e\xa4\x59\xa8\x6f\x4a\x57\x2b\xcd\x39\x12\xcb\x53\xed\x52\x73\x6f\x51\xa3\xff\x39\x22\xbd\x72\x76\x3a\xed\x83\x78\x6f\x83\x05\xe3\x54\x25\xce\x98\x8e\x0b\xa6\xd0\x7a\x58\xca\x93\xa7\xa2\x8f\x3d\x99\x8a\xa3\xd9\xb1\x02\x9f\x72\x6e\x29\xeb\xf0\x68\x07\xc6\xe9\x79\xbf\xad\x9a\x28\x89\x9c\x20\xb9\xe8\xfb\xe8\x08\x44\xf6\xea\x23\x46\x5a\x7f\x10\x6b\x3e\x95\xa9\x44\xe5\xc7\x1f\xae\x84\xe5\xef\x05\x1c\x8f\x76\x73\xb6\xf6\xee\x5f\xe4\xd2\xb1\x1f\x7b\x2e\x31\x09\x29\xb0\x72\x71\x88\x96\x27\x40\x14\xc4\xcf\x51\x56\x72\x1b\xb0\x9f\x9e\xf1\x62\x1c\xc9\xd0\x3f\x4b\x05\x00\xad\x61\x05\x6e\x21\x6e\x6d\x46\x0d\x68\x7d\xde\x93\x6f\x14\x73\xc1\x40\x30\x4a\xdd\xee\x8c\x89\x8c\xad\x85\x9e\xf8\x1d\x30\x2a\xb4\x89\xa0\xb6\xcb\xd6\xc3\x5e\x7e\xe7\xab\xe6\x12\x92\x73\x0f\xa1\x40\x49\xe2\x4a\xd5\x22\x0c\x39\x39\x4b\x97\xae\x82\x7e\x78\xbe\x6e\xc0\x7b\xa4\xb4\xca\xcf\x1c\x11\xc0\x1a\x26\xa1\xfe\x5d\x25\x3e\x5f\x37\x73\xe8\xf5\x88\xbb\x65\x5f\xe1\xe5\x4b\x81\x85\xa2\xdf\xa5\xf8\xce\x2e\x68\x19\xc6\xf0\x4d\x89\x17\xa1\xce\xd8\xe9\x4c\x56\x4f\xf0\xe3\x5a\x32\x21\xa1\x12\x35\x3e\x1e\xfc\x08\x79\x60\x3c\x38\x1c\x5c\x0f\x3a\x1c\x6c\x76\x10\xa0\x66\xfd\x93\x3d\x72\xde\x15\x67\x3b\xb2\xd0\x9f\xab\x19\x47\x78\x0f\xd5\x09\x0f\xb6\x5d\xb1\x52\x30\xfa\x63\x6e\x9d\x78\x66\x03\x44\x30\xd7\x5f\xf0\x82\x33\xab\x02\xf9\xf0\x87\xe4\x45\xd6\x65\x4c\x99\x2a\xc9\x15\xfd\x8f\xe0\xa1\x36\xb1\xe2\xb6\xe7\xc2\x22\xe4\x09\xf3\xdf\x56\x69\x05\xb0\xbc\xe4\x3b\xa6\xe8\x0d\x71\xe5\x40\xb8\x4e\x55\x00\x37\x66\x9c\xe0\x3c\x15\xde\xf5\x12\x80\x29\xf7\x03\xd7\x7a\x51\x71\x64\xce\xcc\x11\x8b\x9b\x79\x9a\x39\xa2\x77\x23\x27\x41\x0b\x34\xda\x84\x05\x9f\xaf\xb5\x6a\xc2\x9d\xee\x0a\x14\x8c\xcc\xe1\x62\x1b\x53\xa6\x45\x4a\x38\x19\x0a\x24\x3a\x75\x16\x78\x30\x1c\xa8\xc1\xe2\x91\x8d\x01\x74\x45\xbd\x7e\xc8\xd5\x8f\x82\x9a\xc3\x7c\x64\x37\x74\xa3\x3d\xa7\x32\xb4\xf9\xde\xfb\x01\x73\x2e\x6c\x8c\x92\xc3\x70\x16\x6d\x3f\xf2\x68\x33\xd7\x68\xce\xc9\x9d\x56\x35\x0e\x7d\xc9\x5a\xd1\xee\x5c\x10\x6f\x6c\x5d\x4a\x5a\x1f\x75\x22\xc7\xdc\xa7\x99\x61\x1d\xa4\x73\x2e\x9e\xbc\x5a\xf2\x6e\x4c\x21\xb6\x39\x6f\x09\xed\x82\xf6\x24\x7c\xec\xcd\xb0\xb2\x33\xa6\x2c\x3e\x36\xe5\x76\xe8\x97\x37\x43\x88\x75\xb9\x23\x75\xf7\x73\xe5\x76\x39\x0e\xda\x07\xad\x7d\xdf\x74\x2f\x83\x24\xe1\xb2\x3c\x8b\x1c\xb1\x79\x3c\x55\x1d\x91\x59\xb7\x23\x89\xdf\x6f\x6d\x04\x3f\x54\xce\x52\xa3\xf7\x60\x6e\x6f\xc1\x78\x90\x0f\x02\xf1\x2c\x29\x11\x05\x22\x81\xee\x51\x3c\x91\x95\xae\x90\x7d\x92\x5a\xb2\x91\x53\xf9\x23\x04\xa5\xa7\xca\x6e\x04\xa1\x81\xd0\xad\xf1\xc5\xdf\x5c\x0f\xbc\xc1\xab\xe8\x7c\x8a\x8b\x87\xe4\x17\x54\x0b\x7e\x70\x8a\x0a\xcd\x81\x78\xfd\xb3\x80\x77\xdc\xfb\x59\x96\x72\x39\x37\xcb\xa2\x7d\x02\xdb\x53\x80\x3b\x91\xe3\xdc\xf0\xfe\x8f\x3e\xbd\x02\x49\xac\x9e\x66\x80\xdf\xdf\xf5\x18\x60\x4f\x58\xda\xd4\xa5\xfe\x49\x76\xc7\x8f\xd3\xea\x1a\xc3\xe1\xf4\x0b\xab\x8e\xd9\xce\x89\x88\x43\xc4\x03\x47\x96\x43\xdd\x91\x9d\x22\x4f\xa4\x8b\xf6\x57\xac\x9b\xa0\x6e\x12\xec\xbd\x6b\xe7\xb4\xef\x03\xb9\x5d\xcb\x1b\xf0\x3e\x3e\xb1\xa5\x5f\x2e\xc4\x0f\x84\xfc\x83\x91\x54\xb7\x7e\x32\x01\x02\xbb\xa7\xaa\x17\xb8\x96\x07\xdc\xbd\x06\xf3\xcd\x41\x8e\xa5\x60\xf1\x8c\x0b\x2f\x68\xbb\x8c\xfb\xdf\x70\x33\xf5\x5a\xbe\xfa\x7a\x12\x98\xe6\xd1\x76\x49\xd4\x6f\x52\x65\x5a\x7d\x72\x77\x08\x99\x68\x10\xe6\x32\x69\x10\xf0\x66\x32\xdc\x93\x5c\x18\xd0\xb4\xe6\x32\xbe\x13\x29\xfb\x34\x0c\xf8\xf4\x87\x13\x8e\xe3\x5e\x99\xf7\x67\x2c\x98\x7e\x42\x1c\x6b\x6e\xb1\x72\x14\x9c\x42\x76\xc7\x06\x05\x42\x65\xff\x88\x70\xcb\x7f\x67\x56\x99\x9a\x57\x89\xff\x53\x43\x4e\x75\x16\xa0\x50\x1d\x26\xbe\xad\x91\x56\xa0\x3f\x5f\x33\x99\x0b\xef\xd9\x1c\x59\x23\x6d\x63\xd8\x3e\x8f\x4f\x71\x36\x9f\x4b\x25\x7a\x8a\xfc\xd7\x71\x3c\xd1\x01\x33\xe5\xa5\x54\x4c\x3a\x27\x81\x0a\xb6\x1b\x57\x3f\xc1\x76\x07\x29\xcd\x62\x00\xcb\xb2\x5b\xc3\x49\x51\x96\x59\x8d\xe0\x59\x68\x4d\x44\x7e\x18\x43\xb4\xc7\x97\x89\xf5\xf8\x10\x9a\x60\x58\x26\x47\xcb\xf5\xc6\x3b\x05\x39\xdf\xec\x9e\x25\x87\x8f\xd2\xa1\x55\x46\x7f\x77\x25\xf4\xbe\xc0\x22\xcc\xc7\x3b\x50\x5e\x0c\x2f\x64\x4a\xc5\x05\x53\xdc\xcd\xda\xe7\x26\x2c\xfa\x13\xc0\xc0\xba\x03\x98\xe7\x57\xa2\x4c\xe9\x20\x72\x7a\xff\x4d\x80\xb2\x95\x4c\xd4\xdb\x03\xc6\xdc\xbb\xb0\x88\x7f\xf3\x06\x70\x24\x3e\x18\x9e\xdf\xc6\x26\xfa\x5c\x87\x4f\x48\x3e\x53\xac\xff\xa2\x66\x81\x00\xbc\xc2\x7a\x43\xa0\x9b\x43\x17\x9a\x33\x6d\x46\x9a\x4d\x22\x98\x2b\x0c\x0f\x99\x45\x0c\x5b\x62\xe0\x49\x2c\xf9\x22\xb8\xf7\x89\x6c\xad\x39\x11\xc7\xb4\x39\x56\x7c\x5f\x21\x64\x3a\x1f\x89\xdd\x13\x24\x08\x5c\xd3\xb0\x06\xf7\xc0\x4e\xbb\xfe\x60\xcd\x8b\xaa\x4f\xae\x78\xe7\xbf\x4b\xde\xe7\xc8\xfc\xfc\x7d\x5f\x0e\xd8\x53\x0b\x90\x6c\xe6\x8c\xdb\x26\xce\xbc\x78\xe4\x0c\xda\x93\x63\x9b\x19\xd9\xd2\x06\xe1\x89\xf6\x6f\xe4\x64\x73\x1f\x8d\xdf\xe5\xc4\xd4\x75\x4e\xfb\x10\xb5\x9e\xa2\x77\xa3\xe8\xc7\x54\xb4\x67\x74\x50\x4c\x3b\xc3\xe2\xa5\x37\xb5\x21\xcc\xa5\x31\x0f\x83\xd4\x32\x8f\xa7\xcd\xa1\x7a\x35\x8b\xcc\x31\xfd\x03\x73\x7f\x3f\xe0\xf3\xa3\x01\xa6\x08\xcd\xd0\x5c\xf6\x0e\x3c\x7b\x40\xa1\xae\xad\x78\x8e\x9a\xae\x58\x68\x77\xe6\x88\x7a\xab\xf7\x7d\x58\xbd\x17\xc0\xfe\xf8\x17\xf2\x0f\xa9\x03\x7f\x78\x22\x07\x71\x53\x96\x5d\xa7\xb9\x8c\xab\x4b\xc7\xf1\x3d\xc2\x9c\x48\x42\xa0\x6c\xb0\x2a\x9c\xbf\xe7\xa2\xe3\x1a\x7e\x43\x5b\xb6\x8e\xef\x6d\x20\x23\xc1\xcb\x90\xa3\x20\xf7\x7b\xa6\x27\x8d\x0f\x52\xc1\x2b\xc9\x27\xf2\x10\x05\xe2\x6e\xe4\x80\xf1\x1b\x81\x31\x23\xe1\x8c\xe4\xbe\x5f\xec\x1b\xee\x23\xdf\xac\x9d\x22\x53\x75\x32\x69\x50\xef\xd2\xf4\x19\x42\xef\xac\x4b\xda\xec\x81\x32\xe5\xe9\x13\xdf\x07\xa3\x12\x2b\xbc\x5e\x09\x96\x67\x78\xa7\x58\xef\x94\x53\x67\x34\xf2\xda\xc4\x54\xc4\x38\xe2\xb3\xc3\xdb\xe4\x76\xc8\x1a\xfd\xe3\xf1\x80\x60\x24\xab\x7b\xb6\x80\x27\xd0\x3b\x72\xcf\x73\x3f\x23\x26\xa1\x73\x32\x68\xf3\xa5\xc2\x9d\xd8\xff\x65\x21\x25\x32\x82\xef\xe3\x0d\xdf\x1e\x19\xf0\x90\xd8\x13\x09\xfa\xce\xe8\x52\x04\x05\xe4\x3b\x5d\xe7\x0f\x5d\x51\x0b\x1c\x0f\xdf\xe0\xda\xce\x79\x07\x06\x5b\x42\x8d\x60\x14\x84\xfb\x0e\xf7\x1c\xd1\xf5\x14\x8d\x67\xbf\x1f\xb8\x47\xd4\xdc\x25\xb5\xce\x36\x85\xf3\x99\xc1\x23\xa7\xd2\xbb\xc8\xb4\x69\x45\xd9\xc1\xae\xca\xde\x6f\xed\x47\xdb\x9d\xf1\x6d\x34\x29\x34\x1d\x6b\xb9\x4e\xa7\xd5\x02\xa8\x74\xff\x82\x64\x82\xbe\xeb\xed\x30\x15\xb5\xa9\x88\x37\xaa\xea\x9a\x56\x8a\xcc\xab\x1f\xba\xc7\x28\x37\xb2\x0a\x49\xf4\x57\x29\x54\xda\x38\x5a\x2f\xc8\xff\x75\x41\x4f\xf5\x89\xfa\xf5\x92\x6c\xbc\x8d\x74\xf1\x27\xd9\x33\x89\xae\xe6\xb2\xbf\xd0\x6d\x78\x1e\x9a\xf1\x7b\x71\x94\x68\x0c\xeb\x69\x2b\xce\xff\x96\x69\x6b\x14\xfc\x9d\x68\x9f\x44\x77\x81\x49\x7a\x31\x13\xa0\xea\x92\xdd\x3d\xf1\x96\x74\x03\xbf\x86\x85\x14\x94\x15\xe0\x40\xa2\xda\x46\xb1\xad\x83\x7a\xd3\x2f\xc4\x01\x46\x68\x7f\x60\x0e\x51\xb9\x10\xff\x52\xe0\x24\x14\x00\x03\x82\x2a\xff\x20\xfe\x80\x30\xef\xcd\x77\xfb\xcf\xff\x92\x67\x9a\x7c\xb2\x60\x16\xec\x87\x9c\xd0\xf4\xcf\x30\x04\x04\x24\x23\x01\x08\x30\xc2\xdf\xe0\xf2\x60\x5e\x39\xa9\xc9\x7b\x36\xe8\xc2\x18\x63\xfd\x3b\x25\xf2\xb6\x25\x46\x0b\x2a\x3d\x89\xc2\x62\x83\x31\x3b\x2d\x29\x58\x21\x9c\x5b\x82\x67\xf2\x56\x26\x3f\x4b\x35\xcf\x39\x78\xa5\xd3\x28\xbb\x8d\x3d\x92\x12\x6d\x0d\x85\x6e\xa1\x46\x68\x89\x85\x7a\xb0\x7b\x1e\xd5\x21\x89\x07\x1d\xa9\x4c\xd1\x1b\x45\xe4\xa5\x4e\x38\x2d\x4f\x3e\x5e\x67\x37\xa0\x1a\xae\xf8\xc2\x43\x5f\xc7\xc7\xf1\xa7\x90\xfe\x81\xcc\x36\xc4\x61\xf7\xe8\xb0\x9d\x90\x05\xe9\xb1\x95\x3d\x88\x74\x0c\x06\xcb\x54\xdb\x7b\x64\xde\x97\x5d\x60\x19\x77\x2c\xd3\xd6\x9c\xd6\xfc\x1d\xbd\x09\x3d\xb7\x19\xd3\xa6\xbc\x00\x5f\x0d\x3d\xc1\x92\xe1\x41\xda\x39\x07\x3c\x9e\xf5\x72\x63\x39\x84\x76\xfb\xb9\xe6\xe9\xed\x02\xba\x0c\x00\xe6\x3e\x5d\x06\x93\x29\x67\xfa\x7a\x00\xac\xfb\x8c\x77\xea\xf3\x5a\x9a\x2c\x08\xd8\xd3\xda\x13\x61\xef\x69\xe1\x4d\xf8\xb2\x83\x9c\x36\xe5\x75\x1d\xd0\xda\x13\x8c\x1d\xfe\x23\x3e\xd1\x24\x0c\x17\xc3\xe4\x71\x3e\x32\x62\x80\x59\x44\x8e\x44\xba\xbc\x04\x12\x75\x0e\xca\x43\x79\x10\xe9\x79\xff\x2f\x04\x02\x08\x53\xd6\x20\x73\x43\xba\x2e\xc9\xf6\x9a\xf0\x8e\x32\x7e\x71\x41\x6e\xb4\xb7\x0f\x6b\x7c\x5f\x2c\x7a\x89\xe9\x8f\x85\x49\x7b\x53\xf3\xcd\x1f\x23\x26\x94\x93\xdf\xe8\x32\x16\x2a\xf2\x66\x62\x91\x78\x17\xd2\x38\x8c\x03\xcb\x62\xb2\xcc\x47\xd1\x3a\x59\x40\x23\x9a\x66\xb7\x09\xf9\x98\x34\xa2\xb1\x1a\x12\x33\x86\x16\x33\x47\xbe\x9f\xea\xd7\x5b\x03\xb8\x9b\x15\x4b\xef\x28\xea\xd7\x9b\x2d\xb9\x80\x1f\xf2\x2e\x31\xbc\xcb\x78\x96\x57\x3e\x4e\x5a\xf6\x2d\xb6\x54\xd8\x33\x12\xd5\xfe\xdd\xb1\xa7\x12\xea\x12\xad\xaf\xfa\xc1\xfc\x36\xbc\x80\xfa\xa6\x65\xec\x1c\xd9\xd4\x51\x6b\xb2\xe7\x1e\x88\x7a\x13\xb1\x5d\x06\xaf\x64\x11\xf2\x52\xb3\xb2\x63\x6f\xf4\x6e\xca\xdc\x02\x43\x9b\xaf\xf7\x93\xa3\x32\xe5\x63\x01\xc2\xc5\x9b\xa1\x2e\xbd\x95\x24\xc5\xb5\x93\x39\xfa\x68\x6e\x32\x9d\xc8\x32\x7b\xcd\x96\xf0\x16\x1b\xf4\x9b\xa4\x2b\x3d\x31\xe9\x8e\x93\xee\xf8\xca\x4c\x55\x6b\x24\xb3\x0c\xe9\xd9\x4a\xda\xd4\xf9\xca\x79\x7f\x6a\xac\xe2\x19\x33\xc9\xd3\xa1\xee\x4a\x16\x2a\xfd\x2a\x74\x9d\xf0\xbf\x04\x11\xe7\x32\x61\x3a\xd5\x20\x17\xbb\x3a\xf2\xca\x78\x5e\x96\xe6\x50\x8d\xb2\xa6\x7e\x9f\xe2\x96\x0e\x87\x59\xf9\x39\x32\xac\x39\x34\x39\x62\xb6\x77\x95\x63\xda\x6b\xc3\x0b\xc4\xef\xa8\x33\x5c\x73\xa0\x2d\x7f\xd5\x5b\x80\x81\x01\x57\xc2\xcd\xe8\xd9\xb7\xd8\x2d\x77\xa5\xb7\x26\xda\x92\xf7\x37\x31\xf3\x27\xb8\x38\x65\xe6\xe3\x1d\xfc\x5c\xcc\x3a\xaa\x57\x8e\xbf\x26\x94\xdb\xe1\x44\x93\xbb\x7a\xa6\x09\x15\xae\x56\x59\xfb\x74\xca\x7a\x5a\x0e\x9d\xa2\x51\x66\x66\x6f\xd3\x4e\x1b\x7b\x1a\x7d\x1c\x09\xd3\xd4\xf4\xf4\xf4\x74\x42\xe6\x33\x73\xbf\xff\xf4\x74\x43\x42\x66\x55\xc9\xb3\xdc\xc9\x87\x6b\x80\xc2\x22\xf9\x4e\xdf\x8e\xbf\xa3\x26\x35\xb5\xdc\x67\xbf\x20\x08\x0f\x3b\x71\x08\xa3\xd4\x41\x46\x3f\xbf\x8b\xc1\xdd\xf4\x3c\x6d\xb9\xb6\x12\x5f\xa5\xbd\xd4\x01\x1a\x32\x84\xcd\x8c\x04\x9e\x7b\x62\x18\x05\xa3\xe0\xe7\x30\xd3\x8f\xe2\x06\x84\xb4\x61\x38\x2d\x58\xfc\xc1\xb1\x06\x58\x3b\xb8\xec\xc1\x93\x06\x28\x3b\x58\xdd\xc1\xd5\x06\xc4\x1e\xd8\xb6\xf0\x2b\x23\xdf\x75\x70\x8f\xb0\x5c\x23\xcb\x75\x28\x8f\xf0\x1d\x23\xcf\x75\x88\xe7\xb0\x5e\x23\xc7\x75\x98\xe7\x70\x66\x9c\x48\xb4\x94\xc2\x1f\xd0\x19\x4a\xe1\xb0\x19\x61\x9f\x46\x81\x5c\x60\x48\x61\xa1\x00\x23\x2e\x48\x8d\x41\x0c\xb9\x61\x84\xe9\xa1\x42\x27\x1c\x02\x24\xc9\x81\xbf\x4e\x18\x04\x88\xe3\x03\x8d\x4e\x04\x04\xc8\x54\x03\x7f\x9c\xd0\x72\x10\xca\x07\x2a\x9d\xf0\x72\x90\x2c\x07\x32\x9d\xb0\x72\x10\x4f\x07\x3a\x95\x42\x1f\x06\x42\x7c\x6c\xd8\x9e\x24\x6c\x20\xf1\xe6\x21\xa1\xe8\xad\x44\x61\xec\xb4\x10\xf5\x9d\x0a\x60\xfc\x9d\x06\x43\xd9\x01\xa2\x60\xa4\x62\x4c\x30\x0f\x0d\x60\x31\x0d\x58\xb3\x91\xf0\x00\x91\x8e\x9f\x0c\x11\xb2\x00\x95\x0e\x04\x86\x48\x5a\x80\x4c\x07\x5c\x5d\x84\x2d\x40\xa7\x03\xa9\x2e\x12\x1f\x20\xd1\x01\xeb\x10\xa1\x0b\xd0\xe8\x40\x74\x88\xe4\x05\x28\x74\xc0\x5f\x47\xf8\x02\x0c\x3a\x90\xaf\x23\x61\x00\xc2\x5e\x3f\x89\x22\x24\x01\xca\x5e\x08\x44\x91\x54\x00\x69\x2f\xb8\xbc\x08\x4b\x80\xb6\x17\x52\x5e\x24\x36\x40\xdc\x0b\xd6\x20\x42\x13\xa0\xee\xc5\xda\x03\xb5\x0b\xe7\x18\xda\x3e\xcc\x0b\xc8\xbd\x65\xf0\xe2\xec\x81\xd9\x85\xbf\x09\x7d\x19\x86\x01\x84\xde\x92\x82\x98\x7a\xa0\x89\x83\x13\x86\xc6\x01\x87\xb7\xb0\x20\x72\x3f\x38\x01\xc4\xfc\xe0\xb9\xa1\x53\xc0\xc3\x2d\x14\x88\xac\x07\xc9\x30\x84\x71\x58\x13\x50\x7d\xcb\x0e\xe2\xf1\x83\xe8\x83\xdd\x0b\x71\x1c\xf6\x04\x74\xdf\xf2\x83\x04\x3e\xc0\x02\x7e\x0a\x86\x10\x0f\x2b\x02\xca\x6f\x59\x41\xdc\x1f\x3f\x02\x60\xfb\x43\x0c\x87\x1d\x01\xed\xb7\xd0\x1f\x48\x01\xc8\x81\x41\x82\x43\xf9\x80\xb9\x5b\x6c\x10\xed\x07\xe2\x17\xd2\x77\x50\xe0\x50\x3f\x60\xef\x96\x18\xc4\x58\x86\x82\xf2\x97\x29\x0e\x77\xda\x04\xe9\xa1\x92\xd0\xe9\x27\xbc\xd6\x88\x31\xc1\xa0\xb2\x5e\xc4\x94\x33\x54\xdd\x48\x9c\x93\xe9\x36\x24\xe7\xe8\x8c\x93\xeb\xf6\x8f\xf6\x91\x5a\x27\xdb\x6d\xe8\xbd\xb0\xad\x03\x8f\x0e\xfe\xeb\x20\xde\x03\x85\x0e\xd6\xeb\x90\xee\x03\x87\x0e\xde\xeb\x60\xdf\x03\x83\x0e\xce\xeb\xd0\xf7\x03\x9c\x78\x53\xd8\x29\x2d\x61\x08\xf9\x9a\x03\x48\x85\x83\x80\x0e\x41\xa2\x20\x98\x03\x61\x2f\x26\xa2\x90\x6a\x27\xb8\x72\x67\x68\xcb\x3b\x25\x3e\x04\xe4\xf1\x5f\xb7\x52\x7c\x70\x09\x63\xa6\xb7\x5a\x7c\x48\x09\xe3\xe8\xb7\x62\x7c\xd4\x4f\x3c\x79\xb1\xe5\x80\x4a\x2f\xbc\xbc\x78\x4b\x40\xa6\x17\x56\x5e\xdc\x29\xa0\x53\x6b\xf8\x61\x7e\x88\x87\xa3\xe1\x0f\x9c\xee\xfa\x18\xd2\x66\x07\x5e\x37\xd0\x08\xf9\x1d\x58\x14\x69\x3b\x3f\x0e\x26\x1a\xeb\x84\x74\xea\x0c\x8e\xed\x4c\x9f\x97\x80\x0d\x08\xf7\x42\x35\x88\x4d\x07\x94\x7a\xe1\x1a\xc4\x6b\x02\x52\xbd\x30\x0d\xe2\xd6\x00\xad\x5e\x84\x06\x09\x9c\x80\x38\x2f\xf4\xdd\xd8\x76\x40\xad\x17\xfe\x6e\xbc\x27\x20\xd7\x0b\x7b\x37\xee\x05\xd0\xeb\x45\xbc\x9b\x80\x0c\x08\x05\xa1\x08\xc4\x26\x00\x8a\x41\x38\x02\xf1\x8a\x80\x64\x10\x86\x40\xdc\x1c\xa0\x19\x44\x20\x90\xc0\x08\x88\x01\xa1\xf5\xc5\xd6\x03\xaa\x41\x16\x7e\xf0\x7d\x98\x7b\x11\x8e\xe3\x9e\x00\xde\x3b\x7d\x90\x83\x1f\x72\x1f\xf6\x5e\xe4\xcd\x38\x32\x00\xe6\x4e\x14\x64\xec\x87\x28\x18\x42\x3c\x9a\xb0\x3f\x7e\x87\x0e\x92\xfe\xc0\x08\xc0\x13\x0c\xcd\x1f\x9d\xdb\x3f\xbd\x83\x07\x89\xfb\x11\xf6\x87\x19\x8e\xd5\x03\x34\xef\x6c\x41\xee\x1f\xd0\x01\xe8\xfd\xe1\x7b\x63\x37\x00\xcf\x3b\x5f\x90\xff\x07\xf8\x17\x4a\x60\x98\xe0\x58\x3e\x40\xf1\xce\x12\xe4\xfa\x01\xf5\x85\x16\x18\xde\x3f\xb6\x07\x70\xbc\x43\xfc\x20\xfc\x22\xfa\x0e\x0a\x1c\x11\xdc\xcf\xbf\x63\x04\x69\x7e\xe0\x7f\x11\x7e\x07\x7f\x8f\x04\xee\xf7\xdf\x09\x82\x0c\x65\x50\x51\xd0\x94\xb3\x58\x52\x4a\x09\x8e\xad\xa3\xe0\xd4\x4a\x8c\xf1\x0a\x95\x75\x24\xa6\xac\xa1\x6a\x4b\xe2\xac\x4c\x37\xc3\x38\x4a\x67\xac\x5c\x37\x43\xda\x4a\x6a\xad\x6c\x37\x23\x76\xc5\xb6\x16\x3d\x5a\xf8\xaf\x84\x78\x17\x15\x5a\x58\xaf\x44\xba\x17\x1d\x5a\x78\xaf\x84\x7d\x17\x0d\x5a\x38\xaf\x44\xdf\x17\x71\xe2\x54\xff\xfc\x53\x23\x0d\x95\xab\x5a\x84\x94\x5f\x0c\x68\x11\x24\x14\x82\x59\x14\x76\x63\x22\x14\xa9\xb6\x8a\x2e\xb3\x8e\xb0\x38\x53\xe2\x89\x45\x2a\xff\x05\x94\xe2\x89\x8e\x2f\x33\x05\x6a\xf1\xc4\xc7\x97\xa3\x03\xc5\x78\xfe\x28\x94\xa9\x02\xd5\x78\xe2\x14\xca\x59\x81\x72\x3c\x31\xb3\x65\xae\x40\xbd\xaa\x05\x6f\x33\xe5\x5c\xbc\x65\x72\x71\x7a\x1b\xd5\x48\x3b\x1d\x79\x7d\x97\x0a\x49\x7f\x97\xc9\x62\xf6\x23\x55\x21\x52\x71\x36\xc9\x87\x16\xa1\x98\x96\xb4\xd9\x72\x78\xa0\x48\x57\x14\x43\x99\x2c\x50\xa5\x2b\x96\xa1\x9c\x16\x28\xd3\x15\x5d\x57\x66\x0b\xd4\xe9\x8a\xaf\x2b\xc7\x07\x4a\x74\xfd\x71\x28\xd3\x05\x6a\x74\xc5\x39\x94\xf3\x02\x15\xba\x62\xae\xcb\x7c\x81\x06\x5d\x09\xd7\xe5\x30\x40\x61\x9f\x28\xa2\x32\x49\xa0\xb2\x4f\x2c\x51\x39\x15\x50\xda\x27\x3a\xaf\xcc\x12\xa8\xed\x13\x9f\x57\x8e\x0d\x14\xf7\xf9\x63\x50\xa6\x09\x5c\x59\x26\xcc\x6c\x33\x85\x12\x2e\xc3\x86\xf2\xf8\x85\xff\x7b\xca\xd1\xed\xbe\x4a\xb0\x9c\x60\x4d\x35\x13\xe9\x65\xd8\x0d\x45\x27\x40\x38\x3a\xeb\xdc\x7b\xdf\x84\x07\x2e\x25\xdf\x61\x43\x81\x91\xd8\xc3\x26\xfe\xb8\x1d\x33\x22\x37\xa7\xe5\x8a\x44\xac\x3d\xfb\x49\x7d\x2e\x57\xb5\xb3\xb5\x6e\xab\x7a\xe3\xd3\x4f\xaf\x5b\x59\xca\xa1\x3a\x15\xf1\xd2\x63\xcf\xa5\x62\xbf\x8d\xb5\xd0\x11\x2a\xd7\x6d\xfc\xaa\x92\x6f\xae\xcc\x26\x0d\xbd\x4c\xb4\xbb\x7c\xb1\xcf\x96\x3d\x32\xfb\xda\x6f\x6f\x3f\x02\xe1\x14\x26\xd7\xee\x48\x3a\xb5\xf1\xdd\xdd\xb3\x10\xc8\xbd\x6a\x52\x6b\xfc\x8e\x28\xc9\x5c\x5e\x5e\xc3\x74\x5a\x9d\x56\x1f\xa2\x60\x90\x86\xa6\x08\xec\x88\x73\xe8\x3a\xd6\xba\xfa\xe1\x58\x76\xe6\xbe\xdd\x07\x07\xe7\x5a\x87\xfe\xa4\x16\xb7\xa6\xba\x2c\x4f\x8a\xb3\x78\x35\x31\x55\x77\x87\xef\xa0\x7a\x7c\xae\xa1\xa7\x6a\xd5\xba\xf4\x81\x5d\x72\x51\xb7\x35\x23\xbb\xd0\xfc\xe1\x30\xf6\x70\x15\x90\x61\xaf\xc5\x7f\xac\x7b\x96\xb6\x85\xfc\xda\xb9\x34\xbd\x59\x78\xbc\x1e\x67\x52\x81\x35\xa4\x23\xb9\x71\xa5\xa0\x15\xb5\xf5\xe0\xc1\x7a\x89\x01\xd2\xee\x36\x74\x55\xa3\x25\x50\xc8\x42\x5c\x41\x4e\x35\x94\xe3\xe9\xeb\x11\x48\x6a\xd1\x94\x14\xb6\x6a\xc7\x5a\x6a\x4a\x2f\xda\x71\xbc\xf7\x85\x55\x68\x3f\xf4\x94\xd4\xd5\x10\x9d\xac\x5c\x39\xb9\x2c\x73\x71\xcd\xdb\xf9\xf9\xcb\xd0\x9c\x7f\xc5\x71\x5d\xa1\xd0\xd2\x9b\x5d\xbb\xfa\xbe\x59\x43\x95\xf2\x08\xfd\xc4\xbd\xaa\x8c\xd0\x22\x24\xfe\xb8\x5a\xae\xb8\x18\x14\x26\xd6\xf0\x97\x44\xcd\xa0\xd6\x81\xbd\xeb\x21\x6d\x8f\xc0\x5a\xdb\x2f\x2c\xd4\x20\x60\x5e\x6a\xaa\xd0\x92\x2f\x46\x7e\x60\xcc\xa9\x57\x6f\xea\xc9\xdc\x8f\x2b\xc0\x7f\xfe\x8f\xe5\x62\x6e\xac\x4e\x2d\xde\x3e\xd3\xc3\xf4\xab\x43\xd3\xc3\x5f\x61\xaa\xdd\xa1\xc4\x53\x31\x61\xf9\x58\x65\xe0\x86\xff\x0e\x1d\x25\x65\xf4\x16\x77\x3b\xfe\xda\x2f\x5b\xb2\x51\xc9\x21\xae\x33\xc4\x8d\xcf\xb4\xec\x81\x90\x88\x7a\x35\x41\x60\xc7\x7e\x54\x04\x45\x1d\x8e\x89\xd1\x22\xcd\x72\xed\x57\x81\xf5\x6b\x1f\x2f\x71\x7d\x71\x06\xdb\xa1\xfa\x51\xb2\xc7\xd1\xd9\x69\xe3\xaf\x83\x5f\x68\xc4\x77\x2e\x3f\x7c\x6b\xab\x5a\xc9\xc6\x71\x57\xaf\x0a\x2c\xb9\x67\x5d\x5a\xe7\x9d\x6a\xf2\x5a\x1d\xb4\xcf\xda\x76\x4c\xb6\xa8\xab\x47\x3d\x47\x34\xbd\x5b\x27\x24\x4c\xd9\x23\x4a\x16\x9c\xb6\x85\x10\x1f\x2a\x1f\xaf\x02\x78\x03\xf8\x87\x4f\x37\x34\x5f\x23\x8e\x2b\x02\x96\xee\x9b\xfb\x56\x1c\xbb\x7a\xf5\x86\xaf\x9e\xb4\x0e\xed\xe6\x6c\x5e\xd4\xb5\x70\x72\x34\x8f\x6a\x79\x25\xb5\x89\xb7\xf8\x73\x34\x69\x08\xf6\x6b\x7d\xf3\xe4\x36\x00\xf0\xbc\xdb\x26\xd8\x34\x82\xa4\xb4\xe7\xf1\x74\xc6\x99\x06\xa0\x9c\x7b\xd1\x6c\x5c\x4d\x60\xc0\xf8\xd3\x55\xab\x9d\xe1\x14\xae\xc9\xf8\x1a\x1e\x61\x26\x79\x4e\xbb\xe8\xb3\xb9\xcb\xad\x09\x4b\xa3\xff\x36\xbe\x02\x81\xa1\xa9\xcb\x5e\x69\x9d\x8e\xdc\x83\x3d\xd2\xbd\xcf\xe4\xa0\xd4\xfa\x1f\x9f\xa7\xa0\x35\x1a\x98\x76\xb9\x17\xb3\xce\x45\xe2\x68\x08\xe9\x71\x17\x9d\x51\xae\x2e\x72\x66\x0a\xaa\x07\x97\x28\x1c\xe7\xcb\x80\xf4\x99\x4c\x02\xf3\xd9\x98\x10\x24\x47\xdb\x30\xc7\x84\x7b\x6e\xbb\xe5\x23\x67\x02\x91\xcb\x80\xb4\xc9\xde\x59\x93\x46\x7b\x56\x51\xfe\x3b\x61\x34\xc2\x30\xca\xc3\x06\x64\x90\xd3\x71\x1f\xb6\x69\x0c\x95\x58\x71\xe8\x54\xb6\x1b\xfc\x1d\x3c\x6c\xe6\xae\x53\x40\xc3\x9a\x1d\x8b\x2b\xc7\xb9\x2c\x02\x75\xd3\x28\x68\x71\x02\x9c\x73\x12\xf9\xc7\x39\xdb\xab\x4a\x03\x3e\xe8\xf6\xed\xac\xcb\x25\xc7\x44\x34\xbe\x75\x14\x06\xbf\x4a\x24\xd2\x7c\xf9\x3a\x3e\xfb\xa0\x4d\x6f\x3b\xba\xc7\x4c\x0c\xc9\x4c\xfc\x60\x62\xd3\x47\xb2\x6e\xdb\x88\x3c\xcf\x68\x03\x5a\xf4\x6f\x3b\xa9\x54\xd9\x3e\xce\xf5\xaa\xba\xc7\xee\x29\xef\xde\x64\x98\xc6\x3c\x62\x13\x81\xb2\x37\xab\xa8\xfb\x9e\x46\x6d\x04\x66\x45\x08\x17\x67\x27\x55\x66\xdb\x8d\x84\x81\xce\x2c\xcb\x30\xd1\x9f\xac\x8d\xae\x26\x2e\x11\xa5\x5f\x70\xda\x32\x09\x8a\xa3\xf7\x26\xdf\xeb\x06\x3c\x0d\x27\x6a\xc2\xb3\xe5\x1a\x96\xc5\x1e\x1b\xce\x75\x73\x01\x43\x13\xc2\x6b\xfb\x51\xfb\x5b\xfa\x98\x1e\x5e\x43\x1e\x96\xbf\x0f\x3a\x8e\x1e\x5a\xa2\xd7\x94\x3c\xd5\x22\x66\x6c\x39\xb9\xa6\x25\xe3\xae\x51\xa6\x26\x2e\xf6\x2f\x78\xbb\xea\x30\x89\xdf\xef\xdb\x2e\xda\xbc\x39\x2f\x4c\x84\x9c\x27\x85\x22\xd8\xd5\x62\xa0\x04\x5c\x31\xc7\x78\x67\xa8\xe4\xfb\x4a\xa4\x7f\xf5\x8d\x48\xb3\x0a\xd0\xf6\x71\x12\x0c\xbd\x0b\xf3\x38\xf9\xb7\xe1\x61\x4f\xf2\xff\xd1\xf5\xf3\x86\xce\xa4\x57\xa0\x81\xa8\x2f\xf5\xde\x61\xc0\x2f\x9b\xf9\x72\x74\x91\xa9\xea\xae\x71\x56\xde\xd2\xde\x25\x20\xd2\xe2\x9d\xfd\x4d\x70\x28\xfa\x6c\x5b\xc1\xd5\x76\xb2\xb1\x25\x60\xeb\xe8\x2c\x76\x94\xa1\xe9\x64\x86\xca\xde\x26\xce\x3f\xe7\x1c\xec\xee\x50\xbd\x00\x8a\xb2\x0d\x45\xe0\xc8\x71\x43\x2f\x3f\x21\x4f\x5d\xf5\x99\x21\x33\x1d\x8e\xc7\xbf\xdd\xaf\xf6\x43\xd9\x28\xfc\x9d\x86\xad\x0a\x6b\xda\x36\xf8\x47\x86\x7a\x96\x89\x41\xd2\x7c\x32\xc5\x99\xe7\x2f\xfd\xf2\xaf\xad\x7d\xc2\x96\x07\x84\x67\xf2\x1b\x04\x6d\x7e\x8b\xf6\x37\xc4\xd4\xab\x4a\x8b\x35\xa4\x18\x7a\x6d\xb4\xe6\x1a\x8d\x1e\xb7\x51\xef\x82\xe4\xb0\xca\x55\x2d\xd9\x5a\xab\x2e\x65\xfd\x9a\xe5\x74\xf4\x84\xcf\xf6\x41\xa9\x83\x7e\xc4\x88\xf5\x40\xfc\x47\x73\xc3\xf0\x27\xd0\x01\x9a\x51\x40\xd0\xef\x9a\x40\xf6\x35\x35\xe1\xf4\x25\x89\xd5\x46\xbe\x4a\x93\xe2\xb0\x61\xfe\x76\x86\xf7\x68\xc7\xc3\x86\x67\xcf\xcb\xf6\xa1\xac\x09\xc4\xa7\x65\x69\xd6\x85\x4c\xcf\xad\x9b\x07\x8b\x24\x4f\xd6\x9c\xcf\xdc\xd1\x10\x24\x28\x3f\xa6\xa9\xf4\x88\x01\x2e\x04\x7a\xd8\xd0\x45\xc6\x0a\x28\x45\x07\xe3\x22\x06\x78\x20\xc5\x8d\x79\x08\x11\x23\xf9\xd2\x41\xf5\x4a\x79\xde\xf9\xd1\x26\xc1\x05\x5f\x75\xe6\x29\x13\xf6\x3b\x19\xe3\x1e\xda\xfd\x89\xd5\x76\x94\x28\x7c\x77\x67\xe6\x29\xeb\xc9\xa5\x39\xb7\xf5\xab\x09\x4e\x34\xf6\x48\x3d\xf7\xd4\xea\x28\x2f\x61\x10\x57\x06\xf9\x24\x59\x5f\xff\x19\xb4\x64\x23\x69\xb0\x54\xd7\xa5\x4c\x83\xb1\x66\x99\x6d\xe9\xb9\x99\xb3\xb4\x05\x35\x34\xea\x9e\x54\x5f\x5f\xdb\x78\x5b\xfc\xb9\x74\x8c\x61\xf6\x6f\x64\xdf\x85\xcd\x56\x17\x8f\x36\x9b\xdf\x0a\x05\x2c\x85\x04\x87\xc0\x37\x0b\xfa\xaf\xdb\xf3\xf5\x7f\xd6\xf1\x48\x68\xf2\x4d\x59\x98\x49\x45\x36\x97\x94\xcf\x4a\x66\x30\x84\x02\xca\xf9\xa1\xb9\x49\x23\xcd\xf3\x56\x2e\x41\x8b\x1b\x94\x38\x7e\x2d\x35\xdb\x46\x62\x30\x15\xa5\xa2\x68\x05\x69\xcf\x87\x60\x2b\xb0\xbe\xf1\x7f\x1d\x20\x85\xb9\xa7\x76\x8f\x12\xb5\xa5\x8a\xaa\x38\x98\x25\x29\x67\xe3\xf1\x1b\xf7\xec\x19\x1b\x42\x29\x60\xad\x47\xbb\x1a\x85\x17\x65\xd6\xfe\x99\x1e\x17\x82\x96\x14\x4f\xe6\xee\x49\xea\x3d\xdd\x3e\xd3\x45\x73\xea\x92\x13\x89\x91\x4f\x08\x47\xd3\x0d\xec\x32\xd8\x4c\xc6\x29\xe7\x0e\xe7\xa2\xb8\x6a\xc6\x35\x8b\x34\x88\x18\x31\x93\x52\x88\x2d\x21\xfb\x9e\xfd\x6a\x29\x9a\x29\xa0\xb5\x6f\x30\xda\xea\x7a\xf4\x29\x30\x5f\x97\xeb\x7c\x31\xa0\xe4\x9b\xde\x05\x6a\x9f\xb1\x26\x13\xce\x97\x9f\x4e\x2b\x89\x38\x8e\x58\xb5\x11\x6b\xbb\x9b\xa7\x0e\xb9\xd4\xb0\x4d\xbd\x08\xab\x67\x39\x9b\x34\x18\xe4\xeb\xf4\x38\xf1\x5c\xb8\x6a\x25\x0b\xe1\x38\x3e\xfb\x45\x9b\x6a\xff\x0e\x3a\x11\x84\x6a\xda\xcd\xc7\x98\xaa\xd6\xea\xd5\x49\x19\x23\x30\xba\x70\xc4\x9d\xfb\xfc\xea\x4a\x36\x30\xca\x8c\xc4\x82\xce\x27\xba\xd8\xfd\x3b\x3c\xcd\xbe\x41\xf7\xa1\x3c\x43\x9a\xdb\xff\x08\x3d\x18\xd3\xdf\xd8\xb1\xf7\x5c\x6b\xd0\x36\xba\xd7\xa2\x9f\x5f\x43\x19\x19\x7f\x77\x0e\xb2\xda\x41\xba\xf8\x4b\xd0\x9b\x16\xfc\xab\xf0\x10\x3b\x99\x86\x48\xe7\xa4\x43\xae\x45\x40\x36\x8e\xee\x4c\x72\x77\xb1\xfc\xa0\xfa\x58\xf6\x6d\x12\x33\xff\x74\x4e\xcf\x53\x60\xe2\x8e\xfd\x49\xbf\x3b\x73\x3f\x06\x95\xfe\x96\xe5\xaa\xeb\x28\xad\xa0\x1b\xe8\xac\xe2\xfa\x4b\x50\x0b\xbd\xd1\xe4\x83\x7b\x40\xc3\xb9\x99\x1e\x69\x2a\x5e\x46\x96\x14\x96\xaf\x85\x1f\x8e\xec\xef\x2a\x9b\xeb\xfd\x5c\x1c\x7f\x79\x05\x51\xab\x73\x5d\x76\xa6\xa6\xc7\xce\x71\x20\xc1\xdb\xc7\x14\xa3\x9a\x6c\xf1\xdd\xae\x6d\xe8\xcc\x94\x96\x79\xb2\x99\x74\x68\xce\x05\x39\xb7\x24\x51\x66\xb1\x3c\xa7\xde\xbd\xd0\x18\x65\xc4\x29\x48\x35\xa7\x5f\xe6\x90\xfd\x6e\x62\x64\x5d\x2a\x69\xe3\x20\x38\x8b\x56\x94\x82\xfa\x9f\x4a\x94\x06\x7a\x04\x46\x19\x86\x3a\x35\x65\x49\xc6\xb4\xb8\xff\xfb\xfc\x9d\xba\xa9\xdf\xea\x2a\x57\x82\x1c\x9c\x55\x13\x9d\x3e\xb8\x3c\x9c\x95\x8a\x50\xf2\x8f\x2c\x8c\xf9\x23\xb3\x2e\x0d\xdc\x18\x54\x77\xeb\xd4\x92\xdf\xb2\xca\xd2\x16\xd9\x78\xe9\xf1\xd4\xe2\xea\xd1\xb0\xd4\x90\x6c\x02\x94\xe1\x7c\x84\xd8\xf3\x1d\x41\x63\xb4\x2a\x38\x2a\x3f\x4d\xf4\x50\x0e\x43\x70\xd6\x6c\xb3\x89\x96\x5a\x01\x32\x21\xb4\xb0\x75\xe4\x1d\x49\xff\x29\x4c\xa9\xe1\x95\x74\x51\x4d\x24\xff\x42\x7e\x5f\x1c\xcf\x00\x61\x2d\xc7\xdc\x09\xfb\x49\xe7\x9b\xca\x72\x98\xdd\xec\xcf\x75\x28\xeb\x27\x08\x30\x8d\x6b\x7f\xda\x8a\x6b\xd1\xde\x41\x04\x6b\xb0\xb9\x69\x44\x21\x92\x72\x98\xe9\x88\x0a\x45\x04\x21\x80\xe3\xfe\x60\x81\x34\xfb\x39\x91\x58\x9a\x15\xc2\x04\x65\x0c\x37\x84\x11\x56\x99\xee\x63\xf5\x21\x27\x64\x91\x3a\xd7\x8d\x29\x88\xae\xa4\x4e\xa4\x06\xa5\x86\xf9\xdf\x47\x78\x19\x0d\x9b\xba\xaa\x81\x83\x94\xac\x55\x55\x48\x06\xca\x48\x18\xc9\x08\x36\xe6\x9d\xb8\xb8\x9f\x32\xaa\xa1\xda\x7f\x68\x26\xca\x48\x09\x09\x25\x14\x69\x59\x85\x1c\x9c\x49\x53\x92\x43\xaa\x09\xee\x06\xc6\x76\x34\xf1\x4f\x11\x39\xe3\x06\xea\x0e\x9c\xf4\x22\x72\x71\xed\xe8\x68\x8c\xff\xba\xd2\x34\x35\x52\xf6\x36\x86\x2c\x0e\x4b\x3a\x69\x1a\xd3\x08\x5a\x84\xd6\x10\x8a\x2c\x8e\x09\xac\x28\x9d\x71\x2c\xbc\xb4\xb4\x94\x4c\x08\x0a\x2b\x8e\x09\xb4\xe8\xb4\x51\x14\x2e\x02\x73\x28\xa9\x05\xd3\x08\x42\x44\xc6\xe0\xff\x12\x61\x0d\x25\xb4\x51\xcc\x85\x53\xa0\x48\x89\x98\xfe\x85\x54\xfc\x2c\x22\x8b\x8a\x26\x11\xf3\x11\x2d\xe1\xfc\x2f\xd0\x84\x30\x41\x92\x76\xe1\x17\x75\xff\xdf\x50\x46\x22\x27\x1c\x05\x8c\xa0\xfe\xa9\x8a\x42\xe7\x53\x3d\xf2\x93\x01\x72\xb0\xc8\x55\x16\x85\xac\x8b\xb4\x08\x5f\x5d\x58\x0d\x8a\xb4\x08\xff\x7f\xf8\xff\x0b\xcc\xd4\x3f\xff\x40\x46\x88\xfd\x10\x25\x0b\x1e\x2c\x6a\x97\x51\xc7\xdc\x6a\x61\x63\x2e\xb3\x1d\xcb\x24\xeb\xa5\x5e\xcc\xe6\x21\x4a\xa1\x44\xd0\xcf\x66\xd1\x4a\x35\x11\x81\x3b\x61\x1d\x95\x2d\x03\x3a\x46\x7f\xfd\xff\xc2\x82\xba\x33\xad\x54\xdd\x27\xbc\x7a\xcc\x5d\x7f\xd1\x5d\x7b\xcd\xa7\xb2\xfa\x51\x45\x33\xb3\xab\xee\xdc\x47\x64\x2d\xf4\x55\xe3\xcc\x47\x66\x6d\xa9\x2b\x6f\xe1\xc9\x4e\x45\xd1\x7a\x97\x7a\x86\xb7\xd4\xbb\x9c\xed\x26\xe5\x24\x77\xb1\x47\x35\xcb\x53\xe6\x41\xe1\xff\x88\x9a\x30\x33\x8b\x2d\x27\xb9\xab\x3d\x4b\x59\x9e\x3a\x0f\x0a\xb6\xbb\xd6\x33\xbc\xb5\xde\xe5\xec\x37\xff\x5b\xac\x36\xb5\x95\x1e\x5f\x5d\x8c\x3d\xc9\x5d\xe8\x61\xcd\xd2\x94\x5c\x4f\x8a\x6f\x28\xc5\x9d\xe1\x2d\xf6\xb6\x64\xbb\xf9\x9f\xd5\x53\xe2\x61\xd6\x6a\x57\x7b\x86\xb7\xda\xdb\x92\xfd\xa6\xe6\x24\x77\xa5\xa7\x39\xcb\x53\xe3\x61\x36\x5a\x95\x92\xfd\xac\x86\x32\x77\xa5\xa4\x39\xcb\x4d\x23\x79\xd6\x66\x71\x63\xe3\x1b\xbc\x0b\x16\x26\x16\x0c\x0c\xec\xbf\x05\x00\x00\xff\xff\x18\x33\x7b\xe0\xe8\x7e\x01\x00"), }, "/static/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2": &vfsgen۰FileInfo{ name: "fontawesome-webfont.woff2", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), content: []byte("\x77\x4f\x46\x32\x00\x01\x00\x00\x00\x01\x2d\x68\x00\x0d\x00\x00\x00\x02\x86\x98\x00\x01\x2d\x0e\x00\x04\x01\xcb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x46\x46\x54\x4d\x1c\x1a\x20\x06\x60\x00\x85\x72\x11\x08\x0a\x89\x99\x28\x87\xb6\x58\x01\x36\x02\x24\x03\x95\x70\x0b\x96\x10\x00\x04\x20\x05\x89\x06\x07\xb4\x75\x5b\x52\x09\x72\x47\x61\xf7\x91\x84\x2a\xba\x0d\x81\x27\xed\x3d\xeb\x3a\xb5\x1a\x26\xd3\xcd\x3d\x72\xb7\x2a\x0a\x02\x19\xe5\x1a\xf1\xf6\x5d\x04\x74\x07\xdc\x45\xaa\x6e\xa3\xb2\xff\xff\xff\xff\xe4\xa4\x31\x46\xdb\x0e\xdc\x40\xe0\xd5\xf4\xfb\x7c\xad\x8a\x14\x08\x66\x93\x6d\x92\x60\x9b\x24\xd8\x91\xa1\x40\x64\x5b\x42\x51\x11\x24\x28\x5b\x55\x3c\x2b\x28\xad\xb8\x40\x50\xd0\x35\x1e\xe4\x60\x81\xb0\x0e\xda\x3e\xf6\x50\x10\x1a\x3b\xe1\x28\x91\xd1\x31\xb3\xfd\x6c\xdb\xfe\x68\xd4\xa8\xa2\xc2\x29\x9f\xdc\x59\x79\x94\xf2\x4a\x69\xe9\xeb\x17\xad\x85\xce\x7c\x25\xdb\x81\xb7\x5e\xac\x14\x47\x82\xa2\x33\xb8\x12\x6e\x9e\x95\xe8\xba\xda\x95\xdc\x0a\xc4\xcd\x90\x44\x8a\x9e\x70\x5c\x59\x72\x20\x94\x4c\xdf\x50\xf4\x0e\x8d\x1b\x83\x74\xa5\x29\xcb\x11\x98\xef\x13\xa7\x36\x52\xc2\x5e\x22\x53\x0b\x4c\x7e\xf1\x59\x52\xd7\x43\x58\x52\x15\x09\x8a\x34\x81\x8e\xe6\x46\xfa\x79\x5c\x5b\xbf\xe8\x37\x6e\xa1\xe2\xae\x7c\x1d\x73\xe0\xbb\x8c\x71\x1e\xa3\x4d\xbb\x8e\x25\x4b\xc9\xff\x17\x2e\xdb\xba\x0e\x2c\x0b\xfa\x84\xf7\xf8\x4c\xd0\x74\xff\x27\xf6\x10\x90\xc9\x4d\x1d\x2c\x11\x15\x63\xf7\x88\x2b\x62\xfa\xc4\xd7\x87\xe7\x4f\xfd\x73\xf9\x5e\xd8\x24\x85\x86\xd7\x7a\x2e\x07\xf5\x6d\xc5\xa0\x0c\xfc\x68\x26\x67\x62\xde\xf0\xe1\x76\xed\x87\xf3\x01\x0e\xc9\x27\x8a\x0f\x36\xa3\x3a\xb0\xbb\xc3\xf3\x73\xeb\x6d\xa3\x62\x8c\x31\xd8\xa8\x6d\x30\x22\xc7\x82\x1a\xb0\xbf\x2a\x56\x8c\xa8\x8d\x1e\xa3\x63\xa3\x24\x2c\x30\x41\x54\x50\x54\xb4\x31\x12\x03\xfb\xf4\xac\x3c\x0b\xed\x3b\xed\xf3\xd2\x60\x10\xe6\xb6\x27\xf1\x48\x0e\x3f\xf1\x73\xce\xa9\x3a\x91\x0f\x4e\x44\x9f\xa8\xfc\xa9\x10\x49\x11\xa4\x24\x8c\x04\x54\x14\x8b\x5b\x81\x82\x62\x34\x8a\x11\xcd\xfc\x7f\xea\xec\xef\x2c\xaf\xce\xbc\xd7\xef\xbd\xa3\x62\x6c\x36\x91\xba\x0b\x49\x4c\xe9\x69\x7d\xdb\x8c\x26\xe0\x34\xe3\x94\x6d\x2c\x27\xcb\x16\xcb\xf3\x23\xbd\xd7\xa5\xb3\x7f\x52\x77\x01\xa2\x62\x75\xc0\xb6\x2c\x4b\x96\x0b\xc6\x06\x9b\xe2\x76\x8b\x03\xdb\x08\x6d\x5f\x2d\xc0\xc0\xe6\x5c\x48\x8b\x9d\xfb\x8e\x48\x48\xfe\xaa\xf3\x93\xea\x07\xc6\xc2\x3f\x98\x96\xd3\x6d\xf3\x0b\x39\x50\x88\xad\xd8\x29\x39\xe7\x4a\xa8\x86\x24\xc6\xbd\x88\x9c\xe7\xb1\xf4\x38\xf8\xe8\xc7\xda\xce\xce\x7e\xb9\x3b\xc4\x72\x15\x8d\x6e\xbf\x3d\x24\x11\x1a\xb5\x1f\x94\x4e\x64\x64\x6e\x1b\x21\x27\xae\xa6\xf0\xe3\x3b\xb3\xf4\xac\x38\x99\xbc\x27\xd9\x4e\xa6\xed\x1e\x21\x7f\x2d\x18\x06\x4a\x19\xca\xb6\xd3\x2e\xe0\xd8\xfa\x91\xee\x58\xaf\x3d\x0c\x2c\x12\x04\x0e\x90\x9b\x1e\x22\x60\x3a\x18\xa2\xff\x1b\x0f\x09\x09\x20\x7b\x8d\xef\x9e\xdc\xe0\xbc\x12\xcb\x4b\x21\x27\x9f\x00\xa1\x2d\x46\x48\x94\x9c\x09\x89\x23\x24\x7e\x9b\x5a\x5f\x84\xb9\x9d\x10\x12\xb5\x03\x4e\x35\x56\x55\x38\x46\xc8\xaf\x1c\xa2\x8e\x25\x14\x50\xd4\xfb\xdd\xab\xda\xdb\xfb\x06\x08\x0c\x86\x43\x70\x08\x02\x24\x04\x51\x19\xa2\xb4\xbb\xda\x10\x9d\x72\xac\xec\xa2\xca\xbd\x9b\xee\xba\x6b\xbb\x6b\xda\x1b\xa7\x33\xd9\xb7\x13\xd1\x3a\x52\x11\x25\x1e\x10\xb6\x81\x32\x7b\xf4\x87\xde\xa9\xf5\x92\x1d\x68\x25\xbb\x29\x38\xc9\x11\xf6\x00\xf8\xf1\x01\x0f\x18\x0a\x49\x4c\x4b\x90\x36\x76\xf4\x23\xed\xfb\xb3\xee\xfe\x06\x2c\x3b\xd0\xa6\x36\x87\xa0\x4e\x9a\x32\xce\x68\x76\xb7\x0f\x0e\x08\xfe\xef\x7f\xcd\xfe\xeb\x0c\x4f\x4f\x91\xa7\x74\x23\x16\x85\x06\xe2\x78\x54\x89\xef\xaa\x42\x66\x02\x9d\x9e\x84\x71\x5e\x16\x23\x9c\xae\x9f\x96\x3f\x7b\xfe\x35\x62\x8a\x49\xe2\xe0\x25\x2d\x57\x5a\x90\xeb\xb9\x62\xa4\x41\xa3\x13\x0c\x5e\xe4\x31\xcd\xd9\x6e\x35\x19\xf9\xae\xe9\x8a\xd7\xa6\x4e\x51\x9d\x59\x27\xfa\xe6\xdd\xcd\x12\x96\x04\xfc\x91\x53\x04\xdc\x18\x1f\xa6\x21\x74\x22\x20\x06\x60\x62\x33\xe9\xf7\x25\x93\x07\xf4\xef\x33\x35\xbb\x02\x14\xd1\x66\x76\x3b\xab\x9d\xd5\xce\x6c\xce\xac\xee\x39\x9c\x3a\x6a\x67\x66\x3f\x67\x72\x9b\xf5\x70\xff\x78\x9f\x20\x80\x0f\x7c\x12\xfc\x20\x24\x08\x20\x65\x12\x94\x1c\x12\x94\x5a\x14\x28\xc5\x14\x24\x77\x28\x5a\x72\x53\x90\xe8\x76\x2b\x9b\x5a\xd9\x1c\xcf\xd6\x71\xf6\x4d\xa2\xec\x1e\x9b\xee\xcd\xea\xdd\x99\x6d\x3f\x26\x73\x5b\xf6\xe5\x74\x99\x53\x92\x53\x6a\x8e\xa7\x39\x9c\xaf\xe3\xf7\x3f\xad\x7c\xda\xea\x0d\xf1\xf0\xc5\x3e\x47\x0e\xcc\x06\x2c\x10\x62\x44\xd5\xb7\x5e\xa9\xf4\xaa\x5e\xa9\xc7\xdd\x1b\x3a\x6c\x8a\x33\x8e\xbd\x4e\x41\x9a\x60\xab\x35\x0b\x9c\x32\x36\xb3\x01\x4c\xf9\x70\x53\xf2\x09\x41\xdf\xa7\x2f\x55\xeb\x0a\xc2\xd6\x98\xb4\xbc\xb3\xb4\x27\x39\x5c\xb4\xa7\xd5\x86\x74\xb8\x85\x10\xaf\x21\xdf\xf6\xf6\xfa\xb7\x1a\xfd\x1b\x81\x6c\x00\x06\x85\x20\x50\x4d\x52\xb4\x9a\x90\x39\x6e\x80\x0a\xcd\x60\x15\x12\x13\x28\xca\x10\x40\xd2\x20\x48\x79\x29\x4d\xd2\x64\x4d\xca\x0d\x90\x1c\x35\xe9\xd4\xa4\x13\x48\x27\xd2\x91\x9a\x1c\xf2\x6d\x53\x3c\xfa\xe8\xdb\x71\x26\x6b\xbc\x29\x5c\xcf\x7b\x3b\xee\x31\xc5\xc3\x6d\xf9\x07\x9b\x38\xdb\x7b\xe1\x8b\xd5\x58\x84\x31\xdd\x2d\x33\xc7\x9a\x90\x91\x29\x82\x42\x28\x84\x91\x2c\xfb\x25\xf5\x93\x10\xb0\xb6\xb6\x8d\x04\xc4\x0b\x05\x05\xdd\xfd\xdb\x77\x9f\x6f\x7e\xbe\x98\x74\xed\xf0\x48\x57\x38\x6c\x90\xd4\x5a\x11\x09\x72\xa4\xe3\xbf\xff\x3d\x65\xb3\x1a\xec\xdf\x31\x2b\xe6\x07\x05\x2f\xc9\x8e\x31\x57\x3f\xd6\xb0\x72\xee\x12\x0e\x38\x39\x50\x4c\xc6\xd2\x01\x3e\x75\x6f\x39\x20\xc5\x18\x31\x20\x74\xc3\x98\xab\xc3\x75\x63\xa7\x9d\x91\xee\xc4\x40\xb3\xf9\x5d\x4b\x14\x10\x52\xef\x7f\x62\x4e\xff\xbb\x92\x76\xfb\x93\xb4\xd4\x1a\xaa\xa8\x28\xb8\x22\x8a\x83\x79\xeb\xbd\xbb\x7b\x1c\x0c\x63\xae\xff\x8f\xe6\xf3\x73\x63\x7a\xa6\x19\x26\xae\x70\x35\xa7\xe5\x04\xa1\x2c\x6a\xb3\x6e\x20\xa2\x6b\x4e\xc4\x21\x83\x2e\x83\x6e\x5e\xf7\xf8\x55\x75\x1f\x00\x40\x7c\xfc\x18\x3f\x76\xb5\x3e\xf7\x07\xb9\x1d\xb9\xdc\x1c\x91\x72\x18\x55\x61\xdc\x48\x52\x20\x0b\x1a\x8f\x10\xfa\xb9\xd7\xf8\xd5\x91\x00\x93\xf3\x49\x0d\x44\x89\xdf\xcb\x8b\x51\xbf\xbd\x7e\x70\xe9\x0a\x80\xdc\x8d\x3b\x3b\xb8\x6e\xf9\xf9\x8d\x4c\x18\x17\x24\xa1\x74\xf9\x09\x3a\x09\x68\x46\x43\x59\xa1\xed\xde\x54\x4f\xa0\x46\x4e\x1d\x4e\x7e\x7d\x17\xf1\x31\x22\x60\xb3\xa8\xfc\x9f\xd8\x61\xcf\x07\xcb\x28\xcd\x3f\x48\x20\x11\x97\x96\x87\x1f\xc4\x5c\x96\xcd\xe5\x75\xca\x30\x13\x4c\xd4\xb5\xf5\xf1\x27\xb5\xed\xba\xbd\xbe\xcd\x94\x50\x62\x6e\x6d\x4f\xbf\x98\xeb\xb6\xdd\xfd\x8d\xbf\x02\x18\x4a\x6c\x8b\x3f\x02\x01\x08\x9e\xe5\x73\xab\xe7\x05\x88\x30\x2c\x0e\x38\x8c\x78\xc9\x42\xf2\xfa\xf6\xbe\x42\x19\xc7\xe5\x91\x46\x89\x10\x14\x9f\x5f\xdf\x1b\x52\x69\x5a\x1d\xf8\xff\xb7\xd4\x7e\x65\x23\x15\x6a\xb0\x11\xb1\x77\xfd\x68\x4f\x63\x2a\x26\x46\x36\x0c\xac\x59\x71\xc1\x92\x05\x7b\x89\x7d\x3f\xc9\xf3\x3e\xf7\x75\x1e\xfb\xb6\x2e\xf3\x34\x0e\xce\x68\x25\x05\x67\x94\x60\x04\xa7\x26\xd7\xe7\x20\xb8\xcb\x12\x29\xa9\xac\x52\x35\x18\xe5\x48\x8c\x7d\xb1\xa7\xff\xcb\xa4\xb0\x6b\xdc\xa9\xdb\x1c\x90\x27\x4a\x99\xde\x4f\xbf\x00\x49\x88\xdb\x13\xb6\x9d\x5f\xef\xb3\x7f\x05\x91\x71\x4f\x62\x27\xd6\x48\xc7\x9f\x00\x42\x59\x45\x4d\xa3\x03\x1c\x36\xc8\x76\x84\x81\x35\xaa\x10\x4e\x4a\x0d\xe5\x15\x01\x4f\x88\x4e\x07\x1a\x46\x0b\x4e\x78\x28\x31\x92\x3a\x01\x5c\xba\xdf\xab\x43\xe0\x6b\x8e\x63\xa0\x62\x38\x05\x51\xf4\x09\x13\x64\xe1\x18\x5b\x4c\x14\x28\x65\x6c\x1c\x2b\x32\x75\x2d\xee\xd0\x61\xd6\x98\x64\xa2\x8e\x35\x3b\xa2\x4e\x24\xd4\xf6\x22\xa2\x48\xaa\x8f\x10\xab\x53\x46\xba\x6f\xeb\x32\x69\xa8\x22\x8a\xd9\x5c\xb3\x68\x04\x37\x49\x8c\xf6\xa0\x3c\x53\x43\x4f\x02\xad\x19\xb8\x96\xc8\x90\x48\xa0\x1e\xe2\x45\x77\x21\x01\x2e\x1f\xd7\xe9\xfd\x21\x42\x53\x12\x43\xaa\x67\x1e\xc4\x9d\x89\x63\xe3\x0e\xb9\xe4\x73\x2a\xd5\xa7\x73\x89\x28\x35\x6d\x94\x3d\x71\xc6\xca\x8a\x65\xa2\xfb\xf1\x59\x91\x0b\x24\xeb\x5c\x3e\x10\x66\x4e\x38\x80\x71\x97\x8c\x78\xea\x23\x76\x0a\xa5\x36\x75\x6d\xef\x09\xe0\x19\x9d\xb0\x60\xdb\x4e\x4d\x2d\x4a\x00\x5c\xf4\x10\x46\xb7\xc7\x72\xe9\x44\x02\x80\x1e\xb5\x5a\xd3\x30\x93\x07\x23\x27\xea\xa5\x88\x6e\xec\x11\xd2\x47\x6a\x4c\x82\xda\x86\x58\x14\x1b\xca\x8c\xa2\x41\xaa\x9d\xf1\x67\x59\x73\x99\x2a\xb2\x59\xca\xdc\x07\xc7\x5e\xd9\xb5\x98\x3b\x22\xd8\x1d\x24\x68\x62\x7f\x3d\xb9\x16\x19\xcf\x9b\x13\x98\x30\xde\x76\x48\x3c\x97\x56\x76\x7f\x81\x63\x9b\x5f\x00\x5c\x59\x8a\x03\xec\xa3\xe8\x77\x3b\x64\x42\x16\x02\x83\x8b\x03\x4e\x83\x84\x33\x1b\x21\x24\xce\xe7\xe7\xb4\xe7\xe2\xde\x49\x7c\x50\x98\x20\x7e\x13\x26\x13\xe4\x03\x64\xc5\x2e\xc8\x03\x1b\xd4\xb0\xe9\x02\x2d\x61\x07\xf3\xfa\x61\x19\x09\x2b\x2b\xc2\x13\x92\x39\xba\x2e\x6d\x52\xf8\xe9\x34\xe3\x63\x79\xaf\x9e\xb9\x23\x8b\x55\xd5\xc2\x46\x57\xee\x08\x75\xbd\x0d\xdc\x09\x17\x69\x2f\xf0\x9c\xaf\x94\x66\x7e\x80\x34\xdd\xf0\x6c\x83\xeb\x0e\x58\x53\xf4\x39\xc3\x84\x1b\xf7\x31\x45\x9d\xf0\xbd\x33\x40\x90\xfd\xda\x6b\x13\x88\xdc\x15\x40\x17\x27\x23\xa3\xbc\xb6\x63\xac\xbd\xd9\x6e\xea\xa9\x20\xba\xf1\x15\xef\x53\x5f\x3b\xac\x25\xfb\xee\x49\x8a\xd0\xc1\x2b\xbb\xf8\x2e\xf3\x4c\x1a\xd8\x43\x02\x78\xb1\xeb\xee\x1e\x1e\xbe\xfa\xea\x86\xb1\x77\x09\xda\xcd\x56\xdb\x82\x80\x81\xba\xa8\xe1\xa4\xc0\xc3\xf9\x45\x78\x66\x7e\x48\x60\xbd\xe9\x30\x1f\xbc\x21\x64\x94\xe8\x40\x51\x7b\x4f\x68\x31\x89\x17\x17\xb1\x48\xc1\xb6\x46\xc3\xab\xd5\x7a\x73\x1a\x8d\x37\xf3\xdd\x89\xb6\xb3\xc6\x9c\x74\x0f\x72\x76\xcc\xe8\xa9\xd2\x6b\x9d\xbb\x86\x68\x65\x53\x33\xb7\xdb\x87\x76\x99\x39\x84\x71\x7c\xab\x4f\x82\xef\x97\x4b\x29\x95\x55\x5c\xf2\x96\x41\xd2\x25\xa3\xb9\xbb\x02\xc4\x6f\x1e\x7b\x6c\x3c\x86\xdb\x4b\xb8\xff\xba\x9d\xcd\x8e\xa2\xa4\x8e\x69\xb3\x8f\xf1\x48\xeb\x47\x80\x49\x85\x7a\x9d\x3d\x36\x9a\x57\x57\x6f\x30\xeb\xd9\x0b\x7c\x15\xde\x25\x41\xf7\x1a\x6a\x64\x44\x29\x21\x0d\x80\xa9\x70\x77\xae\xc8\xee\x5f\x82\xb3\xeb\x3b\xb8\xf1\xa6\xdb\x63\x97\x44\x23\xe9\xff\xcb\x81\x4d\x90\xc0\xde\x4e\x7a\x9c\xf2\x05\xb7\x04\x70\xb0\x5e\x8f\x43\x44\x78\xde\xc2\x78\x6a\x29\x84\x35\x4f\xc8\x39\xfb\x0d\xa1\x60\xd1\xd2\x45\x44\x58\xee\x78\xf1\x8d\x20\xdd\x92\x47\x55\xc8\xc0\xed\xcb\xaf\x0e\xc4\x99\xaa\x04\xa9\xef\xd6\xda\x89\x9c\x2e\x25\x0d\xb7\xbf\xb6\xce\x88\xb1\x7e\x0c\xe3\xf1\xfa\x3d\xff\x08\x1a\x16\x43\x13\x6f\xa6\x29\x0d\x46\x84\x37\xf3\xca\xe7\x24\x5a\xa4\xfd\x28\xb7\x67\xc1\xeb\x6f\x42\xad\xa7\x0d\xdb\xc6\x9c\xc0\x40\xde\xe5\x26\xf2\xc3\xda\x65\xee\x7b\x06\xea\xe2\xe5\x8e\xa3\xa0\x08\x6c\xa0\xb0\x66\x8a\x5f\xc6\x52\x78\x99\x4e\x5b\xa7\x5d\x0c\xae\x9b\x07\x38\x60\x2d\x33\x99\x73\xb4\xa6\xc1\x92\x7b\x7f\x50\x6a\x01\xde\x19\xb8\x57\x75\x63\x39\xef\x85\xb8\xae\xa9\x84\x1b\x5b\x3e\x1d\xea\x2d\x9f\x2e\x44\xa2\xdc\x8e\x59\xfa\x1f\xf7\x9b\x15\x0f\x80\x1e\x64\x87\x0c\xcf\xc2\xd8\x07\xa2\xb2\x2b\x18\x5e\x7b\x93\xae\xb9\x43\xee\xf7\x89\xb1\x6d\xe0\xc4\xd9\xf0\x2c\xa6\xb1\x40\x4e\x3c\xb2\x90\x1d\xda\xd9\xd0\xf8\xf2\x89\xaf\x1f\x7f\x0e\x2e\x8d\x94\x56\xf1\xe6\x4d\xf0\xda\x11\x53\xec\x2b\xd3\x5c\x44\x9e\x2b\xa2\xda\x52\xa2\x7c\xd1\x36\xb5\x0b\xe2\x27\x71\x5c\x54\xe0\xdd\x02\xa6\x95\xf3\x1c\x1e\x39\x87\x44\x84\x06\x58\x3c\x7f\x24\xed\x70\x89\x80\xde\x07\x22\xbb\xe9\x85\xa6\x92\xfc\x24\x9b\xd2\xb7\x0b\xde\x2c\xf9\x70\x1f\xbb\x73\xf9\xa5\x54\xd3\xce\x1a\xdd\xfe\xaf\x62\xbb\xff\xd4\x4e\x6b\x49\x91\x1e\x5f\xe6\xa1\x60\xd5\xe6\x0a\x46\xe8\x88\x1f\xea\x57\x93\x9f\x56\xff\x94\x25\xd9\xd1\x77\x08\xad\x7e\xa9\xa4\xc4\x44\xd4\x90\xd9\xc2\xcb\xdd\x2a\xf3\xb3\x78\x69\xf2\x1e\xb8\x79\x5b\x72\x5a\xaa\x87\x00\x99\x5b\x53\x25\xb4\x47\x9b\xdc\x18\x73\x60\x46\x3c\xe3\x85\xa3\x85\xb3\xac\x20\xa2\xc1\x56\x8b\x2b\xfe\xf3\x21\x2b\xad\x96\xf7\xf5\x8a\xb8\xd8\x8d\x8b\x39\x79\x9f\x6b\xc5\xc1\x66\x62\x91\x38\x32\xde\x06\x73\xde\x7d\x6c\x3b\x5b\x29\x65\x24\xc4\xf8\x89\x54\x9d\x86\x96\x6b\xad\x83\x92\xe0\x29\x9a\x76\x8f\xb6\xa9\x39\xac\x01\x84\xe3\x1b\xa7\x7b\xd3\x75\x13\xf2\x75\x8f\x74\x8f\xc8\xde\xb3\x40\x45\xe3\xf4\x3e\x7c\x43\xf6\xda\x3c\x5c\x34\x25\x08\x97\x52\x76\xe1\x0c\xa5\xb6\xe9\xe5\xc4\xe8\xaa\xda\xf4\x40\xd7\xba\x43\xcc\x38\x5c\x91\xf8\x7e\x29\x14\x23\x6b\x7c\xbe\xb9\x2e\x61\xeb\x6f\xaa\xba\xda\x03\xba\x30\x30\x47\x94\x71\x30\x1d\x14\x25\xf1\xfc\xf0\x13\xa1\x99\x68\x70\x8b\xa9\xba\x0d\x4c\xff\x9c\xde\x22\x8c\x2b\x3e\x8e\xec\xe6\xb5\x25\xaa\x0b\x5e\x4d\xcb\x8a\x98\x4e\x9a\x73\xd3\xc8\x06\x71\x8e\xb4\x3d\x95\x12\xb0\x0f\xbe\xee\xe5\xe4\xa6\x86\xb0\x4b\x11\x34\x72\xe7\x2d\x2a\xef\xe7\x25\xe8\xda\x68\x23\xd7\x25\x3b\x70\x50\xe9\xa6\x94\x68\xd6\x43\x3d\xf7\xce\xfa\xda\xda\x0d\x97\x1a\xe5\x26\x14\x29\xa9\x62\x61\x84\xc6\x4b\x4c\xf8\x40\xbf\xf9\x9e\xe4\x74\xba\x21\xa2\x7e\x32\xed\x53\x5d\x72\x59\x6c\xba\x5a\x36\xd0\x33\xd1\x9e\x4a\xde\x6f\xb4\x98\x4f\xa3\x56\xf5\x3b\xb9\x68\x26\x67\x4f\x35\x92\x52\x54\x88\x2f\x7d\xf9\xc1\xd2\xc6\x7b\xae\xa5\xf2\x17\x17\x41\x5a\xd2\x26\x87\x19\x53\xf3\xe2\xd9\x74\xd8\xca\xf9\x9c\xcf\x03\x0b\xcd\xaf\x01\xe9\xa2\x50\xea\xeb\x43\xa1\xa4\x14\xa2\x30\x13\x08\xb4\xb6\x44\x2c\xfb\x70\x62\x70\xd0\xb7\xd4\x7a\x29\xa7\x20\x5d\x80\x49\xf7\x3e\x1a\x00\x0e\x51\x5c\x42\x6c\xc1\x22\xba\x97\x5e\x33\x52\x3e\x72\xfd\x2a\xfb\xbb\x04\x43\x3e\xc0\x1e\x1e\x83\xa7\xe1\x17\x78\x50\x55\xba\x7a\x1e\xad\x7d\x59\x11\x3d\x02\x0f\xf5\xcc\x95\x16\xbc\x7d\xf5\xd0\xb6\xc7\x10\x9a\x19\x0a\xe7\x0d\x1c\x36\x2d\x60\x2f\x22\x48\x0b\x0a\x6f\x85\x26\x92\x44\x97\x49\x30\xff\x45\x32\x58\x61\x89\x95\x2d\x1f\xa9\x7b\x0e\x35\xc0\x81\x99\x3c\x0d\x2c\x7d\x94\xd1\x13\x60\x60\x36\xfa\xc7\xed\x18\x90\x6a\x69\xa2\xe9\xd8\x69\x6d\x3c\x55\x75\x6a\x59\xa9\x5a\xfa\x6a\x0e\x42\x5c\x40\x8c\x67\xcb\x33\x45\x6a\x66\x70\x96\xf8\x98\x9f\x3a\xba\xda\xed\xea\x10\x57\xdb\xc7\xae\x9f\xba\xd9\xdf\xb3\x8e\x9c\x94\xce\x70\xa5\xc4\xb3\x33\x61\x6f\xaf\xfb\x11\x81\x31\x88\x64\x61\x8b\xf8\x20\x9c\x03\xb7\xdd\xab\xa5\xfd\x88\x99\x4a\x82\xd7\xb2\x3f\x20\x6a\xce\x71\x37\xae\xbe\x4d\xc3\xe6\xce\x66\x66\x99\x59\xb5\x66\xcb\x1c\xd4\x73\x02\x1e\xb0\x1b\x24\x9b\x9c\x09\x84\x95\x48\xfd\x91\x14\xe6\xac\x6c\xa5\x96\xf5\xb9\xbf\xc0\x88\x97\x28\x25\x2e\x9b\x72\x06\xe3\xd2\x77\x3f\x03\xf2\xbe\x6d\x3d\x7e\x0b\x82\x79\xb2\x63\x59\x91\x62\x67\x29\x3c\xcb\x57\x84\x20\x2f\x56\x78\x16\xda\x6b\xa9\xb4\x92\x24\xe7\xf3\x8f\x0c\x42\xf0\x72\x7e\xf1\x86\x01\xa7\xd3\xf0\x39\x13\xde\x36\x8d\x30\xd1\x26\xfe\x99\x5f\x76\x4d\x00\x59\xc2\x25\x84\x93\xd2\x9d\x7b\xe6\x45\x7f\x89\x36\x3c\xc3\xe9\x95\xc7\xc2\xed\xdb\x25\x8b\x25\xab\x34\xad\x8b\x8e\xdf\xa0\x4f\xde\x40\xef\xf3\x4e\xe1\xf9\x08\xa1\x82\xaa\x22\x5a\xb7\x18\xdf\x4f\x44\x7b\x75\x33\x53\x0f\x8c\xc7\x57\x8b\x4d\xb0\x95\x52\xa7\xed\x33\x73\x3c\xc3\xf5\x19\xa7\x91\xd8\xb3\x0d\xa3\x80\xa6\xf1\xb0\x5c\x49\x0e\x30\x8d\xab\x2e\xa0\xc5\x2d\x32\xdd\xad\xec\xcf\xe3\x84\xad\x3b\xaf\x09\xec\x83\x30\xd5\x0e\xb6\x7d\x4e\xab\x2f\x62\xf5\xf6\x1a\x8e\x4e\x7b\x84\x49\x99\xb3\x7c\x62\x5f\x72\xc4\x65\xf8\x9d\x5f\x70\x53\x69\x83\xe3\xca\x14\x0f\x3e\x12\x27\xdc\x77\xac\x35\xfc\xdb\xfa\x52\x46\x2c\xd1\x87\x88\x25\x1e\x53\x59\x96\x84\xbb\xc6\x57\x68\xa3\x36\x4c\x5f\x69\xec\x83\xa3\x3d\x9a\x9b\xbe\x69\x31\xf1\x33\xfe\x59\x49\x37\x4e\xb8\x43\x70\x8d\x49\xc9\xf0\xc4\x94\xbe\xc3\x12\x28\x0f\xa8\x72\xaf\xbe\xbd\x30\xab\xdd\x7b\x6a\x89\x19\xf7\xba\x85\x72\x8b\x4b\xbc\x9e\x99\xe5\xd0\xa2\x6f\x29\x6c\xd9\xc4\xf4\x87\x33\x6e\x61\xbf\x54\x31\x7f\x5c\xa7\xc3\x49\x19\x45\x28\xe9\x6d\xbd\xf7\xb2\xbd\xdf\x83\x9b\x93\xc2\x44\xf4\x6c\xfa\xac\x7f\x65\xb3\xb3\xc7\xe6\x24\xc3\x85\xdf\x77\x58\x9e\x88\xcc\x55\xac\xfc\x28\x40\x95\x84\xae\xf7\x4d\xf5\x61\x22\x6e\xac\x0e\x2c\xe4\x2a\x76\x47\xb3\x1d\x96\x1c\x89\xcc\xa8\x13\x78\xb9\x8a\xae\x3e\x95\x47\xd9\x0c\x53\x82\x11\x83\x80\xee\xbd\x67\xc0\xcc\x89\x22\x94\x51\xcb\x76\xa4\x62\x14\x30\x2a\x7a\xdb\xc8\x50\x45\xf4\x79\xc1\xc9\x89\x8c\x3f\x37\xaf\x24\x13\x0b\xc1\x8e\xd8\xf0\x25\x9e\x1d\x89\x47\x87\xd2\xd1\xe4\x70\xc9\x64\x59\xc8\x26\x66\xe2\x07\x21\xed\xfb\xc7\x61\x36\x94\x8e\x7c\xa8\x08\x29\xbf\x0e\x3b\x75\x37\x23\xc2\x33\xc9\x34\x90\x6d\x4a\xc4\xb3\xdb\xf8\x0a\x6f\xf7\xf6\x89\x4f\xf8\x70\xad\xc8\x81\xa2\x76\x38\x6a\xa0\xea\x99\xfc\x78\x28\x4b\xcb\x2f\x5a\xdc\x64\xbb\x03\x8a\x8f\x78\xc9\xc5\x83\xfd\x6d\x37\x56\xd1\x5f\x5c\xa7\x66\xd7\x4c\xe5\x37\x0c\x70\x9b\x58\xf3\x7a\x16\x1e\xec\x85\x48\x37\xbe\x2d\xab\x0e\x96\xb5\x2c\x28\x31\x4b\x48\x62\xad\x65\x90\xa8\x2c\x72\x2d\x19\x1c\xa3\xa0\x11\x70\xa1\x4c\xcb\xef\xc6\xed\xa0\x33\x3d\xe6\x54\x98\x02\xc6\x32\xa9\x74\x91\x32\xd9\xbc\x58\x96\x6b\x3a\xa9\xb4\xb5\xff\x08\x5a\x80\x35\xc0\xcf\x73\x05\x89\x0e\x70\x0e\x88\xd2\x53\x73\x54\xab\xb8\x05\x1a\xd5\xeb\x3a\x2e\x5d\xb5\xb7\x44\x22\x94\x40\xb0\xf5\x2d\xb6\x45\xb7\xcc\x91\x06\x21\x10\x94\x13\x41\x8d\xf0\x91\x32\xba\xc9\xb6\x2d\xf0\x46\x19\x7d\xb1\xcb\x92\x80\x32\x42\xc7\x83\x92\x8d\x51\x1a\x99\xd5\x17\xe0\x05\x29\x74\xc5\xc3\xa7\x7c\xda\x23\x34\x84\x7c\xdc\x5c\xf7\xe3\xa8\x80\xf0\xc8\x60\xb7\x66\x63\x10\x2c\xb6\x9f\x23\xd4\x07\x67\x89\xe9\x31\x3a\xd9\x2d\xd6\x16\xab\xa1\xb9\x74\x79\x17\x20\xdb\x5d\xfb\x87\x98\xe0\xe4\x32\xaf\x5a\x7e\x02\xb1\x84\x00\x2e\x29\xe3\xe9\xae\xf3\xf4\xb3\xd7\x02\xc7\x8c\xe0\xd6\x1e\xb5\xa1\xdc\x25\x52\xa5\x4b\x8d\x98\xab\xbf\x28\x79\x90\x02\x60\x91\x38\x96\xb6\x43\x1a\xd7\xc7\xd6\x8d\xfa\xb7\xcb\xf7\x7a\x93\xba\x1d\x8a\x4b\x2d\x4e\x8e\x0c\x84\xf3\x01\x0e\xf5\x60\x5e\x2b\xa6\xf5\x8b\x9e\x6e\x08\xa2\xa8\x8b\x33\xb9\xdb\xcf\xb4\x18\xfe\x02\xe5\xf4\x80\x9d\x16\x95\x54\x81\xf2\x33\x82\x74\x51\xe1\xd8\xa3\xa9\x06\x08\x34\x3c\x3e\x3a\x4a\x30\xc3\x88\x25\xe5\xdd\x91\x5a\x61\x62\x60\xe8\xbd\x03\xea\x76\xcd\xac\xfc\x86\x61\xf6\x54\x2f\x5a\x01\x02\xfa\x14\x9c\x61\xde\x9d\xc7\xd0\x93\x49\x69\x09\x9b\x57\x31\x90\x16\xfc\xf1\xfd\x83\x5f\xa9\x90\x10\x3e\x29\xc3\xfa\x97\xbe\x48\x22\x94\x8a\xf9\xe3\xe9\x70\x92\xeb\x0b\x83\x7c\x37\x6d\x14\x46\xb5\x5e\x5a\xcf\xcd\x7e\x66\x8b\x11\x17\x30\x4a\xf1\xea\x5e\x00\xc9\x49\x91\x17\xdc\x33\x56\xb9\x21\xe9\x18\xa5\xdc\x7b\xd3\x3c\x65\xcc\x2f\x3d\xce\x70\x60\xda\xd7\x0c\xde\x71\xad\x9e\x00\x38\x5e\xf6\xd4\xd9\xd3\xc1\x4b\x38\xcc\xeb\x4f\xcd\x39\xf6\x77\x30\xd3\xea\x5a\x90\xb4\x7c\x1e\x8a\xdc\x04\x76\x3f\x91\x6e\xc3\x14\x09\xe0\x0c\x33\x97\x81\x66\x81\x21\xfd\xcb\xdf\xb7\xd1\x7e\x95\xfc\x54\x8a\x20\x1f\xa7\xe4\x1d\xfb\xc1\xca\xf2\x20\x4a\xd3\x9b\xa5\xfb\x84\x07\x11\x1c\xdf\x35\xd7\x0b\xc1\x70\xa6\x8f\x14\xba\x56\x09\xbc\xdf\x33\x87\xcb\xab\xb8\xc5\xd7\xf3\x0f\x2e\x3d\xc6\xf1\xcc\xee\x81\x2d\x7d\xa7\xdc\x5b\xce\x67\xe5\x52\xe1\x35\xab\xf3\x9d\xf3\x6e\xec\xa3\x42\x38\xe1\x91\xf7\x83\x99\x33\x2e\xbb\x08\xd2\x38\x14\x09\x59\x67\xa1\x23\x30\xdf\x26\xb8\xbd\xaf\x53\x84\x2f\x2e\x66\x67\x5c\x0a\x1a\x45\xe2\x66\xe7\x7d\x0e\x90\xc8\x2c\x6b\x87\xa2\x94\xe9\x93\x67\xfc\x06\x14\xfb\x24\x03\xb9\x3f\x58\x59\x93\x07\x2a\x8f\xfa\x94\xa9\xba\x11\xbc\x31\xaf\x90\x70\xad\x97\x45\x28\xbf\xd7\xeb\xf2\x52\x53\x92\xa4\x51\xba\x98\x74\x9e\xee\x03\x36\x2c\xa0\x51\xe3\x6a\x5c\x08\xf0\xe3\x3c\x08\x2f\x5d\x4e\xae\x73\xfb\xcd\x1d\xa5\x3b\xcd\x27\x0c\x18\x48\x58\x5d\x8e\x45\x98\x32\x1e\x39\x90\x87\x64\xa6\x6b\x59\xfd\x0d\xd9\x6a\x90\x8e\xc2\x52\x36\xd1\xd4\xed\xf7\x03\x51\x12\x21\x98\xca\x00\xea\xee\xf7\x20\x56\x86\xbb\x99\x0a\x25\x22\x08\x15\x5e\xd0\x60\x97\x4e\x33\x4f\xf2\x8c\xa2\x0f\xfa\x86\x83\xac\x5b\xf1\x1d\x76\x3a\xe0\xca\x84\x3a\xd9\xe8\x5e\xda\x9c\x72\xd7\xbf\xe7\x11\x40\xea\xd2\xec\x0a\x8d\x46\xc5\x5f\xae\xd7\x11\xe5\x01\x08\x4e\x63\xcc\x42\xd2\x17\xf1\xfd\xc3\x38\x70\xa3\x5c\x69\xaf\xa2\xb5\xd7\x37\xcf\xee\x8b\x67\xe5\xad\x03\x2a\xee\x8f\xd1\xcd\xfd\x2c\x83\x43\xab\x9d\x1a\xc2\x0e\xe1\x5b\x87\x36\xb4\x54\x92\x3f\xba\xba\xb5\x16\x85\x25\xf2\x7a\xfb\xc5\x40\x01\x06\x18\x6a\x41\x70\x42\x4e\x35\xf0\x9e\x22\x34\x54\x9e\xa5\xe0\xf4\x22\x96\x7d\x30\x75\x4a\xf4\x87\x8f\x9e\x96\xc8\x9c\x7e\x33\xf6\x1e\xd9\x0e\xd1\x7b\x7d\x02\x75\x57\xf6\x8c\xe0\xee\x4d\x93\x1e\x6a\xfa\x39\xc8\x2d\x82\x5d\x13\xf5\xab\x9d\x11\x99\x27\x6c\x53\xb2\x20\x2f\xf0\x52\x3e\x3c\xa5\x2b\xe7\x4f\x9f\x95\xdb\xd8\x1f\x65\x42\x23\x95\x42\x63\xd2\x1a\xd9\xc0\x02\xe8\x6a\x4c\x5c\x11\x12\xa3\xc4\x2d\xbe\x5a\x68\x95\x5b\xd7\xfa\x49\x3c\x8d\xaa\xfc\x0f\xf1\x84\x18\x71\xa8\x76\xde\x7e\x96\x6b\x5d\x9b\x47\xc3\xce\xd5\x54\x44\xbf\x3f\x53\xa9\xcb\xd9\xd6\x2f\x1a\xc6\x2d\xd4\xd7\x25\xdd\x92\x89\x94\xd9\xe8\x37\x0c\x88\xfe\x77\xa6\x69\x7c\x43\x16\xcb\x49\xa1\xc4\x71\xf1\x77\x63\xa8\x80\x57\x01\x9b\x14\x78\x0c\x9a\xb1\x20\xcf\x0c\x2f\x37\x04\x81\x78\xac\x82\x48\x4f\x2f\xae\xe5\xb5\x1d\xf0\x6f\x5d\x91\x9e\x0f\x94\x47\x5d\x8a\x79\x8f\xdf\x83\xeb\xfc\x87\xfb\x23\x85\x87\x1f\x37\xa9\x8f\x62\xcd\xe3\x24\x93\x74\xc7\x1c\xaa\x52\xdb\x24\x20\x06\xbe\x98\xe9\x7f\x5d\xe3\xb4\x61\x37\x1b\xcd\x46\xa3\xd1\xae\xaf\xb2\x8f\x2c\x6e\x21\x72\xcb\xdf\x49\x7c\x32\xc0\x10\xbc\xe3\xb8\x38\xea\x92\x78\xff\x36\xe7\x99\x67\x53\xa6\x68\xb1\x09\xb2\x93\x52\x5e\x5e\x93\x44\x2e\xf8\x78\x8a\x4d\xd1\x4d\x53\x3f\xe6\xbc\x9e\x27\x47\xfa\x23\xfc\x7e\xe1\x2b\x9d\xac\xba\xc4\xec\x08\x76\x34\x8a\x64\x21\x46\x79\x54\xdc\x39\xf1\x2d\xb2\x66\x56\x61\x37\x68\xfb\x42\xae\xcb\x17\x34\xfe\xab\x9f\x96\xe8\x17\x2c\xa9\x32\xbc\xc6\x89\xc4\xfd\x15\x26\x76\x54\x48\x4d\x71\x70\xf0\x34\x14\x3f\x02\x52\x5c\xb4\xbd\xb2\xaa\xbe\x58\x61\x3c\x91\xd8\x34\x10\xee\x96\x1c\x40\x4d\x69\xac\x48\xd4\x44\x5f\xbe\xe8\x09\x9b\x45\x11\x67\xaa\xcf\x52\x89\x79\xb1\x4d\x9a\xd3\xd1\x6c\x54\xfe\xd8\xa0\x4a\xdd\xae\x0d\xab\x96\x79\x0f\x63\xca\xce\x22\x99\x48\x4a\xf4\x2c\x20\x36\x8a\x75\xf6\x2f\xda\xb4\x9b\xe2\x0e\xad\x9d\x04\xc0\x0f\x8b\x94\xe9\x89\x79\x8e\x00\x97\x56\xcb\xd9\xe6\x6e\x4a\x6e\xdb\x9f\x48\x5c\x50\xc5\x52\xa3\x42\x64\x7c\xd3\x14\x34\xb9\x5f\xe8\x8e\x24\x6b\xee\x9c\xcb\xc6\xc0\xc6\x2e\xb9\x9a\x77\x12\xea\x96\xca\x1b\xc2\x99\x14\x01\x49\xa0\x70\x53\xbd\xfd\x24\xe4\xfc\x1c\x96\x7c\x7d\x6a\xce\xd6\xf4\x39\xc8\xda\xe4\xa4\xe9\x13\xc3\xfe\x11\xa1\x6d\x87\x7c\x83\x31\xd1\xdf\x98\x9e\xb7\xb7\xfc\x6e\xbe\x39\x33\x83\x39\xbe\x1f\x01\xeb\xee\xac\x90\xd4\x35\x71\x02\x53\xfa\x7c\x86\x9b\x9f\x78\x57\xed\x39\x13\xda\xdc\xec\xcd\xea\x42\xb2\x96\x56\x5a\x21\xba\x99\xb8\xcb\x6d\xa7\x4b\x2f\xfb\x4c\x6e\x3b\x69\xab\xee\x75\xb3\xed\x24\xe6\x15\x2a\xce\x74\x33\x10\xd6\xcd\xb6\x13\x8c\xd7\x40\x7d\x00\x14\xb0\xa4\xb4\x42\x7b\xf5\x59\xef\xe2\xb8\xe4\x9f\xd4\x91\x94\x14\x7a\xab\x32\x4a\xe7\x75\x40\xdf\x61\xf7\x16\x5c\x19\x4d\xfb\x89\x87\x0e\x52\x37\x6f\xb3\xf3\x18\x64\x7a\xe8\xa0\x15\xa8\xa0\x9b\x65\xb3\xf2\x37\xde\x2f\x24\x34\x5d\x5e\x95\xc1\xbf\x32\x6b\x8a\x1c\x68\x24\x8c\x13\x3d\x1c\x25\x00\x89\xe5\x31\xee\x49\xe7\x42\xd2\xd8\x83\x20\x83\xcf\x48\x7c\x08\x02\xf8\x4e\x2e\x5b\xc9\x4d\x5c\x0b\x4c\x97\x8c\xfb\x62\xda\xed\xda\xe9\x31\x4d\x67\xe6\xf2\x1a\x3a\x9d\x4e\x56\x2e\x5f\x30\xb1\x00\x2c\x9e\x2b\x16\xe1\x2c\xb8\xa4\x68\xdd\x74\x37\xb4\x6c\x38\x8d\x73\x7e\x49\x56\x5e\x0d\x4e\xe5\xcb\xbc\x4d\xf2\xb2\xc3\x7f\xf8\xd8\x91\x6a\xe4\xdc\xd9\x83\x2d\xa2\x09\x6f\xdc\xae\xc5\xaf\x51\xe4\xc1\x6f\x10\x5b\x6d\x7f\x88\xa0\x6a\xe9\x3d\x72\x03\x9c\xfc\x6d\x3e\xf1\x7e\x7a\x34\x24\x4d\x9a\xe1\x17\x1b\x7d\x7a\x20\xd5\xef\x9b\x80\x73\x00\x8b\x68\x22\x22\x9e\x87\xec\x75\x37\xb7\x56\x7b\x52\xc3\xbb\xdd\xa6\x00\xb8\x4f\x11\x2d\x9e\x85\x44\x39\x56\xd6\xd9\xa5\x67\x86\x49\xca\x8e\x4b\xec\x4c\x67\xdb\xb6\x42\x10\xff\x54\x0f\xa8\xf3\x50\xb5\x27\x87\x4b\x17\xcf\xca\xcc\xa6\xef\x0a\x0e\x71\x57\x05\x84\xd6\x92\xf3\x33\x65\xb6\xb3\xa5\x12\x04\xff\x70\xe4\x86\x26\x90\x96\x88\xdb\x92\x89\xe6\x4c\x8b\x18\x68\x70\xb3\xaa\xa7\xd5\x4e\x83\x61\x53\xae\xa3\x0c\x77\xf9\xa1\x0a\x26\x98\xd4\xe2\x85\x3b\x65\x28\x87\x2c\x2d\x02\x37\x76\xca\x78\xa3\x2d\xbf\xdb\x77\x24\x57\xa9\x17\xcf\x6e\x58\xf3\x55\x9f\x9e\x87\x85\xb8\x89\xea\xf7\xc6\x74\x38\x89\x9b\x11\xb5\x91\x99\x03\x59\xe7\x11\x8a\xba\x3f\x4b\x4d\x9f\x63\x74\xbb\x59\xd8\x83\xbe\x70\x2a\xd5\x87\x8e\xfa\x89\x05\x8b\xe2\x2d\xed\x84\x1c\xee\xcb\xd0\x91\x66\x4c\xac\x7c\xc2\x5b\x6e\x4c\x8a\xe7\x9c\x0d\x7d\x34\x89\x7b\x35\xd9\x18\xe9\xa0\xa0\xa3\x33\xe1\xa7\x8c\x1d\x15\x0b\x88\x6e\x8a\xb0\x94\x24\x24\x2c\x2b\xa3\x44\x4e\x07\xd4\x84\x2d\x48\xed\x56\x3e\x98\xd7\x48\xa6\x8e\x98\xda\xf9\x4f\x73\x5c\x08\xb7\x05\xff\x95\x2d\xd1\x3b\xc0\x57\x36\x00\x4e\xf8\x95\x4d\x89\xdd\x38\xb2\x9d\x46\x69\x95\x91\xd4\x3b\xbe\x8d\xa5\x37\x19\x6b\xf3\x32\xb1\x36\x25\x02\xd6\x92\xcc\x0f\x1c\x61\x5d\x2c\x3a\x21\x8d\xca\xb2\xda\xbd\x45\x2c\x1d\x9f\xde\x7b\x55\x84\xfe\x01\x0b\x6e\x61\x77\xbb\xb1\xf9\x85\x4e\x67\xa1\x86\x2e\xad\xf2\x49\x07\x39\x72\x3a\x6a\xa0\x84\x15\xff\x92\x8c\x1a\xb0\x3c\x49\x13\x45\xb5\x31\xf0\x60\x24\x60\x4c\x62\x72\xc7\x92\x84\x81\xd7\x9d\xea\xce\x5d\x11\xe5\x78\xe2\x1d\x39\x3d\x52\x19\x76\x26\x2a\x51\x35\xe8\x80\x04\x30\x7a\x7f\x1e\xf3\xcb\xf8\x79\x3c\x88\xe0\x01\xea\x83\x60\x4d\x7c\xf6\xd4\x99\x9a\x64\x4f\x86\xd9\xa5\x69\x5a\xae\xe3\x19\xc5\x24\xae\xee\x19\xbb\x2b\x23\x1e\x4b\x48\xc8\x46\x0a\x8d\xc3\xe9\xc4\xea\xed\xbe\x83\x00\xa7\x8e\x09\xee\xc8\x18\xf8\x89\x1f\xa7\x8f\x29\x2d\x09\xbe\x06\x3a\x4d\x24\xcb\x79\x63\xa0\xae\x45\xc0\x25\x41\x69\x95\x92\x05\x32\x5d\x96\x98\x08\xcc\x6c\xe5\xb6\xa8\x90\x89\x1c\x9a\x19\xcd\x38\x86\x49\x1a\xbc\x79\xb2\xd2\x05\x5a\x17\x47\x4a\xb3\x83\x1a\xa2\x06\xae\x5c\xd5\x1e\x32\x1a\xd6\x99\x58\x62\x18\xbf\x4c\xbe\xf6\xf0\x9f\x49\xc2\x41\x2d\xfd\x47\x72\x52\x00\x21\xcd\x30\xa0\x13\xa0\xdb\x4c\x2b\xc0\x51\x68\xaa\x53\xf3\x59\xd4\xd2\x13\xd7\xf2\x53\xbf\x35\xfd\x5f\x1e\xd8\x28\xa5\x06\x0e\x70\x6f\x46\x9a\xa7\x54\x89\x87\x11\xaf\x23\x6b\x1c\x4e\xdb\xbe\xea\x6c\x7c\x72\x87\x6e\x06\xb3\x64\xd7\x48\xa0\x07\x1e\x96\xdc\x79\x13\xdb\x8a\xe6\xf9\xee\xe4\xc8\x26\xdb\x86\x17\x78\xe3\x70\xb0\xc1\xf7\xe1\xe5\x5b\xe9\x16\x38\x47\x1a\x86\xfe\xd9\x64\x74\xac\xa2\xac\xa3\xb1\x7a\xec\xb0\x83\xd9\xa6\x06\x09\x38\xb4\xb4\x42\xbd\xae\x4b\x50\x22\x40\x32\x65\x8c\x65\x03\xe6\x94\x0b\xac\x79\xe6\x1e\x78\xe7\xa7\x1e\xda\x6a\xbd\xb8\x9c\x06\x95\x4a\x4b\xc2\x88\x68\xc1\x58\xc5\xac\x42\xec\x7d\xea\x11\xa6\x36\x08\xf9\xc3\xa2\xff\xb5\x60\x3f\xb5\x69\x10\x91\x2a\xbc\x5b\x39\x65\x2b\x62\xd1\x56\x4c\xef\x61\x4c\xcd\x99\x13\xb3\xa6\x9f\xe9\x64\x0c\x02\x42\x59\x70\x2e\xb3\xcf\x88\x0a\xc6\x6e\x5c\x34\xec\xe7\xb3\x85\xc6\xa4\x8a\xdc\x1e\x8d\x64\xec\x11\x3c\x77\xa0\xdf\x57\x22\x06\x05\xcf\xd3\x3f\x20\x9f\x27\xb9\x4f\x25\x12\x8f\x61\x01\x32\x19\x4e\xff\x39\x1f\x8b\xad\x2c\xb9\xdf\x9f\xa1\xb6\x0f\xea\x21\x9b\xc5\xe2\x7f\x2e\xd3\x79\x7f\x97\x5a\xf9\xaf\x25\xf2\x34\xf6\x55\xc4\xf5\x5e\xfa\xcb\x75\xa0\xcf\x86\xe2\x67\xa0\x29\x02\x4d\x25\x96\x00\xe7\x43\xf5\xce\x1a\x56\xe9\xa9\x07\x9a\x9e\xca\x4d\x21\x7a\xd4\x26\x90\x9d\xbc\xed\xd9\x7c\x16\x44\xc2\x2c\xa6\x69\xf5\x7e\x52\x2c\x25\xb1\xfa\x7c\x4f\x22\xbe\xfb\xd9\x0c\xe4\xcf\x1d\x68\x5c\x33\x2b\x7f\xa3\xf2\xfc\x61\xab\xbd\x1a\x9c\xe2\xe7\x04\x80\x83\x9e\x05\x88\xd0\x69\x38\x93\x82\x1e\x5c\x14\x24\x03\x21\x31\x99\x4c\x8a\xe5\x61\x36\x73\xb6\x0d\x7a\x12\x2b\x4d\xc2\x52\xad\x62\xe7\xd2\x17\x5f\x0a\x6b\xe0\xb5\x76\xcb\x6a\xc4\xdd\xe9\x8d\x1b\x55\xf8\xaf\xe8\xa3\x92\x2d\x82\xc3\x6a\x58\xfa\x47\x74\x1f\x95\x0b\x98\xbf\xc0\xa6\x95\x62\x98\x7e\x88\xcb\x9a\xc0\x93\x1b\xea\x96\xba\x77\x74\xd1\xf9\xad\x8a\xcd\x9d\xa7\x53\x12\x6b\x50\xd6\x32\xff\x8c\xa0\x28\x3d\x63\x76\x74\xf3\xa2\x22\x9e\x5b\x33\x99\xc9\x17\x26\xb6\xad\x68\xea\x44\x4e\x05\x88\x08\x3d\xb7\xf2\x88\x8e\x8b\x50\xc9\x9b\xf4\x41\xb4\x47\x14\x92\xf9\xc2\x27\x13\x5f\xe8\x52\x23\xa8\xc6\x4d\x3a\x2e\xd7\xec\x11\x9f\x33\x80\x09\xc5\xee\xd6\x74\x4a\x7e\x17\x9c\xe4\x33\x7a\x77\x78\x20\xc0\x94\xd8\x3b\x98\x37\xba\xe9\x02\x4f\xa4\x1c\x0b\x38\x9c\xc9\x59\x29\x0a\xc9\x44\x53\x45\xf8\xae\x84\xdf\x2f\x80\xa4\x13\xd4\xcc\x37\x97\x69\x0f\xe0\x0c\x8d\x21\x77\x79\xca\x36\xc0\xea\xb4\x24\xa0\x13\x8d\x38\x45\x30\xea\x54\x61\xde\x8c\xfb\x7c\x40\x08\xc6\xff\x0d\x67\xfa\xea\xd7\x0f\xf1\x2e\x3b\x6d\xc9\x1d\x07\xb4\xef\x39\xe0\x39\xc1\x73\xdd\x48\x72\x4c\x1e\x37\x26\xaa\xa4\x07\x92\x91\x8e\x33\x1b\x42\x73\x04\xe0\x8e\x7c\x5b\x6f\x10\x01\x26\x12\x6f\x75\xda\x53\x67\xf7\xd5\xad\x18\xae\x2b\x7b\xa1\x41\x45\xbf\xdf\xe5\x6b\x5a\xe2\x09\xa4\x22\x4e\xe2\x8a\x64\xea\x19\x35\x83\xa2\x3a\x9a\x98\x49\x56\xb5\xa2\xda\x8a\x95\x3e\xab\x46\xed\x62\xac\x4b\x85\xc7\xce\xa8\x66\x29\x2a\x63\x96\xa6\x47\x35\x3c\xf3\xcc\x43\xa0\x98\x00\x9f\x95\x2e\x67\xf4\x15\x5d\x04\xa8\xeb\xaf\x6b\x96\x92\x0a\x19\xb6\xa5\x81\x17\x20\x41\x30\xe3\xbe\x2d\xbe\xd3\xd9\xa3\x16\xa6\xa9\x76\x7f\x04\x86\x54\x20\xb8\x05\x06\x0f\x64\x34\x4b\x28\xa8\x16\xc5\x59\x71\x60\xb2\xaa\x9b\x28\x75\xdd\xe5\x7b\x2c\xbd\x3a\x30\x2a\x24\x7c\x32\xec\x0e\x83\x9a\x8b\x2f\x04\x49\xba\xcb\x2c\x93\x60\x45\xbc\x86\xe8\xd8\x14\xf1\x78\x50\x1b\xae\xb3\x23\x71\x84\xb0\xaf\xcf\xcc\x60\x00\x9b\xe0\x2f\xeb\x3a\xea\x80\xc8\xd2\xd3\xd6\x27\x3b\x8d\xd9\x89\x56\x06\x87\x11\x44\x29\xcb\xb4\x0c\xce\x0b\x72\xc9\xfc\xe3\x8f\xf6\x38\x39\xbe\x77\xa2\x7d\x5b\x01\xfa\x86\x46\xac\x88\xcb\x08\xeb\xa2\xf9\xde\x9c\x17\xce\xb7\x0e\x9c\xbe\xa1\x1d\x2b\xe5\xd2\xc2\x9a\x68\x9e\x4b\x48\xde\x5c\xe0\xc7\x9a\x55\x8a\x8e\x1d\xa8\xe4\xac\x82\x4a\xc0\x56\x24\x70\x55\x6a\x99\x7c\x63\x30\xcb\xee\xdc\x7b\xaf\xde\xc7\x4c\xf3\xeb\x41\xab\xda\x3f\xe8\x56\xe6\x3d\xa7\x34\x8d\xf2\xef\x53\xba\x19\xc5\xb4\x74\x60\xf5\xc5\xc6\x64\x99\xff\x89\x6f\xfc\xd9\x64\xa5\x62\x06\x55\x50\x06\x94\x17\xcc\x02\xf0\x4a\xa5\x78\x13\xd1\x67\xa4\xae\x4a\x52\xf8\x72\x9d\x4f\x85\xb9\xcf\x73\x09\xf3\x1d\xc6\xc1\x91\xa1\xda\x18\x34\x4d\x77\x98\xa9\xdc\x1e\x0d\x0f\xe8\x22\x22\xf6\x34\x14\x32\xf7\xe1\xe8\xe0\x60\x4d\xc4\x1a\xf1\x44\xba\x2f\x4e\x21\x89\xd5\x76\x82\x33\xd5\xb9\xb7\xf2\x81\xe1\x2e\x8c\x15\x66\x2b\x93\x40\x78\x4f\x97\x56\xc8\x71\xea\x9b\x6a\x5e\xd7\x43\xdf\xaa\xa9\x4b\x6d\xae\xf7\x9f\x11\x2c\xe2\xb1\x38\x48\x04\x39\x8c\x5a\xa8\xac\x3c\x26\xb8\x6f\xb6\x85\x1f\x28\xd1\x40\xff\xb0\x6b\xa9\xf1\x1e\xdf\xd6\x4d\x35\x9b\xf3\x1f\x8d\xa1\x5d\xb1\x4d\x85\xb8\x55\x32\x0c\x3d\x10\x76\x70\x42\x36\x44\x58\x6a\x60\xa9\x72\xaa\xf2\x3c\xf5\x77\x95\xc6\x31\xe6\x99\x59\xd0\x3a\xd5\x20\xe7\x6f\x91\x3c\xbf\x00\x39\xa2\x3b\x8c\x01\x9d\xf8\x8e\x46\xc0\xd5\xfa\x93\x24\x1c\x3b\x32\xd6\x9c\xd7\x6a\xb4\xb1\x10\xfa\xde\xba\xec\x78\x2c\x16\x12\xcb\x1a\xca\x81\x9d\x43\x04\xc5\x52\xc4\x89\x74\x18\x16\xb8\xb0\x12\x24\x83\x1c\x56\x4a\x66\x1e\xc1\x66\x88\xc5\x39\xc7\x29\x00\xaf\x61\x99\x39\x50\x89\xab\x26\xe0\xf8\xd1\xc5\x36\x4f\x6f\xbe\xd6\x03\x17\x6c\xa9\x3c\x9d\xd4\xf3\xe2\x02\x19\xf2\x19\xef\x64\x73\x3d\x23\x01\x33\xc5\x73\x16\x8f\xb5\x50\x2d\xd0\x62\x44\xa0\xd4\xfc\x22\x8d\x0f\xec\x5b\x3a\xb0\x77\xc9\xba\x5e\x6a\xf9\x89\xd3\x81\xbb\xd0\x51\x65\x6a\x60\x8c\x8b\x97\x54\x71\x92\x05\x3d\xa2\xfa\xb1\x94\x48\x26\xa3\x6f\x8f\x1b\xa1\x1b\x6b\xc4\x89\x4c\x44\xde\x57\xa1\x4f\xfb\x86\xc2\xf9\x94\xeb\xca\x2a\x4a\x33\x73\x5b\x19\xce\x36\x9d\x6a\x31\xf0\x40\xd9\xd8\x6e\x72\x3c\xae\xce\xbe\xdb\x87\x86\x23\x89\xcd\xd2\x40\x09\x88\x30\xbf\x9b\x63\x06\x09\xa2\x9d\x1f\x05\x99\x3f\xef\xb5\x9d\x3c\x32\x8a\x44\xd5\xd3\xa6\x09\xbf\xe8\x7d\xaf\xb0\x54\x73\xcd\xd9\x53\xce\xfd\xd0\x22\xe2\x0b\x52\xcd\x0a\xae\x95\xa4\x2e\x7d\xdf\x6f\x5a\xde\xcd\x18\xe3\x87\xf9\x46\x6f\x2a\x98\x95\xa7\xdd\x97\x87\xb6\xff\xb7\x96\xb5\x3a\xdd\xf4\xd6\x1b\xc1\x93\xbc\xc1\x37\xc9\xed\xf7\x48\xc2\xf2\xe4\x8d\x9a\x0e\xa5\x78\xa1\xb4\x5d\xc5\xdb\xc7\x61\x19\x36\x1e\x76\x35\xed\x12\x52\xfd\xa0\xcc\xbe\x65\x31\x87\xed\x24\x58\x4c\x85\x9b\xba\xc3\x0a\x4a\x89\x61\x61\x9a\x11\x13\xdd\x86\x2c\xc6\xf3\xec\x84\x90\xcc\x1a\x22\x33\x2d\xcf\x47\xe4\x21\x1c\xcb\xa5\x38\xb3\xb7\xf2\x38\x0a\x7c\xe0\x54\x3a\x53\xde\x50\x93\x8c\x02\x1f\xb8\xb6\xf5\xf1\x70\x1c\x4d\x52\xae\x59\xde\x62\xf4\xe6\xa5\x7b\xef\x2b\xbb\x4f\xfd\x65\xdb\x9b\x32\xf6\xf2\xd7\x67\x05\xa7\xa9\xd3\x75\xae\xe7\xf7\x56\x3d\xfa\x55\x3e\x2d\xc5\x01\x6b\x62\x36\x55\x9f\x12\x92\x92\xd0\xa9\x70\x5a\xe2\x4d\xbd\xd0\x4f\xa8\x60\xff\xb2\xdc\x24\x57\xe8\x44\xc1\x79\x1b\x8e\x11\xb9\xf1\x41\xdf\xbb\xa3\x5b\xc0\x34\x05\x8d\xfc\x61\x91\xfc\x4a\x7f\x3f\xae\x66\x44\x3f\x3d\x97\xef\x91\x89\x64\xb0\xaf\x28\x4b\x44\xe4\xb4\xb1\x3a\xe2\x9c\x44\x1e\x93\x2f\x5b\xe5\x23\xa2\x7f\xf5\x24\x41\x0c\xc5\xfb\x23\x4b\x48\x2e\x11\x3a\x95\x9e\x78\x3f\x25\xe6\xdb\x56\xf4\x72\xb7\x15\x40\x01\x5b\x42\x24\xcc\x7d\x9e\x63\xf1\x6f\x18\xe1\x93\xdb\x53\x36\x60\x4c\x50\x66\x4d\x26\xc9\x94\x80\x9b\x41\x3c\x3a\x8a\x07\xae\x76\x90\x9e\xc3\x9a\x0a\x51\xd2\x7e\x50\xdf\x1b\x10\x77\xa1\x92\xef\x5b\xeb\xed\x2b\x08\xf7\x9e\x14\xad\x91\x86\x8f\xfb\x01\x60\x2b\x6a\xa3\x20\x56\xdf\xc7\x2b\x8f\x9e\x52\x2a\xe3\x01\xb6\xb5\x75\xa3\x6c\x7f\x21\x14\x0e\xa3\xfe\xea\x7c\xfe\x2b\x27\xaf\x4b\x59\xfe\x36\x9b\x36\xb6\xcd\x5f\x06\xeb\x96\x75\x64\xd2\x7d\x5f\x03\x87\xac\xdc\x5b\xff\x79\x75\xdb\x98\x95\x6a\x8e\xa5\x00\xb0\xbb\x6f\x24\xc6\xe3\x59\x3d\xa0\x79\x6a\x52\x9c\x11\x69\x29\x8b\x16\x99\x06\x62\x90\xd4\x8b\x4c\x61\x44\x28\xbd\x58\xfd\x55\xca\x77\x49\x08\xab\xda\xbb\x5a\x80\x16\x24\xf4\x37\x02\xda\xbb\xee\x39\x1a\xb9\xfa\x26\x7f\x99\xd6\x34\x5a\xc3\xdd\xd6\x27\x8c\x93\x44\x46\x9f\xf5\xdd\x10\x5b\x4e\x5d\xc5\x7e\xe6\x64\x18\x44\x3f\x56\xf0\xf6\x17\x51\x95\x57\xa1\xcd\xcd\xb2\x81\x7d\x76\x53\x3e\xc1\x4e\x0e\x03\x6d\xf7\xc9\xc3\x2b\x03\x53\xde\x71\xf0\xb8\x0e\x48\xb0\xff\x61\xff\xfa\xca\x55\x21\xf7\xce\x92\xaf\xe6\x86\x1a\x17\x89\xda\x57\x62\x5f\x2b\xa5\xab\x8d\x99\xe8\x55\xf4\xfe\x4f\x5d\x8a\x5e\x1b\xbf\xec\x08\xfc\x6c\x35\x07\x39\x09\x40\xc5\xe4\x31\xe6\x27\x7f\xeb\xe0\xd9\x41\x9f\x5e\xfe\x83\x6d\xec\xaa\x12\xfd\xc9\x11\xb2\x6f\xb1\x12\x3a\x9b\xc1\x39\xb8\xd7\xa3\xa3\x73\x19\x0e\x9b\x2d\x13\xdd\x00\x4e\x3a\x1a\xbb\x11\x98\x80\x74\x44\x01\x2d\xc6\x7a\x6b\x53\xb7\xea\x6a\xb5\x61\x34\xed\x9f\x72\x63\xb4\x7f\x7a\x0f\x46\xfb\xdb\xbb\x20\xde\xbf\xe1\x84\x78\xff\xda\x76\x88\xf7\x37\x5b\x00\xbc\xc3\xa4\x43\x38\x96\x23\x37\xb6\x70\x35\xdf\x2b\xb3\x86\xb3\x20\x1c\xe2\x7e\x1d\x2a\x85\x62\x4a\x4a\x59\xdc\x7a\xd6\xb3\x77\x2b\xfc\xb5\xcd\xd9\x02\xef\x10\x2d\xc8\xea\x70\x99\x2f\x4c\xcc\x4c\x5b\x63\x67\xd8\xf7\xd1\xcd\x6e\xf4\x6c\x63\xb8\x93\x61\xff\x50\x89\x86\xd4\xcb\x48\xab\x46\xe7\xbf\x02\xbb\xbe\x9b\x24\x7d\xd2\x39\x60\x7f\xa3\xa1\xcb\xd6\x18\xb0\x91\x5c\x0a\x82\xf4\x0f\x38\x33\xe6\x12\x59\x6d\xf0\x31\x62\x3e\xbf\x7e\xc6\xbd\x4a\xae\xf9\xd8\x82\xaf\xcf\x8f\xc9\xfc\x79\x42\x73\x3d\x22\x92\x86\xe8\xcc\xc3\x66\xed\x28\x7a\x4b\x89\x05\x1c\xf7\x4d\x7f\xc5\x22\x8d\x1a\x08\x48\x60\xe5\xc6\x77\x08\xb5\x63\xbd\x45\x64\x85\xea\x3a\x62\x38\xae\x36\x28\x02\x39\xb0\x18\x89\x3c\xef\x10\xc9\x63\xff\x6c\x8d\xdd\x98\x1e\x2f\x85\xbd\x16\xfc\x10\x6b\x9d\x9b\x67\xea\x0c\x47\xa4\xb4\xbd\x8c\x01\x91\xb0\xc9\xda\xe0\x5e\x02\x45\x53\x45\x29\x35\xd6\x47\xeb\x5f\x5e\xbd\x8f\x6b\xdf\x87\x0b\xf2\x76\x89\xbf\xd5\xcc\x9a\xd3\x11\x7d\x54\x33\xff\x3b\x36\xf1\x0c\x20\x57\x76\x15\x54\x43\x50\x5f\xa0\xf6\xd0\x6b\xf3\xc2\xea\x8c\x2e\x5f\x65\xbc\xe0\xd1\x94\x4e\x4a\xd3\x4c\x00\x7b\x54\xc9\x21\xb3\x8a\x36\x93\x6a\x3e\x68\xf8\x9c\x30\xdd\x0c\xba\x23\xe7\x86\xdd\xd9\x5b\xaf\xea\xe3\x97\x9a\xa9\xc0\x86\xcc\x4b\xc3\x01\xb1\x7a\x93\x2c\xfe\x21\xda\x13\x33\x88\xa6\xd2\x32\x98\xe7\x06\x81\xb6\x3a\x36\x64\x3e\x1d\xa5\x05\x68\x69\x6d\x45\xd6\x5c\xcc\x3d\xf0\x48\x0c\xba\xd4\x1c\x5a\x2b\x7b\x36\x9c\xac\x40\x57\xca\xca\xaf\x26\x11\x6c\x43\x27\x12\xc2\x2c\x92\x10\x11\xd0\x72\x58\x20\x14\x12\x07\x21\x15\x1a\x38\x9f\x28\x5c\xe3\xcc\xad\x32\x98\x2d\xc1\x50\x38\x0e\x68\xe8\xef\x40\x0e\x92\x14\x43\x34\x0b\x9a\x8d\x3c\x7e\xb3\xa1\x06\xd9\xee\x5a\x37\x6a\x25\x29\x0c\x65\xfe\xb4\xc5\xeb\x65\x46\xcb\xfc\x70\x5a\xea\x27\x31\x35\xb1\x0b\xd3\x5e\x36\x1a\x42\x83\xcd\x05\xc8\x33\xb8\x6e\x63\x99\x6f\x23\x14\x7e\xba\x88\xc2\xc2\xb2\x71\x98\xaf\x52\xdb\x40\x21\xd5\xa1\xf7\xd0\x20\x7a\xc3\x5e\xdd\x4b\x73\x5d\x54\xde\x40\x83\x54\x4e\xb3\x54\x20\x85\x2c\x53\x2a\x40\x01\x37\xd0\x13\xd9\x17\x43\xbe\xaf\x89\xc4\xab\xdb\xc9\x85\x98\x0f\xf6\x93\x92\x4c\x0e\x9d\xa8\x69\x51\x86\x4e\x95\x1c\x2c\x84\xc4\x09\x23\x3a\xe5\xce\x52\xd1\xaa\xbb\x88\xa5\x6a\xf8\x92\x17\x17\x39\x97\x05\x15\xe2\x31\x80\x2d\x82\x59\x99\x97\x50\xc7\x4e\xc2\xbf\x00\x8a\x5c\x26\xb9\x79\x4c\x38\xaf\xd3\xb9\xcd\xf7\x89\x26\x30\xcb\x63\x92\xc1\x76\x08\x14\xf0\xc6\x89\x5c\x8e\xc0\x8a\xa1\xf2\x4a\xb5\x41\xca\xcd\x3b\xa4\xf2\x51\x3b\x1c\x95\x5d\x85\x89\xfd\x49\xb4\x4d\x38\x09\xd9\x73\xaf\x02\xaa\xd8\x14\x4d\x66\xf4\x3f\xd4\xb0\x07\x1c\xa1\x49\x12\x18\x9a\xb2\x72\x1b\xbb\x72\x21\xd2\x4b\x86\x39\xd1\x8f\x38\x70\xd9\x7d\x51\xbf\xec\xbd\x8d\x8b\xe7\x67\xfb\x2d\x84\x2a\x0f\x73\x6d\xb5\x7e\xc5\x58\x06\xd7\x50\x1a\x30\x64\xf8\x4d\x5e\x08\xb5\xf0\x3f\x44\xc5\x18\x64\x49\x82\x6d\x3c\x86\xa8\x70\x3b\xa1\x7f\x06\x79\x8e\x06\x2c\x22\xdb\xa6\xa6\x36\xad\xe4\x76\xca\x70\x07\x54\x5c\x5e\xca\x6e\xf4\xdb\xf7\xbe\x7f\x05\x33\x6d\xa4\x3e\x38\xa4\x65\x43\xae\xf1\xdc\x4e\x7d\x10\xad\xcd\xea\xed\x63\xc3\xa0\xe6\xd9\xad\x24\x73\x37\xdb\xbc\x13\xfa\x9c\x23\xd5\xb5\x3c\x53\x46\x2d\x41\xba\xa7\xa0\x14\xe4\x86\xf9\x7a\xac\xd2\xe2\x89\xb1\x13\xcf\x0a\x80\x42\x81\x09\x2a\x7b\xb8\x06\x36\x63\x67\x1d\x89\x87\xb1\x54\x7a\xad\x47\x07\x58\x1f\x32\x2b\x93\x82\xcd\xf6\xd9\x19\xff\x61\x07\xb6\x9c\x30\x9b\x01\x1b\x86\xa4\xff\x07\x3b\xe6\x1c\x20\x9d\x45\x45\x61\x47\x98\x64\xf1\xce\x98\x00\x06\xd7\xbf\xc0\x5b\xef\xaa\x4d\x00\xbc\xab\x06\xe1\x0a\xae\x69\xf0\x1b\x9e\xd3\x0f\x67\xf4\xd2\x3a\x42\x88\x5b\xc4\x09\x55\xfa\xb9\xad\x12\x33\xbd\x19\x4a\x39\xdd\x0d\x30\x08\xca\x0f\x9a\x49\x06\xbe\x32\x27\x09\x6f\xab\xfd\x93\xd0\x16\x12\x5c\x65\xa0\x25\x34\x5e\x35\x7d\xa3\x86\xb6\x1e\x02\xe6\x35\x82\xd4\x0b\x1d\xfd\x20\xd2\x30\x3d\x07\xf3\x13\x0d\x9e\xc1\x4a\xc7\x7d\x6d\x7f\x1f\xe4\x13\x79\xb0\x12\x26\xa9\xa8\xa9\xcf\x22\x91\xfe\x2e\x63\xd6\x82\x09\x56\xbb\xf1\x7d\x65\xe7\x4a\xdf\xda\xeb\x3a\x34\x32\x71\x60\x47\xcc\x4f\xf4\xa6\x9b\x2d\x13\x14\x95\xf2\x9c\xaf\xc1\xe3\x2d\x42\x94\x8b\xee\x99\x4a\x97\x46\xb8\xe9\x59\xc3\xdb\xbe\xa2\x33\x7c\xff\xc5\x7c\x29\xc9\xe4\x0e\x8a\xe0\xf3\x06\xac\xba\xea\xf6\x49\x47\xee\xcc\xc1\x61\xbe\xe9\x0f\x9e\xa2\x08\x2b\xef\x2a\xbd\xef\x74\x74\x50\x11\x62\xef\xf6\x82\xef\x41\xdd\x1d\x18\x44\x6f\x3f\x04\x43\x10\x8e\xa1\x67\xb4\x74\xf3\xb4\xf5\xd0\x3b\xf2\xb8\xc4\x49\xcb\x5d\x47\x1d\x85\x98\x32\x52\x45\x3c\x5e\x95\x6d\x4b\x33\x94\xac\xf7\x14\xa7\x2b\xe1\x13\xac\x3b\xdf\x0d\x9a\x5b\x8b\xaa\x16\xcb\x33\xcb\xda\xf9\x8f\x19\x5b\x31\xb0\xbc\xc1\xbd\x79\x84\x76\xb8\x85\x8f\x0a\x17\x23\x7f\x0f\xaa\xdc\x70\xdf\x3c\x6a\xd4\x69\x43\xd3\x61\x66\xe6\x7e\x5c\xe7\x1b\x47\xa4\x03\x43\xa5\x34\x1b\xee\xc2\xde\x64\x75\x62\x74\x20\x42\xa0\x4b\x97\xc2\xf5\xd0\xb1\x51\x6d\xbd\x13\x3d\xce\x61\x9b\xa6\x9b\x54\x71\x3c\xad\xf6\x5e\x7a\xe7\xd8\xa1\xf1\xaf\x28\xcb\xde\xb9\x96\x47\x7e\x51\xdb\xbc\x5a\x6f\x4f\x18\xf8\xd6\x63\xe7\x86\xe0\x94\x0f\x72\x3e\x52\xa5\x7b\x62\xba\xb9\x34\xa6\xf7\xcb\x76\x4d\x9d\x71\x84\xb3\x11\x83\x6c\x29\x3c\x8b\x56\x94\x7b\xc4\x9b\xe6\x99\x90\xb1\x32\x50\x99\x00\xfa\x54\x19\x80\x27\x1d\x44\xd8\x0c\x0a\x56\x74\xbb\x02\x90\xbc\xce\xf2\x15\x9d\x87\x6f\x50\xad\x61\x55\x92\xc9\xe3\x36\x60\x88\xa0\x01\xff\x22\xc2\x81\x81\x51\x65\xef\x5d\x6b\x04\x61\x2d\xdf\x5e\x3c\x78\x6a\x9f\x3c\xe4\x47\x2e\xdb\xd9\xd5\x7e\xad\xa5\xb6\xd7\xeb\xc5\xe9\xf4\x35\xdb\xb9\xbd\xdb\xaf\x5d\xd3\x56\xfa\x1d\xbe\x60\x38\xcf\xa6\xbe\x8e\x11\x97\xf8\x25\xb9\xbd\xbb\x72\xd7\x1e\x79\xa3\x76\xd1\xf4\x0e\x02\x18\x02\x9b\xf3\x92\x9c\x3b\xe3\xdb\x70\x63\xff\x19\xf7\x85\xea\xb5\x1c\xfd\xe8\x9b\xfc\xca\xd3\xdd\x60\x00\x9b\xd9\x98\xbd\x75\xd2\x99\xc1\xed\x16\x39\x71\xb9\xef\x71\x10\x9b\x45\xa9\xc4\x7f\xa9\x19\xd2\xb9\xe6\xcd\xec\x42\xc5\x19\xd2\xe7\x15\x14\xa7\x07\xdb\x36\xd8\xc7\x91\x03\x61\xb7\x65\xdc\xc1\xb6\x45\xf5\xd8\xab\x4f\xe2\x59\x94\xfa\xad\xc7\x91\x23\x3a\x79\xeb\x12\x70\x1c\x02\x80\x10\xc6\xe9\x2f\x21\x2f\x1c\xa5\xbf\x35\x73\x91\xa7\x96\x55\x27\x21\x20\xe0\x7f\xeb\x22\x7c\x87\x8d\xa5\x42\xe3\xa1\xaa\xa8\x0a\xe3\x0f\x74\x5c\x1b\x8f\x54\x23\x19\xe2\xf3\xd2\xd2\x9d\x4d\x8e\x24\x2b\x32\x6e\x5f\xc5\xe4\xde\x20\x91\xba\xbe\x62\xd3\xda\x1c\x1c\xe2\x5e\xa7\x26\xf5\xb1\x90\x92\xaa\x99\x8f\xc8\x65\x17\xc3\xe9\x14\x69\x99\x1b\xa6\x63\xe0\x49\xea\x3d\x15\x15\x84\xfa\x05\x75\x25\x45\x16\xa6\xa3\x8c\xc8\xad\xf3\xd6\x93\x1f\x0a\xcd\xca\xd3\x66\x6a\xb0\x61\xd8\xb8\xd6\x90\xa0\x93\xce\xcd\x45\xc0\xd3\x9d\xe0\x13\xe2\xab\x5f\xd1\x65\x02\xf6\x9c\xe0\x28\x72\x7d\xf2\x9e\x6d\x6f\x39\x19\xba\xfb\x55\x50\x36\x7a\x48\x24\x67\xb0\x34\x04\xf1\xd9\xba\x36\xa9\x50\xf3\xf7\x40\x40\xe2\x58\x0d\x28\x31\xcd\xce\x98\xcd\x00\x7f\xe1\x78\x5f\x09\x4a\x79\xbd\x7b\x95\x33\xda\xe6\x13\x03\xad\x27\x2c\xbe\x83\xf1\xe3\x4d\xeb\x31\x6e\x9b\xd8\x15\x85\x3e\x76\xf0\x4f\xea\xf4\x86\xd5\xb3\x86\xfd\xf8\xc4\x6a\xfe\xdf\x12\x98\xd6\xb0\x72\xcd\x31\xe3\x66\x34\x63\x73\xba\x5f\x25\x76\x25\x6c\x93\xe3\x4b\xdf\x5a\x4e\x69\x92\x2b\x56\xf8\xee\x33\xdf\x27\xb7\xa4\xc4\xd4\xe0\x7e\xe7\x94\xeb\x4e\x9b\x4d\xe0\x47\x40\x48\xef\xe4\x1d\x42\xee\x62\x2b\xd3\xfd\xca\xee\xa7\x76\xdd\x56\x46\x71\x40\x18\x9b\xdd\xb1\x75\x4b\x5a\x9d\x68\xaa\x70\x40\xec\xed\x45\x30\xf7\xf8\x81\xbf\xe4\x75\x61\x81\x97\xce\xf2\x53\x58\x64\x84\xee\x85\x55\xb8\x93\x98\x4b\x7d\xd4\xaf\xd2\x38\x47\x81\x58\xc7\x4b\x02\x19\x69\x49\x04\xac\x82\xed\xa3\x25\x9a\x0b\xc7\xfb\x83\x00\x07\x19\x75\x52\x29\xb1\x45\x9e\xe0\x92\x49\x2d\xa8\xda\x96\x38\x9c\xc6\x7c\x0e\x31\x07\xd6\x12\xcb\x47\x12\x80\xce\x9e\xe0\xe6\x66\x36\xeb\xc8\x80\xee\x3d\x21\x16\x4b\xc0\x46\x36\x92\x51\x66\x1e\x5b\x58\xb1\x15\xd2\xda\x7e\xc0\x10\xf4\x97\x5f\x8f\xe0\x6a\xa2\x5c\x5e\xea\xcd\x8b\x5e\x14\x6b\x85\x94\x9a\x9d\x60\x93\x88\xfe\xf9\x44\xf8\xb5\x73\xf5\x05\x05\x06\x47\x5d\x7e\x96\xe3\xa4\x9b\x79\x13\x07\x6f\x10\x02\x01\x8a\x7d\x8e\x7f\xd1\x3b\x2b\x69\x25\x8b\x08\x1a\x4e\x7d\x87\x51\xbc\x9c\x30\xbf\xe5\xfe\xd4\xa5\xed\x55\xbf\xc9\x75\x29\x4d\xb6\xdd\x5b\xc6\x5a\x60\x22\x9f\x37\x0d\xb9\xe2\x1a\x0e\x3f\x2f\x5b\x43\xe4\x7b\xcc\x6c\xf1\x82\x29\xf2\x24\x18\x4d\x72\x89\xf5\xc0\x9a\x7c\x5e\xba\x04\x91\x09\x61\x99\xbb\xe2\xb7\x10\x03\xfe\xa7\x3a\x88\xa0\xcd\x22\xe9\xd6\x8a\x9d\xdb\x61\x09\xc2\x6c\x02\xf2\x3e\x1b\xde\x68\x00\xc7\xe1\x79\xa2\x7f\x80\x14\x61\xd1\xce\x7b\x9e\x32\x3e\xaf\xfe\x43\x50\xae\x89\x90\xb0\x4c\xc5\x0f\x10\x20\x9a\x6a\x3f\xd1\x6e\x08\x74\x67\xe5\x9e\xd8\xd3\x5d\x03\xa6\x16\xe1\x53\x88\xb8\xf8\xf8\x7b\xe1\xb5\x55\xd3\x87\x05\x91\x28\x27\xb3\xb5\x62\xe7\xa3\x27\x66\x8f\xe6\x67\x30\xd3\x83\xdd\xea\x18\x95\xc4\x4c\x50\x41\xa5\x4d\x74\x64\x15\x07\xcc\x29\xe3\xb3\x32\xc3\xba\xe3\x59\x21\xd6\x76\x00\x8e\x26\x60\x6f\x85\xaf\xfe\x32\x12\x50\x5b\x0b\x1b\x9d\x61\xde\x94\x84\xbb\x35\xfb\xc0\x0c\x53\x87\x7c\x23\x2b\x80\xb2\x01\x37\x4a\x05\xa4\x8a\x0a\x23\x1b\xc8\xb8\xcc\x5f\xab\xd5\x64\x55\xa9\xa4\x36\x23\x56\x19\x44\xae\x86\xc0\x9b\x42\x22\x4b\x83\xf7\xd6\x7c\xa2\x1a\xb8\xc0\xc1\x19\x16\x80\x29\x02\x6f\x90\xd0\x10\xaa\x74\x6b\xfd\x6c\x03\x9a\xe6\xc8\x2c\xae\x14\xfb\x6c\x11\xe8\xa1\xeb\x0f\xf3\x55\x1f\xec\x29\xdd\xb9\x65\x98\x35\x81\x3c\x41\xba\x08\xb0\x1e\x5c\x30\x9c\xeb\x9e\x5f\xec\x37\xd8\xd9\xf6\xed\x5e\x7e\x7b\xd8\x24\x0d\x71\x52\x82\xce\xb0\x66\x93\x13\x01\xfb\xeb\x50\x0a\x10\x61\x1a\x21\x66\x97\xb4\xf9\x16\x58\x55\x83\xb2\xb3\x68\x58\x1b\xf2\xa2\x6c\xdb\xbd\x5e\xc1\xf1\x3a\x28\x9f\x03\x6d\xa0\x3f\x92\xc5\x40\x3d\x62\x68\x67\x99\xdd\x4f\xcd\x96\x7b\x2d\x93\x69\xd0\x3a\x92\x27\xb4\x41\x15\x8b\x38\x3f\x67\xc2\xf0\x7a\x48\x46\x7a\x30\x11\x10\xf7\x5b\x0f\x44\x23\xe3\x90\x41\x8c\x19\x2e\xf6\xe0\xba\x25\x27\xb6\x80\x77\xad\x3d\x32\x0f\x33\x1a\xa4\xc9\xb8\xb7\x9d\x5a\x27\xf2\xa1\x48\x78\x86\x93\xaa\xbb\xee\x9b\x26\x07\x49\x9d\x92\x34\xd0\x31\x49\xef\x9d\x4a\x69\xa4\xad\xbf\x9b\x65\xe8\x7a\x94\xda\x1b\xcc\xd3\xcd\x8f\x97\xfd\x6f\xe2\xd9\xb4\x9b\x8f\x7b\x83\xa9\x81\xfe\xb0\x69\xe7\xc3\x9f\x38\x1d\x09\x30\x5b\xcb\x4b\xb8\x2f\xee\x03\x1f\x6e\x2a\xed\xa8\x61\x35\xf3\x11\xd2\xed\xe1\xb0\x89\x10\xea\x2c\x63\x02\x90\x98\xac\xe8\xfb\x98\x18\xb1\x12\xd7\x2b\x9a\xd5\x41\xbe\xb7\x07\x42\x44\x72\x6c\x44\x6f\xb8\x9f\x11\xf1\x22\x24\x1f\x54\x68\xda\x54\x17\xb5\x99\x8a\xa2\x39\xe6\xae\x24\xc6\xe5\xb2\xa3\xe9\xfe\x27\xf7\xf2\xf6\xbc\xf8\xe1\x10\x30\x56\x88\x27\x7c\xe3\x22\xcf\x05\x92\x98\xe2\xeb\x80\xf4\xa1\x1c\x0a\xc0\x91\xd7\x53\x96\x41\x0f\x4a\x21\x94\xd5\x8f\xdf\x91\xd2\x36\xc6\x46\x36\x52\x5c\x8a\x36\x14\x5c\xbf\xbb\x39\xb4\x08\x17\x2d\xf8\x5f\x3d\xa6\xc1\x51\xb3\x22\x39\x49\x57\x2e\x5c\x2e\x0e\x7a\x6d\x6b\x7a\xcb\x46\xcd\xb5\x55\xf4\x78\x0f\x3c\x39\xdf\xd0\xc9\x91\xaa\x24\xc6\x37\x69\xfc\x46\x53\xe9\xef\xcf\xe1\xfe\xca\xa7\x62\xdf\x82\x40\xfe\xdb\xa8\xea\x94\x7d\xfa\xcf\x75\xe5\x01\xf4\x6f\xf6\xa1\xfe\xcf\xbe\xbc\x11\xde\xd1\xaa\x0f\x07\x10\x6a\xbd\x34\x3d\xa4\xee\xfe\xba\xe3\xa5\x6f\x65\x55\x4b\x0b\xe6\x78\x64\xe9\x57\x98\xeb\xbb\xb8\x31\x6e\x44\xa5\x58\xcd\xf5\x98\xe5\x79\x96\x22\x8d\xae\xe9\x35\xe5\x80\x98\xc0\xca\x82\x82\xd7\x14\x95\xd5\x4b\x01\x95\xec\x17\xd1\xfb\xa4\xbf\x14\x2d\xa4\x6f\x37\x42\x22\xb4\xe0\x12\xc4\x9b\x29\x1e\x98\xa5\x75\x57\x0c\xe2\xd1\x1f\x45\xc1\x68\x39\xac\x10\x01\xc0\x62\x29\x1a\x50\xe4\x25\x2e\x96\x24\x84\x47\x9c\xc1\x28\x40\x28\x16\x91\x11\xf1\x75\xa3\xd6\x52\x8d\x1b\xec\x66\x4c\x54\x20\x06\xcf\xaa\x1b\x4a\x36\x0d\xe9\xce\xea\x29\x0f\x48\x2a\x79\xd3\xdf\xf1\x0b\xe8\x9f\x3d\xce\xd2\xcc\x51\x0b\x2f\xab\xdd\xd2\xd8\x75\x49\x2e\xbd\x08\xba\x3c\x8f\xdb\xef\x90\xc1\x18\x2c\x96\xb0\x72\x23\x82\x79\x04\x7c\xbe\x03\x06\x6c\xc9\x3c\x60\xfa\xc6\x51\xf9\x07\xea\x3d\xc4\xfb\xd4\xf9\xeb\xa9\x46\x24\x1b\xe8\xab\xd2\x41\x92\x74\xe9\x98\x8d\x32\xda\xec\x94\x64\x36\x01\x63\xcc\xf3\x82\x57\xc7\xa5\xe4\x87\xa3\x34\x7e\xf6\x25\xef\x76\x1b\x62\x19\xfc\x61\xff\xd0\x95\x5f\x43\xd5\xae\xe3\x59\xde\x6c\x87\xcc\xa8\xce\x76\x1a\x71\xa4\x1a\x80\x73\x10\x24\x6d\x3a\xb0\x47\xdf\xf4\xe3\x5c\xbc\x57\x5b\xf6\xb3\xa9\xb3\x43\x09\x19\xe5\x6c\xf1\xf4\x7d\x0f\xd3\x52\xc5\x5e\x9f\x32\x4a\xa9\x49\x36\xde\x58\xfc\x6c\x39\xa1\xe8\xaf\x3d\xf1\xff\xfb\x83\x11\x8c\x60\x74\x07\xfd\xd3\x91\xef\x15\x2f\xf5\x17\x94\x19\x83\x50\xac\xd9\x6a\x65\x73\x22\x9c\xa9\x5f\xac\x0d\x4c\x19\x8d\xc4\x77\xa7\x6d\xab\xcb\x7e\xc0\xa6\x58\x14\xba\xe2\xcd\x4e\xfb\x16\x4d\xef\x31\x78\xbf\xd5\x16\x7f\xaa\xd9\x9b\x23\x02\xb8\xea\x4e\x6d\x7a\x53\x0f\xef\x8d\x25\x62\xb7\x96\x1f\x2c\xef\xf2\xe3\xa0\xc5\xbd\x9b\x7e\xb2\x42\x9d\xee\x09\x60\xff\x39\xef\xf5\x56\x75\x36\x55\xaa\x7d\xd6\xba\x47\xa6\x7f\x1d\x0c\xac\x75\xf1\x6e\x8b\x77\x4f\xbe\xb5\x03\xaf\x1c\xb0\xe7\x1c\x66\x73\x43\x97\x5c\x1c\x81\xb2\x08\xbd\x1c\xcf\xfe\xdb\xcf\x67\xfd\x1a\xb4\x13\x87\xb8\xfe\xb9\xb3\x56\x97\xeb\xce\xa6\xae\x8f\x40\x9b\xb6\xfd\xe2\xac\x3a\xaa\x5f\x60\x63\x2b\x7d\xf1\xfd\xfe\x4c\x95\x3c\xd1\x5b\xb4\x90\x23\x55\xab\xd6\x2a\x1f\x7c\xd0\xe6\xad\xba\x5b\x93\xdb\x5b\xe5\xa7\x99\xeb\xba\xd4\xa7\x6f\xb8\xca\xc9\xbc\x02\xb9\xbf\x5c\x3d\x47\x52\xf8\x4b\x2c\x21\x5b\x3c\x8b\xbe\x48\xe3\x3f\x8e\x85\x3b\x85\x39\xe1\xf8\xc6\x05\x81\x3a\x91\xd4\x49\xcd\xa3\x2b\xbe\xcc\x61\xfe\x98\xf9\x21\xbf\xb7\xed\x2a\x8f\xc8\x3f\x23\x92\x27\x47\xd0\x07\xe3\x3d\x9f\xed\xc4\x51\x36\x15\x9b\x2c\x1a\xe3\x67\xcb\x6d\x26\x3b\xb6\x87\x88\xd4\xf3\xd7\xce\xeb\xb9\xd9\x58\xe6\x95\x85\x30\xf2\xf5\xe1\x0a\xf9\xc0\x1f\x80\x93\x0e\x9d\xec\x0b\x8f\x3b\x71\x57\xa9\x71\xcd\x27\xab\x34\x8c\xae\x49\x0b\xf0\x0c\x43\xb5\x67\xed\xdc\xf1\xce\x83\x59\xad\x60\xc6\x13\x7e\x1d\x60\x36\x69\x78\x11\x30\x0e\x4f\x47\xba\x19\x67\x60\xce\xee\xde\x5b\x7e\x93\xe0\x3f\x4e\x43\xe0\x51\x40\xea\xf8\xc8\x84\x36\xe6\x90\x4e\xce\x81\x84\xaa\x9e\x41\x7d\x6a\xc0\x8e\x42\x61\xf3\xc1\x1c\x33\xed\xc5\xa5\x29\xea\x15\xc3\xcf\xcb\xb4\x3a\x71\xba\x49\xab\x00\xed\xaf\x9e\xc1\x1d\x67\x5a\xbe\x08\x32\xcf\x76\x1a\x6c\x66\x2c\xdf\x10\xd0\xa3\xa2\xce\x7f\x59\xbf\xf3\x87\xd1\xae\xec\xdd\x62\xd4\xa9\xea\x1c\xf9\x9e\x19\xd9\x58\x6f\xc3\x49\x12\xc4\x97\xcb\x9c\xdd\x58\xa8\x81\xa2\x0e\x5f\x27\x01\xc4\x12\xf2\xc3\x35\xf5\xc7\x15\x5d\x1a\x4a\x84\xb8\xfc\x32\x50\xd2\x08\x39\x32\xb0\xa8\x43\xcd\x89\xfa\xd4\xff\x0c\xfd\x40\xf1\x99\xa6\x43\xa5\xa0\x86\xf9\x9b\x18\x36\x14\x45\x9f\x65\xd1\x00\x42\x40\x8b\x0b\x06\xe8\xac\xdf\x41\x91\x39\x94\xdf\x87\xc3\x02\xe7\xe6\xc7\xb4\xe8\x79\x06\x5d\x00\xf5\x05\x48\xf1\x09\x07\x89\x03\x2d\x1c\xe0\x20\xdb\x62\xb6\xa8\x39\x0d\xd1\xf0\x4f\x1e\xf5\x19\x30\x0c\x75\x77\xa7\xac\x49\xe2\xc8\xf1\xa6\x02\x37\x4a\xa6\x78\x95\xc5\xab\x32\xaf\xf3\x5c\xca\x19\x56\x66\x3d\x6e\x56\x91\x56\x80\xab\xa4\xd0\x22\x23\x39\x93\xac\xd6\x76\x38\x78\x0a\xfb\xb6\x6d\x15\x0f\x14\x70\x41\x68\xf6\xd3\x13\xe8\x79\xe2\x91\x33\x82\xbb\x70\x51\x09\x0e\x25\xe4\xd0\x74\x5e\xaf\x91\xd8\x20\x7c\x83\xc2\x82\x5d\x9d\x59\x42\x38\x6a\x43\xd7\xac\x6e\xc4\x23\x07\x26\xcb\xc9\x87\x0b\xee\xfc\xbd\xf0\xca\xb4\x76\xac\xcb\x92\x50\xa1\x3e\x15\x96\x4f\x03\x7f\xa1\xa9\xa7\x04\x93\x93\xaf\x03\x89\x79\xb5\x55\x41\x74\x32\xd0\x5f\xb7\xe0\xfd\xee\xf1\xd1\xee\x03\x0b\xf2\x6e\x35\x33\x65\x2a\x83\x83\x31\xbb\x93\x93\x76\xf4\x15\xb0\xb4\xde\x28\x4b\x5f\x48\xb5\x76\x56\xcb\xca\x89\x33\x7d\x12\x07\x2c\xd5\xc6\x41\xb4\x43\xe0\x55\xc6\x8d\xd8\x82\x12\x94\x43\x75\x08\x99\xab\xc9\x74\x0e\xac\xf9\x69\xce\x2d\x5d\xb9\x60\xe6\x05\xce\xd6\xe9\xf9\x1b\xcc\x37\x84\x5d\x52\xe6\x0f\x0d\x21\x7a\x73\xb2\x4e\xfb\x96\x74\xa3\x04\x8a\x91\x26\xbe\xc5\xcc\x89\xcc\x84\x6b\x29\xbc\xce\x53\x4c\xa5\xcd\xf4\x9b\x0f\x84\xcc\xb9\xae\x79\x11\x37\x82\xaa\x24\xb4\xb0\xcf\xa5\x44\x4a\xae\x4e\x1f\xca\x64\xe5\xec\x22\x89\xd4\xf9\x7f\x39\x1c\xe9\x0a\xe6\x33\x31\x20\x49\xcd\x17\x97\x5a\x28\x5e\x28\x0d\x6c\x77\x36\x0d\x2f\xf5\x40\x8e\x59\x8a\x42\x8e\x5e\xde\xd8\xd9\x7d\xb0\x4f\x54\x7e\x39\x63\xbe\x63\xc2\xf2\x8e\x5d\xf9\x9a\x95\x7b\xe2\x29\xcb\xdd\x7d\xee\xb9\x44\x38\xed\x24\x13\x7b\x13\xfb\xf0\xde\x13\xc7\x79\x63\x96\x2c\x12\xca\xa4\x80\x7b\xf6\x74\x41\xba\x57\x33\x7a\x10\x48\x49\xba\xab\x6d\xc3\xf0\x44\xc6\x34\xdc\xa4\x55\x04\xfd\xda\x54\x33\x64\xa6\x0f\x49\xd2\x0e\x9d\xf3\x44\x92\x29\x0d\x12\x8c\xe0\x49\xdb\xac\x8d\x2e\x01\x64\xeb\x7e\xe9\x5b\x0c\x2d\xfb\x4b\x96\x5e\x32\x80\x5a\x63\x0c\x93\xda\x0a\xdd\x38\xfd\x83\x75\xbe\x2c\x59\xe9\xb4\x5e\x5c\xd9\x5f\xa6\xac\xd4\x81\xc1\x5f\xf8\x2b\xda\x17\x63\x4a\xa5\xda\x1c\x24\xa3\x5c\x32\x3a\x5a\x57\xe6\x0c\xd5\x62\xd4\x42\xa0\xed\x77\x3d\xd7\xda\x5b\x31\x27\x4e\x03\x9f\x59\x56\x7a\x34\x93\x1e\x3b\xb3\xfc\x28\x97\x66\x7a\x4e\xa7\xc4\x7f\xe0\x55\x81\xf3\x66\x28\x7f\x70\xd6\x99\xe0\x21\x78\xd7\x23\x83\x97\xe0\xb6\xcf\x4c\xa9\x3d\x23\x16\xc5\x8b\x54\xe5\x68\x6e\x05\xd3\x62\x8b\xe4\x61\xcb\xb3\x22\xd6\xc5\x2c\xcc\x54\xe2\x5c\x6f\xd4\x21\x82\xf0\x40\x40\x73\x4e\x25\xa6\xd6\x18\x7c\x0a\x95\xc7\xe7\x74\xe8\xe4\x58\x6a\xbb\x09\x6a\x1b\xb3\xd3\x09\xbf\x51\x6f\x35\xba\xfd\x8a\x9d\x1a\x98\xb9\xb3\xed\x6f\x8f\x65\x46\x03\x29\x19\x6f\x10\xf9\xf4\x81\x90\x20\xeb\x39\xcb\xb7\xcf\x3a\xe1\x68\x2a\x27\x63\x4a\xe5\xf5\xe5\xad\x8f\x98\xbc\x5b\xce\xd9\x7b\x12\xc8\x84\x06\x4e\x66\xa5\x6e\x7a\x99\x5d\x38\x46\x11\xbf\x2f\xea\xa7\x1b\x7c\x92\xba\x31\xca\x76\xed\x0c\xff\x67\x40\xd4\x4a\x3a\xb1\x59\xcc\xef\xd5\xb6\x4e\x75\xda\x3a\xa2\x64\xea\xe6\x68\x48\xac\xa2\xf0\xf6\x6f\x0a\xa1\xf8\xbf\xbb\x74\xbc\x4d\x90\xc6\x60\x84\x84\x52\xcc\x8d\xbf\x52\xf4\xf7\x69\xc1\x3a\x7c\x4e\xdb\x5f\x50\x22\xa0\xa2\xfd\x88\x42\x40\xb0\xb9\xb4\xc8\x20\x6d\x60\x61\x9e\xf5\x8b\xa2\x3a\x4d\xfd\x0b\x8b\xd0\x02\x12\x09\x63\x32\xcb\xc5\xa8\x3c\xc8\x15\xa6\xfd\xd8\x93\xb4\x96\x55\x08\x8f\x4f\x8d\x53\x02\x92\x5c\x9d\x81\x00\x25\x61\x5c\x41\x05\xba\x70\xe7\xf4\x0c\xe4\xf8\xea\x84\xaf\xf2\xb1\xbd\x65\xc6\x5c\xe6\xc8\x41\x92\xac\xa9\xa9\x9b\x2e\xcc\xb0\x7b\xa7\xd6\xeb\xac\x77\x86\xc7\xbf\x7e\x3c\x64\x58\x49\x68\xc1\xfd\x52\x4e\xbd\x67\x6b\x1a\x76\xe0\xe6\x6f\xdc\x7b\x6e\xa6\xd4\x9c\xa2\x7d\x8d\xd7\xee\x1e\x48\x7c\x65\xac\x69\x56\x95\x57\xa9\xa1\xd8\x1c\xc7\x3f\xa1\xcc\x1c\x23\xcd\x28\x4b\x3a\xb4\xb9\x07\x6d\x1d\x60\x11\xef\x26\xe6\x4c\xfe\x78\x5e\x46\xae\x92\x01\x2b\x27\xa5\xdd\x03\x99\xeb\x1e\xc6\xd8\x9c\x5a\xe6\x85\x89\xb2\x94\xc5\x8f\x1a\x1e\x31\x3f\x5e\xeb\x07\x45\x0e\x04\xa6\x28\xa0\xdd\x9d\x1e\xf8\x44\xe0\xa9\xc8\x75\xe4\x89\x16\xf2\x36\xaf\xe1\x54\xc2\x98\xef\xfb\x90\x13\xed\xc1\xa1\x4c\x53\x8e\xbb\x36\x4f\xb1\x61\x6d\xef\xda\x64\xeb\x07\xca\x99\x0e\x79\xc7\x32\xf8\xd0\xfa\x99\x7c\x92\x5e\xd8\x53\x12\xde\x4b\xf0\xa4\xbd\x7d\x2a\x8c\x32\x4c\x2f\xc5\x98\x04\x29\x19\xcf\x00\x68\x08\x7e\xf7\x9b\xc2\xf2\x5c\x31\xed\xc9\x20\x0d\x44\xb9\xcc\x85\x8c\xf7\xe8\x24\xa6\x18\xd5\x31\x93\x47\x2f\xce\x95\x6f\xa9\x80\x30\x03\x5e\x0c\xea\xdb\xfa\x87\xfb\x5f\x7c\x71\x2c\xc1\xad\x0c\x7c\xab\xfc\x60\xfe\xdc\xb7\x07\x06\x2a\x7a\xf0\x7c\x94\xa6\xc6\x27\xec\x75\x1c\x73\x76\x15\x83\x6a\x28\x1f\x71\xe0\xab\x52\xab\x89\x7a\x4c\x3e\xd1\xcd\x36\xff\x8e\xba\x99\xbf\x88\x09\xf8\x1c\x3b\x08\x73\x32\x83\x14\xc5\x8b\x60\xf8\xb1\x85\x57\x8b\x60\xfd\x54\x79\x50\xf7\x67\xa8\x01\x65\x65\x30\x16\x87\xf7\x0c\x11\xed\xf4\x30\x30\xea\x7d\x2f\xc7\x94\xbc\x8d\x3b\x68\x5b\x74\x47\xf9\x44\xbb\x35\xd6\x5e\x45\xbf\xc6\x23\xe3\x68\xf7\xc8\x8d\x3a\x66\x3f\x09\xfb\x05\x75\x33\x7a\x30\xef\xda\x8e\xef\x24\xea\x54\xa8\xa8\x9e\x5e\x54\xcf\x41\x68\x7a\x05\x12\x97\x09\x97\x78\x0a\xe8\x49\x7b\x0f\x81\xdd\x35\x1b\xa6\xe8\xce\xdd\xc0\x8c\x8b\xf8\x27\xe4\x72\xc2\xfc\x19\xa5\x4b\x0a\x80\x9b\x7a\x8e\x6f\x20\x6c\xd6\xa2\x3c\xba\x9e\xd5\x4e\x6c\xb2\x8c\x9d\x10\x66\xa8\xa7\x4d\x7f\x2a\xcc\x7e\xd0\x55\xca\x8f\x87\x57\xf3\xda\x5f\x9f\x04\x3f\x07\x96\x76\x1e\x3b\x28\x41\x80\x19\x85\xa8\xcd\xba\xda\x52\xc3\x5e\xff\x20\x33\xb7\x3d\x36\xd2\x36\x3d\x32\xe6\x6e\xeb\x7e\x7d\x63\xaf\xbd\x15\x07\x90\x4f\x37\x93\x58\x0c\x86\x95\xe0\x64\xba\xac\x01\x4a\x19\xd6\x7c\x8f\xde\x4c\x50\x9c\xde\x9d\x7e\x0f\xcd\x85\xa9\xfa\xf1\x38\x9a\x2b\x51\x44\xec\xf4\xe0\x5c\xaf\xd4\xe6\xd2\xad\x0b\xc3\xad\x53\xc3\x17\x5c\xa7\x3d\xf7\x55\xd9\x76\xcc\x0d\x4d\xe4\x85\x9a\x1e\x63\x22\x61\xfb\xab\x4b\x3b\xcf\x41\xae\x1c\x16\x3d\xd4\xa8\xc4\x9a\xa9\x94\xb9\xd6\x6b\x81\x01\x4a\x84\x4e\x80\x70\x9b\xe8\x4d\x25\x41\x52\x60\xd1\xd9\x88\x3b\xd8\xf9\x28\x13\xfb\xbd\x87\x35\xc3\x10\x57\x9a\xbd\xdb\x3d\xb5\x08\x8b\x86\x59\x20\x9d\x67\x2d\xe4\x5e\x08\x76\x34\x81\xd0\x58\x7f\xae\xd9\x89\xfa\x85\x4a\xd8\x40\xee\xd7\x3d\xf8\x63\xc7\x33\xc5\xea\xfc\xec\x7d\xca\x2a\x29\x12\x08\x75\x92\xd6\xca\xff\x62\x1b\xbc\x54\xb9\x13\x46\x9a\x1b\x27\xd3\x7c\xb9\x4e\x33\x97\xc1\xb9\xe6\x45\xdf\xde\x00\xb2\xce\x39\x89\xbb\xda\xaa\x29\x31\x90\xd0\x21\x12\x47\xdb\x1a\xbd\xf7\x6b\x38\x92\xad\x36\x94\x44\xef\x0a\x7e\x48\xaf\xb8\xbd\x47\x70\xc0\x04\x25\xa8\x46\x7a\x33\xee\x32\xc1\xc4\x4d\x1a\xdf\x4a\xa2\x61\x5a\xde\xd6\x3f\xab\x63\x8d\xe0\x6e\x30\x9e\x29\x3f\x8b\x68\xe1\x04\x4e\x17\x80\xc0\x75\x9e\xcf\x1f\x9a\x05\xb2\x1d\xfe\x0b\x6d\x33\x1f\x48\x8e\x7e\xb2\xc1\x1f\xdb\xca\x31\x72\x44\xfc\x27\xbd\xac\xd6\xd7\x31\xfb\x9e\xe0\xc7\xd5\x7f\x91\x4b\x72\x9d\x74\x9b\x73\x01\x4a\xd4\x4a\x0f\x73\xbe\xa3\xd9\xf6\xb3\xa6\x7f\xbe\xd6\xb8\x55\xd7\x05\xcc\xcf\xcd\xf5\x05\x10\x9e\x32\xb4\xf5\x14\x72\x5e\xa0\x2b\x68\x4e\x7a\x67\x96\xb1\x6c\x30\x27\x5c\x1c\x2f\x65\x91\xdb\x74\x58\xd4\x90\xd3\x76\x9d\x6c\x20\xc9\x6a\xe7\x63\x6d\x7d\x21\x51\xd6\x1d\xcf\xbc\x8e\xe3\x74\x23\xd4\xe6\x7a\x88\xb6\x23\x5d\x16\xdb\xd5\xda\x1f\xa1\x1f\xcf\x95\xd7\xde\x4f\x9c\xd1\xd7\x87\x6a\x45\xe1\x3a\x93\x23\x09\xf7\x36\x81\x6e\x3a\x3c\x91\x4e\xe7\x10\xcd\xd1\x75\xc7\x69\xb1\xa6\x8d\xe1\x18\xc9\x7b\x85\x7a\xde\x18\x0f\xb5\xd7\x31\xca\x9e\xa4\xea\xfe\xe3\xa3\xeb\x55\x56\xc9\xf2\x6c\xfd\x0c\x2b\xd1\x61\xc2\x4e\xf0\xc2\x57\xab\xe4\x8d\xc9\x68\xbb\xcb\x29\x4f\xa7\x32\x79\x6d\x45\x6c\xd9\xa4\xaf\x41\xd6\xd5\x37\x1f\xa4\xa5\xab\x59\x51\x70\xf0\x15\xf6\x06\xb1\x66\x42\xac\x8a\x3c\x38\x8a\x9f\x85\xbb\x3b\x02\xc6\x1f\x05\x8f\xe5\xf4\x96\xf8\x27\x67\x4b\x52\x35\x6e\x99\xf6\xcc\x06\xe6\xbd\x0b\xc1\x54\x40\x09\xae\x6e\xbc\x2a\xb6\x17\x83\x21\x3d\x16\x61\x35\x7f\x89\x9e\xac\xa2\xa1\x83\x88\xb0\x5a\x7e\x43\x57\x97\xd1\x50\x5e\x44\x58\x2d\x58\x66\xa7\x6a\xe8\xfc\x4e\x80\xc5\xb1\x10\xbd\x71\x34\xff\x4f\x12\x06\xc1\x49\x40\x15\xf9\xe8\x53\xd2\x12\xfa\xc0\xfb\x7d\xf2\x58\x68\x2f\xed\x3e\xdc\x2c\x62\x96\xe3\xe7\xf3\x38\x39\xb5\xc9\xf4\xee\x2d\x3a\x47\x7c\x05\x57\x05\x91\x92\x29\xdd\xde\x62\xdf\x1f\xfb\x41\xc7\xea\xf8\x35\x47\x93\xde\x3c\x2a\xd9\x95\xdb\xda\x3a\xc4\x9f\xa3\x06\x21\x14\x5d\x67\x6a\x7e\xab\x4f\x07\xdf\x26\xff\x8b\x55\x87\x4e\xeb\xa2\xb9\x38\xd7\xdb\x20\xae\xf8\x94\xe5\x87\x13\x67\xf1\x0c\x5d\x07\x2d\x57\x1a\x57\x7f\x28\x57\xec\x87\x4e\x49\xbc\x33\xba\xc3\x1a\x4e\xd2\xc6\x0e\x67\x72\xe3\x9e\x33\x7c\xb7\x92\x6d\x0d\xf2\x6d\x8d\xa0\x27\x3d\x5b\x6e\x94\xed\x9e\xac\x4d\x2c\x3f\xe6\x8c\x24\xb0\x08\xd1\x48\x44\xae\x93\x44\xb2\x2d\xae\xdb\x4f\x18\x3f\x35\x75\x08\x58\xad\x5d\xcb\x93\xec\x14\xd3\x33\xfa\x12\x1f\x37\xf9\x3e\xab\x17\x2a\xe6\x87\x77\x80\x01\x67\x3f\x9a\xa8\x95\x2a\x21\x92\xe9\xf8\xfa\x4a\x79\x54\xa2\x40\x0b\x55\xb3\x67\xce\xd3\x7a\xc5\xd1\x49\xf1\xba\x95\xcf\x5f\x17\xa4\x06\x85\x37\xd2\x26\xf2\x5c\x74\x8c\x10\x7f\xf0\x48\x2e\x1f\x59\xf1\x5a\xe6\x28\x34\x59\x27\xeb\x64\xc2\x0c\xd7\x54\x87\x0d\x91\x46\xb8\xd2\x73\xbc\x2d\xec\x71\x79\xba\x61\xad\x12\x37\x1b\xd3\x0d\x5b\x8d\x84\x36\x37\x4b\x26\xc3\x4a\x88\x2f\x24\xe0\xb1\x63\x2f\xc3\xd4\x78\x8c\x10\xf7\xbd\x5b\x17\xc4\x01\xa1\x80\xe1\xb6\x8f\x0e\x3b\x7f\xf7\xc4\xaa\xa2\x7a\x31\x1a\x46\x76\xf8\xa7\x5d\x47\x84\x27\xda\x8f\xea\x51\xaf\x42\x53\x4f\xc2\x03\xfb\x89\x0e\x95\xe5\xbb\xed\xe9\xfd\xd0\x86\x24\xd0\x01\x13\x79\x99\x28\xde\x13\xf0\x54\x53\x93\xfc\x2d\x18\x1e\x3b\x96\x68\xc5\xb1\x7a\xbe\xcc\x11\x54\x9a\xc8\x25\x44\xe1\xa3\xd7\x74\x73\x04\xa0\x88\x22\x89\x89\x3d\xea\x67\x77\x55\x12\x81\x75\x44\x3f\x62\xa1\x18\x24\x1a\x1e\x5a\x16\x72\xfc\x39\xe8\xf7\x47\xbc\xce\xeb\x3c\x99\x8c\x26\xfc\xc3\x91\x61\x3c\xc5\x76\x35\x9f\x93\x30\xd1\x5d\x19\x66\x25\x53\x17\xf2\x89\x08\x9e\x61\x1f\x7f\x6e\x2a\xf1\xd7\xeb\xd8\x8a\x9d\x9d\x1d\xb3\x6f\xd0\xbc\x62\xda\xce\xfd\x82\x38\x70\x4a\x39\x9f\xc1\x82\xd8\xe2\xa0\x9a\xc2\x27\x98\x2d\x73\xce\x40\x86\x72\xd0\xf0\xeb\x84\x85\xbc\xa9\x54\xb0\xba\xa5\x41\x58\x81\xa4\x06\x49\x0c\xd1\x5c\x38\x6d\x5d\x7b\x83\x4f\x66\x0b\x95\x60\x23\x1c\xca\xd6\x13\x58\xb3\x54\x5e\x66\xba\x19\x35\xf7\xd4\x27\x27\x1b\xd9\xec\xc4\xec\xd0\x18\x16\xf8\x57\xca\x32\xcf\xb7\x20\x76\xc5\x73\x45\xe2\x5c\x7f\x9e\xed\x88\x51\x18\x73\xb5\x9e\x28\x99\xcb\x90\x40\x41\xe8\x14\x6a\x52\x14\x1e\x2a\x5a\xe8\xfc\x19\xb0\xe5\x61\x91\x88\xcc\xb3\xe8\x1c\x53\x6c\x01\xd1\x96\xa2\x52\x8c\x5b\xcb\xdc\x9c\x64\xbc\x2a\x29\x9d\xc9\xa9\xbb\x9c\xc0\x0c\x50\xe4\xc2\xa2\xc4\xbd\x48\x74\x18\xa3\x6f\xfd\xbc\x35\x9c\xf4\x38\x89\xc9\x2e\x84\xc2\x5d\xc0\x68\xcb\x5c\x73\xe0\xd0\x86\xd8\x8b\xe1\x0b\xda\x03\x10\xe6\xd7\x3f\x18\xf5\x56\x73\xf1\xd8\xe8\x68\x2d\x55\x83\x27\x89\x23\x45\xf6\x67\xf2\x89\xba\x6d\x5d\xf4\xc4\x32\x4e\x6a\x57\x6c\x19\xf6\x72\x6d\xa9\x5a\xcd\xe3\x12\x97\xa3\xc3\xc3\x23\x32\xe7\xf6\x42\x45\x18\x37\x35\x5e\x5e\x87\xa4\x03\x61\x34\x07\xda\x04\xc5\x77\x55\xa9\xed\x4b\xcb\x27\x67\x3f\x67\x65\x93\x7f\xc8\xdf\x13\x32\x31\x33\xce\xe6\xe7\xb8\xcc\xc7\xb8\x9b\x6f\x60\xd4\xd7\x6c\x4b\x7a\x50\x36\x5e\x97\x20\x88\x24\xf7\x24\x39\x4e\x8a\x90\x14\x8b\x57\x76\x67\x32\xf9\x48\x02\xcf\x8f\x93\xaf\xe6\x43\x52\xef\xdf\x9c\x61\x37\x46\x0e\xa1\x2f\xe3\xb9\xf1\x33\xf1\x5c\x38\xad\xfb\xad\x46\x84\x5c\xb9\x2f\x7a\x0c\x50\xcc\xef\x2f\x3f\xfd\xbd\xec\x1e\xe8\x07\xee\xa7\xe9\xf5\x7b\x78\xd6\xe3\xd3\xbc\xf7\x5d\xaf\x0f\xb3\xbe\xbb\x00\xf9\x89\xeb\x17\x2f\xb4\x17\x5e\x39\xfa\x40\x37\x63\xa3\x7f\xde\xa5\x0e\x1a\x47\x1b\x3c\x48\x17\x6f\x7e\x97\x46\x8a\xf2\x21\xcc\x36\x94\x3a\x86\x6a\x99\x2a\x9a\xaf\x4e\x62\xda\x6c\x4e\x79\xba\x89\xd7\xc3\x43\xc4\x63\x47\xa1\xdc\x64\x32\x5b\x64\x37\x86\x57\x34\x5d\xd3\x0a\xd1\x35\xc0\x34\x69\xcd\x32\xa9\xa6\xc1\x2a\x1a\x80\xdd\x68\xd1\xef\xfb\x70\xb9\x1c\x2a\x82\x1d\x1e\x39\xdb\xce\xd6\xf9\x6d\x59\x6d\xd8\xb7\x8a\x1e\xb7\x6b\x68\x22\x12\xc9\x8b\xc5\x8a\xa3\x57\xde\x0b\x21\xf9\xa8\x41\xf0\x8a\x61\x6e\xfa\xd9\x4a\xae\x7c\xeb\x56\xd7\x4e\xb8\x63\x7c\x87\x75\xaa\xdb\x1f\xef\x6a\x2b\xad\x27\xfa\x1d\xd3\xd0\x19\x37\xb4\x18\x15\x8e\xc8\x14\x0b\xb8\xe4\xd2\x28\x27\x74\x63\x6e\x56\x84\xe3\x64\x13\xaa\x1b\x55\x63\x9e\x0c\x8c\xea\xf7\x29\x90\x49\xe2\x95\xb5\xc0\xe3\x1b\x38\x28\x29\xf5\x4b\xdf\x0f\x19\xce\x96\x39\xdb\x55\x27\xd7\x1c\x18\xb4\x8f\xd5\xba\xc1\x1a\x6a\x84\xe6\x3f\x56\xd7\xa4\x40\x42\x92\x1d\x4f\xcf\x45\xe0\x10\x47\x0d\x19\x2c\xe0\x63\x43\xa4\x22\x51\x5b\x62\xb8\x24\xdf\xf5\x15\x39\x19\x74\x64\xd2\x86\x89\x3d\x94\xe4\x58\xa6\x20\xe0\x64\x4c\x83\x90\xea\x17\x4d\xff\xe5\xe9\xcd\x8b\x08\xb2\x82\x68\xdd\xe9\xb3\x7e\x88\xc9\xf8\xca\x6c\xa3\x63\x8e\x2e\x14\xe6\xcf\xd0\xb6\x9c\x74\xe8\x71\xd5\x0c\x3f\x59\x27\x7b\x12\x27\xde\x88\xea\x41\xe4\x63\x53\xf1\xfd\x56\x81\x4d\x18\xf6\x25\xa9\x6b\x44\x98\x0d\xac\x7b\xc6\xa6\xed\x18\x58\xe4\x3d\xde\x3a\xeb\xc6\x2a\x7c\xa4\xcd\xbc\x65\x22\xee\xee\xd1\xda\xe6\xe5\x7e\xc0\xe4\x4f\x76\x09\x3b\xaf\x47\x5f\x52\x1a\xcf\x9e\xfd\xf4\x5c\xbc\xd4\xdc\x47\x91\x24\x34\x3c\x14\xab\x89\x69\x65\xc5\x66\x33\x7f\xbd\xd2\xc6\x50\x68\xb4\x48\xb6\xfb\x62\x30\xd2\xe8\x36\xc4\x8e\x55\xba\xbe\x92\x18\xb7\x73\xfb\xc1\xb2\xb4\x4c\xd3\xa8\x9f\x1a\x97\xa8\x51\x1e\xf3\x7c\x5f\x50\xe6\xd1\xca\xe7\xdc\x33\xc5\x30\x9e\x7f\x99\xb9\xcb\xf6\x1b\x44\x1e\xad\xe6\xe2\x43\xbe\xd3\x04\x48\xef\xa1\xa1\x1c\xa2\xe9\xc6\x2c\x7f\x41\x31\x5e\x27\xdf\x4d\x34\x8b\x92\x1b\x8b\xe8\xe4\x02\xdb\x5d\x25\xed\x45\x4a\x35\x33\xce\xe8\x95\x82\x0d\x2b\xcd\xaa\x42\x50\x1f\xc9\x5e\x24\x52\xba\xc6\x52\x0a\x44\x42\x2b\xc9\x4d\x2d\xed\xb2\x09\xb1\x73\x02\xda\xe0\x62\x8c\x52\x0c\x88\x56\x46\x65\x50\x05\x9f\x3b\x37\x8b\xba\x82\xae\x49\xf9\x13\xab\x6f\x97\xdb\x6d\xb5\xc2\x5e\xac\xd4\x4d\xa5\x8a\xfd\x8a\x6b\xdf\x0c\xc5\x2b\x2b\x5f\x9b\x95\xa2\xa0\xc0\x5b\x39\x4b\x9e\x92\x11\xc6\x12\xd8\x57\xa4\x83\x52\xba\x03\x76\x0b\x10\x7f\xdb\xa7\xad\x17\x14\x3f\x66\xc8\x71\x32\xca\x05\x73\xaa\xe1\x9e\x7d\xbf\x58\x04\xb9\x40\x79\x9a\x66\xab\xb3\xaa\xba\xc2\xc9\xda\x16\xc5\x48\xca\x2f\x3d\xf7\x98\x9b\x1b\xfb\xca\xd6\xaf\x8c\x41\x7e\x20\xfe\xac\x30\x06\xd5\xcc\x9c\x08\xf5\x19\x78\x72\x61\xa1\x20\x47\x44\xbf\x76\xab\x6c\xbf\x00\x51\xac\xae\xe9\x5a\x5c\x5c\x91\x44\x2c\x68\x95\x69\xbf\x4a\xe2\x14\x19\x5d\x26\x28\x41\x2f\x8d\x22\x46\x62\xdc\x17\x13\x80\x61\xd1\xc6\x9a\xbe\x08\x0d\x0c\x88\xe9\x6d\x32\xa3\x6c\x5d\x82\xe5\x89\x78\x24\xec\xfb\x92\xe8\x45\x35\x78\xcd\xc3\x90\x31\x78\xb5\x93\x7b\x99\x90\xd7\x05\x01\xb9\xe1\x41\x85\x31\x3e\x5e\x32\x9f\xe0\xe6\x5f\x96\xc6\xc2\x42\x65\x9a\x3b\x62\x96\xa2\x7e\xf3\xd6\x83\x29\xc7\xce\x8c\x32\xb3\x6a\x80\x8b\xd0\x20\x0e\x95\x72\xf1\x38\x5d\x27\x87\x37\xda\xf3\xb0\x0d\xf5\x8b\x89\xc9\x20\x62\x8c\x43\xdf\x68\xc7\xfa\x54\xe6\xc5\x64\x97\x87\xee\x98\xb5\x0c\xfd\x29\x04\xa6\x2b\x0b\x92\x89\xc5\x07\x6d\x44\x29\xb2\xf5\xd5\x2e\x35\x87\x31\xd1\x2d\x14\x00\xae\xfc\x1b\xce\x7c\x59\x79\xf5\xf1\x92\xe0\x2a\x12\x01\xb1\xba\x6f\x8d\xda\xa4\x1c\xf2\x4c\x13\x20\xa4\x06\xdf\xf2\x34\x41\xe5\xa5\xb9\x3d\x02\x0a\xc4\xf1\xf6\x54\x83\x98\xb8\x40\x7c\xcc\x58\x24\xa6\x15\x69\x1a\x6e\x2e\x4b\xdc\x49\x7c\xee\x52\x84\x02\xa0\xf7\x40\xdf\x50\x82\x86\xfe\xe6\x40\x85\x91\xdc\x50\x8f\xe3\xbd\x1c\x2a\xb1\x96\x1b\x8a\x61\xb2\x97\xc3\xf5\x04\xb6\x6b\x40\x0c\xce\xdb\x9f\x8c\x0f\x95\x7f\xaf\xa3\x94\x97\xed\x3d\x49\x9a\x84\x09\xe0\x3d\x9b\x6c\x17\x9b\xc1\x01\xbb\x8e\x5b\xbc\xa9\xbc\xd7\x92\x22\xc4\x68\xec\x58\x30\x8f\x51\xd2\x9c\x08\x66\x01\xa7\xfb\xcb\x92\xdc\xe2\xed\x8e\x96\xf7\x63\xdc\x1e\x3c\x1d\x23\x39\x60\x7c\x63\x4f\x7d\x24\x6f\x01\x3e\x65\xa9\x58\x3c\x8c\x60\x2c\xfa\x6f\xbe\x90\x11\xa9\x5f\xb1\xe8\x4b\x89\x33\x0b\xe7\x0c\x8c\x8d\x8e\x83\x15\x70\x96\x7b\x59\x12\xb1\x05\x87\x95\xe1\x1e\x41\x6e\x5b\xed\x19\x39\xab\x4d\xdb\x08\x0d\xa9\x54\x28\x21\x22\xbe\xa8\x06\x3f\x5a\xb0\x5d\x03\x83\x69\x05\x45\xc4\x6d\xb2\x0b\xc4\x9e\xc2\x3e\xd5\x27\x96\x86\x99\xe5\x7b\x47\xc8\x74\x9d\x1a\xaf\x20\xaa\xd7\x2a\x11\x7e\xa6\xfc\xeb\x9a\x79\xb9\x95\xeb\x60\x89\x27\xab\x41\xfb\x3f\xd9\x98\x23\x01\xfc\xd4\x29\x02\xb7\x10\x6f\xc6\x28\x24\xe2\xf5\xe3\xc8\x89\xdb\x95\x4c\x9f\x8d\xd4\xfc\x76\x59\x4f\x31\x6f\x1d\xbc\x9c\xf3\x5f\x3c\xec\x2f\xc7\x90\xb8\x01\x4d\xca\x28\xb9\x80\xb4\x14\x57\x7f\xe8\xaf\xe8\x97\x91\x51\x91\x27\x5e\xea\x1b\x23\x30\xfa\x4d\x7c\x97\x33\x7d\x78\x37\x74\x91\xc9\x3c\x88\xce\x61\xfe\xd6\x40\xbe\xcc\xbb\x00\xcb\x48\x9d\x6c\x8f\x31\xc7\x3e\x81\xc0\x1e\x9f\x26\x20\x2e\x13\xd4\x6d\xf3\x76\xa2\x9a\x21\x2a\xe0\xf4\x29\x24\xf3\x7a\x9f\xdc\x6d\x72\xc7\xd8\x74\xbd\x85\xb4\x15\x28\x88\x3a\x1e\xb0\xb7\x83\x47\x88\x1c\x47\x87\x62\x65\x56\xa6\x77\xa2\x69\x24\x43\xbe\x4f\x31\xf4\xf8\x10\x20\x90\xd0\xdb\x63\xe7\x5a\xdc\x5a\xec\x3c\x47\x63\x3c\x7a\xac\xfe\x40\xb1\x3a\x03\xab\x4a\x2d\xc0\xd5\xc4\xdf\x5f\x60\xe8\xa9\x03\x38\x80\xa1\x99\x7e\x0e\x80\xda\x86\x88\x0c\xe4\x4d\x16\x8a\x09\xa7\xa9\x03\xe8\x29\x0d\x75\x45\x8d\xb4\xb3\x91\x02\x73\x59\x31\xf2\x8d\x8c\x42\xb5\xa3\x37\x16\xd7\x34\x77\xdf\x30\xeb\x47\x97\xd3\x35\x89\xc1\x7a\x8d\xc2\x05\x41\x30\x1f\xef\x7c\xd0\xa0\x96\x9f\x5b\xa7\xe4\x40\x9c\xc4\x56\xf7\xcf\xdc\x9f\xec\xfd\x9f\x51\xcd\x16\x71\x5e\x40\x57\x01\x9c\x72\x2d\x8e\xfd\xd2\x55\x8c\x9e\x4f\xed\xb7\x03\xd9\xfe\xc5\x24\x39\x27\xe7\xc8\x49\x42\x6a\x66\x60\x35\x0d\x9b\x22\x14\xd1\xa6\x0e\x59\x78\xc8\xf8\x5a\xef\xf4\x20\x81\x55\xee\x4f\x2f\x26\x38\x33\xdf\xdc\x2c\xc8\x38\xce\x0e\x6b\xac\x32\xe2\xfa\x1e\x26\xa7\xbe\x20\x27\x99\x3f\x9a\x65\x45\x76\x87\x24\xce\x19\xd5\x4c\x60\x8f\x42\x10\x89\x25\xb6\x3d\xb3\x54\x87\xbd\x66\x74\x46\x35\xe5\xaf\xbe\x38\x91\x2e\xc5\xcf\x1b\xbf\x3c\x31\x3d\x3e\x8e\x30\xcb\x47\xc6\x20\x08\x37\x02\x01\x7a\x40\x4a\x79\x96\xaf\x7e\xc2\xe5\x70\x29\x67\x1f\xd4\x2c\x67\xed\xd9\x59\x1b\x4c\x2e\x24\xb9\x2c\x1f\xab\x05\xf7\x20\x97\xc6\x2d\xde\x3c\xa0\x7f\x6b\x17\xce\xf9\xd2\xf9\x7b\xce\x7f\x79\xfc\x63\x2a\x30\xae\x32\xc6\x2f\x71\x31\xa7\xb5\xce\xe1\xf2\xbb\xc1\xab\xa2\x93\x12\xbf\x67\xc2\x0f\xeb\xba\x16\x81\x83\xe0\xe4\x4b\x16\xbe\x95\xf1\x4d\x26\xc0\x52\x3c\xe8\x0e\xe5\xc7\x37\x78\x43\xe6\x9e\x79\x5b\x4d\xf4\x96\xca\x9b\x0d\x23\xcd\xba\xf9\x00\x8e\xa3\xe7\x44\x18\x79\x61\xb9\xfe\xa9\x33\x5c\xae\xa7\x77\x66\x9e\x77\x72\xc8\x11\x46\x3c\x47\x9a\x57\x3e\xd9\xc4\xb8\xbf\xb7\x4d\x13\xb3\x5d\x0b\x5c\xb3\xa8\x4e\xf8\xd8\x1e\xb0\x73\xb1\x57\xdd\x8d\x64\x9d\x3c\xd3\xa1\xfb\xd2\x00\x83\x57\xe5\x00\xbc\x9d\x08\xaa\x30\x36\x34\xdf\xfe\x74\x07\xd5\xc8\xb4\xef\xd0\x76\xf0\xc8\xbb\x30\x3e\xd4\xaf\x0c\xcc\x04\x88\xef\xd0\x3b\x20\x04\x08\xbd\x93\x29\x66\xaf\x23\xaf\x2a\x09\xa2\x32\x3c\x02\xfb\x0e\x68\xfd\xcd\x20\xf7\x1f\x7e\x27\x42\x18\xc2\x77\xac\x0b\x92\x0f\xba\x6d\xa2\x48\x2f\xe2\x19\x9c\xbd\xd3\xec\xb7\x03\x90\xaf\xe1\x77\x71\x4d\xb0\x1d\x0f\xf0\x14\xc9\xd8\xf6\x6f\xee\x67\x0c\x13\x10\x1b\x43\x29\xcc\xb5\x36\x37\xdb\x23\xe5\x88\x42\xc6\x53\x90\xf8\x3e\x5f\x2d\x15\x5b\xcd\xc4\x4c\x7c\x52\xbe\x52\xcf\xf1\x90\xcb\xd1\x6c\x14\x51\x83\x7d\xee\x1c\x5c\x54\xbe\x48\x29\x0a\x9f\x39\x46\x61\xb1\xbb\x22\x5e\xe0\x62\xa6\x41\x3a\x91\xdd\xb3\x51\x34\xb1\xbb\x27\x20\xca\x3d\xbd\x73\x4f\x09\x0f\xa1\x03\x10\xc3\xf1\x27\x83\x1b\x19\x40\x02\x2e\x9a\xe8\xd9\x59\x26\x38\x7a\x0a\x8a\x2c\x69\x37\x15\x1a\xb2\xb5\xa3\xea\xfd\x33\x79\xd8\xc1\x3b\x8d\x81\xeb\x55\x7d\x70\x2f\xdf\x49\x9f\x0c\x01\xeb\xff\x0b\x78\x56\xf9\x78\xd6\xde\x69\x6c\xf8\x46\xbd\x5a\xc5\xea\x66\x9b\xff\xcb\xf9\x68\x58\xda\x63\x87\x98\xd4\xec\x1e\x2e\x62\x0c\xe8\xea\x42\x2a\xac\x7c\x26\xbf\xe2\x8f\x7c\x67\xab\xb7\x65\x2f\xca\x6b\xc8\x75\xbb\xfe\x76\x5c\x5f\x48\x87\xb6\x9e\x9e\x62\x82\xa0\x0c\x07\xfa\x64\xd9\x70\xe1\x47\x9b\xbe\x2f\xeb\x41\x9a\x7d\xf3\xc0\x08\xe3\xac\xac\x27\xec\xf7\x78\xc8\x9c\xae\xd5\x8b\xe1\xb9\x3b\xd6\x45\xf0\xdd\xd8\xe9\x0a\xcb\x21\x57\xb8\xdc\xdf\xe8\x04\x07\x80\x6a\xcc\xcc\x7b\xaa\xed\x9c\xd9\x5a\x49\x24\xdf\x7a\xbe\x7b\x4f\xde\x14\x70\xaf\x1e\x3b\xe7\x78\xa6\x12\xb0\x3d\xd7\xba\x98\x71\xde\x7b\xfd\xd3\xf5\xa0\xf5\xc9\x35\xfa\x6c\x32\xb8\x33\x4f\x8e\x0c\xe5\x3d\x01\x19\xf9\x40\xed\x13\x6a\x86\x6a\x23\x0c\x13\xf8\x47\x59\xbf\x54\x93\x6e\xa1\x3e\xf9\x26\xde\xac\x0e\xaf\xcd\x23\x83\xcf\x43\x42\xcf\xa9\xff\x7a\x4c\x1e\x75\x79\xb5\xf9\xdd\x6c\x7f\x53\x1f\x02\xef\x61\xbd\x61\x97\xa5\xee\x30\xc7\x4c\x54\x76\x82\xc0\x33\x96\xe2\x2c\x8c\x32\x0a\xe5\x73\x64\x54\x01\x72\xe7\x55\x7d\x45\xdd\x03\x95\x9c\xdd\x6c\x00\x31\xe0\xb7\x7a\xa2\x60\x58\x0f\x61\x2a\x68\x7b\x1f\x9a\x71\x1a\x69\x75\x55\xe3\x5c\xde\x1a\x16\xaa\x22\x4c\xfe\xba\xd0\xb4\x40\xf9\x54\x95\xd6\x58\xd9\x52\x55\x87\xbe\x46\x03\x67\xf6\x5d\x73\xe5\xc4\xdd\x17\x45\xc1\xce\x14\xb3\x35\xab\x56\x30\xdf\xcb\x58\xac\xd2\x16\x2f\xc6\xef\x75\xeb\xb5\xc6\x6b\xba\x7a\x85\x9d\x42\xf5\xbc\x27\x07\xd9\x83\xc0\x4a\xba\x78\x19\x1b\xa2\xcc\xe7\xdf\x1c\x09\xe6\x49\x7a\xf3\xee\x01\x80\xd2\x37\xfa\x8a\x91\xf5\x8d\x92\xd2\x59\xfe\x86\xce\x95\xed\x31\x74\xb4\xbf\xb6\x79\xaf\x88\xb7\xce\x9a\x5f\x7d\x81\xa1\x7c\xb4\x78\x6d\xe3\x5b\x04\xc0\x78\x02\x4a\x7d\x7a\xfc\x6c\xf3\xc8\xfe\x44\x9b\xd7\x56\x97\xfb\x86\x72\xf3\xd7\x63\x73\x64\x73\x71\xba\x76\xe5\x5b\x91\xe3\xb7\x26\x11\x8e\x8e\x60\x9f\x6f\x55\xb6\x7f\xb8\xbe\x6c\xeb\x3f\x07\x3c\x1c\x6a\xdb\x43\xf4\x21\x09\x4f\x65\x12\x71\x42\x0e\x93\xb6\x3d\x99\x4a\xdc\x5c\x9c\x1e\x60\x9e\xc4\x4c\x72\xb1\xe5\xad\x88\xe1\x64\x31\x4d\x68\x1d\xf7\x6f\xab\x77\xd1\xd1\xb9\x4b\x69\x06\xea\xc4\xa3\xea\x64\x8a\x95\x2a\x3b\x5e\x18\xd2\x8b\xcb\x18\xbf\x24\xb5\xb5\x78\x48\xb1\xef\x18\xc7\x55\xb8\xb3\x55\x60\x5d\x47\xb5\x6b\x43\xad\xea\x86\x82\xe6\xec\xf7\xb3\x03\x06\x9a\xb1\xfd\x4f\x98\xed\x51\x53\x85\x43\x95\xe2\x77\x93\x6f\x8f\x16\x0b\x67\x7e\xe1\x1f\x79\x47\x38\x50\xef\x99\x7b\x7b\x48\xae\xbf\x2e\x24\xf5\xfb\x17\xdf\x15\x36\xc5\x21\x16\x11\x7d\x08\x1c\x64\x34\x2c\x71\x1f\x3e\xe4\x60\x16\x80\x04\x6c\x6c\xb5\x55\x4d\x42\x52\x93\xb9\x50\x65\x02\x86\x32\xe6\x41\x8d\x31\x52\x84\xb9\xe2\x48\xfc\x71\xbc\xe1\x6c\x08\x42\x90\x51\xbf\xa6\xa6\x24\xd2\x57\xa3\x25\x89\xc7\x62\xe2\xb7\x68\x42\x89\xb2\xf9\x0e\xc3\x9a\x56\x1c\x40\x28\x3f\xfc\x1d\x1d\xb6\x7f\x46\xf7\x08\x9e\x41\x98\x51\x7d\x3c\x47\x44\xf4\x32\x1c\xc2\x1a\x3a\xac\x0f\x65\x40\x90\x66\xd4\x24\x22\x03\x8d\x17\x38\xe2\xbd\xf7\xc8\x8d\x46\xfa\x97\xa6\x99\x66\xf3\xeb\xb7\x35\x60\xbc\xea\x7b\xa9\x15\xc0\x82\x0c\x4b\xf4\xf5\x75\x76\xdc\x5c\xa6\xcf\x58\xe7\xb5\x2b\x98\x9f\xf2\x0c\x76\x08\x6a\x13\x85\xe0\xb6\x02\x5e\x34\x3d\xde\xcf\x30\x33\x4f\x93\x83\x28\xe0\xe9\xfa\xbe\xda\x30\x2d\x49\x87\x8d\x66\x4b\xd1\xf5\x52\xa0\x11\xc8\xc7\x6f\xb0\x9b\x82\x4f\xa8\xbc\xcd\x69\xe3\x32\x13\x06\xc2\x29\xd8\x86\x07\x14\xb3\x47\xf2\xc7\x9e\x0a\x58\x3c\xd1\x12\xc7\x98\x65\xc7\x6c\xe7\xea\x1a\x6d\xa3\xc5\x53\xcd\x5c\xa0\xe7\xf6\x87\x50\xcc\xdc\x21\x21\xfa\x6f\x78\xee\x24\xc3\x2b\x0c\x17\x89\x08\x83\x04\x3e\x64\x6c\xed\xc5\xe0\x2b\x8c\xe7\x9d\x62\x8a\x9b\x10\xe1\x4e\x49\x4d\x03\x16\xc3\x64\x54\x22\x2b\x18\x0e\x82\xc6\x8c\xb9\xb0\x18\x6f\x30\xed\xc5\x60\xc4\x18\x38\x39\xc1\xfe\xd7\xcf\xfc\x5c\x7c\x35\x20\xde\xa3\xf4\xbb\xd8\xa6\x28\xc7\xfa\x93\xa0\x8b\x92\xd8\x79\x0b\xf1\x6a\xa5\x71\x94\x19\x6d\x28\xb2\xec\xf7\x80\xe6\xd3\x3c\x5c\x47\x91\x09\x15\xde\x32\xd7\x07\xe9\xf1\x64\x54\x9e\x18\xf3\x50\x9c\x97\x30\xaf\xf4\xe8\x24\x88\xa7\xb6\x6e\xcf\xe5\x1f\x40\xa1\x0a\x02\xc4\x92\x21\x01\xd7\x58\x0c\xbf\xe3\xba\x95\x9f\x96\x96\x1c\x8d\xd3\x4e\xe9\x83\xc6\x19\x6b\xd5\xb3\xad\x78\x69\x6b\x69\x90\xf6\xde\xf3\x9c\x7f\xdd\x9d\xcd\xa8\xd1\x9b\x22\x30\x3f\xce\x5e\x32\xe5\xb6\x58\x46\xe7\x8d\x2c\x7b\x73\xc0\xe6\x72\x5f\x65\x10\x40\x56\xae\xfa\x15\x92\xc1\xf1\x92\x79\x9f\x67\x88\x92\x14\xfe\x1a\x13\x0c\xce\x4e\xca\x5f\xe7\x69\xf4\x08\x8e\x97\xfb\x77\x02\x71\xbd\x3b\x58\xda\xc8\x1c\x45\x44\x83\xa0\x5c\xa1\xad\x62\x31\x1a\x1e\x47\xa3\x92\x28\xb6\xa4\x10\x8d\x8a\x52\x73\xd7\xc0\x92\xaa\x54\xc5\xcb\xdd\xf4\x3c\x1b\x5c\xda\x89\x51\xfe\xf9\x91\x02\x32\x74\x54\x09\x83\x3b\x97\x9f\x0b\x60\x92\xd5\xdc\x5b\x1b\x07\xd9\x2c\xb0\xea\x41\x6b\xbe\xa3\x4b\xa3\xea\x62\x44\x6c\x23\xe3\x62\x38\xcd\x2c\x5d\x99\x69\x5c\xac\x9b\xb1\xfe\x7c\x6b\x43\x89\xd9\xe5\xd0\x78\x4c\x71\x7e\x72\x16\xdd\x0a\xd4\xce\x86\x3e\x7c\x8b\x7a\xcc\x8c\xbb\x0f\x42\x8a\xdc\xc3\xc9\x61\x9f\xe8\x62\xc4\xf7\x3f\x61\xdf\x10\xf0\x80\x87\x61\x0e\x67\x33\xbc\x30\xa0\xe8\x0e\xd2\xe3\x28\x09\x6a\xea\xdc\x22\x46\xb5\x41\x2a\xed\x7b\xdf\xa3\xcb\x64\xb4\x5d\xc5\x99\x2b\x58\x48\xe6\x94\x7a\xc0\x73\xff\xd9\xd6\xf7\x0b\xe5\x0b\x5a\xa9\x02\x53\xe9\xe2\x4c\x1d\x0f\xe0\x0e\x75\x3a\xa7\x99\xcb\x85\xe1\x29\xd2\xd2\xb2\xc0\xdd\x6e\xb8\x4a\x1c\x8e\x45\x42\x0f\x6e\x53\xbe\xf6\xec\x0f\xb4\x3e\xc4\xa6\xf1\x02\x13\x93\xfa\xc2\xcd\x09\x6d\xfd\x68\x2c\xf2\x52\xcd\xfb\xe7\xdd\xd2\x54\x8a\x7e\x7d\xe9\x39\x2c\x09\x90\x2f\x82\xa5\xa7\xbe\xe2\xfb\xb5\xaf\x2e\xee\x84\x02\xe1\xfd\xaa\x48\x80\x7e\x85\x21\xc5\xe0\x85\xcb\x60\xd2\xd7\x02\x45\xf9\xbb\x0f\xbc\x18\x78\x19\xfb\x14\xf8\x14\x4f\xf9\xdb\x96\x20\xdb\x1b\x6d\x04\x77\x01\x49\xb0\x6c\xea\xa7\xb4\xd1\x91\x55\x7a\x9d\x7a\xf6\x6b\x2a\xbd\x2a\x7c\x6d\xe5\x99\xca\x02\x2a\x0b\x2e\x3f\xfd\xf5\xf7\x7e\xe5\xfc\xbe\x0d\xc8\xe5\x63\xeb\xf8\xb9\xc0\x02\x68\x70\xd7\xd3\x3f\x65\xcd\x59\x97\x5d\xb9\x2a\x48\x7c\xcc\x9b\x31\xcf\xf4\x91\xf9\xc8\x65\x3f\xa9\x56\x3b\x09\xd8\xa7\x09\x0e\x32\x11\x9a\x50\x51\x56\x88\xbc\x92\x6c\x57\x36\x6d\x1c\x35\x4f\x11\xa4\x33\x1b\x27\x03\xdb\x5e\xfd\xa2\xab\x1c\x78\x13\x12\xe0\x2c\xa8\xd2\xb9\x1b\xb3\x61\x29\x54\xec\x99\xf3\xa5\x65\x55\xfb\xae\x73\x31\x30\xab\xdb\xd9\x16\x84\x66\x74\x39\x17\x13\x80\xfc\x80\xc3\xfe\x1c\xfc\x54\xbb\xae\x7b\xd2\x21\xb0\x8a\x4c\xc0\xa7\xd1\x40\xef\x4f\x4c\x8e\x97\xd5\x74\xc7\xbd\x21\xc9\x0e\xfa\xb9\x5e\xe3\x4c\x21\x74\xad\xe6\x69\x20\xf6\xa4\x96\x5e\xb8\xf9\x3a\x43\x12\xf8\xcc\x52\xee\xd6\x09\x82\xbd\x99\xf0\x4b\x9c\xfd\x0d\x12\x3f\x32\x54\xc9\xea\x59\x78\xff\xdb\xa9\x46\x71\x23\x1d\x30\x85\x8a\xb0\x0a\x3c\xf2\xbd\x16\xaf\x68\xd1\xad\xce\xfa\x9a\xf5\xc3\x29\x99\x06\xf5\xae\x1b\x6b\x65\x73\xb9\x61\xbd\x54\x93\x6c\xd5\xf1\x0d\x78\x83\xb5\xaa\xc9\xff\x01\x39\xb4\xf1\xbd\xd2\x64\x8f\xc9\x25\x2b\xfe\xb3\x62\x38\x58\xfd\x5a\xca\x20\xeb\xc8\x3b\x67\x9d\x03\x76\x38\x0c\x6e\x17\x37\x93\xcf\xbb\xd4\xd8\x61\x93\x80\x26\xbd\x5e\x1c\x8a\xc1\xd4\x6f\x9c\x62\x7b\x77\x09\x4f\x4f\xe1\x03\xfb\x15\x37\xbf\x6a\xcf\xaf\xb7\xd8\xb2\xce\x9e\xc0\x05\xc3\x2c\xe9\x7e\xa2\xf3\x57\x59\x16\xbe\xf0\xd8\xbb\x71\xc3\x8e\x7a\x9d\x1b\xb0\x8e\xb3\x56\x6f\xce\xbb\xe9\x67\xc6\x27\x35\xc2\x8d\xf7\x28\xab\xea\x22\xd5\xa5\x0c\xc3\x0a\xfe\x41\x96\xd3\x83\x06\x5b\x9d\x3a\x94\xd3\x50\xbf\xf1\x7c\xb9\xd3\x92\x2b\x3e\xa4\xf2\x23\xd1\x06\x32\x3f\x24\x4d\x6e\x64\xbd\x75\xea\xc0\xa8\x65\xd1\x53\x9f\x4a\x25\x9f\x8c\xad\xfe\x12\x65\xd8\x9e\x7e\x9d\xfd\x55\x9f\x71\x97\xd5\xf1\x18\x9a\x0a\xbc\xde\xb3\xd9\xd2\x88\x7a\xd9\x05\x52\x6e\xe0\xd0\xbf\x2c\x37\x84\x05\x8b\xcb\xb1\xe8\xf7\x12\xb5\xf7\xd1\xc5\xc5\x3e\x60\x17\xc5\x15\x06\x0a\xcd\x2f\xeb\x75\x46\x12\x67\x87\x87\x13\x4f\x67\x29\x50\xe7\x95\x4a\xf4\x85\x5c\x29\x58\x1b\xbf\x04\x6b\x20\x56\x46\x22\xf1\xe8\x03\x5c\x74\xf6\xd7\xd8\xca\x72\xd2\x02\x23\xf2\xd8\x77\x45\x5d\xb3\x73\x1a\xac\x3a\x59\xa0\x23\x6e\x87\x9a\x38\xc1\x80\x0b\x4c\x6d\x22\x36\x44\x1b\x8b\xda\x0a\x8e\x1c\x56\x00\x1b\xc4\xa1\xae\x48\x60\x51\x20\xe0\xaf\xa2\xaa\xe0\xa8\xd2\xaf\xee\xad\x51\x17\x6b\x47\x0c\xd3\xff\x5d\x01\xf2\x3c\x32\x92\x4e\x88\x3f\x9d\x91\xa4\xe0\x55\x0d\xe7\xd0\x26\xe4\x19\xf2\x7c\x86\x61\x95\xb9\xbd\x02\x5f\x47\xdc\x8f\xb1\x7d\x9b\x64\x69\x9f\x21\x90\x3a\x60\xc8\xbe\x05\xe5\x85\xd1\xc1\x1b\xa1\xf8\xf5\x5b\x04\xed\x5c\x2c\x59\xa9\xc4\x5d\x4a\xb3\xba\xfe\x19\xe9\xcf\xb9\xdf\x90\x88\xac\xc4\xc3\xac\x7e\xbb\xb6\x97\x4f\x10\x11\x93\x9e\x1c\xde\x41\x25\x3e\x9d\x0b\xb6\xf1\x99\x04\x5d\xd5\xe4\x13\x32\x50\x99\x6c\x35\x70\xb8\xe0\x4f\x93\xc3\xd1\x90\x08\xf6\x81\x5b\xca\x80\x34\x4f\x40\x9f\xc2\xa1\x11\x2c\x00\xc7\x00\xd2\xac\x8a\x87\x83\x2d\x83\x2c\x19\x99\x34\xbd\x1d\xec\x58\x37\x9f\x2d\x23\x3f\x90\x33\x92\xb8\x04\x7f\x7b\x1e\x1f\x8b\xfd\xa9\x16\x4d\xce\x87\xdf\x43\xbf\x8d\x31\xce\x38\xa3\x15\x61\xbd\xaf\x1e\x59\x29\xb3\x4d\xbf\x22\x6b\xea\x13\xad\x61\xe6\x5f\x3d\x34\xa7\x4a\x71\x4d\x85\xe5\x3f\xa2\xcc\x6e\x68\x36\x8e\x6b\x8a\x1d\xc9\x9c\x98\x10\x9d\x50\xff\x1a\x20\x10\x09\x9a\x32\xa0\x3b\x89\x33\x0c\xb3\x67\x82\x34\x01\x1e\xd5\x8d\x5a\xd0\xa6\xd3\xa9\xa7\x47\x5a\xec\x6b\x28\x6d\x8d\x0c\x70\xb6\x76\xab\xeb\xa6\x0c\x72\x69\x5a\x11\x46\xcd\x7d\x8a\xb8\x8b\x69\x3a\xc9\x2f\xeb\xfb\x9a\x10\x1d\x8c\x63\x7a\x50\x9f\xc5\x75\x56\xc5\x51\x39\x45\x8d\xd2\x26\x27\xcc\x2f\xec\x0b\x87\x91\x76\xe5\x9c\xf2\xad\xf9\x04\x3c\x80\x32\x86\xdf\xf4\xdb\x8a\xde\xf6\x8c\x16\x85\xe9\x59\x51\x29\x82\x6a\x2e\x1a\xcd\xf8\x48\x4e\xac\xfb\xa2\xda\x17\x31\x31\x99\x73\xcd\xd5\xca\x97\xad\xe9\x92\xe7\xd8\x8b\xe0\x7b\xe6\x0d\x9d\xa5\x27\x7c\xad\x6b\x83\xaa\x6c\x54\xab\x25\xef\x31\xf2\xea\xaa\x8b\x1d\x43\xa5\xcf\xdd\x67\xf6\x51\x55\x4a\x5b\xee\x27\xf2\xc4\x55\xfa\xd8\x94\xfb\xcc\x9d\x97\xd6\xb6\x7b\xbf\x38\x31\xe9\x20\x1f\x8a\x8d\x72\xa5\x6e\x9a\xef\xe2\x9a\xd2\xb9\x85\x12\xcd\x7d\x1d\xba\xce\x0a\x05\x3a\x13\x11\x00\x2c\xc4\xd0\xb9\xdc\xf7\x36\x1a\x58\x37\xa4\x9f\xae\xef\xac\x66\xac\xc1\x1a\x65\x9b\x27\x05\x0d\x07\x4e\x4d\x19\xa1\x15\x32\x70\x7c\x82\x34\xd9\xf4\x70\x36\x05\x90\xb6\x02\x56\x6e\xeb\x93\x81\x70\x26\x53\x3d\xc8\x5b\x2d\x20\xdf\x9e\xf1\xe0\xbf\x7e\x9d\x4e\x6a\xc6\x49\x9e\xb0\x9c\x59\xf5\x2f\x63\x60\x59\x41\x71\x36\x9a\x2d\xfd\x8b\x59\xae\x33\x30\x23\x56\x7e\x1a\x68\x07\x73\x86\xfe\x45\x50\x54\x3b\xa1\x75\x1d\x97\xf0\x62\x36\xd6\xf8\x86\x57\x44\x23\xc5\x07\x4e\x31\x6f\x3e\xc1\x19\xea\x29\xce\x98\xa9\xff\x43\x1b\x78\x34\x8c\x24\xb5\x2f\x6a\x08\x6c\x31\xf7\x0a\x79\x97\x2e\xd8\x2f\x9b\xad\xf2\x2c\x97\xee\xf2\x8d\x52\x72\xd7\xf9\xe3\x96\xd0\xf7\x5b\x59\x45\x2a\x47\x10\xd0\x95\xe2\x4b\x6d\x2f\xfd\x7c\x37\xfd\xc7\xee\xfc\x0b\xef\xfc\xdf\x53\x49\xb8\xea\x82\x53\xc6\x97\xb8\x71\xa6\x46\xd5\xd7\xe3\x8d\xb9\xf8\x8c\xa8\x36\xfd\xcc\x15\x05\x3a\x05\x63\xe6\xfa\x56\x73\x07\xc2\x0b\x40\xd8\xea\x77\x9a\x80\x2b\xda\x6b\xff\x31\x81\xc4\x63\xcd\x1c\xcf\xf5\x61\xc3\xad\xe2\xe9\xc9\xfe\xa4\xe1\x77\x1e\x30\x0b\x3a\x59\x35\xcd\x51\xb4\x22\x0a\xc0\x8a\xea\x9f\x2b\x16\x67\x22\x12\x25\x2a\x1e\xa3\x32\x1a\x01\xe9\x74\xcb\xf5\x9a\x60\x8d\x47\xa5\x90\xdd\xb4\xa5\x0d\xc0\x66\x3a\x68\x4e\x33\xec\x16\x33\xc6\x16\x5e\x05\x86\x7e\x3c\x50\x10\x03\x4d\xfa\xbf\x5a\x00\xcb\x04\x2a\x77\x82\xf9\xc6\xcf\xd6\xd2\x90\xf2\x49\x30\xa0\x16\x70\x21\x22\x60\x81\x50\x53\xe6\x02\x0b\x4c\xe8\x03\x15\x36\x0b\x0a\x36\xac\x4f\xdc\xd4\x13\x7b\x03\x26\xb8\xbc\xad\x60\x28\x89\x02\xdb\x85\x92\x13\x05\xbf\xb9\x4d\x71\x0b\xb4\x61\x50\xc8\x06\xcc\xd8\xd9\x3d\x50\x9b\xeb\x5a\x5f\x5d\xa3\xde\x70\x76\xf5\x57\x91\x7f\x7b\x6d\xaf\x68\x3a\x0d\xf5\x55\x0c\x75\x06\x2c\x0a\x41\xe9\x87\x6a\x39\xf4\x5e\xf7\xab\x2a\xef\xa5\xd5\x04\x37\x23\xed\xc0\x43\xaf\x66\xa5\x05\x9c\x5d\xb7\x11\x8c\x10\x14\x67\x72\x8b\x7b\x4e\x59\xbc\xb2\xb4\x20\x35\xac\x8f\x14\xc4\x1e\x24\xa0\x4f\x80\x08\x65\xfe\x0d\x47\x6e\xc5\xc6\x73\x98\xe1\x24\x8a\x8c\x5c\x06\xef\x69\xfb\x60\xe3\x44\xd6\xd8\xd9\xd1\xed\x3f\xb4\xdf\xbe\x05\x3b\xf2\x00\xea\xe8\x77\xdc\xcc\xeb\x35\x55\x82\x78\x6a\x7e\xee\xb4\xcc\xa6\xd6\xdc\xb5\x86\xaa\xa7\xf4\xd6\x9d\x9f\x3e\x87\x79\xd3\xa9\xdf\xf6\xe0\x29\x1c\xd2\x6f\x29\x6c\x2a\xde\xee\x91\x48\xf0\x2d\x1d\x96\x3b\xfb\xc8\xf4\x03\x03\x2b\xd9\x7c\x91\x18\xd2\x2b\x5b\xa5\x8a\x2d\xd9\xd8\x15\x5a\x47\xae\x13\x58\xf9\x66\x7e\x3c\x46\x89\x86\xc4\x5f\xce\xf4\xcc\x9d\xe1\x1c\xf7\xfd\x8e\x7f\x72\x1d\xbd\x66\x5e\x05\x10\x52\xcc\x05\xbe\x0d\xdf\x82\x8b\x34\x2f\x29\x2b\x8e\xd8\x31\x4c\x61\x31\x50\x15\x45\x76\x7e\x1a\x92\x3a\x2b\x4c\x3e\x8e\x12\x4d\xc6\x65\x95\x62\x37\x0f\x35\xa4\xb7\xd3\x5b\x09\xde\x48\x6f\x16\x7d\x70\x10\x03\x69\x38\x7f\xf1\x3b\x1d\x60\x7f\x94\x24\x90\x37\xbd\x98\x7e\xef\x59\x77\xa2\x34\xf7\xe5\x52\x79\x70\x06\x4a\x92\x73\x88\xa2\xaa\x03\x82\xbd\xe0\xc1\x87\x86\x02\x7d\xd8\x21\x2a\x59\x66\xd7\x7e\x91\xb0\xf1\xb0\xea\xa6\x57\xf9\x81\x5d\xb4\x54\x4b\x56\x18\xe0\x30\x46\x79\xf9\xda\x6c\x83\x1b\x89\x24\x22\x99\xcf\x5c\xd6\xf9\xc2\x41\x1a\xbb\x83\x45\x3f\xfe\xa2\xd4\x04\x57\x0d\x2c\xdd\x5b\x62\xf2\x12\x1e\x30\x71\xf9\xe6\x10\xd3\x2e\xfb\x7c\x97\xcc\x78\xb5\x5a\x1e\x8d\x2f\xca\xcb\x81\x04\xc1\x95\xff\x5d\x92\xf0\xd5\x50\x2a\x34\x1a\x03\x94\x24\x2a\x28\x93\x94\xc1\x89\x08\x19\x52\x37\xd1\x01\xb4\x4c\xa0\x26\xbe\xa2\xe0\x12\xe5\x60\x67\x6f\x10\x54\xdc\x91\x2e\x19\xa2\x24\x9c\x56\xcc\x87\x89\x68\x16\xb5\x55\xee\x4c\xf0\x48\x6e\xa8\x65\xbe\xfa\x69\x5f\xad\x22\x81\x93\xd8\x03\x6f\xdf\x81\x00\xfd\x16\xb7\x65\x2a\x6d\x62\xee\x9d\xe4\x44\x32\x9a\xa3\x96\x75\x7b\xf4\xf4\x1e\xdd\xb9\xd1\x88\x0d\xdf\xb6\x5c\x1b\x9f\xa8\x89\xef\xd8\xbf\xe8\xa9\xec\x84\xd9\xed\x5a\xa7\x44\xc7\xdc\x9a\xc6\xf4\x0a\x76\xe8\x7a\xfe\x0e\x31\x55\x6c\x87\x10\xe0\x52\x6c\x2d\x77\x6b\x32\x56\xf9\x78\xd9\xd5\x91\x3b\x9d\xd8\x80\x34\xfd\x30\x30\x85\x3d\xd4\x91\x78\x8f\x7e\xde\xbd\xda\xab\x03\x03\xd1\xd7\x0c\x6f\x32\x02\x52\xdb\x6d\x7f\xd4\x94\xb8\xd7\x3d\x7f\xde\xf4\x5f\x7f\x9d\xd1\x72\xd7\x1f\xfb\x96\x5a\x26\x96\xd7\x9f\x2f\x7f\x1b\xdf\xb8\xa7\x9d\xaf\xa1\xab\x28\xe7\xcd\x5b\xcd\xe1\x43\x7b\xe8\x25\x62\x5b\x66\x03\x85\x2e\xe1\xcc\x3c\x4e\x63\x30\x47\x32\xb8\xda\xbc\x6a\xab\xf7\x7e\x48\x92\xe5\x69\x44\x50\x9c\xc2\x63\x65\xde\x7f\x7c\x3a\x50\xdc\x37\x69\xc5\x2f\x71\x18\x97\xd5\xd7\x2d\xda\x8f\xa7\x1b\xcd\x7f\xfa\x5c\xec\x62\xd1\x37\x52\xf4\x3e\xaf\x5c\x6c\x24\x7d\xed\x56\x11\xb5\xf8\x82\xcb\xf7\xda\x86\x1f\x55\xf6\x9f\xc8\x1d\x2a\x42\x33\xfd\x6c\x94\x0e\x14\x52\x50\x66\xeb\x09\xd1\x64\x03\xaf\x27\x0e\xbe\xfa\xcd\x3c\x6a\xc6\xc1\x0e\x14\x45\xad\xec\xc2\xcb\x1f\x78\xfc\x0b\xf7\xb3\x7d\xc4\x36\x66\xad\x73\xd0\x17\x28\xc4\xb0\x53\xc8\xcb\x1b\xee\x65\x7e\x01\x34\x9e\x04\x55\xd8\xe0\xe8\x29\x11\xd3\x43\x31\xe5\x69\x8b\x73\x25\x43\xf5\xac\x72\xa3\x1a\x48\x22\xf7\x33\xd8\xe6\x0e\xda\xd8\x83\x1e\x29\x09\x94\x8b\x4c\x5b\xd8\xe8\xd3\xa9\x29\xcc\x6d\x6a\x0c\x14\xa5\x01\xe6\x03\x55\xed\x86\x1b\x03\xdb\xd9\x9c\x22\xfc\xfe\xc5\xd9\x49\x89\xa7\x52\x0b\xf0\xb7\xc6\x36\xcd\x57\x33\xae\x96\x6e\x50\xa5\xd7\xd1\x48\x8d\x87\xb5\xd5\xdf\x9b\x35\x51\x37\x73\x5c\xea\x40\xbf\x8e\x13\x53\x77\x95\xaf\xae\x52\x68\x14\xc6\x84\xf8\x65\x71\xea\xdc\x8d\x47\x30\x3f\xde\xbd\x7e\xfc\xd8\x91\x5a\x1b\x3e\xd5\x0e\xde\xd6\x02\x47\x4c\xee\xee\xe5\xdb\xd1\xc5\x63\x01\x5b\xc3\x64\xfd\x4e\x0a\x8d\x25\x43\x39\x8b\x58\xa5\x3c\xfa\x51\xed\xed\x5e\x69\xf9\xbb\xda\xef\x8b\x70\x2c\x55\x20\xc8\x91\x14\x17\x0b\x1f\x54\xc3\x89\xf6\x7e\x91\xed\x55\xae\x32\x17\x28\x27\x77\x7c\xd6\x2f\x9a\xab\x42\x33\x14\x00\xc2\xea\xb1\xd7\xe8\xe7\x4a\x08\x2c\xbb\x74\x0a\xea\x1e\xdc\xf1\xac\x57\x67\x4c\x4e\x24\xf2\x20\x5b\xc8\x56\xe3\xfc\x0e\x7c\xde\xbe\x99\x76\xc0\x68\x30\x58\x9d\x58\xfe\x0c\xe9\xec\x9a\xcf\xd0\x3c\xdb\x6a\x8e\x68\xe7\xf9\x9c\xb6\x19\x89\x6a\x30\xd0\xce\x7b\x72\x4c\x4e\x6d\xb3\xad\xe6\x5b\x5b\x4c\x1e\xf6\x33\x53\xb1\x24\x59\x08\x83\x11\xf7\xa5\xf1\xca\x88\x13\x7e\x0d\xdf\x87\xa5\x7f\x92\x91\x4b\x9e\xb0\xba\xad\xf1\x18\xdd\x21\xd5\x51\x45\x28\xd8\x8b\x9a\x93\x8b\xc3\xd9\x50\x3a\x26\x7f\x97\xf9\x7b\xaf\xc6\xbc\xd3\xac\x34\x73\xc5\x93\x89\x85\x57\x4c\x33\x41\x8c\x36\x85\x52\x0d\x11\x69\x76\x2d\x15\x37\x05\x53\x10\x3a\x9f\x4c\xb1\x33\xad\xb0\x65\x06\x9a\xf1\xee\xb9\x3d\x5e\xaa\x8b\x89\xaf\x19\xa2\xc5\xa6\x34\xcb\xb3\xbf\x34\x06\xc2\x4f\x43\xdf\xe9\x52\x7e\xdc\x90\x8c\x85\x4e\x4b\x30\x2b\x63\x24\x26\x33\x96\x4d\xb1\xfc\xd6\xe9\x75\x3c\x3a\xa5\x22\x15\x5a\x93\x94\xe8\x00\x2c\x9d\x8a\xc7\x6e\x32\x4e\x96\xc6\xd4\xce\x45\x47\x96\x10\xeb\xd1\x25\x57\xd5\xa9\x21\x60\x10\xdd\x03\x34\xd9\x89\xc2\x87\xfa\x1b\x0f\xba\x5f\xda\xce\x1c\x60\xd5\xea\x80\x7d\xb4\x2e\xf1\x4b\x71\xdf\xf4\xc5\x7e\x9b\x4a\xc7\x6b\xa6\xa7\x74\xb9\xca\x6b\xcd\xf6\x53\xc3\x79\x2a\xcb\x0d\xb3\xca\xfb\x29\xf7\x49\x8c\xf9\x6b\x24\x51\xee\x86\x8c\xde\xf6\x86\x72\xd5\x71\x33\x89\x54\x94\xb5\x7f\x29\x41\x0a\x52\x73\xfe\xc8\x3d\x5b\x44\xb8\x0a\x6a\x39\x1c\x71\xaa\xef\xe2\x76\x1e\x7f\xcf\x43\xdc\x6e\x6f\x03\xe2\x9d\x4b\x52\x1e\x32\x86\x76\xdf\x29\xc6\xcd\xd4\x31\x64\x9c\x63\x7d\x44\x99\x32\x6b\x3c\x39\x3f\xc0\x5d\x0e\x3b\xc4\x38\xfd\xa1\x7f\xfa\xba\x42\x52\x29\x78\xf6\xcb\xa3\x3b\x48\xd3\x69\xb4\x7d\x7b\xcd\x37\x34\x9e\xcd\xca\x17\x34\xcf\x8f\x5b\x16\xc4\x0b\x0c\xde\x3a\x67\x9a\x56\x07\x2d\x7d\x40\xb8\x20\xdd\xa1\x1a\x5f\xd7\x80\x4a\x50\x7a\x17\xa5\xb3\x8f\xfa\x87\x8d\x95\x58\x3b\x97\x29\x61\x44\x4a\xcd\x3f\xa5\x8f\x9c\x5c\x15\x23\x58\x92\xc1\xec\x72\xe9\x9a\xe7\x77\xf0\x6d\xbe\xc9\xcd\xfe\x41\xf3\xd0\x8e\x32\x5c\xa9\x0d\xdd\x3d\x11\xe6\x36\x39\x6a\x89\x52\xf0\x0b\x4c\x6d\x8a\xa1\x8b\x02\x2e\x49\xc2\x65\x47\xe3\xb5\xfc\xa0\x52\xb0\x27\x9c\x88\x76\xf7\x24\x98\x09\x50\xd0\x19\x3e\x35\x68\x0c\x5f\x0a\x80\xaa\x01\x63\xd5\xd2\xa0\x57\xae\x3f\xbc\x86\x2b\xfa\xc2\xe0\x00\xf5\xff\xbc\xf7\xe3\x60\xde\x83\xcf\x87\xb2\x23\x43\xbd\x80\x97\xcb\x08\x18\xc5\x42\xea\x9b\xe9\x57\x27\x42\xab\xc3\x7e\xb3\xab\x82\xcd\xfd\x63\xe1\x62\x0d\x00\x13\xd2\xfe\xef\xda\x35\x7e\x7d\x60\xf0\xd5\x41\xd6\x45\x28\x12\x28\x72\xa2\x1b\x7b\x32\x6d\x65\x35\xfb\x14\x0a\x74\x3e\x60\x76\xb3\xc3\x03\x03\xef\x64\x02\x2c\x0c\x70\x2a\x3d\xae\xcf\x95\xc6\xbc\x01\x18\x27\xd8\xe1\xb9\x07\x20\x6f\x8e\x24\xdd\xa5\xaa\x3b\x66\xf2\x60\xa2\xcc\xa2\xd8\xfc\x74\xb1\xb9\xc9\x9f\x4a\xaf\x24\xdf\xfb\xe3\xaa\x48\x1f\xfe\xe5\x5a\xe5\x00\x04\x12\x4b\x95\xc3\xd4\x8a\x83\xb1\x1c\xcf\x6b\x03\xc0\x2b\x10\x4c\x01\x6d\xed\xad\x14\xde\xdf\xef\x52\x32\x1e\xa4\xe5\xae\x31\xf4\x2c\xb0\x71\xe1\xc7\xc3\xf5\x88\x95\x87\x46\x1e\xef\x0b\xc1\xa3\x70\x92\xcc\xb9\x2d\x97\xbd\x4a\x25\x62\xc7\xeb\x1f\xa0\x95\xcf\x3d\x67\xf5\x56\xf5\xa3\x8d\x5e\x89\x79\x81\x90\xbd\x7e\xcf\x17\xc3\xd7\xbc\xf5\x15\x30\x7e\x2d\x50\xc7\xcf\xd7\xaa\x7b\xfc\xc6\x9b\x42\xa2\xf8\xc6\x32\x58\xb2\x5a\xda\x3f\xeb\x08\x6f\x47\x21\x78\xcd\x6e\x2e\xca\xdb\x7d\x25\xae\x7d\x4f\x1b\x6f\x09\x5f\xbe\x3f\x62\xb8\x1b\x4a\xdc\x12\xe1\x89\xe7\x4e\xbe\xf9\x76\x1b\xb2\x24\x62\x6c\x3b\x7a\xe9\xce\x60\x86\x26\x4b\xab\x87\x78\x5e\x5d\x22\x11\x92\xe5\x15\xc3\x64\x98\x0f\x2b\x11\xe4\x67\x0b\x01\x65\x49\x32\x80\xf9\xaf\x8b\x04\xf6\x20\xf2\x81\x14\x42\x23\xf0\x28\x69\x6a\x4e\x4e\x3e\x53\x77\x46\xc1\x0c\x57\x00\xd3\x0c\xa1\x7c\x97\x03\x62\xb8\x18\x09\xfe\x02\x88\xc0\x57\xf9\x6f\x57\x5e\x5c\x71\x13\x1a\x8f\x3f\xbf\xa6\x31\x3e\x04\x42\x00\x4c\xd0\x2f\x3d\xd1\x69\x52\xff\xdb\x2c\xbe\xeb\xf8\xe0\xc8\x63\x79\x6b\x57\xbe\x18\x5a\x29\xc7\x42\x55\xbc\xa0\x8e\xd6\x6b\x6a\x79\xd5\x1b\x34\x58\xfe\xf5\xc7\x4b\xc3\xe6\x2c\x0d\x33\xf1\x0a\xee\x46\x00\x02\xfb\xe5\xbc\x39\x18\xe2\x70\x4b\xeb\x75\x8e\xaf\xb0\xd5\xb7\x83\x0b\x97\x8c\xd9\x71\x90\x40\xf7\x9c\x98\x4f\x41\x76\xfe\x79\x47\x34\xf0\xfa\x90\xcb\xde\xde\x2e\x2c\x6d\xb9\xa3\x23\x44\x22\x5e\xcc\xd1\xa3\x87\x01\x38\x6c\xa4\x51\x5a\xf5\xa5\x31\xf5\xf3\x82\xab\xd0\x43\x94\xae\x9f\xe8\x5c\xab\x34\x6f\x4a\xdc\xa8\x8c\xe8\xed\x9e\x8a\x0f\x95\xa6\xa0\x85\x1d\x93\xfd\x64\x44\x36\xe7\x68\x5b\xa6\xbc\x7c\x1a\x99\xd7\x4c\xd1\x1c\x5d\xd5\x56\xf8\x7e\x81\x2e\x86\xd7\x3a\xb6\xe9\x0e\x8c\xc6\x12\xcc\xd4\x30\x7a\x2a\x05\x18\x1c\xfa\x19\x15\x9a\x48\x58\xd7\x2c\x80\xcf\xbf\xcf\x37\x9f\x91\x7a\xae\xf6\x55\xf4\x51\x4e\xbc\x65\x2e\x37\x24\x3a\xba\x86\xc5\x2e\xcd\xca\x30\xd6\xa3\x4d\xbd\xe5\x6a\xb9\x13\xeb\x39\xff\x17\x67\xaa\x0b\x7b\x32\xda\xac\x43\x8d\x1b\xfe\x1b\xab\x4f\x19\xbd\xa2\xe5\xa2\xb8\xd3\xfb\xff\x90\x4e\xd9\x98\x7f\xc3\x40\x2e\x8b\xd4\x57\xd4\x31\x05\x44\xb1\x07\x7a\x1c\x5b\x10\xc1\xb0\xe2\x5b\xb0\x4d\x25\x56\xe6\x35\xec\x72\x21\x34\x26\x55\x99\x72\xab\x0d\x73\xe2\xa0\x37\x25\x79\x7f\x00\xe7\x4e\xd9\x4a\x28\x3f\xa5\x6e\x59\x6d\x89\x1e\x22\x54\x13\xfa\x43\x8d\x4d\x6d\x72\xfb\x2e\x04\xee\x98\xdd\xb4\x7b\x62\x53\x4e\x54\x8c\x1d\xec\x5d\x2a\x19\x7d\xe8\x92\x1b\x76\x60\xaa\xa4\x98\xfb\xa2\x95\x31\xea\x5e\x48\x9d\xe5\xee\x8b\xd3\x76\x93\x4e\x6f\xee\x55\xdb\x86\x41\x53\x36\x57\x99\x4f\xd9\x89\x65\x0b\x5b\x28\xda\xce\x42\x11\x03\xe5\xa2\xcd\x9d\x1e\x85\x74\x6f\x31\x62\xcf\xab\x15\x5a\x48\x82\xe7\xbc\x7b\xd1\xc0\xf5\xa4\x7e\xcb\x4e\x80\x7d\x56\x1d\xcb\x8b\xd9\xb9\x00\x6f\xb2\x92\x15\x3c\x8b\x3e\x23\xc7\xfd\xa2\x6f\xaa\xf0\xee\xbe\x54\x46\x44\x22\xef\x1b\x25\x37\xef\x33\xae\xac\xd7\x2e\xf5\x28\x3f\x15\xbe\x66\xb7\x92\x83\x8a\xe5\xe6\x5d\xdf\xd2\xf5\x60\x21\xf5\x9c\xc0\xb1\xfc\xc0\xbf\xbc\x31\x25\x55\xef\xf4\x71\x4c\x3a\xe8\x9c\xa7\xa8\xcf\xb8\x7c\x92\x04\xfb\x40\x38\x27\xf3\x17\x2b\xae\xf5\x56\xa8\xb6\x57\x1e\x75\xdb\xa0\x82\x9d\x30\x7f\x8b\x0b\xcb\x7d\x20\x2b\x54\x2f\x89\xee\x51\x6e\xe9\x13\xa0\xe2\x6c\x10\xea\x9e\x7e\x86\x63\xbb\xf2\x7b\x97\x70\xab\xfe\x61\xed\x3d\xa6\xe8\xa3\x56\x3a\x23\x76\x6d\xf8\xe9\x7e\x90\xe2\xc8\x31\xee\x81\xcf\xed\x90\xf6\x74\x09\x30\x8d\x53\x50\x48\x81\x5d\xb6\x2f\xc8\x6a\xe2\x67\x2f\x21\xbb\x92\x88\x1b\x7b\x2f\x1b\xa3\x63\x20\xe5\x6a\x9d\xd0\xf7\xc9\x68\x91\x85\xe2\x5b\xe3\x3d\x92\x10\x55\xd5\xfa\x40\xca\x8d\x71\x8b\x49\x67\x36\xce\x4d\x96\xad\xff\xfa\x1f\x97\x95\x6d\x71\xe9\xfb\x25\x59\x38\xec\xbe\x64\x63\x7f\xd5\x60\x22\x17\x8d\xda\x58\x91\x74\xae\xa4\xe5\x01\xb3\x9d\x13\xa4\xaf\x3e\x9d\x17\x07\x22\x03\xb7\xfb\x7b\xe2\x85\xc5\x72\x69\xb8\xc5\x14\xe9\x50\x9d\x4f\x3f\xfb\xac\x30\x3d\x86\x2f\xbf\x39\xb3\xd2\x46\x01\xed\x13\x6e\x1e\x56\x7d\xa6\x4f\x59\x5b\x12\xd5\x9c\x0f\x1b\xbd\xb5\xaf\x22\x49\xee\xd9\x0a\xe9\x7b\x47\x45\x7a\x09\x60\x29\xd3\x87\x72\xca\x12\xec\xc1\x1d\xb6\x4f\x6f\x4b\xf1\xff\x59\x02\xea\xba\xa7\xfe\x53\xef\xe9\xc7\x02\x95\x34\x03\x3b\xa0\xa5\xbb\x94\xbe\xeb\xb7\xd4\x1e\x4c\x27\xf4\xb1\xb9\xa2\x3e\xe1\xb0\x63\xe8\xc4\xe1\x92\x4e\x40\x19\x95\xbd\xe0\xaa\xf1\x38\x20\xe1\x17\xca\x8b\x8a\x7b\xec\x82\x95\x7a\x14\x62\xf6\x04\x38\x05\x5f\x78\x08\x56\xe2\xd4\xf0\xd3\xdc\xda\x28\x1e\x58\x22\x5d\xce\x94\xac\xc4\x9b\x4d\x36\x77\xfe\x2c\xa4\x66\xe8\x67\x66\x94\xd3\x2b\xcd\x9c\x29\x54\xaa\xd5\x4a\x1b\x55\x08\x74\x3e\x0d\x2d\xe8\x5d\x7a\x7d\x03\x1b\x86\x6f\xa3\x2a\x91\x6d\x47\x07\xc5\xb6\x1f\x96\x31\x89\x53\xcd\x1d\x8c\x3c\xbb\xb1\xba\xbb\xdb\xb5\xe5\x87\xfc\xb7\x26\xaa\x85\x15\x3a\x17\x97\x99\x51\x83\x7a\xf1\x48\xed\xe1\x6a\xba\xbd\x6c\x1a\xa6\x6a\xfe\xb9\x4c\x01\xee\x1c\x0d\xd8\x46\x2c\xfb\xff\xc1\xf0\xf8\x8f\x61\xe8\x59\xaa\x22\x27\x4c\xcb\xac\x86\xc9\xb4\xa5\xb2\x62\x4a\x70\x7b\xf6\xbc\x97\x36\xad\xd5\xab\xe6\xa4\x0e\x68\x93\xe6\xd1\x5d\x13\xbf\x8d\x10\x6d\xaa\x0d\xfd\x45\xd2\x3d\xae\x0b\xd2\x7e\x92\xea\x66\xa1\xbb\xda\x04\x46\x76\x1c\x8a\xdf\xea\x87\x45\xbb\x60\x45\x57\x69\x6e\x16\x75\x78\xe0\x38\x21\x47\x56\x59\xe7\x3f\x3f\x37\x4b\x5e\xf6\x15\x2b\x9b\x5b\x32\xb7\x96\xdd\x25\x5f\xac\x6d\x77\xe4\xba\x73\xc3\x5a\xb5\xea\xe9\x4d\x5a\x3f\xdc\x76\xe2\x6c\x9e\xb3\x93\x39\xa3\xb9\x66\xa4\x88\x4f\xca\x0c\xcf\x7b\x1c\xf9\xb2\xaa\x2c\xb3\x27\x39\xab\x2f\x1b\x7d\x15\x00\x0d\x54\x7d\xe5\xcc\x1b\xeb\xca\xe7\x36\xd9\xde\x56\xeb\x7a\xc3\xb4\xff\x76\x55\x12\xb9\x5b\xe2\xd1\x64\x54\x1e\x2c\x5f\x75\xea\x56\xca\xed\xa3\xe4\x45\xcd\x2b\x42\x16\x3a\x81\x78\xe2\xe1\x61\x8f\x59\x2e\x4c\x34\x8d\x72\xdd\x50\xcb\x31\xf2\x22\x11\xad\xa1\x6e\xaf\xef\x6a\x5b\x29\x58\x73\xd6\x11\x35\x34\x8d\xf5\x01\xdb\x20\xc9\x34\x73\xe5\x53\xca\x36\xdd\xc1\xab\xa2\xf2\x0c\x7b\x99\x28\x05\x2c\x89\x6b\x57\xaa\x87\x10\xfb\x0a\xab\x3a\x1a\x44\x6d\xaa\x33\xfc\x88\xb0\x8e\x2f\x0a\xf0\x54\xc5\x2a\xdd\x1f\xd7\x05\xa9\x7a\x27\xa9\x31\x1e\xb6\x6f\xf1\x27\x33\xff\x18\xf8\x6f\x8a\x77\x7c\xd0\x8b\x14\xa5\xa9\x3d\xca\x59\x87\x3c\x10\x0a\x04\x61\x9e\x44\xa8\x6d\x82\x1e\x3f\x46\x5f\xa3\x59\x33\xe7\x66\x02\x5e\xb7\x4c\x12\x95\x66\xeb\x66\x27\x1a\x15\x40\xd4\x18\x26\x4d\x37\xb7\x46\x30\x7b\x82\x8c\xe7\x95\x12\x47\xa7\x8a\xb1\x54\xc8\x42\xc4\xd1\xce\xd3\x2f\xaf\x1f\x66\xb8\xd5\x7a\x71\x63\xf8\x5d\x2e\x4c\x2e\x49\x11\xb2\x6e\x5e\x1e\xbd\xa4\xd9\xd2\x57\xa1\x6b\x94\xd6\x28\xed\x10\x68\x1a\x8a\xdd\x63\xa4\x21\xc8\x9c\xfa\xeb\xae\x7c\xe2\x8a\x25\xd8\x3f\x25\xc0\xd0\x5c\xfd\x84\x36\xdd\x15\x51\xc6\xc0\xb4\x6e\x2a\xb9\x99\x30\xc0\x02\xe4\xb3\x27\x18\xab\x19\x27\x8a\x8d\x8e\xd3\x57\xae\x68\xc4\xa9\xe3\x9f\x3d\xfb\x00\xee\xc5\x9d\x4c\x96\x1a\xdc\x43\x67\x08\x52\x04\xf1\x9b\x99\x8c\x89\xa6\x39\x56\xee\x94\xea\xe7\x8e\xab\xd8\x9b\x41\xa5\x10\xd3\x9a\x54\xbf\x51\xf5\xae\x79\xcc\x05\xc4\x8d\x26\x69\xfd\xd9\xa3\x68\xf5\x9c\xe3\x51\x4a\x2c\x23\xf6\x7c\x64\xe9\xa9\xba\x05\x7a\xcd\xca\xf1\xa2\x7c\x79\x59\x48\xb4\xc8\xe7\xee\xd1\x7b\xaa\x46\x49\x12\x25\x99\xac\x4f\xd8\x11\xe8\x14\x82\x16\x52\x44\x92\x26\xd6\x6b\xea\x27\xce\x09\x17\xf5\x91\x28\xa8\xac\xfd\xf1\x6b\xd5\xcd\xb7\x5f\xdc\x75\xe1\x58\x54\x05\x81\xb0\x34\x83\x4a\xdd\x14\x6f\xad\x81\xdd\x74\xc7\xa0\x80\xf5\x1d\x60\x12\x58\xb3\x7f\xe8\x0b\xec\xf3\x88\x6c\x04\xda\x2f\x84\xde\x2d\xdd\xd4\xa9\xaa\xac\xae\xc1\x19\x0a\x14\x54\x42\x49\x6a\xa2\xd4\x9b\x2f\x03\x9d\x0a\x82\xf8\x4a\xc0\x6e\x30\x2c\xa6\xc4\xa7\x58\x42\xc4\xf7\xdd\x55\xba\x9e\x48\xd5\x68\x1d\xd7\x17\x46\x65\xa8\x02\x25\x0c\xd6\x36\x8e\x25\x0c\xd4\x2f\x12\xc6\xc1\xb5\xc6\x02\x14\x3a\x26\x7a\x4c\x6c\xb1\x19\x64\x4b\x54\xb5\xf4\x0a\xb1\x5e\xbc\x47\x76\xcd\x8a\xa2\xca\x0f\x53\x41\x34\x8a\x3a\xe4\x44\xc1\x04\x49\x81\x06\xf9\xde\x03\xaf\xca\xaf\x91\xf0\xe8\x3c\xb8\x0b\x96\x21\x2e\x94\x31\x3f\x1e\x6e\x54\xe5\x9e\xe0\x19\xc8\x7a\x1d\x07\x68\xd4\x93\xe5\xb0\xb5\x0c\x9f\x5a\x88\x42\xe4\x18\xaa\xf2\xa9\x17\x96\xce\xef\x87\xaf\x43\x6e\x16\xd2\xee\x97\xb5\x1f\xf9\xee\x49\x9d\x9e\x00\xf8\x8f\xb3\x89\x7e\x03\x2b\xdb\xef\x73\x02\x6d\xa6\x38\xb9\x54\x7f\xb0\xc5\x3d\x66\x21\x63\xb7\x28\x9a\x4b\x1b\x48\xf7\x8a\xea\x83\x53\xad\xcb\xe8\x48\x37\x21\x4c\xf0\x53\xbf\x2e\x44\xc4\x02\x34\xe7\x8b\x24\xfe\xd9\x7e\x5d\xcb\xda\xd9\xb4\x61\xbc\x47\xe9\x02\x9a\x73\xaf\x69\x08\x4b\x37\x90\xc0\xe0\x22\x7f\x64\xcf\xb8\x7d\xbf\xac\x89\xb5\x9a\x7c\x9f\x7b\x9d\xa9\xd8\xdc\xb0\x51\x92\x37\xde\x72\x2d\x0f\xca\x1d\x79\xa7\xfb\xc7\xe0\x88\xcc\x82\x7a\xab\x15\x52\x61\x56\xce\x5d\x08\x76\x34\x74\xbc\x96\x9e\xa0\x8f\x8b\xbf\xb0\x05\x32\xfa\x08\xed\xe4\x04\xfa\xc2\x2d\xe6\xc7\xe8\xae\xa8\x59\x44\x8e\xdb\x8c\x19\xed\x53\xd8\x40\xaa\x25\x5f\xd1\x42\x28\x46\xd6\x13\xe3\xdd\x48\x6b\x65\x7f\x25\x26\x04\x35\xfb\xd5\x3d\x27\xbc\x1b\x6a\x46\x2c\xa7\xf7\xfb\x98\xba\x47\xf5\xf4\x6f\x57\xf8\x10\x39\xe8\x3b\xfc\x28\xef\xda\xa4\x90\xc1\xf7\x58\xd0\x33\x7a\x60\xf7\x66\x9d\x4d\x83\xd4\x3c\xb5\x7e\xdf\x31\xea\xcb\xf9\x62\x52\xf4\x36\x74\xa6\xe8\x14\x30\x6c\xbd\x75\xd6\x46\x9a\xa9\xbe\x49\x6a\x11\xcb\xaf\xfb\xe3\xcb\x1e\x4a\x6f\xab\x88\x49\xcc\x71\xa8\xb9\xb6\xc4\xb4\x10\x28\x85\x1b\xae\x63\x7f\x03\xc7\x98\xc7\x55\xef\xc8\x40\xf4\xba\xab\xdb\xd1\x1d\xd1\xa2\x23\x02\x65\xcd\x26\x9b\xb1\x56\x95\xb3\xf7\xa9\xcc\xf3\x79\x28\x18\xfa\x09\xf2\x7b\xcc\xa7\x4b\x75\xa4\xcf\xe1\x98\x57\x4b\x13\x65\x01\x94\x90\x5a\x0a\x5e\x3e\x28\x77\x44\x49\xa6\x19\x92\xdb\x12\x15\xdf\xb9\x7d\x78\xc8\xde\x0a\xfe\xda\xc6\xba\xe2\x35\xbc\x67\x59\x80\x47\x32\xa6\x1c\x32\x0f\xc8\xd3\xfb\x26\x8b\xf3\xfb\x9e\x0c\xd3\x73\xcf\x83\x21\x71\x19\x80\xca\x5c\x09\xa1\xc1\x9e\xbc\xac\x8c\x8e\x19\x43\xdd\x50\x25\x55\x8b\x0d\x66\x62\xeb\x13\xf5\x05\xf7\x53\xb5\xaf\xe5\xda\x27\xb5\x48\x85\x4c\x62\x69\xcc\x2c\x9c\x73\xb5\xe4\x46\x03\xc0\xb9\xf4\x36\xe4\x04\xa6\xae\x37\xdf\xbc\x44\xe4\x0a\xe6\xa6\x67\x1d\xcc\xa3\x6f\x47\x61\x29\x6a\xe8\x53\x2d\x26\x9d\x3e\x37\x94\xd2\x79\xc6\xcf\xe7\x15\x1e\x43\x43\xce\x96\x08\x69\xe2\x5d\x00\x4d\x52\x1c\x93\xa0\xbb\x0c\x41\xf1\x1a\x8f\x30\x99\xf0\x0c\x0d\x4b\x66\x93\xb4\x46\x3d\x7a\x0b\x8c\xc6\x67\x04\x67\x8a\x03\xaf\x74\x66\x9b\x37\x17\x4b\x78\x20\x90\x5b\xd0\x12\xe5\xab\x1f\x0c\x4c\x5e\x2e\x5b\xb3\xa6\xd4\xad\x3e\xf3\x5a\xd1\x01\x63\xfb\x19\x37\xe4\x16\x13\x07\x8d\x85\x33\x36\xfe\x16\x63\x1e\xcd\x97\x99\xd7\x71\xcc\x07\xb2\x77\xac\xb9\x2a\x43\x43\xf9\x56\x3c\xb7\xfc\x0e\x5d\x29\x45\x8d\x1d\xc3\x39\x9a\x9f\x29\xa8\xcf\x9b\xca\x30\x6c\x94\x53\x4d\xeb\x1f\x2e\x24\xf4\x62\x41\x53\x98\xea\x96\x48\x69\x62\x13\x25\x7a\xec\xb2\x71\xdd\x93\x56\x10\x03\xdd\xcf\x1b\xde\xb7\xca\x80\x18\x37\xe4\xf6\x2b\x38\xe0\xfa\x7b\x0a\x5c\xe2\x48\xa6\x41\xe1\x5a\x1e\x00\x23\x5b\x97\x38\xc4\x05\xa4\x30\x9e\x2a\xc6\x0c\xd1\x72\x1f\x5b\x2d\x9c\x73\x77\x1b\x6e\xdb\x78\x50\x2b\xee\x94\xa8\x48\x45\x6c\xfb\x19\x87\xe5\x59\x2e\x2f\xdd\x6b\x36\x77\x19\x4b\x62\xae\x3f\xfb\x38\xd6\x38\x47\xf6\x49\x07\x01\x2e\xdf\x0b\x75\xa1\x01\x96\xb7\x72\xde\xbc\x99\x6c\x39\x8f\x0f\x45\x69\xde\x9c\xf8\x01\x12\xa2\x86\x99\x60\x86\x22\x82\xc6\x83\x9e\x91\x8f\xc8\x87\x9f\xcb\xba\xf3\xf6\x26\x76\xa1\xcc\x49\xcc\xdb\x04\xd5\xa2\x75\x2a\x4a\x5c\x5b\xd5\x5e\x03\x65\x6e\x06\xf4\x51\x05\x25\x6a\x09\x3f\x7b\xeb\x6e\x57\x2b\x9b\x10\xb3\x31\x0b\x82\xb2\x5a\x80\xd8\xdc\x43\xab\xf2\x09\x16\xd2\x24\xaf\xd7\x33\xf7\xaf\x21\xdb\xee\x36\xea\xf7\x95\xa3\xfe\x2f\xa5\x53\x47\xc7\x20\x40\xa9\x34\xce\x8c\x1d\x19\x45\xb8\x21\xc3\x52\x1a\x64\x9e\x1e\x38\x68\x67\x3f\x83\xd3\x4a\x7e\x11\x8f\x10\xa2\xb2\x75\x3f\x0b\x5a\x69\xa1\xbf\x44\x18\x83\x87\x34\xa3\xed\x4b\x7b\x6a\x25\x18\x29\x88\x27\x19\xb7\x05\x78\x9a\xe9\x4d\x61\xfe\xff\x59\x76\x6b\x45\x74\x82\x2c\x6c\xd6\x04\xc5\x01\xfd\x13\x63\x3a\xc9\xc3\x77\xe1\x85\x58\x6b\x7c\x7c\x32\xf3\x9c\x85\x12\xeb\x24\xc2\x2e\x45\x79\x86\x3d\x1f\x06\x78\x92\xc7\x2a\x2d\x4c\x4d\x9a\xb9\x5f\x16\xbe\xb6\xef\x78\x43\x83\xd3\xd3\x7b\x05\xc0\x74\xd3\xe7\x88\x34\x02\x2e\x9f\xa6\x3c\x19\xa0\x04\x50\xf0\x72\xf1\xcd\x99\x99\xe1\x11\x73\xb9\x31\xb9\xbc\x2f\x9c\x16\xd5\x4e\x1d\x38\xb0\x75\x75\xa2\xbd\x2e\xd3\xbf\x53\xaa\x5f\x72\x84\x6a\xab\x5d\xb8\x5c\xad\xa5\x9a\x61\x76\x5e\x95\xe4\x1b\xa2\xa9\xe1\x73\xf6\xf3\x51\x11\x88\x9e\x0c\x5a\xc5\x9c\xf5\x2d\xc5\xd4\x44\x8c\x00\x75\xb5\x53\xdd\x0f\x18\x8d\x67\x8b\x36\x83\x84\x0f\x86\xb2\x7b\x24\x7b\xe6\x16\x72\x0f\xa6\x32\xda\xcf\xf0\x00\xfe\x35\xf3\x3e\xb6\xf8\x1b\x85\x2c\x09\x93\x87\x68\x0f\x63\xa6\x1b\x16\x62\xb1\x4a\xd6\x8a\xcf\x3f\x24\x7b\x6f\x75\x95\x6f\x3e\xcd\xa8\xfe\xa4\x76\x43\x6c\xa1\x92\x28\xb6\xc2\x3c\xdc\x2f\x30\xe7\x78\xfb\x28\x0e\x44\x27\x7f\x61\xd4\xa7\xd8\x52\x99\x30\xdc\xdf\x22\xe0\x6f\x40\x9a\x86\xa8\xa4\x3e\x4e\x08\x9b\x39\xdf\x96\x51\xb9\x5d\xb6\xe2\xa8\x1a\x7d\xb8\xb7\x00\x33\x81\x28\x8b\x20\x7a\x1e\x5e\x29\x28\xd2\xae\x65\xb4\x08\x7d\x45\x31\x17\x5c\x04\x02\xdf\x70\x1a\x9d\x42\x80\x28\x79\xfb\x95\x66\xcc\xb7\x13\xc5\x48\xf0\xf1\xcf\xc8\x59\x84\xc4\x2f\x48\x49\xfe\x8d\x00\x3b\x2c\xff\xa7\x94\x08\x71\xc2\xab\x3d\x95\xa7\xfc\x04\x64\xd6\xc6\x7f\x3c\x7a\x6c\xb0\x68\x69\x20\x66\x7c\x41\x97\xd1\x66\xc0\x67\x5d\x79\x5c\xc5\xe8\x0f\x3a\x65\xd4\xe4\xfd\xce\x7d\x8f\x1f\x8b\xc7\xd5\xaf\x13\xe7\x46\xae\xd9\x4d\xb1\x2e\x4d\x17\xa5\x2d\x4c\xda\x43\xa3\xe4\x45\x88\x66\xe9\xba\xac\xbf\xac\x75\xed\xe2\x5c\x51\x28\x14\x4b\x8d\xdb\x84\xa0\x52\x6a\xad\xab\xb9\x52\xfb\x12\xc7\x8f\xd1\xef\x2f\xb5\xf0\x5b\xcd\x04\xb7\x75\x0e\x54\x4f\x62\x0e\xa4\x8b\x44\x3b\x13\x43\xd8\xb7\x63\x02\x8d\x45\xbb\x96\xbd\x45\xc6\x54\x53\x71\xc3\xdd\xfc\x68\x33\x64\x94\xdb\x2d\x7b\x05\xfc\x66\x58\x70\x16\xc4\xc3\xf0\x36\xa7\xad\x68\x0f\x5d\xa2\xb9\xdb\x56\xa3\x48\x61\x33\x3c\xad\xd5\xdc\x00\x76\x99\xd4\x4a\x40\x58\xa6\xe2\xe9\xbe\xe7\xf6\xcd\x4d\xc4\x7a\x64\x52\xca\x4c\x62\x05\xa3\x33\xa2\x91\x2f\x98\x02\xf4\x08\x98\x87\xb8\x64\x7a\xa8\x22\x97\xf8\xf3\x3f\xd4\x80\x03\x1f\x67\xda\x3a\x44\x5f\xa5\x1d\xd1\xc2\x50\xa8\xbe\x37\xbd\xad\xc2\x5f\xd9\xa0\xcb\x53\x63\x15\x7d\xbe\x15\xa1\x96\xc2\xff\xdf\xa8\xf4\xca\x95\xfc\x30\x90\x24\xf9\x9d\x30\x02\xa5\xa0\x73\xfb\xbb\xe0\x9b\x4d\x47\x25\x5e\xfb\x96\x58\xe2\xc9\x03\x35\xd3\xdd\xfe\x54\x6e\x3b\x9b\xbd\xc0\x3e\x26\x02\x11\x54\xa6\x04\x3c\xe5\x8d\x16\x99\x29\x33\x08\x53\x66\x56\x31\xf3\xe5\xda\x93\x27\xac\xfd\xd4\x76\x68\x92\xca\xca\x44\xe6\xf4\xa4\xfc\x0b\xee\x6e\x86\x24\x34\x6e\xab\xb5\xb7\x27\xdc\x72\x7d\x62\x12\x30\xef\xe4\x44\xdb\x78\x6f\xfc\x56\xea\x0b\xc1\x03\xd0\xfc\x55\x9d\x4a\x67\x49\x1f\x18\x4e\xfe\x89\x9c\xa7\x7d\x06\xb2\xd6\x34\x83\xbb\x2f\x12\xc1\x1b\xee\x8a\x7c\xdf\xa5\x5c\x94\xec\x24\x4d\x95\x8c\x79\x81\xbb\x22\x99\x6a\xa6\x7d\x05\x6a\x8f\xb9\x00\xe8\x91\xc3\x69\x08\x7f\x62\xd3\xf9\x21\xd4\x0f\x4e\xd3\xbd\x10\x53\x42\xb6\x76\xf3\x43\x39\xae\x77\x70\x9d\x37\x7d\xea\xca\x35\xb1\xfd\xf8\xac\x84\x1e\x71\x32\xe8\xd1\xaa\xe0\xc6\xd2\xb4\x00\xf7\x55\xc3\x8d\xbb\x2c\xeb\xd5\xe9\xbc\x81\x1b\x49\x9d\x16\xf5\x7d\xff\x3b\xed\xdd\x59\xcd\x9c\xc8\x9d\x94\x44\x4a\x6d\x5b\xf0\xf6\xe5\xd0\x4f\xac\xad\x73\xde\xa5\x24\x46\x6c\xe5\x58\x8a\x8e\x7e\xa6\x3d\x2f\x5f\x18\xbb\xe1\x53\xe9\x4c\xec\xb1\xec\x17\x4a\xc4\xd3\xdd\x26\xa8\xc7\x5e\x28\x0d\x71\x77\x76\x23\xeb\xe3\xbf\x09\x1e\xef\xea\x92\x8e\xfb\xff\x2e\xd1\x50\xdf\xd9\xe5\x16\x3a\x62\x42\xf8\xb1\x66\x1a\x56\x88\x32\x71\xcb\x67\x6e\x89\xd9\x99\x0b\xaf\x8b\x05\x6c\x38\x56\xd3\x85\xb8\xb4\x62\xd1\xe5\xb4\x30\x17\x83\x61\x47\x2d\x4f\x54\x6c\x4f\x3d\x41\x8c\x66\x93\xb1\x57\xec\x4f\xd7\xad\x4f\x4a\x9f\xfe\x1d\x7b\x9b\xd5\xcc\x91\xcd\xb2\xb9\x67\xc6\xf0\x20\x6b\x19\x3a\x87\xe1\xf9\xed\x49\xfe\xe7\x33\xe4\xcf\x2a\x7a\x10\x15\xe6\x9b\x41\x24\x11\xff\x87\xf3\x95\xbd\xcc\x8a\x6b\xbe\x50\x0d\xc9\x60\xe6\xe6\xb3\x6e\xf5\x46\x47\x78\x29\xeb\x47\xff\x52\x50\x45\x25\xbd\x35\xc4\x5c\xfd\x7d\xb7\xae\xda\x12\xc0\xbc\xa9\x33\xdb\xb5\x52\x75\x75\x9b\xde\x08\x57\xe7\x2d\xcc\xe8\xf1\x1f\x99\xfe\x98\xdf\xfa\x32\xd4\x14\xd4\xe6\xfb\xb9\xfa\xf4\xa5\x47\x89\xa2\x12\xfe\xab\x0f\x9d\x92\x8b\xf4\x1a\x0e\x25\x76\xcd\x6f\x4d\xff\xdd\xcd\x6b\x20\x78\x07\x86\xef\x42\xf8\x75\x46\x8e\xe9\x4e\x37\xd7\x82\x6b\x56\x29\x31\x32\xf0\x64\x42\x21\x08\x34\x0d\xf9\xe0\xae\x2e\x0a\x92\x8a\x4e\x91\x03\x38\x4f\x2c\x66\xbd\xfa\xa7\x12\x9c\x7f\x32\x54\x69\x56\x0d\x75\x8b\xb1\xe4\xc4\x64\xdb\x4c\xf2\xae\xed\x7a\x79\xa7\xf9\x1b\xca\x75\x98\x67\xd1\xf0\xc2\x92\xcc\x3b\xa6\x19\x4b\x73\xdf\x27\x0f\x5e\xa4\xa7\x12\xa0\x79\x2b\x83\x1a\x37\x55\x55\x4f\x9d\xa8\xfb\x42\x99\xf8\xd0\xb6\xea\x2b\xad\x24\xb4\x25\x4f\xbb\x39\x65\x6c\xd5\xa5\x2a\x91\xda\x63\x40\xaa\x89\x05\x46\x89\x04\xf5\x63\x36\x14\x67\x67\x05\xf4\x4d\x55\x7f\x5f\xd9\x7e\x31\x66\x84\xa6\x76\xbd\x56\xbb\x35\x0d\x89\x10\xf3\x2d\x56\x0d\x9b\xdc\x30\x1d\x8f\x18\xc1\x20\x17\x29\x5f\x44\xf1\x7b\xbd\xf3\xd4\xb3\x62\x31\x1b\x19\x96\x23\x51\x7c\xe6\x83\x6b\x9e\x39\x3d\xad\x3f\x87\xf7\xe4\x50\x6f\x99\xc1\x9e\x63\xd6\x73\xbb\x1f\x1f\x83\x24\x26\xf1\x16\x9d\x7d\xd3\x42\x6f\x57\x54\x87\xe2\x22\x4d\xc2\x0c\xa7\xbc\x3d\xa0\x44\x79\x24\x2c\x49\x9c\xd7\x08\x4e\x01\x2c\xda\x86\xb1\x09\x77\x99\x03\x49\xcd\x78\xfb\x45\x8d\x8f\x11\xa7\x36\x90\xbd\x78\xe0\x6e\xa1\x43\xd4\x43\x1f\x2d\xa1\xf8\x1c\x99\x2c\x9d\xcf\x95\xd2\xda\xcc\xb2\x59\x0d\x3a\xdd\x79\xa5\x7e\xb1\xcc\xca\x9d\xcb\x17\xd8\x8c\xa8\x8e\x3d\x59\xa2\x07\xc3\xe2\x9e\x63\xcf\x2c\x54\x78\x65\xa1\x71\x55\xa2\x6b\xe7\xe0\xdd\x2a\x4f\xeb\xe6\x54\x71\xf4\x5c\xb1\x45\x1c\xd8\x07\xac\x80\x2a\x84\xe2\x2f\x00\xd8\x92\x2f\x89\xaa\x4e\x53\xe4\x7f\x55\x1e\x66\x3a\xec\xf5\x89\x96\x62\x8d\xfc\x3f\xd5\xc4\xab\xa7\x48\xd2\x74\x03\x24\xd9\xb6\x55\x66\x75\x87\x86\x64\x48\x22\x85\x1a\xa4\x24\xb6\x32\x6b\x51\x0c\xcc\x2f\x8b\xad\xcf\x57\x17\x69\x58\xfb\xfe\xcd\x1a\x4e\x1b\xee\xb6\xce\x78\x0d\x1c\xb0\x72\x36\xfd\x9c\xba\x5f\x79\x7b\x3f\x32\xc2\x17\xda\xbd\xcd\xf3\x43\x7e\x7b\x93\xee\xda\x75\xd5\x38\xe5\x99\x1b\x7c\x86\x0e\xdc\x81\x1c\xb9\x53\x66\x95\xe9\x2b\xe3\xa2\xef\x7b\x06\x96\xea\x33\x17\x98\x30\x60\xbb\x77\x17\x62\x63\x43\xf3\xd5\x0f\x91\x51\xd8\xf4\x2b\x7a\xc6\xaa\x5c\x54\x9f\x7f\x2d\x0f\x1c\xe9\x1f\x7b\xf8\x5d\xde\x02\xa3\xce\xbe\x36\xd5\xd1\xae\xc2\x63\x91\x3f\xc2\x38\x96\x5a\x7e\x7c\x82\x26\xc4\x65\x13\xf3\x1c\xae\x44\x9d\x96\x39\x71\x57\x93\x32\x52\x2c\x59\x2b\x96\xbd\x13\xb8\x79\x3c\x60\x4f\x77\xef\x41\x9a\x62\x7a\x36\x7c\xb6\x5d\xdc\x3a\x71\xa7\xe4\x5a\xdf\x4f\x17\xf7\x56\xd6\x67\x4d\xf1\xd2\xcc\xa5\x69\x63\xcc\x6b\x4a\xcb\x30\x05\xc0\x3d\x2c\x9e\xfa\x89\xf2\xcc\xd2\x34\xda\x2c\x61\x6d\x22\xd3\x1d\x88\x1a\xa6\xf4\x52\x43\x23\xf8\xdb\x2c\x63\xe1\x0c\x66\xa2\xac\x1a\xca\x5a\x1e\x36\x52\x63\x47\xbd\xc5\xa2\x3a\xba\x29\x11\x1f\x65\x8c\x09\x09\xfd\x9a\xc2\x65\x49\x17\xbd\x16\x1b\xdd\x72\x0f\x36\x2e\xea\x10\xf4\x5a\x3b\x97\xcd\x50\xb0\x2b\x4f\xd3\x29\x88\xd3\x24\x16\x5c\xc1\x77\x49\xa2\x56\xec\xc2\x28\x68\xef\xf6\x60\x7a\xb4\x7b\x25\xcf\x66\x70\xba\xfb\x78\x6c\x09\x7d\xe8\xa5\x1a\x6f\x9f\xd1\x6e\x1b\x72\x0d\xb1\x95\x37\x9a\x25\xd3\xa7\xff\x1c\xb8\x7b\x9e\x1f\xaf\x0d\x9b\x13\xe1\x78\x03\xaa\x6d\xa1\x1d\xa7\x06\xbd\x31\x6f\xd0\x92\xb3\xf4\x69\x83\xf1\x71\x13\xb0\xe4\x20\x12\x4a\xd6\xca\xdc\x4f\x9a\xaf\x27\x56\x21\x89\x99\x22\xb7\x12\xb0\x3d\x89\x24\x15\x0a\x0d\xd1\x97\x34\x84\xc2\xf8\x4b\x53\xba\x2b\xea\x91\xc2\xca\x26\x5a\xda\xdb\x99\x83\x91\x27\xa4\xe6\x86\xa5\x59\x8e\x0e\xe0\xd0\x5e\xdb\x16\xb7\x05\x65\xbe\x05\x02\xcc\xe6\x7e\xff\xff\xf7\x7d\xe2\x96\x2c\x85\xc2\x78\x27\x22\x73\xa3\x6f\xdf\xae\x64\xb1\xc7\xfd\xb1\x1f\xa3\xdf\xbd\x7d\x7b\x2e\x08\xe7\x6b\xe8\xc8\xc8\x54\x4a\x59\x3b\x66\x66\xea\x96\xef\x85\x8e\xd7\x6a\xa7\x4b\x56\x92\xb8\x1c\xbc\x42\xef\x2b\xd1\xf6\x6a\xc5\xdc\x01\x1d\x71\x4d\xae\x57\x4c\xaf\x22\x9b\x1b\x65\xf5\x2f\x9d\xd7\xb6\xbb\xdf\xbb\x59\x66\x99\xfd\x8c\xf4\x78\x77\xa2\x49\xf5\xf2\x3a\x6b\xeb\x91\x49\xeb\xe8\x71\x2e\x86\x87\xc7\xb2\x08\x9c\x64\x4c\x57\x69\x6d\xee\xfc\xb8\xb3\x5d\x1e\x00\xc9\x97\xf5\xc2\xc7\xfb\x5d\x0d\x66\xcf\xe2\xb8\x29\x82\x42\xe1\xea\x7b\x6c\xb2\xd6\xbb\xb7\xc1\x1d\x60\xee\x8c\xb1\xca\x6a\xd6\x7e\xa3\xde\x86\xde\xe9\xaf\x3b\xc4\x81\x3b\x7e\xad\x37\xb1\xc5\x2d\x7a\x41\xc1\xef\xd8\xd7\x58\xc1\x27\xac\xce\x0e\x74\x62\x9f\x8d\xd8\x1c\x83\x57\x4f\xd5\x2e\x98\xcb\x1f\x24\x00\xf4\x06\x47\x53\x30\x52\xc9\xe4\x13\x11\x61\xa1\x11\x23\xe5\x51\xb8\xde\xfe\x08\xfd\x50\xca\x1d\x4f\xc9\x7c\xda\x50\x5b\xaa\x9b\x0c\x86\xe3\xf9\x25\x60\x43\x12\x29\x63\xff\x9a\xc5\xc0\x22\x17\xd6\xcd\xbd\x64\x44\x31\xca\x7f\x78\x70\x5f\x73\x2a\x35\xc5\x61\x63\x3c\x9b\x76\x1f\xfa\xc8\x50\x0b\x1f\xdb\xec\x63\x9b\x71\x60\x7b\x44\x38\x86\x53\x68\x76\x10\x92\xec\x90\x69\x20\xfb\xfa\xce\x57\x03\xd9\x09\xa7\xf3\x77\xfa\x70\x6b\xee\xe0\xe6\x52\x12\x7c\x18\xf6\xbd\x1a\x4f\x9a\x32\x2f\x6e\xd0\x40\x92\x36\x4d\xe1\xb2\x00\xcd\x52\xe8\xd5\xab\x42\x7c\xa9\x10\x98\x5c\x15\x55\x6e\xa1\xa4\x0b\x5e\xc3\x6c\xaf\x73\xdd\xc2\x05\xb4\x3d\x10\x5b\x7b\xac\x97\x1e\xa5\x41\x03\xae\x05\x3f\xb2\xf1\x0c\x7a\x4a\x5f\x10\x52\x36\x02\x04\xad\xfe\x53\x41\x83\xe5\xbf\xe3\x09\xbf\x8c\xfa\x8f\xa0\xb5\xfc\x6f\x98\xa8\xff\x77\x6e\xb6\x96\xfb\x7e\xe1\xe1\x9e\x47\x4b\x0f\x2b\xf7\x28\x75\x68\x4b\xb9\x37\xd9\x03\x01\xfa\xe1\x14\x2c\xb9\x07\x06\x0f\xce\x16\xe7\x48\x81\x0c\xff\xe2\xba\x94\xc7\xf9\xc8\x11\x87\x51\xb8\xdb\x2f\xb0\x9a\x2c\xbf\xa7\xbf\x5a\x8b\xf4\x79\x92\x28\x4e\x5a\xe8\xfd\x8c\xf6\x79\x0a\x88\x8b\xfb\xba\xc9\xa7\xb5\xb3\xe6\xf6\x65\x2b\x75\xce\x68\xad\x43\xbe\x3c\xc6\x2f\xef\x2c\x73\x09\x77\x79\xa8\xbf\x23\xf1\x6a\xd7\xd8\x49\xe7\xf0\xc0\xa6\xe8\xaf\xb5\x9f\x7b\xf1\xd2\x8e\x12\xfe\xb4\xfa\xc9\x2c\xd9\xbf\xf2\x25\xee\xa5\x83\xce\x60\x05\x53\x22\x5b\x3b\xb4\xdd\xfd\x5f\x7e\x60\x1b\x21\x3e\xec\x5d\xfa\xdc\x8e\x13\x2a\xce\xda\x74\x5d\x38\x4a\x99\x75\x1b\xd7\xb7\x0f\xcd\x75\x4f\xc1\x0d\x89\xd5\x0e\xd5\xa1\x48\x3e\x88\x8a\x08\x68\xef\x4c\x6b\x71\x37\x67\xe2\x12\xb8\x52\x32\x16\xf6\x2c\xca\xaa\x91\xba\x18\x5a\x5d\xc6\x7c\xa0\x90\x24\xac\x43\x5a\xa5\xac\xe4\x6d\x0d\xb6\xd6\xee\xf4\xad\xc3\xf2\x71\xa2\x17\x03\x58\x01\xa7\x81\x09\x9c\x4c\x72\x53\xf9\x8f\xdf\x4b\x62\x1f\x9f\xcc\xed\x99\x9e\xfe\x97\x12\xd3\x25\x48\xbe\x89\x85\x2f\xba\xce\xcc\x1a\x77\x8d\x3e\x0f\x47\x9b\x39\xc2\x28\x7c\xf2\x76\xed\x76\x0f\xf3\xa0\x4e\x6e\x4e\x76\x58\x0d\x4e\x0a\xd0\x80\x60\x70\xbb\xd2\xc7\x0e\xc3\x19\xd1\x2b\x03\xc9\x7b\x28\xa4\xbb\x75\x03\x5c\x1f\x9c\x20\x73\x04\x8c\xbb\x51\xc8\xfa\xb3\x70\x0b\x87\x0e\xdd\xa8\x33\xb9\x99\x71\xc5\x5c\x92\xf6\xcd\x9f\x9c\xe8\x24\x12\x19\xd1\xef\xb5\xa7\x8a\x3b\x51\xd8\x53\xc5\x99\x7a\xc1\x0e\x89\x5b\x6a\x6c\x09\x8a\x36\x6e\x98\x20\x06\x38\x85\x44\x54\xe4\x1b\x7d\xb5\xe9\xb9\xe3\x94\xa8\xf6\x50\x8a\x45\x02\x09\x25\x81\xba\x42\x57\xf0\xfe\xaf\xd8\xad\x16\x14\x8e\x59\xab\x1a\x77\x17\x85\xb7\x2e\xc0\xed\x1d\xd1\xe2\xb4\xe5\x89\x21\xa1\x9c\xbd\xa7\x2f\x14\x5e\xb2\x6d\x64\x53\x5a\x7e\x6a\x3d\xb8\x2a\x51\x67\x64\xfd\xe2\xa8\x8e\xd1\x30\x74\xc3\xc6\x1c\xb1\x5d\x86\x9f\x05\x05\xa2\x81\xc3\x71\x16\xc1\x2d\xee\x2e\x50\xa7\x4a\x42\x70\x96\xea\x31\x09\xe0\xd8\xab\xe0\xc4\x61\x74\xff\x6c\x89\x2f\xfa\x83\xf1\x79\xf2\x70\xd7\xf9\x71\xc6\x7b\x7e\xc7\xd1\xf8\x54\x4f\x48\xd3\x05\x8c\xa6\x36\xf7\x04\xd7\xfb\xb4\x1d\x09\x75\x85\x4e\xa2\xff\xa3\x77\x59\xb9\x7c\xc3\xf6\x0a\x41\x98\x56\x72\xcf\xec\x77\x44\x08\x68\x34\x4b\x6b\x96\x16\xa2\xf1\xc1\x2b\x0d\xe1\x2f\xbe\x40\x0d\x40\xd5\xc6\x4f\x1e\x9c\xfb\x07\xfd\x19\x94\xbe\x4a\xfc\xec\x01\x5a\x42\x31\x5b\x87\x3f\x6c\x7b\xf9\x4a\xd5\x8a\xfc\xa3\xad\x1b\x71\xa4\x39\x50\x76\xad\x6f\x00\x59\x36\xc7\x43\x4a\xb0\x82\xba\xb8\x83\xf7\xa9\xfd\xcc\x0e\xd2\xc9\xe7\x24\xb5\xb7\x94\x48\x60\x37\x06\x45\x69\x8d\xaf\xa8\x29\x2a\x65\x4b\xc1\xa3\xd8\x82\x59\x08\x38\x7f\xa9\x97\x7b\x56\xbb\xa2\xab\x29\x62\xa7\xd0\x0c\x70\x4e\x76\x2f\x41\xd9\x25\xe5\x82\x3b\xdd\x75\x1d\x68\x87\x28\x77\xcc\x83\xbc\x6c\x7d\xa2\x2a\xd1\x34\xcb\x79\x7c\x75\x56\x3a\x07\x26\xe0\x2a\x50\x3b\x4c\xf1\x18\x51\xee\x99\xf3\xf3\x67\x2a\x7d\x4f\xbe\xcd\x57\x3b\x13\x78\x54\xbf\x21\xb8\xba\xd8\xf6\x46\x82\x5b\x0c\xa5\xf9\xad\x6f\xe9\x0d\x6c\x95\x88\xbe\x2a\xfa\x1a\xb0\xa7\xb4\xc0\x4b\x06\x01\x95\x84\x4b\x87\xe2\x55\x76\xb6\xdc\xbc\xc6\x8c\xd9\xab\x4e\x59\x34\x9b\x24\x47\x64\x2b\x84\x33\x95\x24\x4b\xc0\x56\x5a\xd1\x18\xbe\x0e\xb8\x46\x26\x11\x46\x75\x52\xf6\xa5\x6a\x2e\x47\x4e\x9b\xac\xdb\x96\xca\x35\xc6\xb4\xca\x08\x72\x65\x19\x13\x76\x76\x16\x9f\x19\x76\xa5\xfc\xfa\x05\xc8\xac\x32\x4d\xfa\xea\x43\x5b\xcc\x29\xcf\x18\x7c\xc8\xdf\x01\x65\x47\x79\x62\x10\x18\xa7\x7b\xf8\x29\xda\xbb\x03\x8e\xbd\x90\x2e\x15\x49\x7b\x6c\xda\x31\xa7\xa6\xfc\xa0\x43\xc0\x06\x97\x65\x85\x73\x5a\xe8\x74\x11\x8d\xc3\x68\xd1\xc6\xc9\xbb\x91\x52\xc3\xa6\x01\x47\x70\xc6\xc3\x15\x37\x3f\xbd\xb8\x28\xa7\x64\xb1\xc6\x57\x84\x5e\x3d\xb7\x0d\x08\x0a\xa0\xc4\xd9\x26\xf5\x66\xf0\x56\x03\xbb\xf1\xcd\x9e\x07\xb7\x69\xcf\x9f\x12\x5c\x1b\xb4\x87\x91\x47\x17\xce\xf5\x9a\x36\x24\xde\x05\xb0\x24\x92\xb8\x75\x50\x3d\x07\x6f\xe7\x75\x38\x37\xbf\xd4\x1e\xbd\xec\x9d\x5b\x9e\x25\x3e\x60\x3c\x15\x0e\x9e\x2e\xf7\xcb\x24\xc7\x4d\x74\xd3\x97\xb6\x42\x29\x47\xaa\x6a\x53\xae\x51\xe3\xe6\xc6\x55\x64\xfc\x60\x8e\xe8\x53\xb6\x22\xb8\xa7\x1f\x33\xb7\x99\x1d\xc9\xbd\x85\x7d\x4d\xd7\xb1\xb3\x54\x0b\x74\x68\x3f\xf4\x17\x37\x9f\xb1\x06\xed\x5d\x9b\xe1\xd0\xf7\x84\xf2\x97\x69\xa2\x45\x48\xe5\x15\x89\x9f\x7a\xc5\x9f\xfd\xe5\x7c\x15\xa7\x2d\x9f\xc1\x19\x14\xd5\x74\x64\x86\xa7\xbf\xdb\x91\x2c\xfd\x3a\xcb\x44\xcf\x07\x9a\x1b\x92\xa9\x16\xd0\x6a\x37\x6c\xc1\xdd\x04\x44\x00\x36\xd9\xa7\x17\x2d\xfc\x86\x8f\x02\xb7\xd4\xc1\x2b\xa7\x7d\x5a\x55\x34\x9f\x5e\xae\xe7\x78\x4f\xb5\xdd\xbc\x9d\x9f\x66\xc5\xfc\xd8\x51\x1e\x48\xf8\x1b\x14\x10\x0b\x8d\xc2\xea\x55\x3b\x22\x49\x7b\xf7\x29\x91\xdc\x31\x85\x04\x8d\x5a\xc0\xb0\xf8\x1a\x2e\xf5\xd8\x17\xc5\x07\xe1\x94\x12\x40\xf3\x88\x9b\x32\xf3\x84\x96\xa9\x62\x03\x2b\x71\xba\x7a\xf3\x56\xf0\x9b\x0b\x81\x73\x5e\xc6\x3e\x9f\x1f\x1e\xaf\x04\x02\x56\x5b\xc5\xb5\xa5\xef\xc5\x2d\x1f\x18\x35\xce\x76\xbe\x80\xa1\xb4\xf1\x5d\xe8\x9a\xae\x96\x97\xda\x63\xa6\xfb\x22\xfc\x8d\x22\x66\x88\xf9\xc4\x5c\xa5\xdf\xac\xaf\xe3\x9c\x3c\x8c\xdb\x8b\x63\x79\x1e\xad\x98\x23\xb6\xc5\x51\x6a\x9f\x36\x64\x72\x7f\x23\x01\xa7\xc8\x91\xb3\x82\xde\x14\x4a\xed\xcb\x34\x6c\x12\x1a\xf2\x4f\x16\x06\xee\xdf\xc6\x28\x79\x0e\x87\x16\xef\x4e\xf5\xcd\x7d\x24\x6d\x8e\x0c\x5b\x9a\x04\x2d\xcb\x7c\xf3\x93\xd4\x88\x2a\xfd\x11\x1d\x94\x53\xf1\x8a\x5c\xf7\xd1\x9c\x8d\xfe\xe8\x87\x89\x40\x12\xff\x0b\xcb\x40\x0a\xdd\xe0\xa4\x08\xa8\x69\x65\x27\x9a\x6d\x82\x9f\x27\x71\x24\x9d\xb4\x12\x73\x27\x42\x03\x9a\x7f\x81\xc6\xe0\xa9\xbb\x41\xa9\xb9\x64\xf3\x29\xf6\xf0\x2e\x06\x88\x2a\x09\xf9\x5f\x79\xb6\x8e\x23\x7a\x5f\x17\x19\xd0\xab\x5f\xee\x0f\xcf\xf1\xf4\x7b\xbd\x13\xea\x5f\x61\xac\x5f\x3d\x2b\xe4\x8a\x92\xd3\x8c\xcf\x9e\x27\x50\xf4\xdc\xba\x77\x0d\x47\xd4\x4a\xee\xd6\x6c\x2e\x8b\xba\xfd\x72\xa8\x71\xfb\x5a\xc8\x76\x1f\x44\x28\x9d\x44\x43\x19\x18\x47\x8f\x26\xe3\x43\xe9\xd8\xb1\xc3\x21\x11\xa1\xf2\x93\xaf\x3d\x92\xc7\xa3\x7a\x34\x85\x82\x8a\x76\x28\xa3\x24\x3b\x03\xbc\x7b\x06\x88\x1b\x32\x1a\x14\x14\x20\x40\x8f\x69\xc7\x98\xfc\x75\xdf\xee\x07\x70\x63\xd2\x45\xc3\x14\xec\x0a\x1a\x09\x68\x68\x00\x09\x73\xe4\xcf\x3e\x0d\x13\x81\xd6\x4c\xb6\x5e\xeb\xa2\x66\xef\xda\xbb\x77\xbe\x0d\x54\x57\xde\x9f\xb6\xff\x07\x52\xd9\x0d\xcc\x2f\x5f\xb9\x49\x1e\xaa\xc4\xa6\xc4\x4d\x27\x42\x7f\x2e\x9e\xb4\xd8\x2c\x50\x9a\x2d\xe8\xfa\x48\xca\x6a\x29\xfd\xfe\x25\x50\x7f\xf9\xbd\xbe\xf4\x44\x70\x32\xdb\xc8\x5e\xed\x5e\x77\x8d\x60\x4b\xd6\xab\x81\x4b\xe8\x03\x50\x61\x3e\xce\xbe\xef\xab\xa5\x6a\xcf\xa8\x67\xea\xf8\x29\xfd\x4b\x53\xfc\xd3\xd9\xbc\x12\xee\x64\x47\x46\x59\x47\xcc\x24\x93\x15\xaa\x95\x15\xf8\x58\x60\x88\x0c\x37\x25\x92\xd2\x80\x63\xb2\x4b\x91\xda\x51\x16\x4f\xb9\x1b\xc1\x8f\x81\x22\x42\xd5\xa1\x1b\x42\x95\x27\xab\xe8\xb6\x5e\x10\x2e\xeb\x60\x22\xf0\x86\x3b\xca\x47\x7f\xa2\x06\xd3\xff\x80\xc8\x6c\x65\xd4\x92\xad\x4f\x5e\x6c\x89\x83\x3a\x99\x51\x19\xa1\x3e\xec\x34\x35\x65\x1b\x16\xf8\x1a\x3d\x5b\x37\x24\x7a\xbd\xa7\x05\x83\xb4\x7f\x0c\xe1\x69\xbf\xe5\x46\xf0\x5c\x2a\x42\xf4\x0e\x14\x27\xc7\x9d\xc6\x41\x96\x0c\x05\x6b\x6f\xde\x02\xb8\x90\xe7\x4d\x46\x63\xbc\xc0\xdd\x10\xbe\x84\x85\xa7\x02\x17\x33\x7c\x80\xd3\xac\x25\x76\xf1\xa2\x3e\x21\xd2\x1c\xb4\xaf\x5d\xd8\xc2\x80\xa5\x9f\xd8\xf6\x89\x27\x21\x09\xf0\x1e\xef\x7d\x3a\x78\x69\x89\x17\x2f\xea\x78\x63\x52\xb1\x5e\x01\x57\xa5\x8b\x49\xab\xf6\x86\xb6\xdf\xe1\x43\xfa\xef\x9b\xa6\xdf\x7a\xe4\xf3\x5f\x60\x7e\x63\xfe\xa2\x9a\x56\xa6\xef\x46\x76\x66\x8f\x5d\x35\x4f\x6e\x14\xfb\xac\x43\x82\xf2\x3f\xc5\xdd\xd2\xb7\xba\x37\xac\x39\xa1\x9f\x27\x5d\xa6\x2f\x67\x7d\xa1\xe7\x82\xd6\x83\x69\x04\x81\xde\x55\x49\xc8\x83\xa9\xae\x4f\x92\x74\x16\xda\xf0\xbe\xad\xcc\x92\x06\xc2\x3f\xcd\xd5\x6b\x8c\xe7\xe7\x17\x02\x3a\xd2\xc8\xd5\xd0\x5b\xf9\xdc\x3e\x54\x53\x69\xc3\xf4\xa1\x10\xa0\x04\x98\x9b\x9c\x1c\x45\x3c\x37\xf7\x1a\x45\x2d\xef\x4e\x09\xd8\x90\x77\x3b\xe7\x6d\x44\x08\x8d\xaf\x75\xd6\xc7\xe4\x5b\xc5\x1d\xea\xca\xc5\xd3\x06\x7a\xc4\x2b\x39\xaa\xc9\x67\x5f\x50\x1a\x4f\x24\x1f\xde\xcb\x55\x59\x4e\x94\x81\x5b\xbb\x23\x6a\xad\xa2\xdc\xfb\x0f\x49\x26\xf5\xc3\xd3\x33\x96\x5c\x65\x34\x6e\x85\xcf\xd7\x11\x85\x29\x1d\x52\x76\x63\x78\xeb\x2f\xf4\x56\xd2\x43\xc4\x3f\xdd\x4b\xf5\x87\x9d\x89\x9b\x67\x7b\x1f\x47\xb9\xfa\x58\xf9\x92\xb2\xb6\x22\x62\x17\xac\xe3\x28\xe3\x36\xce\x0b\xbc\xca\x9b\xbd\x7c\xba\xa9\xf6\xf2\x09\x52\xf0\x72\xd1\x49\x9c\xc9\xe0\x26\xc0\x2d\x4e\xd5\xb1\xdc\xcf\xf9\x2a\xa7\x3f\x8e\x86\x32\x42\x70\x45\x59\x50\x0b\xd1\x17\x5b\x00\xa4\xdd\x2e\xff\xa0\x85\x72\x3f\xfd\x67\x4f\xa3\x01\x68\x92\xbf\x2f\x25\x6c\xe4\xaf\xfd\x52\x4f\xb8\x13\x45\xbc\x0d\xba\x66\x1d\x20\x4e\x3d\x64\x26\xfe\x75\x5f\x71\x62\xc0\x3f\x0c\x58\xc2\xb0\x82\xdc\x13\x66\x04\x3a\xd8\xcc\x4a\x2f\xac\x0b\x93\x7d\x3f\x28\x75\x8b\x36\xbe\x8b\xa3\xcf\x50\x98\x22\xf8\xb3\x4c\x7e\xd7\x69\x56\x2d\xdf\x67\x31\xed\xe8\x59\x42\x1c\x67\x82\x06\x09\x14\x98\x1c\xdc\x18\x14\xfc\x0c\xfe\xec\xa4\x7d\x17\x48\xa4\x4b\x32\xa0\x34\x05\xe9\xb5\x96\x72\x29\x08\xa9\xdb\xa1\xc8\x23\x7c\x74\x69\x08\xeb\x40\x40\xa3\x1d\x86\x4a\xe6\x52\x18\x5b\xc5\x19\xc4\x6b\x0d\x78\xa6\x93\xc9\x0f\xd8\x63\x02\x03\x45\x5e\xf1\xe0\xec\x0e\xf2\x49\x32\xdf\xb8\xb0\x64\x56\x6f\x95\x71\x50\xcd\x1f\x87\xb9\x6b\x5a\x61\x32\xdb\xd7\x48\x82\x2f\x8e\x1b\x3d\x28\xb8\x63\x5b\x6c\x57\x25\x69\xd6\x1b\xb8\x1f\xa3\xb7\x63\x58\x00\x82\x63\x88\x0f\xc1\xa3\x68\x50\xc6\x71\xb7\xd3\xe9\x36\x89\x12\x19\x63\xfc\x4d\xf2\x3f\xbe\x0b\x7d\x1f\x69\x53\x68\x87\x52\x6d\xd0\xe8\x5d\x1e\xf9\xd0\x15\x36\x3b\xf4\xa8\x9f\x96\x8d\xda\x3f\x27\xaf\xac\xf2\x04\x83\x42\x7d\x67\xc5\xd9\x4d\xab\x6d\xf4\xee\xc7\x9e\xeb\xec\xcb\x43\x6a\x2c\x76\xb4\x9c\xcf\xd4\xb1\xaf\xa0\x3e\x89\xfa\xa7\x0f\x97\x47\xf0\xc0\x16\x7f\x92\x2b\x7a\x59\x6c\x3f\x47\xe8\xdc\xa6\x2a\x7b\x82\xb1\x12\x2e\xec\x6d\x37\xe4\x41\xc7\x54\xaa\x5e\x31\x44\xe5\x22\xa5\x3b\x52\x8e\x55\x72\xf0\xa0\x10\x84\x22\x62\x68\xf8\xa6\x0e\x6c\x71\x77\x24\x92\xb1\xd4\x2f\x67\x79\xbe\x52\xbf\x6d\x5a\x70\x87\x25\x14\x8b\x30\x42\xce\x15\xcf\x9d\x23\x34\xff\x62\xc1\xe8\xe8\x5c\x71\x30\x6e\xed\x08\x09\xee\x4e\x5d\x4d\x89\x3c\xbe\x71\xeb\x88\xce\x4e\x97\xd4\xf5\x7b\xd4\x88\x86\xcd\x68\xcc\x40\xfe\xfc\x31\x3f\xbb\xdb\x7e\x8b\x74\xf9\xf2\xc0\xea\xc2\x36\xcd\x9c\xd8\xda\xc1\x54\x9d\xb8\x6b\xa7\x8e\xd5\xcc\x86\x0f\x1e\xd2\x99\x19\x0f\xd2\x87\xfb\x5c\x4d\x08\x00\xe5\x7c\xc0\x74\x20\x10\xd3\x35\x4f\x3c\x34\x3e\x20\x4a\x0e\xe7\x7d\xbe\xde\x19\x2c\xff\x51\x1d\x72\x51\x2a\xcd\xaf\xf6\x9b\x41\x5c\x15\x27\xf5\x29\x79\x05\x7a\xd4\x27\x86\x1d\x13\x4b\x64\xd8\xae\x06\x44\x8d\xf6\x57\x64\x69\xbc\x40\x67\x7a\x75\x27\x31\x5c\x15\x7d\xbb\x5e\x71\xc1\xe7\xcf\x49\x3c\x06\x3e\x65\x5e\xd6\x68\x29\xc8\x51\x2a\x1e\xb9\xf4\x14\x6c\x7a\xad\x7f\x42\x80\x6c\x3f\x0b\x67\xdc\xf9\xb2\x01\xd4\xf7\x8a\x8b\xca\x03\xcd\x47\xd6\xee\x5a\x9b\x1a\x1a\x82\xbe\x30\x60\x12\xb3\x07\xe5\x7e\xfb\xdd\x07\xea\x93\x39\xa3\x3c\x21\x3a\x04\x95\x88\xce\x2b\x92\xa9\x78\xdb\xa3\x22\x22\x70\xaa\x5b\x85\x57\xc5\x7d\xf7\x8f\x15\x22\xe2\x59\x7c\xca\x92\x91\xaa\x3e\xf7\x2f\x69\x65\x2b\x55\xb6\x72\xaf\x1f\x57\x97\xe9\xd1\x57\x73\x36\x0a\x94\x67\xed\x2a\x9d\x44\x7d\xec\x7a\x81\x79\x6e\x2b\xe1\x88\x85\x77\x55\xd3\x8b\xd6\x89\xeb\xcd\x66\xa9\x14\x0f\x47\xbf\x03\x25\x21\xa9\xbb\x88\x4c\x5b\x23\xfe\x83\x22\xd1\x68\x32\x99\x66\x6d\x68\xff\xd2\x7c\x46\x71\x62\x7d\x2a\x95\x48\x88\x08\xa9\x23\x7a\x9c\xb4\xb1\x1f\x6e\x56\xcb\xb4\x80\x99\x5d\xf6\x78\x41\x20\x98\x31\x8d\xae\xa2\xa5\x6d\x01\xb7\xa9\x1f\x6b\xb1\x0a\x09\xd7\x82\x56\x12\x10\x7c\x3d\x08\xc4\x40\xbb\x3d\x85\xc1\x4f\x42\x07\xb0\x7a\xc6\x50\xbc\x64\xf3\xc0\xc9\x35\x56\x72\x6c\x24\x00\xbd\xa1\xd1\x5a\xd5\x84\x38\x90\xbb\x83\xb4\x38\x5e\xcf\x8f\x98\x71\x70\x28\x3a\x41\x36\x4a\x35\x50\x59\x32\x09\x09\xc3\xa8\x56\x1e\x99\xb5\x0e\x27\x47\x94\x89\xce\xcc\x70\x65\xe6\xe1\x9d\xad\x5c\xb6\xaa\x68\x6a\x93\x16\x1f\x1d\x0e\xa2\xd2\x70\xa1\x31\x61\x84\x8e\xca\x77\xc5\xca\x93\x53\xb9\x41\x03\x08\x24\x13\xd3\x7c\xbd\x48\xc1\xf5\x45\x23\x37\xd1\x87\xd5\xd2\xe0\xb4\xdc\x7c\xfe\xd0\x70\xb2\xde\x1c\x2a\xea\xca\xc4\x0a\x9b\x07\x60\xe5\x44\x5d\x5a\xf3\x94\x8c\x42\x2d\x92\x80\x5c\x36\xcb\x13\x69\x57\x0f\x78\xcc\x88\x47\x8d\x04\xfa\x90\xfa\xfe\xef\x0e\x47\x47\x92\x10\xa0\xd7\xae\x7e\x8d\x59\xba\x4a\xa9\xbe\x54\x37\x4d\x71\x5e\xc2\xe8\xba\x23\x82\x30\x81\xa7\xe4\xd8\xc3\xb5\x71\x87\xbe\x04\x1a\xf3\xd7\xcb\xea\x62\x8b\x30\x9a\x4b\x56\x6f\x74\xf1\x5b\x0d\x8a\x19\xd5\x96\x6d\x11\x0e\x5e\xe7\x6b\x20\x17\x6b\xb4\xba\x2d\x64\xcb\x70\xda\xdd\x9f\x7f\xff\xaf\x5e\x0c\x4a\xf4\xdd\x64\xf6\x33\xa2\xc7\xdd\x95\x46\x1a\x13\x8f\x46\xcf\x54\xe6\xcf\xba\xdb\x97\x9d\x39\x6f\x93\x5c\x53\xe3\x02\x38\xe7\x03\x19\xd1\x71\x6b\x10\xea\x22\x81\x02\xcf\x83\x78\x4c\x5f\x3a\xaf\xf8\x1c\x50\x9c\x8a\x4c\x68\xc0\xa5\x30\x21\xdc\xde\x69\xcb\x8c\x0e\xd4\x17\x7b\xe8\xe8\x38\x1b\xb5\x3a\xb9\x9e\xf3\x7a\x45\x0d\x04\x20\x18\xae\x4f\x79\xfa\xab\x8b\x2f\xd0\x98\xe0\x6c\x0d\x2c\x29\xf3\xb4\x47\xbe\x86\xf2\xe7\x8d\xc5\x71\xce\xf2\x51\xb6\x14\x98\x1b\x52\x19\xf3\x0e\x60\x81\xb0\x5c\x15\x0b\x4a\xf9\x3e\x5b\x8b\x1b\x00\x94\xa6\xa1\x69\x70\x26\xd5\x80\x40\xa1\xac\xf1\xad\x1a\xae\xb1\x0d\xae\xa9\x00\x24\xaf\x89\x05\x3a\xc1\x10\x51\x38\xb2\xa2\xa0\x42\x74\x3a\x40\x60\x7b\x3e\xbc\xa7\x85\x16\x27\xfb\x61\xe7\xde\x9d\x75\x39\x07\xe7\xe9\xfe\xf7\x39\x10\xf0\x9e\x27\xa0\x01\x08\xa9\x4c\x1e\x12\xf9\x63\xd0\xb8\xca\xc4\x91\x48\x68\x91\xf4\x64\xcd\x9e\xf2\x87\xeb\xe1\x59\x47\x8f\x66\x99\xa9\x01\x04\xb6\xab\xc1\x12\xd6\xdf\x2f\x9f\x09\x4e\xe6\x02\x3d\xf0\xf8\x53\x66\xbb\x30\x54\xab\x3b\x57\x4a\x26\xc3\x20\xc6\x49\x9c\x0b\x32\xb8\xb4\xf2\xfa\x02\xec\x33\x31\x91\x00\xdb\x6b\xc3\x89\x72\x60\xc8\xd4\x7d\xb2\x92\x41\xcc\xb6\xae\xfc\x99\xbe\xab\x13\x81\x83\xd4\xfc\xeb\x64\x08\x84\xbc\x94\x40\x1d\x0c\x5c\x71\x2d\x10\x9e\x39\x28\xd6\x42\xec\xac\x2c\x76\x11\xd1\xa3\xad\x12\x41\x4c\x58\xc2\x71\xaa\x48\x5b\xa9\x21\xc9\x66\xe4\x85\x2d\x74\x7c\xf8\xef\x9f\xd9\x04\x89\x6e\xb9\x50\xce\xa4\x52\x03\x5e\xb0\x62\xc2\xec\xd5\xf8\xc3\x47\x4f\x9f\x66\x85\x00\x3d\x2b\xa5\x8c\xa4\xe5\x68\xfe\xb4\xb0\x57\xf0\x44\x3b\x4b\x66\xde\x78\x31\x82\xc8\x5e\x17\x0b\x55\xab\x5d\x92\x33\xa0\x40\x6a\xfc\x4b\x38\x7b\x56\xdb\x2e\x20\x22\x6b\x35\x02\x81\x0f\x1d\x11\xb0\xd1\xfe\x68\xa5\x47\xc2\xbe\xb5\x70\x43\xe9\xb9\x92\xb3\x2a\xf9\x36\x04\x06\x69\xaa\xd3\x53\x2b\xd0\xbf\xb8\x75\x34\x34\x39\x35\xea\x64\x6a\x90\x2b\x0c\x86\x9d\x4b\x6b\xb9\xd2\x4e\x71\xe9\x42\xa5\x19\x02\x05\x94\x4d\xf0\x88\x13\x0e\x2b\x2b\x3f\x7b\x07\xc6\x32\x13\x4d\x83\x9b\x4e\x4a\x7f\x56\xf1\x75\x10\xfc\x39\x30\xd1\x24\x23\x64\x56\x9c\x2f\xd5\x2c\x29\x91\xcf\x0d\x41\x6b\x30\x94\xc6\x82\x5e\x1b\x8c\x87\x81\xf9\x46\x1c\x94\xdf\x9b\xcd\x05\xc0\xdc\xdc\x6e\xb1\x02\x8b\xf7\xfb\xba\x94\x3c\x25\xa2\x11\x9c\x4a\xad\xc0\x9c\xf7\x8c\x76\x71\x00\x24\x9c\x9b\xea\x1e\x9f\xc9\xe8\xaf\x64\x09\x40\xe4\x77\x77\xf5\xb8\x3f\x9d\x04\xe5\x52\xc0\xfd\x18\x73\x90\x0a\x44\x31\xab\x46\x13\x2d\xa0\x5f\xf1\x45\x31\x7d\xfd\x7a\x63\xe3\x91\x16\xc6\x9d\x5a\x8c\x19\x68\xd0\xf4\x5b\xdc\x11\x1e\x07\x94\xc6\xcf\x24\xc3\xfd\x9d\x26\x05\x00\x44\x57\x78\x18\x26\x66\x65\xc5\x25\xe9\xed\x20\x7e\x29\x09\x7e\x8e\x12\x83\x58\x4c\xb7\x74\xcb\x9b\xdd\xd2\x85\x96\x8e\x4a\x06\x4b\xdd\x2f\x2f\x28\x97\x46\x5b\x0c\x98\x4b\x59\x3d\x3b\xca\x1f\xca\xd8\x95\x62\xff\xfa\x97\x83\x7e\x24\x56\x64\xb8\x5d\x9a\xa2\x38\xda\xdc\x7c\xd4\xf7\x1a\x02\x81\x62\x4a\xd3\x16\x29\x3a\x76\x20\xff\xfa\xa3\x18\x33\x52\x86\x52\x97\x51\xb4\x8f\x04\x7d\xcb\xba\xe4\x7f\x4f\xed\x0c\xd6\x09\x6b\x06\xc5\x55\x50\xc4\xc1\x8b\x7d\xb3\x9f\x53\x56\x95\xaf\xfd\x0c\xcc\x7f\x78\x7f\x73\x00\x51\xca\x72\x6f\xaf\xb1\x9f\x33\x1e\xa3\xff\x7a\xe7\x90\x32\x89\x46\x10\xa4\x8c\xd2\xfa\x27\xd6\xaf\xa3\xd8\xdd\x6e\x4e\x3f\xf0\x1e\xd7\x7b\x22\x5d\xf5\x31\x16\x42\x2b\x1f\xc4\xd5\xb5\xa5\x0d\xe3\xb0\x3b\x2a\xab\x0a\x8a\xed\xd1\x65\x4f\x5d\xc2\xdd\xd6\x2d\xce\xd2\x4e\x7e\xb5\xbf\xf8\x32\xf5\xcc\x9c\xf2\xa3\x75\x25\x6c\xc5\x28\x5a\xbe\xad\xbb\xa3\x9d\x62\x7f\xa1\x39\x4d\x99\x68\x5d\x5a\x1f\x0e\x33\x27\x29\xa2\x14\x39\xa0\x23\x87\x3e\xcc\x2a\xd7\x03\x3c\x63\x8c\x3b\xda\x1c\xd4\x9a\x7d\x6c\x3e\xe2\xa7\xfb\x25\xfb\x29\xb7\x56\x60\x10\x6c\x65\x59\x17\xee\x2e\x35\x2a\xd0\x0f\xd9\x0f\xa5\x44\x7e\xea\x2d\x0c\x89\xf6\x07\x64\x35\x4a\xe1\xc6\x5a\xf5\x21\x51\x03\xb5\xb9\xd3\xa6\xa7\x5e\x66\x01\x50\x80\xa3\x2f\x66\x6a\xbe\x0b\x81\x54\xca\x58\x91\x12\xa2\x04\x58\x26\x28\x66\x21\x08\x88\xc3\x9d\x5e\x13\xf2\x98\x67\x2f\x6a\x3c\x09\xb3\x2f\xda\xc7\xeb\xa5\x83\x53\x27\x4a\xd6\x93\x35\xe1\x56\x5e\x09\xfe\x95\xfa\xdf\x9f\xbf\x9e\x5e\xc4\x19\x6d\xbc\x7b\xa0\x8f\x06\x32\xbe\xac\x3b\xa2\xa5\x0d\x30\x69\x37\x04\x24\x01\xe0\x0f\x07\x16\x26\xe2\xa9\xb5\xfe\xd3\xb5\x8e\x8d\x8d\xab\x8f\x58\x45\x4f\x53\xe8\x1f\xc0\x78\xc6\x35\x0e\x1e\xc7\xb1\xbd\xd9\x8a\x74\x22\x8e\x15\x68\xaa\x11\x88\x76\xe7\xaf\x5f\x43\xda\x16\x83\xe5\x53\x95\x9b\xbd\x7e\x41\x24\xba\x3c\x86\x40\x0b\xd1\x01\xbc\xe5\x1e\x66\x8a\x5c\x3b\x53\xcc\x61\x8c\x29\x9a\xa6\x36\x43\xd1\xd1\x5f\x9d\xde\xdf\xce\x8a\x0c\x67\x30\x28\x34\x69\x2d\x6b\xc2\x13\x3c\x05\x0a\x23\x35\x74\x8b\x5c\x43\x43\xa3\xab\x19\x68\xf5\x3e\x0c\x3b\x8f\x21\x60\xb6\x08\x90\xa9\xa8\x0b\x20\x33\xaa\xf3\x2d\xd7\x00\x05\x36\x95\x68\x74\x0f\x89\x44\x5d\x1b\xe9\x53\xb0\x65\x4e\x87\xa8\xea\xeb\x0d\x8d\x7d\x83\x7d\x8d\x8d\x8b\xa8\xe6\x22\xad\xde\xce\xcf\x13\x23\x51\x6e\x93\xb7\xb2\x16\xba\x60\x46\x3a\x9f\xc3\x19\x10\x04\x3e\x15\xa1\x37\x39\x24\x6c\x56\xda\xcc\x65\x7e\xcc\xcb\xc7\xcc\x88\x16\x4a\x10\x61\xfa\x25\x93\x89\x71\x7e\xd6\xdc\xa3\xb3\xcb\xb4\xaf\xa7\x5e\x0f\x6c\x87\x43\xb1\xf4\xb3\x03\x0d\x66\x2b\x2f\x0e\xae\x0b\xb9\xfe\xe1\xb4\x65\x42\x61\xbb\xe8\x13\x3c\xed\xba\x27\xb4\x20\x5c\x2a\x00\x46\xf3\x99\x43\xdb\x3b\xad\x8d\x7c\x1c\x84\x63\x0d\xb7\x86\xda\x80\x98\x4e\xba\x7f\xf6\x66\xbe\x21\xe0\xff\xf9\x4c\x32\x69\x7e\x81\x3c\x5b\x0d\xc5\xd8\xc5\xed\x70\xeb\x84\x08\x26\x9a\xd1\x95\x41\xbe\x6b\x6e\xee\x6e\xba\x90\x72\xbe\xed\x8b\xa7\xfd\xec\xe9\x1b\x6e\x26\xbb\x66\x17\x7f\x76\x1c\x6e\x6a\x6e\x94\x2d\xcd\xe8\x32\x1f\xdc\x35\x28\x21\xec\xd1\xf2\xa2\xf4\xd5\xdd\xc4\x72\x43\x7e\x87\xe4\x8a\x44\x04\xb2\x97\xcd\x22\x60\x5c\x54\x9f\x27\x6a\x09\xbe\xcc\x50\x60\x92\x30\x69\x1a\xdc\x4f\xcd\x9a\xe7\x9d\x46\xec\x6b\x72\x66\xed\x75\xc9\x99\xf7\xa2\xda\xa9\x6a\x5c\x27\xaf\x1e\x33\x83\x21\x42\xba\x49\x45\x6c\xdf\x51\x3f\xa6\xf3\x6d\x31\x32\x3c\x54\xbf\xa7\xf3\x12\x52\xe7\xa4\xa5\x7c\xc0\x58\x7d\xdf\xf5\xe7\x0b\xef\x76\x85\xab\x66\xe9\x2a\xb7\x3f\x5f\x88\x4b\x7c\x49\x59\xf5\xde\xc4\xfb\xa3\x92\x85\x7b\xbd\x25\x6d\x60\x2a\x10\x35\xdc\x44\xbb\xa4\xd1\x60\x8c\x87\x4e\x81\x9f\x39\x24\x23\x93\x63\xbd\x87\xa4\x0c\xd8\x14\xa0\x05\x18\x7a\xe1\x4b\x8b\xca\xcf\x17\x84\x74\xb1\xd8\x80\x1f\x0b\x64\x82\xba\x6b\xd8\x81\xdd\x37\xf3\x07\xec\x5b\x83\x33\xa8\x03\x7a\xa2\x19\xdc\x90\x2c\x9e\xa6\xc1\xbd\x62\x3c\xf7\x1a\x7c\x53\x3c\x97\x7e\xd8\xba\x2d\x56\x45\x89\x6c\x0f\xcc\xa4\xaa\x02\xed\x69\x41\x40\x4f\x5b\xb6\xd8\x2e\x35\x3e\xc4\x70\x51\xf5\xa5\xa5\xe2\x65\x8b\x3e\x96\xe1\x52\xc7\x77\xe7\xd8\xaa\x44\xe7\x2e\xdb\x8b\xd0\xde\xe4\x0d\x58\x4e\x23\xb1\x27\x4e\xa2\xa4\xca\x6a\x6a\x01\xa2\x91\xd0\xbe\x34\x17\xd5\x21\x06\x99\xb1\x74\x4b\x5f\xbd\xe2\x93\xcb\x66\xa5\x52\x80\xc0\x21\x40\xe6\xa3\xbc\x43\x12\x94\x4a\x2d\xa8\x12\x6a\x61\xc9\x1e\x48\x2a\xf6\xcd\x0c\xe3\xfb\x8d\x81\x9d\x4e\xee\xcb\x70\xb4\x40\x77\x97\x56\xb4\x5b\x3b\xbb\xdd\x0d\xdd\xea\xe2\x9e\x84\x73\xec\x71\xc2\xe5\xd1\x48\x8a\xa4\x6c\x81\xb6\xda\x9c\x41\xbb\x3f\xd4\xfe\x79\xad\x09\x22\xba\x6a\xfd\x21\x80\xe4\x84\xd6\x3c\x7f\xdc\x55\xb4\x3f\xdd\x68\xbd\xe5\xc0\xe5\x7f\xa6\x6b\xe1\xa7\x31\xb1\xa6\x6f\x61\xde\xbb\xf8\xdb\xd6\x65\xe9\xfd\x38\x53\x80\x9c\x31\xf7\xd0\x9d\xe4\x8b\x84\xb6\x04\x8c\x21\xd3\xf3\xba\xe2\x39\x93\x68\x85\xd8\x49\x0d\x18\x87\xd6\x42\x8e\xeb\x0a\x07\x11\x39\x4b\xab\x6f\x5f\x28\x00\x5b\x01\x66\x19\x30\xb7\xb8\x88\x6f\x21\xfc\x0b\x85\x92\xf9\x33\x31\x1d\x9e\x43\xb7\xbe\xc1\x3b\x58\x0e\x96\x49\x68\x24\xa5\xc9\x80\xe7\xa6\xb9\x40\x84\xc5\x40\x30\x57\x6c\x0d\x1f\xdd\x11\x5d\x86\x26\x29\x73\x36\xf0\xe0\xa8\x34\x77\xf1\xa4\x59\x90\x33\x63\x2e\xfc\xe3\x4d\x02\x67\x0b\x5e\xbc\x14\xc8\x31\xd2\xc7\xe9\xb9\x4f\xb3\x71\x73\x23\x4d\x73\xf1\x82\x33\x5a\x4e\x4c\x4d\x69\xf6\x7d\xf0\xf0\xc6\x0d\xa1\x39\x8d\x7f\x55\x82\x7e\x87\xe8\xb3\x78\x7e\x7b\x16\xae\x24\x36\xba\x08\x9c\xa8\x03\x46\xd5\xc9\xac\x51\xaf\x45\x69\xee\x32\x57\x76\x86\x59\x14\x46\xa6\x0c\x41\xdb\xe7\x9e\x56\x10\x6c\xa8\x0b\x14\xb8\x06\xed\xd6\xe4\x04\x56\x44\x58\x65\x72\xe2\x28\xb4\xc0\xb0\x5a\xba\x65\x9e\x92\xeb\xcd\xb0\x90\x16\x33\x29\xdb\xca\x5c\x74\x00\x1a\x8a\xf9\x35\x5c\x5e\xe1\x22\x72\xf2\x19\xd0\xa8\xe7\x73\xb3\x0a\xdc\x77\xee\x1d\x50\xe4\x35\x8e\xaa\x66\x37\xa1\x4e\xdf\x4b\x24\x66\xb3\xc8\x5e\x71\x7b\xb0\x22\x4c\x8d\x9d\xdc\x5d\xaf\x88\x19\x7a\x60\x40\xf8\x95\x44\x51\x68\x97\xcc\x04\xe6\x36\x66\xb2\x9d\x16\x95\x1c\x7e\x68\xab\x47\xa9\x35\xc6\x75\x55\x04\x37\x47\xe4\xf0\xed\xeb\xb8\xc4\x15\x7e\xf7\x0a\xc1\xb8\xe3\xf5\x2e\x88\x23\x33\xf1\x50\x13\x0b\x8e\xfa\x54\x56\xca\x21\xbc\x1f\x6e\x7f\xac\xaf\xef\xda\x98\x05\x50\x66\x36\xa0\xd5\x89\x3e\x6c\xdb\x36\x09\x39\x40\xdd\xd2\x96\xf7\xa6\x99\x1e\x8f\xa5\x02\xe0\x35\xcf\x9a\x36\x32\xf2\xf9\x74\x40\x37\x0a\x9e\xe1\x4c\x8e\xce\x32\x09\x1d\xf6\xd7\x17\x20\x74\xfc\xf5\xed\x27\xd4\xaf\xc0\x62\x48\xca\xe4\xef\xd4\xbc\x01\x88\x77\x12\xcb\xe6\x57\x66\xf2\xf1\xb7\xc9\x8a\x37\x3d\xcc\xdb\xfc\x2e\x3d\x62\x78\x0d\x25\x05\x64\x3f\x0d\xba\x7f\xc1\xee\x8d\x61\xb3\xca\xcb\x20\x92\x39\xe0\x65\xff\x70\x90\xa7\x8b\xbd\x48\x8f\xd2\xa9\x0c\x4b\xc8\xe5\xf7\x5c\xf0\x90\xc5\xdb\x8f\xfb\x9d\x84\x9e\x84\x8c\x24\xa0\xb0\x98\xe3\x9b\x43\x25\x96\x30\xa8\x96\x1c\xc1\xe6\x0d\xc9\xc6\xca\x05\xe6\x83\x01\x9d\xdd\x6e\x74\x76\xa3\xbc\x3a\x80\xb5\x4d\xc8\x60\xe1\xb3\x91\x42\x84\x8d\xdb\x61\x73\x70\x93\x26\x0b\x29\x02\x22\x2d\x12\x71\x63\x83\xa3\xaa\x09\x9b\x93\x40\xa9\x49\xe2\xc7\xe8\xf3\x62\x6b\xdc\xd9\x14\xb9\x9d\xa9\xcc\x05\x33\x65\x50\x9c\x16\x46\x38\xdd\x01\x89\x5a\x6d\x55\x4c\x28\xd9\x11\x28\x71\x50\x30\x35\xbf\x19\x6e\x19\x27\xbc\xa5\xc1\x43\xf8\xc7\xc2\x56\x89\xb5\x8a\x69\xc0\xb5\xaa\x9b\xda\x12\x93\xa1\x8e\x6a\x95\xd0\xf0\xc9\xbf\x04\x58\x3f\x71\xe9\x67\x5e\x3a\xd3\x9b\xc0\x5b\x5b\x50\xb0\x56\x38\xa9\x9c\x19\xb2\x0b\xa1\x9f\x36\xa4\x00\xda\x3d\x49\xc9\x89\x28\x08\xb5\x63\x06\xcd\x47\x96\x9a\x15\xdb\x40\xa9\x15\x17\xbd\xe0\x4c\x62\x21\x6c\xb7\x6c\x05\xdc\xc6\x38\xdf\xac\x4d\x76\xda\xf9\xfa\x9d\x76\x56\x62\xf5\x71\xdf\x7e\x15\xdc\xd2\x12\x2f\xa4\xda\xcd\x25\xc7\x49\x69\x1f\x88\x85\xc0\xb6\xd2\x82\xcf\xa1\xd6\xa3\x54\xf3\x9d\x3d\xfa\x21\x42\xb3\x83\x04\x50\x06\x53\x06\x3a\xa6\x6d\x9d\x75\xac\x76\x8b\xd0\x04\x05\x50\x04\x9f\xc8\x73\xcf\xcf\xa5\xef\x3b\xa7\xbf\x17\xa6\xcf\x5a\x04\x7c\x73\x2c\x16\x47\x85\x0f\xcb\x3a\xe0\xc6\x70\x48\xf6\x8a\xaf\x67\xd9\xe9\x56\x15\x75\x80\xa3\x17\x5a\x08\x52\x3e\x66\xe6\xcc\x40\x9d\xe2\x00\x65\x14\xe2\x8b\xae\x40\x46\xc3\x3c\x36\xe3\xcd\xb2\xe0\x2e\x1d\x05\x93\xba\x4c\x81\x0d\xd6\x10\x2f\x81\x29\x93\x58\x94\x0b\x04\x33\x22\x4c\x4e\x3e\x94\x5e\x82\x6d\x0b\xd4\x14\x98\x77\x27\xd6\xc1\xe5\x15\x95\xa9\x3e\xdb\xfa\xd4\x1b\x5c\xe3\x43\x3c\xeb\xf1\x85\x43\xfd\x4b\x62\x60\x9e\x28\x2e\xf6\xee\x75\xd6\xc1\xd6\xb0\x9a\x81\xa5\xd6\x54\x9e\x18\x27\xc8\x20\x82\x6f\xef\xd5\x06\xf3\x4d\x47\xf4\x98\x7b\x1d\x78\xb8\x24\x0a\x76\x06\xac\x1b\xfa\x39\xef\x0a\xab\x7c\xe8\x9e\x46\xb0\x8d\xc9\x78\xca\xca\x80\x61\x10\x40\x51\x49\xdb\xd6\xa7\xf3\x27\xed\x7f\x3d\xcf\x7a\x7c\x51\xf9\x6f\xd8\xfc\x5e\x42\xec\x66\xd3\xff\xa2\x2c\xb3\x5a\x66\xfa\x57\xfa\x01\x34\xe6\xa9\x23\x9d\x08\x07\x34\x93\xce\x79\x81\x49\xac\x07\x95\x98\x39\x23\xdb\xf4\x35\x0c\x0e\x5a\xda\xad\x0e\x45\x0c\xa7\xd9\xe6\xc0\x32\x1d\x07\xe2\xb7\x70\x93\x27\xc6\xdb\x16\x42\x87\xa4\x7e\xbb\xa5\xf6\x55\xb8\x6a\x7d\x15\x1a\xdb\xa3\x10\x57\x77\x45\xfd\x60\xee\x09\x0d\x11\x6d\xf7\x27\x3f\xe8\x16\x21\xac\x40\x20\x00\x80\x83\x43\x20\x32\x43\xd9\x1e\xf9\xd1\x00\x70\x63\xad\xc4\x08\x6c\x13\xdd\xbb\x4f\xc5\xa1\xd8\x1f\x7b\x28\xbe\x43\x32\x0e\xc9\xe0\x6b\x43\x89\x83\xf1\xd1\x6b\x81\xf6\x27\x8c\x55\x98\x22\xae\x16\xe9\x43\x3f\x08\xbf\x0c\x54\xf2\x51\x5e\x90\xee\x0c\xda\x9d\xb8\xa4\x6b\x4b\xf1\xe6\x6d\xc5\x33\xce\xe9\x6d\xec\xea\x24\xba\xdb\x9d\x16\x81\x00\x8e\x1f\xcd\xae\xb0\xb4\x5d\xe0\x3c\x69\x28\x00\x51\x26\x77\x6c\x64\x6d\x59\xdd\x31\x9f\x20\x0f\x73\xbb\xe8\x33\xec\x95\x68\x4f\x01\x4a\xa6\xa5\xff\xf1\x3a\x9c\x4e\x89\x49\xa2\x95\x37\x4e\xc1\xd8\x24\xa9\x7a\x16\xda\xb8\xba\xf4\x0b\x23\x23\x1c\x04\x6f\x74\x34\x7a\xcf\x8a\xb9\x70\xe3\xe4\xe9\xa9\x9a\x9c\x30\x8f\xa4\x6b\xfe\x78\xe5\x0c\xc8\xac\x55\xaa\xb7\xb6\x18\xcf\xc3\x9c\x46\x7e\x3a\x28\x7c\xb6\x42\xb9\x8e\xfc\x94\xcb\x6e\xe9\xe9\x6d\xc6\x09\x60\x4e\x0b\x2d\xab\x95\x8f\x64\xcd\xfe\x6c\x9d\x9d\x39\xa3\x2f\x19\x5c\x54\xcc\x26\x31\x89\xcc\xc2\x03\xbe\x17\x01\x39\x9b\x56\x3c\x76\x6e\x1f\x06\x03\xb7\x3a\x7d\x3b\x42\x2b\xd7\x87\x0e\x64\xde\x53\x8e\x5c\x48\xa0\x11\xda\x08\x0c\xc9\x6c\x35\x14\xed\x20\x6a\x8b\xa8\xa6\x66\x65\x5f\x88\x8c\xd6\xe9\xe6\x4e\xcc\x81\x61\xc4\x38\xbf\x82\x7c\x7c\x67\xf5\x80\xc0\x78\xcc\xd4\x57\x46\x8c\x69\xf0\xc8\x25\x11\x43\xcf\x46\x01\x23\xed\xf6\x4d\x6b\xa7\x8c\x31\x97\xe8\xf4\xb1\x11\x06\x9e\x77\x4a\x25\x22\x83\x11\x5c\xd3\xbe\x37\xc5\xdb\xc3\x17\xa4\x52\x0d\x18\x19\xeb\xdc\x36\xbd\x3b\x94\x7b\x3c\xb1\x55\x4b\x91\x39\x60\xdc\x3b\x24\xea\xd1\xbe\xb5\x3c\xe1\xbb\x7b\x62\xf1\x61\x2a\x4d\x77\x66\xd4\xb1\xba\xb3\xa8\x4f\x5f\xee\x67\xa8\x32\xc3\x0f\x0e\xf9\x45\x17\x06\x6a\x89\x5d\x56\x11\x16\x01\xe4\xd7\x34\xf2\x58\x95\x0c\x2a\x8f\xe9\x67\xef\x53\x30\x8c\x4b\xf7\xbc\x88\x63\xfe\xeb\x8e\x41\xa4\x81\x54\x1a\xed\x50\xf9\xdd\x8f\xb8\x60\x7e\x8f\x65\x3f\xa1\x16\x46\xfa\x5b\xbe\xba\x6e\xba\x6a\x58\xcc\x6e\xd8\xb1\xdb\x55\x94\x95\x35\x5a\x20\x1b\x1a\xbc\x22\xa0\x92\x0e\x70\x88\x73\x73\x99\xb4\xd6\x34\x31\xd8\x40\xb7\x84\xcf\x01\x06\x94\xd6\x10\x47\x69\xc0\x3c\x4a\xdb\xc4\x3c\x7b\xa6\xc9\x7a\xd3\xe5\x01\x9f\x0e\x0b\xde\xa2\x4d\xd6\x7d\xa0\x0c\x61\x9b\xcf\x21\x42\x65\x3a\xe1\xdc\x8d\x6f\xb9\x60\x2d\x93\x43\x5c\xd8\x2e\x79\x6b\xac\x1a\xfe\x24\x03\xf6\xec\x82\x65\x78\xc7\xb3\x80\x4e\xf0\x48\x95\x01\x1e\xd2\xe8\x90\x28\x81\xcb\xc8\x5f\x8c\xa3\xbd\x9d\x01\x21\xcb\x4b\x46\xb3\xab\xd7\x08\x6f\x74\x76\x57\xd5\xd8\x77\x2d\xe5\xc4\x73\xb4\x4c\x00\xd2\x3e\x89\xcc\x5d\x39\x62\xf3\xb0\x09\x88\x4a\x6e\x12\x99\x29\x73\x6e\x9c\x74\x5f\xf2\xf2\x19\xeb\x5f\x0f\x78\x45\x4b\xad\x94\x44\x94\x06\x20\xa5\xbc\x42\x09\x99\x24\x67\x59\x98\x41\xbf\x56\x3e\x1f\x67\x24\x95\x25\x4c\xd0\x30\x4c\x23\xee\xe3\x7b\x1b\x26\xce\x9d\x98\x96\x46\x74\x0f\x64\xeb\x5c\xc0\xa5\x50\x94\x13\x3d\x9c\xd2\x1b\x61\x34\xe2\xca\x0d\x8f\x1f\x0f\x38\x22\x9c\x3c\xdc\x9d\x8a\x8b\x73\xfc\x4c\x5e\x5e\x4e\xdf\xdc\xf2\x45\x63\x9c\xc7\x76\xb9\xac\xed\x48\x2d\x5f\x3e\xe9\x97\xf2\xa7\xf1\xd6\x8b\xd8\xda\xf8\x02\x3b\x7c\x2b\x87\x63\xa9\xc8\x21\x8b\xa9\x04\xbf\xb6\xbf\xde\xea\x0b\x38\xbe\x1f\x4f\x2f\xd2\x2e\xe8\xa7\x84\xc1\xf7\x4a\x6e\xc6\x38\xbc\x26\xa8\x2c\xec\x11\x81\x96\x25\xeb\x73\xf3\x74\x90\x5d\x36\x28\x0b\x6b\x07\x96\x48\x36\xf1\x0c\x89\x46\x71\x23\x28\xdb\x89\x5b\x96\x79\x97\x8c\x8f\xa6\x7b\xfb\xc1\x30\x28\x93\x5e\xe0\xca\x0b\xd6\xbf\xc1\x62\xd6\xf8\xeb\xd7\xa3\xac\xc5\xac\x0e\x03\x83\x92\x80\xe4\x17\x14\x00\xdc\xda\x0b\x9d\x9d\xfd\xb4\x91\x26\x66\x86\xce\x7a\x43\x71\x49\x89\xcf\x12\x10\x15\xdd\x3c\xce\x9c\x24\x92\xab\x28\x28\x68\x5c\xd2\x45\x44\xe9\x43\xd1\xf4\x1f\x01\x1d\x15\xad\xdd\x1c\xdc\xf3\xe9\x63\x5f\xe8\x78\xf6\x2f\xc1\x83\x45\x82\x2e\x3a\xe4\x1c\xfd\xfc\x69\x5e\xf8\xc6\x2b\x8a\xce\x9f\x9e\x31\x7f\x18\xd7\xa6\xc9\xf3\xd2\x82\x4a\x69\x34\x40\x60\x6c\x87\x78\x10\x4e\xef\x4c\x24\xe6\x90\x98\x36\xc3\xd2\x54\x97\xaa\xc5\x12\x2e\x9d\x96\x3f\xd0\xea\x8f\xe4\x0f\x34\x07\x5d\x0c\x8d\x58\xa4\x31\x68\x7c\x7d\x67\x38\x3c\x31\xc8\xa4\x3c\x0b\xee\x40\x4b\x02\x8d\x9a\x2f\x16\xc7\xf5\xa2\x2f\x0b\xe3\xa5\xd1\x35\xed\x70\x01\xc8\x7f\xd7\x9c\xca\x6f\xeb\xe8\x91\x74\x92\xae\x70\x87\x10\x61\x20\x6a\xe9\xa5\x74\xe0\x62\x45\x91\x12\x9c\x0b\x45\xa9\x79\xf6\xb7\x26\xd0\xa6\x34\x60\xd8\xaf\x11\x89\xbd\xb5\x24\xd2\x4c\x87\x04\x9d\xf9\x22\xab\x85\x7f\xad\xe7\x83\x4a\x76\x69\xbe\x0c\xc1\x6c\xee\x00\x6a\xa3\x5a\x25\x3d\x27\x29\xbe\x96\x38\x96\x18\x65\xe6\x88\x14\xc8\xe1\x60\x38\xfc\x54\xca\xe1\xc7\xec\x2a\x8f\x4d\xe7\x38\xf5\x9b\xbb\x2e\xac\x80\x87\xbb\x8d\xd6\x77\xb8\x7e\x0f\xc9\xe2\xf5\x5c\x28\x48\x94\x74\xa4\x76\x0b\x72\xab\x22\x6a\x44\x6f\xbd\x47\x10\x47\x0d\xe6\x98\x69\x03\xfe\xb2\x84\x6c\x03\x48\x65\x8c\x86\x25\x69\x61\x26\x39\xb3\x64\x89\xb6\xcf\x1c\x64\x3e\xf3\xfc\x0e\x2d\x69\x0d\xb7\x6c\x4d\x12\xee\xbe\xdc\xb0\xd9\x16\xa1\x54\x41\xef\x94\x24\xb6\x9c\x56\x48\x47\x7c\xe7\xb3\xec\x0a\x88\x17\x24\xc7\x0f\x0b\x0b\xea\xf9\x3a\x1d\xc7\x12\x31\x52\x0c\x15\x73\x5c\xf0\x5a\x20\x14\x24\x91\x50\x6a\xd7\xdb\x87\xbd\x8f\x5d\xd9\x8b\xc6\x67\xd8\x38\x60\xe7\xb0\x86\x20\x16\xfb\x7a\xdf\x92\xf2\xa4\xcb\x56\xd4\x58\x8f\x19\x15\xa3\xdd\x95\x78\xba\x72\x74\x58\x2f\xa0\x41\xd1\x70\xd7\x32\xb4\x0f\x08\x5e\x5b\x31\x7e\x52\x7b\xef\x08\xeb\x9a\xac\x97\x19\xb2\xbc\xc9\x87\xa2\x3a\x6b\x0e\x43\x11\x55\x12\x27\x35\x6e\x98\x90\x1c\x25\xa1\x27\xd7\x43\x58\x02\x50\x30\x36\x47\x83\xdb\xae\x91\xfb\x6c\x5b\xe9\x3c\x96\x1b\x4e\x83\x73\x63\x4f\x46\x65\x51\xfa\xca\x2d\x92\x67\x69\x24\xf3\x18\x52\x4e\xe8\x13\xb2\xfd\x6f\x19\x37\xd2\x57\x7a\x9a\x0d\x5f\x74\xba\xb9\x22\x3f\xea\x7a\x3c\x51\xd5\xeb\x6c\x26\xb5\x91\x42\x2c\x35\xec\xa5\x22\xfa\x7d\x12\x5c\xd9\x11\xdb\x69\x5e\x93\x7c\x7d\xc3\xf0\xb1\xa2\x52\x9f\x9c\xbd\xd8\x19\xe8\xb4\x6c\x0f\x3b\x7f\x24\x89\x8c\xd1\xbb\xf9\x27\x64\x78\x77\xe1\xf2\x41\x2a\xc6\xcd\xba\x31\x0f\x5f\x77\xf0\x66\x24\x6f\x72\x97\x77\xa6\x56\xa5\x15\x24\x0a\xc8\xe9\x54\x1d\xdb\x48\x06\x69\xf9\xf3\x03\xfa\xf2\xd3\x4c\x16\xdb\xe2\x16\xfc\xe4\x6c\x56\x07\x63\x5c\xa0\xa7\xbc\xbe\x37\x4f\x0b\xec\x8a\x9a\x0e\xb7\xf4\xc5\xb9\x52\x86\x44\x29\xd7\x5d\xee\xf8\xbc\x8c\x42\xee\xd1\x01\xd3\xe4\xb6\x3d\x33\x95\xe8\xe9\x71\x46\xc9\x4d\x4d\xc9\xe8\xc8\x93\x86\x42\xca\xfc\x67\xb7\xc9\xd8\xdb\x0a\xad\x4f\x4d\x5b\xfa\xd4\xb0\x60\x12\x10\xf4\xad\x57\x5b\x70\x42\xce\x89\x74\x0c\xbb\xdf\x02\x69\xca\x5c\xf6\xf1\x60\xde\x7b\x19\x58\xea\xd1\xf1\x2f\x29\xd3\xc6\xa9\x63\x44\xbb\x52\xa7\xff\x50\x76\x7a\xee\x8b\x78\x9f\xee\xa6\x34\x39\x48\x13\x86\x5f\x9f\xc1\xd9\x87\x85\x23\xe9\xba\x31\xa2\xf9\x26\xd3\xeb\x50\xc2\x2f\xd6\xd5\xd6\xa1\xa7\xd5\x26\xae\x7f\x55\x9c\xa8\x75\x8e\xa8\xe0\x29\x96\xef\x6c\x39\xf6\xd0\xad\xf6\x3a\x21\xe5\x7d\xc9\x91\xbc\x3d\x5b\xf2\x12\x2a\xb2\x99\x3b\xa7\xad\xb2\x01\x84\x75\x7b\xb0\xb4\xb1\x03\xeb\x2e\x1a\xa4\x96\x70\x11\xbd\xe2\x22\xea\x21\xea\xe2\x06\x2c\xfe\xbc\x7c\x1c\x76\x0e\xab\x0f\x6e\x4e\x19\x9b\x4b\x0c\x13\xed\x36\x33\x75\x00\x64\x3e\x83\xf6\x36\x8c\x97\x04\xbb\xcf\x79\x2f\x48\x16\xa2\x7d\xdc\x13\x1e\x92\xf1\xd1\x91\x83\x02\x7b\x71\x4c\x81\x1d\x9c\xf1\x24\x92\xf2\x0d\x0a\xe7\x9c\xe0\x2d\xc4\xc4\xf4\x61\xa1\x8f\x5b\x8e\xfe\xf9\x73\x74\x0b\xdd\x6e\x53\x8c\x6e\x32\x8e\xc4\x9f\xe0\x40\xa1\x7f\x92\xee\x1a\xd1\xb7\x8a\x8d\x0f\xbf\x0e\x0f\x8f\x8c\x78\x48\x4e\x70\xc1\xa2\x89\xc7\xe3\xb5\xde\x10\x1e\xd2\x32\xf1\xd0\xe3\x08\x26\x04\xe1\xe9\x0b\x33\x03\x09\xa7\xf1\x84\xf3\x91\xcd\xc0\xc6\x66\x8c\xf7\x78\xe3\x0f\x29\xe7\xfa\x0c\x11\x01\x57\x50\x27\x68\x82\x37\x66\xf2\x3e\x91\xda\x20\x96\x02\x73\x21\xa8\x3b\x15\xfc\x70\x81\xd5\x26\x51\xfd\xb1\xb7\xce\x63\x0e\x4e\x1f\x04\x3e\x4f\x67\x64\x48\xf7\x45\xde\x31\x75\x09\x10\x7b\x84\xcc\x5e\xcb\xda\xaf\xfc\x56\xe4\x7d\xf1\xe8\xe3\x32\xdb\x40\xe7\x4a\xca\x48\x05\x95\x53\xe1\x16\x1e\xf6\x14\x3e\x21\x7e\xf5\x16\x9b\x4c\xe9\x5e\x64\x1b\x10\x09\x98\xe6\x72\xc0\xd2\x35\x2f\xe7\x1d\x90\x47\x79\x4e\x0f\x57\xfe\x08\x2d\xf5\x60\x05\xa4\xb1\x1b\xe2\xe4\xc9\x9a\x4c\x4a\x03\x9e\x8b\x3d\xa9\xd4\x28\x52\xa5\x56\x32\xc3\xc8\x8f\xec\x4d\x3b\xbe\x3a\x8b\x2d\xcf\xec\x41\x08\x30\x3c\x19\xc8\xa4\x09\x4c\xc3\x07\x31\x4c\x3c\x46\x28\xd2\x4a\xee\xad\xf4\x14\x4c\x0e\x86\xee\x43\x6c\xa8\x59\xf7\xf6\xc3\x4e\x8f\xfc\x03\x5f\x37\xed\x00\x3a\x2a\x95\x5c\x38\xcd\x8f\xde\x77\x08\xa0\xea\x0b\x0d\x64\x35\x27\x4c\xb2\xdf\xcf\xe5\xa6\xee\xf5\x48\xf7\x73\x35\x4d\x20\x9e\x32\x49\x44\x8e\x25\x9e\xb6\x57\x50\x5c\x70\x79\x72\xa2\x7e\x85\x83\xd2\x8d\xe9\x29\x71\x4e\x30\x07\xc5\x45\xf7\x7c\x29\x89\x28\xf5\x40\x01\xfc\xd6\x28\x22\x3b\x91\x4a\x47\x5a\x90\x21\xa3\xa3\x97\x55\xa5\xdb\x2c\x57\x4c\x8a\x23\x45\xd7\xac\xd2\x45\xb6\xad\x84\x87\x1c\x18\x99\x4f\x35\x2e\x4b\xfa\xc1\x91\xb1\x91\xa6\xf9\x99\x53\x6c\x73\x6f\x02\x8c\xc5\x7a\x89\x64\x92\x13\x37\xe3\xe9\xd3\xb3\x3b\x25\x05\x6e\x3c\x8f\x0f\x35\xff\x2a\x8f\x14\x0f\xf7\xd9\x69\x75\xb8\x8e\xb6\x3f\x6f\x8c\x93\x6d\x49\x96\x97\x22\x6d\x90\xf7\x2e\x1d\xe7\x14\x58\x4c\xf3\xde\xf7\xc6\x46\xa5\x91\xb5\xb5\x91\x8e\x19\x72\xe2\xc7\xf5\x73\x0c\xea\x96\x0b\xbd\x9f\xf9\xb4\x8e\x0d\x38\xb3\x21\xa2\xc8\xcb\x7b\x4e\x93\x63\xc6\x79\xd9\x97\xa3\xed\x04\x8a\xf9\x4e\x66\x80\xe7\x32\xe3\xfd\x21\xfc\x6e\x1b\x22\x35\x68\x55\xc4\x46\xf8\x86\x4a\x27\xd0\x64\x84\x42\x00\xc4\x32\xe5\xf2\x73\x76\x35\x11\xde\x09\xd6\xd7\xe5\x8b\xf0\xca\x43\xa1\x72\x13\x3e\x7e\x18\x2e\x81\xac\x1c\xb5\xdc\xa4\x10\x89\x6b\x67\xc7\xcf\x4c\x69\x6e\x4e\xf1\x64\x9b\x90\x8f\xf3\xbd\x75\x27\xad\xf2\xd2\xe3\x66\x5d\xa1\x1e\xf1\xb5\x42\xfb\x73\x14\x4c\xb7\xb7\x41\xc9\x01\x35\x53\x87\x68\xd5\x4b\xa3\x76\xe6\x9c\x76\x6e\x2d\xca\x5f\x65\xbc\x39\x10\x65\xf5\x56\x07\x22\x6d\x93\xaf\x07\x89\x42\x12\x3a\xef\x47\x03\xce\xab\xbe\x78\xd6\x63\xf5\x5a\x58\x0a\xae\xbe\xc9\x6f\x1a\x1b\xe9\xda\x79\xfe\xe5\xf9\x00\xf2\xc2\x48\x10\x4b\x67\x54\x9c\x1c\x7e\x63\x4e\x07\xc2\xb8\x17\xed\xe2\x00\x87\x4f\x5a\x4b\x3a\xdc\x62\xdc\x41\x07\x80\x25\x39\x43\x09\x5d\x9d\xc3\x6f\xf2\x15\xca\x97\x17\x98\xb9\xc8\xd5\x77\xdb\x31\x8d\xdd\x29\x1b\x28\xa3\x74\xb8\x98\x5e\xb2\x3f\xb1\x81\x75\x80\xc6\xa6\x98\x03\x2d\x14\x41\x01\x9d\xba\x8a\x39\xaf\x19\x8b\xa3\x00\xa7\xe9\x39\x4e\xd6\xd9\x84\x1d\x4c\xad\xf6\xc1\xbd\x23\xda\x41\x32\x59\x75\xda\xe9\xe1\xe1\xbd\x35\xc7\xc6\x2f\x5f\x1e\x1f\x3d\x66\x12\x71\x6c\x14\xca\xc7\x6a\xf6\xc6\xe5\xde\x87\x88\xbf\x11\xbe\xcb\xa1\x3f\x75\xf6\xfd\x41\x72\xa9\x5a\x99\x9a\x16\xcd\x02\xd1\x5d\xd3\x41\xeb\x58\x20\x14\x5f\xd5\x76\xef\x4d\x0f\xbc\x8f\x31\x56\x1c\x96\xbf\x26\x19\x50\x5c\xef\xea\x1d\xc5\x36\x58\xa3\x93\x32\xeb\xeb\x9d\x6d\x37\xe4\xa5\xb1\x5b\x6c\xd2\x8f\x27\xbb\x1e\x41\xa9\xc9\x51\x36\x52\xbb\x0b\x53\x0b\xed\x51\x7d\xeb\xeb\x94\xad\x53\x87\xec\x65\x7f\x95\xec\xef\x53\x1c\x5c\x44\x2d\x77\x4c\x72\x54\x43\x5d\xb9\xd3\x8e\x6f\x72\x6c\x79\xbd\xdd\x82\x58\xa5\xcd\xdb\x4a\x5e\x66\x6f\xee\xa3\x0c\x2d\x8a\xe9\x0b\xf0\xcb\xb0\x87\x95\x28\x95\x58\x33\xd3\x52\x3e\x5c\xd6\x23\xea\x96\x09\x39\xe2\x16\x89\x56\x50\xe9\xa5\x98\x51\xd5\x90\xdb\x91\x1e\x2c\x1e\x61\xf9\x65\xa4\xcf\xe4\xa6\x58\x9b\x23\xbf\x2a\x85\xdf\xe7\x67\x56\xec\x54\x6e\x71\xf9\x8f\xcd\x47\x4c\x97\x28\x98\xc2\x5a\x29\xd3\x6f\x84\x4d\xf3\xc1\x69\x8e\xe5\x21\x23\x5a\xd1\x18\x04\xca\x48\x05\x2e\x83\xd0\x24\xf1\x89\xc9\x80\x57\xfa\xf5\xb4\xa0\xaf\x5c\xb0\x70\xa9\xb8\x15\xd0\x2a\xc8\xb6\xf5\x8d\x0b\x17\x2f\x0f\x94\x95\x2e\x67\xbe\xd2\x79\x20\x39\x93\xef\x4c\x32\x97\x81\x1a\x70\xa7\x28\xd1\x23\x5a\x2d\x29\x69\x8e\xc1\xb8\xf3\xb5\xdd\x6a\xeb\xb4\xd2\x6a\xd4\xad\x19\x3d\x1f\x1a\xbc\x30\x62\x93\xf3\xf2\x1b\x60\x6e\xa3\x30\xe0\x61\x5d\x9c\x6b\x32\x93\x49\x29\xba\x58\xed\x45\xdb\x38\x66\x96\x6e\x44\xb1\xce\xb7\xbb\x25\x38\x92\x43\x53\x2e\xde\x6f\xda\x15\x8b\xc4\x9b\x18\xf6\x4e\x67\xdf\x27\x7f\x64\xdd\x70\xad\x2d\x9d\xd9\x4a\x93\x3d\x61\xba\x8a\xbd\x59\x3c\x6c\xdc\xec\xc7\xa0\x0c\xa3\x4f\x1a\x59\x64\x62\xc9\x48\x6c\x5f\x4c\x01\x43\x0a\x06\x5e\x1b\x5d\xc7\xca\xd2\x1d\xd1\x6f\x0e\xaa\xf1\xc7\xe0\x8f\x3e\xab\xc9\xb9\xd8\xa8\xa8\xfc\x4e\x6b\xb1\x59\x09\xa5\x91\xd4\xb5\x3d\x81\x9a\xd4\xc3\xe3\xf5\x17\x66\x85\xe7\x4e\xa5\xac\xec\x03\x48\xce\x5e\x95\xb9\x03\x9f\xce\x19\x9f\x66\xe3\xa8\x3c\x96\x97\x1f\x89\x28\x7c\xe2\x45\xd3\xe4\x28\x53\x4c\xb5\xd7\x5c\xf9\x9f\x8a\x3e\x9c\x75\xc2\x34\x0f\x76\x64\x4e\x97\xe9\xbe\xf5\x7e\xb4\x48\x4e\xf2\x00\xab\x5b\xb1\x6e\x44\xc4\xcc\xca\x65\x68\x2f\xda\x88\x28\x32\xa9\x31\xa2\x68\x65\x5f\xca\x94\x51\x6e\x56\x3d\x91\x43\xe4\xf6\xf0\x92\xa8\xf9\x48\xff\x1c\x1b\x7f\x45\x8d\xef\x67\x1b\x69\x7e\xa7\x25\xaa\x42\xa5\xe3\x31\x35\xfe\xc6\xe0\x63\x7a\xc5\x95\x0b\x76\x0d\x81\x3e\x61\xeb\x59\x80\xf1\x25\xb1\x65\xbe\x26\x63\x21\xa0\x89\x15\x70\x49\x42\x0d\xcb\x38\xd0\xb3\x5d\x7e\x41\x2d\x6c\xa1\x36\x34\xc3\x31\xa5\x98\x92\x2f\x15\xb0\x5b\x5c\x12\x5c\x5a\x08\x0c\x49\xf5\x0a\x54\x34\xd0\x1c\x57\xb9\xf9\xf0\x61\x61\x38\x27\x6c\xfa\x88\x78\x52\x59\xac\xdf\x4e\x92\x65\xfb\x00\xc6\x6a\x33\x3a\xdc\xed\x2d\x06\x3a\x47\x90\xdb\x36\x17\xe5\x19\x76\xd3\xe1\x61\x64\x24\x24\x60\x83\x4d\x2c\xdc\x94\x43\xf4\xf6\xbe\x04\x7a\xf0\x33\xb7\x21\x71\x86\x31\x93\x98\xf7\x8f\xe0\x5d\xd3\x8b\xd9\x17\xdf\x6e\x23\x78\x8e\xb5\x42\x0e\x8d\xca\xe7\xc6\xc0\x6c\x5d\xb8\xbe\x4b\xc3\x5e\xb7\x0f\x74\x0e\x95\xf4\xb9\xd6\xc2\x13\x5f\x40\x59\xd0\xfc\x17\x75\xec\x9c\x67\x53\xfa\xb5\x6b\xae\xe7\x5d\xd0\x02\x4f\xc6\xa4\x97\x26\x76\x3a\xf5\x98\x1f\x4e\x83\xdb\x61\xfa\x4c\x19\xd8\x11\x65\x77\xc9\x8b\x9e\xf5\x2d\x68\x59\x7d\x3a\x1e\xa8\xc1\x78\x69\x20\x4f\xb9\x05\x20\x95\x8a\x78\x7c\x2b\x5e\x8b\xc3\xb1\xb2\x43\x71\x01\x25\x84\x7f\x03\xe6\xb8\x5d\x7b\x5b\x5b\x1b\x1e\xd8\x71\x22\x9a\x09\xdc\x78\x40\x4c\x07\xd6\x75\x70\xd5\x94\x1d\xd5\xc3\x6a\xbb\xea\x83\x0b\x0b\xdc\xd6\x2d\x01\xdd\xe8\xa3\x5b\x3d\xc9\x7f\x8b\xc0\xf5\x93\xd8\xa6\xb2\x5c\x0c\xf1\x65\x89\x8b\x6a\x71\x5b\xfe\x25\xef\x1c\xb3\x5e\x57\xa5\x87\x94\x1a\x19\x27\xe2\x48\x6a\xd3\x79\xc2\x63\xea\xf4\x25\x4a\x38\x8a\x18\x49\x6d\x78\x95\xc2\xe5\x3d\xe8\x43\x2f\xfa\x5d\x2e\x26\xc1\x77\x34\xcd\x44\xde\xc3\x2c\xc6\x98\x17\xce\x13\xca\x1c\x33\xf9\xb9\xea\x94\x22\xb6\x7a\x96\x14\x9f\x83\x60\xc5\x55\xa9\x90\x16\xea\xc1\x0d\x7c\x4d\x3a\x1f\x33\x51\x63\x21\x93\x5f\xc7\xa3\xe5\xf1\x57\x28\x01\x18\x57\x6a\x87\x90\xd3\xf9\x71\xeb\xd6\x53\xf2\x23\x66\x28\x47\x34\x47\xde\x97\x49\x3e\xb4\xa7\xd4\xe0\x85\xe4\x6e\xd5\xda\x84\x45\x92\x06\x0e\xfc\xd9\xa9\xff\xf7\x8d\xf2\x5e\x84\x9b\x92\x80\xe6\x97\xcb\x97\x8b\xda\x3c\x44\x24\x3e\x6e\xf1\x48\x47\x5b\xc7\x16\x4d\x89\x27\xc9\x43\xd4\x26\x92\xc7\xb8\x27\x6f\xf8\x72\x55\x6d\x08\x05\x80\x1c\x8a\xc6\x11\xfb\xcd\x4e\xcb\xcf\xdd\xbe\x7f\x77\x4a\x01\x3f\x89\x12\xe5\x36\x97\x5c\x41\x3c\x88\x8f\x4e\xc1\xb6\xf7\x0e\x5a\x4b\x35\x12\xa2\x44\xc1\x29\x98\xfc\x85\xef\x1d\x48\x69\x3d\x17\x82\x69\xd9\x71\x6c\x53\x05\xce\xd5\x3a\x9c\x42\x1a\x32\xb6\x26\x79\x59\x91\xed\x5e\x1b\xd9\x06\x17\x62\xd8\xae\x75\x7d\xe6\x10\x59\x2b\x6c\x7f\x63\xfc\xbe\x5a\xdb\x6d\x4c\xc7\xd5\x25\x39\xa4\x15\xe3\xa6\x73\xc1\xc6\xcc\xaa\x59\xef\x4f\xf2\x31\xe9\xdf\xba\x59\x44\x32\x0e\x4c\xb6\x0a\xbf\xfd\xbf\xca\xa2\x25\xf8\xa2\xf5\x63\x15\x2b\x37\x9d\x07\x56\x94\x5f\x2e\x72\x73\x49\x71\x0d\x70\x1b\xd7\xa9\xf0\xb9\xe5\xba\x20\x3e\x10\x04\xc9\x62\x47\xec\x4e\x7a\x95\xc5\xbd\x32\xb2\x71\x96\x58\x93\xfd\x44\xf9\x49\xae\xd6\x61\x8a\xf6\x96\xda\x27\x48\xff\x10\x56\x83\x54\xa2\xad\xec\x9c\xbc\x99\x9f\x1f\x95\x45\xc9\x74\x8f\x7c\xfa\xda\x47\xb5\x33\x96\x28\x0d\x6f\x4f\x74\x72\x4a\x6c\x0f\x97\x12\x73\x02\x3c\xe5\x3b\xd5\xf2\xdc\x33\x29\x59\x51\xf9\xe8\x81\x60\x67\x77\x87\x38\x05\x22\x6f\xbd\x26\xef\xdf\x37\x3e\x17\xee\x63\xd1\xad\x82\x88\x5e\xa2\xf5\x40\x26\x0b\xe6\xd1\x74\xea\x54\x93\x07\x12\x7d\x67\xbb\x1c\xb1\x24\x82\x7d\x88\xec\xb0\x30\x68\xba\x68\xbd\x13\x29\x88\x47\x54\xfa\x01\xbe\x00\xc7\x73\x94\xe3\x79\x34\x72\xec\xc7\x00\x0d\x20\x14\x00\x7f\x6f\xea\x0d\x4d\xf2\x48\x3b\x0b\xce\xa6\x77\xea\x7e\x7c\xaa\x20\x21\x28\xeb\xef\xf2\xf7\xcf\xf9\x0b\xf6\x86\xd9\xe0\xb6\x19\xf7\x61\x64\xd8\x07\x22\x09\xb9\x91\x0b\xdb\x2d\x73\x51\x67\x23\xe2\x2c\x31\x4d\xb0\x16\x9c\x7c\xaf\xad\x2f\xa9\x75\xcd\x68\xf6\x52\x94\xb1\xd3\x2d\xc7\x2e\x6b\x24\x47\xf8\x4b\x2c\xdd\x85\x31\x61\x15\x3d\x61\xab\xfc\x8c\x59\x50\xc7\x41\xc6\x2c\x71\x94\x25\x21\x11\xd6\xff\x0a\x4f\x4e\x05\x15\x7a\x76\x4e\x36\xd7\x5e\xa5\xc6\x03\x3e\xf0\xee\xc6\xac\x41\xe9\x76\xdc\x4a\x87\x46\xf0\xd3\xbd\xcd\x29\xb0\xc9\x0a\x2f\x9d\x99\x8a\xde\xaa\x6c\xcc\x92\xa9\x42\x33\x47\x4d\x19\x9c\xaf\x27\x5b\x18\x90\x1a\x2c\x6e\x5c\x16\xbe\xe7\x8c\x5c\x1d\x6b\xde\xd1\xa3\x0d\x6d\x31\x05\xa5\x68\x6d\xb4\x6f\xb5\x3e\x21\xd3\x1a\xf4\xbb\xf0\xd5\x6a\x4d\x30\x43\x20\x3c\xa6\xe9\xe7\xff\xf3\x07\xe5\x9f\xb5\x80\xb9\xdf\x8e\x5c\xbd\xbc\xbb\xbb\x91\xbe\x60\x4b\x7f\x7c\x07\x5f\x78\x4e\xf4\x11\x11\x60\xc7\x80\x9c\xb8\x9e\x70\x57\x1d\x1d\x4a\x0c\xe8\x0c\x6a\x48\x4c\xf6\x4d\x0f\xa9\x3c\x94\xea\x5f\x94\x92\x89\x3d\x07\xf9\x7f\x9f\xaa\x90\x43\x05\x14\xa8\x8a\x06\x4d\x40\x07\x57\xde\x85\xce\x25\xea\x89\xb7\x16\xb8\xfd\xc7\x86\x82\xf4\xe1\x93\x66\x14\x97\x7f\xa3\x8e\x25\xe4\xa7\x4d\x6e\xd8\x70\xe6\xa1\x0b\x5a\x00\xd4\x33\xfd\x40\x3e\x27\xf6\x4d\xbc\xf0\x64\x0d\xfe\x59\xba\x2c\x42\x04\x54\xb3\x97\x75\xb1\xc2\x4a\xf5\x3a\xf9\x03\x1b\x83\xe6\xd8\x6f\x3e\xaf\xb5\x62\x5e\x1d\xd5\xb9\xe1\xc8\x91\x92\xde\x8b\x47\x78\x8e\xba\x5f\x57\xeb\x60\xcf\x04\x48\x0c\x04\x8f\x92\x22\x3d\xb4\xcf\x9f\xa3\xfe\x01\x7a\x26\x3d\xde\x05\x08\x1c\x40\xfe\x25\xd3\x8c\x48\xd9\xf3\xd8\x71\x69\x93\x78\x17\xb0\x44\x48\xba\x58\x78\xcf\x6a\xea\x84\xaf\x4b\x01\x20\x16\x7c\x40\x00\x04\x51\x54\x16\xb0\xc6\x50\xa8\xe4\x2b\x07\x18\xe3\x3a\x75\x1e\xee\xb2\x63\xdd\x7d\xd0\x9e\xbd\x54\xb2\x9b\xcb\x0b\xa1\xf0\x85\x42\x35\x8c\xda\xa8\xca\x02\x38\x31\x82\xd6\x68\xc8\xa9\xaa\xaa\x9c\xa7\x61\xb7\x99\x46\x75\xf6\x58\x4c\x63\x5b\xa1\x6e\x4e\xd7\xa8\x78\x74\x4e\xdf\x44\x9b\x58\xd8\xc5\x2a\x11\x4e\x38\x04\x02\xfd\xf0\xc6\xdc\xe1\xc3\x73\x37\x1e\x02\x16\x89\x15\x7c\xf8\xf6\x18\x86\xcd\x32\x0d\x7f\x90\x05\x52\x7b\x3e\x7d\x37\x38\xf8\xd8\x2e\xc7\xe1\xb9\x47\x8e\x9d\x04\xd5\x79\x11\xd5\x82\xb0\x9f\x4f\x67\xc1\x23\xf8\x51\x0e\x96\x91\x9a\x71\xf3\x27\xa0\x67\x12\x0a\xcf\x66\x92\xaa\xb8\x12\xc2\x07\x18\x4b\xf8\x59\x88\xb4\x60\xb2\x39\x8f\x68\xf3\x32\xea\xc2\x84\xc9\x36\xda\xfd\x24\x7d\x93\x1e\xae\x0e\x1e\x20\x97\x83\x28\xc3\x54\x3f\xbb\xef\xb2\x18\x7d\x41\xad\x60\xf7\x0f\x37\x1b\xd4\x05\x38\x94\xe8\x80\x18\x4c\x19\x48\x46\x52\x12\x03\x89\x47\x8a\x0a\x0b\x45\xfd\x46\x4a\x08\x58\x77\x21\x53\xc3\x4b\xd2\x72\x86\x1d\x8e\x00\x04\xde\x40\x45\x4b\x61\xfa\xdc\x32\xcb\xf6\x27\xbe\xe9\xb1\xca\x8c\x94\x25\x76\x5b\xd8\x9f\x5b\x37\xbe\x82\x1f\x53\xae\x46\xb3\x6a\xbc\x01\xe8\x6a\x86\x14\x87\x5b\x35\xe8\x68\xa1\x4d\x06\x74\x2c\xa1\xb9\xe1\x5e\xff\xa1\xd2\x69\x23\xda\xe1\x43\x6f\xaf\xb4\xce\x71\xc2\xa7\xfb\x5a\xa7\x65\xe8\xe6\xf3\x9a\xbd\x74\xac\xbf\x65\xe3\x19\x57\x69\xfe\x95\xb7\x87\xee\x70\x5f\xd7\x74\xa8\xff\x5e\x2a\x3e\xb2\xb8\xb1\xf9\x56\x6c\x68\xf1\xf9\x17\x5a\x9a\x51\xa3\x6a\x58\x07\xa7\xcf\x1c\x42\xdf\xe3\xa8\xaa\x82\x39\xa9\x71\x02\x37\xd6\x40\xf9\x19\xb1\x8b\x82\xaf\xb8\x27\xb4\x12\xd0\xed\x16\x1e\xe3\x9e\xe1\xfa\x1d\xab\x5b\x3d\x65\x1e\x1c\x89\xc4\x48\x2b\x5e\xd1\x97\xba\xc5\xde\xea\x61\x2f\xf5\x47\x85\x13\x36\x8c\x7a\xd5\x3c\xf0\x36\x29\x79\xd0\xb6\x87\xe5\x44\x48\xe4\x77\x46\xcb\xcf\xf3\xe3\x13\x76\xe5\xfa\xfa\x32\x6e\x46\xbd\x29\x25\xc3\x64\xf8\xf3\xef\x03\xb9\xee\x2e\x9d\x29\xe1\x08\x14\xc6\xdb\x95\x50\x36\x5e\xc3\xb7\x72\x09\x8d\xe3\x04\x7b\xaa\x68\xf7\xc8\x3c\x8a\x4c\xca\x3f\xb3\x49\x68\x2e\xa7\xb7\x98\x8e\xb4\x64\x68\x74\x5b\x24\x9d\xe5\x1e\xe3\x16\x5d\x09\xec\xe2\xb2\x66\xc5\x98\xb0\x39\x26\x34\x2e\xda\x3b\x00\xe6\x73\x3b\x8f\x42\x8c\xaf\x95\xfd\xf6\x0a\x12\x9a\x6b\xf6\xf5\x19\xdc\xe6\xf5\xf5\x95\x7e\xcf\x3e\xa8\x6a\x29\xcf\xb0\x79\x22\x54\xcb\xe3\x9d\xbc\x6a\xbd\x4d\x55\x1b\x81\x02\xe9\x64\xce\x82\x4d\xbc\xdd\xb1\xad\xb4\x5b\xff\x84\x44\xf1\x67\x34\x0f\x7b\x1a\x2b\xe1\xdd\x9d\x1f\xa9\x8c\x02\xa1\x17\x3a\xaa\x3c\x83\x39\x71\xa9\x02\xb7\x01\xfe\x41\xcf\x7f\x14\x02\x05\x7f\xa1\x15\x77\x07\x09\x4c\x7d\xbb\xc5\x41\x3d\xc2\xa3\x36\x13\x1b\xaf\xdb\xa0\x65\x76\xf8\xdd\x41\x75\x11\x94\x2b\x55\xfa\x5f\xff\x1f\xf6\x51\xde\x33\x66\xde\x3f\x9f\xe4\xe2\x95\x1b\x52\xb7\x5c\x97\x08\x30\x05\x52\xc6\x00\x18\x7f\x0d\xa4\x52\x5e\x20\xf3\x2c\xf7\x98\xeb\x56\xd1\x77\x85\xdc\x57\xa2\x1b\x1d\x15\x82\x7f\xb2\xee\x32\xe2\x60\x41\x09\x1f\xe5\x76\xa9\x47\xa9\x3c\x39\x0b\x0f\x93\xca\x34\x6e\x58\x3b\xa1\x3f\xbb\x0b\x89\x3f\xf2\xa7\x1b\x2a\x75\x56\x30\xfb\xab\xe4\xb4\xd3\xed\x03\x7b\x5b\x01\x34\x22\xae\x10\xc3\xce\x82\x2c\xb6\x17\xc4\xee\x82\x15\x1a\x71\xd3\xbc\xb1\xe7\x3c\xec\xe7\x92\x52\x4b\x9a\x2b\x82\x08\x07\xdf\x1d\x86\x6b\x35\xc8\x57\x78\x63\x46\xec\x84\xf0\x18\x50\x08\x4f\xfc\x7f\x1f\x3d\x2a\xc2\xf0\xa5\x3b\x45\x12\xfb\x83\x05\x99\xd5\x18\x44\x83\x7e\xbf\xcf\x3a\x17\xd4\x09\x92\x6d\x5c\x41\xb6\xbe\x70\xf8\xb2\xda\xfd\xcb\xeb\x19\x5c\x58\x58\xa7\x08\x64\xb7\xff\xab\xf5\x2b\xbf\x48\x0e\x6b\x36\xfb\xff\x5a\x62\xde\xec\xdf\x57\x73\x58\x0c\xe4\xac\x2f\xd4\xcd\x03\x24\x5f\xba\xad\x51\x84\x13\x12\xf1\x84\x5a\x5f\x97\xa9\xbd\x68\x68\x90\x4c\xf5\x75\x7c\xd7\xc6\x10\x38\xf9\x0d\x09\xc2\xd6\xe4\x5a\x94\xa6\xc2\xd4\x7d\xf1\x49\x48\xc2\x3a\xc6\x8b\x6f\x4b\x7d\xbb\x8c\x0a\xcc\x61\x2f\x2d\xd5\x6b\xa3\xf3\x78\x56\x71\x30\xc4\x02\xc2\x72\xca\xce\x7f\x4c\x43\x90\x5f\xe0\x84\x08\x14\x44\x10\x36\x68\x26\xe8\xbb\x93\x53\xa5\x71\x7d\x70\xdf\xa8\xf2\x3d\x9a\x18\xb8\x7e\x33\x38\xbe\x10\xa1\xf1\x5e\x78\x8e\x53\xdf\xa1\x63\xbe\xa8\xd5\x38\x55\x6d\x11\xb1\xf7\x65\x7e\x37\xb0\xb8\xb6\x1e\xf4\x99\x56\x55\x5a\xc7\x3a\xf4\x76\xc6\xaf\x0b\xe4\x5b\x6d\xe9\x3e\x85\xbf\x13\x80\x3f\xd3\x0d\xd1\x08\xe0\x70\x1b\x7d\xf4\x5f\x06\xe1\xf9\x10\x67\x4b\x06\x42\xdd\xf4\xa1\xfa\xc3\x5f\x0a\x25\xeb\x5f\xa4\x67\x3d\xf7\x49\x68\x7c\x2e\xdd\xa5\xc4\x85\xf2\xfe\x56\x0e\x5e\x31\xe4\x93\xba\x30\x09\x22\x7b\x93\x96\x37\x86\x83\x6d\x86\x73\xd0\x39\xc8\x0f\xea\x9b\xa6\xb3\xf4\xd1\x42\xe0\xf5\xec\x4e\x9e\x94\x49\xc1\x13\x70\x87\xcc\x69\x7b\x0a\x5d\x4a\xac\x20\xea\x10\xf6\x3a\x4d\xb8\xaa\xa5\xd2\x79\xe4\x25\x89\xc5\x75\x86\xe7\xd5\x06\x00\xbf\xfa\x47\xe6\x04\xcd\xff\x56\xd6\x81\xa1\x02\xb5\x0b\xe6\xd2\x01\x6b\x02\x6b\x3c\x6f\x29\x1a\xce\x7b\x3c\x1d\x4f\xf1\x47\x4a\xd7\xa5\xa1\x78\x43\x4e\x6a\x33\x2d\xcb\xaa\x1b\xaa\xef\xf1\x10\x57\x2d\x37\x17\x33\x39\x8a\x1f\x42\xc6\x92\x28\x54\x0a\x60\xda\x50\x0c\x1e\xaa\xaf\x88\x58\x1f\xe9\xbe\x69\x8a\x91\x0b\x77\x08\x51\xe5\x3a\xe5\x9d\xd7\xc1\xdb\xf0\x80\x36\xe3\xb8\x29\x12\x22\x53\x11\x20\x23\x13\x16\xb7\x2d\xe8\x8f\x0c\x08\x8f\x2c\xae\x22\x76\x09\x08\xf5\x84\x5c\xee\x1a\xea\x64\x7e\x6e\x15\xb0\x91\x32\x72\x72\x32\x4f\x62\xbb\x36\x82\x5b\x96\x54\x81\xd6\xd2\x0a\x52\x18\x0f\xab\x4b\x63\xcb\x59\xf3\xe7\x8a\x8b\xf8\xaf\x34\x63\x5d\x91\x3e\xb4\x14\xa4\x8d\x06\x8c\x70\x79\xe0\xa7\xe6\x81\x6a\x06\x70\x3a\x1a\x04\x47\x5d\xaf\x5a\xd0\xe8\xd8\xc8\x24\x12\x30\x0a\x8b\xf4\xfa\x5f\xea\x4e\x2b\x4d\x37\xfa\x59\x32\x18\x6c\x15\x0a\x40\x07\x78\x87\xea\x36\x07\x71\x9d\xe1\x09\xb7\x9d\x34\x9f\xd5\xdf\x35\x39\x4f\xd4\xd0\xa2\x9c\x7d\x11\x54\x93\x90\x72\xfc\x66\x35\xfa\x9f\x32\xff\x6b\x16\x20\x74\x01\xaa\xdf\xb2\xba\x7d\xbb\x70\xc4\x55\x5c\xd2\x75\x72\xba\x9b\xb7\xb1\x73\x56\x6c\xb8\xd7\xaa\x85\x61\x87\xf5\xbc\xde\xb2\x8e\x0d\x7d\x56\x6d\xda\xf1\xc7\x7e\x33\xff\x67\x6d\x86\x8d\xcd\x2c\x18\x5c\x37\x6d\x7d\x95\x2d\x8e\xc1\x84\x2a\xe3\x9a\x10\x2c\x45\x48\x9b\x71\x03\xe7\x24\x59\x78\xb8\x3d\x0e\x45\x15\x98\xfc\xfe\x5f\x56\x27\x9e\xf6\x43\xea\x19\xb2\x52\x99\x69\x87\x4e\x44\xb5\xfa\x39\xf5\x03\x9d\x91\x2f\x00\x0b\x43\x19\x62\xb2\xb3\xc1\xd8\xf8\x78\x9d\xa1\x40\x38\x60\xc1\x32\x49\xcc\xaa\x2c\x21\xf1\xd1\xc2\x03\x66\xdd\x84\xb2\x6e\x45\xf1\xf3\x38\xde\x62\xf1\xfa\x2b\x12\x51\x90\x94\x32\xec\xaa\x98\xeb\xbd\x43\x5a\x5e\x3f\x47\xf7\xf8\x56\x66\xe2\xec\xf6\xe7\xa0\xb1\xb2\x04\xfb\x17\x28\x42\xeb\xe0\x49\x65\xf3\xfc\x2b\x14\x89\x39\xad\x16\xee\x3a\x0d\x41\x0c\x0e\x0b\xc3\xf5\x9c\xef\x0a\xff\xbc\x76\xa8\xa5\xd4\xd0\x34\xd4\x52\x42\xb7\x48\x20\xd7\x7a\xe7\xd1\xb3\x79\xec\x7c\xff\x78\x1b\xbe\xae\x9c\xd6\xa3\xdb\x57\x3f\x80\x45\x1b\xfb\x12\x1a\x74\xb4\xd0\x46\x4f\x0e\xcf\xdc\x94\xe1\x93\x63\x1e\xfb\x94\x3d\xf5\x9a\x31\x45\xe5\x24\x56\x28\x54\xf3\x92\x9a\xd7\xc1\x7d\x0b\xe6\xab\x72\x59\x18\x0e\xa3\x21\x48\x1c\x68\x51\x21\x2e\x46\x2f\x0d\x64\x10\x9e\xf6\xf4\xd5\xab\x47\xb4\x83\x9e\x30\xff\xef\xd4\xd1\x3b\x6a\x17\x07\x38\x36\x74\x1d\xfe\xc0\xc4\xea\xaa\xc5\x16\xae\xec\xd0\x09\x38\xdc\xd5\x79\xe4\xf8\x0b\xdf\x51\x47\xb4\xfd\x2f\x5a\xb5\x90\x61\x33\x06\x3d\x06\x0a\xcb\xcf\xf4\x4f\x81\xaa\x87\xc2\x5f\xd5\xd8\xa4\x4a\x9a\x99\x50\xd7\x92\xa2\x49\xb1\x52\x73\xa3\x5a\x3d\x8e\x90\x7c\xda\xbc\x41\x23\x91\x8c\xac\xac\x8c\xf0\x0e\x23\x91\x73\x75\xeb\xee\xe6\x9b\xbb\x3b\x2e\xeb\xe9\xdd\x1a\x06\xbb\xfa\x2e\x74\x8a\xd7\xa9\x3a\xea\x4b\x16\x49\x54\x27\x17\x81\x36\x98\x1a\x95\xca\x6d\x37\x98\xd2\x22\xf2\x3a\xef\x1a\xec\xe2\xbe\x73\x07\x03\xc5\x62\x12\xc7\x71\xd7\x79\x4c\xe2\x40\x5a\x2c\x59\xaf\x09\x62\x67\x98\x8e\xdd\xc5\x2c\xc1\xfe\xbf\x6e\x9f\x06\xfb\x89\x98\x7b\x0e\x4f\xb8\x3b\x5d\x93\xc9\xaa\x21\x5f\xe3\x22\x3d\x63\x17\xf8\xd3\xba\x02\x86\x9a\x82\x64\x69\x6a\x9b\x32\xa4\x47\xec\x42\xbf\x58\xb5\x24\x80\xe3\xb5\xe0\x7c\xa9\xab\x17\x7f\x69\xdb\x21\xb1\xa1\x82\x2a\x6e\x54\xee\x01\x25\x9b\x02\x13\xfb\x3b\xcf\x15\x2a\xea\xc5\xf6\xe4\x5e\x33\xce\x2f\x63\xed\xae\xb9\x45\xc0\x9f\x13\x73\x9f\x08\x34\xf6\xba\x43\x03\x77\x4c\x6a\x7d\x29\x19\xb1\xf9\xe2\x3c\x28\x86\x9e\x59\x70\x48\x77\xe2\xdd\xf3\x57\x8b\x5e\x92\xfd\x48\x4c\x8c\x2d\x0b\x76\xcb\xdb\x70\x84\xf9\xc4\x91\x40\x01\x77\xde\xc4\xd0\x9f\x70\xc5\xcc\xb9\x9d\x55\xfa\x4b\xb8\x97\xc0\xa1\x3e\x31\xeb\xb7\x80\xf1\xc4\x4c\xcb\xbe\xa9\x66\xe2\x04\x30\x70\x89\xd0\xce\x8e\x97\x1b\x3d\xd4\x5f\xeb\x8c\xf1\x9f\x21\x0b\x09\x39\xfe\x71\xc6\x5b\xba\xba\xc1\xc6\xad\xae\xf9\x74\x84\x2d\x63\x5c\x0d\xd5\x09\x40\xd5\x71\xf1\x5d\xb2\x92\xe0\x43\x41\x4a\xb4\xaf\x70\xcd\x50\x61\x6f\x7c\x1e\x79\xa9\x6c\x4e\xde\xea\x91\x7b\x0f\x46\x86\xf3\x2a\x33\xb3\x46\xd0\xf8\xcb\x78\x4c\x7f\x54\x76\xa2\xb4\xd0\x30\xd4\x9b\x56\x2c\x91\x90\xbb\xe4\xde\xfb\xf3\xd4\x6a\x48\xf5\x41\x28\x5c\xc9\xf4\xd4\x78\xe2\x07\xfa\xfb\x9f\xbe\x07\x78\x74\x50\xbd\x0d\xf5\xaf\xaa\x52\xa5\x5e\xa9\xd7\xe5\xe5\x00\x53\xbf\xef\x68\x22\x91\x48\xb0\xc6\xfd\x4a\x6e\x23\x5f\x70\xbf\x2e\xc2\x24\xad\xb2\x02\x19\x8d\x73\x32\xf0\x69\xa8\xf1\xfb\x42\xcc\xe6\xe6\xf1\x7b\x54\xd1\x75\x5a\x4b\x0b\x74\x5c\xd4\x4c\x1a\x49\x87\x19\x25\xbe\xed\xf1\x2a\x9a\x0b\x8c\xbf\x50\xf8\x3d\x16\x7b\xf9\x62\xe0\x22\x55\xb8\x51\x87\x22\x56\xd3\x52\x7d\x09\x3e\x5a\x82\xd6\xf1\x8a\xd2\x0c\xa5\x81\xc5\x8a\x4e\xb1\xb3\x56\xdd\xae\x02\xe9\x2d\xfb\x4a\xc9\xec\x68\x02\x0c\xcf\x83\xe1\xcd\x0d\xc3\x5e\xa9\xd9\xd5\xc1\x0c\x11\x8c\x3b\x92\xa6\x46\x51\xc3\xd4\x2c\x2a\x2b\xe8\xad\x22\xf5\x22\xd5\x30\x30\x29\xb6\x3a\x3b\x3a\x56\x94\xa7\x12\x50\x38\x2a\x65\x28\x37\xd2\x4a\x6c\x97\xbd\x8e\x8b\x9b\x30\x6f\x48\x65\x5e\xc6\x8a\xe2\xe5\x79\x25\x81\x60\xbc\x93\x1d\x34\xa7\xc7\x59\xd2\x5b\x65\x58\x16\x7d\xb2\x36\x4b\xfc\x4a\x05\xcb\xa9\x84\x91\x12\xcc\x00\x00\x5e\x23\x3c\xc9\x9d\xc9\x08\xcf\x49\xdf\x5f\x2f\xee\xae\x32\x33\x2d\x40\xb1\x6c\xb3\x34\x96\xcb\xfb\x60\xca\xec\x50\xe2\x3d\x01\xe6\x4b\x26\x3d\x2e\x29\xe9\xcd\xd5\x9c\x58\x76\x4c\xaa\x88\xc5\x66\xb1\x6f\xd9\x0b\x9d\x8b\x42\x47\x5d\xde\xae\x8d\x16\xd2\x2b\x02\xf2\x8b\xe6\xd8\x82\x50\x79\xb8\xd0\x49\x8e\x6e\xa9\x56\x60\xe6\x6b\x2d\x7e\x53\x8c\xc5\x64\xd0\xed\x11\x64\xfd\x02\xd8\x63\x55\xb7\x97\x2e\xda\x67\xc6\x97\x27\xdd\x20\x31\x4e\x8a\xfd\xf5\xad\x30\x50\x21\xf4\x00\x08\xa1\xce\xaf\x82\x87\x48\x95\xed\xa8\x5d\x48\x66\xb0\x12\x9e\x0f\x5b\xb4\x5a\xc2\x78\xcb\x1d\xe2\xc5\x05\x5c\x2e\xc2\x20\x91\xe0\x80\xbd\x2b\xa2\x5c\x5f\x16\x34\x13\x62\x98\xa6\x4f\x76\xaf\x1a\xff\x82\x8a\x92\x23\xbb\xae\xf6\xb1\x88\xc5\x76\x21\x82\x6c\xcc\x04\x2c\xd4\x78\x3c\xec\x1a\x44\x13\x78\x49\x4e\x02\x2d\x46\x13\x82\xec\x65\x2c\x2f\x89\x5c\x6d\x82\xde\xd3\x64\xb4\x50\x79\x98\x12\xc4\x49\x72\x86\x83\xc7\x90\x26\x24\x8a\x11\x47\x1b\xbc\x4b\xf1\x4b\xb6\x16\x84\xd6\x87\x31\xc4\x71\x12\x97\x7a\x47\x9f\x21\xaf\xa3\xb2\xb5\x41\x05\xed\xbb\xc0\x11\xb9\x33\x38\xad\x11\xcc\x8d\xcd\x04\x39\x37\x55\x3b\xc8\xb4\x56\x65\xe6\x67\x20\xb0\xe9\xdd\x8c\x1e\xbf\x4c\xbb\xf8\xce\x90\x6f\x9c\x74\x70\x92\x52\x3c\x73\x9a\xe5\x6b\x30\x04\x55\xe0\x2d\x0b\x82\xa2\xc0\x82\xb0\xe6\x9c\x3d\x43\x98\xcb\x01\xbe\x43\xb1\x9e\x9e\xd1\xf6\x1c\x57\x6a\x41\x9c\xb2\xb5\x0c\xda\x4f\x69\xc3\xed\x9f\x8c\xa5\x92\x69\x6c\x30\x07\x18\x47\x74\x63\x3d\x07\x54\xa3\x09\xac\x75\x35\x9d\x3c\xd9\x84\xf1\x85\xfa\x27\x4d\x8a\x3e\x23\x05\x8e\xab\x0d\xee\x41\xa7\x44\x88\x16\xa2\xc3\xe4\xb6\x85\x10\xa2\x29\xe8\x6d\x83\x22\xc7\x9b\xf1\x19\x58\x21\x10\x0e\x2d\xea\x97\xce\x9c\x61\xbe\x52\x1e\x95\xaa\x82\xb9\x99\x5f\xad\xf4\x91\x7d\x29\x3b\xcd\x3b\x36\x13\xc5\xef\xd0\x9f\xb2\x28\x8e\x8e\x6f\x3a\xd6\x94\xfc\x71\x43\x5e\xfd\xf9\xc7\x95\xed\xa9\xfb\xad\xdb\xb5\xe9\xad\x41\x3d\x8e\x7a\xf9\x1a\x4f\xef\x07\x62\xca\x09\x85\x64\x84\x7e\xf8\xca\xc5\xdb\xdb\xfb\xb6\x8d\xd7\xee\x68\x7a\x97\x6e\x2f\x4a\x7e\x98\xc7\xaa\xc5\xa4\x7a\x53\xe8\x2c\x4a\x82\xa6\x4a\x23\x32\xc5\xad\xc3\xf3\x10\x69\x0b\xe1\xff\x5a\x7e\x5f\xa2\x7b\x63\xbb\x8c\x1e\x5d\x6f\x07\x96\x62\x52\x3a\xf4\x76\x3a\xeb\xa3\xe2\xf6\x3f\x65\x3f\x09\x74\x5a\x5d\xd6\xb8\xdf\xd5\xa0\xdf\x67\xd5\xaa\x4d\x6b\x0e\xea\x16\x14\x26\x8e\x7a\x7a\x9f\x71\xb3\x1f\xe5\x25\xc3\x55\x43\x57\x5c\x59\xde\xda\xbb\x65\x73\xf5\xb6\x86\x37\x69\x76\xa2\xe4\x07\xb9\xac\x5a\x97\x64\xef\x08\x1a\x14\x11\x9f\x54\xa9\x16\x56\xe6\xac\x51\xcc\x43\x8e\x1c\x24\x6d\x04\xc4\x8c\x6b\xc0\x69\x0c\xdd\x77\xb4\xc6\xbf\x05\x12\x23\xf3\xe6\xaf\x3b\x0f\xcd\xf8\xcc\x8b\xc9\x09\x25\x79\xcb\x47\x1f\xad\x38\x40\x35\x3a\x79\x71\x29\xb4\xa8\xac\x7c\xe2\x8c\xac\x4e\xdd\xe7\x3d\xfd\xb4\xc6\xec\xc5\xdd\x42\xd6\x81\xc5\x5e\x5c\xfe\xa9\x53\xf9\x38\x5d\x07\x02\xeb\xf5\xaa\x5d\x9a\x3f\x7b\xbc\xa0\x72\x57\xf9\xb5\xf2\xd2\x5b\x7f\x2d\xec\xb9\x2b\x57\x0f\x18\xa4\x71\xd9\x29\x5e\x32\xd5\xf8\xdf\xfd\xc7\x2d\xc8\xcc\x1b\x4b\x4b\xa0\x14\x30\x67\x34\x89\x4c\xd2\xbc\xee\x26\x4f\xf9\xb2\x53\x50\xbc\x64\xed\xe0\x02\x9d\xc5\x9e\x2d\x6d\xb2\x15\x80\x05\xc7\x3e\xf7\xb8\xdd\xf3\x80\x87\x6e\xec\x78\x1b\xca\x51\x79\x59\xe5\xb4\x8e\x00\x62\xe1\x1c\xe2\x89\x79\xa6\x43\x12\x51\x9a\x08\x9b\xce\xc7\xfa\x41\x00\xcf\x19\x93\x29\x08\x98\x8f\x42\xcb\xeb\x44\x60\x3c\x60\x92\x88\xec\x99\xc1\xd7\x18\xb3\xb1\xb2\xf0\x05\xe9\xbf\xfe\x37\x9e\xc9\x07\x91\xbb\x25\x66\x22\xa5\x59\x89\x16\x93\x15\x8d\xfb\x3e\xb6\x92\xd9\xd0\xa8\x47\x5d\xdc\x54\x7d\xea\x5f\xf3\xe2\xfa\x9d\xc3\xea\xc8\x54\x18\xc4\x2c\x61\x7f\xd2\xec\xdf\x5e\x26\x78\xd4\xa0\xab\x91\xe7\x2c\x76\xa5\x34\x98\x45\x70\x57\xf0\xc2\xb6\x9f\xf2\x53\x84\x41\x14\xfd\x4e\xef\xe2\x85\xad\x08\x67\x6a\xde\x29\xde\xc9\xec\xe2\x26\xaa\x8a\x64\x99\x00\x0c\xba\x35\x0b\xb8\x34\xad\x7f\xe4\xfe\x28\xda\x04\x08\xe7\xe4\x24\xc1\xfd\xe3\x73\x44\xe2\x42\xdd\xa6\x78\x9d\xf0\x4f\x9f\x68\x11\xaa\x58\x51\x9f\xcc\x4c\xe2\xb2\x77\x98\x05\x8a\x60\xed\x1f\x71\x8e\x6e\x1d\x50\xee\x88\x73\x54\xa1\x17\x73\xdb\xd5\x27\x40\xc7\x54\x7a\xc0\xbd\x2c\xed\x32\x1f\xcc\xe8\x4a\xb5\x2a\x6e\x6a\xde\x88\xfb\x34\x5f\x98\x7d\x33\xb9\xb8\x17\x9d\x9c\xbb\xd7\x99\xc7\x6a\xc5\xd2\xab\x2d\xab\x25\x69\xf9\xa8\xf2\xa5\xbd\xe9\x0a\x80\xf2\xb7\x01\xbd\xc2\x50\x92\x4f\xf3\xa4\x46\x3f\x8f\xad\x6b\x6a\x53\xdb\x23\xed\x07\x04\x47\xfa\x27\xeb\xca\x70\x1b\xf6\x31\xe6\x8e\x1d\xbd\x4a\xc3\x18\x6d\xea\x62\x06\xda\xf6\xcd\xd5\x61\x5b\xef\x32\xef\xb1\xe5\x3f\x6b\x4b\x71\x01\x1c\xa7\xb2\x21\x8c\x88\x40\x2d\x5e\x59\x39\x37\xf7\x2a\x9d\x96\x6f\x30\xf0\x81\x91\x69\xc5\x4d\xd2\x6c\xe4\x3d\xf5\xdf\xba\xfc\xb6\xb4\xed\xaa\xbf\xa5\x92\xf6\xbe\x28\xe9\x37\x67\xa9\xbc\xbf\x5f\xab\xdf\xc7\x99\xc7\x04\x57\xe5\xd8\xa3\xa4\xd3\x2e\x2e\xfb\x8d\x0a\x8c\x0e\x70\xcd\xdb\x1e\xe8\x6b\xa4\x8c\x03\x9f\xae\x0b\xee\x23\x0f\xac\xf3\xf8\xf8\xc1\x63\x5d\x06\x40\xe0\xf9\x03\xee\x97\x92\x8d\x71\x03\x8b\x6f\x9a\x73\x16\x5d\xac\x76\x4b\x8e\xc0\x69\x5d\xd3\x43\x15\x2b\x1d\x9a\x4b\x36\xd6\x0b\x2d\xed\x2f\x27\x53\xa2\xcb\xe8\x7b\x56\xaa\xe1\x46\x23\x70\x05\xc6\xa6\x75\x4f\x26\xe1\xe5\x67\x1e\xf4\x7a\x89\xa9\x75\xf2\xe0\x74\x92\xaa\x78\x65\x4c\x94\x2e\x8a\xa8\x76\xde\x73\xdc\x4d\x66\xef\xd1\x9f\x40\x2f\xe3\xce\x29\xf6\x75\x95\xb0\xef\xc8\x1b\x41\xe3\x29\x1b\x30\x21\xdb\xbd\xf8\x00\x29\x2f\x59\xb8\x08\xa2\xc6\x5f\x24\x6d\x55\x3f\x53\x7f\x5e\x15\xde\x09\x47\x71\xd1\x01\xda\xcb\x13\xc8\x56\xc4\x8b\x6a\x2e\x76\xdd\xd6\xf1\x55\x48\xa1\xf3\x30\xc1\xca\x6d\xc7\x95\xd6\xd8\x2a\x33\x12\xa8\xbc\x87\xd0\x62\x07\x74\x33\x80\xa3\xda\xc9\x28\xe1\xcf\x24\x46\x23\xb1\xc4\x50\x83\x68\x7a\x5a\x98\xb2\xb2\x6f\x11\xb6\x14\xda\x5c\xa2\xc8\x64\xf9\xe6\xb2\xa0\x70\x6d\x1c\x4c\x91\x7e\xf6\x4c\x0c\x6a\x0e\x13\x62\x10\xcb\x6d\x10\x6d\x4b\xe5\xd0\xc7\x09\xa8\x71\x73\x4e\xf1\xb6\x22\x51\x5f\x51\x68\x39\xd1\x09\x2d\x91\x1b\xdb\xe3\xb3\x9f\x43\x55\xcf\x03\x01\xd1\x9f\xfd\x8f\x4f\xea\x3d\xde\x86\xf6\x79\xd4\x35\xf1\x84\xd1\x0c\x59\x6b\xc8\xed\xd4\x1f\x8a\xc3\x4e\x2e\x65\x1c\x75\x9b\x69\xad\x23\x75\xb9\xe5\xda\x92\xe0\xa0\xa0\xb9\xad\x92\x70\xd5\x0c\x2a\x93\xd8\x21\xa1\xf4\x43\x5f\xdf\xbb\x33\x8c\xd5\x51\xda\x70\x83\x61\x7a\x04\x6d\xa6\x67\x1a\xe7\x2d\x96\x8c\x99\x09\xb9\x2d\xe5\x89\xf3\xf4\x07\x00\x02\x6b\x0a\x0b\x38\x89\xab\x5a\x07\xc4\xc3\xe8\x8e\xa7\x16\x96\x59\x50\x94\x64\xcc\x1f\x4d\xaa\x9c\xb1\xf1\x60\x54\x47\xbc\xb5\xd0\x1c\x68\xd1\xa4\x5d\x3a\xab\x64\xf8\xd4\xd0\x56\x4e\xcd\x76\x02\x63\xaa\x57\x3a\x77\x99\x13\xeb\x8d\x7c\x6b\xd2\x81\x2e\x3a\xd3\xab\x1e\x8d\x4f\xdd\xda\x91\x73\x80\x77\x1c\x20\x70\x00\x54\x12\xca\xd2\x1f\x0c\x80\xb6\x25\x7a\xce\x81\xd9\x87\xc1\x2a\xec\x30\x29\xd8\x0c\xea\x1e\x41\x07\x26\x33\xaf\x92\x13\x50\x50\x51\x5f\x69\x2e\xde\x2d\x5a\xe9\x21\xe1\x8d\xd1\xf6\xbd\x25\xd1\x54\x74\xf6\xa8\xf8\x66\x33\xeb\x6b\xd7\xb4\xde\x2b\xb4\xf0\xb4\xff\x66\x83\xd0\xdd\x36\x8b\x9d\xe3\xb5\x07\xa5\x0b\xab\xd5\x36\x6d\x50\xd0\xd1\x8f\x48\x34\xb1\xd7\x87\x18\x85\xc3\x32\xfe\xd5\xfc\x0a\xb1\x75\x6d\x4d\x43\xcd\xa5\x06\xe7\xa1\x70\x6d\x2a\x59\xcb\xad\xab\x8b\xd2\x39\x0e\x01\xc2\x5f\xbb\x9d\xf2\xe2\x15\x4a\x11\x5b\xc4\xf3\xf3\xba\x2e\x39\xb4\xd7\x26\xf3\xe1\x2c\x72\x80\x48\xb8\x69\xdf\x83\x38\xc9\x85\xa0\xef\x61\xc2\xcd\xd6\xc8\xdf\x19\x97\x5b\xbf\x4e\x1e\x98\x6e\xb3\xfe\x3c\x8e\x43\x72\x78\x4c\xb5\xef\x72\xf9\x4a\x32\xe2\x76\x63\x18\x14\xfe\xe4\x3e\x78\xcd\x09\xfc\x9c\xee\xd6\x11\xe4\x4a\x1e\x82\x23\x75\xe3\xa4\x07\xb7\x3a\x6e\x59\x93\x16\x9d\x98\x7d\x1a\x6c\xf4\x7a\xc2\xd3\xae\xb4\xe9\x5e\x59\x3b\x9e\xb6\xe4\xb1\x7a\xb4\xea\xb3\x17\xd3\x89\xac\x31\xc0\x60\x37\x7a\x83\x76\x2f\x9a\x98\x5f\xe7\x9c\x93\xb0\xca\x0e\x7b\x90\xcf\x1b\x3d\x27\x54\x87\x20\x60\x4a\xd9\xbc\x5d\x18\x02\xf8\xc8\x87\x55\xcb\x02\x29\x4b\x7b\x76\xfb\x5b\xa5\x84\x14\xb0\xd5\x9d\x79\xac\x60\xd7\x2d\x30\x2d\xd3\x3f\x9d\x9a\xc1\x5e\x82\x9a\xff\xc7\x5b\xc9\x6d\x03\x0f\x53\xc6\x90\x1e\xc2\x3d\xf9\x03\x4f\x23\x5f\x44\xad\xad\x9d\x71\xc8\x71\x1a\x8e\x6d\x52\x1f\x30\x0e\xcd\x1a\xc2\xd3\x29\x95\x0a\x69\xa2\x62\x11\x4a\x9d\xb1\x7d\xe7\xce\xed\xf8\x3c\xdd\x77\xf8\x6f\xe2\x61\x81\x01\x19\x36\xba\x5b\x9e\xf6\x81\xbb\x5e\x44\x85\xde\x1c\x84\x5a\x7a\x60\xaf\xab\x9c\xe0\xcc\xb6\x2e\x44\xe6\x4b\xcf\xf2\xa7\x7f\xcd\x1a\x3d\x62\xb1\x05\x09\x9b\xc6\xe2\xee\x62\x88\x00\xe4\x9d\x6c\xad\xde\xb2\x77\xed\x97\x82\x4d\xe2\x18\x9a\xd3\x06\x37\x64\x18\xd6\x86\xa5\xa3\x08\x85\x80\x15\x80\xed\x23\x77\x51\x5d\x21\xb0\xf6\xd8\xcb\x98\x98\x14\xf3\x67\x31\x7d\x42\x4a\xda\x39\x89\x86\xfa\xc4\xc2\xd4\x8e\xf1\x49\xae\xf3\x3d\x43\x56\x52\x8d\xb9\x25\xce\x4c\xd5\x4d\x55\xa2\x5d\x43\x28\xf5\x2b\x23\x4f\xf7\x31\x51\xae\x64\x6a\xca\x32\xbe\xb9\x7e\x12\x26\xc7\x42\x27\xd9\xa9\x70\xbe\xd9\x63\xf0\x51\xde\x1c\x34\xcc\x1b\x31\x23\xb0\x96\x9a\x71\x1d\xca\xb8\x4c\x8f\xc9\xcc\xae\xae\x4c\x9b\xe2\x9e\x92\x16\x08\x9b\x86\x19\x0e\x47\x5a\x74\x2a\x6a\x18\x96\x1e\x49\xb6\x60\xe8\x16\xdb\x51\xb5\xa2\x8d\x2f\xd0\x02\x48\x4a\x65\x7f\xd6\x6c\xb9\xe8\x87\xd2\x1f\xe8\xb1\x8e\x95\x9b\x94\x78\x5b\x30\x94\x44\xa3\xd6\x8c\x31\xc2\xc0\x53\x54\x4b\x89\x61\x66\xd4\x3b\xa2\x0c\xf8\xd9\x33\x60\x17\x4c\x98\xb0\x7d\xe4\x8d\x7b\xd8\xa7\x4a\x11\x26\x35\xb3\x80\xb1\xc4\xd9\xea\x4a\x84\x5e\xb7\xfc\xf5\xb4\x47\xbd\x8f\x86\xa1\x86\xeb\x26\xf5\xf6\x9e\x78\xad\xee\xb2\x25\x6e\x86\x71\x23\x23\xe9\x47\xb3\xa1\x37\x96\xa4\xff\x70\x28\x2f\x38\xf9\x84\x9d\xd7\xca\xb6\x4a\x1b\x47\x79\xd1\x1b\xbe\xf6\x38\xd1\x3f\x96\xa4\xff\xb0\xc8\x2b\x3e\x49\x08\xb4\xa5\xae\xf8\x8f\x10\xe5\x85\x8b\x57\xe2\xbb\x54\xdc\x6d\x0a\x41\x6a\x98\xf7\x2f\x62\x88\x07\xa6\x88\xb3\x59\x46\x4e\x47\xff\x75\x17\x63\xfe\x04\xf7\xb5\x8e\x5c\xae\xc1\x8b\x88\xcf\x3a\xeb\x69\x25\xba\x96\xe1\x66\x55\x2c\x70\x17\xe6\x82\x49\xec\x8d\x70\x20\xff\x96\x5e\x79\xb6\xeb\x95\x1f\x08\xf7\x42\xc0\x63\x78\xc2\x32\x8a\xd0\xec\x1b\xf7\xca\x16\x0d\x56\x62\xe0\xa7\x36\x4e\x01\xbf\x64\x0b\xd6\xd9\x8d\xd3\x99\x54\x80\xe4\xe6\x9d\x6c\x14\xc6\x57\x86\x7b\x74\xc4\x88\x54\x7b\xf0\x96\xe8\x53\x11\x1e\x2f\xa5\x51\x95\x59\xfe\xa5\x4b\xfd\x8e\x15\xd5\x37\xb7\xe4\x23\x12\xae\xbb\x70\x16\x51\x63\x47\x6f\x91\xde\xf0\x67\xfb\x51\xa0\x80\x47\x3f\x65\x3c\x80\xf3\xb4\xe8\x05\x74\x19\x86\xfd\xe7\x4a\xa0\xf8\xe9\xac\x38\xb7\x33\xd7\x59\xb5\xb5\xde\xa8\xfc\x46\x5e\x3a\x9e\xcc\x8a\xe3\x7c\xee\x8e\xca\x9a\x38\x60\x72\x7d\xe0\x51\xe7\xc1\x68\x46\xe9\x34\xd5\xeb\xa2\xba\x6a\x22\xb3\x3a\x6b\xa2\x32\x3b\x6b\xa3\xce\x2e\x2c\xef\x26\xfe\xd6\x7a\xdb\x54\x49\x46\xb7\x54\x79\xf8\x3d\x9d\x4b\x99\xc2\x3b\xc2\x70\x72\x02\x24\xdc\xd1\xb2\x80\x38\x66\x5f\x9b\x93\x54\x49\x1f\x56\x5b\x85\x8a\x5b\x01\xb2\xc5\xba\x60\xf6\xc2\xe6\x2e\x4e\x0f\x30\xce\x55\xb8\xa9\xe3\x38\x49\x00\x59\x9e\x97\x0d\xc7\x44\x35\x0f\x95\x37\xf6\x6f\x2d\x0a\x1c\x21\xf3\x6d\x76\x39\xa9\x8f\x1c\x5c\x2f\xb5\x4b\x52\x99\x9d\xb1\xe2\x21\xfd\x1e\x8c\xff\x36\xff\x88\x0c\x81\x62\xe9\x1e\xc9\x5c\xb5\x2b\x27\x49\xe7\x65\x2f\xb1\x9d\x61\xf6\xca\x46\x7a\x1b\xcd\xb7\x10\xfb\xb5\x7b\xed\x8b\xf3\xf0\x50\x7c\xf3\xb5\x77\x8d\xc3\x34\x65\x6a\x2d\xa5\xa0\x74\xc2\xdb\xa0\x5e\xc2\x5c\xdf\x53\x4b\xd7\x2b\x27\xbc\x4a\xe6\xfb\x52\x9b\x82\x53\xf4\x8e\x00\x1d\x66\x99\xf0\x0e\xc8\xe6\x82\x03\x34\xbe\x96\xd4\x96\x2b\xc6\x65\xf9\xd0\xc7\x22\xd3\x83\xd6\x6a\x1a\x5c\x91\xf3\xca\x8c\xe0\x45\xcd\x2e\x02\xc5\x3e\x70\xb6\xe6\xed\x97\x21\xcd\x5c\xec\xbe\xf5\x42\xf5\xe0\xb8\xc3\x7d\x76\xda\x86\x4e\x21\x07\x22\x66\xc5\xeb\xba\xe3\x52\x8b\x30\x72\xd6\x47\xc0\xdf\xbb\xc0\x2a\xb9\xd0\xfd\x1f\x20\xad\xc6\xf6\x95\x8d\x2f\x4a\x95\xe4\xf3\xe2\x36\x1b\x98\x4d\x9a\xfe\xf1\x6e\xff\xeb\xca\x7e\x8b\xab\x7d\x7d\x18\x3c\xf1\xed\x8e\x1d\x6f\x13\xe1\xb0\xe0\x98\xe7\x6c\xcf\xb8\xfb\x70\xef\xfc\xbd\x66\x25\xed\xde\xff\x10\x6e\x7e\xdd\xd8\x57\xd5\x58\xee\x55\xe1\xbc\x6c\x11\x41\x21\xb9\xcb\x8d\x21\xd3\xab\xc2\xfd\xfd\x38\xeb\x69\x44\x2a\xb9\x7a\x12\x33\xc9\xd9\x40\xb8\x85\x45\x59\x6f\xca\x05\x4a\xd2\x4e\xf1\x43\x38\x66\xa4\x04\xb7\x92\x2c\x03\xe3\x52\x1d\x12\x09\x9c\xc6\x8f\x83\x6d\xd6\x77\xf0\xac\x45\x1b\x0e\xc1\xf1\x28\xc9\x69\xfd\x77\x4c\x8c\x05\xdf\x65\xee\xe3\x37\xeb\x78\xd0\xac\xbb\xf2\xd3\x32\xed\xe7\x4c\x7a\x00\xac\x20\x42\xa2\x08\xc1\x2c\xe4\x27\x1a\x5c\x6e\x40\x4f\xde\xa4\x6c\x0b\xef\xf7\xff\x18\x6f\x3c\x69\x91\xbd\xe3\x59\x55\xc8\xd7\xca\xa3\x96\x3a\x87\x38\x96\xde\x70\xec\x80\x75\xa3\x88\x5a\xe5\x13\x38\xf3\xb9\x26\x3e\xe6\x73\x34\x50\x63\x58\xa1\x59\xfb\x13\x96\xc5\xdf\xcf\xef\x0b\xe5\x11\x8f\x7d\x74\xf2\xac\x70\x8f\x2d\xb4\x09\x89\x8e\x79\x43\x1c\x26\xea\x1f\x83\x7a\xa5\xb1\xca\x0a\x0e\x5a\x60\x37\xa1\x29\xaa\x3c\x69\x9f\x1d\xa9\xa2\x36\x4f\x67\x67\x74\x7f\x78\xbc\x0a\x68\x54\x49\xba\x1f\x77\x31\x61\xee\x72\xcc\xcc\xde\x33\x3b\x65\xae\x17\x1e\xbb\x99\xe5\x30\x74\xfe\xd0\xeb\xfc\x1e\xfd\x59\x73\x6d\x76\xcb\x59\x45\xf6\x8d\xde\xc3\x1a\x7b\x29\xae\x4b\x1e\x92\x92\xf6\x59\x1b\x68\x01\xf4\xa3\x1d\x26\x8d\xdb\x91\xc7\xb6\x85\xf7\x1b\x58\x9e\xee\xd6\xe1\xb1\x3e\x54\x29\xab\x30\xff\x6a\x4a\xa2\xf9\xd8\xd7\xaf\x8f\x24\x37\x0a\xa0\xbf\x93\xa2\x80\xdb\xb7\x6f\x12\xc1\x55\x63\x6b\x97\xb1\x77\xf1\xd4\x59\x3b\x38\xa0\xb6\x3e\xcc\xeb\x80\xf1\x2b\x67\xd1\x36\x77\x26\x24\x1d\xd1\x3e\xde\x82\x75\xcb\xeb\xb6\xee\xfa\x3e\x1b\xc2\x0a\xdd\x56\x5a\xeb\xc1\x88\x4a\xb4\x05\xa3\x91\x1a\xb4\xb8\x67\x82\xcb\xbf\xe5\x3d\x8a\xfe\x83\x3e\x4f\x8b\x01\xe5\x69\xe9\xb6\x5d\x40\x9c\xc9\x01\xff\xe5\x51\x59\xd6\xf7\x86\xf9\xa7\xf7\xd8\x4f\xda\xe6\xda\xf2\xbf\xd2\xc6\xbd\x0c\x41\x49\xae\x4e\x25\x46\x28\x9d\xe0\x9a\x04\x59\xfe\x39\xcc\x39\xa3\xde\x4a\xd5\x43\x08\x34\xce\x51\x40\x4a\xfd\xb8\xb6\x39\xa0\xe1\x75\xae\x33\x70\x3d\x05\x82\x30\x41\xa3\x8a\x31\x0a\xb8\xe4\x2c\x5e\x19\xf5\x3e\x05\x84\x28\xb5\xda\x48\x52\xa9\xd4\x42\x78\x8d\xb5\x4c\xd4\x87\x88\x6a\x2d\x18\xf0\xed\xef\x61\xda\x70\x33\xad\xff\xfb\x37\x75\x62\x03\xf0\x4e\x56\x34\x7c\x07\x11\x75\x87\xa0\xe7\xa0\x8b\x61\x6c\x65\x0c\x8d\x9a\x7a\x08\xa2\xf6\xa8\x4a\x40\xea\xd5\x35\xfa\xab\xe2\x79\xb8\x43\x17\x07\x8d\x51\x40\x52\x52\x71\x82\x4f\xf9\xa7\xb0\x3c\x2f\x1d\xe4\x26\xf1\x1d\x49\x47\x26\x02\x2d\x70\x40\x5f\x53\x2f\xbb\x6d\x6e\xa6\xf5\xbf\xd8\xc2\x03\x63\xa6\x90\x5a\x35\x3b\xf5\x3c\x79\x04\x09\x18\xe3\xcb\x18\x2f\xe9\xaa\x9e\x50\x96\xc8\x65\x7f\x20\xe0\x9d\xb6\xfa\x81\xad\x02\xf0\xa2\x04\x94\xd3\x07\x96\x50\x2e\x57\x6b\xf4\x59\x89\x44\x34\xce\x01\x3c\xed\x1f\x41\x8a\xfa\xa5\xd3\x17\xa6\x90\x4e\xc7\xac\x95\x9a\x69\xc5\x44\x95\xf6\x0e\x4e\x24\x7f\xc2\x37\x20\xed\xf7\x2e\x86\x20\xd2\x2b\xcb\xc0\x67\x1c\x49\x9c\x67\xa1\xc6\x3a\xb5\x23\x3f\xe1\xb8\xa4\x50\x75\x47\x97\x17\x71\x2b\x35\x3c\x28\x93\x19\xcf\xda\xae\x2d\x48\xbb\x4a\x44\x9f\x1b\xaf\xb8\xe0\x55\x31\x26\x67\xec\xbb\xce\xbe\x23\x59\xb9\x02\x18\x23\x7d\xc4\x83\x90\x89\x07\x2d\x94\x73\xa3\x15\x3c\x49\x9a\xca\xb9\x8d\x60\xce\x7b\x36\xc2\x81\x70\xd8\x53\xa4\xfb\x9a\x75\x41\xeb\x9c\x6d\x6d\x16\x8b\x47\x83\x70\x3c\x10\xed\x99\xdc\xfa\x73\xf8\x4f\x69\x63\x30\x02\xca\xb6\x82\x75\xbf\x18\xf8\x05\x9d\x94\x9c\x66\x1e\xc2\x35\x6f\x23\x0f\xac\x92\x9c\x92\x1f\xda\xd5\x2e\xef\x6f\x5d\x85\x6c\xae\x3c\x28\x7f\x49\xeb\xd5\x96\x2b\xd0\x20\x5b\x14\x44\x2d\x96\xb1\xd3\x12\x64\xa1\xf1\x04\xbf\x71\x1d\xea\x9d\xbb\xe1\x29\x19\xcb\x3c\x55\x50\x71\x79\x6f\x51\x5e\x34\x39\x4b\x1c\x9b\x12\x23\x09\x2a\xc1\xbf\xf1\x25\x5e\xfe\xe6\xf6\x8f\x22\x56\x1f\x76\x84\x1c\x2a\x2d\xc2\xe6\xea\x73\xd9\x79\x31\x22\x4e\xa4\x21\xc3\x34\xc6\x08\xf0\x5c\x55\x24\xd1\x9f\xca\x8b\x5b\xad\xcc\xc0\x4d\x7d\x81\xdf\x91\x4f\xbe\x7f\x72\x02\x3d\x99\xf5\x4b\x2d\x91\x07\x0a\x89\xbf\x38\x32\x49\xe5\xad\xfe\xde\x2b\x91\x08\xca\x28\xb1\x1d\x59\x64\x6d\x68\xaf\xa6\xc5\x90\x88\x9c\x05\x4c\x61\xa0\xbc\x24\x55\x99\x54\x97\xae\x0a\xf6\x94\x43\xf7\x28\x06\x0f\x04\xbe\xda\xe5\x8a\x1d\x8e\x1d\x27\x20\x48\x28\x04\x78\x0e\x08\x19\xcb\x15\xb5\x0a\xf6\x03\x03\xca\x3d\x9e\xaa\x3c\x58\x55\x97\xae\x51\x94\xa4\xca\x03\x89\xc2\x05\x4c\x0e\x29\x46\x4d\x8b\x87\x5e\xab\x3e\x86\xc2\xbc\x85\x70\xc5\xde\x18\x85\xef\x31\x03\xcc\x42\xb8\x8f\x6a\xb0\x2a\xbd\x0e\x08\x19\x4f\xf2\x80\xed\x7c\x4f\xb1\x0e\x0c\x14\x2c\x82\xee\x02\x8a\xfd\x91\xee\x30\xc9\xdf\xb0\xaf\xca\xb9\x02\xd0\xbd\xf3\x88\x2c\x1c\x75\xee\x89\x80\xc3\xe8\x84\xfc\xc0\xc2\x0a\xb4\x48\x73\xfe\x12\x35\xbd\xde\xc4\xb2\xd9\xca\x52\xa5\xd5\xea\x28\xa5\x87\xf3\xf5\x8d\x2b\xa4\xd0\x46\xbb\x4c\xc7\x1f\x3f\x46\x68\x23\x7e\x4a\x17\xf4\xf2\xbd\x31\x0f\xf5\x94\x96\x96\x02\x1c\x0b\x94\xb4\xa1\x10\x70\x29\x4f\x22\xcd\x2d\x4a\xc8\x12\xfd\x71\x10\x0d\x9b\x02\xc9\x83\x37\xc7\x75\x36\x95\xd7\x28\xdb\x84\xa2\xbf\xf7\xab\xec\xff\xee\x96\x21\x50\x40\x81\xea\x08\x3e\x1a\xc3\x81\x31\x94\x0a\x00\xa4\x26\x14\x19\x27\x8e\x73\x33\xad\xd9\x87\x86\x58\x2c\xeb\x39\x59\x83\x17\x7c\xbf\x73\x1a\xab\xd3\x41\xc8\x43\x45\x76\x70\xc6\x7c\xcc\xba\x25\x14\x98\xb3\x04\x33\xb8\x37\x1f\x7f\x94\x5f\x2a\x78\x43\xeb\xe6\x38\xcf\x0a\x3c\xa3\x22\x8c\x1f\x1b\x27\x22\x47\xc1\xb5\xf1\xe7\xd2\x21\x07\xdd\xc2\xa3\xc4\x10\xa4\xe7\x56\xf5\xeb\xb3\xa9\xe0\x73\xc0\x26\x3c\x36\x44\x2d\x6d\x9e\x8f\xc1\x9b\xa1\x8b\x0e\x81\x74\xae\x74\x9e\x7a\xe8\x71\x35\xfe\xb7\x22\x6d\xf7\x8c\xaf\xbc\x4a\xeb\xdc\xec\x7d\x5f\xfc\x28\x5e\x0e\xbd\x6d\xed\x27\x56\xa0\xb3\x9b\x9b\x73\x12\xde\x02\xdb\xb4\x46\xf7\x3e\x12\x0f\x7d\x2a\x73\xd6\x56\xc9\x15\xd3\x87\x03\x16\x22\xb0\xa6\xa0\xcc\xf7\x6d\xfc\xb7\xb7\xad\x06\xef\xfc\xfc\xa8\xd5\x16\xf4\xa9\x39\x6f\x71\xa8\xb9\xa7\xba\xd1\xf9\x7b\xc1\x94\x6f\xac\x90\x21\x0c\x3c\x0e\xa2\x7f\x5d\x77\x07\xbf\x40\x61\x0e\xf0\x23\x61\x8c\xc4\xe9\xb9\x59\xd7\x59\x7d\x69\xc1\xa2\x94\xc4\x7c\x23\xd2\x72\xef\xd2\x5c\xf6\x06\xf2\x89\x97\x49\x0c\x02\x94\x5f\xdf\x99\x89\x57\x2b\xdb\xcb\x22\xed\x91\x8e\xff\xdc\x4e\xdc\x9e\x82\x30\x97\x7c\x97\xe7\xa7\x39\xa7\x38\xe8\xd6\xbd\x0a\x2e\xc5\x79\x66\x90\xa4\xb8\x08\xef\x6e\xec\xfe\x73\xcb\xa1\x00\xe8\x62\x98\xbf\xce\x7e\x1d\x70\x2a\x35\x45\x23\x01\xf2\x05\x73\x0a\xcb\x76\x4e\xde\x39\x3e\xd0\x63\xc9\xe4\xe8\xb3\x51\x47\xd5\x21\xeb\x80\xc3\x9a\xc7\x0f\x81\x38\xfe\xfc\xd0\x8a\x91\x79\xb3\x36\x26\xaa\xca\x0c\xbd\x2d\x32\xb3\x7e\x51\xfb\x96\xcb\x00\x81\x5b\xf4\x61\xe1\xb9\x96\x98\xeb\xd0\xbe\x29\x35\xd5\x1f\xe3\xe3\xd9\xe9\x5f\x5b\x97\x91\x7a\xef\x5f\x69\x1e\xef\x74\xaa\xe5\xf3\x62\x28\xdf\xad\x1e\x1a\x4f\xa4\x8d\x3d\xe8\x43\x2f\xfa\xc9\xe0\x9c\x0c\xed\x0e\xb0\x19\x50\x34\x3f\x0c\x0f\x39\xe6\x54\xcb\x2c\x02\xee\x31\x00\xa2\xaf\xd5\xac\xd2\x14\x86\x39\xd1\xcd\x22\xf5\x66\xbd\xe0\xc9\x50\xee\xac\xa6\x5d\x53\xbb\xf5\xdb\x1f\xd4\x9c\x7f\x28\x1f\x30\x76\x34\xfb\x73\xcf\x4a\x07\x73\x62\xb5\x99\x6e\x51\xb7\x7b\xe9\xec\xfc\x06\x7d\xcd\x0c\x23\xc1\x40\xa4\xfd\xf2\xf7\xee\xc9\x8f\xa0\xf1\x9f\x19\x98\x55\xd9\xc1\xfb\x13\xbd\xa6\x5e\xbe\x9c\x52\x2b\x18\x81\x2f\x36\xf7\x27\x0a\x12\xa4\x97\x90\x19\x8b\x8b\x11\xc8\x4b\x68\xa7\xf7\x2d\xed\xdf\x46\xf8\x73\x81\x35\x93\x58\xfe\xb4\xde\x96\x58\xfc\x79\x58\x51\xf7\x33\x88\xd5\xfe\x07\xd2\xe9\x0d\x80\xb8\x9d\xed\x57\x4b\xfd\x8a\xd4\x62\x22\x8d\xa8\x26\xcb\xc3\xa2\xd1\x7b\xd6\x5b\xed\x6d\x13\x96\x70\xdb\xda\x1a\x5a\xa2\xbe\xe2\xd6\xb6\x2f\xca\xb2\x96\xc3\x5a\x5b\xcb\xdb\x5a\x2d\x6c\x24\xde\x4e\x8a\x65\x94\x57\x48\x57\x06\xcf\x4d\xc8\x5f\x18\xd1\x0a\x56\xd3\xa7\xe4\x78\xe6\x73\x93\xe4\x80\xb1\x58\x0d\x29\xe4\xd6\x1c\x1f\x99\x6f\xc1\x43\x26\xa9\x36\xd9\x6c\x98\x6b\x74\x49\x70\x89\xa1\x5d\x00\x2e\x40\x3f\x77\x1a\x53\xb9\x9e\x86\x68\x97\x73\x2d\xe2\x86\x24\xe1\x39\xec\xe8\x6e\xb1\x50\x5b\x03\xb6\x9f\xf8\xf5\xb0\x8e\x70\x83\x59\x8f\xd3\xb2\x47\xe6\xf5\x1f\x3a\xf5\xa5\xaf\xf5\xf5\x99\x45\xeb\x74\xd1\xd7\xe7\xee\x03\x62\x26\xb8\x3c\x0d\x98\x45\xe8\x5f\xeb\xf1\xd1\x70\xd1\x30\x4a\x74\x7a\x1f\xc0\x58\x0c\xa7\xad\x42\xb4\xb2\xf5\xac\x2e\x52\xf6\xed\xfa\xf5\x0a\x2e\x45\xc2\xe2\xc4\x8e\xa0\x94\x75\x2d\x30\x4f\x53\x42\xc3\xbe\x18\x6d\x09\xe2\xdb\xd5\xc7\xa2\x9c\xa0\xf1\xe2\x93\xec\x1a\x07\x5d\x76\x94\x16\xdf\x64\x9d\x60\xb7\x7f\xcb\xc3\x9d\x58\x19\xff\x50\xff\xe0\x9c\xe2\xfa\x9b\x5b\x0d\x17\x8c\xea\x56\xee\x43\xd3\x34\x4f\x10\x91\x8c\x91\xb5\x90\xbf\xf7\x30\x26\x7a\xcd\xcd\x75\xa0\xc0\x34\xc6\x26\xd1\x10\xd4\x45\xa1\xca\x99\x27\x74\xd9\x41\xee\xf6\xcd\x42\xc1\xb5\x25\xda\x2b\x87\x44\xcb\x8e\x47\x1c\x7f\x7e\x41\xed\x78\xd6\x1e\xf0\xbc\x43\x50\x4b\x5a\xaa\x00\x97\x6e\x16\xac\x9f\xe7\xbe\x52\x67\xbc\xbc\x78\xc2\x2b\xce\xf4\x1b\x69\x7c\x1b\xb8\x6f\xf1\xca\x9c\xe2\xf1\x92\x38\xac\xb7\x6f\x9c\x17\x71\x4a\xb3\x60\x03\x9c\x14\xeb\xfc\x47\x14\xdc\xe1\x7e\x0c\x86\x89\xc9\x95\x6f\x20\x50\x0a\xe7\x38\x10\xb0\x79\x0f\x75\x71\x82\xeb\xa2\xb5\xd9\xc2\x08\xcc\xfa\xd6\xf0\x90\xa0\xb5\xfa\x99\xa7\x8d\x8d\x9f\x99\xd5\x8c\x3d\xc6\xb6\x9f\x13\x9b\x54\xdc\xc2\xb7\x6e\x32\x70\xad\x12\xb9\xbf\x61\x41\x1d\x2f\xe1\x46\x5b\x0d\x5d\x2b\x70\x5e\xb6\xb5\x46\xb5\x17\x9b\xc4\x28\xca\xf3\xfd\xc2\x3f\xc9\xac\x33\x67\x67\x01\xf3\xb3\xf5\xd9\x0e\x04\xec\x51\x29\xb4\x01\xc3\xc4\xc4\x8a\xb5\x0e\x44\x4c\x6d\x34\xf7\x98\x47\x3b\xbf\x3f\x38\x31\xd7\x5b\xd1\xab\xd4\x54\xd8\x3e\x20\x3d\xb1\x51\x38\x1a\xe3\x13\xaa\x29\xca\x92\xde\x35\xc1\xa8\x63\x6b\x2b\x67\x64\x52\xbe\xf6\x00\x86\x88\x1d\xc3\x12\x41\x7c\x86\x76\xe4\xec\xfd\x61\xea\xae\x6b\x42\x63\x7a\xff\xed\xe5\x5b\x95\xe9\xc9\x43\x38\x94\x5e\x27\xb3\xd5\xa4\x86\xd4\xcf\x4f\x07\x80\x53\x30\xb7\x83\x2a\x20\x29\x9b\x35\x72\x8f\xeb\x7c\x9f\x80\xc8\xa4\x8a\x93\x5e\xcc\x3f\xf8\x7a\x7d\xb7\x5b\xf0\xa2\xc0\x81\x53\x57\x07\x55\xf7\xbd\x1e\xf6\x1b\xb1\x04\xec\x54\x7d\x1a\x81\x8d\x3f\x4c\xd7\xc0\xf6\xf9\x0e\x55\xcd\x5e\xbb\xc0\x8c\xcd\x7d\x18\x4c\x09\xd2\x36\x68\xb8\x38\xdb\x0d\xee\x62\xe2\x8d\xc7\x8e\x45\xda\xb0\x02\x6e\xbc\x2f\x84\x4d\x01\xd1\xd9\x41\x85\x0e\x04\xec\x36\xca\xe2\xeb\xfb\xb6\x93\x36\x4d\x6b\x14\x3c\xe9\xcc\x75\x39\x8d\x6f\x35\x29\x3f\x71\xa9\x09\x23\xc6\x30\x31\x39\x75\xa3\x41\x2e\xca\x6d\x58\x02\x16\xa9\x69\xc8\xaa\xf2\x66\x67\xc6\x51\x7f\x1a\x93\xb7\xba\x57\x6f\xf1\xfe\x67\xad\x40\xc6\xeb\x18\x75\xac\x3b\xc3\x09\xc9\x6f\x17\x23\x08\x96\xa5\xcc\xf5\x26\x8f\x6f\x34\x8e\x11\x4f\x91\x3a\x6f\x6e\xd3\xf4\x4d\x5e\xa9\x9d\xa2\x3b\x3e\x9e\xe7\x72\x82\x30\xb6\x2e\x27\x9a\x7d\x17\xbc\x29\x58\xf5\xe4\x0c\x22\xa2\x39\x99\xba\x4f\xe7\x0c\xb0\x8a\x8b\x7e\xa9\x2e\x37\x40\x33\xbc\xb4\xf2\xf1\x9a\xbf\x5f\x7e\x49\x2a\xfa\x8f\x95\x60\xfa\x85\x0e\xeb\xd6\xa3\xc1\xb1\x12\x71\xad\x14\xc1\xca\x5e\x0c\x51\x28\x54\x86\x95\xcf\x03\xd8\x04\xdf\xa0\x31\xf7\x60\x60\x06\xc2\xf3\x77\x32\x8d\xbe\xde\xc6\x75\xad\xa4\xe0\xaf\xd5\x93\x05\xaf\xd7\x05\xd8\xa3\x08\xcb\xda\xc5\x30\x06\x12\x8c\x46\xef\xb5\x28\x7a\x63\x3c\xb9\xc8\x6d\x4c\xa9\x68\x63\xf2\xf5\x2d\x70\x13\x14\x86\x3a\x92\x7c\x6d\x03\xe9\xde\x2e\xc7\xa2\xb9\x56\x66\x68\x4a\xe2\xea\x4d\xf8\x7e\x9a\x20\xed\x5b\xd0\xb5\xb4\x7d\xfc\xf4\x72\x8a\xca\x32\x8b\x04\xb8\x7e\xfc\xe8\xa0\x77\x7a\x4a\x05\x90\x3a\xd5\x8d\x7b\xe9\x73\x09\x10\x9e\x33\x11\xf6\xf7\x78\xd4\xba\xd7\x2c\x47\xb7\x20\x9d\x4d\x4b\x64\xbc\x9a\xb0\x76\x17\x25\x62\xed\xb1\x6f\xbe\x83\x7f\x07\xd6\x7c\x02\xe0\xfc\xad\xda\x6c\x36\xa5\x7a\x09\x5e\x61\x43\x47\x3b\x7a\x56\x6c\xb8\x0e\x20\x7c\x5f\xf5\xc3\x0f\xa6\xfd\x6d\xe0\xaf\xb7\x45\xa9\x5a\x51\x6c\x9c\xee\x5a\x1c\xeb\xee\x3e\x67\xb7\xe9\x10\x73\x53\x6f\x98\xac\xbf\x6c\x07\x9b\x03\x87\xf3\x50\x8f\xe4\xae\x1b\x38\xff\x43\xe8\x34\x3e\x40\x15\x9a\x8f\xf2\x80\x65\x31\x62\x14\xcf\x82\x1f\xdc\x1d\x9c\xe0\x09\x20\x0e\xfe\xcc\x7a\xd0\xd7\xf7\xe0\x46\x08\x5d\xb5\x35\xb6\x03\x51\xc6\x83\x8c\x2f\x59\x0d\xe1\x76\x41\x66\x47\xdb\x57\x12\x4a\x3b\xff\xa8\x3d\xde\x79\x77\x16\x40\xbc\x52\xbf\xdb\xe5\xfe\x71\xba\x19\x5c\x03\x12\x6b\x4b\x30\x7b\x32\x74\x76\xed\x30\x06\x3d\x22\x77\x0d\x30\x7f\xc4\x4e\xde\x17\x94\x03\xf5\xbc\x72\x0d\xaf\x44\xee\x6e\xda\x06\x83\x4a\x60\x33\xc4\x37\xf9\x25\x2f\x2d\xc3\x2a\x9d\x52\x9e\xee\x80\x2e\x55\x2b\xfc\x5b\x6c\xaf\x51\x9d\x86\x37\x48\xc2\x16\x7f\xc1\xd7\xf3\x30\x78\x1b\xf8\x2f\x7b\xc7\x86\x01\x71\xb0\x90\xc1\x38\x3e\x36\x46\xb2\xbe\x0e\x27\x30\x2a\x08\x47\x5c\xf2\x51\xdb\x61\xd7\x24\x3b\x03\x9e\x68\x89\x66\x14\x00\x45\x42\xd7\xfc\xa7\x99\x43\x12\xba\x96\x84\xb7\x2d\x60\x19\x30\x81\xdd\x01\x29\xf0\x8f\x83\x79\x94\x5b\x68\xca\x91\x91\xf6\x13\xbf\xc4\x56\xea\x95\x0a\x48\x32\x9e\x70\x43\x8a\x19\xb4\x78\x51\xb5\x50\xc2\xa5\xf0\xe8\x39\x9a\x12\x3e\x26\x7a\x67\xe1\x80\xad\x8f\x2a\x95\x2b\x6b\xc9\xbc\x84\x27\xc5\x14\xbf\xca\x57\x5f\xa4\x7e\x49\xf9\xb5\x8e\xc1\x50\x67\x5f\xf7\x10\x43\x4f\x7b\x62\xf1\xe2\xce\xcc\x96\x89\xa3\xaa\x61\xd5\xb7\xf3\xb6\x4e\xc9\xc8\x20\xf0\xd0\xf4\x0a\xa7\xfb\x7e\x41\x27\x0e\x95\x2f\x02\x49\xd9\xe5\xed\x8c\x9f\x6f\xb2\x99\xf5\xea\x1f\x22\xa7\x0c\xda\xdc\xac\x1a\x2a\x30\x77\x02\xa7\xc1\xb9\xf3\xb0\x81\xeb\x8e\x4b\x1a\xa3\x4f\x4c\x78\x8b\xfb\x89\x69\x31\xc0\x4d\x2a\x7f\xcb\x80\x7a\xdc\x97\xb1\x7b\x99\x20\x9b\x6d\xcd\x65\x4a\xba\x21\x2c\x4f\x27\xf6\xa8\x5a\x32\x4e\x8a\x6d\x0e\xc2\x0f\x06\xe2\x3a\xa8\xb4\x8e\xdc\xa2\x2a\x47\xc7\x60\xe0\xf4\x78\x5d\x73\xd2\xb6\x23\x66\x44\x5c\x98\x10\xfd\x01\xf2\xba\x15\xa3\xc4\x46\x49\x82\x9d\x48\x77\xf3\xed\x5d\x12\xab\xaa\x00\x92\x49\x0b\xfb\xa2\x91\x3f\xb8\x37\x23\x15\xc8\x82\x55\x89\x2e\xf1\x35\x77\x35\xc9\xae\xce\x52\x3f\x37\xfb\xd6\x17\x90\x0f\xae\xe4\x30\x1c\x91\x3a\xbd\x33\xa9\xbf\x6e\x13\x01\x70\x26\x39\x26\xe7\x56\x75\x70\xb0\x1d\xb4\xa4\x41\x46\x73\x90\x14\x9b\x8c\x1b\x55\x63\x3b\x49\x7d\xbb\x21\x5c\x8f\x18\xae\x55\x76\xc2\x1b\xb4\xe5\x7d\xa8\x84\x01\x62\x82\xbf\x0f\x99\x7a\x3a\xcd\xcd\xce\x39\x79\x1e\xdc\x21\x20\x52\xd9\xd4\xd8\xd7\xce\xbe\x93\xee\x93\xde\xfc\xa9\xca\x0a\x4e\x40\x29\x89\x30\xdf\x97\x44\x64\x3b\x28\x41\xb0\x58\x72\xb4\x5b\x42\xf9\x12\x4e\xfe\x61\x1d\x1f\x2b\x96\xe3\x7b\xc7\xcd\x3f\x58\x81\x87\x13\xfe\xdf\x2f\xa7\xaa\x4a\xda\xbd\xd5\x9c\x76\xd6\xdd\xb6\xc3\x36\xf6\x6c\xd2\xa4\x67\x8c\xb4\x87\x4f\x25\xba\xa5\xc1\x50\x0a\x28\xc5\x2f\x56\xab\xcd\x20\xea\x6a\x0e\x84\xfe\x3e\x4d\x54\x8d\xf2\x63\x37\x34\x62\xc9\xa4\x5e\xec\x7e\x5e\xec\x28\x29\x79\xc7\x14\x49\xbd\x8a\xc7\xd8\xd0\x84\x65\x37\x61\x27\x78\x8c\x55\x24\x75\x38\x95\x91\xe6\x2f\xa1\x9c\xe2\x9c\xf4\x4e\xf2\xce\xa8\x27\x16\x6e\xba\xe0\xce\x68\xe8\xb4\x91\x9e\x35\x31\xdb\xe8\x19\x3b\xbe\x5e\x6e\x34\x8b\x38\xeb\xbe\xdf\x96\x53\xcd\x71\xcf\x46\x3b\xe2\x20\x4a\x78\x0e\x89\xa4\xdc\xca\xf0\x5d\xf0\x5d\xe6\xe6\xfe\x59\x20\xee\x1d\xd6\x4d\x47\x2d\x57\x4d\xa8\xc6\xd5\x5f\xc9\x09\x4b\x0f\xe3\xa6\xc7\xe9\x56\xa4\x67\x47\x67\x17\xc7\xe4\xe3\xd3\x3e\x84\x95\xdd\x57\x26\xfa\xc2\x19\x19\x69\xbd\x26\x0d\xfb\x0c\xc9\x99\xdb\xa3\xce\xba\x35\xcb\x58\x98\x6e\xbc\x13\xd6\x17\x46\x3e\x67\x6c\x61\xd1\xe2\xa7\xb2\x8f\x30\xc3\xe6\x11\xc2\x78\x29\x7b\x93\xe5\x1b\xe2\x38\xdc\xdc\x7d\x3e\x3b\x7c\xce\xc4\x39\x09\x69\xb8\x20\x37\x3f\xc4\xc9\x6b\x4e\xc1\xbc\x1b\xce\xc1\x57\xb6\xbd\xa6\xe6\xff\x16\xe2\xb3\xfc\x20\xf9\xd5\x41\xf2\xf2\x50\xf9\x45\x6a\xf6\x87\x70\xe5\xa6\x59\xd2\x72\xd2\x8a\xd2\x13\xf2\x1d\x92\x4a\x16\xe1\x12\x70\x18\x37\xc3\x7e\x56\xa1\xbb\xda\xc0\xb7\x38\xe0\xb4\xcb\x6f\x9f\x3f\x97\xa3\xda\xef\xbb\xcb\xd7\xfe\xeb\x20\x87\xab\xda\xe7\xad\xfc\x33\x23\x4a\x46\x09\x3b\x53\x6c\x36\x10\x51\x41\x80\x69\x12\xdd\x7f\xab\x04\xa4\xf1\x05\x43\xdf\x0f\xec\x66\x7f\x54\x30\x59\xf2\x77\x1e\x02\xc2\x49\xfb\xf7\xb4\x2b\x7e\xd4\x1e\xb4\x5b\x97\xb0\x6b\x42\x1d\xb1\x05\xe2\x93\x34\xd1\x31\x4c\xf9\xa8\x5b\xa1\x2a\xf3\xc6\x3b\x2f\x6a\xd3\xfa\x4c\x01\x41\x4d\x30\x58\xe5\x7d\x3e\xfd\x10\xb1\xb9\xa4\xb2\xf5\x2e\xe4\x74\xd8\xba\x75\x15\xc8\xc3\x74\x1f\x6a\x8d\xb2\xc4\x69\x5a\x8d\xb8\xea\x36\xc4\xec\xa1\x29\xe3\x10\xb1\xa4\x75\x11\xec\x1e\x64\xf8\x9a\xf8\x6e\xe3\xae\xfc\x04\xc0\xb9\x95\xab\xbf\x9e\x7f\x3f\x94\xb4\xd9\xca\xca\x15\xee\x0a\x83\x7c\x6e\x34\x6f\x5a\xbb\xf3\x38\x48\xdb\x2f\xa3\xd0\x68\xd5\x21\xab\xdd\x04\x06\x7d\x83\x49\x3e\xa9\xd7\x16\x1f\xde\xfc\xdf\x64\xfe\xe4\x09\xe4\x7f\x5f\xe3\x15\x08\x59\xf6\x33\xa3\x72\x44\x90\x77\x63\x36\xd3\x5a\xf9\xb5\xcf\x4b\xe5\x05\xd8\xac\xf8\xf7\xc6\x41\x1e\xbf\x3b\xf8\x9f\x54\xc9\xf8\x9d\x05\x01\x20\x47\x58\x19\x4b\x62\x34\xee\x70\x00\x3a\x49\x39\xe8\xeb\x6d\x8d\xca\x7b\x23\x3f\x7b\xff\xc7\x58\x25\xf6\xa5\x43\xb0\x87\x4b\x4d\x3b\xe1\x8c\xeb\xc2\x00\x45\x8d\x28\x7b\x76\x54\x12\x36\x0b\x4c\x61\x9b\x59\x7d\xc6\x6a\xe3\x4f\x93\x8c\xd1\xad\x54\xf6\xd0\xb2\xbf\x60\x10\x75\x20\xb1\xb9\x00\x84\x95\xed\xbb\xcb\x1f\x4a\xc4\xda\xdb\x83\xf5\x32\x66\x84\x31\xf6\xdf\x44\x9a\xe9\xe3\xae\x2f\x9f\x4d\x1a\xfc\xe8\x52\x8d\x31\xb3\x43\x62\x87\x16\x20\x40\x23\x0f\xc4\x5e\x24\x79\x48\x22\xb6\x63\x03\xe1\x25\x1b\xdf\x80\x1b\xe4\xc0\x90\xe2\x2e\x13\x4d\x74\xbe\xd8\x42\x9b\xc9\x6c\x37\x20\xea\x94\xd5\x5e\x84\xa7\xc8\x5d\x5d\x5d\xbd\x2a\x97\x02\xbf\x08\x10\x18\x12\x65\xc2\x67\x5e\x31\x3a\x8e\xb3\x09\x76\x22\x74\xaa\xbc\xc5\x32\xed\xe5\x3d\x4d\x40\x66\x5d\xe7\x4d\xba\xcc\x9f\x44\x5f\x9c\xf1\x77\x60\x74\xd1\x98\xfc\xef\x02\x86\xc1\xff\xa6\x6d\x9d\xac\xaa\x95\xc8\x75\x1e\x4a\x77\xa5\x22\x42\x68\x9b\x96\x85\xb4\x4f\x3b\x93\x1b\x1b\xfc\xd6\xbd\x04\x2e\x84\x85\x77\x89\x33\x2c\xc3\x65\x4a\xfb\x56\x4b\x6d\x04\xc4\x43\x32\x4c\x43\x14\x79\xd3\x9d\x4f\xd8\x07\x11\x4c\xfd\x81\x55\x95\x7b\xca\x2f\x5c\x22\x88\xe6\xf1\xef\x4b\xb1\x09\x68\x81\x9e\x90\xaa\x09\xbf\x62\x78\x1a\x5a\x88\xbf\xeb\x4c\x52\x12\xbe\x9a\xba\x69\xbd\x4f\xc7\x28\x3d\xee\xb6\x7c\xd2\xed\xa4\xfc\xc7\x56\x7d\x88\xba\x29\xf0\xb5\xd7\xbe\x9d\xe0\x5b\x5b\x01\xe9\x1f\xda\x50\xf6\x5b\xcf\xf3\xee\xf1\x6e\x1d\xcc\xf3\xe4\x32\xec\x36\x59\x17\x9d\x4b\xaa\x95\x09\xbf\x55\x18\x4c\x13\x9a\x7d\x03\x92\x57\x19\x30\x24\x7f\xda\x83\x52\x3a\xa0\xa7\x0c\xa5\x4f\x00\xfd\x33\x49\x6a\xba\x28\xce\x92\x1f\x52\xd6\x85\x4a\x8d\x80\x0b\xf0\x91\x29\xa7\x9d\xd4\x16\xf9\xed\xb7\xa6\xb1\xb1\x05\xfb\x06\x48\x9b\x49\xfb\x83\xd9\x6e\x9c\x53\xb7\x28\xcb\x67\x98\x4b\xea\x70\x0b\xa5\xa8\xef\x32\x9b\x5c\x9f\x8f\xa6\x0e\x6f\x4e\xdd\xef\x81\x1d\x79\x61\xe8\xbb\x9a\xf6\xaf\xc1\x9e\x38\x94\x27\xe4\x90\xda\x70\xb6\x0e\xb1\x25\x1b\x7f\xd7\x01\x4b\xab\x45\x45\xa9\x67\x4f\x18\xc5\x5b\x3a\x2a\xcc\xd7\xb8\x10\x00\xcf\x0f\x70\xba\x98\xe2\xb3\x87\x04\x57\xde\x1f\xde\xfa\xfc\x19\xc7\xc8\x46\xcb\xe4\x74\xf8\xb5\x21\x03\x57\xe5\x6f\xe3\xf6\xda\xa7\x82\x22\xb2\xcb\xb2\x22\x43\xd6\x80\x6f\x88\xc5\x6f\xbe\xe5\x42\xad\x4a\xe6\x64\x86\x97\x3b\x27\x4b\xcd\x92\xe0\x5f\x5f\xf6\xfa\x9e\x68\xa1\x76\xea\x2b\xdb\xf3\x93\x17\x0c\x0c\x81\x64\xc0\x81\x03\xb6\xe4\xc8\xde\x8d\x8a\x8b\x20\x27\x01\x7f\x97\xac\x9c\x87\x92\x86\x56\x94\xaf\xe1\xb8\x6d\xac\x19\xb3\x0e\xaa\x49\x2e\x5e\xc5\xcb\x85\x09\xc1\xbc\x1e\x38\xdf\xf0\x42\x9f\xe3\xaf\x73\x7f\xad\x66\x89\x47\x30\xd8\xfe\x38\xe3\xd5\xbc\x1a\xb2\x2a\xca\xae\x20\xbc\x99\x14\xea\xa9\x90\xad\x11\x54\xd2\x95\x84\xa3\x63\xbe\x1b\xb3\x36\x88\x73\x7e\xf8\x07\xa0\xee\x02\x4a\x69\x6d\xb0\x17\x16\xe9\xb1\x16\xa4\x78\x59\x7e\xad\xea\x56\xd3\x29\x89\x49\xba\xb7\xc6\x9b\x15\xaf\xc0\x2b\x08\xd4\xe1\x1e\x68\x17\xfc\xf3\x81\xca\xce\x9c\xc5\x3b\x5d\xf5\x9e\x45\x9e\xc4\xd0\x1c\x42\x01\x41\xd0\x90\x05\x51\x99\x89\x6c\x22\x94\x55\xd5\xda\x7f\x86\xf0\xb5\x2c\xde\x43\xec\x29\xfe\x10\xe4\x27\x66\x9b\x43\x7b\xdc\x4b\x44\x86\x5d\xda\x70\x23\x28\x1c\x05\x5e\xf1\xce\xdf\x1e\x15\xba\xe5\x79\xf7\x0e\x73\x3d\xbc\x99\x18\x3d\x55\xb9\xdc\x6a\x6f\x16\x6e\xfe\x10\xf0\x6c\x56\x65\x14\xf6\x75\xc9\xf8\x69\x4a\x2b\x24\xcf\xda\x64\xc5\x55\xdd\x23\xba\x3b\xf5\xb6\x05\x4f\xeb\xed\x9c\x0a\x09\x3f\x39\xaf\x32\x9c\x0b\x95\x3c\xd7\x3b\xb2\x71\x3e\x6f\x09\x54\xaf\x72\xa4\x1e\x78\x26\xd6\x0a\x5b\xb5\xbb\x27\x2d\xd2\x78\xa6\x70\xa8\x30\x6a\xa7\x5b\xf0\x3b\x33\x0e\x9c\x49\x77\xe9\x8a\x0e\xbc\xb5\x80\x36\x4e\x3f\x3b\x9b\xb1\x3c\x6d\x27\x2a\x8c\x78\x44\xd7\xfd\x3f\x24\x41\xe0\xca\x82\xf1\x1a\x38\x0f\x89\x66\x22\x22\x30\xc6\xef\xbb\xca\x5a\x49\xf9\x3b\x8c\xa3\x20\x5f\xdf\xa2\x55\x12\x63\x47\x6b\xa8\x22\xc9\x0c\x06\x23\x98\x2b\x0b\x51\x45\x09\xfa\xa0\x70\x0f\x9b\x58\x64\x0b\x7c\xc4\xad\xcc\xa7\xc6\x21\x78\x33\xa3\x66\x32\xf6\xf9\x5b\xd0\xf4\x46\x83\x87\xd7\xc9\x4b\xe0\x11\xc1\x6f\x61\x00\x9d\xe6\x0c\xad\x4b\x7e\xb6\xdb\xb7\x52\xa9\x36\x09\xdc\x59\xc3\x63\x6a\xfc\xd3\x3c\x84\x97\x4c\x5d\xe8\x17\x83\x25\xa1\xd2\x11\xd2\x54\x53\xcb\xb6\x52\xe7\x4f\x8d\x9e\x57\xc3\xb6\x62\x63\xbb\xc2\xa3\xc7\x65\xd0\x50\x84\x7d\x8e\x53\x0c\x02\x16\xbd\xae\xbc\x10\x5c\x16\xf5\xdc\x0a\x1e\xde\xe1\xfb\x54\x84\x1f\xdd\xf6\xd1\x75\xe1\xa4\x20\x68\xc1\x8c\xb9\xd0\xab\x6b\xa6\xbb\x2e\x78\x08\x06\xfb\x7f\x7b\x07\xc8\xe8\x08\xdf\x13\x7a\x5a\x09\x4a\x0e\x54\x6f\x8c\x3b\xc7\x38\xe6\xcd\x48\xcb\x10\xaf\x89\x0e\x80\xcb\x50\x1f\x5e\x45\x73\x54\x0a\x12\x27\x4b\x9c\x40\xc1\xe4\x06\xee\xcf\x04\xf7\x0c\x0a\x84\x74\xf6\x81\x42\xf3\x25\x46\x6a\xe4\x64\x43\xd3\x7f\x83\xd7\xd7\xaa\x06\x16\x0d\x6f\xb1\x1d\xa3\xae\x86\x40\x58\x56\x2b\xae\x17\xe3\xea\xb0\x7a\x2e\x05\x93\x07\x54\xad\x14\x04\xf3\x22\x21\x22\xa6\xc6\x1b\x8d\xd4\xc3\x42\xc3\x9e\xb2\xe0\x02\xba\xcc\x46\xf3\x8b\x2e\x7e\x8b\x5f\x87\x1c\x99\x61\x63\xa8\x61\x0b\x1b\x3b\xa1\xd8\x00\x0d\x10\xf4\x3b\x25\x23\x09\x4f\x36\x90\x4c\x9b\xf7\x3d\x42\x0d\x1e\x64\x58\x98\x99\xe1\x6f\xda\xc0\x0a\x08\xf4\xdf\xa1\xbc\x73\xea\xef\xe5\x4c\x9e\x21\x2e\x88\x41\x32\x9d\x52\xf7\x20\x0f\x20\x9b\x34\x0a\xa3\x19\xa9\x98\x82\x3a\x1d\x67\xb5\x5f\x8d\x2a\x5b\x74\x04\x97\x88\xf4\x53\x2a\x5d\x8e\xbf\x36\x15\xec\x2c\x81\x1b\x4f\x39\xbb\x33\x03\xa6\xa4\xe3\xb6\xdf\x35\xfe\xb7\xd8\x96\x23\x5e\xa1\x9e\x6c\x83\x1b\xe9\x81\x6d\xbc\x17\x04\x93\x5b\xca\x65\xa2\x85\xd0\x9f\xbe\xa8\x05\x57\xa8\x0a\x07\x3d\xe8\x36\x38\x75\xc7\x50\xbc\x1b\xdd\xa4\xe4\x5f\x97\xe7\x0d\xd9\xc7\x4d\xee\xd4\x70\x82\x22\x07\x4b\x8e\x7d\x71\x14\x9d\xdc\x66\x19\x6e\x8e\x56\x7d\x14\x5b\xe0\x5b\xa0\x21\x71\xa8\x65\x8b\xae\xa3\x2a\x60\x67\x20\x69\x66\xcd\xf2\xa0\x7c\x16\x54\xec\x11\xdb\x2f\x5c\x0b\x77\x84\x47\x33\xeb\x09\x95\xb9\x7a\x43\xea\x55\x6c\x72\x8e\xb9\xb3\xe2\xba\xce\xcd\x13\x51\x48\xe4\x24\x71\xfe\x7d\x72\x60\x96\x93\xfa\x6f\x67\x1e\xaa\xd5\x9a\x67\xc9\x4f\x33\xcb\x19\x3d\xe9\xaa\xc4\xfa\xba\x2b\xe5\x7f\x1b\xbc\x1b\xdc\xf9\x1e\xf6\xc6\xbb\x81\xdf\x7b\x00\x04\xdf\x4e\x9f\x62\x01\xdc\xf3\x2d\x70\xa9\x67\x5b\x72\xef\x3a\xa6\xf4\x8f\x83\xbd\xaf\xeb\xec\x96\xf0\x7e\x44\x66\x1a\x2c\xb0\x15\x21\xb3\x3e\xa1\x11\xa9\x4b\x06\x9a\xa3\x9a\x39\x59\x52\x32\xba\xf0\x76\xf1\x72\xf9\x44\x33\xef\xc4\x27\xfa\x0a\xc3\xf8\x99\x0f\x4b\xb6\x67\xd5\x82\x3f\x68\x3f\xcb\x72\x5f\xfa\xd4\xf8\x4b\x26\x0c\x60\x74\xcd\xa1\xf1\x9f\x9e\x89\xa8\xce\xed\x79\x37\x85\xd4\x26\x2e\x9f\x3e\xfd\x74\xf5\x01\xf4\x75\xe7\x34\x98\xdf\x9b\xcd\x14\x47\xb7\x0a\xb9\xee\xdd\x3a\xe8\x5e\x16\x4d\x8a\x70\x76\x84\xef\x77\xda\xb4\xdc\x59\x7a\x7e\x1c\xda\x87\xd5\xb1\xf7\x4d\xd9\xaa\xe5\x21\xc1\x52\x57\x9b\x64\xc5\x3b\xb3\x23\xf4\xdf\x09\x5e\x83\x7a\x1c\xd7\xca\x88\x83\xb4\xf0\xc5\x06\x51\x15\xa9\xdb\x0c\x74\x5c\xa3\x57\x79\x02\xbb\x5c\x14\x4f\x4a\x17\x31\x34\xbe\xc7\x3a\x35\xd2\x5c\xb2\xfe\x0c\xf0\x97\x53\x58\x54\x85\xb7\xdd\x20\xdd\x93\x12\x1c\x9a\xf9\x67\xe7\x76\xb7\x1e\x56\x39\x8f\x55\x6b\x58\x2c\x6d\xb6\x69\x4d\xb2\x5c\xea\xe8\xb6\xfe\x0f\xc6\xee\x28\x6e\x8e\x9e\x3e\x45\x9d\x49\x0f\xa1\x20\x61\xbb\xb7\xef\x49\xe7\x69\x85\x5f\x14\x1f\x93\xbd\x2c\x83\x98\xda\xe2\xc7\xea\x1f\x28\xf7\x0d\x15\x3b\x2e\x73\x9e\x29\xb0\x3d\x35\x9e\x41\x9e\x49\x9e\xe9\x28\xdc\xcb\x77\x58\xa1\x67\xa7\x7d\x34\x59\x93\x94\xb1\x91\x44\x70\xc4\x34\x97\xac\x7b\x1a\xea\x6a\x71\x28\x51\x0a\xcc\xb7\x5a\x4a\xb2\x55\x8d\x5a\x66\xb1\x4b\xb1\xf5\x2a\xc5\x78\x00\x43\x7e\x70\x22\xd2\x12\x32\xaf\xac\x72\x83\x23\xeb\x24\x21\x0e\x8c\x4a\x1e\x86\x1d\xe4\x7a\x5a\x05\x59\xd1\x2e\x0e\xa0\x5e\x7c\x12\x68\xd0\xfd\x7d\xa0\x9d\xc8\x7a\x8e\xc0\x1b\xb2\x58\x61\xe3\x8e\x15\x49\xa7\x8b\xa8\x45\xaa\x58\x67\xd0\x74\x5e\x34\xab\x52\x7b\xfe\xb3\x66\x14\x1a\x8a\x4c\xc9\x11\x79\xd3\x7f\x70\x08\xd1\xe1\x9a\x9a\xc9\x06\x00\x31\xde\xa8\x7c\xb0\x4f\x07\x0d\xde\x14\x32\xdb\xe0\x35\xde\x22\x0c\x0c\xf2\x74\xc9\x55\xe3\x92\x41\xe9\xde\x97\xf2\x95\x40\xf6\xff\x11\x75\xfb\x1b\x52\xe4\xa1\xfd\x50\x1a\x04\x4e\xb6\x58\xc6\x31\xa2\x5a\x4e\x06\x81\xfe\xff\x2f\xa8\xdc\xa8\xbf\x78\xa6\xf6\xfd\xaa\x95\x49\x51\xaf\xc3\x97\x07\x06\x96\xc3\x5f\x03\x04\x8e\x79\x36\x90\x45\x4b\xf8\xaa\xa1\xa5\x20\x2f\xbc\xba\xa1\x11\xb5\xf7\xc7\x20\x63\x75\x44\x96\x6f\xbf\xba\x80\x37\xd5\xa4\xaf\x09\xd0\xfc\x07\xd6\x1d\xdb\x7c\x32\xfc\xd0\x56\xe6\xfc\x43\xe5\x0b\xce\x66\x2b\x48\x8c\xbd\x0a\xb5\x3a\x60\xbe\x77\x9f\xf9\x01\x69\xf2\xc4\x79\xdb\xff\x7e\x77\x6b\xb8\xe5\x93\xd6\x74\x40\xcb\x34\x4f\x45\x5d\x2c\xfb\x3c\xbb\xfa\xff\xc9\xcd\xa6\x3f\x0f\x73\xe6\x12\xa1\x62\x18\x31\x2d\xab\x84\x0d\xf2\x4a\xbf\x92\xdf\xc3\x41\x9c\xb4\xa7\xa8\x8c\xd2\xf1\xfe\x41\x32\xe0\xd2\x2d\x3d\x86\xc9\x74\xed\xec\xb9\x99\x43\xc2\xc3\xb5\xcc\x8d\xe0\x7f\x3a\xf0\xc0\x0f\x0a\xe9\x9d\x42\x61\xb3\x3b\x05\xf5\x57\x17\xe9\x92\x43\x45\xa2\xce\x9e\x16\x72\xff\xe5\x7b\xe7\x60\xc9\x26\x89\xc4\x2c\x1f\x27\xf4\xdb\x74\xff\xdd\xec\x15\x8e\x8a\x5b\x38\xc1\x17\x71\xe1\x89\x75\xee\xf8\x0a\x2d\x28\xc7\x4a\xec\x5d\xbb\x98\x34\x0d\xa8\xda\xf3\x99\xb2\xeb\xca\xb9\x35\xab\xe7\xf0\x61\x79\xfc\xb7\x0a\x68\x68\xfa\x59\xb1\xfd\x99\xb8\x2e\xef\xfe\xcb\x34\x9d\x07\x6a\x26\xb0\xb6\x1a\x93\x34\xdf\xf2\x82\xb6\x61\xf6\x1c\xa2\xf6\x0b\x83\x71\xcb\x27\x28\x9a\x0b\x85\x35\xe0\x97\x15\x13\x1d\x84\xf2\xb8\x14\x73\x1a\x8a\x58\xc3\x47\xf4\x6a\x57\x42\x99\xec\x86\xde\x7e\xad\x92\x85\xc9\x63\x6d\x08\xdb\xb6\x18\x8c\x2f\xfd\x99\x2e\x01\x36\x1d\xca\x61\xff\x5f\x1b\x41\x35\xbc\xfd\xfb\x2b\x3d\x64\xbc\xdc\xe3\x0c\x3e\xc4\xb9\x5f\x2e\x19\xee\xaa\x68\xcf\xcf\xc8\xe8\x38\x74\x42\xe1\x73\xb8\xe8\x30\xc4\x0f\x48\x4a\xc6\x1f\x8a\x6c\x9c\xe1\xa1\x6c\x5b\x55\x48\x34\xf6\x76\x2e\x09\xbb\xca\x3e\x5d\xc6\x28\x0a\x6b\x8c\x39\x2e\xa0\x20\x55\x94\x41\x3a\x2c\x41\x2d\x15\xac\xbf\xc6\x77\xe6\x85\x79\xca\xb0\x90\xd2\x89\xcb\xf1\x56\xe0\x6a\x56\x55\x0c\x9c\x5e\xbe\x98\x81\x7d\xb0\x7c\x77\x7f\x54\x48\xc1\xd3\x98\x2c\x1f\x03\x41\x71\xc8\x30\x3b\x2c\xf3\x5a\x44\x2a\xae\xdc\x23\x7b\x9f\xbc\xad\x6c\xcc\x48\x37\xe0\xd5\x62\x1e\x52\x58\xef\x30\x43\x81\xc7\x64\xcd\x75\x42\xd1\xa2\xf5\x35\xd2\x64\xa8\x3d\xcd\x56\xb0\x5c\x54\x3d\x9b\x51\x33\x00\x13\x8b\x37\x6f\x0b\xed\x71\x13\x41\xcc\x90\x41\xfb\x8c\xeb\x4f\xfc\xfc\x06\x6c\xee\xdc\xbf\xa2\x9f\xe7\x21\xfb\xad\x7b\x5f\x75\x44\x0c\x47\x5f\x93\xad\xce\x72\x6b\xf6\xaf\xdf\x98\x54\x94\x5e\x98\x90\xa2\x7d\x57\xd0\x6f\x29\x18\x2e\x38\x1a\x98\x98\xac\xa5\x7c\x67\x57\x0f\x50\x95\x43\x65\xee\x4a\x9f\xbd\xf6\x9c\x78\xee\x36\x4e\xb2\xd3\xfe\xff\x07\xdf\x1f\x28\xc3\x7e\x76\x07\xfc\x5f\x99\x3b\xa2\xce\x9e\x0e\xaa\xfe\xe0\x53\x3f\x08\x8b\x99\x8b\x57\x23\x18\x4d\xfc\xcb\xbf\xdf\xd7\x5e\x8a\xdb\x7f\x53\xe9\xc8\x16\xa1\xcf\x6d\x47\xff\x0d\x1b\xce\xb8\x4a\x7f\x9f\xed\x51\x35\x30\x07\x06\x20\xe5\x99\x69\xba\x3c\xa5\x26\x2b\xae\xc8\x3b\x17\x1e\x85\xf1\x56\x3d\xf4\x4b\xae\x72\x55\x84\xbc\x0a\x9c\x1f\x65\x0f\x93\xb6\x83\xa0\xe6\xc4\x23\xf6\x02\xa7\x2c\xcb\x10\x74\xac\x9e\x46\xa4\x6a\xc3\xab\xaa\xc2\xce\x93\x1a\x98\x55\xb2\x04\xc9\x7c\x4e\x27\x75\x4c\xa4\xe2\xc3\x1c\xa1\xd1\x78\xa5\x87\x26\x8a\x29\x0a\xa9\x36\x77\x72\x72\x6f\x47\xe6\xa0\x34\x01\x17\x0d\xb1\xbe\xde\x4c\xdb\x52\xb7\xba\x09\x67\x6e\x94\x88\x5a\x61\x9f\xa3\xb9\xc0\x94\x23\x74\x2b\x15\x32\xe4\x3e\x69\x66\x21\x08\x7f\x12\xcf\xa5\xbd\x1c\x11\x29\xc7\xbe\xf9\x3e\x30\x24\x26\xdb\xcb\x04\x71\xa4\xc0\xbc\xd8\xed\x71\x4a\x59\x5c\x92\xa7\xda\x49\x02\xd6\x53\x28\xa5\xcb\xa4\x37\xb8\x5e\x1c\x2b\x0f\xad\x27\xd5\xc0\xd6\x19\x83\xc4\x77\x94\xd9\x9a\xea\x7a\x65\x0c\x02\x8d\x21\xf8\x65\x95\x86\x2d\xcb\xe1\xcf\xdd\x99\x7b\x98\x85\x61\xba\x05\x8e\x77\x1c\x03\xcf\x84\xc4\xfc\x18\x20\xa4\xed\xbd\x4b\x1c\x22\xab\x4a\x64\x0d\xc1\xe6\x1d\x4c\x79\x22\x46\x89\xcd\xd5\xbb\x0f\xe3\x50\x8c\x00\x1c\x6e\x88\x29\x0f\x87\xd0\xb6\xf3\xdc\xf5\x0c\x77\x97\x2d\x59\x55\xb8\xff\x36\x4c\xfa\x38\x22\xb8\x21\xd1\xa1\xff\x19\xde\x7c\xce\x46\x15\xfc\x6a\x3d\x63\xf4\xe8\xc8\xa0\xec\xc0\x80\xec\xe0\x81\x45\x9d\xed\xf6\xc8\xce\x52\xfa\xd0\xc3\x7a\x21\xf9\x3c\xab\x6e\x55\x17\x3c\xa4\x51\x63\xaa\xe6\x8c\xe7\xf0\xda\xf0\xf7\xf7\x6f\x2b\xf1\xfc\x2d\x60\x28\x7c\xc9\x8d\x20\x87\xc8\xee\xa1\x4f\x2c\xf0\x8a\x74\x1c\x0b\x16\x63\x52\xd2\x87\x13\x9f\xd3\x86\xae\x9e\x05\x8a\x2f\x6a\xe4\x6e\xed\x40\x3c\x97\x51\xa0\x67\xd8\x1a\x9b\x18\xab\xf9\xf7\x34\xf4\xfc\x36\x9f\xa1\x9f\x57\x3d\x5a\x8d\xda\x92\x92\x39\x99\xae\x9d\x34\x63\x4b\xa8\xb6\xd6\x26\x7b\x9e\xdb\xde\x7d\xee\x38\x23\x5a\xf3\x58\xf3\x1e\xed\x57\x55\x17\x55\x2b\xe9\xfc\x51\x47\xce\xd1\xf9\x51\xf3\xdc\xc6\xdf\xe4\x33\x2c\xe4\xeb\x2f\xe0\x25\x8a\x45\x6f\x9c\xa3\x02\x8e\xdf\xc3\xde\x87\x0e\x14\xd5\xbc\xe8\x0e\xe7\xf4\x95\x64\xcd\x37\x7a\x7d\x04\x0d\x23\x1d\x4f\xb7\x74\x7b\x79\x44\x22\x33\xe1\xac\x0b\xbb\xc2\xf4\x4b\x9e\xce\x64\xae\x95\xf0\x20\x7b\x43\x75\x37\xfd\x90\x27\xd2\x0d\x1a\x43\x29\x6e\x84\x30\x7b\x1e\xcf\x34\xac\x6b\xa6\xad\x90\x28\x7c\x09\x75\x28\x35\xfd\x95\x75\x29\x22\xeb\x7c\xb6\x14\x56\x20\xfe\x94\x57\x72\x14\x9e\x9c\xf0\x65\xae\x14\xf1\x6e\xdd\x7f\x6e\x93\xde\xeb\x58\x57\x84\x4f\x1e\xa4\x7b\x8f\x84\x92\x42\x75\x99\x57\x55\x87\x06\x1f\xa9\x92\x2c\x32\x4c\x21\x8d\x28\x8b\x4b\x7d\xb8\xa2\xe4\x8a\xf6\x3d\xef\xf3\xa3\x86\x09\xb2\x5b\xff\x4d\x50\x29\xe2\x73\x32\xf1\xdb\x6c\xa2\x36\x25\xe0\x18\x6a\x0d\x23\x5c\x4a\x7f\x67\x31\x61\x5e\x1c\x39\x51\xec\x1a\x1f\x1e\x17\x2e\x99\xfd\xd8\x46\xce\x2f\x0a\xf6\x0a\x79\x7c\x78\xa4\xe4\xf8\x26\x8e\x3e\x7a\xd4\x7c\x25\x25\x4e\xa9\x88\x7b\x90\x06\x39\xb4\xb5\x63\xd7\x89\x53\x27\x49\xe6\x23\xe6\xfa\xc0\xdc\xb3\x26\x91\x51\x46\xbe\xe5\x8c\x6e\xb6\xe0\xb9\x95\x92\x12\x19\xa1\x0c\x21\x1a\x4a\xc6\x84\x65\x03\x99\x65\x91\x6f\x1c\x7d\x2c\xdd\xd0\x58\xd6\x4d\x30\x63\xec\x7f\x02\x73\x39\x5d\xe9\x98\xc3\x65\x03\x30\x38\x75\xf8\x78\xac\xe4\xe3\xc1\xde\xbe\xfd\x42\xe4\xa6\x82\xc0\xe2\x40\x68\x7e\x54\x24\xc5\x25\x0a\x3f\xee\xcf\x2d\x26\xec\xb9\x3d\xa5\xdd\xc4\x45\x73\x9b\x02\xa6\x6e\xcf\xa8\xdb\xec\x66\x27\x24\x82\xf6\xd0\x84\x60\x39\xe5\xcf\x77\xa7\xa3\xdf\xe5\xfb\x76\xc8\x92\x9c\xdf\x96\xd3\xd2\xe2\x24\x73\x4e\x79\xb1\x37\x7a\xd4\xaf\xe9\x33\x2e\xc9\x89\x41\xbb\x3e\x85\xf2\x63\xbe\x9f\xf2\xb1\x2c\x76\x99\xfc\x41\xe8\xe2\xc5\x3f\x70\x2d\x3f\xda\xf5\x23\xfe\x47\xce\x76\xcb\xa7\xa6\x68\x6d\x2c\xdd\x14\x51\x76\x96\xa6\x47\xa2\x3d\x4b\xd4\xbe\x09\x86\xff\x6e\xbc\x6b\x40\x70\x2a\x83\x3b\x72\xf4\xde\x51\xfb\xfc\xb3\x77\x9c\x5a\xba\x2a\xda\x93\xf8\xc7\xa4\xcd\xe6\xf4\x20\xfa\x33\xce\xbd\x93\xd5\xa5\x77\x52\xf2\x01\x2d\x85\x60\x51\x7a\x5c\xef\xd3\xa7\x8d\x76\xe9\x00\x81\x63\xf4\x8f\x3c\x80\x73\x08\x00\x89\xb8\xd0\x2a\x29\x7f\xe2\xc6\xdf\x25\x6d\xe7\xbf\x67\x4e\xdc\xa6\xee\xba\xad\x49\x79\xb2\x7e\x23\xe7\xe5\x2b\x55\x60\xee\xb7\xb9\x7e\x82\x55\x8f\xce\xed\xf2\xaf\xe7\x8d\xab\x6c\x27\xe3\x7f\x2d\x07\x71\x12\xf4\x27\x12\x89\x84\xd6\xa3\xa2\xd5\x01\x8f\xdb\x68\x26\xc9\x9a\x02\x2c\xd8\x42\xbf\x4c\x13\xa4\x07\xc0\x3c\xaf\x67\xe4\x4d\x49\x4d\x7f\x09\x00\xd9\xa7\x00\xe5\xfb\x8e\x12\x18\x08\xe1\xce\xc2\x40\x6e\x66\xe0\x00\x86\x5c\xa0\xf8\x7d\xc1\xb4\x64\x1e\x1c\x6f\x98\xc2\x87\x89\x8c\xed\x8c\x5b\x17\x36\x5b\xae\x42\x24\xac\xba\x39\x2d\xb7\x9e\x52\x5d\xd5\x82\x93\xe2\x06\x06\x54\xcd\x7d\xed\x75\x12\x41\x24\x9b\x2b\xc1\x65\xd2\xa2\x14\x34\xc6\x6b\x00\xfa\xbb\x8e\x76\x27\xef\xea\xe9\xfc\x9f\x96\x5e\x4b\x08\xce\xec\xd2\xca\x1c\x18\x36\x0d\x61\x3b\x38\x64\x2d\x78\x2b\xb5\xd5\xe1\x4a\x07\x5f\x86\x75\x15\x5f\x32\x0c\xce\xa2\x47\xaf\x01\x07\xca\x72\x03\x65\x3d\x1d\x9d\x3f\xc0\xdc\xfb\xdb\x28\xb6\xfd\xfd\x03\x81\x8a\x13\x77\x87\x94\x1b\x2f\x2f\x94\x28\xc7\x02\x5f\x60\xbd\x35\xfa\x77\xce\x2f\x9e\x2f\x2b\x3a\x58\x7d\xb7\x5a\xfc\x58\xd6\xc2\x2e\x72\x75\xc8\x90\x51\x96\x80\x97\x81\x57\x26\xed\x03\xdc\x65\x55\x73\x3f\x7f\x81\x7a\xf0\x7f\x4e\x83\xd2\x7c\x6a\x6a\x04\x1a\x5f\xc8\x4d\x77\x33\x31\x87\xe4\xc7\x11\x1f\x0f\x23\x71\x16\x4a\x5b\x75\xff\x57\x46\xf0\x78\xf9\xd4\x8e\xb0\x7d\x08\x07\xda\x79\x7d\x4d\x85\x72\xbd\x2e\x29\x72\xe8\xbe\x31\x2b\x89\x1b\xb5\x17\x29\x09\xf3\xa5\x51\x6e\xb5\x22\x7c\x44\x1f\xc2\x55\x17\x29\x5e\x38\x73\x36\xdc\xfe\xed\x0c\xfd\x63\xab\xc4\x23\xfb\x92\x0f\xa8\x41\xec\x3b\x7d\x97\x2f\x0b\xdf\x0a\xa3\xc2\x09\xcf\x1b\xb9\xd2\x3f\xef\x1b\xd6\x4b\x7f\xe4\xf0\x80\xce\xb8\xc4\xbb\xec\x47\x9f\x9f\xfa\x4d\x67\xdd\x69\xbd\xa0\x0f\x39\x5e\x23\x30\xf3\xcf\x3b\xd8\x8e\x97\x12\x4a\x62\x18\x8b\x8f\xea\x98\x99\xd8\xda\xf6\x23\xb2\x3c\x9f\xe8\xeb\x4d\xeb\x7a\x7d\x1e\x74\x75\x6d\xfe\xb8\x6b\xfb\x8e\x70\x87\x96\x61\x53\x16\xac\x98\xae\x9e\xd3\x16\x20\x32\xf3\x70\x18\x2e\x41\x5e\x53\x31\x9e\x5f\x2e\x77\x47\x1f\x61\x6f\x25\x37\xae\x2c\x53\x55\x57\xa9\x94\xd5\x95\x0a\x37\xe7\x6d\x64\xb4\x25\x45\xf6\x3d\x2c\xdb\x50\x85\xde\xea\xa9\x5b\xd2\xb0\xd3\xe5\x8a\x9a\xaa\xf5\xed\x6c\x8a\xed\xe7\xf1\x4b\x90\x3d\x33\xba\x3e\x68\x3a\x70\x5a\x37\x7f\xd7\x9f\x1f\xbb\x67\x7e\xff\xde\x23\xef\x8a\xd4\x3b\x1c\x78\x44\xaf\x74\xdb\xdf\x4f\xbb\xa6\xfe\x7c\xd9\xde\x74\xd2\xba\x7d\xd4\xd5\x26\x59\x39\xfd\xe7\xe7\x14\xba\xc6\xae\x70\x62\x75\x55\x5b\x5d\x90\x89\xf1\x98\x54\xba\xa2\xd8\xce\xb9\x23\xc2\xe1\xaa\x55\xd6\x46\x6f\x7f\x7e\xf9\x16\x79\xce\xd5\xa5\xaa\xa5\x6a\xd8\xcc\x60\x61\xee\xb2\xea\xe5\x85\xcb\x7e\xaa\x2e\x3b\x15\x26\x5c\x55\x42\xc1\x44\xae\xc8\x08\x19\xbd\x93\x3c\xe1\xa2\x12\xf0\x03\x6a\xc0\x9a\xc1\x35\x79\xa4\xd1\x83\x6f\xe5\x29\x5d\xba\x8d\xef\xb1\x2c\xbd\x84\xb6\x2b\xe8\x5d\xc7\x2a\xd1\x44\x8c\xac\x38\x39\xbb\xc5\xbc\xe2\x9a\xf6\x15\xa6\xa0\x6d\x53\x8a\xdd\x54\xa5\x49\xcc\xf6\x39\xe2\xba\xb9\x03\xe3\xec\xdb\x22\xaa\xfe\xad\xc4\x5f\x4b\x4b\x67\x68\xc5\xf0\x26\xc3\x5c\x5e\x61\x3d\xa4\x0b\x12\x58\x86\xa7\x1e\x10\xc6\xfd\x28\x89\x1c\x75\x60\xee\xb3\x1d\xa5\x6d\x67\x4f\x1b\x2c\x8b\xd3\x89\x86\x02\x68\x7d\x81\xfb\x92\xde\x79\xa8\x06\x24\x99\x03\xdb\x92\x12\xa4\x24\x0c\xdf\x45\xc6\xfb\x5b\xd3\xe9\x62\x92\xc7\xe6\x0c\xb3\x5c\x1d\xda\x8a\xc8\x78\x6c\x7e\x5b\xc5\xf0\xbe\x00\xd1\xd3\x6c\x3a\xb2\x0e\xe9\x88\xbc\xf6\x2c\xb5\x12\xb3\xdd\xcd\x67\x03\x9f\x5c\x6a\x81\x1b\x11\xad\x67\x59\x13\xea\x09\x8e\x88\x27\x07\xb4\x1c\xe5\x26\x66\x29\xe1\x8b\x47\x4c\x7c\x9f\xc6\xad\x2a\xe1\x87\x1c\x51\xdb\xdc\x70\x72\xa5\xa3\x83\x7e\xee\x1a\x3b\xce\x5a\xf1\xb4\x92\x7f\xc3\x49\x5d\xac\xdd\x0d\x21\x3c\xf9\x61\x50\x7f\x42\xb7\x49\xee\xf3\x0e\x62\xb8\x43\x55\x78\xd0\x8f\x1c\x0e\xf6\xfd\x45\x67\xff\xc6\x43\x7f\xff\x28\xa6\x3c\x15\x7f\x67\xb7\x64\xef\xdb\xd7\xd0\xa0\x72\x4d\x7b\x4c\x57\xd2\xae\x47\x07\x68\x12\x37\xfc\x39\xb3\x57\xf7\x46\xc9\x9c\x2c\x73\x52\x06\x85\xcb\xdf\x95\x7a\x48\x37\xd2\x7a\xcf\x99\xcc\x46\x72\x63\x48\x4b\xfc\xff\xf8\x1a\xdf\x6f\x19\x53\xae\xe1\xe3\x46\x61\x30\x19\xc3\x16\xad\x7a\xb2\x81\x95\x68\xc7\x43\xaa\x1c\xce\xd7\x3a\x2b\x06\x2f\xa1\x9d\xaf\xd5\xd2\xad\xfd\x5b\x2d\x57\x98\xc0\x20\x70\x02\x94\x04\xc0\xd0\x33\x14\x76\xe8\xed\x5c\x75\x71\xc7\x47\x47\x2b\xd4\x9b\x44\x58\x29\xdd\xe0\x9e\x03\x27\xd6\x06\xe3\xb7\x26\x4d\xeb\x75\x19\xc6\x97\xd3\xc3\x9b\x7e\x45\xad\xbc\xde\x88\x8c\x57\x7f\x17\x70\xa7\xf6\xdb\x35\x02\x4a\xd9\x70\x47\xd5\xa0\xd3\xd2\xf4\xb4\x30\xcc\xea\x8c\x5f\xd5\xd4\x8d\xaa\x8e\x00\xdf\x71\x57\xff\xc4\x98\x94\x98\x0a\x7f\x5d\x35\x98\x78\x0c\x92\x00\xc9\xf6\xa0\x9e\x16\xe0\xf9\x31\xcb\x79\x75\xd2\x26\xe6\xa7\x0e\xaf\x38\x48\xc8\x8f\x27\x13\x9f\xfe\x3b\xa4\xd2\x40\xbb\x3c\x51\xee\x76\xf5\x38\xb9\x84\x8c\xad\xbe\x75\x56\xac\x3c\x1e\xe6\xb7\xc9\xa6\x45\x59\x29\x16\x2b\x99\xef\x74\x6e\xb9\xb1\x7c\xce\xdf\xb2\xd5\x4b\xb5\xf4\x95\x0c\xd4\x1f\xdd\xe9\xb5\xd5\x33\x2a\x89\xcb\x16\xa8\xea\x22\xdb\xfc\xb6\x02\xf6\xde\xab\x23\x23\x1b\xfa\x1e\xf0\xb8\xdb\x0d\x92\xd0\x8e\x4e\xd9\x69\x22\x4d\x43\xa3\x46\x98\x5a\xc1\x75\x54\x08\x0a\xdd\xc1\x83\xa6\x37\xf4\xed\x10\xea\x79\x5c\x3d\xf7\xd1\x86\xbe\xd1\x91\x63\x04\x95\x0f\x58\x59\x24\x2a\xe6\x5e\xda\x49\x4e\xeb\x68\xee\x71\x1c\x05\xc1\x87\x68\xc9\x3c\x87\xb0\xec\x87\xa2\xd2\xea\x1c\x5b\xb7\x00\xe7\xad\x86\x91\xb5\x25\xc1\x89\xc5\x55\x59\xf6\xce\x41\xee\x47\xf4\x38\x9c\x6d\x1b\x5e\x8e\xd0\x73\x1f\xad\xb2\x75\x17\xd6\xc2\xb6\x93\x93\x24\x36\x09\x79\xc0\x37\x59\x56\x50\xb3\xdf\xbe\xd4\xc0\xd0\x03\x02\xf6\x74\x46\xf3\x28\x6a\x7f\x91\x3a\xa8\xaf\xc1\xda\xb8\xe7\x15\x24\x6a\x1a\x1a\xc1\xc2\xef\xa0\x85\x96\xd1\x7b\x77\x25\x70\x68\x11\xec\x42\xb6\x4c\x91\xdd\x1e\xf1\x5c\x3d\x40\x92\x22\x30\x1d\xb8\x8b\xe1\x34\x29\x55\x16\x10\xaa\x0c\x77\xf1\x04\x27\x20\xaa\x4f\xaa\x77\x1e\x34\x07\xca\xca\xf5\x23\x1f\xe2\x99\xf0\x4e\x3e\x71\xa2\xa6\xd9\x98\xec\xee\x0b\xaf\x3e\xc4\xea\x30\x53\x7c\xdb\x5f\x41\x65\x91\x67\xae\x3c\x32\xcc\x38\x10\xfd\x40\xad\x2b\xe9\xb1\x35\x94\x09\x33\xfb\x67\x4b\x70\x3a\xd6\xe9\xf0\xac\x45\x07\xea\x4c\xde\xff\x42\x76\xff\x4b\xaf\xae\x8b\x89\x6a\xfb\x3a\xe2\xbd\xee\x2a\x26\x7a\x85\x94\xdd\xe0\xa9\xfa\x30\xe2\x0e\x56\x20\x0b\x3e\x0e\xa1\xcd\x47\xb4\x58\x1d\xfe\x43\x4a\xa3\xea\x49\xf2\x4f\xb2\xf7\x45\x72\xb2\x03\xb2\xf0\xe3\x10\x13\x57\xdf\xed\xc6\x02\xed\x62\x95\x24\x9f\x57\x2b\xc2\x5e\x6a\x92\xc9\x92\xac\xfb\xfb\xf6\xf5\xcf\x96\xf6\x9e\x10\x88\x85\x36\xe0\x1d\x48\xd3\x58\x23\x31\x38\x0b\x8d\xcb\x8c\x35\x98\x91\x15\xd6\x03\x14\x97\xd4\x8b\xa2\xf4\x96\xd9\x60\xa2\xd6\xa9\x8e\x77\x47\xae\x55\x17\xca\x03\x2c\xf0\xb7\x9f\xfe\x30\x33\x09\x8f\xa0\xab\xec\xab\xf4\xda\xe7\xcc\xb5\x31\x0b\xc1\xd0\x51\x99\x26\xc8\x1e\xa2\x9c\x67\x3b\x21\x8f\xd0\x5d\x76\x9a\x58\xe6\xeb\x7e\x30\x9c\x61\xf6\xb9\x0b\xb9\x9b\xc1\xd5\x09\x8f\xf8\x5c\xbd\x4d\x81\xb8\xfc\xa1\x86\x46\x34\x43\x26\x68\xe2\x99\x20\x8d\x56\xd4\xd3\xbe\xd3\x97\x7c\x8e\xac\xae\xe6\x80\x99\x77\x39\xea\xa3\x7d\xc1\x9c\x39\x8d\x2f\xb5\xed\x48\x86\x14\x59\xbc\xb4\xa5\x9a\x31\xea\xe6\x95\xcb\x9a\xb5\x57\x05\x85\x28\xd4\x75\x32\x69\x67\x16\x6f\xd4\x7d\x39\xa8\x7e\x21\x56\x37\x1b\xd6\x3b\x9d\x3a\x48\xa9\x09\xf3\x78\xc7\x97\xd7\x13\x7e\x08\xe3\xb2\xbf\xa7\x8a\x0f\x76\x05\x57\xdc\xd8\xb2\xfb\x6a\xa1\xcb\x0d\xfb\x77\x8f\x24\x19\xe2\xc4\x6b\xca\xaa\x65\x9a\xbe\x88\x31\x5a\x5e\x9d\x57\x24\x53\xd7\x2b\xc4\xbc\xd1\x9a\x2c\xa9\x2d\xab\x33\xad\xd6\x07\x21\xec\x63\x6d\xee\x99\x68\x16\xfc\xba\x39\x95\x8e\x9b\xa1\x25\x06\x20\x51\x2a\x3b\x25\x81\x5f\x96\x0f\xee\x00\xa8\x38\x88\x46\x56\x28\xb3\xd5\xf8\x86\x9b\x73\xf8\xdf\xb7\x66\xcc\x38\x14\x64\xf5\x9b\x9d\x17\x9f\x10\x9c\xd8\xb4\x67\x6d\x35\x40\x40\x37\x56\xd6\x89\xb5\xc9\x21\x29\x91\xde\xc2\x5e\x60\xac\xd6\x23\x6d\x8c\x13\xdc\x8a\xa5\xbb\xbe\x87\x47\xb1\x6b\x82\x21\xbd\x06\xe3\x06\x79\xc3\x75\xe8\xa8\xa6\x19\xb3\xe4\xd4\x28\x2b\xcb\x71\xfe\xd1\x3a\xde\xc2\xad\xd1\x44\xdd\x89\x35\x2f\x80\xcb\x62\x8d\xb3\x77\x19\xed\x9e\xeb\xf0\xf2\x89\xf9\xd4\xc8\x62\x2b\x19\xed\x62\x0f\x16\x9f\xf8\xe1\x8e\x81\x9a\xed\xbb\xd7\x36\xce\x7d\xeb\x48\xaf\xd0\x9b\x87\x6d\x24\x9c\x9a\x74\x65\xd6\x31\x2d\x1e\xc4\x9b\x0a\xee\xfc\xb5\xbc\xbb\x08\x47\x5d\x69\xb9\xdc\x98\xf0\xa8\x99\xe0\xb9\x24\xbb\xba\x51\x3a\x6e\x1a\x70\x79\xeb\xfe\x73\x86\xc7\xa9\x89\xe9\x42\xd9\xe0\x71\x38\xf9\xa6\x7f\x48\xaf\x72\x2d\x3b\xa1\x2d\x63\xff\x4e\xbf\x2a\xef\x9a\x8d\xa5\x12\x72\xb3\x4a\x5d\x15\x63\xc4\xf2\xf3\xe8\xfd\x47\xd6\x1b\x59\xf9\xce\xed\x75\x63\x79\x55\x6b\xdb\x75\x0c\xd4\xca\x18\xbf\x44\x51\xa0\x1a\x29\x8d\x9f\x3a\x34\x5e\x9c\x9e\xad\x4b\x3c\x7c\xe7\x58\x45\x95\xde\x9a\x2e\x14\x48\x78\xa3\x72\xe4\xba\x9e\xa9\x6a\xc9\xf8\xce\x9a\xc6\xa1\xf1\x86\x05\xfb\xe3\x2d\x9b\x5d\xfd\xc9\x65\x55\x36\xa5\xff\xa3\x78\xac\x62\x6b\xae\x17\x13\xe4\x1e\xa0\x5f\x6c\x6f\x9f\x18\xd3\xe2\xb0\xaf\x75\x76\xa6\xb8\x6f\x4c\x0e\x94\x7a\x41\x2b\xd4\x24\x5e\xd2\x95\x5c\x77\xea\x02\x25\x3e\xea\x5b\xa1\x50\xa0\x8f\x47\x3c\xaa\x9a\x99\xa9\x32\x1a\x95\xd3\xe2\xf6\x8f\x3c\xbd\x55\xc7\xe4\xe5\x8e\xee\x77\xb0\x95\x9c\x98\xae\x2b\x3d\xdc\xa7\x54\xf3\x32\x62\x77\xdd\xa0\x77\x78\xb6\xbd\x9f\xf2\x0a\xc8\x61\x79\x99\x23\x47\xe5\xe5\xc1\xa8\xe7\x74\xc6\x73\x2b\xc7\x73\xaa\xe4\x8a\xca\xca\xf1\x0f\x96\x5b\xf2\xab\x55\xd1\x59\x31\x8b\xcd\x6e\x1e\x2c\xa6\x2c\x28\xa7\x34\x9c\xf7\x63\x24\xa1\x55\xcc\x53\x99\xeb\x39\x93\x91\x9d\x42\xe7\x8c\x25\xc5\x5a\xfd\x48\xab\x5c\x52\xe8\xb7\x15\xd7\xae\xf5\xc2\x19\x6d\xe8\x59\x5a\x84\x2c\x5d\xe1\x4b\x48\x92\x5b\xda\x45\xb7\x10\xc3\xbf\xc7\xe4\x2f\x6c\x3b\xdf\x66\xbd\xeb\x12\x0a\xe8\x9f\x24\x80\x36\xa8\xc2\x21\x5b\x61\x42\x85\x72\xef\xeb\xd6\x64\x07\xb7\x5a\xf5\x0c\x8c\xcc\x56\xcf\x7a\x6f\xd9\x92\x88\x04\x81\x6e\xd0\x48\xef\xa5\xf6\xa5\x1d\x4b\xb0\x56\x16\x55\x85\x25\xb6\xce\x0f\xd2\xc3\x29\x47\x92\x8e\x42\x99\x24\xbe\x45\x37\x5c\x66\xfc\x59\xd6\xb5\x54\xe4\xae\xed\xb8\xc7\x0a\xf5\x06\x4b\x67\xde\xdf\xc9\xb7\x3b\xa2\x37\x1b\xef\x20\x77\xaf\xa9\x42\x68\xfe\x29\xf9\x6b\x85\xcd\xcd\x34\xb2\x8d\x97\xff\xe9\x5c\xf3\xb3\x72\x3c\xc2\x7a\x75\xc1\xab\x74\xab\x53\xe5\x6f\xd7\xf9\x3f\x28\x18\x23\xad\x08\x22\xa4\x2a\x47\x84\x99\x0c\xb6\x1d\xba\x07\x3c\x4b\x3f\xbe\x27\x03\x3c\x69\xeb\xf3\xf8\x9c\x54\x3f\xfa\x99\x9a\xef\x5a\x6d\x0d\x6c\xcb\x15\x15\x94\xd7\xb1\xfe\x7f\x6b\xa6\xc6\xb0\x43\xd2\xeb\x64\xb5\x09\x40\xd2\x50\xb6\x4a\xea\x8b\x1a\x1e\xfa\xf5\x94\xac\x75\x55\xb9\x20\x37\x22\x43\x08\x2a\x89\x00\xa8\xa6\xc9\x6c\xce\x65\xbc\xd5\x10\x80\xf1\x41\xb5\x49\x18\xe6\x90\xe0\xc8\x11\xe5\xcc\xae\x42\x5a\x7c\x47\xd5\x7e\x10\xdb\x99\xe7\x07\xd9\xe0\x51\xb6\xbe\x02\xac\xef\x65\x63\x29\x58\x48\xa8\xdf\x23\x0f\xbb\xc0\x95\xfa\x95\x6b\x86\xba\x9e\xe9\xe6\x33\xa4\x93\x4b\x56\xc3\x20\x3d\x5b\x12\xdd\xf4\xf2\xe3\x58\xc0\x5f\xc6\xc7\xdf\x90\xe6\xfd\xef\xe9\x57\x1f\xd6\x43\x6f\xa7\x98\xff\xd8\x46\xab\x78\xb6\x23\x29\xc8\x81\x74\x38\xe6\xad\x36\xeb\x5d\x9b\xe5\x48\xaf\xce\x77\x33\x2c\x11\x6b\x79\xab\x94\xd1\xa1\x78\xad\xbc\xc2\x81\xca\x2c\x41\x86\xd7\xb7\x09\x65\xe2\xa9\xcb\x23\x86\x85\x2f\xd4\xe8\xfd\x74\xdb\x73\x75\xac\x9d\x23\xfa\x9c\xc2\x38\x89\xb3\xe7\xe6\xcb\xe1\xf9\x3b\x67\xcc\x97\x0c\x9d\xda\x5d\xc7\xfe\x1c\x5b\x87\x7f\x64\x60\x14\xc6\x6f\xb3\xae\x41\x81\x08\x6c\x88\xfb\x18\x67\x23\xb7\x20\x6f\xfd\x40\xde\x5e\x1e\xf3\xd1\x76\x49\x0e\xa3\x43\xb5\xb9\x86\x12\xe1\xcf\x17\xe0\x6b\xcf\xe3\x11\x72\x02\x88\xfc\x6b\x88\x4d\x70\x0b\x16\xd5\xd4\x80\xe1\xf3\x4b\x9d\x8d\xce\x6d\x6e\x0e\x4a\xf8\x36\xa4\xd1\xcd\x21\xc4\x09\x7b\x85\x7a\x51\x49\x56\x4e\x9e\x72\x81\x72\x45\xce\x5a\x96\xba\x70\xe4\xb5\xd2\x57\xa5\x77\x28\x5b\x79\x1a\xf9\x1d\xf9\xab\xb2\x0d\x2a\x0a\x4e\xf9\x43\xf9\x53\xc5\x0e\x83\x21\x7f\x21\x7f\xc3\xd8\xa3\x63\xd4\xee\x90\x84\xa3\xfe\xc2\xc2\x2d\x71\xad\xbd\xd0\x1e\x55\x77\x4a\xfb\x3d\x6a\x2c\xc2\x1b\xf0\x05\x9d\xd0\xd8\xeb\xbd\xd0\x6c\x00\x1e\xed\xb1\x5b\x5e\x73\x4d\xee\x1c\xe4\x75\xe7\x8b\x3b\xd7\x9b\xce\xa7\xbf\x3a\x7d\xe1\xbd\xd2\x9c\xf5\x09\xf1\x09\x71\x67\xfb\xe1\xb9\x06\xb6\xfb\xce\x17\xe2\x63\x4e\x68\x9b\xfb\x94\xfd\x54\xc2\x7f\x76\xd7\x29\x57\x9b\xe3\x64\xc2\xc9\x19\xed\x5d\xc7\x5d\xc7\x1d\x2a\x49\xd9\x1d\xc7\x1d\xc6\x12\x9c\x6e\xbe\xa4\x0f\xc1\xe5\x4d\xf3\x3a\xc5\x32\xb1\xd2\xb1\x81\x75\x78\xe4\x76\x87\x3e\xeb\x0f\xa7\xaa\x19\x8b\x46\xa1\xac\x6e\xe3\x44\x21\xea\x24\x01\x53\xab\x78\x38\x90\xa0\x3b\xad\x8a\xc4\xcf\x3b\xc5\x28\xba\x93\x00\xa5\x7e\x1b\x0d\xaa\x57\x6f\x75\xba\x5c\x18\xcb\x1d\x07\x48\x74\xda\x2a\x47\xc4\x9e\x0e\x76\xca\x3a\xaa\xd3\x5b\xe3\xbe\x4c\xd7\x72\x98\xde\x2d\xa0\xab\xa9\x79\xfc\x47\xd0\x6d\x0a\x6b\x83\x2d\x36\x4b\x17\xbf\x3d\x82\x39\x01\xd8\x44\x3e\xb9\x47\x6b\xf6\xbe\xe2\x0e\x9b\x61\x44\x18\xee\x6c\x39\xe0\x3c\x6a\xdd\x1b\x55\x98\x14\x72\xaf\x9d\x00\x37\x0b\x8c\xac\xe0\xf4\x6a\xb4\xb9\x2a\xed\x06\x4e\x6c\xa5\xbb\xc0\x14\x8f\x93\x17\x29\x38\xc1\x11\x6a\x90\x32\x94\xd0\x62\xe2\xe9\x53\xcb\xc0\x1e\x2d\x61\x8a\x9b\x73\xf3\xef\xe8\x34\x64\x20\x2c\x19\xa6\x01\x60\x04\x82\x38\x06\x01\x1b\x1e\x6a\x30\x5f\x46\x43\x2a\xb8\x12\x36\xa5\x14\xa7\x89\x2a\xbf\x5b\x24\x5f\x5c\x20\x71\x27\x3b\x18\x43\x32\x6c\x44\xd6\x49\xd2\xf9\x13\x3d\x23\xe2\x17\xf1\x3a\xde\x56\x70\x2d\x28\x5f\x9b\xe9\x48\x61\xcc\xb9\x24\xa4\x24\x3d\x77\xbf\x23\x16\x6d\x06\x43\x2a\x41\xe1\x31\x4a\x8b\x19\xd5\x50\xb9\x25\x9a\x73\xe0\x64\x2a\xa7\x3a\xd4\xe1\x25\x09\x7d\xe8\xba\xeb\xd1\x34\xaa\x41\x52\x38\xee\xbc\xc4\x05\x06\x85\x99\x93\xf8\x7a\x1f\xc3\xb8\xa7\xc1\xc7\xc0\x3d\x81\x3f\x45\x75\x2c\x71\x2d\x11\x17\xae\xb5\xd8\xa3\x81\x82\xc3\xcc\xc3\xb7\xa5\xae\xf5\x2c\x21\x96\x70\x8f\xe2\x4e\xd0\xfe\x99\x3a\xbe\x0b\xda\xc5\x90\x35\xd9\xec\xb9\x56\x80\x49\x34\xaa\x94\xa2\x86\x3f\x3e\xab\x2a\x4b\x32\x83\xcd\x14\x8b\xed\x4a\x38\x4f\x73\xfc\xd3\x1e\xbf\x8f\xb2\xf5\x50\x22\xe5\x81\x99\x13\xf3\x62\x4e\xdb\x25\xae\x0d\xbe\x16\x04\x70\xee\x06\x78\x63\xc8\xcc\x4e\x92\x26\x61\x08\x79\x8d\x7b\x7f\x4d\x8b\x6c\xc6\xaa\x07\x33\x1e\x23\x4c\x8d\x6d\x4e\xcc\x95\x26\xd5\x3e\x18\xec\xf4\xb3\x34\x77\x12\xcd\x10\xd8\xd5\x99\xde\xa8\xc3\x17\x86\x96\x18\x7c\x33\x91\xe0\xe4\x96\xda\x7d\x2b\xad\x65\xd5\xff\x7d\x87\xe8\xfe\xa6\xe1\x8d\xf8\xfa\x5f\x83\xc8\x10\xd7\x2c\xbe\x2c\x41\xcb\x4c\xe8\xe3\x75\xb4\x5b\x99\x9a\x9c\xf9\x1d\xcf\xb2\x51\x4a\x35\xda\x27\x7a\x99\x95\x0f\x9a\x40\x4e\xd4\x9d\xcf\x5a\xcc\x89\xa7\x45\x44\xce\x40\xa3\x28\x50\x56\x64\x6c\x93\xac\x5c\x38\x4e\xe9\x26\x2c\x9c\xb0\x29\x49\x5d\xb6\x64\xab\xe6\xa4\x4e\xf3\xfe\xcf\xde\x59\x16\x38\x2b\xbb\xca\x9e\xea\x5f\xbb\x06\x77\xa0\x04\xce\xfb\xec\xff\x75\xe2\xa5\x8a\xec\x38\xd7\x23\xfb\xe4\x2b\xf3\x31\x02\x64\xed\x38\x73\x36\x81\x92\x03\xf5\x9e\xc7\xac\x1b\x7d\xe5\xa3\xaf\x0c\x9f\xe2\xd1\xf4\x55\x79\x8b\xf2\x66\x63\x90\xc1\x99\xb8\x2b\xca\xd4\xfb\x21\x29\x8d\xc8\xa6\xb3\xde\x31\x9b\xb7\x15\xbe\x5b\xe7\xb2\x4e\xeb\xb0\xf4\xea\xd7\x7d\x33\xc7\xae\x49\x47\xac\xdb\x75\x5d\x8e\xdb\x78\x7e\xde\x5e\x85\xca\x94\x98\x34\x0a\x9d\x99\x9b\x71\x64\xe9\xe6\x98\x03\xb8\x5b\x1e\x3e\x94\x2c\x7b\xec\xae\x31\x23\xf1\x5e\x33\xaa\xef\x49\x44\xef\x9b\xeb\x3d\xeb\x71\x07\x24\xb1\x25\xf2\xa0\xc9\xa5\xc2\xf3\x3a\x41\x2a\x81\xde\x43\x67\x0a\x0b\x52\xc9\xc1\xc4\x40\x0c\x95\x42\x94\x86\x48\xfd\x8e\x98\x40\xe4\x21\x1e\x54\x6e\xfd\x9b\x15\xda\x77\xb6\x6c\xe2\xcd\xcb\xad\xf0\x15\xd8\x61\x08\x14\xb1\x5d\xee\xcd\xf3\xc9\xac\xb2\xc3\x11\xf4\x03\x7a\x35\x13\x9b\x0b\xb5\xd2\x18\xf1\x08\x7b\x7a\xdf\x16\xc5\xf1\x31\xd2\x04\x52\x26\x80\x8f\x6c\x9e\x5c\x57\xd1\x9f\x94\xfb\x67\x82\xf0\x98\x00\x92\x45\x49\xd9\x91\x74\x29\x87\x1e\xa2\x08\x84\x38\x90\x52\xa8\x54\x70\x2a\x03\x59\x4d\x9b\xda\x8b\x9b\x46\x66\x52\xbe\x38\x56\x97\x59\xc2\x62\x4a\x69\x72\x16\x35\x46\xc4\x8d\x09\x4e\x34\x65\xac\x67\x48\x25\xa7\x3c\x90\xd9\xbc\xa5\x0d\x84\xbc\x08\x6e\x8a\x6a\xcc\x63\x2a\x76\x84\x9d\x3c\xe1\xa7\xbc\x15\x20\x2f\xef\xab\xe3\xe2\x55\xf6\xdb\x6a\x61\x6f\x2e\x6c\x47\x05\x8b\xe5\x92\x76\x41\xb3\x76\x50\xc0\x02\xb2\xf2\x04\xd8\xa0\x84\x5a\xab\x6a\xaa\x89\xfb\xea\x39\xb7\x49\x64\x41\xe0\xe7\x76\xea\xc6\x89\x3c\x9f\x8f\x0b\x6a\x4f\xef\xeb\x33\xb5\xaf\x6a\x1a\x0f\x89\x35\xcf\x4b\x68\xf4\x69\x03\x4d\x74\x7c\xb2\x06\xa8\x07\x65\x6e\xdf\x2a\x3d\x2d\x41\x00\x42\x8a\xf3\x98\x05\x51\xf5\xf8\x95\xf0\x1e\xd7\x8d\x2e\x7c\xa7\x22\x3f\xa9\xe3\xc3\x8f\x73\xb9\xee\x9d\xd8\x5c\x5a\xde\xe5\xfb\x1b\x25\xd2\xfe\x1b\x67\x92\xf3\x74\x32\x5e\x4c\x90\x23\x3b\x4b\x9e\x30\x3e\x3b\xb2\x1f\xc3\xce\x21\x90\x93\x12\xf9\x53\x53\x49\xd5\xc7\xfc\x04\x21\x21\xaf\xd5\x07\x48\x87\x3e\xa0\x53\xd5\x14\xce\x7c\xbc\x42\xbe\xcf\xb5\xc5\xb5\x1e\x51\x4e\xaf\x08\x2c\x24\xab\x16\x2c\x4a\xef\xcb\x2c\x01\xad\x9f\x79\xf3\x61\x8e\x3e\x41\xa2\xf0\x02\xf7\x22\x54\x07\xe0\x53\xe8\x83\x4d\x9d\xcf\xd6\x0e\x4b\x96\xbe\xfe\xd1\xed\x07\x22\xc3\x49\xec\xab\x88\x9c\x2b\xa9\x3b\x3b\xa5\xd3\xbc\xe8\xa5\x5b\xef\xe9\xe1\x35\x90\xad\x2a\x5e\xe5\x9e\x31\x21\x89\xdd\x3b\x00\x6d\xc9\x2d\x2d\x3f\x77\x62\x5e\x65\x99\xa2\x43\x69\xe8\x4f\x15\x7b\xe5\x2a\x82\x9d\x03\xd9\x4e\xf8\x43\x2f\xfa\x8d\xef\x2e\x4d\x7f\xe3\x73\x27\xf8\xce\x0b\x1f\xb5\x0c\xb6\xf4\xd0\x66\x2b\x76\x9a\x53\xf8\x27\xeb\xcc\x98\x88\x0c\x81\x02\x0a\x54\xeb\x6b\x4f\xf4\x48\x8c\x4c\x96\xc4\x54\xda\x70\x52\xa4\x8f\x73\x19\x87\x23\x32\x04\x1c\x94\x59\xdf\xd6\x14\x40\xb0\x32\xbc\xe6\x81\x4e\xf7\x36\x5e\x54\x9a\xbf\x29\x75\x5b\xcc\x15\x3e\x34\x28\x6e\x23\xe3\x11\x2a\x77\x9f\xc2\xb2\x4a\x62\x9e\xd2\xdd\xff\xae\x24\xc8\xa4\x95\xd6\x46\x0f\xfa\x54\x78\x4d\x33\x04\x13\x2c\x22\x26\x0d\xf4\xdc\xb4\x79\xb6\xcf\x57\x6d\x1b\xc2\x01\x02\xc7\xc0\x81\xce\x0c\xe7\xaa\xfe\x6b\x21\x6f\xbf\x20\xaa\x84\x09\xe5\x16\xfa\x2c\x0b\x12\xcb\x92\xd2\x65\xbe\xaa\x8d\xac\x36\x99\x47\x8c\x47\x5c\x72\x5d\x55\x32\x25\xb6\xe8\x38\xcc\x57\x48\xef\x85\xe5\xb0\x0a\x43\xfd\xd9\x1c\xa2\xc4\x51\x6f\xe5\xa8\xa3\x96\x29\xb3\x9f\xc0\x2a\xe9\x5b\x7a\x62\xc3\x32\xe5\x6e\xa3\xae\xfc\xb5\xcd\xb4\xa8\x2e\x43\x4c\x3f\x9b\xdc\x67\xfa\x9f\x6c\xd3\x32\xdb\x5c\xf5\x94\x23\xa7\x2e\x57\x98\xaa\xf2\x59\x60\xe9\x1d\x1e\x57\x47\x81\xc1\x3e\x72\x38\xf4\x8e\xa6\x13\xee\x65\x31\x1b\x8a\xba\xcf\xfa\xee\x6a\xae\xc9\x42\xf3\xcd\xe3\xfd\xf3\x0d\xff\xd5\x55\x95\x98\xbf\x71\x38\xa5\x60\x7b\x1f\x6c\x5f\x64\x3c\x43\xc9\x68\x1d\x6a\xac\x68\xb0\xbb\x7c\xd1\x76\xfb\x6f\x1d\xe3\xd0\x4c\x39\xa6\xa1\xc0\xdf\xfb\x17\x67\x8a\x06\xad\xf1\xe4\x87\x84\xa8\x62\xc8\x25\xbc\x26\xb7\xb2\x68\xc8\x20\xde\x78\xc0\xd6\x4c\xa0\xad\x29\x7b\x0b\x17\x28\x66\x6f\xf6\x9b\x7f\xec\x50\x9b\x48\x19\x96\xeb\x9e\xc7\x7e\x6c\x17\x96\x93\x1d\xf1\xd8\x38\xa2\x20\x2d\x73\xea\xb4\x33\xbb\x28\x21\xcd\xdf\xdd\x43\x6b\x19\x62\xab\x85\xc3\x65\x72\x91\x0a\x41\xc7\x45\xd2\x48\xd5\xf3\xd0\x8a\x6d\xc7\x71\xb5\xd8\xa0\xcc\xae\x90\x78\x82\x19\xb6\xc0\x2b\x39\x26\x56\x9e\x1c\xcb\x48\x4c\x61\xc4\x02\xca\x0e\xb2\xf5\xe7\xe0\x6a\x4b\x23\x23\x30\x63\x95\x65\xa3\xc5\x5b\x61\x62\x68\xcd\x40\xf6\x2f\x39\xda\xf3\xe4\xf1\xdc\x4a\x79\x1c\x31\x9e\x4d\x4b\xfc\xbb\x3a\xe4\x35\x62\x9c\x6f\x4e\xbe\x4b\xc2\x54\x92\xbf\x68\x1e\x77\xda\xe7\xd8\x51\x1e\x97\xc6\x17\x7f\x09\xba\xb0\x29\xe5\x9d\x81\xdd\x28\x0a\xbd\x69\x98\xc7\xb6\x17\x26\x70\x39\x91\x9c\x90\x98\x9c\xdd\x1e\x46\xa3\x64\xf7\x49\x80\xc0\xf6\x53\xf0\x9f\x7a\xb1\xd5\xd4\xa2\xa5\xe7\x02\xd6\x75\x71\x9b\x17\x15\x67\xde\xdd\xb4\xe9\x56\x44\xd1\x5a\xf4\x26\x60\xff\x57\x9e\x3a\x3a\xed\x2a\xc2\xfe\x5e\xeb\x21\xdd\x56\xc6\x00\xff\x70\x7d\x9d\x85\x99\x9f\xf9\x61\x13\x19\x81\xe7\x95\xeb\x2c\x3f\x0c\xb7\xf0\xe7\x38\x90\xd0\x10\x16\x07\xe6\x99\x9b\xfc\x4b\x86\x9e\x5f\x95\xaf\xb5\x37\xcc\x67\xe2\x3f\x04\xd0\x72\x9b\x11\x57\x2e\x55\xe5\x5b\xd6\xe4\x1c\xc5\x63\xea\x3e\x98\xe7\x39\x29\x5c\xbe\x3c\xad\xba\xfe\xb1\x72\xc1\x2e\x2d\x95\x0f\x07\x5e\x88\x0d\xa0\x42\x74\x52\x40\xe4\xbb\xcd\x93\xc6\x66\x9d\x04\x38\xf1\x77\xf1\xd1\x05\x01\x3c\x5f\x49\xc8\xee\x82\xc0\xad\x18\x05\x61\xce\xc0\xb7\xc2\xc6\x9f\x10\x18\xcc\xa2\x04\xf8\xb3\x28\xc1\x81\x11\x43\x9b\x55\x82\x03\xdc\x2f\x29\xab\x5c\x52\xd6\x0e\x7e\xfb\xde\x1f\x82\x3f\x7e\xdb\xa8\x0a\xc3\xbf\xb7\x64\x5a\x0c\xeb\xed\xab\x5a\xdb\x95\x47\xc6\x90\x83\xde\x18\x11\x91\x80\xfb\x72\x67\xc2\x0f\xd9\xf1\xb7\x4a\x70\x5f\xfd\x22\x7d\xfb\x49\x65\xcf\xf5\x67\xa6\xac\xba\xae\xbd\xcc\x92\x16\x36\x2d\x17\x04\x47\xee\x3b\x9b\xd1\xcb\xe2\x0e\x4b\x0b\xc6\x3e\xa9\x01\x24\x6e\xdf\x1c\xde\xd6\xed\xf8\x0c\xca\x2b\xff\xb2\x4c\xc1\x5b\x80\x91\x6f\xdd\x22\xa0\x4e\x9f\x3e\xf4\x89\x8d\xf1\xb6\xaf\x65\xeb\xd0\x59\x91\x66\x1a\x82\x9b\x43\x2d\x9b\xbd\x02\x5c\x51\x7a\x84\xf4\x25\x81\xec\x73\x65\xec\x1d\x1d\x67\xb4\xa7\x83\xac\x40\x9f\xb9\x25\xed\xa9\xf0\xf3\xf9\x07\x20\x16\x49\xf3\xc5\xfe\xb6\x5e\xd8\x84\xad\xbc\xcf\xfc\x8b\xd8\xf3\xb9\x2a\xcd\xd3\xac\x88\x95\x1c\xe5\xec\x1e\x44\xe7\x80\x06\x98\x3c\x92\xad\xc3\xf5\x8a\xe5\x21\xaa\xd8\x30\xe9\x4f\x21\x0d\xf4\x77\x21\xf5\x95\x86\xa9\xde\x9e\x7b\xfb\x7f\xc1\x1b\xc0\xbc\x44\xeb\x53\x9a\xe3\xec\xd3\x72\x2e\xa0\xfa\x7e\xa7\xff\xfe\x42\xb6\x7a\xe3\xe6\x2b\x85\x1f\x42\x1a\xea\x6d\x41\xea\x2a\xf6\x2b\x79\xbd\xaf\x0b\xfb\x1d\xd9\x28\x6b\x00\xc3\xc8\x13\xf8\xf5\x77\xeb\x5f\xed\x33\x64\xdc\x1f\xde\xe2\x16\x56\xae\xbb\x79\xfe\xd4\xf9\x34\x2f\xdc\xba\xc2\xdf\x59\xad\x80\x99\x68\x73\x92\x76\x84\x7a\x4a\xde\x05\x30\xef\x61\xe1\x14\x70\x36\x1b\x37\x9f\x9a\x58\xbd\xde\x36\xa4\x9e\xaf\xc5\x09\x9e\xe9\x79\xc5\x6e\x01\xce\x6f\x15\xa3\xff\x9b\x7d\x6c\xa7\x86\x6b\x01\xf2\x83\x8e\x6e\x9e\x72\x37\x0a\x79\x79\x68\x10\xdd\x44\xa5\x62\x4b\xa5\xf4\x53\xeb\x4f\x52\x35\x70\xa5\x38\x1f\xec\xa7\x2e\x54\xac\x61\x5b\x0c\xab\x91\x59\xbb\x68\x4b\x48\x43\x4a\x5d\x63\x40\xb9\x2f\xe5\x89\x73\x01\x2d\x1d\x60\xcf\xbc\xb8\xa2\x8b\x45\xb6\x8e\x61\xa4\x47\x6b\xa6\x59\x72\x9a\x01\xca\x87\x85\x4b\x3c\xf3\x45\xc3\xc1\x08\x65\x8e\x9b\x57\xf0\x56\x03\x90\x52\x50\xad\x85\xfc\x74\xac\x47\x2b\x24\xef\x8d\xd0\xb4\xf7\x20\xb4\x8a\xf1\xe5\x52\xb0\x93\x62\xa0\xcd\xcd\x87\x1e\x50\xe0\xc7\x54\x45\x5b\x6a\xd2\x85\x8f\x0d\xde\x0e\xf4\xe8\xbd\x10\x18\x2a\xb1\x85\xb5\x4e\x55\xb6\xa6\x5a\x9a\xf2\x7b\x01\xa6\x56\x3c\xca\xd5\xf7\x8e\xf4\xb6\x0c\xad\x1c\x51\xf1\xe6\xca\xfe\xe0\xad\xd8\x77\xfc\x2a\x93\x3f\x9b\xd3\x83\x37\x4e\xea\x95\x0c\x73\xfb\x4f\xa3\x82\x14\x09\x6a\x93\x24\x80\x30\x60\xdb\xb1\xfb\xc1\x97\x2f\x1c\x0e\x91\x4e\x9c\x4b\x1d\x9f\x5d\xcf\xab\x92\x5d\x0d\x69\x5a\x3f\x3b\x1a\x3a\x77\x88\x81\xd9\xfe\x1f\x3c\x82\xc6\xf4\x87\xa7\xf5\xd3\xfa\x37\xd2\x86\xc3\xd2\x87\x95\x1f\xbc\xdf\xa6\xb4\xd9\xa8\x1f\x6e\x56\xee\x77\x6c\xe7\x7d\x44\xc5\xc9\x41\x84\x25\xfc\x79\x76\x8f\x98\x04\x88\x2b\x84\x77\x24\x2c\xc6\xc8\x58\x6c\x1b\x0f\x3e\xdd\x2f\x6a\xfd\x1d\x31\xc3\x27\x0f\x24\x59\xa7\x10\x46\x9d\x97\x0f\xf5\x5c\xfc\x83\x28\x08\xfd\xf8\xc8\x41\xd0\x83\xea\x5d\x78\xef\xc1\x69\xf1\x5a\x6b\x90\xb0\xe3\x24\x35\xa0\xec\x05\x55\xdc\x88\x88\x3f\x03\x5a\xaa\xb5\x4e\xfe\x03\x3a\x35\xdc\x5a\xbf\xbf\x01\x02\x43\xe6\x05\x27\x5a\xea\xdc\xa4\xca\x7d\x1f\x14\x77\xa1\xa7\xda\x7e\x48\x45\xe3\xde\x01\xad\x56\x4e\x27\xf3\x4f\x3a\xa9\x52\xc5\xfd\x18\xa8\x7c\x4a\x25\xac\x12\x14\xd8\xa1\x18\x02\xcc\xd4\x43\x2e\x5e\xe0\xb9\xc7\xda\x8e\xe5\x60\xcb\xda\x67\xcd\x90\x28\x33\x21\xb6\x8f\x61\x0d\x8c\x5b\x30\xc9\x98\x0e\x10\xc2\xbb\x00\x23\xa0\xa8\x63\x5d\x6a\xa1\xdb\x1b\x29\x98\x81\x60\x12\x1b\xef\xd2\x72\x73\x4a\x21\xa5\x2a\x6a\xb6\x05\x12\x13\x63\xf5\x08\x66\x60\x14\x94\xbd\x6f\xcb\x2b\xe6\x0d\xae\xef\xed\x1d\x19\x19\x1b\x3b\x6d\x78\xa8\xbc\xb8\x78\xff\x81\x20\xb5\x1c\x32\x3c\x73\xc6\x15\x35\xd5\xfa\x8e\x40\x83\x48\x54\xc2\x7d\x89\xaf\x5e\x8d\xe0\x50\x81\xc8\x3a\x15\x75\x7b\xfd\x1e\xac\x50\x27\xb5\xd7\xed\xd9\xf8\x2f\xb5\xba\xad\x3e\x3d\x0d\x7d\x08\x4a\x4b\x6f\xab\x9b\x95\x19\x0d\x61\x0a\xe5\xa9\xea\x58\x4e\xe6\xba\x2d\xe1\x04\xbe\x4b\xba\x03\x3b\x14\x78\x4c\x40\x40\x1d\xc1\xb6\x89\x94\x61\x1d\x8b\xf0\x2c\x04\xe2\x89\xc8\x11\xa8\xaa\xcc\x75\x5d\x1d\xcf\xba\xa9\x9d\x55\x2c\x59\xf6\x3b\x49\xed\x61\xd8\xcb\xaf\xac\x25\x16\x79\xcb\xc2\x5c\x09\x88\x1c\xc0\x23\xb9\x32\x22\xa0\x64\xb9\xc1\x11\x89\x61\x45\xde\xb5\x3e\x50\x95\x7e\xaf\x3f\x6e\xc5\xa0\x76\x5d\x77\x5a\xc4\xef\xcc\x59\xd7\xac\x02\xce\xef\x8e\xb1\xb0\xf0\x80\xb7\x61\x29\x88\xe6\xde\x33\x9d\x33\x74\x32\xd0\xf1\xe3\xef\x0f\xf7\xad\x54\xfe\xfd\xdb\xb7\x4d\x4e\xef\xf8\x36\x3d\xed\x9c\x3f\x43\xdd\xb9\xd3\xde\x90\x81\x07\x64\xff\x7d\x31\xf0\x19\x79\x22\x39\xf5\x67\x56\xe0\x15\x0e\xca\xcb\x9a\x21\x5a\x31\x03\xb1\x71\x7a\x26\xdf\x57\xba\xb1\x77\x95\x8d\x2d\x66\xa3\x52\x9c\x08\x84\x43\x7c\x4b\x0f\xc2\x3e\x1d\x0e\xc1\xfe\xa8\x27\xdf\x63\x77\x00\x41\x3f\x60\x36\x24\x2c\xd8\x7c\x43\xc3\x6b\xd9\x9d\xed\xe4\x30\xe9\x2d\x3e\x5c\xf7\x23\xa8\xcb\xbd\xc8\xf7\xc2\xd5\xef\x9f\xf4\x35\x4b\x1c\xef\xb0\x4c\x69\xd2\x54\x6f\x6d\xf1\xcc\x5c\x5b\xda\xa9\x4e\x4a\x58\x75\x8e\x7d\xea\x95\xb5\x07\xdb\xa1\x18\x92\x78\xfd\xc6\xc3\x5b\x40\x34\xab\x75\xab\x09\xab\x67\x86\xf7\xf7\xf2\xfb\xa1\x00\xe2\x40\xc0\x1d\x8b\xfc\x2b\xfa\x22\x80\x05\x93\x52\x2e\x13\x41\x53\x90\x54\x9b\x2b\xae\x07\x38\x53\x07\x80\x99\xb1\x33\x72\x0a\x50\x2c\x71\xdd\x95\x56\x5e\x84\x66\x05\xba\x00\xdd\xd3\x62\x99\xf6\xda\x9d\x5d\x64\x7c\x6b\xb0\x0a\x1a\x78\x74\x51\x0b\xdc\xc3\xa4\x3d\xa2\x13\x3a\xe2\x08\x04\x71\x43\x2f\xd1\xbe\xdf\x4b\xfa\x36\xe4\x39\x40\xce\x11\xcc\xa6\xb4\xff\x38\xdb\x83\x8d\x29\xaf\xe3\x36\x06\x6d\xd5\x6b\x8f\xcf\x8b\x1f\x85\x12\x7a\x7b\x89\x76\xfd\xb5\xb5\xc5\x43\x12\x0b\xeb\xed\x47\x13\xad\xfa\x1f\xd6\x76\xdb\xcc\xa0\x64\xf8\xbc\x85\x0d\x6c\x43\x11\x88\xc8\x87\xe7\x60\x97\x68\x16\x96\x95\x72\x80\xb1\xa4\xae\xfc\x00\x2e\xba\x53\xa7\x1e\x46\xdb\x6d\xee\xd8\xa5\x3e\x32\xed\x91\x88\xba\x95\x6e\xfc\x99\x5c\x8f\x79\x0a\x96\xbc\xd9\x33\xc3\x6b\xd8\x1a\x90\x34\x33\x62\x91\x3f\xef\x82\xec\x73\xcd\x4e\x6a\x97\x86\xe4\xe9\x87\xfa\x54\x85\x88\x12\x99\xe6\x25\xd2\x61\xbf\x29\xb4\xf9\xf6\x32\x9f\x10\xb2\x7d\x1e\x37\x0a\xfd\xba\xea\x20\x49\x94\x9d\xec\x0a\x7d\x41\x36\x6d\x85\x22\x6f\x27\x82\x69\x4c\x49\x8c\x1d\x9e\x49\x0f\x35\xf9\xbc\x79\xe0\x97\xe3\x3f\x00\x81\x84\x87\x81\x7c\xaf\xd6\x55\x65\x2d\x87\xd2\xa2\xcc\x68\x62\xeb\xe7\x3d\xcf\xaa\x06\x13\xdb\xb1\x5f\xd2\x02\x2a\x27\x80\x7b\x9d\x88\x10\x68\x9d\x1e\x33\x72\xbc\xea\xd0\x07\xb3\x79\x22\x3a\x96\x55\x40\x3e\xe7\x71\xc2\xdb\x7c\x4a\xd9\xff\x21\xec\xf9\xb5\x80\x95\xf6\xd7\x8e\xba\xef\x98\xed\xa7\xb4\x37\x32\x10\x5a\xce\x9d\xbc\xcd\x09\x5d\x82\x70\x1f\x1b\x25\x7d\x05\x8e\x19\x80\x2c\x72\x09\xe4\x54\x0f\x83\x96\xe5\xc4\x81\x65\xb3\x75\xda\x31\x27\x74\x0e\x84\xcc\x96\x58\xfb\x6d\xe4\xd9\xa9\x58\x24\x3a\x44\x6c\x3e\x80\x4f\xc5\xf2\xea\xea\x05\x1e\xf3\xfe\xed\x85\x4b\x58\x1d\x5b\x92\x3b\xb6\xf4\xe1\x84\x34\x45\xcb\x68\x21\xc8\x42\x41\xad\xcb\xdf\x6a\x17\xaf\x13\x5a\xc9\x3c\x7c\x3a\x66\xb1\x1b\xa1\xa2\x03\xac\x5e\x03\x8b\x4f\x9b\xef\x68\x35\xad\x80\x01\x61\x95\x20\xf5\xf0\xfc\x80\x84\xaf\xf9\x4b\xb2\x93\xa9\xbd\xe5\x84\x75\x1b\x90\x85\x9d\xa4\x2f\x62\x03\x7a\xac\x74\x9a\x80\x77\x7e\x9b\x38\x69\x24\xf9\xa8\x6f\x6f\xa3\xef\x74\xb2\x5e\x04\x33\x51\x3f\x72\xd5\xed\x4c\xcb\x8a\xcb\x66\xac\xf7\x6f\xcb\xcd\x08\x49\x0f\x6e\xcf\xf5\x48\xd8\x15\x99\xcd\x1d\x69\xd9\x71\x55\x67\x67\xea\x8d\xe5\x29\xd3\x87\xa6\x14\x69\x1e\xf5\x2d\x1a\x61\xab\xfd\x75\x69\xcc\xcb\x34\x2c\x61\x7b\x9e\x20\x6e\xbe\x59\x24\xb0\xb8\x9b\xf9\x48\xed\x6b\x4a\x19\x63\xd4\xce\x4a\x08\x01\x38\x40\x89\x74\x31\x41\x92\x79\x8f\xea\xfb\xa5\x38\xa3\x52\x51\xce\x29\x28\xe7\x0d\xc1\x71\x72\xfe\x3c\xb5\xc2\xe9\xab\x27\x54\xc4\xff\x94\x32\x51\x55\x45\xbe\xf3\x54\x88\xa8\x87\x14\xbf\x17\xa2\x0c\xd4\xab\x0a\x9e\xe9\xd2\x2a\x44\x3c\x21\x04\x94\x12\xe2\xa5\x98\x60\xf2\x94\xab\x05\xb9\x5d\x92\x30\x5e\xdf\xa2\x2b\x3d\xc7\xab\xf5\xaa\x49\x7c\x09\x5e\xbe\x12\x4f\xfd\x61\x78\xa3\xbb\x27\x97\xe3\x89\x44\xd0\x54\x53\x12\x52\x3c\x3d\x9e\x4f\x2b\x12\x5f\x2e\xc5\xcb\xe3\xa8\x8a\xb1\x07\xa3\x08\xb8\xbb\x64\xf5\x97\x27\xf2\xe5\x09\x74\x6c\xfc\x39\x89\xba\xa7\x65\x35\xa6\xe4\x2c\xc6\x99\x12\x4f\x76\x27\x07\x7a\x05\x7a\xb8\x7b\xc4\x53\xc2\x5d\xf2\x17\xaa\xa6\x78\xe3\x0b\xbd\x08\xaa\xdb\x6a\x0a\x44\x5d\x81\x1d\xc3\xa2\x4b\x71\x6f\x22\x0a\xa9\x8f\xa7\x4d\x7e\xab\x10\x13\x8a\xfe\x37\xf7\xf0\xbb\x2a\x00\x35\xd7\xaf\x08\xe5\xfc\xed\x16\x53\x85\x70\xb9\x45\x8d\xcb\xf1\x42\x3e\x57\x56\x2d\x4a\x28\xf2\xf4\xb8\x59\x57\x5a\x7e\x5d\xcf\x5e\xd5\x05\xcc\x6f\x1f\x50\xe5\x36\x7b\x0a\x9e\x5b\xa5\xc4\xe9\x3d\x3c\x6f\x7a\x11\x51\x0f\x25\x1e\xaf\xc1\x08\x67\x84\x66\x78\x0b\x19\xf7\x10\x8f\x07\x3e\x92\x05\xf2\x00\xdf\xca\xa4\xc3\x05\xc6\x94\xda\x97\x8b\xf2\x89\x3e\xfa\xa2\x19\xf9\x82\x1d\xe1\x21\xc1\xfe\x88\x43\x05\xb0\x2f\xe1\x39\x17\xa0\x99\x86\x6b\x79\xee\x79\x99\x72\xad\x4c\x2b\x3e\x3b\xa3\x9a\xca\x92\xb1\x98\xaf\xb5\x5b\xe3\x2f\xf0\xb1\xf8\x09\x05\xcf\x66\xf7\x6e\xeb\x90\x03\xda\x3e\xd1\x4f\x3c\x0b\x83\x31\xe8\x23\x14\x72\xc9\xca\x79\x17\xea\x77\x85\x00\x19\x37\x30\x22\x01\xa2\x90\x13\xd8\x61\xc1\x1a\x59\x4d\x80\xb8\x30\x7f\x49\x62\xbe\x38\x48\x5e\x2d\x72\xe4\x69\xad\x0d\x61\x0c\x05\x9b\xde\xb4\x42\x8c\xe2\x90\x00\x37\x91\x4e\x39\xb3\x21\xb5\xf8\x67\x49\x20\x32\xeb\x83\x04\x69\x4f\x42\x1f\xb9\xac\x0b\xba\x2a\x7b\xc8\xaa\x21\xbd\x26\xba\x46\xdc\x10\x73\xa8\xc1\x53\xa1\x9f\xef\xe1\xe8\x6d\x74\xd3\x2a\x56\xc6\xea\x91\x63\x68\x7c\xb5\x92\xca\xa2\x8c\x26\x10\x45\x3d\xa3\xad\x45\x04\x96\x2b\x82\xd3\x42\x4a\xa0\x26\x51\x22\x2f\x71\xc2\x64\x91\xe5\x22\x8b\x38\x59\x6e\xd9\xfd\xa3\xb6\x84\x80\x24\x9e\x3a\x10\xef\xef\x19\xa4\x8a\x57\x06\xbb\x7c\x0e\xa6\x38\x9d\x8b\x9a\x61\xc1\x25\x09\xe3\x46\x8e\x82\xe5\xa8\xeb\xd6\xee\x7e\xbd\x5c\xd7\xda\xd8\xea\x5c\xe3\x20\xca\x04\xb0\x05\x81\x07\x3d\x0f\xf6\xe9\xa1\x77\xc0\x8e\x16\xe5\xb8\x99\xe4\x22\xaa\xe4\x69\xaa\x34\xe0\xc8\x7d\x42\x95\xa9\x57\x33\x99\xdf\xac\xee\xe3\xee\x5b\x6f\x34\x59\x66\xb9\xcc\x22\x8b\x1d\xfe\xd2\xd2\x33\x31\x03\x44\x7f\x6f\xda\x94\xbd\xc0\x72\xc1\x5d\x43\x83\xaa\x84\x70\xcf\xbc\x41\x79\x6c\xb0\xa2\x6b\xc9\x37\x53\x20\x4c\xae\xcd\x6a\xc1\xaa\x0d\xf5\x40\xd9\x3e\xfd\xf9\x73\xfa\x25\xff\xf1\xea\x30\xdb\x29\x75\x11\xb5\x41\xba\x20\xdd\x39\xfd\x88\x2d\x5e\x7b\x1a\x23\x78\xf8\x2f\xa1\xde\xa6\x4c\x5b\x16\x60\xe2\x30\x2f\xad\x96\x28\x89\xdc\x3f\xc2\xa8\x59\xcd\x29\x86\xd8\x9b\x61\x0a\x8c\x77\x49\x7b\xe2\xad\x64\xcd\x64\x43\x08\x31\xaf\x95\xb6\xd9\xdd\xf8\xed\xda\x90\xda\x47\xf0\x8c\x64\x85\x12\x6a\x89\xbc\x3c\x96\xe3\x80\xf1\x1a\xf2\xa4\x52\xaf\xeb\x30\xf0\x2a\x65\x59\x43\xb1\x4e\x73\x49\x28\x7e\x2e\xe4\xb8\x11\x44\x3c\x81\x9f\x6f\x75\x0f\x77\xcf\xaa\x2f\xdb\x9f\x45\x50\x9b\x71\x02\xdc\xf7\x7b\x82\x0b\xdb\x63\xdb\x89\x58\x24\x36\x02\xe3\xe2\xeb\x1f\x13\xd0\x69\xdd\xe0\x8b\x45\x06\x00\xf3\xec\xf7\x98\x82\x3c\xa8\x2d\xb6\x8d\x80\xb5\x6f\xe5\x6d\x70\xef\x56\xf3\x17\x05\x74\x58\xd7\xfb\x62\xd1\x4b\xbd\xcd\xbb\xf9\x0e\x91\xa5\x17\x2f\xd5\x6d\x6a\x68\xf5\xe8\xa8\x6f\xa9\xe7\x32\x2c\x3b\x57\x9e\xcc\x81\xcc\x78\xbf\x49\x96\x67\xc6\xad\xd8\x8c\x39\x30\x73\xd9\xf4\x51\xf0\xa6\x4e\x13\x4f\xf2\x0c\xf7\x20\xa1\x48\x1e\x50\x04\xb2\x31\xe8\x98\xfe\x27\xbc\x01\x67\x4b\xa4\x2c\x2d\xc8\xde\xcc\x22\xf8\x7a\x32\xf1\xf3\xd7\x98\xda\x6d\xa5\xb4\x84\x71\x12\x0a\x5a\x89\x28\x45\x7a\x92\x51\x4e\x65\x96\x73\x44\xa4\x12\x11\x1c\xab\xa3\x3d\xd5\x86\x3b\xec\x07\x2c\x63\xab\x50\x98\x5f\x22\x62\x70\x79\xb1\x1e\x07\x49\x0c\x6b\x3c\xc6\x89\x74\x92\x2c\x5f\x82\xf0\x42\xa5\xa6\x8e\xea\x2d\xf7\x71\x92\x98\x97\x20\xa0\xec\xdc\x90\x2e\x98\x5f\xb6\x15\x06\xd3\xd6\xff\xaf\x68\x8b\x22\x7b\xd8\x18\xf9\x67\xf2\x47\xdb\x11\x6a\xae\xdd\xe7\x14\xe1\x79\x10\x06\xe1\xc2\x15\xad\x87\x3b\x21\x58\x8c\x3b\x8a\xc6\x1b\x83\xfc\x16\x43\x0a\x48\xa8\x92\x2a\x67\xf6\x72\x2d\x90\xfe\x3b\x32\x49\x3b\xb2\x81\xf0\x64\xe3\xfa\x54\x92\xd7\x58\xea\xc4\x25\x12\x5c\xdd\x66\x17\x54\xac\xf7\x07\x95\x9b\xc7\x9a\x52\x73\xa0\xdf\x6d\xf9\x10\xc7\x2d\xee\x2f\x2c\x8e\x1d\xcb\xc2\x3b\x55\xb0\xbd\x55\xb2\xdb\xdf\xf9\xb1\x10\xc4\x76\x2d\x7b\x85\xa7\x93\x3d\x95\x6e\x4f\x09\x39\x82\x00\x9d\xf2\x6b\x80\x1f\x11\x55\xae\xeb\x95\x90\x9d\xaa\xee\xe2\x93\x12\x1e\x04\xee\x8b\x12\xe1\xff\x28\xfa\x6e\x17\x64\x7a\xb6\x49\x69\xfe\x13\x0c\xfe\xc3\x50\x5f\xed\xad\x0d\xa6\x6b\xad\x90\x61\x8a\x15\xb7\x36\x64\x3e\x2a\x3b\x9f\xef\x02\x09\xda\xbb\xeb\x7b\x95\x56\xda\xe0\xd5\xfe\x71\xd0\xcd\x53\x82\x07\xfd\x1b\xea\x87\x02\x5b\x98\x42\xee\x4f\xef\x6c\x5d\x79\x57\x9e\xe9\x4d\x52\x5a\xc1\x24\x2e\xa9\xdd\x25\x98\x92\x9b\xf8\xaf\xa7\x71\x6a\x22\xb6\xcc\x99\xb1\xdd\x2e\xef\xdd\x39\x2a\xed\xb7\xab\xa7\x07\x14\xab\x9d\x48\x2a\xee\x3a\x9c\x48\xa8\xc9\x66\x63\xa1\x45\x70\xdf\xe6\x52\xb5\x96\x6f\xa5\xbe\xb9\x51\x23\x22\x68\xd5\xe2\x74\x4c\xc2\xc9\x5c\x97\x56\x97\x09\xb0\xa8\xc1\x4f\x66\xf5\xda\xe2\xda\xcf\xc0\x94\x7d\x05\x3d\x51\x5d\xaf\x9a\x4c\xbd\xa5\xf1\xbe\x48\xaf\x97\x7c\x9b\x3c\x6c\xe7\x98\x25\x8a\xcb\x43\xd3\x36\x07\x68\xff\x25\x60\x74\x34\xa8\x35\x7b\xdb\x29\xcf\x44\xbc\x17\x24\xef\x43\x9d\x82\xbd\x57\x32\x4d\x85\xb2\xea\xa0\x46\x97\x98\xcb\x44\x85\xab\x97\x70\x8e\x97\x98\xfe\x56\x49\x34\x65\x40\x94\x20\xb4\x0c\x89\xac\x47\x22\xf9\xc1\x9d\xc6\xc2\x05\x53\xb3\x5d\x7d\xb3\xa7\xdb\x85\xf3\x8d\x82\xf8\x96\x4d\xc8\x62\xe4\x46\xdc\x29\xbd\x4b\x74\xdd\xb8\xcf\x7f\x95\x1a\x9a\xb2\x99\x4d\x71\x39\x25\x71\x1b\x63\x2b\x8f\x8f\xa2\x39\xba\xb1\xba\xc0\x73\x66\xf8\x0a\xd1\xb6\xb2\x9c\xf9\xa6\x62\x18\x92\x21\x13\xf3\x74\x8a\x4f\x65\xad\x0d\xc9\x5e\x37\x75\x7c\xcf\x50\xad\xdc\xe3\x81\xfa\x90\x5e\x67\x2d\x6a\x12\xd1\x8a\x28\x42\x94\x09\x71\x0d\x05\x02\x37\xff\x7e\xc6\xd4\xc6\x10\x3f\x56\x5c\x78\x5d\xa2\x6f\x46\x86\x6f\x67\x26\x9e\x77\x35\x4f\xa7\xd6\x6f\xeb\x2c\x33\x95\xdb\xaa\x6c\x4c\x54\xfd\x9f\xd6\xc3\xb5\xdc\x19\x86\x4e\x6e\x05\xf9\x55\x60\x7a\xa7\x5c\x54\xe4\xec\xc3\xe4\x64\x1a\x91\xad\x53\xf4\xe9\xe9\x5c\xfa\xaf\x6b\xc6\xde\xfb\x2b\x5d\x28\x50\x58\x9c\xd1\xf1\x98\xf4\x78\x25\x32\x8a\xba\x5f\xca\xe5\x9e\x98\xe7\x32\x67\x40\xfe\x45\xc0\x9f\x97\xc9\x67\x86\xa4\x48\x6a\xbb\xcb\x74\xe9\x4d\xed\xfb\x0e\x89\x4d\x11\xea\x36\xf6\x46\x4e\xbe\x0d\xdb\x63\x5e\xba\xca\x05\xf0\xd9\xb2\xbc\xed\xad\xf2\x63\x91\xd5\xeb\xac\x7f\x2d\x4a\xe0\x44\xd4\x5f\xc7\x05\x2e\x2b\xf1\xa1\x4c\x51\x6c\x81\x4f\x91\x03\x08\xc2\x64\xe5\x00\x60\x75\x93\xbb\xa7\x1f\xbc\x3b\xa9\xe1\xd6\xa6\x55\xfd\x62\xed\x68\x98\x2b\xe8\x11\x7d\x4f\x90\x5d\xe6\xe6\xb3\xf1\xee\xc1\xf0\x13\x0e\xda\x89\xc3\xb5\x21\xcc\x19\x7f\x62\x68\x98\x09\xc5\xfc\xe2\x1f\xd3\x06\x12\x8e\xc7\x79\x32\x2f\xf6\x24\x7d\x2d\x34\x03\xbe\xad\x90\x2d\x02\x81\xf7\x12\xa8\xa2\xdb\x1c\x7d\x96\xe0\x19\x7c\x90\x7e\x5c\xc7\xcf\x2f\x6d\xe9\xda\x88\xcf\xb1\xc0\x04\x20\x5e\x84\x24\x32\x03\x9e\xcd\x94\xe2\x35\x23\xdc\xe7\xbe\xc0\x5c\x0f\x81\x50\x5c\x82\x6b\x58\xb3\xb4\x0e\x8c\xbf\x74\x78\x4d\xac\x29\xc6\x95\x14\x4f\x6c\x06\xc0\x29\x5e\xf8\x56\x39\x66\x2b\xfb\x14\x74\x73\x8d\x6a\xbc\x11\xda\xc8\xcb\x97\x23\x23\xf3\xf3\xae\xc2\x81\x78\xf5\xea\xd5\x3f\x67\xe1\x42\x1b\xe5\xff\x98\x50\x7c\xc1\x43\x76\x0d\xde\xb6\xb1\x13\x71\xd3\x3f\x2f\xb9\x26\xed\xb5\xd5\xfb\xca\xe8\x92\xec\x08\x79\x74\xbb\x67\x22\xb9\x67\x27\x5d\x11\xab\x4f\x49\x69\xf0\x57\xe9\x76\x64\x15\xec\x16\x8d\x2f\xbf\x1f\x9a\xf6\xcd\x6e\xdf\x10\xb0\xf2\xf1\x29\xd0\xf9\x30\xa4\xfb\xeb\x50\x23\x58\x32\x3f\xf9\x42\xc7\x86\xb3\x11\xa9\x29\x8b\x35\x0b\xe3\x93\x73\x62\xf2\x62\x7b\x74\xaa\x63\x86\x7a\x63\xce\x37\xfb\x55\xeb\x14\x41\x19\x1f\xfd\xd4\x92\x31\x29\x21\xa2\xd8\x28\xbd\x8d\x93\x91\x53\xf9\xce\xf1\x2c\x84\x17\x34\x90\xf2\x1f\xe4\x48\xf8\x43\x8e\x24\x6e\x70\x3f\x24\xc1\x3d\x82\xc7\x02\x69\x5b\x9e\xee\x7e\xc5\xd7\x89\xab\x9d\x0f\xb5\xa3\xc1\x59\x58\x96\x85\x03\xc4\x41\x23\x93\x5f\x30\x82\x16\x92\xa8\x8a\x96\x6a\x85\x25\x1d\x17\x23\x4a\xc9\xf3\x38\x5f\xa5\xbc\x99\x66\x2e\xe7\xef\xc4\xc8\xe1\x2d\xce\x8a\x5e\xc6\x2e\xe0\xd6\x27\x0a\x8c\x64\x75\xc1\xfe\xec\xe2\x83\xd0\x78\x08\x2c\x3d\x72\xff\xee\x9c\xb2\x23\x91\x65\xb1\x93\xb6\xa5\x81\xf2\x2a\x41\x5a\xcd\xca\xdd\x85\xc5\x13\x5b\x53\x2a\x6b\x0c\xa1\xf5\xb5\xc4\xec\xb4\x80\xf4\xe8\x48\x4e\xbd\x04\x17\x54\xb2\xb2\x25\xf9\x45\x9d\x84\x1d\x95\x16\xf9\x76\x8c\x41\x82\xe6\xc8\x63\x8a\x52\xdf\x59\x94\x36\x80\xe2\x00\x64\xeb\xcc\xbb\xab\x59\xdc\xb2\x01\xa5\x00\x1b\x14\x87\x0e\x02\xfc\xf4\xca\xef\x81\x1f\x8a\x8d\x47\x26\x07\xff\x19\x63\x03\x88\x3c\xe3\xf4\x6f\x9e\x97\x90\x26\xe2\x6c\xf3\x77\x75\x8c\xbd\x3f\x4c\x48\x5a\x94\xb3\x94\x6e\x9c\x8d\xab\x4d\x29\x44\x2f\xf3\x55\x9c\x71\xd6\xb2\x3b\xbf\x1b\xf6\xbc\x3b\xea\x0f\x05\x0d\x8f\xec\x8f\x8c\xee\x0c\xbc\xc6\xf6\x67\x1e\x8d\xb7\xb3\x11\x9b\xb8\xdd\x29\x01\xca\xd1\xdd\xa2\xaa\x9f\xa5\x8c\xff\xb9\xb7\x79\x0e\x77\x7c\x5e\x7e\x64\xdf\x6c\x03\xaf\x16\x26\xc9\xbe\x40\xe3\xe3\xc1\x53\x0a\x08\xfd\x6c\xd6\x87\x07\x17\x1c\x06\xc6\xce\x8d\x72\xb8\x53\x1e\xef\x5a\x1e\xb6\x2e\x62\x7e\x88\xeb\x0a\xc5\x10\x7e\x8e\x94\x65\x79\xf9\x79\x65\xbd\xe2\xbf\xc5\x66\xfa\x1f\x69\xfd\xb6\x89\x08\x53\x07\xdf\xd5\xc0\xd4\x91\x44\x54\xba\x95\x17\x9e\x95\x95\x4d\x15\xe2\x18\xc9\x00\x81\x4f\x25\xe5\x2c\x25\x11\x64\x2c\x7f\xee\x4c\xf4\x3d\xce\x42\xfd\xa9\x2d\x83\x82\x31\xea\x3b\x2c\x82\x8f\x7b\xea\x7d\x17\x84\x2c\xd2\x9c\xdc\x3d\xad\xbf\x73\x8f\xde\x6e\x8c\x89\x3d\xc7\xba\x4f\x49\x3b\xf6\x24\x7f\xaa\xee\xd2\x70\xf2\xed\xc2\x27\x69\x26\x6b\x8c\x1f\xdc\x37\xae\xd9\xfa\xbd\x47\x2e\xee\xf6\xb1\x12\xe6\xfd\x8d\xba\x0f\xdd\xf6\xcd\x74\xf4\x00\x14\x30\xea\x1b\x72\x05\xb5\xe8\x0d\x27\x1d\xad\xfc\x62\x5c\x39\x83\xaa\x72\x7f\x91\xdb\xee\x0d\x6c\x67\x6a\x4f\xdc\xda\x2d\x72\x0c\xdc\xfe\x92\x6c\xf1\x03\x63\x12\xc5\xec\x8b\xc3\x37\x69\x63\x6d\x2b\xd3\x21\x15\xab\x44\x97\x5d\xd5\xf4\x89\xce\x61\x31\x3d\xd1\xa4\x35\x71\x81\x8b\x6c\x06\x7f\x8e\x0f\xad\x0e\x6c\xef\xdb\x06\xd5\xa3\xa3\x25\x11\x95\x91\xb4\x1a\xd2\x91\xfd\x6a\xc4\x09\x47\xf7\x64\x54\x0a\xc2\x0f\x76\x02\x2f\xa3\xf4\xf9\x09\xf5\x88\x23\xf6\xec\x8f\x1f\xa9\xbd\x4e\xde\xbe\xd5\x5e\xc1\x0c\x78\x93\x9c\xec\x42\xae\x3a\xc6\xc1\xdc\x57\x18\xa9\xda\xbc\xc9\x8f\x08\x98\x1b\xa4\x45\xd1\x76\x52\x34\x71\xcf\x03\x55\x3d\x7a\x6a\x55\x64\x41\x52\x4b\x16\xd6\x5d\xe4\x95\xd0\xd4\x14\xef\xb9\x68\x6c\x21\xd5\x57\x99\x9f\xd8\x75\x42\xe8\xeb\xa2\x0d\x6d\x0f\x28\x63\x0f\xda\xe7\x27\x0a\x48\x02\x65\x8e\xa8\x74\xed\xdc\x15\x6f\x7b\x52\x96\x7d\x24\x6f\x45\x14\x62\xfb\xb1\x3f\x99\xc3\xd9\x15\x81\xcb\xac\xee\xa3\x41\xa1\x0f\x79\x15\xb3\x66\xdb\xfe\x9a\xb1\x43\x2f\xce\x9f\x9c\x7b\xdd\xd6\xb3\x75\x37\x7a\xe4\x92\x8f\x1d\x8f\x1a\x93\xd0\x58\x47\xb6\x76\xa1\xb2\xd5\xfe\xda\xdb\x2d\x57\x3e\xbf\xb9\xad\x5f\x7e\x99\x6b\xcf\xa3\x94\xc8\xf1\x8f\x88\x94\x94\xee\xbf\xaa\x76\xee\x72\xc8\x9b\x69\x82\x26\x21\xaf\x2a\x29\x81\xb3\x08\x1d\x72\x49\xf5\xec\xd2\x62\x40\xe5\xec\xaa\x96\x25\x4d\x35\xd0\x9d\x73\x93\x21\x4e\x9b\xbd\xeb\x3d\xd5\x33\x68\xc4\x25\x60\x81\x1d\x55\x33\x06\xb2\x8e\x8f\xf5\x79\x56\x7c\x0c\x8e\x8d\xe4\x70\x88\x0f\x08\xd3\x6b\x2c\x36\xae\xd6\xd5\xad\x8a\x5d\x2b\x7b\x13\xf6\xf4\xc6\x45\xce\x97\x5c\xc0\x13\xd4\x5e\xd9\xd3\x04\xca\xd6\x03\x79\x6e\xdb\x94\x2e\x2a\x1d\x51\x7a\x95\x4d\x4f\xb3\xf3\xd5\xbf\xff\xe9\x10\x44\xef\x11\xee\xdd\x27\xec\x54\x95\xff\x53\x5c\xa2\x30\x98\x57\x55\x27\x35\xfb\x94\xbe\x3a\x99\x23\xe1\x68\xce\x85\x41\x15\x25\xca\x45\x5a\xb7\xca\x9c\x35\x62\xb5\xd2\x9c\xab\x14\x36\x4d\x2e\xfb\x5e\x71\xe7\xd5\xed\xd3\xb6\xda\x58\xd7\xdb\x28\x92\xa6\x02\x31\x85\xa7\xd8\x5d\x6c\x87\xee\xd4\x28\x34\x17\x1c\xa2\xa7\x41\xd4\xe6\x98\xe2\x8d\xd2\xa2\xed\xdb\x8b\xc0\xc2\x02\x13\xad\x56\x58\x6b\x76\x29\x5e\xdb\x9a\xdc\x6e\x36\xe3\xab\x65\xa5\x08\x51\xa2\x7e\xee\x80\x71\x60\xeb\x61\x34\x45\xa4\x9b\x95\xad\xd4\xdb\x6c\x11\xd9\x5a\x7b\x21\x9e\xb3\xce\xde\x65\xa7\xd9\xb9\x10\x08\x0c\xc2\x52\xbb\x96\x66\x6d\xa5\x84\x77\xc5\xa1\x17\x7c\xb5\xf8\xda\x4e\xf6\x77\x00\x64\x61\x7b\x25\x51\xf4\x09\x63\x9f\x79\xd8\xd1\x67\x91\xfd\x52\xb3\x9e\xa0\x9c\xc5\x41\x39\x7a\xef\xa0\x58\xb5\x07\x42\x4e\x9e\x7c\x35\xf9\xd9\x91\xb3\x11\x87\x4f\x9c\xfb\x34\x39\x5f\x77\xec\x9c\xce\x39\xa5\xb5\x90\xa0\xaf\xbb\x10\x1c\x2e\x07\x99\xe8\xe5\xa2\xff\x66\xed\x6f\xfa\xb1\x28\xfb\x1b\x44\xdf\xe6\x99\x5c\x13\x03\x1c\x45\x50\x6c\x9d\x9c\x7e\x8b\x50\xbc\x84\xcb\xa2\x41\xab\x27\xa5\xf7\xc7\x8f\x6d\x9d\xb2\xa4\xc3\x20\x10\x7c\xc5\xd6\x29\xcc\x5d\xcb\x8d\x83\xda\x31\x8f\xdf\x3c\x7c\x60\x29\x7b\xd9\xed\xf8\x79\x3f\xcb\x4a\x3b\x7c\xc6\x93\xe5\x15\x3d\xed\xd8\xc8\x04\x7f\x4a\x37\xb6\xb1\x4d\xe5\xe5\xfd\x4d\x41\xbe\xbd\xef\x7e\x77\x65\xfb\x82\xa4\x8d\x48\xf8\xad\x62\x5e\xcd\xbe\x2b\xe6\xce\x34\xd8\xf7\x96\xf5\x54\x1b\xb3\xe2\x89\x31\x1a\xe7\xba\xb2\xd1\xb3\xea\x27\x5a\x4e\x57\x52\xa8\x66\x10\xc3\x1d\x5a\xa6\x78\xa9\x92\x0d\x52\xb7\xcd\x1e\xaf\x7d\x1e\x93\x08\xcc\xf7\xd4\xcd\x1e\xab\x45\xd7\xda\xa2\x75\x5e\xc0\xf7\xad\x7d\xdb\x0d\x99\xac\xb0\x17\xff\x3d\xd6\xbc\x33\xe4\xb1\x43\x41\xec\x6c\x43\x5c\xe3\xa3\x27\x45\x0e\xce\xa9\x29\xd7\x2e\x8b\x62\x2e\x2d\xfa\xc7\xf7\x47\x42\xfc\xb4\xee\x9c\xd8\x84\xf2\xee\x48\x41\x7c\x5a\x45\x87\x79\x8c\xcb\xad\xd3\x79\xf1\x48\xe7\xdc\x3a\xff\x0c\xfb\x24\x8d\x86\x13\x27\x8a\x58\x85\xf6\x76\x1f\xc9\x33\x26\xbb\x79\xf3\x02\x56\x51\x4a\x2f\xb9\xb9\xff\x9a\x49\x5e\xe9\xd3\xc5\xdb\x09\xea\x27\x34\x5a\xef\xff\x59\x5b\x19\x7d\x3e\xfc\xc4\x93\x6e\x16\x9f\x9c\xd8\xeb\xc4\xd1\xad\xe6\x19\xc5\xa3\x76\xe8\xab\xfe\x54\x6f\xe4\x77\x28\xf2\x6b\x78\xc7\x82\xd5\x20\xcf\xf2\xd4\xbf\xad\x5e\x67\x57\x7a\xdb\xbc\xb8\x72\xc6\x31\x6b\x0d\x7d\x50\x63\xf0\x2e\x66\xfa\xc5\x9d\xe9\xf6\x12\xfb\x4c\x40\xe4\xb7\x5e\x83\x2d\xdd\xd0\x37\xf0\x70\x6a\x84\x6f\xa9\xb1\xbb\x9c\x72\xcd\xa4\xf0\xfa\x44\xe2\xb6\xb4\x0b\x70\x70\x4b\x74\xf2\x81\xc2\x03\x72\x14\xfa\x8f\x55\x7d\xca\x24\x67\x6d\x4a\x74\x90\x41\x50\x83\xb4\xc3\x76\xad\xdd\xcb\x0c\x1c\x68\x13\x2a\xd9\xb2\xe5\xcd\x9b\x2d\xf7\xb5\xfd\x5a\xd0\x76\x26\xc5\x64\x48\xab\x6a\x7c\x34\xb7\x50\xc6\x0e\x39\xa0\xf3\xfb\xb1\xde\x3f\x5d\x5d\x7f\x7a\x05\x77\x1b\x18\xdb\xee\x02\x20\x11\x00\x80\x08\x1a\x77\xf8\xff\xa3\x4c\x9b\xe1\x0f\x07\x98\xc0\xda\x7a\xcd\x20\x7a\xc0\x85\xe9\x1e\xb8\xa0\xd0\xa9\x21\xd5\xf8\x2e\x05\x2b\x27\x2c\x7a\x9c\x62\x38\xfb\xee\x08\x83\xa7\x0f\x2a\xdf\xae\x24\x8b\xde\xea\x86\xce\x6a\xce\x86\x2c\x82\xb5\x37\xea\x62\x43\xe6\x85\x01\x15\xe3\xeb\x92\x6f\x9e\x2f\xda\xf7\x5d\xc1\x45\xac\x68\x2b\x1e\xba\x12\xb7\x23\x50\x4e\xaa\x19\xc8\x3a\x0d\x1f\xd2\xc7\x3c\x9f\x44\xe2\x53\x10\x5f\x53\x34\x10\x3b\x0e\xce\xd6\x4c\x47\x1f\xac\xae\x99\xdd\xef\xb3\xec\x56\x5f\xfd\x21\x47\xb3\xa9\x38\x97\x88\xca\x9c\x25\xb0\xf7\x02\x1d\xad\x67\x71\x5d\xb0\x77\x58\xb9\xdc\xc2\x1b\x18\x12\x5c\x7a\x0b\x5d\x88\x42\x97\x57\xb0\xfb\x0c\x87\xce\xbb\xd7\x7a\xfd\xec\x54\x53\xf9\x76\xa0\xf4\x6c\xd3\xca\xf0\xf0\xca\x10\x85\x86\x56\xb8\x2b\x23\xfa\x8a\xe1\xa1\x9c\xaa\xb5\xa7\xa5\x06\xb7\x02\xe6\x15\xfa\x1f\x0c\xf2\x4c\x20\xf4\x94\xbe\x15\xbe\x57\xff\xa7\xfe\xba\xcf\x9b\x3d\xdd\x75\x35\x0e\xd2\x66\x1e\x86\x5d\xea\x59\x3a\xdd\x35\x74\x67\x71\x38\x68\xc4\xa2\x29\xa3\xaa\xa1\xa8\x2b\xa9\xdb\x3c\x1e\x35\x64\xac\xb4\x50\xaf\x3a\x39\xdb\x3f\x74\x75\x6e\x24\xe1\xae\x7b\x60\x1c\xe7\xfb\x1e\x59\xac\x10\xab\xb4\x3f\x21\xc5\x26\x5d\xdc\xb3\x92\xdf\x70\xa3\x61\x81\x86\xbb\x52\xb2\x1c\x3c\xd4\xd2\xb1\xa5\x6e\x6b\x7d\xcb\x44\x70\x7a\x61\x77\x59\x81\xd6\x24\xd6\x7a\x15\xfa\x3a\xa1\xdf\x93\x89\x48\x19\x7a\xec\xe6\xd5\x11\x1b\x83\xef\xaf\x64\x59\x9c\x10\x47\x6a\xb1\x61\xef\x72\xcd\x3e\xf1\xef\xf7\x71\xcd\xb8\x45\x40\xca\xd8\x47\xe3\xac\x34\x8d\xde\x13\x9b\xbf\xda\x2b\xee\x80\xfc\xd4\xdb\xed\x93\x02\xb7\xf3\x35\x7c\xa8\xd9\x22\xc3\x45\x40\x9f\x9f\xe2\xe0\xcf\xe2\x38\x1f\xfd\x78\x8f\x79\x3e\xd7\xc1\x58\x03\x71\x49\xa7\xa6\x33\x25\xe5\x34\x26\x8d\x95\xc5\x55\x65\xd1\xa3\x78\x8c\xde\x9c\x2b\x1f\xd6\x1b\x56\x5b\x0a\x57\xb8\x0e\x3f\xd2\x24\xfe\x55\x8c\xa4\x8b\x99\x37\xa9\x8a\xec\x48\x9d\x95\xec\x90\x32\xb1\xdc\x98\xee\x6d\x0a\x87\x26\x1a\xe7\xae\x7b\x7d\xb4\x33\x03\xf1\x7d\x9d\xbd\xf7\x8c\xd7\xf5\xa2\x1d\x96\x60\x52\x07\x55\x05\xce\xd5\x3d\x7d\x69\x69\x2a\xf6\xa3\x22\x51\x3a\xb3\xeb\x2c\x20\x21\x38\xa9\xf3\xa0\x36\x8b\xdc\xa4\x50\xa5\x27\xe0\x54\x94\x73\xa4\xeb\xd6\x72\x76\x77\xa6\xac\x83\x4d\x12\x00\x44\x4b\x4f\x78\xef\xdb\xc9\x69\x6e\x4d\x82\x27\x5c\x57\xa7\xad\x09\x6d\x46\x93\x88\xd9\x66\x8a\x50\x82\xaa\x4f\xc4\x1c\x56\xa6\x0d\x09\xbb\xe6\x5c\x84\xb3\xd3\xca\x60\xbe\x0e\x95\xe3\x91\x13\x25\x7e\xf2\x4a\xc2\xf9\x4a\x76\x43\x6d\xa2\x38\x8f\x6b\x1d\x76\x39\xbd\x05\x45\x8a\xb7\x67\xdd\x66\x76\x9e\x47\xd9\xa1\xce\x77\x32\xef\xb1\x30\xf1\x24\xdb\x2d\xa7\x5c\xe6\xb4\xc6\x49\x98\x4d\x44\x37\x9c\x4f\x16\xdb\xba\xd2\xe3\xad\x72\x55\xfa\x0c\xca\x14\x3a\x51\xda\x83\x9b\x31\x3c\x3b\xd2\x09\x2d\xab\x98\xeb\x3a\x18\xe1\x7a\xeb\xaf\xfa\x5e\x25\xf1\x71\x90\xbc\x42\xbe\x5a\x4b\x8a\x51\x44\xeb\xe8\xc6\x7b\x05\xd2\x97\x96\x78\xc7\x6f\x65\x25\xb4\x2a\x70\x0c\xd7\x0e\x16\x37\x7c\xb5\x2d\x74\x3c\x5e\xdd\x78\xd8\xa3\xd0\x62\x54\xfe\xed\x2a\x6e\x0c\x95\xe5\x7d\xce\xdb\x99\x6f\xd0\xca\xcb\x9e\xd7\x28\xf3\xdd\x01\xef\xb4\xb2\x83\xa7\x04\xd7\xda\x5c\xb6\x9f\xa7\x5e\x28\xef\x1e\x5a\x6e\xc4\xd1\x33\xa0\x66\x82\xf1\xb1\x5a\xa4\x2c\x32\xcb\xed\x87\x3a\x83\xa7\xaf\xaa\x22\xba\x17\xd0\x6e\xbb\x40\x7b\xf3\xb6\xd5\x38\x2c\xa6\x2d\xa2\x5e\xb8\x9d\x77\x12\x51\xb3\xb7\x83\x52\x1e\xeb\x93\xe0\xed\xd0\x45\x7e\xa7\x7f\xea\xeb\x0b\x05\xc0\x27\x3e\xd1\x15\x40\x5e\x55\xb6\x3e\xff\x92\xdd\x57\x35\x0b\x80\xc0\x25\x33\x23\x58\x89\x35\xf4\x06\x22\xdf\xb6\xe7\xb8\xb5\xe8\x6d\x77\x7f\x0c\xae\xb7\xe8\x23\x2c\xe8\x7f\x2c\xb1\x43\xf5\x38\xe9\x96\x85\x9d\x57\x8e\xcf\x4f\x3d\xc4\xbb\xe2\x86\x18\xdc\x48\xf7\x1b\x37\xeb\xe3\x3d\xce\xb6\xc5\xcc\x1a\x3a\x2b\xd1\x0d\xe1\x93\x9e\x28\x4e\xe5\xac\x3c\xcd\xc2\x6e\x22\x5d\x3b\xd9\xac\xe1\x44\x0a\x0a\x0a\x2b\x87\x4d\x7d\x04\xb5\x59\x60\xd6\xe7\x2a\x4c\x10\x97\xe7\x76\x6c\x20\x00\x8b\x71\xc1\xaa\x87\x9e\x5a\x66\xa3\xfc\xb6\x75\x26\xad\xca\x2d\x7f\x98\xa3\x41\x38\xb3\x4d\xb2\xfb\xd4\xee\x80\xc0\x10\x1c\xb7\xe6\xea\xd6\xca\x36\x75\x0a\x74\x13\x10\x32\x69\x7b\xe6\x35\xf0\x95\xe2\xfe\x04\xc6\x6b\x10\xbe\x1c\xf7\xf9\x0d\x09\xc1\x76\x40\xbe\xbe\xe5\xd9\x4a\x67\x1d\x76\x3b\x31\x70\x68\xb7\x02\x04\x50\x02\x75\xda\x32\x5b\xeb\x70\x8c\x07\xbf\x43\x91\x95\x55\x6d\xa3\x97\x0a\xa9\x5e\x48\x85\xbf\x6e\xaa\x7c\x3a\xcc\x7d\xe5\xea\xf4\x4a\x08\x74\xa0\x1e\x38\xdd\xe1\x32\x45\x9e\xa4\xb0\x9e\x6c\x3d\xeb\x55\x2d\xbb\xd3\xad\x7d\xe8\xd5\xdb\x10\x93\x30\x15\x13\xe4\xc4\x73\xa9\x09\x2e\x3e\x51\xfd\x16\xa0\xa6\x1a\xcf\x78\xa7\xa0\x54\xae\xe6\x19\x16\x61\x37\x24\xee\x6d\x12\xfa\x7d\x1c\x89\x3b\x61\xc3\xbf\xff\x6d\x6b\x2e\xc4\x34\xd3\x1e\xdc\xe7\x37\xaa\xf1\xb6\x03\xb8\x4b\x74\xdd\x8b\x94\x42\xfb\x7b\xfc\x10\xde\xcf\x1f\xf3\x9e\xb9\x5a\x3d\xa3\x91\x7f\xfb\x2b\xf8\x49\xa1\x17\xfa\xa6\xe1\xe4\x97\xf7\x77\xf4\xfd\xe9\x93\x6f\x4e\xa9\x2e\xaf\x90\x52\xf1\x22\x6b\xae\x4f\x35\x68\xb2\xbc\x15\x61\xb9\xbd\x43\x95\x4b\x90\x30\x1b\x4f\xaf\x8a\xfd\x1f\x50\xab\x24\x84\x2f\xbb\x7b\x71\xcb\x75\x5b\xc1\x12\xd6\xc0\x5f\x66\xeb\x5f\x22\x2e\x90\x77\xe4\x79\x24\xec\x38\x29\x22\x6f\x58\x88\x3b\x33\xc0\x34\x5a\x27\xe4\xf2\x93\xa2\x47\x26\x9e\xac\xf4\x6f\xd9\xec\x35\x1b\xa0\xf2\x67\xc8\xac\x09\x5b\xe4\xed\x91\x82\x70\xae\x78\xa3\x24\x7e\x56\x6c\x59\x79\xd2\x3f\x41\x3a\xa7\x4f\x30\x4f\x2e\x3f\x49\x76\xc2\x7b\x05\xb1\xd7\x7e\x0c\x6c\x96\x7a\x5d\x25\xf2\xbe\xe0\x78\x81\xf9\xd5\xa4\xae\x31\x9f\x47\x32\xf5\xb2\x0d\xcd\xaf\x1e\xf7\x34\x60\x0b\x31\x77\xf9\xa1\xb3\xb9\x0f\x5e\xf8\x0e\xb1\x22\x42\xf6\x7e\xd9\xce\x3c\xd7\x8e\x6b\xd5\x68\xfa\x3a\xa5\xfb\xbf\x26\xf5\x39\x44\x83\xc9\x97\x1f\xfc\xd9\x40\x09\xf1\xba\x81\x49\xb8\xc8\xe2\x34\x3c\xec\x6c\x9c\x43\x22\xed\x60\xbf\xc8\x36\xe7\xfc\xa5\xc1\xde\x37\x16\xd0\x8b\x95\xec\xbd\x80\x7b\xef\x95\x85\xed\xa7\x3d\x56\x9f\x2b\xaf\x95\x0d\x60\x97\xe1\x54\x03\xf8\x7f\x0f\x55\x10\x30\xeb\x94\x8e\xa0\xb1\x73\x2a\x4f\xca\x8f\x1b\x12\xed\xbc\xb0\x74\x6a\x8d\xe1\xd4\x79\xe8\x32\x96\xcf\xa0\x8a\xc2\x7c\x2a\x05\x28\x54\x77\xd8\x6c\xa9\x64\xb6\xc5\x62\xe2\x6e\x51\x2f\xc8\xcb\x37\x5a\x5b\x9b\x69\x7d\x0f\x9a\x68\xc3\xad\x6d\x5e\x89\x9b\x57\xa3\x4c\xb6\x6d\xa7\x3f\xe4\x01\x2c\x2f\x6f\x6b\x6b\x02\x58\xc5\x46\x74\x06\xbb\x15\x02\x87\xb6\x13\xbb\xb1\x2b\x9d\x2d\xcf\xe4\x7b\x56\x9a\xaa\xba\x58\x37\x8c\x4e\x46\x64\x0c\xf7\x14\xfd\x17\xce\x33\x39\xc4\xc8\x91\x85\x56\xbd\xd1\x7b\x07\x5c\x8f\x14\xa8\x6f\xcc\x14\xac\x6f\x1f\xfd\xca\xfd\x97\x37\x2a\x0f\x1f\x3a\xc4\x5e\xcb\x2e\x66\x9d\xe2\x3d\x67\xf6\xa3\xad\x0a\x3b\x3a\x75\x50\x5b\xb0\x75\x9d\x2b\xcf\x5a\xea\xe5\x07\x50\x04\xc9\xee\xcf\xb8\xe5\x75\x7e\x28\x7b\x9c\xb9\xb4\xb7\xcb\xcd\xca\xfd\x9e\x08\x52\xa4\xfc\xee\xca\x91\xd0\xb3\x25\xa4\x3f\xce\x4c\xd8\xe1\x27\x6d\xa3\x4f\x23\x8d\xc8\x00\x1b\x38\xb4\x78\x0a\x80\xf4\x0f\x24\x1a\x4e\x3e\xc0\x7c\x92\xdf\x96\x5e\x1e\xb9\xaa\x1f\x79\x7e\x72\x07\xdb\x16\x89\x8f\xd7\xae\xdb\x99\x7c\xd6\x2c\x79\x2d\xae\x6e\xfb\xbf\x51\x11\xe9\xa0\xdf\x96\x42\xd3\x4e\xcf\x22\x6e\x0f\xf7\xfc\x06\x8d\x25\x3b\x54\x73\xd3\x03\x95\x11\x42\xd6\xad\x66\xec\x20\x3d\x33\xe8\x45\x58\x58\x99\x37\xa4\x57\x17\x0d\xf9\xc6\x73\x14\x09\xec\x94\xff\x12\x98\x69\x2a\x28\x2a\x2b\x22\x41\x43\x2e\xc2\xd5\xda\xa5\x18\xed\xb8\x2b\x9d\x3a\x8f\x82\x9f\xd3\x57\x52\x5e\x6d\x91\x53\x51\x4d\xc3\xc0\x9f\x18\x7a\x2b\x83\x0c\x2e\xa5\x20\xee\x73\x53\xda\xe6\x10\x21\xda\x46\x5d\xfe\xfb\x62\x5a\x78\x4c\xb7\x7d\x4e\xc8\xe2\x4e\x8f\x0a\x81\x01\x24\xeb\xd0\x70\x67\x76\x9d\x87\x45\x9e\x0c\xe9\x6d\x41\x7e\x44\xaf\x8c\x82\x50\x68\x23\xe3\xa2\x2e\xe4\x30\x6b\xb3\xc3\x0f\xc8\xe3\xb2\xa7\xc4\x6f\xe2\xb7\x6e\x8d\x7f\xf3\x3f\xef\xcd\xd6\xad\x6c\xff\x0f\x8d\x89\x2f\x15\x4f\x78\xbf\xf9\x24\x5d\x93\x0c\xd7\x4c\xa2\x60\x1a\x2e\x5c\x28\xa6\x50\x00\x82\x2b\x3a\x72\x6a\x7b\xd4\x78\x7d\x63\x4f\xfa\xee\xeb\xfd\x23\x56\x20\xa2\x06\xfb\x1d\xcc\xa5\x29\x9d\x3a\x0c\xcf\xee\x66\xa0\x9e\xa8\x28\xc3\xbd\xf2\x51\x1e\xea\xf0\x20\x1c\xf4\xc7\x80\xde\x2a\xa9\xca\x5b\xc3\xd5\xb5\x9f\x92\xac\xe1\x7e\xc4\x2d\x60\x68\xf8\xc0\x31\x29\x3a\xbf\x88\xc3\x05\x86\xd2\x99\x9c\x18\xb7\xc2\x6e\x0f\x40\x2d\xc8\xce\xdd\x81\xda\x27\x3e\x63\x13\x28\xb2\x9f\xf1\xef\xcf\x3e\x2c\xa6\xa9\xb1\x91\x55\x30\x8e\x2e\x51\x9f\xee\xaf\x7f\xee\xdb\x2f\x8c\xa4\x73\x55\x2a\xb6\x6b\xa2\xde\x91\x52\x31\x26\x26\x3b\x7b\x9c\x3d\x3c\xa4\x1e\x09\x51\x01\xa5\x16\xb5\x90\x64\xc3\x85\x52\x15\x18\x25\xa4\x95\x1d\xa5\xb1\x52\xaf\x09\xc0\xa4\xbd\xc5\xe2\xa7\x46\x40\x22\x12\x89\xce\xf8\x7a\x86\x86\x45\x47\x31\xe3\x4d\xeb\x7d\x3c\x2a\x3a\x51\xdf\x15\x35\x09\x83\xd5\x7a\x57\x9a\xc1\xa3\x0b\xd5\x9f\xa8\x90\xf8\x44\x16\x8b\x0e\xd7\x4b\x6a\x7e\x1f\xdc\x07\x5f\xbe\xf0\xff\x1f\x0c\x1e\xf3\xcf\xff\x0c\x81\xc2\x5b\x23\xa9\xd7\xc7\xcc\xe1\x10\xbc\x5a\x06\xb7\xee\xda\x2f\xc0\x84\x10\x39\x58\x4d\x46\x9d\xa8\xdb\x87\x7b\x12\xe0\xc1\xdc\x37\xf2\xfe\x1e\x02\xc8\x99\x90\xb1\x9c\xda\xa9\xe4\xf4\xcf\xe2\x1b\xb7\x2b\x8a\x05\x68\x86\xb3\xc3\xc3\xff\x73\x44\x66\x21\x21\x2f\xd7\xc5\xda\x79\xc6\xd9\x0b\x7b\xdc\xb8\xf4\xd0\x3d\xf5\xee\x67\x30\x3c\x89\x15\xcc\xef\x29\xe5\x38\xa0\x34\xb0\x07\x54\xec\x4d\xca\xa6\x7a\x6a\xb7\x5e\x4b\x22\x19\xc3\x7f\x03\xe2\x24\x4c\x9f\x2b\xca\xdc\x8f\xbf\x21\x5e\xa5\x86\x5c\x2a\x92\xfc\x64\x25\x5c\xc1\xff\x25\x1e\xa0\x8a\x4e\xb9\x18\xcc\x73\xbb\xe4\xc6\x24\x84\xcd\xcb\xf8\x5a\x1b\x96\x94\x3a\xcb\xbc\x18\x04\x8d\x86\x26\x85\x2c\x13\xc0\x74\x0c\x27\x55\xdc\x7d\x94\x7e\xb4\x23\xce\xce\xe2\x0a\xbd\x5c\x11\xe8\xb2\xe9\x80\xf4\xc9\x9d\xb8\x8c\x2f\x21\x2d\xec\x6d\x59\xc2\x56\xf3\x42\x2d\x45\x69\x38\xc9\xb7\x39\xac\xd0\xc9\x32\x3c\xc7\xc8\x53\x7e\x4e\x09\x4b\xdb\xa9\xc4\x70\xd3\x27\x87\xc3\x82\xa0\x87\x07\x80\x2a\x91\x15\xd6\x9c\xd6\x77\x63\x57\x46\xdf\xf6\x63\xa7\x1e\xa8\x9e\x4b\x3f\xc2\x5a\x41\x4a\x10\xd9\xc6\xba\xa5\x70\x37\xd4\xb7\xbc\xf3\x62\x20\xd1\x69\x87\xf8\xf6\xcb\x4b\x4c\xd2\x60\x5d\xc7\xeb\x67\xc9\x8e\x70\x24\x6c\x29\x87\x71\xfc\x0b\xb9\xa2\xc1\xb1\xd2\x8d\x56\xb1\x42\x1f\xa6\x43\x8f\x2a\x63\xef\x80\xfc\x4b\xaf\x69\x72\x7a\x7f\x21\x91\x33\xe8\xda\x87\xb6\x1c\xb6\xb3\x7c\x30\xe3\xdf\x46\xb3\x8a\x0d\x60\xf4\x07\x5a\x9b\x42\x04\x99\x51\x5e\x9e\xf6\x7a\x7d\x22\x21\xd5\xa9\x4d\x8f\xae\xf8\x72\x22\x0b\xbf\x5b\xde\x19\x52\xb2\x8c\x1a\xef\x91\xc0\x4d\x3f\xed\xc7\xf0\x0f\x86\xb8\x20\x13\xbd\x1f\x37\x96\xec\x0b\xe1\x09\x87\x64\x4c\x64\x1c\x48\x2b\x58\xd3\xe9\xf7\x54\x70\x9d\xbb\xb6\xf5\x97\x1f\x3b\x9d\x8c\xdf\xbb\x57\xb5\xcf\xcf\xdb\x33\x8f\x86\x6b\x3e\x6a\xfa\xa7\x57\x5d\xa0\x5b\xf7\x05\x01\xfa\xd1\x82\x97\x51\x54\x7e\xf8\x07\x37\x39\xb5\x45\x9d\x3c\x9b\x72\x05\x95\xa3\xa3\x6a\x4f\x02\x3e\xc2\x33\xaf\x53\xd1\xa7\x8a\x42\x30\x8f\x6e\x2b\xf9\x0f\x5c\x71\xc4\x5c\x58\x68\x1d\xc0\x3b\x65\x64\x91\x87\xe0\x49\xe6\x78\xf6\xe5\x36\xe5\x3e\xf1\xa7\x20\xa1\xa1\x58\x43\xa7\xfd\xa0\x56\x1d\x72\x01\x93\x70\x4e\xa6\x46\xaf\x13\x95\x4b\xef\x7c\x39\x39\x51\x50\xe7\x98\xf6\x1a\x62\x61\x2d\xfd\x7e\x0a\x24\x15\x02\x91\x47\x16\x6e\x58\x90\x80\x3f\x3a\x61\x2e\x70\x01\x66\x2e\x1f\x1e\x02\x0b\x21\xc2\xae\x43\xe1\x66\x88\x00\x84\xdf\x84\x5a\x0f\x24\xf9\xdc\xef\x80\xfa\xbe\x17\x0a\xea\xe1\xd6\xdd\x9e\x5c\xd8\x89\x6a\xb6\xb4\xab\x8d\x72\x76\xd2\x62\x9b\x31\xfa\xe4\xc0\x46\x34\x0b\x0a\x25\x42\x20\x10\x08\x1f\xb9\x42\x0d\x6b\x22\xbd\x72\xb2\x2c\x1d\x24\xa7\xf4\x24\xec\xc9\xfd\x5c\x89\x37\x4b\x95\xad\x35\xde\x73\xf7\xf3\x6e\x5f\xc4\x0c\xbe\xd1\x2b\xf5\xf5\xb1\xa3\x15\x76\xb5\xbd\xa7\x20\x8a\xf2\x50\x24\x92\xcf\xa9\x33\xcc\x2f\xa1\xa5\x18\x78\xbe\x1d\x3e\x4a\x82\x86\x61\x77\x2f\xcb\xf2\x54\xce\x69\xbb\x58\xea\x86\x46\x91\x4e\xad\x87\x29\x40\x1f\xd7\xcc\x1e\x1e\xd4\x85\x41\xfc\xa1\x02\xf5\xa4\x4b\x24\x72\x3e\xfa\x47\xd7\x6e\x63\x09\x51\xee\x52\x5d\x0d\xa1\xbf\x5d\x65\x5c\x15\x43\x20\x10\x77\x10\x5e\xea\xca\xba\xcd\x00\xf0\x91\x9e\xaf\x57\x36\xde\xaa\x7d\x4c\x42\x7c\xf9\xe8\xd2\xb1\x99\xa8\xb3\x36\x31\xf3\x9d\x52\x0c\x0d\xb4\xd1\x70\x6e\x3d\x92\x87\x0c\x1d\x0c\x62\x10\x94\x1d\x3e\x40\x6b\x06\xb3\xfe\x16\x44\xb6\x52\xd7\xd7\xc6\x8c\x42\x0c\xc0\x3c\x64\xeb\x16\x44\xcc\x4f\x4b\x9d\xe7\xde\x67\x7a\x4a\xeb\x32\x85\x6d\x6f\x05\xbf\xdd\x7a\x4d\x6e\x05\x45\xe7\x7d\x45\x4b\x47\xc0\x57\x94\xe4\xb7\x94\x48\xa1\x43\x83\x09\x69\xa7\xa2\xf3\x33\xb3\xb5\x05\x3c\x05\x49\x3e\xed\x4d\x19\x51\xfb\x81\x9b\x82\x6e\x85\x68\xe0\xee\xa9\x1e\x35\xeb\x30\xad\x16\x71\x62\x39\x6a\x0b\x43\x5f\xc0\x7e\x50\xea\x6f\xd6\xf5\xf0\x61\xad\x99\xca\x80\xc0\x31\xf0\x94\x3e\x62\xd7\xa9\x8a\x91\xd3\xdc\x69\xd6\x76\x86\xff\x9b\x36\x33\x19\x75\x5f\x08\x9c\xc9\x3b\x66\x6a\x1e\x03\xb8\x2f\x31\x27\x79\xb0\x19\x39\xb7\x44\x38\x9b\x61\xd1\x20\x05\xad\xba\x6e\x2b\x16\x2e\x5a\xc0\xf2\x18\x66\x71\xff\xb9\x3e\xc1\x5a\x0e\xcc\xc3\xf3\x54\x90\x9a\x16\xce\x9f\xce\xac\x04\xf5\x73\x36\xa7\xea\xe9\xcb\x1a\x0d\xd7\xee\x1f\xed\xa0\x77\xa3\x56\x0c\x1f\xac\x40\x29\xf8\xc1\xea\x08\x81\xf6\xe0\x77\x17\x31\xa8\x11\xfe\xbb\xb3\x60\xd2\x68\xef\x09\x03\xa6\x7c\x5a\x77\xb2\x90\x8b\xaa\x86\xf7\x55\xb3\xff\x69\xf3\xb7\x0f\x1e\x61\xae\x7f\x7b\xf8\x5d\xe7\xb2\xfe\x22\xaa\x97\x10\x35\x0b\x88\x58\xf7\x20\xaf\x4d\xf7\xa1\x44\x58\x66\x6c\x7c\x36\xcf\x62\xa6\xc9\x33\xcf\xd2\x5a\x1f\x3d\x63\xa1\x64\xf8\xc7\x86\x2f\xc0\xe2\x62\x57\x4f\xfc\xd0\xc5\xe2\xda\x67\x16\xc4\x4c\x20\x15\x0b\x0c\xd8\xc3\x81\x5e\xb0\x0c\x7e\xd0\x87\x6f\x94\x3b\x4c\x78\x9f\xd4\x30\x65\xb7\x5f\x08\xca\x5a\x9a\x92\x2c\x99\x90\xbb\x43\xc3\xb5\xdd\xb7\x25\xf7\x22\x98\xc4\x08\x87\xb9\x11\x28\x1b\x7b\xc1\x16\x9a\xcc\x3e\xd4\xed\x39\x82\x36\x07\x3f\xc2\xc1\x83\x04\xa5\x03\x98\xbc\x05\xfc\xfb\xef\x85\xe9\x43\x87\x8e\x60\x06\x19\x19\x2f\x87\xa0\xc6\x7d\xbd\x47\xd7\x28\x10\x01\x06\x3f\x04\xa4\x00\x11\x94\x0c\x9a\x5a\x69\xb4\x17\x09\xb9\x36\xfd\x6d\xfd\xf2\xb9\x09\x76\x7b\x4c\xaf\xc7\x33\xec\x5a\xab\x5b\x61\xa3\x90\x78\xb7\xca\xd9\xfa\x27\xb0\x39\x36\x12\x21\xa7\xb4\x31\xb6\x32\xb1\x17\x27\xe9\x70\xbd\xc0\xc8\xcd\xa5\xe6\x5b\xa4\xcb\x94\xc6\x1e\x29\xcd\x29\xb1\x4c\x40\xc6\x99\x56\x7e\x2b\x72\x98\x9e\xae\x32\x9f\xd5\xca\x91\x07\x6b\x6b\x83\xb5\x39\xf2\x03\x5a\xed\xe6\x09\x30\x4e\x47\xbb\x85\x86\xcb\x32\x83\x35\x72\xd9\x61\x51\x4a\x16\x0b\x0e\xc3\x23\xce\xfd\x7f\x2b\x8e\x16\x5a\xc1\x2c\xaa\x4f\xa8\xe9\xcf\x68\xed\x4f\x0d\xe8\x3a\xfa\x1a\xd6\x58\x15\x07\x3d\x60\xa7\x4f\xbf\xe6\x30\x88\xc1\x0c\x8e\x14\xdf\x8b\x1c\x1c\x8c\xbc\x57\x3c\xf2\x4e\x1d\xcc\x3b\xc0\xca\x7b\x5b\xb3\xbe\x1e\x9c\xfc\x1c\xd3\x65\x30\xc5\x5e\xb7\x47\xe7\xc8\xce\xdd\xac\xc0\x2d\x7b\x0c\x3a\xbe\x26\x1c\xdc\x96\xf5\x56\xa1\x16\x19\x4f\x1e\x3d\x74\x5d\x86\xf3\xbc\xb5\xc7\xd1\xf6\x34\xc6\x8f\x4b\x46\x7d\x31\x51\xac\x57\x01\x50\xca\x79\xe2\x13\x40\x4f\xa5\x7e\x6b\xf7\xf1\xa6\x5b\xef\x2b\x81\xb9\x63\x9f\x11\x0c\x04\xc0\x14\x44\x99\xc6\xca\xf7\xb7\xde\x40\xf9\x8d\x6b\x2c\xbf\x15\x55\x42\xd4\x23\xc5\xb1\x26\xd6\x72\x43\x8c\xb8\x65\xd6\x2c\xe4\x2f\x61\x74\x5b\x10\x58\x4f\x64\xeb\xd4\x9a\x7b\x2d\xfe\x40\xf2\x61\x0b\xa4\x14\x19\x69\x60\x20\x51\xee\xbc\x2f\xb0\x0d\xa2\x06\xa9\x42\x82\x58\xee\x18\x49\xf5\x48\x55\x88\x2c\x7d\xa3\xc8\xa4\x5d\xb4\x0b\x4f\x79\xaa\x2c\xae\xaa\xde\xed\xf4\xb9\x1b\x74\x47\x64\x08\x14\xb7\x8a\x9f\x2e\x40\xe7\x87\xeb\xbe\x84\x8c\xac\x00\xf6\x7d\xef\xdb\x80\xf9\xee\x1a\xc7\x0f\x39\x53\xad\x55\x12\xaf\x57\x00\x81\x21\x4f\xca\x1a\xa2\xd2\x95\xa4\xe9\x60\x68\xc0\xba\x3f\x9b\x2f\x98\x3d\x9f\xa4\xf3\x0a\x20\xf0\x6f\xc7\xf9\x22\xf7\x99\x1a\x06\x8f\x3a\x38\x82\xf8\x41\x36\x02\x56\x4b\xc6\x23\xa6\x91\x58\xae\x1f\xb6\x88\xa0\x89\x49\x71\xf4\x71\x8f\x4b\x85\x8e\xed\xdc\x79\x2c\xd1\xb8\x83\x3a\x5e\x50\x41\x75\x10\x7e\xdf\xdd\xf2\x5b\xb0\x01\xb9\x35\xa0\x80\xdf\x3c\x8b\x60\x64\x91\x99\x6c\x32\x75\xd8\xda\x1d\xff\x76\x0d\x36\x9d\x35\x62\xd2\xfd\x0b\x99\xc7\xad\xad\xb0\x81\x4b\xd3\xf7\x76\xeb\xfc\xed\xd1\x16\x8f\x6f\x0b\x88\x80\x8a\xae\xcb\x0d\x9d\x6f\x13\xa3\x99\x0a\x49\xd1\x90\xa5\x38\x10\x8a\xe8\x10\x30\x8a\xe8\xc8\x4d\x8c\xfc\xf9\xed\x09\x7f\x53\x7f\xc9\xd8\x17\x12\x4e\x1f\xf6\xfc\x05\x96\xd4\x26\x51\xfd\x25\xc2\xc2\xd9\xf8\xb6\xb6\x78\x5b\x1e\x22\xba\xa5\x3a\x86\x76\xcb\x45\x08\x62\x0e\x4a\xda\x93\xf5\x30\x90\x94\x4b\x22\x90\x60\xe4\x47\x7f\x5e\xba\xa4\xe0\x21\xf1\xdc\xbe\xf5\x14\x33\x23\x47\xb2\xcc\xc7\xfd\x8b\x57\x54\xa0\x62\xf8\x41\xc3\xbd\x27\x9a\xf2\xf8\xef\x34\x14\x49\xce\xc3\x49\x6f\xbe\xa1\x35\xf5\x4b\x40\xb3\x64\x29\xc6\xbb\xa2\x48\x39\x65\x57\x1a\x99\x60\x9c\xa3\x70\x92\x5b\xcb\xf1\x27\x3a\xed\xf1\x71\xce\x5c\x7d\xde\x01\x8e\xc7\x34\x3d\xee\xb0\x40\x44\x37\x7f\xe0\x5a\xc0\xf3\x13\x99\x77\xb6\x16\x59\x35\xe5\xe6\x9e\xde\xe9\x1b\x30\x14\x36\x93\xff\xbe\xd3\x98\xcd\xea\xd0\x92\x81\x20\xb4\x2a\x29\x03\xb3\xe8\xec\x80\xf3\x7a\xb7\x47\x16\xea\x53\x3c\x01\x2e\x46\x39\x22\xe7\xe0\x43\x61\xce\x21\x7a\x84\xae\xa3\x8a\x5b\xbe\x7e\xc5\x50\x3e\x9a\x92\xdd\xb4\x63\x03\x91\xd8\x5a\x42\xff\x8f\x62\xcc\x34\x6c\x1e\x10\xc2\x92\xd9\x9f\xe3\xdd\x73\x9f\x9d\xeb\x9b\xd4\xb3\xdc\xbb\x59\x89\x16\xa7\x81\x6a\x28\x4a\x95\xb4\xd5\x9c\x1b\xb2\x3a\x88\x71\x5a\x6f\x25\x39\x22\x20\x8c\x15\x9f\xc9\xe2\x85\x5d\x63\x2c\x3a\xb7\x5a\x72\x15\xf4\xa0\x50\x41\x3c\xd3\x05\x40\x70\x11\xc4\x2f\x8e\x22\xfb\x9c\xc6\xd4\x0d\x9f\x8f\x67\xcb\x5d\xbf\x5b\x75\x11\xb3\x6f\xc5\x57\x9c\x28\xbe\x41\xc7\xb8\x33\x61\x49\x83\x4c\x1c\x2f\xb1\x08\x8f\x29\x5e\x6a\xc1\x8b\x5f\x13\xd9\xee\x73\x13\x93\xc7\x3b\x91\x5f\x13\x22\xfe\x80\xad\xd5\x14\x4b\x95\x59\xb5\x09\x09\x6d\x11\xc4\x84\x9a\x22\xb8\x6f\x6a\xe9\xcd\x3d\x31\x48\xf6\x9e\x66\xc6\xce\xa4\x3b\x46\x20\xcf\xd9\x0d\x55\x5c\x56\x3e\xb3\xf0\x1f\x7b\xc0\xc5\x39\x59\x63\x36\x4a\x9c\x3f\x78\xde\xcc\x80\x57\xf3\x30\x4d\x2d\xab\xa5\x37\xd2\x1a\x1f\xd8\x99\x9e\xa2\xee\x48\x72\x56\xa8\x32\x0a\xb7\x91\x14\x1d\x49\xea\xb4\xee\x3c\xfb\xe0\x08\xeb\xe2\xe6\x28\xb7\xdc\xe6\xb9\x15\x06\xed\x0f\x9c\x0d\x35\x75\x79\x77\x6a\x42\x74\x85\xcb\xff\xe5\x1c\x8a\x06\x41\x91\xb0\xaf\xd6\x8f\x6f\x17\x0f\x86\xf5\x5c\x65\x1b\x33\x59\xe1\x8e\xfa\xb5\x4c\x5c\xee\xca\xba\x6b\x6c\x23\x73\xff\x73\xd0\xcb\x7f\x94\x0e\xcb\xaf\xcc\x1b\x14\x47\x13\x0e\xe8\x62\xff\x2f\x6b\xe6\xd0\xc4\x42\x5a\x30\x96\xf2\x72\x15\xce\x44\xb9\x68\x85\x44\xd8\x1a\x71\x39\xe1\xfe\x57\xeb\xf3\x9f\xd2\x7a\xb3\x43\x1d\x8c\x1d\x38\x20\x40\xac\xc9\x13\x00\xd3\x43\x17\xea\x05\x34\x91\x84\xb6\xe2\x9c\xf1\x15\x8a\x2e\x37\xa3\xc2\x55\x9b\x7b\x5f\xa7\x5c\xd1\x10\x80\x8f\x5f\x7d\x23\x21\x7c\x7a\x94\x28\x31\x32\xb8\x4f\x87\x8f\x9d\xaf\x04\xba\xb1\x64\xd9\x40\xfa\x43\x3f\xf9\x78\x37\xee\x0b\x4e\x2e\x3f\x79\x93\x6a\x76\x47\x43\xf4\xfd\x02\xe5\xd2\x8c\x8a\xb9\x22\x05\xfb\xca\x9a\x14\x59\xbc\x6c\x43\xaa\x60\xbd\x86\xc8\x32\xeb\x27\x25\x12\xc6\xf7\xec\x80\x62\x5b\x69\xdc\xab\x36\x87\x89\xe9\x68\x4c\x46\x92\x0a\xad\x19\x48\x4f\x5d\xbd\xfe\x84\x86\xde\xe7\xa3\x0d\x8d\x4d\x15\x9d\xe1\xee\x22\xdb\xdc\x55\xed\xd2\x31\x9f\x50\xe0\xd5\x0a\x0f\x5b\x10\xf2\x1e\xb9\x8d\x39\xaf\xb2\xa4\xc8\x13\x06\xfb\xfd\x96\xd2\xc2\x58\xac\x9d\x0d\x14\xb9\x7c\x55\xee\xaf\xb5\xea\xc3\x42\xd8\xf1\xb9\x1c\x89\xe9\x20\x53\x7e\x7a\x7c\x2e\xc2\x34\xfc\xd3\xef\x54\x50\xbe\x83\x7b\x2e\xf5\xa5\x62\x39\x8e\x70\xde\x79\xcc\x2d\xbe\x7e\x00\x5e\x7a\xac\xb3\x0a\xfa\x5c\xfa\xd6\x40\x15\x4a\xa8\xca\x58\x60\x6e\xee\x62\x10\x44\x57\x70\x6b\x0e\x39\x5f\x63\x2c\x1a\x3a\xb1\x32\xe3\x59\x61\x01\x11\x88\xca\x46\xce\xbc\xd2\xa6\xd7\xad\x14\x62\xd4\x31\xba\xfa\xf6\x44\x4c\x63\xf6\x61\xf5\x75\x22\xd2\x9d\x54\xe9\x54\x0c\x93\x37\x2b\x6f\x76\xfd\x04\x7a\xa0\x1f\xd3\x80\xc6\xa3\x0c\x3c\x8e\x6e\xcb\x73\x69\x44\x77\x1e\xd9\xa1\x2f\xb3\xc5\xa3\x07\xc3\xfa\x9b\xb1\xf0\xd5\x13\x33\x6d\x57\x2e\xc9\x7b\x32\x2b\x07\xd8\xa7\xac\xee\xcb\x74\x92\x17\x62\xf0\x80\x95\xc5\x4a\x9d\x82\x04\x96\x63\xd7\x0b\x04\x22\xea\xbd\xcb\x05\x39\x0b\xc5\xce\xc3\xe4\xca\x93\x19\x9b\xa2\xf3\x0b\xb9\xd3\x38\xe3\x6c\xc9\xad\x40\xb5\x9c\xd1\xa4\xcc\xa4\x25\xae\x3e\x69\xf0\xeb\x16\xfa\x8e\x05\xa7\x4f\x17\xe0\xf4\x01\x02\xc7\xc0\x81\xde\xd9\xdf\x14\xf6\x7e\x97\xd9\x7d\x24\xb9\xe8\xfa\x66\x7d\x65\xa6\xf3\xe7\x5d\xa6\xd4\xb7\x0e\xbb\xef\x39\x93\xa4\x39\x79\x32\xa9\x36\x57\x4c\xe2\xba\xff\xf8\xb7\x75\xe5\x53\x0b\x4d\x76\xfa\x89\xc6\xda\x71\xa1\xd2\x39\x74\xd9\x29\x69\x47\xd7\x89\xe3\xe8\x30\xa6\xce\xef\x87\x36\xf8\xf2\xa5\xa7\x47\x09\x2d\x30\x49\xe5\x00\x23\xc8\x17\x19\x75\xe0\xc9\x13\x31\x97\x8d\x7d\xc5\xad\x5b\x63\xb4\x02\xc1\x93\x7a\xa9\x94\xa1\x36\x12\x57\xc5\x81\x21\x2d\x70\x69\x3f\x16\x4b\xa1\xa4\xa4\x9c\x38\xfe\x27\x60\xb8\x50\x43\x72\x72\xbb\xf1\xec\x19\xd3\x13\xc7\xcf\x70\x5c\xfc\x8d\x9b\x42\x3b\xf9\x6b\x16\xc9\x03\x69\xfe\x85\x7e\x38\xd4\xdf\xaf\x49\x88\x87\x7b\x27\xd1\x44\x05\x89\xf1\x83\xd1\xf2\xca\xaa\xf1\x9c\x4a\xe0\x13\x22\x61\x6d\x40\x21\xaf\x42\x95\xb6\x53\xd2\x82\xb1\xb1\xfc\x20\x8f\x3f\x1f\x1f\x7b\xbe\xe3\x1d\x01\xe6\xc5\x82\x1a\x6b\x7d\xee\xa4\x4d\x71\xba\x57\x85\xc5\xce\x57\xde\x2c\x2f\xbf\xf5\x1b\xa0\x52\x2b\x4f\xd8\xec\x43\xfd\x5b\x12\xc6\xfc\x91\x59\x77\x33\x7c\x63\x7f\xf8\xcd\xc2\xfc\xe4\x6b\x3d\x7d\x0b\x51\xbe\xff\xb6\xdb\x63\x3b\x59\xa9\x34\xc0\xe5\xe2\x19\xfb\xf6\xce\xcc\x15\x87\x07\xfb\x65\x64\x36\x6e\xaa\x7f\x91\xed\x93\xfb\xda\xaf\x6c\x63\x60\xe3\xd7\x2c\xbd\xc9\xa9\xdf\xa4\x40\x15\x07\x0f\x37\x69\x4d\x8f\x91\x3d\x99\xcb\xe2\x47\x73\x9e\xad\x34\x67\x03\xea\xe7\x85\x25\xd6\x72\x47\x8e\x06\xa6\xdd\x70\xf4\x48\xea\xaa\x43\x1c\x03\x08\x35\x70\xbe\x23\xb3\x82\x53\x2f\xda\x9d\x2a\x91\xa6\xe4\x09\xcf\x93\x5d\x05\x36\xf2\x0f\x83\x1f\x1c\x7d\x17\xfc\x4e\xe0\x78\xfe\x9c\xbc\xed\xbb\xa1\xcb\xf7\xbd\xbc\x8d\x8b\xcb\x45\x72\xae\x50\x3f\x53\x72\xca\xee\x62\xb7\xfd\x8f\x4f\xd6\x1c\x7b\x16\x51\x80\xad\x70\x89\xc9\xd8\x68\x2a\x4c\xb5\xfe\xd4\x16\x0f\x62\xce\xfd\xef\x8e\xcc\xfc\x59\x0c\x53\xeb\x6e\xcb\x0d\x2f\xfb\x42\x5a\xfc\x3b\x0b\x7d\xd6\x6d\x7e\x39\x61\xb9\x34\xb2\x99\x1d\xac\xa2\x2d\xc2\x68\xac\x5b\x87\x0b\xb2\xd7\xf4\xe9\xcd\x8e\x1f\xcf\xad\x96\x4a\x24\xc5\x31\xb3\x05\x98\x00\x4e\xc7\x26\xcd\x7c\x27\xbb\x63\xc7\xe4\xac\xa5\x2f\xca\xba\xe9\xe7\xfc\x26\xe1\xa7\xa5\xb3\x2c\xa7\x1a\xb9\x2f\x9e\x39\x34\xec\x9d\x0a\xe2\xb3\x67\x87\x91\x29\x19\x5e\x44\x06\x14\x82\x0e\x08\xc7\x2f\xad\x15\x50\x22\xb8\xdc\x88\x45\x64\xd3\xbd\x0b\x1f\x26\x1d\x08\x53\x23\x96\xd5\x02\x70\x4b\xa0\xc8\xef\x80\x44\x1e\x98\xdb\x01\x44\xfc\xa4\x0a\xfb\xc8\x9a\x0b\xfc\xf0\xea\x1a\x4d\x88\x39\x42\xd6\xc5\x34\x47\xe1\x1e\xf3\x65\x40\xf1\x66\x8e\x7e\xde\xbb\x3b\x03\x61\x7e\xb7\x57\x4f\x6b\x0a\xd7\x43\x4c\x01\xe8\xf1\x8e\x20\x54\x86\xe7\x95\x7c\xa0\x3b\x96\xdd\x76\xe8\x29\xe2\x90\xb3\x61\x48\x16\x92\xb7\x0c\x96\xc0\xb9\xf0\x7a\xae\x3d\x6c\x79\x4e\xfa\x14\xa2\x53\x5e\xfa\xeb\x06\xdf\x78\x47\x87\xe9\xaf\x30\x18\xaa\x05\x66\xdf\xc6\x78\x21\x65\xb8\x03\xc6\xb8\x2e\x9a\x39\x95\xa6\xc0\xe2\x5c\x28\x0a\x07\xff\x28\x6e\x6f\x41\x69\x4f\xf9\x40\x75\x74\x3a\x29\x93\x53\xd8\x50\xd6\x55\x36\xbf\x26\x2a\xbd\xdf\xf6\x42\xf2\x76\xf5\xdd\xed\x70\x0c\x46\x7e\xb3\x5b\xc5\xc3\xc1\x1a\xba\xa3\x40\x0e\x8b\x08\x87\xe1\x1c\x5d\x1c\xdc\xcf\xed\x4a\x81\x15\x18\x98\x61\x30\xc8\xc8\x64\x54\xa5\x78\xcd\x8a\x5a\xad\xd0\xa1\x0b\x8d\x98\xe4\x71\x1c\x30\x2e\x8e\x57\x32\x76\xe1\xcd\xf7\xc2\x31\x68\x64\x8d\x2d\x43\x5a\xf1\xa4\xbf\x56\xd5\x41\x40\xb5\x47\x84\xc3\xb1\x7c\x67\x3b\xee\xe5\x3d\x19\x45\xd6\x18\x34\xca\x27\x4b\x3c\xfc\x40\xad\xba\x7c\x08\x8b\x98\x34\x5e\x80\x71\x09\x7c\xe5\x5c\xe5\x7f\xfb\x86\x56\x15\x1f\xe2\xed\x1b\x9f\x31\x70\xa0\x0f\x25\x5b\xc6\x23\x53\xd4\xef\xe0\x23\xec\x46\xe9\x8b\xfa\xe2\xf7\xcf\xd8\x23\xb2\xa8\x2d\xa6\x43\xa4\x49\xf1\xda\xcc\xed\xcc\xa5\xbe\x2b\x5c\x16\x29\x2c\xed\x57\x79\x79\xf2\x3a\x23\xec\xdf\x73\xed\xf7\x51\xa5\xbc\xa8\x98\xe5\x50\x5e\x3c\xf1\xf2\xdf\x45\xfe\x2f\xeb\x50\x98\x9e\xac\x94\x4e\x79\x87\x84\xba\xf3\x88\xff\xdf\x9e\x92\x3f\x29\x81\xe8\x65\xc0\xfd\x53\xfd\x92\x7f\x62\x3a\x09\x6a\x1e\x77\xa5\x6e\x61\xa6\x8d\xd2\xee\x5c\xb8\x54\xc7\xf7\x5d\x6e\x3e\x2c\xb2\xe6\x4a\x7a\xa3\xbb\x8d\x46\x20\x22\xe7\xa9\xbc\xa2\xc6\xb9\x30\x2d\xbc\xc9\xe1\x68\x8b\x00\x87\x96\xfa\xcb\x71\xf3\xb4\xb3\x28\x42\x3f\xd6\xe9\xe6\x5a\x08\x7b\x29\xb2\xb1\xcb\x36\x7b\xb3\x6f\xab\x8d\x9b\xdd\x94\xee\x98\xda\x32\x57\x43\xc1\x06\xdd\x74\xcb\x8b\x82\xdd\x67\x82\x35\xf3\x54\x38\xbe\xc3\xf6\x8e\xb0\xbe\x2c\x2b\x4f\xcd\x65\x30\x1b\x48\x55\xe0\xdc\xba\x07\xb7\x76\x52\x72\x41\xd6\x44\x8f\x0d\x99\xa7\x36\x91\x86\x12\xdb\xc5\x99\xa9\xff\x21\x16\xe8\x02\x04\x86\x44\x29\x6e\x3a\xa9\x9f\x6e\x63\x09\xa5\x61\x8b\xea\xb5\x3d\x32\xb6\xdd\xab\xef\xea\x1d\x77\x73\x39\xf4\x4f\xdd\x59\xd8\x56\x40\x5e\x8d\xe3\x58\x49\xfb\x03\x7b\x2b\x8b\x12\xea\xfb\x0b\xd5\x23\x96\xe7\x62\x9f\xae\x9e\x89\xed\xb7\xaa\x57\xf5\x16\x1b\xa0\x79\x15\x2b\x02\x40\x25\x0d\xb1\xaa\x30\x2e\xb9\x7b\xba\x27\x7e\x7b\x64\x84\x7a\xd2\x72\xed\xd3\x2f\x11\xdd\xdb\x8e\x6c\xf3\x7f\x9e\xbf\xe5\x9d\x4c\x8d\xfe\x18\x2a\x62\xdb\xd9\x64\xd2\x5f\x07\xbd\xbf\xa0\x12\x9c\x0e\x45\x63\xbd\x66\xff\xd7\xee\xe1\x15\x61\x93\x22\xc3\x73\xd8\xb5\xe2\x2d\x09\xfb\x9d\x76\x05\x14\xe7\x24\x95\x0e\x39\x35\x86\x5d\xdc\x26\x2c\xa7\xcc\x8b\xdf\x50\x17\xac\xcb\x4c\xae\x59\xe1\xdf\x24\x38\xf0\xc0\xa0\x3e\xf6\xd2\x0f\xd1\x3d\xf8\xc2\x5b\xc7\xd6\x77\xdc\x3c\x06\x2a\x09\x43\x18\x7e\xce\x24\x02\x5c\x98\xa5\x9e\x59\xc9\x59\x37\xff\x9b\x57\x24\x59\xe1\x93\x7f\xb1\xac\x5e\x90\x9c\x71\xe2\x46\x25\x45\x85\xd6\xd9\xd7\x41\xd3\x14\x57\x13\xb2\x51\xa9\x14\x37\xca\x7b\xd5\xf0\xe8\xad\xd1\x45\x48\x32\x87\x43\x06\xe6\x29\x43\xda\x1b\x8e\x75\xcd\x94\xbc\xe7\xfa\x12\x2e\x77\x39\x41\xc5\x59\x14\xc8\x93\x92\x4b\x9a\xb1\x12\xd6\xff\x81\x9c\xb8\x63\xea\xeb\x99\xeb\xc9\xe7\xe5\x64\x0a\xd1\x49\xcc\xa3\x97\x3c\xe5\x1b\x0c\xf1\x8e\xd7\xe3\x1d\x77\x82\x94\x1a\x54\x50\x4e\xe5\x90\xfd\x08\x77\x62\xb2\x8f\xbb\xd4\xa1\xbc\xa2\xb2\x22\x7e\x48\xa7\xd0\x36\xc8\x36\xca\x5f\x02\x10\xde\x30\x77\x6e\x44\x4b\x41\x41\x4e\x8e\x91\xde\x65\x39\xb8\xbe\xce\xd2\x18\xa9\xd3\x69\x46\x56\x67\x04\xb4\x3f\xfc\xf8\xac\x0f\xc2\x23\xc0\xd1\xde\x7c\x9f\xcf\xe7\xda\xe0\xd6\xbc\x5e\x0e\x32\xa5\x7c\x88\xc5\x9a\x7b\xe8\x84\x41\x26\xf0\x58\x10\x84\x7c\xb4\xe3\xac\x5b\x51\x68\x59\x88\x5e\xa1\x90\xcb\x6f\x47\x7c\xbe\x9d\xe1\x23\x57\x2a\x83\x8a\x66\x65\x60\x2d\xc6\xde\xa3\xac\x5c\x06\x07\x16\x00\x85\x36\xc6\x69\xf5\x85\xcb\xba\xaf\x2e\x74\x75\x2f\x5e\xed\xb2\xd1\x1e\x79\xfc\xf9\xe0\xb5\x6b\x41\xa8\x94\xf5\xed\xc9\x05\x02\x1e\x9f\xaf\x2f\xe1\xcb\x99\x82\xd4\x35\x99\xec\x6e\xd1\x6e\xd7\x9e\x7a\xd7\x5d\x31\xe7\xda\xda\x5a\x5b\xcf\x9d\x6f\x6d\x15\x56\x39\x35\x0f\xcb\x85\x08\x5f\xe1\x36\xe3\x9c\x09\x65\x5e\xe5\x5e\xc1\xcf\x21\x4d\xe5\xea\x1b\x19\x06\xcd\x4d\xb1\xfd\xe9\x48\xa1\x08\xd1\x87\x56\x78\x5d\x6d\x24\xef\xda\xd5\x8f\x91\x4b\x4a\x4d\xcf\x0f\x34\x46\x2d\xab\x97\x18\x6f\x51\xeb\x43\x1b\x9d\xaa\xb6\xda\x32\xd1\xc7\xed\xb3\x06\xba\x33\x71\x2f\x83\x54\x9f\x5d\xbd\x29\xf1\x1d\x16\x3c\x36\x2e\x6a\x78\x6f\xbf\x2f\x7c\x43\x41\x5e\xa6\x5b\x63\x42\xea\x32\xa9\xe3\x7c\x41\x09\xb9\x7b\x6f\x7f\xd0\x31\xad\x95\x4b\x7b\xf1\x06\x32\x41\x15\x60\x4f\xad\xf1\x0c\x1b\x46\x38\xbb\xc2\x3b\xa7\xd5\x27\x20\xbe\x8b\x39\x12\x04\x12\xc6\x80\x40\x62\x52\xc3\x5d\xee\x94\xa3\xca\xb7\xd1\x71\x2c\x56\xda\x6f\x17\x9f\x3c\x2a\xf0\x92\xfa\xf8\x6c\xbd\x11\x5e\x94\xdc\xab\xb5\x18\x51\x63\x54\xa4\x8a\x5f\x14\x91\x14\x35\x3f\x24\xb3\x55\xd8\x10\x30\x5f\x39\xd7\x8a\x20\x66\xc9\xd1\x29\x16\xfc\x03\x1c\x86\x12\x43\xc2\xc5\x05\xd7\xa5\x95\xb4\x29\xa7\x8c\x0b\xf3\xd7\x99\xe8\x84\x50\xa6\x5b\x22\x71\x2c\x36\x99\x17\xc6\x0a\x16\xba\xa8\xdd\x3c\x73\x1e\x5a\x8d\x6d\x4e\x76\x2e\x0d\x83\xb2\x81\x2e\x27\xa0\xeb\xba\x0d\x1f\xd4\x9c\x96\x11\xb9\xdf\xd5\xfc\x7d\x39\x89\xb5\x50\xcc\x82\xbc\x24\x0d\xfc\xb9\xc8\x68\x3f\xfa\xf7\xea\xcb\x83\x1b\x32\x3d\xf7\xf3\x82\x2b\x0b\x2e\xc5\x23\x47\x3d\x77\x4f\x93\x99\x1c\x47\x3e\x84\x23\xcc\x61\xc8\x00\xe6\xea\x9b\x00\x63\x64\x24\xa0\x5c\x1e\xc7\xd9\x80\x87\xee\x9d\xf8\xb5\xef\xdd\xbb\xfa\x8a\xe1\x67\xe3\xb5\x79\xb4\x5a\xba\x67\x8b\xeb\x76\x8c\x62\x9f\xbc\xf7\xd4\xb7\x61\x7a\x02\x38\x16\xa9\x7b\xc8\x9b\x7d\x0e\x42\x68\xd2\x41\xb7\x7b\x6d\x44\x03\xfe\x86\xae\x85\x85\x2e\x83\x1c\xf4\x27\x2a\x4b\xb8\xdb\x4f\x1b\x69\x6b\x3b\xa2\x9d\x44\x20\x96\x23\x99\x13\x81\x80\x9d\x1c\xae\x2f\x00\x68\x90\x86\x90\xba\x3b\x93\x40\x1a\xff\xe0\xc2\xb1\x0d\x21\xf4\xdb\x2b\xff\xda\xab\x0e\xcc\x2d\xb2\x16\x63\x9c\x6b\x6e\x2e\xfa\xcb\xef\x76\x19\x96\x24\x3f\x3a\x8b\xef\x89\xa6\x81\xef\xdc\x97\xdf\xc5\xc0\xfe\x62\xc7\x7b\xdf\x13\xcd\x61\x7a\x03\xc0\x4b\xc0\xc3\xea\xde\xa3\x64\x99\x47\x6b\x79\x56\xd6\xb6\xbc\xc1\x85\xa7\x5a\xf9\xaf\xcd\xa5\x3a\xb7\xcc\x27\x5a\x8e\x15\x73\x67\x9b\x2e\x02\xbb\x01\x4f\x5c\x17\x2f\x2b\xdf\x69\xfb\x2e\x84\xa5\x35\x6a\xca\x3e\x28\xa1\x8e\x0b\x3d\x82\xff\x3e\xf2\x08\xcb\x76\x1e\x0a\xdb\xf4\x77\x3d\x37\x5c\x83\x34\xbe\x1f\xd9\xe0\xdf\x88\x79\xf1\xfa\x7e\x29\xd8\xc9\x71\x19\x4e\x4b\x01\x02\x17\x02\x73\xa9\x73\x7e\xf2\x39\x7f\x3c\xa2\xd8\x0b\x6b\x0d\x9c\xe0\xb7\x7b\x64\x01\x86\xa6\xdf\xd6\x6f\xf9\xc3\x9e\x3b\x9f\xb5\xc7\x5a\xe8\x8d\x84\xb0\x04\xe6\x41\xc4\x52\x89\x34\xa7\x76\x72\xc3\xad\x4d\xcd\x81\x96\xd1\xb2\xf9\x12\xca\x80\x9e\x97\x8b\x26\xf2\x5f\x3e\xb5\x70\x3c\x61\x5c\x26\x10\xdd\x52\x16\xf3\x5f\x71\x9f\xbf\xcd\x6f\x0d\x40\x58\x22\x50\x5d\x54\x55\xde\x30\x79\xbf\xe8\xbe\x76\x19\xe0\x76\xb4\x0b\x77\xd6\xea\xfd\xa5\x74\xca\x5d\xe5\x55\xd5\x97\x16\xed\x69\xdf\x0b\x87\x3c\x15\x43\xd3\xe2\xf1\x69\xae\x78\x3d\x63\x31\x76\x37\x39\x8a\x28\x66\xf9\x0a\xec\x4d\xea\x6b\xf3\xda\x84\x3a\x93\x27\xda\xaa\x0a\xbb\x49\xea\x8a\x0c\x95\x06\xf7\x60\x7c\x79\xce\x08\x39\x44\xed\xbc\xa6\xf1\x35\x92\x6e\x8e\xf0\x55\x0e\x3a\xba\x43\x2b\x2f\x3e\x39\x55\xc7\x46\x28\x23\x65\x49\x94\x7c\x95\x4b\x21\xba\xda\xe1\xd0\x92\x93\x6c\x30\xa8\xa4\x33\x36\xb1\xd9\x6e\xc7\x4c\x47\x97\x65\x2a\x36\x4e\x65\x0d\x2f\xcb\x8c\x1a\xed\xd4\x8e\xd7\xc5\xaa\x6a\x6a\xd5\x9a\xe3\x77\xfa\xb4\xad\xf3\x65\xf5\xc5\x37\x72\x7c\xd1\x82\x90\xe0\x84\x94\xe4\xd6\x94\x94\xd6\xe4\xe4\x04\x99\xa8\xe8\xae\x9e\xec\xdd\x0d\x83\x41\xea\x9a\x5a\xcd\x53\xaa\x43\x72\x0a\xd6\x94\x42\xe3\x49\x9b\xb2\x6e\x74\x87\xda\xd6\x7e\xb5\x2d\xcd\x23\x5a\xe3\x56\xbb\x7f\xbb\xda\xc8\x76\xfa\xd6\x1d\x1b\x4c\xb2\xac\x42\x01\x1b\x72\xf9\xa7\x22\x39\xc5\x97\x35\x9e\xd8\xc3\x39\xe0\x1e\x80\x38\x56\x06\xbe\xea\xb8\x78\xac\x07\x68\xea\x5f\x64\x5e\xcb\x3a\x93\x7c\x78\x6d\x57\x01\x28\x9f\xb7\x7e\xab\xdf\x0d\xfa\x4d\xea\x79\x81\x2b\xa5\x29\x23\x12\x25\xca\x82\xb5\x99\x1f\x75\xfd\xaa\x85\x9d\x82\x7e\xde\xaf\xbe\x16\xfb\x87\xd1\x89\x8b\x2a\xb7\xf4\xa4\xb7\xc5\x4b\x13\xa3\x94\x58\x8e\x83\xaf\xef\x3c\xf8\xcf\xd1\x67\xab\xfb\x37\x00\x7c\x60\x10\x80\xcd\xda\xd6\x7a\x12\xb0\xc6\x48\x30\x95\x1c\xb4\xcf\x69\x6b\x59\x98\x3d\x32\xc7\x16\x16\xe4\xe1\xef\xfb\xe5\x6e\x0d\x5f\xfb\xd7\x75\xff\x58\xbf\xfe\x47\x57\x56\xd2\xb9\x8e\x8e\xb3\x81\x59\x5d\x2f\x4b\x3c\x4a\xee\x54\x64\x6e\x16\x9d\xb8\xb8\x59\xb3\xed\xe6\xf5\x4a\x4d\x36\x40\xe0\xe7\x72\xdd\x8d\x9c\x1b\xf3\x4e\xfb\x62\x6a\xbe\xef\xd3\x44\x1d\x38\xb5\x7c\x20\xcd\xc2\x27\xe4\x2b\x5e\x0e\xb7\x6a\x8d\x8b\x74\x7d\x8c\xf3\x07\xfb\xce\x81\xb4\x62\x46\x41\x47\xc4\x8a\x90\xa4\xbd\xcc\x83\xf9\xe9\xa2\x2f\xaf\x9d\x63\x96\x44\xa7\x3b\x27\x66\xb4\x7b\x73\x88\x29\x79\xb1\xc0\x18\x27\xfa\x09\xf9\x4b\x31\x37\xb4\xfa\x93\x45\xe5\xd3\x6d\xfa\xe8\x98\xb7\xd2\x94\xd3\x7f\x1b\x6b\xe1\x3c\x23\xfa\x04\xeb\xfd\xaf\xe1\xea\xa8\x8f\x53\xd4\xf8\x49\xb8\xc0\x56\x90\x3a\xe0\x09\xc7\x65\xf0\xf8\x1b\x38\x1e\x5a\x99\x28\x74\x20\x69\xbb\xf7\x40\x3e\x06\xf6\x38\x5b\x84\xe6\xc0\xeb\x34\x58\x4c\xef\xfd\xf0\xfb\x87\x7b\xa2\xc0\x4a\x2e\xfe\x17\xca\x14\x2e\x0a\x35\x7c\x45\xbc\xcf\x5e\x5d\x73\xd2\x9d\x63\x9d\x43\x11\x7e\xe9\xe1\x1b\x07\xd8\x12\x4c\x40\xfe\x21\x3d\xe1\x49\xa5\x14\x17\x75\x7f\x7a\xea\x6d\x0e\x9a\xca\x90\x5e\xbd\xdb\x49\x55\x3a\x94\x10\x80\xe9\x98\x64\xff\x8d\xc3\xdd\x8c\x12\x61\x0e\x3f\x61\x32\x68\x02\x2f\x90\xb0\xc4\x69\xee\x79\xc5\x3b\xd8\xd7\x6e\x06\x51\xba\x89\xf8\xe7\x6f\x20\xd8\xef\x90\x93\x28\x8b\xfe\x81\xf9\xd1\x1b\x26\x0b\x9f\x3d\x58\x3b\x2d\xd9\x3f\x8f\x76\x6b\x43\xca\x29\xfc\x9f\x9d\x0b\x1b\x66\x6d\x39\xd9\xdc\xd2\x9f\x45\xf3\x95\xec\x66\x5e\x1d\x1a\xa2\xf0\x85\x2d\x4d\xd7\x96\x4a\xcb\xe7\x3d\xee\x34\x6f\x2c\x71\x97\xcb\x92\xa1\x69\x5e\x81\x58\x5c\x6c\x58\xde\xb3\xdc\xdb\x93\x86\x91\x97\x97\x0f\x7b\x2d\x3a\x7f\xae\x9d\xb2\xe5\xc3\xfb\xed\xfd\xe7\x56\x7b\x14\xe2\x0f\xda\x3f\x3f\xf5\x26\xdc\x0e\xf3\x2a\x5f\x69\xf8\xf0\xaf\x92\x5d\xa2\xc5\xa2\x40\xb7\x90\xc1\xe3\x54\x7e\x11\xdc\x39\x19\x7b\xcc\xec\x1d\x55\xb4\x70\xad\xfc\x4d\xfd\xd9\x58\x1d\xd7\x90\xa1\x05\x6a\xfa\xc4\xc9\x53\xe9\x9b\xa9\x57\x3a\x3a\xef\xd1\x40\x56\x14\x93\x56\xd9\xbe\xaf\xaa\x3d\x2d\xbd\xbd\x7d\x5f\x65\xfb\x9b\xe3\x79\x0e\x03\x7b\x8a\xc4\x8e\x9d\x5e\xbf\x67\x1e\xd4\x69\x66\xe7\x68\xe8\x6a\xa2\x72\x0f\x96\xd4\xae\x0c\x9d\xf2\xd7\x30\x28\x89\xc7\x77\x14\x39\x30\xb3\x8e\xa4\x7b\xe6\x54\xd6\x2c\x4f\x54\xe1\x3c\x7e\x0d\x8a\x8a\xc8\x0c\x11\x12\x8e\x3e\xcf\xb7\x58\x18\x56\x58\x15\xd0\x17\x9d\x18\xb0\x38\xbc\xb3\x5e\x74\xce\xaa\xac\xf1\xbc\x99\xc4\x2f\xad\x98\xa4\xa7\x86\x79\x0a\xb7\x46\x1e\x26\xc0\x91\x24\x5a\x4c\xc4\xed\x03\xa4\xe4\xc8\x8f\x21\x44\x08\xe2\xe6\xc6\x07\xca\x48\x6e\xcb\x83\x38\xe1\x6d\xb1\xc9\x1e\x12\xb7\xd6\xe8\x4c\xba\x90\xf9\xb7\x3a\x8f\x64\xed\x4a\x04\x27\xaa\x21\x06\x63\x5c\x3f\xd3\x3c\xc6\xb6\x7d\xc4\x1c\xbf\x8e\x40\x7d\xe1\xdf\x1d\xce\x00\xde\xc9\xda\xce\xe6\xd1\xdd\x81\x0a\x22\x02\x27\xe1\x7c\x7c\xcb\x32\xf9\x5f\x7d\xb0\xf8\x57\x09\x33\x3a\x98\xe4\xeb\xa9\x07\xa0\x7d\x36\x29\x58\xb4\x2e\xb8\xe9\x82\x88\x97\x49\x93\x02\x9f\xab\x65\x8c\x6d\x06\xc5\x9b\xcd\x00\x5b\xd0\x3a\xde\x9d\x17\xb7\xe6\x72\x88\x6d\xac\x8c\x4c\x23\x68\x64\x20\x98\x96\x63\x5e\x6f\xa5\x80\x11\xa6\x00\xa0\x3b\xd1\x36\xe1\xc0\xe1\x8a\x61\xd4\xf8\x21\x6d\xac\xf7\x18\xb5\xd3\x4c\xda\x53\x89\x85\x1d\xe3\x0a\x3e\x96\x6e\xc4\xca\x4e\x2d\xba\xe6\xf0\x00\x6a\x27\xdc\x39\x18\x42\x50\xf9\x42\xdf\xdf\x22\x37\xd5\x25\x1c\x22\xa6\xcc\xcf\x4a\x9f\x3c\xf4\x8b\x93\xe1\x0e\x05\x14\x5a\xa7\xaf\xdf\x29\x8c\x0a\x7d\xa7\x06\x42\x09\xe2\x5b\x01\x53\xfd\x84\x8a\xf9\xf4\x67\xd4\x93\x64\x25\x81\x91\xa3\x1c\x37\x0d\xd9\x4f\xb2\x0b\x4d\xa0\x10\x14\x6d\x66\xf1\x9b\x5a\x8d\x64\x51\x3f\xc1\xf2\xa7\x38\x6b\x94\x9e\xd0\xe7\x0d\xb0\xb3\x38\x56\xe2\x80\x1a\xd0\x6a\x57\xbb\xbb\x7b\x7a\xda\x00\x0a\x93\x35\x1b\xb9\x7a\xd5\x84\x91\x94\xf1\xff\x7f\x66\x66\x32\x21\x0f\x83\x5d\xf3\x4a\xc5\x18\x37\xba\xfc\x97\xed\xe5\x33\xc6\xdf\x01\x02\x43\xc6\x85\x32\x50\x07\xb7\xef\xf4\xd6\x2c\xa8\x4d\x77\x88\x8f\xc7\xb9\x9f\xd7\xd6\x2a\x29\xa9\xa9\x35\x48\xd8\xe9\xf9\xf3\x18\xa0\xc0\x25\x01\x20\x73\x82\x39\xd2\x8f\x74\xee\x49\xf1\x54\x0b\x48\xe6\xc9\x27\x05\x08\x89\x0e\x7e\x1c\xa3\x06\x69\x63\x87\xdd\x4b\x01\x16\xdb\x1c\x22\xba\x7e\x58\xb0\xeb\x3d\x7e\x4b\x48\xa0\x5e\xe9\x21\x4f\xfc\x00\x04\x19\x71\x26\xfe\x0a\xe4\x22\x8a\x1a\x5e\xae\xf8\xf2\x7f\x53\x39\x63\x2a\x6c\x60\x74\xc9\xea\x81\x31\x32\xba\x32\xca\x51\x85\x64\x16\xf9\x0c\x40\x1a\xc0\xbf\xd9\x5a\x31\xd0\x4e\x96\xff\xa3\x5b\x0a\x3a\xfe\xa8\x90\xac\x48\x5c\xc1\xcc\x74\xdc\x86\xd0\x02\xe3\x1a\xe8\x83\x43\x65\x97\x53\xac\x53\xf0\x52\x7c\x44\x16\xcb\x0e\x15\xe2\x90\x58\x45\x43\x79\x64\xe9\x83\x68\x70\xe1\x39\x40\x06\x00\x3c\x28\xf9\x2b\xf9\xf3\xdf\xf8\xdd\xc8\x24\xcc\x99\x34\xa6\xc0\xc5\x3b\x2e\x19\x39\xeb\x8c\x8b\x29\x35\x99\xf7\x64\xa7\x65\x19\xa5\x73\xd7\xb7\x7a\x24\x01\xbf\xb2\xdf\xfe\x55\x9b\xd7\x66\x1f\xea\xdd\xd0\xd2\x7b\x7f\xfe\xe5\x3c\x26\xdd\x76\x08\xd2\x24\x94\x08\xa2\xe9\x62\xf2\x29\x4b\xbf\x81\x0b\x57\xf3\x89\xe4\x54\xff\xb1\xcc\xf2\xdf\x12\x12\x52\xba\x38\x59\xc1\x6a\x93\xa5\xf9\x27\xa9\xbc\x3f\x7f\x4b\x5e\x47\x57\x81\xd8\x7b\x98\x6f\x0e\x25\x38\xee\xf3\x8c\xf9\xd5\x64\x77\xb5\x07\xa3\xb2\xc3\x7f\xb5\xcd\x4a\xeb\x07\x06\x67\xdc\x4d\xfc\x7a\x09\x33\x2e\x9c\x8a\x37\x53\xcd\x5b\xfd\x5e\xa8\x6e\x87\x3f\xc1\xd4\xa3\x03\xd0\x01\x8a\x6c\xbe\xde\xcd\x43\x39\xa0\x58\x64\xbf\x13\xd2\x43\x3f\x1c\x04\x92\xcb\x35\x7b\x2f\xf6\xc2\xed\x95\xcc\xec\x7b\x2f\xee\xdb\xd5\x7b\xc2\x20\xc3\x16\x32\x44\x7b\x44\x0d\x75\xe7\x77\x6f\x8c\xe9\xaf\xc5\xea\xff\xcc\xa7\x0f\xe0\x1b\x82\x90\x0d\xf4\x81\xfc\x7f\x43\x1c\x6a\x9b\x63\x86\xeb\x94\xf9\xd8\x54\xdc\x23\xc8\x9a\x0c\xdb\x13\x06\xbd\xae\xeb\x79\x2b\x4c\x91\xf3\x40\x77\x31\xc8\xf0\xfd\xe9\xd1\xf5\x9d\x63\xc0\x40\xcf\x5d\xdd\xe9\x3f\xec\xa5\x7c\xfe\x9d\xc3\x4b\x0c\xf6\x8b\x39\xaf\x83\x64\xcc\x58\xb1\x83\x89\xdb\xdb\x65\x2c\x72\x8c\xf7\xba\x37\x35\x35\x85\xe7\xcf\xeb\xbc\xbc\xd0\xd9\x90\x98\xd1\xd7\x5c\x5c\x35\x41\xb3\xd4\xeb\x09\xde\x37\x8a\x09\x81\x5b\xf3\xcd\x42\xfe\x7e\xb8\xb5\xc1\xd1\x62\xe9\x05\x8d\x73\x1c\xcf\x5e\x77\xf9\x45\x1e\x29\x60\x73\x4f\x72\xd1\x8f\x29\x65\xde\xa6\x05\x6c\x43\x5a\xdc\x40\x4b\x67\xfe\xb1\x9e\xdf\x9d\x9d\xbf\x7a\x8e\xe6\x2f\x6d\x69\xb1\x4d\x29\x1b\xba\x7c\x19\x44\x11\xdf\x52\x9d\xd1\xbf\x93\xaf\x3d\xa5\xa8\xca\x2f\xec\x0e\xfc\x7c\xba\x04\xc7\x70\x7a\x57\xa4\x50\x43\x3c\xc1\xfc\x78\xd9\x75\x1f\x3d\x28\x39\x96\x16\x6d\x38\x6d\xd8\x8a\xb7\x2d\x4c\x57\xae\xb0\x2e\x6e\x3a\xb1\x5a\x7d\x77\xe6\x9d\xa0\x36\xba\x0a\x77\xe0\x82\x24\x22\x9d\x05\xd9\x4f\x35\xa6\xf0\x74\x88\x35\xff\xbe\xe9\x8c\xc0\xe5\x4e\xd6\x81\xf4\x3b\x26\xcc\xa2\xed\xa5\x03\x20\x27\x7c\x5e\x30\xdf\xfc\xea\x0c\xd5\xf5\x52\xab\x2e\xf2\x54\x28\x7c\x24\x70\x82\xf9\xc8\xb2\x9b\x18\xa7\xcb\x21\xbe\x85\x4d\x3a\xc0\x0d\x74\x6f\x54\xc4\xa6\x4b\xfe\x99\x94\x4d\x48\x27\x82\xd2\x1d\x93\xba\x95\xe9\x4f\x8a\x8b\x7c\x32\xb5\x36\x4e\xaf\x35\xef\x89\x6b\x20\x31\x4a\x2d\xd9\x31\x11\xea\x59\x59\x73\xf5\xba\x1d\x56\x69\x55\xdb\x38\x6f\x18\xf9\x04\xc2\x66\x59\x70\xc9\x73\x1b\xb0\x2a\x95\x6c\x09\xc9\x2f\xd6\x45\x76\x73\x32\x4a\xaa\xe2\x2f\x80\x3f\x1d\x7c\xb0\xb7\xc5\xb8\x83\x46\xa4\x62\x2d\xd1\x56\x41\x63\x46\xef\xeb\x3a\xa2\xd4\xc1\xcc\x6c\xea\x6c\xcd\xef\x7b\xe7\xb1\xbb\x13\xfb\x15\x2e\x4b\xf4\xf9\xbe\x4d\x28\x18\x36\x4d\x59\x17\x57\xbf\xd5\x2c\x33\xba\x1e\xab\x77\x0c\x97\x97\x97\x45\x63\xc2\xa9\x19\x51\x9d\xe1\xc1\x8b\xec\x1b\x3c\x0a\x91\xa9\xd8\x43\x54\x3f\xdf\x6c\xfc\x37\x55\x5a\xb6\xdf\x1c\xf7\xad\x8a\x2a\xd1\x1a\xcc\x7b\x04\x45\x8d\xf2\x69\x70\x43\x54\xb4\x34\xbe\x63\x29\x66\xd9\x28\x31\x2f\x06\xf6\x08\x5a\x11\x2c\xf1\x4f\xa0\xa2\x10\x2c\x0b\xbc\xc8\x54\x9a\x65\x45\xd6\xfb\xc6\x16\x43\x95\xfa\xd0\x6b\xd8\x96\x12\x1c\xf7\xcd\x12\x4b\xfc\x2c\xf1\x0e\x4b\x48\x3a\xa7\x26\xc8\xf0\x23\x1b\x48\xf7\xb1\x00\xe9\x44\x35\x6d\x72\x48\xaf\xf1\xc1\xe3\x3f\x33\xb1\x51\xdf\x46\x22\xad\xbf\xbc\x44\xd3\xd0\x89\x8f\xa4\xc2\x36\xd8\xf1\x8a\xc5\xb7\x50\xcf\x3e\xb8\xdf\xe2\x09\x21\xbc\x15\x55\x71\x86\x75\xf2\x2e\xef\xdd\x66\xdc\x63\xe7\x5e\xe4\xb4\x74\xdd\xef\xc0\x80\x58\xac\x5c\x5a\x5a\xe3\x4a\xb3\xb0\x39\x00\x56\x5d\xad\xd0\xb1\xd9\x88\x2b\x0f\x7c\xf3\x66\xef\xe4\x71\x81\x2c\xc4\xe7\xd2\x8f\xf1\xe5\x41\xae\x5f\x2f\xe5\x84\x98\xe5\x28\x23\xeb\x20\x3a\x94\xce\x93\x89\x95\x6b\x80\x51\xdc\x6e\xcf\xcb\x7e\x43\xa1\x0a\x99\x9b\x9b\x9a\x16\x3c\xaf\xcf\xb3\x4d\xf7\x66\x8d\x81\xc9\xa5\xa6\x24\x04\x3c\x3b\x13\x85\xe5\xeb\x94\x0e\x65\x8f\xa2\xe4\xce\xda\xa4\x31\x18\x1d\x25\x89\x89\x69\xcb\xf3\xd1\x45\x55\x0e\x67\xf1\x71\x2a\x3b\xf3\x8f\x52\xe6\xe6\x31\x3d\x58\x8e\xc3\x68\x57\x60\x87\x56\x55\xd8\x72\x37\xb7\xef\xce\x2e\x59\x12\x22\xce\x71\xf7\xa6\x02\x79\xcd\x57\xb3\x28\x9f\x03\x4d\xac\xee\x26\x9f\xfe\x71\xb4\xfe\xcf\x88\xf7\x97\x07\x62\xf2\xbe\xfe\x15\x29\xff\x63\x0f\x80\xb6\xf2\xd6\xd5\x41\x6e\x6a\xde\x49\xdb\x57\x34\x79\xa5\x1a\x99\x74\x07\xd2\x9d\xd7\x31\xa8\xda\xec\x51\xca\x16\x02\xdc\x83\x8a\x7f\xec\x6a\xf6\x09\x36\x03\xcb\x1c\x8c\xf7\x57\x21\x68\xee\x64\x37\x17\x17\x37\xf2\x8b\x22\x4e\xb8\xbc\xaf\xcb\xb4\xf8\xf4\x8e\x3a\xee\x43\xf1\x4d\x5c\x00\x74\x84\xbb\x69\x31\x72\xb1\xa8\x5b\x1e\x3f\xd0\x83\x6f\xcc\x7b\xe3\x8d\x54\x45\x7a\xbd\x72\xb2\x09\xe3\x36\xab\x17\xe3\x6b\x3f\x5a\xba\xfc\xac\x51\x5b\xbb\xeb\xdf\x37\xcf\x2f\x8c\x88\xc0\x8a\x19\xc8\x56\xff\x7b\x2e\xd7\x08\x3d\xd5\xae\xdc\x22\xb2\x15\x2b\x9b\xaa\xf6\xd3\x39\x3d\xeb\x20\x4b\xd3\x4c\x65\x2c\x60\x53\xe9\x0c\xb2\x77\xcd\x39\x6f\x57\xcd\xa1\xc9\x93\xfc\x6c\xc6\xda\x0a\x1d\xb8\x19\x5f\xd4\xd2\x47\x97\xd7\x86\x61\x52\x92\x30\xba\x98\x65\xc3\xe2\xc9\xd2\x1a\x5f\xc7\x81\x1f\x75\xf6\x89\xb6\x03\x35\x05\x93\xcb\x58\x32\x85\xec\x6b\x9e\x3e\x16\x08\xa6\x99\xd3\x5b\xb7\x3a\x7f\x82\x05\x12\xfe\x6b\xe1\xd1\x97\x2f\x37\x3a\xf3\x59\xc3\x92\x94\xf4\xf4\x2b\x57\x2e\x31\x41\x64\xd6\x0f\x65\x3b\xc1\x66\xed\xf3\x9d\x34\xf6\xb8\x89\xad\x8d\x59\x2e\x94\xca\xdb\xe6\x48\x3a\xa6\xe8\x01\x5e\x9e\xc3\xca\xca\xce\xb8\x60\x22\x1a\x3c\x9d\x48\xe4\xa7\xfc\x57\x9f\xdd\xf6\x47\x21\x97\x75\xb8\x4d\xc7\x2c\x19\x1d\xea\xa6\x5a\x40\x4c\x14\x54\x37\xdd\x63\x43\x83\xc2\xdd\x12\xaf\xde\x8e\x86\xc0\x92\x0a\xb9\x1e\xde\x3e\xd1\x1c\x37\x25\x31\xb5\xb0\x24\x45\x35\x94\x9a\x3a\x44\x96\x6b\x50\xa9\xbc\xe0\x8d\x85\x8c\x32\x72\xa2\x13\x40\x88\xa6\x83\xd8\xfb\x35\x7f\x85\x13\xb6\xfd\xaa\x92\xdd\x95\x2b\x8a\x5a\x85\xfa\x98\x12\xab\x66\x7d\xa4\xca\x47\xc6\x0d\x0b\x37\x9b\x9a\xe2\x8c\x52\x1d\x3d\xb9\x34\x47\x4f\x62\xfa\xe7\x54\xcb\xb7\xb2\x0a\x7f\xb9\xe3\xcf\x8e\x93\x07\x23\x5f\xfb\x77\xab\x0c\x54\x61\xd2\xb3\xa6\x6a\xfa\xa6\xa3\x74\xbd\xc3\x5b\x9a\xcc\xfd\x8c\xc9\xfa\x48\xbf\x09\x81\x2d\x04\x79\x73\x89\xee\xe2\x47\xb0\x64\x18\xc8\x13\x68\x99\x41\x75\x2e\x5a\x91\x35\x34\x4e\x5e\xbe\x03\xb2\xfa\xeb\xeb\xb3\x52\xe1\xd3\xb2\x13\x47\xdb\x32\x51\xd1\x91\xf5\xfa\x5c\x49\x16\x87\x98\x1f\xbd\xde\x3e\x19\xf3\x8e\x5d\x7a\x1c\x50\xcf\xc5\xe0\xd7\x3d\xe8\x3e\x27\x3b\xb4\xbd\x72\x9b\xcb\xea\x98\x3f\xbe\x38\x44\xc5\x78\x5b\x6b\x35\x6a\x93\x34\x49\x08\xba\x54\xa7\x55\x09\xb3\x57\xeb\x30\xb0\x2a\xab\xa3\xa7\xaa\x16\x68\xda\xac\xd8\x46\x67\xa5\xfd\x4c\x52\x67\xfa\x58\x2c\xcd\xc7\xdc\x63\x41\x8c\x21\x8a\xef\xec\xe6\x2a\xfc\xec\x7d\x25\x93\xe4\x0b\x73\x15\xf7\x59\x7c\xfa\x7b\x04\xc8\x46\xbb\xdd\xeb\xe7\x2b\x91\xfc\xce\x75\x5d\xf8\x24\xd8\x5f\x6f\x49\xac\x72\x12\x2b\x07\x73\xc5\xba\x19\xfd\x76\x38\xbd\x98\xee\xb9\xa8\x73\xbb\xe7\x7f\x8f\x96\x52\x82\xa8\xdc\x3f\x2c\x25\x18\x5f\x8a\xb9\x27\x4e\x2c\x17\x83\x38\x2b\x20\xcb\xd9\x04\xb1\x6b\xc4\xa7\xf1\x46\xdf\x67\x64\x2f\x24\x5b\x86\x35\x97\x0e\x27\x9c\xae\x5a\xce\xc7\xa1\x1e\x29\x95\x9b\xb4\x1a\x41\xe2\x7b\x50\x93\xa0\xe8\x0d\x7b\xad\x32\x64\xfe\xd6\x66\xdc\xa5\xe9\xb7\x43\x28\xa8\x83\xbf\x51\x55\x99\x67\x31\xce\x72\xf9\x5c\x3b\xe2\x48\xf9\x8b\x08\x62\xbe\xcd\x15\x62\xd7\x0b\x07\xcf\x84\xf4\x85\xff\x1f\xae\xe0\x1e\x94\xa3\x65\x2b\x6c\x49\x8f\x22\xdc\x22\xf7\xd3\x9c\xa4\x95\x0d\xac\x7f\x2e\xbc\x3f\x08\x93\xa9\x3e\x69\x6b\xed\xe7\xd1\xe5\x56\x32\x59\xd6\x72\x14\x2e\x8f\xc2\x36\xe9\xd1\x8b\xcf\x3c\x1a\xdc\x4f\x46\x7d\x4b\xdf\xe5\x6c\x63\xc6\x2b\x24\xa7\x23\xcb\xa7\x08\x7b\xc9\x98\x0a\x36\x53\xb0\x39\xd2\x90\x75\xb4\xd3\xe6\xe1\x64\x84\xe9\xd1\x60\xfb\xee\xe9\x2a\xb4\x12\xd9\x95\x04\x58\xcf\xec\xb9\xd5\x35\xdc\x3d\xfa\xfc\x65\xe7\xe8\xf4\xbf\x12\x6f\x75\x37\x7e\xff\x34\xd4\x2d\xd2\x78\xfd\xc8\x66\xb9\xcb\x26\x9f\x7c\xdb\xbc\x63\xe5\xad\xff\xa3\xb7\x3b\xc2\xbc\xa5\x2c\xbb\x5a\xed\x9c\x5f\xdd\xa5\xc3\x26\x6b\xe3\xaf\xa9\xc2\xfd\xe9\xed\x0b\x5c\x26\xf5\xaf\x63\x77\x46\xf0\x08\x91\x63\x16\xeb\xa0\xae\x37\xea\x1e\x87\xd8\x94\xfe\xfc\xce\x57\x4b\xc5\xf7\x8b\x5d\xda\x7d\x51\x81\x59\xa7\x3a\xd2\xdc\x48\x0c\x12\x41\x3d\x72\x2f\x4b\x75\x57\x54\xd2\x16\x37\xfd\xb2\xcc\x56\x6f\x69\xa5\x01\xb0\x9e\xf9\xe0\xad\xcc\xed\x3b\xe4\x07\xd5\x8d\x8c\xbd\x1c\x18\x2b\xac\x19\xdd\x96\x4f\x3f\x65\x93\xbe\x8f\xbf\xea\xca\x6d\x8b\x2b\xd7\x39\x57\x96\xa7\xff\x2a\x86\x33\xad\x8b\xd5\x06\x4d\xaa\x93\x75\x3d\x02\x17\x9b\xbb\x2d\xf8\x5a\x52\x29\xc2\xc7\xe7\xc0\x86\x88\x51\x89\x76\x21\x45\x10\xa0\x51\x61\xb8\x28\x39\x97\x15\x50\x2b\x42\x76\xc7\x7b\x40\xd4\x05\x45\x1c\x12\x35\x96\x2a\x13\x71\xad\x5d\x3f\xac\xd3\x1f\xff\xc9\xcf\x76\x53\x92\xd8\x0e\x89\x21\x57\xe3\x90\xb8\xc4\x37\x19\x14\x67\x21\xda\x4e\x8c\x82\xe7\xc2\xa3\x49\x72\xb8\x86\x57\x4f\xb0\xe6\xbc\xc7\x04\xd4\x87\x64\x16\x6d\x62\x83\xae\x92\x57\xd0\x42\xbb\x94\xbe\x4d\xc4\x21\xe3\xb8\xfd\xf5\x2a\x49\x98\xb0\x3e\x05\x74\xd3\x33\x3c\x5a\x1b\xab\xf1\x6f\xc6\xd9\x33\x30\x58\xe0\xb9\xfe\x9f\x86\x83\x16\x06\x7f\xbd\x98\xdc\xa7\x00\xfe\x3f\x8b\x79\x9c\xa5\x0b\x49\x3d\xb8\x35\x60\xd5\xbc\xa5\x34\xdc\x6a\xfd\x4d\x2c\x8a\x8f\x43\x79\xaa\x3d\xf0\x6f\xdd\x89\xaf\x54\x70\x47\x58\xca\xce\x46\x6f\xfc\xb4\xcd\x7e\x55\xfe\x6f\x8c\xb4\x06\x9a\x2b\x5a\x6d\x47\xd1\xec\xfe\x7a\x2d\xf5\x56\x18\x2d\x92\x96\x8a\x3b\x1f\x7a\xed\x69\x8f\xa6\x9b\xca\x81\x40\xa5\x35\x19\x7e\x63\x38\x7b\xee\xb7\x99\xf6\xf2\xee\x6e\xd6\x50\x4c\xe3\x54\x9e\x7b\x90\xfe\xa0\x2b\xd3\x3c\x1d\xf9\x54\x34\xea\x8e\xec\x42\xe3\xe6\x2d\xdc\xbe\x5b\xa5\x40\x41\xa6\xd2\x64\x2f\x79\x40\x65\xb6\xf3\x41\xf7\x2a\x6d\xc5\x68\xc9\x9b\x96\x88\x30\x33\xe8\x0e\x4e\x3e\xe7\x39\xa1\x20\xf3\x33\xf7\xe8\x44\xa0\xd6\xcb\x93\xb5\x7f\x98\x1e\x1c\x86\xca\xac\x08\xef\xdf\xea\x06\x1e\xa3\x83\xd1\xe0\x79\x02\xec\x2a\x1f\x7b\x2b\x0c\xee\x49\x19\xf4\x66\x44\x24\x02\x35\x77\xbf\x08\x18\x94\xa0\xa2\x5b\x45\x06\x8b\x47\x13\xa6\x65\x93\x86\x4c\xdf\x65\xbe\x75\x72\x80\x48\xf2\xe0\xba\x0f\xc9\xe7\x02\x31\x8c\x9d\x11\xb4\x1b\x95\x1f\xbc\x54\xff\x7e\xce\xa7\x1d\x74\x57\x79\x77\xb3\x24\x76\x73\x6a\x18\x12\xac\x66\x32\x28\xfd\x64\xe8\xdb\xef\x46\xd7\x67\x5d\x6b\x53\x7a\x21\x7e\xa0\x27\x5d\x1e\x3a\x34\x05\x60\x04\x89\x6c\x79\x69\x31\x9f\x59\xca\xb8\x80\xc0\x37\x79\xf3\x08\xad\x54\xe1\xa3\xc4\x29\x12\x49\x4a\xd1\xf2\x9b\x75\x8b\xcd\x20\x96\xb2\xa5\xbe\x5e\xc4\xc2\x03\xd5\xb3\x12\x83\xc4\xb7\x98\x27\x5e\x44\xa1\x1f\xe7\x76\xd2\xd4\xd0\xd1\xf7\x83\xd3\x49\x77\x4e\x7b\x2b\x24\x3e\xc7\x7c\x0c\xf2\xd4\xd8\xbf\xf3\x7a\xec\x46\x64\xf9\x17\xde\x19\x9c\xde\x61\x0c\xed\x1e\xba\x91\xcc\xe6\xa2\x04\x4f\xbc\xdf\x62\x44\x4c\x1f\xd1\x7b\xcc\xac\xf7\xb5\x6f\xc0\xbe\x9d\x3c\x35\x7c\xff\xca\x90\x96\x80\x2d\x44\x49\x9f\xa0\xdf\x9a\x6b\xf9\xad\xd7\x79\xeb\xb5\x42\x6f\x57\xc5\x2b\xf7\x6f\x95\xcb\xc9\x5e\xe8\xc4\x27\x5e\x4e\x3f\xf1\xc1\xe8\x20\x16\x3d\x38\x5c\x7c\x37\x72\x70\x30\xe2\x7e\x49\x71\xc0\x0b\x87\x58\xbc\xf6\x8a\x9a\xec\xaa\xfa\xb3\xa3\xca\x33\xad\x0a\x58\x94\x9e\xda\x64\x79\x7a\xc0\xac\x6c\x99\xc9\xc9\x30\xad\x45\x18\x98\x0b\x70\x29\xf5\xdb\x4b\x15\x8c\x64\xad\x1e\xca\x42\xc4\x94\x2c\x8b\x44\xe5\x4b\x84\xa1\x0b\xce\x9e\x6b\x83\xb9\xfd\x6d\xff\xf1\xee\x3f\x5e\x24\x87\x0c\x66\x52\x64\x39\x4d\x22\x51\xa8\xc8\x25\xf8\xeb\xa7\xc6\xa8\xd1\xa3\x66\xf4\x48\xaa\xc7\xc3\xa7\x87\x5d\xe9\x39\x5f\x52\xdc\xf9\x55\x9b\xb0\x41\x71\xf3\x7d\x3c\xdc\xd8\xf9\x84\xd6\x3d\x80\x5e\xf1\xc6\x46\x2d\xda\x8b\xd4\x56\x9a\xbb\xf2\xbc\x06\xec\x9a\xbd\x56\x71\xbe\x2a\xc4\x9d\xaa\x2f\x7f\x73\xdc\x00\x72\x94\x9a\xe7\xfc\xdd\x07\x0f\xa4\xb0\xeb\xcd\x19\x75\x21\x60\x44\xeb\xdc\xde\xf2\x5b\x49\xeb\x77\xf8\x3d\x29\x09\x45\x6b\x8a\x76\xde\x1a\xab\xd6\x6b\xc8\xbf\x67\x6f\x75\xfd\x53\x94\x2c\x60\xf9\xe7\xeb\xd1\x2a\x0e\xe7\xb3\xa3\x3a\x88\x0b\x67\x3c\x84\x4e\xb7\xa3\x89\x91\xcf\xbe\x24\x7b\xd6\xa9\xda\x97\x6d\x98\xbe\xdf\x95\x9d\xcb\xbb\x3a\x37\x6d\xca\x4c\xcc\x9d\x56\x50\xa8\x09\x89\xf9\x0f\x84\x5a\x6f\x9d\x78\xe3\x86\xf4\x5c\xd9\x62\x27\x43\xf8\xda\x4c\x7d\x7a\x71\x21\x3d\x15\x45\x77\xa2\x0a\x68\x38\xaa\x98\x93\x74\x8a\x92\x5b\xc1\x46\x33\x58\x63\x84\xd5\xe1\x58\x72\x75\xf0\x2e\xbd\x24\x04\x4b\x7c\xd8\x33\x8a\x62\x93\xd3\x38\xa5\xf5\x99\x72\x05\xa5\xd2\x8b\xab\xfd\xdb\x3f\x4d\x1c\x7a\x62\xde\xa8\xaa\x41\x1f\xe3\xd4\xa7\x3f\xca\x6b\x2b\x51\xb3\x19\xea\x10\x3d\x8a\x4a\x5a\x3b\x54\xf8\x67\x72\xf9\xbf\x5d\x4d\x1a\x13\x7b\x43\xd4\x7d\x42\x4b\xc4\xd4\x15\x26\x30\x9f\x8c\x46\x7e\x7e\xa2\x59\xeb\xe3\x3a\x8d\x50\x5d\x9a\x5c\xc8\xe4\x0a\x42\xb6\x8c\x92\x54\xa4\x2a\x26\xb1\xfd\x2c\x46\x1f\x9f\x75\x04\xf4\x55\xb7\x79\x97\xa6\xe3\x60\x48\x81\xfd\x6e\xb3\x0d\x6e\x1e\xb1\x9a\x0d\x0b\x46\xfe\xe3\xc0\x7c\xca\x4b\x8f\x6c\x6e\x86\xd1\x78\xc0\x8a\x19\x5c\x2e\xe5\x8d\xf0\x98\xde\x48\x7c\xae\xc3\xd2\x49\x6d\x8e\x2c\xc5\x69\x5d\xb3\x26\x1a\xa7\x01\x2b\x43\x8a\xb9\x39\xf3\xf8\xa7\x1b\x44\x0e\x5a\x89\x86\xe8\x81\x37\x83\x2b\xe6\xfb\x67\xfd\x8f\x90\xc7\x44\x73\xc1\xee\x3e\x9c\xa9\x85\xf0\x01\x9e\x04\x86\x8a\xe4\xb3\xd6\x0c\x6d\x62\x98\x7f\x7c\x7b\xec\x86\x7b\x71\x80\x4f\x75\x79\x65\xe2\x87\xda\xac\x28\x2b\x37\x04\xdf\xe4\x6f\xca\x88\x7a\x30\x27\xf0\x23\x32\xb1\x56\x51\x07\xb2\x9e\xd8\xc7\x97\x14\x4d\x86\x45\xb3\xaf\x7d\x9e\x0a\x1c\x1f\xab\x87\x4c\x4b\xef\x34\xd4\x08\xd6\x7e\xf6\x49\x89\x3a\x9d\xd6\xb2\xc7\x8c\x35\x27\x4a\xd0\x65\x39\x77\x73\x65\x3e\x7b\x68\x50\x99\x8a\x67\x8d\x8b\x16\x94\x2c\xab\x88\x66\x21\xa6\x6b\xe5\xcb\xd8\xe5\x9c\x9f\x5e\xd8\xc2\xc6\x86\x8c\xe8\x6c\x7c\xc0\x77\xfc\x75\x7c\xc3\x91\xdf\xac\xba\x3c\x65\xd4\xf2\x12\xcd\x9b\xd4\xf8\x06\xd4\x9d\x7c\x77\x5a\x40\x4f\xe2\x69\x1a\x50\xc9\xf2\xae\x09\x80\x6c\xf4\x06\x6e\x73\xd1\x1d\x9e\x53\x0c\x8f\xd6\x94\xb9\xa1\xa4\x4c\xce\xc9\x16\x7c\x92\xfb\xc6\x42\x72\xca\xe0\x25\x49\x94\xd0\xa0\xa3\x75\xd6\xa1\x3b\x45\xdb\xcc\x52\x2c\x8e\xfb\xc5\x4d\x6a\x37\xab\x9b\x97\x6c\x7d\xbe\x2d\x5b\xc1\xce\x12\x80\x60\x14\xe4\x70\xf6\xe1\xfa\xc1\xfc\xc9\xae\xbc\x18\x30\xd9\x81\x2e\x75\x9f\x0f\xc3\x49\x16\x22\x75\x11\x43\x43\x11\x36\xa7\x4c\x00\x99\x99\x15\xb9\x4e\x7f\xe5\xe6\x2d\x92\x4a\x1d\xa5\x62\xcc\x3b\x42\x84\x21\xc1\x20\x9a\xe9\x7e\x29\x8b\x98\x8a\xe6\x34\x64\x6e\x92\x64\x4e\x6a\x37\x73\x9a\x27\xb6\x45\x09\x6f\x8e\x39\x4a\xe3\x8f\x0b\x09\x6e\x30\x88\x92\x90\x70\xdc\x33\x9e\x03\x3b\x93\xbe\xb5\xeb\xcc\x9d\xd1\x30\x15\x37\x2a\x5d\x14\xf8\x52\xdd\x87\xb5\xc6\x89\xe8\x05\x43\xd7\x1c\xfb\x20\xdc\x99\x3c\x3f\xdc\xc1\x7f\x90\x34\xfa\xa4\xa1\x3f\x18\xb6\x7b\x74\x9a\x71\xab\x9e\xb2\xaa\xb3\xa2\xc0\xf8\x1b\x9e\xc6\x62\xd7\x58\xe1\xb0\x1f\xd0\xdd\xb0\x1f\x7f\xbc\xf3\xf1\x81\x10\x65\x0f\x10\xe1\xc2\x6d\xf5\x37\xb7\x96\x09\x97\x09\x77\xe4\xbf\x76\xb9\x43\xa8\x7f\xb2\x6c\xe4\xfc\xf5\x57\x86\x6a\xdc\x6d\x0c\x27\xe6\x7c\x5b\x64\xb6\x1c\xf6\x3e\xc9\x1b\xa6\xa6\x44\x91\x51\x93\x78\x05\x33\x43\x6b\xdf\x70\x16\x29\xbb\x9c\xf3\x65\x0e\xaf\x9e\x8d\x43\x3e\xa8\xe5\xd4\x9e\x24\x1e\xda\x32\x66\x3d\xe1\xe4\xfc\xe6\xf1\x3a\x48\xca\xfa\x68\x35\xda\xa2\x08\x12\xa1\xfa\x68\x46\xec\xfc\x9c\xe1\x4c\xb6\x2c\x40\x98\xbe\x3a\x9c\x90\x9f\xa3\xb2\x18\x45\x98\xb2\x7e\x37\x81\xe6\x42\x56\x3f\x51\x23\x91\x98\xbc\x33\x51\x41\xe6\x2e\xd1\x98\xda\xac\x90\xee\x78\x57\xed\x75\x6a\xcd\x54\x03\x82\x61\x37\x1c\x60\x4e\xba\x22\xa3\x2a\x8c\x6b\x4b\x62\x59\xc0\xcb\x4a\x44\x1c\xb5\x3a\x0a\x9e\x89\x14\x2c\x54\xfa\xb3\xbf\xce\x33\x73\x71\xc8\x25\xcd\x83\x21\x4c\x8e\x6f\x0c\x04\x12\x6f\x50\x8c\x4d\xbc\x5a\x7e\x38\x5f\x1e\x42\x55\xeb\x9e\x68\xbd\x32\x7c\xa5\xf5\x48\x14\x40\x95\x87\x84\xf3\xbd\xf2\x6d\xe2\xad\x45\x6a\x5d\x3c\x14\xaf\xd6\x6d\x1f\xc8\x18\xee\xbb\x09\x77\x46\xc9\x87\xbb\x7c\xea\x21\x5b\xa3\xca\x24\xac\x05\xe6\x51\x8b\xa5\x23\xcf\x7a\xf5\x96\x98\xeb\x00\x54\xde\x1a\xd6\x9e\x4e\xe8\xca\x36\x12\x84\x09\x09\xef\xe8\xae\x8e\xa1\x48\x0f\x1d\x4e\x62\x21\x1b\x62\x27\x16\x72\xc8\x56\xe1\xca\xc5\x21\x52\x05\x95\x6e\x1e\xaf\x26\x3e\x77\xbe\x89\xdd\x77\xfe\xac\xbb\xda\x1e\x98\xb8\xaa\x29\xa4\x72\x52\x19\x60\xf2\x3e\x3c\x5c\xba\xe7\x7c\xf1\xa6\x61\x00\x91\x20\x09\xc1\x10\x90\x2b\x8f\x8e\x51\x7f\xdb\xb9\x6f\xa3\xee\xf0\xbe\x3d\x7f\x02\x62\x24\x4a\x68\x93\x99\xdc\x92\x22\x41\xe4\xb8\x84\xa3\x75\x75\x3f\xf9\x04\x04\x5c\x1e\xef\x9e\xc4\x68\x47\x21\xee\x37\x15\xca\xcb\xbd\x26\x4b\x3e\xaa\xae\x70\x35\x30\xab\x45\x99\xab\x2a\xe5\xd4\xda\x7e\x23\x3e\xc4\xa4\x52\x94\x3e\x70\x38\x25\xdf\x1d\x71\xfc\x9b\x7b\xff\xcd\x7d\xcb\x23\x0b\xbb\xf2\x70\x87\x89\xd3\xc4\x71\x93\xcd\xbf\xc6\x66\x4f\x47\x5b\x70\x56\x61\xa0\xe6\x72\x11\x4e\xe0\x76\xc8\xff\x0a\x40\x60\x48\x94\x72\xea\x72\xb7\x9d\x55\x48\x6b\x9a\xce\xad\x7c\x7a\xac\x98\x67\x2c\x74\xff\xf0\x51\xb2\xf0\xe0\xec\xcd\xad\xe8\x4e\x62\xfc\x07\x0e\xb4\x29\xe5\xed\x59\x18\xc4\x30\x47\xdf\x7d\x77\x73\x3d\x97\x7f\x3f\x11\x31\xfd\x5d\x06\xf8\xce\x9f\x1e\x2e\x3a\xe7\xd3\xe6\xd1\x58\x0c\x01\x89\xef\xd3\xbb\x24\xa3\xcc\x1c\x56\xb7\xde\x8d\xda\x81\x73\x77\xd7\x05\x2f\x8c\xe2\x40\xad\x40\x01\x05\xea\xee\xde\x7b\x57\x2c\x7d\x76\xe2\x9c\xa5\x22\xd4\xb8\x7a\xd0\x03\xf4\xd4\xd6\x45\x49\x1f\x07\x49\x4b\x90\x1d\x55\xed\x00\x81\xc5\x8f\x49\x65\x9b\x50\x00\x91\x60\x89\x9b\x66\x71\x98\x34\xea\x92\x80\x3c\x45\x74\xb4\x5c\x7c\x0f\x34\x3a\x43\x28\x7a\x0f\x1d\x6d\xa8\x3b\x6e\x09\x94\x69\x68\x1d\x30\x37\x98\xb9\x15\x31\x28\x8b\x58\x58\xff\x62\x3e\xd9\x79\x5d\x25\x5d\xf0\xba\x20\x9a\x08\x2d\x1c\x22\xd5\x93\x39\x11\xe1\x73\x87\xe6\x7a\x10\x18\x52\x69\x11\x95\x20\x0d\xd9\xaa\x1f\xd3\x8d\xeb\x9f\xa4\x31\x13\x8c\x21\xa4\x53\x6a\xf1\x33\x0d\xf7\xc7\x5e\xac\xa7\x2d\x53\x60\x59\x39\x00\x04\x84\x9c\x1f\xb1\x04\x80\x25\xcc\xa5\xca\x92\x81\x3e\xa2\x32\x97\x2e\xbe\x2d\x7d\xb7\x70\xd1\xb7\xe9\xf3\x37\xf7\xb9\x5e\x16\xe6\x2d\x52\xb8\xd5\x32\xe9\x55\xef\xb3\x5b\xe2\xf2\xf7\x0e\x4b\x56\x8f\x1f\x5e\xb5\xb6\x8f\xbb\x6a\xf1\xd0\x5d\x12\xee\x4e\xe7\x89\x85\x1e\x81\x61\x8e\xc6\x22\x7d\xfa\xb6\xba\x2d\xe9\xec\x7c\xf6\xb2\xfa\xb2\xba\x20\x6b\x1f\xdd\x32\x61\xfa\x02\x5e\xa6\xa0\x9e\x94\x21\x62\x29\x2d\x44\xb4\xd2\x15\x2a\x35\x0f\xcf\x37\x68\x6f\xd9\xd1\xa0\xfb\xe8\x82\x4a\xfe\xf2\xd2\x3f\x5c\xce\xb6\x6e\x3c\x1a\xf4\x6f\xff\xf1\x51\x9b\xfe\xb4\x30\x5e\xa6\x30\x36\x9e\x25\x06\x67\xf2\x15\x3e\x29\xc0\x66\xde\xc7\x55\xcc\x2a\x37\x05\xdd\xc2\xc7\x55\xe8\xfd\x9c\xff\x27\xb9\x7f\x88\x4d\x24\x2b\xeb\xcf\xfd\xc6\x36\x5f\x37\x09\xd4\xa4\xa0\xfa\x1f\x59\xd5\x07\x7c\x6a\xf5\xf4\xf3\x8c\xc1\x69\x70\xfa\xff\x55\x7a\xc7\xb5\x41\x90\xdb\x13\xaa\xc8\xfb\xcf\xd6\xf2\x8f\xb4\x0e\x5b\xd2\x0c\x0c\x93\x92\x2e\x10\x60\x08\xf4\x7b\x0c\x66\xbb\x22\x5b\xea\xa8\x83\xa3\xf6\x9c\xdf\x48\x31\x37\xd6\x30\x83\xae\x75\x20\x65\x65\xc9\xb2\x48\xb9\x6b\x2e\x92\xbe\xc2\x61\x30\x3c\xd1\x62\x47\x51\xd0\x4a\x69\x99\x25\xb9\x91\x5f\xca\x2b\x21\xd7\xd3\xe8\x7d\x57\xf7\x6a\xdb\x91\x75\x28\x47\x6b\x66\xe2\xdc\x45\x73\x46\x98\x2f\xa3\x72\xd9\x01\x79\x79\xc5\x23\x8a\x58\x7f\x35\xda\x46\x99\xcf\x13\x48\xe2\xc6\xae\x35\x10\xfb\x9f\x1a\x59\xcb\x65\x99\xea\x38\x3c\xf2\x31\x1e\x67\xed\x9c\xa8\x1a\x98\x7d\x66\x50\xab\x7d\xd5\x2c\x2d\xa6\x5e\x5f\x8a\x4a\xda\xc6\x1e\xcf\xb7\x26\x7d\x24\xf1\xdb\x36\xc7\x76\xc6\xb8\xdb\xee\xa4\x02\xb1\xff\x65\xd7\xfe\xd6\xc4\x6f\x91\x30\xaf\x8b\x1e\x3f\xeb\x1f\x0a\x01\x7b\xd4\x64\xc2\x96\xe1\x22\x00\xe2\xf6\x2b\x06\x95\x14\x3d\x99\xf8\x92\xbe\x2a\xa7\xda\x63\x8c\x14\x79\xaa\xe2\x78\x79\xcb\x5a\x25\xad\x3d\x76\x53\x23\x43\xc6\xe9\x39\x0a\x70\x22\x38\x2a\xec\x5e\x1d\x5a\x78\xc4\xdd\x37\x53\xd6\xcd\x8a\x3b\xcf\xd9\xc5\xfa\x73\xbc\xb9\xb8\x5f\x22\x95\xcc\xaf\x69\xbf\xd7\x23\x27\xc9\x2b\x2a\xc7\x71\x32\x1a\x13\x49\x05\xd2\x1e\x94\x79\x6c\x25\x0b\x97\x8a\x45\x8e\xb8\xa4\xa3\x5e\x5b\xc6\x89\xf8\x85\x37\xb0\x38\x41\xac\x2d\x02\xd3\x16\x34\x1c\xf3\xe3\x8b\xb2\xfc\x2e\xab\xf8\x41\xd3\x75\x1e\x46\xea\x8d\x45\x4f\x5a\x9a\x61\xde\x18\x3b\x52\x33\x47\x05\xd5\x46\xe7\xe4\xc6\x18\x18\xe9\x7e\x14\x03\x23\x91\xc2\x9e\x18\xe8\x89\x54\xba\x5d\x5c\x7b\x6a\x67\xa1\x57\xf4\x8c\x0f\x58\x07\xb3\x08\x7e\xf6\x3c\x0c\x9b\x70\x44\x6d\xb1\x45\xca\xdd\xad\xe2\xf4\xed\x51\x86\x1a\x8e\x47\xbd\x0c\x43\x04\x1b\x0f\xf2\xf0\x88\xf8\xe7\x3d\x70\x89\x24\x73\x43\xab\x54\x22\xbb\x91\x8c\x59\x1f\xb4\x75\x47\x3f\xdc\xd6\x31\x7a\xcb\xa0\x78\xab\xfc\x69\x01\xb5\x76\x91\x35\x3a\xe8\x68\xac\x60\xd2\x08\x87\xe4\xba\x9f\x23\x9f\x2a\x1d\x90\x90\x91\x9a\x8c\x2c\xf7\xba\xa3\x18\xeb\x92\x66\x06\x10\xf8\x23\x15\x3e\x33\x65\xb3\x54\x75\xed\x93\xd4\x75\x2b\x28\xef\x81\x6c\x85\x3a\xd3\xcb\x2a\x6f\xd8\x77\xc6\xe4\xd0\xfe\x03\xfa\x51\x93\xfb\xe5\xca\x91\x8f\xd3\x47\x77\x45\xbf\x02\xad\x38\xf8\x85\xf1\xb0\x77\xae\x9b\xaf\xbf\x55\x95\xb2\xd5\x9b\xfc\x6e\xeb\xa7\x0f\x4b\x8c\x2d\xb7\x20\xdb\x0b\xcd\x8e\x4b\xa1\x4d\xed\xb2\xe3\x72\x86\x39\xbf\x5d\xad\x61\x79\xfa\xb6\x2b\xf4\xd0\x32\xb6\xb6\xde\x70\x2b\xd2\xb9\xee\x1f\xac\xba\xa8\x78\xa4\x97\x3f\xe4\x5f\x51\x7b\xf8\x8c\x28\xc7\xb6\x0e\x3b\x7f\x0a\xdd\x2d\x17\x21\x98\xe4\x31\x46\x52\x1b\x39\x6e\xff\x14\x66\x8b\x0c\xf7\x21\xad\xd0\x9a\xda\xc7\x0f\x9a\xaa\x11\xeb\x91\x3f\x6e\xeb\xf8\x08\xe6\x8c\x0a\x00\x20\x63\x03\x44\x24\x3d\x4b\x8e\xb6\x6e\x2c\x50\x89\x59\x67\xfe\xcb\x1a\x78\x71\xcf\xcd\xa9\xd1\x27\x43\xf1\xd0\x06\x20\x0a\xde\x7d\xd6\x47\xe1\x25\x33\x43\x67\xad\x51\xf9\xd3\x9c\x63\x0e\x24\xd6\x6e\xf7\x25\x6c\x63\x66\xe8\xac\x55\xcb\x8c\xa0\x4e\xea\xb7\x0e\x5e\xf6\xde\xa4\x1e\xba\x08\xa3\x4d\x86\x2d\xee\x27\x4b\x56\xbc\xcf\x9a\xcd\x39\xb8\x79\x91\xf3\x65\xf2\x7a\xb1\x62\x51\x03\xa6\xbe\xc8\xb5\xa1\x10\xb3\xc6\x8f\x78\x54\xe3\x52\xd0\x51\xa6\x97\xa6\x35\x7e\x0d\x5e\x9d\x8d\x75\x39\x67\x11\xe6\xf0\x33\xff\x1c\x66\x20\xcc\x7b\x89\xae\x26\x23\x54\x8a\x88\x75\xd3\x48\x9d\x7f\x04\x38\x25\x15\xf8\xa6\xdd\x32\x74\xf2\x29\x3a\xf5\x4e\x23\xe3\x87\x73\x9a\x3f\x3f\x25\x92\xeb\xa8\x3f\x30\x35\xa5\x12\xa7\xb6\xd2\xd1\x99\xb4\x54\x2a\xad\x03\x52\xbb\x03\xac\x67\xd3\x29\x53\xd7\x90\x79\x1a\x22\xd2\x87\x53\x41\xdc\xbb\xca\xe9\x8c\xaa\xaf\x17\x29\x71\xfe\xf7\xa5\x52\xd3\x4b\x3d\x57\x10\x97\x48\xc4\x12\x90\x9d\x3d\xb0\xbc\x2e\x28\x3c\xbf\xd4\xcb\x3e\x4c\x7d\xff\x2c\xce\x19\x37\xf0\xe6\xb1\xab\xcd\xc6\x8e\x1a\x97\xb8\x50\xa7\x9e\x9f\x20\x7f\x73\xed\x2b\x1e\xe6\x66\x49\x02\xbd\xd0\x58\x5c\x68\x96\x8f\x9e\x3b\x73\xc6\x62\x29\xf4\xbd\x2e\x56\x00\xe1\xaf\xd3\xc4\xa6\x2c\xec\xd5\x7c\x70\x55\xf7\xfc\x99\xe9\x59\x59\xb5\x18\x0d\xb5\xae\x7d\xd2\x30\xd3\x90\x54\xa4\x7a\x16\xfb\xad\x71\xda\x4d\x9e\x65\x52\x70\x0c\xfc\x0b\x11\xc0\xcf\x16\x2d\x4e\x02\x53\x5c\x20\xe0\xc0\x2e\xe3\x5d\xf0\x0b\x93\xed\xf9\x48\x87\x64\x8f\x76\x07\xc7\x69\xdf\x64\x4b\x39\x7d\xef\x64\x71\x7a\x81\x0f\xe2\xe2\x4b\xca\x10\x35\xf3\x6e\x58\x20\x65\x87\xe7\x10\xfc\x35\x62\x46\xbf\xa0\xc1\x36\xa9\xca\x8d\x6d\x87\x43\xca\xd4\x40\x3b\xe5\x3f\xb7\x7b\xef\x88\xae\x52\x2c\x6c\xb0\x3d\xde\xfa\x9a\x86\x70\xc4\xfd\x65\x99\xf0\x88\x28\xef\x16\xaf\x46\x4d\x2d\xdf\xd7\x63\x16\xc4\x3c\xbb\x3a\x0b\x47\xc8\xd0\x9d\x1b\x6e\xc8\xd1\xe5\x96\x8a\x05\xde\xe6\x14\xdb\xdc\x26\x18\x52\xc6\x61\x52\x56\xce\xd5\x7a\x14\x2a\x2f\x83\xd2\xb4\x54\x99\x23\xf3\x9c\x48\x36\x08\xac\x80\xf1\xa1\xec\x76\xd9\xf4\xad\xb4\xdb\x23\xca\x0f\x49\xdd\x28\xd7\xe1\xdb\xe9\x56\x21\x51\xd2\xa0\x84\xcd\x18\x47\xe7\xf0\x7f\xe9\xdf\x84\x9d\x04\x17\x2b\x78\xc4\x6d\x32\x6b\x33\xa8\xa6\x03\x18\xbb\xe1\x7a\x55\xe6\x33\x35\xd5\xb0\xa7\x03\x85\xf7\xb2\x32\x6f\x1a\x99\x7e\x47\x71\x88\xeb\x72\x94\x76\x20\x0f\x04\xc1\xb3\xbe\x82\xf3\x0f\x2a\xe3\x0d\xa5\xb5\x5b\xd5\x92\xe1\x43\xea\xac\x5b\x7e\x3a\xeb\x6d\x26\x95\xdd\x24\xde\x07\x34\x69\x6a\xa5\xef\x42\x38\xaf\x34\x7c\x97\xba\xfa\xd8\x8d\x70\x48\xdc\xe6\x72\x9f\x1b\xd7\xd5\x2b\xc6\xba\x51\x29\xa9\xda\xfb\xd8\x82\x99\x49\xde\x0a\xf2\x3c\x44\x6d\x1e\x68\xdd\xce\x09\x6c\xb3\xb9\x48\x1e\xe3\x37\x49\x79\x0c\xaa\x43\x8e\xe5\x17\x6a\xb3\xf9\xcf\xfc\xbd\xfc\x41\x47\xa1\x40\x1b\xb0\xc4\xca\x5e\xe4\x72\x55\x04\x65\x35\x90\xf6\xc3\xb4\x63\xfa\x47\x1b\x23\x5b\x21\x43\xc9\x22\x4a\x03\xe9\x54\xdc\xbb\x72\x37\x2b\x4c\x03\x55\xca\xbb\xfa\x90\x7c\x25\xef\x23\x4e\x80\x4d\xb7\x36\xd5\x74\x3f\x12\x26\xb2\x83\xf8\x42\xfd\xf0\xad\x44\xbd\x6f\xfa\x85\x3b\xe5\x06\x3c\x3e\xc9\xd0\x67\xb2\x48\xa5\x53\x07\xcb\xea\xae\x62\x61\x2d\x75\x69\x2d\x81\x1f\xc6\x6c\xff\xa1\xdb\xf4\xf8\x2f\xd0\xbe\xd0\x30\xa6\x5c\x4d\xcb\x7d\x4b\xf8\x3f\xe4\x46\x64\x44\x93\x96\x7b\x3d\xc8\x7b\x3c\x07\xd4\x8d\x1f\x7f\xe5\xef\x08\x8a\x5e\xd1\xa0\x92\xef\x8c\x3b\xf0\x8a\x15\xf7\x7c\x78\xbb\xdd\x8b\x09\x97\x1a\xf2\xf9\x5d\x1d\x39\x34\x6a\xfb\xcc\xdc\x1b\x11\x46\x11\x61\xfa\xa1\x66\xdf\x7c\x12\xc6\x6c\x5c\x16\x1b\xbc\x51\xb3\x21\x8e\x72\x35\xb9\xf4\x33\x4c\xdd\x1f\x63\x1b\x36\x9a\x3f\x61\xe3\x61\xf6\xb9\xc3\x35\xdf\x63\x8d\xcd\x47\x7c\xaf\x2d\xf8\x01\xc7\xc0\x87\xd9\x6c\x73\x5e\xd7\xf3\xab\xc4\x38\x9a\x25\xcb\x17\x36\x75\xe0\x9b\x4f\x86\xe7\x39\xe3\x51\xb8\xbe\xc7\x9f\x0b\x97\x8e\x6e\x58\x49\x78\xaf\xfd\x8d\xf2\x34\x70\x61\xdc\xbd\x1a\x66\xbd\xce\xb6\xdd\xf6\x4b\x7e\xca\x3f\x1c\x2b\x32\x79\x49\x05\x62\x29\xa2\xb1\x3b\xe6\x28\xf9\x1a\xe5\x4a\xfc\x91\x8e\xce\x95\xd0\x46\x48\xba\xea\x91\xf8\xf1\xce\xd8\x2b\xe0\x84\x2a\x31\x26\x22\xc9\xb0\xe1\xe1\xc9\x8d\xac\xb0\xdd\x50\x02\xc6\x61\xce\x25\x27\x6f\x06\x91\x66\x3f\xbd\x1c\x95\x84\x63\x4f\xca\x4f\xc1\x4b\x0b\xe4\xec\x1d\xdf\xc2\x38\x9c\x56\x7a\xea\xec\x4d\x95\x8c\xc3\xa9\x91\x63\x67\x88\xce\xd6\xa7\x13\xf5\x1c\x36\x59\x5f\x7d\xf7\x09\xdb\x0e\x6f\xfc\x94\x6d\xbc\xf3\xff\x2b\x7a\x67\x54\x7c\xee\x85\x56\x51\x3f\x27\xa9\xf5\x11\x8e\xe9\x99\x22\x91\x78\xa6\x18\x17\xe4\x52\x8f\x3b\x67\x4f\x5e\xd4\x4c\xdb\xc4\x38\x3b\xd4\xde\x71\xc6\xdc\xde\x61\xb0\x87\xdf\x98\x6c\xad\x4c\x62\x8c\x4c\x5c\xfa\x57\x77\xc8\x3e\x6b\xb0\xf9\x86\x7e\x5b\x67\x77\x6b\xe3\xf1\x05\x3a\xdb\xd1\x3e\x04\x32\x7d\x5a\x8b\x42\x9f\x7b\x9d\xa3\x57\x13\x0a\x2c\xf2\x91\x77\xbd\x26\xda\x53\xae\x20\x6b\xd7\xcb\x16\x17\x61\x40\x96\xd4\xb8\xf3\x3f\xb9\x36\x3e\x33\xa3\xa1\xb6\x91\x6e\x3d\x29\x3f\x7b\xc0\x32\xf8\xdc\x01\xa5\x84\xca\xee\xf0\xf4\x86\x9a\xc6\x48\x32\x1d\x2c\x0b\x29\x71\x93\xc2\x48\x08\x60\x0c\xfa\xbe\xde\x95\xba\x33\x6a\x6b\x54\xc4\x9e\x42\x19\x1e\xfa\x98\xc8\x3f\x92\x12\xde\x51\x6d\x24\x25\xdc\x29\xfa\x90\x94\xf4\xe1\x7d\x62\x55\xda\x71\x5f\xe5\xb1\x63\xbe\x71\x59\x09\x2d\x84\x1b\xd7\xd4\xcb\x13\x08\x5f\xcc\x31\xd3\x81\xbe\x29\x6a\xd6\x3f\x15\xa8\xa7\x87\x45\x3d\x37\x3e\xa7\xe3\x2d\x39\xe4\x36\xe5\x6c\x9f\x90\x04\x93\x2e\xaa\x9b\x20\x73\xf1\x96\x82\x78\x22\xe1\x68\xe0\x96\x82\x8d\x63\xbe\xb7\xb8\x5b\xc0\xcf\x79\x9e\xbb\x37\x87\x3f\xac\x4e\x0d\x2d\xfe\x16\xb1\x80\xd5\x12\xb4\x18\xa2\x20\x54\xe4\xf1\x10\x4b\xcd\xf8\xd2\xc5\x05\x82\xf4\xf7\x37\xf7\x04\x39\xe5\x7c\xb1\xd1\xb0\x78\x18\x7a\x94\x6a\xd2\x67\x6d\x68\x1c\xe4\x49\xf7\x6e\xb7\x48\xdf\x6f\x92\x67\x29\xeb\x88\x76\x87\xaa\xd9\x7e\xda\x16\xf5\xef\xb3\x1b\xeb\x0d\x43\xff\x3b\x10\x4c\x9a\x4a\x71\xed\x9d\x1a\x75\x0b\xf3\x9b\xd2\x70\xaf\x05\xfd\x6d\x57\xe7\x3c\x15\xf7\xb6\xb3\xcb\x97\x3d\x17\x6c\x2b\x28\x84\x6c\x43\x50\xfc\xf1\x19\x9e\x6d\x2d\x97\x5b\x49\xb3\x48\xf7\x48\x4b\x28\x85\x93\x7c\x4c\x51\x6b\xe0\x67\x0f\x81\xc2\xaa\x3f\x43\xf8\x45\x11\x42\x78\xb8\xbf\x7d\x51\x4e\xe0\x22\xcd\xf1\x3b\xb6\xb0\x46\x4e\x55\xb1\x8a\x63\x45\x0f\xec\xa9\x5c\x6b\x35\x45\xe1\x47\x0a\xd0\xbd\xc8\x12\x5e\x4a\x76\xd8\x3c\x84\x2b\x97\xa7\x44\x6b\xbd\x0b\x85\xcf\x72\xae\x4b\xec\x43\xad\x4e\x0d\x7f\xbd\x77\xc2\xb9\x2a\xae\x7b\x8c\xf1\xc1\x7f\xc2\xf6\xb8\xab\xcf\x9a\xf1\xa9\x3e\xe8\x06\x16\x8d\x6a\xa1\xe3\x68\xf8\xff\xc3\x89\xbd\x57\x7e\x7f\x7b\xaf\x7c\xf4\x6b\x9b\xc3\xbf\xab\xcf\x24\x06\x61\xff\x3d\xb9\xb1\xfe\xc8\xe3\x67\xf5\x31\xd9\x69\x0f\x7a\xe7\xdd\xc0\x83\x66\xd2\x86\x4d\xac\x8b\x6d\xb3\xa5\x06\x20\x01\xeb\x0c\xf0\xd1\x1f\x7a\x60\xd2\xfb\xac\x30\x1a\x58\x10\xff\x2a\xb4\xcb\x2b\x47\xe3\x7f\xa8\x6e\x1a\xd1\xd1\x20\x3f\x4a\x0f\x1d\x0c\xeb\x3e\x03\xc8\x06\x00\x5b\x53\x74\x81\x64\xb0\x3e\x29\x17\x8d\x12\x03\x60\x7a\x64\x4d\x1f\x91\xb8\xb4\x2b\xc8\x39\x82\xc1\xae\x2c\x5a\x27\x2c\x20\xc4\xaf\x3e\x19\x10\x63\x75\x7d\x6e\xc0\xaa\x6d\xc4\x90\xd8\x4e\xe9\x90\x3d\x99\x7a\x38\x01\x24\x11\x52\x02\xd5\xa3\xcc\x33\xf2\x63\x0c\xb1\xa8\x17\x31\x01\x4d\x45\x10\xac\xc4\x4b\xa4\x59\xbd\x24\xb7\xb6\x8d\x8b\xa3\xd3\xf0\x86\xd8\x04\xa1\xd4\x0d\x35\xea\x0a\xe4\x5d\x1c\x59\x3c\x7a\x88\x28\xb0\x8d\xb3\xbb\xa9\x3a\x1e\xcf\x4f\x62\xea\x4e\xa8\xbd\x41\x9b\x45\x8c\x03\x35\xd8\xa5\x2c\xbb\x8e\x2f\x9e\x01\xd0\x0e\x07\x00\x2d\xa4\xb1\xde\x44\x0c\xd9\xca\xb0\xe6\x01\xb2\x01\x13\xad\x73\x55\x84\x32\x0a\x62\xcc\x43\x3d\x87\x87\x95\x28\xb0\x46\xc9\x73\x55\x01\xd7\x3b\xcb\x8f\x28\x2e\xf3\x15\xe4\x26\x89\xef\x40\xc3\xb7\x11\x3f\x4b\x96\x2a\x17\x01\xd8\x95\xca\x31\xa4\xfc\xb8\x45\x3c\x87\x0a\x0f\x89\x7c\x67\xd7\x3c\xb4\x25\x0e\x75\x22\x0a\x93\xb0\x9a\x04\x6b\x43\xf0\x44\x19\x25\xca\xab\x91\xcd\x70\x80\x7a\x45\xa9\x5d\xef\x68\x3f\xa4\x2a\x64\xb3\x50\x67\xc8\x5c\xfb\x1e\x11\x52\x0a\x44\xdb\xc4\x87\x00\xea\x55\xba\x24\x46\xc0\xa3\x26\xd1\x69\xa8\xe6\xa9\x87\xf1\xaf\x5a\x3e\x5e\x3d\x15\x78\xdc\xa0\xe6\x88\x4b\x48\x55\x4e\x79\x18\x8f\x9c\xaa\x88\x78\x55\xb4\xc1\xf6\x04\x71\x9a\xe6\x59\xc9\x02\xc8\xf8\x64\x2a\xd5\x67\x67\xeb\x6d\x02\x6e\x4c\x15\xb8\x25\xae\x83\x72\x16\xe4\xb0\xbc\x21\xda\x40\x94\xd4\x5a\x22\x13\xc6\xf2\x9c\x5b\x1e\x22\x28\xf2\xcd\x98\x70\x66\xea\xcf\x6b\xae\x96\x1b\x22\x76\x87\x82\xe0\x1b\x24\x0e\xbe\xcf\x81\x39\x26\x7f\x4c\x9b\x49\xb4\x51\x1c\xa1\x91\xef\xe0\x56\xfc\x3a\xbe\xbd\xb2\x57\x49\x5a\xd4\x6b\x8a\x37\xe6\x02\xe3\x54\x54\xbe\x21\xcc\x58\x9b\x35\x32\x51\xa9\xa8\xdc\x49\xc1\xe9\xc1\x65\x28\x8b\x5a\x84\x05\xa6\x86\x50\x9b\xf8\x04\x15\x0a\x62\xa7\xc5\x7d\x4c\x4c\xdd\xcf\xb0\xdf\x3a\xd6\x2e\x27\xaf\xcf\x02\x81\x18\x54\x12\x2f\x0c\x89\x6b\x88\x53\x16\x2d\x8b\x3e\xaa\xc1\x9c\x6c\xac\x91\x54\x12\xd1\x12\xc7\x35\xd1\x7d\x54\x04\xd7\x72\x03\x05\x8a\xea\x23\xc4\x65\xe4\x28\xa7\xfc\x53\x9c\x47\x8f\x9c\x3a\x16\xae\x27\x57\x11\x6d\x9a\x50\x20\x00\x38\xf9\xe1\x9f\x6f\x56\x95\x56\xc7\xf5\xbf\xd0\x1d\x1a\xee\x8e\x37\x53\x7f\x2a\xaa\x8a\x02\x17\x36\xe2\x8b\xab\x83\x92\x2d\x82\xff\xa8\x37\x6b\xc3\x49\xe0\x35\x50\x7c\x2d\xe7\x77\xd1\x0f\x98\x85\xe0\x53\x9c\x58\xaa\xd1\xc9\xed\xbd\xe8\x2d\x12\x67\xa4\xd5\xf2\x0b\x60\x28\x08\xda\x54\xac\x8f\x7a\x49\x7f\x28\x13\x6a\x12\xdb\x61\x5a\x92\x63\x5e\x94\x77\x2e\x99\x96\x38\xaf\x9a\x14\x67\x2d\xc9\x66\x56\x99\xc2\xf6\xac\x5d\x68\x6c\xf6\x33\x2e\x79\x4f\x85\x75\x1c\xe2\x32\x26\xf6\xda\xdb\xf7\xae\x17\xba\xa5\x07\x38\x45\x41\x44\x7c\x4c\x7c\x5a\xda\x33\xb8\xc9\xa1\xa5\xd0\xd1\x32\xd6\x5d\xe9\xdb\x91\xf5\x35\xec\x4b\x71\x4f\x9f\x5b\xa1\xd8\xb4\xdc\xb5\x2c\x04\x1f\xd5\x84\x3e\xdd\x6b\x2a\x99\xd5\xc4\x6a\xd6\x1e\xb4\x0e\x73\xce\xad\x9a\x09\x2a\x8d\xde\xd1\xae\x7c\x5c\xed\x0f\x41\x5b\x0a\x96\xc7\x54\xef\xae\xcb\x05\x0b\x89\xa9\x4f\xcc\xdd\x3d\x35\xae\x40\x27\xfd\x0f\xe1\xd2\xd6\x7a\x9c\xe6\x02\x3d\x5d\x5a\x28\x43\x1b\x47\x06\x45\xe9\xdf\x66\x11\x4d\xb6\xed\x38\x1d\x94\x47\xf2\x83\x57\x87\xc9\x50\x2b\x71\xb1\x4e\x45\x80\xb7\x6d\xef\x46\x30\x36\xe3\x38\x5a\x3a\x12\x62\x37\xb9\xcf\xc5\x2d\x8c\x1a\xd0\xac\x9b\xb4\x25\x7f\xc6\x7b\x98\xcd\x43\x68\xc7\x19\xb0\xa3\xef\x84\x31\x9d\xf7\x5e\x74\xc5\xde\x6d\x2c\x52\xac\xa9\x1f\x5c\x8f\x05\xe8\x48\xe2\x0c\x54\x01\xa3\x5a\x23\x78\xb0\xe3\xae\xbd\x89\x97\xc8\x60\xdf\xec\x59\xb3\x27\xee\xdc\xf7\xb2\x7d\x3f\xb1\xbc\xf6\x9e\x18\x7d\x01\xa3\xec\x69\x6f\x75\x38\xcc\x4b\xd8\xd6\x50\x31\xeb\xc2\xf2\x08\xbb\xbd\xe3\xa5\x99\xe5\xa4\x86\x43\xb2\xb9\xca\x00\x9a\x1e\xbf\xed\xe2\xdb\xeb\xb0\xc0\x92\x5a\x91\x22\xb3\x38\x06\x8d\xb3\xac\xa7\xd6\xd8\x40\x78\xd7\x0a\x18\xc2\xb5\x2d\xcf\x60\x60\x9c\x50\x6a\x8c\x7d\x36\x4c\x6c\x97\x52\x9a\xf9\xfb\xf4\x55\x5c\xee\xfb\x83\x36\x5b\x0c\xcd\xd1\x43\x5a\xad\xb7\x9f\xbb\x88\x4e\xdc\x22\x1d\xf4\xc8\x2a\x59\xb3\xd1\x1b\xf5\x3d\x1e\x1d\x33\x43\x93\xc8\xbe\x33\xc5\xf3\xf4\x96\xda\xa3\x81\xdd\x78\x7e\xaf\xd0\x12\xfb\x2c\x63\x1f\x65\x1b\xbd\x47\x07\x8a\x9e\x14\x0b\x3b\x97\x2c\x35\xce\x52\x3e\x55\xb3\x77\xe6\x88\x36\xd4\xbc\xb4\x53\x41\x52\x37\x7c\x04\x61\x71\xf7\xe9\x75\x04\x87\xf0\x5e\xd8\xda\x81\x18\x3b\x56\xb2\x60\xdb\xbc\x3c\xae\xae\x56\x91\xf6\xbd\xf1\x92\xef\xa0\x56\xd3\x48\xc9\xaa\x45\x2d\xea\x33\xe2\x12\x8f\x74\x39\xc9\x85\x68\x96\x11\x86\x47\xeb\x3b\xc6\xe1\x9a\x7e\x19\x13\x56\xe8\x6e\x3c\x72\x01\x2d\xcb\xa5\xd6\xe6\xc8\xee\x7f\x13\x88\x86\x56\xc4\xd6\x3f\xc0\x25\x8a\x03\x61\x73\x52\xfd\x31\xb7\x94\x3e\x3a\x97\x98\x84\x99\x7b\xd8\x7e\xdb\x94\x78\xfd\x08\x39\x3a\xd6\x37\x4e\xdb\xfb\x2b\x6d\x31\xdd\xde\xd6\xe3\x66\x37\x35\x64\x19\x47\x17\x72\xcf\xc7\x7a\xd9\xef\x97\x5a\x46\xdd\xac\x28\x3a\xdb\xdf\x25\xb7\x50\x9f\x16\x0a\x39\xf2\xbb\xa8\x47\xac\x86\x61\x9c\x78\x4c\x49\xe0\x03\x72\x6c\x32\x7d\x89\xd1\xda\x3e\x16\x4d\xac\x6e\x3f\xd6\xcf\x4b\xfb\x77\x45\x2f\xd9\x13\x92\x3a\x54\xe3\x40\xd7\x02\xbf\x59\x5f\xb7\xc7\xef\x93\x61\xee\xee\xef\x5e\x4f\x00\xfa\x05\x4d\x45\x5e\x33\xa0\x09\xbf\x88\x8f\x98\x4f\xa7\x90\x5c\x10\xb8\xd0\x03\x81\x93\x9c\xc0\x81\x97\x73\x0a\x0d\x5f\xe6\x0c\x5e\x9c\xc9\x39\x1c\x24\x2d\x17\xf0\x91\x91\x51\xe6\x0e\xad\xc9\x35\x8c\xa5\x79\xb9\x0e\x27\xad\xcb\x6d\xb0\xd3\x0f\x73\x07\x12\xe9\xc9\xe7\xba\xd1\x81\x0d\x02\xc3\x63\xdc\x76\xe1\x56\x20\xe5\x04\x49\xa8\x89\xb4\xc2\xdf\x87\x9c\x21\x13\x3f\xe6\x1c\x49\x84\xe6\x02\xd9\x24\x37\xca\xdc\xa1\xea\x5c\xc3\xb3\x64\x5b\xae\x23\x85\xae\xcb\x6d\x48\xa0\xe1\xdc\x81\xce\xf4\xb3\xff\xee\x46\x7f\xc6\xde\x26\x38\x1c\xef\x24\x10\x2a\xb5\xa4\xb0\x00\xf6\x70\xca\xd6\x77\x2c\xe6\x84\x8f\xec\x68\x69\x1b\x68\xcc\xa7\x74\xdf\x2d\x06\x2c\x36\x11\xc3\x00\x69\x30\xb2\xaa\x0e\x49\x1c\xe9\x5e\xaf\x2c\x60\x8f\xc5\x9a\x06\x37\xa4\xf0\x7b\x7e\xaa\x35\x51\xfc\x52\x0b\x3c\x3f\x4f\xc8\x8a\x63\x25\x53\x87\x90\x8a\x28\x9a\xa0\x44\x3c\x11\x1b\xd3\x43\xc9\x93\xce\xac\xe2\xc7\xee\xd7\x2a\x99\x06\x02\xa2\x72\x1a\x9c\xf7\xfc\x57\x2f\xbe\x3c\x35\xf3\x99\x49\x54\x98\x87\xae\x2c\xfd\x79\x8b\x1f\x50\xe8\xff\x09\xf9\xf2\xf5\x34\x9d\x4d\x5e\xbf\x56\xcb\xbf\xb7\xd7\x8f\xaf\xab\x65\x3f\x31\xe4\x4d\x1c\xf7\xfc\x42\x4f\xc3\x50\xba\xad\x3c\x71\x42\x54\x7d\xab\xd7\x18\x36\x5a\x09\x7c\x07\x2e\x3c\x7f\xa3\x9b\x0c\x1c\x33\x70\xc8\x47\xcb\x32\x71\xaf\x5a\x6f\xdd\xb9\x98\x70\x7c\x55\x4e\x62\x55\x71\x6b\xe8\xc4\x77\x7e\x6d\xac\x15\xb9\x39\x60\xc6\x4c\x96\x45\xd5\x45\x40\x4b\x61\x7d\x96\xca\x21\x0c\x2c\x05\xb4\x8c\x2f\x8a\x90\x01\x70\xb7\xa0\x99\x37\x8a\x95\xf5\x62\x8b\xad\x20\x5d\xde\x10\xe1\x47\x13\xb5\x7b\xe0\xc8\xed\xb1\x90\xb3\xb0\x4f\x31\xbe\x18\x52\x31\xdc\xd9\x0d\x3b\xc4\x8d\x8c\xe4\x41\xd1\xdc\xf6\x26\x9a\xbd\xa4\x75\x1d\xc2\xb3\x46\xaa\x9c\x00\x3f\x87\x6d\x09\xc2\xfe\xc6\x1a\xc2\x9d\x5d\x80\xeb\x1c\x31\x9b\xeb\xf7\xd2\x0c\xcf\x9b\x14\xbe\x47\x67\x1f\xfd\xda\xc3\xd9\xeb\x8f\xbe\xfc\xff\x49\x59\xa4\x95\xe5\xb8\xc6\x83\x11\xfb\x23\x4a\xb2\xa2\x6a\xba\x61\x5a\xb6\xe3\x7a\x00\x22\x4c\x28\xe3\x42\x7a\x7e\x10\x46\x71\xa2\xb4\xb1\x69\x96\x17\x65\x55\x37\x6d\xd7\x0f\xe3\x34\x2f\xeb\xb6\x1f\xe7\x75\x3f\xef\xe7\x00\x40\x10\x18\x02\x85\xc1\x11\x48\x14\x1a\x83\xc5\xe1\x09\x44\x12\x99\x42\xa5\xd1\x19\x4c\x16\x9b\xc3\xe5\xf1\x05\xc2\x30\x7d\x2a\xbe\x58\x22\x95\xc9\x15\x4a\x95\x5a\xa3\xd5\xe9\x0d\x46\x93\xd9\x62\xb5\xd9\x1d\x4e\x97\xdb\xc7\xe3\xeb\x05\x40\x08\x46\x50\x0c\x27\x48\x8a\x66\x58\x8e\x17\x44\x49\x56\x54\x4d\x37\x4c\xcb\x76\x5c\xcf\x0f\xc2\x28\x4e\xd2\x2c\x2f\xca\xaa\x6e\xda\xae\x1f\xc6\x69\x5e\xd6\x6d\x3f\xce\xeb\x7e\xde\xdf\xdf\x0f\xc2\x28\x4e\xd2\x2c\x2f\xca\xaa\x6e\xda\xae\x07\x10\x61\x42\x19\x17\x52\x69\x63\xdd\x30\x4e\xf3\xb2\x6e\xfb\x71\x5e\xf7\xf3\x7e\x3f\xb1\xa8\x79\x64\xf5\xec\x3d\x23\x14\x3f\xa4\xa2\x6a\xba\x11\xca\xdf\xb4\x6c\xc7\xf5\x7c\x00\x84\x60\x04\xc5\x70\x82\xe4\xf1\x05\x42\x91\x58\x42\xd1\x0c\x2b\x95\xc9\x15\x4a\x95\x5a\xa3\xd5\xe9\x0d\x46\x93\xd9\x62\xb5\xd9\x1d\x4e\x97\xdb\xe3\xf5\x71\x00\x20\x08\x0c\x81\xc2\xe0\x08\x24\x0a\x8d\xc1\xe2\xf0\x04\x22\x29\x00\xa0\x50\x69\x74\x06\x93\xc5\xe6\x70\x79\x7c\x81\x50\x24\x96\x48\x65\x72\x85\x52\xa5\xd6\x68\x75\x7a\x83\xd1\x64\xb6\x58\x6d\x76\x87\xd3\xe5\xf6\xf1\xf8\x7a\x01\x40\x10\x18\x02\x85\xc1\x11\x48\x14\x1a\x83\xc5\xe1\x09\x44\x12\x99\x42\xa5\x59\x9e\xce\x60\xb2\xd8\x1c\x2e\x8f\x2f\x10\x8a\xc4\x12\xa9\x4c\xae\x50\xaa\xd4\x1a\xad\x4e\x6f\x30\x9a\xcc\x16\xab\xcd\xee\x70\xba\xdc\x1e\xaf\x9f\x3f\x5f\x20\x14\x89\x25\x52\x99\x5c\xa1\x54\xa9\x35\x5a\x9d\x1e\x00\x21\x18\x41\x31\x9c\x20\x29\x9a\x61\x39\x83\xd1\x64\xb6\x58\x6d\x76\x87\xd3\xe5\xf6\x78\x7d\x7e\x84\x09\x65\x5c\x48\xa5\x8d\x75\x1e\x9b\x15\x03\xd3\xb2\x5d\x6e\xc7\xe3\xf5\x29\xbf\x16\x00\x11\x26\x94\x71\x21\x3d\x3f\x08\xa3\x38\x51\xda\xd8\x34\xcb\x8b\xb2\xaa\x9b\xb6\xeb\x87\x71\x9a\x97\x75\xdb\x8f\xf3\xba\x9f\xf7\x73\x00\x08\xc1\x08\x8a\xe1\x04\x49\xd1\x0c\xcb\xf1\x82\x28\xc9\x8a\xaa\xe9\x86\x69\xd9\x8e\xeb\xf9\x41\x18\xc5\x49\x9a\xe5\x45\x59\xd5\x4d\xdb\xf5\xc3\x38\xcd\xcb\xba\xed\xc7\x79\xdd\x9f\xe7\xfb\x02\x20\x04\x23\x28\x86\x13\x24\x45\x33\x2c\xc7\x0b\xa2\x24\x2b\xaa\xa6\x1b\xa6\x65\x3b\xae\xe7\x07\x61\x14\x27\x69\x96\x17\x65\x55\x37\x6d\xd7\x1f\xce\x2f\x21\x98\xd5\x6d\x29\x68\x72\x59\x7a\x62\x9a\xfe\x33\x1a\xed\x33\xde\x53\x8e\x48\x60\x5d\x41\xc2\x4d\x78\x31\x41\xb2\xae\x80\x3e\x5d\x81\x88\xfa\x35\x9d\x6a\x81\x9d\x5e\x1d\x46\xe5\x69\xb5\x54\x5c\x3f\x38\x45\x7c\xd3\x95\x89\xb1\x5f\x93\x65\xd5\xef\x6f\x48\x7b\x55\x8e\x8f\xc4\xa0\xfd\xa7\x54\xe9\x26\x4c\xa1\x2d\x33\xe0\x51\x57\xcd\x6e\xbd\x92\xd4\xa4\x02\x11\x75\x05\xfe\xeb\xb5\x07\xab\x8e\x4d\xb5\xfe\x91\x88\xbf\xfa\x2a\x0a\xdb\xa5\xb7\xa3\xaa\xee\xa2\xb6\xab\x44\xdc\xd6\x2b\x1e\x88\x25\xbb\x6a\x3b\xe8\x62\xe0\xcd\xae\xa0\x07\x27\x20\x59\x0f\xb2\x3e\x0d\x28\xd8\x9f\x96\x34\x8e\xee\x0b\x17\x77\xf3\x5d\x7c\x17\xf4\x1f\xf8\xac\x2f\x99\xc2\xfb\x86\x4a\x57\x23\xc8\xa4\x00\xc6\xf5\x5a\x63\x61\x37\xc4\xc1\x9e\x88\x92\xbb\x42\x27\x38\x3a\x7b\xde\x7d\x20\x91\xda\x4e\x1d\xec\xf5\x24\x82\x38\xa5\x6f\x92\x98\x13\x51\x7c\x57\x81\xbf\x9e\xfc\x20\xd0\x6d\x4f\x6e\x4c\xb7\x14\x29\xf8\x8c\x51\x5e\x21\x1d\x57\x9c\xb0\x43\x4d\x38\x87\x7d\x3a\x4e\x8f\x68\xdb\x91\x63\x26\x34\xd9\x9d\x71\xb6\x6f\x90\x7f\xbf\xa6\x5f\xee\xd6\x40\x96\x78\xde\x89\x1b\x01\xfb\xc9\x90\xbb\xc5\x35\x05\xb2\xef\x86\xc8\xda\x0d\x51\xb7\x2b\x14\x96\x06\x74\xef\x2a\x5c\xda\x01\xc1\x5d\x03\x8b\x77\x09\xd4\xfa\x43\x21\xc3\x57\xd1\xc3\x5e\x22\x80\x79\x77\xc6\xde\x6e\xfe\xd0\xf2\x07\x85\xc2\xe6\x97\x11\x65\xec\xab\x2f\xeb\xf8\xdc\x52\xaa\x3d\x98\x60\xbf\x1a\xb6\xee\x2a\xa5\xe2\x86\x35\x62\xfd\x4a\xae\x04\xd1\xf7\x92\x9d\x7a\xaf\x03\x4d\x77\x5a\xaa\x81\xf8\x1e\x4e\x09\x68\xdd\xc1\x0c\xfe\x50\x08\x0e\x51\x99\x37\x7f\xde\xb4\x14\xd6\xe1\x16\x84\x2d\xbd\xe2\x90\x9c\xa1\x45\xd2\xdf\x67\xf6\xbc\x8f\x9c\x01\xd9\x43\xa5\x32\x39\xca\xf2\x2a\x58\xdf\xdd\x7f\x13\xc6\xf7\xee\x59\x4b\xb8\x55\x6b\xc4\x26\x05\x44\xf2\x0f\x03\x8d\xed\x08\x5c\xcc\x34\x9e\xaa\x80\xfc\x5d\xcd\x07\x61\x7f\x77\x8f\x2d\x9e\x0e\x35\xc4\x26\x5f\x6b\x44\xf0\x89\x40\xc6\x3b\x83\x8d\xaf\x49\x31\x66\xb5\xcd\xab\xb3\x7b\xce\x43\x8a\x5b\xc5\x8f\x59\x7d\x45\xa9\x03\x81\x78\x15\x64\xf5\x53\xcf\x39\xc9\x87\x88\xdc\xfd\x40\xf4\x7e\xb2\xba\x24\x1e\xef\x97\x60\x83\x4b\xfc\xdc\x50\xb8\xa3\xf3\x05\x98\x4b\x7d\xc8\xf4\x92\xca\x3d\x05\x92\x77\x76\x17\x8d\xd5\xfe\x5a\x52\x0a\x3f\x50\xba\xa9\x68\x7b\xa7\x25\xb0\x9e\xbf\x5a\x64\xcf\x99\xe6\x27\x1f\xb6\x62\x69\xa6\x11\x01\x83\x79\x73\x2d\x4b\x68\x4f\x94\xc3\xbc\x9e\xf6\x1a\x00\xd5\x17\x2e\xfc\xe6\x20\x5b\x7f\x34\x2f\x25\x30\x79\x95\x5d\xd4\x7c\x14\xe1\x1f\x28\x85\x94\xe7\x8f\xab\x44\x9d\xf7\xce\x05\x42\xcb\x80\x28\x9e\x44\x8d\xd3\x15\xeb\xba\xb9\xf2\x1d\x22\xf1\x63\xc5\xe5\x9f\x66\x77\x86\x88\x38\xb1\xb5\x4e\x67\xa2\x50\x17\x94\x6d\xfb\x91\x1c\x87\x7a\x64\xee\x6f\x0c\x2a\xc4\xa2\x6a\x36\x68\xe9\x89\x6e\xce\x69\x5b\x01\xd0\x7d\xd7\x69\x59\x0a\x4c\xe8\xd9\xb1\xf1\x45\x8e\x66\xfc\x39\xdd\xf3\x1a\x65\x46\xba\x38\xe3\xa3\x64\xfd\xc7\xa3\x93\xd7\x4f\xf3\xa2\x6b\x9f\x40\x97\x70\x94\xc2\xed\xeb\x23\x1d\x42\x5c\xfb\x19\xa9\xe4\x27\x02\x4d\x6f\x06\xfe\x3d\xb4\x29\x05\xa7\x0d\x75\xc4\x90\x45\xbd\x42\x3e\x3a\xea\xcd\xfa\x36\x51\x6c\x6f\x85\x9b\xaa\xcc\x15\x94\x36\xb5\xf4\x90\x5d\xa7\x5a\x2a\x20\xa4\x29\xe4\x0d\xcb\xb8\x6b\xc9\x01\x11\xd6\xbf\xf8\x90\xf5\xc1\xe9\x20\xdd\x2f\x86\x64\x3f\x36\x1c\xee\x0d\x51\xd7\x1b\xd2\xc8\x37\x44\x90\x7f\xd6\x78\xaa\xf6\xe3\xe3\x27\x65\x79\x3a\xf3\xca\x1f\x4b\xfd\xef\xba\x15\x43\x61\x4d\x81\xdb\xbd\xd5\x54\x26\xfd\x75\x66\xcf\xeb\x54\x81\xc9\x04\xe3\xcc\x78\x5f\x81\xaf\xbe\x9a\x17\xba\x57\xfe\x44\xc5\x29\x7b\x35\xea\x50\x4a\x37\x9b\x41\xb6\x05\x86\xcc\xef\xb7\x0c\x83\x32\x83\xba\x77\x57\x96\x71\x94\xfb\x6f\x2d\x43\xb4\xef\x67\x2a\x93\xd2\xdf\xd4\xd9\x74\x1b\x65\xff\x0d\xf4\x97\x8a\xd7\xc4\x6a\x0b\x5e\x22\xdd\x7e\xef\x34\xe8\x7b\x3b\x66\x6f\x2d\xbd\x57\xf2\x3f\x83\x93\x2a\x77\xa3\x57\xe4\x31\xb8\x7b\xc5\xcb\x12\xf3\x7c\xd5\xc4\xf6\xf1\x6b\xa9\x2e\x51\xb8\x5a\x22\xc6\xfc\x0a\x58\xf2\x2d\xf4\x92\xe8\x4a\xc8\xfe\x92\x2f\x7e\xad\x19\xe6\xcf\x0c\x98\xfd\x0f\xdc\xdb\xb5\x8f\x64\x70\xb8\x91\x3b\xf1\x00\x3c\x57\xae\xb1\x02\xc5\xf1\x34\xd5\x4d\xd4\x53\xbc\xf5\x0f\x2f\xdc\xf2\x2b\xa9\x45\x6e\x93\xeb\xb5\xd6\xd8\xb4\xe6\x30\xed\x3b\x98\x8e\x3d\xb7\xeb\x4e\xaa\xf5\xd1\x1d\x7b\x98\x33\x8d\xfd\xab\xa4\x21\xbf\x51\x29\x39\x5d\x3d\x24\x7d\x93\x9a\xe8\xde\xb5\xc9\xd5\xcc\x32\xe3\x0f\x97\xc5\x17\x9b\x4b\x1c\xbd\xa2\x50\x13\x1d\x67\x28\xdb\xab\x50\x59\x91\x29\x6b\xe7\xe6\x8f\x9a\xa0\x66\x13\x08\x93\x2c\xae\x7d\xfa\x65\x4b\x02\xfc\xd4\x66\x68\xd4\x18\xc0\x0f\x23\x0f\xe9\xb5\x2a\x83\x33\x57\xe0\x8b\xaa\xad\x41\x2b\xfc\xb8\x84\xea\xdb\x08\x78\x76\xfc\xa0\x66\x65\x16\xb7\x98\x2b\x11\xfb\x2b\xdc\x2c\x98\xb1\x66\x54\x72\xee\x7e\x6a\xeb\xb8\xf1\x29\x09\xf2\x87\xba\x5b\x54\x16\x6e\x92\xcd\xe1\xe8\x2a\xe3\xed\x8f\x34\x70\xc8\xef\x85\x5d\xa7\xf7\xba\x57\x31\xc7\xb3\x9f\x25\x0c\xb6\x66\xb4\xa7\x35\x2a\x79\xfe\xf0\xc6\xe7\xef\xf7\x57\x1b\x09\xe3\x8a\xf4\x09\x40\x59\xd8\x39\x7e\x99\xfc\xe9\xaa\xea\xc3\x8b\xf7\xe1\xd8\xc9\x84\x98\x54\x17\x35\xd8\x58\xcf\xd9\xb3\x69\x5f\x8e\x17\x71\x23\x20\xfe\x1a\x3b\x9d\xfc\xdd\x0f\xeb\x85\xca\x4b\x28\x1d\xad\x35\x36\xad\x39\x4c\xfb\x0e\x46\x51\xcc\x00\x2f\xfc\x7f\x52\xc6\xf2\xef\x4c\x03\xb0\xa1\x45\x45\x26\x52\x0b\x7a\xa7\xc4\x4f\xfc\x45\x1b\x4b\xbe\xd0\x2d\x9d\x51\x7d\x59\x97\x0e\x6b\x05\x76\xdd\xe0\xe5\x0d\x08\x85\xed\xa4\x9b\xb0\xce\xf1\xa6\x01\xe1\x71\x73\x4f\x1b\x4c\x63\xf7\x47\x19\xa4\x0f\x32\xc9\xee\xa3\xbf\x10\x68\xd2\xc9\xdc\x05\xbb\x6e\xe2\xaa\xbb\xa7\x20\x3a\x60\x08\x08\xa0\xd6\xa5\xa3\xe1\x24\x8b\x9a\xf2\x91\x7f\xd8\xc7\x98\x37\x55\xd1\xac\x72\x1c\x94\xb0\xcb\x5f\x4a\xff\x51\x21\x77\x4a\x85\x97\xa2\xa9\x87\xaa\x3a\x36\xf5\xd5\xce\x6d\xd0\xe7\xba\x8f\x68\x19\xf5\x25\xb0\xeb\x62\x9f\xb6\x34\xb4\x12\xb0\xcf\xdf\x09\x92\x54\x87\x4d\xd4\xfe\xae\x5f\x02\xa3\x33\x5c\x6a\xc2\x7a\x99\xea\x46\x73\x31\x67\xf6\x2e\x11\xfc\x63\x05\x8e\x62\x9d\x8c\x47\x9b\x64\x3f\x32\x52\x59\x60\x01\x6f\xed\xd2\x3b\xc4\xd4\xf6\xb7\x86\xab\x32\x75\xa3\x98\x25\xb9\x7b\x99\xb8\x5e\x72\x7f\xb9\x29\x60\x2b\xf0\x76\xe7\x1d\x15\xb5\xdb\xb3\x9d\x8b\xe0\x05\xf9\xd1\xdd\x37\xf7\x46\x73\x3d\x89\x1f\xa0\xd9\x43\x75\x43\xf0\xbd\x7b\xde\x43\x2e\xd5\x3d\x1b\x5a\x38\x6b\x56\xc0\x59\x65\x04\x86\x92\x19\xd8\x60\xf6\xd4\xae\x5f\x59\x89\xea\x93\xa3\x55\x75\x40\xd0\x69\xc0\x84\x52\x1b\x7c\x3a\x91\x80\x05\x14\x5e\xd0\x79\xaf\xd4\x25\xab\x98\x8b\xf5\x82\x7d\x2e\xd3\x80\x1f\x54\x34\x4f\x87\xbd\xc2\x03\x2e\x5d\x71\x71\xa5\x5a\x2d\x76\x2e\x1b\x77\xe9\xae\x65\x88\xf5\x69\xbd\xda\xc3\x7f\x1b\x91\xbf\xb4\xc0\xe6\x6f\xfb\x8e\xb9\x3a\xc2\xfa\x1b\xe6\x66\x2f\x1e\x31\x49\x7c\x46\xdd\x62\xe2\xb6\x13\xe3\xd9\x44\xd2\x58\xff\x8f\xe2\xe5\x07\x43\x45\xac\xcd\x3f\x7b\x9e\xff\x8b\x55\xfb\x2d\x4e\x78\xfe\xe4\xf3\xb9\x30\x8b\x77\x8a\x96\x8d\x36\xdb\x7e\x55\x1c\xbd\x7e\x7d\x2e\x78\xf8\xa8\x90\x9e\xef\xf9\x63\xd9\xd3\x66\xec\x9e\x21\x01\x15\xb1\x36\xf7\x78\xbd\x3e\xe2\x7d\x9e\x03\x00\x00\x00\x0b\x57\x41\x44\x3c\x69\xdb\xeb\x33\xfc\xf2\xb6\xd7\xb4\x29\x8f\x3e\xf4\x7c\x51\xc4\xb7\x8d\xe6\x7e\xda\xfa\x8a\x94\x86\x0e\x85\x8a\x58\x9b\xb1\xbb\x43\x02\xde\xed\xfc\xf8\xde\xce\xef\x7d\xc2\xf3\xdf\x3c\x41\x8f\x3e\x14\xa0\xa2\xe5\x03\xd7\xef\xcf\x19\x85\x36\x63\x0e\x00\x54\xc4\xda\xcc\x3b\x6b\xad\xdd\xf6\x9b\x23\x37\x2e\x7b\x37\x63\xae\xea\xa2\x38\x9c\x04\x54\xc4\xda\xfc\xdd\xd3\xfd\x5f\x9b\xe3\xfc\xcc\x34\x80\x8a\x58\x9b\xb1\x3b\x42\x02\x2a\x62\x6d\xc6\xee\x8c\xe9\x23\x22\x22\x22\x2a\xa5\x94\x52\x4a\x29\x45\x44\x44\x44\x44\xc4\xcc\xcc\xcc\xcc\x9b\x3f\x39\xaa\xa7\x37\xcd\xd6\xc7\x74\x33\x5a\x6b\xad\x67\x81\x13\x11\x11\x11\x11\x11\xd1\x81\xa8\x68\x7a\xf6\x8a\xbf\x1c\xfd\xb7\x8c\xfe\x74\x26\xde\xaf\x77\x2e\x8e\xc3\xe1\x59\x9b\x4e\xf9\xcb\x8b\xd5\xbe\x19\xbb\x67\x48\x40\x45\xac\xcd\xd8\x1d\x21\x01\x15\xb1\x36\x8f\x8d\xf6\xf5\x16\x7e\x19\x62\x95\x72\xdd\xb4\xc1\x9f\xc8\x7a\xdb\xc9\x5d\x44\x44\x44\x44\x44\x44\x44\x66\x66\x66\x66\x66\x66\x66\x56\x55\x55\x55\x55\x55\x55\x55\xb3\x69\xba\xba\x7b\x7a\xfb\xa6\x93\x9c\x7f\x84\x36\xbd\x4e\x64\xad\x01\x00"), }, "/static/script.js": &vfsgen۰CompressedFileInfo{ name: "script.js", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 110586, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xdc\xbd\x0b\x7b\xdb\xb8\xae\x28\xfa\x57\x1c\xed\x6c\x2f\x72\x0c\xab\x76\x5e\x6d\xe5\x70\xf9\xa6\xef\xf7\x23\x49\x3b\x99\x66\x72\x72\x28\x99\x76\xd4\xd8\x94\x4b\x51\x71\xd2\xd8\xfb\x6f\xdc\x1f\x74\xff\xd8\xfd\x08\xea\xed\xc7\x74\xf6\x5e\xfb\x9c\x73\xef\x5a\xf3\xa5\xb2\x04\x82\x20\x09\x82\x00\x08\x82\x5b\xc3\x44\x06\x3a\x8c\x24\x91\xf4\xde\x49\x62\xd1\x88\xb5\x0a\x03\xed\xf4\xb2\x0f\x0d\x45\x24\x28\xd0\xf4\x5e\x09\x9d\x28\xd9\xd0\x2e\x67\x12\xb4\x3b\x64\x0a\xf4\x22\x07\x1b\x93\x02\x44\x91\x1d\xd0\x90\xa3\x56\xf9\x87\x72\x6d\x19\x3a\xa2\x40\xd2\xc5\x82\x16\xa8\x06\x44\x94\x50\xed\x82\x28\x50\xe9\x65\x54\x1b\xb1\x0b\xa2\xc1\xe2\x2f\x57\xa0\x49\x52\xaa\x60\x0f\x92\xa2\x02\xb1\x8c\xed\xef\xd6\x99\x10\x01\x79\xad\xe5\x6a\x03\xc2\x4b\xd5\xee\x03\x2f\xaa\x4d\x96\x11\xfe\x0b\x28\xe1\x24\x81\x32\x2d\x65\x62\x04\x09\x4a\xc4\x1c\x40\x50\x10\xc3\x97\x71\xfe\xf7\xd0\x17\x10\x0e\x35\x0a\xcb\x24\x26\x24\x2a\x91\xf8\x10\xa2\x82\xc4\x60\x19\xed\xff\x32\xaa\x23\x12\xc0\x32\xdd\x65\xc2\x39\x09\x4b\x84\x3f\x82\xb0\x20\x3c\x5a\xc6\xfc\xbf\xb3\x2d\x21\x89\x60\x65\x6b\xca\xcd\x89\xc8\xb0\xd4\x9c\xc7\x30\x2c\x9a\x13\x2e\x23\xff\x3f\xac\x85\x43\x12\xc2\xba\x36\x96\x1b\x39\xab\x89\xb9\x1d\xc6\x98\x74\x79\x5f\xba\x43\x62\xde\x7b\xa6\x1e\xa2\x4b\x25\xee\x6c\x09\x28\x88\xdc\xad\x96\x01\x91\x97\x22\xa2\x54\xf0\x36\x2b\x08\x45\x93\xf7\xea\x45\x21\x29\x17\x26\x49\xa9\xfc\x4d\x51\x1e\x8a\x7e\xdc\x5f\xc6\x00\xbc\x86\x83\xf0\x12\x9a\x61\x19\x0d\x14\x63\x74\xb0\x0a\x11\x04\xcb\xa8\x48\x50\xc2\xe6\x57\xb1\x41\xc1\x06\x0f\x57\xe3\x83\x68\x25\x46\x12\x95\x90\xc6\x75\xa4\x50\x30\xdc\xa3\x75\x68\x21\x5c\x87\x98\x84\x74\x71\xc3\x55\x23\x64\x03\x52\xb0\x8a\x1d\xf6\x61\xa4\x88\xf9\x26\xd8\x91\x52\xfc\x8e\x48\x0a\x09\xeb\xf4\x92\x43\xd9\x4b\x5a\x2d\x2a\xce\x93\x0b\xa6\x89\x6a\x25\xb4\x97\xad\x2d\x0b\x0a\xdb\x6c\x5c\xc1\x54\xe0\xd1\x05\x1e\xc1\x3a\x3d\x71\x28\x9b\x4d\xe5\xfa\x3d\xd1\x6a\x51\x7d\x2e\x2e\x98\x72\x39\x28\x66\x5e\xe5\x0b\xeb\x58\xc8\x91\xbe\x62\x02\x2e\xcd\xb2\x45\x17\x14\x26\x8c\xd4\x2b\xc8\x26\xe2\xb9\xbc\x58\x50\xd8\xd4\x90\x0c\x21\x24\x29\x2d\x82\x02\x67\x9d\x1e\x3f\x14\x3d\xde\x6a\xd1\xe4\x9c\x5f\x30\x7d\xce\x2f\x32\x0a\x92\x73\x79\xc1\x14\x24\x0b\x0a\xeb\x9b\xa5\x32\xac\x59\x4f\xe9\x56\x37\xeb\x2b\x5d\xf4\x95\x3a\x4f\x72\xbc\xe2\x5c\x5f\x30\x09\xe2\xd7\xe9\x35\xc8\x04\x22\x53\xcc\xcc\x4c\x7d\x9e\x5c\x80\xca\xbb\x5e\xfd\x22\xa6\x76\xb7\xd7\x39\x64\xa2\x27\xda\xed\x1c\x91\xa8\x21\xa2\xbd\xbf\xd3\xd6\x15\x2d\x95\xc4\xb4\xb5\xc2\x16\xff\xe5\x51\x41\x69\xd4\xe2\x60\x46\x27\xc7\x9c\xac\xc4\x9c\x73\x4f\x3c\x0e\x03\x81\x2d\xf8\x0b\x0a\x54\x41\x81\x6c\x0b\xe0\x19\x1d\x2d\x92\xe4\xd4\x1d\x26\xfd\xec\xd1\x4b\x28\x85\x80\x75\x7a\xc1\xa1\xe8\x05\xad\x16\xe5\xe7\x81\x19\xdf\xe0\xa2\x67\x70\xda\x2f\x49\xf6\xa5\x25\x0c\x4f\x05\xf9\xd8\xf3\x15\xcc\x54\x1a\xc5\x35\x9f\x82\x48\xc6\xd1\x58\xb8\xe3\x68\x44\x64\xcb\xf1\x1a\x4e\xeb\x8a\x50\x0a\x6a\x41\x0b\xcd\xf4\x8a\x64\xf0\xce\x61\x28\xb5\x50\x92\x8f\xe3\x7f\x3a\x85\xf8\x98\x9a\x75\x40\x5f\xa9\x68\xd6\x78\xae\x54\xa4\x88\x73\xa5\xf5\x34\xf6\x1e\x3c\x18\x85\xfa\x2a\xf1\xdd\x20\x9a\x3c\x10\xe3\xc9\x83\x20\x52\xe2\x81\x3f\x8e\xfc\x07\x5d\xb7\xe3\x76\x1e\x5c\x85\x52\xc7\x0f\x9c\x96\x6c\x39\xee\x64\xe0\x94\x24\xd2\xa8\xc6\x22\x20\xd8\xf9\x05\x24\xec\x1a\xbb\xb9\x03\x82\xf6\x92\x66\x93\x68\x26\xdc\x69\x34\x25\x94\xf6\xcc\x37\xed\x72\xd0\xae\x8f\xdf\x4b\xc3\x99\x63\xbd\x2e\x96\x92\x70\x48\xba\x9d\xce\xa1\xa6\x19\x3b\xb9\xd3\x24\xbe\x22\x97\x58\x2f\x85\xad\x4e\x2f\x1c\x12\xc9\x18\x53\x29\x84\x7d\xe3\x44\xfe\x77\x11\x68\x67\x8b\xe9\xbb\xa9\x88\x86\x0d\x39\x9f\xcb\x64\x3c\x36\x42\x32\x7f\xca\x8a\x38\x59\xc5\x0e\xcb\xc1\x9b\xcd\x29\xd9\xa7\xb0\xd5\xed\x65\x6d\x4b\x1a\xa1\x6c\x48\x77\xfb\xb0\xd3\x6c\x12\xc9\x7c\x6d\x64\x99\x32\xff\x1a\x42\x24\x0d\x87\x64\xeb\x9a\x48\x9c\x99\xe6\x8f\x6e\x75\x4d\xf3\x52\xaa\xba\xbd\x8c\x3c\x14\xb9\x47\x6c\x4c\x46\x14\x4e\xd8\xea\x01\xdf\x1a\xa5\x8c\x5b\x8c\xee\x69\xc6\xb8\x2b\x5b\x97\x75\x0f\xf6\x44\xbf\xe3\xc9\x43\xd5\x6f\x77\xbd\xae\xe9\x8b\x2d\xe9\x6e\xa7\xdf\x89\x66\xa7\x44\x1a\x49\xeb\x72\x4a\xe7\xf3\xf4\xb7\x0f\xca\xf5\x29\xed\x6b\xcf\xfc\x0a\x40\xb9\x01\xc5\x76\xf7\xa4\xeb\xa3\x9c\x6e\x36\xb7\xaa\x65\x7b\x92\x61\x39\x23\xb1\xf3\x21\xd4\xf3\xb9\xc1\xd6\xef\x7a\xca\xf5\x4d\xfd\x1d\xbb\xc0\x3c\x5f\xd3\x4c\xdb\x28\x7a\xd8\x59\x50\xf8\xb6\x56\xb4\xa7\x40\xdd\xf5\xd3\xa3\x73\x78\x9a\x4d\xf4\xb5\x10\x2c\x03\xa1\xf0\x7d\x99\x9c\xf4\x6b\x2e\x07\x0f\x3b\xfd\x1b\xed\xa9\xfe\x40\x7b\x63\xbd\xa0\xf0\x94\x75\x8a\xa1\xb8\x2c\xa3\xbe\xe7\x9e\x04\xdf\x53\x8b\x82\x7d\xdf\x54\x65\x51\x06\x01\x81\xa7\x4b\x50\xef\x2c\x96\x6c\xda\xdc\x2f\xb0\xc7\x35\x72\x19\xb5\x4b\xc4\xb9\xbe\x28\x5e\x2a\xfb\x52\x99\x97\xb9\x6c\x35\xa5\x3f\xb0\x31\x79\x55\xe2\x94\x57\x16\xb1\xe1\x13\x63\xbd\xca\x51\x89\xad\x73\x3e\x69\xa9\x94\x35\xfc\xec\x95\xea\x59\x21\xff\xda\x0e\x72\x3a\xc2\xbd\x92\xa4\x36\xdc\x60\xdf\x52\xc1\x84\xeb\x17\xa0\xd9\xf8\x23\x3d\x67\xec\x7e\xdb\xeb\x2c\x0a\x82\x5e\x57\xfa\x6b\xdb\xeb\x42\xde\x67\x06\xfe\x23\x1b\x93\xd7\x25\xfa\x8f\x8d\x98\xca\xaa\x55\xec\x0c\x34\x93\xa9\xec\xed\xe9\x76\xbb\x47\x95\xa9\xf8\x5c\x57\x17\xae\xbc\xf8\xd7\x6a\xf1\xf3\x8b\x12\xd9\xca\x4a\x0f\xe9\xf2\x52\x49\x03\xf7\x73\xa3\x0a\x74\x7e\xd1\xc3\x39\xa0\x8d\x76\x62\x38\x1e\x34\xd3\xa6\x17\x2c\x3a\x5c\x9d\x50\xa4\xf1\x42\x9c\x1d\x1b\x1d\x97\xc2\x33\x46\x74\x0d\xb3\x11\x6b\xb9\x50\x29\xe3\x6e\x36\x45\xb5\x02\xc0\x6e\xa6\x89\xad\xe6\xae\xa8\x06\x44\xb5\xaa\xc4\x54\x15\x2c\xd5\x63\x14\xea\xac\x26\xbe\x54\x53\xb3\x99\xac\xaa\x0e\x12\x96\xb8\x3e\xe5\xb6\xd2\xdb\x6a\xa5\x90\x54\x2b\xe6\xa6\x62\xb1\xa2\x62\xa3\x89\x67\x55\x07\xab\xab\x6e\x36\xf9\xfa\xfa\x81\x33\xee\xfa\x34\xb0\x54\xdc\x2c\x53\x01\xbc\x4a\x49\x50\x9b\xfd\x1a\x0a\xa3\xe7\x98\x18\xa6\x70\xe3\x48\xe9\x75\x22\x06\xa5\x39\x8a\xf2\x05\xfe\x07\x2f\x2b\xf2\xe8\x17\xb1\xb1\x99\x81\x2c\xf3\x25\x63\x6c\xac\xfb\x1d\xcf\x3c\xdc\x68\x94\xc9\x58\xc1\x3a\x41\x25\x5b\x46\x07\x83\x17\x6b\xa5\xa1\x6c\x6f\xd0\x13\xe4\x6f\x58\xfa\xf3\xfa\xd2\x0f\x36\x95\x7e\xa0\xe6\x1d\xfc\xfc\x9e\xeb\x2b\x77\x1a\xcd\xd6\xeb\x2a\xff\x2e\x57\xe1\xf9\x77\x26\xb3\x96\x77\xcc\x52\xdb\x9f\x92\x6e\x97\x7a\x9d\x43\xd5\x6c\xca\xc3\xce\x7c\xae\xcc\xea\xd9\x39\x94\x7d\xd5\x92\x5e\xaa\x6d\x62\x65\x5c\x73\xb9\x43\x51\x04\xbd\x67\xf8\x26\x10\xe1\x18\xbe\xd8\xe7\xe1\x38\x8a\x14\x3c\xb1\x3f\x54\x94\xc8\x01\xfc\xb0\x3f\xc6\xd1\xa8\xb7\xae\x39\xcd\xe6\xa6\xc6\xce\xe7\x9b\xbe\x6e\x31\x66\x94\x2b\x43\xcf\x27\xb6\x69\xac\x7a\x7f\xeb\xe3\xaf\xe9\xd2\x76\x55\xe0\x4c\xb9\xc1\x15\x57\x4f\xa3\x81\x38\xd2\x24\xa1\x3d\x7e\xb8\xbf\xbf\xf3\xf8\x60\x3e\xdf\x3f\xd8\xed\x3e\x3e\xe4\x7d\x52\xd6\xb8\xc1\xa8\xe0\x5e\xf9\x55\x4b\x9d\x27\xad\x2e\x7e\x61\x3b\x74\x91\xab\x50\xdf\xa3\x50\x12\xc7\xa1\x1b\x0d\x9b\xf3\x0b\xa8\xe8\xc6\xd6\x06\xc9\x49\x33\x2a\x4e\xb0\x44\x61\xd2\x6a\x41\x50\xa5\x32\x98\xcf\x09\x6f\xd9\x02\x86\x42\x90\x84\x53\x23\x0a\x70\x66\xf3\x9c\x2c\x5d\x22\xab\xf7\xb7\xec\xa2\x8c\x26\x6d\x69\xd2\xbf\x4c\x93\xce\x69\xb2\xd6\x90\x59\xcb\x16\x85\x36\x8e\xa3\xff\x96\xfd\x0a\x2d\xc6\xa4\x4a\xe9\x48\x18\x1a\x55\xbc\x4a\x87\xa0\x3d\x5b\x47\xc2\xf8\x3f\xd9\xfe\xc1\xee\x4e\xa7\xd9\xdc\x7f\xb8\xbb\xb7\xfb\x4f\xc6\xfb\xfa\xbc\xdd\x16\x17\xad\xc4\x4b\xaa\x14\xc0\xef\xeb\x78\x4f\xb9\xf1\x74\x1c\x1a\xa9\xb5\xa0\xf0\xc7\x7a\x28\xec\x53\x04\x92\x92\xfd\xa2\xb5\xf4\x0b\x5c\x6b\x17\xe2\xfb\xd4\x80\x32\x6b\x71\x52\xe5\x05\x4d\x51\x31\x27\x82\x25\xf5\xe6\x26\x7d\x75\xde\x6e\xeb\x8b\x96\xf0\x0a\xfd\xb8\xb3\xc8\x14\xe5\xb4\xdf\x95\x64\xff\x32\x32\xb6\x7e\x9d\x8e\xee\x22\x27\x88\x82\x96\xeb\xf4\xf3\xad\xff\x50\x6e\x28\x07\xe2\xf6\xe3\xd0\xf6\xae\x58\x07\x6a\x04\x61\x0d\x36\x59\x0b\x9b\xe9\x39\x87\x79\x0b\x8d\xf6\x3d\xe6\xb1\x7e\x9d\x23\x60\xf9\xb7\x76\x06\xbe\xa0\xc0\x97\x71\xda\xae\xca\x55\xa7\x70\x48\xf4\x61\x37\xd3\xf6\xce\x4a\x8a\x5d\x07\x50\x0d\x69\x77\x0f\x89\x28\xd3\x8a\xd6\x59\xa6\x7d\x08\x0a\xa2\xc5\x74\x55\xe7\xc0\x91\x0a\xd6\x35\xc7\xa8\x7a\x1d\x18\x64\xba\xde\x3a\x51\x69\xc0\xba\x20\x0a\xb0\xc2\xd3\xba\x04\xb7\x0b\x43\x4f\xc2\x28\x53\x1d\x87\x9b\xaa\xde\x43\xa5\xfb\xca\x93\x8b\x94\x50\x7f\x6d\xbf\xe3\xcf\x73\x75\x61\x46\x27\xde\x30\x4f\x52\x38\xd0\x08\x39\x96\xab\x95\xbb\x3a\x30\x88\x8b\xf5\xfa\xd9\x32\x30\x24\x17\x9b\xb4\xaa\x55\x05\x80\x63\x91\x64\x65\x91\x92\x2f\xb3\x56\x08\x02\x2c\xc6\xd7\x14\x2b\x39\x2d\x97\x0a\x42\x84\x45\xa3\xb5\x45\x4b\xae\xc9\x15\x85\x21\xbc\x58\xb5\xfa\x68\x75\x97\x15\xba\x31\xaf\xde\x9c\x7c\xfc\xe0\x4e\xb9\x8a\x05\x6a\x66\x01\xd7\xc1\x55\xc9\x99\x3d\xd1\x64\x46\xae\x34\x38\xa7\x57\x61\xdc\x08\xe3\x86\x8c\x74\xe3\x86\x8f\xc3\x41\xc3\x94\xdc\x6a\x38\x2d\xe9\x4e\x44\x1c\xf3\x91\x00\x83\xc0\x28\x47\x03\xc3\x05\x37\xb2\xc4\x66\x37\x69\xed\xf1\x2c\x44\xfc\xee\x36\xbd\x0f\x78\x2c\x1a\xbb\x5e\xea\x20\xf0\xa3\x68\x2c\x78\xc9\x3f\xa0\xfa\x33\xa3\x2c\x7a\x57\x92\x38\xbc\xf1\xe4\xe3\xc7\x77\x8e\xd1\xfa\xb0\xd4\x4e\x56\x4a\x26\x13\x5f\xa8\xc2\x4a\x57\x7d\x04\x97\x8d\xd7\x1f\x4e\x0d\xb8\x47\xd4\x21\x6b\xef\x74\xf7\x1e\xee\x3d\xda\x3d\xd8\x7b\x38\x9f\x17\xcf\x87\x4c\xcd\xe7\xa4\x33\x57\xd4\x68\x22\xb4\xd9\x24\x5b\x61\xfc\x22\x94\xa1\x36\x5d\x31\x9f\xab\x7f\xef\xd2\x3a\x3a\x24\xc9\xd2\xb0\x57\xa3\x61\x0d\xe1\x2f\xde\x7d\x3c\x3a\x2d\x28\x3f\xc8\x4a\xd5\xed\xc6\xac\x94\x6a\x84\x32\xd6\x5c\x06\xe6\xe5\x09\x02\xe1\x97\x96\xe3\x64\x28\x4f\x4e\x8f\x5f\x7f\x78\x59\xe0\x7c\xec\x65\xb2\x2d\x75\xba\x98\x02\xd2\x0d\x2c\xbc\x79\x59\xc0\xee\x67\xb0\xa5\x96\x3c\xcc\xde\xa1\x96\xe4\x86\xb1\xd5\x96\x14\xed\x6f\x4b\xeb\xba\x80\xe3\xac\xee\x77\xaf\x4f\x4a\xad\x79\xf4\xd7\x25\x27\x32\x2d\x2a\x1b\x47\xc7\xc7\x47\x7f\x14\x85\xbb\x1d\x2f\x93\x9f\x83\x95\x0e\x25\x55\xb8\x91\xe6\xf3\xad\xcc\x44\xcf\xc4\x6b\x8a\xf4\xe3\x93\x37\xcf\x9f\x9e\x36\x66\xa1\xbe\x6a\xf0\xc6\x30\x14\xe3\x41\x43\xf2\x89\x18\x34\xfe\xa7\xd3\xd2\x2d\xe7\x7f\x62\x85\x56\x0a\xdf\xa4\x44\x9d\xeb\xc2\xc5\x19\x0a\x22\x68\x5f\x78\xc8\xe8\x53\x6d\x66\x10\x5a\x3d\x96\xc4\xae\x67\xc8\x13\xb8\xc2\xd5\xdb\x58\x23\xa4\x68\x5d\x38\x24\x2a\x5f\x65\x74\x05\xac\xf1\xee\xe3\x87\x97\xcf\x8f\x1b\x1c\x71\x35\x3e\x08\x31\x68\xe0\x62\xd0\x40\x62\x1b\x7e\xa2\x1b\x91\x1c\xdf\x35\x62\x21\x1a\x4e\x2b\x43\xd3\x72\x1a\x42\x6a\x15\x8a\x18\x2b\xf8\x85\x96\x8c\xea\x2d\xd9\xf1\xfe\xb2\x8b\xff\xa2\x81\xb6\xa7\xf3\xee\x4c\x80\x33\xbb\xc4\x25\x76\x60\xb0\xd9\x57\x3c\xfe\x38\x93\x9f\x54\x34\x15\x4a\xdf\x91\x84\xd2\xfb\x12\xb5\xc9\x85\x55\x16\x90\x54\x5a\x16\x31\x53\x0d\x49\x4a\x2f\x67\xaf\xc9\x25\xb1\xbf\xa0\x50\x5e\x67\x9a\xbc\xd6\xa4\x68\xd0\xae\x57\x18\xbf\xd2\x1d\x42\xc4\xa4\x3b\x82\x90\x75\x7a\xe1\x61\x94\xaf\xc8\xad\x56\x4a\x40\x74\x1e\x5e\xa4\x83\x53\xad\x5e\xf4\x02\x16\x10\x53\x59\xa9\xa6\x20\xab\x65\xcf\x2b\xc8\xaf\xf5\x34\xbe\xbe\xc2\x92\x46\x34\x88\xb4\xc4\x7e\x4e\xd7\x90\x9d\x81\x6f\xa8\xea\xf9\xae\xdf\xf3\x99\xef\xfa\x29\x31\xbe\xf5\xe9\x84\x43\x52\x23\x65\xc8\x5e\x1b\x84\x30\xcc\x89\x99\x68\x72\x87\x2d\x1f\xd2\xbc\xe9\x5e\x4d\x38\x5b\x17\x51\xfa\xb5\x53\x9a\xe1\xd2\xb4\xaa\xf0\xdb\x6c\x6f\x76\xcd\xaf\xdc\x1c\xb8\xb7\x3d\x6c\x05\x38\xee\x0d\xa4\x3d\x18\x54\x07\x70\xa4\xcd\xb2\x83\x03\x88\xfb\x09\x81\xcb\x4b\xfd\x69\xac\x84\x92\x4f\x7b\x52\xde\x42\x9d\x91\x48\x40\x4e\xc6\x8a\x0d\x55\xbb\xf1\x54\x94\xbe\xaa\x6a\x16\xf9\x12\xf5\xfc\x76\x2a\x02\x1d\xca\x91\x59\x94\x70\x31\x2a\xfc\xf2\x32\xf7\xd8\x2d\x7b\xb2\xa5\xbb\x6d\x56\x80\xdc\x85\xbb\xd5\xed\x2d\xad\x53\x1d\xaf\xda\xf5\xd2\xe5\x06\x8f\xcb\x7b\xe9\x32\x96\xae\x4b\xe9\xd2\x90\xca\xfa\x8a\xc8\xdd\xea\xd4\xc5\xb5\x1b\x20\x8e\x20\x13\xc3\xa9\x4c\xcd\x26\x6c\x0a\x36\x95\xb9\xff\x38\x17\x9c\x39\x86\x01\x62\x18\x34\x9b\xcb\x50\x25\x5a\x05\x42\x89\x55\x50\xbb\x05\xd4\x10\xa1\x86\xcd\xe6\xc8\x40\x8d\x40\xb9\xa3\x62\x1a\xe4\x50\x57\x08\x75\xb5\x0a\x57\xbe\xb8\x94\x10\x94\xd8\x6f\xb4\x5e\x6b\xde\x2a\x54\xee\x62\x10\x4a\xea\x73\x4f\x1c\x6a\xdc\xc8\x34\xcc\x67\x2a\xc6\x4d\xb5\x73\x71\xb1\xce\xfb\x3f\x5b\xab\x88\xa2\xc2\x63\x57\xdf\x70\x78\x47\x14\x18\x01\x08\x92\xb6\x1c\xa7\xac\x18\xdf\x95\x39\x50\x22\xce\xdb\x4d\xe6\x9d\xdd\xc8\xd4\xa9\x1e\x7c\x2d\x99\x41\x5b\xa0\x3b\x2a\xa1\xbb\xdf\xf6\x3a\xc0\x8d\xd2\x9c\x7f\x3e\xa9\x7e\xee\xd6\x3e\x9f\x56\x3f\xef\x80\xef\x49\x08\x3c\x53\x85\xd5\xd2\x9f\x6f\xd0\xd2\x77\x11\x7a\x80\x8a\x3f\x7c\xdb\x00\xb8\x57\x02\xc4\x56\x7c\x97\x65\x9f\xfc\x53\x24\x42\xa2\xeb\x19\x84\xf7\x5d\xb6\x5a\xa9\xa9\x80\x3d\x78\xe5\x9d\x5f\x2c\x32\x09\x79\x66\x60\x41\x16\x2d\xb8\x2c\xcf\xf8\x53\x49\xca\xd3\x5c\x92\x23\x49\x9e\x1a\x00\x4a\xcb\xf3\xfc\x4d\x4a\xa0\x74\xaf\xac\x81\xa4\x28\x20\x62\x6c\xf2\xbb\x4a\x4b\xca\x63\x51\x43\xff\xc6\x7e\x05\x5b\x0d\x56\x61\x9b\xf7\x41\xb2\xad\x2e\xbc\x92\xc6\x32\xcb\x2b\xc5\x0a\x8c\x9c\x78\x25\x53\x4f\x36\x85\xad\x0f\xa9\xbf\xdb\x94\xe8\xf4\x24\x7b\x25\xdd\xf8\x2a\x1c\x6a\x42\x7b\x74\xab\x1c\x15\x82\x3b\x3a\xca\x1d\xa6\x16\xb3\x34\xf3\xc9\xdd\x36\x2c\xde\xb1\xfb\x62\x5d\xf3\x4f\x0e\x37\x32\xb6\xe7\x08\xc5\x8f\xec\x51\xe5\x8e\x98\xf9\x19\xa2\x88\x35\x93\xc7\x36\xc8\x20\xc4\x0f\x3e\x31\xe8\xcc\x72\x93\x41\x2e\xc4\x38\x16\x86\x5a\x0c\x1e\xc9\xf7\x19\xdc\xa1\x1b\x60\xd5\x7e\xa5\x27\x0c\x1e\x69\xba\x10\x5d\x10\xe1\x90\xec\x5b\x6a\x52\xf2\x94\x7b\x55\x9d\x83\x69\xc5\x43\xac\xf8\x2a\x6b\x32\xc5\x4a\x1b\x86\x06\xc3\x5d\xe8\x84\xec\x78\x5d\x63\x0a\x1a\x50\x08\x3d\xe5\x8e\x16\x90\x95\x1d\x2c\x16\x0b\x22\x69\x0f\x7b\x7b\xb1\xd8\x60\xcd\xbd\x36\x03\x25\x40\xba\xc1\x33\xf3\xe7\xb1\xf9\xb3\x57\x2c\x08\xcb\x31\x37\xf4\x7e\xb1\xa8\xec\xe0\xbd\xae\x19\x72\x76\xed\x9a\x91\x81\x04\x09\xaa\xaf\xdc\xe1\x98\x8f\x62\xef\x26\x0a\x07\x8d\x0e\xed\xe1\x2a\x36\x9f\x4f\x49\xea\x16\x8d\xd8\xfd\x02\x42\x46\x02\xa6\x09\x2e\x65\x66\x25\x66\x9c\xf8\x10\x9a\x45\x71\x85\xed\x0f\x02\xa5\x94\x30\x1a\xd0\x47\x99\x79\xa7\x3e\x1a\xf1\xd4\x4b\x5c\xde\x6c\x12\xa2\x99\x9e\xcf\xef\x17\xf4\x5c\x5c\xb0\xc4\xe5\x04\xcd\x24\x30\x10\x2b\x10\x0a\x76\x3f\x42\x8b\xda\x92\xb8\x80\x84\x49\x37\x00\x6e\x74\x64\x30\x7a\x8e\x40\x3d\x67\x98\x6f\x4f\xb9\x57\xec\xa9\x24\x33\xf2\x5c\xe6\x1d\xd5\x28\x87\x2c\xe1\x17\x09\xf7\xdb\xde\x3e\xf8\x5e\x99\x19\xec\xde\x8d\x74\x79\xc5\x9d\xec\x6e\xf7\xef\x08\x07\x81\xc2\xcd\x0b\x9a\xcd\xa8\x7f\x8b\x31\x7d\xca\x0d\x41\xb9\xdf\xcd\xdb\x3b\x7c\x11\xf4\x95\x6b\x86\xda\xbc\x32\xc3\x00\xd2\xf5\x29\x5d\x90\xb2\x7f\x4d\x2f\x48\x04\x7e\x69\x80\x7c\xdb\x54\x33\x26\x02\xa4\xe9\xd6\x21\x09\x8d\xae\x00\x8a\xc2\x4b\x49\x22\x08\x5c\x1f\x12\x12\xd2\x1c\x47\xf5\x2d\xf0\xfe\xfd\x34\x52\x3a\xf6\xf8\xc2\xbb\x4f\x77\xb7\x24\xbb\x5f\xe0\x00\x1e\xff\xaa\x4c\x50\xee\x88\xd4\x45\xc2\x9a\xf5\x62\x46\xde\x49\x90\xee\x15\xa4\x62\x5b\x55\x59\xee\xeb\xe6\x68\x30\x14\xe6\xd7\x9e\x82\xb1\x11\xe8\x85\x6c\xfb\x59\x97\xe8\x13\xf3\xdd\xb4\xe1\xd9\x46\x51\x2e\x3d\x09\x51\xcd\x87\xf3\x32\x5f\x8c\x90\x85\x20\xc9\x76\x3a\x91\x2d\x5f\x48\xb2\xd5\x01\x05\x09\x2e\x74\x14\xcc\xef\x2e\xe8\xfc\xb7\xa4\x6f\xd2\xf5\xf4\x7e\xdb\x73\x86\xb7\x0e\x70\x2f\x39\x17\x17\xf3\xf9\x7d\xe8\x9d\xc1\x77\xef\xac\x12\xb5\xf6\xa2\x34\x6f\x53\x2d\x49\xe5\x5a\x52\xd7\xb3\x13\x40\xb9\xd7\xc0\x19\xe1\x2c\x81\x88\x09\x98\x11\xd9\xff\x28\xcf\xf9\x85\x2b\x3c\xfb\xef\xb0\xa2\xe7\x15\x5b\x89\x51\x4f\xe1\x76\xd5\x0f\x6a\x44\xe7\xd4\xc8\x8d\x7c\x09\x36\x3a\x62\xb1\x1d\x65\x26\x08\xd1\xe7\xc9\x85\xa9\x86\x43\xc2\x48\x82\xce\x66\x5a\xa2\x1b\x64\x3f\x71\x43\xf6\x9a\x70\x48\xdc\x90\x7a\x89\xfb\x3d\xfd\xf1\x9d\x42\x42\x73\x67\x42\x61\x48\x28\x77\xd2\x0b\x5c\xdf\x98\x04\xae\x4f\xb1\xad\x86\x39\x4d\x6b\xd3\x8a\x7b\x15\xb7\x05\x92\x91\xf6\x89\x1b\x81\x86\xfb\xa9\xa7\x5c\x09\x3f\x3c\xb1\xb0\xcb\x14\x87\xa8\xe8\xbc\xcf\xd8\xdc\x8f\xf2\x5c\x5e\x34\x9b\x53\xb2\x5b\xea\xd7\xf7\x55\xae\x43\x48\x40\x48\x76\x2f\xbc\x2f\x12\x94\xa7\x80\x7b\x4f\xe4\x02\xbe\xe6\x6b\xe0\x97\xb5\x5a\x4e\x25\x6c\xe5\x49\x3e\xe1\x35\x04\xec\xfc\x02\x22\x86\x98\x5d\x65\xa4\x9d\x66\x1d\xa8\x4d\x0f\x3b\x18\xb1\xd0\xa7\xe1\x44\x44\x49\x49\x66\x67\xab\x35\xa5\x0b\xd0\xf9\x60\x94\x3e\x07\x63\xc1\x55\x56\x4c\xa1\x3f\x28\x83\xb2\x75\xfa\x2c\xb4\xed\x72\x83\x35\x7e\xff\x9e\xca\x36\x2d\x69\xa1\x02\x06\x90\xb0\x88\x28\xb4\x09\xad\x79\x92\xe9\x8f\x1c\xc3\xa2\xf8\x05\x29\x02\xe5\xc2\x05\x85\xfb\x38\xf1\xe3\x40\x85\xbe\xa8\x88\xbd\x20\x5b\xd5\x17\x90\xc8\xd5\x20\x44\x9a\x25\x20\x48\x1d\xf6\x94\x96\x5c\xcb\xf4\xb0\x33\x9f\x07\xb8\x31\x80\xbe\xfc\x2e\x5d\xd8\x59\xfb\x43\xf6\xd6\x48\x9e\x55\x06\x0d\xee\x85\xd2\x4c\xcd\xfa\x24\x99\x93\xc8\x81\x18\x86\x52\x0c\x0a\xdb\x7c\x10\x05\xc9\x44\x48\xdd\xcf\x1e\xbc\xfb\xd2\x8e\xff\xdb\x5c\x39\xe2\xd3\xa9\x90\x83\xa7\x57\xe1\x78\x60\x3a\x7c\xd5\x02\x2b\x98\x70\x65\x34\x10\xc5\xb2\x31\xe5\x4a\x48\xfd\x21\x1a\x08\x57\x89\xe9\x98\x07\xc2\x22\xd8\x56\x44\x96\x97\xdc\x05\x05\x41\xe1\xbe\x22\x6f\x7e\x5f\xa9\xcb\x9a\x96\xfc\x51\xe1\xc7\xb2\x5b\xf4\x2f\x36\xc1\x3a\xa5\x31\xbf\xcf\x64\x08\xef\x89\x16\x4b\x5c\x7f\x3e\xef\x40\xba\x97\x95\x14\x5b\x6c\xad\x62\x97\x0a\x85\x6c\xe0\x05\x30\xf0\x06\x0a\xe3\x1f\x3d\x0d\x43\x8f\x83\xef\x09\xd4\x10\x48\xba\xe2\x83\x54\xff\x1d\x04\xfe\x1a\x89\x3b\xbf\x44\xa2\xdd\x99\x51\x9b\xb4\xf4\xef\x9e\xc4\x25\xc5\xf7\xba\x2d\xa2\xb0\x72\x5a\x19\x20\xad\x6a\x65\xf6\xcd\xf2\x03\x13\x4f\xc1\x75\xa6\x59\x2c\xd6\x08\x0e\xad\xc8\xb9\x04\x75\xb1\x42\xef\xb2\x7a\x63\xca\xb4\x42\x6d\x30\x86\x2c\x0e\xd0\xab\xb0\x64\x61\xcf\x0b\x74\xa7\x2b\xb6\x41\x21\xcc\xf1\x80\x58\x85\xa9\x08\x87\x46\x5c\x5c\x31\xb2\x71\x03\xa0\x84\x0e\x92\x55\x08\xcb\x61\xd2\x8b\x5f\xd8\x20\xa8\x20\x04\xbe\x0a\x65\x35\x72\x7a\xf1\x4b\x5b\x08\x35\xb4\x10\xac\x42\x5c\x8f\xa5\x5e\xfc\xe2\x36\xc3\x12\x72\x88\x56\xa1\x5f\x0e\xae\x5e\xfc\xf2\x66\xc4\x8a\x2a\x20\x5c\x55\xc9\xaa\x60\xeb\xc5\xfa\xc8\x0d\xa3\x9f\xf0\x8e\x53\xd2\x81\x28\x04\x1b\x66\x8a\xc3\xbb\x65\x60\x88\x36\xc2\xee\x54\x60\xc3\x8d\xb0\xbb\x65\xd8\xde\xba\x79\x80\xa0\x7b\x06\x54\x41\xe4\xdd\x0f\xb1\x84\x5e\x54\xa6\xea\x50\x15\xb2\xd4\x31\x6b\xd1\x54\x3b\xc6\xa0\x72\xa6\x8e\x27\xd7\xcc\x51\xd3\x09\x68\xae\x6d\xf7\x67\x84\x2b\x30\x0a\x07\xd1\x4c\x82\x64\x63\x81\xfb\x8b\x11\x35\x02\x47\xb8\xdb\x46\x34\xf7\xef\x88\x2f\x40\x1e\xee\xf6\x63\xe5\x8d\x15\xc4\xc2\xa8\xbe\xc2\xe5\xd4\x9b\x91\xa1\x48\xfd\xc4\x0b\x4a\xbd\x34\x3e\x0d\x44\xb6\x9b\xa7\x20\x5e\xd7\x0f\x8d\x4b\x22\xed\x72\x6c\x44\xa2\x19\xb3\xb5\x3d\x16\xbc\xf3\x0c\x68\xf0\x8e\x02\x7f\xe2\x29\x97\x3f\x01\x7e\x63\xfe\xbd\xa9\x74\x05\xca\xc5\x92\x2e\x78\xbf\x28\x85\x95\xe5\x4e\x23\x0e\x82\x69\x77\x1b\x12\xa6\x5d\x89\x21\x00\x51\xcf\x0c\xde\x16\x63\xa2\x4f\x34\x53\xa8\xba\x12\xf3\x0f\x33\xab\x97\x19\x2c\xc6\x98\x68\x36\x9d\x60\xcc\xe3\xd8\xfc\x48\xfa\x37\x8a\x68\x7b\x5a\x01\x55\x48\x4e\x3d\xfb\xf5\x03\x9f\x88\x1c\x42\x59\x08\x85\x10\x8b\xe5\x30\xb8\x1b\x55\xd1\xbb\x99\x3c\x57\x17\x3d\xf3\x87\x89\xbe\x68\x39\x0d\xa7\xa5\xbd\xd2\x79\xb5\x6d\x55\x75\x7f\x6d\x67\x16\x78\xbe\x45\x60\x20\xdc\x6b\x8c\xf0\xbc\x66\xd2\x9d\x60\xfc\x31\xcd\xbc\x07\x39\xd8\x27\xe9\x06\x4a\x70\x2d\x4e\xc5\x2d\x2e\xe1\x36\xda\x2e\x1c\x92\x3d\x04\x2b\x79\x77\xa5\x7b\x8d\x26\xe4\xf7\x9e\xf9\x24\xdc\xed\x1e\x5d\xda\x03\x48\xfa\x09\x3b\x4f\x40\xb8\xdf\x2f\xbc\x6c\x27\xda\x28\xc8\x46\x69\xb8\xee\xd9\xb8\x8f\xfb\xef\x5e\x02\x53\x4f\x65\x0e\x1e\x12\xb0\x6d\x45\x04\x18\x1b\x59\x8c\x27\x97\xe2\x46\x48\x7d\x69\x54\x8c\x4b\x25\x86\x8c\x43\xb0\x08\x87\x64\xb7\x4c\xf5\x44\x11\x63\xc0\x5e\x11\xe9\x8e\x28\x28\x90\xee\x80\x42\xd0\xcb\x1d\xf8\xfd\xbc\x59\xcf\xc7\xc2\xa8\x3b\x1f\x4e\x88\x74\x87\x80\x1b\x59\xf5\x6f\xb8\xbd\xd5\xfb\x21\x9b\x4d\x87\x9b\xf9\xe2\x06\xcd\x66\xe0\xf2\xc1\xe0\xb9\x21\xe4\x5d\x18\x6b\x21\x85\x22\x4e\x30\x0e\x83\x6b\x07\x7e\x48\x12\x50\x0a\x86\x84\xb4\xe6\xdc\xb9\x18\xa1\x51\xbd\x62\xdb\xe0\xad\x24\x01\x6c\x2b\xd2\x35\x8d\xe8\x47\xe7\xe1\x85\x67\xfe\xe0\x46\x40\xae\x68\x06\x25\x9f\xb6\x5a\x72\xae\x1b\xf3\x4b\x97\x43\x56\x7a\x46\x24\x99\x81\xe8\xaf\xf4\x25\x30\xe9\xc6\xfa\x6e\x2c\x56\x46\xa4\x2e\x88\x84\x84\x7a\xe9\xe4\xaf\x62\x28\xdb\x7e\xd2\x0c\xc8\x8b\x18\xb9\x08\x9f\xcc\x34\x28\xcc\x41\x5d\x84\xf2\x88\x0b\x08\x98\x31\xf5\x0c\xeb\x70\x74\x03\x05\xf6\xaf\xfb\xc3\xdd\x66\x8c\x71\x34\xec\xdc\x1f\x8c\xf7\x82\x48\xea\x50\x26\x62\x21\x5d\x25\x26\xd1\x8d\xa8\x76\xb4\x30\x2b\x50\x50\x38\x34\x42\x30\x53\xb9\x74\xee\x27\xb3\x29\x86\xee\x0f\xd0\xec\x06\x45\x07\xc8\x6c\x0b\x44\xd3\x52\xaf\x41\x62\xc4\x98\xa2\xa0\x98\x76\x39\x70\x96\xf4\x93\xc3\xdd\xbe\x72\xb9\x67\x84\x88\xa7\x40\xb3\xae\x99\xa2\xca\xf5\xbd\x5d\xc6\x92\x66\x13\x65\x4a\xc0\x88\x6e\x36\x4d\x17\x46\xd3\x4f\x2a\x9a\xf2\x11\xb7\xcb\x0d\x90\x9d\x25\xf0\x1b\x6a\x40\xa7\x0a\x19\xf7\x99\x18\xf2\x64\xac\x09\x85\x90\xf6\x04\x0b\xdc\xef\x3d\x1b\xdc\xbb\x1c\xb5\x2e\x28\x67\x82\x70\xda\x43\x1f\x58\xc1\x44\xb9\x35\x12\xb5\xdb\x3d\x03\x73\x1e\x5d\x18\x30\x63\x47\x4c\x17\x01\xe1\xe8\x25\xc9\xd6\x6e\xf7\x07\x93\x30\x5c\x10\x05\x9c\x82\x5c\xe6\x5b\x01\x01\xf8\xaa\xd9\xbc\x9f\xf2\x38\x0e\x6f\x84\x37\x36\x75\x1e\xee\x18\xed\xc1\x08\xb6\xc0\xba\xe0\xd6\x8f\x85\x05\xcb\x54\x3d\x64\x11\xe4\x9d\xdd\x55\xdc\x97\xab\xba\x96\xe3\x4a\xb1\x3e\x3d\xd1\x97\x6e\x2c\xf4\x91\xd6\x2a\xf4\x13\x2d\x88\x3d\x62\x96\xd6\x5b\x7a\x4d\x17\x39\x7f\xee\xfd\xbd\x3a\x20\x61\xc2\x1d\xa2\xb4\x89\x96\xea\xfb\x70\x42\x12\x58\x5d\xa7\xfd\x54\xd4\x7b\xc3\xc7\x89\xc8\x45\xfd\x95\x08\xae\xc5\x20\xfd\x89\xce\x36\xc6\x12\x33\x27\xd0\x0d\x47\x17\x0b\xad\xee\xee\x67\xa1\x1c\x44\xb3\x15\x62\x43\x3b\x76\x57\xe0\x23\x8a\x4a\xd7\x9a\x66\xf9\xa6\xe6\xfd\x02\x9c\x74\x60\x1c\xb8\x1f\x09\xed\x95\x54\x1b\x5f\xb1\xad\x8e\x51\x4d\x8a\x50\x8a\xd2\xce\x55\x65\x09\x38\xcf\xa3\xcc\x47\xa9\xec\x80\x0e\x2d\x9f\x70\x9e\xaa\xb2\x09\x77\xbf\xed\x29\x50\x9e\x86\xd8\x13\xa0\x53\x3d\x1e\x92\x4c\xa1\xcf\x1d\x25\x45\x30\x51\x69\xeb\x45\x55\xce\x7b\x60\xec\x65\x26\x98\xa4\x51\x13\x8c\x36\x61\x26\x63\xb2\xc5\x98\x15\x05\xdd\x2d\xec\xb1\x1d\x7c\x51\xf6\x76\x4c\xcd\xda\xd9\x01\x81\x1b\xa2\x6c\xb5\x1f\xc7\xc8\xd4\x5f\x3c\xcc\x64\x96\xd7\xfc\x48\x5a\x6a\xc9\x49\xd7\x18\x4a\xd2\x1d\x80\xf0\x04\x0c\x3d\xb3\x0e\xf8\x9e\x74\xfd\xc5\xc2\x08\x06\xce\xba\x8b\xd4\xf7\xc4\x53\xcf\xd3\x7e\x65\x37\x78\x0c\x91\xa9\x1c\x42\x16\xe4\xfb\x8a\x2c\x64\x8c\xe5\x12\x7e\xd8\x6c\x86\x66\xa6\x0e\x59\x70\x1e\x1a\xe6\x30\xb2\xdd\x74\xc0\xb0\xdc\x56\xa2\x70\x21\xbe\xa6\x3d\xf3\xa0\xcc\x8a\x6c\x15\xa3\xda\xd8\xb9\xd7\xa0\xdc\x6b\xf0\xcd\xf8\x61\xb9\xce\xa1\x9f\x47\x97\x61\x7f\x75\x41\x80\x4f\xf3\xd0\x91\x8c\xd8\xd8\xac\xcd\x30\x66\xca\xfd\x0e\x03\xb6\xd5\x85\x1b\x53\x1d\x2e\xd6\x37\x66\xb1\x1e\xb0\xad\x0e\x2c\xad\xd8\x71\x3f\x66\xe7\x31\xdc\x98\x15\x3b\x4e\xc3\xb7\xcd\x8a\x7d\xc3\x6e\xdc\xeb\x7c\x65\xdb\x66\x2a\x45\xb5\xbd\x1e\xd5\xb8\x3f\x66\xe7\x63\xd8\x36\xa8\xc6\x16\xd5\xb6\x41\xb5\xcd\xb6\xdd\xeb\xac\x89\x83\x66\x33\x4e\x9b\xb3\xc5\xd8\x38\x7d\xec\xd7\xb9\xc1\x23\x64\xb0\x6e\xda\xb3\x4e\x4f\x1f\x16\x67\x0c\xec\x4e\x9e\x3c\xd7\x17\x86\x13\xcf\xf5\xc5\x8a\x6d\x3c\x12\xc3\x98\x7a\x31\x63\x6c\x4c\xe7\x73\xac\x67\x07\x04\x8c\x6d\x17\x9b\x7e\xbf\x81\x6d\xc3\xd2\xad\xee\xd2\xde\x37\x0e\x82\x74\x39\xee\x2b\xf2\x74\x0c\x76\xd1\x8d\xcd\x97\xb6\xd1\x11\xdd\x2c\x9f\x21\x70\x5b\x0f\x33\x5a\x82\xb8\xce\x20\x76\x3d\xdc\x3f\xbe\xc2\x7a\xae\xd6\x4e\x13\x9f\xdd\x19\x2e\x19\x80\x32\xaa\x87\x9f\xd2\xb3\x87\x3c\xd1\xf3\x99\x72\xc3\x62\xc3\xb5\xdc\x82\x0c\x72\xdf\x72\x4f\xd9\x81\x5c\xa2\x26\x49\x97\xf4\x5e\xbe\xa1\x6c\xd6\xb6\x74\x37\xb7\x4f\x08\x2f\xd7\x4e\x4b\x95\x73\x63\x8c\x66\x72\x81\x7a\x25\x8a\x4b\x67\x8e\x55\x4d\xc1\xc8\x2c\xb5\x22\xf4\x43\x52\xa3\xd6\x6c\xe1\xd2\x6a\xd4\x93\xec\x69\x37\x7f\xda\xc3\xa7\xbe\x0d\x14\xe9\x93\x88\xc9\xf3\xe4\x82\x32\xc6\x88\x0d\x73\xa6\xcd\x66\x2a\xbf\xd3\x12\x99\xfc\xb6\x32\x28\xd5\x79\x74\xb3\x49\x48\xc0\x22\x6a\x94\x13\x12\x31\x4e\xdd\x6d\xdc\x86\x0e\x5c\x0e\x51\x7a\xdc\x8a\x08\x26\xec\x7e\x8b\xd5\xeb\x2b\xbf\x75\x3f\x55\xc0\x74\xdf\x71\x32\x55\x4a\x9b\x0a\x76\xed\x5b\x2b\x4b\xd1\x56\x33\x62\x69\x08\x51\x26\x5e\xbd\xe5\x93\x3e\xe7\xc9\x85\x41\x63\x56\x0a\x2f\xed\xe4\xec\x68\x9a\xa9\x11\x12\xd3\xd9\x75\x82\xb0\xdb\xc2\x34\x62\x06\x7b\xaf\x42\x74\x68\x04\x62\x58\x3e\xdb\x59\x1c\xe2\x2e\xc9\xf0\x4c\x72\x0b\x94\xdc\x02\x24\x4b\x32\x41\xa7\x18\xcf\xa6\x99\x3a\x94\x7d\x1c\xd4\x03\x10\x70\x7f\xe3\x29\x08\x3d\x3c\xdc\xe0\xc9\x43\x95\xf2\xc1\x43\xfb\x49\x82\xf0\xf8\xa2\x50\x8b\x03\x26\x0f\x55\x1f\x2d\x57\xd6\xe9\x45\x87\x41\x2f\xca\x82\x41\x42\x96\x9c\x47\x17\xbd\x91\x22\x21\xf0\xf3\xe8\x02\x34\xb4\x5a\x36\x76\x35\x44\x67\x54\x89\x4b\xaf\xd5\xea\x03\x39\xc0\xd9\xfd\x22\xf3\x45\x5b\x05\xdc\x34\x63\x98\x0b\x68\xf0\x59\x98\x3d\xc6\xac\x03\x63\xd6\x81\x01\x13\xbd\xf8\x70\xd8\x6c\x8e\x0f\xfd\x74\x83\xf5\x06\xb6\x19\xb9\x61\xd1\x79\x7c\x41\x5d\x0e\x13\x46\x9e\xb3\xf0\x7c\x8c\x3f\xae\xd8\x8d\xeb\xc3\x94\x3d\x77\x7d\x23\xd8\xb7\xb7\x18\x9b\xd8\x52\x23\x98\xc1\x1d\xdc\xc2\x35\x1c\xc1\x89\x29\xdc\xea\x5e\xc0\xa9\x29\xd8\xea\xe2\x22\x70\xd2\x6c\x92\x19\x3b\x71\x7d\xb8\x63\x13\xc3\xa6\x23\x76\x62\xf8\x0b\x4e\x9b\x4d\x72\xcd\x4e\x5d\x1f\x8e\x98\xd1\x90\xc9\x2d\x3b\xc5\x0f\x47\xcd\xe6\x1d\x1d\x29\x72\x05\xd7\x90\x40\xab\x35\xa0\x70\xa2\x30\xd9\xc4\x36\x4c\x61\x6c\x54\xb2\x41\x8b\x5d\x59\x4f\xe1\x69\xf6\x65\x66\x21\x07\x2d\x36\xb3\x5f\xe2\x16\xdb\x81\x71\x8b\xed\x58\xfd\x32\x1c\x92\x23\x3a\x68\xb5\x32\x5c\x93\x0c\x57\x5e\xd3\xa0\x8c\x37\x6e\xb1\x6e\xb5\xf4\x1d\xcd\xeb\xba\xca\xeb\x4a\xa1\x47\x8a\xcc\x60\x9a\x51\xbb\x4c\x43\xb7\x97\x6d\x2e\x6f\x9d\xcc\xe7\xa3\x2d\xc6\x6e\xa9\xaf\x04\xbf\xee\xd5\x71\xd6\xa9\xab\xd5\x71\xbd\xbe\x8e\x9d\x85\xd5\x64\xb1\x3d\x65\x5a\xf2\x16\xb5\x60\xdc\x6a\x2d\x70\x5b\x20\x3e\x1c\xf6\xb2\xf6\x94\x06\xdd\x8e\xf3\x72\x41\x7b\xbc\xb2\xe0\x95\xe7\xf0\x8d\x7d\x9b\xcf\xcf\x2f\x7a\x29\xbd\x25\x5e\x79\xee\xfa\x90\x2a\x54\xdf\x28\xd6\x48\x3a\x87\xd9\x94\x9a\xcf\x3b\x87\x41\xfe\xfc\x2d\x93\xa0\x8f\xcc\xcc\x99\x79\x09\xdc\x7a\x01\xdc\x79\xdf\xd2\x0d\x9f\x23\xc5\x9c\x4b\x31\x9e\xfc\x7e\xf0\xe4\x5d\x29\xa9\xcd\x89\x5a\xb5\x35\x8d\xe7\x0f\x4d\x0f\x07\xd9\xda\x91\x1e\x0a\xbb\x57\x5e\x02\x47\x5e\xc0\xee\x03\xaf\x03\x3f\x3d\x01\xe6\x45\x9c\x7b\x6f\x53\x3d\xc3\x94\x67\x01\x9a\x51\xc6\x4e\x0d\xdc\x80\xde\xd7\x30\x2c\x28\x04\x6e\xc0\x76\xd2\x1d\xee\x8a\xe2\x12\xb8\x3f\x41\x40\x04\x81\xab\x0c\x94\x62\x89\x45\x1b\xb8\xb1\x1b\xb3\xfb\x99\x17\x59\x0c\x8b\x8c\xfa\xd6\x91\xca\x5c\x99\x45\x70\xca\xf2\x4a\x94\xb7\x8b\xe7\xc1\x05\xdc\x92\x96\x11\x12\x54\x09\x11\xc0\xdd\x9f\x10\x40\x92\x2e\xee\x53\x45\x14\x3c\x86\xc4\x74\x70\x00\x47\x46\x34\x2d\x4e\xab\x34\xd8\x30\x84\x7b\xc5\x72\xd8\xcc\x83\x8e\x9d\x72\x1f\x78\xdd\x52\xbf\xa9\xf2\xda\xf9\xbc\x24\x95\xb6\x4a\xdb\xe6\x35\x8f\xa9\x15\x76\x46\x49\xed\xd9\x70\xbe\xd0\x55\x96\xa9\xcc\xda\xca\x53\xb6\xf2\x21\x66\xa1\x55\x9e\xcd\x10\xc4\xfd\xe7\x86\x1e\xed\x5e\x43\xe8\xc6\x10\x51\xef\x11\xbe\x25\xa1\xab\x99\x82\xd0\x4d\x58\x04\x9d\x43\x62\xe4\x5b\xec\xce\x68\xae\x26\xda\xea\x7d\xe8\xa4\xd5\x53\xef\xf1\x72\x41\x62\xea\x8a\xcd\xb2\x12\xbb\x47\x6e\xcc\x94\x45\xb5\x19\x11\xf5\xca\x38\x28\x6c\x11\xd3\xaa\x56\x0b\x37\x4b\x09\x36\x8b\xfe\x33\x67\xc0\x04\xb9\x78\xcc\xb4\x6d\xd3\x1e\xea\x5f\xb9\xf0\x1e\x30\x9d\x2a\x95\x03\xab\x54\x0e\x0a\x35\xd1\x54\x3c\xb0\x1d\xd8\xea\x42\x00\x6a\x85\x6b\xc8\xce\x91\x1b\xa6\x5d\xd1\xcb\x94\xd4\xe0\x2a\x1c\x0f\x3e\x44\x03\x11\xe7\xcb\xcf\x84\x75\x7a\x93\xc3\x9b\x6c\x21\x9b\x64\x6b\xcf\x95\xb1\xfc\xd9\xb8\x7f\x73\x3e\xb9\xf0\xcc\x1f\x94\xf0\xad\x16\x6f\x11\x3b\xf1\x71\x2a\xf0\x43\x36\x6c\x36\x87\x87\x6c\xda\x6c\x92\x84\x49\xb2\x7d\x3e\xb9\x80\xab\x74\x6c\xa7\x90\xf7\x41\xad\x07\xf2\x2e\xe8\x71\x36\x5d\xe4\xfd\x91\xd9\x66\xd0\x01\xe5\xfa\x50\x4e\xac\xf2\x4d\x2d\x6d\x5a\xa0\xab\x2e\x53\x91\xa5\x47\x4a\xcc\x06\xdf\xcd\xb3\x2e\x07\x26\x7e\x57\xab\x14\x65\x55\x56\x94\xeb\xb6\xb2\x06\x51\x8b\x1c\x59\xda\x87\xcf\xf5\xe0\x95\x4e\x22\x26\x4b\xdb\x7f\xa0\xd9\x36\x32\x2c\xed\xe9\x15\xe3\x35\x9f\x93\x55\xaf\xad\x97\xa9\x3e\xb6\x3d\xd1\x6c\xea\x2d\xc6\x64\xb3\x59\xdb\x56\xd4\x20\x4b\x47\x98\x71\xb7\x3c\x06\xe5\x26\xb5\x58\xfa\xd4\x89\xe6\x26\xe6\x3b\x85\xfa\x66\xbb\xcc\x90\x3e\xe3\x9a\x93\x0e\xc8\x5c\xe7\x29\x41\xe7\x6a\xbd\xed\x5a\x37\xae\x2b\xf3\xab\x48\xef\xaf\x7a\xe9\x7e\x67\xca\x8d\xbd\x55\x9f\xd8\xfd\x77\xcf\x34\x61\xea\x29\x37\x59\x64\x55\x1f\x78\xe5\xf3\x53\x71\x9a\x86\x45\xbb\x21\x86\x2e\x66\x1e\x0c\xdb\x23\xb2\xc4\xf6\xe7\xda\xbd\x29\x54\x3e\x99\x85\x83\x16\x0a\x13\x41\x7c\x14\xd5\xbd\x4a\x41\xc1\x4c\xd1\x9e\xc8\xd7\xaa\xb4\xa6\x50\xc6\x42\xe9\x27\x62\x18\x29\x41\xb6\x15\x49\x30\x5e\xd2\x4d\x28\xf0\x7a\x3d\x8f\x8d\x09\xb3\x95\xd6\x40\x0b\x27\x42\x79\x83\xb8\x44\xb6\xe9\x67\x2b\xc0\xb5\x7b\x54\x36\x56\x1a\x9d\x2d\xb3\x00\x29\xf4\xab\xad\x2d\x1c\xb8\x31\xb3\xb3\xc0\x9d\xe5\x43\xf6\x68\x15\xbb\x66\x5e\x12\xdb\x91\xd5\x2f\xe1\xb0\xec\x6e\xd0\x2c\x77\x0f\x3f\x4b\xb7\xca\x5f\x28\x3e\x42\x3f\x71\x9e\x0b\xa7\xdc\x3f\x99\xfa\x7c\x2e\x2e\xdc\xa3\xde\x5b\x69\x2c\x4b\xc6\x58\xe2\x06\xfd\xc4\x8d\x3d\xd3\x5f\xee\x4f\xec\xae\x52\x24\xd3\x82\x68\xf7\xce\x1e\xda\xcf\x1b\x50\x64\xae\x60\xda\xbd\x4d\x03\x13\x92\x72\x60\x42\xba\xce\x27\xe7\xdc\x68\xba\x81\x7b\x04\x11\xdb\x41\x47\x44\xd0\x8f\x6c\x5d\x51\x5a\x57\xaf\x36\x6c\x11\x54\x86\x3a\x70\xd5\x05\x5d\x88\x66\x13\x77\xfe\x45\x29\x30\xc6\xe6\x55\xa8\x1e\xef\x50\x6e\x4c\x24\xed\x0d\xac\x67\xd3\x9b\x92\x6e\x87\x2e\x16\x24\xc1\x74\x21\x0c\xa7\x28\x91\x4c\xe4\xed\x2b\x85\x6a\x3e\x55\x69\x04\xa4\x4d\x2e\x65\x58\xfe\xf4\x6e\x2a\x32\xd6\xf8\x5d\x12\xe9\x6a\x71\xab\x9f\x46\x52\x0b\x69\x8f\xff\x75\xb7\xd6\x80\x3a\x4e\xd1\x49\x59\xa2\x01\x9e\xb9\xf0\x62\xa8\x1f\xef\x2c\x9d\xee\x54\xec\x35\x99\x91\x50\x41\xe2\x4a\x3e\x11\x90\xb8\x68\x21\xe2\x8e\x48\x71\xe2\x5e\xba\x9a\x8f\x3e\xf0\x89\x70\x75\xf4\x2e\x9a\x09\xf5\x94\xc7\x82\x50\x08\xd8\x19\x5a\x16\x45\x07\x82\x28\xbc\x3f\x58\x57\xc0\x5e\x93\xa7\x8a\x44\xe7\xe2\x82\x42\x90\xf7\xe7\x1d\xf9\x03\x8f\xa9\x42\x50\x89\xa5\x50\x20\x41\x97\x36\x69\x31\xd4\x10\xf3\x78\x3c\x33\x7f\x1e\x9b\x3f\xa5\x60\x45\x3c\xcd\x9e\x45\xd8\x0f\x7c\x48\x58\x80\xdd\x03\x9c\x3d\x55\xa5\x48\x95\x77\x95\x78\x8b\xdc\x4d\x2e\x70\xa2\xb1\x2b\xa3\xa8\x2a\x33\x62\xdf\x14\x31\x6b\x97\x59\x3d\x8c\xc9\xb7\x28\x36\xe2\x2f\x2b\x5b\xe8\x96\x4c\x51\x25\x53\xac\x25\x53\x80\x2c\x85\x33\xdc\xa2\x6b\xfc\xd6\x1e\x01\x40\xb2\x03\x33\xb5\x74\xa8\xc7\x02\x22\xf3\xe8\x47\x83\x3b\x08\x4d\x13\xa2\xf5\x4d\xf8\x21\x59\x62\xc3\x18\x18\xc7\x33\xff\xec\x0f\x49\x1c\x53\xd4\xa1\xe4\x8c\x12\xe5\x06\x3c\x6d\x5d\x68\xd6\x9d\xc8\xb4\x2e\x82\x10\x0c\x5b\x43\xc8\x34\xfc\x90\xac\x03\x01\x3a\x55\x82\x83\x66\x93\x64\x44\x30\x3c\x0e\x7d\x40\x6d\xf3\xe1\x8d\x5a\x19\x38\xa3\xc4\x8f\x44\xc4\xfa\x48\x86\x13\xdc\x01\x78\xa1\xf8\x44\xf4\x57\xbe\xad\xc4\xfd\x94\xe2\x9d\x24\x74\xc5\xee\x83\x83\x0e\x2d\x45\xdc\xbc\x53\xc4\x7a\x62\x89\x4e\x4f\xc0\x94\xa3\xa3\x39\xa1\xf7\x09\x6a\x27\x49\xbf\xe3\x91\x37\x8a\x70\x0a\xb8\xd3\xda\xcd\x27\x59\xed\x24\x1e\x93\xa0\xfa\x04\x61\x50\xfc\xa0\xb2\xd2\x35\xea\x5a\xc7\xfe\xb4\x48\x12\xb6\x53\x8e\xa2\xff\xa0\x8a\x0d\xf4\xe7\xc2\x74\xcd\x38\x0a\xb0\x45\xee\x95\x59\x84\x5d\x3e\x9f\x4f\x49\x97\x2e\xd6\xc6\x33\x46\x11\x7c\x13\x95\x90\x2f\x7a\xaf\x9a\xcd\xab\x30\xd6\x91\xba\x73\x47\x11\x51\x14\x24\xb1\x69\x1a\xb0\xa5\xaf\xd6\xee\x02\xaf\xc6\x96\xa1\x32\x86\xc8\x89\xe6\x5a\xa0\xcf\xdc\x81\x12\x5e\x38\x53\x6b\x53\x28\x6c\x46\x9a\xea\x00\xeb\xf0\xde\xd7\xdd\xf9\x65\xef\xfc\x02\x56\xec\x98\x78\xd5\x80\x62\x78\xbd\x9a\xad\xec\x6e\x41\xdf\xfe\xe3\x9d\xa9\xf2\xbe\x7f\x35\xd0\xe4\x52\x92\x5a\x40\x5d\x39\xb7\x29\xbd\x7f\x2a\x49\x82\x01\x60\x45\x82\xd3\xe5\x1d\x20\x55\xdd\x01\xc2\xd3\xd2\x25\x42\xf5\x9a\xbd\x1f\x1b\x72\xb7\x2a\x86\x22\x3d\xc3\x53\x3e\xc5\xa4\x68\xff\x5a\xe3\x2e\xbe\x77\xa4\xcb\x7b\xf1\x1f\x53\x5e\x5f\x11\x3d\xab\xe8\xfd\x1b\x55\x1e\x17\x1b\xe8\x9e\x05\xa9\xb9\x23\xa1\xd3\x4d\xda\x27\x77\xaf\x07\x66\xae\x28\x22\xfb\x47\x92\x18\x99\x46\xbd\x13\x49\x06\xb8\xe1\x67\x27\x31\x46\xed\xaa\x6a\xd4\x6e\x11\x28\xf7\xb1\x2e\x5a\xb2\xd5\xea\x5c\x5d\x10\x0a\x4f\x37\xc5\xed\x6a\xb6\x1c\x70\xf2\x5a\xb9\x71\xa0\xa2\xf1\x18\x21\xe1\xe9\xa2\x1e\xf8\x58\x6d\x19\x86\x3a\x6a\x42\x4b\x67\x06\xf4\x86\x78\x8f\xf5\xe4\xa6\xb5\xbe\x13\x43\x63\x86\x65\x3f\x4f\xa3\x29\xd3\x69\x23\x0c\xee\xaf\x8a\xfd\x55\x82\x99\x5c\xe3\x0d\x98\x6a\xf1\xc3\xc2\xeb\x17\xb1\x4e\x2f\x68\x36\xa3\x43\x6e\x17\xd1\xd0\x68\x33\xc5\x21\x7d\x63\xde\x33\x79\x1e\xb5\x5a\xb8\x11\x76\xae\x5a\xad\x8b\x66\x93\x74\x3b\x8c\x85\x7d\xa2\x5b\x2d\x10\xac\x4b\x3d\x22\x5a\x2d\xc0\x34\x0e\x8c\x91\x83\xdd\xbd\x47\x8f\x9a\x21\xed\xd7\xca\x79\xdd\x62\xff\xfb\x0d\x09\xfa\xca\x6b\x77\xd3\x28\x2c\xf8\xb9\x21\x2a\x4c\x1d\xe6\x66\x51\xb5\x0a\x5d\xa5\x94\xf6\x25\xd1\x6e\x9c\xf8\xb1\x36\x86\xc9\x0e\xa5\x7d\xd5\xda\xf1\xda\x5d\x4f\x12\x7d\xae\x2e\x68\xdf\xf9\x53\xa2\xbb\xf6\x5c\x5d\xf4\xdb\x3b\x9e\x6a\x75\xcd\xd7\x76\x77\x41\xe1\xd9\xa6\xb0\xb4\x6a\x3d\x46\xbb\x59\x50\x78\xa9\x56\x66\x41\xe8\xc9\xc2\x0a\x93\x99\x22\xa7\xab\xa9\x0f\xec\xfe\xb5\x3e\xdc\x7b\x34\x9f\xef\x3f\x2c\x32\xa8\xc9\x42\xab\xa2\xf0\x42\x6d\x4c\x6f\xd1\xe9\x15\xfd\xd2\x53\x85\x72\x5a\x23\xb6\xbd\xf7\x08\xb7\xe7\x0e\x3b\xf3\xb9\x3c\x64\x49\xea\x89\x13\x4c\xfe\x26\x5a\xc9\x22\x8f\xc9\x51\x76\x1c\x3e\xab\x0d\xa9\x1d\x3a\x2b\xdb\x26\x56\xb5\x6d\xef\xd1\x3f\xc5\x7c\x2e\xfe\xb9\xff\x90\x86\x43\x72\xb0\x6f\x7f\x3d\xec\xa0\x7e\x28\x0e\x1f\x3f\x9c\xcf\xbb\x9d\x9d\x43\x91\x92\xa3\x59\xf7\xe0\x37\xdd\x12\xed\x47\x0f\xad\x5f\x2f\x7f\xb1\xbf\xdf\xab\xbe\xd8\x7b\x54\x10\x2d\x31\x1c\xb0\xf7\x57\xcc\x9f\x94\xf2\x26\x20\x43\xf3\xc3\x4e\x3f\x9b\x01\x1e\x6f\xc9\xc2\xef\x1d\xa4\xce\x99\xa8\x36\x0d\x5a\x2d\xda\x33\x4c\x1f\xf5\x89\x60\x5d\xd0\x36\x9d\xcb\x12\xd3\x47\xb4\xd9\x34\xb0\x8b\x9c\xcd\x79\xca\xe1\x36\x7d\x4e\xa5\x77\xcb\x11\x81\x35\x41\x69\xe3\x3a\x24\x93\x62\xd6\x38\x7b\xff\xee\x95\xd6\xd3\x63\xab\x86\x98\x91\x83\xd3\x21\xd1\x8c\x53\x63\x2d\x2f\xef\x41\x4f\x55\x34\x52\x22\x8e\x9d\x8a\x44\xc9\xda\xf8\x34\x9a\x4c\x13\xcd\xfd\xb1\x68\x36\x9f\x9a\xf9\xc2\xc9\x7d\x10\x78\x46\x19\xe0\x03\x31\x80\x60\xe0\x49\x57\x47\x9a\x8f\xed\x6a\xb0\x22\xc8\xc0\x11\x4a\x45\xca\xa9\xc4\xe5\x91\x13\x49\x8e\x86\x6b\x4b\x68\xab\x1e\x2d\x97\x39\x59\x5f\xc6\x10\x54\x2b\xb0\xca\xcc\x5b\x71\x74\x62\xc0\x71\xd7\x3f\x9e\x46\x32\x16\x5f\x8e\xdf\x81\x7f\xe2\xdd\x07\x57\x9e\x74\x63\xcd\x75\x12\x43\xf0\x2e\x7f\x3e\x15\xb7\x7a\x01\xc1\xcf\x15\x47\x5c\xb6\x23\x9b\xa0\xa4\xc8\xc2\x56\x4c\x05\x99\xe6\x78\x71\xfe\x54\x7f\x4a\x87\xc2\xea\x74\x33\xc0\x21\xb0\x46\x89\x31\xe1\x32\x26\x74\xbc\x86\x43\x7b\x9d\xc3\x08\xf5\xb6\x20\x95\x58\xa1\x1c\x91\x0e\x44\x46\x83\x2e\xbf\xda\x69\x45\x14\x14\xbb\x23\x1f\x86\xe5\xe4\xdf\xc5\x1a\x71\xad\xc9\xa9\xb1\x6a\xfb\xbc\xe5\x00\x66\x55\xe0\x1e\xa7\x0b\x3c\xc6\x9a\x87\x9e\x11\x69\x96\xd7\xa3\xf1\xf8\x38\xed\x95\x57\x82\x0f\x84\x8a\x09\xa5\x10\x94\x7b\xcb\x1e\xb9\xc2\xbd\x49\xdb\x3f\x87\x3b\x9d\xce\x7c\xbe\xdb\xe9\x1c\xb2\xec\x15\xcd\xc5\xa2\x51\xcd\x59\x51\xd8\xf4\x25\x9c\x48\x72\x3b\x34\xeb\x74\x4f\x31\x45\x74\x4d\x6b\x38\xb2\xb1\x7f\x1e\x59\x5b\x78\x46\xee\x86\x36\xa1\x98\x59\x3e\x89\x84\xc4\x0d\x70\xf3\x75\x41\x7b\x5a\xdd\xdd\x4b\x37\x9a\x0a\x49\x12\x37\x78\x0f\x89\x3b\xe0\xb0\xd5\x59\xce\x3e\x81\xbc\x75\x3d\x24\x06\xc0\xa0\xd9\x5a\x9f\xad\x26\xf8\xd9\xd3\xae\xdf\xb3\x59\xe3\x30\x88\x24\x9d\x69\xb6\x8b\xcc\x0c\xb1\xd9\xcd\x5c\xdf\x58\xda\x39\xb9\x77\x53\x14\x7c\xca\xf5\x41\xba\xb3\x50\x5f\x3d\x55\x62\x20\xa4\x0e\xf9\x38\x36\x36\xd0\xc0\xcc\x52\xe5\x06\xfb\xd4\x58\xcc\x6e\x3a\x03\x4c\x91\x7d\x97\xdb\x86\x65\xe9\x05\x12\x37\xe0\x45\x14\x46\x2c\xe4\x80\x3c\x1f\x12\x41\xfb\x64\x05\x3d\x4e\x6a\x3e\xb7\x0d\x05\x8e\x3d\xec\x2e\x5c\x9f\x7a\xf8\x54\x56\x42\x5c\xee\x47\x4a\x13\xba\xa8\x6b\x3b\xd5\x50\xd3\x0e\xf8\x9e\x76\x7d\xe0\x95\x29\x20\x99\x11\x0d\x85\xf3\x6d\x46\xbe\x0d\xf3\xfc\xf4\x48\xf7\x17\xb5\x26\xad\x8d\x33\x72\x7a\xd2\x0d\x3e\x36\x9b\x44\xb7\x98\x33\x71\xcc\xfc\x0e\x44\xfa\x33\x74\xec\x38\x16\xec\x7b\x2c\x46\xcf\x6f\xa7\x48\xd5\xf2\x48\x1e\x69\xa3\x59\x3f\x59\xaf\xf3\xcb\x64\x3c\x46\x83\x6f\x92\x96\xdc\x9c\x52\x16\xd2\x5d\xc4\x8e\x99\x99\x36\xd4\x24\x4b\xe1\x03\x11\x6b\x77\x7b\xbc\xd5\x3a\x94\xcd\x26\x86\xc3\x8a\x5b\x11\x90\x80\xd2\x66\x33\xda\x2a\x43\xf6\x0a\x84\x61\x1e\xc1\xd5\xee\xc2\x30\x0d\x57\x09\xcd\xf4\x0e\x33\x3f\x3f\x13\xe7\xe1\x45\x6f\x78\xde\x6e\x87\x17\xcc\x37\x8a\xb3\x8f\x6a\x73\x92\xa5\xf1\xfb\xee\x83\x38\xef\x5c\x80\xb0\x22\x02\x38\x1c\xe3\xa9\x7d\x1b\x8c\x92\x55\x9a\xcf\xe6\xe2\x15\xd3\x90\x26\x18\xd4\xe5\x65\xc5\x66\xcb\x4a\x3d\x48\x9d\x3c\xdf\x5d\x66\x00\xd5\x74\xcd\x70\x48\x82\x56\xeb\x9f\x2c\xc9\xb5\x90\x92\xe3\x85\xab\x11\x6a\xe7\x59\x18\x47\x7b\x17\xb2\x74\xd1\xca\x34\x52\xe5\x29\x9e\x72\xc8\x73\x75\xd1\xd3\xe7\xed\x36\x86\xb3\x5e\x6b\x22\xb0\xb1\x79\x9e\x7f\x6c\xae\x84\x02\x7c\xa9\x8a\x9d\x0b\x08\xe0\x38\x57\xf5\x29\xfc\xd8\xac\x09\xe9\x6c\x4c\xcb\x63\x59\x19\xd9\x9e\xcc\x65\x72\x90\x0d\xab\xa0\xe9\xfe\x99\xd5\x40\xf2\x00\x56\x7b\x78\x87\x43\x2a\xaf\x29\xad\x22\xce\xbd\xfb\x35\x78\x4a\x61\xe5\xc0\x7c\x5a\x6b\x01\xcb\xe6\xa6\x14\x75\x1b\x33\xe0\xfd\x8f\x0d\x25\xd5\xe1\xa1\x5c\xd0\xde\xd9\xda\x7a\xd5\x3f\xff\x29\x37\x64\x3a\xfe\x27\x7e\xee\x55\x12\x2c\x8a\x75\xc7\x21\xf3\xf3\x5e\xaf\xa5\x16\xea\x86\x8f\xcb\x56\xd0\x53\x49\xc4\xc6\xd3\x5e\x79\x21\x45\x6b\xe7\x71\xdf\x96\xa2\xdb\x1b\x33\xf2\x5d\x83\xf3\xa7\x6c\x34\x1a\x0d\x07\x66\xe4\x29\xfe\x72\x40\x96\xf7\x43\x7e\x2f\x97\xb8\x23\x97\x7a\x6d\x03\x5b\x46\xdd\xef\x18\x49\x96\x17\xfe\xa3\x5c\xf8\xf1\xc3\x43\x46\x24\x3b\xc3\xa3\x56\xcd\xa6\x3c\x64\xdd\x9d\x9d\x02\x56\xea\x02\x36\x07\x3b\x64\x8f\x3b\xcd\xe6\xc1\xfe\x21\x2b\xf9\x43\xd5\x6a\xc8\xfd\x87\xcd\xe6\xde\xa3\x0a\xa4\x2e\x41\x5a\x62\xe6\x73\xac\x67\x3e\x47\x24\xa5\xbb\x30\x74\x25\xbb\x40\x71\x01\x45\xe5\xbd\xcb\x4b\x37\x3c\xac\x29\x11\x94\xde\x3b\x0e\xda\x34\xa8\xf8\x6a\xf6\x11\x42\xcd\x26\x30\xd4\x8c\x54\x3c\x15\xa5\xc3\xc6\xca\x0d\x30\xbf\xf0\x00\x92\x75\x6c\x76\x47\x42\x0d\xd2\xdd\xee\x6b\x2f\xc1\xd8\x69\x6e\x46\xb8\xfc\x31\x01\xfc\xc7\x22\xb6\xe6\xc7\x9a\x73\x7d\x36\xaa\xb6\xbd\x83\x3b\x64\xdb\xd5\xac\xb8\x46\xf3\x32\x64\x48\xe0\xec\x0e\xdd\xeb\x3e\x68\x37\x80\x3b\x32\x44\xcc\xa0\x5d\x81\x39\x91\x13\x50\x8c\x83\x66\x02\xcf\x7f\xf8\xab\x34\xc7\x06\x16\x5a\x6b\x07\xce\x48\xa4\xc1\x66\x18\x46\xc3\x03\xce\x0c\x17\x41\xbc\x12\x95\x64\x12\x7e\x01\x9d\x2c\x63\x1a\x6b\xd6\x85\x81\x66\x3b\x70\xa3\x59\x07\xb6\xf5\x5a\xd9\xb1\xa0\x30\x59\xa9\xfb\xe6\x39\x20\xe0\x4a\x6f\x3a\x0f\x9c\xa7\xf9\xa5\x30\xdd\x00\xd8\x29\x03\x8e\x36\x00\x76\xcb\x80\xb3\x35\xa4\xa5\x27\xfe\xe0\x6e\xcd\xf7\x9d\xf4\xfb\xad\x66\x2f\xe1\xfa\x2f\x90\x1c\x69\x66\xea\x5d\xc0\x89\x66\x4a\xc2\xa9\x66\x1f\xe0\xb9\x66\x33\x09\xdf\x56\x0f\x48\xcb\x71\x16\xf0\x5d\xaf\xf7\x48\xfe\x01\x12\xbe\xda\x3c\xb3\xf0\x74\x2d\xdc\x31\x99\x91\xdf\xc1\xe6\x89\xa1\x70\xa9\xd9\x46\xa6\xdd\xd2\xf5\x34\xce\x02\xf3\xe9\x5a\x86\xc5\x3c\xff\x59\x4a\xe7\x32\x83\xc2\x1b\xcd\x7e\xc2\xbb\xbf\x40\xde\xcd\x52\x67\xe7\x2a\x79\x5a\x83\x84\x84\xa9\x76\x17\x6b\x88\x34\x96\xeb\x49\x26\x40\xb1\x04\x34\xe3\xa6\x82\x0f\x7a\xfd\xcc\x7d\x67\x67\xce\x99\x69\xe0\xab\x0d\x70\x6f\x0c\xdc\x8c\x7c\xd0\xd0\x81\xdf\x15\x51\xb4\xdd\xa5\x36\xd7\xf7\x59\x75\x08\xb2\xe0\xde\x92\x49\xdd\x29\x65\xf4\xae\x24\x00\x55\x7d\xe5\x75\x3b\x3b\x7b\xbf\x11\xd5\xc6\x0f\xb4\x55\x29\xd8\xa5\x6d\x4c\x16\xd9\x3a\xd8\xdf\xdf\x3d\x58\xc0\xeb\x35\x33\xf9\x52\x43\xa4\xd3\x89\xf5\xf1\xef\x90\x83\xae\xcd\x3a\x4d\x97\x44\x1a\x15\x4d\xa6\xeb\x7d\x97\x52\xcf\xbe\x6a\xc9\xf3\x6e\xf1\x7e\x87\x52\x54\x77\xe0\x78\x5d\xb7\x39\x7f\xca\x3f\x25\x71\x5a\xdf\x34\x91\xad\x2e\x6d\x11\x87\x36\x9c\xd6\x5b\x45\xbe\xea\x34\x91\x09\x7c\x5d\xd9\xa2\x19\xf9\x69\xba\xfb\x8c\x2e\xe0\xe7\x32\x72\xe9\xa5\x7c\xb1\x22\x03\x51\xf9\x08\x94\x44\xde\x5b\xf2\xc2\x7e\xcc\xf2\x71\x76\x6d\x32\x87\x22\xac\x36\x4f\xf7\x00\xb2\x74\x05\x08\xf9\x43\x11\xb3\x00\x70\xbb\x52\x29\xb3\x52\xce\xc8\x89\x06\xad\x4d\x87\x13\xa3\x35\x19\x5d\x1b\xd9\x2f\xe9\x3b\xae\xd3\xd2\x9e\x73\xfe\x0f\xcc\x56\xf6\x8f\x0b\xc7\x72\x3c\x37\x0c\x99\x1f\x11\x69\xe4\x1b\xf1\x59\xb4\x81\x0f\x01\x73\xce\x6d\x5f\xb9\x9c\xb6\x9c\x0b\xa7\x8c\x37\xd8\x84\x65\xc7\xcb\x4e\xe9\x70\xd3\xae\xc8\xf5\x71\xca\x44\xae\x9f\x9d\x0a\x0b\x19\x51\xae\xdf\x77\x4e\xaf\x44\xe3\x4d\x1c\x49\xf7\x99\x08\xa2\x81\x70\x23\x29\x3e\x0e\x1b\x5c\x37\xbe\xc7\x91\x74\x5a\x56\xfd\x70\xe0\x35\x36\xd3\x73\x96\x40\x1d\xda\x72\x1a\x43\x1e\x8e\x31\x27\x5b\x43\x5f\x89\xc6\x30\x1a\x8f\xa3\x99\xcd\x28\xf5\x4d\x93\xdf\x15\x89\xa8\x81\x9a\xf1\xbb\xd8\x73\x7a\x35\xc5\xc6\x28\x33\xd8\xa0\x10\x66\xe4\x95\x86\x63\x8d\xd1\x37\x0b\xc9\x38\x13\x2c\xc2\xdb\x57\x12\xa6\x4a\x4d\x4c\xb5\x50\xe7\x98\xcb\x46\x28\x75\xd4\xe0\x2b\x5a\x80\xa9\xed\x64\xd4\x98\x46\x71\x1c\xfa\xe1\x38\xd4\xa1\x88\x9d\x96\x6d\xf4\xfa\xf6\x6d\x39\xc5\xf6\x6f\x80\x03\x1f\x61\xb6\xf9\x74\xe0\x43\x86\xe5\x3f\xa9\xc8\x1f\x8b\x89\xad\xc4\x34\x19\x37\x59\xd7\x61\x6d\x39\x9e\x69\x26\x6a\x70\xde\x72\xd9\x51\x78\x23\xa4\xc5\x80\x70\x0e\x6d\x91\xb7\x8a\xcc\xc8\x73\x0d\x7b\x80\x5d\x97\xbe\x0e\x8c\xe8\x7a\xa6\x37\x1c\xfe\x2d\x2f\x5a\x10\x78\x1a\x06\x78\x50\x1a\x5e\xe2\x81\xec\x17\x9a\xbd\x87\xcf\x6b\x45\xda\x0f\xa2\xe8\x83\x1f\xd6\x88\x7c\xaf\xd9\x0b\x4d\x66\xe4\xb3\x86\x1d\xd8\xdd\xa1\x14\xbe\x68\x76\x4b\x9e\x19\x61\xf7\x5e\xc3\x4b\xf3\x1f\x85\x27\x9a\x85\xf0\x63\xfd\x42\x8d\x47\x9f\x21\x5c\xab\x8c\xdb\xba\x3e\x69\x76\x04\x6f\x35\xfb\x02\xbf\xaf\x5e\xbb\xb2\x6c\xb2\xf0\xc7\xda\xaa\xb2\x9b\x16\xfa\x98\xbd\x1b\xa4\x60\x2f\x40\x09\xb6\x0d\x5a\xac\x76\x54\xf7\x32\x83\x7d\x46\x94\x80\xdd\x1d\x90\xd6\x8f\xe5\x83\xb6\xf3\x2b\xed\x4a\xed\xf2\x45\x96\x01\x4f\x14\xab\xd9\x6b\x14\x19\x76\x55\x41\x23\x5d\xfc\x55\x3d\x2f\x34\x51\x0f\x76\x77\x72\x39\x93\xfb\xbd\x0b\x02\x5c\xde\x93\x6c\x46\xb4\x40\x49\x97\x61\x4e\x96\x31\x63\xd2\x40\x91\x61\xde\xdd\xf9\x4d\xb9\x02\x04\x7b\x9b\x8e\xd8\xee\x0e\xe8\x76\x97\x52\x90\x4c\xf6\x0d\x0f\xba\x23\xea\x29\x77\x04\x06\xbb\x30\xd8\x4d\xe9\x5e\x7e\x7e\xfb\x99\x86\xdf\x0d\xd4\x90\xb6\x34\xcc\xc8\x1f\x18\x3a\xff\xdb\x7b\x4d\x11\xb2\xc8\xaa\x57\x86\x4c\xb9\x00\x3f\x53\xe0\x82\x3d\x87\x40\x6c\xd8\x89\x49\x17\x6d\x75\xd8\x29\xda\x9d\x08\xd8\xea\xc2\xfd\xc8\x13\x20\x3c\xfd\x60\x77\x67\xde\x81\xa1\x97\xa4\x2e\x16\xce\x52\xcd\xea\x8e\x3c\xc1\x36\xa1\x03\xa6\x67\x54\x4b\xc5\x54\xdb\x34\x92\x69\x10\x76\xb4\x38\x08\x0a\x09\x4b\xf0\xc4\xf2\xca\x0e\xeb\x1c\xca\xfc\x14\xe9\xbf\xef\xee\x80\x60\x88\x57\x83\x6c\xeb\xd2\xfe\xde\x0d\x09\x84\xa9\xa9\xad\x4d\x0d\x12\xce\xa0\x08\xf7\xf8\xa2\x0d\x37\x8b\x15\x3c\xba\x25\xdd\xed\x05\x0c\x05\xf3\x25\xf8\x82\xc5\x12\x62\xb1\x59\x81\x1b\x57\xbf\xaf\x58\xb8\x32\xce\xae\x05\x68\x75\x6b\x81\x59\x3b\xb9\xbc\xca\x6e\x37\x5b\x2c\x60\x20\x18\xd7\x70\x23\xd8\xe6\xb3\xf8\xf7\xfc\xc0\xe3\xe0\x07\x9e\x02\x9e\x78\x02\xfc\xc4\xd3\xe0\xdf\x79\x12\x82\x53\x0f\xfb\x72\x5b\x30\x2d\x61\x22\x36\xcf\xcb\x2b\xc1\xa4\x84\xa9\x58\x2b\x08\x0e\xbb\x7d\xe5\xdd\x91\x2b\xc3\x7b\x13\x7b\x4c\xd1\xb0\xcd\x48\x30\x2e\x61\xb6\xb1\x9c\xe3\xd8\x82\x1d\x48\x6f\x52\xb9\x13\x6b\x8e\x4f\x75\x30\x4e\xa6\xa2\xd6\x80\x60\x7b\xbb\x78\x58\x61\x6f\x9f\x31\xdd\xef\x7a\x1d\x48\x98\xe8\x25\x45\x68\x53\xab\x55\xc4\xdf\xd6\x12\xb4\x63\x50\x64\xba\x4d\x95\x9f\xe6\x3a\xd2\x3d\xc5\xba\x9d\xdf\x54\x8b\x97\xb6\x63\x12\xc6\x44\xff\x48\x7b\xd7\x9a\xd8\x9a\xda\xca\x53\x74\x01\xb7\xeb\xe6\x44\x38\x24\x81\xa9\x64\x3e\x9f\x91\x6d\x01\xce\xff\xe5\x40\x42\x4b\x75\x58\x8a\x66\x64\x24\xc0\xf1\xcc\x37\xa4\x26\x5d\xc7\x39\xae\xe3\x55\xe0\x80\x71\x3c\xf7\x79\x27\xc8\x8c\x4c\x05\x04\xad\x2e\x66\xeb\x49\xc5\x0d\x2f\x4c\xc7\x23\xdd\xe3\x2c\xf7\xb9\x5e\x6b\x32\x24\x37\x02\x75\xd9\x99\xb0\xd1\xc4\x3c\x3b\xdd\xb2\x58\x02\x4a\xe0\x48\xe7\x5f\x29\x5c\x8b\x95\xab\x91\x6d\x9d\xa8\x37\x28\x49\x1b\xf4\xc0\x01\xeb\x81\x4a\x4c\x83\x12\x96\x14\xf9\xb4\x6e\xc8\xad\xa5\x65\x6a\x38\x55\x50\xc4\x88\x94\x25\x65\x82\x52\x30\x83\x29\x4b\x66\x01\x47\x62\x85\xc1\x60\x29\xd1\x75\x4a\x44\x4a\x49\xdf\x01\xab\xfa\x09\x9b\x66\x54\x14\x94\xdc\x92\x6b\x53\xc5\xb5\xb6\xfd\x29\x5a\x5d\xd0\xd4\xd0\x83\xd4\x08\x74\xd8\x56\x41\x6d\xcf\x18\x52\x4e\x56\x8a\xa0\x40\x97\xf2\xc3\xa6\x84\xe8\x94\x90\x7f\xcb\x92\xe0\x1a\x93\xe9\x5e\x33\x5d\x10\x72\x47\x8e\xca\x84\xe8\x56\x17\x93\xa1\x21\x19\xba\xbc\xd5\x91\x02\x1e\xa5\x97\xd2\x9d\x0a\x26\x24\x3c\x17\xab\xf5\xe9\x53\x01\x78\xcd\x96\xf7\xe0\x81\x03\x92\xf6\x67\xe4\xc4\x4c\x32\xac\xe2\x21\x48\x4a\xbd\x02\x26\xae\x00\x75\x2d\xd0\x23\x04\x32\xea\xfe\xb7\xe5\x19\xd9\xeb\xd1\xce\x02\xbe\x0b\x76\x24\x41\x4a\xf6\x5d\x98\xc9\xf8\x74\x2d\xb3\x88\x22\x41\x8c\x40\x2e\x16\xf6\xf8\x09\xcf\xde\x5b\xee\x8e\x18\xb7\xef\x23\x3b\x5a\x11\xc2\x46\x25\x58\x0b\x51\x4a\x9a\x92\xc0\x0c\x43\xce\x66\x18\xd1\x85\x97\x29\xb8\x1c\xf6\x3b\x9d\x43\xdd\x47\x33\xc9\x90\xf1\x5a\x1b\x15\xd5\xbb\x25\x4f\x85\xf5\x9a\xb4\xba\xa8\x84\x16\x5d\xbb\x8c\x4a\xad\xf9\xaa\xea\xaf\xab\x17\x27\x5c\x8a\xf5\x5b\xed\x79\xfd\x1d\xcb\x45\x6f\x2a\x5c\x54\xbe\xea\xe5\x8e\x5c\x0a\x58\x1f\x07\xa4\xc1\x5e\x02\x96\x3b\x57\x28\xbc\x13\xec\xb9\x84\x0f\x62\x5d\xd0\xc8\x8c\xbc\x13\xab\x76\xd8\xbe\x0b\xa2\x30\xea\xc6\xa2\x79\x55\x21\x5f\x63\xf0\xd9\x6a\x14\xea\x57\x50\xcf\xd2\x7b\x7f\xe9\xc2\x4c\x61\x5b\xc5\x99\x60\xc7\x12\x5e\xaf\x5d\x14\x2e\x25\x41\x8c\x67\xc2\xb6\x91\xda\x5b\x06\x36\x78\x9a\x3e\xac\xac\xbe\xb3\x00\xa2\xd8\x8c\xbc\x11\xf0\x3a\x45\x05\xd8\xaf\xaf\x04\x89\x34\x85\xef\x82\x9c\x51\x48\xad\x52\xb1\xa1\x02\x64\xee\x05\x85\x63\xb9\xde\xbb\xf2\x41\xa4\xcb\x57\xef\xa3\x74\x4f\x79\x7c\xcd\xee\x7d\x4f\x4a\x08\x3c\x2e\x8d\x92\x2e\x41\x78\xc7\x12\x86\xf9\xb9\xe4\x22\xa8\x48\x94\xf4\x07\xfe\xce\xdb\xea\x82\xff\xdd\x73\x1c\xf0\xaf\x2b\xd9\x4e\x8f\x2b\x70\xc2\x9b\x46\xe0\x7f\xab\x40\x7c\xad\x40\x9c\x7a\xc7\x82\x38\x0e\x05\xfe\x35\x7b\xba\xf1\xee\xf9\x77\xef\x48\x03\xbf\x36\x7f\x83\x5b\x4f\x02\x9f\xe2\x0b\x85\x7f\x7f\xe2\xdf\x23\x9c\xf4\x71\x5e\xfe\x2c\x7b\xf2\x07\xe6\xbb\xff\x39\xfb\xfd\xc6\xdb\xea\x96\xb3\xf7\x95\xea\x27\x33\x72\x1b\xa1\xf8\x46\xa9\x72\x17\x41\x17\x24\xf5\x24\x6d\x39\x0f\xf8\x34\x7c\x70\xb3\x53\xba\x1f\xf0\x99\xd8\x98\x06\xf6\x65\xf5\xf3\x7e\xed\xf3\x0b\xb1\xca\xcd\x56\x64\x97\xab\x7e\xde\xad\x7d\x7e\x2f\x36\xe6\x98\xfd\x52\xfd\xbc\x57\xfb\xfc\x64\x73\xdd\x3f\x36\xd7\xfd\x69\x33\xf2\xb7\x9b\xdb\xfd\xfb\x66\xca\xff\xd8\xdc\xa9\x32\xd9\x48\xb9\x4a\x36\x96\xd6\xc9\x46\xca\x45\xb2\x91\xf2\x24\xd9\xd8\x2d\xbc\x46\x5a\xbd\x65\xc1\xe6\xe2\x51\x52\xde\x2b\x47\x23\xc3\xb6\x0e\x56\xae\x93\x9f\x23\x63\xa4\xcc\xc8\xef\x51\xea\xf6\xb4\x4e\xa1\x02\x5f\x98\x6c\xbe\xd9\xf8\x8e\xbc\x47\x14\x76\xff\xb8\x48\xef\x91\x54\x12\x8e\x3e\x89\xea\xfb\x92\x23\x32\x41\xb1\xa4\x69\xe6\xb3\xbb\x13\xa5\x3d\x69\xe5\x6e\xf7\xa3\x84\xfc\xe3\xb5\xb4\x17\x4b\x84\x52\x8b\x91\x50\x5e\xc3\xf9\x47\x4b\xb6\xfe\xe1\xfc\x83\x7a\x41\x88\xf1\x06\xd9\xf2\x13\x25\x24\xcd\xf6\x2d\x06\xd6\x35\xa3\x69\x8b\x38\x8d\x41\x38\x0a\x75\x0c\x98\x46\x7f\x14\x69\xfb\x09\xeb\x36\xb2\x0f\x92\x90\xe8\x90\x28\xdc\x91\x2c\x52\x92\x26\x65\xe3\xa7\x74\x13\x70\x42\x64\x71\xd0\x96\xe3\xc9\x0b\x1f\x02\xb6\x85\xca\x6e\x6f\x45\x2f\xd9\xa6\xdd\x90\x69\x08\x09\x48\x0c\x28\xf0\x5f\x82\x74\xf9\x09\x6e\x9b\xe0\x5e\x26\xc7\x1b\x9f\xec\xad\x8e\x41\x7e\x00\x8e\x68\x68\x77\x8d\xf4\xa8\x0c\x11\xa7\xd4\xc3\x2e\x0f\xa0\x03\xf7\xfc\x04\x1d\x21\x45\x6a\x04\xdf\x58\x38\x2f\x3d\x61\x46\xdc\xe5\x8b\xf2\x88\x8c\xcb\x8c\x31\x0a\xc9\x8c\x5c\x85\x36\x0b\xec\x23\xe4\x8f\x72\xfb\x07\x65\x58\xd3\xb1\xd9\x30\x0c\xf8\x9d\x67\x7b\xb0\xb2\x43\x77\x53\xee\x2f\x32\x23\xb3\x10\xf6\x40\xd2\xf9\x7c\x0b\x9f\xbb\x9d\x0e\x48\xf4\x22\x9a\x0f\xf8\xa3\x54\x78\xbb\x54\x98\x10\xd9\x66\x5d\xfa\x60\x6f\xde\xa1\x6d\x22\x1f\x74\x3b\x9d\x79\x87\xb6\x88\x7c\xb0\x87\x4f\xa5\xd4\x3a\x7f\xc9\x97\xd7\xa6\x79\x6f\x23\x8c\x7e\x2d\xb2\x6d\x24\x15\x98\xe7\x61\x65\x40\xfc\x9b\x72\x7e\xf8\xa4\x32\x53\x9e\x86\x70\x1a\x56\xb6\x16\x47\xc9\x2f\xee\x4b\xde\x91\x57\x21\x26\xe4\xb7\x57\x06\x18\xc3\x33\xaa\x60\x9a\x95\x31\xc9\xbe\xa3\x55\x22\x1c\xcf\x19\xf2\x71\x2c\x4a\x2b\xc5\x5d\x05\xcc\xdd\x9e\xcf\x1d\x67\x2b\xbd\x7f\xda\xac\x5a\xc5\xb1\xf0\x32\xe0\x67\x33\xd6\x97\x11\xbc\x0f\xe1\x54\x13\xd9\x72\x98\x53\x61\xf6\xeb\x64\xed\x0e\xa5\x73\xe9\xd8\x14\xd5\xb5\xad\xca\xa3\x0a\x21\xac\x60\xa5\xc7\x96\x95\xaa\x13\x83\xc9\x4a\xf8\xca\xbf\x60\x56\xcc\xe7\x9d\x43\x76\x47\x64\xb8\x4a\xa8\xe9\x0a\xed\x0b\xc0\xbb\x10\xfe\xcb\x13\xa9\x97\x47\x7d\x95\x32\xb4\x57\x39\xe4\x93\xe9\x04\xa7\x7c\x4f\xef\x69\xb2\x71\x91\x7a\xbe\x79\x99\xf9\x56\x9e\x18\xd2\xdd\xee\x9f\x26\xde\xf3\x84\xda\x1b\x1c\x8a\xd3\x82\x9b\xeb\x78\xba\xb9\x8e\xcb\x6a\x13\xd4\x10\x24\xc8\x61\x39\xe1\x7a\x15\x20\x1b\x68\x8b\xa7\x04\xf7\xae\x0c\x17\x27\xe4\x4d\x52\x15\x11\x1f\xca\xf3\xf5\x28\x24\xc7\xe4\x7c\x46\x06\x21\x04\x21\xf9\x9e\x90\x0e\xa5\xf0\x2e\x21\x27\x09\xee\x93\x00\x7e\xc9\x3e\x3f\xc5\x97\x70\x99\x90\xe5\xc1\x76\xfe\xfc\xd3\x8e\xf2\x3a\x80\xad\xce\x22\xc3\xf7\x0b\xa8\xec\x39\xc5\xfc\x1a\x60\x7a\x51\x6e\xc1\xab\xda\xec\x4b\x1d\x22\xd5\xd1\x38\xab\x02\x61\x48\x90\x4c\x63\xe9\x8b\x94\xe4\x35\xa0\xe2\xcb\xc7\xa4\xbc\x87\xe5\x7f\x2b\x42\xc7\x82\x57\x2d\x63\x20\x0f\xc1\x71\x60\x46\x3e\x87\x90\x68\x38\x4b\x8c\x14\x1f\x02\x4e\xef\xd7\x09\x7c\x32\x75\x7d\xa4\x14\x7e\x84\x66\x71\xc3\x65\xb2\xa5\xcc\x3f\x25\x45\xba\x5a\xc3\x4f\xf4\x2a\x7d\xc1\xdd\xa3\x13\xcc\x14\x76\x8a\x93\xf7\x18\x33\x8b\xbf\xc2\xfd\x01\xce\x41\x2e\x6f\x2b\x4d\x86\x39\x3d\x01\x4d\xe3\x0a\xb7\x8b\x7b\xce\x64\x39\x8d\x38\x9a\x21\x48\xe5\xc7\xc4\xfe\x7b\xad\xe1\x4b\x48\x9c\x61\x38\xd6\x42\x19\x79\x94\x6e\x2d\x45\x6c\x46\x5e\x84\xab\x75\x95\xdb\x24\x13\xa2\x74\x01\xaf\x88\x84\x63\x72\x7e\x49\x9c\x38\x1c\x0b\x19\x88\x81\x83\x3e\x84\xc4\x52\xb5\x85\xee\x0c\x33\xd6\xc4\x09\xe5\x55\xe8\x87\x7a\x19\x42\x64\x10\x93\x64\xc5\xd7\x24\xfb\xca\x03\x8d\x69\x9d\xca\x9f\x3b\x46\x80\xd8\xcf\x4a\x04\x22\xbc\x11\xca\x81\xbb\x94\xbd\x88\x33\x52\x51\x32\x75\x20\x32\x1c\x94\xeb\x05\x9d\x43\xdc\x2c\xea\x3b\xfd\x6c\x0f\xa5\x69\x40\x3c\xa7\x24\xe2\xbf\x26\xa9\x7e\xd4\xb6\xc7\xe7\xb6\xe7\xf3\xf4\x69\x50\x7a\x16\x45\x4f\xcb\x5e\x01\x2c\x2c\x90\x7d\xe0\xc5\x28\x0f\x70\x90\x05\x64\xdb\xd3\x1a\xd3\xc7\x6b\x4c\x1f\xaf\x5d\x51\x38\xa7\x2e\x43\x63\xa8\xa0\x3c\x0e\x00\x7f\xda\xe3\xcd\x18\x13\x82\xc9\x62\x04\xcd\xde\x67\x49\x46\xf3\x94\xd6\x58\x51\x98\x56\x14\x62\x45\xa1\x1b\x80\x66\x84\xb3\xd0\x1d\x50\x53\x9e\x71\x57\x40\xc0\xc2\x5a\xa5\x1d\xe0\xae\x0f\x3c\xab\x74\x89\x86\xc8\xf5\x21\x72\x03\x88\xdc\x01\x44\x86\x06\x4d\x33\x48\x43\x86\x42\x32\x0a\x4b\xec\xbf\xd2\x87\x83\xac\x0f\x07\xcb\x7d\x68\xba\x40\x60\x03\x13\xbc\x32\x97\x33\xe1\x06\x10\x30\x61\xc8\x62\x62\xa9\x27\x43\x5c\x05\x87\x6c\x45\x6f\x6a\x5c\xdd\x8a\xde\xcc\x12\x0c\xd8\xde\x2c\x17\x14\x8c\xe0\x75\x58\x14\xab\x25\x66\x5e\x09\x8a\x95\x4b\xac\x5c\x62\xe5\x72\xa9\x47\xb3\x60\x99\x94\x16\xa2\xcc\x80\xd3\x95\x83\xd9\x85\x10\x86\x20\x96\x68\x29\xf5\xe9\xb3\x25\x5d\xe7\xcb\x10\x26\x55\x2d\xe6\x65\x15\x66\xe2\xe7\x9b\xf4\x85\xb5\x5a\xd3\xa9\x7c\xb8\x0f\x84\x31\xfa\x83\x8f\xc6\x9a\xae\xc0\x7e\xae\xc2\x7e\x43\x2d\x21\x32\x0d\xc1\x7f\x8d\xda\x31\x1d\xc2\xa5\x0f\x2f\x12\xe2\x9c\xb7\xcf\xff\xfc\xf3\xe2\x7e\x41\xe8\x6f\xad\xbe\x0b\x7f\xfe\xf9\xe7\x9f\xff\x63\x7b\xfe\x6f\x7f\xfe\x19\x5f\x38\x94\xc2\x1d\x79\xe3\xa3\xdf\xf5\x32\x5a\x7d\x18\x27\x78\xbb\x30\xda\x91\x59\x04\xa8\x75\x8b\xd4\x0d\xa1\xf7\x75\xc9\xee\xdc\x67\xd3\x18\x30\x76\xed\x8d\x30\xd2\x4d\x52\xda\x72\x16\x4e\x65\x52\x7f\xd9\x6c\xb2\x3d\xa9\xad\xe0\xf5\x25\xfc\x47\xcd\x22\xac\xaf\xe1\x9f\xaa\xdf\x1f\xd7\x0d\xe9\xea\xe7\x47\x75\x43\xfa\xd7\xb5\xd8\x5b\x59\xd5\x62\xef\xab\x03\xf6\x47\x19\xd3\xef\x09\xb1\xe2\x59\xf2\x89\x70\xe0\xcc\x27\x66\xd4\xac\x74\xb4\x69\x9d\xd2\x77\xdf\x52\x21\x1d\x1f\x8b\x91\xb8\x75\xe0\xad\x59\x48\xfc\xab\xec\xed\xf3\x1f\x09\x1f\x9b\xee\x9d\x0e\xe1\x99\x6f\x97\xbe\xb7\x43\x43\xc3\x88\xd6\x16\x68\xc9\x57\x87\xc3\x29\x5e\x2c\x79\x33\xf2\xd2\x30\x42\x77\x6f\xaf\x43\x5b\x0f\xbb\x8f\xf7\x0e\x1e\x19\x09\xa5\x0e\x3b\x7d\xd5\xee\xee\x1d\x74\x1e\x1f\x78\x8a\x3e\xc0\xa7\x87\xf3\x8e\x99\xa5\xf6\xf5\xc3\xdf\xb4\x99\x7e\xa2\x4d\x04\x7e\x45\xb3\x44\x3c\xd8\x3d\xd8\xdf\xb1\xc6\x8a\x7d\xfd\xf8\x60\xde\xa1\xd4\xbc\x9e\x67\xd1\xb9\xf7\xfc\x77\x8f\x48\x26\xda\x64\xf7\x60\xff\xb7\xa4\x45\x92\xd4\xbc\x49\x52\xf3\x86\xd2\x36\x21\xdd\xfd\xdd\xdf\x88\x62\x64\xff\x37\xd9\xda\xa1\x0f\xba\xfb\xbb\xa6\x86\x1d\xfa\x60\xdf\xfc\xdb\x05\x3e\xf5\x04\x53\x2d\xa2\x0e\xbb\x9d\xfe\xae\xd7\x7e\x4c\xc1\xdf\xf5\x92\xd6\x5e\xa7\xf3\x9b\x6e\x91\x9d\x43\xd1\xef\x78\xdd\xb2\xa9\xa3\x79\x65\xfe\xc8\x18\xf6\x60\x46\x74\x0c\x22\x46\x2e\x25\x4e\xdb\x30\xb0\x8c\x61\x07\x56\x6d\xd6\xd5\xb7\xea\xba\xb5\xad\xba\x9d\xda\x56\xdd\x6e\x2d\x33\xc3\x5e\x2d\x8f\xc3\x7e\xed\x38\xfa\x41\xf5\xf6\xc3\xc6\xc3\xda\xcd\x83\x8f\x6a\x89\x00\x1e\xd7\xae\xca\xea\x76\xea\x57\x5f\x75\xbb\xf5\xdd\xc2\xee\xce\x62\x41\x66\xe4\x93\x9f\x36\xba\xda\xea\x19\x79\xef\x17\xbd\x71\x5a\x7a\xff\xa5\xf4\xde\x2b\xbd\xff\xb1\xe6\xbd\x2a\xf5\xaa\x9b\xbe\xdf\x85\x19\x79\x92\x57\x8c\xff\x6b\x39\xdf\x4a\x62\x41\xf0\x8a\x2a\x76\x65\x73\x98\x5a\x71\xef\x8f\xa8\x59\x86\x8a\x7d\x92\xfb\xe0\x95\x87\x72\xef\xa3\xb7\xa5\x9a\x4d\xbc\xdc\x7c\x3e\xd7\x7d\x7c\xde\xf1\x76\xbd\x2e\x3a\x44\x5d\xff\x5b\xd9\xd5\x54\x99\x11\x87\x9d\x54\x65\x1d\xc7\x64\xe5\x44\xaf\x07\x13\x49\x34\xc3\x54\x29\x36\xa8\x71\x49\xd4\x03\x31\xef\xf4\x65\x8b\x7c\xd3\xf6\x99\xb6\x88\x6e\x39\x0d\x87\x52\x0f\x77\xd9\x42\xbb\x7d\xb0\xc0\x09\xec\x00\x0f\x8d\x21\x00\x83\x98\xe2\x49\x8f\xc2\xcf\x55\xa2\x6d\x2b\x77\x19\x34\x9b\x5b\x65\x9f\x41\xe6\x41\xb0\x4e\x83\x92\x13\xac\xdc\x30\x33\xad\xac\xdf\xc0\xa8\xc8\x93\x18\x24\xec\xd1\x76\xfa\xd4\xed\x74\x68\x2b\x7b\xdb\xe9\x94\x29\x88\xf8\xff\x1f\xd9\xbd\xf0\xdc\x95\x9b\x87\x71\x0f\x5d\xc3\x89\xf7\xd5\x66\x75\x6a\xcd\xea\xd6\x9a\xb5\x53\x6b\xd6\x6e\xad\x59\x7b\xb5\x66\xed\xd7\x9a\x75\x50\x6b\xd6\xc3\x5a\xb3\x1e\xd5\x5b\xf5\xb8\x7e\x55\x5d\xb7\xb3\xd4\xcc\xb2\xdf\x7d\x58\x9a\x45\x44\xb0\x19\x99\xe1\xb0\xa3\xcc\xc6\xdb\x9a\xa4\x99\x51\xf8\xda\xe8\x6c\x28\xb0\xf1\xbd\xce\xc1\x8d\xaa\xd4\xdd\x3b\xe8\xe2\x6b\x51\x81\xcd\x95\x77\x23\x67\x55\xab\xdb\xe9\xfc\x26\x5b\x7b\xbf\xe9\x96\x70\x79\x8b\x08\xd7\xef\x77\xbd\xb2\x5b\xca\x2f\x53\xa3\x98\x21\x8e\x29\x26\x29\xdc\x73\xed\xc9\x76\xc0\x89\x42\xc1\xad\xca\x01\xd3\xa3\xd8\xe8\x85\xbb\xa8\x1e\x72\x5d\xc2\x16\x97\xd9\xfc\xd1\xc1\x9e\x40\x46\x7f\xd8\x7d\xdc\x3d\x28\xdf\x13\x33\xe6\x95\x25\xfc\x4d\x0c\xdd\x5d\x2b\x77\x4a\x2e\x3d\x5e\x8f\x09\xef\x4f\x34\x71\x4e\xae\xa2\x64\x3c\xc0\x1b\x7c\x7d\xd1\x10\x93\xa9\xbe\x73\xa8\x37\x23\xaf\x63\xd8\xd6\xc4\xf9\x5d\x45\x72\xd4\x78\x7d\xf2\xf1\xd1\x41\xa7\xdb\x18\x46\x6a\xc2\xb5\x43\x61\x5a\x33\xee\x6f\xca\x04\xbc\x23\xd7\x11\xdc\x1f\x1b\x41\xb3\xd5\xa1\x70\x92\x3d\x9c\x66\x0f\x5f\xb2\x87\x57\xe6\xe1\xbd\x31\xa9\xde\x08\x10\x1c\xe5\x64\xd9\xa7\xb0\x5d\x46\x1b\xa0\xdc\x92\x94\x6e\xa2\xbb\xea\xa6\x9a\x54\x04\x6c\xf0\x0a\xcd\xa0\x8f\x56\xb8\x7d\xab\x86\x4a\xa6\xd3\x44\xd7\xa5\xc0\x25\xd9\xea\xc2\x56\xa7\x9e\x1e\xd4\xbe\xee\xd6\xd3\x08\x5d\x92\xad\x0e\x42\xd7\x18\xd6\xbe\x37\xab\x33\xa1\x98\x97\x31\x97\xea\xfe\xc8\xf4\x41\xe2\xfa\x14\xfc\x2b\x4f\x82\x1f\x79\xca\x08\x72\x51\xf6\x59\x56\xd7\x89\x2c\xb7\x56\xea\xfb\xf3\xbf\x63\x87\x7c\x1a\x0b\x43\x4a\x10\x4d\xa6\x63\xa1\x45\x83\x0f\x06\xa1\x1c\x61\x08\x1e\x9e\x9e\x32\x56\xb6\xa7\x5c\xbf\x3f\xd3\xb6\xbf\x27\x78\x3f\xa8\x67\xca\xbe\xb7\x00\x71\x83\x2b\x81\x99\x32\x42\x25\x06\x65\x3f\xd6\xb4\xca\x60\xbf\x9b\x45\x4f\xc4\x70\x4b\x7e\xc4\xd0\xed\x1a\x2b\x2c\x06\xe4\xbb\x9d\x6c\xb9\x2b\x79\x49\x97\x99\xb3\x5b\x67\xce\x19\xdf\xb8\x1d\x73\x57\xed\x00\x6b\xce\xf2\xaf\x76\x20\x3f\xa3\xd7\x82\x9f\xa1\x41\x14\xa3\x41\x74\xd3\x2b\xb6\x01\x67\xe4\x6a\x0c\xdb\x46\x69\xe5\xa7\xb8\x1b\x98\xbd\x30\x26\xa4\x17\x40\x6c\x5f\xdc\x8c\x81\xe3\x66\x1f\xfe\xfa\x1c\x9b\xa9\xfd\x8d\x42\x82\xdb\x7e\x0a\xfc\xcf\xf6\xc3\x00\x23\xb1\x6a\x3b\x7f\xb7\xe5\x16\x1a\x2b\x92\x48\x86\x63\x46\xdd\xed\xfe\x64\xec\x99\xd6\x55\x9c\x44\xd7\x7c\xe3\xfe\xd1\xd1\xe6\xde\x38\x29\x57\x77\x35\x24\x47\xe3\xea\x64\x3c\xdd\x5c\xfc\x39\xdf\xec\x74\xdc\xfc\xf9\x7b\x45\xa3\xa8\x26\xd8\x29\x39\x1d\xab\x52\x10\x95\xf7\x33\xab\xbb\xcf\xc8\xe7\xb1\x8d\xb1\xc8\x6d\xb7\x3f\xff\xec\x5b\x0f\x90\xcb\x0f\x28\xa5\xae\xdf\xbf\xc4\x54\xf0\xca\xf5\xad\x03\x2d\x0b\x38\x55\xae\x8f\x31\x19\xd4\xbb\x24\xce\x03\x07\x8e\xf2\xf3\x47\x58\xc9\xf1\x18\x5e\x8c\xe1\x1d\x91\x70\xcf\x0f\x70\x2f\x37\xf1\x0c\x9e\xe0\xd4\x30\xfe\x82\xe2\x78\x7c\x8b\xcc\xbb\x92\x03\xb4\x44\x2a\x92\xdd\x5b\xca\x9c\x96\xad\x7d\x99\x6d\x66\xca\x57\x57\xc1\xd4\xac\x2a\x3e\xec\x78\x15\x73\xac\xf8\xb0\xeb\x95\x2f\xe9\x2f\x7f\xe9\x14\x5f\x0e\x2a\x1f\xf2\xa5\xf5\xc9\xb8\xb6\x96\x7e\x19\xd7\x16\xdb\x1f\xe3\xba\xe4\x79\x3f\x2e\x0d\xde\x1b\xbe\x71\x63\xf2\x1d\xdf\x6c\x87\x7e\xa8\x7e\x7f\x58\xfb\xfc\x8a\x6f\xb4\x33\xcf\xaa\x9f\x0f\x6a\x9f\x5f\x97\xc6\xe1\xa3\x2e\xed\x04\x76\xd3\x6b\x4d\xa4\x67\xcc\x23\x54\x49\xa9\x6b\x0c\xc1\x4f\x21\x44\x98\xd0\x99\x56\xef\xf5\xfd\x58\xb5\x7b\xf4\x00\x8e\xc9\xb9\x1c\x10\x87\x8f\x85\xd2\x0d\xfc\xdb\x9e\x71\x25\x43\x39\x72\xe8\x05\x35\x9f\x93\x01\x41\x02\xaa\x06\xe5\x71\x19\x93\x4a\x88\x36\x4b\x95\x3f\xc0\xb0\x4e\x54\xc7\x39\x7c\xf4\x3a\xa9\xde\xbd\xa8\x48\xbd\xaf\x55\x22\x06\x03\xc8\xee\x9d\x88\x45\x75\xba\xfe\xac\x42\xfe\x31\x06\xe7\x4a\x89\xa1\x03\x0f\xfe\xc7\x77\x7e\xc3\xed\xfd\x2f\xde\x83\xd0\xd5\x22\xd6\x84\x48\x26\x69\x7e\xda\xf3\xc1\x9f\xf1\x83\x11\x38\x0e\xa5\x98\x74\xb8\xec\xaf\xa9\x62\x7d\x23\xea\xfb\xaf\x25\x67\x6d\x62\x7b\xb1\xee\xb2\x9d\x62\xc7\x21\x79\x70\x3b\x20\xce\xa5\x3f\xe6\xf2\xba\xd4\x63\x12\x7b\x0b\x5e\x9b\x09\x3a\x1b\xc0\x1d\x26\x73\x3b\xab\x74\xc3\xcb\x8a\xe4\x36\xba\x98\x2c\x07\x30\x9d\x0c\xe0\x0c\x70\x27\xe0\x28\x1f\x25\x2d\x6e\x75\x5b\x46\x33\xc5\xa7\xa5\xba\x54\xcb\xf1\xcc\x4f\x0a\x33\x72\x9d\xc3\xce\xda\xdd\x4e\x07\xa1\x9e\x2d\x8f\xde\x0b\xbe\x29\x22\x6c\x3e\x5f\x19\x00\x36\xcd\x71\xfb\x5a\x36\x7c\x2d\xdb\x51\xa2\xc7\xa1\x14\xed\x50\x0e\xa3\x86\x1f\xa9\x81\x50\xed\x8e\x43\x01\x3b\xc6\xd2\x37\x23\x71\x5e\x6c\xc8\x1b\x43\xde\xc6\x12\xc1\x15\x57\xba\x31\x51\xed\x1d\x24\xf1\x8c\x42\x32\x20\xce\x49\x94\xa8\x40\x60\x5b\x3c\xf3\xbb\xbc\xce\x7e\xde\xdc\x5d\xba\x4c\x5c\x1b\x7d\xcc\x88\xbe\x31\xf1\xd3\x3a\x90\x18\xb1\xd4\x86\x78\x92\x51\xae\xc2\xd1\x95\x6e\x77\x1a\xd8\xcb\xd6\xed\x6d\xba\xf4\x66\x00\x4e\x12\x0b\xd5\x8e\xc5\x58\x04\xda\x01\x27\x94\xa1\x0e\xf9\x38\xff\xda\x9e\x44\x3f\xdb\x7f\x01\x32\x13\xfe\x75\xa8\xff\x02\x2a\x25\x24\x88\xc6\x91\x72\xc0\xf9\xb7\x20\x08\x2a\xe3\xfc\x0f\x96\x6f\xf1\xdb\xe1\x1e\xae\x6c\xce\xa8\x3d\xe4\x03\x31\xa8\x0c\x51\x2c\x82\x48\x0e\xb8\xba\x73\x28\x7c\xe5\xe4\x98\x93\x4b\x8c\x02\xa3\x14\x26\x03\xe2\xbc\xc0\xcd\x86\x86\x7f\xd7\xd0\x57\x61\xdc\x18\x73\x5f\x8c\x4b\x55\x3b\x2d\x1c\x94\x0a\x0f\xbd\x2f\x6b\xcd\xff\xf6\x20\xdd\x6a\x88\x1f\x48\x31\xeb\xdb\xbd\x0b\xe6\xb4\xde\x87\xe4\x7d\x4d\x21\xfe\x52\x1a\xc8\xb3\x84\x48\xd7\x3f\x71\xfd\x8f\x95\xe8\x86\xbf\xc9\x6b\xef\x39\x59\x9a\xc6\xb9\x52\xf5\xc4\x6e\x2f\x77\xd2\xbd\x11\x5f\x9b\x1a\x71\x0f\x68\x1d\x83\xfa\x62\x3c\x6e\xc7\x63\x1e\x5f\xb5\xa3\x65\x16\xb5\xcd\xb4\x3c\x6a\xcf\x02\xc1\x26\x72\x07\x5c\x8e\x4c\xc7\x56\x08\x2e\x77\x97\xd3\x52\xbf\x40\xc9\x3a\x3a\x06\x48\x48\xa9\x77\x9f\x54\x67\xf6\xf7\x41\xed\xcc\xef\x8f\xea\x77\x51\x5a\x01\xc2\x91\x34\xac\x39\x6c\x07\x42\x1a\x66\xc8\xab\xb4\x3c\x70\x69\x44\xa1\xff\xb9\xc6\x05\x9f\x56\x08\xf3\x2b\xd3\x66\x07\xf0\xb6\x2c\x09\xc7\x83\x32\xfc\xdb\xcd\x1a\xd8\xef\x7c\xa3\x3b\xf8\x8f\xd5\x56\x8b\x2c\x6f\x08\xa6\x76\xc3\x96\x9e\xcf\xf1\xe4\x2c\x5a\x0f\x3b\x36\x71\x3d\xde\xb0\x94\x1b\x12\x95\xa8\xa7\xa0\xd4\x8e\x55\x0c\x55\xf1\x45\x49\xd7\x1f\xa5\x2e\x29\x5d\xf5\x45\x65\x1c\xe7\x47\xb0\xce\x17\x85\x8e\xdd\x45\x35\xd0\x43\x95\xab\xbf\x24\x12\xd3\x7b\x14\xee\xca\xa0\xba\x99\x3e\x30\xa2\x63\x9a\xe8\xb4\x8f\x55\x90\xf5\xf5\xdb\x41\x85\x19\x44\xb0\x34\x38\xd7\xe2\x6e\x10\xcd\x64\x3e\x3a\xbf\x57\x46\x27\x59\x59\x20\x99\xae\x01\xe7\xc1\x1a\x75\x22\x88\xc6\x8d\x20\x1a\xb7\x79\xa2\xa3\x42\xf8\xfe\xa2\x8c\x1e\x6e\x9c\xfb\x56\x7e\xcd\xc8\xcb\x01\x6c\x61\xb4\x4c\xce\xa0\xb8\x41\xbc\x56\x30\x56\x27\x64\x19\x4b\xb7\x82\xc5\xf9\x7f\xfe\xef\x4c\xd6\x55\x18\x3d\x08\x36\x6a\x78\x51\xb0\x51\x7f\x0c\x97\x3b\x76\x12\x25\xb1\xc0\x99\xb6\xac\xf8\x0c\xd7\x80\x8f\x05\xbf\x11\xcb\xe0\x7e\xb0\x51\x7f\x8c\x83\x8d\x36\xd5\x38\xd8\x38\xe7\x06\xc1\xc6\x19\x7b\xb3\x4c\xaa\x3f\x4e\x56\xb4\x69\xfb\x7f\x23\xb3\x04\x37\x75\x66\x91\x7f\x93\x51\x0c\x86\x5f\x63\x94\xc9\xe6\xee\xbc\xda\xcc\x28\xd3\xcd\x63\x35\x0a\x36\x46\xb4\xcc\x36\x33\xc2\xdd\x66\xe4\xb7\xc1\x46\xfb\xf6\xba\x56\x77\xfd\xfb\x51\xf0\xbf\xd6\x67\x5c\x33\xe7\x1e\x96\xfd\x00\x41\xdd\xb1\xb2\x53\xf7\xab\x9c\xae\x63\xc7\x01\xd7\xa2\xa2\x03\xd6\x94\xfa\xc2\x5b\x10\xe4\xeb\x02\x1e\x1d\x9c\x0e\x61\x18\x92\x0e\x1a\xeb\x53\xba\x4a\x35\x0d\xf8\x58\x18\x25\xec\xb2\x31\x89\xa4\xbe\xca\x50\x13\xc5\x34\x94\xe1\x54\x34\xb3\x10\xed\x2b\xcc\x7e\xb4\x6a\x56\x4c\x95\xb8\x69\x23\x50\x63\xd0\x1e\x8e\xc5\x6d\xba\x6c\x5b\x86\xfd\x79\x93\x17\x79\x79\x93\x2f\xf1\x4a\x45\x33\x67\xad\xb6\xc1\xe5\x68\x2c\xda\x63\x31\xd4\xe6\xd7\xee\x6d\x23\x48\x54\x1c\xa9\xf6\x34\x0a\x2d\x62\xd4\x3e\x2e\x32\x11\x5b\x90\x62\x49\x35\x5d\x56\x27\x25\xef\xba\x6f\xc6\x10\xb2\xfb\x6b\x69\x14\xd3\xb3\x1b\x38\x4b\x95\x99\x5f\xd8\x61\x73\xde\x70\x99\x18\xed\xb5\xca\x45\xce\x0b\xe1\xab\xd2\xfb\x8c\x9b\x9c\xf7\x5c\x05\x57\x4e\x95\xa5\x9c\xa3\xa9\x0a\xc7\x4e\x95\xaf\x9c\xf7\x3c\x2b\xbc\x9f\xd7\x95\x48\xe1\x54\x1d\x0c\xce\x9b\x64\x9c\xc1\x3d\xcc\xf1\x25\xa3\x24\xd6\x4e\xd5\xf3\xe0\x9c\x88\xa9\x16\x13\x5f\x28\xa7\xea\xce\x77\x3e\x06\x3a\x2a\x5e\xe7\x5e\x7d\xe7\x43\x74\x93\xc2\x57\x39\xda\x79\x26\x02\xfb\xa1\xb4\x51\xa7\xe8\x72\xff\x4b\x64\xd6\x75\xac\xf0\xf5\x3f\xcd\x0a\x68\x10\xfd\x35\x2f\x5c\xd8\x01\x3d\xbe\xc1\xac\x1e\x95\x29\xf2\xad\x3a\xc9\x42\x05\xce\x84\xdf\xda\xf3\x77\x0e\xd4\x43\x65\xbf\x07\x15\x07\xda\x9b\x3e\x36\xf2\xac\xce\xf9\x93\x68\xc0\xc7\x0d\x63\xe2\x34\xe2\x2b\xd3\x8a\xd4\x7a\x1a\x84\xf1\x74\xcc\xef\x1c\xb3\x00\x45\xc1\xf5\xaa\x49\x83\x45\xdb\x83\x90\x8f\xa3\x51\xa3\xfc\x23\xed\xb1\x62\xba\x2f\x97\x0a\x6c\x02\xb2\xf5\x00\xf5\xb9\x5a\x2c\x2d\xc1\x38\x8a\x45\x63\x92\x2d\x71\x66\x54\x6e\x03\xf2\xfc\xa6\xbc\x9a\xdc\x3a\xab\xa7\x96\xc1\x6c\x73\x41\x67\x78\x83\x01\x5c\x07\x80\xd1\x2e\x37\x15\x60\x34\xf9\x1b\x86\x4e\x1e\xca\x82\x12\x94\x53\x15\xc0\xa9\x6e\xef\x35\x8c\x90\xf9\x9e\xc4\x3a\x1c\xde\x65\x6d\xab\xcd\xdb\x19\x79\x62\xc6\xb4\x63\x0a\xe3\x53\x37\x1b\xee\x35\x74\x0e\xa3\x48\xaf\xee\x81\xc9\xb8\xbd\xd3\xa8\xaf\xb0\x71\x12\x04\x22\x8e\xcd\xb2\xbe\xa1\x63\x9e\x72\x19\x58\x63\xb4\xba\x5e\x57\x50\x4e\x55\x38\xc9\x8d\xdb\xdb\x80\x7c\xab\xa0\x38\x11\xba\xf1\x8c\x6b\xf1\xe0\x34\x9c\x88\xd2\xa2\xbd\xbe\xc3\x79\x70\x3d\x50\xd1\xb4\xcc\x65\x19\xc7\x7b\x19\xb8\xe5\xba\x60\x1c\x4e\x1d\x70\x94\x08\x34\xe9\xe0\xa5\x17\x1d\x9a\xb3\xe4\x34\x8a\x43\xbc\x10\x13\x9c\x61\x78\xbb\x81\xbb\xb0\xa2\xcc\xbe\xfb\x0b\x7a\x0a\x52\x4a\x5e\xe5\xcd\x2b\xfb\xe5\x66\x1d\xee\xcd\x66\xad\xe2\xdd\x66\xbd\xe0\xc3\xf2\x24\x57\xd1\x2c\x5e\x9e\xdf\xaf\x36\xe3\x39\x0b\xca\xb1\x28\xdf\x35\x1e\x12\x3a\x26\xe7\x25\x6b\xd9\x01\xdc\xe3\x70\xc4\x20\xd4\x8e\x19\x3a\x74\xa0\xff\x1d\x5f\x81\x2a\xb1\xc5\x73\x83\xc5\xf4\x63\x11\x4a\xea\x9f\xb8\xfe\x71\x5f\x79\x7f\x13\xeb\x8c\xcc\xb6\x0d\x69\xd7\x76\x2f\xa5\x54\xc7\xb1\xb0\x37\x2d\x38\xd5\xf1\x7a\x5d\x6a\x2b\x06\x36\xa8\x22\xb0\x41\x95\x3d\x8d\xdf\x35\x6c\x19\xa3\xb3\xd9\x54\x7d\x87\x39\x9e\x79\x9e\xcf\x55\xbf\x78\xf7\x1f\x8e\xe7\x6c\xe1\x1f\x86\xdd\x65\x23\xc0\x5c\xff\x5b\xa5\xc2\x8f\x9b\x2b\x04\xc5\x3e\x0b\x72\xcd\x6b\x4e\x5c\x1b\x53\x91\xd5\xd5\x59\xaa\xbd\x1a\x5c\x51\x8a\xe7\x9c\x91\x1f\x37\x70\x8d\x89\x94\xb1\xa9\x65\xcf\x71\x90\xba\x59\xab\x39\x57\x1a\xff\xe7\x4c\xab\x22\xf9\x8b\xeb\xff\xb0\x1b\x6a\x6e\x60\x03\x3f\xb8\xcb\xf7\xd0\xdd\xc0\xdd\xe0\xa0\xa2\xe2\xfd\x7f\x76\x99\xba\xdb\xae\x7e\xc7\x9b\x03\x9c\x4d\x96\x12\x2e\x67\x56\xd4\xaa\x95\xf6\xd0\x5f\x2c\x61\xfa\x57\x56\x0f\xf1\x5f\x10\xd1\xa5\xbd\x86\xcd\xd6\xd6\xcf\x55\x26\x4b\xae\x5c\xa6\xc1\xcd\x35\xd5\x72\x2a\xe4\x20\x94\xa3\x25\x6d\x4d\xdc\x4e\x71\x6f\xb8\x84\xfe\x59\x55\x32\x3e\x5f\xc1\x25\xc5\x38\x7c\xdf\xae\xbf\x33\x9d\xfa\x81\x4f\x84\xd7\xb0\xab\x1f\x6e\x46\xf8\xd1\x52\x87\xfc\x15\x8e\xa3\xc1\x40\x89\x38\xae\xa0\xe1\xaf\x96\x0c\xd7\x97\x41\xc5\xcf\x15\x59\x3f\xd7\x89\xdd\x4a\x8e\x7b\x65\x9f\x61\xda\x8c\x37\xdb\xf6\x09\x97\xe9\x71\x12\x6b\xa1\x1a\x27\x98\x2c\xd7\xd6\x54\x0a\x22\xc0\xc4\x25\xe5\x6d\x15\xc7\xb1\xf3\x0c\x77\xad\x56\x19\x4b\xc3\x48\x4d\x52\xbb\xbf\xa2\xab\x16\x6d\x0c\xa2\x71\x3b\x9e\x54\x9c\x94\xb6\xbf\x9c\xa5\x2e\x4a\x41\xbb\x9d\x3a\x63\x9b\x1e\x20\x55\xd8\xff\x5c\xc5\xb6\xdd\xbf\x52\x75\xe6\x75\x25\x92\xd9\x30\x50\x9f\x0f\x46\xc2\x81\xad\x4e\xa5\xc7\xd6\x87\x5d\xd8\x02\x99\xfa\xe4\xac\x8c\xc1\x48\x61\xb2\xbd\xbc\xd5\x91\x17\x29\x50\xea\xe9\x40\x9f\xe3\x82\x18\x2a\xe5\x20\xdd\x58\xce\xa2\x77\x13\x63\xa0\x5e\x0d\xe1\x75\x92\x46\xec\xe5\x0d\xff\x15\xe3\x4d\x09\x3e\x58\x32\xdd\x62\xa1\xcd\x7a\xba\x3c\x91\x06\x61\xcc\xfd\x31\xce\x24\xa2\xcb\x42\xa0\xca\x4e\x62\x0d\x3b\x89\x7f\x25\x3b\x7d\x12\x42\x15\x83\x7a\xb5\x66\x50\xb1\x8b\x9e\x05\x20\x33\x7e\xaa\x6e\xb6\x2d\x79\x1a\xd2\xe9\x33\xbb\x29\xa6\x4f\x79\xda\xfc\xd7\xc9\xfe\x32\xd5\xe1\x2f\xcf\x83\x0f\xb1\x11\x2b\x7f\xe4\xdd\x6c\xe4\x80\xcb\x8f\x69\x1a\x4e\xbe\x0d\xeb\xa6\xfc\x57\xa1\x62\x54\x66\xa4\x8d\x7e\x32\x2b\xf2\xbf\xa8\x01\x4f\x14\x97\xc1\xd5\x2f\x36\x40\xb9\xfc\xc3\xaa\x85\xe2\x3f\x59\x75\x12\x8e\x07\xc6\x5a\xf8\xf5\xda\x3f\xfe\x8b\x6b\xff\x12\x0b\xf5\xeb\xb5\x7f\xfa\xd7\xd5\xfe\x32\x4a\xc7\xf4\xd7\x6b\x7f\xfc\xaf\xab\xfd\x58\xdc\x84\x7f\xab\x72\xff\xc5\xbf\xae\xf2\xbf\xdb\x70\xff\xb2\xec\xfe\x40\x6b\x9c\x7f\x71\x7d\x05\xe5\x19\x5e\x59\x20\x23\x39\x0c\x47\x19\xfa\x0f\x39\x31\xd3\xf6\x5e\xb1\x01\xcc\x83\x6b\x43\xb9\x1c\x38\xe0\xfc\xdb\xf0\xe1\xf0\xe1\xf0\x71\xfe\x71\x18\x49\xdd\x1e\xf2\x49\x38\x36\xca\xe3\x24\x92\x51\x3c\xe5\x81\x28\x1a\xf8\xae\xa8\x4d\x96\x88\xbb\x58\x3e\xb0\xf1\xb9\xec\xba\xb4\xc7\x95\x98\x74\x83\xb3\x2c\xc0\x87\xe7\x01\x3e\x79\x40\x0d\xfa\x1d\xde\x70\xc0\x33\xab\xc1\x37\x58\xad\xf4\xca\xa8\x3d\x4a\xb4\x16\x2a\x2e\xc8\xfa\x88\x5f\xaf\x6f\x88\x33\x0c\xc5\x78\x10\x0b\x5d\xee\xf7\x17\xa1\x8a\x75\x63\xc0\xef\x1a\xd1\x10\x43\xf2\x66\x42\x5c\xe7\xa3\x70\x8b\x1e\xab\xf7\x83\xe5\xb2\x77\xe4\xe8\x06\x9c\xf7\x91\x1c\x18\x5d\x7a\x2b\x71\x83\x5b\xe0\x9a\x82\x7d\x7f\x92\xd8\xf7\x5d\x7b\x4f\x1d\x7e\xb2\x18\xe5\x4d\x85\x4f\xd0\x6b\xb9\xd2\xdb\xeb\x7c\x88\xb4\xf0\x1a\xa7\x57\x61\xdc\x30\x6b\x55\x28\x47\x0d\xf3\xc8\x6f\x6c\xc2\xc3\x71\x14\xf0\x71\x23\xd6\x91\xe2\x23\x61\x88\xbf\x8b\x12\xd5\xf0\x8d\xe9\x6b\xb5\xd8\xdc\x59\x52\x8b\x55\x9a\x91\x70\x00\x2f\x02\xb0\xd6\xe6\x69\xfd\x2a\xba\x95\x9b\x8e\xef\xad\x19\xf2\xc6\x1a\x21\xcf\x30\xae\xcf\x7f\xbb\x1c\x8f\xb5\xeb\xd9\xf4\x51\xaa\x9c\xcd\xe8\x72\x1b\x04\x68\xe0\xb0\xb5\x95\xe4\x37\xbf\x57\x15\x06\x3e\xa8\x6b\x07\x1f\xb9\x4d\x21\xb0\x20\xd2\x0d\xba\xf5\x0b\xe3\x67\x64\x74\x63\x1a\xb0\x0f\xdc\xe5\xf5\x5b\x29\xb5\xb5\x2e\x83\x0e\x75\xf9\xb6\x3d\xaa\xfc\x15\xf0\xc6\xb4\x3b\x1b\x31\xff\x76\x0d\xf7\x4c\x7c\x33\x17\xaa\x7c\x93\xbe\xdf\x71\x28\x58\x16\x1a\x6b\xa1\xda\x3e\x57\xed\x3c\x76\xb3\xcc\x4c\xe3\xd4\x84\x30\x43\x1d\x0c\xd2\x03\x95\x1c\x3e\x0b\x9c\xd3\x37\x70\x1f\x5c\xe2\x69\x2a\xab\x58\xc0\x1d\xb9\xd9\x86\xd3\x6d\xcc\xcc\x05\xb7\x64\x7b\x1b\xae\xb7\xc1\xde\x97\x7b\x41\x69\x6d\x4b\x02\x31\xbe\x10\x70\x4b\x06\xdb\x70\xa4\x31\x9f\x90\x74\x03\x63\xf4\x07\xdb\xb4\x1e\xf0\x5a\x81\xbe\xd6\x84\x63\x34\xd6\x00\x1c\xa7\x02\xff\x70\xfd\x10\xdc\xdd\x94\xd3\x91\x54\xb5\x88\x57\xb9\xfc\x90\xfc\xc6\x37\x8a\x0f\xfe\xd3\xd6\xd1\x68\x34\x16\x46\x7f\x6a\x4f\x06\xd9\xcb\x31\x3a\x72\xf3\xb8\x90\x89\xdf\xde\x6f\x4c\x75\x7b\xb7\x31\xf5\xdb\xbb\xf5\xe8\x13\x3f\xd2\x3a\x9a\x38\xe0\x74\xa7\xb7\x8d\x38\x1a\x87\x83\x86\x1a\xf9\x9c\x74\xa0\x61\xff\x73\xbb\x3b\xfb\xb4\x18\xa6\xb3\x92\x58\xad\x79\x1e\xcb\x5e\x94\x94\x14\x5f\x71\x39\xc8\xa2\x20\x2a\x46\xca\x58\x28\x3d\xe1\x92\x8f\x8a\x01\xbc\xaa\x97\x96\xfc\xa6\x50\xb8\x5e\x6e\x13\x49\xe1\xc5\x36\x5d\xa5\x36\x17\xf9\xf4\x76\xbc\xea\x28\xa6\xca\x62\xad\xaf\x97\x16\x90\x50\x8e\x43\x59\x72\xda\x2e\xb7\x68\xcd\x86\x63\x2d\xbe\x43\x8a\x59\x45\xa8\x88\x59\xa3\x1c\x43\x62\x34\x45\xab\x30\x56\x74\xc6\x2f\x35\x8f\x5c\x7d\xbb\xf9\x49\xed\x7b\xfd\x60\xdb\x8f\xda\xf7\x7a\xc4\xe1\xa7\x32\x37\xfd\x21\xc9\x50\x55\x9d\x34\x6f\x83\x4a\x1a\xa7\xca\x64\x4d\x9f\xbe\x6c\x03\x86\x1c\x06\xaf\x69\xcb\x19\x87\xfe\x03\x3f\x8a\x74\xac\x15\x9f\xb6\xf7\xdc\x8e\xdb\x69\xf3\xf1\xf4\x8a\xbb\x07\xed\x41\x18\xeb\x07\x41\x1c\x17\x00\xee\x24\x94\x6e\x60\x4c\x97\x2f\x81\x19\xcc\x2f\xdb\x20\x2d\x0e\x5c\xe3\xf8\x4c\xc4\xd1\x44\xb4\xf7\xdc\x87\x6e\x07\x4b\x96\x5f\x17\x85\x7f\xd4\x0a\x8b\xf1\xa4\x3d\xe0\x5a\x4c\xc3\xe0\x5a\x28\x2c\x58\x7d\x65\x8b\x3d\x09\xea\xd6\x84\x35\x1c\xde\x10\xe5\x06\x78\x06\xf4\xce\xfc\x91\xb4\x97\x67\x17\xbe\x57\xf9\x93\x5e\xca\x38\xcc\x4b\xd2\x37\x7f\xe9\xaf\x7a\x19\x94\x5e\x2e\xf5\xed\xfb\xc0\xd4\x7f\x56\xd7\x3d\xd2\x29\x65\xa6\x6a\x2e\x1b\x3f\x07\xe8\x78\x29\x44\xd4\x8e\x87\xd7\x39\x34\x54\xce\xd6\xf6\xb7\x5e\x54\x3e\xcb\xfc\x73\x38\x24\x3b\xe8\x7e\x33\x24\x65\x65\x6b\x65\x8a\x44\x38\xdb\x36\x93\xbd\x91\xf4\x4b\x08\xfc\x1c\x01\x1e\x15\x5e\x8f\xb5\x32\xfd\x16\x75\xe4\x41\x29\x5d\x4d\xfe\xd2\xc7\x2b\x63\x72\x05\xc6\xa6\xea\xff\x3d\x80\x3f\x02\x90\x11\xa8\x08\x74\x04\x22\x82\x24\x02\x1e\x41\x10\xb1\xaf\x92\x38\xa7\x3c\xbe\x76\x28\x44\xd1\xba\x94\x5c\x41\x44\xf2\xac\x5c\x69\xf2\xae\xfa\x1d\x54\xc8\xd6\x9f\x71\xc9\x0a\x8e\xa1\x72\x33\x1e\x5e\x0f\x43\x3e\x28\xbc\xe5\x2e\x3f\xf9\xa5\xc8\x3d\xbf\x2d\x2e\x92\x11\xa5\x3b\xd4\x38\x13\xf0\x5a\xad\xba\xb0\x2a\x9a\xc6\x9a\x6b\xe1\x80\xa6\xf0\x1f\xaf\x95\x2b\xf9\x4d\x38\xe2\x3a\x52\x6e\x12\x0b\x75\x34\x12\x52\x17\x97\x27\x9d\xaa\x70\x80\x6e\xbd\x66\x73\x25\xb6\x2b\x1e\x5f\x65\x81\x57\x9a\xae\x3e\xbe\xd6\x53\x6e\xa0\xd5\xf8\xad\xb8\x9b\xcf\x95\x3b\x11\x9a\xa7\x8f\xf1\x55\x38\xd4\xf8\xdc\x3d\x34\xeb\x73\xa2\x75\x24\xe7\x73\xe9\x6a\xae\x46\x42\xe3\x91\xef\x68\x26\xc7\x11\x1f\xcc\xe7\x44\xb9\x53\x85\xd7\x3b\x3f\xb3\xbc\x40\x28\x2a\x27\x57\x4a\x0c\x41\x31\xd3\x35\x20\xd9\x73\x41\x34\x1e\x19\x22\x09\x91\xcd\xa6\x72\xfd\x3b\xcb\x2e\x77\xf8\x23\xb0\x3f\x02\xfc\x91\xb8\xdc\xfe\x4c\x5c\xde\xcf\x37\x06\xbc\x74\x27\x42\x2f\xec\xd1\x17\x08\x9e\x79\x2b\x23\xfc\xf0\xb2\x56\x09\x58\xb1\xa6\x0b\x18\xf8\x9e\xbd\x8c\xf5\xb1\x87\x57\xb8\x06\x7b\xe6\xdf\x3d\x83\x22\x8c\xd2\xe4\xf9\x43\x7c\xd8\x5d\x80\x1f\xb1\x81\x84\x38\x62\x81\x84\x31\xbe\xec\x2c\xe0\x06\x1f\xda\x3b\x0b\xd8\x8e\xd8\x4d\x04\x93\x88\x6d\x47\x70\xb5\x8e\xa5\xee\xf9\x73\x6f\x12\x01\x7f\x81\x81\xf5\xaf\xbd\x71\x04\xfc\x8d\xf9\x1b\xfc\xf0\x14\xf0\x6d\xef\x23\x26\x94\xf3\xb9\x97\xa6\x71\xe3\x97\x9e\xe3\x40\x70\xe3\x9d\x01\xdf\xc5\x23\xde\xaf\x3c\x09\xc1\x1b\x83\xc5\x1f\x7b\x67\xe0\x4f\x30\x9f\xda\x73\x54\x55\xf0\xa3\x7f\xe4\xdd\xa7\xc5\xf0\x27\x42\x3d\x31\x7f\x9e\x63\x62\xb8\x37\x58\xe0\x1d\x16\xf0\xbf\x7a\x1d\xbc\xe1\x20\x6b\xcf\x68\x3d\xe5\xcf\x90\x66\xa4\x36\x27\x94\x77\xbc\x69\x04\xc1\xad\x21\x7e\xdf\xfb\x8a\x59\x5b\x6d\xad\x1f\xbc\x71\x84\x37\x1d\x44\xec\xde\x3f\x35\x3f\xe0\x2e\xfa\x85\xdc\xaf\x1d\x68\xa7\x39\x5c\x6f\x23\x96\x48\xb8\x8e\xd8\x3d\xbf\xc2\xae\xe0\x48\x38\xe6\x97\x3b\x36\x7f\x4e\xcc\x9f\x53\xf3\xe7\x8b\xf9\xf3\x0a\x53\xce\x1d\x61\x4b\x0e\x16\x70\x82\x0f\x3b\x0b\x38\xcd\x06\xf0\x79\xb4\xfe\x76\x86\x83\xf2\xed\x0c\xdf\xb2\xb1\xff\x8e\x0f\x8f\x16\xf0\x34\xc3\x7a\x19\x6d\xb8\x86\x91\x48\xa2\x51\x50\xbc\x89\xd8\xca\x1c\x87\xcb\x97\xaf\x4a\x7a\xaf\xd5\xdd\xfd\x6b\x95\xdf\x35\xcb\x54\x71\xc5\x53\xf9\x0a\x5a\x25\xcc\xa4\x22\x78\xfe\x89\xd2\x05\xbc\x8b\xd8\x33\x09\x1f\x22\xf6\x53\xc2\xab\x88\x7d\x88\xcc\x78\x9c\x45\xec\x95\x82\xd7\xeb\x89\xbc\xe7\x6f\x3c\x0d\x7e\x68\x1a\xfb\xd3\xb6\xf6\xe3\xda\x61\x51\xae\xdf\xc7\x6c\x87\x91\xcd\xc0\x88\x49\x89\x8e\xd7\x83\xdb\x44\x89\x32\x4f\x92\xf8\x31\x82\x33\x3b\x96\xcf\x24\x8b\x56\x66\x19\x86\x00\x22\x08\x0b\xea\xde\x7a\x1a\xf8\x99\x17\x01\xef\x7a\x09\xf0\x87\x9e\x4a\x89\x7d\xe2\x09\xf0\x3f\x7b\x1c\xfc\x13\x2f\x04\xff\xcc\xc3\x44\xe7\xaf\xd4\xa6\x44\xe7\xbe\x30\x6d\x95\xa6\xe4\x47\x83\xe8\xd8\x28\x36\x14\xbe\x46\xab\xd3\x2e\x3f\x04\x1f\xd3\x2e\xff\x8c\x98\x2f\x48\x48\x21\xdc\x94\x30\xf2\x67\x04\x33\x12\xdb\x84\x6f\x36\x15\xe7\xb3\x88\x0d\x25\xbc\x8c\x36\xdf\x3a\x32\x94\x6c\x46\x9e\x45\x1b\x0e\x8b\x3b\x89\x9c\xaa\x28\x10\x71\x2c\x06\x4e\xb6\xb6\xc6\x82\xa4\xbe\xdb\x6c\xb3\xa1\xf4\x25\x35\xba\x9c\x38\x99\x4e\xd5\x52\xb9\x9d\x25\x15\xf6\x65\x44\x9c\x2f\xf2\x5a\x46\x33\xd9\xd0\x77\x53\xe1\x35\x9c\x96\xa4\x0b\x33\x7b\xb0\x4f\xef\x48\x08\x36\x9d\xcb\x93\x3b\x07\xbe\x46\xc4\xbc\xc7\x97\x79\x16\x98\xfa\x87\x2c\x7f\xcc\xd2\x7b\xbb\x70\x0d\x25\xc4\x82\xbc\x52\xe8\x11\x86\x17\x91\xad\xc2\x66\x35\x38\x8a\xcc\xb7\x15\x9d\xe6\x47\x38\x60\x14\x3e\x47\xbf\x78\xaf\xca\xfb\x0d\x9c\x5f\x4b\x7b\x6f\xc0\xbf\x44\xd5\xeb\x26\x65\x9e\xe5\x79\x7d\x16\x3a\x9e\xde\xff\x97\x9e\xa8\xa1\xe5\x24\x80\xe9\x79\xab\xf4\x42\x5b\x8c\xf8\x46\x05\x01\x24\x4b\x88\xf9\x50\x2a\x8b\x66\x47\x76\x8f\x43\xc9\x0f\xfd\x39\x02\x3d\x9f\x0b\x1b\x84\x5e\xf9\x86\x89\xb6\xb2\x6f\x46\x11\xa2\x78\xf3\x5b\xc4\xbe\x44\xf0\xe3\x57\x7b\xe8\x53\xb4\x69\xc6\xd8\x0c\x5e\xa1\x99\x31\x37\x36\x77\x17\xce\x98\xb7\xd9\xf2\xf0\x7b\xb4\x3e\x7d\xe9\x8f\x08\xde\x46\x70\x4b\x3e\x45\xa5\x44\x64\xa8\xb0\xa1\x4c\xfc\x23\x62\xe4\xf7\x00\x05\x6b\x67\x65\x1a\x45\x9b\xcb\xd0\x98\xbe\xa6\xe9\xfd\x2c\x25\x62\xc7\x08\x9e\x5a\xda\xb1\xdf\x2d\x4a\x19\xb2\x9f\x0a\x54\xf8\x17\x29\xe5\xed\x90\x62\xa2\x33\xf3\x35\x31\xca\x29\xe6\x4e\xe4\xd0\xee\xe6\xb9\x96\xb1\xbe\x53\x92\x60\x5a\x8e\xc3\x4e\x9a\xcf\x4c\x40\xe0\x25\x98\xcf\x2c\xc1\x7c\x66\xca\xf4\x89\x06\xee\x25\x2e\x5f\xd0\x5e\xc2\x88\x60\x88\x68\x87\xf6\x49\x9a\x76\xbe\xd5\x05\xcd\x74\xab\x0b\x5d\xea\xa5\xef\xb8\xcd\x43\xdf\xea\x52\x48\x70\xd4\x7e\xaa\x55\x2b\xc4\x8a\x5e\xb9\x21\x2a\xb4\x1a\x6e\x39\xbd\x9b\x99\xab\x1a\x5b\x2f\xc2\xff\x66\x16\xf6\xd1\x2d\x13\x54\x98\xd0\x1e\x65\x48\xc0\x66\x6b\x37\x20\x48\x1e\xc7\x94\x42\x02\x1b\x98\x84\xab\x53\x4a\x8b\x10\xb6\xf1\x06\x14\xe0\x21\x7b\x02\x41\xc8\xc2\x04\xa2\x95\xc0\x1d\x3c\x99\x6b\x43\xc0\x9a\xcd\xad\x07\xe7\x7f\xc6\xb7\x7e\x74\xf1\xc0\x9e\xe1\x92\x78\x6d\x24\x6b\x49\xca\x98\xc4\x04\x61\x36\xd1\x74\x18\xb2\x55\x99\x32\x1f\x1f\xda\x6c\x95\xab\xf2\x5c\x72\xdd\x98\x44\xb1\x6e\x3c\xde\x98\xe6\x32\xdd\xeb\x8f\x42\xe2\x74\x5c\x23\x2f\xd7\x65\xd9\x1c\x8e\x23\xae\x6b\x39\x36\x79\x48\xba\x62\xf7\x37\x7b\x4f\x67\x39\x5d\x26\x0c\x43\xc6\xcd\x8a\xfc\x17\x69\xf8\x1b\xc3\x90\xc8\xd6\x41\xe7\x37\xf5\xdb\x41\xe7\xb7\xae\xd8\x35\xcf\x44\xb7\x39\xc5\x1f\x06\xb9\x68\xe1\x85\x7a\x71\x65\xd9\xe2\xc5\xad\x64\x01\x93\x10\x31\xb5\x9e\x2f\x82\xbf\x27\xda\x6c\x66\x41\xb3\xb2\x2b\x37\x58\x96\x6b\xc9\x2a\xb9\x96\x58\xb9\x66\x13\x7f\xa2\xeb\xaf\x2e\xdd\x12\x98\x11\x0e\x56\xfe\xd9\x3b\xd7\x61\x1c\xae\xbf\x61\x29\xb6\xfc\x64\xd5\x8c\x41\xc8\xc6\x21\xdc\x6c\x06\xff\x91\x83\x6f\x87\x4b\xb9\xb3\x53\x81\xbc\xbe\x8f\x44\xda\x47\x6b\xfb\x47\xae\x9c\x2d\x1a\xc5\x3f\x4e\x5c\x0a\x93\x90\x6d\x87\x70\x15\xfe\xe2\xad\x62\xd3\x90\x7d\x55\x30\x0a\x59\x9c\xc0\x2c\x64\x9f\xe1\x2e\x64\x27\xf0\x55\x2d\xf3\x79\xbe\x9c\x58\xaf\xaf\x75\xd5\xdb\x2b\x0a\xf2\x2b\x35\x06\x09\xe1\xa5\x8b\x04\x55\xd1\xb4\xdd\xee\xfe\xee\x81\x38\xf8\x8d\x88\x76\xf7\xf1\xc3\x8e\xb1\xd5\xd2\x6c\x09\x24\x39\xdc\x9d\xcf\xb7\x6e\x12\x22\x68\x9f\xb7\xbb\x1e\xa7\x2d\xb2\x6d\x7e\xb5\xb7\x13\x82\xc0\x45\x40\x4f\x60\x18\x55\xb5\x34\x5d\xa4\x6a\x4d\x52\xcf\x96\xb1\xdb\x3d\xe4\x7d\xa4\xc3\x53\x99\x56\x53\xba\xac\xe2\xf1\x21\x9f\xcf\x77\x1e\x33\xc6\x78\xb3\x99\x56\x9a\x41\xef\x1c\x3c\x7c\xb4\x27\xf6\xeb\xfe\xd6\x0a\xc6\xfd\xce\xe3\x87\x07\x39\x4c\x91\x73\xa3\x53\x82\x79\xf8\xf0\xe1\x81\x38\xa8\x3b\xd4\x2b\x68\xba\x9d\xdd\x83\x47\x39\xcc\xc1\x4a\x34\xdd\xdd\xce\xde\x41\x41\xcf\xc3\xd5\x88\xf6\x0f\x76\x4b\x44\x3f\x5a\x0d\xf4\x68\xb7\x7b\xf0\x28\x07\x7a\xbc\xb2\xba\x9d\xce\xe3\xc7\xfb\x3b\x39\x50\x91\xee\xa3\x82\x6a\x67\x77\xff\xd1\xc3\x12\x54\x77\x35\xae\x83\x9d\x83\xfd\xa2\x9b\xba\x3b\xab\x71\x3d\x7a\xb4\x6f\x3b\xb3\xa6\x42\x96\x05\x1e\x06\x14\xa3\xc0\xfb\xa6\x49\x62\x33\x26\x2e\x16\x30\x23\x37\x61\xe9\x4f\x10\x92\x01\x79\x93\xe5\x91\x1c\x26\x64\x8f\xc2\x38\x21\x4e\xdb\xa1\xa5\x97\x3b\xe5\x97\xf8\x9b\x52\xb8\xdd\x30\x55\x76\xca\x53\xe5\x3a\xfc\xf5\xcb\xe6\x32\x9d\x42\xa5\xb7\x0c\x63\x4a\x3f\x33\x67\x48\x07\xb4\xcb\x33\x5d\x6d\xab\x74\x2b\x86\x60\x78\x55\x16\x11\x8c\x53\x37\xbf\xed\x43\xa4\xf7\xcd\xcc\xc8\xad\x59\xaa\x85\x99\xe8\xda\x5e\x33\x73\x14\xb2\x49\x02\x27\x1b\x0c\x09\xf9\x1b\x31\x42\xbd\x85\x16\xc4\xe9\x8a\xb5\xab\x96\xec\xb3\xd2\xa5\xe5\x3f\x36\x37\xa7\x6f\xf3\x04\x99\x2e\x3c\x75\x96\xbb\xd5\x5b\xd5\xd7\x5e\xa9\xaf\xa1\x52\x8f\xc5\xc9\xb5\x85\x73\x0d\xc2\x30\xa4\xe6\x5d\xc7\x6e\x66\x66\xd0\x93\x70\x4d\xf6\x7c\x53\xee\x9b\x25\xa4\xce\x0c\x27\xe1\x5f\x95\xef\xda\xf2\x2d\x5b\x7e\x25\x4c\x3b\x85\x31\xfc\x72\xf1\x17\x6d\x2b\xbe\x07\x21\x19\x12\xdf\xa8\x83\x9d\xec\xff\xd4\x68\xa8\xf6\x28\xf6\x57\x45\xe1\x79\xb8\xc1\x84\x36\x4a\x72\x45\x3f\xfe\x16\xfe\xad\xeb\xe6\xf2\xdb\x0e\x4b\xb7\xb9\x61\x04\x95\x3d\x3c\x8e\xac\x14\x69\xbc\xb7\xa3\x7c\x6b\x5b\x36\x03\xeb\xa0\xdf\xc2\x3a\xa8\xa1\xe9\xfb\x8a\x39\xc3\x24\x31\xd4\x77\x21\xf0\xce\x60\xe0\x75\xc1\xf7\x3a\xa6\x11\x98\x8f\x61\x51\x51\x68\x26\x9a\x20\x66\xb3\xc4\x9f\x51\x4c\x0a\x63\x56\xb0\x05\x85\xa7\xab\x10\xcf\xc8\x77\xd4\xae\x97\x71\xbc\x11\x70\x95\x00\x2a\x3e\x16\x09\x37\x48\x3e\x2f\x1b\xc1\x76\x11\xc2\xa4\x38\x65\x24\xc6\x56\x2d\x12\x67\xeb\xd4\x56\xf5\x62\x61\x51\xa1\xc9\x7a\xb9\xce\x04\xc8\xa5\x44\xbb\x5b\xbf\xf2\x0c\x84\xbd\xbd\xe8\x4d\xb8\xfe\xf6\x1d\xcc\x66\x99\xb8\xdb\xf3\xb9\x31\x1a\xf2\x37\xc2\xbc\x11\x2e\x4f\xb3\x60\xa6\x09\x43\x6d\xba\xd0\x72\xfa\xc8\x02\x59\x7a\x55\x8f\xc0\x64\xa1\x62\x29\xcb\xa4\x40\x15\x3a\xcf\x32\x99\xa5\xf1\xe4\xee\x00\x78\x29\xbf\xa4\xc1\x16\x40\x92\xa6\xb7\x8c\x98\xb1\x55\x42\x96\x60\x1e\xd2\x04\xef\x78\x4d\x5c\xd1\xab\x53\x59\x23\x29\x82\x30\x4f\xa3\x89\xd4\x71\x9a\x11\x18\xd4\xc8\x32\xdf\xb3\x04\xa1\x29\x85\x79\x0b\x72\xa2\x0c\x3e\x8e\x44\x51\x78\x17\xb2\xef\xf0\x21\x5c\x7d\xc5\x4e\xfd\x76\xda\xb4\x12\x03\x70\x13\xc1\x4d\x44\xf3\xcb\x3f\x79\x2e\x8a\x35\x26\xe7\xd4\x98\x9c\x53\xbb\xa2\x97\xe7\xe1\x7a\x67\x9a\x92\xd0\xfa\x94\xba\x21\x6f\xc2\xd4\xb1\x74\x47\x3e\xd8\x11\x08\x28\x44\xf5\xa8\x37\xac\x3b\x4d\x7a\x6a\xbe\xd6\x16\xb7\x12\x9a\xa0\x40\x14\x51\xd4\xde\x5e\xad\x6a\x9f\x66\x39\x98\xbd\x2b\x08\x87\x20\x3b\xf1\x5b\xdc\x3e\x5a\x4d\x6d\x9a\x65\x17\x35\x0d\xd4\x2e\x5e\x50\x74\x16\xae\x71\x1f\xed\xa4\xde\xa9\x93\xd5\x76\xd5\x50\xc0\x28\x81\xb3\xd0\xde\xc3\xf2\x7a\x0d\x96\xc7\x10\x20\x92\x8f\xeb\x6a\xd9\x87\x11\x02\x7c\x55\xab\xaa\xf9\x88\xe2\xfa\x75\x48\x8e\x34\xb5\xe7\x7c\xaf\x8d\xd6\x8c\x52\xf3\x38\x34\xb6\xfd\xfe\x02\xbe\x56\xfa\xa7\xe2\x5f\x68\x2c\x4d\x7a\xc9\x66\xc4\x8f\xd0\xbb\x58\x4b\x7e\x1c\x0b\x22\xd2\x6c\x1a\x90\x42\xd9\xea\x35\xbc\x0e\x89\xc0\x8d\x39\x59\x8a\xc7\x47\x49\xf1\xd5\xe6\x89\x46\xf1\x80\xd9\x82\xe0\x38\x34\xbd\xfa\x7d\x83\xd3\xc3\xfa\xf2\xee\xc8\xd7\x30\x73\xe8\x1d\x87\x78\xa5\x54\x7a\xe5\xf2\xcf\x90\xe5\x9e\xac\x24\x76\xe0\x95\xb2\x9e\x2d\x21\x07\xf1\x91\x76\xe0\xb3\xfd\x99\x4c\x8d\x74\x1a\x94\xde\xc4\x9a\x2b\x5d\x06\x19\x86\x72\x24\xd4\x54\x85\x52\xa3\xd7\x0b\x5f\x66\x89\x8f\x63\xf4\x9b\xbd\xc8\xfc\x66\x5c\xca\x48\xa3\xe7\x37\x76\xe0\x04\xfd\x69\xb7\xe4\x3b\x38\x23\x21\x85\xe2\x3a\x52\x5f\x8e\xdf\x39\xf0\x55\xe1\x97\x23\x6d\x0b\x61\x32\x86\x1c\x3e\x16\xe4\x59\x9e\x34\x91\x52\x78\x96\x36\x04\x73\xb7\xd8\xea\x7e\x86\xb4\x4a\x85\x03\x2f\xa2\x35\xb8\x5e\xe3\x6d\x47\xf0\x72\xe5\xca\xc8\x24\xa9\xca\x7e\xed\xd9\x8b\x75\x8d\xed\x63\x7a\xf1\xc5\x06\xa3\xec\x52\xc0\xcb\x10\xd3\x9e\x58\xbb\xec\xf3\xfa\xdb\x20\x8b\x84\xe1\xc4\xda\xd2\x14\xde\xaf\x74\x1e\x08\x19\x44\x03\xf1\xe5\xf8\xf5\xd3\x68\x32\x8d\xa4\xc0\x5c\xfc\x0b\xf8\x62\x50\x5f\x52\x78\xb2\x61\x7d\xc7\x0d\x8c\x8f\xf6\xe0\x3f\xba\x09\x7f\x84\x69\xf8\x2d\xfb\x0f\x07\x76\x30\x23\xe3\xd6\x7f\x38\xb0\x8b\x4f\xcc\x81\x8e\x7d\xc5\x1c\x3c\xf6\x04\x9f\x42\xf6\x09\xde\x86\x2b\x59\xae\xec\x93\x4a\x98\x26\x8a\x92\xec\x96\xb3\x6d\x7a\xcf\xcb\xb7\x9c\xa1\x7e\x2a\xe7\x73\x0e\x89\x59\x78\xed\x0a\x92\xb8\x1c\x02\x14\xfc\x46\xd8\xa3\x6d\x17\x14\x73\x06\xcd\x4d\x2c\x12\x18\x21\x8a\xd3\xc7\xfc\x52\x2c\x70\x53\x17\x94\xd5\x4b\x7f\x0f\xab\x77\x3c\xe9\x4d\x2e\xa8\x5b\xf2\x36\xb4\x97\x93\xe8\xd4\x80\xfd\x23\x5c\xef\x06\xfc\xdd\x48\xc1\x95\x22\x6a\x12\xc2\xb7\x04\x6c\xf8\x00\xba\xef\x86\xe8\x0d\xec\x2e\x40\x0d\xd9\x9a\xeb\xf4\x97\x15\x04\xf4\xe3\xe9\xd4\x21\xc6\x69\x71\xa7\x81\x5a\x75\xd3\x87\xa0\xd4\xc3\x4f\x3b\x99\x47\x31\xf3\xec\x75\x6b\x37\x15\x48\xd7\x6f\x75\x51\xa3\x73\xfd\x97\xad\x6e\x76\x65\x81\x57\x2d\x25\x5d\x7e\xd2\xaa\x17\x55\x59\xb1\xe2\xc2\x10\x0a\x1a\x5b\xf7\x70\x01\x62\xb8\x5e\x39\xcc\xd7\x45\x55\xb9\x7a\x2f\xf3\xb1\x04\xe8\x63\x19\xe0\xf6\x72\x7d\xf1\xc3\x34\x5e\xd9\xf2\x67\x0d\x10\xb1\xe2\xa6\xe0\xe2\x72\x3e\x5d\x2c\x73\x16\x3c\xa9\x68\x8c\x0b\x0a\xc9\x70\xcd\xb0\x6e\xcd\x88\x18\xa2\x7a\xe7\x6e\x2f\x28\xf0\xe1\xfa\xe1\x4f\x86\x99\x77\x25\x18\xb2\x64\xcd\x9e\x4f\x75\x1e\x44\x25\xdf\x6c\xea\x99\x8d\x4a\x9e\xd9\xcc\x0d\x6b\xfa\x9b\x57\x5c\xb0\x8b\x5e\xc0\x08\x67\x24\xf5\xc2\x46\x7f\xe5\x85\x8d\xca\x5e\x58\xa3\xf7\x58\x0f\x7a\x34\x64\xcb\xd6\xc9\x93\x90\x02\x51\x11\xbb\xe7\xdf\x3c\x3d\x84\xe0\xb9\x47\x64\xc4\xee\x83\xe7\xde\x75\x02\xc1\x57\xdc\x7f\xfd\xe4\x5d\x27\x0b\xea\x06\xcf\xcd\x0b\x19\xb9\xc1\x57\xf3\x4e\x46\xae\xff\x69\x01\x6b\x38\x57\x99\xaf\x05\xf7\x62\x6b\x55\xd9\x0f\x5d\xbf\x4d\x28\x72\xf9\x37\x9a\xb9\xdd\x32\x56\xf6\x49\x30\x34\x9f\x82\xe7\x60\xf9\x36\x65\xda\x6e\x9a\x5a\x7a\x80\x6e\x77\xaf\x04\xa6\x0a\xf7\xf1\xff\xcb\xdd\x9b\x68\xb7\x8d\x63\x0d\x83\xaf\xa2\xf0\xd3\xa4\x81\xf2\x95\x22\xd9\x4e\x52\x61\x8a\xbf\x8e\xb3\x3a\x8e\xb3\x78\x89\xe3\xb8\x3a\x9f\x0f\x48\x82\x36\x6d\x8a\x54\x40\x50\xb2\x9c\xe8\x5d\xe6\x59\xe6\xc9\xe6\xe0\x02\x5c\x44\x91\xb2\xab\xba\xbf\x9e\xef\x4c\x9f\xae\x98\x22\x16\x62\xb9\xb8\x1b\xee\xb2\xb1\x5c\x0b\xd4\xc8\x8c\x1e\x57\xd6\x4e\xd5\x8c\xb0\x00\x04\x76\x71\xb2\x72\xb6\xcc\xd0\x8a\x13\xa2\xf3\x1a\xa2\x50\xd7\x1a\x13\xa5\x82\xdd\xb4\x1c\x86\x6a\xbe\x1d\x0c\xf9\xbf\xd0\x19\x17\x80\x7c\xf3\x9c\x7f\x58\xff\xd0\x22\x1f\x9a\xe5\x4d\x38\x19\x52\x98\x27\x64\x48\x29\x64\xaa\xfb\x4a\x66\x8b\x41\x9e\xf4\xe2\x9b\xa7\x05\xbc\x6f\x21\x7c\xf3\xe0\x63\x66\xc8\x5e\xd0\x0a\xad\x62\x41\xc1\x0d\xd6\x2a\x0b\x83\x02\x9c\xd3\x60\xad\x8c\xd1\x99\x11\x57\x2d\xd5\x38\xd3\x12\xad\x1b\x60\x2a\x41\x7c\x37\x23\xdd\x46\xf9\xf6\x75\x46\x90\x48\x22\x27\x8b\x86\x86\xb4\xb5\xee\x71\x46\xde\x49\x92\xe9\x24\x7b\xdf\x75\xc2\xb9\x28\x58\xc7\xd6\xe4\x23\xb9\xeb\xdb\x5c\xf5\x39\x23\x51\x88\x23\x8d\x42\x8c\xf0\x1e\x21\x8e\xa5\x77\x8f\x08\x5b\x87\x98\x7b\xe4\x3b\x0e\xca\x6f\x5b\x27\xc5\xc4\xdd\x63\x6e\xcf\xef\x5e\xcf\xfb\xce\xcc\xac\x2a\xc4\x68\x5b\xab\xff\x2c\x28\x4c\x97\x46\xb8\xaa\x69\xcf\xbb\xff\xd2\x78\x49\xcb\xea\x32\x07\x92\xbc\x43\xf2\x67\xfc\x5d\xb1\x68\x69\x50\xcc\xb8\x2e\x74\x2c\x57\xf4\xab\x15\x57\x4c\x0c\xa3\x50\x4f\x56\xea\x3f\x59\xf9\xab\xec\x63\x4e\xa2\x20\xef\x81\x52\xad\x2c\x07\xde\xbe\x61\xa7\x0b\x10\x66\x93\xba\x81\x73\x2b\x9a\xd2\xb7\x74\x4c\xaa\x22\xeb\x9f\x71\xf1\x24\x4c\x72\x18\xb8\x15\x4e\x8e\x1e\x99\x34\xaa\x14\x22\x15\x56\x4c\xec\xbd\x8c\xe4\x8f\xd6\xc2\x02\xef\xad\x9d\x04\xe0\x7d\xb3\x2d\xb0\xc0\xdb\xb4\xbb\x81\x42\x8d\xd6\x4f\x0b\xbc\xa7\xf6\x40\x21\xcd\x84\xaa\x4a\x32\xe9\x7b\x6f\x55\xbd\xbd\x8c\xa8\xe7\x6f\x54\xd5\x56\x4f\x9b\xaa\x81\x7e\xeb\x7e\xa6\xaa\xd9\x7d\xc2\xab\xaf\x66\x42\xae\x2d\xed\xe6\x62\x81\x1f\x7a\x8a\x40\xef\x06\x90\x16\x9f\xd0\x4b\x8c\x9f\x9e\x92\x69\x5e\xa2\x06\xaa\x5f\xea\xb1\xa6\xc5\x40\x75\x37\x54\x6b\x8e\x28\x8c\x15\x19\x39\x4f\xe0\x65\x48\x6e\x05\x85\xdd\x8c\xc2\x65\xf0\x77\x92\x73\x2a\x4e\x75\x64\x40\x58\x50\xcc\x55\x6e\x12\x74\x4e\x82\x75\x8c\x71\x8c\xe1\x2e\x29\x5c\x04\xe6\xb6\x76\x16\x38\x51\x0c\xf3\xa0\x5d\x79\xba\x5d\x55\x9e\xde\x04\xcd\x42\xa1\x89\x4b\x03\xd7\xc1\xfa\x74\xd5\x3b\x81\xb1\xb8\x39\x0a\x8c\xfd\xcc\x71\xd0\x9a\x07\xfb\x75\x53\x51\xc7\x5c\x20\x2d\xe0\x6c\xed\x4c\xc7\x5a\x8f\x84\x91\x8a\x0b\x39\xe0\x6a\x1d\xbf\x91\x4b\xe4\x4c\x49\xe4\xac\xcf\x0a\x1e\xac\xa7\x3e\xe9\xf5\xbb\x0f\x1f\xea\x07\x66\x98\x32\xfd\xcb\x57\x5c\x79\x18\x10\xd5\xd4\x43\xfd\x4e\x6e\xc0\x68\x46\x73\xab\x28\xd7\xa2\xe9\x87\x58\x54\x65\x7d\xb9\xa4\xd4\xa9\x26\x7f\xe9\x73\xd0\xb7\xd9\x2f\x97\x57\xa4\x25\xf3\x4a\xa1\x3d\x49\x4a\xdf\x63\xed\x7e\x89\x06\xff\x1e\xde\xfc\xf8\x46\x21\xe4\x61\x46\x13\x33\xfe\xac\xa6\x0a\xd2\xeb\xf3\x32\x20\x99\x62\x84\x9e\xaf\xae\x90\xe6\xcd\x30\x97\x4e\x51\x9a\x2c\x8d\x20\x76\x92\xaa\x2e\x6b\x2f\x84\xa4\xcf\x8a\x3c\x33\x2f\x03\x92\xf4\x7d\xbc\xf4\x6a\xff\xee\x02\xce\x83\xa6\x3c\xc8\x75\xae\xd8\xcc\xb7\x7a\xf3\x88\x46\x97\xc0\x90\x43\xf6\x90\x43\x0e\x03\x72\x4c\x14\x45\xfb\x63\x50\xdb\x72\xfd\xb0\xbc\x00\x1a\x3c\x66\xe4\x3c\xc0\x4c\x66\x6a\x11\xf4\x94\x59\xdf\xaf\x4e\xf8\xd7\xaf\x24\x5f\x8e\x50\x2d\x87\x28\x97\x23\x5c\x19\x60\xb0\x9c\x96\x67\x2f\x84\xb0\xcf\x20\xec\xbb\x10\xf6\xbd\xfc\x63\xa1\x5a\x96\x80\x2e\xd6\x8f\xa6\x34\x72\xdd\x53\xef\x5c\x72\x15\xc0\x32\x58\xa3\xad\x59\xf3\xf2\xa9\xd1\xfd\x8d\xe5\xbb\xc0\xe5\x53\x02\x7d\x43\xb6\xe6\xbb\x60\x32\x46\x75\x8d\xbf\x58\x10\x2f\x27\xe3\xf9\x38\x46\xd3\xc4\xc6\xd5\x90\x45\xf2\x1e\xa6\x60\xc0\xab\xa6\xeb\xde\x0b\x8b\xb9\x99\x75\xd0\x53\xdc\x0f\x1a\x35\xce\xe7\x9a\x37\x7b\x5e\x99\x2e\x46\x28\xa0\x85\x7e\x7d\x59\xdb\x56\xcf\xc1\xb4\xa0\xf0\x31\x68\x54\x66\x08\x62\x04\x1e\x49\x6b\xd1\x26\xf7\xf5\x5b\x5b\x27\x23\x2c\xd5\x1b\xbb\xad\xb8\xd1\xb5\x31\x18\xab\x65\x90\xe4\x69\xe0\x30\x09\xef\xee\x60\x26\x4f\x03\xf2\xd3\x63\x4a\xec\x11\x36\x61\x4e\x06\xbb\x01\xa9\xab\xcd\x66\x01\xa0\x53\x49\xc9\xad\x9b\xad\x19\xcd\x4c\xb6\xb4\xb1\x2c\x14\x62\x8a\x2f\xf7\x6e\x6d\x01\xde\x07\x3b\x06\xef\xb1\xbd\x23\xc1\x67\xb6\x04\xdf\xb7\x1f\x0c\x17\x46\x41\xbd\xa0\xf0\xa9\x15\xf1\x4e\xc9\xbb\x00\xac\xb7\xaf\x8f\x2d\x45\x8e\xe0\x22\xd0\x7c\xf1\xa1\x21\x7b\xb3\x80\xa0\xfa\xcc\xe2\x42\x24\xc2\x82\x1d\x45\x13\x15\x11\x3c\x09\xd6\xdc\x7e\x11\x61\x4c\x26\x6f\x03\xe7\x2c\x86\x57\xc1\x5a\x5b\xec\xdb\x00\x66\xe4\xc4\xfc\x73\xc5\x21\xa6\x30\x46\x46\x64\x9f\xaf\x14\xcc\x64\x91\x98\xf9\xed\x1a\x79\xf5\x55\x80\xfc\xee\x07\x01\x02\x76\x70\x28\xa4\x89\x2e\x99\x95\xf5\x32\xbd\xb2\x71\xd6\xe8\xcd\x5c\xdc\xf1\x14\xae\xcb\xc7\xe1\x98\x27\x99\xec\xf0\x1b\x8f\x73\x9f\xfb\xf5\x10\x01\x1f\xb9\x9c\x25\xe2\xba\xa3\x17\xed\x79\xc5\x33\xab\x26\x2d\x4d\x02\x38\xc3\x2b\x98\xa3\xbe\x77\x49\x37\xac\x8e\xb5\xa1\x7f\xec\xc3\x61\x40\x84\x02\x83\xda\x85\xb7\xf5\x25\xe6\xb9\x85\x8b\xe0\xe9\x24\x89\x53\xde\x09\x44\x32\xee\xb0\x49\x88\xb7\x28\x7d\x56\x77\xa8\xfe\xc0\xa2\x20\x11\x63\xee\x77\x32\x11\x99\x3a\xe8\xd7\xa5\x49\xec\x9b\xe6\x83\x58\x06\x60\x89\x4b\xed\xa2\xce\xde\x96\x5a\x1b\x87\x99\x76\x41\xc8\xe7\xf2\x56\x01\xca\x27\xc5\xfd\x9e\x24\xe4\x55\xa8\xb7\xe8\xe0\xfe\x3d\xaf\xef\xf0\xd6\x74\xf8\xc1\x80\x65\xc3\x66\xe6\xf5\xe3\x0d\xeb\xd1\x8a\xf6\x55\x9b\xd6\x92\x75\x8c\x0e\xa5\xf0\x65\x8d\xd4\xb8\xab\xef\x15\xf1\x70\xbc\xf8\x5b\x0c\xe0\x9c\x7c\x0c\x74\x76\x76\x9c\xc2\x41\x48\x12\x8c\x8f\x63\x84\xe1\x80\x68\x01\x80\xc2\xb5\xa4\xb4\x9a\x0a\x95\xc2\x8f\xd5\x81\x55\xaf\xbf\x45\x71\xfd\xfd\x60\x58\x5a\x78\xa1\xe6\x5d\xf3\x51\x79\xbe\x47\x73\xa5\x8d\xea\xcf\xcf\x41\x7b\x42\xf8\x1f\x41\xb3\x29\x1f\x0a\xcd\x7a\x48\xef\x03\x67\x1e\xc3\xd7\xc0\xf9\x10\x13\x6b\xc2\x45\x1a\xa6\xf2\xad\x82\x8d\xd7\x37\x13\x16\xfb\x3b\x51\x64\xc1\xfb\x80\xc2\xb7\x35\xa7\x74\xbf\x10\xc3\x63\xb7\xad\xd6\x3e\x11\xf0\xd3\x9b\xda\x35\x26\xaa\x16\x3b\xe6\x90\xfc\xa9\x01\x09\x6d\x4f\xbf\xaf\xc4\xeb\xce\x13\x41\x8e\x39\x30\x8e\x19\x35\x67\xe4\xa5\x04\x25\xc6\xc4\x94\xe2\x51\x60\x5a\x7d\x29\xdc\x3b\xb4\xd4\x71\x7e\xd9\x29\xd7\x8f\xd9\xbd\xb6\x8b\xd8\xfe\xc2\x85\x71\x00\x71\x7f\xd7\xe8\x48\xf9\x6a\xd3\x62\xdb\x6e\x91\x90\xb3\x4b\xa4\xe4\x47\x48\xc9\x8f\x91\x92\x1f\x42\xe2\x88\xfe\x2e\x84\xaa\x58\xe7\x62\xb9\x57\x36\xc8\xf5\x99\x20\x45\xff\xcb\x9d\xb9\x20\xb3\xb5\xb9\x20\xd9\xfa\x5c\x90\x5e\x5e\x6c\xf2\x59\xc2\x3c\x23\x49\x43\x76\x48\xb9\x94\x1d\x32\xc4\x1f\x5e\x96\xca\x64\x8c\x60\x85\x41\x2c\xf8\xe8\x5a\x12\x9d\x01\x18\x73\x1d\x7c\xaf\x25\x90\xe4\x74\xb4\x4b\x62\x58\x4a\x22\xc9\xa9\xb6\x70\xcf\x5c\x25\xbe\x6c\x2f\x80\xb9\xce\xa1\x20\x56\x90\x78\x59\x6a\x51\xf0\x56\xf7\xa2\xfd\x72\x7f\x8f\xe8\xbd\xbd\xb2\xe3\x3e\x1b\x59\x96\x2d\xfa\xee\x15\xe0\x56\x7f\x0e\x0c\xc3\x2e\xfa\xee\x35\x1d\xa9\x7f\xed\x5d\x85\xda\xaf\xf3\x90\x37\x0b\xaa\xd6\x03\x89\x53\x57\x92\xcc\xa5\xc0\xdc\x66\x87\xd6\x52\xc9\x50\x1a\x11\x34\x8e\xe0\x93\x5a\xb7\xca\x20\x2e\x03\x98\x87\x44\xd1\x48\x35\x88\xbf\xfe\xc1\xad\xc6\x89\xaa\x7e\x86\xb0\x9b\xd4\x6d\xba\x4c\x25\xb6\xbf\x5c\xa9\x26\x9b\xef\x11\x61\x4a\x50\x2d\xeb\x1a\xe7\x8b\xd0\x6d\x64\xd2\x74\x8f\xcc\xc6\x9c\x8c\xde\x94\xf6\xdd\xd1\x05\x11\x50\x3f\xe0\xd4\x5c\x18\x99\x24\x83\x16\xe6\x6b\x51\xc0\x61\xd1\xd2\xe2\xe1\x9c\x48\xf8\x98\x68\xb5\xcf\x69\x02\xb2\xef\xed\xc2\x8c\x70\x57\xbb\x7e\x15\x0b\x93\x98\x85\x41\xd0\xeb\xb9\xf3\x1e\xba\x9a\x1b\xd3\x93\x05\x85\xc0\x5d\x87\x7d\xe3\x3f\x9c\x41\xc9\x9b\x2e\xa3\xe3\x8e\x50\x88\xa8\x37\xd4\x5e\xcf\x6a\xfa\xae\xbb\xde\x94\xa9\xda\x9b\xac\xf7\x26\xcd\x5d\xba\xe8\xb3\x6a\xbf\x18\x7c\x34\x51\xac\xa6\xc4\x25\x4e\x5b\x11\xd3\x3b\x49\xe6\xc4\xc5\xf9\xc3\xa9\x56\x36\xba\xcd\xd7\xfa\x83\x3f\x44\x6e\x78\x78\x8e\x37\x49\x8d\xbe\x90\x6a\x7c\xbc\xef\x56\x47\x58\xbc\xea\xbb\x05\xa2\xe6\x15\x09\xdb\x78\x05\xe6\x56\x84\xaa\x28\x67\xae\xf2\x2a\x06\xc8\xf4\x65\x1a\x2f\x41\xff\x90\xfc\x99\xf5\xf1\xde\xac\xcf\xbe\x17\x00\x8b\x91\x60\xdc\xfc\x8b\xb9\x45\x86\x0b\x9e\xc3\x96\x9a\xb2\xbe\xbe\x3f\xf3\x74\xf3\x45\xdd\x61\xb2\xda\xcf\xc3\x87\xc5\x63\xde\x69\x82\x9d\x86\x4e\x62\x92\xb7\xba\x28\x8c\xeb\xcf\x30\x60\xd5\x8f\xe1\x66\x24\x68\x4c\x9d\x48\x14\x14\xf1\x21\xcb\x1f\x3c\x18\xf2\xad\x3f\xe2\xd1\x8c\xa4\x2e\x88\xde\x36\x30\x25\x79\x44\x2e\xc4\x1b\x43\xf3\x1b\xf3\xef\xe7\x4b\x95\x8b\x52\x85\x0b\xe5\x21\xf9\x93\x9b\x59\x14\x4a\x40\x0a\xbe\xdb\xce\xbd\x44\xae\xb6\xc9\x40\x45\x69\xd3\x96\x17\x46\x1a\xab\x34\x53\x27\x4f\x96\x7d\x57\xdb\x59\xb9\xc0\x37\x14\x6f\x1d\xb8\xc0\x7b\x08\x83\xfa\x94\x74\x5b\x3f\xaf\x33\xd6\xc4\x68\x69\xa4\x6a\x8e\x5d\xe7\x3d\x5c\xb6\x93\x40\x23\xca\xe6\x23\xf9\x2a\x74\x26\xe7\xc6\xb8\x08\xa6\xd2\x83\x0b\xa2\x53\x99\x3f\x7c\x78\x41\xb8\xe1\x52\x50\xb7\xb6\x66\x51\xf6\x24\xe0\xad\xb1\x59\x97\x0b\xb7\x49\xe4\xd6\x4c\x0f\x2d\x14\x8f\x7a\x90\x63\xf4\x89\xe3\xda\x35\xaa\xeb\x92\x53\x94\x57\x26\x2e\xcc\xc8\x47\x09\x43\x90\x14\xde\x9a\x7c\xdd\x99\x83\x96\xe6\x20\x1c\x9d\x68\x2e\x03\x49\x1f\x6d\xfe\x1a\x50\x3c\xbe\x33\x72\x98\xc0\x8c\x4c\x5d\x10\x5a\xc9\xdb\xdc\x5f\x86\xfd\x69\xcd\x7d\xec\x7c\x15\xea\xeb\x99\x13\x3f\xca\x14\xcd\x79\x24\xc1\xa4\x12\xca\x33\x49\x5f\xba\x84\x1b\xbe\x92\x4b\x88\x39\xe9\x3f\xd6\xaa\x64\xc0\xdc\x86\x37\x12\x39\xd9\xd2\xcc\x62\x34\x7c\xb4\xf5\x1b\xc9\x36\xe4\x06\x89\x7b\x82\x3e\x8a\xa9\x3d\x58\x50\x98\xad\x43\x56\x39\x72\xc8\x85\xf5\x07\xbc\xcf\xfa\xee\xaf\x5f\x75\x84\x90\x1f\x63\x06\xcb\xf7\xdc\x68\x7b\xa4\x9e\x73\xaf\x8d\x4c\x71\xaa\xb1\xe3\x81\x70\x38\x48\x67\x97\x48\x85\xf5\x99\xa2\xf1\x3c\x4a\xb9\xc6\x4a\x5f\x51\xb2\x2c\x3a\x37\x37\xa4\x20\x15\x4f\xbb\xa0\x30\x77\x9b\xf4\x8f\x27\x24\xa6\xfd\xab\x24\x8c\x91\x3c\xc0\x4d\x1b\x4c\x58\xb9\x72\x5c\xfd\x15\x8a\xbc\xeb\xdd\x1f\xc5\xf6\xdc\x25\x73\x32\x73\xf5\x2e\xe8\xbd\x35\x18\xf4\xba\x05\x83\x2e\x77\x46\x0b\x4d\x76\x03\x4c\xe5\xd3\xd9\xe8\x6f\x3e\xfe\x6d\xcc\xc9\x8c\xdc\x18\x1a\xf5\x1b\x19\xf6\x50\x13\xb1\x73\xcf\x31\x0f\xf2\x21\x0f\xed\x39\xb9\xd6\x98\x7e\x46\x2e\xdc\xc2\xdb\xf9\xc8\x75\x5e\xc1\xb1\xdb\x78\xc5\x94\x47\x1c\x2b\xf8\x9e\xa7\x65\xa8\x30\x5e\xa5\xa4\xbc\x42\x49\x35\xc1\xbe\xb4\xa5\x62\x01\xee\x4b\x55\x6b\xd1\x44\xe6\x24\xd4\x43\xdd\x27\x1c\x7e\xb2\x73\xd5\x99\x5a\x7e\xde\x67\xe7\xe0\x4d\xed\x5d\xc2\xfb\x1e\xc6\x6d\x41\x13\x32\x25\x24\xb9\x91\x7d\xba\x58\xe6\x93\xb0\xec\xf9\xba\x2e\xb3\xa2\xc7\x9c\x55\xca\xa8\x9a\xcc\xb4\xd6\x5f\x25\x69\x1d\x36\x77\xc7\x7a\x7a\x25\x0f\xb4\x5d\xab\xc1\xb6\x54\x0d\xed\xb7\x5b\xad\xf7\xb8\xde\xd3\xeb\x7a\x4f\x5b\xf5\x9e\xf6\xeb\x35\x0a\x23\x75\xe6\xe4\x93\x51\x53\x65\x98\x45\x74\x9f\x30\xf8\xe9\x46\xb6\x87\x01\x46\xce\xe9\xe8\xd4\x9e\x91\x2e\xc7\xc8\x6d\xfa\x05\xeb\xbb\x91\x8d\x88\x7b\x38\xd0\x09\x89\x8e\x5c\xd8\x71\x75\x75\x28\xf1\x7c\xa3\x24\xf1\x19\xf5\x96\x6a\x85\x16\xe0\x66\x14\x52\xf5\x19\x6f\x4f\x5f\x4d\x55\x67\xbb\x12\x5b\x8e\x23\xc7\x97\x2b\xa0\x5e\xbb\xc6\x6e\xe2\xac\x0d\x90\xd1\x2f\x10\xbc\x2f\xfa\xd6\xe2\xca\x5d\xe7\xd0\xe6\xbd\xb4\x05\x78\xef\x55\xfd\xcf\xb6\x04\x6f\xcb\xe6\xaa\xd1\x4b\xd7\xf9\x22\xe0\xdc\x75\x1e\xf5\xff\xfb\x11\xec\xb9\xce\x0b\x41\x86\x8f\x06\x14\xf6\xef\x09\xef\x95\x18\x7b\x5b\x68\xe8\xc7\xfa\xdd\x11\xb7\xf5\xce\xbd\xb0\x11\xc1\x1e\x64\x20\x31\x14\x42\x75\x8b\xea\x00\xa3\x3d\xb5\x71\xdd\x13\x09\x6a\x6a\x16\x4a\xc4\xde\x17\xdb\xb2\x16\x90\xef\x06\xef\xbb\x2f\xd4\x3a\x16\xce\xdb\x88\x75\xcd\x01\x7a\x6d\x0e\x50\x2e\x25\x15\x07\xe8\xde\xa0\x55\x1e\x0b\xf6\x7c\x65\x7c\xd9\xdd\xc3\xcb\x81\xa5\x3d\x35\xb8\x9b\x2c\x14\x28\x65\x94\x9a\xb9\x50\xda\x08\xb9\xf9\x10\xd1\x3f\x7d\xcd\x31\x72\xf7\x56\x8f\x47\xd3\xf8\x8d\xd3\xbb\xe9\xae\x19\x27\xb9\xb7\x36\x22\xc5\xcc\x88\x0a\x19\x5d\x60\x30\xa6\x16\x48\x5d\x50\xf8\xb8\x5e\xa2\xcf\x53\x72\xe6\x96\x4e\xbb\x6e\x8b\xba\x37\x0f\xc1\xe4\x32\x14\xdc\xd9\x1e\x4a\xee\xac\x8b\xa2\xbb\xbb\x03\x81\xfa\xf5\x0e\x5c\x27\xdb\xb0\xfe\xeb\x51\xae\x5a\x4b\x1d\xee\x12\xb7\xc8\xb1\xb7\xaa\x76\xc4\xc9\x2b\x64\xfb\xce\xc8\x5b\xc5\x22\x0d\x70\xa3\x23\xbc\x35\xf2\x1b\x52\x77\x46\xb5\xf8\x50\xb1\x13\xa1\x95\x39\x22\x0f\x6f\xcf\x7e\x65\xf2\x8c\x62\x94\x47\x64\x48\x5a\x37\x3c\x5c\x80\x2b\xa9\x49\x47\x8a\x26\x9c\x6d\x79\x72\x4a\x4c\xfc\x2e\x81\x0b\xad\x62\xd5\xb0\x96\x69\x27\x65\x6b\x81\x8c\x9a\xab\xa0\xec\x45\x70\xc7\x47\xb1\xd4\x95\x70\x19\x90\x56\x44\xa5\x78\x0c\x44\x55\xc8\x26\x55\x9c\x97\xce\x89\x87\x74\x5b\xd4\x09\xcf\x39\x89\x12\x60\xab\xd1\x33\x43\x7c\xbb\x02\x29\x71\x46\x22\x35\x0b\x0c\x8b\x45\x9f\xaf\x6c\x8b\xaf\x46\xb0\x67\x47\xe0\x32\xdb\xef\xbb\xcb\x18\x42\x2d\xcc\xd4\x99\x91\xd8\x05\x09\x8c\x42\xd7\x99\x11\xa9\x9e\x93\x95\x9e\x96\xc3\x49\xc8\x3e\xbb\x1c\x05\x76\x88\x51\x25\xf0\x47\x98\xd8\x1e\xb0\xae\xdd\x55\x1f\x9a\x2a\xc8\x45\xda\x8c\x65\x33\xb2\x6f\x36\xf0\x1b\x07\x91\xa9\xd3\x71\x10\xa0\x6c\x48\xed\xb2\xec\x6b\x5e\xf6\xc6\x94\x41\x59\x96\x65\x58\xf6\x21\x20\xbc\x4a\xad\x2b\x87\x59\xe8\x23\x27\xd4\x91\x4b\xc9\x3e\x91\xf0\x13\x13\xd7\xa2\x71\x6e\x19\xf1\xec\xe9\xda\x16\x47\x0d\x2d\x7e\x5f\xdb\xe2\xb8\xa1\xc5\xb0\x7e\x3a\xdc\x93\xfa\xe9\xd8\xc6\xa5\x1f\x3b\x33\xe2\xa1\x1d\x14\x24\x6a\xf1\xc7\x78\x56\xc6\x7d\x17\x2e\x9d\x71\xdf\x83\x89\x53\xae\x80\xd4\x2b\x70\x49\x61\xec\xa4\x64\x46\x3e\xba\xd0\xed\xbb\xd7\xb8\x4e\x13\xc7\x1f\x55\x58\x21\x1c\xdf\x98\xc2\xe4\x3b\xa5\xf6\xa4\xbe\x91\xb8\x45\x27\xc8\x4c\x4f\x0a\xb4\x3d\x71\x6e\xc8\xb1\x0b\x2e\xda\x3b\x32\x05\x0a\x97\xce\xa4\x9a\x46\x5c\xcf\x83\xd9\x53\x67\x82\x33\x29\x07\xc6\xf3\x81\x15\xd8\x71\xea\xdc\x90\xfd\xb2\xb3\x50\x75\x36\x5d\xed\x6c\xc7\x9e\xd6\xba\xca\x6a\x5d\x3d\xab\x63\x99\x37\xf5\x75\x1c\x6a\x34\x73\x51\x55\xad\x96\x10\x8b\x46\x65\x17\x20\xfa\xec\x35\x1d\xcd\xc8\xb7\xe2\x87\x3d\x23\x5f\x8a\x1f\xe0\xfd\xd0\x38\xfb\x6b\x40\x1e\x0c\x2b\xd8\xf8\x12\x91\xd7\x85\xb3\xe5\x38\x0e\xb9\x70\xce\x49\xa0\x86\xa6\x08\xf0\xc3\x87\x17\x7d\x77\x84\x28\xea\xa3\x12\x5c\xbe\x0a\x72\x81\x04\x98\x52\x7b\x9c\xac\x0e\xe4\x42\x7d\xe3\xb2\x38\x14\x5f\x03\x72\xa9\xe6\x9d\x24\xc0\x32\xb8\xe2\xe4\xd2\x28\x76\x16\x14\x4e\x5d\x67\x1e\xc3\x3b\xb7\xaa\xc4\xc6\x78\x84\xaf\xd8\xfc\x53\xf0\x95\xf3\x6b\x0b\x4e\x5d\x0a\x9f\xda\x84\xd5\x18\x78\x7b\xa6\xe4\x3c\x38\xe1\xb2\x15\x4b\x1e\x9a\xb0\xd5\x96\x65\x60\x32\x21\xf3\x51\x51\x35\xef\xa9\x36\x59\xef\xc6\xe6\xc5\x3c\xf5\x0c\xa5\x9a\xe1\x1b\x4e\xb4\x6f\x01\x53\xe5\x94\xc2\x3b\x97\x14\xe6\x65\x87\x6b\x39\x2b\x93\xd8\xaa\xea\x52\x83\xc1\x35\x5c\x63\x04\xf2\x45\xac\x35\xf8\x4e\xb5\xd1\xff\x82\xc2\xad\xeb\xcc\xc8\x17\xad\xb8\x33\xba\xe7\x77\xaf\xac\xef\x14\x3d\x7b\x5e\xb9\xce\x75\x0c\x6f\x5b\xc9\xed\x7b\x49\xe2\x47\x28\x94\xbf\x71\xef\xef\xfa\x27\x36\xe2\xba\xb3\x89\xb6\x1d\xe0\x7d\xf7\x33\xba\xff\x97\x35\xb9\xf6\xb5\x02\xe1\x88\xdc\xab\xef\xa0\x75\x93\xab\xb4\xec\x8d\x46\x21\x33\xf2\xd6\x85\x18\x33\x96\x3f\xe1\xdb\x26\x54\xc8\x87\xf6\xbb\x03\x46\x66\xe4\xc0\x48\x61\x7d\xf6\x75\x41\xe1\x8b\xdb\x7e\x31\x32\x0b\x61\x73\x5b\x7f\xa3\x68\x06\x4f\x06\xb8\x7f\x2f\xd6\xb7\x1b\xf2\x2d\x3d\x2e\xbc\x37\x5a\x5f\xf7\xc9\xa0\xec\x5e\x55\xff\xdc\xaa\x0a\xaf\x8d\x7f\xf2\xff\x97\x4c\xf9\x14\xde\xbb\xed\xf7\xd8\x83\x3f\xe2\xd1\x9c\xbc\x77\x21\xfe\x3f\xff\x67\x08\xbb\x44\xa8\x6d\x18\x3e\x8c\x47\xbb\x44\x82\xa0\xb6\xa4\xb6\x12\x7f\xbe\xae\xd1\x31\xbd\xd7\x42\x28\xaa\xa5\xe1\xdb\x9a\x6f\xed\x92\x19\xf9\xea\x42\xdc\x1b\x73\x22\x29\x1c\xa1\xf6\x48\x83\x55\x9c\xb6\xf7\xff\x4d\xf5\x6f\x0d\x30\xd7\x86\xde\x44\x91\xde\xbd\xe7\x05\xec\x0e\xf9\x16\x36\x92\xe9\xfd\x20\xd7\xdd\x52\x10\x28\xee\xe9\xe2\xce\x53\x67\x46\x5e\x08\x18\x60\x9e\xa7\xd4\x91\x0c\x98\x7a\x75\x12\xc0\xa9\x0b\x59\x4a\xc1\x5b\x33\xb5\x73\x09\x44\x61\xd8\xd6\xeb\xb8\x49\x96\x5e\x12\x7d\x85\x2a\x16\x94\xc2\x9f\xdf\x73\xaf\x5f\xb5\x2b\x49\x7a\xcf\xd8\x29\x61\xda\xbe\x2b\xda\x3a\xe2\xf3\xa7\x23\x63\x1e\xa1\x8d\xa1\x21\x58\xed\x3b\xae\xdf\x6b\x17\x29\x4b\x74\x9a\x92\xaf\x68\x7e\x7a\x4e\x2c\x73\xe7\x92\x5a\x30\x23\x5e\x0a\xdf\x32\x20\xc2\x11\xb4\xef\x5e\xeb\x0b\xb0\xd2\xbf\x88\xa5\x44\x60\xc2\x4d\xf5\x3a\xf7\x4b\xc2\x97\xec\x54\xbf\xd4\xa9\x45\x30\x3a\xcf\xa9\xab\xde\x9f\x98\xf7\xc9\x78\xcc\x63\x99\xbf\x3d\x36\xf7\x7b\xbe\xa5\x73\x8b\xbf\x72\x75\xbe\xf1\x53\xbc\xac\xf2\x4d\x3a\x1f\xf4\x4f\x4d\xc1\x62\x93\x49\x14\xea\xf0\x54\x8f\xae\xd2\x04\x53\x45\xbe\xae\x69\x0c\xdf\x06\x64\x4e\xc2\x14\x57\xe4\x56\x6b\x75\xdd\xd6\xf5\x66\xc7\x8a\x93\x38\x06\x86\x9c\xd9\x09\x4c\x6d\x01\xa9\x1d\xf7\x53\x60\xa7\x36\xa6\xa7\x77\x7d\x1b\xf3\xba\xb8\x07\x36\x66\xad\xdf\x53\x92\xf0\x82\x42\xda\x0a\x1e\x41\x48\x10\x82\x37\x98\xf6\x8d\xa3\x10\xa5\x4e\xa3\xf0\x20\x45\x38\x26\x74\x01\x7e\x6a\xdc\x7d\x66\x16\x3c\x19\x6c\xff\xce\x1f\xe3\xa2\xf8\x16\x60\x38\x04\xfc\x71\x69\xc1\xd6\x13\xf3\x3c\xb6\x34\x66\x57\x5b\x62\xe1\x41\xf9\x4e\x61\xba\xfe\x70\x3d\x5d\xf1\x82\xc3\x97\x15\x87\xb6\x5f\xbf\x9e\x2e\xd4\xb0\x9f\xf6\xee\x63\xf7\xfa\x9f\xc8\x99\x67\x96\xaf\x9b\xb6\x50\x3f\xc6\x48\x4c\x47\x43\x7b\x50\x04\x1b\xbe\xcb\x3a\x77\x6b\x58\x1b\xe6\xe3\x67\x1b\xb2\x36\xd2\x67\x83\xfc\x55\x31\xd8\xe1\x66\xf1\xae\x18\xf0\xf0\xf1\x30\x7f\x57\xd0\x86\xe1\xef\xc5\xbb\x82\x3e\x6c\x0e\x37\xf3\x77\x05\x8d\xd8\xdc\xde\xca\xdf\x15\x74\x62\xf3\x69\xf1\xae\x12\x66\x61\xb0\xbd\x21\xeb\x2b\xb3\xb5\xb5\xbd\x81\x76\x12\xe3\xf4\x6e\x2e\xe5\xb2\xb5\x8e\xa7\x56\x6f\x63\x46\xba\x78\x56\xe8\x86\x62\x7d\x27\x69\x2b\x99\xad\x2f\xed\x56\x1d\x02\xf4\x6e\x6c\x3e\xb3\x37\x7f\xaf\xc3\x42\x9d\xe6\x6e\x0d\xea\x44\x77\x58\x0f\x8c\x31\xc8\x97\xb6\x1e\xe7\xa2\x1e\xd3\x62\x50\x8f\x5f\x31\x5c\x5d\xc4\x95\x15\x44\xfa\x7a\x91\xde\x79\x87\x30\x23\x13\xbd\x3a\x90\x39\x09\x33\x86\x98\xc3\xcd\x3f\x9c\xec\xd7\xaf\x63\xf4\x1b\x2b\x2f\x45\x7f\xb2\xaf\xb6\x04\x36\xb1\x05\xb8\x5b\x76\xbc\x30\x4c\x5c\xc8\x48\xb6\x31\xa4\x20\x1d\xd9\x43\x86\x75\x96\xb6\xdf\x46\xcd\xc8\xd8\x7c\x0f\xcf\xa7\x30\x57\x45\xf3\x54\xdb\x16\xb9\xac\x59\x0b\xc1\x26\x0b\x0a\x37\xa6\xd2\x3c\x6d\xa8\x44\x12\xdc\xed\x4d\xfa\x68\xeb\x97\x12\xf9\xae\x5b\xce\x14\x70\x47\x3c\x6f\x3b\xf3\xd2\x09\x90\x34\x7b\x8c\x48\xba\x31\x5c\xf1\x36\xb8\x4c\x41\x57\x20\xd2\xb9\x49\xd5\x43\xc8\xc8\xd6\x6f\xb2\xb7\x49\x1b\x42\x50\x17\xb5\xe7\xaa\x6a\x21\x35\x2e\x03\x06\xef\xcd\xc8\x34\x45\x0c\x5f\x83\x10\x53\x32\x2c\x4a\x9e\xd4\x4a\x36\x8b\x92\xa7\xb5\x92\xad\xa2\xe4\xf7\x5a\xc9\x76\x51\xf2\xac\x56\xf2\xb8\x28\x29\x01\xcb\x14\x3d\x51\x45\x35\x08\x43\xf2\xbd\xb3\x86\x7c\x1f\xa3\x71\xd6\x1f\x83\x51\x6c\x0f\xfe\x38\x46\xa6\x6d\x24\x90\x67\x3b\x5a\xd3\xaa\x7e\x66\xe7\x64\x47\x2d\x41\x09\xa6\x3a\xaa\xc7\x1a\xd6\xe5\x28\x05\xcc\x76\x69\x80\xec\xb3\x9b\x3f\x7d\x28\x99\xed\xd7\xe9\x3a\x37\x1f\x45\x86\x7e\x8b\x37\x9e\xf0\xed\xdf\x04\x86\x81\x92\x1b\x4a\xd4\x3b\x6b\xfd\xe8\x0d\x79\xad\x3e\xfa\xa5\xf8\xd4\x8f\xe2\x49\x14\x03\x79\x51\x7e\xfe\xaa\x0d\xdf\x23\x59\x35\xf4\x8a\xa4\x8a\xfb\x3b\xd6\xed\xd5\x92\x9c\xe9\xc7\x9e\xa4\x8f\x9e\xf0\x6d\x04\xf2\x97\x69\xeb\x75\x72\x8a\x14\x5a\x42\xa6\x78\x23\xd5\x32\x08\x09\x47\x4e\x43\x3d\xf4\xd4\xe4\x32\x8a\xd6\x0b\x57\x69\x61\xf4\x7b\x41\x32\x28\xaf\xf8\xc4\x73\x5e\x56\x96\x15\xbf\x50\x09\xa6\x15\xa7\x74\xc4\xd1\x9d\xe2\x7c\xcd\x9e\xce\xc9\xcb\x14\xaf\xc2\xae\x53\xb4\x0c\x3d\x4e\xb1\x98\xc2\x00\xad\xad\x9b\x5a\xd6\xb3\x42\x15\x87\x22\x27\x20\xdb\x76\xbd\x73\xd3\x2b\x94\x9b\x81\x3f\x71\x33\xcc\x93\x30\x55\x06\x85\x02\x6b\xeb\xaf\x77\x33\xa8\x34\xdf\xbc\x6f\xf3\xc1\x52\xb3\x61\xd9\xec\x3c\x85\xe1\x50\x87\x38\x58\x46\x1f\x58\xb4\x59\x29\x19\x2c\x95\x0c\x2a\x25\xb5\xee\x2a\x25\x5b\x4b\x25\x5b\x95\x92\xed\xa5\x92\xed\x4a\xc9\xe3\xa5\x92\xc7\x95\x92\x27\x4b\x25\x4f\x2a\x25\x4f\x97\x4a\x9e\x56\x4a\x7e\x5f\x2a\xf9\xbd\x52\xf2\x6c\xa9\xe4\x99\x2e\xa9\x07\xe1\xc7\x09\x19\x3f\xc8\x05\x85\xfd\x76\x78\x47\xa6\x3a\x62\x25\xbf\xf7\x93\x5d\xd9\x02\xd8\xb5\x9d\x97\x28\xbc\x7e\xa3\x09\x58\x0c\x4c\xa0\x82\xf7\x56\x3d\xee\x68\x3d\xcb\x47\x14\x92\x76\xd3\xb5\xd1\x1c\x8f\xed\x43\x34\x3f\x60\x27\xea\x21\xa6\x30\xb5\xe7\x64\x3f\x05\xf4\x06\x46\xeb\x3b\x92\xa6\xf0\x74\x93\x3f\x46\x08\xe7\x14\x52\x55\x11\x59\x7f\xcb\x82\x8c\x11\x8c\x23\x45\xa9\xe2\xbf\x0f\x39\xf9\x98\x2e\xb7\xa0\x8a\x1f\xdf\x91\x8a\x1b\xd7\xa5\xaa\x97\x3d\xfb\x01\xd2\xf3\xd3\x56\x0c\x84\x88\xa3\x17\x2b\xe4\xb9\xa0\xf0\x2e\xbd\xc3\xd5\xc7\x98\xa6\x56\xa2\xc7\x7c\x4a\xdb\x15\x30\xbe\x4e\x7c\x71\x82\x8e\x30\x4a\x96\x70\x50\x50\xf0\x1c\x94\x1f\x12\x67\x37\x23\x3e\x23\x59\x4a\x98\x36\x91\x28\x7e\x7b\xe5\x35\x80\x59\xb9\x2c\x5f\x39\x5e\xac\x9c\x89\xf7\x5a\x5f\xa6\x19\x39\x4d\xb5\x47\x46\x75\xad\x3c\xbd\x40\x7a\xb5\x8b\x35\x62\x95\x35\xba\x8e\x1d\xd6\x1a\x17\xb7\xba\x8f\x99\x1a\x09\x57\x5d\x4b\xd5\x25\x03\xf7\x5a\xc9\xa5\x07\x8a\xbb\x39\xb2\x3d\x70\x4f\x6d\x0c\xb7\x7c\xb6\x36\x1e\xee\x85\xcd\xc1\xbd\x54\x5d\x24\xaa\xf5\x99\x09\x09\x2a\x1c\x0c\x2d\x11\xa6\xaf\x7f\x64\x2c\xc2\xa8\x12\x41\x82\xf0\xf1\x60\x90\xc7\x7d\x4d\x0f\xf9\x05\xbf\xb1\x20\x30\xe1\x21\xa6\x2c\xca\x78\x19\xc5\xa2\x1a\xc9\xf5\x4c\xdf\xf9\x9e\x0a\xa7\x1a\x01\xf6\xae\xa0\xb7\x79\x52\xbc\xbf\x14\xf0\x36\xcf\xb0\xf7\xf7\xa3\xdd\xb6\x44\x9e\x3d\x34\x86\xde\x87\xa9\xd3\x1e\xdd\x03\xc3\x81\x9c\x9a\x70\x20\x4a\x66\xce\x57\xa3\x90\xaa\x8b\x17\xa5\xf8\x9d\xbf\xaa\x85\x0f\x59\x09\x16\x52\x4a\xff\x27\x09\xf9\x2c\x70\xa4\xd7\x65\x38\x0f\x38\x69\xa4\x61\x2d\xba\x05\x0b\xc4\xf7\x6a\xca\xcd\xfd\x04\x24\x94\x76\xf3\x87\xa9\xd6\xf8\xde\xa6\x0e\xe1\x89\x13\x84\xf5\x18\xd5\x31\xd9\x89\x09\x4f\xc8\x2b\x26\x79\x3f\x4e\x66\x44\xdf\xdf\x52\x78\x95\x56\x35\xe2\x26\xcc\xfb\x4b\x35\xdb\x44\x68\x8d\xf8\xdb\xf4\xae\xc8\x96\xb9\x8b\x90\x89\x98\x33\x32\xc1\x8b\x46\x26\xf8\xd2\xc8\x38\x71\x8d\x66\x92\x4c\x89\xf1\xb9\xe9\x33\xe0\x68\xe1\xc7\x30\xad\x0c\xfa\xba\x30\xe3\xf3\x92\x99\xbf\xdc\xfc\x95\xe6\xaf\x41\x1e\x2f\x84\x12\xef\x6f\xc8\x99\x3a\xbb\x96\x05\x0f\x86\x06\xd2\x95\xd8\xfe\x26\x75\xd4\x71\xb3\x2c\x75\xde\xd4\xbf\xa7\xb6\xce\xd4\x6e\x10\xdd\xb5\xfd\x42\xa8\x63\x87\x2f\x17\x70\xd0\xa4\xde\x39\x57\x08\x25\xa6\xe0\xa3\x72\x55\x87\xb5\x41\x27\x34\x9d\x02\xa1\xbc\xac\x7c\x8e\xb7\x9f\xe5\x15\x89\xe2\x3c\x15\x56\xc4\x3b\x0b\xa3\x9b\x55\x08\xd0\x7a\xc9\xe2\x7f\xc8\x8e\xcb\x3b\x61\x8c\x89\x8f\x26\x2c\x95\x96\x46\x88\xa8\x4d\x6e\x46\x87\x78\xb1\xec\x03\x1a\xca\x1d\x6b\x5b\x71\x9d\x5c\xc7\x3d\x40\x73\x50\x76\x9a\x7f\x78\x37\x23\x01\x79\x9b\xc2\x5a\x9f\xa4\x7d\xf2\x26\x05\xb5\x38\x42\xad\x0d\x86\xe9\xce\x96\x71\x11\xc7\xcb\xee\x4b\x9c\x7c\x97\x11\xd9\x77\xcf\xf0\x81\xe3\x83\xc2\xb2\xf8\x30\x23\x07\x29\xa8\x47\x10\xea\x37\x42\xde\x97\x56\x22\x70\x8c\xbf\x90\x33\x57\xac\xdb\x8b\x76\xa2\x2a\x5b\x25\xa5\x39\x79\xa1\x58\x8d\xe1\xe6\x6f\x02\x78\xcd\xe4\xc1\x65\x0a\xbd\x33\x67\xb8\xf9\x9b\x1a\xdf\x56\x6f\x48\x37\x94\x78\x96\xf5\xd9\x84\xaa\x1f\x02\x3c\x25\x35\x6a\x9d\xf9\x26\x30\xaa\xc4\x47\xe6\xa0\x6c\xc8\x60\xb8\xa9\x44\xaf\x52\x1e\x60\x46\x1e\x50\xc4\x60\x63\x46\xbe\xa8\x99\xb2\xaf\x5a\x24\x40\x02\x51\xe3\x9c\xf8\xc6\xd3\xdf\x44\x1d\x63\xf1\x0d\x44\xcc\x3f\x9a\xa9\xfb\x4a\x68\xb9\x15\xbe\x53\xeb\xbc\x38\xdd\x28\x84\xa4\x6d\x3b\x76\x86\x8f\x41\x38\x18\x85\xd6\x84\x82\x69\x88\x17\xb2\x95\xd7\x43\x79\xa2\xbd\xde\x66\x5e\x0f\xc5\x8f\x35\x15\x87\x4b\x4c\xa7\x04\xdc\x8a\xad\x9c\xfb\x54\xf3\x51\x00\x71\x66\x1e\x57\xd8\xca\xb2\xcd\x70\x7d\x9b\x81\x1d\x3b\x9b\x6a\x7e\x9b\xeb\x46\x63\x2a\xad\x5b\x02\x5c\x81\x21\x08\xe7\x69\x73\xa5\x32\x86\xca\x9a\x5a\x48\x56\xd7\x48\x60\x3f\x52\x05\x4a\xb1\x4e\xd3\xbf\xa0\xf0\xfe\x8e\xba\x5b\x95\xba\x5f\xdb\x4f\xc0\x9c\xec\xa5\x79\x0c\xb2\x42\xfe\xe1\x20\xe9\x48\xda\xd8\x51\x8c\xcb\x88\xae\x8f\xdf\x1a\x50\x57\xcf\x41\x21\x00\xbf\xf4\xbc\x75\xb0\x71\xd4\xdc\xf2\x47\x63\xcb\xea\xd0\x45\xad\x65\x96\x1b\x81\x34\x28\x7e\xf2\x00\xb5\x7c\xc9\x78\xe3\xa0\xc5\x8f\x45\x27\x28\x58\x54\x7c\x8d\xe3\xd1\xb9\x3a\xc3\x3b\xc0\xd5\x9f\x6b\x4a\xed\x73\x82\x8f\x3b\x14\xf0\xc5\x42\x0b\x94\x93\x00\x34\x86\xc7\x03\xff\xbc\xdd\xa3\x63\x9f\x64\xf0\x93\x4d\x14\x3b\x37\x61\xda\x6b\xb1\x26\xd1\x54\x6a\xe0\x4e\x6c\xaa\x89\xeb\x55\x18\x42\x6f\xa8\x7e\x95\xef\xa5\x26\xa1\x35\x88\xd7\x5d\x88\xd2\x7c\xa1\x26\x00\xe5\xe5\x3b\x72\x41\xab\xde\x82\xbc\xc9\x22\xb9\xe2\xff\x7b\x81\x31\xbf\x0b\xbb\xe9\xe7\x25\xa2\x20\x42\x09\xf2\x58\x8e\xd9\x59\x18\x51\x2f\xf1\x01\x07\x3b\xc4\x71\xc7\x8e\x62\xed\x91\x65\xef\x21\xe3\x2f\x36\xb4\xdf\x26\x6b\x65\xf2\xfb\xdd\x91\xd0\x8e\x17\x1c\x2f\x42\xb5\x36\xc1\x73\x56\xb2\x29\x65\x7d\x26\x6a\xc1\xdf\x70\xeb\x6e\xd5\x96\x5c\x55\x72\x6c\x83\xa2\xad\x95\x82\xc2\xbb\x8b\xe5\x6e\xfa\x45\x9e\xa1\xa2\x1f\x9d\x59\x7c\x47\xe6\x93\x5f\x22\xb8\x79\x31\x72\xe8\x74\x61\x1c\xe5\x5b\x7b\xd0\xf9\xbd\x2b\x86\xef\xfb\x21\xe8\xb5\x13\x7a\x71\x2e\x10\x2e\xe8\x08\x1b\x69\x09\x4b\x20\xe0\x2d\x7d\x86\x50\x48\x30\x20\x97\xe7\x78\xe5\x85\xb1\xde\xd9\x2b\xdb\xd3\x52\xa0\x92\x00\x10\x4c\x95\xd8\x97\x28\xb1\x4f\xbd\x4b\x00\x01\x78\x51\x48\xbf\xda\x29\x5d\xad\x4d\x80\x2e\x45\x2e\xc6\x00\x68\x97\xa8\xfe\x18\x8c\x06\x36\x92\x32\x63\xcb\x9e\x38\x73\x22\x20\x84\xa0\xed\xf6\x2c\x1e\xcd\x48\x1c\xc1\x8c\xa4\xf0\x64\x00\x18\x93\xdb\x9e\x91\x6f\x29\xbe\xd9\xdc\xd6\x6f\x16\x25\x73\xa9\xe7\x71\x6d\x27\x7d\x57\x8d\x3a\xc1\x38\xf9\x45\xae\x29\x1c\x5e\xa0\xbf\x59\x19\xf6\x8a\xd7\x4c\x7e\xfa\xe5\xb2\x57\x61\x6d\xb1\x15\x3b\x8c\x7c\x41\x11\x39\x63\x46\xe2\xd1\xfb\xd4\xfe\x9c\x82\xab\x01\x6e\x65\x5c\x81\x1e\x57\x50\xc4\xe9\x8a\xda\x75\x41\x75\xce\x74\x86\x1f\xc8\x39\x50\xda\xc4\x5d\x9e\x99\x28\x88\x3c\x72\xde\x08\xc8\x22\xe7\x40\x00\x8b\x5a\x2f\xbc\x8e\x6c\xd1\x67\x47\x68\x4c\xdf\x77\x29\x78\xb6\xc0\xb8\x62\x42\x87\x24\x03\xf7\xad\x2d\x74\x5c\x31\xd1\x67\x6a\xb4\x5e\xe4\xbc\x15\x90\x44\xce\x2b\x01\x61\xd4\x74\xe8\xe7\x24\x89\x60\x38\x18\xe2\x06\xff\xfa\x85\x3f\x9f\x3c\xd3\x7a\xb9\x5c\x4a\xc6\xd8\x58\x58\xb2\xbd\x85\xb1\x63\x4d\xbd\xed\xc7\xf8\x6b\x24\x37\x86\xb6\xc4\x6b\x3e\x2f\xd2\xb1\x65\x2b\xda\x34\x41\x47\x3d\x51\xae\x79\xbc\xa0\x10\x44\xed\x1a\x4e\xd5\xed\x13\xfc\xfc\x68\x46\x42\x05\x48\x5e\xa4\xfd\x57\x0c\x28\x85\x51\x0e\x8b\x6e\xb4\xd6\x4c\x92\xa3\xbf\x07\xd7\xb6\x1a\x4d\x31\xea\xd1\x85\xed\x6b\x02\x26\xdc\xec\x73\x51\x45\x75\x6a\xe8\xcc\xc4\xb0\xd2\x69\x1e\x24\xfd\xa3\x68\x10\x57\xe3\x58\x69\x97\x08\x16\x15\x71\x4d\xd3\x68\x7d\xfc\xc8\x6a\xea\x0b\x53\x88\x17\x8d\x51\xab\xe8\xa3\xe3\xf1\x2b\xf1\x25\x71\x66\x24\x88\xc0\xd3\xe9\x31\xc3\x80\x24\xa5\xf5\x49\x3e\xab\x1b\x92\x46\xc0\x10\x10\xfa\xec\xa8\x47\x92\x0d\x86\xd1\xe4\x81\xf5\x3d\x9a\x27\xb3\xe8\xbb\x90\x34\x47\x11\x43\xdc\xab\x6b\x79\x95\x3a\x53\xe2\xaa\xa5\xd7\xa1\x49\xd4\xa8\x9e\x17\x5e\x58\xcd\xeb\xca\xd4\x32\x3d\xcf\xcc\x46\x24\x21\xc1\xb8\x61\xf8\x61\x2d\x85\x3d\xaf\x84\x71\xe1\x18\x2f\xa1\xde\xba\x58\xe4\x0c\xc5\x33\xbd\xcc\x09\x68\xf7\xf2\x56\x73\x81\x0e\x77\x7e\xb2\x0f\x78\xca\x28\xb0\x33\x3b\x06\xb6\xa9\xa4\x1f\x26\x29\xb8\xae\x79\xef\x06\xea\x15\x97\x14\xbc\x37\xb6\x00\x77\xa2\xdf\x2f\xea\x99\x20\x34\x48\xfe\x5e\xc4\x60\xab\x18\xa2\xe2\xb9\x10\x25\x3f\xaf\xcf\xd2\xe6\x40\x27\xb5\xa3\x23\x5c\x31\xde\xf7\xde\x00\xef\xbb\x2e\x86\x63\xca\x22\x6d\x4f\x47\x21\x56\x93\x53\xf5\x51\x45\xba\x5a\x7f\x82\x9c\x2c\x8f\xe0\xf7\x7a\x8b\x67\xbf\x37\x35\x60\x1f\xf2\x06\x9b\x95\x06\x01\x89\xca\x1a\x67\xaa\xdf\x40\x3d\x6d\xc2\x39\x11\x30\xa8\x06\x5b\x69\xad\x89\x7d\x0e\x07\xc5\x02\xa8\x36\xda\x1c\x6a\x41\xe1\x8d\xd0\x96\x18\x67\xa0\x44\xb6\xc8\x59\x0a\x8a\x17\x73\x55\xe1\xef\x44\x78\x8b\x4c\x84\x37\x3f\x55\xcc\xc3\x41\x43\x20\x29\xf3\xcf\xb7\x10\x06\xd0\x90\x1a\xa5\x12\x97\xdc\x0b\x9b\x0c\x7b\x5f\x66\x24\xde\x40\x34\x82\x3d\xf9\x11\x74\x03\x8a\xb1\xca\xaf\xf0\xdb\x79\xe0\x2b\x13\xad\x69\x1a\x15\xd1\x9a\x0e\x04\x85\x77\x29\xe9\x4a\x62\x7d\x15\x49\x7c\xd1\xf1\x33\x81\x46\x0d\x1d\x9d\xac\x1c\x43\x88\x77\xa3\xb5\x16\xdf\x8c\xdb\x93\x04\xdc\x33\x3b\x46\x19\x78\x1c\x99\x08\x48\x97\x77\x36\x23\x18\x3b\x15\x05\x61\x75\x62\x74\x2e\x5d\x7b\x1c\x61\x3f\x93\x5a\x73\xd9\xe8\x72\x6c\x78\x68\x46\x98\x83\xfb\xc9\xd5\xb3\xec\xb3\x53\x14\xb7\xb3\x55\x8e\x6b\x4e\x64\x04\xa7\x29\x8a\x02\x35\xce\x4b\xf6\xd3\xbe\x7b\xf6\x3c\x76\x32\x54\x44\x2c\x05\xd8\xd5\x65\x68\xec\x49\x2a\x74\x55\xc2\xcf\xd4\x9e\x91\x6e\x04\x19\xc8\x7e\x8a\xaa\x4e\xfc\xa9\xa8\xa4\x7b\x50\xe1\x93\x4d\x66\x1a\xb4\x28\xc7\x21\xba\x07\x38\x44\x1c\x30\xfb\xff\x62\xa8\xec\xb4\x1c\x2a\x3b\xad\xf0\xe3\x6d\x43\xf5\x9c\x69\xa4\x87\x4a\x32\x3d\xb8\x34\x05\x0f\x4d\x9e\xd4\x57\x71\xcd\xed\x8f\x29\x2a\xa1\x9a\xbe\xcb\x96\xbf\x9b\x2d\x7f\x77\xcb\xae\x37\xb9\x8c\x60\x1a\x55\xda\x5c\x46\x70\x90\x96\xc3\xc1\xd6\x7a\xc1\x2f\x23\xf0\x6b\x2b\xbe\xbd\xd4\x1d\x3b\xd1\xdf\x8c\x35\xfb\x72\x52\x61\x23\x57\xaa\x5d\x46\xd0\xad\xd5\x7a\xb2\x5c\xeb\x78\xa9\xb3\xe3\xa2\xda\xd3\xd5\x6a\x45\x67\x65\xad\xdf\x6d\xed\x2a\xbb\xb2\xdf\xe7\x44\xf6\xa7\x4a\x6c\xc3\x3f\xd7\xad\xea\xb3\x3d\x5c\x03\x9c\x3f\xae\x4e\x29\x25\xa0\x9c\xb0\xc4\xe6\xef\x91\x7c\x75\xb4\x06\x5e\x68\xef\x33\xbd\x94\xfa\xb7\x29\x89\x8b\x92\x69\x04\x0d\x2a\x7e\x01\x46\x03\xbb\x0a\x55\x9e\x93\xf4\x3d\xb5\x47\x1c\x3d\x7f\xdd\x03\x5b\x38\x49\x9f\x69\x55\x7f\x71\x8b\x94\x38\xc4\xab\xc2\x93\x86\x1a\x35\x61\x25\x2a\x79\xea\xf4\x7a\xe6\x4a\x22\x3f\xc0\xcb\x1f\x2a\xee\x21\x3c\x5c\x21\xef\x86\x6a\x1b\xa8\x15\xad\x37\xd6\xd6\x1f\x47\xeb\x8a\x68\x9d\x63\x53\xd5\x85\x44\xab\xc5\x66\xe4\x43\x0a\xe8\x8a\x22\xfa\xec\x71\x11\xa2\xb8\x66\x43\x3d\xb0\x6f\x10\x61\x75\x29\xb0\xc7\xf6\x1c\x9f\x1f\x53\x70\x3f\xda\x71\x46\xac\x97\x49\x16\xf9\x9d\x38\x91\x9d\x34\x73\xc7\xa1\x44\xdd\xa5\xc2\xa9\x90\x27\x36\xee\x84\x29\x96\xcf\xb9\xec\x60\x88\xff\xbe\x95\xbb\x05\x65\xd5\x58\xc8\xb9\x71\xfa\x47\x3b\x4c\x2a\x76\xcc\xb9\x85\xfa\xe7\x0c\xde\x20\xcf\x16\xa4\x3a\x1c\x22\xbc\xc2\x13\x78\x62\xcc\xb9\x7f\xa0\x39\x37\xbe\xa8\xb8\x29\x3c\x33\x87\x7c\xeb\x81\xa3\x76\x45\xa1\x90\x7e\x77\xb4\x9b\xd8\xa5\xb9\xbe\xdc\xa8\x26\x68\xb6\x36\xbc\xca\xa9\x2e\xc7\xe4\x29\x39\xb8\x38\x25\xac\x6a\x06\xac\xbd\x13\x12\x33\xce\x39\x39\x74\x8d\xf3\x89\x7b\xad\x58\xa6\x63\x8a\x03\xbf\x4d\x1b\x1c\x21\x1a\x32\x6e\x22\x29\x2d\x73\x6e\x62\xb6\xfa\xc7\xf6\x0d\xd9\x4d\x4d\x14\x0f\x0f\xa3\xba\x0a\x04\x0b\x6f\xd7\xc6\x39\xe8\x54\x9c\x8d\x8e\x86\x02\xe6\xe4\x44\x2d\x19\xce\x5e\x8f\xf1\x3d\xae\xe5\x8a\x9b\xc5\xd6\x03\x23\x68\x8f\x54\xb3\xdd\x44\x49\xb5\x0d\x23\x44\xb6\x80\x9b\xdc\xff\x8a\x27\xd4\xd6\x8a\x2b\x63\x9e\x91\x4f\x29\xf2\xe9\xb5\x91\x8a\xbe\xfb\x71\x01\xcb\x16\xea\x27\x2e\xad\x18\xac\x68\xce\xb9\x01\x3c\xbd\x55\xf0\xdc\xd3\x60\xc8\x62\x04\x32\x3f\x4c\x27\x11\x9b\x77\x58\x10\xe8\xa8\x48\x98\x48\x3c\x5d\x0b\x8c\xd0\x02\xe2\x05\x90\x7a\xab\x1e\x0e\x7b\x1a\x48\x4b\xf0\xfc\x92\x83\x27\xba\xd7\x4c\x51\x0f\x7e\x4d\x57\x43\x69\x54\x86\xbd\xc6\x87\x54\xd5\x78\xb5\xea\xd7\xb5\xd2\x87\xda\x13\xb5\xd0\x13\x8d\xa4\x8b\x93\x19\x25\x0d\xae\x1a\x4a\x0a\x11\x65\xc5\xfe\x74\xc5\xd3\x48\x75\xe5\xe2\x9a\x3f\x86\x64\xc9\x77\x6f\x38\xb4\xb3\xd2\x65\x46\x2f\x55\x82\xd1\xc9\x57\x7c\x5c\xf0\xbe\x46\xc1\xc2\xd2\xfa\xbc\xd0\xeb\x93\x34\xb9\xdc\xe5\xee\x0b\xc5\x7c\xd1\x66\x2b\x5a\x1f\xa4\xec\xd5\xeb\xfd\xd7\xc7\xaf\x97\xe3\x94\xcd\xa3\x8a\x9b\x81\xbe\xbb\x33\x3e\x06\x37\xd1\x5f\xbb\x49\xeb\xbb\x7e\xcb\x65\xda\x2c\x02\x01\xf3\x48\x5f\x69\x5c\xff\x95\x6e\x1b\xc2\x5a\xad\xdc\xd2\x9d\x24\x04\x2f\xea\xd0\xcb\xbb\x75\x05\x2e\x74\x90\x30\xf7\x50\x7b\x57\x1c\x45\x8d\x06\xc8\x47\x4c\xe7\x5c\xc8\xdd\x64\xaf\xec\xaf\x82\xc4\x14\xd8\xdc\x8e\xc1\x3d\xd1\x17\xc3\xc7\x51\xab\xf9\xe1\x6a\x7a\x72\x2f\xcb\x2f\xea\x6b\x10\x19\x25\x35\x35\x69\x98\xd4\xb7\x39\xce\xb4\xfa\x64\x41\xe1\x75\xe4\x1c\x92\x3f\x87\xb0\x09\x83\xef\x14\xce\xda\x34\x02\x0d\xb9\xfb\x6b\xc0\x36\xb7\x67\xe4\x38\x6a\xd6\x16\xef\x71\x38\x8a\xd4\x74\x5f\x47\x74\x01\x71\xcd\x45\x77\xe5\x3c\x76\x6d\xe3\x7f\xa7\x61\xdb\x7d\x8f\x58\x6f\xae\x8f\xf9\x9c\x5c\x23\x1b\x07\x3b\xab\x53\xcf\x49\xc4\x7b\x45\xdc\x0d\x77\xde\x77\x7d\xba\xea\x7a\xab\x59\x4d\x6f\x99\x74\xe4\x8d\x2b\x5f\xd3\x94\x6f\x4e\x6e\x22\xb4\x12\xe8\x4a\x72\xac\xa4\x19\x6f\x54\xd2\x2c\x5e\xa5\x59\x16\xb5\x77\x93\x92\xe4\x6d\x17\x87\x7d\xe9\xb4\x86\xc8\xa9\x30\x64\x5c\x3c\xed\xdd\x76\xcd\x20\xe9\x7b\x14\xd5\x13\xdc\xad\x75\x0a\xe8\xe8\x16\xe6\x8e\x6e\x9e\xc3\x56\x1c\xdd\x12\x0a\xde\x77\x4a\xed\x06\x24\x10\x2e\x30\xd6\x66\xf3\x51\xaf\x3a\xe5\xa1\x7b\x77\xb4\xc6\xe0\xaa\x7d\xf7\x57\x50\xe8\xf0\x4e\x14\xba\xbd\xba\x6b\xe8\x65\xbd\x8a\x63\xab\xb4\xb0\x82\x6d\xdd\x0f\x36\x9a\x9e\xe8\x36\x76\x95\x1c\xa8\x32\x2f\x23\xdc\x10\xc5\x1c\xfb\x1d\x33\x4d\x14\xa4\x22\x0a\x3c\x27\x0a\x28\x8a\x57\x95\xfb\x59\x83\x1f\x9d\x1a\xdd\x10\xc1\xef\x24\x05\x09\x19\xbc\x66\x15\xf4\xb9\xae\x45\xb9\x47\xcb\xbc\x4d\xa6\x3d\xdd\xde\xae\x4d\xa9\xcc\x0e\xed\x18\xd8\x17\x5b\x82\xfb\xcd\xe6\xe0\x76\x35\xa6\x78\x65\x6c\x3d\x12\x11\x5e\x84\x31\x8b\xd6\x25\xf5\x15\xc6\xb4\xe2\x85\x68\x4f\xc1\xa1\xed\x53\x52\xf5\x99\x23\x93\x93\xbb\x55\x85\xba\x6b\x0b\x30\x99\x82\xe1\x8d\x19\x07\xf3\x7d\xc1\xd3\xb4\xdd\x3e\x45\xab\x20\xd6\x5b\xa4\x08\xce\xfc\x79\x93\x3d\x4a\xca\xa5\x8c\x6a\x66\x27\xb9\x45\x8a\x1f\xa6\xcc\x8d\xfe\xa5\x04\xcc\x67\xda\x1c\x67\xc2\xb5\xf5\x87\x20\x27\x09\x79\xa3\x64\x94\x3c\xcd\x4b\x6e\x7a\x72\x20\x74\x4e\x18\x3d\xb9\x32\x17\x4c\xca\xc9\x0b\xa1\x13\x2d\x8b\x3b\x8c\x2f\x7e\xb2\x8f\xb6\x04\xf6\xc9\xce\x80\x7d\xb6\x39\xb0\x67\x36\x03\x17\xf5\x67\xe7\x7a\x49\x0f\xcc\x92\x5e\x24\x27\x5c\xa4\x61\x12\x97\x8b\xea\x66\x61\xe4\xbf\x42\xeb\x9e\xa5\x57\x5f\x52\x2e\x2a\xaf\x04\x8b\xbd\xcb\x6a\xc2\x9b\x69\xb8\xdc\xcf\xb4\xd2\x71\xca\x71\xae\xda\xc6\xe5\x65\x94\x5b\xdf\xc8\x50\x4d\xf1\x20\x37\xaf\x89\x83\xf0\xc2\x82\x57\x62\xa9\xfd\xbb\x38\x48\x70\x51\x74\xa5\x28\x4b\x31\x8a\xdc\x99\xea\xf3\xad\xc9\x3c\x7d\x1e\xdd\xc3\x1f\x27\xe7\x0e\xb4\xd7\xfa\xa7\x00\x62\x78\x19\x2d\xd3\x65\xa1\xe8\xb2\xb6\x06\xdf\x8b\xd6\x5d\x81\x69\x01\xe0\x3c\x82\x82\xc1\x3e\x63\xf0\x45\x31\xd8\x39\x82\x70\x8f\xec\x9f\x2e\x3a\xbe\x2c\x0c\xda\xa3\xb0\x1f\xb5\x87\xfd\x7b\xa6\x83\x1e\x3d\x59\xbd\xaa\x7c\x62\xb0\xc5\x94\xec\xba\x70\xa4\x0e\xb9\xfb\xd8\xb0\xf6\x1c\x24\xd5\x71\xa8\xea\x58\xe1\x31\x32\x65\xde\xcc\xf6\xc0\x3b\xb5\x5f\x71\xe2\xd1\x8a\x38\x33\xd4\xe4\xc9\x83\xc4\x99\x92\xb3\x08\x8e\x11\x75\x0c\x4c\xaf\x0a\x33\x68\xb2\x51\xf7\x37\x35\xdd\x7d\x56\xdd\x81\x37\xd0\xd7\x40\x1a\xe9\x1d\x70\x60\xab\x36\xa9\x79\xc3\x53\xfb\xa5\x66\x0e\x0b\x09\xe0\x8b\xf6\x51\xcd\x5d\x54\x6b\x0a\x04\x74\x65\x76\xe6\xe4\x2a\x02\x13\xaa\x3c\x59\xa8\x21\x0e\xf5\xd0\xc2\xd5\xa1\x9d\xda\xef\x39\x51\xe4\x69\x68\x87\xe5\xa8\x3e\x54\x47\x35\xb0\xc3\x06\x04\xea\x9d\xda\x3f\x38\x09\x69\x3e\x3c\xdc\xcd\xd7\x98\xfd\xf6\x5a\xcb\x71\x57\xaa\x78\x59\xbc\x0c\x9a\x3b\x7a\xc1\x49\x40\x97\xe7\xf9\x86\x93\xb7\xea\x6d\xa3\x57\x7c\xde\xee\x6c\x99\x79\xdf\x6e\xf6\x82\x8f\x4b\x36\x6c\xb8\x24\xee\xed\x25\xa4\x5a\xd6\xe2\xa8\x2f\x2b\xc1\x26\x56\x8d\x8f\xcb\xc1\x5c\x25\x8d\xf4\x73\x46\xf6\x8c\x24\x51\x10\xce\x40\xc3\xa4\xe6\x38\xdc\xc7\xea\x33\xb3\x1c\x26\x83\x26\x98\xc4\xeb\xb9\x02\x0a\x35\x19\x74\x35\x08\xea\x4e\xbc\x81\xee\xc4\x80\xa0\xbb\xba\xcf\x03\xdb\x6d\x06\xba\xc7\xb6\xab\x8e\x75\x3e\x1c\xef\xac\xa5\x83\x33\xd3\x01\x5b\xe2\xd4\x52\x0d\x6c\xa6\xad\x01\xb3\x74\xb5\xf5\xd0\x4e\x9b\xa1\x6b\xd3\x4e\x9d\x1b\x72\x51\x74\xd1\xcd\xe7\xd0\xd0\x49\xd7\x74\x52\x0c\x61\x05\x24\xdc\x15\x46\xe7\xf7\x7a\x95\xf9\x4a\x95\xba\x07\xbf\x17\xd7\xab\x6c\xd6\x79\x58\xef\xba\x52\xa5\x45\x4a\xfb\xb1\xcc\xba\x7d\x8c\xd6\x67\x65\x9c\xd9\x1c\x6e\x6d\x09\x99\x4e\xb5\x95\xc1\x8e\xa6\x38\xbb\x51\xb3\x7f\x9e\xfb\xf0\x21\xb1\x2c\xcd\x7b\x69\x6d\xa0\x9b\xe7\x49\xe8\x33\xd8\x8d\x50\x3d\x42\xed\xd3\x05\x9c\xb6\xa2\xe4\x6b\x99\xdf\x1c\x8e\x74\x10\x5d\x3b\x4f\xb4\x60\x42\x1c\xbf\x5b\xfe\xb8\x14\xf3\x4a\x53\x9f\x37\x24\x15\xa3\x0b\x8f\x19\xb6\xa1\xc8\xe0\xb4\x58\xc0\xa7\x36\x14\xae\xe3\xc9\x3a\x96\x49\x79\x27\xd5\xbc\xa4\x8e\x25\xf8\x40\xe6\x81\x04\x63\x47\x3d\x32\x90\xce\xbb\x08\xaf\x98\xf3\xbb\xb9\x4a\x02\x45\xf1\x5c\xa2\xff\x7a\xac\xea\xc4\x4b\x97\x6f\xda\xf8\x42\xc7\x11\x86\xd3\x48\x47\x54\xa9\xe6\x26\xa0\x70\xd8\xba\x46\x2d\x91\xdf\x1f\xc4\xa5\x03\xbd\xc9\x51\xb5\x9c\x7d\x40\xf4\xb3\x3c\xa8\x23\x2d\xd7\x0c\xaf\x36\x9e\xe7\x61\xce\x78\x9f\x3d\x7c\xb8\x1c\xf8\xad\xa8\x13\x3b\x72\xb1\x20\x31\x99\x92\x8f\x11\x9c\xae\x38\x48\xbe\xd4\x34\xba\x9c\xa8\xde\xf1\x87\x0f\x75\x60\xb3\x3e\x1b\xc5\x7d\xd7\x8e\xe9\x42\xc9\x92\x19\x05\xb5\x0e\x04\xb3\x71\x1f\xd3\x7e\x77\xd4\x4d\x6c\x0c\x3c\xf0\x29\x82\x6e\x62\x82\xfa\x3e\xb4\x34\xaa\x54\xbb\xff\x04\x98\xd4\xb2\xf5\x49\x74\x2f\xa3\xec\x4b\xc5\x38\x31\x05\xbb\xb7\x36\x87\x43\x3b\x81\x23\x9b\xc1\xb1\xed\xc1\x17\x3b\x83\x5d\x0d\xcb\xb7\xd1\x5f\x48\xb4\x26\x49\x11\x07\x98\x07\x46\xd7\x8c\xdc\xf5\x1a\x75\xc7\xc7\x08\x44\x7f\x07\x44\x3f\x03\xd1\xbf\x05\xd1\x9f\x41\x7e\x9d\x84\x79\x0f\xa3\xa5\x54\xf0\x45\x22\xf8\xf6\x04\xe7\x71\x7f\x07\x77\x34\x43\x3b\xfa\x5b\x34\xa3\x9f\x3d\xaf\x8a\xce\xaf\x70\xdd\xcf\x28\x78\x7a\xab\x4a\xa6\x52\x0f\xb7\x39\x77\xe4\x8c\xdc\x46\xe8\x50\x73\x9e\xc0\x69\x06\x07\x21\xc1\xc7\x2b\x06\xf3\x90\x58\x01\x8b\x52\x6e\x69\xd5\x3a\xbc\x8d\xd6\x04\xd1\x68\xcc\x5f\x5f\x7c\xe3\x30\x51\x64\x05\x4f\xe5\xda\x0b\xe5\x19\x79\xab\x46\x43\xa4\x23\x1a\x6f\x31\x6f\x2b\xf1\x40\x71\x92\x6a\x59\xd4\xa2\x08\x88\xfb\x33\x20\x78\x7b\x7a\x46\x09\x1a\xf8\xd0\xef\x68\x68\x92\xfb\x93\xbf\xa9\xcc\xdf\x5b\x93\xc9\xae\x71\xa5\xb5\xbf\xc2\x99\xc1\x0c\x1a\x11\x60\xea\xbe\x92\x38\x5c\x90\x18\x3c\x3a\xca\x47\x56\x64\x8a\x29\xb6\xe1\xbb\x42\x82\x45\xbc\xcf\x05\x1c\xac\xd9\x8f\xc6\xfc\x2c\xae\x41\xaf\x79\xae\x45\x14\x59\x17\x4a\xca\x9b\x91\x2b\x38\x51\xdf\x7c\x21\xee\xf3\xcf\x1b\x41\xf2\xb0\xed\x14\x0e\x8a\xc8\xce\x14\x7f\xe8\x00\xce\x78\xe1\x72\x1b\xc1\x4a\x08\xe7\x1c\x52\xe6\x98\x6e\x94\xea\x36\x45\x20\x68\xaa\xe0\xac\x12\xac\xda\xfc\x2e\x23\x53\x9b\x17\x3a\x10\xb5\xf9\x61\x1c\x09\x8c\xfc\xa7\x06\xa7\x44\xb9\x30\xbe\x50\xc3\xab\xe5\x34\x4c\xfe\xd5\x9d\xd3\x27\x4d\x23\x68\x4c\xf4\xea\x24\xc4\x33\x28\xbf\xc0\xe1\xa7\x1a\x87\xd7\xa1\xcd\x44\x7f\x15\x14\x62\xbd\xa7\x44\x22\x94\x95\x9b\xaa\xc4\xc4\x99\x92\x73\x8e\x8e\x0f\xdf\x7d\x7c\x6b\xc1\xb5\x44\xd9\x1d\x01\xfb\x4d\xb9\x32\x6a\x66\xf8\xee\x0c\xdf\x72\x3f\xd4\xf7\xd9\x27\x62\x39\x4b\x6b\x5c\x5a\x91\xc6\x90\x39\x72\xed\x29\x13\x80\xde\x44\x59\x7e\xce\xc2\x35\x0e\xfd\xf9\x15\x9a\xa0\xe0\x5e\x2b\x14\x9c\x80\x70\xc9\x38\xa0\x30\x09\xc8\x29\x35\x19\x25\xc3\x96\x81\x1b\x18\x8a\xf9\xcc\x42\x5d\x87\x80\xb0\x0a\x47\xea\x39\x77\xb6\xd0\x20\x82\x10\xda\x30\xe8\x94\x9c\x28\x70\xdf\x91\xf0\x60\xa8\xfe\xad\xfc\x1f\x33\x41\x99\x0f\x55\x3e\x5e\x05\x57\xbd\xda\xab\x03\x3c\xc3\xd3\x8e\x2f\xb5\xd0\x48\xe1\x4d\xe4\x90\x2c\x71\x50\x19\x76\x05\x9f\x39\x1c\xa8\x79\x5c\xc1\xcb\x04\x4d\x27\xd4\xe3\x55\x02\x07\xe6\xf1\x07\x87\x50\x3f\xbd\xe7\x70\xa6\x9f\x5e\x70\x78\x6b\x8a\x5f\x71\x78\x65\x1e\x75\x50\xc4\x86\x99\x69\x3e\x66\x41\xbf\xd3\x26\xbb\x09\x44\x89\x4d\xec\x14\x9a\xc6\x64\x28\x6d\x1e\x44\xce\x0f\x01\x1f\x22\x13\x78\xf1\x8b\x36\x5e\xd8\x5a\xc0\x0b\xfd\xb4\xb9\x80\x1f\xfa\xe9\xc9\x02\x3e\x47\xf7\xc9\x41\x75\xd5\x62\xa3\x3c\x06\xee\xbc\x64\x3a\x28\xed\x8c\x7c\x8e\xb4\x8d\x92\x9b\xe8\xd4\xbb\xd6\x44\x24\x7e\x86\x8d\x2c\x08\x12\x0c\xcd\xa6\xa4\xd6\x91\xa2\xe8\xb6\xa2\xfe\x5e\x53\xab\x8b\x5a\x36\x81\xbc\x65\xe2\xe4\x71\x91\x1c\x47\xb7\xcb\x7f\x57\x5b\x07\xb5\x30\x4e\x3b\xba\xf5\x68\x68\x0f\x20\x6c\x88\xd9\xc4\x2b\x96\x17\x35\xef\xe8\x95\x84\x1a\x9d\xeb\xc4\xc4\x68\xd2\x9f\x5f\xfa\xb0\x5f\xf3\x96\x31\x1f\x86\xcc\xb9\xe5\x24\x9f\xf3\xa5\x94\x13\xfb\xd1\xa3\x28\xf1\x58\x74\x99\xa4\xd2\x7e\x36\x78\xb6\xf5\xc8\xaa\x6a\x23\x22\x38\xd7\x6e\xde\x63\xe7\xa7\xbe\x85\x3b\xc5\x3b\x35\x59\x6a\xaa\xa3\x04\xdc\x13\x7b\x58\x81\x9f\xee\x2a\x7a\x9b\xae\xbe\xf2\x57\x5f\x45\xab\xaf\xd2\xd5\x57\xee\xea\xab\x60\xf5\x55\xb8\xfa\xaa\x01\xed\x36\xd0\x50\xb6\xfa\x2a\x5b\x7d\xd5\x90\x46\xb6\x81\xff\x12\x6b\x58\x32\x25\x8a\xfa\xe0\x3e\xb1\x43\x70\x9f\xd9\x01\x78\xae\xed\x81\x77\x6d\x73\xf0\x62\x3b\x03\xef\x87\x2d\xc1\x9b\xd9\x29\x78\x73\x9b\xe1\x3d\x26\x78\xef\xec\x04\xbc\x53\x3b\x02\xef\xcc\x8e\xc1\xeb\xda\x53\xf0\x06\xf6\x18\xbc\xa1\xdd\x05\xf7\xc8\x76\x17\xf5\xff\x2d\x5f\xa4\xe6\x3b\xf7\x60\x08\xee\x07\xbc\xad\x23\x33\x72\x91\x60\xf8\x3f\xf5\x78\xa9\x1e\x3d\x4a\x09\xa7\x24\xa4\x64\x96\x50\xcd\xf0\x92\x8c\x12\x46\x49\x98\x94\xff\xc5\x94\x78\x94\x48\x4a\x7e\x7a\x37\x76\xb2\xd0\xec\xed\x0f\xe1\xdc\xc6\x0a\x44\xde\xb7\x9e\xe4\x52\x84\x10\x1b\xc4\xb2\xad\x8d\xb3\x22\x8d\x10\x7c\x5d\x67\x2f\x6b\x44\x2b\x69\xef\x12\x09\xbb\xa4\x14\xab\xbe\x45\xed\x9c\x58\xa2\xa8\xcf\xa9\x6b\xa2\x12\xc5\xbe\xf3\x2d\x22\x96\x17\xb1\x34\xfd\xc8\xc6\xdc\xa2\x20\xfc\xdc\x29\xcb\xbd\x56\xe2\x9d\xf4\x9d\x6f\x31\xb1\xfc\x70\x6a\x51\xe0\xfa\x47\x3a\x61\xb1\x45\x21\xf3\x9d\xaf\x31\x30\xdf\x99\x11\xe9\xc3\x29\x20\x1a\xe6\xe6\x29\xf3\x89\xb5\x9f\x30\x3f\x8c\x2f\xfa\xfd\xbe\x45\xbf\xeb\x70\x36\x9e\xef\x08\x01\x89\xdf\x12\x15\x26\xf9\x32\x99\x70\xf1\x92\xa5\x9c\xd0\x05\x84\xfe\x5f\xb8\x13\xd3\x17\x62\xb9\xf6\x60\xf9\x12\x81\xf9\x75\x5c\xf1\x89\x15\xb7\x60\x81\x9e\x94\x9b\x49\x99\xa8\x69\xb9\xfe\x3d\x03\x29\xa5\xba\x61\x68\x51\x88\x7c\x87\x09\xf0\xfd\xf6\x85\x8f\x7c\x88\xc1\xf4\x20\xd0\xde\x6c\xea\x3b\x9e\x80\xae\xdf\xb0\xc5\xb1\x13\x8f\xac\x80\xf5\xc6\x61\x9c\xa5\x96\xad\x1e\x27\x51\x96\x5a\x25\x22\x0a\x7c\xb5\xc8\x27\x88\x8b\x62\x9f\x58\xae\x8c\x3b\xae\x8c\x7b\x49\x26\xa3\x30\xe6\xbd\x30\x0e\x92\x8e\x9b\x08\x9f\x8b\xde\xa0\x33\x16\xbd\x61\x67\xec\xf6\x86\x48\xe7\xa7\x3e\x58\x63\x26\x2e\xc2\xb8\x17\xf1\x40\x5a\x60\xf5\xb6\x04\x1f\xab\x3d\xd2\x7b\x98\x62\xe7\xaa\xdb\x80\xa1\xb2\x1c\x3f\x31\x16\xbd\x4d\xac\x73\xaa\xb6\x5e\xf1\x5d\x89\x31\xf4\x1b\x6b\x30\x92\xa1\x8c\x14\x08\x5d\xea\x75\xc9\x22\x8b\xc2\x44\x3f\x33\x8b\xc2\x85\xaf\xad\x00\x5b\x97\xe8\x98\xe7\x61\xea\x5a\xab\xfc\x08\x4c\x15\x72\x48\xfe\xcc\xf1\xb5\x05\xf8\x94\xaa\xc7\xef\x68\x54\xe4\xaf\x4d\xcc\x13\x57\x33\x41\x98\xd0\x1f\xda\x83\x19\x8c\x3d\x89\x73\xe1\x93\x0c\xb3\x85\x8c\xf4\x31\x63\xfd\xee\x88\xa0\x37\x47\x91\xd2\x2d\x76\x4c\xe2\x80\x99\x24\x18\xb3\x33\x91\x30\x96\x44\x6e\x58\x1d\x75\x52\x28\xc5\x54\xc8\x8d\x75\xb0\x86\x68\xaa\x21\x28\xe6\x0d\xa9\x7e\xb5\xf6\xb5\xb1\x24\xf9\x40\x74\x66\xaa\x0c\x3f\x56\xe9\x49\x7f\x60\xc3\xf4\xb6\xf4\x5e\xbf\xc3\x90\xec\x8d\x27\xf0\x90\xe4\x91\x99\xfa\xe9\x24\x0a\x25\x79\xf4\xcf\x74\xe3\xd1\x85\x92\x13\x6f\xcc\x1e\x33\x71\xc1\xa5\x45\xe1\x5a\x6f\xac\xf4\x2d\x0a\x3b\xe6\xf9\xd2\xa2\x70\x64\x9e\x15\xc3\x78\xec\xb7\x5f\x9c\xc7\xe8\xb0\xd1\x67\x43\x4a\x47\x15\x70\xde\x91\xf7\x81\xe7\x5c\xb6\x68\x04\xd8\xfc\xdc\x74\x6a\x00\x6b\xe1\x9d\x85\x02\x59\x3b\xff\xe0\x9d\x5f\xb2\x28\x9c\x30\x52\x8c\xb4\xed\x7b\xea\x70\xb6\x7f\x6e\x41\xe1\xb5\x5e\x95\x48\xe1\x8a\xb3\xa5\x55\xe1\x50\x48\x3a\xed\x99\x17\x44\x35\xf3\x82\x12\x07\x46\xe7\x79\xde\x5d\xcc\xbc\x66\x9f\x63\xe4\x0d\x23\x9b\x56\x72\xad\xa0\x16\x46\xc0\x39\x39\x05\xcd\xfe\x53\xb8\x5a\x7b\x38\xea\xa9\x20\xe3\xc2\x8f\xc9\x7f\x8e\x97\x37\xbe\xf6\x27\xe8\x73\x9a\xa7\xac\x7a\x69\x76\x9c\xb9\x78\xfa\xcf\x7d\x47\x32\xd8\xf3\xdb\x1c\xe7\x20\x76\x76\x09\xe1\xce\x8c\x9c\xf9\x26\xe6\xa9\x84\xcf\x92\x54\x12\xc9\xd0\x6a\x00\xf4\x56\x5c\xf0\xb9\xc0\x05\x31\xc5\x28\xe8\x2e\xe6\xc3\x08\x95\x6c\x82\x2e\xcb\x6e\x85\x71\x7b\xed\xeb\x9d\x53\xb8\x6f\x92\xa4\xa1\x66\x7b\x51\x92\x08\x3d\x4b\xc3\x1c\x8b\xc2\x8b\xb8\x17\x4a\x3e\x4e\x7b\xe8\x22\xde\x89\xc2\x54\xf6\x74\xa8\x7c\xf5\xba\x04\xc0\x89\x42\xaa\x6e\x6f\xbb\x04\x41\x59\x80\xc4\xac\x37\x1c\x60\xe9\x66\xc7\xef\x05\x11\xbf\xe9\xac\x74\x9c\x37\xfb\xa1\x64\x4d\x18\xfc\xf1\x02\x2d\x10\xdf\xab\x93\xe0\xf9\x4d\x12\x84\xc8\xc8\xcf\xae\xfd\x0c\x73\xa2\xa1\x08\x75\xec\xeb\x48\x29\xb6\x82\x34\x8b\x02\xc1\xf0\x9a\x4f\x69\xbf\x3b\xd2\x6f\xec\x37\x4c\x5b\xfd\x7f\xc1\x6f\x9c\x66\x6a\x6d\x8e\xfa\x2e\xaf\x54\x41\x6a\xdd\x72\x0c\x7c\x16\x5f\x70\x51\x39\x08\x6d\xb0\xcf\xe7\xbc\x97\x46\x2c\xbd\x6c\x38\x00\x85\x7e\x40\x91\xfe\x62\x08\xf1\xbf\x7b\x08\x2e\x8f\xa2\x96\x31\x7c\xc8\x8a\xef\x2f\xeb\x38\x8b\x5b\x97\x91\x16\x3c\x1d\x6b\xe3\x43\x48\x3e\x64\xab\xc6\xf6\xa5\x5f\x73\x88\xca\xef\x81\xc9\xe0\xe5\x2a\x3e\x4d\x83\x5b\x25\x75\xe0\xbd\xf1\xca\x2d\xc3\xe8\xaf\xcd\x33\x8a\xc2\xf8\x7a\x65\x2e\xfb\x61\x7c\xad\x11\x0a\xc1\x24\x5b\x70\x41\x04\xfa\xb9\xe5\x58\xf4\x65\xd1\x0b\x1e\xc6\x4e\x01\x89\x43\xec\x06\x67\xf6\x96\xe9\x73\xc2\xde\xd3\x12\x7a\x0c\x03\xa7\x23\xe9\xa3\xef\x88\x46\x5b\xfb\xfe\x9a\x34\xbf\x45\xfe\x9d\x51\xbb\x7f\x82\xb6\x0e\x2e\x97\x47\x56\x97\x47\x9f\xac\x2a\x73\x92\x2f\xc7\x32\x4c\x48\x7e\x23\x7b\x46\xb7\x64\xd8\x97\x2c\xe5\xa2\x97\xf2\x88\x7b\x8a\x7d\x09\xe3\x50\x86\x2c\x2a\x4a\x7b\xe3\xe4\xb6\x77\x47\x95\x19\x77\xaf\x43\x79\x47\x2d\xb3\x5d\x5e\x12\x29\x99\xd1\xfa\xaf\xc7\xae\x37\xf0\x0b\xba\x93\xf9\x44\x6c\xfc\xc3\xb1\xfe\xb1\x11\x6f\xfc\xc3\xfa\x07\x6e\xc9\x5d\x94\x45\x13\x94\x43\x46\xce\x89\xd6\x39\xc3\xd8\x27\xd6\x1b\x04\xc1\x8e\x3b\xef\xc8\xcb\x30\xed\x44\xcc\xe5\x51\xe5\x2b\xd6\x46\xce\x3f\x2f\x80\x53\xbb\x61\x89\xd4\x67\x52\xee\x25\xb1\xcf\xc4\x7c\x75\x45\x55\x1f\x1f\x13\xd9\xc1\x05\x37\xe7\xe1\xbb\x42\xe0\xde\xaf\x5f\x18\x21\x1a\x63\xe0\x30\x67\x3d\xfa\x19\x0e\x72\xfc\x33\x27\x5d\x85\x7f\x18\x5a\x24\x49\xe7\xab\x20\x18\x31\x0a\xef\x4c\x46\x67\x92\x48\xc5\x9a\xe0\xf1\xb2\xec\xa5\x9f\xa9\x05\xd2\xa9\x8d\x7f\x1c\xe9\xd1\x0e\x8a\x65\x9f\x5d\x86\x92\xf7\xd2\x09\xf3\xb8\x05\x56\x9c\xcc\x04\x9b\x54\xa6\x22\xf5\xf0\x97\xa0\xea\xb4\x8e\x85\xc7\x6e\x6f\xcb\x40\x7d\x22\x81\xc1\x2e\x49\x74\x14\x1d\x31\x9a\x91\xcb\xa2\x5a\x89\xe1\xcd\x10\xf2\x73\x32\x23\x7b\x3e\x60\x72\xd3\xac\x38\x27\xfa\x50\x7c\xf4\xdb\x6f\x08\x30\xf7\xad\x3a\x27\xd3\x04\xa6\xda\x72\xd3\xaf\x9a\xf8\xe8\xe3\xa3\x7d\xa3\x62\x93\x8b\x2b\xae\x5e\xd0\x54\xa7\x30\x89\x7a\x8f\xcd\x80\x76\x65\x1b\x1d\x74\xc9\xbe\x8f\xa7\x12\x93\x14\xba\x78\xbf\x13\xe2\x25\xcb\x1e\x66\xe5\x5f\xa0\x9e\xa3\x62\xb1\xef\xde\x22\x97\xcb\xb0\x82\x83\x48\x8c\xa9\x26\xcf\x97\x3b\x9c\x91\x8f\x3e\x86\xa6\x52\x44\x16\x14\xd6\xcb\x0a\x95\xe8\x27\xa6\xc0\x49\xef\xa8\x86\xa9\xb4\x13\x24\x59\xec\xa3\x41\xb9\x27\xee\x10\x3f\xdf\x07\x46\xfc\x3c\x55\x12\x10\xb1\xbc\x4b\xee\x5d\xe3\xe1\x7e\x67\x24\xaa\x78\x92\x29\x1e\xf3\x93\xe1\x9a\xf4\x71\x80\x43\xbf\xb4\x2a\x35\x7c\x28\x14\x8d\xbf\x53\x54\x45\x9d\x18\x36\x75\x3e\x51\xbc\xc8\xad\xdf\x2e\x3f\xe7\x3c\x81\x5a\xe9\x98\x4d\x91\x3c\x97\x18\xe8\x53\x09\x48\x52\x81\xa7\x82\x51\xad\x34\xef\x79\x49\x2c\x45\x12\x15\x3f\xd5\x00\xdc\xe4\xa6\x6c\xfb\x4e\x33\xb3\xbe\x99\x19\x96\x21\x83\xb1\xdc\x41\x2f\x9f\xe6\xa9\x5f\xe6\x7d\xa4\x14\x3e\x33\x7d\x5b\x23\x41\x64\xd4\xa0\xff\xea\x79\x59\xe9\xc5\x0f\x3d\x54\x6a\xdd\x5d\xd7\xe7\xa9\x27\xc2\x09\x32\x3f\xe5\x79\x8a\x0d\x72\xd1\xe0\xfd\xca\x5f\xef\x7f\xd9\xbe\x6a\x26\xc7\x51\xf5\xfb\xaa\x0a\xd2\xb2\x0a\xc7\xce\x4b\xfe\xdb\x60\x59\xe6\x5d\x2b\x28\x8a\x7d\x0b\x2c\x29\x58\x9c\x4e\x98\x40\x2d\xb3\xc1\x07\x41\x12\x6b\xec\x7c\xc9\x45\x58\xbe\xf6\x32\x91\x22\x5e\x9e\x24\x61\xac\x55\xd4\xba\xc0\x20\x5c\xc4\x1d\x31\x37\x8b\x9f\x0f\x45\x63\x60\xbc\xb6\xc2\xc1\xe8\x59\xbf\xf5\xef\x19\x97\xf8\x8d\x86\xd9\xc2\xf4\x8c\xc2\x81\xef\xfc\x83\xc7\x53\xa7\xaa\x50\xfd\x07\x7c\xd0\x80\x18\xaa\x1a\x5f\x7c\xe7\x77\x78\xe1\x3b\xc3\x2d\xf8\x81\x42\xb0\xd4\xac\xed\xb5\x84\xae\x44\x77\x77\xf8\x7c\x0f\xd5\xc1\xb0\x50\x1d\xbc\x6f\x3a\x09\x3a\x4a\x94\xb1\xb3\xfe\xaa\x6a\xa4\x09\x58\xd7\x7c\xfe\x32\xf1\xb9\x05\x18\x29\x1e\x4f\xa7\x71\x33\xf4\x0b\x9f\xc0\x6e\x50\xf5\x0b\x4c\x82\xd2\x73\xef\x9b\x5f\x78\xee\x79\x42\xa7\x98\x8e\xa7\x5a\x07\x34\x66\x91\x3a\x94\x62\x8a\xf3\xd4\x1f\xa7\x20\xa7\xad\xd1\xc2\xbc\x73\x2d\x39\x5f\xeb\xb8\x38\x57\x98\x44\x95\xed\x83\xe7\x7c\x53\xd2\x36\x24\xce\x09\xd3\x07\x21\x33\x91\x90\x5d\x1f\x83\x62\x79\x0a\x6d\x87\xce\x0f\x9f\x70\x0a\x81\x73\x41\x3c\x5c\x32\x93\xe5\xe4\x1b\x03\x94\x45\x4c\x56\x19\xcb\xb2\xbd\x7e\x77\x64\x5d\xb2\xd4\x30\x90\x96\x8d\x3f\xd2\xcc\xf3\x78\x5a\xd5\xa1\x94\x98\x56\x24\xb3\x4e\x9c\xf4\x2e\x32\x29\xb9\x48\x5b\xf8\xf5\x5d\xcd\x1a\x32\x4f\x7d\xaf\x46\x6d\xbc\x24\xea\x58\x1b\xa2\xd0\xae\x84\x71\x6f\x16\xfa\xf2\xd2\x02\x39\xb2\xb6\x06\x83\xc9\x8d\x65\x5b\x9b\xf8\xb7\x41\x62\x68\xfc\xbc\x3a\xb3\x3c\x96\xbd\x54\x0a\x2e\xbd\xcb\xa6\x76\xea\xab\x88\x44\x7a\xe6\x7a\x6f\x19\x03\x7d\xf0\x9b\xd3\x8a\xe2\x71\x08\x12\x51\xe0\x05\xdc\x46\x4c\xba\xe5\x91\x9a\x03\xaf\x3a\xd3\x2f\xfc\x8a\xab\x73\xe3\xf6\xe4\xe9\xd3\xbe\xf8\xd4\x64\x59\x7b\xe0\x38\x59\xde\xe8\x3d\x53\xf5\x9e\xc7\xce\x39\x61\x10\x56\x5c\x07\x8d\x65\x49\x77\x94\xb9\xf6\x8c\xbc\xf5\xe1\x01\xf2\xd6\x7d\x56\x50\x9a\xcc\x5d\x50\xc8\x3c\xd2\x92\xf7\xf8\x8b\x4f\x47\xaa\xf7\x21\xb5\xb1\xa6\xf4\xc8\x57\xd6\x80\x06\x2b\x8b\xd4\x73\x65\x5c\x2e\xd4\x2a\xb3\x36\x11\xe1\x98\x89\xb9\xa5\x4e\x3a\x09\x28\x24\x0d\x5c\x98\x62\xf4\xe4\xa8\xbe\x13\x5e\x12\xf5\x58\x26\x93\x4e\xed\x6b\x8a\x78\x6c\x36\x6d\x5f\xe3\xd6\x4d\xee\x62\x1f\x95\xdc\xe0\x19\xec\x75\x87\x34\xd4\x4b\x56\x64\x08\xe3\x7e\x53\x99\x49\xc9\xdb\xc0\x8c\xc4\xd3\xa2\x2f\x05\x1f\x8a\xf3\x5e\x62\xbf\xcb\xc5\x78\x89\x94\xa5\x63\x80\x0a\x3a\xbc\x7f\xd1\xb7\x9a\xf9\x5f\x24\x00\xc8\xa1\x8e\x0d\x6c\xbb\x2c\xe5\x88\xa1\x11\x17\x7f\x65\xe4\xc0\xa7\x65\xdf\x07\x7e\x39\x3a\x93\x1e\x83\x4f\xef\xa9\x93\xcd\xa6\x0d\x36\xa7\xb9\xb6\x89\xd2\x51\x11\xdf\xce\x5a\x51\xa6\xaa\x21\xfb\x22\x99\xf8\xc9\x4c\x1f\x7e\xad\xfa\x44\xa4\xc4\xa7\x18\xac\xa0\x32\x48\x61\x08\x07\x9b\xae\x63\x31\x4a\x36\x22\x78\xd2\xf1\x43\xb7\x33\x76\x37\x3b\x63\xd1\xa8\x19\xf0\xb8\x26\x62\x6b\xd9\x88\x53\xf5\x65\xc5\x22\xc8\x06\x30\x9f\x54\x00\x4d\xed\x11\x4e\xa0\x20\xec\xde\xf4\x9e\x24\x2e\x99\x3a\xbf\x43\x38\x75\xb6\x07\x10\x4c\x15\xd1\x72\xa7\xce\xd6\xef\x90\x4e\xef\x99\xee\x3c\xb7\x58\x2a\xf2\x9d\x5f\xe8\x54\xa3\x05\x16\x39\xcd\x88\xa4\xd5\xac\xe7\xd1\x74\x25\xeb\x79\x4e\x35\xd8\x39\xde\xfb\xbb\x11\x6a\x68\xdd\x31\x32\xaf\xde\x54\x1b\xc5\xee\xa3\xcb\xc4\x24\x00\x4d\x1b\x74\x3c\xcf\x36\x32\x9a\x4e\x73\x7d\xd1\x3b\x89\x01\x6f\x33\x34\x3a\x16\xa3\x44\x61\x1f\xbd\xc3\x52\xdf\x8e\x4f\x02\x38\xcd\xfe\x4a\x8f\x1c\x7b\x6b\x22\x2d\x77\xe0\xe7\x7a\x1e\xc6\x16\xdc\x2c\xdb\x70\x73\x38\x2d\x56\xd5\xf7\x48\x58\x60\x62\x77\xe9\x7d\x52\xbc\x0f\xca\xf7\x4a\x10\x9a\x04\x90\x18\x6c\xce\xa7\x88\xcd\x33\x54\x8f\xe6\xab\x91\x37\x4b\xa6\x15\xc4\x2e\xf3\x1e\x22\xaf\x40\xec\x3f\x7c\xc2\xd0\xd3\xa4\x44\xee\xc6\x8d\x58\x2f\xaf\x37\xd5\xc8\x9d\x55\x90\x7b\xb2\x1e\xb9\x27\x53\x3a\x52\x5f\x18\x52\x3b\x31\xc8\xdd\xf5\x50\xd3\x95\xe2\x77\x15\xb7\x82\xcc\xa1\x97\xa5\x16\xa4\x5c\xed\x29\x85\xa9\x47\x52\x6c\xf4\x6f\x24\x03\x02\xb1\x40\x4c\x9b\x49\xc1\x82\x82\xdf\xce\xf5\x18\xf8\xf5\xa6\x90\x39\x0f\x50\xd6\x96\x10\xf7\xbd\x3d\xaa\x24\xef\xcf\x41\x6e\x8f\xea\x29\x29\x59\x31\x2f\xd9\x1a\xd6\x05\x63\x68\x35\x88\xb8\xe8\xa5\xc4\xa6\x60\xbd\x8e\x51\xef\xa3\xb9\x7e\x2d\x99\xa1\x79\x8f\x00\xcf\xab\xba\xbb\x89\x51\x29\x34\x4b\xf8\xbb\x9c\x50\xb7\x9d\x13\x62\x0d\x9c\x50\x9d\xff\x89\xa6\x28\x0a\x03\x2e\x43\x45\xfb\x0b\x5c\xc9\x10\xf7\xa7\x44\xfb\x4a\x3c\xec\x5c\xf3\x79\x27\x48\x44\x31\xe9\x5c\xdf\x60\xf4\xfd\xff\xa6\xee\xfe\x25\x3a\xe7\x7a\xcb\x4a\xee\xf2\x9b\x95\xb7\x86\xbd\x20\xdc\x21\x99\x13\x53\x85\xf1\x62\x27\x53\xf8\xaf\xba\xca\x8a\xcf\xf0\x92\xf1\x24\xe2\x92\xf7\xc6\x3c\xce\x3a\xd6\x06\x21\x59\x9f\x6d\xfd\xfa\x95\xf5\xdd\xd7\xf4\xe1\x43\x75\xf4\xac\xf4\x32\x99\x29\x5a\xa7\x18\x68\x8f\x24\x78\x6e\x28\x04\xfa\xb1\x72\xa1\x21\x57\x29\xa0\xea\xb5\x54\x87\x64\x53\x85\xe3\xb4\x62\x30\xa7\xcb\x6a\x65\xe5\x82\xc2\x74\xea\xfc\xec\xda\x4f\x16\xd0\xbd\x83\xf8\x36\x12\xd9\x52\x32\xb4\x9b\xca\xd7\x49\x7b\x27\x8c\x8c\x3d\x22\xfa\xde\x97\x15\x7d\x50\x9c\x93\xe9\xca\x2d\xe5\xd4\x64\xcb\xba\x6c\x20\x84\x1a\xe9\xc7\x0a\xed\x97\x09\x9b\x5b\x93\x6b\x5e\xcb\x3b\x52\xb4\xc6\x7d\xef\xcb\xa2\x10\xf2\x3e\x4b\x1d\xec\x40\x2c\xeb\x8a\x57\x25\x69\xc5\x2a\xaa\xad\xc5\x49\x87\x02\x2c\xc9\xdc\x77\xb1\xcf\x6f\x30\x93\xd0\x90\xe6\x6b\x51\xb9\xc1\x10\x3c\x62\x7a\x01\x5b\x84\xdf\xe5\x2d\x56\x4b\x36\x35\xf7\xb9\xa8\xd8\x10\xbd\xed\x35\x4b\x5c\x82\xe8\xa1\x31\x06\xb4\x3b\xd6\x86\x36\x33\x43\xf3\x1f\x51\xc1\x82\x93\x69\xbb\xb5\x92\xbb\xff\xeb\x97\xe8\xbb\xaf\x47\x0a\xb0\xa5\x23\xa8\x42\x8c\x98\x0c\x6c\x0f\xf5\x8e\x9a\x86\xa3\xe9\x65\xf4\x97\x08\xb9\x34\x84\xdc\x2b\xc8\xb6\xbc\x7f\x7b\xa9\xdb\xae\xdb\x0a\x5c\xa1\xce\xea\x79\xc3\x93\x85\xa7\xea\xb2\x3c\x55\x97\xfa\x54\xfd\x0b\xbb\x54\x72\x06\xf5\x04\xb3\x8a\x0d\xe0\x48\xdf\xa6\x53\x24\x86\x17\xde\x0a\x53\x50\xa1\x9e\xe1\x94\x8e\x26\x1e\xf1\xa8\x6d\xd8\x01\xf5\x8b\xe9\x5f\xc1\x94\x8e\xc6\x9e\x96\xb5\x39\xb4\x05\x7a\xd4\x30\x9c\x51\x4a\xed\xd7\xee\xa2\xb0\x01\x28\xc1\xc5\xf8\xf8\x5b\x60\xb9\x51\xe2\x5d\x97\xea\x5b\x83\xef\x87\x83\xc1\xff\x55\x2a\xa5\x5a\x50\x4c\x67\xe9\x57\x4f\x84\x17\x97\xb2\x44\x3b\x5d\x14\x4b\xa5\xc6\x37\xf6\x8c\x5c\x4e\xd1\x7d\xc0\x7d\x41\xcb\x8b\x7b\x60\xe0\x2d\x28\x5c\xac\xa1\xc1\xef\x34\x0f\xc9\xf4\x2d\x7f\x57\x5f\xf3\xef\x68\x17\xe0\x13\x40\xc7\xa6\x37\x3a\x46\xde\x6b\xbc\xb1\xf0\x7e\xac\x57\x2e\x7b\x4c\xf8\x9d\x2a\xf9\xad\x17\xf6\x2e\x39\xf3\xab\xcc\xfc\x65\x15\xc0\x3a\x0a\xc8\x24\x73\xd3\x4e\xa5\x2e\xbe\xc8\x1b\xdc\x90\x57\x3e\x0c\xc0\xd3\x28\x64\x9f\x61\x52\x48\x73\x12\xdf\x18\x43\x49\x45\x26\xb0\xde\xb0\xb1\x9e\xe8\xb3\xcb\x91\x85\x26\xbe\x1d\xa2\x39\x02\x6a\xd9\xfa\x45\x2e\xee\x79\xfe\x52\xd6\xc9\x19\x99\x4c\xb5\x1e\x99\x51\x0a\x73\x72\xeb\x43\x2e\x30\xfa\x16\x88\xfe\x17\x38\x65\xf9\xfb\xf2\x72\x0f\x44\xff\x08\x3e\x16\x05\xfa\xc6\x0d\x44\xff\x18\x76\x59\x4e\xce\x56\xd6\xc7\x40\x8c\x9e\xad\x37\x2a\x87\xc2\xf3\xa1\xf8\x53\x54\x6a\xb3\x4b\xdc\xf8\xbc\x58\xe6\xc5\x72\x0a\x3f\xbd\x73\xfb\xc1\x00\x41\xb4\xfa\x99\xd3\x36\x9e\x2e\x17\xa4\xcb\x8b\x92\x15\x03\x99\x2d\x4d\x55\xcc\x7d\xc7\x26\x30\xfb\x41\xbc\x30\x64\x32\x1e\xad\xb3\x34\xd8\xaa\x4a\xd9\x2f\x93\x28\x62\x93\x94\x77\x58\x14\x19\x05\xb9\x45\xbf\xdb\x6b\x2c\x07\x96\x9a\x6b\xf3\xca\xe5\xc6\xf9\x04\x43\x1f\xe6\x64\xd7\x87\x04\x42\xc5\x3c\x49\x83\x7b\x67\x5a\x2b\x77\x39\xb4\x28\xcc\xa7\x4b\x16\x59\xb3\x69\x69\x91\x15\x27\x32\xd7\xd4\x9b\x1e\x6f\x74\x43\x44\x32\xa9\xb6\xec\xd0\x1a\xbd\x4b\x39\x8e\xde\x24\x8a\xcc\xee\xdc\x53\xc4\xbd\x4b\x53\x2e\x98\x1f\x26\xff\x92\x9a\x5c\x20\x16\x8c\x11\xfd\xc9\xff\xa4\x6a\x7c\x41\xe1\x68\x6a\x4c\x76\x8f\xa7\x26\xec\xe4\x6b\x7c\x18\x0e\x16\x70\x86\x4f\xbf\x2f\xe0\x0a\x1f\xb6\x17\xf0\x72\xda\xea\x0c\x5c\x11\x9a\x07\x7f\x38\x18\x85\x5c\x47\x20\x57\xf2\x8b\x59\xd6\x77\x92\x64\x1a\xc5\x79\x4e\x0c\x89\x23\x20\x74\x24\x04\x0e\x07\xd7\x31\x17\x5a\x19\x85\xd4\x31\x81\x86\x05\xe6\x2e\x7e\x1e\x3b\x1e\x08\x27\x01\xe9\x84\xc0\x9d\x00\x32\xc7\x05\xe6\xa4\x4a\xc2\x3e\x9f\xae\xf5\x0f\xeb\x04\xe4\xe5\x14\x3d\x46\xbe\x49\xcc\x2b\x84\x6e\xee\xa7\x30\x27\x5f\x53\x0c\x5b\xa8\x83\x2c\xee\x4d\xdb\x0c\xf2\x4c\x4e\xb5\x5a\x72\xcc\xe1\xf6\xf6\x80\xd2\x95\xf4\x59\xb5\x28\x01\xdb\xf5\xc4\x64\xb5\xd0\x10\x4f\x6a\x3e\x8f\x83\x7a\x3a\xb2\xba\x71\xdf\x26\x66\x04\x69\xa3\x07\x13\x8c\x99\xce\x9d\x29\x39\x9f\xc2\x70\x08\x18\x73\x57\x02\xc9\x9c\x1d\x45\x13\xf7\xa6\x26\x62\x70\x11\x4d\xf8\x69\x4f\xfb\xb1\x8d\x32\x7b\x88\x3a\xe6\xa7\x76\xd6\x1b\xd2\x3c\xb0\x30\x64\x4e\x19\x69\x38\xa6\x10\x3b\x24\xae\x76\xa5\xd5\x0c\x45\x68\x62\xd3\xd7\x53\xc7\x71\xe2\xd1\xc0\x8e\xb1\x4f\x7c\x32\x7d\x66\x14\x96\x86\x16\x57\x55\x0b\x72\x79\xd8\x19\x48\x8a\xb6\x9f\xbb\x24\xdf\xa3\x8f\xad\x5c\x18\x46\x1d\xf9\xe3\xe9\x48\xd8\x33\xf2\x71\xaa\x44\x18\x17\xd3\xe0\xc1\x8c\x7c\x4a\x40\xe8\x53\xe9\xeb\x77\x46\xef\xb6\x8b\xf0\xbc\xb5\x80\xd3\xe9\x9d\x96\xa8\xbf\x7e\x19\x9f\x39\xe3\xc9\xb2\x14\xbd\x75\x41\xe1\xdd\x52\x17\x12\x93\x04\x19\x4b\x81\x0b\x72\xe4\xa9\x4d\x39\xf2\xd4\x21\x18\x59\x78\x0d\x3e\x4e\x62\x79\xa9\x84\x17\xc8\xda\xef\x46\x8a\xa8\xc0\x71\x11\xa8\x56\xd0\xb5\xc1\x92\x1f\xc4\xfd\xee\xc3\x87\x43\xb4\x52\xcf\xd0\xa0\x83\xd3\x91\xb0\x2d\x6b\xa1\x99\x48\x1c\xf0\x15\x58\x1d\xae\xb0\x24\x2a\x98\xf0\x95\x00\xab\x33\x4e\xb2\x94\x27\xe8\x12\x83\x7a\x22\x2c\xb8\x05\xab\x63\x64\x63\x88\x9b\x83\xac\xb1\x5b\xec\xb4\x2d\xc0\x9a\x65\x15\xf7\xb3\x2e\x5a\x7b\x9d\x13\x33\x36\x1c\x1d\xa8\x1f\x02\xc3\xaf\x63\xa0\x69\xf6\xeb\xd7\x26\x06\xcb\x75\xcb\xf6\xe6\xa1\xe3\x72\x39\xe3\x3c\xb6\x16\x84\xe6\x7c\xf5\x39\xc1\xdc\x0b\x8a\x3e\x9f\x4e\xa1\x35\xff\x5a\x08\xe8\x8c\x5e\x0e\xb6\x51\x9d\xe5\x33\xc9\x3b\x2e\xf3\xae\xad\x0d\xc2\xfa\x4c\xfd\xe3\x6e\xc4\xb4\x51\x92\x54\x55\x03\x91\xc4\xd2\xda\x48\x36\x48\xb8\x41\xbc\x0d\x13\x0d\xce\xf7\xc1\x2a\xd7\x12\x52\xf4\x3a\xcf\x13\x23\x2b\x02\xbc\x3b\x2d\x71\xf0\x99\x02\xa5\x0f\x18\xef\x9c\xd3\x8a\xb8\xf1\x69\x2d\x59\x5a\x62\xdb\x4e\xf3\x3b\xfd\x77\xd3\x3c\x57\x98\xe9\xe4\x70\xda\xea\x39\xba\x8f\x62\x02\x06\xcd\x52\x3f\x3f\x4e\x41\xc2\x29\x6d\xbb\x3e\xba\xca\x52\x19\x06\xf3\xe2\xda\xa6\xae\xcd\xad\xd8\x87\x71\x7e\x5d\x61\x0f\x71\x64\xc7\x1e\x1c\x9a\x88\xda\xde\xcd\xe8\x4f\xeb\x28\x53\x52\xc3\x07\x94\x1d\x8e\x33\x25\x26\x7c\x55\x4c\x95\x75\x7c\x99\x59\x60\xbd\x11\xa1\x05\xd6\x11\x93\xd6\x77\xfb\xcf\x7b\xd4\x42\x57\x0c\x63\x1a\x5b\xdb\x20\x1c\x2f\x0b\x63\x73\x7b\x5a\x6e\x4c\x26\x71\x5f\xae\xa6\xb4\x62\x12\xf1\xa9\xbe\x7c\x27\x88\x1f\x06\x0b\xb8\x9d\x9a\x20\x9c\xaf\x34\x3f\xe1\xaa\xfe\xde\xea\xe7\x89\x45\xe1\x4d\xfb\x66\xfd\xec\xda\x4f\xaa\xd9\xad\x31\x10\xc6\xda\xea\x8f\xeb\xd5\x3f\x98\x3b\x49\x29\x92\xf8\xc2\xa2\x6b\xf2\x61\xaf\xc4\x21\x31\x29\xd5\xe2\x7e\x77\xf4\x36\xb1\x53\x4e\xb5\x07\x9e\xc2\x8e\xbc\x48\x42\xd8\x6e\xd2\x90\xa7\x4d\xaa\x64\x4c\x22\x96\x57\xc4\xe2\xf3\x92\x78\xca\x85\xec\xa4\x52\x84\x7a\x64\x53\x7d\x73\xfb\xde\xf0\xb3\x73\x0e\x9e\xa0\x14\x5e\x4c\xdb\x7c\x57\xeb\x80\x26\xc3\x31\x9f\x84\xde\x75\x15\xb8\x3e\x14\xda\xad\x34\x73\xaf\xb8\x27\xab\xd6\x32\x23\xeb\x75\xec\x5b\xb6\x75\x94\xeb\xef\x96\xa1\xe0\x32\xc9\x44\x93\x26\x34\x9b\xf4\xb4\x49\xbc\xb9\xab\x28\x20\x5a\x9d\xcf\x39\x79\xa3\x8e\xc3\x00\xd6\x18\xc5\xb2\xf8\x22\xe2\x3d\xa3\xf6\x3e\x35\xdf\x7d\x67\xee\xfd\x15\xa0\xb9\x51\x26\x2c\xbd\xd0\x33\x72\x80\xfd\xa9\x05\xa2\xc8\xe4\x55\xf0\x68\x18\x10\x99\x63\x53\xd1\x67\xd7\xd5\xd8\xa3\xd6\x00\x2d\x8c\xf2\x54\x0a\xda\x71\x02\xab\xed\xdc\x59\x8d\x50\x0a\x67\x1e\xd9\xd4\x5c\xe7\x34\xe4\xb3\xfa\x54\x73\xae\xb1\x72\x41\xa4\x24\xd5\x7b\xac\x4b\xef\xce\x85\x51\x3d\x95\x4b\xb3\x22\x24\x25\xd1\xea\x17\x4a\x6d\x8c\xbd\xba\x8f\x4a\x12\x91\xfc\xef\xee\xe4\xf0\xdf\xbc\x93\xc3\xbf\xbf\x93\x3f\xee\xb7\x93\x3f\xd6\xee\xe4\xdf\xdf\xbb\xe1\xbf\xbc\x77\xea\x84\xb6\x40\x93\xde\x3e\x12\xb7\xa3\x27\xed\xc0\xd9\xa6\x93\x51\xe8\xc6\xb2\xec\x19\x99\x27\xf0\x3b\x48\x64\x7b\x16\x06\x49\xc9\x91\xe1\xb8\xae\xd5\x3f\x57\xa8\xf5\x56\x4f\x3b\xea\x9f\xdb\x82\x72\x22\xab\x11\x2f\x28\xfc\x98\x36\x85\xb4\x37\xee\x48\xe5\x85\x7f\x83\xa1\xe1\xb8\xe3\x5e\xf4\x02\xe6\x73\x7f\xd5\xf0\x70\x13\x2d\x9f\x5b\x0c\x35\x25\xbf\x91\xeb\xac\x34\x97\xcb\x1b\x4d\x34\x75\x95\xe5\x6b\xd8\xe7\xf1\x72\x2c\xec\xe0\x6f\x0e\xf9\xa4\x6a\x92\x5b\xce\xbb\xf1\x9e\x40\x94\x8c\xc8\xe7\x69\x6b\x42\xd9\x36\x63\x62\x1d\x05\xc9\xd1\x51\x90\x30\x9a\xa8\x8b\xd6\x9d\xbb\x84\xc8\x3b\x2c\xe3\x73\x13\x3f\x34\x72\x97\x7d\x77\x95\x4f\x5b\x6f\xe5\xfe\xf7\x6c\xd8\x2b\x16\xeb\xc2\x58\xac\x0b\x63\xb1\x7e\xec\x23\x53\x50\x58\xa2\xa3\xcb\x42\xcd\x12\x5d\xc9\x00\xda\x62\x79\xd9\xef\xe3\xfe\x16\xcb\xa2\xdd\x62\xf9\xc7\x14\xdd\x46\x78\xbe\x1f\xef\xa7\xed\xc7\xab\x62\x5d\xc9\x06\xfa\x73\xe5\x97\x3e\xa3\x6e\x41\xdb\x26\x7e\x9d\xde\xc7\xf7\x6c\x25\xc9\xcb\xca\x22\x9a\x85\x93\x7d\x77\xf4\xe7\x8c\xbc\x9d\xe6\x5c\xe9\x87\x8a\x56\x66\x27\x0f\x92\xaa\x2f\x99\xec\x0e\x3a\x01\x7e\x15\x98\xe0\xa4\x40\x30\xef\xa7\xe8\xee\x81\x6a\xa4\xe6\x7e\x3e\x26\x65\xbc\xd5\xca\xf5\x97\x39\xf7\xcb\x42\xb8\x5e\xc7\x7a\x1e\xeb\xd2\x4f\xae\x75\x56\xda\xea\x13\xff\xed\xcd\x98\x88\x91\xaf\x59\xb6\xcd\x55\x2c\xd9\xb7\x69\x7b\x2c\xc1\x06\xef\xbd\xea\x70\x06\x65\x70\x23\xcf\x87\x97\x1e\xcc\xc8\x57\x3d\xf7\x7a\x06\x1f\xe3\xc5\x57\x97\xff\x99\xaf\x46\x10\x77\x1d\x6b\x2c\x7b\x8f\x2d\x10\xdd\x15\xf3\x82\xd5\x89\xed\x92\xb8\x0b\xc6\xfb\x65\x64\x75\x96\x2e\x61\x2d\x5a\x33\x0c\xbd\x9e\x36\x9b\x56\x55\x18\xb2\x62\x57\x3e\x98\xe4\x82\x1d\x4d\xb3\x71\xc3\x71\x73\xca\xcd\xca\x0d\xbf\xd3\x8a\x75\x8e\x56\xcf\xbe\xc8\x2a\xba\xce\x21\xa2\x7a\x58\x26\xa8\x5a\x14\x2c\x10\xb6\x59\xc8\x82\xc6\x36\x6d\x61\xd5\xbe\xa0\x17\x70\xee\xa3\x40\x57\xd3\x7a\x2d\x88\x39\x4e\xb2\x6b\x58\x7b\xde\x75\xd6\xaa\x55\xcd\x2d\x35\xe2\xd1\x13\xb7\xc2\xad\x7c\x16\x9a\x1e\xee\x94\x30\x09\x59\xf7\x3e\x87\x54\xe1\xa7\x8e\xb5\x11\x77\x4d\x6f\xbc\x5b\x73\xe3\x40\x96\x00\xbd\xba\xb9\x65\x5b\x5f\x30\x73\x64\xa3\x65\xcf\x38\xea\x6d\x76\x56\x6f\xf7\x4f\x18\x91\xdd\x95\x99\xc7\xcb\x8c\xc3\x52\x5b\x03\x14\x5a\x4f\xbc\x74\x41\x86\xea\xd3\x82\x2a\x30\x5c\xb6\x67\x0b\xf0\xba\x46\x87\x92\x74\xef\x48\x51\xc2\xfa\x8c\xe7\x91\xe6\xbc\x4a\x94\xf0\x26\x39\x5c\xdb\x0f\x69\xfe\x22\x89\xb2\xb1\x4e\xa0\x60\x4c\xd9\x2b\x46\x03\x1d\x6b\x43\x56\x81\x77\x15\x6d\x88\x12\xc5\xe0\xad\xa9\x98\x2a\xa1\xfe\x0c\x95\xac\xfa\xc2\x29\x5b\x35\x4b\xe9\x2c\xc1\x50\xb1\xf5\x39\x4b\xb4\x72\x90\xef\x3b\xf2\xff\x99\xd1\x56\x06\x96\xa3\x0a\xed\xbd\xe2\x35\x1f\x90\xbb\x57\xd7\xf8\x26\xfd\x27\x16\x37\x07\xb8\xd5\x8b\xb4\xbb\xce\x71\x92\x43\xe3\x82\x42\xd8\xbd\x43\x5b\x52\x11\x31\x2b\x07\x2e\x20\x49\x17\xde\xf9\x60\xa4\x47\x50\x82\x49\x2f\xba\xe8\x6d\xa3\xb9\xe3\x13\x13\x39\x66\xdf\x83\x1b\x8f\xc2\x8d\x47\xbc\x2e\x85\x98\x42\xd1\xec\x95\x49\xef\x51\xb6\xdc\x5a\x6a\x79\xbe\xd4\x52\x56\x5a\xbe\x46\x73\xf0\xc6\xcf\xed\x2d\x35\x12\x0d\x8b\xa2\x37\xca\x34\x1e\x9a\xc6\x2b\x3b\xa5\x8e\xed\xff\xf3\x7f\x5b\x2b\x8e\x3b\x4b\x7b\x51\x47\x73\x06\x77\x74\xf4\x65\x79\x6f\xc9\x1a\xe1\xc6\x23\xac\xdb\x2e\x3c\x78\x2c\xe2\x8a\xeb\x5c\x12\x1d\xbe\xd3\xbb\x9c\x26\x42\x01\x8f\xfe\x9b\x24\xf1\x2f\x35\xae\x1d\xac\xd1\xa5\x8f\xc2\xbe\xe4\xa9\x24\xb1\x13\xd3\x91\xe5\x33\xc9\x7a\xd6\x46\x6c\xc7\xf0\xe8\xbf\xff\x99\xfe\x46\xae\xd8\x94\xe9\x0b\x0d\xfb\x97\x2a\xb4\x15\x13\xfb\xcf\x47\x97\x72\x1c\x15\x4d\x85\x23\xd0\xe4\x08\x43\x76\x07\x0a\xb9\x7b\x02\x74\x57\x17\x82\x8d\xc7\xe7\xdc\x0f\x31\x58\x46\x1e\x31\x0a\xdc\x6e\x9b\xd7\x70\xee\x2e\x2c\xfe\x19\xff\xfa\xa7\xf8\xf5\xcf\x58\x7b\x0d\xa7\x5d\xed\x1b\xca\x6f\x24\x13\x9c\x59\x14\xa2\xee\xda\xbc\x53\x98\xd5\x7f\x0b\x86\x8f\xe1\xab\x20\x6e\x57\x67\x31\xc5\xeb\xfd\xec\x7f\x06\x39\x8a\xf5\xe7\x37\x2e\xcf\x6f\xda\x35\x07\x38\xcb\x0f\xb0\xc4\x03\xcc\xef\x8d\x1d\xe1\xa3\x47\x98\x5a\xea\x7f\x03\x9a\xfc\x1f\x19\x77\xd3\x10\xff\xdd\x08\xf3\x3f\xb0\xe0\x05\x89\x5e\x9a\xcc\xdf\x46\x9d\x7e\xb7\xd1\x23\x46\xc7\x7f\xe5\x7d\xf6\x18\x30\x5f\x5a\x17\x3c\xf5\x67\x00\xe8\x14\xf9\x11\x42\xf5\x6b\x0f\xb3\xa8\xb1\x57\x18\xc2\xaa\x3b\x3a\x27\xd6\x47\x3e\xcb\x93\x20\x28\x74\xf6\x1a\x1d\x7d\x30\x42\xad\xf5\xda\x0f\x65\x59\xf6\x96\x13\x13\x30\xaf\x1a\x90\xac\xe5\x66\x37\x17\xb0\xe6\x24\xec\x42\xd6\x77\x0f\x20\xeb\xb3\x53\xc8\xfa\xa9\x9a\xb7\xe8\x82\x07\xac\x82\x5c\x8b\x38\x38\x71\xd7\xe8\x21\x0b\x94\x7a\x3c\xc5\xf4\x9c\x27\x14\xa6\x24\xea\x82\xf5\x32\xcf\xaf\x9d\x57\x9d\x15\x55\x8f\x74\xd5\xe3\xa5\xa5\x2d\x48\xc7\x9c\x7c\x9b\x02\x87\x44\x07\x5d\xca\xba\x28\x25\xaa\x31\x5e\x29\xa2\xa7\xd1\xde\xb4\xeb\x70\x01\xdd\xae\x93\x09\x18\x37\x22\x97\x58\x90\x40\xa0\x9a\xc3\x44\x94\xb8\xec\xde\xd3\x8c\x79\xd2\x5a\xd1\x63\x28\x46\xee\x08\xde\x99\x27\x59\x27\xcd\xcc\xc3\x8c\xc5\xb2\x23\x93\x8e\x4e\x8f\xbe\xc4\x92\x8f\x2c\x0a\x6c\xdb\x5e\x6f\x2a\x7a\xc2\xc8\x01\x27\x33\x72\xa9\xe7\x5a\xb5\xf0\x7b\x99\xc4\x41\x28\xc6\x9a\xd6\xb8\x3f\xec\x03\x4e\x8e\x13\x0a\xde\x13\xdb\x7a\xad\xbf\x96\xef\x3b\x26\x90\x59\xc3\x1c\x37\xe9\x25\x8c\xb9\x61\xca\xa3\xc0\x68\x9b\x4a\xc3\x7f\x73\xac\x36\xd0\x1c\xfc\xdc\x37\x31\xf4\xd0\x66\xa0\xf5\x2b\xe8\x60\xb0\x41\xac\x87\x26\xde\x97\x76\x8e\xd6\x82\xf1\x5c\xa3\xf4\xcb\xc7\x16\x85\x9b\x35\xe3\xfc\xdf\xe9\x71\xbf\x1a\x62\xca\x64\x70\x58\xa5\x27\x17\x5d\x64\x42\x52\x0b\x44\x9f\x9d\xd6\x45\x4f\x5d\x8e\x5c\x11\xd6\x70\x0f\x56\xc4\x50\xd3\x85\xc9\xb5\xaf\x7b\xc1\x08\x55\xa8\x22\x71\x7d\xf8\x8b\xee\xe2\xcb\x21\xe4\x65\x05\xba\x4e\x8c\xc6\x93\x52\x38\xf5\x88\xa0\x8d\x91\xd6\x97\xe6\xb9\x5e\x0f\xb0\x4e\xcc\x5b\xf1\xca\x37\x60\xbf\x8b\x4e\x29\x95\x41\xe9\x89\x5b\x4b\x44\xe4\xdf\xd9\xff\x2b\x1e\x71\xad\xf0\x56\xab\x2a\x56\xd4\xb0\xa5\x5e\xe7\x93\xa7\x36\xe8\x9a\x52\x38\xf4\x48\x3c\xc2\xbb\xe9\x49\x17\x04\x3c\x18\x52\x6a\xef\xc8\x42\x2d\x2a\x17\x14\xae\xbb\x0d\xc1\xfa\xcc\x1a\xca\x9a\xea\x87\x57\xe2\x09\x62\x48\x0b\x13\x51\xb4\xcd\xa0\x8e\xcd\x17\xda\xc2\x74\xad\xe9\xa8\x7b\xb2\x30\x26\xa3\x78\xe1\x49\x29\xba\xd8\x8f\xbb\xab\x3e\xcb\xe5\x14\x1b\x3a\x3a\x57\x5b\xae\x80\xec\xa6\x9b\x47\x0a\x50\x2f\x28\x9a\xf1\x2e\x30\x68\x8c\x71\xe4\xcd\xa1\x2a\x37\x0d\x5a\xd5\xb2\xc8\x56\x2d\xcb\x4e\xb7\x9a\x43\xe4\x68\x8d\x94\x81\xb6\x6a\x32\x0f\x4b\x7a\xe2\xc1\x01\xaf\xeb\x32\x44\x71\x39\x50\x09\xd2\x98\xf9\xe4\x1d\x23\xb7\x1e\x6a\xc3\x96\x4c\x78\x5c\xe6\x5f\xf0\x0e\xfe\xdb\x9b\x84\x51\x94\xcc\xcc\x0f\x33\x52\x83\x06\x10\x4f\xca\x64\xb2\xe4\x88\xa5\x2f\x96\x63\xc3\x82\x2f\x5a\x3e\xf7\x1d\xef\x16\x16\x14\x8e\x57\x55\x48\x61\x40\x74\x72\x8a\x8a\xb2\xbc\xc5\xcc\xaf\x40\x5c\xe6\x1e\xf5\x48\x01\xdf\x40\x2d\xde\xaa\xf2\xfa\x5e\x5d\x34\xc6\xa7\xc0\x5e\xe3\xbe\x77\x05\x0a\x86\x8a\x7b\x81\xd7\xff\x9b\xe9\xe0\x07\xbc\xfa\xc7\x0b\xdd\xbe\xeb\x2f\x5a\x29\xe2\x59\xd7\x18\x56\x5d\x69\xf2\xe3\x5a\x14\x5e\xde\x4b\x85\x54\xe1\x43\x45\x32\x6b\xf2\xf0\x56\xd2\xe1\x26\xca\x88\x58\x77\x29\xfa\xc2\x8c\x5c\x75\x9b\x78\xd3\xa5\x9b\xba\xde\x70\x70\xb7\x43\x97\x28\x64\xbd\xf3\x66\x7e\x52\xb4\x86\x5f\xf8\x50\x44\xe5\x37\xd1\x5f\xbe\xea\x7b\x78\x7a\x07\x53\x58\x7a\xfb\x41\x2d\xe0\x42\x61\xb8\x7a\x8a\x4c\xf5\x7f\x9a\x5c\x7c\xe0\xe4\xac\xfb\x3f\x45\x2b\x56\x3a\x5f\x26\x14\xb2\xdc\xc4\x97\x5d\xb0\xde\xbd\xb2\x4c\x34\x33\xbf\x78\xa7\xa9\x7a\x87\x49\x2c\x3a\xc7\xd2\x03\x5a\x14\x2b\xa6\x60\xa9\x90\x9d\x96\x85\x5a\x05\xe9\x2f\x37\xae\x94\x6b\x5d\xa5\xdf\x71\xe7\xe6\xbb\xec\xa4\x2c\xcb\x59\x6d\x5d\x70\x5c\x1d\x90\xe4\xf8\x5a\xe1\x25\xb3\x33\x45\x69\xae\x60\xb6\x60\xd9\xd8\xe5\x3c\x81\x77\x9e\xb9\x1d\xa1\x20\x75\xca\x1b\x10\x8a\x08\x72\x4d\x04\x5f\x77\x41\xc2\x83\x41\x41\x04\x17\x14\xf6\x0c\x7b\xb7\x69\x51\xd8\xd7\xcf\x5e\xe2\x2b\x10\xfa\xa8\x7f\x4d\xd4\x3e\xc1\xae\xa9\x66\xec\x58\xe0\x54\xff\x8e\xd9\xd4\xa2\xf0\xae\xeb\xfc\xbc\xb1\xcb\xbc\x06\xe0\x26\xb6\xd1\x79\x5b\x0b\xf8\xa4\x4b\xf5\x5b\x6b\x01\x87\x79\xed\x22\x3e\x30\x96\x1c\xe5\xbf\x16\x70\x52\xd4\x28\x92\x22\x61\x8d\xfc\xd7\x02\x6e\x8b\x1a\x26\x5d\x0b\x96\xeb\xe7\x05\xbc\xea\xb6\xc7\x21\x6b\x04\xfd\x6e\x1d\xec\xdf\x75\x6b\x20\xff\xa9\x9b\x13\x49\xc3\x0e\x18\x13\xc5\x65\xcb\xc4\x93\x6e\x2d\x9d\xe7\x6d\xb7\x96\x6d\xe2\x53\xb7\x0e\xef\x87\xdd\xc5\x42\x5f\x43\x8d\xac\x4e\xe9\xad\xba\xa0\xf0\xf6\x4e\x6e\x7b\x29\x2a\xc3\xc6\x8c\xbc\x32\x08\x78\xd5\xb9\xb8\x12\x0d\xe1\x96\x11\xd1\xbf\xc1\x40\x34\xc6\x5b\xa6\xe6\x3b\xa3\x01\xe3\x0d\x12\xfa\x77\x5d\x38\xe9\xc2\x6d\x17\x0e\xbb\xa0\x56\x3c\x0f\xbc\x37\x11\xc9\x98\xcb\x4b\x9e\xa5\xfd\x30\x79\xe4\x27\x5e\xaa\x37\x3f\x8c\x2f\xf4\xc3\x98\xc5\xec\x82\x8b\x47\x7a\x6b\x76\x79\x34\xb1\x16\xdf\x29\x1c\xac\xc7\xe1\x4b\x96\xf7\x46\x96\x60\xbe\x8f\x4e\x6d\xd6\x36\xba\x93\xe5\xbe\x2b\x26\x46\x8f\x58\xbd\xa5\x85\x0f\x1e\x89\xfb\xde\x69\x1d\x6f\x1b\xc3\xa7\xce\xa4\x22\x56\x1c\x78\x55\x9b\xdf\x0f\x5d\x27\x14\xc4\x12\x18\x7e\xe4\x4b\xb7\x3d\xf1\xfa\x67\x0f\x2c\x5c\x4e\xd5\x07\x46\x76\x82\x0f\x5d\x62\xa5\x72\x1e\xf1\xf4\x92\x73\x59\x58\x57\x45\x09\xf3\xd1\xb2\x4a\x10\x0f\x63\x3a\x17\x06\x71\x5c\x88\x44\x98\xa2\x38\x23\xd6\x1b\x16\x46\xdc\x57\x74\x58\xb5\xe9\xbc\x3c\x3a\xea\x04\x22\x19\xeb\xf4\x45\xd4\xf8\x37\xea\x18\xa3\x87\x31\xf9\xe9\xbd\xb2\xaf\xc0\x3b\xb0\xcf\x19\x78\x87\x76\x23\x63\xd9\x1d\x29\x32\xa2\x89\x2d\x5b\xd8\xea\xc7\x36\x30\x7b\x4e\xbe\x46\x60\xfd\x97\x05\x24\xd6\x59\xd3\xd8\x13\xd0\xef\x46\x96\xe2\x27\x8e\xd1\xe1\xef\x7d\xa4\xd8\x8a\x0c\x76\x15\x69\x98\x8f\xca\x90\x8b\x76\x19\x87\x31\xee\xbb\x9e\xe2\x2f\xfb\x2c\xc3\xf8\xf4\xe0\x6d\xdb\x5d\x49\x7e\x08\x0a\xde\x33\x7b\x3f\x02\xdf\x6d\x18\x99\xe2\x43\x0e\xc9\x9f\xef\xf5\xd2\x23\x07\xb0\x53\x01\x19\x6b\xb1\x58\xd0\xe7\x2c\x71\x7e\x7e\x60\x61\x6c\xff\x0c\xe3\x50\xda\x3f\x04\x39\x0c\x29\x19\xa8\x8f\xc4\xfd\xd7\xd1\x78\x94\xf7\xdb\x31\xe6\x53\x41\x22\x08\xf2\xe8\x9d\x30\xee\x48\x8a\x7f\xc4\x08\x43\x3c\x59\x8e\xc3\x47\x13\xf2\x84\xda\x31\x11\x7f\xf2\xef\x20\xff\xe4\xdf\xa9\xad\x1e\x1d\xf5\xb8\x20\xd8\x25\xb0\x84\xda\xf8\xe4\xb0\x64\x41\x14\x1b\x44\x9f\xff\xbf\x01\x00\x00\xff\xff\x01\x30\xcf\xe3\xfa\xaf\x01\x00"), }, "/templates": &vfsgen۰DirInfo{ name: "templates", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), }, "/templates/default.tmpl": &vfsgen۰CompressedFileInfo{ name: "default.tmpl", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 8101, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xec\x59\xcf\x6f\xeb\x36\x0c\xbe\xe7\xaf\x20\xfc\x76\x68\x0e\xf5\x1b\x76\x2c\x50\x0c\x0f\xc3\x7e\x1c\xba\x61\x68\xd1\x5d\x86\x21\x50\x6d\xc6\x55\x2b\x4b\xae\x44\x27\x0d\xd2\xfc\xef\x83\x6c\xc7\x91\x2d\x27\x91\xd3\xec\xb4\xdc\x12\x99\xfc\x48\x7f\x1f\x4d\xca\xf2\x7a\x0d\x29\xce\xb9\x44\x88\x66\x33\x26\x50\x53\xce\x24\xcb\x50\x47\xb0\xd9\x7c\x73\xfe\xaf\xd7\x80\x32\x85\xcd\x66\xb2\xd7\xe5\xf1\xfe\xce\x7a\xad\xd7\x10\xff\xfc\x4e\xa8\x25\x13\x8f\xf7\x77\xb0\xd9\x7c\xfd\xf2\xb5\xb2\x33\x3f\x6a\x4c\x90\x2f\x50\xdf\x5a\xa3\xfb\xe6\x0f\x7c\x40\xa9\xc5\x5b\x89\x7a\x55\xbb\x37\x81\xba\x91\x4c\xf9\xf4\x82\x09\xd9\x08\x7f\x5b\xef\x07\x62\x54\x1a\xf8\x00\x52\x8f\x45\x81\xba\x76\xe5\x73\xc0\xb7\xf6\x62\x34\xe7\x9a\xcb\xcc\xfa\xdc\x58\x9f\xea\x86\x4c\xfc\x4b\xb5\x0a\x1f\x20\x50\xba\x11\xff\x01\x6b\xf4\xab\x56\x65\x71\xc7\x9e\x50\x98\xf8\x41\x69\xc2\xf4\x4f\xc6\xb5\x89\xff\x62\xa2\x44\x1b\xf0\x45\x71\x09\x11\x58\x54\xa8\x43\x66\x04\x57\x16\x2b\xfe\x49\xe5\xb9\x92\xb5\xf3\xb4\x59\x73\xf0\xa6\xb0\xd9\x5c\xad\xd7\xb0\xe4\xf4\xdc\x35\x8e\xef\x31\x57\x0b\xec\x46\xff\x83\xe5\x68\x1a\x46\x87\xa2\xb7\x89\x4f\xdb\x5f\x7b\x64\x4a\xd1\x24\x9a\x17\xc4\x95\x8c\x0e\x70\x4c\xf8\x4e\xb5\xa4\x33\xc1\x0d\x35\xa6\x9a\xc9\x0c\x21\x86\xcd\xa6\xce\xeb\x66\xb2\x5b\xf4\x79\xb2\xac\x5c\x57\x44\xda\xf4\xed\xbf\x5b\x68\x6f\xa0\x49\xac\x0e\xfe\x4d\x4a\x45\xcc\xe6\xd4\x81\x74\x96\x4f\xc3\x7d\x50\xa5\x4e\xf0\xa6\x16\x13\x25\x6a\x46\x4a\xd7\x95\x38\x19\x20\xea\x20\x05\xb3\x9c\xe9\xd7\x54\x2d\xa5\xc7\xc5\x24\x94\x8c\xc0\xac\x27\xe3\xe9\x08\x45\x0e\x22\x64\x32\xcc\x88\x11\x2c\x79\x8d\x53\x9c\xb3\x52\x50\x4c\x9c\x04\x36\x54\x10\xe6\x85\x60\xd4\x7d\x38\xe3\x7d\x35\xd8\xc5\x29\x8d\x6d\x0f\xf9\x10\x54\xb7\x09\x05\xe2\xcd\x99\x10\x4f\x2c\x79\xf5\xf0\x06\xd3\xb7\xa0\xf0\x01\xc7\x0c\x05\x97\xaf\xc1\x19\x24\x4d\x06\x3c\x8d\xc2\x1c\x0a\x8d\xb6\xd6\x02\xad\x9d\x84\x0e\x32\x56\xf5\xe0\xc0\x94\x79\xa2\x24\xe6\xea\x85\x47\xe1\xf6\xa5\x16\xa1\x19\x87\xdf\xdc\x5c\x29\xaa\x27\x8e\x53\x83\xae\x79\x61\x6f\x2d\x2d\x69\xd5\xba\xf8\x0d\x6d\x5c\x39\xfa\x88\x89\xe0\x28\xe9\xf4\x82\xdc\x87\xb8\x9b\x8a\xa7\x69\xe6\xe3\x72\x69\x88\xc9\x04\xcd\x00\xae\xd7\xc1\xe3\xfd\xac\xaa\xc2\x64\x28\x39\xb6\xc0\x39\x1a\xc3\xb2\xd3\x9e\x6f\x0f\xcc\x57\xa8\x19\x78\x7b\x1a\xda\xe0\x84\x9b\xf4\xe6\x6b\x67\x80\x4f\xe1\x7b\xb8\xb6\x8d\xb3\x5a\x84\x7a\xb1\x6a\x9d\x87\x19\xe9\xee\x02\xaa\x20\xd7\xce\x1d\x0d\xc4\xbb\x47\xa3\xc4\x02\xd3\x5e\xc4\xed\x72\x78\xcc\xad\x87\x17\xf5\x3a\x84\x52\x53\xf5\xf1\xf1\xd5\xd4\x51\x7d\x89\xc9\x33\xa3\xb1\x9a\x4f\x2e\xfa\x1d\xd0\xcf\xdd\x28\x3f\x6a\xe1\xe1\x0d\xea\xb3\x47\xf5\x9e\x3e\xa4\x66\x76\x58\xee\xed\xa4\xbe\x79\xc1\x34\xad\x46\xd8\x13\xcb\x42\xad\x59\x86\x92\x66\xfd\x11\xd7\xad\xaf\x05\x4f\x48\x69\x55\x98\x5d\xd9\x12\x23\x9c\x75\x0b\xed\x52\x4b\xe3\x7a\x81\xcf\x2a\x4a\xe2\xb4\x9a\xa5\xdc\x14\x82\xad\x66\x7b\x76\x53\xc7\x1b\xb7\x8f\x9c\x2b\xc9\x49\x59\x42\x66\xa4\x94\x18\x39\x12\x3b\xb3\xab\x34\xcf\x6a\x81\xfa\x0c\xfb\x47\x0f\xea\xbf\xaf\xa7\xf3\x94\x53\x78\x35\x9d\xaf\x98\xfc\x2d\xfd\x21\x26\x77\x7b\xba\x31\x33\xc5\xdd\xcd\x49\xe7\x61\xdf\xbd\xa6\x8f\x7f\x47\x70\x70\x2e\xf2\x8e\x91\xd7\x65\x91\x50\x60\xa6\x59\x3e\x44\xe5\xff\x96\x94\x94\x9b\x44\xe9\x74\xb7\x37\x57\x92\x76\xdb\x7d\xbf\x14\xfb\xf6\xa7\x37\xae\x3e\xd2\x45\x0d\xbb\xad\x78\xc2\xf7\xcb\xa3\xfe\x69\x1e\x73\x43\xc8\x72\xb7\xf9\xe6\x39\xd3\xab\x93\xea\xb4\x8f\x75\x7a\xc5\x7b\x48\xcd\x49\x40\x88\x4c\x5f\x60\x94\x50\xce\xf1\xdc\xa7\x15\x6b\x43\x87\x6a\x36\x10\xfc\x04\xf1\x16\x3f\x9c\x8f\x72\x17\xeb\x42\xfa\x10\xe9\x2f\x5c\xb3\xb3\x3c\x2e\x1d\xa0\xde\x59\xc7\x85\xf3\x49\xf5\x1a\x33\xc8\x55\xa1\xb9\xd2\xdc\xbe\xa1\x5e\x37\x6f\x3b\xdf\x6d\x97\xe0\xe6\x16\xa2\x68\xfb\x12\xb4\x3d\xff\xee\xdc\xad\xf5\x01\x00\xa8\xfc\x0c\x2e\x70\xeb\xc7\x65\x8a\xef\xdb\x23\x78\x88\xb6\x97\xa2\x8e\x07\x9f\xc3\x15\xbe\x39\x8e\x51\xa2\x39\xf1\x84\x89\x68\xda\x1a\xb6\xf0\x6d\x5a\xb7\x10\xfd\xc6\xb3\xe7\x2e\x16\x0a\x83\x15\x20\x93\x69\x1f\x75\xc9\xb4\xe4\x32\x8b\xa6\x70\x25\xd1\x01\xaa\x61\xa6\x47\x62\xfd\x8e\x29\x2f\xf3\xf0\x68\x5c\xce\x95\x0d\x65\x57\x77\xa1\x8e\x86\xb9\x53\xcb\x5e\x0c\x99\xb6\x9a\xb8\xbf\xeb\x6f\x6a\x2e\x74\xc7\xad\xab\x53\x5b\x18\x5e\xec\x51\x6a\x8d\x56\x2c\x40\xb5\xb3\x2b\x17\xa4\xde\xf9\x14\x3c\xae\x62\x5f\xc9\x63\xca\xee\x90\xfa\x57\xdd\x56\xa7\x55\xf2\x8a\xd4\x3d\x36\x3a\x79\x52\x0d\x80\x31\xc1\x99\x39\xfd\xe0\x7d\x5f\x7a\x9f\xfe\x5a\x32\x00\x7c\xf8\x73\xc9\x80\xc3\xb1\x6f\x26\x43\xc9\x7b\x1f\x4e\xfe\x0d\x00\x00\xff\xff\x74\x5d\xc4\xb5\xa5\x1f\x00\x00"), }, "/templates/email.tmpl": &vfsgen۰CompressedFileInfo{ name: "email.tmpl", modTime: time.Date(1970, 1, 1, 0, 0, 1, 0, time.UTC), uncompressedSize: 14085, compressedContent: []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xec\x5a\xfd\x6e\xdb\x38\x12\xff\x5f\x4f\x31\xab\xc5\x61\x5b\xc0\xb2\x9d\xa4\x0d\x1a\x7f\xe1\x5c\x47\x4e\x84\x73\xe4\xc0\x56\xda\x2d\x0e\x87\x05\x2d\x8d\x2d\xee\x4a\xa4\x8e\xa4\x63\x7b\x73\x79\xf7\x03\x29\xd9\xb1\x1d\x27\xcd\xed\x1d\x6a\xef\x35\x0d\x9a\x48\xd4\xcc\x70\xbe\x38\xf3\xa3\x44\xeb\xee\x0e\x22\x1c\x53\x86\x60\x63\x4a\x68\x52\x8e\x70\x4c\xa6\x89\x2a\xcb\xe9\xe8\x57\x0c\x95\x0d\xf7\xf7\x77\x77\xa0\x30\xcd\x12\xa2\x10\xec\x5f\x7e\x59\x3d\x29\xe7\xcf\x90\x45\x70\x7f\xff\xb4\xa4\x58\xa5\x89\x16\x63\x35\x7e\x70\x1c\x6b\xa8\x16\x09\x02\x61\x11\x5c\x06\x57\x3d\x88\x50\xd0\x5b\x8c\x60\x2c\x78\x0a\xb1\x52\x99\xac\x55\x2a\x13\xaa\xe2\xe9\xa8\x1c\xf2\xb4\xa2\x25\x4d\xa6\xac\xa2\x04\x61\x92\x84\x8a\x72\x46\x12\xc7\x4c\xe0\x2c\x95\x92\x96\x65\x05\x31\xc2\x95\x17\x40\x8f\x86\xc8\x24\xc2\x9b\x2b\x2f\x78\x6b\x59\x1d\x9e\x2d\x04\x9d\xc4\x0a\xde\x84\x6f\xe1\xb8\x7a\xf4\x0e\xae\x72\x89\x96\x75\x8d\x22\xa5\x52\x52\xce\x80\x4a\x88\x51\xe0\x68\x01\x13\x41\x98\xc2\xa8\x04\x63\x81\x08\x7c\x0c\x61\x4c\xc4\x04\x4b\xa0\x38\x10\xb6\x80\x0c\x85\xe4\x0c\xf8\x48\x11\xca\x28\x9b\x00\x81\x90\x67\x0b\x8b\x8f\x41\xc5\x54\x82\xe4\x63\x35\x23\x22\xb7\x90\x48\xc9\x43\x4a\x14\x46\x10\xf1\x70\x9a\x22\x53\x44\x5b\x00\x63\x9a\xa0\x84\x37\x2a\x46\xb0\x87\x05\x87\xfd\xd6\x4c\x12\x21\x49\x2c\xca\x40\x3f\x5b\x3e\x82\x19\x55\x31\x9f\x2a\x10\x28\x95\xa0\xc6\x0b\x25\xa0\x2c\x4c\xa6\x91\xd6\x61\xf9\x38\xa1\x29\x2d\x66\xd0\xec\xc6\x70\x69\x29\x0e\x53\x89\x25\xa3\x67\x09\x52\x1e\xd1\xb1\xfe\x8b\xc6\xac\x6c\x3a\x4a\xa8\x8c\x4b\x10\x51\x2d\x7a\x34\x55\x58\x02\xa9\x07\x8d\x1f\x4b\xda\x8e\x0a\x17\x20\x31\x49\xac\x90\x67\x14\x25\x18\x5b\x1f\xb4\x33\x34\x5a\xf5\x4c\x3b\x54\x15\x2e\x92\x7a\x64\x16\xf3\x74\xd3\x12\x2a\xad\xf1\x54\x30\x2a\x63\x34\x3c\x11\x07\xc9\xcd\x8c\x3a\xa7\xf4\x88\x26\x1f\xf3\x24\xe1\x33\x6d\x5a\xc8\x59\x44\xb5\x45\xb2\x96\x07\x99\x8c\xf8\x2d\x1a\x5b\xf2\xb8\x32\xae\x68\x98\xbb\xdb\x04\x20\x7b\x88\x6a\xf1\x48\xc6\x24\x49\x60\x84\x85\xc3\x30\x02\xca\x80\xac\x99\x23\xf4\xf4\x52\x11\xa6\x28\x49\x20\xe3\xc2\xcc\xb7\x6d\x66\xd9\xb2\x82\x4b\x17\x86\xfd\x6e\xf0\xb9\x3d\x70\xc1\x1b\xc2\xf5\xa0\xff\xc9\x3b\x77\xcf\xc1\x6e\x0f\xc1\x1b\xda\x25\xf8\xec\x05\x97\xfd\x9b\x00\x3e\xb7\x07\x83\xb6\x1f\x7c\x81\x7e\x17\xda\xfe\x17\xf8\x9b\xe7\x9f\x97\xc0\xfd\xf9\x7a\xe0\x0e\x87\xd0\x1f\x58\xde\xd5\x75\xcf\x73\xcf\x4b\xe0\xf9\x9d\xde\xcd\xb9\xe7\x5f\xc0\xc7\x9b\x00\xfc\x7e\x00\x3d\xef\xca\x0b\xdc\x73\x08\xfa\xa0\x27\x2c\x44\x79\xee\x50\x0b\xbb\x72\x07\x9d\xcb\xb6\x1f\xb4\x3f\x7a\x3d\x2f\xf8\x52\xb2\xba\x5e\xe0\x6b\x99\xdd\xfe\x00\xda\x70\xdd\x1e\x04\x5e\xe7\xa6\xd7\x1e\xc0\xf5\xcd\xe0\xba\x3f\x74\xa1\xed\x9f\x83\xdf\xf7\x3d\xbf\x3b\xf0\xfc\x0b\xf7\xca\xf5\x83\x32\x78\x3e\xf8\x7d\x70\x3f\xb9\x7e\x00\xc3\xcb\x76\xaf\xa7\xa7\xb2\xda\x37\xc1\x65\x7f\xa0\xf5\x83\x4e\xff\xfa\xcb\xc0\xbb\xb8\x0c\xe0\xb2\xdf\x3b\x77\x07\x43\xf8\xe8\x42\xcf\x6b\x7f\xec\xb9\xf9\x54\xfe\x17\xe8\xf4\xda\xde\x55\x09\xce\xdb\x57\xed\x0b\xd7\x70\xf5\x83\x4b\x77\x60\x69\xb2\x5c\x3b\xf8\x7c\xe9\xea\x21\x3d\x5f\xdb\x87\x76\x27\xf0\xfa\xbe\x36\xa3\xd3\xf7\x83\x41\xbb\x13\x94\x20\xe8\x0f\x82\x15\xeb\x67\x6f\xe8\x96\xa0\x3d\xf0\x86\xda\x21\xdd\x41\xff\xaa\x64\x69\x77\xf6\xbb\x9a\xc4\xf3\x35\x9f\xef\xe6\x52\xb4\xab\x61\x23\x22\xfd\x81\xb9\xbf\x19\xba\x2b\x81\x70\xee\xb6\x7b\x9e\x7f\x31\xd4\xcc\xda\xc4\x25\x71\xd9\x72\x9c\x96\xd5\xf8\xe1\xbc\xdf\x09\xbe\x5c\xbb\xa0\x8b\x14\x5c\xdf\x7c\xec\x79\x1d\xb0\x9d\x4a\xe5\xf3\x49\xa7\x52\x39\x0f\xce\xe1\x67\x53\xa6\x8e\xca\x55\x08\x74\x09\xa2\x79\x05\xaa\x54\x5c\xdf\x06\x5b\x17\xac\x5a\xa5\x32\x9b\xcd\xca\xb3\x93\x32\x17\x93\x4a\x30\xa8\xcc\xb5\xac\x23\xcd\x5c\x5c\x3a\x6a\x8d\xb3\x1c\xa9\xc8\x6e\x59\x0d\x33\xe1\x3c\x4d\x98\x6c\xee\x10\x73\x74\x76\x76\x96\x73\xdb\x20\x75\xc5\x6c\xda\x29\x11\x13\xca\x6a\x50\xad\xc3\x98\x33\xe5\x8c\x49\x4a\x93\x45\x0d\x7e\xba\xc4\xe4\x16\x15\x0d\x09\xf8\x38\xc5\x9f\x4a\xb0\x1a\x28\x41\x5b\x50\x92\x94\x40\x12\x26\x1d\x89\x82\x8e\xeb\x30\xe2\x73\x47\xd2\xdf\x29\x9b\xd4\x60\xc4\x45\x84\xc2\x19\xf1\x79\x21\x54\xd2\xdf\xb1\x06\x47\xef\xb2\x79\xdd\x28\x89\x24\x6a\x59\x8d\x14\x15\x01\x46\x52\x6c\xda\xb7\x14\x67\x7a\x85\xd8\x7a\x65\x2a\x64\xaa\x69\xcf\x68\xa4\xe2\x66\x84\xb7\x34\x44\xc7\xdc\xd8\x4b\x1e\x6d\x98\x83\xff\x9c\xd2\xdb\xa6\xdd\xc9\xe9\x9d\x60\x91\xe1\x1a\xb7\xc2\xb9\xaa\x68\x43\xeb\xa6\xd4\x4a\x54\xcd\x9b\xa0\xeb\x7c\xd0\x32\x14\x55\x09\xb6\x9e\x6b\x3f\x8d\x4a\x4e\x63\x35\x8c\x97\x5a\xd6\x5f\x53\x8c\x28\x01\xce\x92\x05\xc8\x50\x20\x32\x53\x1a\xde\xa4\x64\x9e\xeb\x56\x83\xd3\x77\xd5\x6c\xfe\x16\xee\x2c\x80\x11\x8f\x16\xe6\x02\x20\x23\x51\x64\x7c\x52\x85\x1f\x68\xaa\x4d\x24\x4c\xd5\x2d\x80\x7b\xcb\x02\x88\x8f\x4a\x56\x7c\x5c\xb2\xe2\x93\x92\x15\xbf\x2b\x58\x8c\xc7\x66\xa8\xcb\x50\x0d\x3e\x54\xb7\x19\x01\x96\x21\x3b\xae\x66\x73\xa8\xc2\xfb\x6c\xbe\x5b\xf6\xba\xbc\x3c\x02\xc7\xc7\x4f\xd0\x1e\x3f\xa6\x3d\xfa\xf0\x04\xed\xc9\x0e\xda\xd3\xdd\xb4\x65\x1d\x0f\x42\x19\x8a\xaf\xb9\x03\xa0\x70\xe3\x51\xb5\xfa\x97\x27\x45\x21\x53\x2f\xf2\xeb\x92\xd8\x99\x09\x92\x6d\x73\x1c\x55\x9f\x50\x96\xb2\x5b\xae\x2b\xfb\xdd\x57\xf5\xb9\xb7\x1a\x95\x22\x33\x1a\x95\x3c\x9b\xad\x86\x89\x3a\x55\x98\xca\x90\x67\x68\xae\xd4\x22\xc3\x7c\x1d\x6a\xfc\x21\xc3\x18\x53\x62\x16\xa2\xab\x91\xc6\x15\x4a\x49\x26\xb8\xb7\xa5\x08\xce\x0c\x47\xbf\x51\xe5\xe4\x0f\x52\xce\x55\x6c\x98\xf2\x96\x45\x89\xc4\xe8\x81\x48\xaf\x28\xc3\xed\x90\xe8\xd7\xa9\x54\x35\x60\x9c\x61\x1d\xe2\x22\x53\xb5\xa3\xea\x90\x50\x86\xce\x6a\xa8\x7c\x8a\x69\x1d\x46\x24\xfc\x6d\x22\xf8\x94\x45\x4e\xc8\x13\x2e\x6a\xf0\xe3\xf8\x54\xff\xd4\xd7\x9d\xac\x2b\x83\xd5\x50\x64\x94\x20\x84\x09\x91\xb2\x69\x6b\x8f\x9a\x10\xee\xcf\x45\x2f\xd5\x3d\xbf\x6b\xda\xfa\xce\x86\xd1\xc4\x10\x37\xed\x82\xd8\x6e\x59\x00\x0d\x25\xf6\x58\x74\x75\x4a\x37\x54\xb4\x37\x47\xde\xa2\xd0\x42\x12\x87\x24\x74\xc2\x6a\xa0\x78\x56\xb7\xe1\xd6\xdc\x35\x6d\xc5\x33\xbb\xd5\xa8\xa8\xe8\x41\xd1\x22\x07\x56\x15\x64\xe5\xe2\xd3\x6a\x75\x95\x0f\xfb\xd3\x5d\x23\xdb\x2c\x21\x8b\x1a\x8c\x12\x1e\xfe\x56\x87\xf5\x56\x50\xad\x6a\xb6\x95\x8f\x81\x4c\x15\xaf\x43\x98\x20\x11\x7a\x2a\x15\x6f\x9b\x6e\xac\x06\x68\x44\xf4\x76\xdd\x70\x64\xea\x1b\x9b\xfa\x75\x2b\xb6\xed\x5e\xd5\x55\xdd\x8e\xea\x2b\x53\x74\x10\xd7\xd7\x72\x4a\x28\xdb\x5a\x25\x21\x26\x49\xc1\xdd\xb4\xab\xf9\xbd\xcc\x48\xb8\xbc\x3f\xa4\x35\x3f\x36\x02\x34\x53\x0d\x8e\xb2\x39\x48\x9e\xd0\x08\x7e\xc4\x33\xfd\xb3\x7c\xe4\x08\x12\xd1\xa9\xac\xc1\x89\xf6\xc4\x7a\x15\x18\x8f\xd7\x1c\x73\x08\xa5\x60\xf9\xef\xee\x0e\xe8\x18\x26\x0a\xde\x24\xc8\xa0\xdc\x4e\x50\x28\x59\xee\x52\x41\xd9\xe4\x2d\x54\xf5\xfe\x7a\x9d\x7c\x6d\x61\x12\x4d\x0a\xe6\xb7\x33\x23\x42\xef\x5a\xbf\x59\xc8\x76\x2e\xc8\x2d\x3c\x52\x87\x8d\xe0\x6d\xa0\xaa\xf7\xd5\xea\x76\xe2\x82\xe9\x6f\x85\xbc\x10\x99\x42\xb1\x2b\xac\xe6\x7f\x55\x1b\xb6\x23\x4b\xdc\xd3\xf7\xc7\xc7\x9d\xad\xb5\x0d\xc5\x75\x2e\x73\x3d\x2b\x72\xf2\xad\x80\x98\x90\x14\x71\x80\x7f\x81\x8e\xca\xfd\x7d\xee\xe6\x9d\xb1\x7a\x0b\x47\x70\x7f\x2f\x57\x2f\x4c\x60\xcc\x85\x16\x21\x08\x9b\x20\x94\x2f\x04\x9f\x66\x3d\x32\xc2\x44\x96\x87\x5c\x28\x8c\xae\x09\x15\x72\x3b\xae\xcb\x79\x7d\x92\x22\xdc\xdf\x37\xf5\xf5\x27\x92\x4c\xf1\x31\xe1\xc3\xab\x99\x8d\xc4\x58\xd5\xee\x75\xba\x44\xe2\x0b\x33\x68\xc2\x79\xf4\xbd\xa7\xcf\xe9\x87\x8f\x67\xd5\xee\x8b\xd3\x27\x27\x3f\xf8\xf4\x81\xff\x22\x7f\xb6\xe9\x1a\x15\x25\x0e\xb3\x8e\x6e\x21\x96\xe5\xde\xc3\x3e\x28\xbc\xf5\x90\xb3\x27\xa6\x57\xef\xc4\x20\x5b\xed\xfb\xcf\xd0\xb1\x1f\xe9\x7e\x48\x99\xf1\x64\x7e\x18\xfc\x74\xa8\x09\x52\x85\x6a\x01\xe8\x9e\x4d\x92\xc2\x38\x02\xb1\xc0\x71\xd3\xde\x7a\xa7\x62\xca\x4e\x4a\x18\x99\xa0\xb8\x19\xf4\xf2\x77\x2b\xf6\x6a\x77\xa7\x98\x93\x09\x9a\x12\xb1\xd8\x9f\x17\x4c\xd9\x8e\x30\xe4\xc2\xbc\xe0\x5e\x6e\x6a\x97\x25\xb9\xdb\xed\xee\x2c\xd5\x27\xef\x3e\x60\x44\x1e\x20\x61\x01\x07\x37\x87\x9d\xd5\x0e\x31\x9b\x17\x5d\x62\x63\x7b\x7c\xac\x37\xc7\x1b\x8d\x65\xc4\x93\x68\x77\x2b\x09\xa7\x42\xea\x99\x33\x4e\xf3\x81\x15\x0c\xa7\xcc\x08\x2d\xd0\xf8\x56\xcb\x79\xbf\xb2\xd1\xbc\x2c\x1c\x73\x91\xd6\x20\x24\x19\x55\x24\xa1\xbf\x63\xdd\x6e\x7d\xa2\x38\x03\xca\xe0\x99\xd0\x2d\xdf\x89\x91\x9d\x89\xfd\xa8\x70\xef\x2a\xd4\x7f\x08\x6c\xbe\xae\xe3\x6f\xbd\x8e\xa5\x12\x9c\x4d\xf6\xe7\xf0\xbf\x3f\x80\x97\x22\x2d\x56\x18\xe6\x1f\x90\x0f\x34\x2a\xb9\x92\xff\x83\x5c\xdc\x01\x43\x8a\x27\x05\xfa\xd9\xd4\xe4\x35\x3b\xbf\xf3\xec\xcc\x71\xf0\x2a\x01\x1b\xa3\xc3\x0a\xfe\x7a\xe6\xee\x84\xec\x6b\x08\x1d\x9a\xb0\x8e\xd1\xf7\x6a\xca\xd3\x2b\x71\x57\xcf\x60\x8c\xe7\xdf\xa2\x65\xde\x31\xf6\x9e\x15\x6b\x1a\x1d\x46\x6a\x7c\xd5\x9f\xcb\xea\xf6\xa0\xf8\xff\x43\xa2\xac\x83\xd0\xf2\x05\x32\x14\x44\x71\x0d\x3b\x0d\xe6\xdc\x57\xfd\xdb\x06\x8c\x8f\xf0\xe6\x94\x45\x28\x34\x82\xab\xdb\xad\x21\x9f\x8a\x10\x35\xd0\x3a\xb4\xda\xf2\xc7\x3a\xeb\x0b\x01\xe0\x00\x25\x4f\x6e\x31\x7a\x02\x02\xbe\xe2\xc6\x83\xef\xcc\x07\xd7\x09\x1b\xf1\xc1\x69\xf4\x27\x5e\xd1\xcf\xa1\xe5\xd7\x85\xf6\xbd\x6e\xd0\x96\x65\x7b\x6d\x8b\xb6\x1c\xda\xc3\x26\x6d\xa5\xcd\x6b\x8e\xbe\x6e\xd3\x5e\xb7\x69\xaf\xdb\xb4\xd7\x6d\xda\xeb\x36\xed\x75\x9b\xf6\x9f\xf7\xd6\x46\xc5\x7c\xf8\x6b\x3d\xfb\x79\x76\x53\xe4\x8a\xe5\x61\x64\xed\x20\xd3\x98\x73\xf3\xe5\x7a\x5f\xb1\x5d\x3f\xa7\xb7\x71\x06\x6b\x15\xf5\xb3\xb3\xb3\x67\xce\x31\xed\xfe\x14\x7a\x28\x9f\x9d\x0f\x27\x01\x37\x4e\x76\xd0\x09\xcb\x3f\x5d\xc1\x7e\x10\xce\x0b\x01\xcd\xee\x6f\x6d\xeb\x69\xb1\x6e\xf6\xf1\x23\x08\xb4\x75\x3a\xa3\xb5\x51\xdd\xdc\xb9\x42\xc1\x48\xf2\x8d\x8b\xdb\x33\xb5\xeb\x2b\xa6\xb5\x86\xc8\x14\x8c\x16\x2f\xfb\x18\xf8\xb8\xd8\x3c\x3a\x9e\xb1\x5d\x4a\x1a\x95\x88\xde\xb6\xf2\xdf\xd6\x66\x5d\xf9\x93\x9c\x4d\xcd\x4d\x7c\x28\x78\x8d\xca\x88\x47\x0b\x73\x0c\x5c\xa5\x49\xcb\xb2\x1e\xca\xea\xbf\x03\x00\x00\xff\xff\xa1\xf8\x6b\x5d\x05\x37\x00\x00"), }, } fs["/"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/static"].(os.FileInfo), fs["/templates"].(os.FileInfo), } fs["/static"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/static/favicon.ico"].(os.FileInfo), fs["/static/index.html"].(os.FileInfo), fs["/static/lib"].(os.FileInfo), fs["/static/script.js"].(os.FileInfo), } fs["/static/lib"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/static/lib/bootstrap-4.0.0-alpha.6-dist"].(os.FileInfo), fs["/static/lib/elm-datepicker"].(os.FileInfo), fs["/static/lib/font-awesome-4.7.0"].(os.FileInfo), } fs["/static/lib/bootstrap-4.0.0-alpha.6-dist"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/static/lib/bootstrap-4.0.0-alpha.6-dist/css"].(os.FileInfo), } fs["/static/lib/bootstrap-4.0.0-alpha.6-dist/css"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/static/lib/bootstrap-4.0.0-alpha.6-dist/css/bootstrap.min.css"].(os.FileInfo), fs["/static/lib/bootstrap-4.0.0-alpha.6-dist/css/bootstrap.min.css.map"].(os.FileInfo), } fs["/static/lib/elm-datepicker"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/static/lib/elm-datepicker/css"].(os.FileInfo), } fs["/static/lib/elm-datepicker/css"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/static/lib/elm-datepicker/css/elm-datepicker.css"].(os.FileInfo), } fs["/static/lib/font-awesome-4.7.0"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/static/lib/font-awesome-4.7.0/css"].(os.FileInfo), fs["/static/lib/font-awesome-4.7.0/fonts"].(os.FileInfo), } fs["/static/lib/font-awesome-4.7.0/css"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/static/lib/font-awesome-4.7.0/css/font-awesome.css"].(os.FileInfo), fs["/static/lib/font-awesome-4.7.0/css/font-awesome.min.css"].(os.FileInfo), } fs["/static/lib/font-awesome-4.7.0/fonts"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/static/lib/font-awesome-4.7.0/fonts/FontAwesome.otf"].(os.FileInfo), fs["/static/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.eot"].(os.FileInfo), fs["/static/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.svg"].(os.FileInfo), fs["/static/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf"].(os.FileInfo), fs["/static/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff"].(os.FileInfo), fs["/static/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2"].(os.FileInfo), } fs["/templates"].(*vfsgen۰DirInfo).entries = []os.FileInfo{ fs["/templates/default.tmpl"].(os.FileInfo), fs["/templates/email.tmpl"].(os.FileInfo), } return fs }() type vfsgen۰FS map[string]interface{} func (fs vfsgen۰FS) Open(path string) (http.File, error) { path = pathpkg.Clean("/" + path) f, ok := fs[path] if !ok { return nil, &os.PathError{Op: "open", Path: path, Err: os.ErrNotExist} } switch f := f.(type) { case *vfsgen۰CompressedFileInfo: gr, err := gzip.NewReader(bytes.NewReader(f.compressedContent)) if err != nil { // This should never happen because we generate the gzip bytes such that they are always valid. panic("unexpected error reading own gzip compressed bytes: " + err.Error()) } return &vfsgen۰CompressedFile{ vfsgen۰CompressedFileInfo: f, gr: gr, }, nil case *vfsgen۰FileInfo: return &vfsgen۰File{ vfsgen۰FileInfo: f, Reader: bytes.NewReader(f.content), }, nil case *vfsgen۰DirInfo: return &vfsgen۰Dir{ vfsgen۰DirInfo: f, }, nil default: // This should never happen because we generate only the above types. panic(fmt.Sprintf("unexpected type %T", f)) } } // vfsgen۰CompressedFileInfo is a static definition of a gzip compressed file. type vfsgen۰CompressedFileInfo struct { name string modTime time.Time compressedContent []byte uncompressedSize int64 } func (f *vfsgen۰CompressedFileInfo) Readdir(count int) ([]os.FileInfo, error) { return nil, fmt.Errorf("cannot Readdir from file %s", f.name) } func (f *vfsgen۰CompressedFileInfo) Stat() (os.FileInfo, error) { return f, nil } func (f *vfsgen۰CompressedFileInfo) GzipBytes() []byte { return f.compressedContent } func (f *vfsgen۰CompressedFileInfo) Name() string { return f.name } func (f *vfsgen۰CompressedFileInfo) Size() int64 { return f.uncompressedSize } func (f *vfsgen۰CompressedFileInfo) Mode() os.FileMode { return 0444 } func (f *vfsgen۰CompressedFileInfo) ModTime() time.Time { return f.modTime } func (f *vfsgen۰CompressedFileInfo) IsDir() bool { return false } func (f *vfsgen۰CompressedFileInfo) Sys() interface{} { return nil } // vfsgen۰CompressedFile is an opened compressedFile instance. type vfsgen۰CompressedFile struct { *vfsgen۰CompressedFileInfo gr *gzip.Reader grPos int64 // Actual gr uncompressed position. seekPos int64 // Seek uncompressed position. } func (f *vfsgen۰CompressedFile) Read(p []byte) (n int, err error) { if f.grPos > f.seekPos { // Rewind to beginning. err = f.gr.Reset(bytes.NewReader(f.compressedContent)) if err != nil { return 0, err } f.grPos = 0 } if f.grPos < f.seekPos { // Fast-forward. _, err = io.CopyN(io.Discard, f.gr, f.seekPos-f.grPos) if err != nil { return 0, err } f.grPos = f.seekPos } n, err = f.gr.Read(p) f.grPos += int64(n) f.seekPos = f.grPos return n, err } func (f *vfsgen۰CompressedFile) Seek(offset int64, whence int) (int64, error) { switch whence { case io.SeekStart: f.seekPos = 0 + offset case io.SeekCurrent: f.seekPos += offset case io.SeekEnd: f.seekPos = f.uncompressedSize + offset default: panic(fmt.Errorf("invalid whence value: %v", whence)) } return f.seekPos, nil } func (f *vfsgen۰CompressedFile) Close() error { return f.gr.Close() } // vfsgen۰FileInfo is a static definition of an uncompressed file (because it's not worth gzip compressing). type vfsgen۰FileInfo struct { name string modTime time.Time content []byte } func (f *vfsgen۰FileInfo) Readdir(count int) ([]os.FileInfo, error) { return nil, fmt.Errorf("cannot Readdir from file %s", f.name) } func (f *vfsgen۰FileInfo) Stat() (os.FileInfo, error) { return f, nil } func (f *vfsgen۰FileInfo) NotWorthGzipCompressing() {} func (f *vfsgen۰FileInfo) Name() string { return f.name } func (f *vfsgen۰FileInfo) Size() int64 { return int64(len(f.content)) } func (f *vfsgen۰FileInfo) Mode() os.FileMode { return 0444 } func (f *vfsgen۰FileInfo) ModTime() time.Time { return f.modTime } func (f *vfsgen۰FileInfo) IsDir() bool { return false } func (f *vfsgen۰FileInfo) Sys() interface{} { return nil } // vfsgen۰File is an opened file instance. type vfsgen۰File struct { *vfsgen۰FileInfo *bytes.Reader } func (f *vfsgen۰File) Close() error { return nil } // vfsgen۰DirInfo is a static definition of a directory. type vfsgen۰DirInfo struct { name string modTime time.Time entries []os.FileInfo } func (d *vfsgen۰DirInfo) Read([]byte) (int, error) { return 0, fmt.Errorf("cannot Read from directory %s", d.name) } func (d *vfsgen۰DirInfo) Close() error { return nil } func (d *vfsgen۰DirInfo) Stat() (os.FileInfo, error) { return d, nil } func (d *vfsgen۰DirInfo) Name() string { return d.name } func (d *vfsgen۰DirInfo) Size() int64 { return 0 } func (d *vfsgen۰DirInfo) Mode() os.FileMode { return 0755 | os.ModeDir } func (d *vfsgen۰DirInfo) ModTime() time.Time { return d.modTime } func (d *vfsgen۰DirInfo) IsDir() bool { return true } func (d *vfsgen۰DirInfo) Sys() interface{} { return nil } // vfsgen۰Dir is an opened dir instance. type vfsgen۰Dir struct { *vfsgen۰DirInfo pos int // Position within entries for Seek and Readdir. } func (d *vfsgen۰Dir) Seek(offset int64, whence int) (int64, error) { if offset == 0 && whence == io.SeekStart { d.pos = 0 return 0, nil } return 0, fmt.Errorf("unsupported Seek in directory %s", d.name) } func (d *vfsgen۰Dir) Readdir(count int) ([]os.FileInfo, error) { if d.pos >= len(d.entries) && count > 0 { return nil, io.EOF } if count <= 0 || count > len(d.entries)-d.pos { count = len(d.entries) - d.pos } e := d.entries[d.pos : d.pos+count] d.pos += count return e, nil } prometheus-alertmanager-0.28.1+ds/asset/doc.go000066400000000000000000000014561476331240200212620ustar00rootroot00000000000000// Copyright 2018 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package asset provides the assets via a virtual filesystem. package asset import ( // The blank import is to make go modules happy. _ "github.com/shurcooL/vfsgen" ) //go:generate go run -tags=dev asset_generate.go prometheus-alertmanager-0.28.1+ds/cli/000077500000000000000000000000001476331240200176105ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/cli/alert.go000066400000000000000000000015331476331240200212500ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "github.com/alecthomas/kingpin/v2" ) func configureAlertCmd(app *kingpin.Application) { alertCmd := app.Command("alert", "Add or query alerts.").PreAction(requireAlertManagerURL) configureQueryAlertsCmd(alertCmd) configureAddAlertCmd(alertCmd) } prometheus-alertmanager-0.28.1+ds/cli/alert_add.go000066400000000000000000000102051476331240200220540ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "context" "errors" "fmt" "strconv" "time" "github.com/alecthomas/kingpin/v2" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/client/alert" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/matcher/compat" "github.com/prometheus/alertmanager/pkg/labels" ) type alertAddCmd struct { annotations []string generatorURL string labels []string start string end string } const alertAddHelp = `Add a new alert. This command is used to add a new alert to Alertmanager. To add a new alert with labels: amtool alert add alertname=foo node=bar If alertname is omitted and the first argument does not contain a '=' then it will be assumed to be the value of the alertname pair. amtool alert add foo node=bar One or more annotations can be added using the --annotation flag: amtool alert add foo node=bar \ --annotation=runbook='http://runbook.biz' \ --annotation=summary='summary of the alert' \ --annotation=description='description of the alert' Additional flags such as --generator-url, --start, and --end are also supported. ` func configureAddAlertCmd(cc *kingpin.CmdClause) { var ( a = &alertAddCmd{} addCmd = cc.Command("add", alertAddHelp) ) addCmd.Arg("labels", "List of labels to be included with the alert").StringsVar(&a.labels) addCmd.Flag("generator-url", "Set the URL of the source that generated the alert").StringVar(&a.generatorURL) addCmd.Flag("start", "Set when the alert should start. RFC3339 format 2006-01-02T15:04:05-07:00").StringVar(&a.start) addCmd.Flag("end", "Set when the alert should end. RFC3339 format 2006-01-02T15:04:05-07:00").StringVar(&a.end) addCmd.Flag("annotation", "Set an annotation to be included with the alert").StringsVar(&a.annotations) addCmd.Action(execWithTimeout(a.addAlert)) } func (a *alertAddCmd) addAlert(ctx context.Context, _ *kingpin.ParseContext) error { if len(a.labels) > 0 { // Allow the alertname label to be defined implicitly as the first argument rather // than explicitly as a key=value pair. if _, err := compat.Matcher(a.labels[0], "cli"); err != nil { a.labels[0] = fmt.Sprintf("alertname=%s", strconv.Quote(a.labels[0])) } } ls := make(models.LabelSet, len(a.labels)) for _, l := range a.labels { matcher, err := compat.Matcher(l, "cli") if err != nil { return err } if matcher.Type != labels.MatchEqual { return errors.New("labels must be specified as key=value pairs") } ls[matcher.Name] = matcher.Value } annotations := make(models.LabelSet, len(a.annotations)) for _, a := range a.annotations { matcher, err := compat.Matcher(a, "cli") if err != nil { return err } if matcher.Type != labels.MatchEqual { return errors.New("annotations must be specified as key=value pairs") } annotations[matcher.Name] = matcher.Value } var startsAt, endsAt time.Time if a.start != "" { var err error startsAt, err = time.Parse(time.RFC3339, a.start) if err != nil { return err } } if a.end != "" { var err error endsAt, err = time.Parse(time.RFC3339, a.end) if err != nil { return err } } pa := &models.PostableAlert{ Alert: models.Alert{ GeneratorURL: strfmt.URI(a.generatorURL), Labels: ls, }, Annotations: annotations, StartsAt: strfmt.DateTime(startsAt), EndsAt: strfmt.DateTime(endsAt), } alertParams := alert.NewPostAlertsParams().WithContext(ctx). WithAlerts(models.PostableAlerts{pa}) amclient := NewAlertmanagerClient(alertmanagerURL) _, err := amclient.Alert.PostAlerts(alertParams) return err } prometheus-alertmanager-0.28.1+ds/cli/alert_query.go000066400000000000000000000077201476331240200225010ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "context" "errors" "fmt" "strconv" "github.com/alecthomas/kingpin/v2" "github.com/prometheus/alertmanager/api/v2/client/alert" "github.com/prometheus/alertmanager/cli/format" "github.com/prometheus/alertmanager/matcher/compat" ) type alertQueryCmd struct { inhibited, silenced, active, unprocessed bool receiver string matcherGroups []string } const alertQueryHelp = `View and search through current alerts. Amtool has a simplified prometheus query syntax, but contains robust support for bash variable expansions. The non-option section of arguments constructs a list of "Matcher Groups" that will be used to filter your query. The following examples will attempt to show this behaviour in action: amtool alert query alertname=foo node=bar This query will match all alerts with the alertname=foo and node=bar label value pairs set. amtool alert query foo node=bar If alertname is omitted and the first argument does not contain a '=' or a '=~' then it will be assumed to be the value of the alertname pair. amtool alert query 'alertname=~foo.*' As well as direct equality, regex matching is also supported. The '=~' syntax (similar to prometheus) is used to represent a regex match. Regex matching can be used in combination with a direct match. Amtool supports several flags for filtering the returned alerts by state (inhibited, silenced, active, unprocessed). If none of these flags is given, only active alerts are returned. ` func configureQueryAlertsCmd(cc *kingpin.CmdClause) { var ( a = &alertQueryCmd{} queryCmd = cc.Command("query", alertQueryHelp).Default() ) queryCmd.Flag("inhibited", "Show inhibited alerts").Short('i').BoolVar(&a.inhibited) queryCmd.Flag("silenced", "Show silenced alerts").Short('s').BoolVar(&a.silenced) queryCmd.Flag("active", "Show active alerts").Short('a').BoolVar(&a.active) queryCmd.Flag("unprocessed", "Show unprocessed alerts").Short('u').BoolVar(&a.unprocessed) queryCmd.Flag("receiver", "Show alerts matching receiver (Supports regex syntax)").Short('r').StringVar(&a.receiver) queryCmd.Arg("matcher-groups", "Query filter").StringsVar(&a.matcherGroups) queryCmd.Action(execWithTimeout(a.queryAlerts)) } func (a *alertQueryCmd) queryAlerts(ctx context.Context, _ *kingpin.ParseContext) error { if len(a.matcherGroups) > 0 { // Attempt to parse the first argument. If the parser fails // then we likely don't have a (=|=~|!=|!~) so lets assume that // the user wants alertname= and prepend `alertname=` to // the front. m := a.matcherGroups[0] _, err := compat.Matcher(m, "cli") if err != nil { a.matcherGroups[0] = fmt.Sprintf("alertname=%s", strconv.Quote(m)) } } // If no selector was passed, default to showing active alerts. if !a.silenced && !a.inhibited && !a.active && !a.unprocessed { a.active = true } alertParams := alert.NewGetAlertsParams().WithContext(ctx). WithActive(&a.active). WithInhibited(&a.inhibited). WithSilenced(&a.silenced). WithUnprocessed(&a.unprocessed). WithReceiver(&a.receiver). WithFilter(a.matcherGroups) amclient := NewAlertmanagerClient(alertmanagerURL) getOk, err := amclient.Alert.GetAlerts(alertParams) if err != nil { return err } formatter, found := format.Formatters[output] if !found { return errors.New("unknown output formatter") } return formatter.FormatAlerts(getOk.Payload) } prometheus-alertmanager-0.28.1+ds/cli/check_config.go000066400000000000000000000051571476331240200225510ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "fmt" "os" "github.com/alecthomas/kingpin/v2" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/template" ) // TODO: This can just be a type that is []string, doesn't have to be a struct. type checkConfigCmd struct { files []string } const checkConfigHelp = `Validate alertmanager config files Will validate the syntax and schema for alertmanager config file and associated templates. Non existing templates will not trigger errors. ` func configureCheckConfigCmd(app *kingpin.Application) { var ( c = &checkConfigCmd{} checkCmd = app.Command("check-config", checkConfigHelp) ) checkCmd.Arg("check-files", "Files to be validated").ExistingFilesVar(&c.files) checkCmd.Action(c.checkConfig) } func (c *checkConfigCmd) checkConfig(ctx *kingpin.ParseContext) error { return CheckConfig(c.files) } func CheckConfig(args []string) error { if len(args) == 0 { stat, err := os.Stdin.Stat() if err != nil { kingpin.Fatalf("Failed to stat standard input: %v", err) } if (stat.Mode() & os.ModeCharDevice) != 0 { kingpin.Fatalf("Failed to read from standard input") } args = []string{os.Stdin.Name()} } failed := 0 for _, arg := range args { fmt.Printf("Checking '%s'", arg) cfg, err := config.LoadFile(arg) if err != nil { fmt.Printf(" FAILED: %s\n", err) failed++ } else { fmt.Printf(" SUCCESS\n") } if cfg != nil { fmt.Println("Found:") if cfg.Global != nil { fmt.Println(" - global config") } if cfg.Route != nil { fmt.Println(" - route") } fmt.Printf(" - %d inhibit rules\n", len(cfg.InhibitRules)) fmt.Printf(" - %d receivers\n", len(cfg.Receivers)) fmt.Printf(" - %d templates\n", len(cfg.Templates)) if len(cfg.Templates) > 0 { _, err = template.FromGlobs(cfg.Templates) if err != nil { fmt.Printf(" FAILED: %s\n", err) failed++ } else { fmt.Printf(" SUCCESS\n") } } } fmt.Printf("\n") } if failed > 0 { return fmt.Errorf("failed to validate %d file(s)", failed) } return nil } prometheus-alertmanager-0.28.1+ds/cli/check_config_test.go000066400000000000000000000016271476331240200236060ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "testing" ) func TestCheckConfig(t *testing.T) { err := CheckConfig([]string{"testdata/conf.good.yml"}) if err != nil { t.Fatalf("checking valid config file failed with: %v", err) } err = CheckConfig([]string{"testdata/conf.bad.yml"}) if err == nil { t.Fatalf("failed to detect invalid file.") } } prometheus-alertmanager-0.28.1+ds/cli/cluster.go000066400000000000000000000026161476331240200216250ustar00rootroot00000000000000// Copyright 2020 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "context" "errors" "github.com/alecthomas/kingpin/v2" "github.com/prometheus/alertmanager/cli/format" ) const clusterHelp = `View cluster status and peers.` // configureClusterCmd represents the cluster command. func configureClusterCmd(app *kingpin.Application) { clusterCmd := app.Command("cluster", clusterHelp) clusterCmd.Command("show", clusterHelp).Default().Action(execWithTimeout(showStatus)).PreAction(requireAlertManagerURL) } func showStatus(ctx context.Context, _ *kingpin.ParseContext) error { alertManagerStatus, err := getRemoteAlertmanagerConfigStatus(ctx, alertmanagerURL) if err != nil { return err } formatter, found := format.Formatters[output] if !found { return errors.New("unknown output formatter") } return formatter.FormatClusterStatus(alertManagerStatus.Cluster) } prometheus-alertmanager-0.28.1+ds/cli/config.go000066400000000000000000000031451476331240200214070ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "context" "errors" kingpin "github.com/alecthomas/kingpin/v2" "github.com/prometheus/alertmanager/cli/format" ) const configHelp = `View current config. The amount of output is controlled by the output selection flag: - Simple: Print just the running config - Extended: Print the running config as well as uptime and all version info - Json: Print entire config object as json ` // configureConfigCmd represents the config command. func configureConfigCmd(app *kingpin.Application) { configCmd := app.Command("config", configHelp) configCmd.Command("show", configHelp).Default().Action(execWithTimeout(queryConfig)).PreAction(requireAlertManagerURL) configureRoutingCmd(configCmd) } func queryConfig(ctx context.Context, _ *kingpin.ParseContext) error { status, err := getRemoteAlertmanagerConfigStatus(ctx, alertmanagerURL) if err != nil { return err } formatter, found := format.Formatters[output] if !found { return errors.New("unknown output formatter") } return formatter.FormatConfig(status) } prometheus-alertmanager-0.28.1+ds/cli/config/000077500000000000000000000000001476331240200210555ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/cli/config/config.go000066400000000000000000000040641476331240200226550ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package config import ( "os" "github.com/alecthomas/kingpin/v2" "gopkg.in/yaml.v2" ) type getFlagger interface { GetFlag(name string) *kingpin.FlagClause } // Resolver represents a configuration file resolver for kingpin. type Resolver struct { flags map[string]string } // NewResolver returns a Resolver structure. func NewResolver(files []string, legacyFlags map[string]string) (*Resolver, error) { flags := map[string]string{} for _, f := range files { if _, err := os.Stat(f); err != nil { continue } b, err := os.ReadFile(f) if err != nil { if os.IsNotExist(err) { continue } return nil, err } var m map[string]string err = yaml.Unmarshal(b, &m) if err != nil { return nil, err } for k, v := range m { if flag, ok := legacyFlags[k]; ok { if _, ok := m[flag]; ok { continue } k = flag } if _, ok := flags[k]; !ok { flags[k] = v } } } return &Resolver{flags: flags}, nil } func (c *Resolver) setDefault(v getFlagger) { for name, value := range c.flags { f := v.GetFlag(name) if f != nil { f.Default(value) } } } // Bind sets active flags with their default values from the configuration file(s). func (c *Resolver) Bind(app *kingpin.Application, args []string) error { // Parse the command line arguments to get the selected command. pc, err := app.ParseContext(args) if err != nil { return err } c.setDefault(app) if pc.SelectedCommand != nil { c.setDefault(pc.SelectedCommand) } return nil } prometheus-alertmanager-0.28.1+ds/cli/config/config_test.go000066400000000000000000000102211476331240200237040ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package config import ( "io" "testing" "github.com/alecthomas/kingpin/v2" ) var ( url *string id *string ) func newApp() *kingpin.Application { url = new(string) id = new(string) app := kingpin.New("app", "") app.UsageWriter(io.Discard) app.ErrorWriter(io.Discard) app.Terminate(nil) app.Flag("url", "").StringVar(url) silence := app.Command("silence", "") silenceDel := silence.Command("del", "") silenceDel.Flag("id", "").StringVar(id) return app } func TestNewConfigResolver(t *testing.T) { for i, tc := range []struct { files []string err bool }{ {[]string{}, false}, {[]string{"testdata/amtool.good1.yml", "testdata/amtool.good2.yml"}, false}, {[]string{"testdata/amtool.good1.yml", "testdata/not_existing.yml"}, false}, {[]string{"testdata/amtool.good1.yml", "testdata/amtool.bad.yml"}, true}, } { _, err := NewResolver(tc.files, nil) if tc.err != (err != nil) { if tc.err { t.Fatalf("%d: expected error but got none", i) } else { t.Fatalf("%d: expected no error but got %v", i, err) } } } } type expectFn func() func TestConfigResolverBind(t *testing.T) { expectURL := func(expected string) expectFn { return func() { if *url != expected { t.Fatalf("expected url flag %q but got %q", expected, *url) } } } expectID := func(expected string) expectFn { return func() { if *id != expected { t.Fatalf("expected ID flag %q but got %q", expected, *id) } } } for i, tc := range []struct { files []string legacyFlags map[string]string args []string err bool expCmd string expFns []expectFn }{ { []string{"testdata/amtool.good1.yml", "testdata/amtool.good2.yml"}, nil, []string{}, true, "", []expectFn{expectURL("url1")}, // from amtool.good1.yml }, { []string{"testdata/amtool.good2.yml"}, nil, []string{}, true, "", []expectFn{expectURL("url2")}, // from amtool.good2.yml }, { []string{"testdata/amtool.good1.yml", "testdata/amtool.good2.yml"}, nil, []string{"--url", "url3"}, true, "", []expectFn{expectURL("url3")}, // from command line }, { []string{"testdata/amtool.good1.yml", "testdata/amtool.good2.yml"}, map[string]string{"old-id": "id"}, []string{"silence", "del"}, false, "silence del", []expectFn{ expectURL("url1"), // from amtool.good1.yml expectID("id1"), // from amtool.good1.yml }, }, { []string{"testdata/amtool.good2.yml"}, map[string]string{"old-id": "id"}, []string{"silence", "del"}, false, "silence del", []expectFn{ expectURL("url2"), // from amtool.good2.yml expectID("id2"), // from amtool.good2.yml }, }, { []string{"testdata/amtool.good2.yml"}, map[string]string{"old-id": "id"}, []string{"silence", "del", "--id", "id3"}, false, "silence del", []expectFn{ expectURL("url2"), // from amtool.good2.yml expectID("id3"), // from command line }, }, } { r, err := NewResolver(tc.files, tc.legacyFlags) if err != nil { t.Fatalf("%d: expected no error but got: %v", i, err) } app := newApp() err = r.Bind(app, tc.args) if err != nil { t.Fatalf("%d: expected Bind() to return no error but got: %v", i, err) } cmd, err := app.Parse(tc.args) if tc.err != (err != nil) { if tc.err { t.Fatalf("%d: expected Parse() to return an error but got none", i) } else { t.Fatalf("%d: expected Parse() to return no error but got: %v", i, err) } } if cmd != tc.expCmd { t.Fatalf("%d: expected command %q but got %q", i, tc.expCmd, cmd) } for _, fn := range tc.expFns { fn() } } } prometheus-alertmanager-0.28.1+ds/cli/config/http_config.go000066400000000000000000000022051476331240200237070ustar00rootroot00000000000000// Copyright 2021 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package config import ( "os" "path/filepath" promconfig "github.com/prometheus/common/config" "gopkg.in/yaml.v2" ) // LoadHTTPConfigFile returns HTTPClientConfig for the given http_config file. func LoadHTTPConfigFile(filename string) (*promconfig.HTTPClientConfig, error) { b, err := os.ReadFile(filename) if err != nil { return nil, err } httpConfig := &promconfig.HTTPClientConfig{} err = yaml.UnmarshalStrict(b, httpConfig) if err != nil { return nil, err } httpConfig.SetDirectory(filepath.Dir(filepath.Dir(filename))) return httpConfig, nil } prometheus-alertmanager-0.28.1+ds/cli/config/testdata/000077500000000000000000000000001476331240200226665ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/cli/config/testdata/amtool.bad.yml000066400000000000000000000000041476331240200254230ustar00rootroot00000000000000BAD prometheus-alertmanager-0.28.1+ds/cli/config/testdata/amtool.good1.yml000066400000000000000000000000221476331240200257060ustar00rootroot00000000000000id: id1 url: url1 prometheus-alertmanager-0.28.1+ds/cli/config/testdata/amtool.good2.yml000066400000000000000000000000261476331240200257130ustar00rootroot00000000000000old-id: id2 url: url2 prometheus-alertmanager-0.28.1+ds/cli/config/testdata/http_config.bad.yml000066400000000000000000000000351476331240200264400ustar00rootroot00000000000000authorization: type: Basic prometheus-alertmanager-0.28.1+ds/cli/config/testdata/http_config.basic_auth.good.yml000066400000000000000000000000621476331240200307430ustar00rootroot00000000000000basic_auth: username: user password: password prometheus-alertmanager-0.28.1+ds/cli/config/testdata/http_config.good.yml000066400000000000000000000002211476331240200266370ustar00rootroot00000000000000authorization: type: Bearer credentials: theanswertothegreatquestionoflifetheuniverseandeverythingisfortytwo proxy_url: "http://remote.host" prometheus-alertmanager-0.28.1+ds/cli/format/000077500000000000000000000000001476331240200211005ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/cli/format/format.go000066400000000000000000000040611476331240200227200ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package format import ( "io" "time" "github.com/alecthomas/kingpin/v2" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/pkg/labels" ) const DefaultDateFormat = "2006-01-02 15:04:05 MST" var dateFormat *string func InitFormatFlags(app *kingpin.Application) { dateFormat = app.Flag("date.format", "Format of date output").Default(DefaultDateFormat).String() } // Formatter needs to be implemented for each new output formatter. type Formatter interface { SetOutput(io.Writer) FormatSilences([]models.GettableSilence) error FormatAlerts([]*models.GettableAlert) error FormatConfig(*models.AlertmanagerStatus) error FormatClusterStatus(status *models.ClusterStatus) error } // Formatters is a map of cli argument names to formatter interface object. var Formatters = map[string]Formatter{} func FormatDate(input strfmt.DateTime) string { return time.Time(input).Format(*dateFormat) } func labelsMatcher(m models.Matcher) *labels.Matcher { var t labels.MatchType // Support for older alertmanager releases, which did not support isEqual. if m.IsEqual == nil { isEqual := true m.IsEqual = &isEqual } switch { case !*m.IsRegex && *m.IsEqual: t = labels.MatchEqual case !*m.IsRegex && !*m.IsEqual: t = labels.MatchNotEqual case *m.IsRegex && *m.IsEqual: t = labels.MatchRegexp case *m.IsRegex && !*m.IsEqual: t = labels.MatchNotRegexp } return &labels.Matcher{Type: t, Name: *m.Name, Value: *m.Value} } prometheus-alertmanager-0.28.1+ds/cli/format/format_extended.go000066400000000000000000000103011476331240200245720ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package format import ( "fmt" "io" "os" "sort" "strings" "text/tabwriter" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/pkg/labels" ) type ExtendedFormatter struct { writer io.Writer } func init() { Formatters["extended"] = &ExtendedFormatter{writer: os.Stdout} } func (formatter *ExtendedFormatter) SetOutput(writer io.Writer) { formatter.writer = writer } // FormatSilences formats the silences into a readable string. func (formatter *ExtendedFormatter) FormatSilences(silences []models.GettableSilence) error { w := tabwriter.NewWriter(formatter.writer, 0, 0, 2, ' ', 0) sort.Sort(ByEndAt(silences)) fmt.Fprintln(w, "ID\tMatchers\tStarts At\tEnds At\tUpdated At\tCreated By\tComment\t") for _, silence := range silences { fmt.Fprintf( w, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n", *silence.ID, extendedFormatMatchers(silence.Matchers), FormatDate(*silence.Silence.StartsAt), FormatDate(*silence.Silence.EndsAt), FormatDate(*silence.UpdatedAt), *silence.CreatedBy, *silence.Comment, ) } return w.Flush() } // FormatAlerts formats the alerts into a readable string. func (formatter *ExtendedFormatter) FormatAlerts(alerts []*models.GettableAlert) error { w := tabwriter.NewWriter(formatter.writer, 0, 0, 2, ' ', 0) sort.Sort(ByStartsAt(alerts)) fmt.Fprintln(w, "Labels\tAnnotations\tStarts At\tEnds At\tGenerator URL\tState\t") for _, alert := range alerts { fmt.Fprintf( w, "%s\t%s\t%s\t%s\t%s\t%s\t\n", extendedFormatLabels(alert.Labels), extendedFormatAnnotations(alert.Annotations), FormatDate(*alert.StartsAt), FormatDate(*alert.EndsAt), alert.GeneratorURL, *alert.Status.State, ) } return w.Flush() } // FormatConfig formats the alertmanager status information into a readable string. func (formatter *ExtendedFormatter) FormatConfig(status *models.AlertmanagerStatus) error { fmt.Fprintln(formatter.writer, status.Config.Original) fmt.Fprintln(formatter.writer, "buildUser", status.VersionInfo.BuildUser) fmt.Fprintln(formatter.writer, "goVersion", status.VersionInfo.GoVersion) fmt.Fprintln(formatter.writer, "revision", status.VersionInfo.Revision) fmt.Fprintln(formatter.writer, "version", status.VersionInfo.Version) fmt.Fprintln(formatter.writer, "branch", status.VersionInfo.Branch) fmt.Fprintln(formatter.writer, "buildDate", status.VersionInfo.BuildDate) fmt.Fprintln(formatter.writer, "uptime", status.Uptime) return nil } // FormatClusterStatus formats the cluster status with peers into a readable string. func (formatter *ExtendedFormatter) FormatClusterStatus(status *models.ClusterStatus) error { w := tabwriter.NewWriter(formatter.writer, 0, 0, 2, ' ', 0) fmt.Fprintf(w, "Cluster Status:\t%s\nNode Name:\t%s\n\n", *status.Status, status.Name, ) fmt.Fprintln(w, "Address\tName") sort.Sort(ByAddress(status.Peers)) for _, peer := range status.Peers { fmt.Fprintf( w, "%s\t%s\t\n", *peer.Address, *peer.Name, ) } return w.Flush() } func extendedFormatLabels(labels models.LabelSet) string { output := []string{} for name, value := range labels { output = append(output, fmt.Sprintf("%s=\"%s\"", name, value)) } sort.Strings(output) return strings.Join(output, " ") } func extendedFormatAnnotations(labels models.LabelSet) string { output := []string{} for name, value := range labels { output = append(output, fmt.Sprintf("%s=\"%s\"", name, value)) } sort.Strings(output) return strings.Join(output, " ") } func extendedFormatMatchers(matchers models.Matchers) string { lms := labels.Matchers{} for _, matcher := range matchers { lms = append(lms, labelsMatcher(*matcher)) } return lms.String() } prometheus-alertmanager-0.28.1+ds/cli/format/format_json.go000066400000000000000000000030201476331240200237430ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package format import ( "encoding/json" "io" "os" "github.com/prometheus/alertmanager/api/v2/models" ) type JSONFormatter struct { writer io.Writer } func init() { Formatters["json"] = &JSONFormatter{writer: os.Stdout} } func (formatter *JSONFormatter) SetOutput(writer io.Writer) { formatter.writer = writer } func (formatter *JSONFormatter) FormatSilences(silences []models.GettableSilence) error { enc := json.NewEncoder(formatter.writer) return enc.Encode(silences) } func (formatter *JSONFormatter) FormatAlerts(alerts []*models.GettableAlert) error { enc := json.NewEncoder(formatter.writer) return enc.Encode(alerts) } func (formatter *JSONFormatter) FormatConfig(status *models.AlertmanagerStatus) error { enc := json.NewEncoder(formatter.writer) return enc.Encode(status) } func (formatter *JSONFormatter) FormatClusterStatus(status *models.ClusterStatus) error { enc := json.NewEncoder(formatter.writer) return enc.Encode(status) } prometheus-alertmanager-0.28.1+ds/cli/format/format_simple.go000066400000000000000000000051201476331240200242660ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package format import ( "fmt" "io" "os" "sort" "strings" "text/tabwriter" "github.com/prometheus/alertmanager/api/v2/models" ) type SimpleFormatter struct { writer io.Writer } func init() { Formatters["simple"] = &SimpleFormatter{writer: os.Stdout} } func (formatter *SimpleFormatter) SetOutput(writer io.Writer) { formatter.writer = writer } func (formatter *SimpleFormatter) FormatSilences(silences []models.GettableSilence) error { w := tabwriter.NewWriter(formatter.writer, 0, 0, 2, ' ', 0) sort.Sort(ByEndAt(silences)) fmt.Fprintln(w, "ID\tMatchers\tEnds At\tCreated By\tComment\t") for _, silence := range silences { fmt.Fprintf( w, "%s\t%s\t%s\t%s\t%s\t\n", *silence.ID, simpleFormatMatchers(silence.Matchers), FormatDate(*silence.EndsAt), *silence.CreatedBy, *silence.Comment, ) } return w.Flush() } func (formatter *SimpleFormatter) FormatAlerts(alerts []*models.GettableAlert) error { w := tabwriter.NewWriter(formatter.writer, 0, 0, 2, ' ', 0) sort.Sort(ByStartsAt(alerts)) fmt.Fprintln(w, "Alertname\tStarts At\tSummary\tState\t") for _, alert := range alerts { fmt.Fprintf( w, "%s\t%s\t%s\t%s\t\n", alert.Labels["alertname"], FormatDate(*alert.StartsAt), alert.Annotations["summary"], *alert.Status.State, ) } return w.Flush() } func (formatter *SimpleFormatter) FormatConfig(status *models.AlertmanagerStatus) error { fmt.Fprintln(formatter.writer, *status.Config.Original) return nil } func (formatter *SimpleFormatter) FormatClusterStatus(status *models.ClusterStatus) error { w := tabwriter.NewWriter(formatter.writer, 0, 0, 2, ' ', 0) fmt.Fprintf(w, "Cluster Status:\t%s\nNode Name:\t%s\n", *status.Status, status.Name, ) return w.Flush() } func simpleFormatMatchers(matchers models.Matchers) string { output := []string{} for _, matcher := range matchers { output = append(output, simpleFormatMatcher(*matcher)) } return strings.Join(output, " ") } func simpleFormatMatcher(m models.Matcher) string { return labelsMatcher(m).String() } prometheus-alertmanager-0.28.1+ds/cli/format/sort.go000066400000000000000000000032441476331240200224210ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package format import ( "bytes" "net" "strconv" "time" "github.com/prometheus/alertmanager/api/v2/models" ) type ByEndAt []models.GettableSilence func (s ByEndAt) Len() int { return len(s) } func (s ByEndAt) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s ByEndAt) Less(i, j int) bool { return time.Time(*s[i].Silence.EndsAt).Before(time.Time(*s[j].Silence.EndsAt)) } type ByStartsAt []*models.GettableAlert func (s ByStartsAt) Len() int { return len(s) } func (s ByStartsAt) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s ByStartsAt) Less(i, j int) bool { return time.Time(*s[i].StartsAt).Before(time.Time(*s[j].StartsAt)) } type ByAddress []*models.PeerStatus func (s ByAddress) Len() int { return len(s) } func (s ByAddress) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s ByAddress) Less(i, j int) bool { ip1, port1, _ := net.SplitHostPort(*s[i].Address) ip2, port2, _ := net.SplitHostPort(*s[j].Address) if ip1 == ip2 { p1, _ := strconv.Atoi(port1) p2, _ := strconv.Atoi(port2) return p1 < p2 } return bytes.Compare(net.ParseIP(ip1), net.ParseIP(ip2)) < 0 } prometheus-alertmanager-0.28.1+ds/cli/root.go000066400000000000000000000156221476331240200211300ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "fmt" "net/url" "os" "path" "strings" "time" "github.com/alecthomas/kingpin/v2" clientruntime "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" promconfig "github.com/prometheus/common/config" "github.com/prometheus/common/promslog" "github.com/prometheus/common/version" "golang.org/x/mod/semver" "github.com/prometheus/alertmanager/api/v2/client" "github.com/prometheus/alertmanager/cli/config" "github.com/prometheus/alertmanager/cli/format" "github.com/prometheus/alertmanager/featurecontrol" "github.com/prometheus/alertmanager/matcher/compat" ) var ( verbose bool alertmanagerURL *url.URL output string timeout time.Duration httpConfigFile string versionCheck bool featureFlags string configFiles = []string{os.ExpandEnv("$HOME/.config/amtool/config.yml"), "/etc/amtool/config.yml"} legacyFlags = map[string]string{"comment_required": "require-comment"} ) func initMatchersCompat(_ *kingpin.ParseContext) error { promslogConfig := &promslog.Config{Writer: os.Stdout} if verbose { promslogConfig.Level = &promslog.AllowedLevel{} _ = promslogConfig.Level.Set("debug") } logger := promslog.New(promslogConfig) featureConfig, err := featurecontrol.NewFlags(logger, featureFlags) if err != nil { kingpin.Fatalf("error parsing the feature flag list: %v\n", err) } compat.InitFromFlags(logger, featureConfig) return nil } func requireAlertManagerURL(pc *kingpin.ParseContext) error { // Return without error if any help flag is set. for _, elem := range pc.Elements { f, ok := elem.Clause.(*kingpin.FlagClause) if !ok { continue } name := f.Model().Name if name == "help" || name == "help-long" || name == "help-man" { return nil } } if alertmanagerURL == nil { kingpin.Fatalf("required flag --alertmanager.url not provided") } return nil } const ( defaultAmHost = "localhost" defaultAmPort = "9093" defaultAmApiv2path = "/api/v2" ) // NewAlertmanagerClient initializes an alertmanager client with the given URL. func NewAlertmanagerClient(amURL *url.URL) *client.AlertmanagerAPI { address := defaultAmHost + ":" + defaultAmPort schemes := []string{"http"} if amURL.Host != "" { address = amURL.Host // URL documents host as host or host:port } if amURL.Scheme != "" { schemes = []string{amURL.Scheme} } cr := clientruntime.New(address, path.Join(amURL.Path, defaultAmApiv2path), schemes) if amURL.User != nil && httpConfigFile != "" { kingpin.Fatalf("basic authentication and http.config.file are mutually exclusive") } if amURL.User != nil { password, _ := amURL.User.Password() cr.DefaultAuthentication = clientruntime.BasicAuth(amURL.User.Username(), password) } if httpConfigFile != "" { var err error httpConfig, _, err := promconfig.LoadHTTPConfigFile(httpConfigFile) if err != nil { kingpin.Fatalf("failed to load HTTP config file: %v", err) } httpclient, err := promconfig.NewClientFromConfig(*httpConfig, "amtool") if err != nil { kingpin.Fatalf("failed to create a new HTTP client: %v", err) } cr = clientruntime.NewWithClient(address, path.Join(amURL.Path, defaultAmApiv2path), schemes, httpclient) } c := client.New(cr, strfmt.Default) if !versionCheck { return c } status, err := c.General.GetStatus(nil) if err != nil || status.Payload.VersionInfo == nil || version.Version == "" { // We can not get version info, or we do not know our own version. Let amtool continue. return c } if semver.MajorMinor("v"+*status.Payload.VersionInfo.Version) != semver.MajorMinor("v"+version.Version) { fmt.Fprintf(os.Stderr, "Warning: amtool version (%s) and alertmanager version (%s) are different.\n", version.Version, *status.Payload.VersionInfo.Version) } return c } // Execute is the main function for the amtool command. func Execute() { app := kingpin.New("amtool", helpRoot).UsageWriter(os.Stdout) format.InitFormatFlags(app) app.Flag("verbose", "Verbose running information").Short('v').BoolVar(&verbose) app.Flag("alertmanager.url", "Alertmanager to talk to").URLVar(&alertmanagerURL) app.Flag("output", "Output formatter (simple, extended, json)").Short('o').Default("simple").EnumVar(&output, "simple", "extended", "json") app.Flag("timeout", "Timeout for the executed command").Default("30s").DurationVar(&timeout) app.Flag("http.config.file", "HTTP client configuration file for amtool to connect to Alertmanager.").PlaceHolder("").ExistingFileVar(&httpConfigFile) app.Flag("version-check", "Check alertmanager version. Use --no-version-check to disable.").Default("true").BoolVar(&versionCheck) app.Flag("enable-feature", fmt.Sprintf("Experimental features to enable, comma separated. Valid options: %s", strings.Join(featurecontrol.AllowedFlags, ", "))).Default("").StringVar(&featureFlags) app.Version(version.Print("amtool")) app.GetFlag("help").Short('h') app.UsageTemplate(kingpin.CompactUsageTemplate) resolver, err := config.NewResolver(configFiles, legacyFlags) if err != nil { kingpin.Fatalf("could not load config file: %v\n", err) } configureAlertCmd(app) configureSilenceCmd(app) configureCheckConfigCmd(app) configureClusterCmd(app) configureConfigCmd(app) configureTemplateCmd(app) app.Action(initMatchersCompat) err = resolver.Bind(app, os.Args[1:]) if err != nil { kingpin.Fatalf("%v\n", err) } _, err = app.Parse(os.Args[1:]) if err != nil { kingpin.Fatalf("%v\n", err) } } const ( helpRoot = `View and modify the current Alertmanager state. Config File: The alertmanager tool will read a config file in YAML format from one of two default config locations: $HOME/.config/amtool/config.yml or /etc/amtool/config.yml All flags can be given in the config file, but the following are the suited for static configuration: alertmanager.url Set a default alertmanager url for each request author Set a default author value for new silences. If this argument is not specified then the username will be used require-comment Bool, whether to require a comment on silence creation. Defaults to true output Set a default output type. Options are (simple, extended, json) date.format Sets the output format for dates. Defaults to "2006-01-02 15:04:05 MST" http.config.file HTTP client configuration file for amtool to connect to Alertmanager. The format is https://prometheus.io/docs/alerting/latest/configuration/#http_config. ` ) prometheus-alertmanager-0.28.1+ds/cli/routing.go000066400000000000000000000065271476331240200216400ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "bytes" "context" "fmt" "github.com/alecthomas/kingpin/v2" "github.com/xlab/treeprint" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/dispatch" ) type routingShow struct { configFile string labels []string expectedReceivers string debugTree bool } const ( routingHelp = `Prints alert routing tree Will print whole routing tree in form of ASCII tree view. Routing is loaded from a local configuration file or a running Alertmanager configuration. Specifying --config.file takes precedence over --alertmanager.url. Example: ./amtool config routes [show] --config.file=doc/examples/simple.yml ` branchSlugSeparator = " " ) func configureRoutingCmd(app *kingpin.CmdClause) { var ( c = &routingShow{} routingCmd = app.Command("routes", routingHelp) routingShowCmd = routingCmd.Command("show", routingHelp).Default() configFlag = routingCmd.Flag("config.file", "Config file to be tested.") ) configFlag.ExistingFileVar(&c.configFile) routingShowCmd.Action(execWithTimeout(c.routingShowAction)) configureRoutingTestCmd(routingCmd, c) } func (c *routingShow) routingShowAction(ctx context.Context, _ *kingpin.ParseContext) error { // Load configuration from file or URL. cfg, err := loadAlertmanagerConfig(ctx, alertmanagerURL, c.configFile) if err != nil { kingpin.Fatalf("%s", err) return err } route := dispatch.NewRoute(cfg.Route, nil) tree := treeprint.New() convertRouteToTree(route, tree) fmt.Println("Routing tree:") fmt.Println(tree.String()) return nil } func getRouteTreeSlug(route *dispatch.Route, showContinue, showReceiver bool) string { var branchSlug bytes.Buffer if route.Matchers.Len() == 0 { branchSlug.WriteString("default-route") } else { branchSlug.WriteString(route.Matchers.String()) } if route.Continue && showContinue { branchSlug.WriteString(branchSlugSeparator) branchSlug.WriteString("continue: true") } if showReceiver { branchSlug.WriteString(branchSlugSeparator) branchSlug.WriteString("receiver: ") branchSlug.WriteString(route.RouteOpts.Receiver) } return branchSlug.String() } func convertRouteToTree(route *dispatch.Route, tree treeprint.Tree) { branch := tree.AddBranch(getRouteTreeSlug(route, true, true)) for _, r := range route.Routes { convertRouteToTree(r, branch) } } func getMatchingTree(route *dispatch.Route, tree treeprint.Tree, lset models.LabelSet) { final := true branch := tree.AddBranch(getRouteTreeSlug(route, false, false)) for _, r := range route.Routes { if r.Matchers.Matches(convertClientToCommonLabelSet(lset)) { getMatchingTree(r, branch, lset) final = false if !r.Continue { break } } } if final { branch.SetValue(getRouteTreeSlug(route, false, true)) } } prometheus-alertmanager-0.28.1+ds/cli/silence.go000066400000000000000000000021261476331240200215620ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "github.com/alecthomas/kingpin/v2" ) // configureSilenceCmd represents the silence command. func configureSilenceCmd(app *kingpin.Application) { silenceCmd := app.Command("silence", "Add, expire or view silences. For more information and additional flags see query help").PreAction(requireAlertManagerURL) configureSilenceAddCmd(silenceCmd) configureSilenceExpireCmd(silenceCmd) configureSilenceImportCmd(silenceCmd) configureSilenceQueryCmd(silenceCmd) configureSilenceUpdateCmd(silenceCmd) } prometheus-alertmanager-0.28.1+ds/cli/silence_add.go000066400000000000000000000117751476331240200224040ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "context" "errors" "fmt" "os/user" "strconv" "time" "github.com/alecthomas/kingpin/v2" "github.com/go-openapi/strfmt" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/api/v2/client/silence" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/matcher/compat" "github.com/prometheus/alertmanager/pkg/labels" ) func username() string { user, err := user.Current() if err != nil { return "" } return user.Username } type silenceAddCmd struct { author string requireComment bool duration string start string end string comment string matchers []string } const silenceAddHelp = `Add a new alertmanager silence Amtool uses a simplified Prometheus syntax to represent silences. The non-option section of arguments constructs a list of "Matcher Groups" that will be used to create a number of silences. The following examples will attempt to show this behaviour in action: amtool silence add alertname=foo node=bar This statement will add a silence that matches alerts with the alertname=foo and node=bar label value pairs set. amtool silence add foo node=bar If alertname is omitted and the first argument does not contain a '=' or a '=~' then it will be assumed to be the value of the alertname pair. amtool silence add 'alertname=~foo.*' As well as direct equality, regex matching is also supported. The '=~' syntax (similar to Prometheus) is used to represent a regex match. Regex matching can be used in combination with a direct match. ` func configureSilenceAddCmd(cc *kingpin.CmdClause) { var ( c = &silenceAddCmd{} addCmd = cc.Command("add", silenceAddHelp) ) addCmd.Flag("author", "Username for CreatedBy field").Short('a').Default(username()).StringVar(&c.author) addCmd.Flag("require-comment", "Require comment to be set").Hidden().Default("true").BoolVar(&c.requireComment) addCmd.Flag("duration", "Duration of silence").Short('d').Default("1h").StringVar(&c.duration) addCmd.Flag("start", "Set when the silence should start. RFC3339 format 2006-01-02T15:04:05-07:00").StringVar(&c.start) addCmd.Flag("end", "Set when the silence should end (overwrites duration). RFC3339 format 2006-01-02T15:04:05-07:00").StringVar(&c.end) addCmd.Flag("comment", "A comment to help describe the silence").Short('c').StringVar(&c.comment) addCmd.Arg("matcher-groups", "Query filter").StringsVar(&c.matchers) addCmd.Action(execWithTimeout(c.add)) } func (c *silenceAddCmd) add(ctx context.Context, _ *kingpin.ParseContext) error { var err error if len(c.matchers) > 0 { // If the parser fails then we likely don't have a (=|=~|!=|!~) so lets // assume that the user wants alertname= and prepend `alertname=` // to the front. _, err := compat.Matcher(c.matchers[0], "cli") if err != nil { c.matchers[0] = fmt.Sprintf("alertname=%s", strconv.Quote(c.matchers[0])) } } matchers := make([]labels.Matcher, 0, len(c.matchers)) for _, s := range c.matchers { m, err := compat.Matcher(s, "cli") if err != nil { return err } matchers = append(matchers, *m) } if len(matchers) < 1 { return fmt.Errorf("no matchers specified") } var startsAt time.Time if c.start != "" { startsAt, err = time.Parse(time.RFC3339, c.start) if err != nil { return err } } else { startsAt = time.Now().UTC() } var endsAt time.Time if c.end != "" { endsAt, err = time.Parse(time.RFC3339, c.end) if err != nil { return err } } else { d, err := model.ParseDuration(c.duration) if err != nil { return err } if d == 0 { return fmt.Errorf("silence duration must be greater than 0") } endsAt = startsAt.UTC().Add(time.Duration(d)) } if startsAt.After(endsAt) { return errors.New("silence cannot start after it ends") } if c.requireComment && c.comment == "" { return errors.New("comment required by config") } start := strfmt.DateTime(startsAt) end := strfmt.DateTime(endsAt) ps := &models.PostableSilence{ Silence: models.Silence{ Matchers: TypeMatchers(matchers), StartsAt: &start, EndsAt: &end, CreatedBy: &c.author, Comment: &c.comment, }, } silenceParams := silence.NewPostSilencesParams().WithContext(ctx). WithSilence(ps) amclient := NewAlertmanagerClient(alertmanagerURL) postOk, err := amclient.Silence.PostSilences(silenceParams) if err != nil { return err } _, err = fmt.Println(postOk.Payload.SilenceID) return err } prometheus-alertmanager-0.28.1+ds/cli/silence_expire.go000066400000000000000000000030171476331240200231360ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "context" "errors" "github.com/alecthomas/kingpin/v2" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/client/silence" ) type silenceExpireCmd struct { ids []string } func configureSilenceExpireCmd(cc *kingpin.CmdClause) { var ( c = &silenceExpireCmd{} expireCmd = cc.Command("expire", "expire an alertmanager silence") ) expireCmd.Arg("silence-ids", "Ids of silences to expire").StringsVar(&c.ids) expireCmd.Action(execWithTimeout(c.expire)) } func (c *silenceExpireCmd) expire(ctx context.Context, _ *kingpin.ParseContext) error { if len(c.ids) < 1 { return errors.New("no silence IDs specified") } amclient := NewAlertmanagerClient(alertmanagerURL) for _, id := range c.ids { params := silence.NewDeleteSilenceParams().WithContext(ctx) params.SilenceID = strfmt.UUID(id) _, err := amclient.Silence.DeleteSilence(params) if err != nil { return err } } return nil } prometheus-alertmanager-0.28.1+ds/cli/silence_import.go000066400000000000000000000072061476331240200231600ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "context" "encoding/json" "errors" "fmt" "os" "sync" kingpin "github.com/alecthomas/kingpin/v2" "github.com/prometheus/alertmanager/api/v2/client/silence" "github.com/prometheus/alertmanager/api/v2/models" ) type silenceImportCmd struct { force bool workers int file string } const silenceImportHelp = `Import alertmanager silences from JSON file or stdin This command can be used to bulk import silences from a JSON file created by query command. For example: amtool silence query -o json foo > foo.json amtool silence import foo.json JSON data can also come from stdin if no param is specified. ` func configureSilenceImportCmd(cc *kingpin.CmdClause) { var ( c = &silenceImportCmd{} importCmd = cc.Command("import", silenceImportHelp) ) importCmd.Flag("force", "Force adding new silences even if it already exists").Short('f').BoolVar(&c.force) importCmd.Flag("worker", "Number of concurrent workers to use for import").Short('w').Default("8").IntVar(&c.workers) importCmd.Arg("input-file", "JSON file with silences").ExistingFileVar(&c.file) importCmd.Action(execWithTimeout(c.bulkImport)) } func addSilenceWorker(ctx context.Context, sclient silence.ClientService, silencec <-chan *models.PostableSilence, errc chan<- error) { for s := range silencec { sid := s.ID params := silence.NewPostSilencesParams().WithContext(ctx).WithSilence(s) postOk, err := sclient.PostSilences(params) var e *silence.PostSilencesNotFound if errors.As(err, &e) { // silence doesn't exists yet, retry to create as a new one params.Silence.ID = "" postOk, err = sclient.PostSilences(params) } if err != nil { fmt.Fprintf(os.Stderr, "Error adding silence id='%v': %v\n", sid, err) } else { fmt.Println(postOk.Payload.SilenceID) } errc <- err } } func (c *silenceImportCmd) bulkImport(ctx context.Context, _ *kingpin.ParseContext) error { input := os.Stdin var err error if c.file != "" { input, err = os.Open(c.file) if err != nil { return err } defer input.Close() } dec := json.NewDecoder(input) // read open square bracket _, err = dec.Token() if err != nil { return fmt.Errorf("couldn't unmarshal input data, is it JSON?: %w", err) } amclient := NewAlertmanagerClient(alertmanagerURL) silencec := make(chan *models.PostableSilence, 100) errc := make(chan error, 100) var wg sync.WaitGroup for w := 0; w < c.workers; w++ { wg.Add(1) go func() { addSilenceWorker(ctx, amclient.Silence, silencec, errc) wg.Done() }() } errCount := 0 go func() { for err := range errc { if err != nil { errCount++ } } }() count := 0 for dec.More() { var s models.PostableSilence err := dec.Decode(&s) if err != nil { return fmt.Errorf("couldn't unmarshal input data, is it JSON?: %w", err) } if c.force { // reset the silence ID so Alertmanager will always create new silence s.ID = "" } silencec <- &s count++ } close(silencec) wg.Wait() close(errc) if errCount > 0 { return fmt.Errorf("couldn't import %v out of %v silences", errCount, count) } return nil } prometheus-alertmanager-0.28.1+ds/cli/silence_query.go000066400000000000000000000125261476331240200230140ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "context" "errors" "fmt" "strconv" "time" kingpin "github.com/alecthomas/kingpin/v2" "github.com/prometheus/alertmanager/api/v2/client/silence" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/cli/format" "github.com/prometheus/alertmanager/matcher/compat" ) type silenceQueryCmd struct { expired bool quiet bool createdBy string ID string matchers []string within time.Duration } const querySilenceHelp = `Query Alertmanager silences. Amtool has a simplified prometheus query syntax, but contains robust support for bash variable expansions. The non-option section of arguments constructs a list of "Matcher Groups" that will be used to filter your query. The following examples will attempt to show this behaviour in action: amtool silence query alertname=foo node=bar This query will match all silences with the alertname=foo and node=bar label value pairs set. amtool silence query foo node=bar If alertname is omitted and the first argument does not contain a '=' or a '=~' then it will be assumed to be the value of the alertname pair. amtool silence query 'alertname=~foo.*' As well as direct equality, regex matching is also supported. The '=~' syntax (similar to prometheus) is used to represent a regex match. Regex matching can be used in combination with a direct match. In addition to filtering by silence labels, one can also query for silences that are due to expire soon with the "--within" parameter. In the event that you want to preemptively act upon expiring silences by either fixing them or extending them. For example: amtool silence query --within 8h returns all the silences due to expire within the next 8 hours. This syntax can also be combined with the label based filtering above for more flexibility. The "--expired" parameter returns only expired silences. Used in combination with "--within=TIME", amtool returns the silences that expired within the preceding duration. amtool silence query --within 2h --expired returns all silences that expired within the preceding 2 hours. ` func configureSilenceQueryCmd(cc *kingpin.CmdClause) { var ( c = &silenceQueryCmd{} queryCmd = cc.Command("query", querySilenceHelp).Default() ) queryCmd.Flag("expired", "Show expired silences instead of active").BoolVar(&c.expired) queryCmd.Flag("quiet", "Only show silence ids").Short('q').BoolVar(&c.quiet) queryCmd.Flag("created-by", "Show silences that belong to this creator").StringVar(&c.createdBy) queryCmd.Flag("id", "Get a single silence by its ID").StringVar(&c.ID) queryCmd.Arg("matcher-groups", "Query filter").StringsVar(&c.matchers) queryCmd.Flag("within", "Show silences that will expire or have expired within a duration").DurationVar(&c.within) queryCmd.Action(execWithTimeout(c.query)) } func (c *silenceQueryCmd) query(ctx context.Context, _ *kingpin.ParseContext) error { if len(c.matchers) > 0 { // If the parser fails then we likely don't have a (=|=~|!=|!~) so lets // assume that the user wants alertname= and prepend `alertname=` // to the front. _, err := compat.Matcher(c.matchers[0], "cli") if err != nil { c.matchers[0] = fmt.Sprintf("alertname=%s", strconv.Quote(c.matchers[0])) } } silenceParams := silence.NewGetSilencesParams().WithContext(ctx).WithFilter(c.matchers) amclient := NewAlertmanagerClient(alertmanagerURL) getOk, err := amclient.Silence.GetSilences(silenceParams) if err != nil { return err } displaySilences := []models.GettableSilence{} for _, silence := range getOk.Payload { // skip expired silences if --expired is not set if !c.expired && time.Time(*silence.EndsAt).Before(time.Now()) { continue } // skip active silences if --expired is set if c.expired && time.Time(*silence.EndsAt).After(time.Now()) { continue } // skip active silences expiring after "--within" if !c.expired && int64(c.within) > 0 && time.Time(*silence.EndsAt).After(time.Now().UTC().Add(c.within)) { continue } // skip silences that expired before "--within" if c.expired && int64(c.within) > 0 && time.Time(*silence.EndsAt).Before(time.Now().UTC().Add(-c.within)) { continue } // Skip silences if the author doesn't match. if c.createdBy != "" && *silence.CreatedBy != c.createdBy { continue } // Skip silences if the ID doesn't match. if c.ID != "" && c.ID != *silence.ID { continue } displaySilences = append(displaySilences, *silence) } if c.quiet { for _, silence := range displaySilences { fmt.Println(*silence.ID) } } else { formatter, found := format.Formatters[output] if !found { return errors.New("unknown output formatter") } if err := formatter.FormatSilences(displaySilences); err != nil { return fmt.Errorf("error formatting silences: %w", err) } } return nil } prometheus-alertmanager-0.28.1+ds/cli/silence_update.go000066400000000000000000000076351476331240200231360ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "context" "errors" "fmt" "time" "github.com/alecthomas/kingpin/v2" "github.com/go-openapi/strfmt" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/api/v2/client/silence" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/cli/format" ) type silenceUpdateCmd struct { quiet bool duration string start string end string comment string ids []string } func configureSilenceUpdateCmd(cc *kingpin.CmdClause) { var ( c = &silenceUpdateCmd{} updateCmd = cc.Command("update", "Update silences") ) updateCmd.Flag("quiet", "Only show silence ids").Short('q').BoolVar(&c.quiet) updateCmd.Flag("duration", "Duration of silence").Short('d').StringVar(&c.duration) updateCmd.Flag("start", "Set when the silence should start. RFC3339 format 2006-01-02T15:04:05-07:00").StringVar(&c.start) updateCmd.Flag("end", "Set when the silence should end (overwrites duration). RFC3339 format 2006-01-02T15:04:05-07:00").StringVar(&c.end) updateCmd.Flag("comment", "A comment to help describe the silence").Short('c').StringVar(&c.comment) updateCmd.Arg("update-ids", "Silence IDs to update").StringsVar(&c.ids) updateCmd.Action(execWithTimeout(c.update)) } func (c *silenceUpdateCmd) update(ctx context.Context, _ *kingpin.ParseContext) error { if len(c.ids) < 1 { return fmt.Errorf("no silence IDs specified") } amclient := NewAlertmanagerClient(alertmanagerURL) var updatedSilences []models.GettableSilence for _, silenceID := range c.ids { params := silence.NewGetSilenceParams() params.SilenceID = strfmt.UUID(silenceID) response, err := amclient.Silence.GetSilence(params) if err != nil { return err } sil := response.Payload if c.start != "" { startsAtTime, err := time.Parse(time.RFC3339, c.start) if err != nil { return err } startsAt := strfmt.DateTime(startsAtTime) sil.StartsAt = &startsAt } if c.end != "" { endsAtTime, err := time.Parse(time.RFC3339, c.end) if err != nil { return err } endsAt := strfmt.DateTime(endsAtTime) sil.EndsAt = &endsAt } else if c.duration != "" { d, err := model.ParseDuration(c.duration) if err != nil { return err } if d == 0 { return fmt.Errorf("silence duration must be greater than 0") } endsAt := strfmt.DateTime(time.Time(*sil.StartsAt).UTC().Add(time.Duration(d))) sil.EndsAt = &endsAt } if time.Time(*sil.StartsAt).After(time.Time(*sil.EndsAt)) { return errors.New("silence cannot start after it ends") } if c.comment != "" { sil.Comment = &c.comment } ps := &models.PostableSilence{ ID: *sil.ID, Silence: sil.Silence, } amclient := NewAlertmanagerClient(alertmanagerURL) silenceParams := silence.NewPostSilencesParams().WithContext(ctx).WithSilence(ps) postOk, err := amclient.Silence.PostSilences(silenceParams) if err != nil { return err } sil.ID = &postOk.Payload.SilenceID updatedSilences = append(updatedSilences, *sil) } if c.quiet { for _, silence := range updatedSilences { fmt.Println(silence.ID) } } else { formatter, found := format.Formatters[output] if !found { return fmt.Errorf("unknown output formatter") } if err := formatter.FormatSilences(updatedSilences); err != nil { return fmt.Errorf("error formatting silences: %w", err) } } return nil } prometheus-alertmanager-0.28.1+ds/cli/template.go000066400000000000000000000015431476331240200217550ustar00rootroot00000000000000// Copyright 2021 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "github.com/alecthomas/kingpin/v2" ) // configureTemplateCmd represents the template command. func configureTemplateCmd(app *kingpin.Application) { templateCmd := app.Command("template", "Render template files.") configureTemplateRenderCmd(templateCmd) } prometheus-alertmanager-0.28.1+ds/cli/template_render.go000066400000000000000000000104641476331240200233160ustar00rootroot00000000000000// Copyright 2021 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "context" "encoding/json" "fmt" "io" "os" "time" "github.com/alecthomas/kingpin/v2" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/template" ) var defaultData = template.Data{ Receiver: "receiver", Status: "alertstatus", Alerts: template.Alerts{ template.Alert{ Status: string(model.AlertFiring), Labels: template.KV{ "label1": "value1", "label2": "value2", "instance": "foo.bar:1234", "commonlabelkey1": "commonlabelvalue1", "commonlabelkey2": "commonlabelvalue2", }, Annotations: template.KV{ "annotation1": "value1", "annotation2": "value2", "commonannotationkey1": "commonannotationvalue1", "commonannotationkey2": "commonannotationvalue2", }, StartsAt: time.Now().Add(-5 * time.Minute), EndsAt: time.Now(), GeneratorURL: "https://generatorurl.com", Fingerprint: "fingerprint1", }, template.Alert{ Status: string(model.AlertResolved), Labels: template.KV{ "foo": "bar", "baz": "qux", "commonlabelkey1": "commonlabelvalue1", "commonlabelkey2": "commonlabelvalue2", }, Annotations: template.KV{ "aaa": "bbb", "ccc": "ddd", "commonannotationkey1": "commonannotationvalue1", "commonannotationkey2": "commonannotationvalue2", }, StartsAt: time.Now().Add(-10 * time.Minute), EndsAt: time.Now(), GeneratorURL: "https://generatorurl.com", Fingerprint: "fingerprint2", }, }, GroupLabels: template.KV{ "grouplabelkey1": "grouplabelvalue1", "grouplabelkey2": "grouplabelvalue2", }, CommonLabels: template.KV{ "commonlabelkey1": "commonlabelvalue1", "commonlabelkey2": "commonlabelvalue2", }, CommonAnnotations: template.KV{ "commonannotationkey1": "commonannotationvalue1", "commonannotationkey2": "commonannotationvalue2", }, ExternalURL: "https://example.com", } type templateRenderCmd struct { templateFilesGlobs []string templateType string templateText string templateData *os.File } func configureTemplateRenderCmd(cc *kingpin.CmdClause) { var ( c = &templateRenderCmd{} renderCmd = cc.Command("render", "Render a given definition in a template file to standard output.") ) renderCmd.Flag("template.glob", "Glob of paths that will be expanded and used for rendering.").Required().StringsVar(&c.templateFilesGlobs) renderCmd.Flag("template.text", "The template that will be rendered.").Required().StringVar(&c.templateText) renderCmd.Flag("template.type", "The type of the template. Can be either text (default) or html.").EnumVar(&c.templateType, "html", "text") renderCmd.Flag("template.data", "Full path to a file which contains the data of the alert(-s) with which the --template.text will be rendered. Must be in JSON. File must be formatted according to the following layout: https://pkg.go.dev/github.com/prometheus/alertmanager/template#Data. If none has been specified then a predefined, simple alert will be used for rendering.").FileVar(&c.templateData) renderCmd.Action(execWithTimeout(c.render)) } func (c *templateRenderCmd) render(ctx context.Context, _ *kingpin.ParseContext) error { tmpl, err := template.FromGlobs(c.templateFilesGlobs) if err != nil { return err } f := tmpl.ExecuteTextString if c.templateType == "html" { f = tmpl.ExecuteHTMLString } var data template.Data if c.templateData == nil { data = defaultData } else { content, err := io.ReadAll(c.templateData) if err != nil { return err } if err := json.Unmarshal(content, &data); err != nil { return err } } rendered, err := f(c.templateText, data) if err != nil { return err } fmt.Print(rendered) return nil } prometheus-alertmanager-0.28.1+ds/cli/test_routing.go000066400000000000000000000072241476331240200226720ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "context" "fmt" "os" "strings" "github.com/alecthomas/kingpin/v2" "github.com/xlab/treeprint" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/dispatch" "github.com/prometheus/alertmanager/matcher/compat" "github.com/prometheus/alertmanager/pkg/labels" ) const routingTestHelp = `Test alert routing Will return receiver names which the alert with given labels resolves to. If the labelset resolves to multiple receivers, they are printed out in order as defined in the routing tree. Routing is loaded from a local configuration file or a running Alertmanager configuration. Specifying --config.file takes precedence over --alertmanager.url. Example: ./amtool config routes test --config.file=doc/examples/simple.yml --verify.receivers=team-DB-pager service=database ` func configureRoutingTestCmd(cc *kingpin.CmdClause, c *routingShow) { routingTestCmd := cc.Command("test", routingTestHelp) routingTestCmd.Flag("verify.receivers", "Checks if specified receivers matches resolved receivers. The command fails if the labelset does not route to the specified receivers.").StringVar(&c.expectedReceivers) routingTestCmd.Flag("tree", "Prints out matching routes tree.").BoolVar(&c.debugTree) routingTestCmd.Arg("labels", "List of labels to be tested against the configured routes.").StringsVar(&c.labels) routingTestCmd.Action(execWithTimeout(c.routingTestAction)) } // resolveAlertReceivers returns list of receiver names which given LabelSet resolves to. func resolveAlertReceivers(mainRoute *dispatch.Route, labels *models.LabelSet) ([]string, error) { var ( finalRoutes []*dispatch.Route receivers []string ) finalRoutes = mainRoute.Match(convertClientToCommonLabelSet(*labels)) for _, r := range finalRoutes { receivers = append(receivers, r.RouteOpts.Receiver) } return receivers, nil } func printMatchingTree(mainRoute *dispatch.Route, ls models.LabelSet) { tree := treeprint.New() getMatchingTree(mainRoute, tree, ls) fmt.Println("Matching routes:") fmt.Println(tree.String()) fmt.Print("\n") } func (c *routingShow) routingTestAction(ctx context.Context, _ *kingpin.ParseContext) error { cfg, err := loadAlertmanagerConfig(ctx, alertmanagerURL, c.configFile) if err != nil { kingpin.Fatalf("%v\n", err) return err } mainRoute := dispatch.NewRoute(cfg.Route, nil) // Parse labels to LabelSet. ls := make(models.LabelSet, len(c.labels)) for _, l := range c.labels { matcher, err := compat.Matcher(l, "cli") if err != nil { kingpin.Fatalf("Failed to parse labels: %v\n", err) } if matcher.Type != labels.MatchEqual { kingpin.Fatalf("%s\n", "Labels must be specified as key=value pairs") } ls[matcher.Name] = matcher.Value } if c.debugTree { printMatchingTree(mainRoute, ls) } receivers, err := resolveAlertReceivers(mainRoute, &ls) receiversSlug := strings.Join(receivers, ",") fmt.Printf("%s\n", receiversSlug) if c.expectedReceivers != "" && c.expectedReceivers != receiversSlug { fmt.Printf("WARNING: Expected receivers did not match resolved receivers.\n") os.Exit(1) } return err } prometheus-alertmanager-0.28.1+ds/cli/test_routing_test.go000066400000000000000000000044061476331240200237300ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "fmt" "reflect" "strings" "testing" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/dispatch" ) type routingTestDefinition struct { alert models.LabelSet expectedReceivers []string configFile string } func checkResolvedReceivers(mainRoute *dispatch.Route, ls models.LabelSet, expectedReceivers []string) error { resolvedReceivers, err := resolveAlertReceivers(mainRoute, &ls) if err != nil { return err } if !reflect.DeepEqual(expectedReceivers, resolvedReceivers) { return fmt.Errorf("unexpected routing result want: `%s`, got: `%s`", strings.Join(expectedReceivers, ","), strings.Join(resolvedReceivers, ",")) } return nil } func TestRoutingTest(t *testing.T) { tests := []*routingTestDefinition{ {configFile: "testdata/conf.routing.yml", alert: models.LabelSet{"test": "1"}, expectedReceivers: []string{"test1"}}, {configFile: "testdata/conf.routing.yml", alert: models.LabelSet{"test": "2"}, expectedReceivers: []string{"test1", "test2"}}, {configFile: "testdata/conf.routing-reverted.yml", alert: models.LabelSet{"test": "2"}, expectedReceivers: []string{"test2", "test1"}}, {configFile: "testdata/conf.routing.yml", alert: models.LabelSet{"test": "volovina"}, expectedReceivers: []string{"default"}}, } for _, test := range tests { cfg, err := config.LoadFile(test.configFile) if err != nil { t.Fatalf("failed to load test configuration: %v", err) } mainRoute := dispatch.NewRoute(cfg.Route, nil) err = checkResolvedReceivers(mainRoute, test.alert, test.expectedReceivers) if err != nil { t.Fatalf("%v", err) } fmt.Println(" OK") } } prometheus-alertmanager-0.28.1+ds/cli/testdata/000077500000000000000000000000001476331240200214215ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/cli/testdata/conf.bad.yml000066400000000000000000000000041476331240200236100ustar00rootroot00000000000000BAD prometheus-alertmanager-0.28.1+ds/cli/testdata/conf.good.yml000066400000000000000000000002271476331240200240210ustar00rootroot00000000000000global: smtp_smarthost: 'localhost:25' templates: - '/etc/alertmanager/template/*.tmpl' route: receiver: default receivers: - name: default prometheus-alertmanager-0.28.1+ds/cli/testdata/conf.routing-reverted.yml000066400000000000000000000005311476331240200263740ustar00rootroot00000000000000global: smtp_smarthost: 'localhost:25' templates: - '/etc/alertmanager/template/*.tmpl' route: receiver: default routes: - match: test: 2 receiver: test2 continue: true - match_re: test: ^[12]$ receiver: test1 continue: true receivers: - name: default - name: test1 - name: test2 prometheus-alertmanager-0.28.1+ds/cli/testdata/conf.routing.yml000066400000000000000000000005041476331240200245560ustar00rootroot00000000000000global: smtp_smarthost: 'localhost:25' templates: - '/etc/alertmanager/template/*.tmpl' route: receiver: default routes: - match_re: test: ^[12]$ receiver: test1 continue: true - match: test: 2 receiver: test2 receivers: - name: default - name: test1 - name: test2 prometheus-alertmanager-0.28.1+ds/cli/utils.go000066400000000000000000000072641476331240200213100ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cli import ( "context" "errors" "fmt" "net/url" "os" "github.com/alecthomas/kingpin/v2" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/api/v2/client/general" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/pkg/labels" ) // getRemoteAlertmanagerConfigStatus returns status responsecontaining configuration from remote Alertmanager. func getRemoteAlertmanagerConfigStatus(ctx context.Context, alertmanagerURL *url.URL) (*models.AlertmanagerStatus, error) { amclient := NewAlertmanagerClient(alertmanagerURL) params := general.NewGetStatusParams().WithContext(ctx) getOk, err := amclient.General.GetStatus(params) if err != nil { return nil, err } return getOk.Payload, nil } func checkRoutingConfigInputFlags(alertmanagerURL *url.URL, configFile string) { if alertmanagerURL != nil && configFile != "" { fmt.Fprintln(os.Stderr, "Warning: --config.file flag overrides the --alertmanager.url.") } if alertmanagerURL == nil && configFile == "" { kingpin.Fatalf("You have to specify one of --config.file or --alertmanager.url flags.") } } func loadAlertmanagerConfig(ctx context.Context, alertmanagerURL *url.URL, configFile string) (*config.Config, error) { checkRoutingConfigInputFlags(alertmanagerURL, configFile) if configFile != "" { cfg, err := config.LoadFile(configFile) if err != nil { return nil, err } return cfg, nil } if alertmanagerURL == nil { return nil, errors.New("failed to get Alertmanager configuration") } configStatus, err := getRemoteAlertmanagerConfigStatus(ctx, alertmanagerURL) if err != nil { return nil, err } return config.Load(*configStatus.Config.Original) } // convertClientToCommonLabelSet converts client.LabelSet to model.Labelset. func convertClientToCommonLabelSet(cls models.LabelSet) model.LabelSet { mls := make(model.LabelSet, len(cls)) for ln, lv := range cls { mls[model.LabelName(ln)] = model.LabelValue(lv) } return mls } // TypeMatchers only valid for when you are going to add a silence. func TypeMatchers(matchers []labels.Matcher) models.Matchers { typeMatchers := make(models.Matchers, len(matchers)) for i, matcher := range matchers { typeMatchers[i] = TypeMatcher(matcher) } return typeMatchers } // TypeMatcher only valid for when you are going to add a silence. func TypeMatcher(matcher labels.Matcher) *models.Matcher { name := matcher.Name value := matcher.Value typeMatcher := models.Matcher{ Name: &name, Value: &value, } isEqual := (matcher.Type == labels.MatchEqual) || (matcher.Type == labels.MatchRegexp) isRegex := (matcher.Type == labels.MatchRegexp) || (matcher.Type == labels.MatchNotRegexp) typeMatcher.IsEqual = &isEqual typeMatcher.IsRegex = &isRegex return &typeMatcher } // Helper function for adding the ctx with timeout into an action. func execWithTimeout(fn func(context.Context, *kingpin.ParseContext) error) func(*kingpin.ParseContext) error { return func(x *kingpin.ParseContext) error { ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() return fn(ctx, x) } } prometheus-alertmanager-0.28.1+ds/cluster/000077500000000000000000000000001476331240200205225ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/cluster/advertise.go000066400000000000000000000053711476331240200230450ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cluster import ( "errors" "fmt" "net" "github.com/hashicorp/go-sockaddr" ) type getIPFunc func() (string, error) // These are overridden in unit tests to mock the sockaddr functions. var ( getPrivateAddress getIPFunc = sockaddr.GetPrivateIP getPublicAddress getIPFunc = sockaddr.GetPublicIP ) // calculateAdvertiseAddress attempts to clone logic from deep within memberlist // (NetTransport.FinalAdvertiseAddr) in order to surface its conclusions to the // application, so we can provide more actionable error messages if the user has // inadvertently misconfigured their cluster. // // https://github.com/hashicorp/memberlist/blob/022f081/net_transport.go#L126 func calculateAdvertiseAddress(bindAddr, advertiseAddr string, allowInsecureAdvertise bool) (net.IP, error) { if advertiseAddr != "" { ip := net.ParseIP(advertiseAddr) if ip == nil { return nil, fmt.Errorf("failed to parse advertise addr '%s'", advertiseAddr) } if ip4 := ip.To4(); ip4 != nil { ip = ip4 } return ip, nil } if isAny(bindAddr) { return discoverAdvertiseAddress(allowInsecureAdvertise) } ip := net.ParseIP(bindAddr) if ip == nil { return nil, fmt.Errorf("failed to parse bind addr '%s'", bindAddr) } return ip, nil } // discoverAdvertiseAddress will attempt to get a single IP address to use as // the advertise address when one is not explicitly provided. It defaults to // using a private IP address, and if not found then using a public IP if // insecure advertising is allowed. func discoverAdvertiseAddress(allowInsecureAdvertise bool) (net.IP, error) { addr, err := getPrivateAddress() if err != nil { return nil, fmt.Errorf("failed to get private IP: %w", err) } if addr == "" && !allowInsecureAdvertise { return nil, errors.New("no private IP found, explicit advertise addr not provided") } if addr == "" { addr, err = getPublicAddress() if err != nil { return nil, fmt.Errorf("failed to get public IP: %w", err) } if addr == "" { return nil, errors.New("no private/public IP found, explicit advertise addr not provided") } } ip := net.ParseIP(addr) if ip == nil { return nil, fmt.Errorf("failed to parse discovered IP '%s'", addr) } return ip, nil } prometheus-alertmanager-0.28.1+ds/cluster/advertise_test.go000066400000000000000000000077121476331240200241050ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cluster import ( "errors" "net" "testing" "github.com/stretchr/testify/require" ) func TestCalculateAdvertiseAddress(t *testing.T) { old := getPrivateAddress defer func() { getPrivateAddress = old }() cases := []struct { name string privateIPFn getIPFunc publicIPFn getIPFunc bind, advertise string allowInsecureAdvertise bool expectedIP net.IP err bool }{ { name: "use provided bind address", bind: "192.0.2.1", advertise: "", expectedIP: net.ParseIP("192.0.2.1"), err: false, }, { name: "use provided advertise address", bind: "192.0.2.1", advertise: "192.0.2.2", expectedIP: net.ParseIP("192.0.2.2"), err: false, }, { name: "discover private ip address", privateIPFn: func() (string, error) { return "192.0.2.1", nil }, bind: "0.0.0.0", advertise: "", expectedIP: net.ParseIP("192.0.2.1"), err: false, }, { name: "error if getPrivateAddress errors", privateIPFn: func() (string, error) { return "", errors.New("some error") }, bind: "0.0.0.0", advertise: "", err: true, }, { name: "error if getPrivateAddress returns an invalid address", privateIPFn: func() (string, error) { return "invalid", nil }, bind: "0.0.0.0", advertise: "", err: true, }, { name: "error if getPrivateAddress returns an empty address", privateIPFn: func() (string, error) { return "", nil }, bind: "0.0.0.0", advertise: "", err: true, }, { name: "discover public advertise address", privateIPFn: func() (string, error) { return "", nil }, publicIPFn: func() (string, error) { return "192.0.2.1", nil }, bind: "0.0.0.0", advertise: "", allowInsecureAdvertise: true, expectedIP: net.ParseIP("192.0.2.1"), err: false, }, { name: "error if getPublicAddress errors", privateIPFn: func() (string, error) { return "", nil }, publicIPFn: func() (string, error) { return "", errors.New("some error") }, bind: "0.0.0.0", advertise: "", allowInsecureAdvertise: true, err: true, }, { name: "error if getPublicAddress returns an invalid address", privateIPFn: func() (string, error) { return "", nil }, publicIPFn: func() (string, error) { return "invalid", nil }, bind: "0.0.0.0", advertise: "", allowInsecureAdvertise: true, err: true, }, { name: "error if getPublicAddress returns an empty address", privateIPFn: func() (string, error) { return "", nil }, publicIPFn: func() (string, error) { return "", nil }, bind: "0.0.0.0", advertise: "", allowInsecureAdvertise: true, err: true, }, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { getPrivateAddress = c.privateIPFn getPublicAddress = c.publicIPFn got, err := calculateAdvertiseAddress(c.bind, c.advertise, c.allowInsecureAdvertise) if c.err { require.Error(t, err) return } require.NoError(t, err) require.Equal(t, c.expectedIP.String(), got.String()) }) } } prometheus-alertmanager-0.28.1+ds/cluster/channel.go000066400000000000000000000117731476331240200224720ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cluster import ( "log/slog" "sync" "time" "github.com/gogo/protobuf/proto" "github.com/hashicorp/memberlist" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/alertmanager/cluster/clusterpb" ) // Channel allows clients to send messages for a specific state type that will be // broadcasted in a best-effort manner. type Channel struct { key string send func([]byte) peers func() []*memberlist.Node sendOversize func(*memberlist.Node, []byte) error msgc chan []byte logger *slog.Logger oversizeGossipMessageFailureTotal prometheus.Counter oversizeGossipMessageDroppedTotal prometheus.Counter oversizeGossipMessageSentTotal prometheus.Counter oversizeGossipDuration prometheus.Histogram } // NewChannel creates a new Channel struct, which handles sending normal and // oversize messages to peers. func NewChannel( key string, send func([]byte), peers func() []*memberlist.Node, sendOversize func(*memberlist.Node, []byte) error, logger *slog.Logger, stopc chan struct{}, reg prometheus.Registerer, ) *Channel { oversizeGossipMessageFailureTotal := prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_oversized_gossip_message_failure_total", Help: "Number of oversized gossip message sends that failed.", ConstLabels: prometheus.Labels{"key": key}, }) oversizeGossipMessageSentTotal := prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_oversized_gossip_message_sent_total", Help: "Number of oversized gossip message sent.", ConstLabels: prometheus.Labels{"key": key}, }) oversizeGossipMessageDroppedTotal := prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_oversized_gossip_message_dropped_total", Help: "Number of oversized gossip messages that were dropped due to a full message queue.", ConstLabels: prometheus.Labels{"key": key}, }) oversizeGossipDuration := prometheus.NewHistogram(prometheus.HistogramOpts{ Name: "alertmanager_oversize_gossip_message_duration_seconds", Help: "Duration of oversized gossip message requests.", ConstLabels: prometheus.Labels{"key": key}, Buckets: prometheus.DefBuckets, NativeHistogramBucketFactor: 1.1, NativeHistogramMaxBucketNumber: 100, NativeHistogramMinResetDuration: 1 * time.Hour, }) reg.MustRegister(oversizeGossipDuration, oversizeGossipMessageFailureTotal, oversizeGossipMessageDroppedTotal, oversizeGossipMessageSentTotal) c := &Channel{ key: key, send: send, peers: peers, logger: logger, msgc: make(chan []byte, 200), sendOversize: sendOversize, oversizeGossipMessageFailureTotal: oversizeGossipMessageFailureTotal, oversizeGossipMessageDroppedTotal: oversizeGossipMessageDroppedTotal, oversizeGossipMessageSentTotal: oversizeGossipMessageSentTotal, oversizeGossipDuration: oversizeGossipDuration, } go c.handleOverSizedMessages(stopc) return c } // handleOverSizedMessages prevents memberlist from opening too many parallel // TCP connections to its peers. func (c *Channel) handleOverSizedMessages(stopc chan struct{}) { var wg sync.WaitGroup for { select { case b := <-c.msgc: for _, n := range c.peers() { wg.Add(1) go func(n *memberlist.Node) { defer wg.Done() c.oversizeGossipMessageSentTotal.Inc() start := time.Now() if err := c.sendOversize(n, b); err != nil { c.logger.Debug("failed to send reliable", "key", c.key, "node", n, "err", err) c.oversizeGossipMessageFailureTotal.Inc() return } c.oversizeGossipDuration.Observe(time.Since(start).Seconds()) }(n) } wg.Wait() case <-stopc: return } } } // Broadcast enqueues a message for broadcasting. func (c *Channel) Broadcast(b []byte) { b, err := proto.Marshal(&clusterpb.Part{Key: c.key, Data: b}) if err != nil { return } if OversizedMessage(b) { select { case c.msgc <- b: default: c.logger.Debug("oversized gossip channel full") c.oversizeGossipMessageDroppedTotal.Inc() } } else { c.send(b) } } // OversizedMessage indicates whether or not the byte payload should be sent // via TCP. func OversizedMessage(b []byte) bool { return len(b) > MaxGossipPacketSize/2 } prometheus-alertmanager-0.28.1+ds/cluster/channel_test.go000066400000000000000000000041471476331240200235260ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cluster import ( "bytes" "context" "io" "os" "testing" "github.com/hashicorp/memberlist" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/promslog" ) func TestNormalMessagesGossiped(t *testing.T) { var sent bool c := newChannel( func(_ []byte) { sent = true }, func() []*memberlist.Node { return nil }, func(_ *memberlist.Node, _ []byte) error { return nil }, ) c.Broadcast([]byte{}) if sent != true { t.Fatalf("small message not sent") } } func TestOversizedMessagesGossiped(t *testing.T) { var sent bool ctx, cancel := context.WithCancel(context.Background()) c := newChannel( func(_ []byte) {}, func() []*memberlist.Node { return []*memberlist.Node{{}} }, func(_ *memberlist.Node, _ []byte) error { sent = true; cancel(); return nil }, ) f, err := os.Open("/dev/zero") if err != nil { t.Fatalf("failed to open /dev/zero: %v", err) } defer f.Close() buf := new(bytes.Buffer) toCopy := int64(800) if n, err := io.CopyN(buf, f, toCopy); err != nil { t.Fatalf("failed to copy bytes: %v", err) } else if n != toCopy { t.Fatalf("wanted to copy %d bytes, only copied %d", toCopy, n) } c.Broadcast(buf.Bytes()) <-ctx.Done() if sent != true { t.Fatalf("oversized message not sent") } } func newChannel( send func([]byte), peers func() []*memberlist.Node, sendOversize func(*memberlist.Node, []byte) error, ) *Channel { return NewChannel( "test", send, peers, sendOversize, promslog.NewNopLogger(), make(chan struct{}), prometheus.NewRegistry(), ) } prometheus-alertmanager-0.28.1+ds/cluster/cluster.go000066400000000000000000000537361476331240200225500ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cluster import ( "context" "errors" "fmt" "log/slog" "math/rand" "net" "sort" "strconv" "strings" "sync" "time" "github.com/hashicorp/memberlist" "github.com/oklog/ulid" "github.com/prometheus/client_golang/prometheus" ) // ClusterPeer represents a single Peer in a gossip cluster. type ClusterPeer interface { // Name returns the unique identifier of this peer in the cluster. Name() string // Status returns a status string representing the peer state. Status() string // Peers returns the peer nodes in the cluster. Peers() []ClusterMember } // ClusterMember interface that represents node peers in a cluster. type ClusterMember interface { // Name returns the name of the node Name() string // Address returns the IP address of the node Address() string } // ClusterChannel supports state broadcasting across peers. type ClusterChannel interface { Broadcast([]byte) } // Peer is a single peer in a gossip cluster. type Peer struct { mlist *memberlist.Memberlist delegate *delegate resolvedPeers []string mtx sync.RWMutex states map[string]State stopc chan struct{} readyc chan struct{} peerLock sync.RWMutex peers map[string]peer failedPeers []peer knownPeers []string advertiseAddr string failedReconnectionsCounter prometheus.Counter reconnectionsCounter prometheus.Counter failedRefreshCounter prometheus.Counter refreshCounter prometheus.Counter peerLeaveCounter prometheus.Counter peerUpdateCounter prometheus.Counter peerJoinCounter prometheus.Counter logger *slog.Logger } // peer is an internal type used for bookkeeping. It holds the state of peers // in the cluster. type peer struct { status PeerStatus leaveTime time.Time *memberlist.Node } // PeerStatus is the state that a peer is in. type PeerStatus int const ( StatusNone PeerStatus = iota StatusAlive StatusFailed ) func (s PeerStatus) String() string { switch s { case StatusNone: return "none" case StatusAlive: return "alive" case StatusFailed: return "failed" default: panic(fmt.Sprintf("unknown PeerStatus: %d", s)) } } const ( DefaultPushPullInterval = 60 * time.Second DefaultGossipInterval = 200 * time.Millisecond DefaultTCPTimeout = 10 * time.Second DefaultProbeTimeout = 500 * time.Millisecond DefaultProbeInterval = 1 * time.Second DefaultReconnectInterval = 10 * time.Second DefaultReconnectTimeout = 6 * time.Hour DefaultRefreshInterval = 15 * time.Second MaxGossipPacketSize = 1400 ) func Create( l *slog.Logger, reg prometheus.Registerer, bindAddr string, advertiseAddr string, knownPeers []string, waitIfEmpty bool, pushPullInterval time.Duration, gossipInterval time.Duration, tcpTimeout time.Duration, probeTimeout time.Duration, probeInterval time.Duration, tlsTransportConfig *TLSTransportConfig, allowInsecureAdvertise bool, label string, ) (*Peer, error) { bindHost, bindPortStr, err := net.SplitHostPort(bindAddr) if err != nil { return nil, fmt.Errorf("invalid listen address: %w", err) } bindPort, err := strconv.Atoi(bindPortStr) if err != nil { return nil, fmt.Errorf("address %s: invalid port: %w", bindAddr, err) } var advertiseHost string var advertisePort int if advertiseAddr != "" { var advertisePortStr string advertiseHost, advertisePortStr, err = net.SplitHostPort(advertiseAddr) if err != nil { return nil, fmt.Errorf("invalid advertise address: %w", err) } advertisePort, err = strconv.Atoi(advertisePortStr) if err != nil { return nil, fmt.Errorf("address %s: invalid port: %w", advertiseAddr, err) } } resolvedPeers, err := resolvePeers(context.Background(), knownPeers, advertiseAddr, &net.Resolver{}, waitIfEmpty) if err != nil { return nil, fmt.Errorf("resolve peers: %w", err) } l.Debug("resolved peers to following addresses", "peers", strings.Join(resolvedPeers, ",")) // Initial validation of user-specified advertise address. addr, err := calculateAdvertiseAddress(bindHost, advertiseHost, allowInsecureAdvertise) if err != nil { l.Warn("couldn't deduce an advertise address: " + err.Error()) } else if hasNonlocal(resolvedPeers) && isUnroutable(addr.String()) { l.Warn("this node advertises itself on an unroutable address", "addr", addr.String()) l.Warn("this node will be unreachable in the cluster") l.Warn("provide --cluster.advertise-address as a routable IP address or hostname") } else if isAny(bindAddr) && advertiseHost == "" { // memberlist doesn't advertise properly when the bind address is empty or unspecified. l.Info("setting advertise address explicitly", "addr", addr.String(), "port", bindPort) advertiseHost = addr.String() advertisePort = bindPort } // TODO(fabxc): generate human-readable but random names? name, err := ulid.New(ulid.Now(), rand.New(rand.NewSource(time.Now().UnixNano()))) if err != nil { return nil, err } p := &Peer{ states: map[string]State{}, stopc: make(chan struct{}), readyc: make(chan struct{}), logger: l, peers: map[string]peer{}, resolvedPeers: resolvedPeers, knownPeers: knownPeers, } p.register(reg, name.String()) retransmit := len(knownPeers) / 2 if retransmit < 3 { retransmit = 3 } p.delegate = newDelegate(l, reg, p, retransmit) cfg := memberlist.DefaultLANConfig() cfg.Name = name.String() cfg.BindAddr = bindHost cfg.BindPort = bindPort cfg.Delegate = p.delegate cfg.Ping = p.delegate cfg.Alive = p.delegate cfg.Events = p.delegate cfg.GossipInterval = gossipInterval cfg.PushPullInterval = pushPullInterval cfg.TCPTimeout = tcpTimeout cfg.ProbeTimeout = probeTimeout cfg.ProbeInterval = probeInterval cfg.Logger = slog.NewLogLogger(l.Handler(), slog.LevelDebug) cfg.GossipNodes = retransmit cfg.UDPBufferSize = MaxGossipPacketSize cfg.Label = label if advertiseHost != "" { cfg.AdvertiseAddr = advertiseHost cfg.AdvertisePort = advertisePort p.setInitialFailed(resolvedPeers, fmt.Sprintf("%s:%d", advertiseHost, advertisePort)) } else { p.setInitialFailed(resolvedPeers, bindAddr) } if tlsTransportConfig != nil { l.Info("using TLS for gossip") cfg.Transport, err = NewTLSTransport(context.Background(), l, reg, cfg.BindAddr, cfg.BindPort, tlsTransportConfig) if err != nil { return nil, fmt.Errorf("tls transport: %w", err) } } ml, err := memberlist.Create(cfg) if err != nil { return nil, fmt.Errorf("create memberlist: %w", err) } p.mlist = ml return p, nil } func (p *Peer) Join( reconnectInterval time.Duration, reconnectTimeout time.Duration, ) error { n, err := p.mlist.Join(p.resolvedPeers) if err != nil { p.logger.Warn("failed to join cluster", "err", err) if reconnectInterval != 0 { p.logger.Info(fmt.Sprintf("will retry joining cluster every %v", reconnectInterval.String())) } } else { p.logger.Debug("joined cluster", "peers", n) } if reconnectInterval != 0 { go p.runPeriodicTask( reconnectInterval, p.reconnect, ) } if reconnectTimeout != 0 { go p.runPeriodicTask( 5*time.Minute, func() { p.removeFailedPeers(reconnectTimeout) }, ) } go p.runPeriodicTask( DefaultRefreshInterval, p.refresh, ) return err } // All peers are initially added to the failed list. They will be removed from // this list in peerJoin when making their initial connection. func (p *Peer) setInitialFailed(peers []string, myAddr string) { if len(peers) == 0 { return } p.peerLock.Lock() defer p.peerLock.Unlock() now := time.Now() for _, peerAddr := range peers { if peerAddr == myAddr { // Don't add ourselves to the initially failing list, // we don't connect to ourselves. continue } host, port, err := net.SplitHostPort(peerAddr) if err != nil { continue } ip := net.ParseIP(host) if ip == nil { // Don't add textual addresses since memberlist only advertises // dotted decimal or IPv6 addresses. continue } portUint, err := strconv.ParseUint(port, 10, 16) if err != nil { continue } pr := peer{ status: StatusFailed, leaveTime: now, Node: &memberlist.Node{ Addr: ip, Port: uint16(portUint), }, } p.failedPeers = append(p.failedPeers, pr) p.peers[peerAddr] = pr } } func (p *Peer) register(reg prometheus.Registerer, name string) { peerInfo := prometheus.NewGauge( prometheus.GaugeOpts{ Name: "alertmanager_cluster_peer_info", Help: "A metric with a constant '1' value labeled by peer name.", ConstLabels: prometheus.Labels{"peer": name}, }, ) peerInfo.Set(1) clusterFailedPeers := prometheus.NewGaugeFunc(prometheus.GaugeOpts{ Name: "alertmanager_cluster_failed_peers", Help: "Number indicating the current number of failed peers in the cluster.", }, func() float64 { p.peerLock.RLock() defer p.peerLock.RUnlock() return float64(len(p.failedPeers)) }) p.failedReconnectionsCounter = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_cluster_reconnections_failed_total", Help: "A counter of the number of failed cluster peer reconnection attempts.", }) p.reconnectionsCounter = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_cluster_reconnections_total", Help: "A counter of the number of cluster peer reconnections.", }) p.failedRefreshCounter = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_cluster_refresh_join_failed_total", Help: "A counter of the number of failed cluster peer joined attempts via refresh.", }) p.refreshCounter = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_cluster_refresh_join_total", Help: "A counter of the number of cluster peer joined via refresh.", }) p.peerLeaveCounter = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_cluster_peers_left_total", Help: "A counter of the number of peers that have left.", }) p.peerUpdateCounter = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_cluster_peers_update_total", Help: "A counter of the number of peers that have updated metadata.", }) p.peerJoinCounter = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_cluster_peers_joined_total", Help: "A counter of the number of peers that have joined.", }) reg.MustRegister(peerInfo, clusterFailedPeers, p.failedReconnectionsCounter, p.reconnectionsCounter, p.peerLeaveCounter, p.peerUpdateCounter, p.peerJoinCounter, p.refreshCounter, p.failedRefreshCounter) } func (p *Peer) runPeriodicTask(d time.Duration, f func()) { tick := time.NewTicker(d) defer tick.Stop() for { select { case <-p.stopc: return case <-tick.C: f() } } } func (p *Peer) removeFailedPeers(timeout time.Duration) { p.peerLock.Lock() defer p.peerLock.Unlock() now := time.Now() keep := make([]peer, 0, len(p.failedPeers)) for _, pr := range p.failedPeers { if pr.leaveTime.Add(timeout).After(now) { keep = append(keep, pr) } else { p.logger.Debug("failed peer has timed out", "peer", pr.Node, "addr", pr.Address()) delete(p.peers, pr.Name) } } p.failedPeers = keep } func (p *Peer) reconnect() { p.peerLock.RLock() failedPeers := p.failedPeers p.peerLock.RUnlock() logger := p.logger.With("msg", "reconnect") for _, pr := range failedPeers { // No need to do book keeping on failedPeers here. If a // reconnect is successful, they will be announced in // peerJoin(). if _, err := p.mlist.Join([]string{pr.Address()}); err != nil { p.failedReconnectionsCounter.Inc() logger.Debug("failure", "peer", pr.Node, "addr", pr.Address(), "err", err) } else { p.reconnectionsCounter.Inc() logger.Debug("success", "peer", pr.Node, "addr", pr.Address()) } } } func (p *Peer) refresh() { logger := p.logger.With("msg", "refresh") resolvedPeers, err := resolvePeers(context.Background(), p.knownPeers, p.advertiseAddr, &net.Resolver{}, false) if err != nil { logger.Debug(fmt.Sprintf("%v", p.knownPeers), "err", err) return } members := p.mlist.Members() for _, peer := range resolvedPeers { var isPeerFound bool for _, member := range members { if member.Address() == peer { isPeerFound = true break } } if !isPeerFound { if _, err := p.mlist.Join([]string{peer}); err != nil { p.failedRefreshCounter.Inc() logger.Warn("failure", "addr", peer, "err", err) } else { p.refreshCounter.Inc() logger.Debug("success", "addr", peer) } } } } func (p *Peer) peerJoin(n *memberlist.Node) { p.peerLock.Lock() defer p.peerLock.Unlock() var oldStatus PeerStatus pr, ok := p.peers[n.Address()] if !ok { oldStatus = StatusNone pr = peer{ status: StatusAlive, Node: n, } } else { oldStatus = pr.status pr.Node = n pr.status = StatusAlive pr.leaveTime = time.Time{} } p.peers[n.Address()] = pr p.peerJoinCounter.Inc() if oldStatus == StatusFailed { p.logger.Debug("peer rejoined", "peer", pr.Node) p.failedPeers = removeOldPeer(p.failedPeers, pr.Address()) } } func (p *Peer) peerLeave(n *memberlist.Node) { p.peerLock.Lock() defer p.peerLock.Unlock() pr, ok := p.peers[n.Address()] if !ok { // Why are we receiving a leave notification from a node that // never joined? return } pr.status = StatusFailed pr.leaveTime = time.Now() p.failedPeers = append(p.failedPeers, pr) p.peers[n.Address()] = pr p.peerLeaveCounter.Inc() p.logger.Debug("peer left", "peer", pr.Node) } func (p *Peer) peerUpdate(n *memberlist.Node) { p.peerLock.Lock() defer p.peerLock.Unlock() pr, ok := p.peers[n.Address()] if !ok { // Why are we receiving an update from a node that never // joined? return } pr.Node = n p.peers[n.Address()] = pr p.peerUpdateCounter.Inc() p.logger.Debug("peer updated", "peer", pr.Node) } // AddState adds a new state that will be gossiped. It returns a channel to which // broadcast messages for the state can be sent. func (p *Peer) AddState(key string, s State, reg prometheus.Registerer) ClusterChannel { p.mtx.Lock() p.states[key] = s p.mtx.Unlock() send := func(b []byte) { p.delegate.bcast.QueueBroadcast(simpleBroadcast(b)) } peers := func() []*memberlist.Node { nodes := p.mlist.Members() for i, n := range nodes { if n.String() == p.Self().Name { nodes = append(nodes[:i], nodes[i+1:]...) break } } return nodes } sendOversize := func(n *memberlist.Node, b []byte) error { return p.mlist.SendReliable(n, b) } return NewChannel(key, send, peers, sendOversize, p.logger, p.stopc, reg) } // Leave the cluster, waiting up to timeout. func (p *Peer) Leave(timeout time.Duration) error { close(p.stopc) p.logger.Debug("leaving cluster") return p.mlist.Leave(timeout) } // Name returns the unique ID of this peer in the cluster. func (p *Peer) Name() string { return p.mlist.LocalNode().Name } // ClusterSize returns the current number of alive members in the cluster. func (p *Peer) ClusterSize() int { return p.mlist.NumMembers() } // Return true when router has settled. func (p *Peer) Ready() bool { select { case <-p.readyc: return true default: } return false } // Wait until Settle() has finished. func (p *Peer) WaitReady(ctx context.Context) error { select { case <-ctx.Done(): return ctx.Err() case <-p.readyc: return nil } } // Return a status string representing the peer state. func (p *Peer) Status() string { if p.Ready() { return "ready" } return "settling" } // Info returns a JSON-serializable dump of cluster state. // Useful for debug. func (p *Peer) Info() map[string]interface{} { p.mtx.RLock() defer p.mtx.RUnlock() return map[string]interface{}{ "self": p.mlist.LocalNode(), "members": p.mlist.Members(), } } // Self returns the node information about the peer itself. func (p *Peer) Self() *memberlist.Node { return p.mlist.LocalNode() } // Member represents a member in the cluster. type Member struct { node *memberlist.Node } // Name implements cluster.ClusterMember. func (m Member) Name() string { return m.node.Name } // Address implements cluster.ClusterMember. func (m Member) Address() string { return m.node.Address() } // Peers returns the peers in the cluster. func (p *Peer) Peers() []ClusterMember { peers := make([]ClusterMember, 0, len(p.mlist.Members())) for _, member := range p.mlist.Members() { peers = append(peers, Member{ node: member, }) } return peers } // Position returns the position of the peer in the cluster. func (p *Peer) Position() int { all := p.mlist.Members() sort.Slice(all, func(i, j int) bool { return all[i].Name < all[j].Name }) k := 0 for _, n := range all { if n.Name == p.Self().Name { break } k++ } return k } // Settle waits until the mesh is ready (and sets the appropriate internal state when it is). // The idea is that we don't want to start "working" before we get a chance to know most of the alerts and/or silences. // Inspired from https://github.com/apache/cassandra/blob/7a40abb6a5108688fb1b10c375bb751cbb782ea4/src/java/org/apache/cassandra/gms/Gossiper.java // This is clearly not perfect or strictly correct but should prevent the alertmanager to send notification before it is obviously not ready. // This is especially important for those that do not have persistent storage. func (p *Peer) Settle(ctx context.Context, interval time.Duration) { const NumOkayRequired = 3 p.logger.Info("Waiting for gossip to settle...", "interval", interval) start := time.Now() nPeers := 0 nOkay := 0 totalPolls := 0 for { select { case <-ctx.Done(): elapsed := time.Since(start) p.logger.Info("gossip not settled but continuing anyway", "polls", totalPolls, "elapsed", elapsed) close(p.readyc) return case <-time.After(interval): } elapsed := time.Since(start) n := len(p.Peers()) if nOkay >= NumOkayRequired { p.logger.Info("gossip settled; proceeding", "elapsed", elapsed) break } if n == nPeers { nOkay++ p.logger.Debug("gossip looks settled", "elapsed", elapsed) } else { nOkay = 0 p.logger.Info("gossip not settled", "polls", totalPolls, "before", nPeers, "now", n, "elapsed", elapsed) } nPeers = n totalPolls++ } close(p.readyc) } // State is a piece of state that can be serialized and merged with other // serialized state. type State interface { // MarshalBinary serializes the underlying state. MarshalBinary() ([]byte, error) // Merge merges serialized state into the underlying state. Merge(b []byte) error } // We use a simple broadcast implementation in which items are never invalidated by others. type simpleBroadcast []byte func (b simpleBroadcast) Message() []byte { return []byte(b) } func (b simpleBroadcast) Invalidates(memberlist.Broadcast) bool { return false } func (b simpleBroadcast) Finished() {} func resolvePeers(ctx context.Context, peers []string, myAddress string, res *net.Resolver, waitIfEmpty bool) ([]string, error) { var resolvedPeers []string for _, peer := range peers { host, port, err := net.SplitHostPort(peer) if err != nil { return nil, fmt.Errorf("split host/port for peer %s: %w", peer, err) } retryCtx, cancel := context.WithCancel(ctx) defer cancel() ips, err := res.LookupIPAddr(ctx, host) if err != nil { // Assume direct address. resolvedPeers = append(resolvedPeers, peer) continue } if len(ips) == 0 { var lookupErrSpotted bool err := retry(2*time.Second, retryCtx.Done(), func() error { if lookupErrSpotted { // We need to invoke cancel in next run of retry when lookupErrSpotted to preserve LookupIPAddr error. cancel() } ips, err = res.LookupIPAddr(retryCtx, host) if err != nil { lookupErrSpotted = true return fmt.Errorf("IP Addr lookup for peer %s: %w", peer, err) } ips = removeMyAddr(ips, port, myAddress) if len(ips) == 0 { if !waitIfEmpty { return nil } return errors.New("empty IPAddr result. Retrying") } return nil }) if err != nil { return nil, err } } for _, ip := range ips { resolvedPeers = append(resolvedPeers, net.JoinHostPort(ip.String(), port)) } } return resolvedPeers, nil } func removeMyAddr(ips []net.IPAddr, targetPort, myAddr string) []net.IPAddr { var result []net.IPAddr for _, ip := range ips { if net.JoinHostPort(ip.String(), targetPort) == myAddr { continue } result = append(result, ip) } return result } func hasNonlocal(clusterPeers []string) bool { for _, peer := range clusterPeers { if host, _, err := net.SplitHostPort(peer); err == nil { peer = host } if ip := net.ParseIP(peer); ip != nil && !ip.IsLoopback() { return true } else if ip == nil && strings.ToLower(peer) != "localhost" { return true } } return false } func isUnroutable(addr string) bool { if host, _, err := net.SplitHostPort(addr); err == nil { addr = host } if ip := net.ParseIP(addr); ip != nil && (ip.IsUnspecified() || ip.IsLoopback()) { return true // typically 0.0.0.0 or localhost } else if ip == nil && strings.ToLower(addr) == "localhost" { return true } return false } func isAny(addr string) bool { if host, _, err := net.SplitHostPort(addr); err == nil { addr = host } return addr == "" || net.ParseIP(addr).IsUnspecified() } // retry executes f every interval seconds until timeout or no error is returned from f. func retry(interval time.Duration, stopc <-chan struct{}, f func() error) error { tick := time.NewTicker(interval) defer tick.Stop() var err error for { if err = f(); err == nil { return nil } select { case <-stopc: return err case <-tick.C: } } } func removeOldPeer(old []peer, addr string) []peer { new := make([]peer, 0, len(old)) for _, p := range old { if p.Address() != addr { new = append(new, p) } } return new } prometheus-alertmanager-0.28.1+ds/cluster/cluster_test.go000066400000000000000000000176341476331240200236040ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cluster import ( "context" "testing" "time" "github.com/hashicorp/go-sockaddr" "github.com/stretchr/testify/require" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/promslog" ) func TestClusterJoinAndReconnect(t *testing.T) { ip, _ := sockaddr.GetPrivateIP() if ip == "" { t.Skipf("skipping tests because no private IP address can be found") return } t.Run("TestJoinLeave", testJoinLeave) t.Run("TestReconnect", testReconnect) t.Run("TestRemoveFailedPeers", testRemoveFailedPeers) t.Run("TestInitiallyFailingPeers", testInitiallyFailingPeers) t.Run("TestTLSConnection", testTLSConnection) } func testJoinLeave(t *testing.T) { logger := promslog.NewNopLogger() p, err := Create( logger, prometheus.NewRegistry(), "127.0.0.1:0", "", []string{}, true, DefaultPushPullInterval, DefaultGossipInterval, DefaultTCPTimeout, DefaultProbeTimeout, DefaultProbeInterval, nil, false, "", ) require.NoError(t, err) require.NotNil(t, p) err = p.Join( DefaultReconnectInterval, DefaultReconnectTimeout, ) require.NoError(t, err) require.False(t, p.Ready()) { ctx, cancel := context.WithCancel(context.Background()) cancel() require.Equal(t, context.Canceled, p.WaitReady(ctx)) } require.Equal(t, "settling", p.Status()) go p.Settle(context.Background(), 0*time.Second) require.NoError(t, p.WaitReady(context.Background())) require.Equal(t, "ready", p.Status()) // Create the peer who joins the first. p2, err := Create( logger, prometheus.NewRegistry(), "127.0.0.1:0", "", []string{p.Self().Address()}, true, DefaultPushPullInterval, DefaultGossipInterval, DefaultTCPTimeout, DefaultProbeTimeout, DefaultProbeInterval, nil, false, "", ) require.NoError(t, err) require.NotNil(t, p2) err = p2.Join( DefaultReconnectInterval, DefaultReconnectTimeout, ) require.NoError(t, err) go p2.Settle(context.Background(), 0*time.Second) require.NoError(t, p2.WaitReady(context.Background())) require.Equal(t, 2, p.ClusterSize()) p2.Leave(0 * time.Second) require.Equal(t, 1, p.ClusterSize()) require.Len(t, p.failedPeers, 1) require.Equal(t, p2.Self().Address(), p.peers[p2.Self().Address()].Node.Address()) require.Equal(t, p2.Name(), p.failedPeers[0].Name) } func testReconnect(t *testing.T) { logger := promslog.NewNopLogger() p, err := Create( logger, prometheus.NewRegistry(), "127.0.0.1:0", "", []string{}, true, DefaultPushPullInterval, DefaultGossipInterval, DefaultTCPTimeout, DefaultProbeTimeout, DefaultProbeInterval, nil, false, "", ) require.NoError(t, err) require.NotNil(t, p) err = p.Join( DefaultReconnectInterval, DefaultReconnectTimeout, ) require.NoError(t, err) go p.Settle(context.Background(), 0*time.Second) require.NoError(t, p.WaitReady(context.Background())) p2, err := Create( logger, prometheus.NewRegistry(), "127.0.0.1:0", "", []string{}, true, DefaultPushPullInterval, DefaultGossipInterval, DefaultTCPTimeout, DefaultProbeTimeout, DefaultProbeInterval, nil, false, "", ) require.NoError(t, err) require.NotNil(t, p2) err = p2.Join( DefaultReconnectInterval, DefaultReconnectTimeout, ) require.NoError(t, err) go p2.Settle(context.Background(), 0*time.Second) require.NoError(t, p2.WaitReady(context.Background())) p.peerJoin(p2.Self()) p.peerLeave(p2.Self()) require.Equal(t, 1, p.ClusterSize()) require.Len(t, p.failedPeers, 1) p.reconnect() require.Equal(t, 2, p.ClusterSize()) require.Empty(t, p.failedPeers) require.Equal(t, StatusAlive, p.peers[p2.Self().Address()].status) } func testRemoveFailedPeers(t *testing.T) { logger := promslog.NewNopLogger() p, err := Create( logger, prometheus.NewRegistry(), "127.0.0.1:0", "", []string{}, true, DefaultPushPullInterval, DefaultGossipInterval, DefaultTCPTimeout, DefaultProbeTimeout, DefaultProbeInterval, nil, false, "", ) require.NoError(t, err) require.NotNil(t, p) err = p.Join( DefaultReconnectInterval, DefaultReconnectTimeout, ) require.NoError(t, err) n := p.Self() now := time.Now() p1 := peer{ status: StatusFailed, leaveTime: now, Node: n, } p2 := peer{ status: StatusFailed, leaveTime: now.Add(-time.Hour), Node: n, } p3 := peer{ status: StatusFailed, leaveTime: now.Add(30 * -time.Minute), Node: n, } p.failedPeers = []peer{p1, p2, p3} p.removeFailedPeers(30 * time.Minute) require.Len(t, p.failedPeers, 1) require.Equal(t, p1, p.failedPeers[0]) } func testInitiallyFailingPeers(t *testing.T) { logger := promslog.NewNopLogger() myAddr := "1.2.3.4:5000" peerAddrs := []string{myAddr, "2.3.4.5:5000", "3.4.5.6:5000", "foo.example.com:5000"} p, err := Create( logger, prometheus.NewRegistry(), "127.0.0.1:0", "", []string{}, true, DefaultPushPullInterval, DefaultGossipInterval, DefaultTCPTimeout, DefaultProbeTimeout, DefaultProbeInterval, nil, false, "", ) require.NoError(t, err) require.NotNil(t, p) err = p.Join( DefaultReconnectInterval, DefaultReconnectTimeout, ) require.NoError(t, err) p.setInitialFailed(peerAddrs, myAddr) // We shouldn't have added "our" bind addr and the FQDN address to the // failed peers list. require.Len(t, p.failedPeers, len(peerAddrs)-2) for _, addr := range peerAddrs { if addr == myAddr || addr == "foo.example.com:5000" { continue } pr, ok := p.peers[addr] require.True(t, ok) require.Equal(t, StatusFailed.String(), pr.status.String()) require.Equal(t, addr, pr.Address()) expectedLen := len(p.failedPeers) - 1 p.peerJoin(pr.Node) require.Len(t, p.failedPeers, expectedLen) } } func testTLSConnection(t *testing.T) { logger := promslog.NewNopLogger() tlsTransportConfig1, err := GetTLSTransportConfig("./testdata/tls_config_node1.yml") require.NoError(t, err) p1, err := Create( logger, prometheus.NewRegistry(), "127.0.0.1:0", "", []string{}, true, DefaultPushPullInterval, DefaultGossipInterval, DefaultTCPTimeout, DefaultProbeTimeout, DefaultProbeInterval, tlsTransportConfig1, false, "", ) require.NoError(t, err) require.NotNil(t, p1) err = p1.Join( DefaultReconnectInterval, DefaultReconnectTimeout, ) require.NoError(t, err) require.False(t, p1.Ready()) require.Equal(t, "settling", p1.Status()) go p1.Settle(context.Background(), 0*time.Second) p1.WaitReady(context.Background()) require.Equal(t, "ready", p1.Status()) // Create the peer who joins the first. tlsTransportConfig2, err := GetTLSTransportConfig("./testdata/tls_config_node2.yml") require.NoError(t, err) p2, err := Create( logger, prometheus.NewRegistry(), "127.0.0.1:0", "", []string{p1.Self().Address()}, true, DefaultPushPullInterval, DefaultGossipInterval, DefaultTCPTimeout, DefaultProbeTimeout, DefaultProbeInterval, tlsTransportConfig2, false, "", ) require.NoError(t, err) require.NotNil(t, p2) err = p2.Join( DefaultReconnectInterval, DefaultReconnectTimeout, ) require.NoError(t, err) go p2.Settle(context.Background(), 0*time.Second) p2.WaitReady(context.Background()) require.Equal(t, "ready", p2.Status()) require.Equal(t, 2, p1.ClusterSize()) p2.Leave(0 * time.Second) require.Equal(t, 1, p1.ClusterSize()) require.Len(t, p1.failedPeers, 1) require.Equal(t, p2.Self().Address(), p1.peers[p2.Self().Address()].Node.Address()) require.Equal(t, p2.Name(), p1.failedPeers[0].Name) } prometheus-alertmanager-0.28.1+ds/cluster/clusterpb/000077500000000000000000000000001476331240200225255ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/cluster/clusterpb/cluster.pb.go000066400000000000000000000525661476331240200251530ustar00rootroot00000000000000// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: cluster.proto package clusterpb import ( fmt "fmt" io "io" math "math" math_bits "math/bits" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type MemberlistMessage_Kind int32 const ( MemberlistMessage_STREAM MemberlistMessage_Kind = 0 MemberlistMessage_PACKET MemberlistMessage_Kind = 1 ) var MemberlistMessage_Kind_name = map[int32]string{ 0: "STREAM", 1: "PACKET", } var MemberlistMessage_Kind_value = map[string]int32{ "STREAM": 0, "PACKET": 1, } func (x MemberlistMessage_Kind) String() string { return proto.EnumName(MemberlistMessage_Kind_name, int32(x)) } func (MemberlistMessage_Kind) EnumDescriptor() ([]byte, []int) { return fileDescriptor_3cfb3b8ec240c376, []int{2, 0} } type Part struct { Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } func (m *Part) Reset() { *m = Part{} } func (m *Part) String() string { return proto.CompactTextString(m) } func (*Part) ProtoMessage() {} func (*Part) Descriptor() ([]byte, []int) { return fileDescriptor_3cfb3b8ec240c376, []int{0} } func (m *Part) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *Part) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_Part.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } func (m *Part) XXX_Merge(src proto.Message) { xxx_messageInfo_Part.Merge(m, src) } func (m *Part) XXX_Size() int { return m.Size() } func (m *Part) XXX_DiscardUnknown() { xxx_messageInfo_Part.DiscardUnknown(m) } var xxx_messageInfo_Part proto.InternalMessageInfo type FullState struct { Parts []Part `protobuf:"bytes,1,rep,name=parts,proto3" json:"parts"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } func (m *FullState) Reset() { *m = FullState{} } func (m *FullState) String() string { return proto.CompactTextString(m) } func (*FullState) ProtoMessage() {} func (*FullState) Descriptor() ([]byte, []int) { return fileDescriptor_3cfb3b8ec240c376, []int{1} } func (m *FullState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *FullState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_FullState.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } func (m *FullState) XXX_Merge(src proto.Message) { xxx_messageInfo_FullState.Merge(m, src) } func (m *FullState) XXX_Size() int { return m.Size() } func (m *FullState) XXX_DiscardUnknown() { xxx_messageInfo_FullState.DiscardUnknown(m) } var xxx_messageInfo_FullState proto.InternalMessageInfo type MemberlistMessage struct { Version string `protobuf:"bytes,1,opt,name=version,proto3" json:"version,omitempty"` Kind MemberlistMessage_Kind `protobuf:"varint,2,opt,name=kind,proto3,enum=clusterpb.MemberlistMessage_Kind" json:"kind,omitempty"` FromAddr string `protobuf:"bytes,3,opt,name=from_addr,json=fromAddr,proto3" json:"from_addr,omitempty"` Msg []byte `protobuf:"bytes,4,opt,name=msg,proto3" json:"msg,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } func (m *MemberlistMessage) Reset() { *m = MemberlistMessage{} } func (m *MemberlistMessage) String() string { return proto.CompactTextString(m) } func (*MemberlistMessage) ProtoMessage() {} func (*MemberlistMessage) Descriptor() ([]byte, []int) { return fileDescriptor_3cfb3b8ec240c376, []int{2} } func (m *MemberlistMessage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *MemberlistMessage) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MemberlistMessage.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } func (m *MemberlistMessage) XXX_Merge(src proto.Message) { xxx_messageInfo_MemberlistMessage.Merge(m, src) } func (m *MemberlistMessage) XXX_Size() int { return m.Size() } func (m *MemberlistMessage) XXX_DiscardUnknown() { xxx_messageInfo_MemberlistMessage.DiscardUnknown(m) } var xxx_messageInfo_MemberlistMessage proto.InternalMessageInfo func init() { proto.RegisterEnum("clusterpb.MemberlistMessage_Kind", MemberlistMessage_Kind_name, MemberlistMessage_Kind_value) proto.RegisterType((*Part)(nil), "clusterpb.Part") proto.RegisterType((*FullState)(nil), "clusterpb.FullState") proto.RegisterType((*MemberlistMessage)(nil), "clusterpb.MemberlistMessage") } func init() { proto.RegisterFile("cluster.proto", fileDescriptor_3cfb3b8ec240c376) } var fileDescriptor_3cfb3b8ec240c376 = []byte{ // 289 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x90, 0xdf, 0x4a, 0xc3, 0x30, 0x14, 0xc6, 0x17, 0x17, 0xa7, 0x3d, 0xfe, 0xab, 0xc1, 0x8b, 0xa0, 0x50, 0x67, 0xaf, 0x06, 0x4a, 0x85, 0x89, 0xe0, 0xed, 0x26, 0xf3, 0x66, 0x14, 0x46, 0xb7, 0x7b, 0x49, 0x4d, 0x2c, 0x65, 0x6d, 0x53, 0x92, 0x4c, 0xf0, 0xb9, 0x7c, 0x89, 0x5e, 0xfa, 0x04, 0xa2, 0x7d, 0x12, 0x49, 0x36, 0x45, 0xf0, 0xee, 0x77, 0x0e, 0x5f, 0x7e, 0x1f, 0x27, 0x70, 0xf0, 0x54, 0xac, 0xb4, 0x11, 0x2a, 0xaa, 0x95, 0x34, 0x92, 0x78, 0x9b, 0xb1, 0x4e, 0x4f, 0x4f, 0x32, 0x99, 0x49, 0xb7, 0xbd, 0xb6, 0xb4, 0x0e, 0x84, 0x57, 0x80, 0x67, 0x4c, 0x19, 0xe2, 0x43, 0x77, 0x29, 0x5e, 0x29, 0xea, 0xa3, 0x81, 0x97, 0x58, 0x24, 0x04, 0x30, 0x67, 0x86, 0xd1, 0xad, 0x3e, 0x1a, 0xec, 0x27, 0x8e, 0xc3, 0x3b, 0xf0, 0x1e, 0x56, 0x45, 0x31, 0x37, 0xcc, 0x08, 0x72, 0x09, 0xdb, 0x35, 0x53, 0x46, 0x53, 0xd4, 0xef, 0x0e, 0xf6, 0x86, 0x47, 0xd1, 0x6f, 0x57, 0x64, 0x95, 0x63, 0xdc, 0x7c, 0x9c, 0x77, 0x92, 0x75, 0x26, 0x7c, 0x43, 0x70, 0x1c, 0x8b, 0x32, 0x15, 0xaa, 0xc8, 0xb5, 0x89, 0x85, 0xd6, 0x2c, 0x13, 0x84, 0xc2, 0xce, 0x8b, 0x50, 0x3a, 0x97, 0xd5, 0xa6, 0xf9, 0x67, 0x24, 0xb7, 0x80, 0x97, 0x79, 0xc5, 0x5d, 0xfb, 0xe1, 0xf0, 0xe2, 0x8f, 0xfb, 0x9f, 0x25, 0x9a, 0xe6, 0x15, 0x4f, 0x5c, 0x9c, 0x9c, 0x81, 0xf7, 0xac, 0x64, 0xf9, 0xc8, 0x38, 0x57, 0xb4, 0xeb, 0x94, 0xbb, 0x76, 0x31, 0xe2, 0x5c, 0xd9, 0x1b, 0x4b, 0x9d, 0x51, 0xec, 0x0e, 0xb2, 0x18, 0x06, 0x80, 0xed, 0x63, 0x02, 0xd0, 0x9b, 0x2f, 0x92, 0xc9, 0x28, 0xf6, 0x3b, 0x96, 0x67, 0xa3, 0xfb, 0xe9, 0x64, 0xe1, 0xa3, 0xb1, 0xdf, 0x7c, 0x05, 0x9d, 0xa6, 0x0d, 0xd0, 0x7b, 0x1b, 0xa0, 0xcf, 0x36, 0x40, 0x69, 0xcf, 0x7d, 0xdb, 0xcd, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xaa, 0x3f, 0xca, 0x45, 0x68, 0x01, 0x00, 0x00, } func (m *Part) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } func (m *Part) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } func (m *Part) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l if m.XXX_unrecognized != nil { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } if len(m.Data) > 0 { i -= len(m.Data) copy(dAtA[i:], m.Data) i = encodeVarintCluster(dAtA, i, uint64(len(m.Data))) i-- dAtA[i] = 0x12 } if len(m.Key) > 0 { i -= len(m.Key) copy(dAtA[i:], m.Key) i = encodeVarintCluster(dAtA, i, uint64(len(m.Key))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } func (m *FullState) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } func (m *FullState) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } func (m *FullState) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l if m.XXX_unrecognized != nil { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } if len(m.Parts) > 0 { for iNdEx := len(m.Parts) - 1; iNdEx >= 0; iNdEx-- { { size, err := m.Parts[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } i -= size i = encodeVarintCluster(dAtA, i, uint64(size)) } i-- dAtA[i] = 0xa } } return len(dAtA) - i, nil } func (m *MemberlistMessage) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } func (m *MemberlistMessage) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } func (m *MemberlistMessage) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l if m.XXX_unrecognized != nil { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } if len(m.Msg) > 0 { i -= len(m.Msg) copy(dAtA[i:], m.Msg) i = encodeVarintCluster(dAtA, i, uint64(len(m.Msg))) i-- dAtA[i] = 0x22 } if len(m.FromAddr) > 0 { i -= len(m.FromAddr) copy(dAtA[i:], m.FromAddr) i = encodeVarintCluster(dAtA, i, uint64(len(m.FromAddr))) i-- dAtA[i] = 0x1a } if m.Kind != 0 { i = encodeVarintCluster(dAtA, i, uint64(m.Kind)) i-- dAtA[i] = 0x10 } if len(m.Version) > 0 { i -= len(m.Version) copy(dAtA[i:], m.Version) i = encodeVarintCluster(dAtA, i, uint64(len(m.Version))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } func encodeVarintCluster(dAtA []byte, offset int, v uint64) int { offset -= sovCluster(v) base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) return base } func (m *Part) Size() (n int) { if m == nil { return 0 } var l int _ = l l = len(m.Key) if l > 0 { n += 1 + l + sovCluster(uint64(l)) } l = len(m.Data) if l > 0 { n += 1 + l + sovCluster(uint64(l)) } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } func (m *FullState) Size() (n int) { if m == nil { return 0 } var l int _ = l if len(m.Parts) > 0 { for _, e := range m.Parts { l = e.Size() n += 1 + l + sovCluster(uint64(l)) } } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } func (m *MemberlistMessage) Size() (n int) { if m == nil { return 0 } var l int _ = l l = len(m.Version) if l > 0 { n += 1 + l + sovCluster(uint64(l)) } if m.Kind != 0 { n += 1 + sovCluster(uint64(m.Kind)) } l = len(m.FromAddr) if l > 0 { n += 1 + l + sovCluster(uint64(l)) } l = len(m.Msg) if l > 0 { n += 1 + l + sovCluster(uint64(l)) } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } func sovCluster(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } func sozCluster(x uint64) (n int) { return sovCluster(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } func (m *Part) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCluster } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { return fmt.Errorf("proto: Part: wiretype end group for non-group") } if fieldNum <= 0 { return fmt.Errorf("proto: Part: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCluster } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthCluster } postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthCluster } if postIndex > l { return io.ErrUnexpectedEOF } m.Key = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) } var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCluster } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } if byteLen < 0 { return ErrInvalidLengthCluster } postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthCluster } if postIndex > l { return io.ErrUnexpectedEOF } m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) if m.Data == nil { m.Data = []byte{} } iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipCluster(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCluster } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) iNdEx += skippy } } if iNdEx > l { return io.ErrUnexpectedEOF } return nil } func (m *FullState) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCluster } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { return fmt.Errorf("proto: FullState: wiretype end group for non-group") } if fieldNum <= 0 { return fmt.Errorf("proto: FullState: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Parts", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCluster } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthCluster } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthCluster } if postIndex > l { return io.ErrUnexpectedEOF } m.Parts = append(m.Parts, Part{}) if err := m.Parts[len(m.Parts)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipCluster(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCluster } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) iNdEx += skippy } } if iNdEx > l { return io.ErrUnexpectedEOF } return nil } func (m *MemberlistMessage) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCluster } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { return fmt.Errorf("proto: MemberlistMessage: wiretype end group for non-group") } if fieldNum <= 0 { return fmt.Errorf("proto: MemberlistMessage: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCluster } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthCluster } postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthCluster } if postIndex > l { return io.ErrUnexpectedEOF } m.Version = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Kind", wireType) } m.Kind = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCluster } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ m.Kind |= MemberlistMessage_Kind(b&0x7F) << shift if b < 0x80 { break } } case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field FromAddr", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCluster } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthCluster } postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthCluster } if postIndex > l { return io.ErrUnexpectedEOF } m.FromAddr = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Msg", wireType) } var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowCluster } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } if byteLen < 0 { return ErrInvalidLengthCluster } postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthCluster } if postIndex > l { return io.ErrUnexpectedEOF } m.Msg = append(m.Msg[:0], dAtA[iNdEx:postIndex]...) if m.Msg == nil { m.Msg = []byte{} } iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipCluster(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthCluster } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) iNdEx += skippy } } if iNdEx > l { return io.ErrUnexpectedEOF } return nil } func skipCluster(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return 0, ErrIntOverflowCluster } if iNdEx >= l { return 0, io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } wireType := int(wire & 0x7) switch wireType { case 0: for shift := uint(0); ; shift += 7 { if shift >= 64 { return 0, ErrIntOverflowCluster } if iNdEx >= l { return 0, io.ErrUnexpectedEOF } iNdEx++ if dAtA[iNdEx-1] < 0x80 { break } } case 1: iNdEx += 8 case 2: var length int for shift := uint(0); ; shift += 7 { if shift >= 64 { return 0, ErrIntOverflowCluster } if iNdEx >= l { return 0, io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ length |= (int(b) & 0x7F) << shift if b < 0x80 { break } } if length < 0 { return 0, ErrInvalidLengthCluster } iNdEx += length case 3: depth++ case 4: if depth == 0 { return 0, ErrUnexpectedEndOfGroupCluster } depth-- case 5: iNdEx += 4 default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } if iNdEx < 0 { return 0, ErrInvalidLengthCluster } if depth == 0 { return iNdEx, nil } } return 0, io.ErrUnexpectedEOF } var ( ErrInvalidLengthCluster = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowCluster = fmt.Errorf("proto: integer overflow") ErrUnexpectedEndOfGroupCluster = fmt.Errorf("proto: unexpected end of group") ) prometheus-alertmanager-0.28.1+ds/cluster/clusterpb/cluster.proto000066400000000000000000000010321476331240200252670ustar00rootroot00000000000000syntax = "proto3"; package clusterpb; import "gogoproto/gogo.proto"; option (gogoproto.marshaler_all) = true; option (gogoproto.sizer_all) = true; option (gogoproto.unmarshaler_all) = true; option (gogoproto.goproto_getters_all) = false; message Part { string key = 1; bytes data = 2; } message FullState { repeated Part parts = 1 [(gogoproto.nullable) = false]; } message MemberlistMessage { string version = 1; enum Kind { STREAM = 0; PACKET = 1; } Kind kind = 2; string from_addr = 3; bytes msg = 4; } prometheus-alertmanager-0.28.1+ds/cluster/connection_pool.go000066400000000000000000000037271476331240200242520ustar00rootroot00000000000000// Copyright 2020 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cluster import ( "crypto/tls" "errors" "fmt" "sync" "time" lru "github.com/hashicorp/golang-lru/v2" ) const capacity = 1024 type connectionPool struct { mtx sync.Mutex cache *lru.Cache[string, *tlsConn] tlsConfig *tls.Config } func newConnectionPool(tlsClientCfg *tls.Config) (*connectionPool, error) { cache, err := lru.NewWithEvict( capacity, func(_ string, conn *tlsConn) { conn.Close() }, ) if err != nil { return nil, fmt.Errorf("failed to create new LRU: %w", err) } return &connectionPool{ cache: cache, tlsConfig: tlsClientCfg, }, nil } // borrowConnection returns a *tlsConn from the pool. The connection does not // need to be returned to the pool because each connection has its own locking. func (pool *connectionPool) borrowConnection(addr string, timeout time.Duration) (*tlsConn, error) { pool.mtx.Lock() defer pool.mtx.Unlock() if pool.cache == nil { return nil, errors.New("connection pool closed") } key := fmt.Sprintf("%s/%d", addr, int64(timeout)) conn, exists := pool.cache.Get(key) if exists && conn.alive() { return conn, nil } conn, err := dialTLSConn(addr, timeout, pool.tlsConfig) if err != nil { return nil, err } pool.cache.Add(key, conn) return conn, nil } func (pool *connectionPool) shutdown() { pool.mtx.Lock() defer pool.mtx.Unlock() if pool.cache == nil { return } pool.cache.Purge() pool.cache = nil } prometheus-alertmanager-0.28.1+ds/cluster/delegate.go000066400000000000000000000223351476331240200226300ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cluster import ( "log/slog" "time" "github.com/gogo/protobuf/proto" "github.com/hashicorp/memberlist" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/alertmanager/cluster/clusterpb" ) const ( // Maximum number of messages to be held in the queue. maxQueueSize = 4096 fullState = "full_state" update = "update" ) // delegate implements memberlist.Delegate and memberlist.EventDelegate // and broadcasts its peer's state in the cluster. type delegate struct { *Peer logger *slog.Logger bcast *memberlist.TransmitLimitedQueue messagesReceived *prometheus.CounterVec messagesReceivedSize *prometheus.CounterVec messagesSent *prometheus.CounterVec messagesSentSize *prometheus.CounterVec messagesPruned prometheus.Counter nodeAlive *prometheus.CounterVec nodePingDuration *prometheus.HistogramVec } func newDelegate(l *slog.Logger, reg prometheus.Registerer, p *Peer, retransmit int) *delegate { bcast := &memberlist.TransmitLimitedQueue{ NumNodes: p.ClusterSize, RetransmitMult: retransmit, } messagesReceived := prometheus.NewCounterVec(prometheus.CounterOpts{ Name: "alertmanager_cluster_messages_received_total", Help: "Total number of cluster messages received.", }, []string{"msg_type"}) messagesReceivedSize := prometheus.NewCounterVec(prometheus.CounterOpts{ Name: "alertmanager_cluster_messages_received_size_total", Help: "Total size of cluster messages received.", }, []string{"msg_type"}) messagesSent := prometheus.NewCounterVec(prometheus.CounterOpts{ Name: "alertmanager_cluster_messages_sent_total", Help: "Total number of cluster messages sent.", }, []string{"msg_type"}) messagesSentSize := prometheus.NewCounterVec(prometheus.CounterOpts{ Name: "alertmanager_cluster_messages_sent_size_total", Help: "Total size of cluster messages sent.", }, []string{"msg_type"}) messagesPruned := prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_cluster_messages_pruned_total", Help: "Total number of cluster messages pruned.", }) gossipClusterMembers := prometheus.NewGaugeFunc(prometheus.GaugeOpts{ Name: "alertmanager_cluster_members", Help: "Number indicating current number of members in cluster.", }, func() float64 { return float64(p.ClusterSize()) }) peerPosition := prometheus.NewGaugeFunc(prometheus.GaugeOpts{ Name: "alertmanager_peer_position", Help: "Position the Alertmanager instance believes it's in. The position determines a peer's behavior in the cluster.", }, func() float64 { return float64(p.Position()) }) healthScore := prometheus.NewGaugeFunc(prometheus.GaugeOpts{ Name: "alertmanager_cluster_health_score", Help: "Health score of the cluster. Lower values are better and zero means 'totally healthy'.", }, func() float64 { return float64(p.mlist.GetHealthScore()) }) messagesQueued := prometheus.NewGaugeFunc(prometheus.GaugeOpts{ Name: "alertmanager_cluster_messages_queued", Help: "Number of cluster messages which are queued.", }, func() float64 { return float64(bcast.NumQueued()) }) nodeAlive := prometheus.NewCounterVec(prometheus.CounterOpts{ Name: "alertmanager_cluster_alive_messages_total", Help: "Total number of received alive messages.", }, []string{"peer"}, ) nodePingDuration := prometheus.NewHistogramVec(prometheus.HistogramOpts{ Name: "alertmanager_cluster_pings_seconds", Help: "Histogram of latencies for ping messages.", Buckets: []float64{.005, .01, .025, .05, .1, .25, .5}, NativeHistogramBucketFactor: 1.1, NativeHistogramMaxBucketNumber: 100, NativeHistogramMinResetDuration: 1 * time.Hour, }, []string{"peer"}, ) messagesReceived.WithLabelValues(fullState) messagesReceivedSize.WithLabelValues(fullState) messagesReceived.WithLabelValues(update) messagesReceivedSize.WithLabelValues(update) messagesSent.WithLabelValues(fullState) messagesSentSize.WithLabelValues(fullState) messagesSent.WithLabelValues(update) messagesSentSize.WithLabelValues(update) reg.MustRegister(messagesReceived, messagesReceivedSize, messagesSent, messagesSentSize, gossipClusterMembers, peerPosition, healthScore, messagesQueued, messagesPruned, nodeAlive, nodePingDuration, ) d := &delegate{ logger: l, Peer: p, bcast: bcast, messagesReceived: messagesReceived, messagesReceivedSize: messagesReceivedSize, messagesSent: messagesSent, messagesSentSize: messagesSentSize, messagesPruned: messagesPruned, nodeAlive: nodeAlive, nodePingDuration: nodePingDuration, } go d.handleQueueDepth() return d } // NodeMeta retrieves meta-data about the current node when broadcasting an alive message. func (d *delegate) NodeMeta(limit int) []byte { return []byte{} } // NotifyMsg is the callback invoked when a user-level gossip message is received. func (d *delegate) NotifyMsg(b []byte) { d.messagesReceived.WithLabelValues(update).Inc() d.messagesReceivedSize.WithLabelValues(update).Add(float64(len(b))) var p clusterpb.Part if err := proto.Unmarshal(b, &p); err != nil { d.logger.Warn("decode broadcast", "err", err) return } d.mtx.RLock() s, ok := d.states[p.Key] d.mtx.RUnlock() if !ok { return } if err := s.Merge(p.Data); err != nil { d.logger.Warn("merge broadcast", "err", err, "key", p.Key) return } } // GetBroadcasts is called when user data messages can be broadcasted. func (d *delegate) GetBroadcasts(overhead, limit int) [][]byte { msgs := d.bcast.GetBroadcasts(overhead, limit) d.messagesSent.WithLabelValues(update).Add(float64(len(msgs))) for _, m := range msgs { d.messagesSentSize.WithLabelValues(update).Add(float64(len(m))) } return msgs } // LocalState is called when gossip fetches local state. func (d *delegate) LocalState(_ bool) []byte { d.mtx.RLock() defer d.mtx.RUnlock() all := &clusterpb.FullState{ Parts: make([]clusterpb.Part, 0, len(d.states)), } for key, s := range d.states { b, err := s.MarshalBinary() if err != nil { d.logger.Warn("encode local state", "err", err, "key", key) return nil } all.Parts = append(all.Parts, clusterpb.Part{Key: key, Data: b}) } b, err := proto.Marshal(all) if err != nil { d.logger.Warn("encode local state", "err", err) return nil } d.messagesSent.WithLabelValues(fullState).Inc() d.messagesSentSize.WithLabelValues(fullState).Add(float64(len(b))) return b } func (d *delegate) MergeRemoteState(buf []byte, _ bool) { d.messagesReceived.WithLabelValues(fullState).Inc() d.messagesReceivedSize.WithLabelValues(fullState).Add(float64(len(buf))) var fs clusterpb.FullState if err := proto.Unmarshal(buf, &fs); err != nil { d.logger.Warn("merge remote state", "err", err) return } d.mtx.RLock() defer d.mtx.RUnlock() for _, p := range fs.Parts { s, ok := d.states[p.Key] if !ok { d.logger.Warn("unknown state key", "len", len(buf), "key", p.Key) continue } if err := s.Merge(p.Data); err != nil { d.logger.Warn("merge remote state", "err", err, "key", p.Key) return } } } // NotifyJoin is called if a peer joins the cluster. func (d *delegate) NotifyJoin(n *memberlist.Node) { d.logger.Debug("NotifyJoin", "node", n.Name, "addr", n.Address()) d.Peer.peerJoin(n) } // NotifyLeave is called if a peer leaves the cluster. func (d *delegate) NotifyLeave(n *memberlist.Node) { d.logger.Debug("NotifyLeave", "node", n.Name, "addr", n.Address()) d.Peer.peerLeave(n) } // NotifyUpdate is called if a cluster peer gets updated. func (d *delegate) NotifyUpdate(n *memberlist.Node) { d.logger.Debug("NotifyUpdate", "node", n.Name, "addr", n.Address()) d.Peer.peerUpdate(n) } // NotifyAlive implements the memberlist.AliveDelegate interface. func (d *delegate) NotifyAlive(peer *memberlist.Node) error { d.nodeAlive.WithLabelValues(peer.Name).Inc() return nil } // AckPayload implements the memberlist.PingDelegate interface. func (d *delegate) AckPayload() []byte { return []byte{} } // NotifyPingComplete implements the memberlist.PingDelegate interface. func (d *delegate) NotifyPingComplete(peer *memberlist.Node, rtt time.Duration, payload []byte) { d.nodePingDuration.WithLabelValues(peer.Name).Observe(rtt.Seconds()) } // handleQueueDepth ensures that the queue doesn't grow unbounded by pruning // older messages at regular interval. func (d *delegate) handleQueueDepth() { for { select { case <-d.stopc: return case <-time.After(15 * time.Minute): n := d.bcast.NumQueued() if n > maxQueueSize { d.logger.Warn("dropping messages because too many are queued", "current", n, "limit", maxQueueSize) d.bcast.Prune(maxQueueSize) d.messagesPruned.Add(float64(n - maxQueueSize)) } } } } prometheus-alertmanager-0.28.1+ds/cluster/testdata/000077500000000000000000000000001476331240200223335ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/000077500000000000000000000000001476331240200234535ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/ca-config.json000066400000000000000000000003471476331240200262000ustar00rootroot00000000000000{ "signing": { "default": { "expiry": "876000h" }, "profiles": { "massl": { "usages": ["signing", "key encipherment", "server auth", "client auth"], "expiry": "876000h" } } } } prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/ca-csr.json000066400000000000000000000003141476331240200255140ustar00rootroot00000000000000{ "CN": "massl", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "AU", "L": "Melbourne", "O": "massl", "OU": "VIC", "ST": "Victoria" } ] }prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/ca-key.pem000066400000000000000000000032171476331240200253320ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAuljDjKVGwlyiuKTSHc1QpoZPX9dbgwU/9113ctI8U/ZwMWLp nZ4f/zVpf4LW5foM9zSEUGPiyJe/NaTZUOXkRBSIQ13QroK4OJ1XGacQKpTxewCb ChESZEfKWEhnP/Y7BYc4z1Li6Dkxh4TIElHwOVe62jbhNnzYlr4evmSuiuItAc8u hEYxncThPzmHEWPXKw8CFNhxCSYsjbb72UAIht0knMHQ7VXBX1VuuL0rolJBiToC va+I6CjG0c6qfi9/BcPsuW6cNjmQnwTg6SaSoGO/5zgbxBgy9MZQEot88d1T2XH6 rBANYsfojvyCXuytWnj04mvdAWwmFh0hhq+nxQIDAQABAoIBAQCwcL1vXUq7W4UD OaRtbWrQ0dk0ETBnxT/E0y33fRJ8GZovWM2EXSVEuukSP+uEQ5elNYeWqo0fi3cT ruvJSnMw9xPyXVDq+4C8slW3R1TqTK683VzvUizM4KC5qIyCpn1KBbgHrh6E7Sp1 e4cIuaawVN3qIg5qThmx2YA4nBIcEt68q9cpy3NgEe+EQf44zM/St+y8kSkDUOVw fNKX0WfZ/hPL1TAYpWiIgSf+m/V3d/1l/scvMYONcuSjXSORCyoeAWYtOQgf78wW 9j3kiBTaqDYCUZFnY/ltlZrm8ltAaKVJ0MmPKjVh8GJBXZp9fSVU8Y4ZIZRSeuBA OoStHGAdAoGBAMluMIE33hGny2V0dNzW23D84eXQK38AsdP632jQeuzxBknItg45 qAfzh8F8W10DQnSv5tj0bmOHfo0mG09bu9eo5nLLINOE7Ju/7ly/76RNJNJ4ADjx JKZi/PpvfP+s/fzel0X3OPgA+CJKzUHuqlU4V9BLc7focZAYtaM2w7rHAoGBAOzU eXpapkqYhbYRcsrVV57nZV0rLzsLVJBpJg2zC8un95ALrr0rlZfuPJfOCY/uuS1w f8ixRz2MkRWGreLHy35NB4GV0sF9VPn1jMp9SuBNvO0JRUMWuDAdVe8SCjXadrOh +m3yKJSkFKDchglUYnZKV1skgA/b9jjjnu2fvd0TAoGAVUTnFZxvzmuIp78fxWjS 5ka23hE8iHvjy4e00WsHzovNjKiBoQ35Orx16ItbJcm+dSUNhSQcItf104yhHPwJ Tab7PvcMQ15OxzP9lJfPu27Iuqv/9Bro1+Kpkt5lPNqffk9AHGcmX54RbHrb3yBI TOEYE14Nc3nbsRM0uQ3y13sCgYB5Om4QZpSWvKo9P4M+NqTKb3JglblwhOU9osVa 39ra3dkIgCJrLQM/KTEVF9+nMLDThLG0fqKT6/9cQHuECXet6Co+d/3RE6HK7Zmr ESWh2ckqoMM2i0uvPWT+ooJdfL2kR/bUDtAc/jyc9yUZY3ufR4Cd4/o1pAfOqR1y T4G1xwKBgQChE4VWawCVg2qanRjvZcdNk0zpZx4dxqqKYq/VHuSfjNLQixIZsgXT xx9BHuORn6c/nurqEStLwN3BzbpPU/j6YjMUmTslSH2sKhHwWNYGBZC52aJiOOda Bz6nAkihG0n2PjYt2T84w6FWHgLJuSsmiEVJcb+AOdyKh1MlzJiwMQ== -----END RSA PRIVATE KEY----- prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/ca.csr000066400000000000000000000017451476331240200245560ustar00rootroot00000000000000-----BEGIN CERTIFICATE REQUEST----- MIICpzCCAY8CAQAwYjELMAkGA1UEBhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIw EAYDVQQHEwlNZWxib3VybmUxDjAMBgNVBAoTBW1hc3NsMQwwCgYDVQQLEwNWSUMx DjAMBgNVBAMTBW1hc3NsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA uljDjKVGwlyiuKTSHc1QpoZPX9dbgwU/9113ctI8U/ZwMWLpnZ4f/zVpf4LW5foM 9zSEUGPiyJe/NaTZUOXkRBSIQ13QroK4OJ1XGacQKpTxewCbChESZEfKWEhnP/Y7 BYc4z1Li6Dkxh4TIElHwOVe62jbhNnzYlr4evmSuiuItAc8uhEYxncThPzmHEWPX Kw8CFNhxCSYsjbb72UAIht0knMHQ7VXBX1VuuL0rolJBiToCva+I6CjG0c6qfi9/ BcPsuW6cNjmQnwTg6SaSoGO/5zgbxBgy9MZQEot88d1T2XH6rBANYsfojvyCXuyt Wnj04mvdAWwmFh0hhq+nxQIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAJFmooMt TocElxCb3DGJTRUXxr4DqcATASIX35a2wV3MmPqUHHXr6BQkO/FRho66EsZf3DE/ mumou01K+KByxgsmw04CACjSeZ2t/g6pAsDCKrx/BwL3tAo09lG2Y2Ah0BND2Cta EZpTliU2MimZlk7UZb8VIXh2Tx56fZRoHLzO4U4+FY8ZR+tspxPRM7hLg/aUqA5D zGj6kByX8aYjxsmQokP4rx/w2mz6vwt4cZ1pXwr0RderkMIh9Har/0k9X1WIAP61 PNQx74qnaq+icjtN2+8gvJE/CJL/wfcwW6kQwEtX1xsTpnzyFaRoYpSPQrvkCtiW +WzgnOh7RvKyAYI= -----END CERTIFICATE REQUEST----- prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/ca.pem000066400000000000000000000024261476331240200245450ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDlDCCAnygAwIBAgIUetcc8yLasSAxvyUWtgTVKR6jfBIwDQYJKoZIhvcNAQEL BQAwYjELMAkGA1UEBhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIwEAYDVQQHEwlN ZWxib3VybmUxDjAMBgNVBAoTBW1hc3NsMQwwCgYDVQQLEwNWSUMxDjAMBgNVBAMT BW1hc3NsMB4XDTIxMDUwNTE2MTYwMFoXDTI2MDUwNDE2MTYwMFowYjELMAkGA1UE BhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIwEAYDVQQHEwlNZWxib3VybmUxDjAM BgNVBAoTBW1hc3NsMQwwCgYDVQQLEwNWSUMxDjAMBgNVBAMTBW1hc3NsMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuljDjKVGwlyiuKTSHc1QpoZPX9db gwU/9113ctI8U/ZwMWLpnZ4f/zVpf4LW5foM9zSEUGPiyJe/NaTZUOXkRBSIQ13Q roK4OJ1XGacQKpTxewCbChESZEfKWEhnP/Y7BYc4z1Li6Dkxh4TIElHwOVe62jbh NnzYlr4evmSuiuItAc8uhEYxncThPzmHEWPXKw8CFNhxCSYsjbb72UAIht0knMHQ 7VXBX1VuuL0rolJBiToCva+I6CjG0c6qfi9/BcPsuW6cNjmQnwTg6SaSoGO/5zgb xBgy9MZQEot88d1T2XH6rBANYsfojvyCXuytWnj04mvdAWwmFh0hhq+nxQIDAQAB o0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU d4DTElKq6gnGYDJZgJvC+4flrZAwDQYJKoZIhvcNAQELBQADggEBAHYaMxcyVdFP QZJHDP6x+A1hHeZy/kaL2VPzUIOgt3ONEvjhsJblFjLaTWwXFJwxVHXRsQjqrURj dD2VIkMbCJM4WN8odi6PdHscL0DwHKzwZDapQxsOUYcPBbR2EsBPRyWSoJmBnEyZ 0TANtyUcZNWc7/C4GG66SWypu1YRdtcaDiEOVkdetGWuo5bw1J7B7isQ4J4a3+Qn iTKId/7wWBY95JS2xJuOeEjk/ty74ruSapk2Aip1GRSRXMDtD0XeO5dpxc6eIU3C jbRpUGqCdSAfzxQTlxQAMEKdgRlt7lzMFX/PAXagDOMC9D/6APn5fquEV2d9wMWs 0N9UCwKftAU= -----END CERTIFICATE----- prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/node1-csr.json000066400000000000000000000003361476331240200261430ustar00rootroot00000000000000{ "CN": "system:server", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "AU", "L": "Melbourne", "O": "system:node1", "OU": "massl", "ST": "Victoria" } ] } prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/node1-key.pem000066400000000000000000000032131476331240200257510ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEA1b9bm4rvDtpYsqgtCC52+L535d4/Q2O10fWD2i2CfRXXfYJQ 5cr4AV2iqScFsJSs7KwyQde/c4VWj/vEA2/SJHZFBlknKdCcrgHVebrvnzm6Guze ICutZSKocFXy9Kw+YmWuA64nHVfmSCKG07GhXhEsLsSCn4PTDYOiGAUm1GdSDxUp 8yUXec13Eb20mld0xE9kQnCnEWRnxMXtQJXoz9lpLc7DgXtN6nCXSG/CqdDPOduU nmseaxyAGpAFnUmxcqUuYAJUQ1hUOJhk0RVSsLTmu+FGdOxk79AxmmKQ2z9l/GuA VikVJGTxY4jRPezxHQ3bdqzzCIdJxTxLinftZQIDAQABAoIBADpxQtvphemau8vF feKRycfDVEcOmF+VoL4SkgWSke4fjbbsbbAW6e59qp7zY3PfgtSHVIp6Mgek+oEN xo9mAKAlkkPlFncxadWN/M921FPF1ePMxgMnzhYr/sAQUAikG76NrKGm+VzljrpE bnbtR4DP0zPKWSjCQ2+bgTNuHSrPwUtEngVT6ugjfWU1RitlvjTsZ9hSuOSBlS7P rjbQGaEh53PraDut8PIlF4wIF+nLeERFP/a6DC8Btpbv9P50YRosag6yU/G+OYX9 spvBPvRJGrubslKnNRz9AcjbVd3QhL+Tm7mV7iakK918jLWb95Ro4WW+9lT6IAi6 xRSOr9UCgYEA5wI3JhKkYa4PST7ALqmJSDkPH8+tctiEx+ovmnqBufFuLWFoO/rc EOYslnaZM3UVCnhrFv7+LxezSI5DyQu8dBEzf0RMICvXUNBkGC7ZJQL428fjXPhX 8mZIoJ0ol4hbamr8yTYlK0vGTwqN1bDj71w6NszuN4ecN1cKNWsMbnMCgYEA7N8Y MzHWNijMr7xZ1lXl4Ye9+kp3aTUjUYBBaxFr4bQ8y0fH48lzq3qOso5wgvp0DKYo uemD5QKbo81LKoTRLa+nxPq0UqKm9FiSWmnrcxMuph989oZ1ZFHA2B+nvbuMTF8J 8sESclTSbgkG87DpycJOUwG3XAcXM+80pXuzJscCgYB+Dzxu/09KqoRW8PJIxGVQ zypMrrS07iiPO2FcyCtQf8oi43vQ91Ttt91vAisZ5HNl8k5mDyJAKovANToSVOAy 6kwSz/9GswXdaMqmU7JVOyj4Lj0JN9AuS9ioJPrIrjVMfjORzYU8+i2uZlD94niP 3uE5lF0OWmdJ36qHefIftwKBgQDcPQZcO19H1iGS2FbTYeSvEK5ENM7YRG8FTXIF 4hnjrtjDzYb+tYVWEErznFrifYo/ZJMDYSqgWQ9reusDqqBvkR41mUDmgJMpJ91U MZ2YzmIWVbqz4QrvbtAWY0Bsuh/VtpwiWQAUy+coJj6PgJOvY3m91h+tcm5RfHz/ zIcjawKBgA6kDcOLOnWcvhP3XwtW5dcWlNuBBNEKna+kIT/5Vlrh91y2w7F54DNK i0w5CZCpbTugJmZ67XLHnfongC7e2vAQ3atoT96RU4mf9614qs9LMtGAbnuCLB8+ sT2rnaZKtzr83ensbYkbBxP/zmPBfFQ9FKcIYIA7En8zAIr2T3vJ -----END RSA PRIVATE KEY----- prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/node1.csr000066400000000000000000000020721476331240200251730ustar00rootroot00000000000000-----BEGIN CERTIFICATE REQUEST----- MIIC5TCCAc0CAQAwczELMAkGA1UEBhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIw EAYDVQQHEwlNZWxib3VybmUxFTATBgNVBAoTDHN5c3RlbTpub2RlMTEOMAwGA1UE CxMFbWFzc2wxFjAUBgNVBAMTDXN5c3RlbTpzZXJ2ZXIwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQDVv1ubiu8O2liyqC0ILnb4vnfl3j9DY7XR9YPaLYJ9 Fdd9glDlyvgBXaKpJwWwlKzsrDJB179zhVaP+8QDb9IkdkUGWScp0JyuAdV5uu+f Oboa7N4gK61lIqhwVfL0rD5iZa4DricdV+ZIIobTsaFeESwuxIKfg9MNg6IYBSbU Z1IPFSnzJRd5zXcRvbSaV3TET2RCcKcRZGfExe1AlejP2WktzsOBe03qcJdIb8Kp 0M8525Seax5rHIAakAWdSbFypS5gAlRDWFQ4mGTRFVKwtOa74UZ07GTv0DGaYpDb P2X8a4BWKRUkZPFjiNE97PEdDdt2rPMIh0nFPEuKd+1lAgMBAAGgLTArBgkqhkiG 9w0BCQ4xHjAcMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0B AQsFAAOCAQEAW/tTyJaBfWtbC9hYUmhh8lxUztv2+WT4xaR/jdQ46sk/87vKuwI6 4AkkGfiPLLqgW3xbQOwk5/ynRabttbsgTUHt744RtRFLzfcQKEBZoNPvrfHvmDil YqHIOx2SJ5hzIBwVlVSBn50hdSSED1Ip22DaU8GukzuacB8+2rhg3MOWJbKVt5aR 03H4XkAynLS1FHNOraDIv1eT58D3l4hanrNOZIa0xAuChd25qLO/JHvU/3wccGUA KNg3vGOy2Q8qVBrTFLn+yQHuOr/wSupXESO1jiI/h+txsBQnZ6oYfZnVJ+7o3Oln 3Hguw77aYeTAeZQPPbmJbDLegLG0ZC6RmA== -----END CERTIFICATE REQUEST----- prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/node1.pem000066400000000000000000000026541476331240200251730ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIEAjCCAuqgAwIBAgIUbYMGwSgQF8iRZ5xmhflInj8VZ0owDQYJKoZIhvcNAQEL BQAwYjELMAkGA1UEBhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIwEAYDVQQHEwlN ZWxib3VybmUxDjAMBgNVBAoTBW1hc3NsMQwwCgYDVQQLEwNWSUMxDjAMBgNVBAMT BW1hc3NsMCAXDTIxMDUwNTE2MTYwMFoYDzIxMjEwNDExMTYxNjAwWjBzMQswCQYD VQQGEwJBVTERMA8GA1UECBMIVmljdG9yaWExEjAQBgNVBAcTCU1lbGJvdXJuZTEV MBMGA1UEChMMc3lzdGVtOm5vZGUxMQ4wDAYDVQQLEwVtYXNzbDEWMBQGA1UEAxMN c3lzdGVtOnNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANW/ W5uK7w7aWLKoLQgudvi+d+XeP0NjtdH1g9otgn0V132CUOXK+AFdoqknBbCUrOys MkHXv3OFVo/7xANv0iR2RQZZJynQnK4B1Xm67585uhrs3iArrWUiqHBV8vSsPmJl rgOuJx1X5kgihtOxoV4RLC7Egp+D0w2DohgFJtRnUg8VKfMlF3nNdxG9tJpXdMRP ZEJwpxFkZ8TF7UCV6M/ZaS3Ow4F7Tepwl0hvwqnQzznblJ5rHmscgBqQBZ1JsXKl LmACVENYVDiYZNEVUrC05rvhRnTsZO/QMZpikNs/ZfxrgFYpFSRk8WOI0T3s8R0N 23as8wiHScU8S4p37WUCAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYE FGprx5v+KrO4DeOtA6kps4BL/zKyMB8GA1UdIwQYMBaAFHeA0xJSquoJxmAyWYCb wvuH5a2QMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsF AAOCAQEAmWTdMLyWOrNAS0uY+u3FUV3Hm50xF1PfxbT6wK1hu6vH6B63E0o9K2/1 U25Ie8Y2IzFocKMvbqC+mrY56G0bWoUlMONhthYqm8uTKtjlFO33A9I7WIT9Tw+B nnwZZO7+Ljkd30qSzBinCjrIEx31Vq2pr54ungd8+wK8nfz/zdZnJcqxcN9zvCXB GTE8yCuqGWKk/oDuIzVjr73U0QaWi+vThqJtBjhOIWQHHVJwbIyhuYzUaivgZPYB 8eKXWk4JH3eAcq5z5koNGyCcZd/k4WnvxZYxNBAkoQ6AWVfEMGOCaRjD1FTnMbpG BW79ndJqLmn8OH+DeCnSWhTWxAgg+Q== -----END CERTIFICATE----- prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/node2-csr.json000066400000000000000000000003361476331240200261440ustar00rootroot00000000000000{ "CN": "system:server", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "AU", "L": "Melbourne", "O": "system:node2", "OU": "massl", "ST": "Victoria" } ] } prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/node2-key.pem000066400000000000000000000032171476331240200257560ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAtCtzT9vhRMTbhAg/pm8eBn+4IvVQeVqnHoEon9IKIx5fyvqS Q6Ui3xSik9kJq5FSAa1mScajJwfB1o6ycaSP6n+Q88Py4v7q65n0stCHoJCH0uPw MQyEhwX7nNilV9C4UZTyZ2StDdAjmMBHiN81EJAqH2d4Xtgrd/IIWhljSXm+aPbu QjSz8BtR/7+MswrCdlJ8y6gWi020kt6GSHjmaxI1jStGvBxxksK86v3J97wfNwWY 7GJi70uBrvO0pk5bYckDzUTKeN1QGvBnZ8uDXs7pPysvftJr85GzX0iE9YLMDxO3 qc/PlwCdxM8H6gHTTkLPizGZtpMF9Z497pW9YQIDAQABAoIBAFfQwdCPxHmnVbNB 7fwqNsFGKTLozMOJeuE0ZN+ZGZXKbTha70WHTLrcrO1RIRR9rTHiGXQmHEmez0zL mpAnfHn4mWcm/9DCHTCehpVNbH3HVFxm+yB9EG9bbCsjsVtfASfKaGgauvp7k44V UgiVeqDLE6zg2tunk3BQCOAZdbpOiXrdvoZiGx2Q4SMLPfzmfIyH4BUT836pLTmp o6/yNiFqQWfCgjeEAOQor4TcdzYIT+3wP51HfAjhZKMIvmjwL16ov1/QpmWRD4ni 4svzYpeMYpl5OrZkKeDS4ZIQBGjxk+fzPmfFUbfVRSI2gDORsah8HoRVI4LnwKWn 7kQDv0ECgYEA6V+KVb8bPzCZNbroEZFdug6YtT4yv5Mj3/kpMTIvA3vtu02v8e7F O56yT43QfUZA0Ar37O0HQ6mbpPsRE5RSr70i40RR+slMZVHX/AQViG7oQJGBijPt 1tFdLnb+1wSON3jYt2975Kw2IfgOXprWtEmL5zGuplEUjx9Lbdf1HjkCgYEAxaNe XgXdAiWFoY4Qq6xBRO/WNZCdn3Ysqx6snCtDRilxeNyDoE/6x2Ma9/NRBtIiulAb s09vDRfJKLbzocUhIn8BQ+GkbAS/A6+x2vcuGhK3F84xqZdbrCqvqdJS8K824jug vUCfCBJlyNRDz8kEsN5odLM1xkij93Jv23HvGGkCgYEAptcz6ctfalSPI9eEs5KO REbNK73UwBssaaISreYnsED4G5EVuUuvW8k/xxomtHj2OwWsa4ilSd1GtbL8aVf/ qT35ZCrixP0GjeTuGXC+CDTp+8dKqggoAAzbpi1SUVwjZEsT/EhKdZgcdzqE42Ol HWz7BQUCzEpo/U0tOtFKnxkCgYEAi05Vy8wyNbsg7/jlAzyNXPv4bxUaJTX00kDy xbkw2BmKI/i6xprZVwUiEzdsG3SuicjBXahVzFLBtXMPUy1R57DBwYkgjgriYMTM hlzIIBSk/aCXHMTVFwuXegoH8CJwexIwgHU2I0hkeiQ0EBfOuKRr2CYhdzvoZxhA g9tQ/lECgYAjPYoXfNI3rHCWUmaD5eDJZpE0xuJeiiy5auojykdAc7vVapNaIyMK G3EaU44RtXcSwH19TlH9UCm3MH1QiIwaBOzGcKj3Ut6ZyFKuWDUk4yqvps3uZU/h h16Tp49Ja7/4LY1uuEngg1KMEiWgk5jiU7G0H9zrtEiTj9c3FDKDvg== -----END RSA PRIVATE KEY----- prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/node2.csr000066400000000000000000000020721476331240200251740ustar00rootroot00000000000000-----BEGIN CERTIFICATE REQUEST----- MIIC5TCCAc0CAQAwczELMAkGA1UEBhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIw EAYDVQQHEwlNZWxib3VybmUxFTATBgNVBAoTDHN5c3RlbTpub2RlMjEOMAwGA1UE CxMFbWFzc2wxFjAUBgNVBAMTDXN5c3RlbTpzZXJ2ZXIwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQC0K3NP2+FExNuECD+mbx4Gf7gi9VB5WqcegSif0goj Hl/K+pJDpSLfFKKT2QmrkVIBrWZJxqMnB8HWjrJxpI/qf5Dzw/Li/urrmfSy0Ieg kIfS4/AxDISHBfuc2KVX0LhRlPJnZK0N0COYwEeI3zUQkCofZ3he2Ct38ghaGWNJ eb5o9u5CNLPwG1H/v4yzCsJ2UnzLqBaLTbSS3oZIeOZrEjWNK0a8HHGSwrzq/cn3 vB83BZjsYmLvS4Gu87SmTlthyQPNRMp43VAa8Gdny4Nezuk/Ky9+0mvzkbNfSIT1 gswPE7epz8+XAJ3EzwfqAdNOQs+LMZm2kwX1nj3ulb1hAgMBAAGgLTArBgkqhkiG 9w0BCQ4xHjAcMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0B AQsFAAOCAQEARh0Pi36mNmyprU4j25GWNqQYCJ6cBGnaPeiwr8/F3rsGsF4LTQdP xW2oBrEWyYRidNCkSMrPkcSiXu1Loy9APwSAXgJZWMYy0Ccdbd3P7dtGNOZkKaLA QKntGA5E1YAbzNhlt7NviGpqZ49K2aOgcGBTnDZ7xDzmg4uo3tcHgzOCwarYZT8l qVpc3jAyxRBOrxVKPZNFb4hAFvUm8k6/Etn5n4otN0JT3KGewbfQY50CxW5ShK52 QCs2PmFMYHHmG11FD3W755MxzhL6UmMy20GUgWWthGmR1LugcBgDtWO/7bqqC9tT XYDTDJ1j0g3Y0cvy2+kltrams4lGE3xs6g== -----END CERTIFICATE REQUEST----- prometheus-alertmanager-0.28.1+ds/cluster/testdata/certs/node2.pem000066400000000000000000000026541476331240200251740ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIEAjCCAuqgAwIBAgIUex5xEYsDJPUg8idU0Sql2ixGdTwwDQYJKoZIhvcNAQEL BQAwYjELMAkGA1UEBhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIwEAYDVQQHEwlN ZWxib3VybmUxDjAMBgNVBAoTBW1hc3NsMQwwCgYDVQQLEwNWSUMxDjAMBgNVBAMT BW1hc3NsMCAXDTIxMDUwNTE2MTYwMFoYDzIxMjEwNDExMTYxNjAwWjBzMQswCQYD VQQGEwJBVTERMA8GA1UECBMIVmljdG9yaWExEjAQBgNVBAcTCU1lbGJvdXJuZTEV MBMGA1UEChMMc3lzdGVtOm5vZGUyMQ4wDAYDVQQLEwVtYXNzbDEWMBQGA1UEAxMN c3lzdGVtOnNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALQr c0/b4UTE24QIP6ZvHgZ/uCL1UHlapx6BKJ/SCiMeX8r6kkOlIt8UopPZCauRUgGt ZknGoycHwdaOsnGkj+p/kPPD8uL+6uuZ9LLQh6CQh9Lj8DEMhIcF+5zYpVfQuFGU 8mdkrQ3QI5jAR4jfNRCQKh9neF7YK3fyCFoZY0l5vmj27kI0s/AbUf+/jLMKwnZS fMuoFotNtJLehkh45msSNY0rRrwccZLCvOr9yfe8HzcFmOxiYu9Lga7ztKZOW2HJ A81EynjdUBrwZ2fLg17O6T8rL37Sa/ORs19IhPWCzA8Tt6nPz5cAncTPB+oB005C z4sxmbaTBfWePe6VvWECAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYE FDNgivphLRqKzV8n29GJq6S2I+CQMB8GA1UdIwQYMBaAFHeA0xJSquoJxmAyWYCb wvuH5a2QMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsF AAOCAQEAnNG3nzycALGf+N8PuG4sUIkD+SYA1nOEgfD2KiGNyuTYHhGgFXTw8KzB olH05VidldBvC0+pl5EqZAp9qdzpw6Z5Mb0gdoZY6TeKDUo022G3BHLMUGLp8y+i KE6+awwgdJZ6vPbdnWAh7VM/HCUrGIIPmLFan13j/2RiMfaDxdMAowPmbVc8MLgA JHI6pPo8D1DacEvMM09qGtwQEUoREOWJ/SzTWl1nc/IAS1yOL1LCyKLcoj/HWqjG 3LXficQ7rf+Cpn1GnrKwMziT0OLDLxOs/+5d3nFSLxqF1lpykhPPkmHOHnuY8sMX Qdndn9QILdp5GNvqiVNQYcQa/gOb6g== -----END CERTIFICATE----- prometheus-alertmanager-0.28.1+ds/cluster/testdata/empty_tls_config.yml000066400000000000000000000000031476331240200264140ustar00rootroot00000000000000{} prometheus-alertmanager-0.28.1+ds/cluster/testdata/tls_config_node1.yml000066400000000000000000000004211476331240200262700ustar00rootroot00000000000000tls_server_config: cert_file: "certs/node1.pem" key_file: "certs/node1-key.pem" client_ca_file: "certs/ca.pem" client_auth_type: "VerifyClientCertIfGiven" tls_client_config: cert_file: "certs/node1.pem" key_file: "certs/node1-key.pem" ca_file: "certs/ca.pem" prometheus-alertmanager-0.28.1+ds/cluster/testdata/tls_config_node2.yml000066400000000000000000000004211476331240200262710ustar00rootroot00000000000000tls_server_config: cert_file: "certs/node2.pem" key_file: "certs/node2-key.pem" client_ca_file: "certs/ca.pem" client_auth_type: "VerifyClientCertIfGiven" tls_client_config: cert_file: "certs/node2.pem" key_file: "certs/node2-key.pem" ca_file: "certs/ca.pem" prometheus-alertmanager-0.28.1+ds/cluster/testdata/tls_config_with_missing_client.yml000066400000000000000000000002431476331240200313260ustar00rootroot00000000000000tls_server_config: cert_file: "certs/node2.pem" key_file: "certs/node2-key.pem" client_ca_file: "certs/ca.pem" client_auth_type: "VerifyClientCertIfGiven" prometheus-alertmanager-0.28.1+ds/cluster/testdata/tls_config_with_missing_server.yml000066400000000000000000000001561476331240200313610ustar00rootroot00000000000000tls_client_config: cert_file: "certs/node1.pem" key_file: "certs/node1-key.pem" ca_file: "certs/ca.pem" prometheus-alertmanager-0.28.1+ds/cluster/tls_config.go000066400000000000000000000027761476331240200232140ustar00rootroot00000000000000// Copyright 2020 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cluster import ( "fmt" "os" "path/filepath" "github.com/prometheus/common/config" "github.com/prometheus/exporter-toolkit/web" "gopkg.in/yaml.v2" ) type TLSTransportConfig struct { TLSServerConfig *web.TLSConfig `yaml:"tls_server_config"` TLSClientConfig *config.TLSConfig `yaml:"tls_client_config"` } func GetTLSTransportConfig(configPath string) (*TLSTransportConfig, error) { if configPath == "" { return nil, nil } bytes, err := os.ReadFile(configPath) if err != nil { return nil, err } cfg := &TLSTransportConfig{ TLSClientConfig: &config.TLSConfig{}, } if err := yaml.UnmarshalStrict(bytes, cfg); err != nil { return nil, err } if cfg.TLSServerConfig == nil { return nil, fmt.Errorf("missing 'tls_server_config' entry in the TLS configuration") } cfg.TLSServerConfig.SetDirectory(filepath.Dir(configPath)) cfg.TLSClientConfig.SetDirectory(filepath.Dir(configPath)) return cfg, nil } prometheus-alertmanager-0.28.1+ds/cluster/tls_connection.go000066400000000000000000000114521476331240200240750ustar00rootroot00000000000000// Copyright 2020 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cluster import ( "bufio" "crypto/tls" "encoding/binary" "errors" "fmt" "io" "net" "sync" "time" "github.com/gogo/protobuf/proto" "github.com/hashicorp/memberlist" "github.com/prometheus/alertmanager/cluster/clusterpb" ) const ( version = "v0.1.0" uint32length = 4 ) // tlsConn wraps net.Conn with connection pooling data. type tlsConn struct { mtx sync.Mutex connection net.Conn live bool } func dialTLSConn(addr string, timeout time.Duration, tlsConfig *tls.Config) (*tlsConn, error) { dialer := &net.Dialer{Timeout: timeout} conn, err := tls.DialWithDialer(dialer, network, addr, tlsConfig) if err != nil { return nil, err } return &tlsConn{ connection: conn, live: true, }, nil } func rcvTLSConn(conn net.Conn) *tlsConn { return &tlsConn{ connection: conn, live: true, } } // Write writes a byte array into the connection. It returns the number of bytes written and an error. func (conn *tlsConn) Write(b []byte) (int, error) { conn.mtx.Lock() defer conn.mtx.Unlock() n, err := conn.connection.Write(b) if err != nil { conn.live = false } return n, err } func (conn *tlsConn) alive() bool { conn.mtx.Lock() defer conn.mtx.Unlock() return conn.live } func (conn *tlsConn) getRawConn() net.Conn { conn.mtx.Lock() defer conn.mtx.Unlock() raw := conn.connection conn.live = false conn.connection = nil return raw } // writePacket writes all the bytes in one operation so no concurrent write happens in between. // It prefixes the message length. func (conn *tlsConn) writePacket(fromAddr string, b []byte) error { msg, err := proto.Marshal( &clusterpb.MemberlistMessage{ Version: version, Kind: clusterpb.MemberlistMessage_PACKET, FromAddr: fromAddr, Msg: b, }, ) if err != nil { return fmt.Errorf("unable to marshal memeberlist packet message: %w", err) } buf := make([]byte, uint32length, uint32length+len(msg)) binary.LittleEndian.PutUint32(buf, uint32(len(msg))) _, err = conn.Write(append(buf, msg...)) return err } // writeStream simply signals that this is a stream connection by sending the connection type. func (conn *tlsConn) writeStream() error { msg, err := proto.Marshal( &clusterpb.MemberlistMessage{ Version: version, Kind: clusterpb.MemberlistMessage_STREAM, }, ) if err != nil { return fmt.Errorf("unable to marshal memeberlist stream message: %w", err) } buf := make([]byte, uint32length, uint32length+len(msg)) binary.LittleEndian.PutUint32(buf, uint32(len(msg))) _, err = conn.Write(append(buf, msg...)) return err } // read returns a packet for packet connections or an error if there is one. // It returns nothing if the connection is meant to be streamed. func (conn *tlsConn) read() (*memberlist.Packet, error) { if conn.connection == nil { return nil, errors.New("nil connection") } conn.mtx.Lock() reader := bufio.NewReader(conn.connection) lenBuf := make([]byte, uint32length) _, err := io.ReadFull(reader, lenBuf) if err != nil { return nil, fmt.Errorf("error reading message length: %w", err) } msgLen := binary.LittleEndian.Uint32(lenBuf) msgBuf := make([]byte, msgLen) _, err = io.ReadFull(reader, msgBuf) conn.mtx.Unlock() if err != nil { return nil, fmt.Errorf("error reading message: %w", err) } pb := clusterpb.MemberlistMessage{} err = proto.Unmarshal(msgBuf, &pb) if err != nil { return nil, fmt.Errorf("error parsing message: %w", err) } if pb.Version != version { return nil, errors.New("tls memberlist message version incompatible") } switch pb.Kind { case clusterpb.MemberlistMessage_STREAM: return nil, nil case clusterpb.MemberlistMessage_PACKET: return toPacket(pb) default: return nil, errors.New("could not read from either stream or packet channel") } } func toPacket(pb clusterpb.MemberlistMessage) (*memberlist.Packet, error) { addr, err := net.ResolveTCPAddr(network, pb.FromAddr) if err != nil { return nil, fmt.Errorf("error parsing packet sender address: %w", err) } return &memberlist.Packet{ Buf: pb.Msg, From: addr, Timestamp: time.Now(), }, nil } func (conn *tlsConn) Close() error { conn.mtx.Lock() defer conn.mtx.Unlock() conn.live = false if conn.connection == nil { return nil } return conn.connection.Close() } prometheus-alertmanager-0.28.1+ds/cluster/tls_connection_test.go000066400000000000000000000052061476331240200251340ustar00rootroot00000000000000// Copyright 2020 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cluster import ( "errors" "net" "testing" "time" "github.com/stretchr/testify/require" ) func TestWriteStream(t *testing.T) { w, r := net.Pipe() conn := &tlsConn{ connection: w, } defer r.Close() go func() { conn.writeStream() w.Close() }() packet, err := rcvTLSConn(r).read() require.NoError(t, err) require.Nil(t, packet) } func TestWritePacket(t *testing.T) { testCases := []struct { fromAddr string msg string }{ {fromAddr: "127.0.0.1:8001", msg: ""}, {fromAddr: "10.0.0.4:9094", msg: "hello"}, {fromAddr: "127.0.0.1:8001", msg: "0"}, } for _, tc := range testCases { w, r := net.Pipe() defer r.Close() go func() { conn := &tlsConn{connection: w} conn.writePacket(tc.fromAddr, []byte(tc.msg)) w.Close() }() packet, err := rcvTLSConn(r).read() require.NoError(t, err) require.Equal(t, tc.msg, string(packet.Buf)) require.Equal(t, tc.fromAddr, packet.From.String()) } } func TestRead_Nil(t *testing.T) { packet, err := (&tlsConn{}).read() require.Nil(t, packet) require.Error(t, err) } func TestTLSConn_Close(t *testing.T) { testCases := []string{ "foo", "bar", } for _, tc := range testCases { c := &tlsConn{ connection: &mockConn{ errMsg: tc, }, live: true, } err := c.Close() require.Equal(t, errors.New(tc), err, tc) require.False(t, c.alive()) require.True(t, c.connection.(*mockConn).closed) } } type mockConn struct { closed bool errMsg string } func (m *mockConn) Read(b []byte) (n int, err error) { panic("implement me") } func (m *mockConn) Write(b []byte) (n int, err error) { panic("implement me") } func (m *mockConn) Close() error { m.closed = true return errors.New(m.errMsg) } func (m *mockConn) LocalAddr() net.Addr { panic("implement me") } func (m *mockConn) RemoteAddr() net.Addr { panic("implement me") } func (m *mockConn) SetDeadline(t time.Time) error { panic("implement me") } func (m *mockConn) SetReadDeadline(t time.Time) error { panic("implement me") } func (m *mockConn) SetWriteDeadline(t time.Time) error { panic("implement me") } prometheus-alertmanager-0.28.1+ds/cluster/tls_transport.go000066400000000000000000000237231476331240200237760ustar00rootroot00000000000000// Copyright 2020 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Forked from https://github.com/mxinden/memberlist-tls-transport. // Implements Transport interface so that all gossip communications occur via TLS over TCP. package cluster import ( "context" "crypto/tls" "errors" "fmt" "log/slog" "net" "strings" "time" "github.com/hashicorp/go-sockaddr" "github.com/hashicorp/memberlist" "github.com/prometheus/client_golang/prometheus" common "github.com/prometheus/common/config" "github.com/prometheus/exporter-toolkit/web" ) const ( metricNamespace = "alertmanager" metricSubsystem = "tls_transport" network = "tcp" ) // TLSTransport is a Transport implementation that uses TLS over TCP for both // packet and stream operations. type TLSTransport struct { ctx context.Context cancel context.CancelFunc logger *slog.Logger bindAddr string bindPort int done chan struct{} listener net.Listener packetCh chan *memberlist.Packet streamCh chan net.Conn connPool *connectionPool tlsServerCfg *tls.Config tlsClientCfg *tls.Config packetsSent prometheus.Counter packetsRcvd prometheus.Counter streamsSent prometheus.Counter streamsRcvd prometheus.Counter readErrs prometheus.Counter writeErrs *prometheus.CounterVec } // NewTLSTransport returns a TLS transport with the given configuration. // On successful initialization, a tls listener will be created and listening. // A valid bindAddr is required. If bindPort == 0, the system will assign // a free port automatically. func NewTLSTransport( ctx context.Context, logger *slog.Logger, reg prometheus.Registerer, bindAddr string, bindPort int, cfg *TLSTransportConfig, ) (*TLSTransport, error) { if cfg == nil { return nil, errors.New("must specify TLSTransportConfig") } tlsServerCfg, err := web.ConfigToTLSConfig(cfg.TLSServerConfig) if err != nil { return nil, fmt.Errorf("invalid TLS server config: %w", err) } tlsClientCfg, err := common.NewTLSConfig(cfg.TLSClientConfig) if err != nil { return nil, fmt.Errorf("invalid TLS client config: %w", err) } ip := net.ParseIP(bindAddr) if ip == nil { return nil, fmt.Errorf("invalid bind address \"%s\"", bindAddr) } addr := &net.TCPAddr{IP: ip, Port: bindPort} listener, err := tls.Listen(network, addr.String(), tlsServerCfg) if err != nil { return nil, fmt.Errorf("failed to start TLS listener on %q port %d: %w", bindAddr, bindPort, err) } connPool, err := newConnectionPool(tlsClientCfg) if err != nil { return nil, fmt.Errorf("failed to initialize tls transport connection pool: %w", err) } ctx, cancel := context.WithCancel(ctx) t := &TLSTransport{ ctx: ctx, cancel: cancel, logger: logger, bindAddr: bindAddr, bindPort: bindPort, done: make(chan struct{}), listener: listener, packetCh: make(chan *memberlist.Packet), streamCh: make(chan net.Conn), connPool: connPool, tlsServerCfg: tlsServerCfg, tlsClientCfg: tlsClientCfg, } t.registerMetrics(reg) go func() { t.listen() close(t.done) }() return t, nil } // FinalAdvertiseAddr is given the user's configured values (which // might be empty) and returns the desired IP and port to advertise to // the rest of the cluster. func (t *TLSTransport) FinalAdvertiseAddr(ip string, port int) (net.IP, int, error) { var advertiseAddr net.IP var advertisePort int if ip != "" { advertiseAddr = net.ParseIP(ip) if advertiseAddr == nil { return nil, 0, fmt.Errorf("failed to parse advertise address %q", ip) } if ip4 := advertiseAddr.To4(); ip4 != nil { advertiseAddr = ip4 } advertisePort = port } else { if t.bindAddr == "0.0.0.0" { // Otherwise, if we're not bound to a specific IP, let's // use a suitable private IP address. var err error ip, err = sockaddr.GetPrivateIP() if err != nil { return nil, 0, fmt.Errorf("failed to get interface addresses: %w", err) } if ip == "" { return nil, 0, fmt.Errorf("no private IP address found, and explicit IP not provided") } advertiseAddr = net.ParseIP(ip) if advertiseAddr == nil { return nil, 0, fmt.Errorf("failed to parse advertise address: %q", ip) } } else { advertiseAddr = t.listener.Addr().(*net.TCPAddr).IP } advertisePort = t.GetAutoBindPort() } return advertiseAddr, advertisePort, nil } // PacketCh returns a channel that can be read to receive incoming // packets from other peers. func (t *TLSTransport) PacketCh() <-chan *memberlist.Packet { return t.packetCh } // StreamCh returns a channel that can be read to handle incoming stream // connections from other peers. func (t *TLSTransport) StreamCh() <-chan net.Conn { return t.streamCh } // Shutdown is called when memberlist is shutting down; this gives the // TLS Transport a chance to clean up the listener and other goroutines. func (t *TLSTransport) Shutdown() error { t.logger.Debug("shutting down tls transport") t.cancel() err := t.listener.Close() t.connPool.shutdown() <-t.done return err } // WriteTo is a packet-oriented interface that borrows a connection // from the pool, and writes to it. It also returns a timestamp of when // the packet was written. func (t *TLSTransport) WriteTo(b []byte, addr string) (time.Time, error) { conn, err := t.connPool.borrowConnection(addr, DefaultTCPTimeout) if err != nil { t.writeErrs.WithLabelValues("packet").Inc() return time.Now(), fmt.Errorf("failed to dial: %w", err) } fromAddr := t.listener.Addr().String() err = conn.writePacket(fromAddr, b) if err != nil { t.writeErrs.WithLabelValues("packet").Inc() return time.Now(), fmt.Errorf("failed to write packet: %w", err) } t.packetsSent.Add(float64(len(b))) return time.Now(), nil } // DialTimeout is used to create a connection that allows memberlist // to perform two-way communications with a peer. func (t *TLSTransport) DialTimeout(addr string, timeout time.Duration) (net.Conn, error) { conn, err := dialTLSConn(addr, timeout, t.tlsClientCfg) if err != nil { t.writeErrs.WithLabelValues("stream").Inc() return nil, fmt.Errorf("failed to dial: %w", err) } err = conn.writeStream() netConn := conn.getRawConn() if err != nil { t.writeErrs.WithLabelValues("stream").Inc() return netConn, fmt.Errorf("failed to create stream connection: %w", err) } t.streamsSent.Inc() return netConn, nil } // GetAutoBindPort returns the bind port that was automatically given by the system // if a bindPort of 0 was specified during instantiation. func (t *TLSTransport) GetAutoBindPort() int { return t.listener.Addr().(*net.TCPAddr).Port } // listen starts up multiple handlers accepting concurrent connections. func (t *TLSTransport) listen() { for { select { case <-t.ctx.Done(): return default: conn, err := t.listener.Accept() if err != nil { // The error "use of closed network connection" is returned when the listener is closed. // It is not exported in a more reasonable way. See https://github.com/golang/go/issues/4373. if strings.Contains(err.Error(), "use of closed network connection") { return } t.readErrs.Inc() t.logger.Debug("error accepting connection", "err", err) } else { go t.handle(conn) } } } } func (t *TLSTransport) handle(conn net.Conn) { for { packet, err := rcvTLSConn(conn).read() if err != nil { t.logger.Debug("error reading from connection", "err", err) t.readErrs.Inc() return } select { case <-t.ctx.Done(): return default: if packet != nil { n := len(packet.Buf) t.packetCh <- packet t.packetsRcvd.Add(float64(n)) } else { t.streamCh <- conn t.streamsRcvd.Inc() return } } } } func (t *TLSTransport) registerMetrics(reg prometheus.Registerer) { t.packetsSent = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: metricNamespace, Subsystem: metricSubsystem, Name: "packet_bytes_sent_total", Help: "The number of packet bytes sent to outgoing connections (excluding internal metadata).", }, ) t.packetsRcvd = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: metricNamespace, Subsystem: metricSubsystem, Name: "packet_bytes_received_total", Help: "The number of packet bytes received from incoming connections (excluding internal metadata).", }, ) t.streamsSent = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: metricNamespace, Subsystem: metricSubsystem, Name: "stream_connections_sent_total", Help: "The number of stream connections sent.", }, ) t.streamsRcvd = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: metricNamespace, Subsystem: metricSubsystem, Name: "stream_connections_received_total", Help: "The number of stream connections received.", }, ) t.readErrs = prometheus.NewCounter( prometheus.CounterOpts{ Namespace: metricNamespace, Subsystem: metricSubsystem, Name: "read_errors_total", Help: "The number of errors encountered while reading from incoming connections.", }, ) t.writeErrs = prometheus.NewCounterVec( prometheus.CounterOpts{ Namespace: metricNamespace, Subsystem: metricSubsystem, Name: "write_errors_total", Help: "The number of errors encountered while writing to outgoing connections.", }, []string{"connection_type"}, ) if reg != nil { reg.MustRegister(t.packetsSent) reg.MustRegister(t.packetsRcvd) reg.MustRegister(t.streamsSent) reg.MustRegister(t.streamsRcvd) reg.MustRegister(t.readErrs) reg.MustRegister(t.writeErrs) } } prometheus-alertmanager-0.28.1+ds/cluster/tls_transport_test.go000066400000000000000000000171501476331240200250320ustar00rootroot00000000000000// Copyright 2020 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package cluster import ( "bufio" "bytes" context2 "context" "fmt" "io" "net" "sync" "testing" "time" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" ) var logger = promslog.NewNopLogger() func freeport() int { lis, _ := net.Listen(network, "127.0.0.1:0") defer lis.Close() return lis.Addr().(*net.TCPAddr).Port } func newTLSTransport(file, address string, port int) (*TLSTransport, error) { cfg, err := GetTLSTransportConfig(file) if err != nil { return nil, err } return NewTLSTransport(context2.Background(), promslog.NewNopLogger(), nil, address, port, cfg) } func TestNewTLSTransport(t *testing.T) { port := freeport() for _, tc := range []struct { bindAddr string bindPort int tlsConfFile string err string }{ { err: "must specify TLSTransportConfig", }, { tlsConfFile: "testdata/empty_tls_config.yml", err: "missing 'tls_server_config' entry in the TLS configuration", }, { tlsConfFile: "testdata/tls_config_with_missing_server.yml", err: "missing 'tls_server_config' entry in the TLS configuration", }, { err: "invalid bind address \"\"", tlsConfFile: "testdata/tls_config_node1.yml", }, { bindAddr: "abc123", err: "invalid bind address \"abc123\"", tlsConfFile: "testdata/tls_config_node1.yml", }, { bindAddr: localhost, bindPort: 0, tlsConfFile: "testdata/tls_config_node1.yml", }, { bindAddr: localhost, bindPort: port, tlsConfFile: "testdata/tls_config_node2.yml", }, { tlsConfFile: "testdata/tls_config_with_missing_client.yml", bindAddr: localhost, }, } { t.Run("", func(t *testing.T) { transport, err := newTLSTransport(tc.tlsConfFile, tc.bindAddr, tc.bindPort) if len(tc.err) > 0 { require.Error(t, err) require.Equal(t, tc.err, err.Error()) return } defer transport.Shutdown() require.NoError(t, err) require.Equal(t, tc.bindAddr, transport.bindAddr) require.Equal(t, tc.bindPort, transport.bindPort) require.NotNil(t, transport.listener) }) } } const localhost = "127.0.0.1" func TestFinalAdvertiseAddr(t *testing.T) { ports := [...]int{freeport(), freeport(), freeport()} testCases := []struct { bindAddr string bindPort int inputIP string inputPort int expectedIP string expectedPort int expectedError string }{ {bindAddr: localhost, bindPort: ports[0], inputIP: "10.0.0.5", inputPort: 54231, expectedIP: "10.0.0.5", expectedPort: 54231}, {bindAddr: localhost, bindPort: ports[1], inputIP: "invalid", inputPort: 54231, expectedError: "failed to parse advertise address \"invalid\""}, {bindAddr: "0.0.0.0", bindPort: 0, inputIP: "", inputPort: 0, expectedIP: "random"}, {bindAddr: localhost, bindPort: 0, inputIP: "", inputPort: 0, expectedIP: localhost}, {bindAddr: localhost, bindPort: ports[2], inputIP: "", inputPort: 0, expectedIP: localhost, expectedPort: ports[2]}, } for _, tc := range testCases { tlsConf := loadTLSTransportConfig(t, "testdata/tls_config_node1.yml") transport, err := NewTLSTransport(context2.Background(), logger, nil, tc.bindAddr, tc.bindPort, tlsConf) require.NoError(t, err) ip, port, err := transport.FinalAdvertiseAddr(tc.inputIP, tc.inputPort) if len(tc.expectedError) > 0 { require.Equal(t, tc.expectedError, err.Error()) } else { require.NoError(t, err) if tc.expectedPort == 0 { require.Less(t, tc.expectedPort, port) } else { require.Equal(t, tc.expectedPort, port) } if tc.expectedIP == "random" { require.NotNil(t, ip) } else { require.Equal(t, tc.expectedIP, ip.String()) } } transport.Shutdown() } } func TestWriteTo(t *testing.T) { tlsConf1 := loadTLSTransportConfig(t, "testdata/tls_config_node1.yml") t1, _ := NewTLSTransport(context2.Background(), logger, nil, "127.0.0.1", 0, tlsConf1) defer t1.Shutdown() tlsConf2 := loadTLSTransportConfig(t, "testdata/tls_config_node2.yml") t2, _ := NewTLSTransport(context2.Background(), logger, nil, "127.0.0.1", 0, tlsConf2) defer t2.Shutdown() from := fmt.Sprintf("%s:%d", t1.bindAddr, t1.GetAutoBindPort()) to := fmt.Sprintf("%s:%d", t2.bindAddr, t2.GetAutoBindPort()) sent := []byte(("test packet")) _, err := t1.WriteTo(sent, to) require.NoError(t, err) packet := <-t2.PacketCh() require.Equal(t, sent, packet.Buf) require.Equal(t, from, packet.From.String()) } func BenchmarkWriteTo(b *testing.B) { tlsConf1 := loadTLSTransportConfig(b, "testdata/tls_config_node1.yml") t1, _ := NewTLSTransport(context2.Background(), logger, nil, "127.0.0.1", 0, tlsConf1) defer t1.Shutdown() tlsConf2 := loadTLSTransportConfig(b, "testdata/tls_config_node2.yml") t2, _ := NewTLSTransport(context2.Background(), logger, nil, "127.0.0.1", 0, tlsConf2) defer t2.Shutdown() b.ResetTimer() from := fmt.Sprintf("%s:%d", t1.bindAddr, t1.GetAutoBindPort()) to := fmt.Sprintf("%s:%d", t2.bindAddr, t2.GetAutoBindPort()) sent := []byte(("test packet")) _, err := t1.WriteTo(sent, to) require.NoError(b, err) packet := <-t2.PacketCh() require.Equal(b, sent, packet.Buf) require.Equal(b, from, packet.From.String()) } func TestDialTimeout(t *testing.T) { tlsConf1 := loadTLSTransportConfig(t, "testdata/tls_config_node1.yml") t1, err := NewTLSTransport(context2.Background(), logger, nil, "127.0.0.1", 0, tlsConf1) require.NoError(t, err) defer t1.Shutdown() tlsConf2 := loadTLSTransportConfig(t, "testdata/tls_config_node2.yml") t2, err := NewTLSTransport(context2.Background(), logger, nil, "127.0.0.1", 0, tlsConf2) require.NoError(t, err) defer t2.Shutdown() addr := fmt.Sprintf("%s:%d", t2.bindAddr, t2.GetAutoBindPort()) from, err := t1.DialTimeout(addr, 5*time.Second) require.NoError(t, err) defer from.Close() var to net.Conn var wg sync.WaitGroup wg.Add(1) go func() { to = <-t2.StreamCh() wg.Done() }() sent := []byte(("test stream")) m, err := from.Write(sent) require.NoError(t, err) require.Positive(t, m) wg.Wait() reader := bufio.NewReader(to) buf := make([]byte, len(sent)) n, err := io.ReadFull(reader, buf) require.NoError(t, err) require.Len(t, sent, n) require.Equal(t, sent, buf) } func TestShutdown(t *testing.T) { var buf bytes.Buffer promslogConfig := &promslog.Config{Writer: &buf} logger := promslog.New(promslogConfig) // Set logger to debug, otherwise it won't catch some logging from `Shutdown()` method. _ = promslogConfig.Level.Set("debug") tlsConf1 := loadTLSTransportConfig(t, "testdata/tls_config_node1.yml") t1, _ := NewTLSTransport(context2.Background(), logger, nil, "127.0.0.1", 0, tlsConf1) // Sleeping to make sure listeners have started and can subsequently be shut down gracefully. time.Sleep(500 * time.Millisecond) err := t1.Shutdown() require.NoError(t, err) require.NotContains(t, buf.String(), "use of closed network connection") require.Contains(t, buf.String(), "shutting down tls transport") } func loadTLSTransportConfig(tb testing.TB, filename string) *TLSTransportConfig { tb.Helper() config, err := GetTLSTransportConfig(filename) if err != nil { tb.Fatal(err) } return config } prometheus-alertmanager-0.28.1+ds/cmd/000077500000000000000000000000001476331240200176045ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/cmd/alertmanager/000077500000000000000000000000001476331240200222465ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/cmd/alertmanager/main.go000066400000000000000000000547271476331240200235400ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "context" "errors" "fmt" "log/slog" "net" "net/http" "net/url" "os" "os/signal" "path/filepath" "runtime" "strings" "sync" "syscall" "time" "github.com/KimMachineGun/automemlimit/memlimit" "github.com/alecthomas/kingpin/v2" "github.com/prometheus/client_golang/prometheus" versioncollector "github.com/prometheus/client_golang/prometheus/collectors/version" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" promslogflag "github.com/prometheus/common/promslog/flag" "github.com/prometheus/common/route" "github.com/prometheus/common/version" "github.com/prometheus/exporter-toolkit/web" webflag "github.com/prometheus/exporter-toolkit/web/kingpinflag" "go.uber.org/automaxprocs/maxprocs" "github.com/prometheus/alertmanager/api" "github.com/prometheus/alertmanager/cluster" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/config/receiver" "github.com/prometheus/alertmanager/dispatch" "github.com/prometheus/alertmanager/featurecontrol" "github.com/prometheus/alertmanager/inhibit" "github.com/prometheus/alertmanager/matcher/compat" "github.com/prometheus/alertmanager/nflog" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/provider/mem" "github.com/prometheus/alertmanager/silence" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/timeinterval" "github.com/prometheus/alertmanager/types" "github.com/prometheus/alertmanager/ui" reactapp "github.com/prometheus/alertmanager/ui/react-app" ) var ( requestDuration = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Name: "alertmanager_http_request_duration_seconds", Help: "Histogram of latencies for HTTP requests.", Buckets: []float64{.05, 0.1, .25, .5, .75, 1, 2, 5, 20, 60}, NativeHistogramBucketFactor: 1.1, NativeHistogramMaxBucketNumber: 100, NativeHistogramMinResetDuration: 1 * time.Hour, }, []string{"handler", "method"}, ) responseSize = prometheus.NewHistogramVec( prometheus.HistogramOpts{ Name: "alertmanager_http_response_size_bytes", Help: "Histogram of response size for HTTP requests.", Buckets: prometheus.ExponentialBuckets(100, 10, 7), }, []string{"handler", "method"}, ) clusterEnabled = prometheus.NewGauge( prometheus.GaugeOpts{ Name: "alertmanager_cluster_enabled", Help: "Indicates whether the clustering is enabled or not.", }, ) configuredReceivers = prometheus.NewGauge( prometheus.GaugeOpts{ Name: "alertmanager_receivers", Help: "Number of configured receivers.", }, ) configuredIntegrations = prometheus.NewGauge( prometheus.GaugeOpts{ Name: "alertmanager_integrations", Help: "Number of configured integrations.", }, ) configuredInhibitionRules = prometheus.NewGauge( prometheus.GaugeOpts{ Name: "alertmanager_inhibition_rules", Help: "Number of configured inhibition rules.", }) promslogConfig = promslog.Config{} ) func init() { prometheus.MustRegister(requestDuration) prometheus.MustRegister(responseSize) prometheus.MustRegister(clusterEnabled) prometheus.MustRegister(configuredReceivers) prometheus.MustRegister(configuredIntegrations) prometheus.MustRegister(configuredInhibitionRules) prometheus.MustRegister(versioncollector.NewCollector("alertmanager")) } func instrumentHandler(handlerName string, handler http.HandlerFunc) http.HandlerFunc { handlerLabel := prometheus.Labels{"handler": handlerName} return promhttp.InstrumentHandlerDuration( requestDuration.MustCurryWith(handlerLabel), promhttp.InstrumentHandlerResponseSize( responseSize.MustCurryWith(handlerLabel), handler, ), ) } const defaultClusterAddr = "0.0.0.0:9094" func main() { os.Exit(run()) } func run() int { if os.Getenv("DEBUG") != "" { runtime.SetBlockProfileRate(20) runtime.SetMutexProfileFraction(20) } var ( configFile = kingpin.Flag("config.file", "Alertmanager configuration file name.").Default("alertmanager.yml").String() dataDir = kingpin.Flag("storage.path", "Base path for data storage.").Default("data/").String() retention = kingpin.Flag("data.retention", "How long to keep data for.").Default("120h").Duration() maintenanceInterval = kingpin.Flag("data.maintenance-interval", "Interval between garbage collection and snapshotting to disk of the silences and the notification logs.").Default("15m").Duration() maxSilences = kingpin.Flag("silences.max-silences", "Maximum number of silences, including expired silences. If negative or zero, no limit is set.").Default("0").Int() maxSilenceSizeBytes = kingpin.Flag("silences.max-silence-size-bytes", "Maximum silence size in bytes. If negative or zero, no limit is set.").Default("0").Int() alertGCInterval = kingpin.Flag("alerts.gc-interval", "Interval between alert GC.").Default("30m").Duration() webConfig = webflag.AddFlags(kingpin.CommandLine, ":9093") externalURL = kingpin.Flag("web.external-url", "The URL under which Alertmanager is externally reachable (for example, if Alertmanager is served via a reverse proxy). Used for generating relative and absolute links back to Alertmanager itself. If the URL has a path portion, it will be used to prefix all HTTP endpoints served by Alertmanager. If omitted, relevant URL components will be derived automatically.").String() routePrefix = kingpin.Flag("web.route-prefix", "Prefix for the internal routes of web endpoints. Defaults to path of --web.external-url.").String() getConcurrency = kingpin.Flag("web.get-concurrency", "Maximum number of GET requests processed concurrently. If negative or zero, the limit is GOMAXPROC or 8, whichever is larger.").Default("0").Int() httpTimeout = kingpin.Flag("web.timeout", "Timeout for HTTP requests. If negative or zero, no timeout is set.").Default("0").Duration() memlimitRatio = kingpin.Flag("auto-gomemlimit.ratio", "The ratio of reserved GOMEMLIMIT memory to the detected maximum container or system memory. The value must be greater than 0 and less than or equal to 1."). Default("0.9").Float64() clusterBindAddr = kingpin.Flag("cluster.listen-address", "Listen address for cluster. Set to empty string to disable HA mode."). Default(defaultClusterAddr).String() clusterAdvertiseAddr = kingpin.Flag("cluster.advertise-address", "Explicit address to advertise in cluster.").String() peers = kingpin.Flag("cluster.peer", "Initial peers (may be repeated).").Strings() peerTimeout = kingpin.Flag("cluster.peer-timeout", "Time to wait between peers to send notifications.").Default("15s").Duration() gossipInterval = kingpin.Flag("cluster.gossip-interval", "Interval between sending gossip messages. By lowering this value (more frequent) gossip messages are propagated across the cluster more quickly at the expense of increased bandwidth.").Default(cluster.DefaultGossipInterval.String()).Duration() pushPullInterval = kingpin.Flag("cluster.pushpull-interval", "Interval for gossip state syncs. Setting this interval lower (more frequent) will increase convergence speeds across larger clusters at the expense of increased bandwidth usage.").Default(cluster.DefaultPushPullInterval.String()).Duration() tcpTimeout = kingpin.Flag("cluster.tcp-timeout", "Timeout for establishing a stream connection with a remote node for a full state sync, and for stream read and write operations.").Default(cluster.DefaultTCPTimeout.String()).Duration() probeTimeout = kingpin.Flag("cluster.probe-timeout", "Timeout to wait for an ack from a probed node before assuming it is unhealthy. This should be set to 99-percentile of RTT (round-trip time) on your network.").Default(cluster.DefaultProbeTimeout.String()).Duration() probeInterval = kingpin.Flag("cluster.probe-interval", "Interval between random node probes. Setting this lower (more frequent) will cause the cluster to detect failed nodes more quickly at the expense of increased bandwidth usage.").Default(cluster.DefaultProbeInterval.String()).Duration() settleTimeout = kingpin.Flag("cluster.settle-timeout", "Maximum time to wait for cluster connections to settle before evaluating notifications.").Default(cluster.DefaultPushPullInterval.String()).Duration() reconnectInterval = kingpin.Flag("cluster.reconnect-interval", "Interval between attempting to reconnect to lost peers.").Default(cluster.DefaultReconnectInterval.String()).Duration() peerReconnectTimeout = kingpin.Flag("cluster.reconnect-timeout", "Length of time to attempt to reconnect to a lost peer.").Default(cluster.DefaultReconnectTimeout.String()).Duration() tlsConfigFile = kingpin.Flag("cluster.tls-config", "[EXPERIMENTAL] Path to config yaml file that can enable mutual TLS within the gossip protocol.").Default("").String() allowInsecureAdvertise = kingpin.Flag("cluster.allow-insecure-public-advertise-address-discovery", "[EXPERIMENTAL] Allow alertmanager to discover and listen on a public IP address.").Bool() label = kingpin.Flag("cluster.label", "The cluster label is an optional string to include on each packet and stream. It uniquely identifies the cluster and prevents cross-communication issues when sending gossip messages.").Default("").String() featureFlags = kingpin.Flag("enable-feature", fmt.Sprintf("Comma-separated experimental features to enable. Valid options: %s", strings.Join(featurecontrol.AllowedFlags, ", "))).Default("").String() ) promslogflag.AddFlags(kingpin.CommandLine, &promslogConfig) kingpin.CommandLine.UsageWriter(os.Stdout) kingpin.Version(version.Print("alertmanager")) kingpin.CommandLine.GetFlag("help").Short('h') kingpin.Parse() logger := promslog.New(&promslogConfig) logger.Info("Starting Alertmanager", "version", version.Info()) logger.Info("Build context", "build_context", version.BuildContext()) ff, err := featurecontrol.NewFlags(logger, *featureFlags) if err != nil { logger.Error("error parsing the feature flag list", "err", err) return 1 } compat.InitFromFlags(logger, ff) if ff.EnableAutoGOMEMLIMIT() { if *memlimitRatio <= 0.0 || *memlimitRatio > 1.0 { logger.Error("--auto-gomemlimit.ratio must be greater than 0 and less than or equal to 1.") return 1 } if _, err := memlimit.SetGoMemLimitWithOpts( memlimit.WithRatio(*memlimitRatio), memlimit.WithProvider( memlimit.ApplyFallback( memlimit.FromCgroup, memlimit.FromSystem, ), ), ); err != nil { logger.Warn("automemlimit", "msg", "Failed to set GOMEMLIMIT automatically", "err", err) } } if ff.EnableAutoGOMAXPROCS() { l := func(format string, a ...interface{}) { logger.Info("automaxprocs", "msg", fmt.Sprintf(strings.TrimPrefix(format, "maxprocs: "), a...)) } if _, err := maxprocs.Set(maxprocs.Logger(l)); err != nil { logger.Warn("Failed to set GOMAXPROCS automatically", "err", err) } } err = os.MkdirAll(*dataDir, 0o777) if err != nil { logger.Error("Unable to create data directory", "err", err) return 1 } tlsTransportConfig, err := cluster.GetTLSTransportConfig(*tlsConfigFile) if err != nil { logger.Error("unable to initialize TLS transport configuration for gossip mesh", "err", err) return 1 } var peer *cluster.Peer if *clusterBindAddr != "" { peer, err = cluster.Create( logger.With("component", "cluster"), prometheus.DefaultRegisterer, *clusterBindAddr, *clusterAdvertiseAddr, *peers, true, *pushPullInterval, *gossipInterval, *tcpTimeout, *probeTimeout, *probeInterval, tlsTransportConfig, *allowInsecureAdvertise, *label, ) if err != nil { logger.Error("unable to initialize gossip mesh", "err", err) return 1 } clusterEnabled.Set(1) } stopc := make(chan struct{}) var wg sync.WaitGroup notificationLogOpts := nflog.Options{ SnapshotFile: filepath.Join(*dataDir, "nflog"), Retention: *retention, Logger: logger.With("component", "nflog"), Metrics: prometheus.DefaultRegisterer, } notificationLog, err := nflog.New(notificationLogOpts) if err != nil { logger.Error("error creating notification log", "err", err) return 1 } if peer != nil { c := peer.AddState("nfl", notificationLog, prometheus.DefaultRegisterer) notificationLog.SetBroadcast(c.Broadcast) } wg.Add(1) go func() { notificationLog.Maintenance(*maintenanceInterval, filepath.Join(*dataDir, "nflog"), stopc, nil) wg.Done() }() marker := types.NewMarker(prometheus.DefaultRegisterer) silenceOpts := silence.Options{ SnapshotFile: filepath.Join(*dataDir, "silences"), Retention: *retention, Limits: silence.Limits{ MaxSilences: func() int { return *maxSilences }, MaxSilenceSizeBytes: func() int { return *maxSilenceSizeBytes }, }, Logger: logger.With("component", "silences"), Metrics: prometheus.DefaultRegisterer, } silences, err := silence.New(silenceOpts) if err != nil { logger.Error("error creating silence", "err", err) return 1 } if peer != nil { c := peer.AddState("sil", silences, prometheus.DefaultRegisterer) silences.SetBroadcast(c.Broadcast) } // Start providers before router potentially sends updates. wg.Add(1) go func() { silences.Maintenance(*maintenanceInterval, filepath.Join(*dataDir, "silences"), stopc, nil) wg.Done() }() defer func() { close(stopc) wg.Wait() }() // Peer state listeners have been registered, now we can join and get the initial state. if peer != nil { err = peer.Join( *reconnectInterval, *peerReconnectTimeout, ) if err != nil { logger.Warn("unable to join gossip mesh", "err", err) } ctx, cancel := context.WithTimeout(context.Background(), *settleTimeout) defer func() { cancel() if err := peer.Leave(10 * time.Second); err != nil { logger.Warn("unable to leave gossip mesh", "err", err) } }() go peer.Settle(ctx, *gossipInterval*10) } alerts, err := mem.NewAlerts(context.Background(), marker, *alertGCInterval, nil, logger, prometheus.DefaultRegisterer) if err != nil { logger.Error("error creating memory provider", "err", err) return 1 } defer alerts.Close() var disp *dispatch.Dispatcher defer func() { disp.Stop() }() groupFn := func(routeFilter func(*dispatch.Route) bool, alertFilter func(*types.Alert, time.Time) bool) (dispatch.AlertGroups, map[model.Fingerprint][]string) { return disp.Groups(routeFilter, alertFilter) } // An interface value that holds a nil concrete value is non-nil. // Therefore we explicly pass an empty interface, to detect if the // cluster is not enabled in notify. var clusterPeer cluster.ClusterPeer if peer != nil { clusterPeer = peer } api, err := api.New(api.Options{ Alerts: alerts, Silences: silences, AlertStatusFunc: marker.Status, GroupMutedFunc: marker.Muted, Peer: clusterPeer, Timeout: *httpTimeout, Concurrency: *getConcurrency, Logger: logger.With("component", "api"), Registry: prometheus.DefaultRegisterer, GroupFunc: groupFn, }) if err != nil { logger.Error("failed to create API", "err", err) return 1 } amURL, err := extURL(logger, os.Hostname, (*webConfig.WebListenAddresses)[0], *externalURL) if err != nil { logger.Error("failed to determine external URL", "err", err) return 1 } logger.Debug("external url", "externalUrl", amURL.String()) waitFunc := func() time.Duration { return 0 } if peer != nil { waitFunc = clusterWait(peer, *peerTimeout) } timeoutFunc := func(d time.Duration) time.Duration { if d < notify.MinTimeout { d = notify.MinTimeout } return d + waitFunc() } var ( inhibitor *inhibit.Inhibitor tmpl *template.Template ) dispMetrics := dispatch.NewDispatcherMetrics(false, prometheus.DefaultRegisterer) pipelineBuilder := notify.NewPipelineBuilder(prometheus.DefaultRegisterer, ff) configLogger := logger.With("component", "configuration") configCoordinator := config.NewCoordinator( *configFile, prometheus.DefaultRegisterer, configLogger, ) configCoordinator.Subscribe(func(conf *config.Config) error { tmpl, err = template.FromGlobs(conf.Templates) if err != nil { return fmt.Errorf("failed to parse templates: %w", err) } tmpl.ExternalURL = amURL // Build the routing tree and record which receivers are used. routes := dispatch.NewRoute(conf.Route, nil) activeReceivers := make(map[string]struct{}) routes.Walk(func(r *dispatch.Route) { activeReceivers[r.RouteOpts.Receiver] = struct{}{} }) // Build the map of receiver to integrations. receivers := make(map[string][]notify.Integration, len(activeReceivers)) var integrationsNum int for _, rcv := range conf.Receivers { if _, found := activeReceivers[rcv.Name]; !found { // No need to build a receiver if no route is using it. configLogger.Info("skipping creation of receiver not referenced by any route", "receiver", rcv.Name) continue } integrations, err := receiver.BuildReceiverIntegrations(rcv, tmpl, logger) if err != nil { return err } // rcv.Name is guaranteed to be unique across all receivers. receivers[rcv.Name] = integrations integrationsNum += len(integrations) } // Build the map of time interval names to time interval definitions. timeIntervals := make(map[string][]timeinterval.TimeInterval, len(conf.MuteTimeIntervals)+len(conf.TimeIntervals)) for _, ti := range conf.MuteTimeIntervals { timeIntervals[ti.Name] = ti.TimeIntervals } for _, ti := range conf.TimeIntervals { timeIntervals[ti.Name] = ti.TimeIntervals } intervener := timeinterval.NewIntervener(timeIntervals) inhibitor.Stop() disp.Stop() inhibitor = inhibit.NewInhibitor(alerts, conf.InhibitRules, marker, logger) silencer := silence.NewSilencer(silences, marker, logger) // An interface value that holds a nil concrete value is non-nil. // Therefore we explicly pass an empty interface, to detect if the // cluster is not enabled in notify. var pipelinePeer notify.Peer if peer != nil { pipelinePeer = peer } pipeline := pipelineBuilder.New( receivers, waitFunc, inhibitor, silencer, intervener, marker, notificationLog, pipelinePeer, ) configuredReceivers.Set(float64(len(activeReceivers))) configuredIntegrations.Set(float64(integrationsNum)) configuredInhibitionRules.Set(float64(len(conf.InhibitRules))) api.Update(conf, func(labels model.LabelSet) { inhibitor.Mutes(labels) silencer.Mutes(labels) }) disp = dispatch.NewDispatcher(alerts, routes, pipeline, marker, timeoutFunc, nil, logger, dispMetrics) routes.Walk(func(r *dispatch.Route) { if r.RouteOpts.RepeatInterval > *retention { configLogger.Warn( "repeat_interval is greater than the data retention period. It can lead to notifications being repeated more often than expected.", "repeat_interval", r.RouteOpts.RepeatInterval, "retention", *retention, "route", r.Key(), ) } if r.RouteOpts.RepeatInterval < r.RouteOpts.GroupInterval { configLogger.Warn( "repeat_interval is less than group_interval. Notifications will not repeat until the next group_interval.", "repeat_interval", r.RouteOpts.RepeatInterval, "group_interval", r.RouteOpts.GroupInterval, "route", r.Key(), ) } }) go disp.Run() go inhibitor.Run() return nil }) if err := configCoordinator.Reload(); err != nil { return 1 } // Make routePrefix default to externalURL path if empty string. if *routePrefix == "" { *routePrefix = amURL.Path } *routePrefix = "/" + strings.Trim(*routePrefix, "/") logger.Debug("route prefix", "routePrefix", *routePrefix) router := route.New().WithInstrumentation(instrumentHandler) if *routePrefix != "/" { router.Get("/", func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, *routePrefix, http.StatusFound) }) router = router.WithPrefix(*routePrefix) } webReload := make(chan chan error) ui.Register(router, webReload, logger) reactapp.Register(router, logger) mux := api.Register(router, *routePrefix) srv := &http.Server{Handler: mux} srvc := make(chan struct{}) go func() { if err := web.ListenAndServe(srv, webConfig, logger); !errors.Is(err, http.ErrServerClosed) { logger.Error("Listen error", "err", err) close(srvc) } defer func() { if err := srv.Close(); err != nil { logger.Error("Error on closing the server", "err", err) } }() }() var ( hup = make(chan os.Signal, 1) term = make(chan os.Signal, 1) ) signal.Notify(hup, syscall.SIGHUP) signal.Notify(term, os.Interrupt, syscall.SIGTERM) for { select { case <-hup: // ignore error, already logged in `reload()` _ = configCoordinator.Reload() case errc := <-webReload: errc <- configCoordinator.Reload() case <-term: logger.Info("Received SIGTERM, exiting gracefully...") return 0 case <-srvc: return 1 } } } // clusterWait returns a function that inspects the current peer state and returns // a duration of one base timeout for each peer with a higher ID than ourselves. func clusterWait(p *cluster.Peer, timeout time.Duration) func() time.Duration { return func() time.Duration { return time.Duration(p.Position()) * timeout } } func extURL(logger *slog.Logger, hostnamef func() (string, error), listen, external string) (*url.URL, error) { if external == "" { hostname, err := hostnamef() if err != nil { return nil, err } _, port, err := net.SplitHostPort(listen) if err != nil { return nil, err } if port == "" { logger.Warn("no port found for listen address", "address", listen) } external = fmt.Sprintf("http://%s:%s/", hostname, port) } u, err := url.Parse(external) if err != nil { return nil, err } if u.Scheme != "http" && u.Scheme != "https" { return nil, fmt.Errorf("%q: invalid %q scheme, only 'http' and 'https' are supported", u.String(), u.Scheme) } ppref := strings.TrimRight(u.Path, "/") if ppref != "" && !strings.HasPrefix(ppref, "/") { ppref = "/" + ppref } u.Path = ppref return u, nil } prometheus-alertmanager-0.28.1+ds/cmd/alertmanager/main_test.go000066400000000000000000000045631476331240200245700ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "fmt" "testing" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" ) func TestExternalURL(t *testing.T) { hostname := "foo" for _, tc := range []struct { hostnameResolver func() (string, error) external string listen string expURL string err bool }{ { listen: ":9093", expURL: "http://" + hostname + ":9093", }, { listen: "localhost:9093", expURL: "http://" + hostname + ":9093", }, { listen: "localhost:", expURL: "http://" + hostname + ":", }, { external: "https://host.example.com", expURL: "https://host.example.com", }, { external: "https://host.example.com/", expURL: "https://host.example.com", }, { external: "http://host.example.com/alertmanager", expURL: "http://host.example.com/alertmanager", }, { external: "http://host.example.com/alertmanager/", expURL: "http://host.example.com/alertmanager", }, { external: "http://host.example.com/////alertmanager//", expURL: "http://host.example.com/////alertmanager", }, { err: true, }, { hostnameResolver: func() (string, error) { return "", fmt.Errorf("some error") }, err: true, }, { external: "://broken url string", err: true, }, { external: "host.example.com:8080", err: true, }, } { tc := tc if tc.hostnameResolver == nil { tc.hostnameResolver = func() (string, error) { return hostname, nil } } t.Run(fmt.Sprintf("external=%q,listen=%q", tc.external, tc.listen), func(t *testing.T) { u, err := extURL(promslog.NewNopLogger(), tc.hostnameResolver, tc.listen, tc.external) if tc.err { require.Error(t, err) return } require.NoError(t, err) require.Equal(t, tc.expURL, u.String()) }) } } prometheus-alertmanager-0.28.1+ds/cmd/amtool/000077500000000000000000000000001476331240200210775ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/cmd/amtool/README.md000066400000000000000000000010761476331240200223620ustar00rootroot00000000000000# Generating amtool artifacts Amtool comes with the option to create a number of ease-of-use artifacts that can be created. ## Shell completion A bash completion script can be generated by calling `amtool --completion-script-bash`. The bash completion file can be added to `/etc/bash_completion.d/`. ## Man pages A man page can be generated by calling `amtool --help-man`. Man pages can be added to the man directory of your choice amtool --help-man > /usr/local/share/man/man1/amtool.1 sudo mandb Then you should be able to view the man pages as expected. prometheus-alertmanager-0.28.1+ds/cmd/amtool/main.go000066400000000000000000000012501476331240200223500ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import "github.com/prometheus/alertmanager/cli" func main() { cli.Execute() } prometheus-alertmanager-0.28.1+ds/config/000077500000000000000000000000001476331240200203065ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/config/config.go000066400000000000000000001134751476331240200221150ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package config import ( "encoding/json" "errors" "fmt" "net" "net/url" "os" "path/filepath" "regexp" "sort" "strings" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "gopkg.in/yaml.v2" "github.com/prometheus/alertmanager/matcher/compat" "github.com/prometheus/alertmanager/pkg/labels" "github.com/prometheus/alertmanager/timeinterval" ) const secretToken = "" var secretTokenJSON string // MarshalSecretValue if set to true will expose Secret type // through the marshal interfaces. Useful for outside projects // that load and marshal the Alertmanager config. var MarshalSecretValue bool = commoncfg.MarshalSecretValue func init() { b, err := json.Marshal(secretToken) if err != nil { panic(err) } secretTokenJSON = string(b) } // Secret is a string that must not be revealed on marshaling. type Secret string // MarshalYAML implements the yaml.Marshaler interface for Secret. func (s Secret) MarshalYAML() (interface{}, error) { if MarshalSecretValue { return string(s), nil } if s != "" { return secretToken, nil } return nil, nil } // UnmarshalYAML implements the yaml.Unmarshaler interface for Secret. func (s *Secret) UnmarshalYAML(unmarshal func(interface{}) error) error { type plain Secret return unmarshal((*plain)(s)) } // MarshalJSON implements the json.Marshaler interface for Secret. func (s Secret) MarshalJSON() ([]byte, error) { if MarshalSecretValue { return json.Marshal(string(s)) } if len(s) == 0 { return json.Marshal("") } return json.Marshal(secretToken) } // URL is a custom type that represents an HTTP or HTTPS URL and allows validation at configuration load time. type URL struct { *url.URL } // Copy makes a deep-copy of the struct. func (u *URL) Copy() *URL { v := *u.URL return &URL{&v} } // MarshalYAML implements the yaml.Marshaler interface for URL. func (u URL) MarshalYAML() (interface{}, error) { if u.URL != nil { return u.URL.String(), nil } return nil, nil } // UnmarshalYAML implements the yaml.Unmarshaler interface for URL. func (u *URL) UnmarshalYAML(unmarshal func(interface{}) error) error { var s string if err := unmarshal(&s); err != nil { return err } urlp, err := parseURL(s) if err != nil { return err } u.URL = urlp.URL return nil } // MarshalJSON implements the json.Marshaler interface for URL. func (u URL) MarshalJSON() ([]byte, error) { if u.URL != nil { return json.Marshal(u.URL.String()) } return []byte("null"), nil } // UnmarshalJSON implements the json.Marshaler interface for URL. func (u *URL) UnmarshalJSON(data []byte) error { var s string if err := json.Unmarshal(data, &s); err != nil { return err } urlp, err := parseURL(s) if err != nil { return err } u.URL = urlp.URL return nil } // SecretURL is a URL that must not be revealed on marshaling. type SecretURL URL // MarshalYAML implements the yaml.Marshaler interface for SecretURL. func (s SecretURL) MarshalYAML() (interface{}, error) { if s.URL != nil { if MarshalSecretValue { return s.URL.String(), nil } return secretToken, nil } return nil, nil } // UnmarshalYAML implements the yaml.Unmarshaler interface for SecretURL. func (s *SecretURL) UnmarshalYAML(unmarshal func(interface{}) error) error { var str string if err := unmarshal(&str); err != nil { return err } // In order to deserialize a previously serialized configuration (eg from // the Alertmanager API with amtool), `` needs to be treated // specially, as it isn't a valid URL. if str == secretToken { s.URL = &url.URL{} return nil } return unmarshal((*URL)(s)) } // MarshalJSON implements the json.Marshaler interface for SecretURL. func (s SecretURL) MarshalJSON() ([]byte, error) { if s.URL == nil { return json.Marshal("") } if MarshalSecretValue { return json.Marshal(s.URL.String()) } return json.Marshal(secretToken) } // UnmarshalJSON implements the json.Marshaler interface for SecretURL. func (s *SecretURL) UnmarshalJSON(data []byte) error { // In order to deserialize a previously serialized configuration (eg from // the Alertmanager API with amtool), `` needs to be treated // specially, as it isn't a valid URL. if string(data) == secretToken || string(data) == secretTokenJSON { s.URL = &url.URL{} return nil } // Redact the secret URL in case of errors if err := json.Unmarshal(data, (*URL)(s)); err != nil { if MarshalSecretValue { return err } return errors.New(strings.ReplaceAll(err.Error(), string(data), "[REDACTED]")) } return nil } // Load parses the YAML input s into a Config. func Load(s string) (*Config, error) { cfg := &Config{} err := yaml.UnmarshalStrict([]byte(s), cfg) if err != nil { return nil, err } // Check if we have a root route. We cannot check for it in the // UnmarshalYAML method because it won't be called if the input is empty // (e.g. the config file is empty or only contains whitespace). if cfg.Route == nil { return nil, errors.New("no route provided in config") } // Check if continue in root route. if cfg.Route.Continue { return nil, errors.New("cannot have continue in root route") } cfg.original = s return cfg, nil } // LoadFile parses the given YAML file into a Config. func LoadFile(filename string) (*Config, error) { content, err := os.ReadFile(filename) if err != nil { return nil, err } cfg, err := Load(string(content)) if err != nil { return nil, err } resolveFilepaths(filepath.Dir(filename), cfg) return cfg, nil } // resolveFilepaths joins all relative paths in a configuration // with a given base directory. func resolveFilepaths(baseDir string, cfg *Config) { join := func(fp string) string { if len(fp) > 0 && !filepath.IsAbs(fp) { fp = filepath.Join(baseDir, fp) } return fp } for i, tf := range cfg.Templates { cfg.Templates[i] = join(tf) } cfg.Global.HTTPConfig.SetDirectory(baseDir) for _, receiver := range cfg.Receivers { for _, cfg := range receiver.OpsGenieConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.PagerdutyConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.PushoverConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.SlackConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.VictorOpsConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.WebhookConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.WechatConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.SNSConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.TelegramConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.DiscordConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.WebexConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.MSTeamsConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.MSTeamsV2Configs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.JiraConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } for _, cfg := range receiver.RocketchatConfigs { cfg.HTTPConfig.SetDirectory(baseDir) } } } // MuteTimeInterval represents a named set of time intervals for which a route should be muted. type MuteTimeInterval struct { Name string `yaml:"name" json:"name"` TimeIntervals []timeinterval.TimeInterval `yaml:"time_intervals" json:"time_intervals"` } // UnmarshalYAML implements the yaml.Unmarshaler interface for MuteTimeInterval. func (mt *MuteTimeInterval) UnmarshalYAML(unmarshal func(interface{}) error) error { type plain MuteTimeInterval if err := unmarshal((*plain)(mt)); err != nil { return err } if mt.Name == "" { return errors.New("missing name in mute time interval") } return nil } // TimeInterval represents a named set of time intervals for which a route should be muted. type TimeInterval struct { Name string `yaml:"name" json:"name"` TimeIntervals []timeinterval.TimeInterval `yaml:"time_intervals" json:"time_intervals"` } // UnmarshalYAML implements the yaml.Unmarshaler interface for MuteTimeInterval. func (ti *TimeInterval) UnmarshalYAML(unmarshal func(interface{}) error) error { type plain TimeInterval if err := unmarshal((*plain)(ti)); err != nil { return err } if ti.Name == "" { return errors.New("missing name in time interval") } return nil } // Config is the top-level configuration for Alertmanager's config files. type Config struct { Global *GlobalConfig `yaml:"global,omitempty" json:"global,omitempty"` Route *Route `yaml:"route,omitempty" json:"route,omitempty"` InhibitRules []InhibitRule `yaml:"inhibit_rules,omitempty" json:"inhibit_rules,omitempty"` Receivers []Receiver `yaml:"receivers,omitempty" json:"receivers,omitempty"` Templates []string `yaml:"templates" json:"templates"` // Deprecated. Remove before v1.0 release. MuteTimeIntervals []MuteTimeInterval `yaml:"mute_time_intervals,omitempty" json:"mute_time_intervals,omitempty"` TimeIntervals []TimeInterval `yaml:"time_intervals,omitempty" json:"time_intervals,omitempty"` // original is the input from which the config was parsed. original string } func (c Config) String() string { b, err := yaml.Marshal(c) if err != nil { return fmt.Sprintf("", err) } return string(b) } // UnmarshalYAML implements the yaml.Unmarshaler interface for Config. func (c *Config) UnmarshalYAML(unmarshal func(interface{}) error) error { // We want to set c to the defaults and then overwrite it with the input. // To make unmarshal fill the plain data struct rather than calling UnmarshalYAML // again, we have to hide it using a type indirection. type plain Config if err := unmarshal((*plain)(c)); err != nil { return err } // If a global block was open but empty the default global config is overwritten. // We have to restore it here. if c.Global == nil { c.Global = &GlobalConfig{} *c.Global = DefaultGlobalConfig() } if c.Global.SlackAPIURL != nil && len(c.Global.SlackAPIURLFile) > 0 { return errors.New("at most one of slack_api_url & slack_api_url_file must be configured") } if c.Global.OpsGenieAPIKey != "" && len(c.Global.OpsGenieAPIKeyFile) > 0 { return errors.New("at most one of opsgenie_api_key & opsgenie_api_key_file must be configured") } if c.Global.VictorOpsAPIKey != "" && len(c.Global.VictorOpsAPIKeyFile) > 0 { return errors.New("at most one of victorops_api_key & victorops_api_key_file must be configured") } if len(c.Global.SMTPAuthPassword) > 0 && len(c.Global.SMTPAuthPasswordFile) > 0 { return errors.New("at most one of smtp_auth_password & smtp_auth_password_file must be configured") } if c.Global.RocketchatToken != nil && len(c.Global.RocketchatTokenFile) > 0 { return errors.New("at most one of rocketchat_token & rocketchat_token_file must be configured") } if c.Global.RocketchatTokenID != nil && len(c.Global.RocketchatTokenIDFile) > 0 { return errors.New("at most one of rocketchat_token_id & rocketchat_token_id_file must be configured") } names := map[string]struct{}{} for _, rcv := range c.Receivers { if _, ok := names[rcv.Name]; ok { return fmt.Errorf("notification config name %q is not unique", rcv.Name) } for _, wh := range rcv.WebhookConfigs { if wh.HTTPConfig == nil { wh.HTTPConfig = c.Global.HTTPConfig } } for _, ec := range rcv.EmailConfigs { if ec.TLSConfig == nil { ec.TLSConfig = c.Global.SMTPTLSConfig } if ec.Smarthost.String() == "" { if c.Global.SMTPSmarthost.String() == "" { return errors.New("no global SMTP smarthost set") } ec.Smarthost = c.Global.SMTPSmarthost } if ec.From == "" { if c.Global.SMTPFrom == "" { return errors.New("no global SMTP from set") } ec.From = c.Global.SMTPFrom } if ec.Hello == "" { ec.Hello = c.Global.SMTPHello } if ec.AuthUsername == "" { ec.AuthUsername = c.Global.SMTPAuthUsername } if ec.AuthPassword == "" && ec.AuthPasswordFile == "" { ec.AuthPassword = c.Global.SMTPAuthPassword ec.AuthPasswordFile = c.Global.SMTPAuthPasswordFile } if ec.AuthSecret == "" { ec.AuthSecret = c.Global.SMTPAuthSecret } if ec.AuthIdentity == "" { ec.AuthIdentity = c.Global.SMTPAuthIdentity } if ec.RequireTLS == nil { ec.RequireTLS = new(bool) *ec.RequireTLS = c.Global.SMTPRequireTLS } } for _, sc := range rcv.SlackConfigs { if sc.HTTPConfig == nil { sc.HTTPConfig = c.Global.HTTPConfig } if sc.APIURL == nil && len(sc.APIURLFile) == 0 { if c.Global.SlackAPIURL == nil && len(c.Global.SlackAPIURLFile) == 0 { return errors.New("no global Slack API URL set either inline or in a file") } sc.APIURL = c.Global.SlackAPIURL sc.APIURLFile = c.Global.SlackAPIURLFile } } for _, poc := range rcv.PushoverConfigs { if poc.HTTPConfig == nil { poc.HTTPConfig = c.Global.HTTPConfig } } for _, pdc := range rcv.PagerdutyConfigs { if pdc.HTTPConfig == nil { pdc.HTTPConfig = c.Global.HTTPConfig } if pdc.URL == nil { if c.Global.PagerdutyURL == nil { return errors.New("no global PagerDuty URL set") } pdc.URL = c.Global.PagerdutyURL } } for _, ogc := range rcv.OpsGenieConfigs { if ogc.HTTPConfig == nil { ogc.HTTPConfig = c.Global.HTTPConfig } if ogc.APIURL == nil { if c.Global.OpsGenieAPIURL == nil { return errors.New("no global OpsGenie URL set") } ogc.APIURL = c.Global.OpsGenieAPIURL } if !strings.HasSuffix(ogc.APIURL.Path, "/") { ogc.APIURL.Path += "/" } if ogc.APIKey == "" && len(ogc.APIKeyFile) == 0 { if c.Global.OpsGenieAPIKey == "" && len(c.Global.OpsGenieAPIKeyFile) == 0 { return errors.New("no global OpsGenie API Key set either inline or in a file") } ogc.APIKey = c.Global.OpsGenieAPIKey ogc.APIKeyFile = c.Global.OpsGenieAPIKeyFile } } for _, wcc := range rcv.WechatConfigs { if wcc.HTTPConfig == nil { wcc.HTTPConfig = c.Global.HTTPConfig } if wcc.APIURL == nil { if c.Global.WeChatAPIURL == nil { return errors.New("no global Wechat URL set") } wcc.APIURL = c.Global.WeChatAPIURL } if wcc.APISecret == "" { if c.Global.WeChatAPISecret == "" { return errors.New("no global Wechat ApiSecret set") } wcc.APISecret = c.Global.WeChatAPISecret } if wcc.CorpID == "" { if c.Global.WeChatAPICorpID == "" { return errors.New("no global Wechat CorpID set") } wcc.CorpID = c.Global.WeChatAPICorpID } if !strings.HasSuffix(wcc.APIURL.Path, "/") { wcc.APIURL.Path += "/" } } for _, voc := range rcv.VictorOpsConfigs { if voc.HTTPConfig == nil { voc.HTTPConfig = c.Global.HTTPConfig } if voc.APIURL == nil { if c.Global.VictorOpsAPIURL == nil { return errors.New("no global VictorOps URL set") } voc.APIURL = c.Global.VictorOpsAPIURL } if !strings.HasSuffix(voc.APIURL.Path, "/") { voc.APIURL.Path += "/" } if voc.APIKey == "" && len(voc.APIKeyFile) == 0 { if c.Global.VictorOpsAPIKey == "" && len(c.Global.VictorOpsAPIKeyFile) == 0 { return errors.New("no global VictorOps API Key set") } voc.APIKey = c.Global.VictorOpsAPIKey voc.APIKeyFile = c.Global.VictorOpsAPIKeyFile } } for _, sns := range rcv.SNSConfigs { if sns.HTTPConfig == nil { sns.HTTPConfig = c.Global.HTTPConfig } } for _, telegram := range rcv.TelegramConfigs { if telegram.HTTPConfig == nil { telegram.HTTPConfig = c.Global.HTTPConfig } if telegram.APIUrl == nil { telegram.APIUrl = c.Global.TelegramAPIUrl } } for _, discord := range rcv.DiscordConfigs { if discord.HTTPConfig == nil { discord.HTTPConfig = c.Global.HTTPConfig } if discord.WebhookURL == nil && len(discord.WebhookURLFile) == 0 { return errors.New("no discord webhook URL or URLFile provided") } } for _, webex := range rcv.WebexConfigs { if webex.HTTPConfig == nil { webex.HTTPConfig = c.Global.HTTPConfig } if webex.APIURL == nil { if c.Global.WebexAPIURL == nil { return errors.New("no global Webex URL set") } webex.APIURL = c.Global.WebexAPIURL } } for _, msteams := range rcv.MSTeamsConfigs { if msteams.HTTPConfig == nil { msteams.HTTPConfig = c.Global.HTTPConfig } if msteams.WebhookURL == nil && len(msteams.WebhookURLFile) == 0 { return errors.New("no msteams webhook URL or URLFile provided") } } for _, msteamsv2 := range rcv.MSTeamsV2Configs { if msteamsv2.HTTPConfig == nil { msteamsv2.HTTPConfig = c.Global.HTTPConfig } if msteamsv2.WebhookURL == nil && len(msteamsv2.WebhookURLFile) == 0 { return errors.New("no msteamsv2 webhook URL or URLFile provided") } } for _, jira := range rcv.JiraConfigs { if jira.HTTPConfig == nil { jira.HTTPConfig = c.Global.HTTPConfig } if jira.APIURL == nil { if c.Global.JiraAPIURL == nil { return errors.New("no global Jira Cloud URL set") } jira.APIURL = c.Global.JiraAPIURL } } for _, rocketchat := range rcv.RocketchatConfigs { if rocketchat.HTTPConfig == nil { rocketchat.HTTPConfig = c.Global.HTTPConfig } if rocketchat.APIURL == nil { rocketchat.APIURL = c.Global.RocketchatAPIURL } if rocketchat.TokenID == nil && len(rocketchat.TokenIDFile) == 0 { if c.Global.RocketchatTokenID == nil && len(c.Global.RocketchatTokenIDFile) == 0 { return errors.New("no global Rocketchat TokenID set either inline or in a file") } rocketchat.TokenID = c.Global.RocketchatTokenID rocketchat.TokenIDFile = c.Global.RocketchatTokenIDFile } if rocketchat.Token == nil && len(rocketchat.TokenFile) == 0 { if c.Global.RocketchatToken == nil && len(c.Global.RocketchatTokenFile) == 0 { return errors.New("no global Rocketchat Token set either inline or in a file") } rocketchat.Token = c.Global.RocketchatToken rocketchat.TokenFile = c.Global.RocketchatTokenFile } } names[rcv.Name] = struct{}{} } // The root route must not have any matchers as it is the fallback node // for all alerts. if c.Route == nil { return errors.New("no routes provided") } if len(c.Route.Receiver) == 0 { return errors.New("root route must specify a default receiver") } if len(c.Route.Match) > 0 || len(c.Route.MatchRE) > 0 || len(c.Route.Matchers) > 0 { return errors.New("root route must not have any matchers") } if len(c.Route.MuteTimeIntervals) > 0 { return errors.New("root route must not have any mute time intervals") } if len(c.Route.ActiveTimeIntervals) > 0 { return errors.New("root route must not have any active time intervals") } // Validate that all receivers used in the routing tree are defined. if err := checkReceiver(c.Route, names); err != nil { return err } tiNames := make(map[string]struct{}) // read mute time intervals until deprecated for _, mt := range c.MuteTimeIntervals { if _, ok := tiNames[mt.Name]; ok { return fmt.Errorf("mute time interval %q is not unique", mt.Name) } tiNames[mt.Name] = struct{}{} } for _, mt := range c.TimeIntervals { if _, ok := tiNames[mt.Name]; ok { return fmt.Errorf("time interval %q is not unique", mt.Name) } tiNames[mt.Name] = struct{}{} } return checkTimeInterval(c.Route, tiNames) } // checkReceiver returns an error if a node in the routing tree // references a receiver not in the given map. func checkReceiver(r *Route, receivers map[string]struct{}) error { for _, sr := range r.Routes { if err := checkReceiver(sr, receivers); err != nil { return err } } if r.Receiver == "" { return nil } if _, ok := receivers[r.Receiver]; !ok { return fmt.Errorf("undefined receiver %q used in route", r.Receiver) } return nil } func checkTimeInterval(r *Route, timeIntervals map[string]struct{}) error { for _, sr := range r.Routes { if err := checkTimeInterval(sr, timeIntervals); err != nil { return err } } for _, ti := range r.ActiveTimeIntervals { if _, ok := timeIntervals[ti]; !ok { return fmt.Errorf("undefined time interval %q used in route", ti) } } for _, tm := range r.MuteTimeIntervals { if _, ok := timeIntervals[tm]; !ok { return fmt.Errorf("undefined time interval %q used in route", tm) } } return nil } // DefaultGlobalConfig returns GlobalConfig with default values. func DefaultGlobalConfig() GlobalConfig { defaultHTTPConfig := commoncfg.DefaultHTTPClientConfig defaultSMTPTLSConfig := commoncfg.TLSConfig{} return GlobalConfig{ ResolveTimeout: model.Duration(5 * time.Minute), HTTPConfig: &defaultHTTPConfig, SMTPHello: "localhost", SMTPRequireTLS: true, SMTPTLSConfig: &defaultSMTPTLSConfig, PagerdutyURL: mustParseURL("https://events.pagerduty.com/v2/enqueue"), OpsGenieAPIURL: mustParseURL("https://api.opsgenie.com/"), WeChatAPIURL: mustParseURL("https://qyapi.weixin.qq.com/cgi-bin/"), VictorOpsAPIURL: mustParseURL("https://alert.victorops.com/integrations/generic/20131114/alert/"), TelegramAPIUrl: mustParseURL("https://api.telegram.org"), WebexAPIURL: mustParseURL("https://webexapis.com/v1/messages"), RocketchatAPIURL: mustParseURL("https://open.rocket.chat/"), } } func mustParseURL(s string) *URL { u, err := parseURL(s) if err != nil { panic(err) } return u } func parseURL(s string) (*URL, error) { u, err := url.Parse(s) if err != nil { return nil, err } if u.Scheme != "http" && u.Scheme != "https" { return nil, fmt.Errorf("unsupported scheme %q for URL", u.Scheme) } if u.Host == "" { return nil, errors.New("missing host for URL") } return &URL{u}, nil } // HostPort represents a "host:port" network address. type HostPort struct { Host string Port string } // UnmarshalYAML implements the yaml.Unmarshaler interface for HostPort. func (hp *HostPort) UnmarshalYAML(unmarshal func(interface{}) error) error { var ( s string err error ) if err = unmarshal(&s); err != nil { return err } if s == "" { return nil } hp.Host, hp.Port, err = net.SplitHostPort(s) if err != nil { return err } if hp.Port == "" { return fmt.Errorf("address %q: port cannot be empty", s) } return nil } // UnmarshalJSON implements the json.Unmarshaler interface for HostPort. func (hp *HostPort) UnmarshalJSON(data []byte) error { var ( s string err error ) if err = json.Unmarshal(data, &s); err != nil { return err } if s == "" { return nil } hp.Host, hp.Port, err = net.SplitHostPort(s) if err != nil { return err } if hp.Port == "" { return fmt.Errorf("address %q: port cannot be empty", s) } return nil } // MarshalYAML implements the yaml.Marshaler interface for HostPort. func (hp HostPort) MarshalYAML() (interface{}, error) { return hp.String(), nil } // MarshalJSON implements the json.Marshaler interface for HostPort. func (hp HostPort) MarshalJSON() ([]byte, error) { return json.Marshal(hp.String()) } func (hp HostPort) String() string { if hp.Host == "" && hp.Port == "" { return "" } return fmt.Sprintf("%s:%s", hp.Host, hp.Port) } // GlobalConfig defines configuration parameters that are valid globally // unless overwritten. type GlobalConfig struct { // ResolveTimeout is the time after which an alert is declared resolved // if it has not been updated. ResolveTimeout model.Duration `yaml:"resolve_timeout" json:"resolve_timeout"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` JiraAPIURL *URL `yaml:"jira_api_url,omitempty" json:"jira_api_url,omitempty"` SMTPFrom string `yaml:"smtp_from,omitempty" json:"smtp_from,omitempty"` SMTPHello string `yaml:"smtp_hello,omitempty" json:"smtp_hello,omitempty"` SMTPSmarthost HostPort `yaml:"smtp_smarthost,omitempty" json:"smtp_smarthost,omitempty"` SMTPAuthUsername string `yaml:"smtp_auth_username,omitempty" json:"smtp_auth_username,omitempty"` SMTPAuthPassword Secret `yaml:"smtp_auth_password,omitempty" json:"smtp_auth_password,omitempty"` SMTPAuthPasswordFile string `yaml:"smtp_auth_password_file,omitempty" json:"smtp_auth_password_file,omitempty"` SMTPAuthSecret Secret `yaml:"smtp_auth_secret,omitempty" json:"smtp_auth_secret,omitempty"` SMTPAuthIdentity string `yaml:"smtp_auth_identity,omitempty" json:"smtp_auth_identity,omitempty"` SMTPRequireTLS bool `yaml:"smtp_require_tls" json:"smtp_require_tls,omitempty"` SMTPTLSConfig *commoncfg.TLSConfig `yaml:"smtp_tls_config,omitempty" json:"smtp_tls_config,omitempty"` SlackAPIURL *SecretURL `yaml:"slack_api_url,omitempty" json:"slack_api_url,omitempty"` SlackAPIURLFile string `yaml:"slack_api_url_file,omitempty" json:"slack_api_url_file,omitempty"` PagerdutyURL *URL `yaml:"pagerduty_url,omitempty" json:"pagerduty_url,omitempty"` OpsGenieAPIURL *URL `yaml:"opsgenie_api_url,omitempty" json:"opsgenie_api_url,omitempty"` OpsGenieAPIKey Secret `yaml:"opsgenie_api_key,omitempty" json:"opsgenie_api_key,omitempty"` OpsGenieAPIKeyFile string `yaml:"opsgenie_api_key_file,omitempty" json:"opsgenie_api_key_file,omitempty"` WeChatAPIURL *URL `yaml:"wechat_api_url,omitempty" json:"wechat_api_url,omitempty"` WeChatAPISecret Secret `yaml:"wechat_api_secret,omitempty" json:"wechat_api_secret,omitempty"` WeChatAPICorpID string `yaml:"wechat_api_corp_id,omitempty" json:"wechat_api_corp_id,omitempty"` VictorOpsAPIURL *URL `yaml:"victorops_api_url,omitempty" json:"victorops_api_url,omitempty"` VictorOpsAPIKey Secret `yaml:"victorops_api_key,omitempty" json:"victorops_api_key,omitempty"` VictorOpsAPIKeyFile string `yaml:"victorops_api_key_file,omitempty" json:"victorops_api_key_file,omitempty"` TelegramAPIUrl *URL `yaml:"telegram_api_url,omitempty" json:"telegram_api_url,omitempty"` WebexAPIURL *URL `yaml:"webex_api_url,omitempty" json:"webex_api_url,omitempty"` RocketchatAPIURL *URL `yaml:"rocketchat_api_url,omitempty" json:"rocketchat_api_url,omitempty"` RocketchatToken *Secret `yaml:"rocketchat_token,omitempty" json:"rocketchat_token,omitempty"` RocketchatTokenFile string `yaml:"rocketchat_token_file,omitempty" json:"rocketchat_token_file,omitempty"` RocketchatTokenID *Secret `yaml:"rocketchat_token_id,omitempty" json:"rocketchat_token_id,omitempty"` RocketchatTokenIDFile string `yaml:"rocketchat_token_id_file,omitempty" json:"rocketchat_token_id_file,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface for GlobalConfig. func (c *GlobalConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultGlobalConfig() type plain GlobalConfig return unmarshal((*plain)(c)) } // A Route is a node that contains definitions of how to handle alerts. type Route struct { Receiver string `yaml:"receiver,omitempty" json:"receiver,omitempty"` GroupByStr []string `yaml:"group_by,omitempty" json:"group_by,omitempty"` GroupBy []model.LabelName `yaml:"-" json:"-"` GroupByAll bool `yaml:"-" json:"-"` // Deprecated. Remove before v1.0 release. Match map[string]string `yaml:"match,omitempty" json:"match,omitempty"` // Deprecated. Remove before v1.0 release. MatchRE MatchRegexps `yaml:"match_re,omitempty" json:"match_re,omitempty"` Matchers Matchers `yaml:"matchers,omitempty" json:"matchers,omitempty"` MuteTimeIntervals []string `yaml:"mute_time_intervals,omitempty" json:"mute_time_intervals,omitempty"` ActiveTimeIntervals []string `yaml:"active_time_intervals,omitempty" json:"active_time_intervals,omitempty"` Continue bool `yaml:"continue" json:"continue,omitempty"` Routes []*Route `yaml:"routes,omitempty" json:"routes,omitempty"` GroupWait *model.Duration `yaml:"group_wait,omitempty" json:"group_wait,omitempty"` GroupInterval *model.Duration `yaml:"group_interval,omitempty" json:"group_interval,omitempty"` RepeatInterval *model.Duration `yaml:"repeat_interval,omitempty" json:"repeat_interval,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface for Route. func (r *Route) UnmarshalYAML(unmarshal func(interface{}) error) error { type plain Route if err := unmarshal((*plain)(r)); err != nil { return err } for k := range r.Match { if !model.LabelNameRE.MatchString(k) { return fmt.Errorf("invalid label name %q", k) } } for _, l := range r.GroupByStr { if l == "..." { r.GroupByAll = true } else { labelName := model.LabelName(l) if !compat.IsValidLabelName(labelName) { return fmt.Errorf("invalid label name %q in group_by list", l) } r.GroupBy = append(r.GroupBy, labelName) } } if len(r.GroupBy) > 0 && r.GroupByAll { return errors.New("cannot have wildcard group_by (`...`) and other other labels at the same time") } groupBy := map[model.LabelName]struct{}{} for _, ln := range r.GroupBy { if _, ok := groupBy[ln]; ok { return fmt.Errorf("duplicated label %q in group_by", ln) } groupBy[ln] = struct{}{} } if r.GroupInterval != nil && time.Duration(*r.GroupInterval) == time.Duration(0) { return errors.New("group_interval cannot be zero") } if r.RepeatInterval != nil && time.Duration(*r.RepeatInterval) == time.Duration(0) { return errors.New("repeat_interval cannot be zero") } return nil } // InhibitRule defines an inhibition rule that mutes alerts that match the // target labels if an alert matching the source labels exists. // Both alerts have to have a set of labels being equal. type InhibitRule struct { // SourceMatch defines a set of labels that have to equal the given // value for source alerts. Deprecated. Remove before v1.0 release. SourceMatch map[string]string `yaml:"source_match,omitempty" json:"source_match,omitempty"` // SourceMatchRE defines pairs like SourceMatch but does regular expression // matching. Deprecated. Remove before v1.0 release. SourceMatchRE MatchRegexps `yaml:"source_match_re,omitempty" json:"source_match_re,omitempty"` // SourceMatchers defines a set of label matchers that have to be fulfilled for source alerts. SourceMatchers Matchers `yaml:"source_matchers,omitempty" json:"source_matchers,omitempty"` // TargetMatch defines a set of labels that have to equal the given // value for target alerts. Deprecated. Remove before v1.0 release. TargetMatch map[string]string `yaml:"target_match,omitempty" json:"target_match,omitempty"` // TargetMatchRE defines pairs like TargetMatch but does regular expression // matching. Deprecated. Remove before v1.0 release. TargetMatchRE MatchRegexps `yaml:"target_match_re,omitempty" json:"target_match_re,omitempty"` // TargetMatchers defines a set of label matchers that have to be fulfilled for target alerts. TargetMatchers Matchers `yaml:"target_matchers,omitempty" json:"target_matchers,omitempty"` // A set of labels that must be equal between the source and target alert // for them to be a match. Equal []string `yaml:"equal,omitempty" json:"equal,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface for InhibitRule. func (r *InhibitRule) UnmarshalYAML(unmarshal func(interface{}) error) error { type plain InhibitRule if err := unmarshal((*plain)(r)); err != nil { return err } for k := range r.SourceMatch { if !model.LabelNameRE.MatchString(k) { return fmt.Errorf("invalid label name %q", k) } } for k := range r.TargetMatch { if !model.LabelNameRE.MatchString(k) { return fmt.Errorf("invalid label name %q", k) } } for _, l := range r.Equal { labelName := model.LabelName(l) if !compat.IsValidLabelName(labelName) { return fmt.Errorf("invalid label name %q in equal list", l) } } return nil } // Receiver configuration provides configuration on how to contact a receiver. type Receiver struct { // A unique identifier for this receiver. Name string `yaml:"name" json:"name"` DiscordConfigs []*DiscordConfig `yaml:"discord_configs,omitempty" json:"discord_configs,omitempty"` EmailConfigs []*EmailConfig `yaml:"email_configs,omitempty" json:"email_configs,omitempty"` PagerdutyConfigs []*PagerdutyConfig `yaml:"pagerduty_configs,omitempty" json:"pagerduty_configs,omitempty"` SlackConfigs []*SlackConfig `yaml:"slack_configs,omitempty" json:"slack_configs,omitempty"` WebhookConfigs []*WebhookConfig `yaml:"webhook_configs,omitempty" json:"webhook_configs,omitempty"` OpsGenieConfigs []*OpsGenieConfig `yaml:"opsgenie_configs,omitempty" json:"opsgenie_configs,omitempty"` WechatConfigs []*WechatConfig `yaml:"wechat_configs,omitempty" json:"wechat_configs,omitempty"` PushoverConfigs []*PushoverConfig `yaml:"pushover_configs,omitempty" json:"pushover_configs,omitempty"` VictorOpsConfigs []*VictorOpsConfig `yaml:"victorops_configs,omitempty" json:"victorops_configs,omitempty"` SNSConfigs []*SNSConfig `yaml:"sns_configs,omitempty" json:"sns_configs,omitempty"` TelegramConfigs []*TelegramConfig `yaml:"telegram_configs,omitempty" json:"telegram_configs,omitempty"` WebexConfigs []*WebexConfig `yaml:"webex_configs,omitempty" json:"webex_configs,omitempty"` MSTeamsConfigs []*MSTeamsConfig `yaml:"msteams_configs,omitempty" json:"msteams_configs,omitempty"` MSTeamsV2Configs []*MSTeamsV2Config `yaml:"msteamsv2_configs,omitempty" json:"msteamsv2_configs,omitempty"` JiraConfigs []*JiraConfig `yaml:"jira_configs,omitempty" json:"jira_configs,omitempty"` RocketchatConfigs []*RocketchatConfig `yaml:"rocketchat_configs,omitempty" json:"rocketchat_configs,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface for Receiver. func (c *Receiver) UnmarshalYAML(unmarshal func(interface{}) error) error { type plain Receiver if err := unmarshal((*plain)(c)); err != nil { return err } if c.Name == "" { return errors.New("missing name in receiver") } return nil } // MatchRegexps represents a map of Regexp. type MatchRegexps map[string]Regexp // UnmarshalYAML implements the yaml.Unmarshaler interface for MatchRegexps. func (m *MatchRegexps) UnmarshalYAML(unmarshal func(interface{}) error) error { type plain MatchRegexps if err := unmarshal((*plain)(m)); err != nil { return err } for k, v := range *m { if !model.LabelNameRE.MatchString(k) { return fmt.Errorf("invalid label name %q", k) } if v.Regexp == nil { return fmt.Errorf("invalid regexp value for %q", k) } } return nil } // Regexp encapsulates a regexp.Regexp and makes it YAML marshalable. type Regexp struct { *regexp.Regexp original string } // UnmarshalYAML implements the yaml.Unmarshaler interface for Regexp. func (re *Regexp) UnmarshalYAML(unmarshal func(interface{}) error) error { var s string if err := unmarshal(&s); err != nil { return err } regex, err := regexp.Compile("^(?:" + s + ")$") if err != nil { return err } re.Regexp = regex re.original = s return nil } // MarshalYAML implements the yaml.Marshaler interface for Regexp. func (re Regexp) MarshalYAML() (interface{}, error) { if re.original != "" { return re.original, nil } return nil, nil } // UnmarshalJSON implements the json.Unmarshaler interface for Regexp. func (re *Regexp) UnmarshalJSON(data []byte) error { var s string if err := json.Unmarshal(data, &s); err != nil { return err } regex, err := regexp.Compile("^(?:" + s + ")$") if err != nil { return err } re.Regexp = regex re.original = s return nil } // MarshalJSON implements the json.Marshaler interface for Regexp. func (re Regexp) MarshalJSON() ([]byte, error) { if re.original != "" { return json.Marshal(re.original) } return []byte("null"), nil } // Matchers is label.Matchers with an added UnmarshalYAML method to implement the yaml.Unmarshaler interface // and MarshalYAML to implement the yaml.Marshaler interface. type Matchers labels.Matchers // UnmarshalYAML implements the yaml.Unmarshaler interface for Matchers. func (m *Matchers) UnmarshalYAML(unmarshal func(interface{}) error) error { var lines []string if err := unmarshal(&lines); err != nil { return err } for _, line := range lines { pm, err := compat.Matchers(line, "config") if err != nil { return err } *m = append(*m, pm...) } sort.Sort(labels.Matchers(*m)) return nil } // MarshalYAML implements the yaml.Marshaler interface for Matchers. func (m Matchers) MarshalYAML() (interface{}, error) { result := make([]string, len(m)) for i, matcher := range m { result[i] = matcher.String() } return result, nil } // UnmarshalJSON implements the json.Unmarshaler interface for Matchers. func (m *Matchers) UnmarshalJSON(data []byte) error { var lines []string if err := json.Unmarshal(data, &lines); err != nil { return err } for _, line := range lines { pm, err := compat.Matchers(line, "config") if err != nil { return err } *m = append(*m, pm...) } sort.Sort(labels.Matchers(*m)) return nil } // MarshalJSON implements the json.Marshaler interface for Matchers. func (m Matchers) MarshalJSON() ([]byte, error) { if len(m) == 0 { return []byte("[]"), nil } result := make([]string, len(m)) for i, matcher := range m { result[i] = matcher.String() } return json.Marshal(result) } prometheus-alertmanager-0.28.1+ds/config/config_test.go000066400000000000000000001163741476331240200231550ustar00rootroot00000000000000// Copyright 2016 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package config import ( "encoding/json" "net/url" "os" "reflect" "regexp" "strings" "testing" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "gopkg.in/yaml.v2" "github.com/prometheus/alertmanager/featurecontrol" "github.com/prometheus/alertmanager/matcher/compat" ) func TestLoadEmptyString(t *testing.T) { var in string _, err := Load(in) expected := "no route provided in config" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } } func TestDefaultReceiverExists(t *testing.T) { in := ` route: group_wait: 30s ` _, err := Load(in) expected := "root route must specify a default receiver" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } } func TestReceiverNameIsUnique(t *testing.T) { in := ` route: receiver: team-X receivers: - name: 'team-X' - name: 'team-X' ` _, err := Load(in) expected := "notification config name \"team-X\" is not unique" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestReceiverExists(t *testing.T) { in := ` route: receiver: team-X receivers: - name: 'team-Y' ` _, err := Load(in) expected := "undefined receiver \"team-X\" used in route" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestReceiverExistsForDeepSubRoute(t *testing.T) { in := ` route: receiver: team-X routes: - match: foo: bar routes: - match: foo: bar receiver: nonexistent receivers: - name: 'team-X' ` _, err := Load(in) expected := "undefined receiver \"nonexistent\" used in route" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestReceiverHasName(t *testing.T) { in := ` route: receivers: - name: '' ` _, err := Load(in) expected := "missing name in receiver" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestMuteTimeExists(t *testing.T) { in := ` route: receiver: team-Y routes: - match: severity: critical mute_time_intervals: - business_hours receivers: - name: 'team-Y' ` _, err := Load(in) expected := "undefined time interval \"business_hours\" used in route" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestActiveTimeExists(t *testing.T) { in := ` route: receiver: team-Y routes: - match: severity: critical active_time_intervals: - business_hours receivers: - name: 'team-Y' ` _, err := Load(in) expected := "undefined time interval \"business_hours\" used in route" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestTimeIntervalHasName(t *testing.T) { in := ` time_intervals: - name: time_intervals: - times: - start_time: '09:00' end_time: '17:00' receivers: - name: 'team-X-mails' route: receiver: 'team-X-mails' routes: - match: severity: critical mute_time_intervals: - business_hours ` _, err := Load(in) expected := "missing name in time interval" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestMuteTimeNoDuplicates(t *testing.T) { in := ` mute_time_intervals: - name: duplicate time_intervals: - times: - start_time: '09:00' end_time: '17:00' - name: duplicate time_intervals: - times: - start_time: '10:00' end_time: '14:00' receivers: - name: 'team-X-mails' route: receiver: 'team-X-mails' routes: - match: severity: critical mute_time_intervals: - business_hours ` _, err := Load(in) expected := "mute time interval \"duplicate\" is not unique" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestGroupByHasNoDuplicatedLabels(t *testing.T) { in := ` route: group_by: ['alertname', 'cluster', 'service', 'cluster'] receivers: - name: 'team-X-mails' ` _, err := Load(in) expected := "duplicated label \"cluster\" in group_by" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestWildcardGroupByWithOtherGroupByLabels(t *testing.T) { in := ` route: group_by: ['alertname', 'cluster', '...'] receiver: team-X-mails receivers: - name: 'team-X-mails' ` _, err := Load(in) expected := "cannot have wildcard group_by (`...`) and other other labels at the same time" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestGroupByInvalidLabel(t *testing.T) { in := ` route: group_by: ['-invalid-'] receiver: team-X-mails receivers: - name: 'team-X-mails' ` _, err := Load(in) expected := "invalid label name \"-invalid-\" in group_by list" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestRootRouteExists(t *testing.T) { in := ` receivers: - name: 'team-X-mails' ` _, err := Load(in) expected := "no routes provided" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestRootRouteNoMuteTimes(t *testing.T) { in := ` mute_time_intervals: - name: my_mute_time time_intervals: - times: - start_time: '09:00' end_time: '17:00' receivers: - name: 'team-X-mails' route: receiver: 'team-X-mails' mute_time_intervals: - my_mute_time ` _, err := Load(in) expected := "root route must not have any mute time intervals" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestRootRouteNoActiveTimes(t *testing.T) { in := ` time_intervals: - name: my_active_time time_intervals: - times: - start_time: '09:00' end_time: '17:00' receivers: - name: 'team-X-mails' route: receiver: 'team-X-mails' active_time_intervals: - my_active_time ` _, err := Load(in) expected := "root route must not have any active time intervals" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestRootRouteHasNoMatcher(t *testing.T) { testCases := []struct { name string in string }{ { name: "Test deprecated matchers on root route not allowed", in: ` route: receiver: 'team-X' match: severity: critical receivers: - name: 'team-X' `, }, { name: "Test matchers not allowed on root route", in: ` route: receiver: 'team-X' matchers: - severity=critical receivers: - name: 'team-X' `, }, } expected := "root route must not have any matchers" for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { _, err := Load(tc.in) if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } }) } } func TestContinueErrorInRouteRoot(t *testing.T) { in := ` route: receiver: team-X-mails continue: true receivers: - name: 'team-X-mails' ` _, err := Load(in) expected := "cannot have continue in root route" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestGroupIntervalIsGreaterThanZero(t *testing.T) { in := ` route: receiver: team-X-mails group_interval: 0s receivers: - name: 'team-X-mails' ` _, err := Load(in) expected := "group_interval cannot be zero" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestRepeatIntervalIsGreaterThanZero(t *testing.T) { in := ` route: receiver: team-X-mails repeat_interval: 0s receivers: - name: 'team-X-mails' ` _, err := Load(in) expected := "repeat_interval cannot be zero" if err == nil { t.Fatalf("no error returned, expected:\n%q", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%q\ngot:\n%q", expected, err.Error()) } } func TestHideConfigSecrets(t *testing.T) { c, err := LoadFile("testdata/conf.good.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.good.yml", err) } // String method must not reveal authentication credentials. s := c.String() if strings.Count(s, "") != 13 || strings.Contains(s, "mysecret") { t.Fatal("config's String method reveals authentication credentials.") } } func TestShowMarshalSecretValues(t *testing.T) { MarshalSecretValue = true defer func() { MarshalSecretValue = false }() c, err := LoadFile("testdata/conf.good.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.good.yml", err) } // String method must reveal authentication credentials. s := c.String() if strings.Count(s, "") > 0 || !strings.Contains(s, "mysecret") { t.Fatal("config's String method must reveal authentication credentials when MarshalSecretValue = true.") } } func TestJSONMarshal(t *testing.T) { c, err := LoadFile("testdata/conf.good.yml") if err != nil { t.Errorf("Error parsing %s: %s", "testdata/conf.good.yml", err) } _, err = json.Marshal(c) if err != nil { t.Fatal("JSON Marshaling failed:", err) } } func TestJSONMarshalHideSecret(t *testing.T) { test := struct { S Secret }{ S: Secret("test"), } c, err := json.Marshal(test) if err != nil { t.Fatal(err) } // u003c -> "<" // u003e -> ">" require.Equal(t, "{\"S\":\"\\u003csecret\\u003e\"}", string(c), "Secret not properly elided.") } func TestJSONMarshalShowSecret(t *testing.T) { MarshalSecretValue = true defer func() { MarshalSecretValue = false }() test := struct { S Secret }{ S: Secret("test"), } c, err := json.Marshal(test) if err != nil { t.Fatal(err) } require.Equal(t, "{\"S\":\"test\"}", string(c), "config's String method must reveal authentication credentials when MarshalSecretValue = true.") } func TestJSONMarshalHideSecretURL(t *testing.T) { urlp, err := url.Parse("http://example.com/") if err != nil { t.Fatal(err) } u := &SecretURL{urlp} c, err := json.Marshal(u) if err != nil { t.Fatal(err) } // u003c -> "<" // u003e -> ">" require.Equal(t, "\"\\u003csecret\\u003e\"", string(c), "SecretURL not properly elided in JSON.") // Check that the marshaled data can be unmarshaled again. out := &SecretURL{} err = json.Unmarshal(c, out) if err != nil { t.Fatal(err) } c, err = yaml.Marshal(u) if err != nil { t.Fatal(err) } require.Equal(t, "\n", string(c), "SecretURL not properly elided in YAML.") // Check that the marshaled data can be unmarshaled again. out = &SecretURL{} err = yaml.Unmarshal(c, &out) if err != nil { t.Fatal(err) } } func TestJSONMarshalShowSecretURL(t *testing.T) { MarshalSecretValue = true defer func() { MarshalSecretValue = false }() urlp, err := url.Parse("http://example.com/") if err != nil { t.Fatal(err) } u := &SecretURL{urlp} c, err := json.Marshal(u) if err != nil { t.Fatal(err) } require.Equal(t, "\"http://example.com/\"", string(c), "config's String method must reveal authentication credentials when MarshalSecretValue = true.") } func TestUnmarshalSecretURL(t *testing.T) { b := []byte(`"http://example.com/se cret"`) var u SecretURL err := json.Unmarshal(b, &u) if err != nil { t.Fatal(err) } require.Equal(t, "http://example.com/se%20cret", u.String(), "SecretURL not properly unmarshaled in JSON.") err = yaml.Unmarshal(b, &u) if err != nil { t.Fatal(err) } require.Equal(t, "http://example.com/se%20cret", u.String(), "SecretURL not properly unmarshaled in YAML.") } func TestHideSecretURL(t *testing.T) { b := []byte(`"://wrongurl/"`) var u SecretURL err := json.Unmarshal(b, &u) require.Error(t, err) require.NotContains(t, err.Error(), "wrongurl") } func TestShowMarshalSecretURL(t *testing.T) { MarshalSecretValue = true defer func() { MarshalSecretValue = false }() b := []byte(`"://wrongurl/"`) var u SecretURL err := json.Unmarshal(b, &u) require.Error(t, err) require.Contains(t, err.Error(), "wrongurl") } func TestMarshalURL(t *testing.T) { for name, tc := range map[string]struct { input *URL expectedJSON string expectedYAML string }{ "url": { input: mustParseURL("http://example.com/"), expectedJSON: "\"http://example.com/\"", expectedYAML: "http://example.com/\n", }, "wrapped nil value": { input: &URL{}, expectedJSON: "null", expectedYAML: "null\n", }, "wrapped empty URL": { input: &URL{&url.URL{}}, expectedJSON: "\"\"", expectedYAML: "\"\"\n", }, } { t.Run(name, func(t *testing.T) { j, err := json.Marshal(tc.input) require.NoError(t, err) require.Equal(t, tc.expectedJSON, string(j), "URL not properly marshaled into JSON.") y, err := yaml.Marshal(tc.input) require.NoError(t, err) require.Equal(t, tc.expectedYAML, string(y), "URL not properly marshaled into YAML.") }) } } func TestUnmarshalNilURL(t *testing.T) { b := []byte(`null`) { var u URL err := json.Unmarshal(b, &u) require.Error(t, err, "unsupported scheme \"\" for URL") require.Nil(t, nil, u.URL) } { var u URL err := yaml.Unmarshal(b, &u) require.NoError(t, err) require.Nil(t, nil, u.URL) // UnmarshalYAML is not even called when unmarshalling "null". } } func TestUnmarshalEmptyURL(t *testing.T) { b := []byte(`""`) { var u URL err := json.Unmarshal(b, &u) require.Error(t, err, "unsupported scheme \"\" for URL") require.Equal(t, (*url.URL)(nil), u.URL) } { var u URL err := yaml.Unmarshal(b, &u) require.Error(t, err, "unsupported scheme \"\" for URL") require.Equal(t, (*url.URL)(nil), u.URL) } } func TestUnmarshalURL(t *testing.T) { b := []byte(`"http://example.com/a b"`) var u URL err := json.Unmarshal(b, &u) if err != nil { t.Fatal(err) } require.Equal(t, "http://example.com/a%20b", u.String(), "URL not properly unmarshaled in JSON.") err = yaml.Unmarshal(b, &u) if err != nil { t.Fatal(err) } require.Equal(t, "http://example.com/a%20b", u.String(), "URL not properly unmarshaled in YAML.") } func TestUnmarshalInvalidURL(t *testing.T) { for _, b := range [][]byte{ []byte(`"://example.com"`), []byte(`"http:example.com"`), []byte(`"telnet://example.com"`), } { var u URL err := json.Unmarshal(b, &u) if err == nil { t.Errorf("Expected an error unmarshaling %q from JSON", string(b)) } err = yaml.Unmarshal(b, &u) if err == nil { t.Errorf("Expected an error unmarshaling %q from YAML", string(b)) } t.Logf("%s", err) } } func TestUnmarshalRelativeURL(t *testing.T) { b := []byte(`"/home"`) var u URL err := json.Unmarshal(b, &u) if err == nil { t.Errorf("Expected an error parsing URL") } err = yaml.Unmarshal(b, &u) if err == nil { t.Errorf("Expected an error parsing URL") } } func TestMarshalRegexpWithNilValue(t *testing.T) { r := &Regexp{} out, err := json.Marshal(r) require.NoError(t, err) require.Equal(t, "null", string(out)) out, err = yaml.Marshal(r) require.NoError(t, err) require.Equal(t, "null\n", string(out)) } func TestUnmarshalEmptyRegexp(t *testing.T) { b := []byte(`""`) { var re Regexp err := json.Unmarshal(b, &re) require.NoError(t, err) require.Equal(t, regexp.MustCompile("^(?:)$"), re.Regexp) require.Equal(t, "", re.original) } { var re Regexp err := yaml.Unmarshal(b, &re) require.NoError(t, err) require.Equal(t, regexp.MustCompile("^(?:)$"), re.Regexp) require.Equal(t, "", re.original) } } func TestUnmarshalNullRegexp(t *testing.T) { input := []byte(`null`) { var re Regexp err := json.Unmarshal(input, &re) require.NoError(t, err) require.Nil(t, nil, re.Regexp) require.Equal(t, "", re.original) } { var re Regexp err := yaml.Unmarshal(input, &re) // Interestingly enough, unmarshalling `null` in YAML doesn't even call UnmarshalYAML. require.NoError(t, err) require.Nil(t, re.Regexp) require.Equal(t, "", re.original) } } func TestMarshalEmptyMatchers(t *testing.T) { r := Matchers{} out, err := json.Marshal(r) require.NoError(t, err) require.Equal(t, "[]", string(out)) out, err = yaml.Marshal(r) require.NoError(t, err) require.Equal(t, "[]\n", string(out)) } func TestJSONUnmarshal(t *testing.T) { c, err := LoadFile("testdata/conf.good.yml") if err != nil { t.Errorf("Error parsing %s: %s", "testdata/conf.good.yml", err) } _, err = json.Marshal(c) if err != nil { t.Fatal("JSON Marshaling failed:", err) } } func TestMarshalIdempotency(t *testing.T) { c, err := LoadFile("testdata/conf.good.yml") if err != nil { t.Errorf("Error parsing %s: %s", "testdata/conf.good.yml", err) } marshaled, err := yaml.Marshal(c) if err != nil { t.Fatal("YAML Marshaling failed:", err) } c = new(Config) if err := yaml.Unmarshal(marshaled, c); err != nil { t.Fatal("YAML Unmarshaling failed:", err) } } func TestGroupByAllNotMarshaled(t *testing.T) { in := ` route: receiver: team-X-mails group_by: [...] receivers: - name: 'team-X-mails' ` c, err := Load(in) if err != nil { t.Fatal("load failed:", err) } dat, err := yaml.Marshal(c) if err != nil { t.Fatal("YAML Marshaling failed:", err) } if strings.Contains(string(dat), "groupbyall") { t.Fatal("groupbyall found in config file") } } func TestEmptyFieldsAndRegex(t *testing.T) { boolFoo := true regexpFoo := Regexp{ Regexp: regexp.MustCompile("^(?:^(foo1|foo2|baz)$)$"), original: "^(foo1|foo2|baz)$", } expectedConf := Config{ Global: &GlobalConfig{ HTTPConfig: &commoncfg.HTTPClientConfig{ FollowRedirects: true, EnableHTTP2: true, }, ResolveTimeout: model.Duration(5 * time.Minute), SMTPSmarthost: HostPort{Host: "localhost", Port: "25"}, SMTPFrom: "alertmanager@example.org", SMTPTLSConfig: &commoncfg.TLSConfig{ InsecureSkipVerify: false, }, SlackAPIURL: (*SecretURL)(mustParseURL("http://slack.example.com/")), SMTPRequireTLS: true, PagerdutyURL: mustParseURL("https://events.pagerduty.com/v2/enqueue"), OpsGenieAPIURL: mustParseURL("https://api.opsgenie.com/"), WeChatAPIURL: mustParseURL("https://qyapi.weixin.qq.com/cgi-bin/"), VictorOpsAPIURL: mustParseURL("https://alert.victorops.com/integrations/generic/20131114/alert/"), TelegramAPIUrl: mustParseURL("https://api.telegram.org"), WebexAPIURL: mustParseURL("https://webexapis.com/v1/messages"), RocketchatAPIURL: mustParseURL("https://open.rocket.chat/"), }, Templates: []string{ "/etc/alertmanager/template/*.tmpl", }, Route: &Route{ Receiver: "team-X-mails", GroupBy: []model.LabelName{ "alertname", "cluster", "service", }, GroupByStr: []string{ "alertname", "cluster", "service", }, GroupByAll: false, Routes: []*Route{ { Receiver: "team-X-mails", MatchRE: map[string]Regexp{ "service": regexpFoo, }, }, }, }, Receivers: []Receiver{ { Name: "team-X-mails", EmailConfigs: []*EmailConfig{ { To: "team-X+alerts@example.org", From: "alertmanager@example.org", Smarthost: HostPort{Host: "localhost", Port: "25"}, HTML: "{{ template \"email.default.html\" . }}", RequireTLS: &boolFoo, TLSConfig: &commoncfg.TLSConfig{ InsecureSkipVerify: false, }, }, }, }, }, } // Load a non-empty configuration to ensure that all fields are overwritten. // See https://github.com/prometheus/alertmanager/issues/1649. _, err := LoadFile("testdata/conf.good.yml") if err != nil { t.Errorf("Error parsing %s: %s", "testdata/conf.good.yml", err) } config, err := LoadFile("testdata/conf.empty-fields.yml") if err != nil { t.Errorf("Error parsing %s: %s", "testdata/conf.empty-fields.yml", err) } configGot, err := yaml.Marshal(config) if err != nil { t.Fatal("YAML Marshaling failed:", err) } configExp, err := yaml.Marshal(expectedConf) if err != nil { t.Fatalf("%s", err) } if !reflect.DeepEqual(configGot, configExp) { t.Fatalf("%s: unexpected config result: \n\n%s\n expected\n\n%s", "testdata/conf.empty-fields.yml", configGot, configExp) } } func TestGlobalAndLocalHTTPConfig(t *testing.T) { config, err := LoadFile("testdata/conf.http-config.good.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf-http-config.good.yml", err) } if config.Global.HTTPConfig.FollowRedirects { t.Fatalf("global HTTP config should not follow redirects") } if !config.Receivers[0].SlackConfigs[0].HTTPConfig.FollowRedirects { t.Fatalf("global HTTP config should follow redirects") } } func TestSMTPHello(t *testing.T) { c, err := LoadFile("testdata/conf.good.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.good.yml", err) } const refValue = "host.example.org" hostName := c.Global.SMTPHello if hostName != refValue { t.Errorf("Invalid SMTP Hello hostname: %s\nExpected: %s", hostName, refValue) } } func TestSMTPBothPasswordAndFile(t *testing.T) { _, err := LoadFile("testdata/conf.smtp-both-password-and-file.yml") if err == nil { t.Fatalf("Expected an error parsing %s: %s", "testdata/conf.smtp-both-password-and-file.yml", err) } if err.Error() != "at most one of smtp_auth_password & smtp_auth_password_file must be configured" { t.Errorf("Expected: %s\nGot: %s", "at most one of auth_password & auth_password_file must be configured", err.Error()) } } func TestSMTPNoUsernameOrPassword(t *testing.T) { _, err := LoadFile("testdata/conf.smtp-no-username-or-password.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.smtp-no-username-or-password.yml", err) } } func TestGlobalAndLocalSMTPPassword(t *testing.T) { config, err := LoadFile("testdata/conf.smtp-password-global-and-local.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.smtp-password-global-and-local.yml", err) } require.Equal(t, "/tmp/globaluserpassword", config.Receivers[0].EmailConfigs[0].AuthPasswordFile, "first email should use password file /tmp/globaluserpassword") require.Emptyf(t, config.Receivers[0].EmailConfigs[0].AuthPassword, "password field should be empty when file provided") require.Equal(t, "/tmp/localuser1password", config.Receivers[0].EmailConfigs[1].AuthPasswordFile, "second email should use password file /tmp/localuser1password") require.Emptyf(t, config.Receivers[0].EmailConfigs[1].AuthPassword, "password field should be empty when file provided") require.Equal(t, Secret("mysecret"), config.Receivers[0].EmailConfigs[2].AuthPassword, "third email should use password mysecret") require.Emptyf(t, config.Receivers[0].EmailConfigs[2].AuthPasswordFile, "file field should be empty when password provided") } func TestGroupByAll(t *testing.T) { c, err := LoadFile("testdata/conf.group-by-all.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.group-by-all.yml", err) } if !c.Route.GroupByAll { t.Errorf("Invalid group by all param: expected to by true") } } func TestVictorOpsDefaultAPIKey(t *testing.T) { conf, err := LoadFile("testdata/conf.victorops-default-apikey.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.victorops-default-apikey.yml", err) } defaultKey := conf.Global.VictorOpsAPIKey overrideKey := Secret("qwe456") if defaultKey != conf.Receivers[0].VictorOpsConfigs[0].APIKey { t.Fatalf("Invalid victorops key: %s\nExpected: %s", conf.Receivers[0].VictorOpsConfigs[0].APIKey, defaultKey) } if overrideKey != conf.Receivers[1].VictorOpsConfigs[0].APIKey { t.Errorf("Invalid victorops key: %s\nExpected: %s", conf.Receivers[0].VictorOpsConfigs[0].APIKey, string(overrideKey)) } } func TestVictorOpsDefaultAPIKeyFile(t *testing.T) { conf, err := LoadFile("testdata/conf.victorops-default-apikey-file.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.victorops-default-apikey-file.yml", err) } defaultKey := conf.Global.VictorOpsAPIKeyFile overrideKey := "/override_file" if defaultKey != conf.Receivers[0].VictorOpsConfigs[0].APIKeyFile { t.Fatalf("Invalid VictorOps key_file: %s\nExpected: %s", conf.Receivers[0].VictorOpsConfigs[0].APIKeyFile, defaultKey) } if overrideKey != conf.Receivers[1].VictorOpsConfigs[0].APIKeyFile { t.Errorf("Invalid VictorOps key_file: %s\nExpected: %s", conf.Receivers[0].VictorOpsConfigs[0].APIKeyFile, overrideKey) } } func TestVictorOpsBothAPIKeyAndFile(t *testing.T) { _, err := LoadFile("testdata/conf.victorops-both-file-and-apikey.yml") if err == nil { t.Fatalf("Expected an error parsing %s: %s", "testdata/conf.victorops-both-file-and-apikey.yml", err) } if err.Error() != "at most one of victorops_api_key & victorops_api_key_file must be configured" { t.Errorf("Expected: %s\nGot: %s", "at most one of victorops_api_key & victorops_api_key_file must be configured", err.Error()) } } func TestVictorOpsNoAPIKey(t *testing.T) { _, err := LoadFile("testdata/conf.victorops-no-apikey.yml") if err == nil { t.Fatalf("Expected an error parsing %s: %s", "testdata/conf.victorops-no-apikey.yml", err) } if err.Error() != "no global VictorOps API Key set" { t.Errorf("Expected: %s\nGot: %s", "no global VictorOps API Key set", err.Error()) } } func TestOpsGenieDefaultAPIKey(t *testing.T) { conf, err := LoadFile("testdata/conf.opsgenie-default-apikey.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.opsgenie-default-apikey.yml", err) } defaultKey := conf.Global.OpsGenieAPIKey if defaultKey != conf.Receivers[0].OpsGenieConfigs[0].APIKey { t.Fatalf("Invalid OpsGenie key: %s\nExpected: %s", conf.Receivers[0].OpsGenieConfigs[0].APIKey, defaultKey) } if defaultKey == conf.Receivers[1].OpsGenieConfigs[0].APIKey { t.Errorf("Invalid OpsGenie key: %s\nExpected: %s", conf.Receivers[0].OpsGenieConfigs[0].APIKey, "qwe456") } } func TestOpsGenieDefaultAPIKeyFile(t *testing.T) { conf, err := LoadFile("testdata/conf.opsgenie-default-apikey-file.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.opsgenie-default-apikey-file.yml", err) } defaultKey := conf.Global.OpsGenieAPIKeyFile if defaultKey != conf.Receivers[0].OpsGenieConfigs[0].APIKeyFile { t.Fatalf("Invalid OpsGenie key_file: %s\nExpected: %s", conf.Receivers[0].OpsGenieConfigs[0].APIKeyFile, defaultKey) } if defaultKey == conf.Receivers[1].OpsGenieConfigs[0].APIKeyFile { t.Errorf("Invalid OpsGenie key_file: %s\nExpected: %s", conf.Receivers[0].OpsGenieConfigs[0].APIKeyFile, "/override_file") } } func TestOpsGenieBothAPIKeyAndFile(t *testing.T) { _, err := LoadFile("testdata/conf.opsgenie-both-file-and-apikey.yml") if err == nil { t.Fatalf("Expected an error parsing %s: %s", "testdata/conf.opsgenie-both-file-and-apikey.yml", err) } if err.Error() != "at most one of opsgenie_api_key & opsgenie_api_key_file must be configured" { t.Errorf("Expected: %s\nGot: %s", "at most one of opsgenie_api_key & opsgenie_api_key_file must be configured", err.Error()) } } func TestOpsGenieNoAPIKey(t *testing.T) { _, err := LoadFile("testdata/conf.opsgenie-no-apikey.yml") if err == nil { t.Fatalf("Expected an error parsing %s: %s", "testdata/conf.opsgenie-no-apikey.yml", err) } if err.Error() != "no global OpsGenie API Key set either inline or in a file" { t.Errorf("Expected: %s\nGot: %s", "no global OpsGenie API Key set either inline or in a file", err.Error()) } } func TestOpsGenieDeprecatedTeamSpecified(t *testing.T) { _, err := LoadFile("testdata/conf.opsgenie-default-apikey-old-team.yml") if err == nil { t.Fatalf("Expected an error parsing %s: %s", "testdata/conf.opsgenie-default-apikey-old-team.yml", err) } const expectedErr = `yaml: unmarshal errors: line 16: field teams not found in type config.plain` if err.Error() != expectedErr { t.Errorf("Expected: %s\nGot: %s", expectedErr, err.Error()) } } func TestSlackBothAPIURLAndFile(t *testing.T) { _, err := LoadFile("testdata/conf.slack-both-file-and-url.yml") if err == nil { t.Fatalf("Expected an error parsing %s: %s", "testdata/conf.slack-both-file-and-url.yml", err) } if err.Error() != "at most one of slack_api_url & slack_api_url_file must be configured" { t.Errorf("Expected: %s\nGot: %s", "at most one of slack_api_url & slack_api_url_file must be configured", err.Error()) } } func TestSlackNoAPIURL(t *testing.T) { _, err := LoadFile("testdata/conf.slack-no-api-url.yml") if err == nil { t.Fatalf("Expected an error parsing %s: %s", "testdata/conf.slack-no-api-url.yml", err) } if err.Error() != "no global Slack API URL set either inline or in a file" { t.Errorf("Expected: %s\nGot: %s", "no global Slack API URL set either inline or in a file", err.Error()) } } func TestSlackGlobalAPIURLFile(t *testing.T) { conf, err := LoadFile("testdata/conf.slack-default-api-url-file.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.slack-default-api-url-file.yml", err) } // no override firstConfig := conf.Receivers[0].SlackConfigs[0] if firstConfig.APIURLFile != "/global_file" || firstConfig.APIURL != nil { t.Fatalf("Invalid Slack URL file: %s\nExpected: %s", firstConfig.APIURLFile, "/global_file") } // override the file secondConfig := conf.Receivers[0].SlackConfigs[1] if secondConfig.APIURLFile != "/override_file" || secondConfig.APIURL != nil { t.Fatalf("Invalid Slack URL file: %s\nExpected: %s", secondConfig.APIURLFile, "/override_file") } // override the global file with an inline URL thirdConfig := conf.Receivers[0].SlackConfigs[2] if thirdConfig.APIURL.String() != "http://mysecret.example.com/" || thirdConfig.APIURLFile != "" { t.Fatalf("Invalid Slack URL: %s\nExpected: %s", thirdConfig.APIURL.String(), "http://mysecret.example.com/") } } func TestValidSNSConfig(t *testing.T) { _, err := LoadFile("testdata/conf.sns-topic-arn.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.sns-topic-arn.yml\"", err) } } func TestInvalidSNSConfig(t *testing.T) { _, err := LoadFile("testdata/conf.sns-invalid.yml") if err == nil { t.Fatalf("expected error with missing fields on SNS config") } const expectedErr = `must provide either a Target ARN, Topic ARN, or Phone Number for SNS config` if err.Error() != expectedErr { t.Errorf("Expected: %s\nGot: %s", expectedErr, err.Error()) } } func TestRocketchatDefaultToken(t *testing.T) { conf, err := LoadFile("testdata/conf.rocketchat-default-token.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.rocketchat-default-token.yml", err) } defaultToken := conf.Global.RocketchatToken overrideToken := Secret("token456") if defaultToken != conf.Receivers[0].RocketchatConfigs[0].Token { t.Fatalf("Invalid rocketchat key: %s\nExpected: %s", string(*conf.Receivers[0].RocketchatConfigs[0].Token), string(*defaultToken)) } if overrideToken != *conf.Receivers[1].RocketchatConfigs[0].Token { t.Errorf("Invalid rocketchat key: %s\nExpected: %s", string(*conf.Receivers[0].RocketchatConfigs[0].Token), string(overrideToken)) } } func TestRocketchatDefaultTokenID(t *testing.T) { conf, err := LoadFile("testdata/conf.rocketchat-default-token.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.rocketchat-default-token.yml", err) } defaultTokenID := conf.Global.RocketchatTokenID overrideTokenID := Secret("id456") if defaultTokenID != conf.Receivers[0].RocketchatConfigs[0].TokenID { t.Fatalf("Invalid rocketchat key: %s\nExpected: %s", string(*conf.Receivers[0].RocketchatConfigs[0].TokenID), string(*defaultTokenID)) } if overrideTokenID != *conf.Receivers[1].RocketchatConfigs[0].TokenID { t.Errorf("Invalid rocketchat key: %s\nExpected: %s", string(*conf.Receivers[0].RocketchatConfigs[0].TokenID), string(overrideTokenID)) } } func TestRocketchatDefaultTokenFile(t *testing.T) { conf, err := LoadFile("testdata/conf.rocketchat-default-token-file.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.rocketchat-default-token-file.yml", err) } defaultTokenFile := conf.Global.RocketchatTokenFile overrideTokenFile := "/override_file" if defaultTokenFile != conf.Receivers[0].RocketchatConfigs[0].TokenFile { t.Fatalf("Invalid Rocketchat key_file: %s\nExpected: %s", conf.Receivers[0].RocketchatConfigs[0].TokenFile, defaultTokenFile) } if overrideTokenFile != conf.Receivers[1].RocketchatConfigs[0].TokenFile { t.Errorf("Invalid Rocketchat key_file: %s\nExpected: %s", conf.Receivers[0].RocketchatConfigs[0].TokenFile, overrideTokenFile) } } func TestRocketchatDefaultIDTokenFile(t *testing.T) { conf, err := LoadFile("testdata/conf.rocketchat-default-token-file.yml") if err != nil { t.Fatalf("Error parsing %s: %s", "testdata/conf.rocketchat-default-token-file.yml", err) } defaultTokenIDFile := conf.Global.RocketchatTokenIDFile overrideTokenIDFile := "/override_file" if defaultTokenIDFile != conf.Receivers[0].RocketchatConfigs[0].TokenIDFile { t.Fatalf("Invalid Rocketchat key_file: %s\nExpected: %s", conf.Receivers[0].RocketchatConfigs[0].TokenIDFile, defaultTokenIDFile) } if overrideTokenIDFile != conf.Receivers[1].RocketchatConfigs[0].TokenIDFile { t.Errorf("Invalid Rocketchat key_file: %s\nExpected: %s", conf.Receivers[0].RocketchatConfigs[0].TokenIDFile, overrideTokenIDFile) } } func TestRocketchatBothTokenAndTokenFile(t *testing.T) { _, err := LoadFile("testdata/conf.rocketchat-both-token-and-tokenfile.yml") if err == nil { t.Fatalf("Expected an error parsing %s: %s", "testdata/conf.rocketchat-both-token-and-tokenfile.yml", err) } if err.Error() != "at most one of rocketchat_token & rocketchat_token_file must be configured" { t.Errorf("Expected: %s\nGot: %s", "at most one of rocketchat_token & rocketchat_token_file must be configured", err.Error()) } } func TestRocketchatBothTokenIDAndTokenIDFile(t *testing.T) { _, err := LoadFile("testdata/conf.rocketchat-both-tokenid-and-tokenidfile.yml") if err == nil { t.Fatalf("Expected an error parsing %s: %s", "testdata/conf.rocketchat-both-tokenid-and-tokenidfile.yml", err) } if err.Error() != "at most one of rocketchat_token_id & rocketchat_token_id_file must be configured" { t.Errorf("Expected: %s\nGot: %s", "at most one of rocketchat_token_id & rocketchat_token_id_file must be configured", err.Error()) } } func TestRocketchatNoToken(t *testing.T) { _, err := LoadFile("testdata/conf.rocketchat-no-token.yml") if err == nil { t.Fatalf("Expected an error parsing %s: %s", "testdata/conf.rocketchat-no-token.yml", err) } if err.Error() != "no global Rocketchat Token set either inline or in a file" { t.Errorf("Expected: %s\nGot: %s", "no global Rocketchat Token set either inline or in a file", err.Error()) } } func TestUnmarshalHostPort(t *testing.T) { for _, tc := range []struct { in string exp HostPort jsonOut string yamlOut string err bool }{ { in: `""`, exp: HostPort{}, yamlOut: `"" `, jsonOut: `""`, }, { in: `"localhost:25"`, exp: HostPort{Host: "localhost", Port: "25"}, yamlOut: `localhost:25 `, jsonOut: `"localhost:25"`, }, { in: `":25"`, exp: HostPort{Host: "", Port: "25"}, yamlOut: `:25 `, jsonOut: `":25"`, }, { in: `"localhost"`, err: true, }, { in: `"localhost:"`, err: true, }, } { tc := tc t.Run(tc.in, func(t *testing.T) { hp := HostPort{} err := yaml.Unmarshal([]byte(tc.in), &hp) if tc.err { require.Error(t, err) return } require.NoError(t, err) require.Equal(t, tc.exp, hp) b, err := yaml.Marshal(&hp) require.NoError(t, err) require.Equal(t, tc.yamlOut, string(b)) b, err = json.Marshal(&hp) require.NoError(t, err) require.Equal(t, tc.jsonOut, string(b)) }) } } func TestNilRegexp(t *testing.T) { for _, tc := range []struct { file string errMsg string }{ { file: "testdata/conf.nil-match_re-route.yml", errMsg: "invalid_label", }, { file: "testdata/conf.nil-source_match_re-inhibition.yml", errMsg: "invalid_source_label", }, { file: "testdata/conf.nil-target_match_re-inhibition.yml", errMsg: "invalid_target_label", }, } { t.Run(tc.file, func(t *testing.T) { _, err := os.Stat(tc.file) require.NoError(t, err) _, err = LoadFile(tc.file) require.Error(t, err) require.Contains(t, err.Error(), tc.errMsg) }) } } func TestInhibitRuleEqual(t *testing.T) { c, err := LoadFile("testdata/conf.inhibit-equal.yml") require.NoError(t, err) // The inhibition rule should have the expected equal labels. require.Len(t, c.InhibitRules, 1) r := c.InhibitRules[0] require.Equal(t, []string{"qux", "corge"}, r.Equal) // Should not be able to load configuration with UTF-8 in equals list. _, err = LoadFile("testdata/conf.inhibit-equal-utf8.yml") require.Error(t, err) require.Equal(t, "invalid label name \"qux🙂\" in equal list", err.Error()) // Change the mode to UTF-8 mode. ff, err := featurecontrol.NewFlags(promslog.NewNopLogger(), featurecontrol.FeatureUTF8StrictMode) require.NoError(t, err) compat.InitFromFlags(promslog.NewNopLogger(), ff) // Restore the mode to classic at the end of the test. ff, err = featurecontrol.NewFlags(promslog.NewNopLogger(), featurecontrol.FeatureClassicMode) require.NoError(t, err) defer compat.InitFromFlags(promslog.NewNopLogger(), ff) c, err = LoadFile("testdata/conf.inhibit-equal.yml") require.NoError(t, err) // The inhibition rule should have the expected equal labels. require.Len(t, c.InhibitRules, 1) r = c.InhibitRules[0] require.Equal(t, []string{"qux", "corge"}, r.Equal) // Should also be able to load configuration with UTF-8 in equals list. c, err = LoadFile("testdata/conf.inhibit-equal-utf8.yml") require.NoError(t, err) // The inhibition rule should have the expected equal labels. require.Len(t, c.InhibitRules, 1) r = c.InhibitRules[0] require.Equal(t, []string{"qux🙂", "corge"}, r.Equal) } prometheus-alertmanager-0.28.1+ds/config/coordinator.go000066400000000000000000000102151476331240200231570ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package config import ( "crypto/md5" "encoding/binary" "log/slog" "sync" "github.com/prometheus/client_golang/prometheus" ) // Coordinator coordinates Alertmanager configurations beyond the lifetime of a // single configuration. type Coordinator struct { configFilePath string logger *slog.Logger // Protects config and subscribers mutex sync.Mutex config *Config subscribers []func(*Config) error configHashMetric prometheus.Gauge configSuccessMetric prometheus.Gauge configSuccessTimeMetric prometheus.Gauge } // NewCoordinator returns a new coordinator with the given configuration file // path. It does not yet load the configuration from file. This is done in // `Reload()`. func NewCoordinator(configFilePath string, r prometheus.Registerer, l *slog.Logger) *Coordinator { c := &Coordinator{ configFilePath: configFilePath, logger: l, } c.registerMetrics(r) return c } func (c *Coordinator) registerMetrics(r prometheus.Registerer) { configHash := prometheus.NewGauge(prometheus.GaugeOpts{ Name: "alertmanager_config_hash", Help: "Hash of the currently loaded alertmanager configuration. Note that this is not a cryptographically strong hash.", }) configSuccess := prometheus.NewGauge(prometheus.GaugeOpts{ Name: "alertmanager_config_last_reload_successful", Help: "Whether the last configuration reload attempt was successful.", }) configSuccessTime := prometheus.NewGauge(prometheus.GaugeOpts{ Name: "alertmanager_config_last_reload_success_timestamp_seconds", Help: "Timestamp of the last successful configuration reload.", }) r.MustRegister(configHash, configSuccess, configSuccessTime) c.configHashMetric = configHash c.configSuccessMetric = configSuccess c.configSuccessTimeMetric = configSuccessTime } // Subscribe subscribes the given Subscribers to configuration changes. func (c *Coordinator) Subscribe(ss ...func(*Config) error) { c.mutex.Lock() defer c.mutex.Unlock() c.subscribers = append(c.subscribers, ss...) } func (c *Coordinator) notifySubscribers() error { for _, s := range c.subscribers { if err := s(c.config); err != nil { return err } } return nil } // loadFromFile triggers a configuration load, discarding the old configuration. func (c *Coordinator) loadFromFile() error { conf, err := LoadFile(c.configFilePath) if err != nil { return err } c.config = conf return nil } // Reload triggers a configuration reload from file and notifies all // configuration change subscribers. func (c *Coordinator) Reload() error { c.mutex.Lock() defer c.mutex.Unlock() c.logger.Info( "Loading configuration file", "file", c.configFilePath, ) if err := c.loadFromFile(); err != nil { c.logger.Error( "Loading configuration file failed", "file", c.configFilePath, "err", err, ) c.configSuccessMetric.Set(0) return err } c.logger.Info( "Completed loading of configuration file", "file", c.configFilePath, ) if err := c.notifySubscribers(); err != nil { c.logger.Error( "one or more config change subscribers failed to apply new config", "file", c.configFilePath, "err", err, ) c.configSuccessMetric.Set(0) return err } c.configSuccessMetric.Set(1) c.configSuccessTimeMetric.SetToCurrentTime() hash := md5HashAsMetricValue([]byte(c.config.original)) c.configHashMetric.Set(hash) return nil } func md5HashAsMetricValue(data []byte) float64 { sum := md5.Sum(data) // We only want 48 bits as a float64 only has a 53 bit mantissa. smallSum := sum[0:6] bytes := make([]byte, 8) copy(bytes, smallSum) return float64(binary.LittleEndian.Uint64(bytes)) } prometheus-alertmanager-0.28.1+ds/config/coordinator_test.go000066400000000000000000000043021476331240200242160ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package config import ( "errors" "testing" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/promslog" ) type fakeRegisterer struct { registeredCollectors []prometheus.Collector } func (r *fakeRegisterer) Register(prometheus.Collector) error { return nil } func (r *fakeRegisterer) MustRegister(c ...prometheus.Collector) { r.registeredCollectors = append(r.registeredCollectors, c...) } func (r *fakeRegisterer) Unregister(prometheus.Collector) bool { return false } func TestCoordinatorRegistersMetrics(t *testing.T) { fr := fakeRegisterer{} NewCoordinator("testdata/conf.good.yml", &fr, promslog.NewNopLogger()) if len(fr.registeredCollectors) == 0 { t.Error("expected NewCoordinator to register metrics on the given registerer") } } func TestCoordinatorNotifiesSubscribers(t *testing.T) { callBackCalled := false c := NewCoordinator("testdata/conf.good.yml", prometheus.NewRegistry(), promslog.NewNopLogger()) c.Subscribe(func(*Config) error { callBackCalled = true return nil }) err := c.Reload() if err != nil { t.Fatal(err) } if !callBackCalled { t.Fatal("expected coordinator.Reload() to call subscribers") } } func TestCoordinatorFailReloadWhenSubscriberFails(t *testing.T) { errMessage := "something happened" c := NewCoordinator("testdata/conf.good.yml", prometheus.NewRegistry(), promslog.NewNopLogger()) c.Subscribe(func(*Config) error { return errors.New(errMessage) }) err := c.Reload() if err == nil { t.Fatal("expected reload to throw an error") } if err.Error() != errMessage { t.Fatalf("expected error message %q but got %q", errMessage, err) } } prometheus-alertmanager-0.28.1+ds/config/notifiers.go000066400000000000000000001201131476331240200226350ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package config import ( "errors" "fmt" "net/textproto" "regexp" "strings" "text/template" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/sigv4" ) var ( // DefaultWebhookConfig defines default values for Webhook configurations. DefaultWebhookConfig = WebhookConfig{ NotifierConfig: NotifierConfig{ VSendResolved: true, }, } // DefaultWebexConfig defines default values for Webex configurations. DefaultWebexConfig = WebexConfig{ NotifierConfig: NotifierConfig{ VSendResolved: true, }, Message: `{{ template "webex.default.message" . }}`, } // DefaultDiscordConfig defines default values for Discord configurations. DefaultDiscordConfig = DiscordConfig{ NotifierConfig: NotifierConfig{ VSendResolved: true, }, Title: `{{ template "discord.default.title" . }}`, Message: `{{ template "discord.default.message" . }}`, } // DefaultEmailConfig defines default values for Email configurations. DefaultEmailConfig = EmailConfig{ NotifierConfig: NotifierConfig{ VSendResolved: false, }, HTML: `{{ template "email.default.html" . }}`, Text: ``, } // DefaultEmailSubject defines the default Subject header of an Email. DefaultEmailSubject = `{{ template "email.default.subject" . }}` // DefaultPagerdutyDetails defines the default values for PagerDuty details. DefaultPagerdutyDetails = map[string]string{ "firing": `{{ template "pagerduty.default.instances" .Alerts.Firing }}`, "resolved": `{{ template "pagerduty.default.instances" .Alerts.Resolved }}`, "num_firing": `{{ .Alerts.Firing | len }}`, "num_resolved": `{{ .Alerts.Resolved | len }}`, } // DefaultPagerdutyConfig defines default values for PagerDuty configurations. DefaultPagerdutyConfig = PagerdutyConfig{ NotifierConfig: NotifierConfig{ VSendResolved: true, }, Description: `{{ template "pagerduty.default.description" .}}`, Client: `{{ template "pagerduty.default.client" . }}`, ClientURL: `{{ template "pagerduty.default.clientURL" . }}`, } // DefaultSlackConfig defines default values for Slack configurations. DefaultSlackConfig = SlackConfig{ NotifierConfig: NotifierConfig{ VSendResolved: false, }, Color: `{{ if eq .Status "firing" }}danger{{ else }}good{{ end }}`, Username: `{{ template "slack.default.username" . }}`, Title: `{{ template "slack.default.title" . }}`, TitleLink: `{{ template "slack.default.titlelink" . }}`, IconEmoji: `{{ template "slack.default.iconemoji" . }}`, IconURL: `{{ template "slack.default.iconurl" . }}`, Pretext: `{{ template "slack.default.pretext" . }}`, Text: `{{ template "slack.default.text" . }}`, Fallback: `{{ template "slack.default.fallback" . }}`, CallbackID: `{{ template "slack.default.callbackid" . }}`, Footer: `{{ template "slack.default.footer" . }}`, } // DefaultRocketchatConfig defines default values for Rocketchat configurations. DefaultRocketchatConfig = RocketchatConfig{ NotifierConfig: NotifierConfig{ VSendResolved: false, }, Color: `{{ if eq .Status "firing" }}red{{ else }}green{{ end }}`, Emoji: `{{ template "rocketchat.default.emoji" . }}`, IconURL: `{{ template "rocketchat.default.iconurl" . }}`, Text: `{{ template "rocketchat.default.text" . }}`, Title: `{{ template "rocketchat.default.title" . }}`, TitleLink: `{{ template "rocketchat.default.titlelink" . }}`, } // DefaultOpsGenieConfig defines default values for OpsGenie configurations. DefaultOpsGenieConfig = OpsGenieConfig{ NotifierConfig: NotifierConfig{ VSendResolved: true, }, Message: `{{ template "opsgenie.default.message" . }}`, Description: `{{ template "opsgenie.default.description" . }}`, Source: `{{ template "opsgenie.default.source" . }}`, // TODO: Add a details field with all the alerts. } // DefaultWechatConfig defines default values for wechat configurations. DefaultWechatConfig = WechatConfig{ NotifierConfig: NotifierConfig{ VSendResolved: false, }, Message: `{{ template "wechat.default.message" . }}`, ToUser: `{{ template "wechat.default.to_user" . }}`, ToParty: `{{ template "wechat.default.to_party" . }}`, ToTag: `{{ template "wechat.default.to_tag" . }}`, AgentID: `{{ template "wechat.default.agent_id" . }}`, } // DefaultVictorOpsConfig defines default values for VictorOps configurations. DefaultVictorOpsConfig = VictorOpsConfig{ NotifierConfig: NotifierConfig{ VSendResolved: true, }, MessageType: `CRITICAL`, StateMessage: `{{ template "victorops.default.state_message" . }}`, EntityDisplayName: `{{ template "victorops.default.entity_display_name" . }}`, MonitoringTool: `{{ template "victorops.default.monitoring_tool" . }}`, } // DefaultPushoverConfig defines default values for Pushover configurations. DefaultPushoverConfig = PushoverConfig{ NotifierConfig: NotifierConfig{ VSendResolved: true, }, Title: `{{ template "pushover.default.title" . }}`, Message: `{{ template "pushover.default.message" . }}`, URL: `{{ template "pushover.default.url" . }}`, Priority: `{{ if eq .Status "firing" }}2{{ else }}0{{ end }}`, // emergency (firing) or normal Retry: duration(1 * time.Minute), Expire: duration(1 * time.Hour), HTML: false, } // DefaultSNSConfig defines default values for SNS configurations. DefaultSNSConfig = SNSConfig{ NotifierConfig: NotifierConfig{ VSendResolved: true, }, Subject: `{{ template "sns.default.subject" . }}`, Message: `{{ template "sns.default.message" . }}`, } DefaultTelegramConfig = TelegramConfig{ NotifierConfig: NotifierConfig{ VSendResolved: true, }, DisableNotifications: false, Message: `{{ template "telegram.default.message" . }}`, ParseMode: "HTML", } DefaultMSTeamsConfig = MSTeamsConfig{ NotifierConfig: NotifierConfig{ VSendResolved: true, }, Title: `{{ template "msteams.default.title" . }}`, Summary: `{{ template "msteams.default.summary" . }}`, Text: `{{ template "msteams.default.text" . }}`, } DefaultMSTeamsV2Config = MSTeamsV2Config{ NotifierConfig: NotifierConfig{ VSendResolved: true, }, Title: `{{ template "msteamsv2.default.title" . }}`, Text: `{{ template "msteamsv2.default.text" . }}`, } DefaultJiraConfig = JiraConfig{ NotifierConfig: NotifierConfig{ VSendResolved: true, }, Summary: `{{ template "jira.default.summary" . }}`, Description: `{{ template "jira.default.description" . }}`, Priority: `{{ template "jira.default.priority" . }}`, } ) // NotifierConfig contains base options common across all notifier configurations. type NotifierConfig struct { VSendResolved bool `yaml:"send_resolved" json:"send_resolved"` } func (nc *NotifierConfig) SendResolved() bool { return nc.VSendResolved } // WebexConfig configures notifications via Webex. type WebexConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` APIURL *URL `yaml:"api_url,omitempty" json:"api_url,omitempty"` Message string `yaml:"message,omitempty" json:"message,omitempty"` RoomID string `yaml:"room_id" json:"room_id"` } // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *WebexConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultWebexConfig type plain WebexConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.RoomID == "" { return errors.New("missing room_id on webex_config") } if c.HTTPConfig == nil || c.HTTPConfig.Authorization == nil { return errors.New("missing webex_configs.http_config.authorization") } return nil } // DiscordConfig configures notifications via Discord. type DiscordConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` WebhookURL *SecretURL `yaml:"webhook_url,omitempty" json:"webhook_url,omitempty"` WebhookURLFile string `yaml:"webhook_url_file,omitempty" json:"webhook_url_file,omitempty"` Content string `yaml:"content,omitempty" json:"content,omitempty"` Title string `yaml:"title,omitempty" json:"title,omitempty"` Message string `yaml:"message,omitempty" json:"message,omitempty"` Username string `yaml:"username,omitempty" json:"username,omitempty"` AvatarURL string `yaml:"avatar_url,omitempty" json:"avatar_url,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *DiscordConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultDiscordConfig type plain DiscordConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.WebhookURL == nil && c.WebhookURLFile == "" { return errors.New("one of webhook_url or webhook_url_file must be configured") } if c.WebhookURL != nil && len(c.WebhookURLFile) > 0 { return errors.New("at most one of webhook_url & webhook_url_file must be configured") } return nil } // EmailConfig configures notifications via mail. type EmailConfig struct { NotifierConfig `yaml:",inline" json:",inline"` // Email address to notify. To string `yaml:"to,omitempty" json:"to,omitempty"` From string `yaml:"from,omitempty" json:"from,omitempty"` Hello string `yaml:"hello,omitempty" json:"hello,omitempty"` Smarthost HostPort `yaml:"smarthost,omitempty" json:"smarthost,omitempty"` AuthUsername string `yaml:"auth_username,omitempty" json:"auth_username,omitempty"` AuthPassword Secret `yaml:"auth_password,omitempty" json:"auth_password,omitempty"` AuthPasswordFile string `yaml:"auth_password_file,omitempty" json:"auth_password_file,omitempty"` AuthSecret Secret `yaml:"auth_secret,omitempty" json:"auth_secret,omitempty"` AuthIdentity string `yaml:"auth_identity,omitempty" json:"auth_identity,omitempty"` Headers map[string]string `yaml:"headers,omitempty" json:"headers,omitempty"` HTML string `yaml:"html,omitempty" json:"html,omitempty"` Text string `yaml:"text,omitempty" json:"text,omitempty"` RequireTLS *bool `yaml:"require_tls,omitempty" json:"require_tls,omitempty"` TLSConfig *commoncfg.TLSConfig `yaml:"tls_config,omitempty" json:"tls_config,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *EmailConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultEmailConfig type plain EmailConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.To == "" { return errors.New("missing to address in email config") } // Header names are case-insensitive, check for collisions. normalizedHeaders := map[string]string{} for h, v := range c.Headers { normalized := textproto.CanonicalMIMEHeaderKey(h) if _, ok := normalizedHeaders[normalized]; ok { return fmt.Errorf("duplicate header %q in email config", normalized) } normalizedHeaders[normalized] = v } c.Headers = normalizedHeaders return nil } // PagerdutyConfig configures notifications via PagerDuty. type PagerdutyConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` ServiceKey Secret `yaml:"service_key,omitempty" json:"service_key,omitempty"` ServiceKeyFile string `yaml:"service_key_file,omitempty" json:"service_key_file,omitempty"` RoutingKey Secret `yaml:"routing_key,omitempty" json:"routing_key,omitempty"` RoutingKeyFile string `yaml:"routing_key_file,omitempty" json:"routing_key_file,omitempty"` URL *URL `yaml:"url,omitempty" json:"url,omitempty"` Client string `yaml:"client,omitempty" json:"client,omitempty"` ClientURL string `yaml:"client_url,omitempty" json:"client_url,omitempty"` Description string `yaml:"description,omitempty" json:"description,omitempty"` Details map[string]string `yaml:"details,omitempty" json:"details,omitempty"` Images []PagerdutyImage `yaml:"images,omitempty" json:"images,omitempty"` Links []PagerdutyLink `yaml:"links,omitempty" json:"links,omitempty"` Source string `yaml:"source,omitempty" json:"source,omitempty"` Severity string `yaml:"severity,omitempty" json:"severity,omitempty"` Class string `yaml:"class,omitempty" json:"class,omitempty"` Component string `yaml:"component,omitempty" json:"component,omitempty"` Group string `yaml:"group,omitempty" json:"group,omitempty"` } // PagerdutyLink is a link. type PagerdutyLink struct { Href string `yaml:"href,omitempty" json:"href,omitempty"` Text string `yaml:"text,omitempty" json:"text,omitempty"` } // PagerdutyImage is an image. type PagerdutyImage struct { Src string `yaml:"src,omitempty" json:"src,omitempty"` Alt string `yaml:"alt,omitempty" json:"alt,omitempty"` Href string `yaml:"href,omitempty" json:"href,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *PagerdutyConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultPagerdutyConfig type plain PagerdutyConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.RoutingKey == "" && c.ServiceKey == "" && c.RoutingKeyFile == "" && c.ServiceKeyFile == "" { return errors.New("missing service or routing key in PagerDuty config") } if len(c.RoutingKey) > 0 && len(c.RoutingKeyFile) > 0 { return errors.New("at most one of routing_key & routing_key_file must be configured") } if len(c.ServiceKey) > 0 && len(c.ServiceKeyFile) > 0 { return errors.New("at most one of service_key & service_key_file must be configured") } if c.Details == nil { c.Details = make(map[string]string) } if c.Source == "" { c.Source = c.Client } for k, v := range DefaultPagerdutyDetails { if _, ok := c.Details[k]; !ok { c.Details[k] = v } } return nil } // SlackAction configures a single Slack action that is sent with each notification. // See https://api.slack.com/docs/message-attachments#action_fields and https://api.slack.com/docs/message-buttons // for more information. type SlackAction struct { Type string `yaml:"type,omitempty" json:"type,omitempty"` Text string `yaml:"text,omitempty" json:"text,omitempty"` URL string `yaml:"url,omitempty" json:"url,omitempty"` Style string `yaml:"style,omitempty" json:"style,omitempty"` Name string `yaml:"name,omitempty" json:"name,omitempty"` Value string `yaml:"value,omitempty" json:"value,omitempty"` ConfirmField *SlackConfirmationField `yaml:"confirm,omitempty" json:"confirm,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface for SlackAction. func (c *SlackAction) UnmarshalYAML(unmarshal func(interface{}) error) error { type plain SlackAction if err := unmarshal((*plain)(c)); err != nil { return err } if c.Type == "" { return errors.New("missing type in Slack action configuration") } if c.Text == "" { return errors.New("missing text in Slack action configuration") } if c.URL != "" { // Clear all message action fields. c.Name = "" c.Value = "" c.ConfirmField = nil } else if c.Name != "" { c.URL = "" } else { return errors.New("missing name or url in Slack action configuration") } return nil } // SlackConfirmationField protect users from destructive actions or particularly distinguished decisions // by asking them to confirm their button click one more time. // See https://api.slack.com/docs/interactive-message-field-guide#confirmation_fields for more information. type SlackConfirmationField struct { Text string `yaml:"text,omitempty" json:"text,omitempty"` Title string `yaml:"title,omitempty" json:"title,omitempty"` OkText string `yaml:"ok_text,omitempty" json:"ok_text,omitempty"` DismissText string `yaml:"dismiss_text,omitempty" json:"dismiss_text,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface for SlackConfirmationField. func (c *SlackConfirmationField) UnmarshalYAML(unmarshal func(interface{}) error) error { type plain SlackConfirmationField if err := unmarshal((*plain)(c)); err != nil { return err } if c.Text == "" { return errors.New("missing text in Slack confirmation configuration") } return nil } // SlackField configures a single Slack field that is sent with each notification. // Each field must contain a title, value, and optionally, a boolean value to indicate if the field // is short enough to be displayed next to other fields designated as short. // See https://api.slack.com/docs/message-attachments#fields for more information. type SlackField struct { Title string `yaml:"title,omitempty" json:"title,omitempty"` Value string `yaml:"value,omitempty" json:"value,omitempty"` Short *bool `yaml:"short,omitempty" json:"short,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface for SlackField. func (c *SlackField) UnmarshalYAML(unmarshal func(interface{}) error) error { type plain SlackField if err := unmarshal((*plain)(c)); err != nil { return err } if c.Title == "" { return errors.New("missing title in Slack field configuration") } if c.Value == "" { return errors.New("missing value in Slack field configuration") } return nil } // SlackConfig configures notifications via Slack. type SlackConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` APIURL *SecretURL `yaml:"api_url,omitempty" json:"api_url,omitempty"` APIURLFile string `yaml:"api_url_file,omitempty" json:"api_url_file,omitempty"` // Slack channel override, (like #other-channel or @username). Channel string `yaml:"channel,omitempty" json:"channel,omitempty"` Username string `yaml:"username,omitempty" json:"username,omitempty"` Color string `yaml:"color,omitempty" json:"color,omitempty"` Title string `yaml:"title,omitempty" json:"title,omitempty"` TitleLink string `yaml:"title_link,omitempty" json:"title_link,omitempty"` Pretext string `yaml:"pretext,omitempty" json:"pretext,omitempty"` Text string `yaml:"text,omitempty" json:"text,omitempty"` Fields []*SlackField `yaml:"fields,omitempty" json:"fields,omitempty"` ShortFields bool `yaml:"short_fields" json:"short_fields,omitempty"` Footer string `yaml:"footer,omitempty" json:"footer,omitempty"` Fallback string `yaml:"fallback,omitempty" json:"fallback,omitempty"` CallbackID string `yaml:"callback_id,omitempty" json:"callback_id,omitempty"` IconEmoji string `yaml:"icon_emoji,omitempty" json:"icon_emoji,omitempty"` IconURL string `yaml:"icon_url,omitempty" json:"icon_url,omitempty"` ImageURL string `yaml:"image_url,omitempty" json:"image_url,omitempty"` ThumbURL string `yaml:"thumb_url,omitempty" json:"thumb_url,omitempty"` LinkNames bool `yaml:"link_names" json:"link_names,omitempty"` MrkdwnIn []string `yaml:"mrkdwn_in,omitempty" json:"mrkdwn_in,omitempty"` Actions []*SlackAction `yaml:"actions,omitempty" json:"actions,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *SlackConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultSlackConfig type plain SlackConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.APIURL != nil && len(c.APIURLFile) > 0 { return errors.New("at most one of api_url & api_url_file must be configured") } return nil } // WebhookConfig configures notifications via a generic webhook. type WebhookConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` // URL to send POST request to. URL *SecretURL `yaml:"url" json:"url"` URLFile string `yaml:"url_file" json:"url_file"` // MaxAlerts is the maximum number of alerts to be sent per webhook message. // Alerts exceeding this threshold will be truncated. Setting this to 0 // allows an unlimited number of alerts. MaxAlerts uint64 `yaml:"max_alerts" json:"max_alerts"` // Timeout is the maximum time allowed to invoke the webhook. Setting this to 0 // does not impose a timeout. Timeout time.Duration `yaml:"timeout" json:"timeout"` } // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *WebhookConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultWebhookConfig type plain WebhookConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.URL == nil && c.URLFile == "" { return errors.New("one of url or url_file must be configured") } if c.URL != nil && c.URLFile != "" { return errors.New("at most one of url & url_file must be configured") } return nil } // WechatConfig configures notifications via Wechat. type WechatConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` APISecret Secret `yaml:"api_secret,omitempty" json:"api_secret,omitempty"` CorpID string `yaml:"corp_id,omitempty" json:"corp_id,omitempty"` Message string `yaml:"message,omitempty" json:"message,omitempty"` APIURL *URL `yaml:"api_url,omitempty" json:"api_url,omitempty"` ToUser string `yaml:"to_user,omitempty" json:"to_user,omitempty"` ToParty string `yaml:"to_party,omitempty" json:"to_party,omitempty"` ToTag string `yaml:"to_tag,omitempty" json:"to_tag,omitempty"` AgentID string `yaml:"agent_id,omitempty" json:"agent_id,omitempty"` MessageType string `yaml:"message_type,omitempty" json:"message_type,omitempty"` } const wechatValidTypesRe = `^(text|markdown)$` var wechatTypeMatcher = regexp.MustCompile(wechatValidTypesRe) // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *WechatConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultWechatConfig type plain WechatConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.MessageType == "" { c.MessageType = "text" } if !wechatTypeMatcher.MatchString(c.MessageType) { return fmt.Errorf("weChat message type %q does not match valid options %s", c.MessageType, wechatValidTypesRe) } return nil } // OpsGenieConfig configures notifications via OpsGenie. type OpsGenieConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` APIKey Secret `yaml:"api_key,omitempty" json:"api_key,omitempty"` APIKeyFile string `yaml:"api_key_file,omitempty" json:"api_key_file,omitempty"` APIURL *URL `yaml:"api_url,omitempty" json:"api_url,omitempty"` Message string `yaml:"message,omitempty" json:"message,omitempty"` Description string `yaml:"description,omitempty" json:"description,omitempty"` Source string `yaml:"source,omitempty" json:"source,omitempty"` Details map[string]string `yaml:"details,omitempty" json:"details,omitempty"` Entity string `yaml:"entity,omitempty" json:"entity,omitempty"` Responders []OpsGenieConfigResponder `yaml:"responders,omitempty" json:"responders,omitempty"` Actions string `yaml:"actions,omitempty" json:"actions,omitempty"` Tags string `yaml:"tags,omitempty" json:"tags,omitempty"` Note string `yaml:"note,omitempty" json:"note,omitempty"` Priority string `yaml:"priority,omitempty" json:"priority,omitempty"` UpdateAlerts bool `yaml:"update_alerts,omitempty" json:"update_alerts,omitempty"` } const opsgenieValidTypesRe = `^(team|teams|user|escalation|schedule)$` var opsgenieTypeMatcher = regexp.MustCompile(opsgenieValidTypesRe) // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *OpsGenieConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultOpsGenieConfig type plain OpsGenieConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.APIKey != "" && len(c.APIKeyFile) > 0 { return errors.New("at most one of api_key & api_key_file must be configured") } for _, r := range c.Responders { if r.ID == "" && r.Username == "" && r.Name == "" { return fmt.Errorf("opsGenieConfig responder %v has to have at least one of id, username or name specified", r) } if strings.Contains(r.Type, "{{") { _, err := template.New("").Parse(r.Type) if err != nil { return fmt.Errorf("opsGenieConfig responder %v type is not a valid template: %w", r, err) } } else { r.Type = strings.ToLower(r.Type) if !opsgenieTypeMatcher.MatchString(r.Type) { return fmt.Errorf("opsGenieConfig responder %v type does not match valid options %s", r, opsgenieValidTypesRe) } } } return nil } type OpsGenieConfigResponder struct { // One of those 3 should be filled. ID string `yaml:"id,omitempty" json:"id,omitempty"` Name string `yaml:"name,omitempty" json:"name,omitempty"` Username string `yaml:"username,omitempty" json:"username,omitempty"` // team, user, escalation, schedule etc. Type string `yaml:"type,omitempty" json:"type,omitempty"` } // VictorOpsConfig configures notifications via VictorOps. type VictorOpsConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` APIKey Secret `yaml:"api_key,omitempty" json:"api_key,omitempty"` APIKeyFile string `yaml:"api_key_file,omitempty" json:"api_key_file,omitempty"` APIURL *URL `yaml:"api_url" json:"api_url"` RoutingKey string `yaml:"routing_key" json:"routing_key"` MessageType string `yaml:"message_type" json:"message_type"` StateMessage string `yaml:"state_message" json:"state_message"` EntityDisplayName string `yaml:"entity_display_name" json:"entity_display_name"` MonitoringTool string `yaml:"monitoring_tool" json:"monitoring_tool"` CustomFields map[string]string `yaml:"custom_fields,omitempty" json:"custom_fields,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *VictorOpsConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultVictorOpsConfig type plain VictorOpsConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.RoutingKey == "" { return errors.New("missing Routing key in VictorOps config") } if c.APIKey != "" && len(c.APIKeyFile) > 0 { return errors.New("at most one of api_key & api_key_file must be configured") } reservedFields := []string{"routing_key", "message_type", "state_message", "entity_display_name", "monitoring_tool", "entity_id", "entity_state"} for _, v := range reservedFields { if _, ok := c.CustomFields[v]; ok { return fmt.Errorf("victorOps config contains custom field %s which cannot be used as it conflicts with the fixed/static fields", v) } } return nil } type duration time.Duration func (d *duration) UnmarshalText(text []byte) error { parsed, err := time.ParseDuration(string(text)) if err == nil { *d = duration(parsed) } return err } func (d duration) MarshalText() ([]byte, error) { return []byte(time.Duration(d).String()), nil } type PushoverConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` UserKey Secret `yaml:"user_key,omitempty" json:"user_key,omitempty"` UserKeyFile string `yaml:"user_key_file,omitempty" json:"user_key_file,omitempty"` Token Secret `yaml:"token,omitempty" json:"token,omitempty"` TokenFile string `yaml:"token_file,omitempty" json:"token_file,omitempty"` Title string `yaml:"title,omitempty" json:"title,omitempty"` Message string `yaml:"message,omitempty" json:"message,omitempty"` URL string `yaml:"url,omitempty" json:"url,omitempty"` URLTitle string `yaml:"url_title,omitempty" json:"url_title,omitempty"` Device string `yaml:"device,omitempty" json:"device,omitempty"` Sound string `yaml:"sound,omitempty" json:"sound,omitempty"` Priority string `yaml:"priority,omitempty" json:"priority,omitempty"` Retry duration `yaml:"retry,omitempty" json:"retry,omitempty"` Expire duration `yaml:"expire,omitempty" json:"expire,omitempty"` TTL duration `yaml:"ttl,omitempty" json:"ttl,omitempty"` HTML bool `yaml:"html" json:"html,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *PushoverConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultPushoverConfig type plain PushoverConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.UserKey == "" && c.UserKeyFile == "" { return errors.New("one of user_key or user_key_file must be configured") } if c.UserKey != "" && c.UserKeyFile != "" { return errors.New("at most one of user_key & user_key_file must be configured") } if c.Token == "" && c.TokenFile == "" { return errors.New("one of token or token_file must be configured") } if c.Token != "" && c.TokenFile != "" { return errors.New("at most one of token & token_file must be configured") } return nil } type SNSConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` APIUrl string `yaml:"api_url,omitempty" json:"api_url,omitempty"` Sigv4 sigv4.SigV4Config `yaml:"sigv4" json:"sigv4"` TopicARN string `yaml:"topic_arn,omitempty" json:"topic_arn,omitempty"` PhoneNumber string `yaml:"phone_number,omitempty" json:"phone_number,omitempty"` TargetARN string `yaml:"target_arn,omitempty" json:"target_arn,omitempty"` Subject string `yaml:"subject,omitempty" json:"subject,omitempty"` Message string `yaml:"message,omitempty" json:"message,omitempty"` Attributes map[string]string `yaml:"attributes,omitempty" json:"attributes,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *SNSConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultSNSConfig type plain SNSConfig if err := unmarshal((*plain)(c)); err != nil { return err } if (c.TargetARN == "") != (c.TopicARN == "") != (c.PhoneNumber == "") { return errors.New("must provide either a Target ARN, Topic ARN, or Phone Number for SNS config") } return nil } // TelegramConfig configures notifications via Telegram. type TelegramConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` APIUrl *URL `yaml:"api_url" json:"api_url,omitempty"` BotToken Secret `yaml:"bot_token,omitempty" json:"token,omitempty"` BotTokenFile string `yaml:"bot_token_file,omitempty" json:"token_file,omitempty"` ChatID int64 `yaml:"chat_id,omitempty" json:"chat,omitempty"` MessageThreadID int `yaml:"message_thread_id,omitempty" json:"message_thread_id,omitempty"` Message string `yaml:"message,omitempty" json:"message,omitempty"` DisableNotifications bool `yaml:"disable_notifications,omitempty" json:"disable_notifications,omitempty"` ParseMode string `yaml:"parse_mode,omitempty" json:"parse_mode,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *TelegramConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultTelegramConfig type plain TelegramConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.BotToken == "" && c.BotTokenFile == "" { return errors.New("missing bot_token or bot_token_file on telegram_config") } if c.BotToken != "" && c.BotTokenFile != "" { return errors.New("at most one of bot_token & bot_token_file must be configured") } if c.ChatID == 0 { return errors.New("missing chat_id on telegram_config") } if c.ParseMode != "" && c.ParseMode != "Markdown" && c.ParseMode != "MarkdownV2" && c.ParseMode != "HTML" { return errors.New("unknown parse_mode on telegram_config, must be Markdown, MarkdownV2, HTML or empty string") } return nil } type MSTeamsConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` WebhookURL *SecretURL `yaml:"webhook_url,omitempty" json:"webhook_url,omitempty"` WebhookURLFile string `yaml:"webhook_url_file,omitempty" json:"webhook_url_file,omitempty"` Title string `yaml:"title,omitempty" json:"title,omitempty"` Summary string `yaml:"summary,omitempty" json:"summary,omitempty"` Text string `yaml:"text,omitempty" json:"text,omitempty"` } func (c *MSTeamsConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultMSTeamsConfig type plain MSTeamsConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.WebhookURL == nil && c.WebhookURLFile == "" { return errors.New("one of webhook_url or webhook_url_file must be configured") } if c.WebhookURL != nil && len(c.WebhookURLFile) > 0 { return errors.New("at most one of webhook_url & webhook_url_file must be configured") } return nil } type MSTeamsV2Config struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` WebhookURL *SecretURL `yaml:"webhook_url,omitempty" json:"webhook_url,omitempty"` WebhookURLFile string `yaml:"webhook_url_file,omitempty" json:"webhook_url_file,omitempty"` Title string `yaml:"title,omitempty" json:"title,omitempty"` Text string `yaml:"text,omitempty" json:"text,omitempty"` } func (c *MSTeamsV2Config) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultMSTeamsV2Config type plain MSTeamsV2Config if err := unmarshal((*plain)(c)); err != nil { return err } if c.WebhookURL == nil && c.WebhookURLFile == "" { return errors.New("one of webhook_url or webhook_url_file must be configured") } if c.WebhookURL != nil && len(c.WebhookURLFile) > 0 { return errors.New("at most one of webhook_url & webhook_url_file must be configured") } return nil } type JiraConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` APIURL *URL `yaml:"api_url,omitempty" json:"api_url,omitempty"` Project string `yaml:"project,omitempty" json:"project,omitempty"` Summary string `yaml:"summary,omitempty" json:"summary,omitempty"` Description string `yaml:"description,omitempty" json:"description,omitempty"` Labels []string `yaml:"labels,omitempty" json:"labels,omitempty"` Priority string `yaml:"priority,omitempty" json:"priority,omitempty"` IssueType string `yaml:"issue_type,omitempty" json:"issue_type,omitempty"` ReopenTransition string `yaml:"reopen_transition,omitempty" json:"reopen_transition,omitempty"` ResolveTransition string `yaml:"resolve_transition,omitempty" json:"resolve_transition,omitempty"` WontFixResolution string `yaml:"wont_fix_resolution,omitempty" json:"wont_fix_resolution,omitempty"` ReopenDuration model.Duration `yaml:"reopen_duration,omitempty" json:"reopen_duration,omitempty"` Fields map[string]any `yaml:"fields,omitempty" json:"custom_fields,omitempty"` } func (c *JiraConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultJiraConfig type plain JiraConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.Project == "" { return errors.New("missing project in jira_config") } if c.IssueType == "" { return errors.New("missing issue_type in jira_config") } return nil } type RocketchatAttachmentField struct { Short *bool `json:"short"` Title string `json:"title,omitempty"` Value string `json:"value,omitempty"` } const ( ProcessingTypeSendMessage = "sendMessage" ProcessingTypeRespondWithMessage = "respondWithMessage" ) type RocketchatAttachmentAction struct { Type string `json:"type,omitempty"` Text string `json:"text,omitempty"` URL string `json:"url,omitempty"` ImageURL string `json:"image_url,omitempty"` IsWebView bool `json:"is_webview"` WebviewHeightRatio string `json:"webview_height_ratio,omitempty"` Msg string `json:"msg,omitempty"` MsgInChatWindow bool `json:"msg_in_chat_window"` MsgProcessingType string `json:"msg_processing_type,omitempty"` } // RocketchatConfig configures notifications via Rocketchat. type RocketchatConfig struct { NotifierConfig `yaml:",inline" json:",inline"` HTTPConfig *commoncfg.HTTPClientConfig `yaml:"http_config,omitempty" json:"http_config,omitempty"` APIURL *URL `yaml:"api_url,omitempty" json:"api_url,omitempty"` TokenID *Secret `yaml:"token_id,omitempty" json:"token_id,omitempty"` TokenIDFile string `yaml:"token_id_file,omitempty" json:"token_id_file,omitempty"` Token *Secret `yaml:"token,omitempty" json:"token,omitempty"` TokenFile string `yaml:"token_file,omitempty" json:"token_file,omitempty"` // RocketChat channel override, (like #other-channel or @username). Channel string `yaml:"channel,omitempty" json:"channel,omitempty"` Color string `yaml:"color,omitempty" json:"color,omitempty"` Title string `yaml:"title,omitempty" json:"title,omitempty"` TitleLink string `yaml:"title_link,omitempty" json:"title_link,omitempty"` Text string `yaml:"text,omitempty" json:"text,omitempty"` Fields []*RocketchatAttachmentField `yaml:"fields,omitempty" json:"fields,omitempty"` ShortFields bool `yaml:"short_fields" json:"short_fields,omitempty"` Emoji string `yaml:"emoji,omitempty" json:"emoji,omitempty"` IconURL string `yaml:"icon_url,omitempty" json:"icon_url,omitempty"` ImageURL string `yaml:"image_url,omitempty" json:"image_url,omitempty"` ThumbURL string `yaml:"thumb_url,omitempty" json:"thumb_url,omitempty"` LinkNames bool `yaml:"link_names" json:"link_names,omitempty"` Actions []*RocketchatAttachmentAction `yaml:"actions,omitempty" json:"actions,omitempty"` } // UnmarshalYAML implements the yaml.Unmarshaler interface. func (c *RocketchatConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { *c = DefaultRocketchatConfig type plain RocketchatConfig if err := unmarshal((*plain)(c)); err != nil { return err } if c.Token != nil && len(c.TokenFile) > 0 { return errors.New("at most one of token & token_file must be configured") } if c.TokenID != nil && len(c.TokenIDFile) > 0 { return errors.New("at most one of token_id & token_id_file must be configured") } return nil } prometheus-alertmanager-0.28.1+ds/config/notifiers_test.go000066400000000000000000000577311476331240200237130ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package config import ( "errors" "net/mail" "reflect" "strings" "testing" "github.com/stretchr/testify/require" "gopkg.in/yaml.v2" ) func TestEmailToIsPresent(t *testing.T) { in := ` to: '' ` var cfg EmailConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "missing to address in email config" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } } func TestEmailHeadersCollision(t *testing.T) { in := ` to: 'to@email.com' headers: Subject: 'Alert' subject: 'New Alert' ` var cfg EmailConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "duplicate header \"Subject\" in email config" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } } func TestEmailToAllowsMultipleAdresses(t *testing.T) { in := ` to: 'a@example.com, ,b@example.com,c@example.com' ` var cfg EmailConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) if err != nil { t.Fatal(err) } expected := []*mail.Address{ {Address: "a@example.com"}, {Address: "b@example.com"}, {Address: "c@example.com"}, } res, err := mail.ParseAddressList(cfg.To) if err != nil { t.Fatal(err) } if !reflect.DeepEqual(res, expected) { t.Fatalf("expected %v, got %v", expected, res) } } func TestEmailDisallowMalformed(t *testing.T) { in := ` to: 'a@' ` var cfg EmailConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) if err != nil { t.Fatal(err) } _, err = mail.ParseAddressList(cfg.To) if err == nil { t.Fatalf("no error returned, expected:\n%v", "mail: no angle-addr") } } func TestPagerdutyTestRoutingKey(t *testing.T) { t.Run("error if no routing key or key file", func(t *testing.T) { in := ` routing_key: '' ` var cfg PagerdutyConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "missing service or routing key in PagerDuty config" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } }) t.Run("error if both routing key and key file", func(t *testing.T) { in := ` routing_key: 'xyz' routing_key_file: 'xyz' ` var cfg PagerdutyConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "at most one of routing_key & routing_key_file must be configured" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } }) } func TestPagerdutyServiceKey(t *testing.T) { t.Run("error if no service key or key file", func(t *testing.T) { in := ` service_key: '' ` var cfg PagerdutyConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "missing service or routing key in PagerDuty config" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } }) t.Run("error if both service key and key file", func(t *testing.T) { in := ` service_key: 'xyz' service_key_file: 'xyz' ` var cfg PagerdutyConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "at most one of service_key & service_key_file must be configured" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } }) } func TestPagerdutyDetails(t *testing.T) { tests := []struct { in string checkFn func(map[string]string) }{ { in: ` routing_key: 'xyz' `, checkFn: func(d map[string]string) { if len(d) != 4 { t.Errorf("expected 4 items, got: %d", len(d)) } }, }, { in: ` routing_key: 'xyz' details: key1: val1 `, checkFn: func(d map[string]string) { if len(d) != 5 { t.Errorf("expected 5 items, got: %d", len(d)) } }, }, { in: ` routing_key: 'xyz' details: key1: val1 key2: val2 firing: firing `, checkFn: func(d map[string]string) { if len(d) != 6 { t.Errorf("expected 6 items, got: %d", len(d)) } }, }, } for _, tc := range tests { var cfg PagerdutyConfig err := yaml.UnmarshalStrict([]byte(tc.in), &cfg) if err != nil { t.Errorf("expected no error, got:%v", err) } if tc.checkFn != nil { tc.checkFn(cfg.Details) } } } func TestPagerDutySource(t *testing.T) { for _, tc := range []struct { title string in string expectedSource string }{ { title: "check source field is backward compatible", in: ` routing_key: 'xyz' client: 'alert-manager-client' `, expectedSource: "alert-manager-client", }, { title: "check source field is set", in: ` routing_key: 'xyz' client: 'alert-manager-client' source: 'alert-manager-source' `, expectedSource: "alert-manager-source", }, } { t.Run(tc.title, func(t *testing.T) { var cfg PagerdutyConfig err := yaml.UnmarshalStrict([]byte(tc.in), &cfg) require.NoError(t, err) require.Equal(t, tc.expectedSource, cfg.Source) }) } } func TestWebhookURLIsPresent(t *testing.T) { in := `{}` var cfg WebhookConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "one of url or url_file must be configured" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } } func TestWebhookURLOrURLFile(t *testing.T) { in := ` url: 'http://example.com' url_file: 'http://example.com' ` var cfg WebhookConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "at most one of url & url_file must be configured" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } } func TestWebhookHttpConfigIsValid(t *testing.T) { in := ` url: 'http://example.com' http_config: bearer_token: foo bearer_token_file: /tmp/bar ` var cfg WebhookConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "at most one of bearer_token & bearer_token_file must be configured" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } } func TestWebhookHttpConfigIsOptional(t *testing.T) { in := ` url: 'http://example.com' ` var cfg WebhookConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) if err != nil { t.Fatalf("no error expected, returned:\n%v", err.Error()) } } func TestWebhookPasswordIsObfuscated(t *testing.T) { in := ` url: 'http://example.com' http_config: basic_auth: username: foo password: supersecret ` var cfg WebhookConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) if err != nil { t.Fatalf("no error expected, returned:\n%v", err.Error()) } ycfg, err := yaml.Marshal(cfg) if err != nil { t.Fatalf("no error expected, returned:\n%v", err.Error()) } if strings.Contains(string(ycfg), "supersecret") { t.Errorf("Found password in the YAML cfg: %s\n", ycfg) } } func TestVictorOpsConfiguration(t *testing.T) { t.Run("valid configuration", func(t *testing.T) { in := ` routing_key: test api_key_file: /global_file ` var cfg VictorOpsConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) if err != nil { t.Fatalf("no error was expected:\n%v", err) } }) t.Run("routing key is missing", func(t *testing.T) { in := ` routing_key: '' ` var cfg VictorOpsConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "missing Routing key in VictorOps config" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } }) t.Run("api_key and api_key_file both defined", func(t *testing.T) { in := ` routing_key: test api_key: xyz api_key_file: /global_file ` var cfg VictorOpsConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "at most one of api_key & api_key_file must be configured" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } }) } func TestVictorOpsCustomFieldsValidation(t *testing.T) { in := ` routing_key: 'test' custom_fields: entity_state: 'state_message' ` var cfg VictorOpsConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "victorOps config contains custom field entity_state which cannot be used as it conflicts with the fixed/static fields" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } in = ` routing_key: 'test' custom_fields: my_special_field: 'special_label' ` err = yaml.UnmarshalStrict([]byte(in), &cfg) expected = "special_label" if err != nil { t.Fatalf("Unexpected error returned, got:\n%v", err.Error()) } val, ok := cfg.CustomFields["my_special_field"] if !ok { t.Fatalf("Expected Custom Field to have value %v set, field is empty", expected) } if val != expected { t.Errorf("\nexpected custom field my_special_field value:\n%v\ngot:\n%v", expected, val) } } func TestPushoverUserKeyIsPresent(t *testing.T) { in := ` user_key: '' ` var cfg PushoverConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "one of user_key or user_key_file must be configured" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } } func TestPushoverUserKeyOrUserKeyFile(t *testing.T) { in := ` user_key: 'user key' user_key_file: /pushover/user_key ` var cfg PushoverConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "at most one of user_key & user_key_file must be configured" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } } func TestPushoverTokenIsPresent(t *testing.T) { in := ` user_key: '' token: '' ` var cfg PushoverConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "one of token or token_file must be configured" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } } func TestPushoverTokenOrTokenFile(t *testing.T) { in := ` token: 'pushover token' token_file: /pushover/token user_key: 'user key' ` var cfg PushoverConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) expected := "at most one of token & token_file must be configured" if err == nil { t.Fatalf("no error returned, expected:\n%v", expected) } if err.Error() != expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, err.Error()) } } func TestLoadSlackConfiguration(t *testing.T) { tests := []struct { in string expected SlackConfig }{ { in: ` color: green username: mark channel: engineering title_link: http://example.com/ image_url: https://example.com/logo.png `, expected: SlackConfig{ Color: "green", Username: "mark", Channel: "engineering", TitleLink: "http://example.com/", ImageURL: "https://example.com/logo.png", }, }, { in: ` color: green username: mark channel: alerts title_link: http://example.com/alert1 mrkdwn_in: - pretext - text `, expected: SlackConfig{ Color: "green", Username: "mark", Channel: "alerts", MrkdwnIn: []string{"pretext", "text"}, TitleLink: "http://example.com/alert1", }, }, } for _, rt := range tests { var cfg SlackConfig err := yaml.UnmarshalStrict([]byte(rt.in), &cfg) if err != nil { t.Fatalf("\nerror returned when none expected, error:\n%v", err) } if rt.expected.Color != cfg.Color { t.Errorf("\nexpected:\n%v\ngot:\n%v", rt.expected.Color, cfg.Color) } if rt.expected.Username != cfg.Username { t.Errorf("\nexpected:\n%v\ngot:\n%v", rt.expected.Username, cfg.Username) } if rt.expected.Channel != cfg.Channel { t.Errorf("\nexpected:\n%v\ngot:\n%v", rt.expected.Channel, cfg.Channel) } if rt.expected.ThumbURL != cfg.ThumbURL { t.Errorf("\nexpected:\n%v\ngot:\n%v", rt.expected.ThumbURL, cfg.ThumbURL) } if rt.expected.TitleLink != cfg.TitleLink { t.Errorf("\nexpected:\n%v\ngot:\n%v", rt.expected.TitleLink, cfg.TitleLink) } if rt.expected.ImageURL != cfg.ImageURL { t.Errorf("\nexpected:\n%v\ngot:\n%v", rt.expected.ImageURL, cfg.ImageURL) } if len(rt.expected.MrkdwnIn) != len(cfg.MrkdwnIn) { t.Errorf("\nexpected:\n%v\ngot:\n%v", rt.expected.MrkdwnIn, cfg.MrkdwnIn) } for i := range cfg.MrkdwnIn { if rt.expected.MrkdwnIn[i] != cfg.MrkdwnIn[i] { t.Errorf("\nexpected:\n%v\ngot:\n%v\nat index %v", rt.expected.MrkdwnIn[i], cfg.MrkdwnIn[i], i) } } } } func TestSlackFieldConfigValidation(t *testing.T) { tests := []struct { in string expected string }{ { in: ` fields: - title: first value: hello - title: second `, expected: "missing value in Slack field configuration", }, { in: ` fields: - title: first value: hello short: true - value: world short: true `, expected: "missing title in Slack field configuration", }, { in: ` fields: - title: first value: hello short: true - title: second value: world `, expected: "", }, } for _, rt := range tests { var cfg SlackConfig err := yaml.UnmarshalStrict([]byte(rt.in), &cfg) // Check if an error occurred when it was NOT expected to. if rt.expected == "" && err != nil { t.Fatalf("\nerror returned when none expected, error:\n%v", err) } // Check that an error occurred if one was expected to. if rt.expected != "" && err == nil { t.Fatalf("\nno error returned, expected:\n%v", rt.expected) } // Check that the error that occurred was what was expected. if err != nil && err.Error() != rt.expected { t.Errorf("\nexpected:\n%v\ngot:\n%v", rt.expected, err.Error()) } } } func TestSlackFieldConfigUnmarshaling(t *testing.T) { in := ` fields: - title: first value: hello short: true - title: second value: world - title: third value: slack field test short: false ` expected := []*SlackField{ { Title: "first", Value: "hello", Short: newBoolPointer(true), }, { Title: "second", Value: "world", Short: nil, }, { Title: "third", Value: "slack field test", Short: newBoolPointer(false), }, } var cfg SlackConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) if err != nil { t.Fatalf("\nerror returned when none expected, error:\n%v", err) } for index, field := range cfg.Fields { exp := expected[index] if field.Title != exp.Title { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.Title, field.Title) } if field.Value != exp.Value { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.Value, field.Value) } if exp.Short == nil && field.Short != nil { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.Short, *field.Short) } if exp.Short != nil && field.Short == nil { t.Errorf("\nexpected:\n%v\ngot:\n%v", *exp.Short, field.Short) } if exp.Short != nil && *exp.Short != *field.Short { t.Errorf("\nexpected:\n%v\ngot:\n%v", *exp.Short, *field.Short) } } } func TestSlackActionsValidation(t *testing.T) { in := ` actions: - type: button text: hello url: https://localhost style: danger - type: button text: hello name: something style: default confirm: title: please confirm text: are you sure? ok_text: yes dismiss_text: no ` expected := []*SlackAction{ { Type: "button", Text: "hello", URL: "https://localhost", Style: "danger", }, { Type: "button", Text: "hello", Name: "something", Style: "default", ConfirmField: &SlackConfirmationField{ Title: "please confirm", Text: "are you sure?", OkText: "yes", DismissText: "no", }, }, } var cfg SlackConfig err := yaml.UnmarshalStrict([]byte(in), &cfg) if err != nil { t.Fatalf("\nerror returned when none expected, error:\n%v", err) } for index, action := range cfg.Actions { exp := expected[index] if action.Type != exp.Type { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.Type, action.Type) } if action.Text != exp.Text { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.Text, action.Text) } if action.URL != exp.URL { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.URL, action.URL) } if action.Style != exp.Style { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.Style, action.Style) } if action.Name != exp.Name { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.Name, action.Name) } if action.Value != exp.Value { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.Value, action.Value) } if action.ConfirmField != nil && exp.ConfirmField == nil || action.ConfirmField == nil && exp.ConfirmField != nil { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.ConfirmField, action.ConfirmField) } else if action.ConfirmField != nil && exp.ConfirmField != nil { if action.ConfirmField.Title != exp.ConfirmField.Title { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.ConfirmField.Title, action.ConfirmField.Title) } if action.ConfirmField.Text != exp.ConfirmField.Text { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.ConfirmField.Text, action.ConfirmField.Text) } if action.ConfirmField.OkText != exp.ConfirmField.OkText { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.ConfirmField.OkText, action.ConfirmField.OkText) } if action.ConfirmField.DismissText != exp.ConfirmField.DismissText { t.Errorf("\nexpected:\n%v\ngot:\n%v", exp.ConfirmField.DismissText, action.ConfirmField.DismissText) } } } } func TestOpsgenieTypeMatcher(t *testing.T) { good := []string{"team", "user", "escalation", "schedule"} for _, g := range good { if !opsgenieTypeMatcher.MatchString(g) { t.Fatalf("failed to match with %s", g) } } bad := []string{"0user", "team1", "2escalation3", "sche4dule", "User", "TEAM"} for _, b := range bad { if opsgenieTypeMatcher.MatchString(b) { t.Errorf("mistakenly match with %s", b) } } } func TestOpsGenieConfiguration(t *testing.T) { for _, tc := range []struct { name string in string err bool }{ { name: "valid configuration", in: `api_key: xyz responders: - id: foo type: scheDule - name: bar type: teams - username: fred type: USER api_url: http://example.com `, }, { name: "api_key and api_key_file both defined", in: `api_key: xyz api_key_file: xyz api_url: http://example.com `, err: true, }, { name: "invalid responder type", in: `api_key: xyz responders: - id: foo type: wrong api_url: http://example.com `, err: true, }, { name: "missing responder field", in: `api_key: xyz responders: - type: schedule api_url: http://example.com `, err: true, }, { name: "valid responder type template", in: `api_key: xyz responders: - id: foo type: "{{/* valid comment */}}team" api_url: http://example.com `, }, { name: "invalid responder type template", in: `api_key: xyz responders: - id: foo type: "{{/* invalid comment }}team" api_url: http://example.com `, err: true, }, } { t.Run(tc.name, func(t *testing.T) { var cfg OpsGenieConfig err := yaml.UnmarshalStrict([]byte(tc.in), &cfg) if tc.err { if err == nil { t.Fatalf("expected error but got none") } return } if err != nil { t.Errorf("expected no error, got %v", err) } }) } } func TestSNS(t *testing.T) { for _, tc := range []struct { in string err bool }{ { // Valid configuration without sigv4. in: `target_arn: target`, err: false, }, { // Valid configuration without sigv4. in: `topic_arn: topic`, err: false, }, { // Valid configuration with sigv4. in: `phone_number: phone sigv4: access_key: abc secret_key: abc `, err: false, }, { // at most one of 'target_arn', 'topic_arn' or 'phone_number' must be provided without sigv4. in: `topic_arn: topic target_arn: target `, err: true, }, { // at most one of 'target_arn', 'topic_arn' or 'phone_number' must be provided without sigv4. in: `topic_arn: topic phone_number: phone `, err: true, }, { // one of 'target_arn', 'topic_arn' or 'phone_number' must be provided without sigv4. in: "{}", err: true, }, { // one of 'target_arn', 'topic_arn' or 'phone_number' must be provided with sigv4. in: `sigv4: access_key: abc secret_key: abc `, err: true, }, { // 'secret_key' must be provided with 'access_key'. in: `topic_arn: topic sigv4: access_key: abc `, err: true, }, { // 'access_key' must be provided with 'secret_key'. in: `topic_arn: topic sigv4: secret_key: abc `, err: true, }, } { t.Run("", func(t *testing.T) { var cfg SNSConfig err := yaml.UnmarshalStrict([]byte(tc.in), &cfg) if err != nil { if !tc.err { t.Errorf("expecting no error, got %q", err) } return } if tc.err { t.Logf("%#v", cfg) t.Error("expecting error, got none") } }) } } func TestWeChatTypeMatcher(t *testing.T) { good := []string{"text", "markdown"} for _, g := range good { if !wechatTypeMatcher.MatchString(g) { t.Fatalf("failed to match with %s", g) } } bad := []string{"TEXT", "MarkDOwn"} for _, b := range bad { if wechatTypeMatcher.MatchString(b) { t.Errorf("mistakenly match with %s", b) } } } func TestWebexConfiguration(t *testing.T) { tc := []struct { name string in string expected error }{ { name: "with no room_id - it fails", in: ` message: xyz123 `, expected: errors.New("missing room_id on webex_config"), }, { name: "with room_id and http_config.authorization set - it succeeds", in: ` room_id: 2 http_config: authorization: credentials: "xxxyyyzz" `, }, } for _, tt := range tc { t.Run(tt.name, func(t *testing.T) { var cfg WebexConfig err := yaml.UnmarshalStrict([]byte(tt.in), &cfg) require.Equal(t, tt.expected, err) }) } } func TestTelegramConfiguration(t *testing.T) { tc := []struct { name string in string expected error }{ { name: "with both bot_token & bot_token_file - it fails", in: ` bot_token: xyz bot_token_file: /file `, expected: errors.New("at most one of bot_token & bot_token_file must be configured"), }, { name: "with no bot_token & bot_token_file - it fails", in: ` bot_token: '' bot_token_file: '' `, expected: errors.New("missing bot_token or bot_token_file on telegram_config"), }, { name: "with bot_token and chat_id set - it succeeds", in: ` bot_token: xyz chat_id: 123 `, }, { name: "with bot_token, chat_id and message_thread_id set - it succeeds", in: ` bot_token: xyz chat_id: 123 message_thread_id: 456 `, }, { name: "with bot_token_file and chat_id set - it succeeds", in: ` bot_token_file: /file chat_id: 123 `, }, { name: "with no chat_id set - it fails", in: ` bot_token: xyz `, expected: errors.New("missing chat_id on telegram_config"), }, { name: "with unknown parse_mode - it fails", in: ` bot_token: xyz chat_id: 123 parse_mode: invalid `, expected: errors.New("unknown parse_mode on telegram_config, must be Markdown, MarkdownV2, HTML or empty string"), }, } for _, tt := range tc { t.Run(tt.name, func(t *testing.T) { var cfg TelegramConfig err := yaml.UnmarshalStrict([]byte(tt.in), &cfg) require.Equal(t, tt.expected, err) }) } } func newBoolPointer(b bool) *bool { return &b } prometheus-alertmanager-0.28.1+ds/config/receiver/000077500000000000000000000000001476331240200221125ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/config/receiver/receiver.go000066400000000000000000000117321476331240200242510ustar00rootroot00000000000000// Copyright 2023 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package receiver import ( "log/slog" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/promslog" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/notify/discord" "github.com/prometheus/alertmanager/notify/email" "github.com/prometheus/alertmanager/notify/jira" "github.com/prometheus/alertmanager/notify/msteams" "github.com/prometheus/alertmanager/notify/msteamsv2" "github.com/prometheus/alertmanager/notify/opsgenie" "github.com/prometheus/alertmanager/notify/pagerduty" "github.com/prometheus/alertmanager/notify/pushover" "github.com/prometheus/alertmanager/notify/rocketchat" "github.com/prometheus/alertmanager/notify/slack" "github.com/prometheus/alertmanager/notify/sns" "github.com/prometheus/alertmanager/notify/telegram" "github.com/prometheus/alertmanager/notify/victorops" "github.com/prometheus/alertmanager/notify/webex" "github.com/prometheus/alertmanager/notify/webhook" "github.com/prometheus/alertmanager/notify/wechat" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) // BuildReceiverIntegrations builds a list of integration notifiers off of a // receiver config. func BuildReceiverIntegrations(nc config.Receiver, tmpl *template.Template, logger *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) ([]notify.Integration, error) { if logger == nil { logger = promslog.NewNopLogger() } var ( errs types.MultiError integrations []notify.Integration add = func(name string, i int, rs notify.ResolvedSender, f func(l *slog.Logger) (notify.Notifier, error)) { n, err := f(logger.With("integration", name)) if err != nil { errs.Add(err) return } integrations = append(integrations, notify.NewIntegration(n, rs, name, i, nc.Name)) } ) for i, c := range nc.WebhookConfigs { add("webhook", i, c, func(l *slog.Logger) (notify.Notifier, error) { return webhook.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.EmailConfigs { add("email", i, c, func(l *slog.Logger) (notify.Notifier, error) { return email.New(c, tmpl, l), nil }) } for i, c := range nc.PagerdutyConfigs { add("pagerduty", i, c, func(l *slog.Logger) (notify.Notifier, error) { return pagerduty.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.OpsGenieConfigs { add("opsgenie", i, c, func(l *slog.Logger) (notify.Notifier, error) { return opsgenie.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.WechatConfigs { add("wechat", i, c, func(l *slog.Logger) (notify.Notifier, error) { return wechat.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.SlackConfigs { add("slack", i, c, func(l *slog.Logger) (notify.Notifier, error) { return slack.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.VictorOpsConfigs { add("victorops", i, c, func(l *slog.Logger) (notify.Notifier, error) { return victorops.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.PushoverConfigs { add("pushover", i, c, func(l *slog.Logger) (notify.Notifier, error) { return pushover.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.SNSConfigs { add("sns", i, c, func(l *slog.Logger) (notify.Notifier, error) { return sns.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.TelegramConfigs { add("telegram", i, c, func(l *slog.Logger) (notify.Notifier, error) { return telegram.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.DiscordConfigs { add("discord", i, c, func(l *slog.Logger) (notify.Notifier, error) { return discord.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.WebexConfigs { add("webex", i, c, func(l *slog.Logger) (notify.Notifier, error) { return webex.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.MSTeamsConfigs { add("msteams", i, c, func(l *slog.Logger) (notify.Notifier, error) { return msteams.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.MSTeamsV2Configs { add("msteamsv2", i, c, func(l *slog.Logger) (notify.Notifier, error) { return msteamsv2.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.JiraConfigs { add("jira", i, c, func(l *slog.Logger) (notify.Notifier, error) { return jira.New(c, tmpl, l, httpOpts...) }) } for i, c := range nc.RocketchatConfigs { add("rocketchat", i, c, func(l *slog.Logger) (notify.Notifier, error) { return rocketchat.New(c, tmpl, l, httpOpts...) }) } if errs.Len() > 0 { return nil, &errs } return integrations, nil } prometheus-alertmanager-0.28.1+ds/config/receiver/receiver_test.go000066400000000000000000000044451476331240200253130ustar00rootroot00000000000000// Copyright 2023 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package receiver import ( "testing" commoncfg "github.com/prometheus/common/config" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" ) type sendResolved bool func (s sendResolved) SendResolved() bool { return bool(s) } func TestBuildReceiverIntegrations(t *testing.T) { for _, tc := range []struct { receiver config.Receiver err bool exp []notify.Integration }{ { receiver: config.Receiver{ Name: "foo", WebhookConfigs: []*config.WebhookConfig{ { HTTPConfig: &commoncfg.HTTPClientConfig{}, }, { HTTPConfig: &commoncfg.HTTPClientConfig{}, NotifierConfig: config.NotifierConfig{ VSendResolved: true, }, }, }, }, exp: []notify.Integration{ notify.NewIntegration(nil, sendResolved(false), "webhook", 0, "foo"), notify.NewIntegration(nil, sendResolved(true), "webhook", 1, "foo"), }, }, { receiver: config.Receiver{ Name: "foo", WebhookConfigs: []*config.WebhookConfig{ { HTTPConfig: &commoncfg.HTTPClientConfig{ TLSConfig: commoncfg.TLSConfig{ CAFile: "not_existing", }, }, }, }, }, err: true, }, } { tc := tc t.Run("", func(t *testing.T) { integrations, err := BuildReceiverIntegrations(tc.receiver, nil, nil) if tc.err { require.Error(t, err) return } require.NoError(t, err) require.Len(t, integrations, len(tc.exp)) for i := range tc.exp { require.Equal(t, tc.exp[i].SendResolved(), integrations[i].SendResolved()) require.Equal(t, tc.exp[i].Name(), integrations[i].Name()) require.Equal(t, tc.exp[i].Index(), integrations[i].Index()) } }) } } prometheus-alertmanager-0.28.1+ds/config/testdata/000077500000000000000000000000001476331240200221175ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/config/testdata/conf.empty-fields.yml000066400000000000000000000007751476331240200262010ustar00rootroot00000000000000global: smtp_smarthost: 'localhost:25' smtp_from: 'alertmanager@example.org' smtp_auth_username: '' smtp_auth_password: '' smtp_hello: '' slack_api_url: 'https://slack.com/webhook' templates: - '/etc/alertmanager/template/*.tmpl' route: group_by: ['alertname', 'cluster', 'service'] receiver: team-X-mails routes: - match_re: service: ^(foo1|foo2|baz)$ receiver: team-X-mails receivers: - name: 'team-X-mails' email_configs: - to: 'team-X+alerts@example.org' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.good.yml000066400000000000000000000076161476331240200245300ustar00rootroot00000000000000global: # The smarthost and SMTP sender used for mail notifications. smtp_smarthost: 'localhost:25' smtp_from: 'alertmanager@example.org' smtp_auth_username: 'alertmanager' smtp_auth_password: "multiline\nmysecret" smtp_hello: "host.example.org" slack_api_url: "http://mysecret.example.com/" http_config: proxy_url: 'http://127.0.0.1:1025' # The directory from which notification templates are read. templates: - '/etc/alertmanager/template/*.tmpl' # The root route on which each incoming alert enters. route: # The labels by which incoming alerts are grouped together. For example, # multiple alerts coming in for cluster=A and alertname=LatencyHigh would # be batched into a single group. group_by: ['alertname', 'cluster', 'service'] # When a new group of alerts is created by an incoming alert, wait at # least 'group_wait' to send the initial notification. # This way ensures that you get multiple alerts for the same group that start # firing shortly after another are batched together on the first # notification. group_wait: 30s # When the first notification was sent, wait 'group_interval' to send a batch # of new alerts that started firing for that group. group_interval: 5m # If an alert has successfully been sent, wait 'repeat_interval' to # resend them. repeat_interval: 3h # A default receiver receiver: team-X-mails # All the above attributes are inherited by all child routes and can # overwritten on each. # The child route trees. routes: # This routes performs a regular expression match on alert labels to # catch alerts that are related to a list of services. - match_re: service: ^(foo1|foo2|baz)$ receiver: team-X-mails # The service has a sub-route for critical alerts, any alerts # that do not match, i.e. severity != critical, fall-back to the # parent node and are sent to 'team-X-mails' routes: - match: severity: critical receiver: team-X-pager - match: service: files receiver: team-Y-mails routes: - match: severity: critical receiver: team-Y-pager # This route handles all alerts coming from a database service. If there's # no team to handle it, it defaults to the DB team. - match: service: database receiver: team-DB-pager # Also group alerts by affected database. group_by: [alertname, cluster, database] routes: - match: owner2: team-X receiver: team-X-pager continue: true - match: owner: team-Y receiver: team-Y-pager # continue: true # Inhibition rules allow to mute a set of alerts given that another alert is # firing. # We use this to mute any warning-level notifications if the same alert is # already critical. inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' # Apply inhibition if the alertname is the same. equal: ['alertname', 'cluster', 'service'] receivers: - name: 'team-X-mails' email_configs: - to: 'team-X+alerts@example.org' - name: 'team-X-pager' email_configs: - to: 'team-X+alerts-critical@example.org' pagerduty_configs: - routing_key: "mysecret" - name: 'team-Y-mails' email_configs: - to: 'team-Y+alerts@example.org' - name: 'team-Y-pager' pagerduty_configs: - routing_key: "mysecret" - name: 'team-DB-pager' pagerduty_configs: - routing_key: "mysecret" - name: victorOps-receiver victorops_configs: - api_key: mysecret routing_key: Sample_route - name: opsGenie-receiver opsgenie_configs: - api_key: mysecret - name: pushover-receiver pushover_configs: - token: mysecret user_key: key - name: slack-receiver slack_configs: - channel: '#my-channel' image_url: 'http://some.img.com/img.png' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.group-by-all.yml000066400000000000000000000002111476331240200260720ustar00rootroot00000000000000route: group_by: ['...'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: team-X receivers: - name: 'team-X' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.http-config.good.yml000066400000000000000000000003451476331240200267410ustar00rootroot00000000000000global: slack_api_url: 'https://slack.com/webhook' http_config: follow_redirects: false route: receiver: team-X-slack receivers: - name: 'team-X-slack' slack_configs: - http_config: proxy_url: foo prometheus-alertmanager-0.28.1+ds/config/testdata/conf.inhibit-equal-utf8.yml000066400000000000000000000002531476331240200272050ustar00rootroot00000000000000route: receiver: test receivers: - name: test inhibit_rules: - source_matchers: - foo=bar target_matchers: - bar=baz equal: ['qux🙂', 'corge'] prometheus-alertmanager-0.28.1+ds/config/testdata/conf.inhibit-equal.yml000066400000000000000000000002471476331240200263240ustar00rootroot00000000000000route: receiver: test receivers: - name: test inhibit_rules: - source_matchers: - foo=bar target_matchers: - bar=baz equal: ['qux', 'corge'] prometheus-alertmanager-0.28.1+ds/config/testdata/conf.nil-match_re-route.yml000066400000000000000000000001731476331240200272650ustar00rootroot00000000000000route: receiver: empty routes: - match_re: invalid_label: receiver: empty receivers: - name: empty prometheus-alertmanager-0.28.1+ds/config/testdata/conf.nil-source_match_re-inhibition.yml000066400000000000000000000002421476331240200316400ustar00rootroot00000000000000route: receiver: empty receivers: - name: empty inhibit_rules: - source_match_re: invalid_source_label: target_match_re: severity: critical prometheus-alertmanager-0.28.1+ds/config/testdata/conf.nil-target_match_re-inhibition.yml000066400000000000000000000002371476331240200316320ustar00rootroot00000000000000route: receiver: empty receivers: - name: empty inhibit_rules: - source_match: severity: critical target_match_re: invalid_target_label: prometheus-alertmanager-0.28.1+ds/config/testdata/conf.opsgenie-both-file-and-apikey.yml000066400000000000000000000011261476331240200312660ustar00rootroot00000000000000global: opsgenie_api_key: asd132 opsgenie_api_key_file: '/global_file' route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: escalation-Y-opsgenie routes: - match: service: foo receiver: team-X-opsgenie receivers: - name: 'team-X-opsgenie' opsgenie_configs: - responders: - name: 'team-X' type: 'team' - name: 'escalation-Y-opsgenie' opsgenie_configs: - responders: - name: 'escalation-Y' type: 'escalation' api_key: qwe456 prometheus-alertmanager-0.28.1+ds/config/testdata/conf.opsgenie-default-apikey-file.yml000066400000000000000000000011101476331240200312070ustar00rootroot00000000000000global: opsgenie_api_key_file: '/global_file' route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: escalation-Y-opsgenie routes: - match: service: foo receiver: team-X-opsgenie receivers: - name: 'team-X-opsgenie' opsgenie_configs: - responders: - name: 'team-X' type: 'team' - name: 'escalation-Y-opsgenie' opsgenie_configs: - responders: - name: 'escalation-Y' type: 'escalation' api_key_file: /override_file prometheus-alertmanager-0.28.1+ds/config/testdata/conf.opsgenie-default-apikey-old-team.yml000066400000000000000000000005321476331240200320010ustar00rootroot00000000000000global: opsgenie_api_key: asd132 route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: escalation-Y-opsgenie routes: - match: service: foo receiver: team-X-opsgenie receivers: - name: 'team-X-opsgenie' opsgenie_configs: - teams: 'team-X' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.opsgenie-default-apikey.yml000066400000000000000000000010561476331240200303030ustar00rootroot00000000000000global: opsgenie_api_key: asd132 route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: escalation-Y-opsgenie routes: - match: service: foo receiver: team-X-opsgenie receivers: - name: 'team-X-opsgenie' opsgenie_configs: - responders: - name: 'team-X' type: 'team' - name: 'escalation-Y-opsgenie' opsgenie_configs: - responders: - name: 'escalation-Y' type: 'escalation' api_key: qwe456 prometheus-alertmanager-0.28.1+ds/config/testdata/conf.opsgenie-no-apikey.yml000066400000000000000000000005411476331240200272710ustar00rootroot00000000000000route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: team-X-opsgenie routes: - match: service: foo receiver: team-X-opsgenie receivers: - name: 'team-X-opsgenie' opsgenie_configs: - responders: - name: 'team-X' type: 'team' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.rocketchat-both-token-and-tokenfile.yml000066400000000000000000000007301476331240200325030ustar00rootroot00000000000000global: rocketchat_token_file: /global_file rocketchat_token: token123 route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: team-Y-rocketchat routes: - match: service: foo receiver: team-X-rocketchat receivers: - name: 'team-X-rocketchat' rocketchat_configs: - channel: '#team-X' - name: 'team-Y-rocketchat' rocketchat_configs: - channel: '#team-Y' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.rocketchat-both-tokenid-and-tokenidfile.yml000066400000000000000000000007331476331240200333400ustar00rootroot00000000000000global: rocketchat_token_id_file: /global_file rocketchat_token_id: id123 route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: team-Y-rocketchat routes: - match: service: foo receiver: team-X-rocketchat receivers: - name: 'team-X-rocketchat' rocketchat_configs: - channel: '#team-X' - name: 'team-Y-rocketchat' rocketchat_configs: - channel: '#team-Y' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.rocketchat-default-token-file.yml000066400000000000000000000011061476331240200313700ustar00rootroot00000000000000global: rocketchat_token_file: /global_file rocketchat_token_id_file: /etc/alertmanager/rocketchat_token_id route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: team-Y-rocketchat routes: - match: service: foo receiver: team-X-rocketchat receivers: - name: 'team-X-rocketchat' rocketchat_configs: - channel: '#team-X' - name: 'team-Y-rocketchat' rocketchat_configs: - channel: '#team-Y' token_file: /override_file token_id_file: /override_file prometheus-alertmanager-0.28.1+ds/config/testdata/conf.rocketchat-default-token.yml000066400000000000000000000007771476331240200304700ustar00rootroot00000000000000global: rocketchat_token: token123 rocketchat_token_id: id123 route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: team-Y-rocketchat routes: - match: service: foo receiver: team-X-rocketchat receivers: - name: 'team-X-rocketchat' rocketchat_configs: - channel: '#team-X' - name: 'team-Y-rocketchat' rocketchat_configs: - channel: '#team-Y' token: token456 token_id: id456 prometheus-alertmanager-0.28.1+ds/config/testdata/conf.rocketchat-no-token.yml000066400000000000000000000006621476331240200274510ustar00rootroot00000000000000global: rocketchat_token_id: id123 route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: team-Y-rocketchat routes: - match: service: foo receiver: team-X-rocketchat receivers: - name: 'team-X-rocketchat' rocketchat_configs: - channel: '#team-X' - name: 'team-Y-rocketchat' rocketchat_configs: - channel: '#team-Y' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.slack-both-file-and-url.yml000066400000000000000000000004361476331240200300750ustar00rootroot00000000000000global: slack_api_url: "http://mysecret.example.com/" slack_api_url_file: '/global_file' route: receiver: 'slack-notifications' group_by: [alertname, datacenter, app] receivers: - name: 'slack-notifications' slack_configs: - channel: '#alerts1' text: 'test' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.slack-default-api-url-file.yml000066400000000000000000000010121476331240200305630ustar00rootroot00000000000000global: slack_api_url_file: '/global_file' route: receiver: 'slack-notifications' group_by: [alertname, datacenter, app] receivers: - name: 'slack-notifications' slack_configs: # Use global - channel: '#alerts1' text: 'test' # Override global with other file - channel: '#alerts2' text: 'test' api_url_file: '/override_file' # Override global with inline URL - channel: '#alerts3' text: 'test' api_url: 'http://mysecret.example.com/' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.slack-no-api-url.yml000066400000000000000000000003001476331240200266350ustar00rootroot00000000000000route: receiver: 'slack-notifications' group_by: [alertname, datacenter, app] receivers: - name: 'slack-notifications' slack_configs: - channel: '#alerts' text: 'test' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.smtp-both-password-and-file.yml000066400000000000000000000005611476331240200310220ustar00rootroot00000000000000global: smtp_smarthost: 'localhost:25' smtp_from: 'alertmanager@example.org' smtp_auth_username: 'alertmanager' smtp_auth_password: "multiline\nmysecret" smtp_auth_password_file: "/tmp/global" smtp_hello: "host.example.org" route: receiver: 'email-notifications' receivers: - name: 'email-notifications' email_configs: - to: 'one@example.org' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.smtp-no-username-or-password.yml000066400000000000000000000003671476331240200312640ustar00rootroot00000000000000global: smtp_smarthost: 'localhost:25' smtp_from: 'alertmanager@example.org' smtp_hello: "host.example.org" route: receiver: 'email-notifications' receivers: - name: 'email-notifications' email_configs: - to: 'one@example.org' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.smtp-password-global-and-local.yml000066400000000000000000000012251476331240200314770ustar00rootroot00000000000000global: smtp_smarthost: 'localhost:25' smtp_from: 'alertmanager@example.org' smtp_auth_username: 'globaluser' smtp_auth_password_file: '/tmp/globaluserpassword' smtp_hello: "host.example.org" route: receiver: 'email-notifications' receivers: - name: 'email-notifications' email_configs: # Use global - to: 'one@example.org' # Override global with other file - to: 'two@example.org' auth_username: 'localuser1' auth_password_file: '/tmp/localuser1password' # Override global with inline password - to: 'three@example.org' auth_username: 'localuser2' auth_password: 'mysecret' prometheus-alertmanager-0.28.1+ds/config/testdata/conf.sns-invalid.yml000066400000000000000000000005201476331240200260120ustar00rootroot00000000000000route: receiver: 'sns-api-notifications' group_by: [alertname] receivers: - name: 'sns-api-notifications' sns_configs: - api_url: https://sns.us-east-2.amazonaws.com sigv4: region: us-east-2 access_key: access_key secret_key: secret_ket attributes: severity: Sev2 prometheus-alertmanager-0.28.1+ds/config/testdata/conf.sns-topic-arn.yml000066400000000000000000000006171476331240200262670ustar00rootroot00000000000000route: receiver: 'sns-api-notifications' group_by: [alertname] receivers: - name: 'sns-api-notifications' sns_configs: - api_url: https://sns.us-east-2.amazonaws.com topic_arn: arn:aws:sns:us-east-2:123456789012:My-Topic sigv4: region: us-east-2 access_key: access_key secret_key: secret_ket attributes: severity: Sev2 prometheus-alertmanager-0.28.1+ds/config/testdata/conf.victorops-both-file-and-apikey.yml000066400000000000000000000007621476331240200315120ustar00rootroot00000000000000global: victorops_api_key: asd132 victorops_api_key_file: '/global_file' route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: team-Y-victorops routes: - match: service: foo receiver: team-X-victorops receivers: - name: 'team-X-victorops' victorops_configs: - routing_key: 'team-X' - name: 'team-Y-victorops' victorops_configs: - routing_key: 'team-Y' api_key: qwe456 prometheus-alertmanager-0.28.1+ds/config/testdata/conf.victorops-default-apikey-file.yml000066400000000000000000000007431476331240200314410ustar00rootroot00000000000000global: victorops_api_key_file: '/global_file' route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: team-Y-victorops routes: - match: service: foo receiver: team-X-victorops receivers: - name: 'team-X-victorops' victorops_configs: - routing_key: 'team-X' - name: 'team-Y-victorops' victorops_configs: - routing_key: 'team-Y' api_key_file: /override_file prometheus-alertmanager-0.28.1+ds/config/testdata/conf.victorops-default-apikey.yml000066400000000000000000000007111476331240200305170ustar00rootroot00000000000000global: victorops_api_key: asd132 route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: team-Y-victorops routes: - match: service: foo receiver: team-X-victorops receivers: - name: 'team-X-victorops' victorops_configs: - routing_key: 'team-X' - name: 'team-Y-victorops' victorops_configs: - routing_key: 'team-Y' api_key: qwe456 prometheus-alertmanager-0.28.1+ds/config/testdata/conf.victorops-no-apikey.yml000066400000000000000000000004731476331240200275140ustar00rootroot00000000000000route: group_by: ['alertname', 'cluster', 'service'] group_wait: 30s group_interval: 5m repeat_interval: 3h receiver: team-X-victorops routes: - match: service: foo receiver: team-X-victorops receivers: - name: 'team-X-victorops' victorops_configs: - routing_key: 'team-X' prometheus-alertmanager-0.28.1+ds/dispatch/000077500000000000000000000000001476331240200206405ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/dispatch/dispatch.go000066400000000000000000000342311476331240200227710ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package dispatch import ( "context" "errors" "fmt" "log/slog" "sort" "sync" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/provider" "github.com/prometheus/alertmanager/store" "github.com/prometheus/alertmanager/types" ) // DispatcherMetrics represents metrics associated to a dispatcher. type DispatcherMetrics struct { aggrGroups prometheus.Gauge processingDuration prometheus.Summary aggrGroupLimitReached prometheus.Counter } // NewDispatcherMetrics returns a new registered DispatchMetrics. func NewDispatcherMetrics(registerLimitMetrics bool, r prometheus.Registerer) *DispatcherMetrics { m := DispatcherMetrics{ aggrGroups: prometheus.NewGauge( prometheus.GaugeOpts{ Name: "alertmanager_dispatcher_aggregation_groups", Help: "Number of active aggregation groups", }, ), processingDuration: prometheus.NewSummary( prometheus.SummaryOpts{ Name: "alertmanager_dispatcher_alert_processing_duration_seconds", Help: "Summary of latencies for the processing of alerts.", }, ), aggrGroupLimitReached: prometheus.NewCounter( prometheus.CounterOpts{ Name: "alertmanager_dispatcher_aggregation_group_limit_reached_total", Help: "Number of times when dispatcher failed to create new aggregation group due to limit.", }, ), } if r != nil { r.MustRegister(m.aggrGroups, m.processingDuration) if registerLimitMetrics { r.MustRegister(m.aggrGroupLimitReached) } } return &m } // Dispatcher sorts incoming alerts into aggregation groups and // assigns the correct notifiers to each. type Dispatcher struct { route *Route alerts provider.Alerts stage notify.Stage marker types.GroupMarker metrics *DispatcherMetrics limits Limits timeout func(time.Duration) time.Duration mtx sync.RWMutex aggrGroupsPerRoute map[*Route]map[model.Fingerprint]*aggrGroup aggrGroupsNum int done chan struct{} ctx context.Context cancel func() logger *slog.Logger } // Limits describes limits used by Dispatcher. type Limits interface { // MaxNumberOfAggregationGroups returns max number of aggregation groups that dispatcher can have. // 0 or negative value = unlimited. // If dispatcher hits this limit, it will not create additional groups, but will log an error instead. MaxNumberOfAggregationGroups() int } // NewDispatcher returns a new Dispatcher. func NewDispatcher( ap provider.Alerts, r *Route, s notify.Stage, mk types.GroupMarker, to func(time.Duration) time.Duration, lim Limits, l *slog.Logger, m *DispatcherMetrics, ) *Dispatcher { if lim == nil { lim = nilLimits{} } disp := &Dispatcher{ alerts: ap, stage: s, route: r, marker: mk, timeout: to, logger: l.With("component", "dispatcher"), metrics: m, limits: lim, } return disp } // Run starts dispatching alerts incoming via the updates channel. func (d *Dispatcher) Run() { d.done = make(chan struct{}) d.mtx.Lock() d.aggrGroupsPerRoute = map[*Route]map[model.Fingerprint]*aggrGroup{} d.aggrGroupsNum = 0 d.metrics.aggrGroups.Set(0) d.ctx, d.cancel = context.WithCancel(context.Background()) d.mtx.Unlock() d.run(d.alerts.Subscribe()) close(d.done) } func (d *Dispatcher) run(it provider.AlertIterator) { maintenance := time.NewTicker(30 * time.Second) defer maintenance.Stop() defer it.Close() for { select { case alert, ok := <-it.Next(): if !ok { // Iterator exhausted for some reason. if err := it.Err(); err != nil { d.logger.Error("Error on alert update", "err", err) } return } d.logger.Debug("Received alert", "alert", alert) // Log errors but keep trying. if err := it.Err(); err != nil { d.logger.Error("Error on alert update", "err", err) continue } now := time.Now() for _, r := range d.route.Match(alert.Labels) { d.processAlert(alert, r) } d.metrics.processingDuration.Observe(time.Since(now).Seconds()) case <-maintenance.C: d.doMaintenance() case <-d.ctx.Done(): return } } } func (d *Dispatcher) doMaintenance() { d.mtx.Lock() defer d.mtx.Unlock() for _, groups := range d.aggrGroupsPerRoute { for _, ag := range groups { if ag.empty() { ag.stop() d.marker.DeleteByGroupKey(ag.routeID, ag.GroupKey()) delete(groups, ag.fingerprint()) d.aggrGroupsNum-- d.metrics.aggrGroups.Dec() } } } } // AlertGroup represents how alerts exist within an aggrGroup. type AlertGroup struct { Alerts types.AlertSlice Labels model.LabelSet Receiver string GroupKey string RouteID string } type AlertGroups []*AlertGroup func (ag AlertGroups) Swap(i, j int) { ag[i], ag[j] = ag[j], ag[i] } func (ag AlertGroups) Less(i, j int) bool { if ag[i].Labels.Equal(ag[j].Labels) { return ag[i].Receiver < ag[j].Receiver } return ag[i].Labels.Before(ag[j].Labels) } func (ag AlertGroups) Len() int { return len(ag) } // Groups returns a slice of AlertGroups from the dispatcher's internal state. func (d *Dispatcher) Groups(routeFilter func(*Route) bool, alertFilter func(*types.Alert, time.Time) bool) (AlertGroups, map[model.Fingerprint][]string) { groups := AlertGroups{} d.mtx.RLock() defer d.mtx.RUnlock() // Keep a list of receivers for an alert to prevent checking each alert // again against all routes. The alert has already matched against this // route on ingestion. receivers := map[model.Fingerprint][]string{} now := time.Now() for route, ags := range d.aggrGroupsPerRoute { if !routeFilter(route) { continue } for _, ag := range ags { receiver := route.RouteOpts.Receiver alertGroup := &AlertGroup{ Labels: ag.labels, Receiver: receiver, GroupKey: ag.GroupKey(), RouteID: ag.routeID, } alerts := ag.alerts.List() filteredAlerts := make([]*types.Alert, 0, len(alerts)) for _, a := range alerts { if !alertFilter(a, now) { continue } fp := a.Fingerprint() if r, ok := receivers[fp]; ok { // Receivers slice already exists. Add // the current receiver to the slice. receivers[fp] = append(r, receiver) } else { // First time we've seen this alert fingerprint. // Initialize a new receivers slice. receivers[fp] = []string{receiver} } filteredAlerts = append(filteredAlerts, a) } if len(filteredAlerts) == 0 { continue } alertGroup.Alerts = filteredAlerts groups = append(groups, alertGroup) } } sort.Sort(groups) for i := range groups { sort.Sort(groups[i].Alerts) } for i := range receivers { sort.Strings(receivers[i]) } return groups, receivers } // Stop the dispatcher. func (d *Dispatcher) Stop() { if d == nil { return } d.mtx.Lock() if d.cancel == nil { d.mtx.Unlock() return } d.cancel() d.cancel = nil d.mtx.Unlock() <-d.done } // notifyFunc is a function that performs notification for the alert // with the given fingerprint. It aborts on context cancelation. // Returns false iff notifying failed. type notifyFunc func(context.Context, ...*types.Alert) bool // processAlert determines in which aggregation group the alert falls // and inserts it. func (d *Dispatcher) processAlert(alert *types.Alert, route *Route) { groupLabels := getGroupLabels(alert, route) fp := groupLabels.Fingerprint() d.mtx.Lock() defer d.mtx.Unlock() routeGroups, ok := d.aggrGroupsPerRoute[route] if !ok { routeGroups = map[model.Fingerprint]*aggrGroup{} d.aggrGroupsPerRoute[route] = routeGroups } ag, ok := routeGroups[fp] if ok { ag.insert(alert) return } // If the group does not exist, create it. But check the limit first. if limit := d.limits.MaxNumberOfAggregationGroups(); limit > 0 && d.aggrGroupsNum >= limit { d.metrics.aggrGroupLimitReached.Inc() d.logger.Error("Too many aggregation groups, cannot create new group for alert", "groups", d.aggrGroupsNum, "limit", limit, "alert", alert.Name()) return } ag = newAggrGroup(d.ctx, groupLabels, route, d.timeout, d.logger) routeGroups[fp] = ag d.aggrGroupsNum++ d.metrics.aggrGroups.Inc() // Insert the 1st alert in the group before starting the group's run() // function, to make sure that when the run() will be executed the 1st // alert is already there. ag.insert(alert) go ag.run(func(ctx context.Context, alerts ...*types.Alert) bool { _, _, err := d.stage.Exec(ctx, d.logger, alerts...) if err != nil { logger := d.logger.With("num_alerts", len(alerts), "err", err) if errors.Is(ctx.Err(), context.Canceled) { // It is expected for the context to be canceled on // configuration reload or shutdown. In this case, the // message should only be logged at the debug level. logger.Debug("Notify for alerts failed") } else { logger.Error("Notify for alerts failed") } } return err == nil }) } func getGroupLabels(alert *types.Alert, route *Route) model.LabelSet { groupLabels := model.LabelSet{} for ln, lv := range alert.Labels { if _, ok := route.RouteOpts.GroupBy[ln]; ok || route.RouteOpts.GroupByAll { groupLabels[ln] = lv } } return groupLabels } // aggrGroup aggregates alert fingerprints into groups to which a // common set of routing options applies. // It emits notifications in the specified intervals. type aggrGroup struct { labels model.LabelSet opts *RouteOpts logger *slog.Logger routeID string routeKey string alerts *store.Alerts ctx context.Context cancel func() done chan struct{} next *time.Timer timeout func(time.Duration) time.Duration mtx sync.RWMutex hasFlushed bool } // newAggrGroup returns a new aggregation group. func newAggrGroup(ctx context.Context, labels model.LabelSet, r *Route, to func(time.Duration) time.Duration, logger *slog.Logger) *aggrGroup { if to == nil { to = func(d time.Duration) time.Duration { return d } } ag := &aggrGroup{ labels: labels, routeID: r.ID(), routeKey: r.Key(), opts: &r.RouteOpts, timeout: to, alerts: store.NewAlerts(), done: make(chan struct{}), } ag.ctx, ag.cancel = context.WithCancel(ctx) ag.logger = logger.With("aggrGroup", ag) // Set an initial one-time wait before flushing // the first batch of notifications. ag.next = time.NewTimer(ag.opts.GroupWait) return ag } func (ag *aggrGroup) fingerprint() model.Fingerprint { return ag.labels.Fingerprint() } func (ag *aggrGroup) GroupKey() string { return fmt.Sprintf("%s:%s", ag.routeKey, ag.labels) } func (ag *aggrGroup) String() string { return ag.GroupKey() } func (ag *aggrGroup) run(nf notifyFunc) { defer close(ag.done) defer ag.next.Stop() for { select { case now := <-ag.next.C: // Give the notifications time until the next flush to // finish before terminating them. ctx, cancel := context.WithTimeout(ag.ctx, ag.timeout(ag.opts.GroupInterval)) // The now time we retrieve from the ticker is the only reliable // point of time reference for the subsequent notification pipeline. // Calculating the current time directly is prone to flaky behavior, // which usually only becomes apparent in tests. ctx = notify.WithNow(ctx, now) // Populate context with information needed along the pipeline. ctx = notify.WithGroupKey(ctx, ag.GroupKey()) ctx = notify.WithGroupLabels(ctx, ag.labels) ctx = notify.WithReceiverName(ctx, ag.opts.Receiver) ctx = notify.WithRepeatInterval(ctx, ag.opts.RepeatInterval) ctx = notify.WithMuteTimeIntervals(ctx, ag.opts.MuteTimeIntervals) ctx = notify.WithActiveTimeIntervals(ctx, ag.opts.ActiveTimeIntervals) ctx = notify.WithRouteID(ctx, ag.routeID) // Wait the configured interval before calling flush again. ag.mtx.Lock() ag.next.Reset(ag.opts.GroupInterval) ag.hasFlushed = true ag.mtx.Unlock() ag.flush(func(alerts ...*types.Alert) bool { return nf(ctx, alerts...) }) cancel() case <-ag.ctx.Done(): return } } } func (ag *aggrGroup) stop() { // Calling cancel will terminate all in-process notifications // and the run() loop. ag.cancel() <-ag.done } // insert inserts the alert into the aggregation group. func (ag *aggrGroup) insert(alert *types.Alert) { if err := ag.alerts.Set(alert); err != nil { ag.logger.Error("error on set alert", "err", err) } // Immediately trigger a flush if the wait duration for this // alert is already over. ag.mtx.Lock() defer ag.mtx.Unlock() if !ag.hasFlushed && alert.StartsAt.Add(ag.opts.GroupWait).Before(time.Now()) { ag.next.Reset(0) } } func (ag *aggrGroup) empty() bool { return ag.alerts.Empty() } // flush sends notifications for all new alerts. func (ag *aggrGroup) flush(notify func(...*types.Alert) bool) { if ag.empty() { return } var ( alerts = ag.alerts.List() alertsSlice = make(types.AlertSlice, 0, len(alerts)) resolvedSlice = make(types.AlertSlice, 0, len(alerts)) now = time.Now() ) for _, alert := range alerts { a := *alert // Ensure that alerts don't resolve as time move forwards. if a.ResolvedAt(now) { resolvedSlice = append(resolvedSlice, &a) } else { a.EndsAt = time.Time{} } alertsSlice = append(alertsSlice, &a) } sort.Stable(alertsSlice) ag.logger.Debug("flushing", "alerts", fmt.Sprintf("%v", alertsSlice)) if notify(alertsSlice...) { // Delete all resolved alerts as we just sent a notification for them, // and we don't want to send another one. However, we need to make sure // that each resolved alert has not fired again during the flush as then // we would delete an active alert thinking it was resolved. if err := ag.alerts.DeleteIfNotModified(resolvedSlice); err != nil { ag.logger.Error("error on delete alerts", "err", err) } } } type nilLimits struct{} func (n nilLimits) MaxNumberOfAggregationGroups() int { return 0 } prometheus-alertmanager-0.28.1+ds/dispatch/dispatch_test.go000066400000000000000000000527241476331240200240370ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package dispatch import ( "context" "fmt" "log/slog" "reflect" "sort" "sync" "testing" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/testutil" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/provider/mem" "github.com/prometheus/alertmanager/types" ) func TestAggrGroup(t *testing.T) { lset := model.LabelSet{ "a": "v1", "b": "v2", } opts := &RouteOpts{ Receiver: "n1", GroupBy: map[model.LabelName]struct{}{ "a": {}, "b": {}, }, GroupWait: 1 * time.Second, GroupInterval: 300 * time.Millisecond, RepeatInterval: 1 * time.Hour, } route := &Route{ RouteOpts: *opts, } var ( a1 = &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "a": "v1", "b": "v2", "c": "v3", }, StartsAt: time.Now().Add(time.Minute), EndsAt: time.Now().Add(time.Hour), }, UpdatedAt: time.Now(), } a2 = &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "a": "v1", "b": "v2", "c": "v4", }, StartsAt: time.Now().Add(-time.Hour), EndsAt: time.Now().Add(2 * time.Hour), }, UpdatedAt: time.Now(), } a3 = &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "a": "v1", "b": "v2", "c": "v5", }, StartsAt: time.Now().Add(time.Minute), EndsAt: time.Now().Add(5 * time.Minute), }, UpdatedAt: time.Now(), } ) var ( last = time.Now() current = time.Now() lastCurMtx = &sync.Mutex{} alertsCh = make(chan types.AlertSlice) ) ntfy := func(ctx context.Context, alerts ...*types.Alert) bool { // Validate that the context is properly populated. if _, ok := notify.Now(ctx); !ok { t.Errorf("now missing") } if _, ok := notify.GroupKey(ctx); !ok { t.Errorf("group key missing") } if lbls, ok := notify.GroupLabels(ctx); !ok || !reflect.DeepEqual(lbls, lset) { t.Errorf("wrong group labels: %q", lbls) } if rcv, ok := notify.ReceiverName(ctx); !ok || rcv != opts.Receiver { t.Errorf("wrong receiver: %q", rcv) } if ri, ok := notify.RepeatInterval(ctx); !ok || ri != opts.RepeatInterval { t.Errorf("wrong repeat interval: %q", ri) } lastCurMtx.Lock() last = current // Subtract a millisecond to allow for races. current = time.Now().Add(-time.Millisecond) lastCurMtx.Unlock() alertsCh <- types.AlertSlice(alerts) return true } removeEndsAt := func(as types.AlertSlice) types.AlertSlice { for i, a := range as { ac := *a ac.EndsAt = time.Time{} as[i] = &ac } return as } // Test regular situation where we wait for group_wait to send out alerts. ag := newAggrGroup(context.Background(), lset, route, nil, promslog.NewNopLogger()) go ag.run(ntfy) ag.insert(a1) select { case <-time.After(2 * opts.GroupWait): t.Fatalf("expected initial batch after group_wait") case batch := <-alertsCh: lastCurMtx.Lock() s := time.Since(last) lastCurMtx.Unlock() if s < opts.GroupWait { t.Fatalf("received batch too early after %v", s) } exp := removeEndsAt(types.AlertSlice{a1}) sort.Sort(batch) if !reflect.DeepEqual(batch, exp) { t.Fatalf("expected alerts %v but got %v", exp, batch) } } for i := 0; i < 3; i++ { // New alert should come in after group interval. ag.insert(a3) select { case <-time.After(2 * opts.GroupInterval): t.Fatalf("expected new batch after group interval but received none") case batch := <-alertsCh: lastCurMtx.Lock() s := time.Since(last) lastCurMtx.Unlock() if s < opts.GroupInterval { t.Fatalf("received batch too early after %v", s) } exp := removeEndsAt(types.AlertSlice{a1, a3}) sort.Sort(batch) if !reflect.DeepEqual(batch, exp) { t.Fatalf("expected alerts %v but got %v", exp, batch) } } } ag.stop() // Add an alert that started more than group_interval in the past. We expect // immediate flushing. // Finally, set all alerts to be resolved. After successful notify the aggregation group // should empty itself. ag = newAggrGroup(context.Background(), lset, route, nil, promslog.NewNopLogger()) go ag.run(ntfy) ag.insert(a1) ag.insert(a2) // a2 lies way in the past so the initial group_wait should be skipped. select { case <-time.After(opts.GroupWait / 2): t.Fatalf("expected immediate alert but received none") case batch := <-alertsCh: exp := removeEndsAt(types.AlertSlice{a1, a2}) sort.Sort(batch) if !reflect.DeepEqual(batch, exp) { t.Fatalf("expected alerts %v but got %v", exp, batch) } } for i := 0; i < 3; i++ { // New alert should come in after group interval. ag.insert(a3) select { case <-time.After(2 * opts.GroupInterval): t.Fatalf("expected new batch after group interval but received none") case batch := <-alertsCh: lastCurMtx.Lock() s := time.Since(last) lastCurMtx.Unlock() if s < opts.GroupInterval { t.Fatalf("received batch too early after %v", s) } exp := removeEndsAt(types.AlertSlice{a1, a2, a3}) sort.Sort(batch) if !reflect.DeepEqual(batch, exp) { t.Fatalf("expected alerts %v but got %v", exp, batch) } } } // Resolve an alert, and it should be removed after the next batch was sent. a1r := *a1 a1r.EndsAt = time.Now() ag.insert(&a1r) exp := append(types.AlertSlice{&a1r}, removeEndsAt(types.AlertSlice{a2, a3})...) select { case <-time.After(2 * opts.GroupInterval): t.Fatalf("expected new batch after group interval but received none") case batch := <-alertsCh: lastCurMtx.Lock() s := time.Since(last) lastCurMtx.Unlock() if s < opts.GroupInterval { t.Fatalf("received batch too early after %v", s) } sort.Sort(batch) if !reflect.DeepEqual(batch, exp) { t.Fatalf("expected alerts %v but got %v", exp, batch) } } // Resolve all remaining alerts, they should be removed after the next batch was sent. // Do not add a1r as it should have been deleted following the previous batch. a2r, a3r := *a2, *a3 resolved := types.AlertSlice{&a2r, &a3r} for _, a := range resolved { a.EndsAt = time.Now() ag.insert(a) } select { case <-time.After(2 * opts.GroupInterval): t.Fatalf("expected new batch after group interval but received none") case batch := <-alertsCh: lastCurMtx.Lock() s := time.Since(last) lastCurMtx.Unlock() if s < opts.GroupInterval { t.Fatalf("received batch too early after %v", s) } sort.Sort(batch) if !reflect.DeepEqual(batch, resolved) { t.Fatalf("expected alerts %v but got %v", resolved, batch) } if !ag.empty() { t.Fatalf("Expected aggregation group to be empty after resolving alerts: %v", ag) } } ag.stop() } func TestGroupLabels(t *testing.T) { a := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "a": "v1", "b": "v2", "c": "v3", }, }, } route := &Route{ RouteOpts: RouteOpts{ GroupBy: map[model.LabelName]struct{}{ "a": {}, "b": {}, }, GroupByAll: false, }, } expLs := model.LabelSet{ "a": "v1", "b": "v2", } ls := getGroupLabels(a, route) if !reflect.DeepEqual(ls, expLs) { t.Fatalf("expected labels are %v, but got %v", expLs, ls) } } func TestGroupByAllLabels(t *testing.T) { a := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "a": "v1", "b": "v2", "c": "v3", }, }, } route := &Route{ RouteOpts: RouteOpts{ GroupBy: map[model.LabelName]struct{}{}, GroupByAll: true, }, } expLs := model.LabelSet{ "a": "v1", "b": "v2", "c": "v3", } ls := getGroupLabels(a, route) if !reflect.DeepEqual(ls, expLs) { t.Fatalf("expected labels are %v, but got %v", expLs, ls) } } func TestGroups(t *testing.T) { confData := `receivers: - name: 'kafka' - name: 'prod' - name: 'testing' route: group_by: ['alertname'] group_wait: 10ms group_interval: 10ms receiver: 'prod' routes: - match: env: 'testing' receiver: 'testing' group_by: ['alertname', 'service'] - match: env: 'prod' receiver: 'prod' group_by: ['alertname', 'service', 'cluster'] continue: true - match: kafka: 'yes' receiver: 'kafka' group_by: ['alertname', 'service', 'cluster']` conf, err := config.Load(confData) if err != nil { t.Fatal(err) } logger := promslog.NewNopLogger() route := NewRoute(conf.Route, nil) marker := types.NewMarker(prometheus.NewRegistry()) alerts, err := mem.NewAlerts(context.Background(), marker, time.Hour, nil, logger, nil) if err != nil { t.Fatal(err) } defer alerts.Close() timeout := func(d time.Duration) time.Duration { return time.Duration(0) } recorder := &recordStage{alerts: make(map[string]map[model.Fingerprint]*types.Alert)} dispatcher := NewDispatcher(alerts, route, recorder, marker, timeout, nil, logger, NewDispatcherMetrics(false, prometheus.NewRegistry())) go dispatcher.Run() defer dispatcher.Stop() // Create alerts. the dispatcher will automatically create the groups. inputAlerts := []*types.Alert{ // Matches the parent route. newAlert(model.LabelSet{"alertname": "OtherAlert", "cluster": "cc", "service": "dd"}), // Matches the first sub-route. newAlert(model.LabelSet{"env": "testing", "alertname": "TestingAlert", "service": "api", "instance": "inst1"}), // Matches the second sub-route. newAlert(model.LabelSet{"env": "prod", "alertname": "HighErrorRate", "cluster": "aa", "service": "api", "instance": "inst1"}), newAlert(model.LabelSet{"env": "prod", "alertname": "HighErrorRate", "cluster": "aa", "service": "api", "instance": "inst2"}), // Matches the second sub-route. newAlert(model.LabelSet{"env": "prod", "alertname": "HighErrorRate", "cluster": "bb", "service": "api", "instance": "inst1"}), // Matches the second and third sub-route. newAlert(model.LabelSet{"env": "prod", "alertname": "HighLatency", "cluster": "bb", "service": "db", "kafka": "yes", "instance": "inst3"}), } alerts.Put(inputAlerts...) // Let alerts get processed. for i := 0; len(recorder.Alerts()) != 7 && i < 10; i++ { time.Sleep(200 * time.Millisecond) } require.Len(t, recorder.Alerts(), 7) alertGroups, receivers := dispatcher.Groups( func(*Route) bool { return true }, func(*types.Alert, time.Time) bool { return true }, ) require.Equal(t, AlertGroups{ &AlertGroup{ Alerts: []*types.Alert{inputAlerts[0]}, Labels: model.LabelSet{ "alertname": "OtherAlert", }, Receiver: "prod", GroupKey: "{}:{alertname=\"OtherAlert\"}", RouteID: "{}", }, &AlertGroup{ Alerts: []*types.Alert{inputAlerts[1]}, Labels: model.LabelSet{ "alertname": "TestingAlert", "service": "api", }, Receiver: "testing", GroupKey: "{}/{env=\"testing\"}:{alertname=\"TestingAlert\", service=\"api\"}", RouteID: "{}/{env=\"testing\"}/0", }, &AlertGroup{ Alerts: []*types.Alert{inputAlerts[2], inputAlerts[3]}, Labels: model.LabelSet{ "alertname": "HighErrorRate", "service": "api", "cluster": "aa", }, Receiver: "prod", GroupKey: "{}/{env=\"prod\"}:{alertname=\"HighErrorRate\", cluster=\"aa\", service=\"api\"}", RouteID: "{}/{env=\"prod\"}/1", }, &AlertGroup{ Alerts: []*types.Alert{inputAlerts[4]}, Labels: model.LabelSet{ "alertname": "HighErrorRate", "service": "api", "cluster": "bb", }, Receiver: "prod", GroupKey: "{}/{env=\"prod\"}:{alertname=\"HighErrorRate\", cluster=\"bb\", service=\"api\"}", RouteID: "{}/{env=\"prod\"}/1", }, &AlertGroup{ Alerts: []*types.Alert{inputAlerts[5]}, Labels: model.LabelSet{ "alertname": "HighLatency", "service": "db", "cluster": "bb", }, Receiver: "kafka", GroupKey: "{}/{kafka=\"yes\"}:{alertname=\"HighLatency\", cluster=\"bb\", service=\"db\"}", RouteID: "{}/{kafka=\"yes\"}/2", }, &AlertGroup{ Alerts: []*types.Alert{inputAlerts[5]}, Labels: model.LabelSet{ "alertname": "HighLatency", "service": "db", "cluster": "bb", }, Receiver: "prod", GroupKey: "{}/{env=\"prod\"}:{alertname=\"HighLatency\", cluster=\"bb\", service=\"db\"}", RouteID: "{}/{env=\"prod\"}/1", }, }, alertGroups) require.Equal(t, map[model.Fingerprint][]string{ inputAlerts[0].Fingerprint(): {"prod"}, inputAlerts[1].Fingerprint(): {"testing"}, inputAlerts[2].Fingerprint(): {"prod"}, inputAlerts[3].Fingerprint(): {"prod"}, inputAlerts[4].Fingerprint(): {"prod"}, inputAlerts[5].Fingerprint(): {"kafka", "prod"}, }, receivers) } func TestGroupsWithLimits(t *testing.T) { confData := `receivers: - name: 'kafka' - name: 'prod' - name: 'testing' route: group_by: ['alertname'] group_wait: 10ms group_interval: 10ms receiver: 'prod' routes: - match: env: 'testing' receiver: 'testing' group_by: ['alertname', 'service'] - match: env: 'prod' receiver: 'prod' group_by: ['alertname', 'service', 'cluster'] continue: true - match: kafka: 'yes' receiver: 'kafka' group_by: ['alertname', 'service', 'cluster']` conf, err := config.Load(confData) if err != nil { t.Fatal(err) } logger := promslog.NewNopLogger() route := NewRoute(conf.Route, nil) marker := types.NewMarker(prometheus.NewRegistry()) alerts, err := mem.NewAlerts(context.Background(), marker, time.Hour, nil, logger, nil) if err != nil { t.Fatal(err) } defer alerts.Close() timeout := func(d time.Duration) time.Duration { return time.Duration(0) } recorder := &recordStage{alerts: make(map[string]map[model.Fingerprint]*types.Alert)} lim := limits{groups: 6} m := NewDispatcherMetrics(true, prometheus.NewRegistry()) dispatcher := NewDispatcher(alerts, route, recorder, marker, timeout, lim, logger, m) go dispatcher.Run() defer dispatcher.Stop() // Create alerts. the dispatcher will automatically create the groups. inputAlerts := []*types.Alert{ // Matches the parent route. newAlert(model.LabelSet{"alertname": "OtherAlert", "cluster": "cc", "service": "dd"}), // Matches the first sub-route. newAlert(model.LabelSet{"env": "testing", "alertname": "TestingAlert", "service": "api", "instance": "inst1"}), // Matches the second sub-route. newAlert(model.LabelSet{"env": "prod", "alertname": "HighErrorRate", "cluster": "aa", "service": "api", "instance": "inst1"}), newAlert(model.LabelSet{"env": "prod", "alertname": "HighErrorRate", "cluster": "aa", "service": "api", "instance": "inst2"}), // Matches the second sub-route. newAlert(model.LabelSet{"env": "prod", "alertname": "HighErrorRate", "cluster": "bb", "service": "api", "instance": "inst1"}), // Matches the second and third sub-route. newAlert(model.LabelSet{"env": "prod", "alertname": "HighLatency", "cluster": "bb", "service": "db", "kafka": "yes", "instance": "inst3"}), } err = alerts.Put(inputAlerts...) if err != nil { t.Fatal(err) } // Let alerts get processed. for i := 0; len(recorder.Alerts()) != 7 && i < 10; i++ { time.Sleep(200 * time.Millisecond) } require.Len(t, recorder.Alerts(), 7) routeFilter := func(*Route) bool { return true } alertFilter := func(*types.Alert, time.Time) bool { return true } alertGroups, _ := dispatcher.Groups(routeFilter, alertFilter) require.Len(t, alertGroups, 6) require.Equal(t, 0.0, testutil.ToFloat64(m.aggrGroupLimitReached)) // Try to store new alert. This time, we will hit limit for number of groups. err = alerts.Put(newAlert(model.LabelSet{"env": "prod", "alertname": "NewAlert", "cluster": "new-cluster", "service": "db"})) if err != nil { t.Fatal(err) } // Let alert get processed. for i := 0; testutil.ToFloat64(m.aggrGroupLimitReached) == 0 && i < 10; i++ { time.Sleep(200 * time.Millisecond) } require.Equal(t, 1.0, testutil.ToFloat64(m.aggrGroupLimitReached)) // Verify there are still only 6 groups. alertGroups, _ = dispatcher.Groups(routeFilter, alertFilter) require.Len(t, alertGroups, 6) } type recordStage struct { mtx sync.RWMutex alerts map[string]map[model.Fingerprint]*types.Alert } func (r *recordStage) Alerts() []*types.Alert { r.mtx.RLock() defer r.mtx.RUnlock() alerts := make([]*types.Alert, 0) for k := range r.alerts { for _, a := range r.alerts[k] { alerts = append(alerts, a) } } return alerts } func (r *recordStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { r.mtx.Lock() defer r.mtx.Unlock() gk, ok := notify.GroupKey(ctx) if !ok { panic("GroupKey not present!") } if _, ok := r.alerts[gk]; !ok { r.alerts[gk] = make(map[model.Fingerprint]*types.Alert) } for _, a := range alerts { r.alerts[gk][a.Fingerprint()] = a } return ctx, nil, nil } var ( // Set the start time in the past to trigger a flush immediately. t0 = time.Now().Add(-time.Minute) // Set the end time in the future to avoid deleting the alert. t1 = t0.Add(2 * time.Minute) ) func newAlert(labels model.LabelSet) *types.Alert { return &types.Alert{ Alert: model.Alert{ Labels: labels, Annotations: model.LabelSet{"foo": "bar"}, StartsAt: t0, EndsAt: t1, GeneratorURL: "http://example.com/prometheus", }, UpdatedAt: t0, Timeout: false, } } func TestDispatcherRace(t *testing.T) { logger := promslog.NewNopLogger() marker := types.NewMarker(prometheus.NewRegistry()) alerts, err := mem.NewAlerts(context.Background(), marker, time.Hour, nil, logger, nil) if err != nil { t.Fatal(err) } defer alerts.Close() timeout := func(d time.Duration) time.Duration { return time.Duration(0) } dispatcher := NewDispatcher(alerts, nil, nil, marker, timeout, nil, logger, NewDispatcherMetrics(false, prometheus.NewRegistry())) go dispatcher.Run() dispatcher.Stop() } func TestDispatcherRaceOnFirstAlertNotDeliveredWhenGroupWaitIsZero(t *testing.T) { const numAlerts = 5000 logger := promslog.NewNopLogger() marker := types.NewMarker(prometheus.NewRegistry()) alerts, err := mem.NewAlerts(context.Background(), marker, time.Hour, nil, logger, nil) if err != nil { t.Fatal(err) } defer alerts.Close() route := &Route{ RouteOpts: RouteOpts{ Receiver: "default", GroupBy: map[model.LabelName]struct{}{"alertname": {}}, GroupWait: 0, GroupInterval: 1 * time.Hour, // Should never hit in this test. RepeatInterval: 1 * time.Hour, // Should never hit in this test. }, } timeout := func(d time.Duration) time.Duration { return d } recorder := &recordStage{alerts: make(map[string]map[model.Fingerprint]*types.Alert)} dispatcher := NewDispatcher(alerts, route, recorder, marker, timeout, nil, logger, NewDispatcherMetrics(false, prometheus.NewRegistry())) go dispatcher.Run() defer dispatcher.Stop() // Push all alerts. for i := 0; i < numAlerts; i++ { alert := newAlert(model.LabelSet{"alertname": model.LabelValue(fmt.Sprintf("Alert_%d", i))}) require.NoError(t, alerts.Put(alert)) } // Wait until the alerts have been notified or the waiting timeout expires. for deadline := time.Now().Add(5 * time.Second); time.Now().Before(deadline); { if len(recorder.Alerts()) >= numAlerts { break } // Throttle. time.Sleep(10 * time.Millisecond) } // We expect all alerts to be notified immediately, since they all belong to different groups. require.Len(t, recorder.Alerts(), numAlerts) } type limits struct { groups int } func (l limits) MaxNumberOfAggregationGroups() int { return l.groups } func TestDispatcher_DoMaintenance(t *testing.T) { r := prometheus.NewRegistry() marker := types.NewMarker(r) alerts, err := mem.NewAlerts(context.Background(), marker, time.Minute, nil, promslog.NewNopLogger(), nil) if err != nil { t.Fatal(err) } route := &Route{ RouteOpts: RouteOpts{ GroupBy: map[model.LabelName]struct{}{"alertname": {}}, GroupWait: 0, GroupInterval: 5 * time.Minute, // Should never hit in this test. }, } timeout := func(d time.Duration) time.Duration { return d } recorder := &recordStage{alerts: make(map[string]map[model.Fingerprint]*types.Alert)} ctx := context.Background() dispatcher := NewDispatcher(alerts, route, recorder, marker, timeout, nil, promslog.NewNopLogger(), NewDispatcherMetrics(false, r)) aggrGroups := make(map[*Route]map[model.Fingerprint]*aggrGroup) aggrGroups[route] = make(map[model.Fingerprint]*aggrGroup) // Insert an aggregation group with no alerts. labels := model.LabelSet{"alertname": "1"} aggrGroup1 := newAggrGroup(ctx, labels, route, timeout, promslog.NewNopLogger()) aggrGroups[route][aggrGroup1.fingerprint()] = aggrGroup1 dispatcher.aggrGroupsPerRoute = aggrGroups // Must run otherwise doMaintenance blocks on aggrGroup1.stop(). go aggrGroup1.run(func(context.Context, ...*types.Alert) bool { return true }) // Insert a marker for the aggregation group's group key. marker.SetMuted(route.ID(), aggrGroup1.GroupKey(), []string{"weekends"}) mutedBy, isMuted := marker.Muted(route.ID(), aggrGroup1.GroupKey()) require.True(t, isMuted) require.Equal(t, []string{"weekends"}, mutedBy) // Run the maintenance and the marker should be removed. dispatcher.doMaintenance() mutedBy, isMuted = marker.Muted(route.ID(), aggrGroup1.GroupKey()) require.False(t, isMuted) require.Empty(t, mutedBy) } prometheus-alertmanager-0.28.1+ds/dispatch/route.go000066400000000000000000000153071476331240200223330ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package dispatch import ( "encoding/json" "fmt" "sort" "strconv" "strings" "time" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/pkg/labels" ) // DefaultRouteOpts are the defaulting routing options which apply // to the root route of a routing tree. var DefaultRouteOpts = RouteOpts{ GroupWait: 30 * time.Second, GroupInterval: 5 * time.Minute, RepeatInterval: 4 * time.Hour, GroupBy: map[model.LabelName]struct{}{}, GroupByAll: false, MuteTimeIntervals: []string{}, } // A Route is a node that contains definitions of how to handle alerts. type Route struct { parent *Route // The configuration parameters for matches of this route. RouteOpts RouteOpts // Matchers an alert has to fulfill to match // this route. Matchers labels.Matchers // If true, an alert matches further routes on the same level. Continue bool // Children routes of this route. Routes []*Route } // NewRoute returns a new route. func NewRoute(cr *config.Route, parent *Route) *Route { // Create default and overwrite with configured settings. opts := DefaultRouteOpts if parent != nil { opts = parent.RouteOpts } if cr.Receiver != "" { opts.Receiver = cr.Receiver } if cr.GroupBy != nil { opts.GroupBy = map[model.LabelName]struct{}{} for _, ln := range cr.GroupBy { opts.GroupBy[ln] = struct{}{} } opts.GroupByAll = false } else { if cr.GroupByAll { opts.GroupByAll = cr.GroupByAll } } if cr.GroupWait != nil { opts.GroupWait = time.Duration(*cr.GroupWait) } if cr.GroupInterval != nil { opts.GroupInterval = time.Duration(*cr.GroupInterval) } if cr.RepeatInterval != nil { opts.RepeatInterval = time.Duration(*cr.RepeatInterval) } // Build matchers. var matchers labels.Matchers // cr.Match will be deprecated. This for loop appends matchers. for ln, lv := range cr.Match { matcher, err := labels.NewMatcher(labels.MatchEqual, ln, lv) if err != nil { // This error must not happen because the config already validates the yaml. panic(err) } matchers = append(matchers, matcher) } // cr.MatchRE will be deprecated. This for loop appends regex matchers. for ln, lv := range cr.MatchRE { matcher, err := labels.NewMatcher(labels.MatchRegexp, ln, lv.String()) if err != nil { // This error must not happen because the config already validates the yaml. panic(err) } matchers = append(matchers, matcher) } // We append the new-style matchers. This can be simplified once the deprecated matcher syntax is removed. matchers = append(matchers, cr.Matchers...) sort.Sort(matchers) opts.MuteTimeIntervals = cr.MuteTimeIntervals opts.ActiveTimeIntervals = cr.ActiveTimeIntervals route := &Route{ parent: parent, RouteOpts: opts, Matchers: matchers, Continue: cr.Continue, } route.Routes = NewRoutes(cr.Routes, route) return route } // NewRoutes returns a slice of routes. func NewRoutes(croutes []*config.Route, parent *Route) []*Route { res := []*Route{} for _, cr := range croutes { res = append(res, NewRoute(cr, parent)) } return res } // Match does a depth-first left-to-right search through the route tree // and returns the matching routing nodes. func (r *Route) Match(lset model.LabelSet) []*Route { if !r.Matchers.Matches(lset) { return nil } var all []*Route for _, cr := range r.Routes { matches := cr.Match(lset) all = append(all, matches...) if matches != nil && !cr.Continue { break } } // If no child nodes were matches, the current node itself is a match. if len(all) == 0 { all = append(all, r) } return all } // Key returns a key for the route. It does not uniquely identify the route in general. func (r *Route) Key() string { b := strings.Builder{} if r.parent != nil { b.WriteString(r.parent.Key()) b.WriteRune('/') } b.WriteString(r.Matchers.String()) return b.String() } // ID returns a unique identifier for the route. func (r *Route) ID() string { b := strings.Builder{} if r.parent != nil { b.WriteString(r.parent.ID()) b.WriteRune('/') } b.WriteString(r.Matchers.String()) if r.parent != nil { for i := range r.parent.Routes { if r == r.parent.Routes[i] { b.WriteRune('/') b.WriteString(strconv.Itoa(i)) break } } } return b.String() } // Walk traverses the route tree in depth-first order. func (r *Route) Walk(visit func(*Route)) { visit(r) for i := range r.Routes { r.Routes[i].Walk(visit) } } // RouteOpts holds various routing options necessary for processing alerts // that match a given route. type RouteOpts struct { // The identifier of the associated notification configuration. Receiver string // What labels to group alerts by for notifications. GroupBy map[model.LabelName]struct{} // Use all alert labels to group. GroupByAll bool // How long to wait to group matching alerts before sending // a notification. GroupWait time.Duration GroupInterval time.Duration RepeatInterval time.Duration // A list of time intervals for which the route is muted. MuteTimeIntervals []string // A list of time intervals for which the route is active. ActiveTimeIntervals []string } func (ro *RouteOpts) String() string { var labels []model.LabelName for ln := range ro.GroupBy { labels = append(labels, ln) } return fmt.Sprintf("", ro.Receiver, labels, ro.GroupByAll, ro.GroupWait, ro.GroupInterval) } // MarshalJSON returns a JSON representation of the routing options. func (ro *RouteOpts) MarshalJSON() ([]byte, error) { v := struct { Receiver string `json:"receiver"` GroupBy model.LabelNames `json:"groupBy"` GroupByAll bool `json:"groupByAll"` GroupWait time.Duration `json:"groupWait"` GroupInterval time.Duration `json:"groupInterval"` RepeatInterval time.Duration `json:"repeatInterval"` }{ Receiver: ro.Receiver, GroupByAll: ro.GroupByAll, GroupWait: ro.GroupWait, GroupInterval: ro.GroupInterval, RepeatInterval: ro.RepeatInterval, } for ln := range ro.GroupBy { v.GroupBy = append(v.GroupBy, ln) } return json.Marshal(&v) } prometheus-alertmanager-0.28.1+ds/dispatch/route_test.go000066400000000000000000000466771476331240200234100ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package dispatch import ( "reflect" "testing" "time" "github.com/prometheus/common/model" "github.com/stretchr/testify/require" "gopkg.in/yaml.v2" "github.com/prometheus/alertmanager/config" ) func TestRouteMatch(t *testing.T) { in := ` receiver: 'notify-def' routes: - match: owner: 'team-A' receiver: 'notify-A' routes: - match: env: 'testing' receiver: 'notify-testing' group_by: [...] - match: env: "production" receiver: 'notify-productionA' group_wait: 1m continue: true - match_re: env: "produ.*" job: ".*" receiver: 'notify-productionB' group_wait: 30s group_interval: 5m repeat_interval: 1h group_by: ['job'] - match_re: owner: 'team-(B|C)' group_by: ['foo', 'bar'] group_wait: 2m receiver: 'notify-BC' - match: group_by: 'role' group_by: ['role'] routes: - match: env: 'testing' receiver: 'notify-testing' routes: - match: wait: 'long' group_wait: 2m ` var ctree config.Route if err := yaml.UnmarshalStrict([]byte(in), &ctree); err != nil { t.Fatal(err) } var ( def = DefaultRouteOpts tree = NewRoute(&ctree, nil) ) lset := func(labels ...string) map[model.LabelName]struct{} { s := map[model.LabelName]struct{}{} for _, ls := range labels { s[model.LabelName(ls)] = struct{}{} } return s } tests := []struct { input model.LabelSet result []*RouteOpts keys []string }{ { input: model.LabelSet{ "owner": "team-A", }, result: []*RouteOpts{ { Receiver: "notify-A", GroupBy: def.GroupBy, GroupByAll: false, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{owner=\"team-A\"}"}, }, { input: model.LabelSet{ "owner": "team-A", "env": "unset", }, result: []*RouteOpts{ { Receiver: "notify-A", GroupBy: def.GroupBy, GroupByAll: false, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{owner=\"team-A\"}"}, }, { input: model.LabelSet{ "owner": "team-C", }, result: []*RouteOpts{ { Receiver: "notify-BC", GroupBy: lset("foo", "bar"), GroupByAll: false, GroupWait: 2 * time.Minute, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{owner=~\"^(?:team-(B|C))$\"}"}, }, { input: model.LabelSet{ "owner": "team-A", "env": "testing", }, result: []*RouteOpts{ { Receiver: "notify-testing", GroupBy: lset(), GroupByAll: true, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{owner=\"team-A\"}/{env=\"testing\"}"}, }, { input: model.LabelSet{ "owner": "team-A", "env": "production", }, result: []*RouteOpts{ { Receiver: "notify-productionA", GroupBy: def.GroupBy, GroupByAll: false, GroupWait: 1 * time.Minute, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, { Receiver: "notify-productionB", GroupBy: lset("job"), GroupByAll: false, GroupWait: 30 * time.Second, GroupInterval: 5 * time.Minute, RepeatInterval: 1 * time.Hour, }, }, keys: []string{ "{}/{owner=\"team-A\"}/{env=\"production\"}", "{}/{owner=\"team-A\"}/{env=~\"^(?:produ.*)$\",job=~\"^(?:.*)$\"}", }, }, { input: model.LabelSet{ "group_by": "role", }, result: []*RouteOpts{ { Receiver: "notify-def", GroupBy: lset("role"), GroupByAll: false, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{group_by=\"role\"}"}, }, { input: model.LabelSet{ "env": "testing", "group_by": "role", }, result: []*RouteOpts{ { Receiver: "notify-testing", GroupBy: lset("role"), GroupByAll: false, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{group_by=\"role\"}/{env=\"testing\"}"}, }, { input: model.LabelSet{ "env": "testing", "group_by": "role", "wait": "long", }, result: []*RouteOpts{ { Receiver: "notify-testing", GroupBy: lset("role"), GroupByAll: false, GroupWait: 2 * time.Minute, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{group_by=\"role\"}/{env=\"testing\"}/{wait=\"long\"}"}, }, } for _, test := range tests { var matches []*RouteOpts var keys []string for _, r := range tree.Match(test.input) { matches = append(matches, &r.RouteOpts) keys = append(keys, r.Key()) } if !reflect.DeepEqual(matches, test.result) { t.Errorf("\nexpected:\n%v\ngot:\n%v", test.result, matches) } if !reflect.DeepEqual(keys, test.keys) { t.Errorf("\nexpected:\n%v\ngot:\n%v", test.keys, keys) } } } func TestRouteWalk(t *testing.T) { in := ` receiver: 'notify-def' routes: - match: owner: 'team-A' receiver: 'notify-A' routes: - match: env: 'testing' receiver: 'notify-testing' group_by: [...] - match: env: "production" receiver: 'notify-productionA' group_wait: 1m continue: true - match_re: env: "produ.*" job: ".*" receiver: 'notify-productionB' group_wait: 30s group_interval: 5m repeat_interval: 1h group_by: ['job'] - match_re: owner: 'team-(B|C)' group_by: ['foo', 'bar'] group_wait: 2m receiver: 'notify-BC' - match: group_by: 'role' group_by: ['role'] routes: - match: env: 'testing' receiver: 'notify-testing' routes: - match: wait: 'long' group_wait: 2m ` var ctree config.Route if err := yaml.UnmarshalStrict([]byte(in), &ctree); err != nil { t.Fatal(err) } tree := NewRoute(&ctree, nil) expected := []string{ "notify-def", "notify-A", "notify-testing", "notify-productionA", "notify-productionB", "notify-BC", "notify-def", "notify-testing", "notify-testing", } var got []string tree.Walk(func(r *Route) { got = append(got, r.RouteOpts.Receiver) }) if !reflect.DeepEqual(got, expected) { t.Errorf("\nexpected:\n%v\ngot:\n%v", expected, got) } } func TestInheritParentGroupByAll(t *testing.T) { in := ` routes: - match: env: 'parent' group_by: ['...'] routes: - match: env: 'child1' - match: env: 'child2' group_by: ['foo'] ` var ctree config.Route if err := yaml.UnmarshalStrict([]byte(in), &ctree); err != nil { t.Fatal(err) } tree := NewRoute(&ctree, nil) parent := tree.Routes[0] child1 := parent.Routes[0] child2 := parent.Routes[1] require.True(t, parent.RouteOpts.GroupByAll) require.True(t, child1.RouteOpts.GroupByAll) require.False(t, child2.RouteOpts.GroupByAll) } func TestRouteMatchers(t *testing.T) { in := ` receiver: 'notify-def' routes: - matchers: ['{owner="team-A"}', '{level!="critical"}'] receiver: 'notify-A' routes: - matchers: ['{env="testing"}', '{baz!~".*quux"}'] receiver: 'notify-testing' group_by: [...] - matchers: ['{env="production"}'] receiver: 'notify-productionA' group_wait: 1m continue: true - matchers: [ env=~"produ.*", job=~".*"] receiver: 'notify-productionB' group_wait: 30s group_interval: 5m repeat_interval: 1h group_by: ['job'] - matchers: [owner=~"team-(B|C)"] group_by: ['foo', 'bar'] group_wait: 2m receiver: 'notify-BC' - matchers: [group_by="role"] group_by: ['role'] routes: - matchers: ['{env="testing"}'] receiver: 'notify-testing' routes: - matchers: [wait="long"] group_wait: 2m ` var ctree config.Route if err := yaml.UnmarshalStrict([]byte(in), &ctree); err != nil { t.Fatal(err) } var ( def = DefaultRouteOpts tree = NewRoute(&ctree, nil) ) lset := func(labels ...string) map[model.LabelName]struct{} { s := map[model.LabelName]struct{}{} for _, ls := range labels { s[model.LabelName(ls)] = struct{}{} } return s } tests := []struct { input model.LabelSet result []*RouteOpts keys []string }{ { input: model.LabelSet{ "owner": "team-A", }, result: []*RouteOpts{ { Receiver: "notify-A", GroupBy: def.GroupBy, GroupByAll: false, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{level!=\"critical\",owner=\"team-A\"}"}, }, { input: model.LabelSet{ "owner": "team-A", "env": "unset", }, result: []*RouteOpts{ { Receiver: "notify-A", GroupBy: def.GroupBy, GroupByAll: false, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{level!=\"critical\",owner=\"team-A\"}"}, }, { input: model.LabelSet{ "owner": "team-C", }, result: []*RouteOpts{ { Receiver: "notify-BC", GroupBy: lset("foo", "bar"), GroupByAll: false, GroupWait: 2 * time.Minute, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{owner=~\"team-(B|C)\"}"}, }, { input: model.LabelSet{ "owner": "team-A", "env": "testing", }, result: []*RouteOpts{ { Receiver: "notify-testing", GroupBy: lset(), GroupByAll: true, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{level!=\"critical\",owner=\"team-A\"}/{baz!~\".*quux\",env=\"testing\"}"}, }, { input: model.LabelSet{ "owner": "team-A", "env": "production", }, result: []*RouteOpts{ { Receiver: "notify-productionA", GroupBy: def.GroupBy, GroupByAll: false, GroupWait: 1 * time.Minute, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, { Receiver: "notify-productionB", GroupBy: lset("job"), GroupByAll: false, GroupWait: 30 * time.Second, GroupInterval: 5 * time.Minute, RepeatInterval: 1 * time.Hour, }, }, keys: []string{ "{}/{level!=\"critical\",owner=\"team-A\"}/{env=\"production\"}", "{}/{level!=\"critical\",owner=\"team-A\"}/{env=~\"produ.*\",job=~\".*\"}", }, }, { input: model.LabelSet{ "group_by": "role", }, result: []*RouteOpts{ { Receiver: "notify-def", GroupBy: lset("role"), GroupByAll: false, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{group_by=\"role\"}"}, }, { input: model.LabelSet{ "env": "testing", "group_by": "role", }, result: []*RouteOpts{ { Receiver: "notify-testing", GroupBy: lset("role"), GroupByAll: false, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{group_by=\"role\"}/{env=\"testing\"}"}, }, { input: model.LabelSet{ "env": "testing", "group_by": "role", "wait": "long", }, result: []*RouteOpts{ { Receiver: "notify-testing", GroupBy: lset("role"), GroupByAll: false, GroupWait: 2 * time.Minute, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{group_by=\"role\"}/{env=\"testing\"}/{wait=\"long\"}"}, }, } for _, test := range tests { var matches []*RouteOpts var keys []string for _, r := range tree.Match(test.input) { matches = append(matches, &r.RouteOpts) keys = append(keys, r.Key()) } if !reflect.DeepEqual(matches, test.result) { t.Errorf("\nexpected:\n%v\ngot:\n%v", test.result, matches) } if !reflect.DeepEqual(keys, test.keys) { t.Errorf("\nexpected:\n%v\ngot:\n%v", test.keys, keys) } } } func TestRouteMatchersAndMatch(t *testing.T) { in := ` receiver: 'notify-def' routes: - matchers: ['{owner="team-A"}', '{level!="critical"}'] receiver: 'notify-A' routes: - matchers: ['{env="testing"}', '{baz!~".*quux"}'] receiver: 'notify-testing' group_by: [...] - match: env: "production" receiver: 'notify-productionA' group_wait: 1m continue: true - matchers: [ env=~"produ.*", job=~".*"] receiver: 'notify-productionB' group_wait: 30s group_interval: 5m repeat_interval: 1h group_by: ['job'] - match_re: owner: 'team-(B|C)' group_by: ['foo', 'bar'] group_wait: 2m receiver: 'notify-BC' - matchers: [group_by="role"] group_by: ['role'] routes: - matchers: ['{env="testing"}'] receiver: 'notify-testing' routes: - matchers: [wait="long"] group_wait: 2m ` var ctree config.Route if err := yaml.UnmarshalStrict([]byte(in), &ctree); err != nil { t.Fatal(err) } var ( def = DefaultRouteOpts tree = NewRoute(&ctree, nil) ) lset := func(labels ...string) map[model.LabelName]struct{} { s := map[model.LabelName]struct{}{} for _, ls := range labels { s[model.LabelName(ls)] = struct{}{} } return s } tests := []struct { input model.LabelSet result []*RouteOpts keys []string }{ { input: model.LabelSet{ "owner": "team-A", }, result: []*RouteOpts{ { Receiver: "notify-A", GroupBy: def.GroupBy, GroupByAll: false, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{level!=\"critical\",owner=\"team-A\"}"}, }, { input: model.LabelSet{ "owner": "team-A", "env": "unset", }, result: []*RouteOpts{ { Receiver: "notify-A", GroupBy: def.GroupBy, GroupByAll: false, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{level!=\"critical\",owner=\"team-A\"}"}, }, { input: model.LabelSet{ "owner": "team-C", }, result: []*RouteOpts{ { Receiver: "notify-BC", GroupBy: lset("foo", "bar"), GroupByAll: false, GroupWait: 2 * time.Minute, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{owner=~\"^(?:team-(B|C))$\"}"}, }, { input: model.LabelSet{ "owner": "team-A", "env": "testing", }, result: []*RouteOpts{ { Receiver: "notify-testing", GroupBy: lset(), GroupByAll: true, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{level!=\"critical\",owner=\"team-A\"}/{baz!~\".*quux\",env=\"testing\"}"}, }, { input: model.LabelSet{ "owner": "team-A", "env": "production", }, result: []*RouteOpts{ { Receiver: "notify-productionA", GroupBy: def.GroupBy, GroupByAll: false, GroupWait: 1 * time.Minute, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, { Receiver: "notify-productionB", GroupBy: lset("job"), GroupByAll: false, GroupWait: 30 * time.Second, GroupInterval: 5 * time.Minute, RepeatInterval: 1 * time.Hour, }, }, keys: []string{ "{}/{level!=\"critical\",owner=\"team-A\"}/{env=\"production\"}", "{}/{level!=\"critical\",owner=\"team-A\"}/{env=~\"produ.*\",job=~\".*\"}", }, }, { input: model.LabelSet{ "group_by": "role", }, result: []*RouteOpts{ { Receiver: "notify-def", GroupBy: lset("role"), GroupByAll: false, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{group_by=\"role\"}"}, }, { input: model.LabelSet{ "env": "testing", "group_by": "role", }, result: []*RouteOpts{ { Receiver: "notify-testing", GroupBy: lset("role"), GroupByAll: false, GroupWait: def.GroupWait, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{group_by=\"role\"}/{env=\"testing\"}"}, }, { input: model.LabelSet{ "env": "testing", "group_by": "role", "wait": "long", }, result: []*RouteOpts{ { Receiver: "notify-testing", GroupBy: lset("role"), GroupByAll: false, GroupWait: 2 * time.Minute, GroupInterval: def.GroupInterval, RepeatInterval: def.RepeatInterval, }, }, keys: []string{"{}/{group_by=\"role\"}/{env=\"testing\"}/{wait=\"long\"}"}, }, } for _, test := range tests { var matches []*RouteOpts var keys []string for _, r := range tree.Match(test.input) { matches = append(matches, &r.RouteOpts) keys = append(keys, r.Key()) } if !reflect.DeepEqual(matches, test.result) { t.Errorf("\nexpected:\n%v\ngot:\n%v", test.result, matches) } if !reflect.DeepEqual(keys, test.keys) { t.Errorf("\nexpected:\n%v\ngot:\n%v", test.keys, keys) } } } func TestRouteID(t *testing.T) { in := ` receiver: default routes: - continue: true matchers: - foo=bar receiver: test1 routes: - matchers: - bar=baz - continue: true matchers: - foo=bar receiver: test1 routes: - matchers: - bar=baz - continue: true matchers: - foo=bar receiver: test2 routes: - matchers: - bar=baz - continue: true matchers: - bar=baz receiver: test3 routes: - matchers: - baz=qux - matchers: - qux=corge - continue: true matchers: - qux=~"[a-zA-Z0-9]+" - continue: true matchers: - corge!~"[0-9]+" ` cr := config.Route{} require.NoError(t, yaml.Unmarshal([]byte(in), &cr)) r := NewRoute(&cr, nil) expected := []string{ "{}", "{}/{foo=\"bar\"}/0", "{}/{foo=\"bar\"}/0/{bar=\"baz\"}/0", "{}/{foo=\"bar\"}/1", "{}/{foo=\"bar\"}/1/{bar=\"baz\"}/0", "{}/{foo=\"bar\"}/2", "{}/{foo=\"bar\"}/2/{bar=\"baz\"}/0", "{}/{bar=\"baz\"}/3", "{}/{bar=\"baz\"}/3/{baz=\"qux\"}/0", "{}/{bar=\"baz\"}/3/{qux=\"corge\"}/1", "{}/{qux=~\"[a-zA-Z0-9]+\"}/4", "{}/{corge!~\"[0-9]+\"}/5", } var actual []string r.Walk(func(r *Route) { actual = append(actual, r.ID()) }) require.ElementsMatch(t, actual, expected) } prometheus-alertmanager-0.28.1+ds/doc/000077500000000000000000000000001476331240200176065ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/000077500000000000000000000000001476331240200233725ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/.gitignore000066400000000000000000000000261476331240200253600ustar00rootroot00000000000000vendor dashboards_out prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/.lint000066400000000000000000000010651476331240200243430ustar00rootroot00000000000000exclusions: target-instance-rule: reason: no need to have every query contains two matchers within every selector - `{job=~"$job", instance=~"$instance"}` template-job-rule: entries: - dashboard: Alertmanager / Overview reason: multi-select is not always required template-instance-rule: entries: - dashboard: Alertmanager / Overview reason: multi-select is not always required panel-units-rule: entries: - dashboard: Alertmanager / Overview reason: Dashboard does not benefit from specific unit specification.prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/Makefile000066400000000000000000000014741476331240200250400ustar00rootroot00000000000000JSONNET_FMT := jsonnetfmt -n 2 --max-blank-lines 1 --string-style s --comment-style s ALERTMANAGER_ALERTS := alertmanager_alerts.yaml default: vendor build dashboards_out all: fmt build vendor: jb install fmt: find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \ xargs -n 1 -- $(JSONNET_FMT) -i lint: build find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \ while read f; do \ $(JSONNET_FMT) "$$f" | diff -u "$$f" -; \ done mixtool lint mixin.libsonnet dashboards_out: mixin.libsonnet config.libsonnet $(wildcard dashboards/*) @mkdir -p dashboards_out jsonnet -J vendor -m dashboards_out dashboards.jsonnet build: vendor mixtool generate alerts mixin.libsonnet > $(ALERTMANAGER_ALERTS) clean: rm -rf $(ALERTMANAGER_ALERTS) prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/README.md000066400000000000000000000023631476331240200246550ustar00rootroot00000000000000# Alertmanager Mixin The Alertmanager Mixin is a set of configurable, reusable, and extensible alerts (and eventually dashboards) for Alertmanager. The alerts are designed to monitor a cluster of Alertmanager instances. To make them work as expected, the Prometheus server the alerts are evaluated on has to scrape all Alertmanager instances of the cluster, even if those instances are distributed over different locations. All Alertmanager instances in the same Alertmanager cluster must have the same `job` label. In turn, if monitoring multiple different Alertmanager clusters, instances from different clusters must have a different `job` label. The most basic use of the Alertmanager Mixin is to create a YAML file with the alerts from it. To do so, you need to have `jsonnetfmt` and `mixtool` installed. If you have a working Go development environment, it's easiest to run the following: ```bash $ go get github.com/monitoring-mixins/mixtool/cmd/mixtool $ go get github.com/google/go-jsonnet/cmd/jsonnetfmt ``` Edit `config.libsonnet` to match your environment and then build `alertmanager_alerts.yaml` with the alerts by running: ```bash $ make build ``` For instructions on more advanced uses of mixins, see https://github.com/monitoring-mixins/docs. prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/alerts.jsonnet000066400000000000000000000001011476331240200262560ustar00rootroot00000000000000std.manifestYamlDoc((import 'mixin.libsonnet').prometheusAlerts) prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/alerts.libsonnet000066400000000000000000000171411476331240200266070ustar00rootroot00000000000000{ prometheusAlerts+:: { groups+: [ { name: 'alertmanager.rules', rules: [ { alert: 'AlertmanagerFailedReload', expr: ||| # Without max_over_time, failed scrapes could create false negatives, see # https://www.robustperception.io/alerting-on-gauges-in-prometheus-2-0 for details. max_over_time(alertmanager_config_last_reload_successful{%(alertmanagerSelector)s}[5m]) == 0 ||| % $._config, 'for': '10m', labels: { severity: 'critical', }, annotations: { summary: 'Reloading an Alertmanager configuration has failed.', description: 'Configuration has failed to load for %(alertmanagerName)s.' % $._config, }, }, { alert: 'AlertmanagerMembersInconsistent', expr: ||| # Without max_over_time, failed scrapes could create false negatives, see # https://www.robustperception.io/alerting-on-gauges-in-prometheus-2-0 for details. max_over_time(alertmanager_cluster_members{%(alertmanagerSelector)s}[5m]) < on (%(alertmanagerClusterLabels)s) group_left count by (%(alertmanagerClusterLabels)s) (max_over_time(alertmanager_cluster_members{%(alertmanagerSelector)s}[5m])) ||| % $._config, 'for': '15m', labels: { severity: 'critical', }, annotations: { summary: 'A member of an Alertmanager cluster has not found all other cluster members.', description: 'Alertmanager %(alertmanagerName)s has only found {{ $value }} members of the %(alertmanagerClusterName)s cluster.' % $._config, }, }, { alert: 'AlertmanagerFailedToSendAlerts', expr: ||| ( rate(alertmanager_notifications_failed_total{%(alertmanagerSelector)s}[5m]) / ignoring (reason) group_left rate(alertmanager_notifications_total{%(alertmanagerSelector)s}[5m]) ) > 0.01 ||| % $._config, 'for': '5m', labels: { severity: 'warning', }, annotations: { summary: 'An Alertmanager instance failed to send notifications.', description: 'Alertmanager %(alertmanagerName)s failed to send {{ $value | humanizePercentage }} of notifications to {{ $labels.integration }}.' % $._config, }, }, { alert: 'AlertmanagerClusterFailedToSendAlerts', expr: ||| min by (%(alertmanagerClusterLabels)s, integration) ( rate(alertmanager_notifications_failed_total{%(alertmanagerSelector)s, integration=~`%(alertmanagerCriticalIntegrationsRegEx)s`}[5m]) / ignoring (reason) group_left rate(alertmanager_notifications_total{%(alertmanagerSelector)s, integration=~`%(alertmanagerCriticalIntegrationsRegEx)s`}[5m]) ) > 0.01 ||| % $._config, 'for': '5m', labels: { severity: 'critical', }, annotations: { summary: 'All Alertmanager instances in a cluster failed to send notifications to a critical integration.', description: 'The minimum notification failure rate to {{ $labels.integration }} sent from any instance in the %(alertmanagerClusterName)s cluster is {{ $value | humanizePercentage }}.' % $._config, }, }, { alert: 'AlertmanagerClusterFailedToSendAlerts', expr: ||| min by (%(alertmanagerClusterLabels)s, integration) ( rate(alertmanager_notifications_failed_total{%(alertmanagerSelector)s, integration!~`%(alertmanagerCriticalIntegrationsRegEx)s`}[5m]) / ignoring (reason) group_left rate(alertmanager_notifications_total{%(alertmanagerSelector)s, integration!~`%(alertmanagerCriticalIntegrationsRegEx)s`}[5m]) ) > 0.01 ||| % $._config, 'for': '5m', labels: { severity: 'warning', }, annotations: { summary: 'All Alertmanager instances in a cluster failed to send notifications to a non-critical integration.', description: 'The minimum notification failure rate to {{ $labels.integration }} sent from any instance in the %(alertmanagerClusterName)s cluster is {{ $value | humanizePercentage }}.' % $._config, }, }, { alert: 'AlertmanagerConfigInconsistent', expr: ||| count by (%(alertmanagerClusterLabels)s) ( count_values by (%(alertmanagerClusterLabels)s) ("config_hash", alertmanager_config_hash{%(alertmanagerSelector)s}) ) != 1 ||| % $._config, 'for': '20m', // A config change across an Alertmanager cluster can take its time. But it's really bad if it persists for too long. labels: { severity: 'critical', }, annotations: { summary: 'Alertmanager instances within the same cluster have different configurations.', description: 'Alertmanager instances within the %(alertmanagerClusterName)s cluster have different configurations.' % $._config, }, }, // Both the following critical alerts, AlertmanagerClusterDown and // AlertmanagerClusterCrashlooping, fire if a whole cluster is // unhealthy. It is implied that a generic warning alert is in place // for individual instances being down or crashlooping. { alert: 'AlertmanagerClusterDown', expr: ||| ( count by (%(alertmanagerClusterLabels)s) ( avg_over_time(up{%(alertmanagerSelector)s}[5m]) < 0.5 ) / count by (%(alertmanagerClusterLabels)s) ( up{%(alertmanagerSelector)s} ) ) >= 0.5 ||| % $._config, 'for': '5m', labels: { severity: 'critical', }, annotations: { summary: 'Half or more of the Alertmanager instances within the same cluster are down.', description: '{{ $value | humanizePercentage }} of Alertmanager instances within the %(alertmanagerClusterName)s cluster have been up for less than half of the last 5m.' % $._config, }, }, { alert: 'AlertmanagerClusterCrashlooping', expr: ||| ( count by (%(alertmanagerClusterLabels)s) ( changes(process_start_time_seconds{%(alertmanagerSelector)s}[10m]) > 4 ) / count by (%(alertmanagerClusterLabels)s) ( up{%(alertmanagerSelector)s} ) ) >= 0.5 ||| % $._config, 'for': '5m', labels: { severity: 'critical', }, annotations: { summary: 'Half or more of the Alertmanager instances within the same cluster are crashlooping.', description: '{{ $value | humanizePercentage }} of Alertmanager instances within the %(alertmanagerClusterName)s cluster have restarted at least 5 times in the last 10m.' % $._config, }, }, ], }, ], }, } prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/config.libsonnet000066400000000000000000000037021476331240200265600ustar00rootroot00000000000000{ _config+:: { local c = self, // alertmanagerSelector is inserted as part of the label selector in // PromQL queries to identify metrics collected from Alertmanager // servers. alertmanagerSelector: 'job="alertmanager"', // alertmanagerClusterLabels is a string with comma-separated // labels that are common labels of instances belonging to the // same Alertmanager cluster. Include not only enough labels to // identify cluster members, but also all common labels you want // to keep for resulting cluster-level alerts. alertmanagerClusterLabels: 'job', // alertmanagerNameLabels is a string with comma-separated // labels used to identify different alertmanagers within the same // Alertmanager HA cluster. // If you run Alertmanager on Kubernetes with the Prometheus // Operator, you can make use of the configured target labels for // nicer naming: // alertmanagerNameLabels: 'namespace,pod' alertmanagerNameLabels: 'instance', // alertmanagerName is an identifier for alerts. By default, it is built from 'alertmanagerNameLabels'. alertmanagerName: std.join('/', ['{{$labels.%s}}' % [label] for label in std.split(c.alertmanagerNameLabels, ',')]), // alertmanagerClusterName is inserted into annotations to name an // Alertmanager cluster. All labels used here must also be present // in alertmanagerClusterLabels above. alertmanagerClusterName: '{{$labels.job}}', // alertmanagerCriticalIntegrationsRegEx is matched against the // value of the `integration` label to determine if the // AlertmanagerClusterFailedToSendAlerts is critical or merely a // warning. This can be used to avoid paging about a failed // integration that is itself not used for critical alerts. // Example: @'pagerduty|webhook' alertmanagerCriticalIntegrationsRegEx: @'.*', dashboardNamePrefix: 'Alertmanager / ', dashboardTags: ['alertmanager-mixin'], }, } prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/dashboards.jsonnet000066400000000000000000000002141476331240200271030ustar00rootroot00000000000000local dashboards = (import 'mixin.libsonnet').grafanaDashboards; { [name]: dashboards[name] for name in std.objectFields(dashboards) } prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/dashboards.libsonnet000066400000000000000000000000531476331240200274210ustar00rootroot00000000000000(import './dashboards/overview.libsonnet') prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/dashboards/000077500000000000000000000000001476331240200255045ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/dashboards/overview.libsonnet000066400000000000000000000224001476331240200312670ustar00rootroot00000000000000local grafana = import 'github.com/grafana/grafonnet/gen/grafonnet-latest/main.libsonnet'; local dashboard = grafana.dashboard; local prometheus = grafana.query.prometheus; local variable = dashboard.variable; local panel = grafana.panel; local row = panel.row; { grafanaDashboards+:: { local amQuerySelector = std.join(',', ['%s=~"$%s"' % [label, label] for label in std.split($._config.alertmanagerClusterLabels, ',')]), local amNameDashboardLegend = std.join('/', ['{{%s}}' % [label] for label in std.split($._config.alertmanagerNameLabels, ',')]), local datasource = variable.datasource.new('datasource', 'prometheus') + variable.datasource.generalOptions.withLabel('Data Source') + variable.datasource.generalOptions.withCurrent('Prometheus') + variable.datasource.generalOptions.showOnDashboard.withLabelAndValue(), local alertmanagerClusterSelectorVariables = [ variable.query.new(label) + variable.query.generalOptions.withLabel(label) + variable.query.withDatasourceFromVariable(datasource) + variable.query.queryTypes.withLabelValues(label, metric='alertmanager_alerts') + variable.query.generalOptions.withCurrent('') + variable.query.refresh.onTime() + variable.query.selectionOptions.withIncludeAll(false) + variable.query.withSort(type='alphabetical') for label in std.split($._config.alertmanagerClusterLabels, ',') ], local integrationVariable = variable.query.new('integration') + variable.query.withDatasourceFromVariable(datasource) + variable.query.queryTypes.withLabelValues('integration', metric='alertmanager_notifications_total{integration=~"%s"}' % $._config.alertmanagerCriticalIntegrationsRegEx) + variable.query.generalOptions.withCurrent('$__all') + variable.datasource.generalOptions.showOnDashboard.withNothing() + variable.query.refresh.onTime() + variable.query.selectionOptions.withIncludeAll(true) + variable.query.withSort(type='alphabetical'), local panelTimeSeriesStdOptions = {} + panel.timeSeries.fieldConfig.defaults.custom.stacking.withMode('normal') + panel.timeSeries.fieldConfig.defaults.custom.withFillOpacity(10) + panel.timeSeries.fieldConfig.defaults.custom.withShowPoints('never') + panel.timeSeries.options.legend.withShowLegend(false) + panel.timeSeries.options.tooltip.withMode('multi') + panel.timeSeries.queryOptions.withDatasource('prometheus', '$datasource'), 'alertmanager-overview.json': local alerts = panel.timeSeries.new('Alerts') + panel.timeSeries.panelOptions.withDescription('current set of alerts stored in the Alertmanager') + panel.timeSeries.standardOptions.withUnit('none') + panelTimeSeriesStdOptions + panel.timeSeries.queryOptions.withTargets([ prometheus.new( '$datasource', 'sum(alertmanager_alerts{%(amQuerySelector)s}) by (%(alertmanagerClusterLabels)s,%(alertmanagerNameLabels)s)' % $._config { amQuerySelector: amQuerySelector }, ) + prometheus.withIntervalFactor(2) + prometheus.withLegendFormat('%(amNameDashboardLegend)s' % $._config { amNameDashboardLegend: amNameDashboardLegend }), ]); local alertsRate = panel.timeSeries.new('Alerts receive rate') + panel.timeSeries.panelOptions.withDescription('rate of successful and invalid alerts received by the Alertmanager') + panel.timeSeries.standardOptions.withUnit('ops') + panelTimeSeriesStdOptions + panel.timeSeries.queryOptions.withTargets([ prometheus.new( '$datasource', 'sum(rate(alertmanager_alerts_received_total{%(amQuerySelector)s}[$__rate_interval])) by (%(alertmanagerClusterLabels)s,%(alertmanagerNameLabels)s)' % $._config { amQuerySelector: amQuerySelector }, ) + prometheus.withIntervalFactor(2) + prometheus.withLegendFormat('%(amNameDashboardLegend)s Received' % $._config { amNameDashboardLegend: amNameDashboardLegend }), prometheus.new( '$datasource', 'sum(rate(alertmanager_alerts_invalid_total{%(amQuerySelector)s}[$__rate_interval])) by (%(alertmanagerClusterLabels)s,%(alertmanagerNameLabels)s)' % $._config { amQuerySelector: amQuerySelector }, ) + prometheus.withIntervalFactor(2) + prometheus.withLegendFormat('%(amNameDashboardLegend)s Invalid' % $._config { amNameDashboardLegend: amNameDashboardLegend }), ]); local notifications = panel.timeSeries.new('$integration: Notifications Send Rate') + panel.timeSeries.panelOptions.withDescription('rate of successful and invalid notifications sent by the Alertmanager') + panel.timeSeries.standardOptions.withUnit('ops') + panelTimeSeriesStdOptions + panel.timeSeries.panelOptions.withRepeat('integration') + panel.timeSeries.queryOptions.withTargets([ prometheus.new( '$datasource', 'sum(rate(alertmanager_notifications_total{%(amQuerySelector)s, integration="$integration"}[$__rate_interval])) by (integration,%(alertmanagerClusterLabels)s,%(alertmanagerNameLabels)s)' % $._config { amQuerySelector: amQuerySelector }, ) + prometheus.withIntervalFactor(2) + prometheus.withLegendFormat('%(amNameDashboardLegend)s Total' % $._config { amNameDashboardLegend: amNameDashboardLegend }), prometheus.new( '$datasource', 'sum(rate(alertmanager_notifications_failed_total{%(amQuerySelector)s, integration="$integration"}[$__rate_interval])) by (integration,%(alertmanagerClusterLabels)s,%(alertmanagerNameLabels)s)' % $._config { amQuerySelector: amQuerySelector }, ) + prometheus.withIntervalFactor(2) + prometheus.withLegendFormat('%(amNameDashboardLegend)s Failed' % $._config { amNameDashboardLegend: amNameDashboardLegend }), ]); local notificationDuration = panel.timeSeries.new('$integration: Notification Duration') + panel.timeSeries.panelOptions.withDescription('latency of notifications sent by the Alertmanager') + panel.timeSeries.standardOptions.withUnit('s') + panelTimeSeriesStdOptions + panel.timeSeries.panelOptions.withRepeat('integration') + panel.timeSeries.queryOptions.withTargets([ prometheus.new( '$datasource', ||| histogram_quantile(0.99, sum(rate(alertmanager_notification_latency_seconds_bucket{%(amQuerySelector)s, integration="$integration"}[$__rate_interval])) by (le,%(alertmanagerClusterLabels)s,%(alertmanagerNameLabels)s) ) ||| % $._config { amQuerySelector: amQuerySelector }, ) + prometheus.withIntervalFactor(2) + prometheus.withLegendFormat('%(amNameDashboardLegend)s 99th Percentile' % $._config { amNameDashboardLegend: amNameDashboardLegend }), prometheus.new( '$datasource', ||| histogram_quantile(0.50, sum(rate(alertmanager_notification_latency_seconds_bucket{%(amQuerySelector)s, integration="$integration"}[$__rate_interval])) by (le,%(alertmanagerClusterLabels)s,%(alertmanagerNameLabels)s) ) ||| % $._config { amQuerySelector: amQuerySelector }, ) + prometheus.withIntervalFactor(2) + prometheus.withLegendFormat('%(amNameDashboardLegend)s Median' % $._config { amNameDashboardLegend: amNameDashboardLegend }), prometheus.new( '$datasource', ||| sum(rate(alertmanager_notification_latency_seconds_sum{%(amQuerySelector)s, integration="$integration"}[$__rate_interval])) by (%(alertmanagerClusterLabels)s,%(alertmanagerNameLabels)s) / sum(rate(alertmanager_notification_latency_seconds_count{%(amQuerySelector)s, integration="$integration"}[$__rate_interval])) by (%(alertmanagerClusterLabels)s,%(alertmanagerNameLabels)s) ||| % $._config { amQuerySelector: amQuerySelector }, ) + prometheus.withIntervalFactor(2) + prometheus.withLegendFormat('%(amNameDashboardLegend)s Average' % $._config { amNameDashboardLegend: amNameDashboardLegend }), ]); dashboard.new('%sOverview' % $._config.dashboardNamePrefix) + dashboard.time.withFrom('now-1h') + dashboard.withTags($._config.dashboardTags) + dashboard.withTimezone('utc') + dashboard.timepicker.withRefreshIntervals('30s') + dashboard.graphTooltip.withSharedCrosshair() + dashboard.withUid('alertmanager-overview') + dashboard.withVariables( [datasource] + alertmanagerClusterSelectorVariables + [integrationVariable] ) + dashboard.withPanels( grafana.util.grid.makeGrid([ row.new('Alerts') + row.withPanels([ alerts, alertsRate ]), row.new('Notifications') + row.withPanels([ notifications, notificationDuration ]) ], panelWidth=12, panelHeight=7) ) }, } prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/jsonnetfile.json000066400000000000000000000004131476331240200266030ustar00rootroot00000000000000{ "version": 1, "dependencies": [ { "source": { "git": { "remote": "https://github.com/grafana/grafonnet.git", "subdir": "gen/grafonnet-latest" } }, "version": "main" } ], "legacyImports": false } prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/jsonnetfile.lock.json000066400000000000000000000023061476331240200275350ustar00rootroot00000000000000{ "version": 1, "dependencies": [ { "source": { "git": { "remote": "https://github.com/grafana/grafonnet.git", "subdir": "gen/grafonnet-latest" } }, "version": "1ce5aec95ce32336fe47c8881361847c475b5254", "sum": "64fMUPI3frXGj4X1FqFd1t7r04w3CUSmXaDcJ23EYbQ=" }, { "source": { "git": { "remote": "https://github.com/grafana/grafonnet.git", "subdir": "gen/grafonnet-v11.1.0" } }, "version": "1ce5aec95ce32336fe47c8881361847c475b5254", "sum": "41w7p/rwrNsITqNHMXtGSJAfAyKmnflg6rFhKBduUxM=" }, { "source": { "git": { "remote": "https://github.com/jsonnet-libs/docsonnet.git", "subdir": "doc-util" } }, "version": "6ac6c69685b8c29c54515448eaca583da2d88150", "sum": "BrAL/k23jq+xy9oA7TWIhUx07dsA/QLm3g7ktCwe//U=" }, { "source": { "git": { "remote": "https://github.com/jsonnet-libs/xtd.git", "subdir": "" } }, "version": "63d430b69a95741061c2f7fc9d84b1a778511d9c", "sum": "qiZi3axUSXCVzKUF83zSAxklwrnitMmrDK4XAfjPMdE=" } ], "legacyImports": false } prometheus-alertmanager-0.28.1+ds/doc/alertmanager-mixin/mixin.libsonnet000066400000000000000000000001341476331240200264330ustar00rootroot00000000000000(import 'config.libsonnet') + (import 'alerts.libsonnet') + (import 'dashboards.libsonnet') prometheus-alertmanager-0.28.1+ds/doc/arch.svg000066400000000000000000001235551476331240200212570ustar00rootroot00000000000000
Notification Pipeline
Notification Pipeline
Receiver
E-Mail
[Not supported by viewer]
Set Notifies
Set Notifies
Receiver
Webhook
[Not supported by viewer]
Dispatcher
Dispatcher<br>
Gossip
Settle
[Not supported by viewer]
API
API
Alert Generators
(Prometheus)
[Not supported by viewer]
Silence Provider
Silence Provider
Silencer
Silencer
Router
Router
Wait
Wait
Wait
Wait
Already
sent?
Already<br>sent?
Retry
Retry
Dedup
Dedup
Retry
Retry
Set Notifies
Set Notifies
Notify Provider
Notify Provider
Alert Provider
Alert Provider
Subscribe
Subscribe
Inhibitor
Inhibitor
Cluster
Cluster<br>
Peers
Peers
Store
Store
Store
Store
Silences
Silences
Notification
Logs
Notification<br>Logs
Dedup
Dedup
High Availability mode
High Availability mode<br>
Aggregate
Aggregate
Group
Group
Group
Group
...
...
. . .
. . .
prometheus-alertmanager-0.28.1+ds/doc/arch.xml000066400000000000000000000105071476331240200212500ustar00rootroot000000000000007V1bk9o6Ev41VO0+QPlu8ziXkHOqkq2pzFZlz6OwBWjjQaxtMpPz61eyLWOrZTAgG5hM5iEgy7Ksr7vVVzGyH17ePidos/pKIxyPLCN6G9mPI8syHctj//GWX0WLbxlFwzIhUdlp1/BM/sZlo+i2JRFOGx0zSuOMbJqNIV2vcZg12lCS0NdmtwWNm0/doCUGDc8himHrdxJlq6I1cI1d+x+YLFfiyaZRXnlBonPZkK5QRF9rTfankf2QUJoVn17eHnDMF0+sS3HfrOVqNbEEr7MuNzg4jEIrChfRFOEpDsemNS3G+Inibfm6/6IZWZAQZYSu2ZUnssExWePyDbJfYlleVyTDzxsU8u+vDPqRfb/KXmL2zWQfaYLWfF3vFySOH2hMk/w2ezb79PDAJni/TFBE2MTFtTVd8+7VGhm8T4zStPycZgn9gWsjBQb/Y1cilK5wVD73J04yNvv4LibLNWvLKJ/Ygq6z53LuvNeKJuRv1obEdPMOBemZdvl9hl5IzIn2LiG84325VuwJ+K0VArMClnEEpi84S36xLuUNjiCbkhksv/j6uqMsyy67rGpU5UztkqJLal5WQ+8AZx9KzFvw9xbIwf4cG35gRNF8bHsA/pHlxeyZ93P2Yck/fMMhJuydxQX2kOpa1TmRWyLyUzR9Gn9FJK7dXrt2LFUVRCDY0DyKXu7zv1YSSeh2HeVkxO9G5bWQ4crevT+CcCWCcCwHUISvIghTAz0AeeC5gCCeccYaCqnAxPAHYDJg/rQTYIKr9TIwxEvBgSfxtMyoYNTveL6i9Ee7DLgRVu9N1AtmOpazdRDKIkBTy4yiaYiCIPDHJtzoASBwxetwrNCG93t5W3I1b7KI6Wu4Qkk22SQ0xByLexWifa2uZR/aR01TxYX++YtrgaV8JOkGZeFqx1F1btClOM3sT94exUlmAiP/dxwnddOeesN0elA5UoJquhpYxjQBrJ9pmpINhJRtiVl8tEZ8jkCz7el0NlMA9EKiiD9/MJnmNRAKzG4izdWAD9zq7p7+PB+ENjYbiuidpiATLFBf0UBB8pYOkg/gksbsXVjTZ7zGCcpoktbJv7bQ3v+23GzNl2Wc5pbTHetgWpu3QgUor8tKAe9/1kD/eEr4m67wNv1nTdMoxm0RucPtbHU70tJDIHZTKNr2cDud0BpqS4mjJRZsQZNsRZd0jeJPu1ZJEtUWGq+jO+6PYV/nMQ1/FE0zEjeZs8aMziP/y/uxmf+HDzlxxde/yifgN5IVlxy//PqXeCL7/IQTwl6c2wSHRCN/t/0gsaWg2yQUvUr+yVCyxNVepAYzwTHKmM7dGEyFTXnrEyU5o5RE4PsNIjBla6KYQnlT3QUkjRM05bcvDVO8HRgmp5PqZU60LS3obHgmMV6z1bQMxtQ/ScT1J5l1S+6MUIZSJo9wCzfW6CxGcxw/0ZTkLqyaSSg2zy9Sh2oTBUakvN3OaZbRlx53A9NvcrvpuxMXMLyn4HcdOhAETdAZBA1CdTmDbih1xxTsM4StD7GAGtA3us1+SyQsu5vm2RMS0Jr+jkh2NA7H6/+dlI6DYqzACpJBc+vWAlvTB2IFAzrLAGwOtNxb9xvykoeF6nCpV7FtU6m2inw7ukfhj2W+vDVUF/k/1iV/2F26KcJXuTtTfFmQNw7IfTmfx1WW8bjXHV8GaxZGa2tCQrpeEAZcMgnZE60Z3yvZf7ydqe+zIgg2RutovF1zt1+K4jEK+TzTMe80TrmPd2a5Hl9TtseyzTqYbNbLo2i08jccpFGzRqMxXmQ55WWoXDgz0ER8nt1UmlS2laWwrUTbOcRnL4w5ngZGEGKEkeOMXftDZJzkX7+syHB9gNA5FlBlqriSpZIyBT4T1lHl0WNtpXlkdLGf/ouz7FeJKtpmNPcmigl+oRzBdleGzKD7TK7RSeZSu3ZZN6Da9B7tJpUj2UKW8M8fsKm0GEMeFAc6Ce36yEkXybgKm1vRa3omyZwuMXwHIHsXJxhFv6AjOc3ffdYb8gLXOvSSJ6Ykjh3yxm0j79t7dxdjYjWYvgqMnSpMRBe6WORalGY54UJL41tFo9dh8gHVIWWzIOvll1yzy4e8TMDVHjIyDyW8/yHhT+JzrxufG2paGEDCezBs8oij7eaKePJKcmNsu1vKQz8c6EPf5Yfs7IrcRWWnDx01N5KGNlgy0WXxgdZLjgyf8EckR8g+iaMU6V/DxXEMiJgI9X8AVl6VQm8i7WIAvIC30BnA7WRcpRa5czs1nE75zHVpmIIZGhqmnDHZRi1nep3kHLdqMge8TgwC9KvWbcM7pHueYzSf400lgiwGPNVShRQLleLn7TwNEzKHmXKMSbMmiSY4JX+jed6BI1++Huvt3o/cxy4CohIlHQIuMtUdJ1PKSqNyuqOqvqdOiC0svc8xYYs1rHwTo7NcE+XI46bHw2ver8VvAaMdBsBcg/wy69Jr55VukRbXJ9t0yS+B4QG3+VAWsh+EbhRMLR8ZwXQauWMRHteVNtaOcVd4DuLcTmIa88XgHmNBIM1+9h3HkPcdKdqhL/UL0IOoVeqXHnxXJ0MPQhCuOzcs17RCFM3nxjwcuxckCNMdjiCc/tXbQzHMfkW/LlEvROmBcFdwKVEvMvs/kGwi2Zr/sR9I73JAekMBeX1g9RA/VstcV5K5Tn8pBxDggTJZbgPgs8NHLQAHLTWfQwAMLfA/1ysyJxmFvr33nyFsCq3zInXZMPj7EG/T7KoKRKsMwZspEDVdeyLF+I2poj5CHJZRx1kETPTiDHnuCeMExqfYOGST4tGu3CyM6ZYn9mpL+NxT73tURm7lYNMBmOfJgNmKchYFXI7XB1x6HROtbvU2bfWUBK3r9Uu1Cb39Km7hvBoicUOen9OLU9IYyQ6CCn2zjr3CKXnT6LcGhRvwq2nkIujrdUIdRv8Q778rl7TI2DgtOXMA9LX6Ka4PRz1h0/3oGeeip7aZTHFLW0S0xREJB5KLpOUzEjQm9AP6UhQ35ykTMtX9BqHPAyqhqMKr/M7GZM/xIC0xzaatN5aITk8yNsA40LqDvNPQZc/aX5sMkYrGDGkIjQcbyGQhYjYfrH8060+tG2F9RfVmeQwCNPVPgpnxZ1oiMwLFsS21mEWq8L9zRh47Z+N7xDldZnPHtkSVyoFUObMPV5sL662aR9jK/rYvdNkraIdKaC8Hm9vML7JFls4lPKTuFQQOb3mbbZxDpNh6W8IDl7C93MFCi+8f6taoz5XkgkHwB3C5/i7gtx8JdAD9waqhZfQ9vS7Xd4pxHb2WxJEeUhEkHc6T4mM9WkyeVlfs7SKvH1TPOAlUMJDXdgjLEGdjuLdWXztYQfuQ5bSAaaGd9Qd7JGu5+4lIjOYkJhmf/AuNcIcsh90ScmT0H3t0RVFwkQQkkoICGAI3fa8nHNV1Tc1KwOUywUuUQZdVk8478VsNi2n+T1pk5WlTvRVhGs3TlV14onjgw4WXs7b0LDz0E35m6wvFWg+LXj8FoHQqNSvNrT5BkCphFcewqbxFOo5hgyCofvFGWv+PIwAvfQTgeGpoIj3Hl/KPTFchfFUHrGugPlDeYWtVfAfIwQUIPzzsQ/hyiq/ZjCyAvNuuii8YyOhN8YXUAUXR7dZSHCkbulLOoRS0Tv6QIlllAH8IhNj+EAD9CIBpM/fjdAEgD9RRABxbn9/2HF0F+pD03lPN3YWkS6e6a+/c40pPli4uNO1Uyu1Omat+ORO41OrLW/rUpHID1+B/oxPOfKnUYrU2TbcZ/8HRh+rnXI0R/JEWuliQEDNldx3iTZZOwpKcoGNGZXeWGifQsHuzgLxm5HXqKYoWTIUHwNSQBd9aZPzbG6KmBX9Lpy9LFKLQ4QTgD2a9AmY1LVWJ0XDcqvqJT3kj3+2rIbfPSXiANxvbZX3Rm5Dsy1E8c6Pdf/ZSi4JeW39Xwaei7Uxd0jabYiKwTlMlbUcSNyZId9OkTMozFod79KZMuh3caDdOlC3b5rUQZfUr8+dTZbcS5bNpsiwP648muxy4fGs0eTXkJutAnclN1rm8gURg+Rxd5GZ6vmNbC8+NHMPDEVL9ovJkMgEUdzix9Ng00irjG2ak1rU+ZdV32dghfK0q6Rb07za99fqc9SZw1kMF3VYp6McHStnXhPIfFt3RA9dVv9II8x7/Bw==prometheus-alertmanager-0.28.1+ds/doc/design/000077500000000000000000000000001476331240200210575ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/doc/design/secure-cluster-traffic.md000066400000000000000000000115751476331240200257730ustar00rootroot00000000000000# Secure Alertmanager cluster traffic Type: Design document Date: 2019-02-21 Author: Max Inden ## Status Quo Alertmanager supports [high availability](https://github.com/prometheus/alertmanager/blob/master/README.md#high-availability) by interconnecting multiple Alertmanager instances building an Alertmanager cluster. Instances of a cluster communicate on top of a gossip protocol managed via Hashicorps [_Memberlist_](https://github.com/hashicorp/memberlist) library. _Memberlist_ uses two channels to communicate: TCP for reliable and UDP for best-effort communication. Alertmanager instances use the gossip layer to: - Keep track of membership - Replicate silence creation, update and deletion - Replicate notification log As of today the communication between Alertmanager instances in a cluster is sent in clear-text. ## Goal Instances in a cluster should communicate among each other in a secure fashion. Alertmanager should guarantee confidentiality, integrity and client authenticity for each message touching the wire. While this would improve the security of single datacenter deployments, one could see this as a necessity for wide-area-network deployments. ## Non-Goal Even though solutions might also be applicable to the API endpoints exposed by Alertmanager, it is not the goal of this design document to secure the API endpoints. ## Proposed Solution - TLS Memberlist _Memberlist_ enables users to implement their own [transport layer](https://godoc.org/github.com/hashicorp/memberlist#Transport) without the need of forking the library itself. That transport layer needs to support reliable as well as best-effort communication. Instead of using TCP and UDP like the default transport layer of _Memberlist_, the suggestion is to only use TCP for both reliable as well as best-effort communication. On top of that TCP layer, one can use mutual TLS to secure all communication. A proof-of-concept implementation can be found here: https://github.com/mxinden/memberlist-tls-transport. The data gossiped between instances does not have a low-latency requirement that TCP could not fulfill, same would apply for the relatively low data throughput requirements of Alertmanager. TCP connections could be kept alive beyond a single message to reduce latency as well as handshake overhead costs. While this is feasible in a 3-instance Alertmanager cluster, the discussed custom implementation would need to limit the amount of open connections for clusters with many instances (#connections = n*(n-1)/2). As of today, Alertmanager already forces _Memberlist_ to use the reliable TCP instead of the best-effort UDP connection to gossip large notification logs and silences between instances. The reason is, that those packets would otherwise exceed the [MTU](https://en.wikipedia.org/wiki/Maximum_transmission_unit) of most UDP setups. Splitting packets is not supported by _Memberlist_ and was not considered worth the effort to be implemented in Alertmanager either. For more info see this [Github issue](https://github.com/prometheus/alertmanager/issues/1412). With the last [Prometheus developer summit](https://docs.google.com/document/d/1-C5PycocOZEVIPrmM1hn8fBelShqtqiAmFptoG4yK70/edit) in mind, the Prometheus projects preferred security mechanism seems to be mutual TLS. Having Alertmanager use the same mechanism would ease deployment with the rest of the Prometheus stack. As a side effect (benefit) Alertmanager would only need a single open port (TCP traffic) instead of two open ports (TCP and UDP traffic) for cluster communication. This does not affect the API endpoint which remains a separate TCP port. ## Alternative Solutions ### Symmetric Memberlist _Memberlist_ supports [symmetric key encryption](https://godoc.org/github.com/hashicorp/memberlist#Keyring) via AES-128, AES-192 or AES-256 ciphers. One can specify multiple keys for rolling updates. Securing the cluster traffic via symmetric encryption would just involve small configuration changes in the Alertmanager code base. ### Replace Memberlist Coordinating membership might not be required by the Alertmanager cluster component. Instead this could be bound to static configuration or e.g. DNS service discovery. On the other hand, gossiping silences and notifications is ideally done in an eventual consistent gossip fashion, given that Alertmanager is supposed to scale beyond a 3-instance cluster and beyond local-area-network deployments. With these requirements in mind, replacing _Memberlist_ with an entirely self-built communication layer is a great undertaking. ### TLS Memberlist with DTLS Instead of redirecting all best-effort traffic via the reliable channel as proposed above, one could also secure the best-effort channel itself using UDP and [DTLS](https://en.wikipedia.org/wiki/Datagram_Transport_Layer_Security) in addition to securing the reliable traffic via TCP and TLS. DTLS is not supported by the Golang standard library. prometheus-alertmanager-0.28.1+ds/doc/examples/000077500000000000000000000000001476331240200214245ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/doc/examples/simple.yml000066400000000000000000000075611476331240200234510ustar00rootroot00000000000000global: # The smarthost and SMTP sender used for mail notifications. smtp_smarthost: 'localhost:25' smtp_from: 'alertmanager@example.org' smtp_auth_username: 'alertmanager' smtp_auth_password: 'password' # The directory from which notification templates are read. templates: - '/etc/alertmanager/template/*.tmpl' # The root route on which each incoming alert enters. route: # The labels by which incoming alerts are grouped together. For example, # multiple alerts coming in for cluster=A and alertname=LatencyHigh would # be batched into a single group. # # To aggregate by all possible labels use '...' as the sole label name. # This effectively disables aggregation entirely, passing through all # alerts as-is. This is unlikely to be what you want, unless you have # a very low alert volume or your upstream notification system performs # its own grouping. Example: group_by: [...] group_by: ['alertname', 'cluster', 'service'] # When a new group of alerts is created by an incoming alert, wait at # least 'group_wait' to send the initial notification. # This way ensures that you get multiple alerts for the same group that start # firing shortly after another are batched together on the first # notification. group_wait: 30s # When the first notification was sent, wait 'group_interval' to send a batch # of new alerts that started firing for that group. group_interval: 5m # If an alert has successfully been sent, wait 'repeat_interval' to # resend them. repeat_interval: 3h # A default receiver receiver: team-X-mails # All the above attributes are inherited by all child routes and can # overwritten on each. # The child route trees. routes: # This routes performs a regular expression match on alert labels to # catch alerts that are related to a list of services. - matchers: - service=~"foo1|foo2|baz" receiver: team-X-mails # The service has a sub-route for critical alerts, any alerts # that do not match, i.e. severity != critical, fall-back to the # parent node and are sent to 'team-X-mails' routes: - matchers: - severity="critical" receiver: team-X-pager - matchers: - service="files" receiver: team-Y-mails routes: - matchers: - severity="critical" receiver: team-Y-pager # This route handles all alerts coming from a database service. If there's # no team to handle it, it defaults to the DB team. - matchers: - service="database" receiver: team-DB-pager # Also group alerts by affected database. group_by: [alertname, cluster, database] routes: - matchers: - owner="team-X" receiver: team-X-pager continue: true - matchers: - owner="team-Y" receiver: team-Y-pager # Inhibition rules allow to mute a set of alerts given that another alert is # firing. # We use this to mute any warning-level notifications if the same alert is # already critical. inhibit_rules: - source_matchers: [severity="critical"] target_matchers: [severity="warning"] # Apply inhibition if the alertname is the same. # CAUTION: # If all label names listed in `equal` are missing # from both the source and target alerts, # the inhibition rule will apply! equal: [alertname, cluster, service] receivers: - name: 'team-X-mails' email_configs: - to: 'team-X+alerts@example.org' - name: 'team-X-pager' email_configs: - to: 'team-X+alerts-critical@example.org' pagerduty_configs: - service_key: - name: 'team-Y-mails' email_configs: - to: 'team-Y+alerts@example.org' - name: 'team-Y-pager' pagerduty_configs: - service_key: - name: 'team-DB-pager' pagerduty_configs: - service_key: prometheus-alertmanager-0.28.1+ds/docs/000077500000000000000000000000001476331240200177715ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/docs/alertmanager.md000066400000000000000000000060171476331240200227610ustar00rootroot00000000000000--- title: Alertmanager sort_rank: 2 nav_icon: sliders --- # Alertmanager The [Alertmanager](https://github.com/prometheus/alertmanager) handles alerts sent by client applications such as the Prometheus server. It takes care of deduplicating, grouping, and routing them to the correct receiver integration such as email, PagerDuty, or OpsGenie. It also takes care of silencing and inhibition of alerts. The following describes the core concepts the Alertmanager implements. Consult the [configuration documentation](configuration.md) to learn how to use them in more detail. ## Grouping Grouping categorizes alerts of similar nature into a single notification. This is especially useful during larger outages when many systems fail at once and hundreds to thousands of alerts may be firing simultaneously. **Example:** Dozens or hundreds of instances of a service are running in your cluster when a network partition occurs. Half of your service instances can no longer reach the database. Alerting rules in Prometheus were configured to send an alert for each service instance if it cannot communicate with the database. As a result hundreds of alerts are sent to Alertmanager. As a user, one only wants to get a single page while still being able to see exactly which service instances were affected. Thus one can configure Alertmanager to group alerts by their cluster and alertname so it sends a single compact notification. Grouping of alerts, timing for the grouped notifications, and the receivers of those notifications are configured by a routing tree in the configuration file. ## Inhibition Inhibition is a concept of suppressing notifications for certain alerts if certain other alerts are already firing. **Example:** An alert is firing that informs that an entire cluster is not reachable. Alertmanager can be configured to mute all other alerts concerning this cluster if that particular alert is firing. This prevents notifications for hundreds or thousands of firing alerts that are unrelated to the actual issue. Inhibitions are configured through the Alertmanager's configuration file. ## Silences Silences are a straightforward way to simply mute alerts for a given time. A silence is configured based on matchers, just like the routing tree. Incoming alerts are checked whether they match all the equality or regular expression matchers of an active silence. If they do, no notifications will be sent out for that alert. Silences are configured in the web interface of the Alertmanager. ## Client behavior The Alertmanager has [special requirements](clients.md) for behavior of its client. Those are only relevant for advanced use cases where Prometheus is not used to send alerts. ## High Availability Alertmanager supports configuration to create a cluster for high availability. This can be configured using the [--cluster-*](https://github.com/prometheus/alertmanager#high-availability) flags. It's important not to load balance traffic between Prometheus and its Alertmanagers, but instead, point Prometheus to a list of all Alertmanagers. prometheus-alertmanager-0.28.1+ds/docs/clients.md000066400000000000000000000034511476331240200217570ustar00rootroot00000000000000--- title: Clients sort_rank: 6 nav_icon: sliders --- # Sending alerts __**Disclaimer**: Prometheus automatically takes care of sending alerts generated by its configured [alerting rules](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/). It is highly recommended to configure alerting rules in Prometheus based on time series data rather than implementing a direct client.__ You send alerts to Alertmanager via API v2. The scheme for v2 is specified as an OpenAPI specification that can be found [here ](https://github.com/prometheus/alertmanager/blob/master/api/v2/openapi.yaml). API v1 was deprecated in Alertmanager version 0.16.0 and removed in Alertmanager version 0.27.0. Clients are expected to continuously re-send alerts as long as they are still active (usually on the order of 30 seconds to 3 minutes). Clients can push a list of alerts to Alertmanager via a POST request. The labels of each alert are used to identify identical instances of an alert and to perform deduplication. The annotations are always set to those received most recently and are not identifying an alert. Both `startsAt` and `endsAt` timestamp are optional. If `startsAt` is omitted, the current time is assigned by the Alertmanager. `endsAt` is only set if the end time of an alert is known. Otherwise it will be set to a configurable timeout period from the time since the alert was last received. The `generatorURL` field is a unique back-link which identifies the causing entity of this alert in the client. ```json [ { "labels": { "alertname": "", "": "", ... }, "annotations": { "": "", }, "startsAt": "", "endsAt": "", "generatorURL": "" }, ... ] ``` prometheus-alertmanager-0.28.1+ds/docs/configuration.md000066400000000000000000002011041476331240200231600ustar00rootroot00000000000000--- title: Configuration sort_rank: 3 nav_icon: sliders --- # Configuration [Alertmanager](https://github.com/prometheus/alertmanager) is configured via command-line flags and a configuration file. While the command-line flags configure immutable system parameters, the configuration file defines inhibition rules, notification routing and notification receivers. The [visual editor](https://www.prometheus.io/webtools/alerting/routing-tree-editor) can assist in building routing trees. To view all available command-line flags, run `alertmanager -h`. Alertmanager can reload its configuration at runtime. If the new configuration is not well-formed, the changes will not be applied and an error is logged. A configuration reload is triggered by sending a `SIGHUP` to the process or sending an HTTP POST request to the `/-/reload` endpoint. ## Limits Alertmanager supports a number of configurable limits via command-line flags. To limit the maximum number of silences, including expired ones, use the `--silences.max-silences` flag. You can limit the maximum size of individual silences with `--silences.max-per-silence-bytes`, where the unit is in bytes. Both limits are disabled by default. ## Configuration file introduction To specify which configuration file to load, use the `--config.file` flag. ```bash ./alertmanager --config.file=alertmanager.yml ``` The file is written in the [YAML format](http://en.wikipedia.org/wiki/YAML), defined by the scheme described below. Brackets indicate that a parameter is optional. For non-list parameters the value is set to the specified default. Generic placeholders are defined as follows: * ``: a duration matching the regular expression `((([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?|0)`, e.g. `1d`, `1h30m`, `5m`, `10s` * ``: a string matching the regular expression `[a-zA-Z_][a-zA-Z0-9_]*` * ``: a string of unicode characters * ``: a valid path in the current working directory * ``: a boolean that can take the values `true` or `false` * ``: a regular string * ``: a regular string that is a secret, such as a password * ``: a string which is template-expanded before usage * ``: a string which is template-expanded before usage that is a secret * ``: an integer value * ``: any valid [RE2 regular expression](https://github.com/google/re2/wiki/Syntax) (The regex is anchored on both ends. To un-anchor the regex, use `.*.*`.) The other placeholders are specified separately. A provided [valid example file](https://github.com/prometheus/alertmanager/blob/main/doc/examples/simple.yml) shows usage in context. ## File layout and global settings The global configuration specifies parameters that are valid in all other configuration contexts. They also serve as defaults for other configuration sections. The other top-level sections are documented below on this page. ```yaml global: # The default SMTP From header field. [ smtp_from: ] # The default SMTP smarthost used for sending emails, including port number. # Port number usually is 25, or 587 for SMTP over TLS (sometimes referred to as STARTTLS). # Example: smtp.example.org:587 [ smtp_smarthost: ] # The default hostname to identify to the SMTP server. [ smtp_hello: | default = "localhost" ] # SMTP Auth using CRAM-MD5, LOGIN and PLAIN. If empty, Alertmanager doesn't authenticate to the SMTP server. [ smtp_auth_username: ] # SMTP Auth using LOGIN and PLAIN. [ smtp_auth_password: ] # SMTP Auth using LOGIN and PLAIN. [ smtp_auth_password_file: ] # SMTP Auth using PLAIN. [ smtp_auth_identity: ] # SMTP Auth using CRAM-MD5. [ smtp_auth_secret: ] # The default SMTP TLS requirement. # Note that Go does not support unencrypted connections to remote SMTP endpoints. [ smtp_require_tls: | default = true ] # The default TLS configuration for SMTP receivers [ smtp_tls_config: ] # Default settings for the JIRA integration. [ jira_api_url: ] # The API URL to use for Slack notifications. [ slack_api_url: ] [ slack_api_url_file: ] [ victorops_api_key: ] [ victorops_api_key_file: ] [ victorops_api_url: | default = "https://alert.victorops.com/integrations/generic/20131114/alert/" ] [ pagerduty_url: | default = "https://events.pagerduty.com/v2/enqueue" ] [ opsgenie_api_key: ] [ opsgenie_api_key_file: ] [ opsgenie_api_url: | default = "https://api.opsgenie.com/" ] [ rocketchat_api_url: | default = "https://open.rocket.chat/" ] [ rocketchat_token: ] [ rocketchat_token_file: ] [ rocketchat_token_id: ] [ rocketchat_token_id_file: ] [ wechat_api_url: | default = "https://qyapi.weixin.qq.com/cgi-bin/" ] [ wechat_api_secret: ] [ wechat_api_corp_id: ] [ telegram_api_url: | default = "https://api.telegram.org" ] [ webex_api_url: | default = "https://webexapis.com/v1/messages" ] # The default HTTP client configuration [ http_config: ] # ResolveTimeout is the default value used by alertmanager if the alert does # not include EndsAt, after this time passes it can declare the alert as resolved if it has not been updated. # This has no impact on alerts from Prometheus, as they always include EndsAt. [ resolve_timeout: | default = 5m ] # Files from which custom notification template definitions are read. # The last component may use a wildcard matcher, e.g. 'templates/*.tmpl'. templates: [ - ... ] # The root node of the routing tree. route: # A list of notification receivers. receivers: - ... # A list of inhibition rules. inhibit_rules: [ - ... ] # DEPRECATED: use time_intervals below. # A list of mute time intervals for muting routes. mute_time_intervals: [ - ... ] # A list of time intervals for muting/activating routes. time_intervals: [ - ... ] ``` ## Route-related settings Routing-related settings allow configuring how alerts are routed, aggregated, throttled, and muted based on time. ### `` A route block defines a node in a routing tree and its children. Its optional configuration parameters are inherited from its parent node if not set. Every alert enters the routing tree at the configured top-level route, which must match all alerts (i.e. not have any configured matchers). It then traverses the child nodes. If `continue` is set to false, it stops after the first matching child. If `continue` is true on a matching node, the alert will continue matching against subsequent siblings. If an alert does not match any children of a node (no matching child nodes, or none exist), the alert is handled based on the configuration parameters of the current node. See [Alertmanager concepts](https://prometheus.io/docs/alerting/alertmanager/#grouping) for more information on grouping. ```yaml [ receiver: ] # The labels by which incoming alerts are grouped together. For example, # multiple alerts coming in for cluster=A and alertname=LatencyHigh would # be batched into a single group. # # To aggregate by all possible labels use the special value '...' as the sole label name, for example: # group_by: ['...'] # This effectively disables aggregation entirely, passing through all # alerts as-is. This is unlikely to be what you want, unless you have # a very low alert volume or your upstream notification system performs # its own grouping. [ group_by: '[' , ... ']' ] # Whether an alert should continue matching subsequent sibling nodes. [ continue: | default = false ] # DEPRECATED: Use matchers below. # A set of equality matchers an alert has to fulfill to match the node. match: [ : , ... ] # DEPRECATED: Use matchers below. # A set of regex-matchers an alert has to fulfill to match the node. match_re: [ : , ... ] # A list of matchers that an alert has to fulfill to match the node. matchers: [ - ... ] # How long to initially wait to send a notification for a group # of alerts. Allows to wait for an inhibiting alert to arrive or collect # more initial alerts for the same group. (Usually ~0s to few minutes.) # If omitted, child routes inherit the group_wait of the parent route. [ group_wait: | default = 30s ] # How long to wait before sending a notification about new alerts that # are added to a group of alerts for which an initial notification has # already been sent. (Usually ~5m or more.) If omitted, child routes # inherit the group_interval of the parent route. [ group_interval: | default = 5m ] # How long to wait before sending a notification again if it has already # been sent successfully for an alert. (Usually ~3h or more). If omitted, # child routes inherit the repeat_interval of the parent route. # Note that this parameter is implicitly bound by Alertmanager's # `--data.retention` configuration flag. Notifications will be resent after either # repeat_interval or the data retention period have passed, whichever # occurs first. `repeat_interval` should be a multiple of `group_interval`. [ repeat_interval: | default = 4h ] # Times when the route should be muted. These must match the name of a # time interval defined in the time_intervals section. # Additionally, the root node cannot have any mute times. # When a route is muted it will not send any notifications, but # otherwise acts normally (including ending the route-matching process # if the `continue` option is not set.) mute_time_intervals: [ - ...] # Times when the route should be active. These must match the name of a # time interval defined in the time_intervals section. An empty value # means that the route is always active. # Additionally, the root node cannot have any active times. # The route will send notifications only when active, but otherwise # acts normally (including ending the route-matching process # if the `continue` option is not set). active_time_intervals: [ - ...] # Zero or more child routes. routes: [ - ... ] ``` #### Example ```yaml # The root route with all parameters, which are inherited by the child # routes if they are not overwritten. route: receiver: 'default-receiver' group_wait: 30s group_interval: 5m repeat_interval: 4h group_by: [cluster, alertname] # All alerts that do not match the following child routes # will remain at the root node and be dispatched to 'default-receiver'. routes: # All alerts with service=mysql or service=cassandra # are dispatched to the database pager. - receiver: 'database-pager' group_wait: 10s matchers: - service=~"mysql|cassandra" # All alerts with the team=frontend label match this sub-route. # They are grouped by product and environment rather than cluster # and alertname. - receiver: 'frontend-pager' group_by: [product, environment] matchers: - team="frontend" # All alerts with the service=inhouse-service label match this sub-route. # the route will be muted during offhours and holidays time intervals. # even if it matches, it will continue to the next sub-route - receiver: 'dev-pager' matchers: - service="inhouse-service" mute_time_intervals: - offhours - holidays continue: true # All alerts with the service=inhouse-service label match this sub-route # the route will be active only during offhours and holidays time intervals. - receiver: 'on-call-pager' matchers: - service="inhouse-service" active_time_intervals: - offhours - holidays ``` ### `` A `time_interval` specifies a named interval of time that may be referenced in the routing tree to mute/activate particular routes for particular times of the day. ```yaml name: time_intervals: [ - ... ] ``` #### `` A `time_interval_spec` contains the actual definition for an interval of time. The syntax supports the following fields: ```yaml - times: [ - ...] weekdays: [ - ...] days_of_month: [ - ...] months: [ - ...] years: [ - ...] location: ``` All fields are lists. Within each non-empty list, at least one element must be satisfied to match the field. If a field is left unspecified, any value will match the field. For an instant of time to match a complete time interval, all fields must match. Some fields support ranges and negative indices, and are detailed below. If a time zone is not specified, then the times are taken to be in UTC. `time_range`: Ranges inclusive of the starting time and exclusive of the end time to make it easy to represent times that start/end on hour boundaries. For example, `start_time: '17:00'` and `end_time: '24:00'` will begin at 17:00 and finish immediately before 24:00. They are specified like so: ```yaml times: - start_time: HH:MM end_time: HH:MM ``` `weekday_range`: A list of days of the week, where the week begins on Sunday and ends on Saturday. Days should be specified by name (e.g. 'Sunday'). For convenience, ranges are also accepted of the form `:` and are inclusive on both ends. For example: `['monday:wednesday','saturday', 'sunday']` `days_of_month_range`: A list of numerical days in the month. Days begin at 1. Negative values are also accepted which begin at the end of the month, e.g. -1 during January would represent January 31. For example: `['1:5', '-3:-1']`. Extending past the start or end of the month will cause it to be clamped. E.g. specifying `['1:31']` during February will clamp the actual end date to 28 or 29 depending on leap years. Inclusive on both ends. `month_range`: A list of calendar months identified by a case-insensitive name (e.g. 'January') or by number, where January = 1. Ranges are also accepted. For example, `['1:3', 'may:august', 'december']`. Inclusive on both ends. `year_range`: A numerical list of years. Ranges are accepted. For example, `['2020:2022', '2030']`. Inclusive on both ends. `location`: A string that matches a location in the IANA time zone database. For example, `'Australia/Sydney'`. The location provides the time zone for the time interval. For example, a time interval with a location of `'Australia/Sydney'` that contained something like: ```yaml times: - start_time: 09:00 end_time: 17:00 weekdays: ['monday:friday'] ``` would include any time that fell between the hours of 9:00AM and 5:00PM, between Monday and Friday, using the local time in Sydney, Australia. You may also use `'Local'` as a location to use the local time of the machine where Alertmanager is running, or `'UTC'` for UTC time. If no timezone is provided, the time interval is taken to be in UTC time.**Note:** On Windows, only `Local` or `UTC` are supported unless you provide a custom time zone database using the `ZONEINFO` environment variable. ## Inhibition-related settings Inhibition allows muting a set of alerts based on the presence of another set of alerts. This allows establishing dependencies between systems or services such that only the most relevant of a set of interconnected alerts are sent out during an outage. See [Alertmanager concepts](https://prometheus.io/docs/alerting/alertmanager/#inhibition) for more information on inhibition. ### `` An inhibition rule mutes an alert (target) matching a set of matchers when an alert (source) exists that matches another set of matchers. Both target and source alerts must have the same label values for the label names in the `equal` list. Semantically, a missing label and a label with an empty value are the same thing. Therefore, if all the label names listed in `equal` are missing from both the source and target alerts, the inhibition rule will apply. To prevent an alert from inhibiting itself, an alert that matches _both_ the target and the source side of a rule cannot be inhibited by alerts for which the same is true (including itself). However, we recommend to choose target and source matchers in a way that alerts never match both sides. It is much easier to reason about and does not trigger this special case. ```yaml # DEPRECATED: Use target_matchers below. # Matchers that have to be fulfilled in the alerts to be muted. target_match: [ : , ... ] # DEPRECATED: Use target_matchers below. target_match_re: [ : , ... ] # A list of matchers that have to be fulfilled by the target # alerts to be muted. target_matchers: [ - ... ] # DEPRECATED: Use source_matchers below. # Matchers for which one or more alerts have to exist for the # inhibition to take effect. source_match: [ : , ... ] # DEPRECATED: Use source_matchers below. source_match_re: [ : , ... ] # A list of matchers for which one or more alerts have # to exist for the inhibition to take effect. source_matchers: [ - ... ] # Labels that must have an equal value in the source and target # alert for the inhibition to take effect. [ equal: '[' , ... ']' ] ``` ## Label matchers Label matchers match alerts to routes, silences, and inhibition rules. **Important**: Prometheus is adding support for UTF-8 in labels and metrics. In order to also support UTF-8 in the Alertmanager, Alertmanager versions 0.27 and later have a new parser for matchers that has a number of backwards incompatible changes. While most matchers will be forward-compatible, some will not. Alertmanager is operating a transition period where it supports both UTF-8 and classic matchers, and has provided a number of tools to help you prepare for the transition. If this is a new Alertmanager installation, we recommend enabling UTF-8 strict mode before creating an Alertmanager configuration file. You can find instructions on how to enable UTF-8 strict mode [here](#utf-8-strict-mode). If this is an existing Alertmanager installation, we recommend running the Alertmanager in the default mode called fallback mode before enabling UTF-8 strict mode. In this mode, Alertmanager will log a warning if you need to make any changes to your configuration file before UTF-8 strict mode can be enabled. Alertmanager will make UTF-8 strict mode the default in the next two versions, so it's important to transition as soon as possible. Irrespective of whether an Alertmanager installation is a new or existing installation, you can also use `amtool` to validate that an Alertmanager configuration file is compatible with UTF-8 strict mode before enabling it in Alertmanager server. You do not need a running Alertmanager server to do this. You can find instructions on how to validate an Alertmanager configuration file using `amtool` [here](#verification). ### Alertmanager server operational modes During the transition period, Alertmanager supports three modes of operation. These are known as fallback mode, UTF-8 strict mode and classic mode. Fallback mode is the default mode. Operators of Alertmanager servers should transition to UTF-8 strict mode before the end of the transition period. Alertmanager will make UTF-8 strict mode the default in the next two versions, so it's important to transition as soon as possible. #### Fallback mode Alertmanager runs in a special mode called fallback mode as its default mode. As operators, you should not experience any difference in how your routes, silences or inhibition rules work. In fallback mode, configurations are first parsed as UTF-8 matchers, and if incompatible with the UTF-8 parser, are then parsed as classic matchers. If your Alertmanager configuration contains matchers that are incompatible with the UTF-8 parser, Alertmanager will parse them as classic matchers and log a warning. This warning also includes a suggestion on how to change the matchers from classic matchers to UTF-8 matchers. For example: ``` ts=2024-02-11T10:00:00Z caller=parse.go:176 level=warn msg="Alertmanager is moving to a new parser for labels and matchers, and this input is incompatible. Alertmanager has instead parsed the input using the classic matchers parser as a fallback. To make this input compatible with the UTF-8 matchers parser please make sure all regular expressions and values are double-quoted and backslashes are escaped. If you are still seeing this message please open an issue." input="foo=" origin=config err="end of input: expected label value" suggestion="foo=\"\"" ``` Here the matcher `foo=` can be made into a valid UTF-8 matcher by double quoting the right hand side of the expression to give `foo=""`. These two matchers are equivalent, however with UTF-8 matchers the right hand side of the matcher is a required field. In rare cases, a configuration can cause disagreement between the UTF-8 and classic parser. This happens when a matcher is valid in both parsers, but due to added support for UTF-8, results in different parsings depending on which parser is used. If your Alertmanager configuration has disagreement, Alertmanager will use the classic parser and log a warning. For example: ``` ts=2024-02-11T10:00:00Z caller=parse.go:183 level=warn msg="Matchers input has disagreement" input="qux=\"\\xf0\\x9f\\x99\\x82\"\n" origin=config ``` Any occurrences of disagreement should be looked at on a case by case basis as depending on the nature of the disagreement, the configuration might not need updating before enabling UTF-8 strict mode. For example `\xf0\x9f\x99\x82` is the byte sequence for the 🙂 emoji. If the intention is to match a literal 🙂 emoji then no change is required. However, if the intention is to match the literal `\xf0\x9f\x99\x82` then the matcher should be changed to `qux="\\xf0\\x9f\\x99\\x82"`. #### UTF-8 strict mode In UTF-8 strict mode, Alertmanager disables support for classic matchers: ```bash alertmanager --config.file=config.yml --enable-feature="utf8-strict-mode" ``` This mode should be enabled for new Alertmanager installations, and existing Alertmanager installations once all warnings of incompatible matchers have been resolved. Alertmanager will not start in UTF-8 strict mode until all the warnings of incompatible matchers have been resolved: ``` ts=2024-02-11T10:00:00Z caller=coordinator.go:118 level=error component=configuration msg="Loading configuration file failed" file=config.yml err="end of input: expected label value" ``` UTF-8 strict mode will be the default mode of Alertmanager at the end of the transition period. #### Classic mode Classic mode is equivalent to Alertmanager versions 0.26.0 and older: ```bash alertmanager --config.file=config.yml --enable-feature="classic-mode" ``` You can use this mode if you suspect there is an issue with fallback mode or UTF-8 strict mode. In such cases, please open an issue on GitHub with as much information as possible. ### Verification You can use `amtool` to validate that an Alertmanager configuration file is compatible with UTF-8 strict mode before enabling it in Alertmanager server. You do not need a running Alertmanager server to do this. Just like Alertmanager server, `amtool` will log a warning if the configuration is incompatible or contains disagreement: ``` amtool check-config config.yml Checking 'config.yml' level=warn msg="Alertmanager is moving to a new parser for labels and matchers, and this input is incompatible. Alertmanager has instead parsed the input using the classic matchers parser as a fallback. To make this input compatible with the UTF-8 matchers parser please make sure all regular expressions and values are double-quoted and backslashes are escaped. If you are still seeing this message please open an issue." input="foo=" origin=config err="end of input: expected label value" suggestion="foo=\"\"" level=warn msg="Matchers input has disagreement" input="qux=\"\\xf0\\x9f\\x99\\x82\"\n" origin=config SUCCESS Found: - global config - route - 2 inhibit rules - 2 receivers - 0 templates ``` You will know if a configuration is compatible with UTF-8 strict mode when no warnings are logged in `amtool`: ``` amtool check-config config.yml Checking 'config.yml' SUCCESS Found: - global config - route - 2 inhibit rules - 2 receivers - 0 templates ``` You can also use `amtool` in UTF-8 strict mode as an additional level of verification. You will know that a configuration is invalid because the command will fail: ``` amtool check-config config.yml --enable-feature="utf8-strict-mode" level=warn msg="UTF-8 mode enabled" Checking 'config.yml' FAILED: end of input: expected label value amtool: error: failed to validate 1 file(s) ``` You will know that a configuration is valid because the command will succeed: ``` amtool check-config config.yml --enable-feature="utf8-strict-mode" level=warn msg="UTF-8 mode enabled" Checking 'config.yml' SUCCESS Found: - global config - route - 2 inhibit rules - 2 receivers - 0 templates ``` ### `` #### UTF-8 matchers A UTF-8 matcher consists of three tokens: - An unquoted literal or a double-quoted string for the label name. - One of `=`, `!=`, `=~`, or `!~`. `=` means equals, `!=` means not equal, `=~` means matches the regular expression and `!~` means doesn't match the regular expression. - An unquoted literal or a double-quoted string for the regular expression or label value. Unquoted literals can contain all UTF-8 characters other than the reserved characters. The reserved characters include whitespace and all characters in ``` { } ! = ~ , \ " ' ` ```. For example, `foo`, `[a-zA-Z]+`, and `Προμηθεύς` (Prometheus in Greek) are all examples of valid unquoted literals. However, `foo!` is not a valid literal as `!` is a reserved character. Double-quoted strings can contain all UTF-8 characters. Unlike unquoted literals, there are no reserved characters. However, literal double quotes and backslashes must be escaped with a single backslash. For example, to match the regular expression `\d+` the backslash must be escaped `"\\d+"`. This is because double-quoted strings follow the same rules as Go's [string literals](https://go.dev/ref/spec#String_literals). Double-quoted strings also support UTF-8 code points. For example, `"foo!"`, `"bar,baz"`, `"\"baz qux\""` and `"\xf0\x9f\x99\x82"`. #### Classic matchers A classic matcher is a string with a syntax inspired by PromQL and OpenMetrics. The syntax of a classic matcher consists of three tokens: - A valid Prometheus label name. - One of `=`, `!=`, `=~`, or `!~`. `=` means equals, `!=` means that the strings are not equal, `=~` is used for equality of regex expressions and `!~` is used for un-equality of regex expressions. They have the same meaning as known from PromQL selectors. - A UTF-8 string, which may be enclosed in double quotes. Before or after each token, there may be any amount of whitespace. The 3rd token may be the empty string. Within the 3rd token, OpenMetrics escaping rules apply: `\"` for a double-quote, `\n` for a line feed, `\\` for a literal backslash. Unescaped `"` must not occur inside the 3rd token (only as the 1st or last character). However, literal line feed characters are tolerated, as are single `\` characters not followed by `\`, `n`, or `"`. They act as a literal backslash in that case. #### Composition of matchers You can compose matchers to create complex match expressions. When composed, all matchers must match for the entire expression to match. For example, the expression `{alertname="Watchdog", severity=~"warning|critical"}` will match an alert with labels `alertname=Watchdog, severity=critical` but not an alert with labels `alertname=Watchdog, severity=none` as while the alertname is Watchdog the severity is neither warning nor critical. You can compose matchers into expressions with a YAML list: ```yaml matchers: - alertname = Watchdog - severity =~ "warning|critical" ``` or as a PromQL inspired expression where each matcher is comma separated: ``` {alertname="Watchdog", severity=~"warning|critical"} ``` A single trailing comma is permitted: ``` {alertname="Watchdog", severity=~"warning|critical",} ``` The open `{` and close `}` brace are optional: ``` alertname="Watchdog", severity=~"warning|critical" ``` However, both must be either present or omitted. You cannot have incomplete open or close braces: ``` {alertname="Watchdog", severity=~"warning|critical" ``` ``` alertname="Watchdog", severity=~"warning|critical"} ``` You cannot have duplicate open or close braces either: ``` {{alertname="Watchdog", severity=~"warning|critical",}} ``` Whitespace (spaces, tabs and newlines) is permitted outside double quotes and has no effect on the matchers themselves. For example: ``` { alertname = "Watchdog", severity =~ "warning|critical", } ``` is equivalent to: ``` {alertname="Watchdog",severity=~"warning|critical"} ``` #### More examples Here are some more examples: 1. Two equals matchers composed as a YAML list: ```yaml matchers: - foo = bar - dings != bums ``` 2. Two matchers combined composed as a short-form YAML list: ```yaml matchers: [ foo = bar, dings != bums ] ``` As shown below, in the short-form, it's better to use double quotes to avoid problems with special characters like commas: ```yaml matchers: [ "foo = \"bar,baz\"", "dings != bums" ] ``` 3. You can also put both matchers into one PromQL-like string. Single quotes work best here: ```yaml matchers: [ '{foo="bar", dings!="bums"}' ] ``` 4. To avoid issues with escaping and quoting rules in YAML, you can also use a YAML block: ```yaml matchers: - | {quote=~"She said: \"Hi, all!( How're you…)?\""} ``` ## General receiver-related settings These receiver settings allow configuring notification destinations (receivers) and HTTP client options for HTTP-based receivers. ### `` Receiver is a named configuration of one or more notification integrations. Note: As part of lifting the past moratorium on new receivers it was agreed that, in addition to the existing requirements, new notification integrations will be required to have a committed maintainer with push access. ```yaml # The unique name of the receiver. name: # Configurations for several notification integrations. discord_configs: [ - , ... ] email_configs: [ - , ... ] msteams_configs: [ - , ... ] msteamsv2_configs: [ - , ... ] jira_configs: [ - , ... ] opsgenie_configs: [ - , ... ] pagerduty_configs: [ - , ... ] pushover_configs: [ - , ... ] rocketchat_configs: [ - , ... ] slack_configs: [ - , ... ] sns_configs: [ - , ... ] telegram_configs: [ - , ... ] victorops_configs: [ - , ... ] webex_configs: [ - , ... ] webhook_configs: [ - , ... ] wechat_configs: [ - , ... ] ``` ### `` An `http_config` allows configuring the HTTP client that the receiver uses to communicate with HTTP-based API services. ```yaml # Note that `basic_auth` and `authorization` options are mutually exclusive. # Sets the `Authorization` header with the configured username and password. # password and password_file are mutually exclusive. basic_auth: [ username: ] [ password: ] [ password_file: ] # Optional the `Authorization` header configuration. authorization: # Sets the authentication type. [ type: | default: Bearer ] # Sets the credentials. It is mutually exclusive with # `credentials_file`. [ credentials: ] # Sets the credentials with the credentials read from the configured file. # It is mutually exclusive with `credentials`. [ credentials_file: ] # Optional OAuth 2.0 configuration. # Cannot be used at the same time as basic_auth or authorization. oauth2: [ ] # Whether to enable HTTP2. [ enable_http2: | default: true ] # Optional proxy URL. [ proxy_url: ] # Comma-separated string that can contain IPs, CIDR notation, domain names # that should be excluded from proxying. IP and domain names can # contain port numbers. [ no_proxy: ] # Use proxy URL indicated by environment variables (HTTP_PROXY, http_proxy, HTTPS_PROXY, https_proxy, NO_PROXY, and no_proxy) [ proxy_from_environment: | default: false ] # Specifies headers to send to proxies during CONNECT requests. [ proxy_connect_header: [ : [, ...] ] ] # Configure whether HTTP requests follow HTTP 3xx redirects. [ follow_redirects: | default = true ] # Configures the TLS settings. tls_config: [ ] ``` #### `` OAuth 2.0 authentication using the client credentials grant type. Alertmanager fetches an access token from the specified endpoint with the given client access and secret keys. ```yaml client_id: [ client_secret: ] # Read the client secret from a file. # It is mutually exclusive with `client_secret`. [ client_secret_file: ] # Scopes for the token request. scopes: [ - ... ] # The URL to fetch the token from. token_url: # Optional parameters to append to the token URL. endpoint_params: [ : ... ] # Configures the token request's TLS settings. tls_config: [ ] # Optional proxy URL. [ proxy_url: ] # Comma-separated string that can contain IPs, CIDR notation, domain names # that should be excluded from proxying. IP and domain names can # contain port numbers. [ no_proxy: ] # Use proxy URL indicated by environment variables (HTTP_PROXY, https_proxy, HTTPs_PROXY, https_proxy, and no_proxy) [ proxy_from_environment: | default: false ] # Specifies headers to send to proxies during CONNECT requests. [ proxy_connect_header: [ : [, ...] ] ] ``` #### `` A `tls_config` allows configuring TLS connections. ```yaml # CA certificate to validate the server certificate with. [ ca_file: ] # Certificate and key files for client cert authentication to the server. [ cert_file: ] [ key_file: ] # ServerName extension to indicate the name of the server. # http://tools.ietf.org/html/rfc4366#section-3.1 [ server_name: ] # Disable validation of the server certificate. [ insecure_skip_verify: | default = false] # Minimum acceptable TLS version. Accepted values: TLS10 (TLS 1.0), TLS11 (TLS # 1.1), TLS12 (TLS 1.2), TLS13 (TLS 1.3). # If unset, Prometheus will use Go default minimum version, which is TLS 1.2. # See MinVersion in https://pkg.go.dev/crypto/tls#Config. [ min_version: ] # Maximum acceptable TLS version. Accepted values: TLS10 (TLS 1.0), TLS11 (TLS # 1.1), TLS12 (TLS 1.2), TLS13 (TLS 1.3). # If unset, Prometheus will use Go default maximum version, which is TLS 1.3. # See MaxVersion in https://pkg.go.dev/crypto/tls#Config. [ max_version: ] ``` ## Receiver integration settings These settings allow configuring specific receiver integrations. ### `` Discord notifications are sent via the [Discord webhook API](https://discord.com/developers/docs/resources/webhook). See Discord's ["Intro to Webhooks" article](https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks) to learn how to configure a webhook integration for a channel. ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] # The Discord webhook URL. # webhook_url and webhook_url_file are mutually exclusive. webhook_url: webhook_url_file: # Message title template. [ title: | default = '{{ template "discord.default.title" . }}' ] # Message body template. [ message: | default = '{{ template "discord.default.message" . }}' ] # Message content template. Limited to 2000 characters. [ content: | default = '{{ template "discord.default.content" . }}' ] # Message username. [ username: | default = '' ] # Message avatar URL. [ avatar_url: | default = '' ] # The HTTP client's configuration. [ http_config: | default = global.http_config ] ``` ### `` ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = false ] # The email address to send notifications to. # Allows a comma separated list of rfc5322 compliant email addresses. to: # The sender's address. [ from: | default = global.smtp_from ] # The SMTP host through which emails are sent. [ smarthost: | default = global.smtp_smarthost ] # The hostname to identify to the SMTP server. [ hello: | default = global.smtp_hello ] # SMTP authentication information. # auth_password and auth_password_file are mutually exclusive. [ auth_username: | default = global.smtp_auth_username ] [ auth_password: | default = global.smtp_auth_password ] [ auth_password_file: | default = global.smtp_auth_password_file ] [ auth_secret: | default = global.smtp_auth_secret ] [ auth_identity: | default = global.smtp_auth_identity ] # The SMTP TLS requirement. # Note that Go does not support unencrypted connections to remote SMTP endpoints. [ require_tls: | default = global.smtp_require_tls ] # TLS configuration. tls_config: [ | default = global.smtp_tls_config ] # The HTML body of the email notification. [ html: | default = '{{ template "email.default.html" . }}' ] # The text body of the email notification. [ text: ] # Further headers email header key/value pairs. Overrides any headers # previously set by the notification implementation. [ headers: { : , ... } ] ``` ### `` Microsoft Teams notifications are sent via the [Incoming Webhooks](https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/what-are-webhooks-and-connectors) API endpoint. DEPRECATION NOTICE: Microsoft is deprecating the creation and usage of [Microsoft 365 connectors via Microsoft Teams](https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/). Consider migrating to using [Workflows](https://learn.microsoft.com/en-us/power-automate/teams/send-a-message-in-teams) with the msteamsv2 config. ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] # The incoming webhook URL. # webhook_url and webhook_url_file are mutually exclusive. [ webhook_url: ] [ webhook_url_file: ] # Message title template. [ title: | default = '{{ template "msteams.default.title" . }}' ] # Message summary template. [ summary: | default = '{{ template "msteams.default.summary" . }}' ] # Message body template. [ text: | default = '{{ template "msteams.default.text" . }}' ] # The HTTP client's configuration. [ http_config: | default = global.http_config ] ``` ### `` Microsoft Teams v2 notifications using the new message format with adaptive cards as required by [flows](https://learn.microsoft.com/en-us/power-automate/teams/overview). Please follow [the documentation](https://support.microsoft.com/en-gb/office/create-incoming-webhooks-with-workflows-for-microsoft-teams-8ae491c7-0394-4861-ba59-055e33f75498) for more information on how to set up this integration. ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] # The incoming webhook URL. # webhook_url and webhook_url_file are mutually exclusive. [ webhook_url: ] [ webhook_url_file: ] # Message title template. [ title: | default = '{{ template "msteamsv2.default.title" . }}' ] # Message body template. [ text: | default = '{{ template "msteamsv2.default.text" . }}' ] # The HTTP client's configuration. [ http_config: | default = global.http_config ] ``` ### `` JIRA notifications are sent via [JIRA Rest API v2](https://developer.atlassian.com/cloud/jira/platform/rest/v2/intro/) or [JIRA REST API v3](https://developer.atlassian.com/cloud/jira/platform/rest/v3/intro/#version). Note: This integration is only tested against a Jira Cloud instance. Jira Data Center (on premise instance) can work, but it's not guaranteed. Both APIs have the same feature set. The difference is that V2 supports [Wiki Markup](https://jira.atlassian.com/secure/WikiRendererHelpAction.jspa?section=all) for the issue description and V3 supports [Atlassian Document Format (ADF)](https://developer.atlassian.com/cloud/jira/platform/apis/document/structure/). The default `jira.default.description` template only works with V2. ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] # The URL to send API requests to. The full API path must be included. # Example: https://company.atlassian.net/rest/api/2/ [ api_url: | default = global.jira_api_url ] # The project key where issues are created. project: # Issue summary template. [ summary: | default = '{{ template "jira.default.summary" . }}' ] # Issue description template. [ description: | default = '{{ template "jira.default.description" . }}' ] # Labels to be added to the issue. labels: [ - ... ] # Priority of the issue. [ priority: | default = '{{ template "jira.default.priority" . }}' ] # Type of the issue (e.g. Bug). [ issue_type: ] # Name of the workflow transition to resolve an issue. The target status must have the category "done". # NOTE: The name of the transition can be localized and depends on the language setting of the service account. [ resolve_transition: ] # Name of the workflow transition to reopen an issue. The target status should not have the category "done". # NOTE: The name of the transition can be localized and depends on the language setting of the service account. [ reopen_transition: ] # If reopen_transition is defined, ignore issues with that resolution. [ wont_fix_resolution: ] # If reopen_transition is defined, reopen the issue when it is not older than this value (rounded down to the nearest minute). # The resolutiondate field is used to determine the age of the issue. [ reopen_duration: ] # Other issue and custom fields. fields: [ : ... ] # The HTTP client's configuration. You must use this configuration to supply the personal access token (PAT) as part of the HTTP `Authorization` header. # For Jira Cloud, use basic_auth with the email address as the username and the PAT as the password. # For Jira Data Center, use the 'authorization' field with 'credentials: '. [ http_config: | default = global.http_config ] ``` The `labels` field is a list of labels added to the issue. Template expressions are supported. For example: ```yaml labels: - 'alertmanager' - '{{ .CommonLabels.severity }}' ``` #### `` Jira issue field can have multiple types. Depends on the field type, the values must be provided differently. See https://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/#setting-custom-field-data-for-other-field-types for further examples. ```yaml fields: # Components components: { name: "Monitoring" } # Custom Field TextField customfield_10001: "Random text" # Custom Field SelectList customfield_10002: {"value": "red"} # Custom Field MultiSelect customfield_10003: [{"value": "red"}, {"value": "blue"}, {"value": "green"}] ``` ### `` OpsGenie notifications are sent via the [OpsGenie API](https://docs.opsgenie.com/docs/alert-api). ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] # The API key to use when talking to the OpsGenie API. [ api_key: | default = global.opsgenie_api_key ] # The filepath to API key to use when talking to the OpsGenie API. Conflicts with api_key. [ api_key_file: | default = global.opsgenie_api_key_file ] # The host to send OpsGenie API requests to. [ api_url: | default = global.opsgenie_api_url ] # Alert text limited to 130 characters. [ message: | default = '{{ template "opsgenie.default.message" . }}' ] # A description of the alert. [ description: | default = '{{ template "opsgenie.default.description" . }}' ] # A backlink to the sender of the notification. [ source: | default = '{{ template "opsgenie.default.source" . }}' ] # A set of arbitrary key/value pairs that provide further detail # about the alert. # All common labels are included as details by default. [ details: { : , ... } ] # List of responders responsible for notifications. responders: [ - ... ] # Comma separated list of tags attached to the notifications. [ tags: ] # Additional alert note. [ note: ] # Priority level of alert. Possible values are P1, P2, P3, P4, and P5. [ priority: ] # Whether to update message and description of the alert in OpsGenie if it already exists # By default, the alert is never updated in OpsGenie, the new message only appears in activity log. [ update_alerts: | default = false ] # Optional field that can be used to specify which domain alert is related to. [ entity: ] # Comma separated list of actions that will be available for the alert. [ actions: ] # The HTTP client's configuration. [ http_config: | default = global.http_config ] ``` #### `` ```yaml # Exactly one of these fields should be defined. [ id: ] [ name: ] [ username: ] # One of `team`, `teams`, `user`, `escalation` or `schedule`. # # The `teams` responder is configured using the `name` field above. # This field can contain a comma-separated list of team names. # If the list is empty, no responders are configured. type: ``` ### `` PagerDuty notifications are sent via the [PagerDuty API](https://developer.pagerduty.com/documentation/integration/events). PagerDuty provides [documentation](https://www.pagerduty.com/docs/guides/prometheus-integration-guide/) on how to integrate. There are important differences with Alertmanager's v0.11 and greater support of PagerDuty's Events API v2. ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] # The routing and service keys are mutually exclusive. # The PagerDuty integration key (when using PagerDuty integration type `Events API v2`). # It is mutually exclusive with `routing_key_file`. routing_key: # Read the Pager Duty routing key from a file. # It is mutually exclusive with `routing_key`. routing_key_file: # The PagerDuty integration key (when using PagerDuty integration type `Prometheus`). # It is mutually exclusive with `service_key_file`. service_key: # Read the Pager Duty service key from a file. # It is mutually exclusive with `service_key`. service_key_file: # The URL to send API requests to [ url: | default = global.pagerduty_url ] # The client identification of the Alertmanager. [ client: | default = '{{ template "pagerduty.default.client" . }}' ] # A backlink to the sender of the notification. [ client_url: | default = '{{ template "pagerduty.default.clientURL" . }}' ] # A description of the incident. [ description: | default = '{{ template "pagerduty.default.description" .}}' ] # Severity of the incident. [ severity: | default = 'error' ] # Unique location of the affected system. [ source: | default = client ] # A set of arbitrary key/value pairs that provide further detail # about the incident. [ details: { : , ... } | default = { firing: '{{ template "pagerduty.default.instances" .Alerts.Firing }}' resolved: '{{ template "pagerduty.default.instances" .Alerts.Resolved }}' num_firing: '{{ .Alerts.Firing | len }}' num_resolved: '{{ .Alerts.Resolved | len }}' } ] # Images to attach to the incident. images: [ ... ] # Links to attach to the incident. links: [ ... ] # The part or component of the affected system that is broken. [ component: ] # A cluster or grouping of sources. [ group: ] # The class/type of the event. [ class: ] # The HTTP client's configuration. [ http_config: | default = global.http_config ] ``` #### `` The fields are documented in the [PagerDuty API documentation](https://developer.pagerduty.com/docs/events-api-v2/trigger-events/#the-images-property). ```yaml href: src: alt: ``` #### `` The fields are documented in the [PagerDuty API documentation](https://developer.pagerduty.com/docs/events-api-v2/trigger-events/#the-links-property). ```yaml href: text: ``` ### `` Pushover notifications are sent via the [Pushover API](https://pushover.net/api). ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] # The recipient user's key. # user_key and user_key_file are mutually exclusive. user_key: user_key_file: # Your registered application's API token, see https://pushover.net/apps # You can also register a token by cloning this Prometheus app: # https://pushover.net/apps/clone/prometheus # token and token_file are mutually exclusive. token: token_file: # Notification title. [ title: | default = '{{ template "pushover.default.title" . }}' ] # Notification message. [ message: | default = '{{ template "pushover.default.message" . }}' ] # A supplementary URL shown alongside the message. [ url: | default = '{{ template "pushover.default.url" . }}' ] # Optional device to send notification to, see https://pushover.net/api#device [ device: ] # Optional sound to use for notification, see https://pushover.net/api#sound [ sound: ] # Priority, see https://pushover.net/api#priority [ priority: | default = '{{ if eq .Status "firing" }}2{{ else }}0{{ end }}' ] # How often the Pushover servers will send the same notification to the user. # Must be at least 30 seconds. [ retry: | default = 1m ] # How long your notification will continue to be retried for, unless the user # acknowledges the notification. [ expire: | default = 1h ] # Optional time to live (TTL) to use for notification, see https://pushover.net/api#ttl [ ttl: ] # The HTTP client's configuration. [ http_config: | default = global.http_config ] ``` ### `` Rocketchat notifications are sent via the [Rocketchat REST API](https://developer.rocket.chat/reference/api/rest-api/endpoints/messaging/chat-endpoints/postmessage). ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] [ api_url: | default = global.rocketchat_api_url ] [ channel: | default = global.rocketchat_api_url ] # The sender token and token_id # See https://docs.rocket.chat/use-rocket.chat/user-guides/user-panel/my-account#personal-access-tokens # token and token_file are mutually exclusive. # token_id and token_id_file are mutually exclusive. token: token_file: token_id: token_id_file: [ color: ... ] [ image_url ] [ thumb_url ] [ link_names ] [ short_fields: | default = false ] actions: [ ... ] ``` #### `` The fields are documented in the [Rocketchat API documentation](https://developer.rocket.chat/reference/api/rest-api/endpoints/messaging/chat-endpoints/postmessage#attachment-field-objects). ```yaml [ title: ] [ value: ] [ short: | default = rocketchat_config.short_fields ] ``` #### `` The fields are documented in the [Rocketchat API api models](https://github.com/RocketChat/Rocket.Chat.Go.SDK/blob/master/models/message.go). ```yaml [ type: | ignored, only "button" is supported ] [ text: ] [ url: ] [ msg: ] ``` #### `` Slack notifications can be sent via [Incoming webhooks](https://api.slack.com/messaging/webhooks) or [Bot tokens](https://api.slack.com/authentication/token-types). If using an incoming webhook then `api_url` must be set to the URL of the incoming webhook, or written to the file referenced in `api_url_file`. If using Bot tokens then `api_url` must be set to [`https://slack.com/api/chat.postMessage`](https://api.slack.com/methods/chat.postMessage), the bot token must be set as the authorization credentials in `http_config`, and `channel` must contain either the name of the channel or Channel ID to send notifications to. If using the name of the channel the # is optional. The notification contains an [attachment](https://api.slack.com/messaging/composing/layouts#attachments). ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = false ] # The Slack webhook URL. Either api_url or api_url_file should be set. # Defaults to global settings if none are set here. [ api_url: | default = global.slack_api_url ] [ api_url_file: | default = global.slack_api_url_file ] # The channel or user to send notifications to. channel: # API request data as defined by the Slack webhook API. [ icon_emoji: ] [ icon_url: ] [ link_names: | default = false ] [ username: | default = '{{ template "slack.default.username" . }}' ] # The following parameters define the attachment. actions: [ ... ] [ callback_id: | default = '{{ template "slack.default.callbackid" . }}' ] [ color: | default = '{{ if eq .Status "firing" }}danger{{ else }}good{{ end }}' ] [ fallback: | default = '{{ template "slack.default.fallback" . }}' ] fields: [ ... ] [ footer: | default = '{{ template "slack.default.footer" . }}' ] [ mrkdwn_in: '[' , ... ']' | default = ["fallback", "pretext", "text"] ] [ pretext: | default = '{{ template "slack.default.pretext" . }}' ] [ short_fields: | default = false ] [ text: | default = '{{ template "slack.default.text" . }}' ] [ title: | default = '{{ template "slack.default.title" . }}' ] [ title_link: | default = '{{ template "slack.default.titlelink" . }}' ] [ image_url: ] [ thumb_url: ] # The HTTP client's configuration. [ http_config: | default = global.http_config ] ``` #### `` The fields are documented in the Slack API documentation for [message attachments](https://api.slack.com/messaging/composing/layouts#attachments) and [interactive messages](https://api.slack.com/legacy/interactive-message-field-guide#action_fields). ```yaml text: type: # Either url or name and value are mandatory. [ url: ] [ name: ] [ value: ] [ confirm: ] [ style: | default = '' ] ``` ##### `` The fields are documented in the [Slack API documentation](https://api.slack.com/legacy/interactive-message-field-guide#confirmation_fields). ```yaml text: [ dismiss_text: | default '' ] [ ok_text: | default '' ] [ title: | default '' ] ``` #### `` The fields are documented in the [Slack API documentation](https://api.slack.com/messaging/composing/layouts#attachments). ```yaml title: value: [ short: | default = slack_config.short_fields ] ``` ### `` ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] # The SNS API URL i.e. https://sns.us-east-2.amazonaws.com. # If not specified, the SNS API URL from the SNS SDK will be used. [ api_url: ] # Configures AWS's Signature Verification 4 signing process to sign requests. sigv4: [ ] # SNS topic ARN, i.e. arn:aws:sns:us-east-2:698519295917:My-Topic # If you don't specify this value, you must specify a value for the phone_number or target_arn. # If you are using a FIFO SNS topic you should set a message group interval longer than 5 minutes # to prevent messages with the same group key being deduplicated by the SNS default deduplication window [ topic_arn: ] # Subject line when the message is delivered to email endpoints. [ subject: | default = '{{ template "sns.default.subject" .}}' ] # Phone number if message is delivered via SMS in E.164 format. # If you don't specify this value, you must specify a value for the topic_arn or target_arn. [ phone_number: ] # The mobile platform endpoint ARN if message is delivered via mobile notifications. # If you don't specify this value, you must specify a value for the topic_arn or phone_number. [ target_arn: ] # The message content of the SNS notification. [ message: | default = '{{ template "sns.default.message" .}}' ] # SNS message attributes. attributes: [ : ... ] # The HTTP client's configuration. [ http_config: | default = global.http_config ] ``` #### `` ```yaml # The AWS region. If blank, the region from the default credentials chain is used. [ region: ] # The AWS API keys. Both access_key and secret_key must be supplied or both must be blank. # If blank the environment variables `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` are used. [ access_key: ] [ secret_key: ] # Named AWS profile used to authenticate. [ profile: ] # AWS Role ARN, an alternative to using AWS API keys. [ role_arn: ] ``` ### `` ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] # The Telegram API URL i.e. https://api.telegram.org. # If not specified, default API URL will be used. [ api_url: | default = global.telegram_api_url ] # Telegram bot token. It is mutually exclusive with `bot_token_file`. [ bot_token: ] # Read the Telegram bot token from a file. It is mutually exclusive with `bot_token`. [ bot_token_file: ] # ID of the chat where to send the messages. [ chat_id: ] # Optional ID of the message thread where to send the messages. [ message_thread_id: ] # Message template. [ message: default = '{{ template "telegram.default.message" .}}' ] # Disable telegram notifications [ disable_notifications: | default = false ] # Parse mode for telegram message, supported values are MarkdownV2, Markdown, HTML and empty string for plain text. [ parse_mode: | default = "HTML" ] # The HTTP client's configuration. [ http_config: | default = global.http_config ] ``` ### `` VictorOps notifications are sent out via the [VictorOps API](https://help.victorops.com/knowledge-base/rest-endpoint-integration-guide/) ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] # The API key to use when talking to the VictorOps API. # It is mutually exclusive with `api_key_file`. [ api_key: | default = global.victorops_api_key ] # Reads the API key to use when talking to the VictorOps API from a file. # It is mutually exclusive with `api_key`. [ api_key_file: | default = global.victorops_api_key_file ] # The VictorOps API URL. [ api_url: | default = global.victorops_api_url ] # A key used to map the alert to a team. routing_key: # Describes the behavior of the alert (CRITICAL, WARNING, INFO). [ message_type: | default = 'CRITICAL' ] # Contains summary of the alerted problem. [ entity_display_name: | default = '{{ template "victorops.default.entity_display_name" . }}' ] # Contains long explanation of the alerted problem. [ state_message: | default = '{{ template "victorops.default.state_message" . }}' ] # The monitoring tool the state message is from. [ monitoring_tool: | default = '{{ template "victorops.default.monitoring_tool" . }}' ] # The HTTP client's configuration. [ http_config: | default = global.http_config ] ``` ### `` The webhook receiver allows configuring a generic receiver. ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] # The endpoint to send HTTP POST requests to. # url and url_file are mutually exclusive. url: url_file: # The HTTP client's configuration. [ http_config: | default = global.http_config ] # The maximum number of alerts to include in a single webhook message. Alerts # above this threshold are truncated. When leaving this at its default value of # 0, all alerts are included. [ max_alerts: | default = 0 ] # The maximum time to wait for a webhook request to complete, before failing the # request and allowing it to be retried. The default value of 0s indicates that # no timeout should be applied. # NOTE: This will have no effect if set higher than the group_interval. [ timeout: | default = 0s ] ``` The Alertmanager will send HTTP POST requests in the following JSON format to the configured endpoint: ``` { "version": "4", "groupKey": , // key identifying the group of alerts (e.g. to deduplicate) "truncatedAlerts": , // how many alerts have been truncated due to "max_alerts" "status": "", "receiver": , "groupLabels": , "commonLabels": , "commonAnnotations": , "externalURL": , // backlink to the Alertmanager. "alerts": [ { "status": "", "labels": , "annotations": , "startsAt": "", "endsAt": "", "generatorURL": , // identifies the entity that caused the alert "fingerprint": // fingerprint to identify the alert }, ... ] } ``` There is a list of [integrations](https://prometheus.io/docs/operating/integrations/#alertmanager-webhook-receiver) with this feature. ### `` WeChat notifications are sent via the [WeChat API](https://developers.weixin.qq.com/doc/offiaccount/en/Message_Management/Service_Center_messages.html). ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = false ] # The API key to use when talking to the WeChat API. [ api_secret: | default = global.wechat_api_secret ] # The WeChat API URL. [ api_url: | default = global.wechat_api_url ] # The corp id for authentication. [ corp_id: | default = global.wechat_api_corp_id ] # API request data as defined by the WeChat API. [ message: | default = '{{ template "wechat.default.message" . }}' ] # Type of the message type, supported values are `text` and `markdown`. [ message_type: | default = 'text' ] [ agent_id: | default = '{{ template "wechat.default.agent_id" . }}' ] [ to_user: | default = '{{ template "wechat.default.to_user" . }}' ] [ to_party: | default = '{{ template "wechat.default.to_party" . }}' ] [ to_tag: | default = '{{ template "wechat.default.to_tag" . }}' ] ``` ### `` ```yaml # Whether to notify about resolved alerts. [ send_resolved: | default = true ] # The Webex Teams API URL i.e. https://webexapis.com/v1/messages # If not specified, default API URL will be used. [ api_url: | default = global.webex_api_url ] # ID of the Webex Teams room where to send the messages. room_id: # Message template. [ message: default = '{{ template "webex.default.message" .}}' ] # The HTTP client's configuration. You must use this configuration to supply the bot token as part of the HTTP `Authorization` header. [ http_config: | default = global.http_config ] ``` prometheus-alertmanager-0.28.1+ds/docs/https.md000066400000000000000000000150111476331240200214530ustar00rootroot00000000000000--- title: HTTPS and authentication sort_rank: 11 --- # HTTPS and authentication Alertmanager supports basic authentication and TLS. This is **experimental** and might change in the future. Currently TLS is supported for the HTTP traffic and gossip traffic. ## HTTP Traffic To specify which web configuration file to load, use the `--web.config.file` flag. The file is written in [YAML format](https://en.wikipedia.org/wiki/YAML), defined by the scheme described below. Brackets indicate that a parameter is optional. For non-list parameters the value is set to the specified default. The file is read upon every http request, such as any change in the configuration and the certificates is picked up immediately. Generic placeholders are defined as follows: * ``: a boolean that can take the values `true` or `false` * ``: a valid path in the current working directory * ``: a regular string that is a secret, such as a password * ``: a regular string ``` tls_server_config: # Certificate and key files for server to use to authenticate to client. cert_file: key_file: # Server policy for client authentication. Maps to ClientAuth Policies. # For more detail on clientAuth options: # https://golang.org/pkg/crypto/tls/#ClientAuthType # # NOTE: If you want to enable client authentication, you need to use # RequireAndVerifyClientCert. Other values are insecure. [ client_auth_type: | default = "NoClientCert" ] # CA certificate for client certificate authentication to the server. [ client_ca_file: ] # Minimum TLS version that is acceptable. [ min_version: | default = "TLS12" ] # Maximum TLS version that is acceptable. [ max_version: | default = "TLS13" ] # List of supported cipher suites for TLS versions up to TLS 1.2. If empty, # Go default cipher suites are used. Available cipher suites are documented # in the go documentation: # https://golang.org/pkg/crypto/tls/#pkg-constants # # Note that only the cipher returned by the following function are supported: # https://pkg.go.dev/crypto/tls#CipherSuites [ cipher_suites: [ - ] ] # prefer_server_cipher_suites controls whether the server selects the # client's most preferred ciphersuite, or the server's most preferred # ciphersuite. If true then the server's preference, as expressed in # the order of elements in cipher_suites, is used. [ prefer_server_cipher_suites: | default = true ] # Elliptic curves that will be used in an ECDHE handshake, in preference # order. Available curves are documented in the go documentation: # https://golang.org/pkg/crypto/tls/#CurveID [ curve_preferences: [ - ] ] http_server_config: # Enable HTTP/2 support. Note that HTTP/2 is only supported with TLS. # This can not be changed on the fly. [ http2: | default = true ] # List of headers that can be added to HTTP responses. [ headers: # Set the Content-Security-Policy header to HTTP responses. # Unset if blank. [ Content-Security-Policy: ] # Set the X-Frame-Options header to HTTP responses. # Unset if blank. Accepted values are deny and sameorigin. # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options [ X-Frame-Options: ] # Set the X-Content-Type-Options header to HTTP responses. # Unset if blank. Accepted value is nosniff. # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options [ X-Content-Type-Options: ] # Set the X-XSS-Protection header to all responses. # Unset if blank. # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection [ X-XSS-Protection: ] # Set the Strict-Transport-Security header to HTTP responses. # Unset if blank. # Please make sure that you use this with care as this header might force # browsers to load Prometheus and the other applications hosted on the same # domain and subdomains over HTTPS. # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security [ Strict-Transport-Security: ] ] # Usernames and hashed passwords that have full access to the web # server via basic authentication. If empty, no basic authentication is # required. Passwords are hashed with bcrypt. basic_auth_users: [ : ... ] ``` ## Gossip Traffic To specify whether to use mutual TLS for gossip, use the `--cluster.tls-config` flag. The server and client sides of the gossip are configurable. ``` tls_server_config: # Certificate and key files for server to use to authenticate to client. cert_file: key_file: # Server policy for client authentication. Maps to ClientAuth Policies. # For more detail on clientAuth options: # https://golang.org/pkg/crypto/tls/#ClientAuthType [ client_auth_type: | default = "NoClientCert" ] # CA certificate for client certificate authentication to the server. [ client_ca_file: ] # Minimum TLS version that is acceptable. [ min_version: | default = "TLS12" ] # Maximum TLS version that is acceptable. [ max_version: | default = "TLS13" ] # List of supported cipher suites for TLS versions up to TLS 1.2. If empty, # Go default cipher suites are used. Available cipher suites are documented # in the go documentation: # https://golang.org/pkg/crypto/tls/#pkg-constants [ cipher_suites: [ - ] ] # prefer_server_cipher_suites controls whether the server selects the # client's most preferred ciphersuite, or the server's most preferred # ciphersuite. If true then the server's preference, as expressed in # the order of elements in cipher_suites, is used. [ prefer_server_cipher_suites: | default = true ] # Elliptic curves that will be used in an ECDHE handshake, in preference # order. Available curves are documented in the go documentation: # https://golang.org/pkg/crypto/tls/#CurveID [ curve_preferences: [ - ] ] tls_client_config: # Path to the CA certificate with which to validate the server certificate. [ ca_file: ] # Certificate and key files for client cert authentication to the server. [ cert_file: ] [ key_file: ] # Server name extension to indicate the name of the server. # http://tools.ietf.org/html/rfc4366#section-3.1 [ server_name: ] # Disable validation of the server certificate. [ insecure_skip_verify: | default = false] ``` prometheus-alertmanager-0.28.1+ds/docs/index.md000066400000000000000000000000661476331240200214240ustar00rootroot00000000000000--- title: Alerting sort_rank: 7 nav_icon: bell-o --- prometheus-alertmanager-0.28.1+ds/docs/management_api.md000066400000000000000000000012251476331240200232600ustar00rootroot00000000000000--- title: Management API sort_rank: 9 --- # Management API Alertmanager provides a set of management API to ease automation and integrations. ### Health check ``` GET /-/healthy HEAD /-/healthy ``` This endpoint always returns 200 and should be used to check Alertmanager health. ### Readiness check ``` GET /-/ready HEAD /-/ready ``` This endpoint returns 200 when Alertmanager is ready to serve traffic (i.e. respond to queries). ### Reload ``` POST /-/reload ``` This endpoint triggers a reload of the Alertmanager configuration file. An alternative way to trigger a configuration reload is by sending a `SIGHUP` to the Alertmanager process. prometheus-alertmanager-0.28.1+ds/docs/notification_examples.md000066400000000000000000000064171476331240200247070ustar00rootroot00000000000000--- title: Notification template examples sort_rank: 8 --- # Notification Template Examples The following are all different examples of alerts and corresponding Alertmanager configuration file setups (alertmanager.yml). Each use the [Go templating](http://golang.org/pkg/text/template/) system. ## Customizing Slack notifications In this example we've customised our Slack notification to send a URL to our organisation's wiki on how to deal with the particular alert that's been sent. ``` global: # Also possible to place this URL in a file. # Ex: `slack_api_url_file: '/etc/alertmanager/slack_url'` slack_api_url: '' route: receiver: 'slack-notifications' group_by: [alertname, datacenter, app] receivers: - name: 'slack-notifications' slack_configs: - channel: '#alerts' text: 'https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}' ``` ## Accessing annotations in CommonAnnotations In this example we again customize the text sent to our Slack receiver accessing the `summary` and `description` stored in the `CommonAnnotations` of the data sent by the Alertmanager. Alert ``` groups: - name: Instances rules: - alert: InstanceDown expr: up == 0 for: 5m labels: severity: page # Prometheus templates apply here in the annotation and label fields of the alert. annotations: description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.' summary: 'Instance {{ $labels.instance }} down' ``` Receiver ``` - name: 'team-x' slack_configs: - channel: '#alerts' # Alertmanager templates apply here. text: " \nsummary: {{ .CommonAnnotations.summary }}\ndescription: {{ .CommonAnnotations.description }}" ``` ## Ranging over all received Alerts Finally, assuming the same alert as the previous example, we customize our receiver to range over all of the alerts received from the Alertmanager, printing their respective annotation summaries and descriptions on new lines. Receiver ``` - name: 'default-receiver' slack_configs: - channel: '#alerts' title: "{{ range .Alerts }}{{ .Annotations.summary }}\n{{ end }}" text: "{{ range .Alerts }}{{ .Annotations.description }}\n{{ end }}" ``` ## Defining reusable templates Going back to our first example, we can also provide a file containing named templates which are then loaded by Alertmanager in order to avoid complex templates that span many lines. Create a file under `/alertmanager/template/myorg.tmpl` and create a template in it named "slack.myorg.text": ``` {{ define "slack.myorg.text" }}https://internal.myorg.net/wiki/alerts/{{ .GroupLabels.app }}/{{ .GroupLabels.alertname }}{{ end}} ``` The configuration now loads the template with the given name for the "text" field and we provide a path to our custom template file: ``` global: slack_api_url: '' route: receiver: 'slack-notifications' group_by: [alertname, datacenter, app] receivers: - name: 'slack-notifications' slack_configs: - channel: '#alerts' text: '{{ template "slack.myorg.text" . }}' templates: - '/etc/alertmanager/templates/myorg.tmpl' ``` This example is explained in further detail in this [blogpost](https://prometheus.io/blog/2016/03/03/custom-alertmanager-templates/). prometheus-alertmanager-0.28.1+ds/docs/notifications.md000066400000000000000000000134461476331240200231740ustar00rootroot00000000000000--- title: Notification template reference sort_rank: 7 --- # Notification Template Reference Prometheus creates and sends alerts to the Alertmanager which then sends notifications out to different receivers based on their labels. A receiver can be one of many integrations including: Slack, PagerDuty, email, or a custom integration via the generic webhook interface. The notifications sent to receivers are constructed via templates. The Alertmanager comes with default templates but they can also be customized. To avoid confusion it's important to note that the Alertmanager templates differ from [templating in Prometheus](https://prometheus.io/docs/visualization/template_reference/), however Prometheus templating also includes the templating in alert rule labels/annotations. The Alertmanager's notification templates are based on the [Go templating](http://golang.org/pkg/text/template) system. Note that some fields are evaluated as text, and others as HTML which will affect escaping. # Data Structures ## Data `Data` is the structure passed to notification templates and webhook pushes. | Name | Type | Notes | | ------------- | ------------- | -------- | | Receiver | string | Defines the receiver's name that the notification will be sent to (slack, email etc.). | | Status | string | Defined as firing if at least one alert is firing, otherwise resolved. | | Alerts | [Alert](#alert) | List of all alert objects in this group ([see below](#alert)). | | GroupLabels | [KV](#kv) | The labels these alerts were grouped by. | | CommonLabels | [KV](#kv) | The labels common to all of the alerts. | | CommonAnnotations | [KV](#kv) | Set of common annotations to all of the alerts. Used for longer additional strings of information about the alert. | | ExternalURL | string | Backlink to the Alertmanager that sent the notification. | The `Alerts` type exposes functions for filtering alerts: - `Alerts.Firing` returns a list of currently firing alert objects in this group - `Alerts.Resolved` returns a list of resolved alert objects in this group ## Alert `Alert` holds one alert for notification templates. | Name | Type | Notes | | ------------- | ------------- | -------- | | Status | string | Defines whether or not the alert is resolved or currently firing. | | Labels | [KV](#kv) | A set of labels to be attached to the alert. | | Annotations | [KV](#kv) | A set of annotations for the alert. | | StartsAt | time.Time | The time the alert started firing. If omitted, the current time is assigned by the Alertmanager. | | EndsAt | time.Time | Only set if the end time of an alert is known. Otherwise set to a configurable timeout period from the time since the last alert was received. | | GeneratorURL | string | A backlink which identifies the causing entity of this alert. | | Fingerprint | string | Fingerprint that can be used to identify the alert. | ## KV `KV` is a set of key/value string pairs used to represent labels and annotations. ``` type KV map[string]string ``` Annotation example containing two annotations: ``` { summary: "alert summary", description: "alert description", } ``` In addition to direct access of data (labels and annotations) stored as KV, there are also methods for sorting, removing, and viewing the LabelSets: ### KV methods | Name | Arguments | Returns | Notes | | ------------- | ------------- | -------- | -------- | | SortedPairs | - | Pairs (list of key/value string pairs.) | Returns a sorted list of key/value pairs. | | Remove | []string | KV | Returns a copy of the key/value map without the given keys. | | Names | - | []string | Returns the names of the label names in the LabelSet. | | Values | - | []string | Returns a list of the values in the LabelSet. | # Functions Note the [default functions](http://golang.org/pkg/text/template/#hdr-Functions) also provided by Go templating. ## Strings | Name | Arguments | Returns | Notes | | ------------- | ------------- | -------- | -------- | | title | string |[strings.Title](http://golang.org/pkg/strings/#Title), capitalises first character of each word. | | toUpper | string | [strings.ToUpper](http://golang.org/pkg/strings/#ToUpper), converts all characters to upper case. | | toLower | string | [strings.ToLower](http://golang.org/pkg/strings/#ToLower), converts all characters to lower case. | | trimSpace | string | [strings.TrimSpace](https://pkg.go.dev/strings#TrimSpace), removes leading and trailing white spaces. | | match | pattern, string | [Regexp.MatchString](https://golang.org/pkg/regexp/#MatchString). Match a string using Regexp. | | reReplaceAll | pattern, replacement, text | [Regexp.ReplaceAllString](http://golang.org/pkg/regexp/#Regexp.ReplaceAllString) Regexp substitution, unanchored. | | join | sep string, s []string | [strings.Join](http://golang.org/pkg/strings/#Join), concatenates the elements of s to create a single string. The separator string sep is placed between elements in the resulting string. (note: argument order inverted for easier pipelining in templates.) | | safeHtml | text string | [html/template.HTML](https://golang.org/pkg/html/template/#HTML), Marks string as HTML not requiring auto-escaping. | | stringSlice | ...string | Returns the passed strings as a slice of strings. | | date | string, time.Time | Returns the text representation of the time in the specified format. For documentation on formats refer to [pkg.go.dev/time](https://pkg.go.dev/time#pkg-constants). | | tz | string, time.Time | Returns the time in the timezone. For example, Europe/Paris. | | since | time.Time | [time.Duration](https://pkg.go.dev/time#Since), returns the duration of how much time passed from the provided time till the current system time. | | humanizeDuration | number or string | Returns a human-readable string representing the duration, and the error if it happened. | prometheus-alertmanager-0.28.1+ds/docs/overview.md000066400000000000000000000014521476331240200221630ustar00rootroot00000000000000--- title: Alerting overview sort_rank: 1 nav_icon: sliders --- # Alerting Overview Alerting with Prometheus is separated into two parts. Alerting rules in Prometheus servers send alerts to an Alertmanager. The [Alertmanager](alertmanager.md) then manages those alerts, including silencing, inhibition, aggregation and sending out notifications via methods such as email, on-call notification systems, and chat platforms. The main steps to setting up alerting and notifications are: * Setup and [configure](configuration.md) the Alertmanager * [Configure Prometheus](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#alertmanager_config) to talk to the Alertmanager * Create [alerting rules](https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/) in Prometheus prometheus-alertmanager-0.28.1+ds/examples/000077500000000000000000000000001476331240200206575ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/examples/ha/000077500000000000000000000000001476331240200212475ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/examples/ha/alertmanager.yml000066400000000000000000000005441476331240200244370ustar00rootroot00000000000000route: group_by: ['alertname'] group_wait: 30s group_interval: 5m repeat_interval: 1h receiver: 'web.hook' receivers: - name: 'web.hook' webhook_configs: - url: 'http://127.0.0.1:5001/' inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance'] prometheus-alertmanager-0.28.1+ds/examples/ha/send_alerts.sh000077500000000000000000000031441476331240200241130ustar00rootroot00000000000000#!/usr/bin/env bash alerts1='[ { "labels": { "alertname": "DiskRunningFull", "dev": "sda1", "instance": "example1" }, "annotations": { "info": "The disk sda1 is running full", "summary": "please check the instance example1" } }, { "labels": { "alertname": "DiskRunningFull", "dev": "sda2", "instance": "example1" }, "annotations": { "info": "The disk sda2 is running full", "summary": "please check the instance example1", "runbook": "the following link http://test-url should be clickable" } }, { "labels": { "alertname": "DiskRunningFull", "dev": "sda1", "instance": "example2" }, "annotations": { "info": "The disk sda1 is running full", "summary": "please check the instance example2" } }, { "labels": { "alertname": "DiskRunningFull", "dev": "sdb2", "instance": "example2" }, "annotations": { "info": "The disk sdb2 is running full", "summary": "please check the instance example2" } }, { "labels": { "alertname": "DiskRunningFull", "dev": "sda1", "instance": "example3", "severity": "critical" } }, { "labels": { "alertname": "DiskRunningFull", "dev": "sda1", "instance": "example3", "severity": "warning" } } ]' curl -XPOST -d"$alerts1" http://localhost:9093/api/v1/alerts curl -XPOST -d"$alerts1" http://localhost:9094/api/v1/alerts curl -XPOST -d"$alerts1" http://localhost:9095/api/v1/alerts prometheus-alertmanager-0.28.1+ds/examples/ha/tls/000077500000000000000000000000001476331240200220515ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/examples/ha/tls/Makefile000066400000000000000000000016401476331240200235120ustar00rootroot00000000000000# Based on https://github.com/wolfeidau/golang-massl/ .PHONY: start start: goreman start .PHONY: gen-certs gen-certs: certs/ca.pem certs/node1.pem certs/node1-key.pem certs/node2.pem certs/node2-key.pem certs/ca.pem certs/ca-key.pem: certs/ca-csr.json cd certs; cfssl gencert -initca ca-csr.json | cfssljson -bare ca certs/node1.pem certs/node1-key.pem: certs/ca-config.json certs/ca.pem certs/ca-key.pem certs/node1-csr.json cd certs; cfssl gencert \ -ca=ca.pem \ -ca-key=ca-key.pem \ -config=ca-config.json \ -hostname=localhost,127.0.0.1 \ -profile=massl node1-csr.json | cfssljson -bare node1 certs/node2.pem certs/node2-key.pem: certs/ca-config.json certs/ca.pem certs/ca-key.pem certs/node2-csr.json cd certs; cfssl gencert \ -ca=ca.pem \ -ca-key=ca-key.pem \ -config=ca-config.json \ -hostname=localhost,127.0.0.1 \ -profile=massl node2-csr.json | cfssljson -bare node2 prometheus-alertmanager-0.28.1+ds/examples/ha/tls/Procfile000066400000000000000000000027231476331240200235430ustar00rootroot00000000000000a1: ./../../../alertmanager --log.level=debug --storage.path=$TMPDIR/a1 --web.listen-address=:9093 --cluster.listen-address=127.0.0.1:8001 --config.file=../alertmanager.yml --cluster.tls-config=./tls_config_node1.yml a2: ./../../../alertmanager --log.level=debug --storage.path=$TMPDIR/a2 --web.listen-address=:9094 --cluster.listen-address=127.0.0.1:8002 --cluster.peer=127.0.0.1:8001 --config.file=../alertmanager.yml --cluster.tls-config=./tls_config_node2.yml a3: ./../../../alertmanager --log.level=debug --storage.path=$TMPDIR/a3 --web.listen-address=:9095 --cluster.listen-address=127.0.0.1:8003 --cluster.peer=127.0.0.1:8001 --config.file=../alertmanager.yml --cluster.tls-config=./tls_config_node1.yml a4: ./../../../alertmanager --log.level=debug --storage.path=$TMPDIR/a4 --web.listen-address=:9096 --cluster.listen-address=127.0.0.1:8004 --cluster.peer=127.0.0.1:8001 --config.file=../alertmanager.yml --cluster.tls-config=./tls_config_node2.yml a5: ./../../../alertmanager --log.level=debug --storage.path=$TMPDIR/a5 --web.listen-address=:9097 --cluster.listen-address=127.0.0.1:8005 --cluster.peer=127.0.0.1:8001 --config.file=../alertmanager.yml --cluster.tls-config=./tls_config_node1.yml a6: ./../../../alertmanager --log.level=debug --storage.path=$TMPDIR/a6 --web.listen-address=:9098 --cluster.listen-address=127.0.0.1:8006 --cluster.peer=127.0.0.1:8001 --config.file=../alertmanager.yml --cluster.tls-config=./tls_config_node2.yml wh: go run ../../webhook/echo.go prometheus-alertmanager-0.28.1+ds/examples/ha/tls/README.md000066400000000000000000000011741476331240200233330ustar00rootroot00000000000000# TLS Transport Config Example ## Usage 1. Install dependencies: 1. `go install github.com/cloudflare/cfssl/cmd/cfssl` 2. `go install github.com/mattn/goreman` 2. Build Alertmanager (root of repository): 1. `go mod download` 1. `make build`. 2. `make start` (inside this directory). ## Testing 1. Start the cluster (as explained above) 2. Navigate to one of the Alertmanager instances at `localhost:9093`. 3. Create a silence. 4. Navigate to the other Alertmanager instance at `localhost:9094`. 5. Observe that the silence created in the other Alertmanager instance has been synchronized over to this instance. 6. Repeat. prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/000077500000000000000000000000001476331240200231715ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/ca-config.json000066400000000000000000000003471476331240200257160ustar00rootroot00000000000000{ "signing": { "default": { "expiry": "876000h" }, "profiles": { "massl": { "usages": ["signing", "key encipherment", "server auth", "client auth"], "expiry": "876000h" } } } } prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/ca-csr.json000066400000000000000000000003141476331240200252320ustar00rootroot00000000000000{ "CN": "massl", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "AU", "L": "Melbourne", "O": "massl", "OU": "VIC", "ST": "Victoria" } ] }prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/ca-key.pem000066400000000000000000000032171476331240200250500ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAuljDjKVGwlyiuKTSHc1QpoZPX9dbgwU/9113ctI8U/ZwMWLp nZ4f/zVpf4LW5foM9zSEUGPiyJe/NaTZUOXkRBSIQ13QroK4OJ1XGacQKpTxewCb ChESZEfKWEhnP/Y7BYc4z1Li6Dkxh4TIElHwOVe62jbhNnzYlr4evmSuiuItAc8u hEYxncThPzmHEWPXKw8CFNhxCSYsjbb72UAIht0knMHQ7VXBX1VuuL0rolJBiToC va+I6CjG0c6qfi9/BcPsuW6cNjmQnwTg6SaSoGO/5zgbxBgy9MZQEot88d1T2XH6 rBANYsfojvyCXuytWnj04mvdAWwmFh0hhq+nxQIDAQABAoIBAQCwcL1vXUq7W4UD OaRtbWrQ0dk0ETBnxT/E0y33fRJ8GZovWM2EXSVEuukSP+uEQ5elNYeWqo0fi3cT ruvJSnMw9xPyXVDq+4C8slW3R1TqTK683VzvUizM4KC5qIyCpn1KBbgHrh6E7Sp1 e4cIuaawVN3qIg5qThmx2YA4nBIcEt68q9cpy3NgEe+EQf44zM/St+y8kSkDUOVw fNKX0WfZ/hPL1TAYpWiIgSf+m/V3d/1l/scvMYONcuSjXSORCyoeAWYtOQgf78wW 9j3kiBTaqDYCUZFnY/ltlZrm8ltAaKVJ0MmPKjVh8GJBXZp9fSVU8Y4ZIZRSeuBA OoStHGAdAoGBAMluMIE33hGny2V0dNzW23D84eXQK38AsdP632jQeuzxBknItg45 qAfzh8F8W10DQnSv5tj0bmOHfo0mG09bu9eo5nLLINOE7Ju/7ly/76RNJNJ4ADjx JKZi/PpvfP+s/fzel0X3OPgA+CJKzUHuqlU4V9BLc7focZAYtaM2w7rHAoGBAOzU eXpapkqYhbYRcsrVV57nZV0rLzsLVJBpJg2zC8un95ALrr0rlZfuPJfOCY/uuS1w f8ixRz2MkRWGreLHy35NB4GV0sF9VPn1jMp9SuBNvO0JRUMWuDAdVe8SCjXadrOh +m3yKJSkFKDchglUYnZKV1skgA/b9jjjnu2fvd0TAoGAVUTnFZxvzmuIp78fxWjS 5ka23hE8iHvjy4e00WsHzovNjKiBoQ35Orx16ItbJcm+dSUNhSQcItf104yhHPwJ Tab7PvcMQ15OxzP9lJfPu27Iuqv/9Bro1+Kpkt5lPNqffk9AHGcmX54RbHrb3yBI TOEYE14Nc3nbsRM0uQ3y13sCgYB5Om4QZpSWvKo9P4M+NqTKb3JglblwhOU9osVa 39ra3dkIgCJrLQM/KTEVF9+nMLDThLG0fqKT6/9cQHuECXet6Co+d/3RE6HK7Zmr ESWh2ckqoMM2i0uvPWT+ooJdfL2kR/bUDtAc/jyc9yUZY3ufR4Cd4/o1pAfOqR1y T4G1xwKBgQChE4VWawCVg2qanRjvZcdNk0zpZx4dxqqKYq/VHuSfjNLQixIZsgXT xx9BHuORn6c/nurqEStLwN3BzbpPU/j6YjMUmTslSH2sKhHwWNYGBZC52aJiOOda Bz6nAkihG0n2PjYt2T84w6FWHgLJuSsmiEVJcb+AOdyKh1MlzJiwMQ== -----END RSA PRIVATE KEY----- prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/ca.csr000066400000000000000000000017451476331240200242740ustar00rootroot00000000000000-----BEGIN CERTIFICATE REQUEST----- MIICpzCCAY8CAQAwYjELMAkGA1UEBhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIw EAYDVQQHEwlNZWxib3VybmUxDjAMBgNVBAoTBW1hc3NsMQwwCgYDVQQLEwNWSUMx DjAMBgNVBAMTBW1hc3NsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA uljDjKVGwlyiuKTSHc1QpoZPX9dbgwU/9113ctI8U/ZwMWLpnZ4f/zVpf4LW5foM 9zSEUGPiyJe/NaTZUOXkRBSIQ13QroK4OJ1XGacQKpTxewCbChESZEfKWEhnP/Y7 BYc4z1Li6Dkxh4TIElHwOVe62jbhNnzYlr4evmSuiuItAc8uhEYxncThPzmHEWPX Kw8CFNhxCSYsjbb72UAIht0knMHQ7VXBX1VuuL0rolJBiToCva+I6CjG0c6qfi9/ BcPsuW6cNjmQnwTg6SaSoGO/5zgbxBgy9MZQEot88d1T2XH6rBANYsfojvyCXuyt Wnj04mvdAWwmFh0hhq+nxQIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAJFmooMt TocElxCb3DGJTRUXxr4DqcATASIX35a2wV3MmPqUHHXr6BQkO/FRho66EsZf3DE/ mumou01K+KByxgsmw04CACjSeZ2t/g6pAsDCKrx/BwL3tAo09lG2Y2Ah0BND2Cta EZpTliU2MimZlk7UZb8VIXh2Tx56fZRoHLzO4U4+FY8ZR+tspxPRM7hLg/aUqA5D zGj6kByX8aYjxsmQokP4rx/w2mz6vwt4cZ1pXwr0RderkMIh9Har/0k9X1WIAP61 PNQx74qnaq+icjtN2+8gvJE/CJL/wfcwW6kQwEtX1xsTpnzyFaRoYpSPQrvkCtiW +WzgnOh7RvKyAYI= -----END CERTIFICATE REQUEST----- prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/ca.pem000066400000000000000000000024261476331240200242630ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIDlDCCAnygAwIBAgIUetcc8yLasSAxvyUWtgTVKR6jfBIwDQYJKoZIhvcNAQEL BQAwYjELMAkGA1UEBhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIwEAYDVQQHEwlN ZWxib3VybmUxDjAMBgNVBAoTBW1hc3NsMQwwCgYDVQQLEwNWSUMxDjAMBgNVBAMT BW1hc3NsMB4XDTIxMDUwNTE2MTYwMFoXDTI2MDUwNDE2MTYwMFowYjELMAkGA1UE BhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIwEAYDVQQHEwlNZWxib3VybmUxDjAM BgNVBAoTBW1hc3NsMQwwCgYDVQQLEwNWSUMxDjAMBgNVBAMTBW1hc3NsMIIBIjAN BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuljDjKVGwlyiuKTSHc1QpoZPX9db gwU/9113ctI8U/ZwMWLpnZ4f/zVpf4LW5foM9zSEUGPiyJe/NaTZUOXkRBSIQ13Q roK4OJ1XGacQKpTxewCbChESZEfKWEhnP/Y7BYc4z1Li6Dkxh4TIElHwOVe62jbh NnzYlr4evmSuiuItAc8uhEYxncThPzmHEWPXKw8CFNhxCSYsjbb72UAIht0knMHQ 7VXBX1VuuL0rolJBiToCva+I6CjG0c6qfi9/BcPsuW6cNjmQnwTg6SaSoGO/5zgb xBgy9MZQEot88d1T2XH6rBANYsfojvyCXuytWnj04mvdAWwmFh0hhq+nxQIDAQAB o0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU d4DTElKq6gnGYDJZgJvC+4flrZAwDQYJKoZIhvcNAQELBQADggEBAHYaMxcyVdFP QZJHDP6x+A1hHeZy/kaL2VPzUIOgt3ONEvjhsJblFjLaTWwXFJwxVHXRsQjqrURj dD2VIkMbCJM4WN8odi6PdHscL0DwHKzwZDapQxsOUYcPBbR2EsBPRyWSoJmBnEyZ 0TANtyUcZNWc7/C4GG66SWypu1YRdtcaDiEOVkdetGWuo5bw1J7B7isQ4J4a3+Qn iTKId/7wWBY95JS2xJuOeEjk/ty74ruSapk2Aip1GRSRXMDtD0XeO5dpxc6eIU3C jbRpUGqCdSAfzxQTlxQAMEKdgRlt7lzMFX/PAXagDOMC9D/6APn5fquEV2d9wMWs 0N9UCwKftAU= -----END CERTIFICATE----- prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/node1-csr.json000066400000000000000000000003361476331240200256610ustar00rootroot00000000000000{ "CN": "system:server", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "AU", "L": "Melbourne", "O": "system:node1", "OU": "massl", "ST": "Victoria" } ] } prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/node1-key.pem000066400000000000000000000032131476331240200254670ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEA1b9bm4rvDtpYsqgtCC52+L535d4/Q2O10fWD2i2CfRXXfYJQ 5cr4AV2iqScFsJSs7KwyQde/c4VWj/vEA2/SJHZFBlknKdCcrgHVebrvnzm6Guze ICutZSKocFXy9Kw+YmWuA64nHVfmSCKG07GhXhEsLsSCn4PTDYOiGAUm1GdSDxUp 8yUXec13Eb20mld0xE9kQnCnEWRnxMXtQJXoz9lpLc7DgXtN6nCXSG/CqdDPOduU nmseaxyAGpAFnUmxcqUuYAJUQ1hUOJhk0RVSsLTmu+FGdOxk79AxmmKQ2z9l/GuA VikVJGTxY4jRPezxHQ3bdqzzCIdJxTxLinftZQIDAQABAoIBADpxQtvphemau8vF feKRycfDVEcOmF+VoL4SkgWSke4fjbbsbbAW6e59qp7zY3PfgtSHVIp6Mgek+oEN xo9mAKAlkkPlFncxadWN/M921FPF1ePMxgMnzhYr/sAQUAikG76NrKGm+VzljrpE bnbtR4DP0zPKWSjCQ2+bgTNuHSrPwUtEngVT6ugjfWU1RitlvjTsZ9hSuOSBlS7P rjbQGaEh53PraDut8PIlF4wIF+nLeERFP/a6DC8Btpbv9P50YRosag6yU/G+OYX9 spvBPvRJGrubslKnNRz9AcjbVd3QhL+Tm7mV7iakK918jLWb95Ro4WW+9lT6IAi6 xRSOr9UCgYEA5wI3JhKkYa4PST7ALqmJSDkPH8+tctiEx+ovmnqBufFuLWFoO/rc EOYslnaZM3UVCnhrFv7+LxezSI5DyQu8dBEzf0RMICvXUNBkGC7ZJQL428fjXPhX 8mZIoJ0ol4hbamr8yTYlK0vGTwqN1bDj71w6NszuN4ecN1cKNWsMbnMCgYEA7N8Y MzHWNijMr7xZ1lXl4Ye9+kp3aTUjUYBBaxFr4bQ8y0fH48lzq3qOso5wgvp0DKYo uemD5QKbo81LKoTRLa+nxPq0UqKm9FiSWmnrcxMuph989oZ1ZFHA2B+nvbuMTF8J 8sESclTSbgkG87DpycJOUwG3XAcXM+80pXuzJscCgYB+Dzxu/09KqoRW8PJIxGVQ zypMrrS07iiPO2FcyCtQf8oi43vQ91Ttt91vAisZ5HNl8k5mDyJAKovANToSVOAy 6kwSz/9GswXdaMqmU7JVOyj4Lj0JN9AuS9ioJPrIrjVMfjORzYU8+i2uZlD94niP 3uE5lF0OWmdJ36qHefIftwKBgQDcPQZcO19H1iGS2FbTYeSvEK5ENM7YRG8FTXIF 4hnjrtjDzYb+tYVWEErznFrifYo/ZJMDYSqgWQ9reusDqqBvkR41mUDmgJMpJ91U MZ2YzmIWVbqz4QrvbtAWY0Bsuh/VtpwiWQAUy+coJj6PgJOvY3m91h+tcm5RfHz/ zIcjawKBgA6kDcOLOnWcvhP3XwtW5dcWlNuBBNEKna+kIT/5Vlrh91y2w7F54DNK i0w5CZCpbTugJmZ67XLHnfongC7e2vAQ3atoT96RU4mf9614qs9LMtGAbnuCLB8+ sT2rnaZKtzr83ensbYkbBxP/zmPBfFQ9FKcIYIA7En8zAIr2T3vJ -----END RSA PRIVATE KEY----- prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/node1.csr000066400000000000000000000020721476331240200247110ustar00rootroot00000000000000-----BEGIN CERTIFICATE REQUEST----- MIIC5TCCAc0CAQAwczELMAkGA1UEBhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIw EAYDVQQHEwlNZWxib3VybmUxFTATBgNVBAoTDHN5c3RlbTpub2RlMTEOMAwGA1UE CxMFbWFzc2wxFjAUBgNVBAMTDXN5c3RlbTpzZXJ2ZXIwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQDVv1ubiu8O2liyqC0ILnb4vnfl3j9DY7XR9YPaLYJ9 Fdd9glDlyvgBXaKpJwWwlKzsrDJB179zhVaP+8QDb9IkdkUGWScp0JyuAdV5uu+f Oboa7N4gK61lIqhwVfL0rD5iZa4DricdV+ZIIobTsaFeESwuxIKfg9MNg6IYBSbU Z1IPFSnzJRd5zXcRvbSaV3TET2RCcKcRZGfExe1AlejP2WktzsOBe03qcJdIb8Kp 0M8525Seax5rHIAakAWdSbFypS5gAlRDWFQ4mGTRFVKwtOa74UZ07GTv0DGaYpDb P2X8a4BWKRUkZPFjiNE97PEdDdt2rPMIh0nFPEuKd+1lAgMBAAGgLTArBgkqhkiG 9w0BCQ4xHjAcMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0B AQsFAAOCAQEAW/tTyJaBfWtbC9hYUmhh8lxUztv2+WT4xaR/jdQ46sk/87vKuwI6 4AkkGfiPLLqgW3xbQOwk5/ynRabttbsgTUHt744RtRFLzfcQKEBZoNPvrfHvmDil YqHIOx2SJ5hzIBwVlVSBn50hdSSED1Ip22DaU8GukzuacB8+2rhg3MOWJbKVt5aR 03H4XkAynLS1FHNOraDIv1eT58D3l4hanrNOZIa0xAuChd25qLO/JHvU/3wccGUA KNg3vGOy2Q8qVBrTFLn+yQHuOr/wSupXESO1jiI/h+txsBQnZ6oYfZnVJ+7o3Oln 3Hguw77aYeTAeZQPPbmJbDLegLG0ZC6RmA== -----END CERTIFICATE REQUEST----- prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/node1.pem000066400000000000000000000026541476331240200247110ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIEAjCCAuqgAwIBAgIUbYMGwSgQF8iRZ5xmhflInj8VZ0owDQYJKoZIhvcNAQEL BQAwYjELMAkGA1UEBhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIwEAYDVQQHEwlN ZWxib3VybmUxDjAMBgNVBAoTBW1hc3NsMQwwCgYDVQQLEwNWSUMxDjAMBgNVBAMT BW1hc3NsMCAXDTIxMDUwNTE2MTYwMFoYDzIxMjEwNDExMTYxNjAwWjBzMQswCQYD VQQGEwJBVTERMA8GA1UECBMIVmljdG9yaWExEjAQBgNVBAcTCU1lbGJvdXJuZTEV MBMGA1UEChMMc3lzdGVtOm5vZGUxMQ4wDAYDVQQLEwVtYXNzbDEWMBQGA1UEAxMN c3lzdGVtOnNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANW/ W5uK7w7aWLKoLQgudvi+d+XeP0NjtdH1g9otgn0V132CUOXK+AFdoqknBbCUrOys MkHXv3OFVo/7xANv0iR2RQZZJynQnK4B1Xm67585uhrs3iArrWUiqHBV8vSsPmJl rgOuJx1X5kgihtOxoV4RLC7Egp+D0w2DohgFJtRnUg8VKfMlF3nNdxG9tJpXdMRP ZEJwpxFkZ8TF7UCV6M/ZaS3Ow4F7Tepwl0hvwqnQzznblJ5rHmscgBqQBZ1JsXKl LmACVENYVDiYZNEVUrC05rvhRnTsZO/QMZpikNs/ZfxrgFYpFSRk8WOI0T3s8R0N 23as8wiHScU8S4p37WUCAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYE FGprx5v+KrO4DeOtA6kps4BL/zKyMB8GA1UdIwQYMBaAFHeA0xJSquoJxmAyWYCb wvuH5a2QMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsF AAOCAQEAmWTdMLyWOrNAS0uY+u3FUV3Hm50xF1PfxbT6wK1hu6vH6B63E0o9K2/1 U25Ie8Y2IzFocKMvbqC+mrY56G0bWoUlMONhthYqm8uTKtjlFO33A9I7WIT9Tw+B nnwZZO7+Ljkd30qSzBinCjrIEx31Vq2pr54ungd8+wK8nfz/zdZnJcqxcN9zvCXB GTE8yCuqGWKk/oDuIzVjr73U0QaWi+vThqJtBjhOIWQHHVJwbIyhuYzUaivgZPYB 8eKXWk4JH3eAcq5z5koNGyCcZd/k4WnvxZYxNBAkoQ6AWVfEMGOCaRjD1FTnMbpG BW79ndJqLmn8OH+DeCnSWhTWxAgg+Q== -----END CERTIFICATE----- prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/node2-csr.json000066400000000000000000000003361476331240200256620ustar00rootroot00000000000000{ "CN": "system:server", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "AU", "L": "Melbourne", "O": "system:node2", "OU": "massl", "ST": "Victoria" } ] } prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/node2-key.pem000066400000000000000000000032171476331240200254740ustar00rootroot00000000000000-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAtCtzT9vhRMTbhAg/pm8eBn+4IvVQeVqnHoEon9IKIx5fyvqS Q6Ui3xSik9kJq5FSAa1mScajJwfB1o6ycaSP6n+Q88Py4v7q65n0stCHoJCH0uPw MQyEhwX7nNilV9C4UZTyZ2StDdAjmMBHiN81EJAqH2d4Xtgrd/IIWhljSXm+aPbu QjSz8BtR/7+MswrCdlJ8y6gWi020kt6GSHjmaxI1jStGvBxxksK86v3J97wfNwWY 7GJi70uBrvO0pk5bYckDzUTKeN1QGvBnZ8uDXs7pPysvftJr85GzX0iE9YLMDxO3 qc/PlwCdxM8H6gHTTkLPizGZtpMF9Z497pW9YQIDAQABAoIBAFfQwdCPxHmnVbNB 7fwqNsFGKTLozMOJeuE0ZN+ZGZXKbTha70WHTLrcrO1RIRR9rTHiGXQmHEmez0zL mpAnfHn4mWcm/9DCHTCehpVNbH3HVFxm+yB9EG9bbCsjsVtfASfKaGgauvp7k44V UgiVeqDLE6zg2tunk3BQCOAZdbpOiXrdvoZiGx2Q4SMLPfzmfIyH4BUT836pLTmp o6/yNiFqQWfCgjeEAOQor4TcdzYIT+3wP51HfAjhZKMIvmjwL16ov1/QpmWRD4ni 4svzYpeMYpl5OrZkKeDS4ZIQBGjxk+fzPmfFUbfVRSI2gDORsah8HoRVI4LnwKWn 7kQDv0ECgYEA6V+KVb8bPzCZNbroEZFdug6YtT4yv5Mj3/kpMTIvA3vtu02v8e7F O56yT43QfUZA0Ar37O0HQ6mbpPsRE5RSr70i40RR+slMZVHX/AQViG7oQJGBijPt 1tFdLnb+1wSON3jYt2975Kw2IfgOXprWtEmL5zGuplEUjx9Lbdf1HjkCgYEAxaNe XgXdAiWFoY4Qq6xBRO/WNZCdn3Ysqx6snCtDRilxeNyDoE/6x2Ma9/NRBtIiulAb s09vDRfJKLbzocUhIn8BQ+GkbAS/A6+x2vcuGhK3F84xqZdbrCqvqdJS8K824jug vUCfCBJlyNRDz8kEsN5odLM1xkij93Jv23HvGGkCgYEAptcz6ctfalSPI9eEs5KO REbNK73UwBssaaISreYnsED4G5EVuUuvW8k/xxomtHj2OwWsa4ilSd1GtbL8aVf/ qT35ZCrixP0GjeTuGXC+CDTp+8dKqggoAAzbpi1SUVwjZEsT/EhKdZgcdzqE42Ol HWz7BQUCzEpo/U0tOtFKnxkCgYEAi05Vy8wyNbsg7/jlAzyNXPv4bxUaJTX00kDy xbkw2BmKI/i6xprZVwUiEzdsG3SuicjBXahVzFLBtXMPUy1R57DBwYkgjgriYMTM hlzIIBSk/aCXHMTVFwuXegoH8CJwexIwgHU2I0hkeiQ0EBfOuKRr2CYhdzvoZxhA g9tQ/lECgYAjPYoXfNI3rHCWUmaD5eDJZpE0xuJeiiy5auojykdAc7vVapNaIyMK G3EaU44RtXcSwH19TlH9UCm3MH1QiIwaBOzGcKj3Ut6ZyFKuWDUk4yqvps3uZU/h h16Tp49Ja7/4LY1uuEngg1KMEiWgk5jiU7G0H9zrtEiTj9c3FDKDvg== -----END RSA PRIVATE KEY----- prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/node2.csr000066400000000000000000000020721476331240200247120ustar00rootroot00000000000000-----BEGIN CERTIFICATE REQUEST----- MIIC5TCCAc0CAQAwczELMAkGA1UEBhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIw EAYDVQQHEwlNZWxib3VybmUxFTATBgNVBAoTDHN5c3RlbTpub2RlMjEOMAwGA1UE CxMFbWFzc2wxFjAUBgNVBAMTDXN5c3RlbTpzZXJ2ZXIwggEiMA0GCSqGSIb3DQEB AQUAA4IBDwAwggEKAoIBAQC0K3NP2+FExNuECD+mbx4Gf7gi9VB5WqcegSif0goj Hl/K+pJDpSLfFKKT2QmrkVIBrWZJxqMnB8HWjrJxpI/qf5Dzw/Li/urrmfSy0Ieg kIfS4/AxDISHBfuc2KVX0LhRlPJnZK0N0COYwEeI3zUQkCofZ3he2Ct38ghaGWNJ eb5o9u5CNLPwG1H/v4yzCsJ2UnzLqBaLTbSS3oZIeOZrEjWNK0a8HHGSwrzq/cn3 vB83BZjsYmLvS4Gu87SmTlthyQPNRMp43VAa8Gdny4Nezuk/Ky9+0mvzkbNfSIT1 gswPE7epz8+XAJ3EzwfqAdNOQs+LMZm2kwX1nj3ulb1hAgMBAAGgLTArBgkqhkiG 9w0BCQ4xHjAcMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0B AQsFAAOCAQEARh0Pi36mNmyprU4j25GWNqQYCJ6cBGnaPeiwr8/F3rsGsF4LTQdP xW2oBrEWyYRidNCkSMrPkcSiXu1Loy9APwSAXgJZWMYy0Ccdbd3P7dtGNOZkKaLA QKntGA5E1YAbzNhlt7NviGpqZ49K2aOgcGBTnDZ7xDzmg4uo3tcHgzOCwarYZT8l qVpc3jAyxRBOrxVKPZNFb4hAFvUm8k6/Etn5n4otN0JT3KGewbfQY50CxW5ShK52 QCs2PmFMYHHmG11FD3W755MxzhL6UmMy20GUgWWthGmR1LugcBgDtWO/7bqqC9tT XYDTDJ1j0g3Y0cvy2+kltrams4lGE3xs6g== -----END CERTIFICATE REQUEST----- prometheus-alertmanager-0.28.1+ds/examples/ha/tls/certs/node2.pem000066400000000000000000000026541476331240200247120ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIEAjCCAuqgAwIBAgIUex5xEYsDJPUg8idU0Sql2ixGdTwwDQYJKoZIhvcNAQEL BQAwYjELMAkGA1UEBhMCQVUxETAPBgNVBAgTCFZpY3RvcmlhMRIwEAYDVQQHEwlN ZWxib3VybmUxDjAMBgNVBAoTBW1hc3NsMQwwCgYDVQQLEwNWSUMxDjAMBgNVBAMT BW1hc3NsMCAXDTIxMDUwNTE2MTYwMFoYDzIxMjEwNDExMTYxNjAwWjBzMQswCQYD VQQGEwJBVTERMA8GA1UECBMIVmljdG9yaWExEjAQBgNVBAcTCU1lbGJvdXJuZTEV MBMGA1UEChMMc3lzdGVtOm5vZGUyMQ4wDAYDVQQLEwVtYXNzbDEWMBQGA1UEAxMN c3lzdGVtOnNlcnZlcjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALQr c0/b4UTE24QIP6ZvHgZ/uCL1UHlapx6BKJ/SCiMeX8r6kkOlIt8UopPZCauRUgGt ZknGoycHwdaOsnGkj+p/kPPD8uL+6uuZ9LLQh6CQh9Lj8DEMhIcF+5zYpVfQuFGU 8mdkrQ3QI5jAR4jfNRCQKh9neF7YK3fyCFoZY0l5vmj27kI0s/AbUf+/jLMKwnZS fMuoFotNtJLehkh45msSNY0rRrwccZLCvOr9yfe8HzcFmOxiYu9Lga7ztKZOW2HJ A81EynjdUBrwZ2fLg17O6T8rL37Sa/ORs19IhPWCzA8Tt6nPz5cAncTPB+oB005C z4sxmbaTBfWePe6VvWECAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0l BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYE FDNgivphLRqKzV8n29GJq6S2I+CQMB8GA1UdIwQYMBaAFHeA0xJSquoJxmAyWYCb wvuH5a2QMBoGA1UdEQQTMBGCCWxvY2FsaG9zdIcEfwAAATANBgkqhkiG9w0BAQsF AAOCAQEAnNG3nzycALGf+N8PuG4sUIkD+SYA1nOEgfD2KiGNyuTYHhGgFXTw8KzB olH05VidldBvC0+pl5EqZAp9qdzpw6Z5Mb0gdoZY6TeKDUo022G3BHLMUGLp8y+i KE6+awwgdJZ6vPbdnWAh7VM/HCUrGIIPmLFan13j/2RiMfaDxdMAowPmbVc8MLgA JHI6pPo8D1DacEvMM09qGtwQEUoREOWJ/SzTWl1nc/IAS1yOL1LCyKLcoj/HWqjG 3LXficQ7rf+Cpn1GnrKwMziT0OLDLxOs/+5d3nFSLxqF1lpykhPPkmHOHnuY8sMX Qdndn9QILdp5GNvqiVNQYcQa/gOb6g== -----END CERTIFICATE----- prometheus-alertmanager-0.28.1+ds/examples/ha/tls/tls_config_node1.yml000066400000000000000000000004211476331240200260060ustar00rootroot00000000000000tls_server_config: cert_file: "certs/node1.pem" key_file: "certs/node1-key.pem" client_ca_file: "certs/ca.pem" client_auth_type: "VerifyClientCertIfGiven" tls_client_config: cert_file: "certs/node1.pem" key_file: "certs/node1-key.pem" ca_file: "certs/ca.pem" prometheus-alertmanager-0.28.1+ds/examples/ha/tls/tls_config_node2.yml000066400000000000000000000004211476331240200260070ustar00rootroot00000000000000tls_server_config: cert_file: "certs/node2.pem" key_file: "certs/node2-key.pem" client_ca_file: "certs/ca.pem" client_auth_type: "VerifyClientCertIfGiven" tls_client_config: cert_file: "certs/node2.pem" key_file: "certs/node2-key.pem" ca_file: "certs/ca.pem" prometheus-alertmanager-0.28.1+ds/examples/webhook/000077500000000000000000000000001476331240200223155ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/examples/webhook/echo.go000066400000000000000000000017571476331240200235740ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package main import ( "bytes" "encoding/json" "io" "log" "net/http" ) func main() { log.Fatal(http.ListenAndServe(":5001", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { b, err := io.ReadAll(r.Body) if err != nil { panic(err) } defer r.Body.Close() var buf bytes.Buffer if err := json.Indent(&buf, b, " >", " "); err != nil { panic(err) } log.Println(buf.String()) }))) } prometheus-alertmanager-0.28.1+ds/featurecontrol/000077500000000000000000000000001476331240200220755ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/featurecontrol/featurecontrol.go000066400000000000000000000077761476331240200255010ustar00rootroot00000000000000// Copyright 2023 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package featurecontrol import ( "errors" "fmt" "log/slog" "strings" ) const ( FeatureReceiverNameInMetrics = "receiver-name-in-metrics" FeatureClassicMode = "classic-mode" FeatureUTF8StrictMode = "utf8-strict-mode" FeatureAutoGOMEMLIMIT = "auto-gomemlimit" FeatureAutoGOMAXPROCS = "auto-gomaxprocs" ) var AllowedFlags = []string{ FeatureReceiverNameInMetrics, FeatureClassicMode, FeatureUTF8StrictMode, FeatureAutoGOMEMLIMIT, FeatureAutoGOMAXPROCS, } type Flagger interface { EnableReceiverNamesInMetrics() bool ClassicMode() bool UTF8StrictMode() bool EnableAutoGOMEMLIMIT() bool EnableAutoGOMAXPROCS() bool } type Flags struct { logger *slog.Logger enableReceiverNamesInMetrics bool classicMode bool utf8StrictMode bool enableAutoGOMEMLIMIT bool enableAutoGOMAXPROCS bool } func (f *Flags) EnableReceiverNamesInMetrics() bool { return f.enableReceiverNamesInMetrics } func (f *Flags) ClassicMode() bool { return f.classicMode } func (f *Flags) UTF8StrictMode() bool { return f.utf8StrictMode } func (f *Flags) EnableAutoGOMEMLIMIT() bool { return f.enableAutoGOMEMLIMIT } func (f *Flags) EnableAutoGOMAXPROCS() bool { return f.enableAutoGOMAXPROCS } type flagOption func(flags *Flags) func enableReceiverNameInMetrics() flagOption { return func(configs *Flags) { configs.enableReceiverNamesInMetrics = true } } func enableClassicMode() flagOption { return func(configs *Flags) { configs.classicMode = true } } func enableUTF8StrictMode() flagOption { return func(configs *Flags) { configs.utf8StrictMode = true } } func enableAutoGOMEMLIMIT() flagOption { return func(configs *Flags) { configs.enableAutoGOMEMLIMIT = true } } func enableAutoGOMAXPROCS() flagOption { return func(configs *Flags) { configs.enableAutoGOMAXPROCS = true } } func NewFlags(logger *slog.Logger, features string) (Flagger, error) { fc := &Flags{logger: logger} opts := []flagOption{} if len(features) == 0 { return NoopFlags{}, nil } for _, feature := range strings.Split(features, ",") { switch feature { case FeatureReceiverNameInMetrics: opts = append(opts, enableReceiverNameInMetrics()) logger.Warn("Experimental receiver name in metrics enabled") case FeatureClassicMode: opts = append(opts, enableClassicMode()) logger.Warn("Classic mode enabled") case FeatureUTF8StrictMode: opts = append(opts, enableUTF8StrictMode()) logger.Warn("UTF-8 strict mode enabled") case FeatureAutoGOMEMLIMIT: opts = append(opts, enableAutoGOMEMLIMIT()) logger.Warn("Automatically set GOMEMLIMIT to match the Linux container or system memory limit.") case FeatureAutoGOMAXPROCS: opts = append(opts, enableAutoGOMAXPROCS()) logger.Warn("Automatically set GOMAXPROCS to match Linux container CPU quota") default: return nil, fmt.Errorf("Unknown option '%s' for --enable-feature", feature) } } for _, opt := range opts { opt(fc) } if fc.classicMode && fc.utf8StrictMode { return nil, errors.New("cannot have both classic and UTF-8 modes enabled") } return fc, nil } type NoopFlags struct{} func (n NoopFlags) EnableReceiverNamesInMetrics() bool { return false } func (n NoopFlags) ClassicMode() bool { return false } func (n NoopFlags) UTF8StrictMode() bool { return false } func (n NoopFlags) EnableAutoGOMEMLIMIT() bool { return false } func (n NoopFlags) EnableAutoGOMAXPROCS() bool { return false } prometheus-alertmanager-0.28.1+ds/featurecontrol/featurecontrol_test.go000066400000000000000000000032151476331240200265200ustar00rootroot00000000000000// Copyright 2023 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package featurecontrol import ( "errors" "strings" "testing" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" ) func TestFlags(t *testing.T) { tc := []struct { name string featureFlags string err error }{ { name: "with only valid feature flags", featureFlags: FeatureReceiverNameInMetrics, }, { name: "with only invalid feature flags", featureFlags: "somethingsomething", err: errors.New("Unknown option 'somethingsomething' for --enable-feature"), }, { name: "with both, valid and invalid feature flags", featureFlags: strings.Join([]string{FeatureReceiverNameInMetrics, "somethingbad"}, ","), err: errors.New("Unknown option 'somethingbad' for --enable-feature"), }, } for _, tt := range tc { t.Run(tt.name, func(t *testing.T) { fc, err := NewFlags(promslog.NewNopLogger(), tt.featureFlags) if tt.err != nil { require.EqualError(t, err, tt.err.Error()) } else { require.NoError(t, err) require.NotNil(t, fc) } }) } } prometheus-alertmanager-0.28.1+ds/go.mod000066400000000000000000000103141476331240200201460ustar00rootroot00000000000000module github.com/prometheus/alertmanager go 1.22.0 require ( github.com/KimMachineGun/automemlimit v0.7.0 github.com/alecthomas/kingpin/v2 v2.4.0 github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b github.com/aws/aws-sdk-go v1.55.5 github.com/cenkalti/backoff/v4 v4.3.0 github.com/cespare/xxhash/v2 v2.3.0 github.com/coder/quartz v0.1.2 github.com/emersion/go-smtp v0.21.3 github.com/go-openapi/analysis v0.23.0 github.com/go-openapi/errors v0.22.0 github.com/go-openapi/loads v0.22.0 github.com/go-openapi/runtime v0.28.0 github.com/go-openapi/spec v0.21.0 github.com/go-openapi/strfmt v0.23.0 github.com/go-openapi/swag v0.23.0 github.com/go-openapi/validate v0.24.0 github.com/gofrs/uuid v4.4.0+incompatible github.com/gogo/protobuf v1.3.2 github.com/hashicorp/go-sockaddr v1.0.7 github.com/hashicorp/golang-lru/v2 v2.0.7 github.com/hashicorp/memberlist v0.5.1 github.com/jessevdk/go-flags v1.6.1 github.com/kylelemons/godebug v1.1.0 github.com/matttproud/golang_protobuf_extensions v1.0.4 github.com/oklog/run v1.1.0 github.com/oklog/ulid v1.3.1 github.com/prometheus/client_golang v1.20.5 github.com/prometheus/common v0.61.0 github.com/prometheus/common/assets v0.2.0 github.com/prometheus/exporter-toolkit v0.13.2 github.com/prometheus/sigv4 v0.1.0 github.com/rs/cors v1.11.1 github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92 github.com/stretchr/testify v1.10.0 github.com/trivago/tgo v1.0.7 github.com/xlab/treeprint v1.2.0 go.uber.org/atomic v1.11.0 go.uber.org/automaxprocs v1.6.0 golang.org/x/mod v0.22.0 golang.org/x/net v0.33.0 golang.org/x/text v0.21.0 golang.org/x/tools v0.28.0 gopkg.in/telebot.v3 v3.3.8 gopkg.in/yaml.v2 v2.4.0 ) require ( github.com/armon/go-metrics v0.3.10 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 // indirect github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/btree v1.0.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-msgpack/v2 v2.1.1 // indirect github.com/hashicorp/go-multierror v1.1.0 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/julienschmidt/httprouter v1.3.0 // indirect github.com/klauspost/compress v1.17.9 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mdlayher/socket v0.4.1 // indirect github.com/mdlayher/vsock v1.2.1 // indirect github.com/miekg/dns v1.1.41 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect github.com/xhit/go-str2duration/v2 v2.1.0 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect go.opentelemetry.io/otel v1.24.0 // indirect go.opentelemetry.io/otel/metric v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect golang.org/x/crypto v0.31.0 // indirect golang.org/x/oauth2 v0.24.0 // indirect golang.org/x/sync v0.10.0 // indirect golang.org/x/sys v0.28.0 // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) prometheus-alertmanager-0.28.1+ds/go.sum000066400000000000000000003071141476331240200202020ustar00rootroot00000000000000cloud.google.com/go v0.26.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.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.44.3/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.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= 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/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= 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.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= 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/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= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= 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/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/KimMachineGun/automemlimit v0.7.0 h1:7G06p/dMSf7G8E6oq+f2uOPuVncFyIlDI/pBWK49u88= github.com/KimMachineGun/automemlimit v0.7.0/go.mod h1:QZxpHaGOQoYvFhv/r4u3U0JTC2ZcOwbSr11UZF46UBM= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/alecthomas/kingpin/v2 v2.4.0 h1:f48lwail6p8zpO1bC4TxtqACaGqHYA22qkHjHpqDjYY= github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= 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/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b h1:mimo19zliBX/vSQ6PWWSL9lK8qwHozUj03+zLoEB8O0= github.com/alecthomas/units v0.0.0-20240927000941-0f3dac36c52b/go.mod h1:fvzegU4vN3H1qMT+8wDmzjAcDONcgo2/SZ/TyfdUOFs= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= github.com/armon/go-metrics v0.3.10/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/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= 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/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= 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.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 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/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/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-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/coder/quartz v0.1.2 h1:PVhc9sJimTdKd3VbygXtS4826EOCpB1fXoRlLnCrE+s= github.com/coder/quartz v0.1.2/go.mod h1:vsiCc+AHViMKH2CQpGIpFgdHIEQsxwm8yCscqKmzbRA= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= 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/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 h1:OJyUGMJTzHTd1XQp98QTaHernxMYzRaOasRir9hUlFQ= github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ= github.com/emersion/go-smtp v0.21.3 h1:7uVwagE8iPYE48WhNsng3RRpCUpFvNl39JGNSIyGVMY= github.com/emersion/go-smtp v0.21.3/go.mod h1:qm27SGYgoIPRot6ubfQ/GpiPy/g3PaZAVRxiO/sDUgQ= 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.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= 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/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= 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.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= 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/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/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU= github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo= github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+u/w= github.com/go-openapi/errors v0.22.0/go.mod h1:J3DmZScxCDufmIMsdOuDHxJbdOGC0xtUynjIx092vXE= github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco= github.com/go-openapi/loads v0.22.0/go.mod h1:yLsaTCS92mnSAZX5WWoxszLj0u+Ojl+Zs5Stn1oF+rs= github.com/go-openapi/runtime v0.28.0 h1:gpPPmWSNGo214l6n8hzdXYhPuJcGtziTOgUpvsFWGIQ= github.com/go-openapi/runtime v0.28.0/go.mod h1:QN7OzcS+XuYmkQLw05akXk0jRH/eZ3kb18+1KwW9gyc= github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9ZY= github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c= github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4= github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58= github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ= 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.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/goccy/go-yaml v1.9.5/go.mod h1:U/jl18uSupI5rdI2jmuCswEA2htH9eXfferR3KfscvA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= 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-20190702054246-869f871628b6/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/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= 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.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 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/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= 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/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= 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/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= 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-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 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/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.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 v1.2.0/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 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= 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-msgpack/v2 v2.1.1 h1:xQEY9yB2wnHitoSzk/B9UjXWRQ67QKu5AOm8aFp8N3I= github.com/hashicorp/go-msgpack/v2 v2.1.1/go.mod h1:upybraOAblm4S7rx0+jeNy+CWWhzywQsSRV5033mMu4= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= 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-sockaddr v1.0.7 h1:G+pTkSO01HpR5qCxg7lxfsFEZaG+C0VssTy/9dbT+Fw= github.com/hashicorp/go-sockaddr v1.0.7/go.mod h1:FZQbEYa1pxkQ7WLpyXJ6cbjpT8q0YgQaK/JakXqGyWw= 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 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= 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.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/memberlist v0.5.1 h1:mk5dRuzeDNis2bi6LLoQIXfMH7JQvAzt3mQD0vNZZUo= github.com/hashicorp/memberlist v0.5.1/go.mod h1:zGDXV6AqbDTKTM6yxW0I4+JtFzZAJVoIPvss4hV8F24= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/jessevdk/go-flags v1.6.1 h1:Cvu5U8UGrLay1rZfv/zP7iLpSHGUZ/Ou68T0iX1bBK4= github.com/jessevdk/go-flags v1.6.1/go.mod h1:Mk8T1hIAWpOiJiHa9rJASDK2UGWji0EuPGBnNLMooyc= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= 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/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= 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/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= 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/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= 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.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= 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.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= 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/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= 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-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= 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.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U= github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= github.com/mdlayher/vsock v1.2.1 h1:pC1mTJTvjo1r9n9fbm7S1j04rCgCzhCOS5DY0zqHlnQ= github.com/mdlayher/vsock v1.2.1/go.mod h1:NRfCibel++DgeMD8z/hP+PPTjlNJsdPOmxcnENvE+SE= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= 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.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= 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/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= 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 h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= 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/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= 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/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= 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/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/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/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.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= 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.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.61.0 h1:3gv/GThfX0cV2lpO7gkTUwZru38mxevy90Bj8YFSRQQ= github.com/prometheus/common v0.61.0/go.mod h1:zr29OCN/2BsJRaFwG8QOBr41D6kkchKbpeNH7pAjb/s= github.com/prometheus/common/assets v0.2.0 h1:0P5OrzoHrYBOSM1OigWL3mY8ZvV2N4zIE/5AahrSrfM= github.com/prometheus/common/assets v0.2.0/go.mod h1:D17UVUE12bHbim7HzwUvtqm6gwBEaDQ0F+hIGbFbccI= github.com/prometheus/exporter-toolkit v0.13.2 h1:Z02fYtbqTMy2i/f+xZ+UK5jy/bl1Ex3ndzh06T/Q9DQ= github.com/prometheus/exporter-toolkit v0.13.2/go.mod h1:tCqnfx21q6qN1KA4U3Bfb8uWzXfijIrJz3/kTIqMV7g= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/prometheus/sigv4 v0.1.0 h1:FgxH+m1qf9dGQ4w8Dd6VkthmpFQfGTzUeavMoQeG1LA= github.com/prometheus/sigv4 v0.1.0/go.mod h1:doosPW9dOitMzYe2I2BN0jZqUuBrGPbXrNsTScN18iU= 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.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c h1:aqg5Vm5dwtvL+YgDpBcK1ITf3o96N/K7/wsRXQnUTEs= github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c/go.mod h1:owqhoLW1qZoYLZzLnBw+QkPP9WZnjlSWihhxAJC1+/M= github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92 h1:OfRzdxCzDhp+rsKWXuOO2I/quKMJ/+TQwVbIP/gltZg= github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92/go.mod h1:7/OT02F6S6I7v6WXb+IjhMuZEYfH/RJ5RwEWnEo5BMg= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= 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/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= 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.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= 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.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/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/trivago/tgo v1.0.7 h1:uaWH/XIy9aWYWpjm2CU3RpcqZXmX2ysQ9/Go+d9gyrM= github.com/trivago/tgo v1.0.7/go.mod h1:w4dpD+3tzNIIiIfkWWa85w5/B77tlvdZckQ+6PkFnhc= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/xhit/go-str2duration/v2 v2.1.0 h1:lxklc02Drh6ynqX+DdPyp5pCKLUQpRT8bp8Ydu2Bstc= github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= 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.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= 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.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.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo= go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI= go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco= go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI= go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/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-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/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-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-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= 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/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-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-20201208152925-83fdc39ff7b5/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/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.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/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= 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-20181114220301-adae6a3d119a/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-20190213061140-3a22650c66bd/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-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-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= 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-20190923162816-aa69164e4478/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-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-20200520182314-0ba52f642ac2/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-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/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-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 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-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.33.0 h1:74SYHlV8BIgHIFC/LrYkOGIwL19eTYXQ5wc6TBuO36I= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/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-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= 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-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/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 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-20181116152217-5ac8a444bdc5/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-20190222072716-a9d3bda3a223/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-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-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/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-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/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-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-20200501052902-10377860bb8e/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-20200523222454-059865788121/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-20200905004654-be1d3432aa8f/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-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/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-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/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-20210510120138-977fb7262007/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-20210603125802-9665404d3644/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-20210616094352-59db8d763f22/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-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/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-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 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.4/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/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= 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/tools v0.0.0-20180917221912-90fa682c2a6e/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-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-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-20190911174233-4f2ddba30aff/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-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-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 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-20200117161641-43d50277825c/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-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-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= 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-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-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/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.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8= golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw= 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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= 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.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/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= 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/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.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= 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-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-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-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-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= 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-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= 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.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.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.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= 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/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= 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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/telebot.v3 v3.3.8 h1:uVDGjak9l824FN9YARWUHMsiNZnlohAVwUycw21k6t8= gopkg.in/telebot.v3 v3.3.8/go.mod h1:1mlbqcLTVSfK9dx7fdp+Nb5HZsy4LLPtpZTKmwhwtzM= 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.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/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/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-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= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= 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.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= prometheus-alertmanager-0.28.1+ds/inhibit/000077500000000000000000000000001476331240200204675ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/inhibit/inhibit.go000066400000000000000000000163261476331240200224540ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package inhibit import ( "context" "log/slog" "sync" "time" "github.com/oklog/run" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/pkg/labels" "github.com/prometheus/alertmanager/provider" "github.com/prometheus/alertmanager/store" "github.com/prometheus/alertmanager/types" ) // An Inhibitor determines whether a given label set is muted based on the // currently active alerts and a set of inhibition rules. It implements the // Muter interface. type Inhibitor struct { alerts provider.Alerts rules []*InhibitRule marker types.AlertMarker logger *slog.Logger mtx sync.RWMutex cancel func() } // NewInhibitor returns a new Inhibitor. func NewInhibitor(ap provider.Alerts, rs []config.InhibitRule, mk types.AlertMarker, logger *slog.Logger) *Inhibitor { ih := &Inhibitor{ alerts: ap, marker: mk, logger: logger, } for _, cr := range rs { r := NewInhibitRule(cr) ih.rules = append(ih.rules, r) } return ih } func (ih *Inhibitor) run(ctx context.Context) { it := ih.alerts.Subscribe() defer it.Close() for { select { case <-ctx.Done(): return case a := <-it.Next(): if err := it.Err(); err != nil { ih.logger.Error("Error iterating alerts", "err", err) continue } // Update the inhibition rules' cache. for _, r := range ih.rules { if r.SourceMatchers.Matches(a.Labels) { if err := r.scache.Set(a); err != nil { ih.logger.Error("error on set alert", "err", err) } } } } } } // Run the Inhibitor's background processing. func (ih *Inhibitor) Run() { var ( g run.Group ctx context.Context ) ih.mtx.Lock() ctx, ih.cancel = context.WithCancel(context.Background()) ih.mtx.Unlock() runCtx, runCancel := context.WithCancel(ctx) for _, rule := range ih.rules { go rule.scache.Run(runCtx, 15*time.Minute) } g.Add(func() error { ih.run(runCtx) return nil }, func(err error) { runCancel() }) if err := g.Run(); err != nil { ih.logger.Warn("error running inhibitor", "err", err) } } // Stop the Inhibitor's background processing. func (ih *Inhibitor) Stop() { if ih == nil { return } ih.mtx.RLock() defer ih.mtx.RUnlock() if ih.cancel != nil { ih.cancel() } } // Mutes returns true iff the given label set is muted. It implements the Muter // interface. func (ih *Inhibitor) Mutes(lset model.LabelSet) bool { fp := lset.Fingerprint() for _, r := range ih.rules { if !r.TargetMatchers.Matches(lset) { // If target side of rule doesn't match, we don't need to look any further. continue } // If we are here, the target side matches. If the source side matches, too, we // need to exclude inhibiting alerts for which the same is true. if inhibitedByFP, eq := r.hasEqual(lset, r.SourceMatchers.Matches(lset)); eq { ih.marker.SetInhibited(fp, inhibitedByFP.String()) return true } } ih.marker.SetInhibited(fp) return false } // An InhibitRule specifies that a class of (source) alerts should inhibit // notifications for another class of (target) alerts if all specified matching // labels are equal between the two alerts. This may be used to inhibit alerts // from sending notifications if their meaning is logically a subset of a // higher-level alert. type InhibitRule struct { // The set of Filters which define the group of source alerts (which inhibit // the target alerts). SourceMatchers labels.Matchers // The set of Filters which define the group of target alerts (which are // inhibited by the source alerts). TargetMatchers labels.Matchers // A set of label names whose label values need to be identical in source and // target alerts in order for the inhibition to take effect. Equal map[model.LabelName]struct{} // Cache of alerts matching source labels. scache *store.Alerts } // NewInhibitRule returns a new InhibitRule based on a configuration definition. func NewInhibitRule(cr config.InhibitRule) *InhibitRule { var ( sourcem labels.Matchers targetm labels.Matchers ) // cr.SourceMatch will be deprecated. This for loop appends regex matchers. for ln, lv := range cr.SourceMatch { matcher, err := labels.NewMatcher(labels.MatchEqual, ln, lv) if err != nil { // This error must not happen because the config already validates the yaml. panic(err) } sourcem = append(sourcem, matcher) } // cr.SourceMatchRE will be deprecated. This for loop appends regex matchers. for ln, lv := range cr.SourceMatchRE { matcher, err := labels.NewMatcher(labels.MatchRegexp, ln, lv.String()) if err != nil { // This error must not happen because the config already validates the yaml. panic(err) } sourcem = append(sourcem, matcher) } // We append the new-style matchers. This can be simplified once the deprecated matcher syntax is removed. sourcem = append(sourcem, cr.SourceMatchers...) // cr.TargetMatch will be deprecated. This for loop appends regex matchers. for ln, lv := range cr.TargetMatch { matcher, err := labels.NewMatcher(labels.MatchEqual, ln, lv) if err != nil { // This error must not happen because the config already validates the yaml. panic(err) } targetm = append(targetm, matcher) } // cr.TargetMatchRE will be deprecated. This for loop appends regex matchers. for ln, lv := range cr.TargetMatchRE { matcher, err := labels.NewMatcher(labels.MatchRegexp, ln, lv.String()) if err != nil { // This error must not happen because the config already validates the yaml. panic(err) } targetm = append(targetm, matcher) } // We append the new-style matchers. This can be simplified once the deprecated matcher syntax is removed. targetm = append(targetm, cr.TargetMatchers...) equal := map[model.LabelName]struct{}{} for _, ln := range cr.Equal { equal[model.LabelName(ln)] = struct{}{} } return &InhibitRule{ SourceMatchers: sourcem, TargetMatchers: targetm, Equal: equal, scache: store.NewAlerts(), } } // hasEqual checks whether the source cache contains alerts matching the equal // labels for the given label set. If so, the fingerprint of one of those alerts // is returned. If excludeTwoSidedMatch is true, alerts that match both the // source and the target side of the rule are disregarded. func (r *InhibitRule) hasEqual(lset model.LabelSet, excludeTwoSidedMatch bool) (model.Fingerprint, bool) { now := time.Now() Outer: for _, a := range r.scache.List() { // The cache might be stale and contain resolved alerts. if a.ResolvedAt(now) { continue } for n := range r.Equal { if a.Labels[n] != lset[n] { continue Outer } } if excludeTwoSidedMatch && r.TargetMatchers.Matches(a.Labels) { continue Outer } return a.Fingerprint(), true } return model.Fingerprint(0), false } prometheus-alertmanager-0.28.1+ds/inhibit/inhibit_bench_test.go000066400000000000000000000172161476331240200246510ustar00rootroot00000000000000// Copyright 2024 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package inhibit import ( "context" "errors" "strconv" "testing" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/pkg/labels" "github.com/prometheus/alertmanager/provider/mem" "github.com/prometheus/alertmanager/types" ) // BenchmarkMutes benchmarks the Mutes method for the Muter interface // for different numbers of inhibition rules. func BenchmarkMutes(b *testing.B) { b.Run("1 inhibition rule, 1 inhibiting alert", func(b *testing.B) { benchmarkMutes(b, allRulesMatchBenchmark(b, 1, 1)) }) b.Run("10 inhibition rules, 1 inhibiting alert", func(b *testing.B) { benchmarkMutes(b, allRulesMatchBenchmark(b, 10, 1)) }) b.Run("100 inhibition rules, 1 inhibiting alert", func(b *testing.B) { benchmarkMutes(b, allRulesMatchBenchmark(b, 100, 1)) }) b.Run("1000 inhibition rules, 1 inhibiting alert", func(b *testing.B) { benchmarkMutes(b, allRulesMatchBenchmark(b, 1000, 1)) }) b.Run("10000 inhibition rules, 1 inhibiting alert", func(b *testing.B) { benchmarkMutes(b, allRulesMatchBenchmark(b, 10000, 1)) }) b.Run("1 inhibition rule, 10 inhibiting alerts", func(b *testing.B) { benchmarkMutes(b, allRulesMatchBenchmark(b, 1, 10)) }) b.Run("1 inhibition rule, 100 inhibiting alerts", func(b *testing.B) { benchmarkMutes(b, allRulesMatchBenchmark(b, 1, 100)) }) b.Run("1 inhibition rule, 1000 inhibiting alerts", func(b *testing.B) { benchmarkMutes(b, allRulesMatchBenchmark(b, 1, 1000)) }) b.Run("1 inhibition rule, 10000 inhibiting alerts", func(b *testing.B) { benchmarkMutes(b, allRulesMatchBenchmark(b, 1, 10000)) }) b.Run("100 inhibition rules, 1000 inhibiting alerts", func(b *testing.B) { benchmarkMutes(b, allRulesMatchBenchmark(b, 100, 1000)) }) b.Run("10 inhibition rules, last rule matches", func(b *testing.B) { benchmarkMutes(b, lastRuleMatchesBenchmark(b, 10)) }) b.Run("100 inhibition rules, last rule matches", func(b *testing.B) { benchmarkMutes(b, lastRuleMatchesBenchmark(b, 100)) }) b.Run("1000 inhibition rules, last rule matches", func(b *testing.B) { benchmarkMutes(b, lastRuleMatchesBenchmark(b, 1000)) }) b.Run("10000 inhibition rules, last rule matches", func(b *testing.B) { benchmarkMutes(b, lastRuleMatchesBenchmark(b, 10000)) }) } // benchmarkOptions allows the declaration of a wide range of benchmarks. type benchmarkOptions struct { // n is the total number of inhibition rules. n int // newRuleFunc creates the next inhibition rule. It is called n times. newRuleFunc func(idx int) config.InhibitRule // newAlertsFunc creates the inhibiting alerts for each inhibition rule. // It is called n times. newAlertsFunc func(idx int, r config.InhibitRule) []types.Alert // benchFunc runs the benchmark. benchFunc func(mutesFunc func(model.LabelSet) bool) error } // allRulesMatchBenchmark returns a new benchmark where all inhibition rules // inhibit the label dst=0. It supports a number of variations, including // customization of the number of inhibition rules, and the number of // inhibiting alerts per inhibition rule. // // The source matchers are suffixed with the position of the inhibition rule // in the list (e.g. src=1, src=2, etc...). The target matchers are the same // across all inhibition rules (dst=0). // // Each inhibition rule can have zero or more alerts that match the source // matchers, and is determined with numInhibitingAlerts. // // It expects dst=0 to be muted and will fail if not. func allRulesMatchBenchmark(b *testing.B, numInhibitionRules, numInhibitingAlerts int) benchmarkOptions { return benchmarkOptions{ n: numInhibitionRules, newRuleFunc: func(idx int) config.InhibitRule { return config.InhibitRule{ SourceMatchers: config.Matchers{ mustNewMatcher(b, labels.MatchEqual, "src", strconv.Itoa(idx)), }, TargetMatchers: config.Matchers{ mustNewMatcher(b, labels.MatchEqual, "dst", "0"), }, } }, newAlertsFunc: func(idx int, _ config.InhibitRule) []types.Alert { var alerts []types.Alert for i := 0; i < numInhibitingAlerts; i++ { alerts = append(alerts, types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "src": model.LabelValue(strconv.Itoa(idx)), "idx": model.LabelValue(strconv.Itoa(i)), }, }, }) } return alerts }, benchFunc: func(mutesFunc func(set model.LabelSet) bool) error { if ok := mutesFunc(model.LabelSet{"dst": "0"}); !ok { return errors.New("expected dst=0 to be muted") } return nil }, } } // lastRuleMatchesBenchmark returns a new benchmark where the last inhibition // rule inhibits the label dst=0. All other inhibition rules are no-ops. // // The source matchers are suffixed with the position of the inhibition rule // in the list (e.g. src=1, src=2, etc...). The target matchers are the same // across all inhibition rules (dst=0). // // It expects dst=0 to be muted and will fail if not. func lastRuleMatchesBenchmark(b *testing.B, n int) benchmarkOptions { return benchmarkOptions{ n: n, newRuleFunc: func(idx int) config.InhibitRule { return config.InhibitRule{ SourceMatchers: config.Matchers{ mustNewMatcher(b, labels.MatchEqual, "src", strconv.Itoa(idx)), }, TargetMatchers: config.Matchers{ mustNewMatcher(b, labels.MatchEqual, "dst", "0"), }, } }, newAlertsFunc: func(idx int, _ config.InhibitRule) []types.Alert { // Do not create an alert unless it is the last inhibition rule. if idx < n-1 { return nil } return []types.Alert{{ Alert: model.Alert{ Labels: model.LabelSet{ "src": model.LabelValue(strconv.Itoa(idx)), }, }, }} }, benchFunc: func(mutesFunc func(set model.LabelSet) bool) error { if ok := mutesFunc(model.LabelSet{"dst": "0"}); !ok { return errors.New("expected dst=0 to be muted") } return nil }, } } func benchmarkMutes(b *testing.B, opts benchmarkOptions) { r := prometheus.NewRegistry() m := types.NewMarker(r) s, err := mem.NewAlerts(context.TODO(), m, time.Minute, nil, promslog.NewNopLogger(), r) if err != nil { b.Fatal(err) } defer s.Close() alerts, rules := benchmarkFromOptions(opts) for _, a := range alerts { tmp := a if err = s.Put(&tmp); err != nil { b.Fatal(err) } } ih := NewInhibitor(s, rules, m, promslog.NewNopLogger()) defer ih.Stop() go ih.Run() // Wait some time for the inhibitor to seed its cache. <-time.After(time.Second) b.ResetTimer() for i := 0; i < b.N; i++ { require.NoError(b, opts.benchFunc(ih.Mutes)) } } func benchmarkFromOptions(opts benchmarkOptions) ([]types.Alert, []config.InhibitRule) { var ( alerts = make([]types.Alert, 0, opts.n) rules = make([]config.InhibitRule, 0, opts.n) ) for i := 0; i < opts.n; i++ { r := opts.newRuleFunc(i) alerts = append(alerts, opts.newAlertsFunc(i, r)...) rules = append(rules, r) } return alerts, rules } func mustNewMatcher(b *testing.B, op labels.MatchType, name, value string) *labels.Matcher { m, err := labels.NewMatcher(op, name, value) require.NoError(b, err) return m } prometheus-alertmanager-0.28.1+ds/inhibit/inhibit_test.go000066400000000000000000000307571476331240200235170ustar00rootroot00000000000000// Copyright 2016 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package inhibit import ( "testing" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/pkg/labels" "github.com/prometheus/alertmanager/provider" "github.com/prometheus/alertmanager/store" "github.com/prometheus/alertmanager/types" ) var nopLogger = promslog.NewNopLogger() func TestInhibitRuleHasEqual(t *testing.T) { t.Parallel() now := time.Now() cases := []struct { initial map[model.Fingerprint]*types.Alert equal model.LabelNames input model.LabelSet result bool }{ { // No source alerts at all. initial: map[model.Fingerprint]*types.Alert{}, input: model.LabelSet{"a": "b"}, result: false, }, { // No equal labels, any source alerts satisfies the requirement. initial: map[model.Fingerprint]*types.Alert{1: {}}, input: model.LabelSet{"a": "b"}, result: true, }, { // Matching but already resolved. initial: map[model.Fingerprint]*types.Alert{ 1: { Alert: model.Alert{ Labels: model.LabelSet{"a": "b", "b": "f"}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(-time.Second), }, }, 2: { Alert: model.Alert{ Labels: model.LabelSet{"a": "b", "b": "c"}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(-time.Second), }, }, }, equal: model.LabelNames{"a", "b"}, input: model.LabelSet{"a": "b", "b": "c"}, result: false, }, { // Matching and unresolved. initial: map[model.Fingerprint]*types.Alert{ 1: { Alert: model.Alert{ Labels: model.LabelSet{"a": "b", "c": "d"}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(-time.Second), }, }, 2: { Alert: model.Alert{ Labels: model.LabelSet{"a": "b", "c": "f"}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(time.Hour), }, }, }, equal: model.LabelNames{"a"}, input: model.LabelSet{"a": "b"}, result: true, }, { // Equal label does not match. initial: map[model.Fingerprint]*types.Alert{ 1: { Alert: model.Alert{ Labels: model.LabelSet{"a": "c", "c": "d"}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(-time.Second), }, }, 2: { Alert: model.Alert{ Labels: model.LabelSet{"a": "c", "c": "f"}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(-time.Second), }, }, }, equal: model.LabelNames{"a"}, input: model.LabelSet{"a": "b"}, result: false, }, } for _, c := range cases { r := &InhibitRule{ Equal: map[model.LabelName]struct{}{}, scache: store.NewAlerts(), } for _, ln := range c.equal { r.Equal[ln] = struct{}{} } for _, v := range c.initial { r.scache.Set(v) } if _, have := r.hasEqual(c.input, false); have != c.result { t.Errorf("Unexpected result %t, expected %t", have, c.result) } } } func TestInhibitRuleMatches(t *testing.T) { t.Parallel() rule1 := config.InhibitRule{ SourceMatch: map[string]string{"s1": "1"}, TargetMatch: map[string]string{"t1": "1"}, Equal: []string{"e"}, } rule2 := config.InhibitRule{ SourceMatch: map[string]string{"s2": "1"}, TargetMatch: map[string]string{"t2": "1"}, Equal: []string{"e"}, } m := types.NewMarker(prometheus.NewRegistry()) ih := NewInhibitor(nil, []config.InhibitRule{rule1, rule2}, m, nopLogger) now := time.Now() // Active alert that matches the source filter of rule1. sourceAlert1 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"s1": "1", "t1": "2", "e": "1"}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(time.Hour), }, } // Active alert that matches the source filter _and_ the target filter of rule2. sourceAlert2 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"s2": "1", "t2": "1", "e": "1"}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(time.Hour), }, } ih.rules[0].scache = store.NewAlerts() ih.rules[0].scache.Set(sourceAlert1) ih.rules[1].scache = store.NewAlerts() ih.rules[1].scache.Set(sourceAlert2) cases := []struct { target model.LabelSet expected bool }{ { // Matches target filter of rule1, inhibited. target: model.LabelSet{"t1": "1", "e": "1"}, expected: true, }, { // Matches target filter of rule2, inhibited. target: model.LabelSet{"t2": "1", "e": "1"}, expected: true, }, { // Matches target filter of rule1 (plus noise), inhibited. target: model.LabelSet{"t1": "1", "t3": "1", "e": "1"}, expected: true, }, { // Matches target filter of rule1 plus rule2, inhibited. target: model.LabelSet{"t1": "1", "t2": "1", "e": "1"}, expected: true, }, { // Doesn't match target filter, not inhibited. target: model.LabelSet{"t1": "0", "e": "1"}, expected: false, }, { // Matches both source and target filters of rule1, // inhibited because sourceAlert1 matches only the // source filter of rule1. target: model.LabelSet{"s1": "1", "t1": "1", "e": "1"}, expected: true, }, { // Matches both source and target filters of rule2, // not inhibited because sourceAlert2 matches also both the // source and target filter of rule2. target: model.LabelSet{"s2": "1", "t2": "1", "e": "1"}, expected: false, }, { // Matches target filter, equal label doesn't match, not inhibited target: model.LabelSet{"t1": "1", "e": "0"}, expected: false, }, } for _, c := range cases { if actual := ih.Mutes(c.target); actual != c.expected { t.Errorf("Expected (*Inhibitor).Mutes(%v) to return %t but got %t", c.target, c.expected, actual) } } } func TestInhibitRuleMatchers(t *testing.T) { t.Parallel() rule1 := config.InhibitRule{ SourceMatchers: config.Matchers{&labels.Matcher{Type: labels.MatchEqual, Name: "s1", Value: "1"}}, TargetMatchers: config.Matchers{&labels.Matcher{Type: labels.MatchNotEqual, Name: "t1", Value: "1"}}, Equal: []string{"e"}, } rule2 := config.InhibitRule{ SourceMatchers: config.Matchers{&labels.Matcher{Type: labels.MatchEqual, Name: "s2", Value: "1"}}, TargetMatchers: config.Matchers{&labels.Matcher{Type: labels.MatchEqual, Name: "t2", Value: "1"}}, Equal: []string{"e"}, } m := types.NewMarker(prometheus.NewRegistry()) ih := NewInhibitor(nil, []config.InhibitRule{rule1, rule2}, m, nopLogger) now := time.Now() // Active alert that matches the source filter of rule1. sourceAlert1 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"s1": "1", "t1": "2", "e": "1"}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(time.Hour), }, } // Active alert that matches the source filter _and_ the target filter of rule2. sourceAlert2 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"s2": "1", "t2": "1", "e": "1"}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(time.Hour), }, } ih.rules[0].scache = store.NewAlerts() ih.rules[0].scache.Set(sourceAlert1) ih.rules[1].scache = store.NewAlerts() ih.rules[1].scache.Set(sourceAlert2) cases := []struct { target model.LabelSet expected bool }{ { // Matches target filter of rule1, inhibited. target: model.LabelSet{"t1": "1", "e": "1"}, expected: false, }, { // Matches target filter of rule2, inhibited. target: model.LabelSet{"t2": "1", "e": "1"}, expected: true, }, { // Matches target filter of rule1 (plus noise), inhibited. target: model.LabelSet{"t1": "1", "t3": "1", "e": "1"}, expected: false, }, { // Matches target filter of rule1 plus rule2, inhibited. target: model.LabelSet{"t1": "1", "t2": "1", "e": "1"}, expected: true, }, { // Doesn't match target filter, not inhibited. target: model.LabelSet{"t1": "0", "e": "1"}, expected: true, }, { // Matches both source and target filters of rule1, // inhibited because sourceAlert1 matches only the // source filter of rule1. target: model.LabelSet{"s1": "1", "t1": "1", "e": "1"}, expected: false, }, { // Matches both source and target filters of rule2, // not inhibited because sourceAlert2 matches also both the // source and target filter of rule2. target: model.LabelSet{"s2": "1", "t2": "1", "e": "1"}, expected: true, }, { // Matches target filter, equal label doesn't match, not inhibited target: model.LabelSet{"t1": "1", "e": "0"}, expected: false, }, } for _, c := range cases { if actual := ih.Mutes(c.target); actual != c.expected { t.Errorf("Expected (*Inhibitor).Mutes(%v) to return %t but got %t", c.target, c.expected, actual) } } } type fakeAlerts struct { alerts []*types.Alert finished chan struct{} } func newFakeAlerts(alerts []*types.Alert) *fakeAlerts { return &fakeAlerts{ alerts: alerts, finished: make(chan struct{}), } } func (f *fakeAlerts) GetPending() provider.AlertIterator { return nil } func (f *fakeAlerts) Get(model.Fingerprint) (*types.Alert, error) { return nil, nil } func (f *fakeAlerts) Put(...*types.Alert) error { return nil } func (f *fakeAlerts) Subscribe() provider.AlertIterator { ch := make(chan *types.Alert) done := make(chan struct{}) go func() { for _, a := range f.alerts { ch <- a } // Send another (meaningless) alert to make sure that the inhibitor has // processed everything. ch <- &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{}, StartsAt: time.Now(), }, } close(f.finished) <-done }() return provider.NewAlertIterator(ch, done, nil) } func TestInhibit(t *testing.T) { t.Parallel() now := time.Now() inhibitRule := func() config.InhibitRule { return config.InhibitRule{ SourceMatch: map[string]string{"s": "1"}, TargetMatch: map[string]string{"t": "1"}, Equal: []string{"e"}, } } // alertOne is muted by alertTwo when it is active. alertOne := func() *types.Alert { return &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"t": "1", "e": "f"}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(time.Hour), }, } } alertTwo := func(resolved bool) *types.Alert { var end time.Time if resolved { end = now.Add(-time.Second) } else { end = now.Add(time.Hour) } return &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"s": "1", "e": "f"}, StartsAt: now.Add(-time.Minute), EndsAt: end, }, } } type exp struct { lbls model.LabelSet muted bool } for i, tc := range []struct { alerts []*types.Alert expected []exp }{ { // alertOne shouldn't be muted since alertTwo hasn't fired. alerts: []*types.Alert{alertOne()}, expected: []exp{ { lbls: model.LabelSet{"t": "1", "e": "f"}, muted: false, }, }, }, { // alertOne should be muted by alertTwo which is active. alerts: []*types.Alert{alertOne(), alertTwo(false)}, expected: []exp{ { lbls: model.LabelSet{"t": "1", "e": "f"}, muted: true, }, { lbls: model.LabelSet{"s": "1", "e": "f"}, muted: false, }, }, }, { // alertOne shouldn't be muted since alertTwo is resolved. alerts: []*types.Alert{alertOne(), alertTwo(false), alertTwo(true)}, expected: []exp{ { lbls: model.LabelSet{"t": "1", "e": "f"}, muted: false, }, { lbls: model.LabelSet{"s": "1", "e": "f"}, muted: false, }, }, }, } { ap := newFakeAlerts(tc.alerts) mk := types.NewMarker(prometheus.NewRegistry()) inhibitor := NewInhibitor(ap, []config.InhibitRule{inhibitRule()}, mk, nopLogger) go func() { for ap.finished != nil { select { case <-ap.finished: ap.finished = nil default: } } inhibitor.Stop() }() inhibitor.Run() for _, expected := range tc.expected { if inhibitor.Mutes(expected.lbls) != expected.muted { mute := "unmuted" if expected.muted { mute = "muted" } t.Errorf("tc: %d, expected alert with labels %q to be %s", i, expected.lbls, mute) } } } } prometheus-alertmanager-0.28.1+ds/matcher/000077500000000000000000000000001476331240200204645ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/matcher/compat/000077500000000000000000000000001476331240200217475ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/matcher/compat/parse.go000066400000000000000000000211101476331240200234030ustar00rootroot00000000000000// Copyright 2023 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package compat import ( "fmt" "log/slog" "reflect" "strings" "unicode/utf8" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/prometheus/alertmanager/featurecontrol" "github.com/prometheus/alertmanager/matcher/parse" "github.com/prometheus/alertmanager/pkg/labels" ) var ( isValidLabelName = isValidClassicLabelName(promslog.NewNopLogger()) parseMatcher = ClassicMatcherParser(promslog.NewNopLogger()) parseMatchers = ClassicMatchersParser(promslog.NewNopLogger()) ) // IsValidLabelName returns true if the string is a valid label name. func IsValidLabelName(name model.LabelName) bool { return isValidLabelName(name) } type ParseMatcher func(input, origin string) (*labels.Matcher, error) type ParseMatchers func(input, origin string) (labels.Matchers, error) // Matcher parses the matcher in the input string. It returns an error // if the input is invalid or contains two or more matchers. func Matcher(input, origin string) (*labels.Matcher, error) { return parseMatcher(input, origin) } // Matchers parses one or more matchers in the input string. It returns // an error if the input is invalid. func Matchers(input, origin string) (labels.Matchers, error) { return parseMatchers(input, origin) } // InitFromFlags initializes the compat package from the flagger. func InitFromFlags(l *slog.Logger, f featurecontrol.Flagger) { if f.ClassicMode() { isValidLabelName = isValidClassicLabelName(l) parseMatcher = ClassicMatcherParser(l) parseMatchers = ClassicMatchersParser(l) } else if f.UTF8StrictMode() { isValidLabelName = isValidUTF8LabelName(l) parseMatcher = UTF8MatcherParser(l) parseMatchers = UTF8MatchersParser(l) } else { isValidLabelName = isValidUTF8LabelName(l) parseMatcher = FallbackMatcherParser(l) parseMatchers = FallbackMatchersParser(l) } } // ClassicMatcherParser uses the pkg/labels parser to parse the matcher in // the input string. func ClassicMatcherParser(l *slog.Logger) ParseMatcher { return func(input, origin string) (matcher *labels.Matcher, err error) { l.Debug("Parsing with classic matchers parser", "input", input, "origin", origin) return labels.ParseMatcher(input) } } // ClassicMatchersParser uses the pkg/labels parser to parse zero or more // matchers in the input string. It returns an error if the input is invalid. func ClassicMatchersParser(l *slog.Logger) ParseMatchers { return func(input, origin string) (matchers labels.Matchers, err error) { l.Debug("Parsing with classic matchers parser", "input", input, "origin", origin) return labels.ParseMatchers(input) } } // UTF8MatcherParser uses the new matcher/parse parser to parse the matcher // in the input string. If this fails it does not revert to the pkg/labels parser. func UTF8MatcherParser(l *slog.Logger) ParseMatcher { return func(input, origin string) (matcher *labels.Matcher, err error) { l.Debug("Parsing with UTF-8 matchers parser", "input", input, "origin", origin) if strings.HasPrefix(input, "{") || strings.HasSuffix(input, "}") { return nil, fmt.Errorf("unexpected open or close brace: %s", input) } return parse.Matcher(input) } } // UTF8MatchersParser uses the new matcher/parse parser to parse zero or more // matchers in the input string. If this fails it does not revert to the // pkg/labels parser. func UTF8MatchersParser(l *slog.Logger) ParseMatchers { return func(input, origin string) (matchers labels.Matchers, err error) { l.Debug("Parsing with UTF-8 matchers parser", "input", input, "origin", origin) return parse.Matchers(input) } } // FallbackMatcherParser uses the new matcher/parse parser to parse zero or more // matchers in the string. If this fails it reverts to the pkg/labels parser and // emits a warning log line. func FallbackMatcherParser(l *slog.Logger) ParseMatcher { return func(input, origin string) (matcher *labels.Matcher, err error) { l.Debug("Parsing with UTF-8 matchers parser, with fallback to classic matchers parser", "input", input, "origin", origin) if strings.HasPrefix(input, "{") || strings.HasSuffix(input, "}") { return nil, fmt.Errorf("unexpected open or close brace: %s", input) } // Parse the input in both parsers to look for disagreement and incompatible // inputs. nMatcher, nErr := parse.Matcher(input) cMatcher, cErr := labels.ParseMatcher(input) if nErr != nil { // If the input is invalid in both parsers, return the error. if cErr != nil { return nil, cErr } // The input is valid in the pkg/labels parser, but not the matcher/parse // parser. This means the input is not forwards compatible. suggestion := cMatcher.String() l.Warn("Alertmanager is moving to a new parser for labels and matchers, and this input is incompatible. Alertmanager has instead parsed the input using the classic matchers parser as a fallback. To make this input compatible with the UTF-8 matchers parser please make sure all regular expressions and values are double-quoted and backslashes are escaped. If you are still seeing this message please open an issue.", "input", input, "origin", origin, "err", nErr, "suggestion", suggestion) return cMatcher, nil } // If the input is valid in both parsers, but produces different results, // then there is disagreement. if nErr == nil && cErr == nil && !reflect.DeepEqual(nMatcher, cMatcher) { l.Warn("Matchers input has disagreement", "input", input, "origin", origin) return cMatcher, nil } return nMatcher, nil } } // FallbackMatchersParser uses the new matcher/parse parser to parse the // matcher in the input string. If this fails it falls back to the pkg/labels // parser and emits a warning log line. func FallbackMatchersParser(l *slog.Logger) ParseMatchers { return func(input, origin string) (matchers labels.Matchers, err error) { l.Debug("Parsing with UTF-8 matchers parser, with fallback to classic matchers parser", "input", input, "origin", origin) // Parse the input in both parsers to look for disagreement and incompatible // inputs. nMatchers, nErr := parse.Matchers(input) cMatchers, cErr := labels.ParseMatchers(input) if nErr != nil { // If the input is invalid in both parsers, return the error. if cErr != nil { return nil, cErr } // The input is valid in the pkg/labels parser, but not the matcher/parse // parser. This means the input is not forwards compatible. var sb strings.Builder for i, n := range cMatchers { sb.WriteString(n.String()) if i < len(cMatchers)-1 { sb.WriteRune(',') } } suggestion := sb.String() // The input is valid in the pkg/labels parser, but not the // new matcher/parse parser. l.Warn("Alertmanager is moving to a new parser for labels and matchers, and this input is incompatible. Alertmanager has instead parsed the input using the classic matchers parser as a fallback. To make this input compatible with the UTF-8 matchers parser please make sure all regular expressions and values are double-quoted and backslashes are escaped. If you are still seeing this message please open an issue.", "input", input, "origin", origin, "err", nErr, "suggestion", suggestion) return cMatchers, nil } // If the input is valid in both parsers, but produces different results, // then there is disagreement. We need to compare to labels.Matchers(cMatchers) // as cMatchers is a []*labels.Matcher not labels.Matchers. if nErr == nil && cErr == nil && !reflect.DeepEqual(nMatchers, labels.Matchers(cMatchers)) { l.Warn("Matchers input has disagreement", "input", input, "origin", origin) return cMatchers, nil } return nMatchers, nil } } // isValidClassicLabelName returns true if the string is a valid classic label name. func isValidClassicLabelName(_ *slog.Logger) func(model.LabelName) bool { return func(name model.LabelName) bool { return name.IsValid() } } // isValidUTF8LabelName returns true if the string is a valid UTF-8 label name. func isValidUTF8LabelName(_ *slog.Logger) func(model.LabelName) bool { return func(name model.LabelName) bool { if len(name) == 0 { return false } return utf8.ValidString(string(name)) } } prometheus-alertmanager-0.28.1+ds/matcher/compat/parse_test.go000066400000000000000000000132161476331240200244520ustar00rootroot00000000000000// Copyright 2023 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package compat import ( "testing" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/pkg/labels" ) func TestFallbackMatcherParser(t *testing.T) { tests := []struct { name string input string expected *labels.Matcher err string }{{ name: "input is accepted", input: "foo=bar", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), }, { name: "input is accepted in neither", input: "foo!bar", err: "bad matcher format: foo!bar", }, { name: "input is accepted in matchers/parse but not pkg/labels", input: "foo🙂=bar", expected: mustNewMatcher(t, labels.MatchEqual, "foo🙂", "bar"), }, { name: "input is accepted in pkg/labels but not matchers/parse", input: "foo=!bar\\n", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "!bar\n"), }, { // This input causes disagreement because \xf0\x9f\x99\x82 is the byte sequence for 🙂, // which is not understood by pkg/labels but is understood by matchers/parse. In such cases, // the fallback parser returns the result from pkg/labels. name: "input causes disagreement", input: "foo=\"\\xf0\\x9f\\x99\\x82\"", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "\\xf0\\x9f\\x99\\x82"), }} for _, test := range tests { t.Run(test.name, func(t *testing.T) { f := FallbackMatcherParser(promslog.NewNopLogger()) matcher, err := f(test.input, "test") if test.err != "" { require.EqualError(t, err, test.err) } else { require.NoError(t, err) require.EqualValues(t, test.expected, matcher) } }) } } func TestFallbackMatchersParser(t *testing.T) { tests := []struct { name string input string expected labels.Matchers err string }{{ name: "input is accepted", input: "{foo=bar,bar=baz}", expected: labels.Matchers{ mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), mustNewMatcher(t, labels.MatchEqual, "bar", "baz"), }, }, { name: "input is accepted in neither", input: "{foo!bar}", err: "bad matcher format: foo!bar", }, { name: "input is accepted in matchers/parse but not pkg/labels", input: "{foo🙂=bar,bar=baz🙂}", expected: labels.Matchers{ mustNewMatcher(t, labels.MatchEqual, "foo🙂", "bar"), mustNewMatcher(t, labels.MatchEqual, "bar", "baz🙂"), }, }, { name: "is accepted in pkg/labels but not matchers/parse", input: "{foo=!bar,bar=$baz\\n}", expected: labels.Matchers{ mustNewMatcher(t, labels.MatchEqual, "foo", "!bar"), mustNewMatcher(t, labels.MatchEqual, "bar", "$baz\n"), }, }, { // This input causes disagreement because \xf0\x9f\x99\x82 is the byte sequence for 🙂, // which is not understood by pkg/labels but is understood by matchers/parse. In such cases, // the fallback parser returns the result from pkg/labels. name: "input causes disagreement", input: "{foo=\"\\xf0\\x9f\\x99\\x82\"}", expected: labels.Matchers{ mustNewMatcher(t, labels.MatchEqual, "foo", "\\xf0\\x9f\\x99\\x82"), }, }} for _, test := range tests { t.Run(test.name, func(t *testing.T) { f := FallbackMatchersParser(promslog.NewNopLogger()) matchers, err := f(test.input, "test") if test.err != "" { require.EqualError(t, err, test.err) } else { require.NoError(t, err) require.EqualValues(t, test.expected, matchers) } }) } } func mustNewMatcher(t *testing.T, op labels.MatchType, name, value string) *labels.Matcher { m, err := labels.NewMatcher(op, name, value) require.NoError(t, err) return m } func TestIsValidClassicLabelName(t *testing.T) { tests := []struct { name string input model.LabelName expected bool }{{ name: "foo is accepted", input: "foo", expected: true, }, { name: "starts with underscore and ends with number is accepted", input: "_foo1", expected: true, }, { name: "empty is not accepted", input: "", expected: false, }, { name: "starts with number is not accepted", input: "0foo", expected: false, }, { name: "contains emoji is not accepted", input: "foo🙂", expected: false, }} for _, test := range tests { fn := isValidClassicLabelName(promslog.NewNopLogger()) t.Run(test.name, func(t *testing.T) { require.Equal(t, test.expected, fn(test.input)) }) } } func TestIsValidUTF8LabelName(t *testing.T) { tests := []struct { name string input model.LabelName expected bool }{{ name: "foo is accepted", input: "foo", expected: true, }, { name: "starts with underscore and ends with number is accepted", input: "_foo1", expected: true, }, { name: "starts with number is accepted", input: "0foo", expected: true, }, { name: "contains emoji is accepted", input: "foo🙂", expected: true, }, { name: "empty is not accepted", input: "", expected: false, }} for _, test := range tests { fn := isValidUTF8LabelName(promslog.NewNopLogger()) t.Run(test.name, func(t *testing.T) { require.Equal(t, test.expected, fn(test.input)) }) } } prometheus-alertmanager-0.28.1+ds/matcher/compliance/000077500000000000000000000000001476331240200225765ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/matcher/compliance/compliance_test.go000066400000000000000000000271751476331240200263120ustar00rootroot00000000000000// Copyright 2023 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package compliance import ( "reflect" "testing" "github.com/prometheus/alertmanager/matcher/parse" "github.com/prometheus/alertmanager/pkg/labels" ) func TestCompliance(t *testing.T) { for _, tc := range []struct { input string want labels.Matchers err string skip bool }{ { input: `{}`, want: labels.Matchers{}, skip: true, }, { input: `{foo='}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "'") return append(ms, m) }(), skip: true, }, { input: "{foo=`}", want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "`") return append(ms, m) }(), skip: true, }, { input: `{foo=\n}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "\n") return append(ms, m) }(), skip: true, }, { input: `{foo=bar\n}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar\n") return append(ms, m) }(), skip: true, }, { input: `{foo=\t}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "\\t") return append(ms, m) }(), skip: true, }, { input: `{foo=bar\t}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar\\t") return append(ms, m) }(), skip: true, }, { input: `{foo=bar\}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar\\") return append(ms, m) }(), skip: true, }, { input: `{foo=bar\\}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar\\") return append(ms, m) }(), skip: true, }, { input: `{foo=\"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "\"") return append(ms, m) }(), skip: true, }, { input: `{foo=bar\"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar\"") return append(ms, m) }(), skip: true, }, { input: `{foo=bar}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar") return append(ms, m) }(), }, { input: `{foo="bar"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar") return append(ms, m) }(), }, { input: `{foo=~bar.*}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchRegexp, "foo", "bar.*") return append(ms, m) }(), }, { input: `{foo=~"bar.*"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchRegexp, "foo", "bar.*") return append(ms, m) }(), }, { input: `{foo!=bar}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchNotEqual, "foo", "bar") return append(ms, m) }(), }, { input: `{foo!="bar"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchNotEqual, "foo", "bar") return append(ms, m) }(), }, { input: `{foo!~bar.*}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchNotRegexp, "foo", "bar.*") return append(ms, m) }(), }, { input: `{foo!~"bar.*"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchNotRegexp, "foo", "bar.*") return append(ms, m) }(), }, { input: `{foo="bar", baz!="quux"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar") m2, _ := labels.NewMatcher(labels.MatchNotEqual, "baz", "quux") return append(ms, m, m2) }(), }, { input: `{foo="bar", baz!~"quux.*"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar") m2, _ := labels.NewMatcher(labels.MatchNotRegexp, "baz", "quux.*") return append(ms, m, m2) }(), }, { input: `{foo="bar",baz!~".*quux", derp="wat"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar") m2, _ := labels.NewMatcher(labels.MatchNotRegexp, "baz", ".*quux") m3, _ := labels.NewMatcher(labels.MatchEqual, "derp", "wat") return append(ms, m, m2, m3) }(), }, { input: `{foo="bar", baz!="quux", derp="wat"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar") m2, _ := labels.NewMatcher(labels.MatchNotEqual, "baz", "quux") m3, _ := labels.NewMatcher(labels.MatchEqual, "derp", "wat") return append(ms, m, m2, m3) }(), }, { input: `{foo="bar", baz!~".*quux.*", derp="wat"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar") m2, _ := labels.NewMatcher(labels.MatchNotRegexp, "baz", ".*quux.*") m3, _ := labels.NewMatcher(labels.MatchEqual, "derp", "wat") return append(ms, m, m2, m3) }(), }, { input: `{foo="bar", instance=~"some-api.*"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar") m2, _ := labels.NewMatcher(labels.MatchRegexp, "instance", "some-api.*") return append(ms, m, m2) }(), }, { input: `{foo=""}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "") return append(ms, m) }(), }, { input: `{foo="bar,quux", job="job1"}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar,quux") m2, _ := labels.NewMatcher(labels.MatchEqual, "job", "job1") return append(ms, m, m2) }(), }, { input: `{foo = "bar", dings != "bums", }`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar") m2, _ := labels.NewMatcher(labels.MatchNotEqual, "dings", "bums") return append(ms, m, m2) }(), }, { input: `foo=bar,dings!=bums`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar") m2, _ := labels.NewMatcher(labels.MatchNotEqual, "dings", "bums") return append(ms, m, m2) }(), }, { input: `{quote="She said: \"Hi, ladies! That's gender-neutral…\""}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "quote", `She said: "Hi, ladies! That's gender-neutral…"`) return append(ms, m) }(), }, { input: `statuscode=~"5.."`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchRegexp, "statuscode", "5..") return append(ms, m) }(), }, { input: `tricky=~~~`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchRegexp, "tricky", "~~") return append(ms, m) }(), skip: true, }, { input: `trickier==\\=\=\"`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "trickier", `=\=\="`) return append(ms, m) }(), skip: true, }, { input: `contains_quote != "\"" , contains_comma !~ "foo,bar" , `, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchNotEqual, "contains_quote", `"`) m2, _ := labels.NewMatcher(labels.MatchNotRegexp, "contains_comma", "foo,bar") return append(ms, m, m2) }(), }, { input: `{foo=bar}}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar}") return append(ms, m) }(), skip: true, }, { input: `{foo=bar}},}`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "bar}}") return append(ms, m) }(), skip: true, }, { input: `{foo=,bar=}}`, want: func() labels.Matchers { ms := labels.Matchers{} m1, _ := labels.NewMatcher(labels.MatchEqual, "foo", "") m2, _ := labels.NewMatcher(labels.MatchEqual, "bar", "}") return append(ms, m1, m2) }(), skip: true, }, { input: `job=`, want: func() labels.Matchers { m, _ := labels.NewMatcher(labels.MatchEqual, "job", "") return labels.Matchers{m} }(), skip: true, }, { input: `{name-with-dashes = "bar"}`, want: func() labels.Matchers { m, _ := labels.NewMatcher(labels.MatchEqual, "name-with-dashes", "bar") return labels.Matchers{m} }(), }, { input: `{,}`, err: "bad matcher format: ", }, { input: `job="value`, err: `matcher value contains unescaped double quote: "value`, }, { input: `job=value"`, err: `matcher value contains unescaped double quote: value"`, }, { input: `trickier==\\=\=\""`, err: `matcher value contains unescaped double quote: =\\=\=\""`, }, { input: `contains_unescaped_quote = foo"bar`, err: `matcher value contains unescaped double quote: foo"bar`, }, { input: `{foo=~"invalid[regexp"}`, err: "error parsing regexp: missing closing ]: `[regexp)$`", }, // Double escaped strings. { input: `"{foo=\"bar"}`, err: `bad matcher format: "{foo=\"bar"`, }, { input: `"foo=\"bar"`, err: `bad matcher format: "foo=\"bar"`, }, { input: `"foo=\"bar\""`, err: `bad matcher format: "foo=\"bar\""`, }, { input: `"foo=\"bar\"`, err: `bad matcher format: "foo=\"bar\"`, }, { input: `"{foo=\"bar\"}"`, err: `bad matcher format: "{foo=\"bar\"}"`, }, { input: `"foo="bar""`, err: `bad matcher format: "foo="bar""`, }, { input: `{{foo=`, err: `bad matcher format: {foo=`, }, { input: `{foo=`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "") return append(ms, m) }(), skip: true, }, { input: `{foo=}b`, want: func() labels.Matchers { ms := labels.Matchers{} m, _ := labels.NewMatcher(labels.MatchEqual, "foo", "}b") return append(ms, m) }(), skip: true, }, } { t.Run(tc.input, func(t *testing.T) { if tc.skip { t.Skip() } got, err := parse.Matchers(tc.input) if err != nil && tc.err == "" { t.Fatalf("got error where none expected: %v", err) } if err == nil && tc.err != "" { t.Fatalf("expected error but got none: %v", tc.err) } if !reflect.DeepEqual(got, tc.want) { t.Fatalf("matchers not equal:\ngot %s\nwant %s", got, tc.want) } }) } } prometheus-alertmanager-0.28.1+ds/matcher/parse/000077500000000000000000000000001476331240200215765ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/matcher/parse/bench_test.go000066400000000000000000000020071476331240200242420ustar00rootroot00000000000000// Copyright 2023 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package parse import ( "testing" ) const ( simpleExample = "{foo=\"bar\"}" complexExample = "{foo=\"bar\",bar=~\"[a-zA-Z0-9+]\"}" ) func BenchmarkParseSimple(b *testing.B) { for i := 0; i < b.N; i++ { if _, err := Matchers(simpleExample); err != nil { b.Fatal(err) } } } func BenchmarkParseComplex(b *testing.B) { for i := 0; i < b.N; i++ { if _, err := Matchers(complexExample); err != nil { b.Fatal(err) } } } prometheus-alertmanager-0.28.1+ds/matcher/parse/fuzz_test.go000066400000000000000000000017061476331240200241660ustar00rootroot00000000000000// Copyright 2023 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package parse import ( "testing" ) // FuzzParse fuzz tests the parser to see if we can make it panic. func FuzzParse(f *testing.F) { f.Add("{foo=bar,bar=~[a-zA-Z]+,baz!=qux,qux!~[0-9]+") f.Fuzz(func(t *testing.T, s string) { matchers, err := Matchers(s) if matchers != nil && err != nil { t.Errorf("Unexpected matchers and err: %v %s", matchers, err) } }) } prometheus-alertmanager-0.28.1+ds/matcher/parse/lexer.go000066400000000000000000000166151476331240200232550ustar00rootroot00000000000000// Copyright 2023 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package parse import ( "fmt" "strings" "unicode" "unicode/utf8" ) const ( eof rune = -1 ) func isReserved(r rune) bool { return unicode.IsSpace(r) || strings.ContainsRune("{}!=~,\\\"'`", r) } // expectedError is returned when the next rune does not match what is expected. type expectedError struct { position input string expected string } func (e expectedError) Error() string { if e.offsetEnd >= len(e.input) { return fmt.Sprintf("%d:%d: unexpected end of input, expected one of '%s'", e.columnStart, e.columnEnd, e.expected, ) } return fmt.Sprintf("%d:%d: %s: expected one of '%s'", e.columnStart, e.columnEnd, e.input[e.offsetStart:e.offsetEnd], e.expected, ) } // invalidInputError is returned when the next rune in the input does not match // the grammar of Prometheus-like matchers. type invalidInputError struct { position input string } func (e invalidInputError) Error() string { return fmt.Sprintf("%d:%d: %s: invalid input", e.columnStart, e.columnEnd, e.input[e.offsetStart:e.offsetEnd], ) } // unterminatedError is returned when text in quotes does not have a closing quote. type unterminatedError struct { position input string quote rune } func (e unterminatedError) Error() string { return fmt.Sprintf("%d:%d: %s: missing end %c", e.columnStart, e.columnEnd, e.input[e.offsetStart:e.offsetEnd], e.quote, ) } // lexer scans a sequence of tokens that match the grammar of Prometheus-like // matchers. A token is emitted for each call to scan() which returns the // next token in the input or an error if the input does not conform to the // grammar. A token can be one of a number of kinds and corresponds to a // subslice of the input. Once the input has been consumed successive calls to // scan() return a tokenEOF token. type lexer struct { input string err error start int // The offset of the current token. pos int // The position of the cursor in the input. width int // The width of the last rune. column int // The column offset of the current token. cols int // The number of columns (runes) decoded from the input. } // Scans the next token in the input or an error if the input does not // conform to the grammar. Once the input has been consumed successive // calls scan() return a tokenEOF token. func (l *lexer) scan() (token, error) { t := token{} // Do not attempt to emit more tokens if the input is invalid. if l.err != nil { return t, l.err } // Iterate over each rune in the input and either emit a token or an error. for r := l.next(); r != eof; r = l.next() { switch { case r == '{': t = l.emit(tokenOpenBrace) return t, l.err case r == '}': t = l.emit(tokenCloseBrace) return t, l.err case r == ',': t = l.emit(tokenComma) return t, l.err case r == '=' || r == '!': l.rewind() t, l.err = l.scanOperator() return t, l.err case r == '"': l.rewind() t, l.err = l.scanQuoted() return t, l.err case !isReserved(r): l.rewind() t, l.err = l.scanUnquoted() return t, l.err case unicode.IsSpace(r): l.skip() default: l.err = invalidInputError{ position: l.position(), input: l.input, } return t, l.err } } return t, l.err } func (l *lexer) scanOperator() (token, error) { // If the first rune is an '!' then it must be followed with either an // '=' or '~' to not match a string or regex. if l.accept("!") { if l.accept("=") { return l.emit(tokenNotEquals), nil } if l.accept("~") { return l.emit(tokenNotMatches), nil } return token{}, expectedError{ position: l.position(), input: l.input, expected: "=~", } } // If the first rune is an '=' then it can be followed with an optional // '~' to match a regex. if l.accept("=") { if l.accept("~") { return l.emit(tokenMatches), nil } return l.emit(tokenEquals), nil } return token{}, expectedError{ position: l.position(), input: l.input, expected: "!=", } } func (l *lexer) scanQuoted() (token, error) { if err := l.expect("\""); err != nil { return token{}, err } var isEscaped bool for r := l.next(); r != eof; r = l.next() { if isEscaped { isEscaped = false } else if r == '\\' { isEscaped = true } else if r == '"' { l.rewind() break } } if err := l.expect("\""); err != nil { return token{}, unterminatedError{ position: l.position(), input: l.input, quote: '"', } } return l.emit(tokenQuoted), nil } func (l *lexer) scanUnquoted() (token, error) { for r := l.next(); r != eof; r = l.next() { if isReserved(r) { l.rewind() break } } return l.emit(tokenUnquoted), nil } // peek the next token in the input or an error if the input does not // conform to the grammar. Once the input has been consumed successive // calls peek() return a tokenEOF token. func (l *lexer) peek() (token, error) { start := l.start pos := l.pos width := l.width column := l.column cols := l.cols // Do not reset l.err because we can return it on the next call to scan(). defer func() { l.start = start l.pos = pos l.width = width l.column = column l.cols = cols }() return l.scan() } // position returns the position of the last emitted token. func (l *lexer) position() position { return position{ offsetStart: l.start, offsetEnd: l.pos, columnStart: l.column, columnEnd: l.cols, } } // accept consumes the next if its one of the valid runes. // It returns true if the next rune was accepted, otherwise false. func (l *lexer) accept(valid string) bool { if strings.ContainsRune(valid, l.next()) { return true } l.rewind() return false } // expect consumes the next rune if its one of the valid runes. // It returns nil if the next rune is valid, otherwise an expectedError // error. func (l *lexer) expect(valid string) error { if strings.ContainsRune(valid, l.next()) { return nil } l.rewind() return expectedError{ position: l.position(), input: l.input, expected: valid, } } // emits returns the scanned input as a token. func (l *lexer) emit(kind tokenKind) token { t := token{ kind: kind, value: l.input[l.start:l.pos], position: l.position(), } l.start = l.pos l.column = l.cols return t } // next returns the next rune in the input or eof. func (l *lexer) next() rune { if l.pos >= len(l.input) { l.width = 0 return eof } r, width := utf8.DecodeRuneInString(l.input[l.pos:]) l.width = width l.pos += width l.cols++ return r } // rewind the last rune in the input. It should not be called more than once // between consecutive calls of next. func (l *lexer) rewind() { l.pos -= l.width // When the next rune in the input is eof the width is zero. This check // prevents cols from being decremented when the next rune being accepted // is instead eof. if l.width > 0 { l.cols-- } } // skip the scanned input between start and pos. func (l *lexer) skip() { l.start = l.pos l.column = l.cols } prometheus-alertmanager-0.28.1+ds/matcher/parse/lexer_test.go000066400000000000000000000324611476331240200243110ustar00rootroot00000000000000// Copyright 2023 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package parse import ( "testing" "github.com/stretchr/testify/require" ) func TestLexer_Scan(t *testing.T) { tests := []struct { name string input string expected []token err string }{{ name: "no input", input: "", }, { name: "open brace", input: "{", expected: []token{{ kind: tokenOpenBrace, value: "{", position: position{ offsetStart: 0, offsetEnd: 1, columnStart: 0, columnEnd: 1, }, }}, }, { name: "open brace with leading space", input: " {", expected: []token{{ kind: tokenOpenBrace, value: "{", position: position{ offsetStart: 1, offsetEnd: 2, columnStart: 1, columnEnd: 2, }, }}, }, { name: "close brace", input: "}", expected: []token{{ kind: tokenCloseBrace, value: "}", position: position{ offsetStart: 0, offsetEnd: 1, columnStart: 0, columnEnd: 1, }, }}, }, { name: "close brace with leading space", input: " }", expected: []token{{ kind: tokenCloseBrace, value: "}", position: position{ offsetStart: 1, offsetEnd: 2, columnStart: 1, columnEnd: 2, }, }}, }, { name: "open and closing braces", input: "{}", expected: []token{{ kind: tokenOpenBrace, value: "{", position: position{ offsetStart: 0, offsetEnd: 1, columnStart: 0, columnEnd: 1, }, }, { kind: tokenCloseBrace, value: "}", position: position{ offsetStart: 1, offsetEnd: 2, columnStart: 1, columnEnd: 2, }, }}, }, { name: "open and closing braces with space", input: "{ }", expected: []token{{ kind: tokenOpenBrace, value: "{", position: position{ offsetStart: 0, offsetEnd: 1, columnStart: 0, columnEnd: 1, }, }, { kind: tokenCloseBrace, value: "}", position: position{ offsetStart: 2, offsetEnd: 3, columnStart: 2, columnEnd: 3, }, }}, }, { name: "unquoted", input: "hello", expected: []token{{ kind: tokenUnquoted, value: "hello", position: position{ offsetStart: 0, offsetEnd: 5, columnStart: 0, columnEnd: 5, }, }}, }, { name: "unquoted with underscore", input: "hello_world", expected: []token{{ kind: tokenUnquoted, value: "hello_world", position: position{ offsetStart: 0, offsetEnd: 11, columnStart: 0, columnEnd: 11, }, }}, }, { name: "unquoted with colon", input: "hello:world", expected: []token{{ kind: tokenUnquoted, value: "hello:world", position: position{ offsetStart: 0, offsetEnd: 11, columnStart: 0, columnEnd: 11, }, }}, }, { name: "unquoted with numbers", input: "hello0123456789", expected: []token{{ kind: tokenUnquoted, value: "hello0123456789", position: position{ offsetStart: 0, offsetEnd: 15, columnStart: 0, columnEnd: 15, }, }}, }, { name: "unquoted can start with underscore", input: "_hello", expected: []token{{ kind: tokenUnquoted, value: "_hello", position: position{ offsetStart: 0, offsetEnd: 6, columnStart: 0, columnEnd: 6, }, }}, }, { name: "unquoted separated with space", input: "hello world", expected: []token{{ kind: tokenUnquoted, value: "hello", position: position{ offsetStart: 0, offsetEnd: 5, columnStart: 0, columnEnd: 5, }, }, { kind: tokenUnquoted, value: "world", position: position{ offsetStart: 6, offsetEnd: 11, columnStart: 6, columnEnd: 11, }, }}, }, { name: "unquoted $", input: "$", expected: []token{{ kind: tokenUnquoted, value: "$", position: position{ offsetStart: 0, offsetEnd: 1, columnStart: 0, columnEnd: 1, }, }}, }, { name: "unquoted emoji", input: "🙂", expected: []token{{ kind: tokenUnquoted, value: "🙂", position: position{ offsetStart: 0, offsetEnd: 4, columnStart: 0, columnEnd: 1, }, }}, }, { name: "unquoted unicode", input: "Σ", expected: []token{{ kind: tokenUnquoted, value: "Σ", position: position{ offsetStart: 0, offsetEnd: 2, columnStart: 0, columnEnd: 1, }, }}, }, { name: "unquoted unicode sentence", input: "hello🙂Σ world", expected: []token{{ kind: tokenUnquoted, value: "hello🙂Σ", position: position{ offsetStart: 0, offsetEnd: 11, columnStart: 0, columnEnd: 7, }, }, { kind: tokenUnquoted, value: "world", position: position{ offsetStart: 12, offsetEnd: 17, columnStart: 8, columnEnd: 13, }, }}, }, { name: "unquoted unicode sentence with unicode space", input: "hello🙂Σ\u202fworld", expected: []token{{ kind: tokenUnquoted, value: "hello🙂Σ", position: position{ offsetStart: 0, offsetEnd: 11, columnStart: 0, columnEnd: 7, }, }, { kind: tokenUnquoted, value: "world", position: position{ offsetStart: 14, offsetEnd: 19, columnStart: 8, columnEnd: 13, }, }}, }, { name: "quoted", input: "\"hello\"", expected: []token{{ kind: tokenQuoted, value: "\"hello\"", position: position{ offsetStart: 0, offsetEnd: 7, columnStart: 0, columnEnd: 7, }, }}, }, { name: "quoted with unicode", input: "\"hello 🙂\"", expected: []token{{ kind: tokenQuoted, value: "\"hello 🙂\"", position: position{ offsetStart: 0, offsetEnd: 12, columnStart: 0, columnEnd: 9, }, }}, }, { name: "quoted with space", input: "\"hello world\"", expected: []token{{ kind: tokenQuoted, value: "\"hello world\"", position: position{ offsetStart: 0, offsetEnd: 13, columnStart: 0, columnEnd: 13, }, }}, }, { name: "quoted with unicode space", input: "\"hello\u202fworld\"", expected: []token{{ kind: tokenQuoted, value: "\"hello\u202fworld\"", position: position{ offsetStart: 0, offsetEnd: 15, columnStart: 0, columnEnd: 13, }, }}, }, { name: "quoted with newline", input: "\"hello\nworld\"", expected: []token{{ kind: tokenQuoted, value: "\"hello\nworld\"", position: position{ offsetStart: 0, offsetEnd: 13, columnStart: 0, columnEnd: 13, }, }}, }, { name: "quoted with tab", input: "\"hello\tworld\"", expected: []token{{ kind: tokenQuoted, value: "\"hello\tworld\"", position: position{ offsetStart: 0, offsetEnd: 13, columnStart: 0, columnEnd: 13, }, }}, }, { name: "quoted with regex digit character class", input: "\"\\d+\"", expected: []token{{ kind: tokenQuoted, value: "\"\\d+\"", position: position{ offsetStart: 0, offsetEnd: 5, columnStart: 0, columnEnd: 5, }, }}, }, { name: "quoted with escaped regex digit character class", input: "\"\\\\d+\"", expected: []token{{ kind: tokenQuoted, value: "\"\\\\d+\"", position: position{ offsetStart: 0, offsetEnd: 6, columnStart: 0, columnEnd: 6, }, }}, }, { name: "quoted with escaped quotes", input: "\"hello \\\"world\\\"\"", expected: []token{{ kind: tokenQuoted, value: "\"hello \\\"world\\\"\"", position: position{ offsetStart: 0, offsetEnd: 17, columnStart: 0, columnEnd: 17, }, }}, }, { name: "quoted with escaped backslash", input: "\"hello world\\\\\"", expected: []token{{ kind: tokenQuoted, value: "\"hello world\\\\\"", position: position{ offsetStart: 0, offsetEnd: 15, columnStart: 0, columnEnd: 15, }, }}, }, { name: "equals operator", input: "=", expected: []token{{ kind: tokenEquals, value: "=", position: position{ offsetStart: 0, offsetEnd: 1, columnStart: 0, columnEnd: 1, }, }}, }, { name: "not equals operator", input: "!=", expected: []token{{ kind: tokenNotEquals, value: "!=", position: position{ offsetStart: 0, offsetEnd: 2, columnStart: 0, columnEnd: 2, }, }}, }, { name: "matches regex operator", input: "=~", expected: []token{{ kind: tokenMatches, value: "=~", position: position{ offsetStart: 0, offsetEnd: 2, columnStart: 0, columnEnd: 2, }, }}, }, { name: "not matches regex operator", input: "!~", expected: []token{{ kind: tokenNotMatches, value: "!~", position: position{ offsetStart: 0, offsetEnd: 2, columnStart: 0, columnEnd: 2, }, }}, }, { name: "invalid operator", input: "!", err: "0:1: unexpected end of input, expected one of '=~'", }, { name: "another invalid operator", input: "~", err: "0:1: ~: invalid input", }, { name: "unexpected ! after unquoted", input: "hello!", expected: []token{{ kind: tokenUnquoted, value: "hello", position: position{ offsetStart: 0, offsetEnd: 5, columnStart: 0, columnEnd: 5, }, }}, err: "5:6: unexpected end of input, expected one of '=~'", }, { name: "unexpected ! after operator", input: "=!", expected: []token{{ kind: tokenEquals, value: "=", position: position{ offsetStart: 0, offsetEnd: 1, columnStart: 0, columnEnd: 1, }, }}, err: "1:2: unexpected end of input, expected one of '=~'", }, { name: "unexpected !! after operator", input: "!=!!", expected: []token{{ kind: tokenNotEquals, value: "!=", position: position{ offsetStart: 0, offsetEnd: 2, columnStart: 0, columnEnd: 2, }, }}, err: "2:3: !: expected one of '=~'", }, { name: "unterminated quoted", input: "\"hello", err: "0:6: \"hello: missing end \"", }, { name: "unterminated quoted with escaped quote", input: "\"hello\\\"", err: "0:8: \"hello\\\": missing end \"", }} for _, test := range tests { t.Run(test.name, func(t *testing.T) { l := lexer{input: test.input} // scan all expected tokens. for i := 0; i < len(test.expected); i++ { tok, err := l.scan() require.NoError(t, err) require.Equal(t, test.expected[i], tok) } if test.err == "" { // Check there are no more tokens. tok, err := l.scan() require.NoError(t, err) require.Equal(t, token{}, tok) } else { // Check if expected error is returned. tok, err := l.scan() require.Equal(t, token{}, tok) require.EqualError(t, err, test.err) } }) } } // This test asserts that the lexer does not emit more tokens after an // error has occurred. func TestLexer_ScanError(t *testing.T) { l := lexer{input: "\"hello"} for i := 0; i < 10; i++ { tok, err := l.scan() require.Equal(t, token{}, tok) require.EqualError(t, err, "0:6: \"hello: missing end \"") } } func TestLexer_Peek(t *testing.T) { l := lexer{input: "hello world"} expected1 := token{ kind: tokenUnquoted, value: "hello", position: position{ offsetStart: 0, offsetEnd: 5, columnStart: 0, columnEnd: 5, }, } expected2 := token{ kind: tokenUnquoted, value: "world", position: position{ offsetStart: 6, offsetEnd: 11, columnStart: 6, columnEnd: 11, }, } // Check that peek() returns the first token. tok, err := l.peek() require.NoError(t, err) require.Equal(t, expected1, tok) // Check that scan() returns the peeked token. tok, err = l.scan() require.NoError(t, err) require.Equal(t, expected1, tok) // Check that peek() returns the second token until the next scan(). for i := 0; i < 10; i++ { tok, err = l.peek() require.NoError(t, err) require.Equal(t, expected2, tok) } // Check that scan() returns the last token. tok, err = l.scan() require.NoError(t, err) require.Equal(t, expected2, tok) // Should not be able to peek() further tokens. for i := 0; i < 10; i++ { tok, err = l.peek() require.NoError(t, err) require.Equal(t, token{}, tok) } } // This test asserts that the lexer does not emit more tokens after an // error has occurred. func TestLexer_PeekError(t *testing.T) { l := lexer{input: "\"hello"} for i := 0; i < 10; i++ { tok, err := l.peek() require.Equal(t, token{}, tok) require.EqualError(t, err, "0:6: \"hello: missing end \"") } } func TestLexer_Pos(t *testing.T) { l := lexer{input: "hello🙂"} // The start position should be the zero-value. require.Equal(t, position{}, l.position()) _, err := l.scan() require.NoError(t, err) // The position should contain the offset and column of the end. expected := position{ offsetStart: 9, offsetEnd: 9, columnStart: 6, columnEnd: 6, } require.Equal(t, expected, l.position()) // The position should not change once the input has been consumed. tok, err := l.scan() require.NoError(t, err) require.True(t, tok.isEOF()) require.Equal(t, expected, l.position()) } prometheus-alertmanager-0.28.1+ds/matcher/parse/parse.go000066400000000000000000000234521476331240200232450ustar00rootroot00000000000000// Copyright 2023 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package parse import ( "errors" "fmt" "os" "runtime/debug" "github.com/prometheus/alertmanager/pkg/labels" ) var ( errEOF = errors.New("end of input") errExpectedEOF = errors.New("expected end of input") errNoOpenBrace = errors.New("expected opening brace") errNoCloseBrace = errors.New("expected close brace") errNoLabelName = errors.New("expected label name") errNoLabelValue = errors.New("expected label value") errNoOperator = errors.New("expected an operator such as '=', '!=', '=~' or '!~'") errExpectedComma = errors.New("expected a comma") errExpectedCommaOrCloseBrace = errors.New("expected a comma or close brace") errExpectedMatcherOrCloseBrace = errors.New("expected a matcher or close brace after comma") ) // Matchers parses one or more matchers in the input string. It returns an error // if the input is invalid. func Matchers(input string) (matchers labels.Matchers, err error) { defer func() { if r := recover(); r != nil { fmt.Fprintf(os.Stderr, "parser panic: %s, %s", r, debug.Stack()) err = errors.New("parser panic: this should never happen, check stderr for the stack trace") } }() p := parser{lexer: lexer{input: input}} return p.parse() } // Matcher parses the matcher in the input string. It returns an error // if the input is invalid or contains two or more matchers. func Matcher(input string) (*labels.Matcher, error) { m, err := Matchers(input) if err != nil { return nil, err } switch len(m) { case 1: return m[0], nil case 0: return nil, fmt.Errorf("no matchers") default: return nil, fmt.Errorf("expected 1 matcher, found %d", len(m)) } } // parseFunc is state in the finite state automata. type parseFunc func(l *lexer) (parseFunc, error) // parser reads the sequence of tokens from the lexer and returns either a // series of matchers or an error. It works as a finite state automata, where // each state in the automata is a parseFunc. The finite state automata can move // from one state to another by returning the next parseFunc. It terminates when // a parseFunc returns nil as the next parseFunc, if the lexer attempts to scan // input that does not match the expected grammar, or if the tokens returned from // the lexer cannot be parsed into a complete series of matchers. type parser struct { matchers labels.Matchers // Tracks if the input starts with an open brace and if we should expect to // parse a close brace at the end of the input. hasOpenBrace bool lexer lexer } func (p *parser) parse() (labels.Matchers, error) { var ( err error fn = p.parseOpenBrace l = &p.lexer ) for { if fn, err = fn(l); err != nil { return nil, err } else if fn == nil { break } } return p.matchers, nil } func (p *parser) parseOpenBrace(l *lexer) (parseFunc, error) { var ( hasCloseBrace bool err error ) // Can start with an optional open brace. p.hasOpenBrace, err = p.accept(l, tokenOpenBrace) if err != nil { if errors.Is(err, errEOF) { return p.parseEOF, nil } return nil, err } // If the next token is a close brace there are no matchers in the input. hasCloseBrace, err = p.acceptPeek(l, tokenCloseBrace) if err != nil { // If there is no more input after the open brace then parse the close brace // so the error message contains ErrNoCloseBrace. if errors.Is(err, errEOF) { return p.parseCloseBrace, nil } return nil, err } if hasCloseBrace { return p.parseCloseBrace, nil } return p.parseMatcher, nil } func (p *parser) parseCloseBrace(l *lexer) (parseFunc, error) { if p.hasOpenBrace { // If there was an open brace there must be a matching close brace. if _, err := p.expect(l, tokenCloseBrace); err != nil { return nil, fmt.Errorf("0:%d: %w: %w", l.position().columnEnd, err, errNoCloseBrace) } } else { // If there was no open brace there must not be a close brace either. if _, err := p.expect(l, tokenCloseBrace); err == nil { return nil, fmt.Errorf("0:%d: }: %w", l.position().columnEnd, errNoOpenBrace) } } return p.parseEOF, nil } func (p *parser) parseMatcher(l *lexer) (parseFunc, error) { var ( err error t token matchName, matchValue string matchTy labels.MatchType ) // The first token should be the label name. if t, err = p.expect(l, tokenQuoted, tokenUnquoted); err != nil { return nil, fmt.Errorf("%w: %w", err, errNoLabelName) } matchName, err = t.unquote() if err != nil { return nil, fmt.Errorf("%d:%d: %s: invalid input", t.columnStart, t.columnEnd, t.value) } // The next token should be the operator. if t, err = p.expect(l, tokenEquals, tokenNotEquals, tokenMatches, tokenNotMatches); err != nil { return nil, fmt.Errorf("%w: %w", err, errNoOperator) } switch t.kind { case tokenEquals: matchTy = labels.MatchEqual case tokenNotEquals: matchTy = labels.MatchNotEqual case tokenMatches: matchTy = labels.MatchRegexp case tokenNotMatches: matchTy = labels.MatchNotRegexp default: panic(fmt.Sprintf("bad operator %s", t)) } // The next token should be the match value. Like the match name, this too // can be either double-quoted UTF-8 or unquoted UTF-8 without reserved characters. if t, err = p.expect(l, tokenUnquoted, tokenQuoted); err != nil { return nil, fmt.Errorf("%w: %w", err, errNoLabelValue) } matchValue, err = t.unquote() if err != nil { return nil, fmt.Errorf("%d:%d: %s: invalid input", t.columnStart, t.columnEnd, t.value) } m, err := labels.NewMatcher(matchTy, matchName, matchValue) if err != nil { return nil, fmt.Errorf("failed to create matcher: %w", err) } p.matchers = append(p.matchers, m) return p.parseEndOfMatcher, nil } func (p *parser) parseEndOfMatcher(l *lexer) (parseFunc, error) { t, err := p.expectPeek(l, tokenComma, tokenCloseBrace) if err != nil { if errors.Is(err, errEOF) { // If this is the end of input we still need to check if the optional // open brace has a matching close brace. return p.parseCloseBrace, nil } return nil, fmt.Errorf("%w: %w", err, errExpectedCommaOrCloseBrace) } switch t.kind { case tokenComma: return p.parseComma, nil case tokenCloseBrace: return p.parseCloseBrace, nil default: panic(fmt.Sprintf("bad token %s", t)) } } func (p *parser) parseComma(l *lexer) (parseFunc, error) { if _, err := p.expect(l, tokenComma); err != nil { return nil, fmt.Errorf("%w: %w", err, errExpectedComma) } // The token after the comma can be another matcher, a close brace or end of input. t, err := p.expectPeek(l, tokenCloseBrace, tokenUnquoted, tokenQuoted) if err != nil { if errors.Is(err, errEOF) { // If this is the end of input we still need to check if the optional // open brace has a matching close brace. return p.parseCloseBrace, nil } return nil, fmt.Errorf("%w: %w", err, errExpectedMatcherOrCloseBrace) } if t.kind == tokenCloseBrace { return p.parseCloseBrace, nil } return p.parseMatcher, nil } func (p *parser) parseEOF(l *lexer) (parseFunc, error) { t, err := l.scan() if err != nil { return nil, fmt.Errorf("%w: %w", err, errExpectedEOF) } if !t.isEOF() { return nil, fmt.Errorf("%d:%d: %s: %w", t.columnStart, t.columnEnd, t.value, errExpectedEOF) } return nil, nil } // nolint:godot // accept returns true if the next token is one of the specified kinds, // otherwise false. If the token is accepted it is consumed. tokenEOF is // not an accepted kind and instead accept returns ErrEOF if there is no // more input. func (p *parser) accept(l *lexer, kinds ...tokenKind) (ok bool, err error) { ok, err = p.acceptPeek(l, kinds...) if ok { if _, err = l.scan(); err != nil { panic("failed to scan peeked token") } } return ok, err } // nolint:godot // acceptPeek returns true if the next token is one of the specified kinds, // otherwise false. However, unlike accept, acceptPeek does not consume accepted // tokens. tokenEOF is not an accepted kind and instead accept returns ErrEOF // if there is no more input. func (p *parser) acceptPeek(l *lexer, kinds ...tokenKind) (bool, error) { t, err := l.peek() if err != nil { return false, err } if t.isEOF() { return false, errEOF } return t.isOneOf(kinds...), nil } // nolint:godot // expect returns the next token if it is one of the specified kinds, otherwise // it returns an error. If the token is expected it is consumed. tokenEOF is not // an accepted kind and instead expect returns ErrEOF if there is no more input. func (p *parser) expect(l *lexer, kind ...tokenKind) (token, error) { t, err := p.expectPeek(l, kind...) if err != nil { return t, err } if _, err = l.scan(); err != nil { panic("failed to scan peeked token") } return t, nil } // nolint:godot // expect returns the next token if it is one of the specified kinds, otherwise // it returns an error. However, unlike expect, expectPeek does not consume tokens. // tokenEOF is not an accepted kind and instead expect returns ErrEOF if there is no // more input. func (p *parser) expectPeek(l *lexer, kind ...tokenKind) (token, error) { t, err := l.peek() if err != nil { return t, err } if t.isEOF() { return t, errEOF } if !t.isOneOf(kind...) { return t, fmt.Errorf("%d:%d: unexpected %s", t.columnStart, t.columnEnd, t.value) } return t, nil } prometheus-alertmanager-0.28.1+ds/matcher/parse/parse_test.go000066400000000000000000000313031476331240200242760ustar00rootroot00000000000000// Copyright 2023 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package parse import ( "testing" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/pkg/labels" ) func TestMatchers(t *testing.T) { tests := []struct { name string input string expected labels.Matchers error string }{{ name: "no braces", input: "", expected: nil, }, { name: "open and closing braces", input: "{}", expected: nil, }, { name: "equals", input: "{foo=bar}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "bar")}, }, { name: "equals with trailing comma", input: "{foo=bar,}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "bar")}, }, { name: "not equals", input: "{foo!=bar}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchNotEqual, "foo", "bar")}, }, { name: "match regex", input: "{foo=~[a-z]+}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchRegexp, "foo", "[a-z]+")}, }, { name: "doesn't match regex", input: "{foo!~[a-z]+}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchNotRegexp, "foo", "[a-z]+")}, }, { name: "equals unicode emoji", input: "{foo=🙂}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "🙂")}, }, { name: "equals unicode sentence", input: "{foo=🙂bar}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "🙂bar")}, }, { name: "equals without braces", input: "foo=bar", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "bar")}, }, { name: "equals without braces but with trailing comma", input: "foo=bar,", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "bar")}, }, { name: "not equals without braces", input: "foo!=bar", expected: labels.Matchers{mustNewMatcher(t, labels.MatchNotEqual, "foo", "bar")}, }, { name: "match regex without braces", input: "foo=~[a-z]+", expected: labels.Matchers{mustNewMatcher(t, labels.MatchRegexp, "foo", "[a-z]+")}, }, { name: "doesn't match regex without braces", input: "foo!~[a-z]+", expected: labels.Matchers{mustNewMatcher(t, labels.MatchNotRegexp, "foo", "[a-z]+")}, }, { name: "equals in quotes", input: "{\"foo\"=\"bar\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "bar")}, }, { name: "equals in quotes and with trailing comma", input: "{\"foo\"=\"bar\",}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "bar")}, }, { name: "not equals in quotes", input: "{\"foo\"!=\"bar\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchNotEqual, "foo", "bar")}, }, { name: "match regex in quotes", input: "{\"foo\"=~\"[a-z]+\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchRegexp, "foo", "[a-z]+")}, }, { name: "match regex digit in quotes", input: "{\"foo\"=~\"\\\\d+\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchRegexp, "foo", "\\d+")}, }, { name: "doesn't match regex in quotes", input: "{\"foo\"!~\"[a-z]+\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchNotRegexp, "foo", "[a-z]+")}, }, { name: "equals unicode emoji in quotes", input: "{\"foo\"=\"🙂\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "🙂")}, }, { name: "equals unicode emoji as bytes in quotes", input: "{\"foo\"=\"\\xf0\\x9f\\x99\\x82\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "🙂")}, }, { name: "equals unicode emoji as code points in quotes", input: "{\"foo\"=\"\\U0001f642\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "🙂")}, }, { name: "equals unicode sentence in quotes", input: "{\"foo\"=\"🙂bar\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "🙂bar")}, }, { name: "equals with newline in quotes", input: "{\"foo\"=\"bar\\n\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "bar\n")}, }, { name: "equals with tab in quotes", input: "{\"foo\"=\"bar\\t\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "bar\t")}, }, { name: "equals with escaped quotes in quotes", input: "{\"foo\"=\"\\\"bar\\\"\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "\"bar\"")}, }, { name: "equals with escaped backslash in quotes", input: "{\"foo\"=\"bar\\\\\"}", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "bar\\")}, }, { name: "equals without braces in quotes", input: "\"foo\"=\"bar\"", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "bar")}, }, { name: "equals without braces in quotes with trailing comma", input: "\"foo\"=\"bar\",", expected: labels.Matchers{mustNewMatcher(t, labels.MatchEqual, "foo", "bar")}, }, { name: "complex", input: "{foo=bar,bar!=baz}", expected: labels.Matchers{ mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), mustNewMatcher(t, labels.MatchNotEqual, "bar", "baz"), }, }, { name: "complex in quotes", input: "{foo=\"bar\",bar!=\"baz\"}", expected: labels.Matchers{ mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), mustNewMatcher(t, labels.MatchNotEqual, "bar", "baz"), }, }, { name: "complex without braces", input: "foo=bar,bar!=baz", expected: labels.Matchers{ mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), mustNewMatcher(t, labels.MatchNotEqual, "bar", "baz"), }, }, { name: "complex without braces in quotes", input: "foo=\"bar\",bar!=\"baz\"", expected: labels.Matchers{ mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), mustNewMatcher(t, labels.MatchNotEqual, "bar", "baz"), }, }, { name: "comma", input: ",", error: "0:1: unexpected ,: expected label name", }, { name: "comma in braces", input: "{,}", error: "1:2: unexpected ,: expected label name", }, { name: "open brace", input: "{", error: "0:1: end of input: expected close brace", }, { name: "close brace", input: "}", error: "0:1: }: expected opening brace", }, { name: "no open brace", input: "foo=bar}", error: "0:8: }: expected opening brace", }, { name: "no close brace", input: "{foo=bar", error: "0:8: end of input: expected close brace", }, { name: "invalid input after operator and before quotes", input: "{foo=:\"bar\"}", error: "6:11: unexpected \"bar\": expected a comma or close brace", }, { name: "invalid escape sequence", input: "{foo=\"bar\\w\"}", error: "5:12: \"bar\\w\": invalid input", }, { name: "invalid escape sequence regex digits", input: "{\"foo\"=~\"\\d+\"}", error: "8:13: \"\\d+\": invalid input", }, { name: "no unquoted escape sequences", input: "{foo=bar\\n}", error: "8:9: \\: invalid input: expected a comma or close brace", }, { name: "invalid unicode", input: "{\"foo\"=\"\\xf0\\x9f\"}", error: "7:17: \"\\xf0\\x9f\": invalid input", }} for _, test := range tests { t.Run(test.name, func(t *testing.T) { matchers, err := Matchers(test.input) if test.error != "" { require.EqualError(t, err, test.error) } else { require.NoError(t, err) require.EqualValues(t, test.expected, matchers) } }) } } func TestMatcher(t *testing.T) { tests := []struct { name string input string expected *labels.Matcher error string }{{ name: "equals", input: "{foo=bar}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), }, { name: "equals with trailing comma", input: "{foo=bar,}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), }, { name: "not equals", input: "{foo!=bar}", expected: mustNewMatcher(t, labels.MatchNotEqual, "foo", "bar"), }, { name: "match regex", input: "{foo=~[a-z]+}", expected: mustNewMatcher(t, labels.MatchRegexp, "foo", "[a-z]+"), }, { name: "doesn't match regex", input: "{foo!~[a-z]+}", expected: mustNewMatcher(t, labels.MatchNotRegexp, "foo", "[a-z]+"), }, { name: "equals unicode emoji", input: "{foo=🙂}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "🙂"), }, { name: "equals unicode emoji as bytes in quotes", input: "{\"foo\"=\"\\xf0\\x9f\\x99\\x82\"}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "🙂"), }, { name: "equals unicode emoji as code points in quotes", input: "{\"foo\"=\"\\U0001f642\"}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "🙂"), }, { name: "equals unicode sentence", input: "{foo=🙂bar}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "🙂bar"), }, { name: "equals without braces", input: "foo=bar", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), }, { name: "equals without braces but with trailing comma", input: "foo=bar,", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), }, { name: "not equals without braces", input: "foo!=bar", expected: mustNewMatcher(t, labels.MatchNotEqual, "foo", "bar"), }, { name: "match regex without braces", input: "foo=~[a-z]+", expected: mustNewMatcher(t, labels.MatchRegexp, "foo", "[a-z]+"), }, { name: "doesn't match regex without braces", input: "foo!~[a-z]+", expected: mustNewMatcher(t, labels.MatchNotRegexp, "foo", "[a-z]+"), }, { name: "equals in quotes", input: "{\"foo\"=\"bar\"}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), }, { name: "equals in quotes and with trailing comma", input: "{\"foo\"=\"bar\",}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), }, { name: "not equals in quotes", input: "{\"foo\"!=\"bar\"}", expected: mustNewMatcher(t, labels.MatchNotEqual, "foo", "bar"), }, { name: "match regex in quotes", input: "{\"foo\"=~\"[a-z]+\"}", expected: mustNewMatcher(t, labels.MatchRegexp, "foo", "[a-z]+"), }, { name: "doesn't match regex in quotes", input: "{\"foo\"!~\"[a-z]+\"}", expected: mustNewMatcher(t, labels.MatchNotRegexp, "foo", "[a-z]+"), }, { name: "equals unicode emoji in quotes", input: "{\"foo\"=\"🙂\"}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "🙂"), }, { name: "equals unicode sentence in quotes", input: "{\"foo\"=\"🙂bar\"}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "🙂bar"), }, { name: "equals with newline in quotes", input: "{\"foo\"=\"bar\\n\"}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "bar\n"), }, { name: "equals with tab in quotes", input: "{\"foo\"=\"bar\\t\"}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "bar\t"), }, { name: "equals with escaped quotes in quotes", input: "{\"foo\"=\"\\\"bar\\\"\"}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "\"bar\""), }, { name: "equals with escaped backslash in quotes", input: "{\"foo\"=\"bar\\\\\"}", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "bar\\"), }, { name: "equals without braces in quotes", input: "\"foo\"=\"bar\"", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), }, { name: "equals without braces in quotes with trailing comma", input: "\"foo\"=\"bar\",", expected: mustNewMatcher(t, labels.MatchEqual, "foo", "bar"), }, { name: "no input", error: "no matchers", }, { name: "open and closing braces", input: "{}", error: "no matchers", }, { name: "two or more returns error", input: "foo=bar,bar=baz", error: "expected 1 matcher, found 2", }, { name: "invalid unicode", input: "foo=\"\\xf0\\x9f\"", error: "4:14: \"\\xf0\\x9f\": invalid input", }} for _, test := range tests { t.Run(test.name, func(t *testing.T) { matcher, err := Matcher(test.input) if test.error != "" { require.EqualError(t, err, test.error) } else { require.NoError(t, err) require.EqualValues(t, test.expected, matcher) } }) } } func mustNewMatcher(t *testing.T, op labels.MatchType, name, value string) *labels.Matcher { m, err := labels.NewMatcher(op, name, value) require.NoError(t, err) return m } prometheus-alertmanager-0.28.1+ds/matcher/parse/token.go000066400000000000000000000045031476331240200232470ustar00rootroot00000000000000// Copyright 2023 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package parse import ( "errors" "fmt" "strconv" "unicode/utf8" ) type tokenKind int const ( tokenEOF tokenKind = iota tokenOpenBrace tokenCloseBrace tokenComma tokenEquals tokenNotEquals tokenMatches tokenNotMatches tokenQuoted tokenUnquoted ) func (k tokenKind) String() string { switch k { case tokenOpenBrace: return "OpenBrace" case tokenCloseBrace: return "CloseBrace" case tokenComma: return "Comma" case tokenEquals: return "Equals" case tokenNotEquals: return "NotEquals" case tokenMatches: return "Matches" case tokenNotMatches: return "NotMatches" case tokenQuoted: return "Quoted" case tokenUnquoted: return "Unquoted" default: return "EOF" } } type token struct { kind tokenKind value string position } // isEOF returns true if the token is an end of file token. func (t token) isEOF() bool { return t.kind == tokenEOF } // isOneOf returns true if the token is one of the specified kinds. func (t token) isOneOf(kinds ...tokenKind) bool { for _, k := range kinds { if k == t.kind { return true } } return false } // unquote the value in token. If unquoted returns it unmodified. func (t token) unquote() (string, error) { if t.kind == tokenQuoted { unquoted, err := strconv.Unquote(t.value) if err != nil { return "", err } if !utf8.ValidString(unquoted) { return "", errors.New("quoted string contains invalid UTF-8 code points") } return unquoted, nil } return t.value, nil } func (t token) String() string { return fmt.Sprintf("(%s) '%s'", t.kind, t.value) } type position struct { offsetStart int // The start position in the input. offsetEnd int // The end position in the input. columnStart int // The column number. columnEnd int // The end of the column. } prometheus-alertmanager-0.28.1+ds/nflog/000077500000000000000000000000001476331240200201465ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/nflog/nflog.go000066400000000000000000000355171476331240200216150ustar00rootroot00000000000000// Copyright 2016 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package nflog implements a garbage-collected and snapshottable append-only log of // active/resolved notifications. Each log entry stores the active/resolved state, // the notified receiver, and a hash digest of the notification's identifying contents. // The log can be queried along different parameters. package nflog import ( "bytes" "errors" "fmt" "io" "log/slog" "math/rand" "os" "sync" "time" "github.com/coder/quartz" "github.com/matttproud/golang_protobuf_extensions/pbutil" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/promslog" "github.com/prometheus/alertmanager/cluster" pb "github.com/prometheus/alertmanager/nflog/nflogpb" ) // ErrNotFound is returned for empty query results. var ErrNotFound = errors.New("not found") // ErrInvalidState is returned if the state isn't valid. var ErrInvalidState = errors.New("invalid state") // query currently allows filtering by and/or receiver group key. // It is configured via QueryParameter functions. // // TODO(fabxc): Future versions could allow querying a certain receiver, // group or a given time interval. type query struct { recv *pb.Receiver groupKey string } // QueryParam is a function that modifies a query to incorporate // a set of parameters. Returns an error for invalid or conflicting // parameters. type QueryParam func(*query) error // QReceiver adds a receiver parameter to a query. func QReceiver(r *pb.Receiver) QueryParam { return func(q *query) error { q.recv = r return nil } } // QGroupKey adds a group key as querying argument. func QGroupKey(gk string) QueryParam { return func(q *query) error { q.groupKey = gk return nil } } // Log holds the notification log state for alerts that have been notified. type Log struct { clock quartz.Clock logger *slog.Logger metrics *metrics retention time.Duration // For now we only store the most recently added log entry. // The key is a serialized concatenation of group key and receiver. mtx sync.RWMutex st state broadcast func([]byte) } // MaintenanceFunc represents the function to run as part of the periodic maintenance for the nflog. // It returns the size of the snapshot taken or an error if it failed. type MaintenanceFunc func() (int64, error) type metrics struct { gcDuration prometheus.Summary snapshotDuration prometheus.Summary snapshotSize prometheus.Gauge queriesTotal prometheus.Counter queryErrorsTotal prometheus.Counter queryDuration prometheus.Histogram propagatedMessagesTotal prometheus.Counter maintenanceTotal prometheus.Counter maintenanceErrorsTotal prometheus.Counter } func newMetrics(r prometheus.Registerer) *metrics { m := &metrics{} m.gcDuration = prometheus.NewSummary(prometheus.SummaryOpts{ Name: "alertmanager_nflog_gc_duration_seconds", Help: "Duration of the last notification log garbage collection cycle.", Objectives: map[float64]float64{}, }) m.snapshotDuration = prometheus.NewSummary(prometheus.SummaryOpts{ Name: "alertmanager_nflog_snapshot_duration_seconds", Help: "Duration of the last notification log snapshot.", Objectives: map[float64]float64{}, }) m.snapshotSize = prometheus.NewGauge(prometheus.GaugeOpts{ Name: "alertmanager_nflog_snapshot_size_bytes", Help: "Size of the last notification log snapshot in bytes.", }) m.maintenanceTotal = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_nflog_maintenance_total", Help: "How many maintenances were executed for the notification log.", }) m.maintenanceErrorsTotal = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_nflog_maintenance_errors_total", Help: "How many maintenances were executed for the notification log that failed.", }) m.queriesTotal = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_nflog_queries_total", Help: "Number of notification log queries were received.", }) m.queryErrorsTotal = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_nflog_query_errors_total", Help: "Number notification log received queries that failed.", }) m.queryDuration = prometheus.NewHistogram(prometheus.HistogramOpts{ Name: "alertmanager_nflog_query_duration_seconds", Help: "Duration of notification log query evaluation.", Buckets: prometheus.DefBuckets, NativeHistogramBucketFactor: 1.1, NativeHistogramMaxBucketNumber: 100, NativeHistogramMinResetDuration: 1 * time.Hour, }) m.propagatedMessagesTotal = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_nflog_gossip_messages_propagated_total", Help: "Number of received gossip messages that have been further gossiped.", }) if r != nil { r.MustRegister( m.gcDuration, m.snapshotDuration, m.snapshotSize, m.queriesTotal, m.queryErrorsTotal, m.queryDuration, m.propagatedMessagesTotal, m.maintenanceTotal, m.maintenanceErrorsTotal, ) } return m } type state map[string]*pb.MeshEntry func (s state) clone() state { c := make(state, len(s)) for k, v := range s { c[k] = v } return c } // merge returns true or false whether the MeshEntry was merged or // not. This information is used to decide to gossip the message further. func (s state) merge(e *pb.MeshEntry, now time.Time) bool { if e.ExpiresAt.Before(now) { return false } k := stateKey(string(e.Entry.GroupKey), e.Entry.Receiver) prev, ok := s[k] if !ok || prev.Entry.Timestamp.Before(e.Entry.Timestamp) { s[k] = e return true } return false } func (s state) MarshalBinary() ([]byte, error) { var buf bytes.Buffer for _, e := range s { if _, err := pbutil.WriteDelimited(&buf, e); err != nil { return nil, err } } return buf.Bytes(), nil } func decodeState(r io.Reader) (state, error) { st := state{} for { var e pb.MeshEntry _, err := pbutil.ReadDelimited(r, &e) if err == nil { if e.Entry == nil || e.Entry.Receiver == nil { return nil, ErrInvalidState } st[stateKey(string(e.Entry.GroupKey), e.Entry.Receiver)] = &e continue } if errors.Is(err, io.EOF) { break } return nil, err } return st, nil } func marshalMeshEntry(e *pb.MeshEntry) ([]byte, error) { var buf bytes.Buffer if _, err := pbutil.WriteDelimited(&buf, e); err != nil { return nil, err } return buf.Bytes(), nil } // Options configures a new Log implementation. type Options struct { SnapshotReader io.Reader SnapshotFile string Retention time.Duration Logger *slog.Logger Metrics prometheus.Registerer } func (o *Options) validate() error { if o.SnapshotFile != "" && o.SnapshotReader != nil { return errors.New("only one of SnapshotFile and SnapshotReader must be set") } return nil } // New creates a new notification log based on the provided options. // The snapshot is loaded into the Log if it is set. func New(o Options) (*Log, error) { if err := o.validate(); err != nil { return nil, err } l := &Log{ clock: quartz.NewReal(), retention: o.Retention, logger: promslog.NewNopLogger(), st: state{}, broadcast: func([]byte) {}, metrics: newMetrics(o.Metrics), } if o.Logger != nil { l.logger = o.Logger } if o.SnapshotFile != "" { if r, err := os.Open(o.SnapshotFile); err != nil { if !os.IsNotExist(err) { return nil, err } l.logger.Debug("notification log snapshot file doesn't exist", "err", err) } else { o.SnapshotReader = r defer r.Close() } } if o.SnapshotReader != nil { if err := l.loadSnapshot(o.SnapshotReader); err != nil { return l, err } } return l, nil } func (l *Log) now() time.Time { return l.clock.Now() } // Maintenance garbage collects the notification log state at the given interval. If the snapshot // file is set, a snapshot is written to it afterwards. // Terminates on receiving from stopc. // If not nil, the last argument is an override for what to do as part of the maintenance - for advanced usage. func (l *Log) Maintenance(interval time.Duration, snapf string, stopc <-chan struct{}, override MaintenanceFunc) { if interval == 0 || stopc == nil { l.logger.Error("interval or stop signal are missing - not running maintenance") return } t := l.clock.NewTicker(interval) defer t.Stop() var doMaintenance MaintenanceFunc doMaintenance = func() (int64, error) { var size int64 if _, err := l.GC(); err != nil { return size, err } if snapf == "" { return size, nil } f, err := openReplace(snapf) if err != nil { return size, err } if size, err = l.Snapshot(f); err != nil { f.Close() return size, err } return size, f.Close() } if override != nil { doMaintenance = override } runMaintenance := func(do func() (int64, error)) error { l.metrics.maintenanceTotal.Inc() start := l.now().UTC() l.logger.Debug("Running maintenance") size, err := do() l.metrics.snapshotSize.Set(float64(size)) if err != nil { l.metrics.maintenanceErrorsTotal.Inc() return err } l.logger.Debug("Maintenance done", "duration", l.now().Sub(start), "size", size) return nil } Loop: for { select { case <-stopc: break Loop case <-t.C: if err := runMaintenance(doMaintenance); err != nil { l.logger.Error("Running maintenance failed", "err", err) } } } // No need to run final maintenance if we don't want to snapshot. if snapf == "" { return } if err := runMaintenance(doMaintenance); err != nil { l.logger.Error("Creating shutdown snapshot failed", "err", err) } } func receiverKey(r *pb.Receiver) string { return fmt.Sprintf("%s/%s/%d", r.GroupName, r.Integration, r.Idx) } // stateKey returns a string key for a log entry consisting of the group key // and receiver. func stateKey(k string, r *pb.Receiver) string { return fmt.Sprintf("%s:%s", k, receiverKey(r)) } func (l *Log) Log(r *pb.Receiver, gkey string, firingAlerts, resolvedAlerts []uint64, expiry time.Duration) error { // Write all st with the same timestamp. now := l.now() key := stateKey(gkey, r) l.mtx.Lock() defer l.mtx.Unlock() if prevle, ok := l.st[key]; ok { // Entry already exists, only overwrite if timestamp is newer. // This may happen with raciness or clock-drift across AM nodes. if prevle.Entry.Timestamp.After(now) { return nil } } expiresAt := now.Add(l.retention) if expiry > 0 && l.retention > expiry { expiresAt = now.Add(expiry) } e := &pb.MeshEntry{ Entry: &pb.Entry{ Receiver: r, GroupKey: []byte(gkey), Timestamp: now, FiringAlerts: firingAlerts, ResolvedAlerts: resolvedAlerts, }, ExpiresAt: expiresAt, } b, err := marshalMeshEntry(e) if err != nil { return err } l.st.merge(e, l.now()) l.broadcast(b) return nil } // GC implements the Log interface. func (l *Log) GC() (int, error) { start := time.Now() defer func() { l.metrics.gcDuration.Observe(time.Since(start).Seconds()) }() now := l.now() var n int l.mtx.Lock() defer l.mtx.Unlock() for k, le := range l.st { if le.ExpiresAt.IsZero() { return n, errors.New("unexpected zero expiration timestamp") } if !le.ExpiresAt.After(now) { delete(l.st, k) n++ } } return n, nil } // Query implements the Log interface. func (l *Log) Query(params ...QueryParam) ([]*pb.Entry, error) { start := time.Now() l.metrics.queriesTotal.Inc() entries, err := func() ([]*pb.Entry, error) { q := &query{} for _, p := range params { if err := p(q); err != nil { return nil, err } } // TODO(fabxc): For now our only query mode is the most recent entry for a // receiver/group_key combination. if q.recv == nil || q.groupKey == "" { // TODO(fabxc): allow more complex queries in the future. // How to enable pagination? return nil, errors.New("no query parameters specified") } l.mtx.RLock() defer l.mtx.RUnlock() if le, ok := l.st[stateKey(q.groupKey, q.recv)]; ok { return []*pb.Entry{le.Entry}, nil } return nil, ErrNotFound }() if err != nil { l.metrics.queryErrorsTotal.Inc() } l.metrics.queryDuration.Observe(time.Since(start).Seconds()) return entries, err } // loadSnapshot loads a snapshot generated by Snapshot() into the state. func (l *Log) loadSnapshot(r io.Reader) error { st, err := decodeState(r) if err != nil { return err } l.mtx.Lock() l.st = st l.mtx.Unlock() return nil } // Snapshot implements the Log interface. func (l *Log) Snapshot(w io.Writer) (int64, error) { start := time.Now() defer func() { l.metrics.snapshotDuration.Observe(time.Since(start).Seconds()) }() l.mtx.RLock() defer l.mtx.RUnlock() b, err := l.st.MarshalBinary() if err != nil { return 0, err } return io.Copy(w, bytes.NewReader(b)) } // MarshalBinary serializes all contents of the notification log. func (l *Log) MarshalBinary() ([]byte, error) { l.mtx.Lock() defer l.mtx.Unlock() return l.st.MarshalBinary() } // Merge merges notification log state received from the cluster with the local state. func (l *Log) Merge(b []byte) error { st, err := decodeState(bytes.NewReader(b)) if err != nil { return err } l.mtx.Lock() defer l.mtx.Unlock() now := l.now() for _, e := range st { if merged := l.st.merge(e, now); merged && !cluster.OversizedMessage(b) { // If this is the first we've seen the message and it's // not oversized, gossip it to other nodes. We don't // propagate oversized messages because they're sent to // all nodes already. l.broadcast(b) l.metrics.propagatedMessagesTotal.Inc() l.logger.Debug("gossiping new entry", "entry", e) } } return nil } // SetBroadcast sets a broadcast callback that will be invoked with serialized state // on updates. func (l *Log) SetBroadcast(f func([]byte)) { l.mtx.Lock() l.broadcast = f l.mtx.Unlock() } // replaceFile wraps a file that is moved to another filename on closing. type replaceFile struct { *os.File filename string } func (f *replaceFile) Close() error { if err := f.File.Sync(); err != nil { return err } if err := f.File.Close(); err != nil { return err } return os.Rename(f.File.Name(), f.filename) } // openReplace opens a new temporary file that is moved to filename on closing. func openReplace(filename string) (*replaceFile, error) { tmpFilename := fmt.Sprintf("%s.%x", filename, uint64(rand.Int63())) f, err := os.Create(tmpFilename) if err != nil { return nil, err } rf := &replaceFile{ File: f, filename: filename, } return rf, nil } prometheus-alertmanager-0.28.1+ds/nflog/nflog_test.go000066400000000000000000000261531476331240200226500ustar00rootroot00000000000000// Copyright 2016 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nflog import ( "bytes" "io" "os" "path/filepath" "sync" "testing" "time" pb "github.com/prometheus/alertmanager/nflog/nflogpb" "github.com/coder/quartz" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/testutil" "github.com/stretchr/testify/require" "go.uber.org/atomic" ) func TestLogGC(t *testing.T) { mockClock := quartz.NewMock(t) now := mockClock.Now() // We only care about key names and expiration timestamps. newEntry := func(ts time.Time) *pb.MeshEntry { return &pb.MeshEntry{ ExpiresAt: ts, } } l := &Log{ st: state{ "a1": newEntry(now), "a2": newEntry(now.Add(time.Second)), "a3": newEntry(now.Add(-time.Second)), }, clock: mockClock, metrics: newMetrics(nil), } n, err := l.GC() require.NoError(t, err, "unexpected error in garbage collection") require.Equal(t, 2, n, "unexpected number of removed entries") expected := state{ "a2": newEntry(now.Add(time.Second)), } require.Equal(t, expected, l.st, "unexpected state after garbage collection") } func TestLogSnapshot(t *testing.T) { // Check whether storing and loading the snapshot is symmetric. mockClock := quartz.NewMock(t) now := mockClock.Now().UTC() cases := []struct { entries []*pb.MeshEntry }{ { entries: []*pb.MeshEntry{ { Entry: &pb.Entry{ GroupKey: []byte("d8e8fca2dc0f896fd7cb4cb0031ba249"), Receiver: &pb.Receiver{GroupName: "abc", Integration: "test1", Idx: 1}, GroupHash: []byte("126a8a51b9d1bbd07fddc65819a542c3"), Resolved: false, Timestamp: now, }, ExpiresAt: now, }, { Entry: &pb.Entry{ GroupKey: []byte("d8e8fca2dc0f8abce7cb4cb0031ba249"), Receiver: &pb.Receiver{GroupName: "def", Integration: "test2", Idx: 29}, GroupHash: []byte("122c2331b9d1bbd07fddc65819a542c3"), Resolved: true, Timestamp: now, }, ExpiresAt: now, }, { Entry: &pb.Entry{ GroupKey: []byte("aaaaaca2dc0f896fd7cb4cb0031ba249"), Receiver: &pb.Receiver{GroupName: "ghi", Integration: "test3", Idx: 0}, GroupHash: []byte("126a8a51b9d1bbd07fddc6e3e3e542c3"), Resolved: false, Timestamp: now, }, ExpiresAt: now, }, }, }, } for _, c := range cases { f, err := os.CreateTemp("", "snapshot") require.NoError(t, err, "creating temp file failed") l1 := &Log{ st: state{}, metrics: newMetrics(nil), } // Setup internal state manually. for _, e := range c.entries { l1.st[stateKey(string(e.Entry.GroupKey), e.Entry.Receiver)] = e } _, err = l1.Snapshot(f) require.NoError(t, err, "creating snapshot failed") require.NoError(t, f.Close(), "closing snapshot file failed") f, err = os.Open(f.Name()) require.NoError(t, err, "opening snapshot file failed") // Check again against new nlog instance. l2 := &Log{} err = l2.loadSnapshot(f) require.NoError(t, err, "error loading snapshot") require.Equal(t, l1.st, l2.st, "state after loading snapshot did not match snapshotted state") require.NoError(t, f.Close(), "closing snapshot file failed") } } func TestWithMaintenance_SupportsCustomCallback(t *testing.T) { f, err := os.CreateTemp("", "snapshot") require.NoError(t, err, "creating temp file failed") stopc := make(chan struct{}) reg := prometheus.NewPedanticRegistry() opts := Options{ Metrics: reg, SnapshotFile: f.Name(), } l, err := New(opts) clock := quartz.NewMock(t) l.clock = clock require.NoError(t, err) var calls atomic.Int32 var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() l.Maintenance(100*time.Millisecond, f.Name(), stopc, func() (int64, error) { calls.Add(1) return 0, nil }) }() gosched() // Before the first tick, no maintenance executed. clock.Advance(99 * time.Millisecond) require.EqualValues(t, 0, calls.Load()) // Tick once. clock.Advance(1 * time.Millisecond) require.Eventually(t, func() bool { return calls.Load() == 1 }, 5*time.Second, time.Second) // Stop the maintenance loop. We should get exactly one more execution of the maintenance func. close(stopc) wg.Wait() require.EqualValues(t, 2, calls.Load()) // Check the maintenance metrics. require.NoError(t, testutil.GatherAndCompare(reg, bytes.NewBufferString(` # HELP alertmanager_nflog_maintenance_errors_total How many maintenances were executed for the notification log that failed. # TYPE alertmanager_nflog_maintenance_errors_total counter alertmanager_nflog_maintenance_errors_total 0 # HELP alertmanager_nflog_maintenance_total How many maintenances were executed for the notification log. # TYPE alertmanager_nflog_maintenance_total counter alertmanager_nflog_maintenance_total 2 `), "alertmanager_nflog_maintenance_total", "alertmanager_nflog_maintenance_errors_total")) } func TestReplaceFile(t *testing.T) { dir, err := os.MkdirTemp("", "replace_file") require.NoError(t, err, "creating temp dir failed") origFilename := filepath.Join(dir, "testfile") of, err := os.Create(origFilename) require.NoError(t, err, "creating file failed") nf, err := openReplace(origFilename) require.NoError(t, err, "opening replacement file failed") _, err = nf.Write([]byte("test")) require.NoError(t, err, "writing replace file failed") require.NotEqual(t, nf.Name(), of.Name(), "replacement file must have different name while editing") require.NoError(t, nf.Close(), "closing replacement file failed") require.NoError(t, of.Close(), "closing original file failed") ofr, err := os.Open(origFilename) require.NoError(t, err, "opening original file failed") defer ofr.Close() res, err := io.ReadAll(ofr) require.NoError(t, err, "reading original file failed") require.Equal(t, "test", string(res), "unexpected file contents") } func TestStateMerge(t *testing.T) { mockClock := quartz.NewMock(t) now := mockClock.Now() // We only care about key names and timestamps for the // merging logic. newEntry := func(name string, ts, exp time.Time) *pb.MeshEntry { return &pb.MeshEntry{ Entry: &pb.Entry{ Timestamp: ts, GroupKey: []byte("key"), Receiver: &pb.Receiver{ GroupName: name, Idx: 1, Integration: "integr", }, }, ExpiresAt: exp, } } exp := now.Add(time.Minute) cases := []struct { a, b state final state }{ { a: state{ "key:a1/integr/1": newEntry("a1", now, exp), "key:a2/integr/1": newEntry("a2", now, exp), "key:a3/integr/1": newEntry("a3", now, exp), }, b: state{ "key:b1/integr/1": newEntry("b1", now, exp), // new key, should be added "key:b2/integr/1": newEntry("b2", now.Add(-time.Minute), now.Add(-time.Millisecond)), // new key, expired, should not be added "key:a2/integr/1": newEntry("a2", now.Add(-time.Minute), exp), // older timestamp, should be dropped "key:a3/integr/1": newEntry("a3", now.Add(time.Minute), exp), // newer timestamp, should overwrite }, final: state{ "key:a1/integr/1": newEntry("a1", now, exp), "key:a2/integr/1": newEntry("a2", now, exp), "key:a3/integr/1": newEntry("a3", now.Add(time.Minute), exp), "key:b1/integr/1": newEntry("b1", now, exp), }, }, } for _, c := range cases { ca, cb := c.a.clone(), c.b.clone() res := c.a.clone() for _, e := range cb { res.merge(e, now) } require.Equal(t, c.final, res, "Merge result should match expectation") require.Equal(t, c.b, cb, "Merged state should remain unmodified") require.NotEqual(t, c.final, ca, "Merge should not change original state") } } func TestStateDataCoding(t *testing.T) { // Check whether encoding and decoding the data is symmetric. mockClock := quartz.NewMock(t) now := mockClock.Now().UTC() cases := []struct { entries []*pb.MeshEntry }{ { entries: []*pb.MeshEntry{ { Entry: &pb.Entry{ GroupKey: []byte("d8e8fca2dc0f896fd7cb4cb0031ba249"), Receiver: &pb.Receiver{GroupName: "abc", Integration: "test1", Idx: 1}, GroupHash: []byte("126a8a51b9d1bbd07fddc65819a542c3"), Resolved: false, Timestamp: now, }, ExpiresAt: now, }, { Entry: &pb.Entry{ GroupKey: []byte("d8e8fca2dc0f8abce7cb4cb0031ba249"), Receiver: &pb.Receiver{GroupName: "def", Integration: "test2", Idx: 29}, GroupHash: []byte("122c2331b9d1bbd07fddc65819a542c3"), Resolved: true, Timestamp: now, }, ExpiresAt: now, }, { Entry: &pb.Entry{ GroupKey: []byte("aaaaaca2dc0f896fd7cb4cb0031ba249"), Receiver: &pb.Receiver{GroupName: "ghi", Integration: "test3", Idx: 0}, GroupHash: []byte("126a8a51b9d1bbd07fddc6e3e3e542c3"), Resolved: false, Timestamp: now, }, ExpiresAt: now, }, }, }, } for _, c := range cases { // Create gossip data from input. in := state{} for _, e := range c.entries { in[stateKey(string(e.Entry.GroupKey), e.Entry.Receiver)] = e } msg, err := in.MarshalBinary() require.NoError(t, err) out, err := decodeState(bytes.NewReader(msg)) require.NoError(t, err, "decoding message failed") require.Equal(t, in, out, "decoded data doesn't match encoded data") } } func TestQuery(t *testing.T) { opts := Options{Retention: time.Second} nl, err := New(opts) if err != nil { require.NoError(t, err, "constructing nflog failed") } recv := new(pb.Receiver) // no key param _, err = nl.Query(QGroupKey("key")) require.EqualError(t, err, "no query parameters specified") // no recv param _, err = nl.Query(QReceiver(recv)) require.EqualError(t, err, "no query parameters specified") // no entry _, err = nl.Query(QGroupKey("nonexistentkey"), QReceiver(recv)) require.EqualError(t, err, "not found") // existing entry firingAlerts := []uint64{1, 2, 3} resolvedAlerts := []uint64{4, 5} err = nl.Log(recv, "key", firingAlerts, resolvedAlerts, 0) require.NoError(t, err, "logging notification failed") entries, err := nl.Query(QGroupKey("key"), QReceiver(recv)) require.NoError(t, err, "querying nflog failed") entry := entries[0] require.EqualValues(t, firingAlerts, entry.FiringAlerts) require.EqualValues(t, resolvedAlerts, entry.ResolvedAlerts) } func TestStateDecodingError(t *testing.T) { // Check whether decoding copes with erroneous data. s := state{"": &pb.MeshEntry{}} msg, err := s.MarshalBinary() require.NoError(t, err) _, err = decodeState(bytes.NewReader(msg)) require.Equal(t, ErrInvalidState, err) } // runtime.Gosched() does not "suspend" the current goroutine so there's no guarantee that the main goroutine won't // be able to continue. For more see https://pkg.go.dev/runtime#Gosched. func gosched() { time.Sleep(1 * time.Millisecond) } prometheus-alertmanager-0.28.1+ds/nflog/nflogpb/000077500000000000000000000000001476331240200215755ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/nflog/nflogpb/nflog.pb.go000066400000000000000000000734631476331240200236460ustar00rootroot00000000000000// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: nflog.proto package nflogpb import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" io "io" math "math" math_bits "math/bits" time "time" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package type Receiver struct { // Configured name of the receiver group. GroupName string `protobuf:"bytes,1,opt,name=group_name,json=groupName,proto3" json:"group_name,omitempty"` // Name of the integration of the receiver. Integration string `protobuf:"bytes,2,opt,name=integration,proto3" json:"integration,omitempty"` // Index of the receiver with respect to the integration. // Every integration in a group may have 0..N configurations. Idx uint32 `protobuf:"varint,3,opt,name=idx,proto3" json:"idx,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } func (m *Receiver) Reset() { *m = Receiver{} } func (m *Receiver) String() string { return proto.CompactTextString(m) } func (*Receiver) ProtoMessage() {} func (*Receiver) Descriptor() ([]byte, []int) { return fileDescriptor_c2d9785ad9c3e602, []int{0} } func (m *Receiver) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *Receiver) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_Receiver.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } func (m *Receiver) XXX_Merge(src proto.Message) { xxx_messageInfo_Receiver.Merge(m, src) } func (m *Receiver) XXX_Size() int { return m.Size() } func (m *Receiver) XXX_DiscardUnknown() { xxx_messageInfo_Receiver.DiscardUnknown(m) } var xxx_messageInfo_Receiver proto.InternalMessageInfo // Entry holds information about a successful notification // sent to a receiver. type Entry struct { // The key identifying the dispatching group. GroupKey []byte `protobuf:"bytes,1,opt,name=group_key,json=groupKey,proto3" json:"group_key,omitempty"` // The receiver that was notified. Receiver *Receiver `protobuf:"bytes,2,opt,name=receiver,proto3" json:"receiver,omitempty"` // Hash over the state of the group at notification time. // Deprecated in favor of FiringAlerts field, but kept for compatibility. GroupHash []byte `protobuf:"bytes,3,opt,name=group_hash,json=groupHash,proto3" json:"group_hash,omitempty"` // Whether the notification was about a resolved alert. // Deprecated in favor of ResolvedAlerts field, but kept for compatibility. Resolved bool `protobuf:"varint,4,opt,name=resolved,proto3" json:"resolved,omitempty"` // Timestamp of the succeeding notification. Timestamp time.Time `protobuf:"bytes,5,opt,name=timestamp,proto3,stdtime" json:"timestamp"` // FiringAlerts list of hashes of firing alerts at the last notification time. FiringAlerts []uint64 `protobuf:"varint,6,rep,packed,name=firing_alerts,json=firingAlerts,proto3" json:"firing_alerts,omitempty"` // ResolvedAlerts list of hashes of resolved alerts at the last notification time. ResolvedAlerts []uint64 `protobuf:"varint,7,rep,packed,name=resolved_alerts,json=resolvedAlerts,proto3" json:"resolved_alerts,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } func (m *Entry) Reset() { *m = Entry{} } func (m *Entry) String() string { return proto.CompactTextString(m) } func (*Entry) ProtoMessage() {} func (*Entry) Descriptor() ([]byte, []int) { return fileDescriptor_c2d9785ad9c3e602, []int{1} } func (m *Entry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *Entry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_Entry.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } func (m *Entry) XXX_Merge(src proto.Message) { xxx_messageInfo_Entry.Merge(m, src) } func (m *Entry) XXX_Size() int { return m.Size() } func (m *Entry) XXX_DiscardUnknown() { xxx_messageInfo_Entry.DiscardUnknown(m) } var xxx_messageInfo_Entry proto.InternalMessageInfo // MeshEntry is a wrapper message to communicate a notify log // entry through a mesh network. type MeshEntry struct { // The original raw notify log entry. Entry *Entry `protobuf:"bytes,1,opt,name=entry,proto3" json:"entry,omitempty"` // A timestamp indicating when the mesh peer should evict // the log entry from its state. ExpiresAt time.Time `protobuf:"bytes,2,opt,name=expires_at,json=expiresAt,proto3,stdtime" json:"expires_at"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } func (m *MeshEntry) Reset() { *m = MeshEntry{} } func (m *MeshEntry) String() string { return proto.CompactTextString(m) } func (*MeshEntry) ProtoMessage() {} func (*MeshEntry) Descriptor() ([]byte, []int) { return fileDescriptor_c2d9785ad9c3e602, []int{2} } func (m *MeshEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *MeshEntry) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MeshEntry.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } func (m *MeshEntry) XXX_Merge(src proto.Message) { xxx_messageInfo_MeshEntry.Merge(m, src) } func (m *MeshEntry) XXX_Size() int { return m.Size() } func (m *MeshEntry) XXX_DiscardUnknown() { xxx_messageInfo_MeshEntry.DiscardUnknown(m) } var xxx_messageInfo_MeshEntry proto.InternalMessageInfo func init() { proto.RegisterType((*Receiver)(nil), "nflogpb.Receiver") proto.RegisterType((*Entry)(nil), "nflogpb.Entry") proto.RegisterType((*MeshEntry)(nil), "nflogpb.MeshEntry") } func init() { proto.RegisterFile("nflog.proto", fileDescriptor_c2d9785ad9c3e602) } var fileDescriptor_c2d9785ad9c3e602 = []byte{ // 385 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x90, 0xcf, 0x6e, 0xd3, 0x40, 0x10, 0xc6, 0xbb, 0x4d, 0xd3, 0xda, 0xe3, 0xb4, 0x94, 0x15, 0x07, 0xcb, 0x08, 0xc7, 0x0a, 0x48, 0xf8, 0x82, 0x23, 0x95, 0x27, 0x68, 0x10, 0x12, 0x12, 0x82, 0xc3, 0x8a, 0x2b, 0xb2, 0x36, 0x74, 0xb2, 0x5e, 0x61, 0x7b, 0xad, 0xf5, 0x36, 0x6a, 0xde, 0x82, 0x47, 0xe0, 0x71, 0x72, 0xe4, 0x09, 0xf8, 0x93, 0x27, 0x41, 0xde, 0xb5, 0x1d, 0x8e, 0xdc, 0x66, 0x7f, 0xf3, 0xcd, 0xcc, 0xb7, 0x1f, 0x04, 0xf5, 0xa6, 0x54, 0x22, 0x6b, 0xb4, 0x32, 0x8a, 0x5e, 0xd8, 0x47, 0xb3, 0x8e, 0xe6, 0x42, 0x29, 0x51, 0xe2, 0xd2, 0xe2, 0xf5, 0xfd, 0x66, 0x69, 0x64, 0x85, 0xad, 0xe1, 0x55, 0xe3, 0x94, 0xd1, 0x13, 0xa1, 0x84, 0xb2, 0xe5, 0xb2, 0xab, 0x1c, 0x5d, 0x7c, 0x06, 0x8f, 0xe1, 0x17, 0x94, 0x5b, 0xd4, 0xf4, 0x19, 0x80, 0xd0, 0xea, 0xbe, 0xc9, 0x6b, 0x5e, 0x61, 0x48, 0x12, 0x92, 0xfa, 0xcc, 0xb7, 0xe4, 0x23, 0xaf, 0x90, 0x26, 0x10, 0xc8, 0xda, 0xa0, 0xd0, 0xdc, 0x48, 0x55, 0x87, 0xa7, 0xb6, 0xff, 0x2f, 0xa2, 0xd7, 0x30, 0x91, 0x77, 0x0f, 0xe1, 0x24, 0x21, 0xe9, 0x25, 0xeb, 0xca, 0xc5, 0xf7, 0x53, 0x98, 0xbe, 0xad, 0x8d, 0xde, 0xd1, 0xa7, 0xe0, 0x56, 0xe5, 0x5f, 0x71, 0x67, 0x77, 0xcf, 0x98, 0x67, 0xc1, 0x7b, 0xdc, 0xd1, 0x57, 0xe0, 0xe9, 0xde, 0x85, 0xdd, 0x1b, 0xdc, 0x3c, 0xce, 0xfa, 0x8f, 0x65, 0x83, 0x3d, 0x36, 0x4a, 0x8e, 0x46, 0x0b, 0xde, 0x16, 0xf6, 0xdc, 0xac, 0x37, 0xfa, 0x8e, 0xb7, 0x05, 0x8d, 0xba, 0x6d, 0xad, 0x2a, 0xb7, 0x78, 0x17, 0x9e, 0x25, 0x24, 0xf5, 0xd8, 0xf8, 0xa6, 0x2b, 0xf0, 0xc7, 0x60, 0xc2, 0xa9, 0x3d, 0x15, 0x65, 0x2e, 0xba, 0x6c, 0x88, 0x2e, 0xfb, 0x34, 0x28, 0x56, 0xde, 0xfe, 0xe7, 0xfc, 0xe4, 0xdb, 0xaf, 0x39, 0x61, 0xc7, 0x31, 0xfa, 0x1c, 0x2e, 0x37, 0x52, 0xcb, 0x5a, 0xe4, 0xbc, 0x44, 0x6d, 0xda, 0xf0, 0x3c, 0x99, 0xa4, 0x67, 0x6c, 0xe6, 0xe0, 0xad, 0x65, 0xf4, 0x25, 0x3c, 0x1a, 0x8e, 0x0e, 0xb2, 0x0b, 0x2b, 0xbb, 0x1a, 0xb0, 0x13, 0x2e, 0xb6, 0xe0, 0x7f, 0xc0, 0xb6, 0x70, 0x29, 0xbd, 0x80, 0x29, 0x76, 0x85, 0x4d, 0x28, 0xb8, 0xb9, 0x1a, 0x53, 0xb0, 0x6d, 0xe6, 0x9a, 0xf4, 0x0d, 0x00, 0x3e, 0x34, 0x52, 0x63, 0x9b, 0x73, 0xd3, 0x07, 0xf6, 0x9f, 0xbf, 0xe8, 0xe7, 0x6e, 0xcd, 0xea, 0x7a, 0xff, 0x27, 0x3e, 0xd9, 0x1f, 0x62, 0xf2, 0xe3, 0x10, 0x93, 0xdf, 0x87, 0x98, 0xac, 0xcf, 0xed, 0xe8, 0xeb, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x49, 0xcd, 0xa7, 0x1e, 0x61, 0x02, 0x00, 0x00, } func (m *Receiver) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } func (m *Receiver) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } func (m *Receiver) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l if m.XXX_unrecognized != nil { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } if m.Idx != 0 { i = encodeVarintNflog(dAtA, i, uint64(m.Idx)) i-- dAtA[i] = 0x18 } if len(m.Integration) > 0 { i -= len(m.Integration) copy(dAtA[i:], m.Integration) i = encodeVarintNflog(dAtA, i, uint64(len(m.Integration))) i-- dAtA[i] = 0x12 } if len(m.GroupName) > 0 { i -= len(m.GroupName) copy(dAtA[i:], m.GroupName) i = encodeVarintNflog(dAtA, i, uint64(len(m.GroupName))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } func (m *Entry) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } func (m *Entry) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } func (m *Entry) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l if m.XXX_unrecognized != nil { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } if len(m.ResolvedAlerts) > 0 { dAtA2 := make([]byte, len(m.ResolvedAlerts)*10) var j1 int for _, num := range m.ResolvedAlerts { for num >= 1<<7 { dAtA2[j1] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 j1++ } dAtA2[j1] = uint8(num) j1++ } i -= j1 copy(dAtA[i:], dAtA2[:j1]) i = encodeVarintNflog(dAtA, i, uint64(j1)) i-- dAtA[i] = 0x3a } if len(m.FiringAlerts) > 0 { dAtA4 := make([]byte, len(m.FiringAlerts)*10) var j3 int for _, num := range m.FiringAlerts { for num >= 1<<7 { dAtA4[j3] = uint8(uint64(num)&0x7f | 0x80) num >>= 7 j3++ } dAtA4[j3] = uint8(num) j3++ } i -= j3 copy(dAtA[i:], dAtA4[:j3]) i = encodeVarintNflog(dAtA, i, uint64(j3)) i-- dAtA[i] = 0x32 } n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp):]) if err5 != nil { return 0, err5 } i -= n5 i = encodeVarintNflog(dAtA, i, uint64(n5)) i-- dAtA[i] = 0x2a if m.Resolved { i-- if m.Resolved { dAtA[i] = 1 } else { dAtA[i] = 0 } i-- dAtA[i] = 0x20 } if len(m.GroupHash) > 0 { i -= len(m.GroupHash) copy(dAtA[i:], m.GroupHash) i = encodeVarintNflog(dAtA, i, uint64(len(m.GroupHash))) i-- dAtA[i] = 0x1a } if m.Receiver != nil { { size, err := m.Receiver.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } i -= size i = encodeVarintNflog(dAtA, i, uint64(size)) } i-- dAtA[i] = 0x12 } if len(m.GroupKey) > 0 { i -= len(m.GroupKey) copy(dAtA[i:], m.GroupKey) i = encodeVarintNflog(dAtA, i, uint64(len(m.GroupKey))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } func (m *MeshEntry) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } func (m *MeshEntry) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } func (m *MeshEntry) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l if m.XXX_unrecognized != nil { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } n7, err7 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExpiresAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpiresAt):]) if err7 != nil { return 0, err7 } i -= n7 i = encodeVarintNflog(dAtA, i, uint64(n7)) i-- dAtA[i] = 0x12 if m.Entry != nil { { size, err := m.Entry.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } i -= size i = encodeVarintNflog(dAtA, i, uint64(size)) } i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } func encodeVarintNflog(dAtA []byte, offset int, v uint64) int { offset -= sovNflog(v) base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) return base } func (m *Receiver) Size() (n int) { if m == nil { return 0 } var l int _ = l l = len(m.GroupName) if l > 0 { n += 1 + l + sovNflog(uint64(l)) } l = len(m.Integration) if l > 0 { n += 1 + l + sovNflog(uint64(l)) } if m.Idx != 0 { n += 1 + sovNflog(uint64(m.Idx)) } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } func (m *Entry) Size() (n int) { if m == nil { return 0 } var l int _ = l l = len(m.GroupKey) if l > 0 { n += 1 + l + sovNflog(uint64(l)) } if m.Receiver != nil { l = m.Receiver.Size() n += 1 + l + sovNflog(uint64(l)) } l = len(m.GroupHash) if l > 0 { n += 1 + l + sovNflog(uint64(l)) } if m.Resolved { n += 2 } l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp) n += 1 + l + sovNflog(uint64(l)) if len(m.FiringAlerts) > 0 { l = 0 for _, e := range m.FiringAlerts { l += sovNflog(uint64(e)) } n += 1 + sovNflog(uint64(l)) + l } if len(m.ResolvedAlerts) > 0 { l = 0 for _, e := range m.ResolvedAlerts { l += sovNflog(uint64(e)) } n += 1 + sovNflog(uint64(l)) + l } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } func (m *MeshEntry) Size() (n int) { if m == nil { return 0 } var l int _ = l if m.Entry != nil { l = m.Entry.Size() n += 1 + l + sovNflog(uint64(l)) } l = github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpiresAt) n += 1 + l + sovNflog(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } func sovNflog(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } func sozNflog(x uint64) (n int) { return sovNflog(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } func (m *Receiver) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { return fmt.Errorf("proto: Receiver: wiretype end group for non-group") } if fieldNum <= 0 { return fmt.Errorf("proto: Receiver: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field GroupName", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthNflog } postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthNflog } if postIndex > l { return io.ErrUnexpectedEOF } m.GroupName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Integration", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthNflog } postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthNflog } if postIndex > l { return io.ErrUnexpectedEOF } m.Integration = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Idx", wireType) } m.Idx = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ m.Idx |= uint32(b&0x7F) << shift if b < 0x80 { break } } default: iNdEx = preIndex skippy, err := skipNflog(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthNflog } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) iNdEx += skippy } } if iNdEx > l { return io.ErrUnexpectedEOF } return nil } func (m *Entry) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { return fmt.Errorf("proto: Entry: wiretype end group for non-group") } if fieldNum <= 0 { return fmt.Errorf("proto: Entry: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field GroupKey", wireType) } var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } if byteLen < 0 { return ErrInvalidLengthNflog } postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthNflog } if postIndex > l { return io.ErrUnexpectedEOF } m.GroupKey = append(m.GroupKey[:0], dAtA[iNdEx:postIndex]...) if m.GroupKey == nil { m.GroupKey = []byte{} } iNdEx = postIndex case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthNflog } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthNflog } if postIndex > l { return io.ErrUnexpectedEOF } if m.Receiver == nil { m.Receiver = &Receiver{} } if err := m.Receiver.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field GroupHash", wireType) } var byteLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ byteLen |= int(b&0x7F) << shift if b < 0x80 { break } } if byteLen < 0 { return ErrInvalidLengthNflog } postIndex := iNdEx + byteLen if postIndex < 0 { return ErrInvalidLengthNflog } if postIndex > l { return io.ErrUnexpectedEOF } m.GroupHash = append(m.GroupHash[:0], dAtA[iNdEx:postIndex]...) if m.GroupHash == nil { m.GroupHash = []byte{} } iNdEx = postIndex case 4: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Resolved", wireType) } var v int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ v |= int(b&0x7F) << shift if b < 0x80 { break } } m.Resolved = bool(v != 0) case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthNflog } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthNflog } if postIndex > l { return io.ErrUnexpectedEOF } if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Timestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 6: if wireType == 0 { var v uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ v |= uint64(b&0x7F) << shift if b < 0x80 { break } } m.FiringAlerts = append(m.FiringAlerts, v) } else if wireType == 2 { var packedLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ packedLen |= int(b&0x7F) << shift if b < 0x80 { break } } if packedLen < 0 { return ErrInvalidLengthNflog } postIndex := iNdEx + packedLen if postIndex < 0 { return ErrInvalidLengthNflog } if postIndex > l { return io.ErrUnexpectedEOF } var elementCount int var count int for _, integer := range dAtA[iNdEx:postIndex] { if integer < 128 { count++ } } elementCount = count if elementCount != 0 && len(m.FiringAlerts) == 0 { m.FiringAlerts = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ v |= uint64(b&0x7F) << shift if b < 0x80 { break } } m.FiringAlerts = append(m.FiringAlerts, v) } } else { return fmt.Errorf("proto: wrong wireType = %d for field FiringAlerts", wireType) } case 7: if wireType == 0 { var v uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ v |= uint64(b&0x7F) << shift if b < 0x80 { break } } m.ResolvedAlerts = append(m.ResolvedAlerts, v) } else if wireType == 2 { var packedLen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ packedLen |= int(b&0x7F) << shift if b < 0x80 { break } } if packedLen < 0 { return ErrInvalidLengthNflog } postIndex := iNdEx + packedLen if postIndex < 0 { return ErrInvalidLengthNflog } if postIndex > l { return io.ErrUnexpectedEOF } var elementCount int var count int for _, integer := range dAtA[iNdEx:postIndex] { if integer < 128 { count++ } } elementCount = count if elementCount != 0 && len(m.ResolvedAlerts) == 0 { m.ResolvedAlerts = make([]uint64, 0, elementCount) } for iNdEx < postIndex { var v uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ v |= uint64(b&0x7F) << shift if b < 0x80 { break } } m.ResolvedAlerts = append(m.ResolvedAlerts, v) } } else { return fmt.Errorf("proto: wrong wireType = %d for field ResolvedAlerts", wireType) } default: iNdEx = preIndex skippy, err := skipNflog(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthNflog } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) iNdEx += skippy } } if iNdEx > l { return io.ErrUnexpectedEOF } return nil } func (m *MeshEntry) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { return fmt.Errorf("proto: MeshEntry: wiretype end group for non-group") } if fieldNum <= 0 { return fmt.Errorf("proto: MeshEntry: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Entry", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthNflog } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthNflog } if postIndex > l { return io.ErrUnexpectedEOF } if m.Entry == nil { m.Entry = &Entry{} } if err := m.Entry.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ExpiresAt", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowNflog } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthNflog } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthNflog } if postIndex > l { return io.ErrUnexpectedEOF } if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.ExpiresAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipNflog(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthNflog } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) iNdEx += skippy } } if iNdEx > l { return io.ErrUnexpectedEOF } return nil } func skipNflog(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return 0, ErrIntOverflowNflog } if iNdEx >= l { return 0, io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } wireType := int(wire & 0x7) switch wireType { case 0: for shift := uint(0); ; shift += 7 { if shift >= 64 { return 0, ErrIntOverflowNflog } if iNdEx >= l { return 0, io.ErrUnexpectedEOF } iNdEx++ if dAtA[iNdEx-1] < 0x80 { break } } case 1: iNdEx += 8 case 2: var length int for shift := uint(0); ; shift += 7 { if shift >= 64 { return 0, ErrIntOverflowNflog } if iNdEx >= l { return 0, io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ length |= (int(b) & 0x7F) << shift if b < 0x80 { break } } if length < 0 { return 0, ErrInvalidLengthNflog } iNdEx += length case 3: depth++ case 4: if depth == 0 { return 0, ErrUnexpectedEndOfGroupNflog } depth-- case 5: iNdEx += 4 default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } if iNdEx < 0 { return 0, ErrInvalidLengthNflog } if depth == 0 { return iNdEx, nil } } return 0, io.ErrUnexpectedEOF } var ( ErrInvalidLengthNflog = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowNflog = fmt.Errorf("proto: integer overflow") ErrUnexpectedEndOfGroupNflog = fmt.Errorf("proto: unexpected end of group") ) prometheus-alertmanager-0.28.1+ds/nflog/nflogpb/nflog.proto000066400000000000000000000035571476331240200240010ustar00rootroot00000000000000syntax = "proto3"; package nflogpb; import "google/protobuf/timestamp.proto"; import "gogoproto/gogo.proto"; option (gogoproto.marshaler_all) = true; option (gogoproto.sizer_all) = true; option (gogoproto.unmarshaler_all) = true; option (gogoproto.goproto_getters_all) = false; message Receiver { // Configured name of the receiver group. string group_name = 1; // Name of the integration of the receiver. string integration = 2; // Index of the receiver with respect to the integration. // Every integration in a group may have 0..N configurations. uint32 idx = 3; } // Entry holds information about a successful notification // sent to a receiver. message Entry { // The key identifying the dispatching group. bytes group_key = 1; // The receiver that was notified. Receiver receiver = 2; // Hash over the state of the group at notification time. // Deprecated in favor of FiringAlerts field, but kept for compatibility. bytes group_hash = 3; // Whether the notification was about a resolved alert. // Deprecated in favor of ResolvedAlerts field, but kept for compatibility. bool resolved = 4; // Timestamp of the succeeding notification. google.protobuf.Timestamp timestamp = 5 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; // FiringAlerts list of hashes of firing alerts at the last notification time. repeated uint64 firing_alerts = 6; // ResolvedAlerts list of hashes of resolved alerts at the last notification time. repeated uint64 resolved_alerts = 7; } // MeshEntry is a wrapper message to communicate a notify log // entry through a mesh network. message MeshEntry { // The original raw notify log entry. Entry entry = 1; // A timestamp indicating when the mesh peer should evict // the log entry from its state. google.protobuf.Timestamp expires_at = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; } prometheus-alertmanager-0.28.1+ds/nflog/nflogpb/set.go000066400000000000000000000026461476331240200227270ustar00rootroot00000000000000// Copyright 2017 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nflogpb // IsFiringSubset returns whether the given subset is a subset of the alerts // that were firing at the time of the last notification. func (m *Entry) IsFiringSubset(subset map[uint64]struct{}) bool { set := map[uint64]struct{}{} for i := range m.FiringAlerts { set[m.FiringAlerts[i]] = struct{}{} } return isSubset(set, subset) } // IsResolvedSubset returns whether the given subset is a subset of the alerts // that were resolved at the time of the last notification. func (m *Entry) IsResolvedSubset(subset map[uint64]struct{}) bool { set := map[uint64]struct{}{} for i := range m.ResolvedAlerts { set[m.ResolvedAlerts[i]] = struct{}{} } return isSubset(set, subset) } func isSubset(set, subset map[uint64]struct{}) bool { for k := range subset { _, exists := set[k] if !exists { return false } } return true } prometheus-alertmanager-0.28.1+ds/nflog/nflogpb/set_test.go000066400000000000000000000043301476331240200237560ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package nflogpb import ( "testing" ) func TestIsFiringSubset(t *testing.T) { e := &Entry{ FiringAlerts: []uint64{1, 2, 3}, } tests := []struct { subset map[uint64]struct{} expected bool }{ {newSubset(), true}, // empty subset {newSubset(1), true}, {newSubset(2), true}, {newSubset(3), true}, {newSubset(1, 2), true}, {newSubset(1, 2), true}, {newSubset(1, 2, 3), true}, {newSubset(4), false}, {newSubset(1, 5), false}, {newSubset(1, 2, 3, 6), false}, } for _, test := range tests { if result := e.IsFiringSubset(test.subset); result != test.expected { t.Errorf("Expected %t, got %t for subset %v", test.expected, result, elements(test.subset)) } } } func TestIsResolvedSubset(t *testing.T) { e := &Entry{ ResolvedAlerts: []uint64{1, 2, 3}, } tests := []struct { subset map[uint64]struct{} expected bool }{ {newSubset(), true}, // empty subset {newSubset(1), true}, {newSubset(2), true}, {newSubset(3), true}, {newSubset(1, 2), true}, {newSubset(1, 2), true}, {newSubset(1, 2, 3), true}, {newSubset(4), false}, {newSubset(1, 5), false}, {newSubset(1, 2, 3, 6), false}, } for _, test := range tests { if result := e.IsResolvedSubset(test.subset); result != test.expected { t.Errorf("Expected %t, got %t for subset %v", test.expected, result, elements(test.subset)) } } } func newSubset(elements ...uint64) map[uint64]struct{} { subset := make(map[uint64]struct{}) for _, el := range elements { subset[el] = struct{}{} } return subset } func elements(m map[uint64]struct{}) []uint64 { els := make([]uint64, 0, len(m)) for k := range m { els = append(els, k) } return els } prometheus-alertmanager-0.28.1+ds/notify/000077500000000000000000000000001476331240200203515ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/discord/000077500000000000000000000000001476331240200220005ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/discord/discord.go000066400000000000000000000112171476331240200237600ustar00rootroot00000000000000// Copyright 2021 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package discord import ( "bytes" "context" "encoding/json" "fmt" "log/slog" "net/http" netUrl "net/url" "os" "strings" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) const ( // https://discord.com/developers/docs/resources/channel#embed-object-embed-limits - 256 characters or runes. maxTitleLenRunes = 256 // https://discord.com/developers/docs/resources/channel#embed-object-embed-limits - 4096 characters or runes. maxDescriptionLenRunes = 4096 maxContentLenRunes = 2000 ) const ( colorRed = 0x992D22 colorGreen = 0x2ECC71 colorGrey = 0x95A5A6 ) // Notifier implements a Notifier for Discord notifications. type Notifier struct { conf *config.DiscordConfig tmpl *template.Template logger *slog.Logger client *http.Client retrier *notify.Retrier webhookURL *config.SecretURL } // New returns a new Discord notifier. func New(c *config.DiscordConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "discord", httpOpts...) if err != nil { return nil, err } n := &Notifier{ conf: c, tmpl: t, logger: l, client: client, retrier: ¬ify.Retrier{}, webhookURL: c.WebhookURL, } return n, nil } type webhook struct { Content string `json:"content"` Embeds []webhookEmbed `json:"embeds"` Username string `json:"username,omitempty"` AvatarURL string `json:"avatar_url,omitempty"` } type webhookEmbed struct { Title string `json:"title"` Description string `json:"description"` Color int `json:"color"` } // Notify implements the Notifier interface. func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { key, err := notify.ExtractGroupKey(ctx) if err != nil { return false, err } n.logger.Debug("extracted group key", "key", key) alerts := types.Alerts(as...) data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger) tmpl := notify.TmplText(n.tmpl, data, &err) if err != nil { return false, err } title, truncated := notify.TruncateInRunes(tmpl(n.conf.Title), maxTitleLenRunes) if err != nil { return false, err } if truncated { n.logger.Warn("Truncated title", "key", key, "max_runes", maxTitleLenRunes) } description, truncated := notify.TruncateInRunes(tmpl(n.conf.Message), maxDescriptionLenRunes) if err != nil { return false, err } if truncated { n.logger.Warn("Truncated message", "key", key, "max_runes", maxDescriptionLenRunes) } content, truncated := notify.TruncateInRunes(tmpl(n.conf.Content), maxContentLenRunes) if err != nil { return false, err } if truncated { n.logger.Warn("Truncated message", "key", key, "max_runes", maxContentLenRunes) } color := colorGrey if alerts.Status() == model.AlertFiring { color = colorRed } if alerts.Status() == model.AlertResolved { color = colorGreen } var url string if n.conf.WebhookURL != nil { url = n.conf.WebhookURL.String() } else { b, err := os.ReadFile(n.conf.WebhookURLFile) if err != nil { return false, fmt.Errorf("read webhook_url_file: %w", err) } url = strings.TrimSpace(string(b)) } w := webhook{ Content: content, Username: n.conf.Username, Embeds: []webhookEmbed{{ Title: title, Description: description, Color: color, }}, } if len(n.conf.AvatarURL) != 0 { if _, err := netUrl.Parse(n.conf.AvatarURL); err == nil { w.AvatarURL = n.conf.AvatarURL } else { n.logger.Warn("Bad avatar url", "key", key) } } var payload bytes.Buffer if err = json.NewEncoder(&payload).Encode(w); err != nil { return false, err } resp, err := notify.PostJSON(ctx, n.client, url, &payload) if err != nil { return true, notify.RedactURL(err) } shouldRetry, err := n.retrier.Check(resp.StatusCode, resp.Body) if err != nil { return shouldRetry, err } return false, nil } prometheus-alertmanager-0.28.1+ds/notify/discord/discord_test.go000066400000000000000000000144361476331240200250250ustar00rootroot00000000000000// Copyright 2021 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package discord import ( "context" "encoding/json" "fmt" "io" "net/http" "net/http/httptest" "net/url" "os" "testing" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/notify/test" "github.com/prometheus/alertmanager/types" ) // This is a test URL that has been modified to not be valid. var testWebhookURL, _ = url.Parse("https://discord.com/api/webhooks/971139602272503183/78ZWZ4V3xwZUBKRFF-G9m1nRtDtNTChl_WzW6Q4kxShjSB02oLSiPTPa8TS2tTGO9EYf") func TestDiscordRetry(t *testing.T) { notifier, err := New( &config.DiscordConfig{ WebhookURL: &config.SecretURL{URL: testWebhookURL}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) for statusCode, expected := range test.RetryTests(test.DefaultRetryCodes()) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("retry - error on status %d", statusCode)) } } func TestDiscordTemplating(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { dec := json.NewDecoder(r.Body) out := make(map[string]interface{}) err := dec.Decode(&out) if err != nil { panic(err) } })) defer srv.Close() u, _ := url.Parse(srv.URL) for _, tc := range []struct { title string cfg *config.DiscordConfig retry bool errMsg string }{ { title: "full-blown message", cfg: &config.DiscordConfig{ Title: `{{ template "discord.default.title" . }}`, Message: `{{ template "discord.default.message" . }}`, }, retry: false, }, { title: "title with templating errors", cfg: &config.DiscordConfig{ Title: "{{ ", }, errMsg: "template: :1: unclosed action", }, { title: "message with templating errors", cfg: &config.DiscordConfig{ Title: `{{ template "discord.default.title" . }}`, Message: "{{ ", }, errMsg: "template: :1: unclosed action", }, } { t.Run(tc.title, func(t *testing.T) { tc.cfg.WebhookURL = &config.SecretURL{URL: u} tc.cfg.HTTPConfig = &commoncfg.HTTPClientConfig{} pd, err := New(tc.cfg, test.CreateTmpl(t), promslog.NewNopLogger()) require.NoError(t, err) ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") ok, err := pd.Notify(ctx, []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "lbl1": "val1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }...) if tc.errMsg == "" { require.NoError(t, err) } else { require.Error(t, err) require.Contains(t, err.Error(), tc.errMsg) } require.Equal(t, tc.retry, ok) }) } } func TestDiscordRedactedURL(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() secret := "secret" notifier, err := New( &config.DiscordConfig{ WebhookURL: &config.SecretURL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, secret) } func TestDiscordReadingURLFromFile(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() f, err := os.CreateTemp("", "webhook_url") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString(u.String() + "\n") require.NoError(t, err, "writing to temp file failed") notifier, err := New( &config.DiscordConfig{ WebhookURLFile: f.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, u.String()) } func TestDiscord_Notify(t *testing.T) { // Create a fake HTTP server to simulate the Discord webhook var resp string srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Read the request as a string body, err := io.ReadAll(r.Body) require.NoError(t, err, "reading request body failed") // Store the request body in the response resp = string(body) w.WriteHeader(http.StatusOK) })) // Create a temporary file to simulate the WebhookURLFile tempFile, err := os.CreateTemp("", "webhook_url") require.NoError(t, err) t.Cleanup(func() { require.NoError(t, os.Remove(tempFile.Name())) }) // Write the fake webhook URL to the temp file _, err = tempFile.WriteString(srv.URL) require.NoError(t, err) // Create a DiscordConfig with the WebhookURLFile set cfg := &config.DiscordConfig{ WebhookURLFile: tempFile.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, Title: "Test Title", Message: "Test Message", Content: "Test Content", Username: "Test Username", AvatarURL: "http://example.com/avatar.png", } // Create a new Discord notifier notifier, err := New(cfg, test.CreateTmpl(t), promslog.NewNopLogger()) require.NoError(t, err) // Create a context and alerts ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") alerts := []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "lbl1": "val1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, } // Call the Notify method ok, err := notifier.Notify(ctx, alerts...) require.NoError(t, err) require.False(t, ok) require.Equal(t, "{\"content\":\"Test Content\",\"embeds\":[{\"title\":\"Test Title\",\"description\":\"Test Message\",\"color\":10038562}],\"username\":\"Test Username\",\"avatar_url\":\"http://example.com/avatar.png\"}\n", resp) } prometheus-alertmanager-0.28.1+ds/notify/email/000077500000000000000000000000001476331240200214405ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/email/email.go000066400000000000000000000252401476331240200230610ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package email import ( "bytes" "context" "crypto/tls" "errors" "fmt" "log/slog" "math/rand" "mime" "mime/multipart" "mime/quotedprintable" "net" "net/mail" "net/smtp" "net/textproto" "os" "strings" "sync" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) // Email implements a Notifier for email notifications. type Email struct { conf *config.EmailConfig tmpl *template.Template logger *slog.Logger hostname string } // New returns a new Email notifier. func New(c *config.EmailConfig, t *template.Template, l *slog.Logger) *Email { if _, ok := c.Headers["Subject"]; !ok { c.Headers["Subject"] = config.DefaultEmailSubject } if _, ok := c.Headers["To"]; !ok { c.Headers["To"] = c.To } if _, ok := c.Headers["From"]; !ok { c.Headers["From"] = c.From } h, err := os.Hostname() // If we can't get the hostname, we'll use localhost if err != nil { h = "localhost.localdomain" } return &Email{conf: c, tmpl: t, logger: l, hostname: h} } // auth resolves a string of authentication mechanisms. func (n *Email) auth(mechs string) (smtp.Auth, error) { username := n.conf.AuthUsername // If no username is set, keep going without authentication. if n.conf.AuthUsername == "" { n.logger.Debug("smtp_auth_username is not configured. Attempting to send email without authenticating") return nil, nil } err := &types.MultiError{} for _, mech := range strings.Split(mechs, " ") { switch mech { case "CRAM-MD5": secret := string(n.conf.AuthSecret) if secret == "" { err.Add(errors.New("missing secret for CRAM-MD5 auth mechanism")) continue } return smtp.CRAMMD5Auth(username, secret), nil case "PLAIN": password, passwordErr := n.getPassword() if passwordErr != nil { err.Add(passwordErr) continue } if password == "" { err.Add(errors.New("missing password for PLAIN auth mechanism")) continue } identity := n.conf.AuthIdentity return smtp.PlainAuth(identity, username, password, n.conf.Smarthost.Host), nil case "LOGIN": password, passwordErr := n.getPassword() if passwordErr != nil { err.Add(passwordErr) continue } if password == "" { err.Add(errors.New("missing password for LOGIN auth mechanism")) continue } return LoginAuth(username, password), nil } } if err.Len() == 0 { err.Add(errors.New("unknown auth mechanism: " + mechs)) } return nil, err } // Notify implements the Notifier interface. func (n *Email) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { var ( c *smtp.Client conn net.Conn err error success = false ) if n.conf.Smarthost.Port == "465" { tlsConfig, err := commoncfg.NewTLSConfig(n.conf.TLSConfig) if err != nil { return false, fmt.Errorf("parse TLS configuration: %w", err) } if tlsConfig.ServerName == "" { tlsConfig.ServerName = n.conf.Smarthost.Host } conn, err = tls.Dial("tcp", n.conf.Smarthost.String(), tlsConfig) if err != nil { return true, fmt.Errorf("establish TLS connection to server: %w", err) } } else { var ( d = net.Dialer{} err error ) conn, err = d.DialContext(ctx, "tcp", n.conf.Smarthost.String()) if err != nil { return true, fmt.Errorf("establish connection to server: %w", err) } } c, err = smtp.NewClient(conn, n.conf.Smarthost.Host) if err != nil { conn.Close() return true, fmt.Errorf("create SMTP client: %w", err) } defer func() { // Try to clean up after ourselves but don't log anything if something has failed. if err := c.Quit(); success && err != nil { n.logger.Warn("failed to close SMTP connection", "err", err) } }() if n.conf.Hello != "" { err = c.Hello(n.conf.Hello) if err != nil { return true, fmt.Errorf("send EHLO command: %w", err) } } // Global Config guarantees RequireTLS is not nil. if *n.conf.RequireTLS { if ok, _ := c.Extension("STARTTLS"); !ok { return true, fmt.Errorf("'require_tls' is true (default) but %q does not advertise the STARTTLS extension", n.conf.Smarthost) } tlsConf, err := commoncfg.NewTLSConfig(n.conf.TLSConfig) if err != nil { return false, fmt.Errorf("parse TLS configuration: %w", err) } if tlsConf.ServerName == "" { tlsConf.ServerName = n.conf.Smarthost.Host } if err := c.StartTLS(tlsConf); err != nil { return true, fmt.Errorf("send STARTTLS command: %w", err) } } if ok, mech := c.Extension("AUTH"); ok { auth, err := n.auth(mech) if err != nil { return true, fmt.Errorf("find auth mechanism: %w", err) } if auth != nil { if err := c.Auth(auth); err != nil { return true, fmt.Errorf("%T auth: %w", auth, err) } } } var ( tmplErr error data = notify.GetTemplateData(ctx, n.tmpl, as, n.logger) tmpl = notify.TmplText(n.tmpl, data, &tmplErr) ) from := tmpl(n.conf.From) if tmplErr != nil { return false, fmt.Errorf("execute 'from' template: %w", tmplErr) } to := tmpl(n.conf.To) if tmplErr != nil { return false, fmt.Errorf("execute 'to' template: %w", tmplErr) } addrs, err := mail.ParseAddressList(from) if err != nil { return false, fmt.Errorf("parse 'from' addresses: %w", err) } if len(addrs) != 1 { return false, fmt.Errorf("must be exactly one 'from' address (got: %d)", len(addrs)) } if err = c.Mail(addrs[0].Address); err != nil { return true, fmt.Errorf("send MAIL command: %w", err) } addrs, err = mail.ParseAddressList(to) if err != nil { return false, fmt.Errorf("parse 'to' addresses: %w", err) } for _, addr := range addrs { if err = c.Rcpt(addr.Address); err != nil { return true, fmt.Errorf("send RCPT command: %w", err) } } // Send the email headers and body. message, err := c.Data() if err != nil { return true, fmt.Errorf("send DATA command: %w", err) } closeOnce := sync.OnceValue(func() error { return message.Close() }) // Close the message when this method exits in order to not leak resources. Even though we're calling this explicitly // further down, the method may exit before then. defer func() { // If we try close an already-closed writer, it'll send a subsequent request to the server which is invalid. _ = closeOnce() }() buffer := &bytes.Buffer{} for header, t := range n.conf.Headers { value, err := n.tmpl.ExecuteTextString(t, data) if err != nil { return false, fmt.Errorf("execute %q header template: %w", header, err) } fmt.Fprintf(buffer, "%s: %s\r\n", header, mime.QEncoding.Encode("utf-8", value)) } if _, ok := n.conf.Headers["Message-Id"]; !ok { fmt.Fprintf(buffer, "Message-Id: %s\r\n", fmt.Sprintf("<%d.%d@%s>", time.Now().UnixNano(), rand.Uint64(), n.hostname)) } multipartBuffer := &bytes.Buffer{} multipartWriter := multipart.NewWriter(multipartBuffer) fmt.Fprintf(buffer, "Date: %s\r\n", time.Now().Format(time.RFC1123Z)) fmt.Fprintf(buffer, "Content-Type: multipart/alternative; boundary=%s\r\n", multipartWriter.Boundary()) fmt.Fprintf(buffer, "MIME-Version: 1.0\r\n\r\n") // TODO: Add some useful headers here, such as URL of the alertmanager // and active/resolved. _, err = message.Write(buffer.Bytes()) if err != nil { return false, fmt.Errorf("write headers: %w", err) } if len(n.conf.Text) > 0 { // Text template w, err := multipartWriter.CreatePart(textproto.MIMEHeader{ "Content-Transfer-Encoding": {"quoted-printable"}, "Content-Type": {"text/plain; charset=UTF-8"}, }) if err != nil { return false, fmt.Errorf("create part for text template: %w", err) } body, err := n.tmpl.ExecuteTextString(n.conf.Text, data) if err != nil { return false, fmt.Errorf("execute text template: %w", err) } qw := quotedprintable.NewWriter(w) _, err = qw.Write([]byte(body)) if err != nil { return true, fmt.Errorf("write text part: %w", err) } err = qw.Close() if err != nil { return true, fmt.Errorf("close text part: %w", err) } } if len(n.conf.HTML) > 0 { // Html template // Preferred alternative placed last per section 5.1.4 of RFC 2046 // https://www.ietf.org/rfc/rfc2046.txt w, err := multipartWriter.CreatePart(textproto.MIMEHeader{ "Content-Transfer-Encoding": {"quoted-printable"}, "Content-Type": {"text/html; charset=UTF-8"}, }) if err != nil { return false, fmt.Errorf("create part for html template: %w", err) } body, err := n.tmpl.ExecuteHTMLString(n.conf.HTML, data) if err != nil { return false, fmt.Errorf("execute html template: %w", err) } qw := quotedprintable.NewWriter(w) _, err = qw.Write([]byte(body)) if err != nil { return true, fmt.Errorf("write HTML part: %w", err) } err = qw.Close() if err != nil { return true, fmt.Errorf("close HTML part: %w", err) } } err = multipartWriter.Close() if err != nil { return false, fmt.Errorf("close multipartWriter: %w", err) } _, err = message.Write(multipartBuffer.Bytes()) if err != nil { return false, fmt.Errorf("write body buffer: %w", err) } // Complete the message and await response. if err = closeOnce(); err != nil { return true, fmt.Errorf("delivery failure: %w", err) } success = true return false, nil } type loginAuth struct { username, password string } func LoginAuth(username, password string) smtp.Auth { return &loginAuth{username, password} } func (a *loginAuth) Start(server *smtp.ServerInfo) (string, []byte, error) { return "LOGIN", []byte{}, nil } // Used for AUTH LOGIN. (Maybe password should be encrypted). func (a *loginAuth) Next(fromServer []byte, more bool) ([]byte, error) { if more { switch strings.ToLower(string(fromServer)) { case "username:": return []byte(a.username), nil case "password:": return []byte(a.password), nil default: return nil, errors.New("unexpected server challenge") } } return nil, nil } func (n *Email) getPassword() (string, error) { if len(n.conf.AuthPasswordFile) > 0 { content, err := os.ReadFile(n.conf.AuthPasswordFile) if err != nil { return "", fmt.Errorf("could not read %s: %w", n.conf.AuthPasswordFile, err) } return strings.TrimSpace(string(content)), nil } return string(n.conf.AuthPassword), nil } prometheus-alertmanager-0.28.1+ds/notify/email/email_test.go000066400000000000000000000512411476331240200241200ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Some tests require a running mail catcher. We use MailDev for this purpose, // it can work without or with authentication (LOGIN only). It exposes a REST // API which we use to retrieve and check the sent emails. // // Those tests are only executed when specific environment variables are set, // otherwise they are skipped. The tests must be run by the CI. // // To run the tests locally, you should start 2 MailDev containers: // // $ docker run --rm -p 1080:1080 -p 1025:1025 --entrypoint bin/maildev djfarrelly/maildev@sha256:624e0ec781e11c3531da83d9448f5861f258ee008c1b2da63b3248bfd680acfa -v // $ docker run --rm -p 1081:1080 -p 1026:1025 --entrypoint bin/maildev djfarrelly/maildev@sha256:624e0ec781e11c3531da83d9448f5861f258ee008c1b2da63b3248bfd680acfa --incoming-user user --incoming-pass pass -v // // $ EMAIL_NO_AUTH_CONFIG=testdata/noauth.yml EMAIL_AUTH_CONFIG=testdata/auth.yml make // // See also https://github.com/djfarrelly/MailDev for more details. package email import ( "context" "fmt" "io" "net" "net/http" "net/url" "os" "strconv" "strings" "testing" "time" "github.com/emersion/go-smtp" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" // nolint:depguard // require cannot be called outside the main goroutine: https://pkg.go.dev/testing#T.FailNow "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "gopkg.in/yaml.v2" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) const ( emailNoAuthConfigVar = "EMAIL_NO_AUTH_CONFIG" emailAuthConfigVar = "EMAIL_AUTH_CONFIG" emailTo = "alerts@example.com" emailFrom = "alertmanager@example.com" ) // email represents an email returned by the MailDev REST API. // See https://github.com/djfarrelly/MailDev/blob/master/docs/rest.md. type email struct { To []map[string]string From []map[string]string Subject string HTML *string Text *string Headers map[string]string } // mailDev is a client for the MailDev server. type mailDev struct { *url.URL } func (m *mailDev) UnmarshalYAML(unmarshal func(interface{}) error) error { var s string if err := unmarshal(&s); err != nil { return err } urlp, err := url.Parse(s) if err != nil { return err } m.URL = urlp return nil } // getLastEmail returns the last received email. func (m *mailDev) getLastEmail() (*email, error) { code, b, err := m.doEmailRequest(http.MethodGet, "/email") if err != nil { return nil, err } if code != http.StatusOK { return nil, fmt.Errorf("expected status OK, got %d", code) } var emails []email err = yaml.Unmarshal(b, &emails) if err != nil { return nil, err } if len(emails) == 0 { return nil, nil } return &emails[len(emails)-1], nil } // deleteAllEmails deletes all emails. func (m *mailDev) deleteAllEmails() error { _, _, err := m.doEmailRequest(http.MethodDelete, "/email/all") return err } // doEmailRequest makes a request to the MailDev API. func (m *mailDev) doEmailRequest(method, path string) (int, []byte, error) { req, err := http.NewRequest(method, fmt.Sprintf("%s://%s%s", m.Scheme, m.Host, path), nil) if err != nil { return 0, nil, err } ctx, cancel := context.WithTimeout(context.Background(), time.Second) req = req.WithContext(ctx) defer cancel() res, err := http.DefaultClient.Do(req) if err != nil { return 0, nil, err } defer res.Body.Close() b, err := io.ReadAll(res.Body) if err != nil { return 0, nil, err } return res.StatusCode, b, nil } // emailTestConfig is the configuration for the tests. type emailTestConfig struct { Smarthost config.HostPort `yaml:"smarthost"` Username string `yaml:"username"` Password string `yaml:"password"` Server *mailDev `yaml:"server"` } func loadEmailTestConfiguration(f string) (emailTestConfig, error) { c := emailTestConfig{} b, err := os.ReadFile(f) if err != nil { return c, err } err = yaml.UnmarshalStrict(b, &c) if err != nil { return c, err } return c, nil } func notifyEmail(cfg *config.EmailConfig, server *mailDev) (*email, bool, error) { return notifyEmailWithContext(context.Background(), cfg, server) } // notifyEmailWithContext sends a notification with one firing alert and retrieves the // email from the SMTP server if the notification has been successfully delivered. func notifyEmailWithContext(ctx context.Context, cfg *config.EmailConfig, server *mailDev) (*email, bool, error) { tmpl, firingAlert, err := prepare(cfg) if err != nil { return nil, false, err } err = server.deleteAllEmails() if err != nil { return nil, false, err } email := New(cfg, tmpl, promslog.NewNopLogger()) retry, err := email.Notify(ctx, firingAlert) if err != nil { return nil, retry, err } e, err := server.getLastEmail() if err != nil { return nil, retry, err } else if e == nil { return nil, retry, fmt.Errorf("email not found") } return e, retry, nil } func prepare(cfg *config.EmailConfig) (*template.Template, *types.Alert, error) { if cfg == nil { panic("nil config passed") } if cfg.RequireTLS == nil { cfg.RequireTLS = new(bool) } if cfg.Headers == nil { cfg.Headers = make(map[string]string) } tmpl, err := template.FromGlobs([]string{}) if err != nil { return nil, nil, err } tmpl.ExternalURL, _ = url.Parse("http://am") firingAlert := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{}, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, } return tmpl, firingAlert, nil } // TestEmailNotifyWithErrors tries to send emails with buggy inputs. func TestEmailNotifyWithErrors(t *testing.T) { cfgFile := os.Getenv(emailNoAuthConfigVar) if len(cfgFile) == 0 { t.Skipf("%s not set", emailNoAuthConfigVar) } c, err := loadEmailTestConfiguration(cfgFile) if err != nil { t.Fatal(err) } for _, tc := range []struct { title string updateCfg func(*config.EmailConfig) errMsg string hasEmail bool }{ { title: "invalid 'from' template", updateCfg: func(cfg *config.EmailConfig) { cfg.From = `{{ template "invalid" }}` }, errMsg: "execute 'from' template:", }, { title: "invalid 'from' address", updateCfg: func(cfg *config.EmailConfig) { cfg.From = `xxx` }, errMsg: "parse 'from' addresses:", }, { title: "invalid 'to' template", updateCfg: func(cfg *config.EmailConfig) { cfg.To = `{{ template "invalid" }}` }, errMsg: "execute 'to' template:", }, { title: "invalid 'to' address", updateCfg: func(cfg *config.EmailConfig) { cfg.To = `xxx` }, errMsg: "parse 'to' addresses:", }, { title: "invalid 'subject' template", updateCfg: func(cfg *config.EmailConfig) { cfg.Headers["subject"] = `{{ template "invalid" }}` }, errMsg: `execute "subject" header template:`, hasEmail: true, }, { title: "invalid 'text' template", updateCfg: func(cfg *config.EmailConfig) { cfg.Text = `{{ template "invalid" }}` }, errMsg: `execute text template:`, hasEmail: true, }, { title: "invalid 'html' template", updateCfg: func(cfg *config.EmailConfig) { cfg.HTML = `{{ template "invalid" }}` }, errMsg: `execute html template:`, hasEmail: true, }, } { tc := tc t.Run(tc.title, func(t *testing.T) { if len(tc.errMsg) == 0 { t.Fatal("please define the expected error message") return } emailCfg := &config.EmailConfig{ Smarthost: c.Smarthost, To: emailTo, From: emailFrom, HTML: "HTML body", Text: "Text body", Headers: map[string]string{ "Subject": "{{ len .Alerts }} {{ .Status }} alert(s)", }, } if tc.updateCfg != nil { tc.updateCfg(emailCfg) } _, retry, err := notifyEmail(emailCfg, c.Server) require.Error(t, err) require.Contains(t, err.Error(), tc.errMsg) require.False(t, retry) e, err := c.Server.getLastEmail() require.NoError(t, err) if tc.hasEmail { require.NotNil(t, e) } else { require.Nil(t, e) } }) } } // TestEmailNotifyWithDoneContext tries to send an email with a context that is done. func TestEmailNotifyWithDoneContext(t *testing.T) { cfgFile := os.Getenv(emailNoAuthConfigVar) if len(cfgFile) == 0 { t.Skipf("%s not set", emailNoAuthConfigVar) } c, err := loadEmailTestConfiguration(cfgFile) if err != nil { t.Fatal(err) } ctx, cancel := context.WithCancel(context.Background()) cancel() _, _, err = notifyEmailWithContext( ctx, &config.EmailConfig{ Smarthost: c.Smarthost, To: emailTo, From: emailFrom, HTML: "HTML body", Text: "Text body", }, c.Server, ) require.Error(t, err) require.Contains(t, err.Error(), "establish connection to server") } // TestEmailNotifyWithoutAuthentication sends an email to an instance of // MailDev configured with no authentication then it checks that the server has // successfully processed the email. func TestEmailNotifyWithoutAuthentication(t *testing.T) { cfgFile := os.Getenv(emailNoAuthConfigVar) if len(cfgFile) == 0 { t.Skipf("%s not set", emailNoAuthConfigVar) } c, err := loadEmailTestConfiguration(cfgFile) if err != nil { t.Fatal(err) } mail, _, err := notifyEmail( &config.EmailConfig{ Smarthost: c.Smarthost, To: emailTo, From: emailFrom, HTML: "HTML body", Text: "Text body", }, c.Server, ) require.NoError(t, err) var ( foundMsgID bool headers []string ) for k := range mail.Headers { if strings.ToLower(k) == "message-id" { foundMsgID = true break } headers = append(headers, k) } require.True(t, foundMsgID, "Couldn't find 'message-id' in %v", headers) } // TestEmailNotifyWithSTARTTLS connects to the server, upgrades the connection // to TLS, sends an email then it checks that the server has successfully // processed the email. // MailDev doesn't support STARTTLS and authentication at the same time so it // is the only way to test successful STARTTLS. func TestEmailNotifyWithSTARTTLS(t *testing.T) { cfgFile := os.Getenv(emailNoAuthConfigVar) if len(cfgFile) == 0 { t.Skipf("%s not set", emailNoAuthConfigVar) } c, err := loadEmailTestConfiguration(cfgFile) if err != nil { t.Fatal(err) } trueVar := true _, _, err = notifyEmail( &config.EmailConfig{ Smarthost: c.Smarthost, To: emailTo, From: emailFrom, HTML: "HTML body", Text: "Text body", RequireTLS: &trueVar, // MailDev embeds a self-signed certificate which can't be retrieved. TLSConfig: &commoncfg.TLSConfig{InsecureSkipVerify: true}, }, c.Server, ) require.NoError(t, err) } // TestEmailNotifyWithAuthentication sends emails to an instance of MailDev // configured with authentication. func TestEmailNotifyWithAuthentication(t *testing.T) { cfgFile := os.Getenv(emailAuthConfigVar) if len(cfgFile) == 0 { t.Skipf("%s not set", emailAuthConfigVar) } c, err := loadEmailTestConfiguration(cfgFile) if err != nil { t.Fatal(err) } fileWithCorrectPassword, err := os.CreateTemp("", "smtp-password-correct") require.NoError(t, err, "creating temp file failed") _, err = fileWithCorrectPassword.WriteString(c.Password) require.NoError(t, err, "writing to temp file failed") fileWithIncorrectPassword, err := os.CreateTemp("", "smtp-password-incorrect") require.NoError(t, err, "creating temp file failed") _, err = fileWithIncorrectPassword.WriteString(c.Password + "wrong") require.NoError(t, err, "writing to temp file failed") for _, tc := range []struct { title string updateCfg func(*config.EmailConfig) errMsg string retry bool }{ { title: "email with authentication", updateCfg: func(cfg *config.EmailConfig) { cfg.AuthUsername = c.Username cfg.AuthPassword = config.Secret(c.Password) }, }, { title: "email with authentication (password from file)", updateCfg: func(cfg *config.EmailConfig) { cfg.AuthUsername = c.Username cfg.AuthPasswordFile = fileWithCorrectPassword.Name() }, }, { title: "HTML-only email", updateCfg: func(cfg *config.EmailConfig) { cfg.AuthUsername = c.Username cfg.AuthPassword = config.Secret(c.Password) cfg.Text = "" }, }, { title: "text-only email", updateCfg: func(cfg *config.EmailConfig) { cfg.AuthUsername = c.Username cfg.AuthPassword = config.Secret(c.Password) cfg.HTML = "" }, }, { title: "multiple To addresses", updateCfg: func(cfg *config.EmailConfig) { cfg.AuthUsername = c.Username cfg.AuthPassword = config.Secret(c.Password) cfg.To = strings.Join([]string{emailTo, emailFrom}, ",") }, }, { title: "no more than one From address", updateCfg: func(cfg *config.EmailConfig) { cfg.AuthUsername = c.Username cfg.AuthPassword = config.Secret(c.Password) cfg.From = strings.Join([]string{emailFrom, emailTo}, ",") }, errMsg: "must be exactly one 'from' address", retry: false, }, { title: "wrong credentials", updateCfg: func(cfg *config.EmailConfig) { cfg.AuthUsername = c.Username cfg.AuthPassword = config.Secret(c.Password + "wrong") }, errMsg: "Invalid username or password", retry: true, }, { title: "wrong credentials (password from file)", updateCfg: func(cfg *config.EmailConfig) { cfg.AuthUsername = c.Username cfg.AuthPasswordFile = fileWithIncorrectPassword.Name() }, errMsg: "Invalid username or password", retry: true, }, { title: "wrong credentials (missing password file)", updateCfg: func(cfg *config.EmailConfig) { cfg.AuthUsername = c.Username cfg.AuthPasswordFile = "/does/not/exist" }, errMsg: "could not read", retry: true, }, { title: "no credentials", errMsg: "authentication Required", retry: true, }, { title: "try to enable STARTTLS", updateCfg: func(cfg *config.EmailConfig) { cfg.RequireTLS = new(bool) *cfg.RequireTLS = true }, errMsg: "does not advertise the STARTTLS extension", retry: true, }, { title: "invalid Hello string", updateCfg: func(cfg *config.EmailConfig) { cfg.AuthUsername = c.Username cfg.AuthPassword = config.Secret(c.Password) cfg.Hello = "invalid hello string" }, errMsg: "501 Error", retry: true, }, } { tc := tc t.Run(tc.title, func(t *testing.T) { emailCfg := &config.EmailConfig{ Smarthost: c.Smarthost, To: emailTo, From: emailFrom, HTML: "HTML body", Text: "Text body", Headers: map[string]string{ "Subject": "{{ len .Alerts }} {{ .Status }} alert(s)", }, } if tc.updateCfg != nil { tc.updateCfg(emailCfg) } e, retry, err := notifyEmail(emailCfg, c.Server) if len(tc.errMsg) > 0 { require.Error(t, err) require.Contains(t, err.Error(), tc.errMsg) require.Equal(t, tc.retry, retry) return } require.NoError(t, err) require.Equal(t, "1 firing alert(s)", e.Subject) getAddresses := func(addresses []map[string]string) []string { res := make([]string, 0, len(addresses)) for _, addr := range addresses { res = append(res, addr["address"]) } return res } to := getAddresses(e.To) from := getAddresses(e.From) require.Equal(t, strings.Split(emailCfg.To, ","), to) require.Equal(t, strings.Split(emailCfg.From, ","), from) if len(emailCfg.HTML) > 0 { require.Equal(t, emailCfg.HTML, *e.HTML) } else { require.Nil(t, e.HTML) } if len(emailCfg.Text) > 0 { require.Equal(t, emailCfg.Text, *e.Text) } else { require.Nil(t, e.Text) } }) } } func TestEmailConfigNoAuthMechs(t *testing.T) { email := &Email{ conf: &config.EmailConfig{AuthUsername: "test"}, tmpl: &template.Template{}, logger: promslog.NewNopLogger(), } _, err := email.auth("") require.Error(t, err) require.Equal(t, "unknown auth mechanism: ", err.Error()) } func TestEmailConfigMissingAuthParam(t *testing.T) { conf := &config.EmailConfig{AuthUsername: "test"} email := &Email{ conf: conf, tmpl: &template.Template{}, logger: promslog.NewNopLogger(), } _, err := email.auth("CRAM-MD5") require.Error(t, err) require.Equal(t, "missing secret for CRAM-MD5 auth mechanism", err.Error()) _, err = email.auth("PLAIN") require.Error(t, err) require.Equal(t, "missing password for PLAIN auth mechanism", err.Error()) _, err = email.auth("LOGIN") require.Error(t, err) require.Equal(t, "missing password for LOGIN auth mechanism", err.Error()) _, err = email.auth("PLAIN LOGIN") require.Error(t, err) require.Equal(t, "missing password for PLAIN auth mechanism; missing password for LOGIN auth mechanism", err.Error()) } func TestEmailNoUsernameStillOk(t *testing.T) { email := &Email{ conf: &config.EmailConfig{}, tmpl: &template.Template{}, logger: promslog.NewNopLogger(), } a, err := email.auth("CRAM-MD5") require.NoError(t, err) require.Nil(t, a) } // TestEmailRejected simulates the failure of an otherwise valid message submission which fails at a later point than // was previously expected by the code. func TestEmailRejected(t *testing.T) { ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) t.Cleanup(cancel) // Setup mock SMTP server which will reject at the DATA stage. srv, l, err := mockSMTPServer(t) require.NoError(t, err) t.Cleanup(func() { // We expect that the server has already been closed in the test. require.ErrorIs(t, srv.Shutdown(ctx), smtp.ErrServerClosed) }) done := make(chan any, 1) go func() { // nolint:testifylint // require cannot be called outside the main goroutine: https://pkg.go.dev/testing#T.FailNow assert.NoError(t, srv.Serve(l)) close(done) }() // Wait for mock SMTP server to become ready. require.Eventuallyf(t, func() bool { c, err := smtp.Dial(srv.Addr) if err != nil { t.Logf("dial failed to %q: %s", srv.Addr, err) return false } // Ping. if err = c.Noop(); err != nil { t.Logf("ping failed to %q: %s", srv.Addr, err) return false } // Ensure we close the connection to not prevent server from shutting down cleanly. if err = c.Close(); err != nil { t.Logf("close failed to %q: %s", srv.Addr, err) return false } return true }, time.Second*10, time.Millisecond*100, "mock SMTP server failed to start") // Use mock SMTP server and prepare alert to be sent. require.IsType(t, &net.TCPAddr{}, l.Addr()) addr := l.Addr().(*net.TCPAddr) cfg := &config.EmailConfig{ Smarthost: config.HostPort{Host: addr.IP.String(), Port: strconv.Itoa(addr.Port)}, Hello: "localhost", Headers: make(map[string]string), From: "alertmanager@system", To: "sre@company", } tmpl, firingAlert, err := prepare(cfg) require.NoError(t, err) e := New(cfg, tmpl, promslog.NewNopLogger()) // Send the alert to mock SMTP server. retry, err := e.Notify(context.Background(), firingAlert) require.ErrorContains(t, err, "501 5.5.4 Rejected!") require.True(t, retry) require.NoError(t, srv.Shutdown(ctx)) require.Eventuallyf(t, func() bool { <-done return true }, time.Second*10, time.Millisecond*100, "mock SMTP server goroutine failed to close in time") } func mockSMTPServer(t *testing.T) (*smtp.Server, net.Listener, error) { t.Helper() // Listen on the next available high port. l, err := net.Listen("tcp", "localhost:0") if err != nil { return nil, nil, fmt.Errorf("connect: %w", err) } addr, ok := l.Addr().(*net.TCPAddr) if !ok { return nil, nil, fmt.Errorf("unexpected address type: %T", l.Addr()) } s := smtp.NewServer(&rejectingBackend{}) s.Addr = addr.String() s.WriteTimeout = 10 * time.Second s.ReadTimeout = 10 * time.Second return s, l, nil } // rejectingBackend will reject submission at the DATA stage. type rejectingBackend struct{} func (b *rejectingBackend) NewSession(c *smtp.Conn) (smtp.Session, error) { return &mockSMTPSession{ conn: c, backend: b, }, nil } type mockSMTPSession struct { conn *smtp.Conn backend smtp.Backend } func (s *mockSMTPSession) Mail(string, *smtp.MailOptions) error { return nil } func (s *mockSMTPSession) Rcpt(string, *smtp.RcptOptions) error { return nil } func (s *mockSMTPSession) Data(io.Reader) error { return &smtp.SMTPError{Code: 501, EnhancedCode: smtp.EnhancedCode{5, 5, 4}, Message: "Rejected!"} } func (*mockSMTPSession) Reset() {} func (*mockSMTPSession) Logout() error { return nil } prometheus-alertmanager-0.28.1+ds/notify/email/testdata/000077500000000000000000000000001476331240200232515ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/email/testdata/auth.yml000066400000000000000000000001271476331240200247350ustar00rootroot00000000000000smarthost: localhost:1026 server: http://localhost:1081/ username: user password: pass prometheus-alertmanager-0.28.1+ds/notify/email/testdata/noauth.yml000066400000000000000000000000711476331240200252700ustar00rootroot00000000000000smarthost: localhost:1025 server: http://localhost:1080/ prometheus-alertmanager-0.28.1+ds/notify/jira/000077500000000000000000000000001476331240200212765ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/jira/jira.go000066400000000000000000000243311476331240200225550ustar00rootroot00000000000000// Copyright 2023 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package jira import ( "bytes" "context" "encoding/json" "fmt" "io" "log/slog" "net/http" "sort" "strings" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/trivago/tgo/tcontainer" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) const ( maxSummaryLenRunes = 255 maxDescriptionLenRunes = 32767 ) // Notifier implements a Notifier for JIRA notifications. type Notifier struct { conf *config.JiraConfig tmpl *template.Template logger *slog.Logger client *http.Client retrier *notify.Retrier } func New(c *config.JiraConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "jira", httpOpts...) if err != nil { return nil, err } return &Notifier{ conf: c, tmpl: t, logger: l, client: client, retrier: ¬ify.Retrier{RetryCodes: []int{http.StatusTooManyRequests}}, }, nil } // Notify implements the Notifier interface. func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { key, err := notify.ExtractGroupKey(ctx) if err != nil { return false, err } logger := n.logger.With("group_key", key.String()) var ( alerts = types.Alerts(as...) tmplTextErr error data = notify.GetTemplateData(ctx, n.tmpl, as, logger) tmplText = notify.TmplText(n.tmpl, data, &tmplTextErr) tmplTextFunc = func(tmpl string) (string, error) { return tmplText(tmpl), tmplTextErr } path = "issue" method = http.MethodPost ) existingIssue, shouldRetry, err := n.searchExistingIssue(ctx, logger, key.Hash(), alerts.HasFiring(), tmplTextFunc) if err != nil { return shouldRetry, fmt.Errorf("failed to look up existing issues: %w", err) } if existingIssue == nil { // Do not create new issues for resolved alerts if alerts.Status() == model.AlertResolved { return false, nil } logger.Debug("create new issue") } else { path = "issue/" + existingIssue.Key method = http.MethodPut logger.Debug("updating existing issue", "issue_key", existingIssue.Key) } requestBody, err := n.prepareIssueRequestBody(ctx, logger, key.Hash(), tmplTextFunc) if err != nil { return false, err } _, shouldRetry, err = n.doAPIRequest(ctx, method, path, requestBody) if err != nil { return shouldRetry, fmt.Errorf("failed to %s request to %q: %w", method, path, err) } return n.transitionIssue(ctx, logger, existingIssue, alerts.HasFiring()) } func (n *Notifier) prepareIssueRequestBody(ctx context.Context, logger *slog.Logger, groupID string, tmplTextFunc templateFunc) (issue, error) { summary, err := tmplTextFunc(n.conf.Summary) if err != nil { return issue{}, fmt.Errorf("summary template: %w", err) } project, err := tmplTextFunc(n.conf.Project) if err != nil { return issue{}, fmt.Errorf("project template: %w", err) } issueType, err := tmplTextFunc(n.conf.IssueType) if err != nil { return issue{}, fmt.Errorf("issue_type template: %w", err) } // Recursively convert any maps to map[string]interface{}, filtering out all non-string keys, so the json encoder // doesn't blow up when marshaling JIRA requests. fieldsWithStringKeys, err := tcontainer.ConvertToMarshalMap(n.conf.Fields, func(v string) string { return v }) if err != nil { return issue{}, fmt.Errorf("convertToMarshalMap: %w", err) } summary, truncated := notify.TruncateInRunes(summary, maxSummaryLenRunes) if truncated { logger.Warn("Truncated summary", "max_runes", maxSummaryLenRunes) } requestBody := issue{Fields: &issueFields{ Project: &issueProject{Key: project}, Issuetype: &idNameValue{Name: issueType}, Summary: summary, Labels: make([]string, 0, len(n.conf.Labels)+1), Fields: fieldsWithStringKeys, }} issueDescriptionString, err := tmplTextFunc(n.conf.Description) if err != nil { return issue{}, fmt.Errorf("description template: %w", err) } issueDescriptionString, truncated = notify.TruncateInRunes(issueDescriptionString, maxDescriptionLenRunes) if truncated { logger.Warn("Truncated description", "max_runes", maxDescriptionLenRunes) } requestBody.Fields.Description = issueDescriptionString if strings.HasSuffix(n.conf.APIURL.Path, "/3") { var issueDescription any if err := json.Unmarshal([]byte(issueDescriptionString), &issueDescription); err != nil { return issue{}, fmt.Errorf("description unmarshaling: %w", err) } requestBody.Fields.Description = issueDescription } for i, label := range n.conf.Labels { label, err = tmplTextFunc(label) if err != nil { return issue{}, fmt.Errorf("labels[%d] template: %w", i, err) } requestBody.Fields.Labels = append(requestBody.Fields.Labels, label) } requestBody.Fields.Labels = append(requestBody.Fields.Labels, fmt.Sprintf("ALERT{%s}", groupID)) sort.Strings(requestBody.Fields.Labels) priority, err := tmplTextFunc(n.conf.Priority) if err != nil { return issue{}, fmt.Errorf("priority template: %w", err) } if priority != "" { requestBody.Fields.Priority = &idNameValue{Name: priority} } return requestBody, nil } func (n *Notifier) searchExistingIssue(ctx context.Context, logger *slog.Logger, groupID string, firing bool, tmplTextFunc templateFunc) (*issue, bool, error) { jql := strings.Builder{} if n.conf.WontFixResolution != "" { jql.WriteString(fmt.Sprintf(`resolution != %q and `, n.conf.WontFixResolution)) } // If the group is firing, do not search for closed issues unless a reopen transition is defined. if firing { if n.conf.ReopenTransition == "" { jql.WriteString(`statusCategory != Done and `) } } else { reopenDuration := int64(time.Duration(n.conf.ReopenDuration).Minutes()) if reopenDuration != 0 { jql.WriteString(fmt.Sprintf(`(resolutiondate is EMPTY OR resolutiondate >= -%dm) and `, reopenDuration)) } } alertLabel := fmt.Sprintf("ALERT{%s}", groupID) project, err := tmplTextFunc(n.conf.Project) if err != nil { return nil, false, fmt.Errorf("invalid project template or value: %w", err) } jql.WriteString(fmt.Sprintf(`project=%q and labels=%q order by status ASC,resolutiondate DESC`, project, alertLabel)) requestBody := issueSearch{ JQL: jql.String(), MaxResults: 2, Fields: []string{"status"}, Expand: []string{}, } logger.Debug("search for recent issues", "jql", requestBody.JQL) responseBody, shouldRetry, err := n.doAPIRequest(ctx, http.MethodPost, "search", requestBody) if err != nil { return nil, shouldRetry, fmt.Errorf("HTTP request to JIRA API: %w", err) } var issueSearchResult issueSearchResult err = json.Unmarshal(responseBody, &issueSearchResult) if err != nil { return nil, false, err } if issueSearchResult.Total == 0 { logger.Debug("found no existing issue") return nil, false, nil } if issueSearchResult.Total > 1 { logger.Warn("more than one issue matched, selecting the most recently resolved", "selected_issue", issueSearchResult.Issues[0].Key) } return &issueSearchResult.Issues[0], false, nil } func (n *Notifier) getIssueTransitionByName(ctx context.Context, issueKey, transitionName string) (string, bool, error) { path := fmt.Sprintf("issue/%s/transitions", issueKey) responseBody, shouldRetry, err := n.doAPIRequest(ctx, http.MethodGet, path, nil) if err != nil { return "", shouldRetry, err } var issueTransitions issueTransitions err = json.Unmarshal(responseBody, &issueTransitions) if err != nil { return "", false, err } for _, issueTransition := range issueTransitions.Transitions { if issueTransition.Name == transitionName { return issueTransition.ID, false, nil } } return "", false, fmt.Errorf("can't find transition %s for issue %s", transitionName, issueKey) } func (n *Notifier) transitionIssue(ctx context.Context, logger *slog.Logger, i *issue, firing bool) (bool, error) { if i == nil || i.Key == "" || i.Fields == nil || i.Fields.Status == nil { return false, nil } var transition string if firing { if i.Fields.Status.StatusCategory.Key != "done" { return false, nil } transition = n.conf.ReopenTransition } else { if i.Fields.Status.StatusCategory.Key == "done" { return false, nil } transition = n.conf.ResolveTransition } transitionID, shouldRetry, err := n.getIssueTransitionByName(ctx, i.Key, transition) if err != nil { return shouldRetry, err } requestBody := issue{ Transition: &idNameValue{ ID: transitionID, }, } path := fmt.Sprintf("issue/%s/transitions", i.Key) logger.Debug("transitions jira issue", "issue_key", i.Key, "transition", transition) _, shouldRetry, err = n.doAPIRequest(ctx, http.MethodPost, path, requestBody) return shouldRetry, err } func (n *Notifier) doAPIRequest(ctx context.Context, method, path string, requestBody any) ([]byte, bool, error) { var body io.Reader if requestBody != nil { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(requestBody); err != nil { return nil, false, err } body = &buf } url := n.conf.APIURL.JoinPath(path) req, err := http.NewRequestWithContext(ctx, method, url.String(), body) if err != nil { return nil, false, err } req.Header.Set("Content-Type", "application/json") req.Header.Set("Accept-Language", "en") resp, err := n.client.Do(req) if err != nil { return nil, false, err } defer notify.Drain(resp) responseBody, err := io.ReadAll(resp.Body) if err != nil { return nil, false, err } shouldRetry, err := n.retrier.Check(resp.StatusCode, bytes.NewReader(responseBody)) if err != nil { return nil, shouldRetry, notify.NewErrorWithReason(notify.GetFailureReasonFromStatusCode(resp.StatusCode), err) } return responseBody, false, nil } prometheus-alertmanager-0.28.1+ds/notify/jira/jira_test.go000066400000000000000000000641211476331240200236150ustar00rootroot00000000000000// Copyright 2023 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package jira import ( "context" "encoding/json" "fmt" "io" "net/http" "net/http/httptest" "net/url" "strings" "testing" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/notify/test" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) func TestJiraRetry(t *testing.T) { notifier, err := New( &config.JiraConfig{ APIURL: &config.URL{ URL: &url.URL{ Scheme: "https", Host: "example.atlassian.net", Path: "/rest/api/2", }, }, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) retryCodes := append(test.DefaultRetryCodes(), http.StatusTooManyRequests) for statusCode, expected := range test.RetryTests(retryCodes) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("retry - error on status %d", statusCode)) } } func TestSearchExistingIssue(t *testing.T) { expectedJQL := "" srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/search": body, err := io.ReadAll(r.Body) if err != nil { http.Error(w, "Error reading request body", http.StatusBadRequest) return } defer r.Body.Close() // Unmarshal the JSON data into the struct var data issueSearch err = json.Unmarshal(body, &data) if err != nil { http.Error(w, "Error unmarshaling JSON", http.StatusBadRequest) return } require.Equal(t, expectedJQL, data.JQL) w.Write([]byte(`{"total": 0, "issues": []}`)) return default: dec := json.NewDecoder(r.Body) out := make(map[string]any) err := dec.Decode(&out) if err != nil { panic(err) } } })) defer srv.Close() u, _ := url.Parse(srv.URL) for _, tc := range []struct { title string cfg *config.JiraConfig groupKey string expectedJQL string expectedIssue *issue expectedErr bool expectedRetry bool }{ { title: "search existing issue with project template", cfg: &config.JiraConfig{ Summary: `{{ template "jira.default.summary" . }}`, Description: `{{ template "jira.default.description" . }}`, Project: `{{ .CommonLabels.project }}`, }, groupKey: "1", expectedJQL: `statusCategory != Done and project="PROJ" and labels="ALERT{1}" order by status ASC,resolutiondate DESC`, }, } { tc := tc t.Run(tc.title, func(t *testing.T) { expectedJQL = tc.expectedJQL tc.cfg.APIURL = &config.URL{URL: u} tc.cfg.HTTPConfig = &commoncfg.HTTPClientConfig{} as := []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "project": "PROJ", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, } pd, err := New(tc.cfg, test.CreateTmpl(t), promslog.NewNopLogger()) require.NoError(t, err) logger := pd.logger.With("group_key", tc.groupKey) ctx := notify.WithGroupKey(context.Background(), tc.groupKey) data := notify.GetTemplateData(ctx, pd.tmpl, as, logger) var tmplTextErr error tmplText := notify.TmplText(pd.tmpl, data, &tmplTextErr) tmplTextFunc := func(tmpl string) (string, error) { return tmplText(tmpl), tmplTextErr } issue, retry, err := pd.searchExistingIssue(ctx, logger, tc.groupKey, true, tmplTextFunc) if tc.expectedErr { require.Error(t, err) } else { require.NoError(t, err) } require.EqualValues(t, tc.expectedIssue, issue) require.Equal(t, tc.expectedRetry, retry) }) } } func TestJiraTemplating(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/search": w.Write([]byte(`{"total": 0, "issues": []}`)) return default: dec := json.NewDecoder(r.Body) out := make(map[string]any) err := dec.Decode(&out) if err != nil { panic(err) } } })) defer srv.Close() u, _ := url.Parse(srv.URL) for _, tc := range []struct { title string cfg *config.JiraConfig retry bool errMsg string }{ { title: "full-blown message", cfg: &config.JiraConfig{ Summary: `{{ template "jira.default.summary" . }}`, Description: `{{ template "jira.default.description" . }}`, }, retry: false, }, { title: "template project", cfg: &config.JiraConfig{ Project: `{{ .CommonLabels.lbl1 }}`, Summary: `{{ template "jira.default.summary" . }}`, Description: `{{ template "jira.default.description" . }}`, }, retry: false, }, { title: "template issue type", cfg: &config.JiraConfig{ IssueType: `{{ .CommonLabels.lbl1 }}`, Summary: `{{ template "jira.default.summary" . }}`, Description: `{{ template "jira.default.description" . }}`, }, retry: false, }, { title: "summary with templating errors", cfg: &config.JiraConfig{ Summary: "{{ ", }, errMsg: "template: :1: unclosed action", }, { title: "description with templating errors", cfg: &config.JiraConfig{ Summary: `{{ template "jira.default.summary" . }}`, Description: "{{ ", }, errMsg: "template: :1: unclosed action", }, { title: "priority with templating errors", cfg: &config.JiraConfig{ Summary: `{{ template "jira.default.summary" . }}`, Description: `{{ template "jira.default.description" . }}`, Priority: "{{ ", }, errMsg: "template: :1: unclosed action", }, } { tc := tc t.Run(tc.title, func(t *testing.T) { tc.cfg.APIURL = &config.URL{URL: u} tc.cfg.HTTPConfig = &commoncfg.HTTPClientConfig{} pd, err := New(tc.cfg, test.CreateTmpl(t), promslog.NewNopLogger()) require.NoError(t, err) ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") ok, err := pd.Notify(ctx, []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "lbl1": "val1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }...) if tc.errMsg == "" { require.NoError(t, err) } else { require.Error(t, err) require.Contains(t, err.Error(), tc.errMsg) } require.Equal(t, tc.retry, ok) }) } } func TestJiraNotify(t *testing.T) { for _, tc := range []struct { title string cfg *config.JiraConfig alert *types.Alert customFieldAssetFn func(t *testing.T, issue map[string]any) searchResponse issueSearchResult issue issue errMsg string }{ { title: "create new issue", cfg: &config.JiraConfig{ Summary: `{{ template "jira.default.summary" . }}`, Description: `{{ template "jira.default.description" . }}`, IssueType: "Incident", Project: "OPS", Priority: `{{ template "jira.default.priority" . }}`, Labels: []string{"alertmanager", "{{ .GroupLabels.alertname }}"}, ReopenDuration: model.Duration(1 * time.Hour), ReopenTransition: "REOPEN", ResolveTransition: "CLOSE", WontFixResolution: "WONTFIX", }, alert: &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "critical", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, searchResponse: issueSearchResult{ Total: 0, Issues: []issue{}, }, issue: issue{ Key: "", Fields: &issueFields{ Summary: "[FIRING:1] test (vm1 critical)", Description: "\n\n# Alerts Firing:\n\nLabels:\n - alertname = test\n - instance = vm1\n - severity = critical\n\nAnnotations:\n\nSource: \n\n\n\n\n", Issuetype: &idNameValue{Name: "Incident"}, Labels: []string{"ALERT{6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b}", "alertmanager", "test"}, Project: &issueProject{Key: "OPS"}, Priority: &idNameValue{Name: "High"}, }, }, customFieldAssetFn: func(t *testing.T, issue map[string]any) {}, errMsg: "", }, { title: "create new issue with template project and issue type", cfg: &config.JiraConfig{ Summary: `{{ template "jira.default.summary" . }}`, Description: `{{ template "jira.default.description" . }}`, IssueType: "{{ .CommonLabels.issue_type }}", Project: "{{ .CommonLabels.project }}", Priority: `{{ template "jira.default.priority" . }}`, Labels: []string{"alertmanager", "{{ .GroupLabels.alertname }}"}, ReopenDuration: model.Duration(1 * time.Hour), ReopenTransition: "REOPEN", ResolveTransition: "CLOSE", WontFixResolution: "WONTFIX", }, alert: &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "critical", "project": "MONITORING", "issue_type": "MINOR", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, searchResponse: issueSearchResult{ Total: 0, Issues: []issue{}, }, issue: issue{ Key: "", Fields: &issueFields{ Summary: "[FIRING:1] test (vm1 MINOR MONITORING critical)", Description: "\n\n# Alerts Firing:\n\nLabels:\n - alertname = test\n - instance = vm1\n - issue_type = MINOR\n - project = MONITORING\n - severity = critical\n\nAnnotations:\n\nSource: \n\n\n\n\n", Issuetype: &idNameValue{Name: "MINOR"}, Labels: []string{"ALERT{6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b}", "alertmanager", "test"}, Project: &issueProject{Key: "MONITORING"}, Priority: &idNameValue{Name: "High"}, }, }, customFieldAssetFn: func(t *testing.T, issue map[string]any) {}, errMsg: "", }, { title: "create new issue with custom field and too long summary", cfg: &config.JiraConfig{ Summary: strings.Repeat("A", maxSummaryLenRunes+10), Description: `{{ template "jira.default.description" . }}`, IssueType: "Incident", Project: "OPS", Priority: `{{ template "jira.default.priority" . }}`, Labels: []string{"alertmanager", "{{ .GroupLabels.alertname }}"}, Fields: map[string]any{ "components": map[any]any{"name": "Monitoring"}, "customfield_10001": "value", "customfield_10002": 0, "customfield_10003": []any{0}, "customfield_10004": map[any]any{"value": "red"}, "customfield_10005": map[any]any{"value": 0}, "customfield_10006": []map[any]any{{"value": "red"}, {"value": "blue"}, {"value": "green"}}, "customfield_10007": []map[any]any{{"value": "red"}, {"value": "blue"}, {"value": 0}}, "customfield_10008": []map[any]any{{"value": 0}, {"value": 1}, {"value": 2}}, }, ReopenDuration: model.Duration(1 * time.Hour), ReopenTransition: "REOPEN", ResolveTransition: "CLOSE", WontFixResolution: "WONTFIX", }, alert: &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, searchResponse: issueSearchResult{ Total: 0, Issues: []issue{}, }, issue: issue{ Key: "", Fields: &issueFields{ Summary: strings.Repeat("A", maxSummaryLenRunes-1) + "…", Description: "\n\n# Alerts Firing:\n\nLabels:\n - alertname = test\n - instance = vm1\n\nAnnotations:\n\nSource: \n\n\n\n\n", Issuetype: &idNameValue{Name: "Incident"}, Labels: []string{"ALERT{6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b}", "alertmanager", "test"}, Project: &issueProject{Key: "OPS"}, }, }, customFieldAssetFn: func(t *testing.T, issue map[string]any) { require.Equal(t, "value", issue["customfield_10001"]) require.Equal(t, float64(0), issue["customfield_10002"]) require.Equal(t, []any{float64(0)}, issue["customfield_10003"]) require.Equal(t, map[string]any{"value": "red"}, issue["customfield_10004"]) require.Equal(t, map[string]any{"value": float64(0)}, issue["customfield_10005"]) require.Equal(t, []any{map[string]any{"value": "red"}, map[string]any{"value": "blue"}, map[string]any{"value": "green"}}, issue["customfield_10006"]) require.Equal(t, []any{map[string]any{"value": "red"}, map[string]any{"value": "blue"}, map[string]any{"value": float64(0)}}, issue["customfield_10007"]) require.Equal(t, []any{map[string]any{"value": float64(0)}, map[string]any{"value": float64(1)}, map[string]any{"value": float64(2)}}, issue["customfield_10008"]) }, errMsg: "", }, { title: "reopen issue", cfg: &config.JiraConfig{ Summary: `{{ template "jira.default.summary" . }}`, Description: `{{ template "jira.default.description" . }}`, IssueType: "Incident", Project: "OPS", Priority: `{{ template "jira.default.priority" . }}`, Labels: []string{"alertmanager", "{{ .GroupLabels.alertname }}"}, ReopenDuration: model.Duration(1 * time.Hour), ReopenTransition: "REOPEN", ResolveTransition: "CLOSE", WontFixResolution: "WONTFIX", }, alert: &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, searchResponse: issueSearchResult{ Total: 1, Issues: []issue{ { Key: "OPS-1", Fields: &issueFields{ Status: &issueStatus{ Name: "Closed", StatusCategory: struct { Key string `json:"key"` }{ Key: "done", }, }, }, }, }, }, issue: issue{ Key: "", Fields: &issueFields{ Summary: "[FIRING:1] test (vm1)", Description: "\n\n# Alerts Firing:\n\nLabels:\n - alertname = test\n - instance = vm1\n\nAnnotations:\n\nSource: \n\n\n\n\n", Issuetype: &idNameValue{Name: "Incident"}, Labels: []string{"ALERT{6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b}", "alertmanager", "test"}, Project: &issueProject{Key: "OPS"}, Priority: &idNameValue{Name: "High"}, }, }, customFieldAssetFn: func(t *testing.T, issue map[string]any) {}, errMsg: "", }, { title: "error resolve transition not found", cfg: &config.JiraConfig{ Summary: `{{ template "jira.default.summary" . }}`, Description: `{{ template "jira.default.description" . }}`, IssueType: "Incident", Project: "OPS", Priority: `{{ template "jira.default.priority" . }}`, Labels: []string{"alertmanager", "{{ .GroupLabels.alertname }}"}, ReopenDuration: model.Duration(1 * time.Hour), ReopenTransition: "REOPEN", ResolveTransition: "CLOSE", WontFixResolution: "WONTFIX", }, alert: &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", }, StartsAt: time.Now().Add(-time.Hour), EndsAt: time.Now().Add(-time.Hour), }, }, searchResponse: issueSearchResult{ Total: 1, Issues: []issue{ { Key: "OPS-3", Fields: &issueFields{ Status: &issueStatus{ Name: "Open", StatusCategory: struct { Key string `json:"key"` }{ Key: "open", }, }, }, }, }, }, issue: issue{ Key: "", Fields: &issueFields{ Summary: "[RESOLVED] test (vm1)", Description: "\n\n\n# Alerts Resolved:\n\nLabels:\n - alertname = test\n - instance = vm1\n\nAnnotations:\n\nSource: \n\n\n\n", Issuetype: &idNameValue{Name: "Incident"}, Labels: []string{"ALERT{6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b}", "alertmanager", "test"}, Project: &issueProject{Key: "OPS"}, }, }, customFieldAssetFn: func(t *testing.T, issue map[string]any) {}, errMsg: "can't find transition CLOSE for issue OPS-3", }, { title: "error reopen transition not found", cfg: &config.JiraConfig{ Summary: `{{ template "jira.default.summary" . }}`, Description: `{{ template "jira.default.description" . }}`, IssueType: "Incident", Project: "OPS", Priority: `{{ template "jira.default.priority" . }}`, Labels: []string{"alertmanager", "{{ .GroupLabels.alertname }}"}, ReopenDuration: model.Duration(1 * time.Hour), ReopenTransition: "REOPEN", ResolveTransition: "CLOSE", WontFixResolution: "WONTFIX", }, alert: &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, searchResponse: issueSearchResult{ Total: 1, Issues: []issue{ { Key: "OPS-3", Fields: &issueFields{ Status: &issueStatus{ Name: "Closed", StatusCategory: struct { Key string `json:"key"` }{ Key: "done", }, }, }, }, }, }, issue: issue{ Key: "", Fields: &issueFields{ Summary: "[FIRING:1] test (vm1)", Description: "\n\n# Alerts Firing:\n\nLabels:\n - alertname = test\n - instance = vm1\n\nAnnotations:\n\nSource: \n\n\n\n\n", Issuetype: &idNameValue{Name: "Incident"}, Labels: []string{"ALERT{6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b}", "alertmanager", "test"}, Project: &issueProject{Key: "OPS"}, }, }, customFieldAssetFn: func(t *testing.T, issue map[string]any) {}, errMsg: "can't find transition REOPEN for issue OPS-3", }, } { tc := tc t.Run(tc.title, func(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/search": enc := json.NewEncoder(w) if err := enc.Encode(tc.searchResponse); err != nil { panic(err) } return case "/issue/OPS-1/transitions": switch r.Method { case http.MethodGet: w.WriteHeader(http.StatusOK) transitions := issueTransitions{ Transitions: []idNameValue{ {ID: "12345", Name: "REOPEN"}, }, } enc := json.NewEncoder(w) if err := enc.Encode(transitions); err != nil { panic(err) } case http.MethodPost: dec := json.NewDecoder(r.Body) var out issue err := dec.Decode(&out) if err != nil { panic(err) } require.Equal(t, issue{Transition: &idNameValue{ID: "12345"}}, out) w.WriteHeader(http.StatusNoContent) default: t.Fatalf("unexpected method %s", r.Method) } return case "/issue/OPS-2/transitions": switch r.Method { case http.MethodGet: w.WriteHeader(http.StatusOK) transitions := issueTransitions{ Transitions: []idNameValue{ {ID: "54321", Name: "CLOSE"}, }, } enc := json.NewEncoder(w) if err := enc.Encode(transitions); err != nil { panic(err) } case http.MethodPost: dec := json.NewDecoder(r.Body) var out issue err := dec.Decode(&out) if err != nil { panic(err) } require.Equal(t, issue{Transition: &idNameValue{ID: "54321"}}, out) w.WriteHeader(http.StatusNoContent) default: t.Fatalf("unexpected method %s", r.Method) } return case "/issue/OPS-3/transitions": switch r.Method { case http.MethodGet: w.WriteHeader(http.StatusOK) transitions := issueTransitions{ Transitions: []idNameValue{}, } enc := json.NewEncoder(w) if err := enc.Encode(transitions); err != nil { panic(err) } default: t.Fatalf("unexpected method %s", r.Method) } return case "/issue/OPS-1": case "/issue/OPS-2": case "/issue/OPS-3": fallthrough case "/issue": body, err := io.ReadAll(r.Body) if err != nil { panic(err) } var ( issue issue raw map[string]any ) if err := json.Unmarshal(body, &issue); err != nil { panic(err) } // We don't care about the key, so copy it over. issue.Fields.Fields = tc.issue.Fields.Fields require.Equal(t, tc.issue.Key, issue.Key) require.Equal(t, tc.issue.Fields, issue.Fields) if err := json.Unmarshal(body, &raw); err != nil { panic(err) } if fields, ok := raw["fields"].(map[string]any); ok { tc.customFieldAssetFn(t, fields) } else { t.Errorf("fields should a map of string") } w.WriteHeader(http.StatusCreated) w.WriteHeader(http.StatusCreated) default: t.Fatalf("unexpected path %s", r.URL.Path) } })) defer srv.Close() u, _ := url.Parse(srv.URL) tc.cfg.APIURL = &config.URL{URL: u} tc.cfg.HTTPConfig = &commoncfg.HTTPClientConfig{} notifier, err := New(tc.cfg, test.CreateTmpl(t), promslog.NewNopLogger()) require.NoError(t, err) ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") ctx = notify.WithGroupLabels(ctx, model.LabelSet{"alertname": "test"}) _, err = notifier.Notify(ctx, tc.alert) if tc.errMsg == "" { require.NoError(t, err) } else { require.Error(t, err) require.EqualError(t, err, tc.errMsg) } }) } } func TestJiraPriority(t *testing.T) { t.Parallel() for _, tc := range []struct { title string alerts []*types.Alert expectedPriority string }{ { "empty", []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }, "", }, { "critical", []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "critical", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }, "High", }, { "warning", []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "warning", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }, "Medium", }, { "info", []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "info", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }, "Low", }, { "critical+warning+info", []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "critical", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, { Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "warning", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, { Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "info", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }, "High", }, { "warning+info", []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "warning", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, { Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "info", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }, "Medium", }, { "critical(resolved)+warning+info", []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "critical", }, StartsAt: time.Now().Add(-time.Hour), EndsAt: time.Now().Add(-time.Hour), }, }, { Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "warning", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, { Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "test", "instance": "vm1", "severity": "info", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }, "Medium", }, } { tc := tc t.Run(tc.title, func(t *testing.T) { t.Parallel() u, err := url.Parse("http://example.com/") require.NoError(t, err) tmpl, err := template.FromGlobs([]string{}) require.NoError(t, err) tmpl.ExternalURL = u var ( data = tmpl.Data("jira", model.LabelSet{}, tc.alerts...) tmplTextErr error tmplText = notify.TmplText(tmpl, data, &tmplTextErr) tmplTextFunc = func(tmpl string) (string, error) { result := tmplText(tmpl) return result, tmplTextErr } ) priority, err := tmplTextFunc(`{{ template "jira.default.priority" . }}`) require.NoError(t, err) require.Equal(t, tc.expectedPriority, priority) }) } } prometheus-alertmanager-0.28.1+ds/notify/jira/types.go000066400000000000000000000053141476331240200227740ustar00rootroot00000000000000// Copyright 2023 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package jira import ( "encoding/json" ) type templateFunc func(string) (string, error) type issue struct { Key string `json:"key,omitempty"` Fields *issueFields `json:"fields,omitempty"` Transition *idNameValue `json:"transition,omitempty"` } type issueFields struct { Description any `json:"description"` Issuetype *idNameValue `json:"issuetype,omitempty"` Labels []string `json:"labels,omitempty"` Priority *idNameValue `json:"priority,omitempty"` Project *issueProject `json:"project,omitempty"` Resolution *idNameValue `json:"resolution,omitempty"` Summary string `json:"summary"` Status *issueStatus `json:"status,omitempty"` Fields map[string]any `json:"-"` } type idNameValue struct { ID string `json:"id,omitempty"` Name string `json:"name,omitempty"` } type issueProject struct { Key string `json:"key"` } type issueStatus struct { Name string `json:"name"` StatusCategory struct { Key string `json:"key"` } `json:"statusCategory"` } type issueSearch struct { Expand []string `json:"expand"` Fields []string `json:"fields"` JQL string `json:"jql"` MaxResults int `json:"maxResults"` StartAt int `json:"startAt"` } type issueSearchResult struct { Total int `json:"total"` Issues []issue `json:"issues"` } type issueTransitions struct { Transitions []idNameValue `json:"transitions"` } // MarshalJSON merges the struct issueFields and issueFields.CustomField together. func (i issueFields) MarshalJSON() ([]byte, error) { jsonFields := map[string]interface{}{ "description": i.Description, "summary": i.Summary, } if i.Issuetype != nil { jsonFields["issuetype"] = i.Issuetype } if i.Labels != nil { jsonFields["labels"] = i.Labels } if i.Priority != nil { jsonFields["priority"] = i.Priority } if i.Project != nil { jsonFields["project"] = i.Project } if i.Resolution != nil { jsonFields["resolution"] = i.Resolution } if i.Status != nil { jsonFields["status"] = i.Status } for key, field := range i.Fields { jsonFields[key] = field } return json.Marshal(jsonFields) } prometheus-alertmanager-0.28.1+ds/notify/msteams/000077500000000000000000000000001476331240200220225ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/msteams/msteams.go000066400000000000000000000100361476331240200240220ustar00rootroot00000000000000// Copyright 2023 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package msteams import ( "bytes" "context" "encoding/json" "fmt" "io" "log/slog" "net/http" "os" "strings" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) const ( colorRed = "8C1A1A" colorGreen = "2DC72D" colorGrey = "808080" ) type Notifier struct { conf *config.MSTeamsConfig tmpl *template.Template logger *slog.Logger client *http.Client retrier *notify.Retrier webhookURL *config.SecretURL postJSONFunc func(ctx context.Context, client *http.Client, url string, body io.Reader) (*http.Response, error) } // Message card reference can be found at https://learn.microsoft.com/en-us/outlook/actionable-messages/message-card-reference. type teamsMessage struct { Context string `json:"@context"` Type string `json:"type"` Title string `json:"title"` Summary string `json:"summary"` Text string `json:"text"` ThemeColor string `json:"themeColor"` } // New returns a new notifier that uses the Microsoft Teams Webhook API. func New(c *config.MSTeamsConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "msteams", httpOpts...) if err != nil { return nil, err } n := &Notifier{ conf: c, tmpl: t, logger: l, client: client, retrier: ¬ify.Retrier{}, webhookURL: c.WebhookURL, postJSONFunc: notify.PostJSON, } return n, nil } func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { key, err := notify.ExtractGroupKey(ctx) if err != nil { return false, err } n.logger.Debug("extracted group key", "key", key) data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger) tmpl := notify.TmplText(n.tmpl, data, &err) if err != nil { return false, err } title := tmpl(n.conf.Title) if err != nil { return false, err } text := tmpl(n.conf.Text) if err != nil { return false, err } summary := tmpl(n.conf.Summary) if err != nil { return false, err } alerts := types.Alerts(as...) color := colorGrey switch alerts.Status() { case model.AlertFiring: color = colorRed case model.AlertResolved: color = colorGreen } var url string if n.conf.WebhookURL != nil { url = n.conf.WebhookURL.String() } else { content, err := os.ReadFile(n.conf.WebhookURLFile) if err != nil { return false, fmt.Errorf("read webhook_url_file: %w", err) } url = strings.TrimSpace(string(content)) } t := teamsMessage{ Context: "http://schema.org/extensions", Type: "MessageCard", Title: title, Summary: summary, Text: text, ThemeColor: color, } var payload bytes.Buffer if err = json.NewEncoder(&payload).Encode(t); err != nil { return false, err } resp, err := n.postJSONFunc(ctx, n.client, url, &payload) if err != nil { return true, notify.RedactURL(err) } defer notify.Drain(resp) // https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using?tabs=cURL#rate-limiting-for-connectors shouldRetry, err := n.retrier.Check(resp.StatusCode, resp.Body) if err != nil { return shouldRetry, notify.NewErrorWithReason(notify.GetFailureReasonFromStatusCode(resp.StatusCode), err) } return shouldRetry, err } prometheus-alertmanager-0.28.1+ds/notify/msteams/msteams_test.go000066400000000000000000000141301476331240200250600ustar00rootroot00000000000000// Copyright 2023 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package msteams import ( "context" "encoding/json" "fmt" "io" "net/http" "net/http/httptest" "net/url" "os" "testing" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/notify/test" "github.com/prometheus/alertmanager/types" ) // This is a test URL that has been modified to not be valid. var testWebhookURL, _ = url.Parse("https://example.webhook.office.com/webhookb2/xxxxxx/IncomingWebhook/xxx/xxx") func TestMSTeamsRetry(t *testing.T) { notifier, err := New( &config.MSTeamsConfig{ WebhookURL: &config.SecretURL{URL: testWebhookURL}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) for statusCode, expected := range test.RetryTests(test.DefaultRetryCodes()) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("retry - error on status %d", statusCode)) } } func TestMSTeamsTemplating(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { dec := json.NewDecoder(r.Body) out := make(map[string]interface{}) err := dec.Decode(&out) if err != nil { panic(err) } })) defer srv.Close() u, _ := url.Parse(srv.URL) for _, tc := range []struct { title string cfg *config.MSTeamsConfig retry bool errMsg string }{ { title: "full-blown message", cfg: &config.MSTeamsConfig{ Title: `{{ template "msteams.default.title" . }}`, Summary: `{{ template "msteams.default.summary" . }}`, Text: `{{ template "msteams.default.text" . }}`, }, retry: false, }, { title: "title with templating errors", cfg: &config.MSTeamsConfig{ Title: "{{ ", }, errMsg: "template: :1: unclosed action", }, { title: "summary with templating errors", cfg: &config.MSTeamsConfig{ Title: `{{ template "msteams.default.title" . }}`, Summary: "{{ ", }, errMsg: "template: :1: unclosed action", }, { title: "message with templating errors", cfg: &config.MSTeamsConfig{ Title: `{{ template "msteams.default.title" . }}`, Summary: `{{ template "msteams.default.summary" . }}`, Text: "{{ ", }, errMsg: "template: :1: unclosed action", }, } { t.Run(tc.title, func(t *testing.T) { tc.cfg.WebhookURL = &config.SecretURL{URL: u} tc.cfg.HTTPConfig = &commoncfg.HTTPClientConfig{} pd, err := New(tc.cfg, test.CreateTmpl(t), promslog.NewNopLogger()) require.NoError(t, err) ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") ok, err := pd.Notify(ctx, []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "lbl1": "val1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }...) if tc.errMsg == "" { require.NoError(t, err) } else { require.Error(t, err) require.Contains(t, err.Error(), tc.errMsg) } require.Equal(t, tc.retry, ok) }) } } func TestNotifier_Notify_WithReason(t *testing.T) { tests := []struct { name string statusCode int responseContent string expectedReason notify.Reason noError bool }{ { name: "with a 2xx status code and response 1", statusCode: http.StatusOK, responseContent: "1", noError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { notifier, err := New( &config.MSTeamsConfig{ WebhookURL: &config.SecretURL{URL: testWebhookURL}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) notifier.postJSONFunc = func(ctx context.Context, client *http.Client, url string, body io.Reader) (*http.Response, error) { resp := httptest.NewRecorder() resp.WriteString(tt.responseContent) resp.WriteHeader(tt.statusCode) return resp.Result(), nil } ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") alert1 := &types.Alert{ Alert: model.Alert{ StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, } _, err = notifier.Notify(ctx, alert1) if tt.noError { require.NoError(t, err) } else { var reasonError *notify.ErrorWithReason require.ErrorAs(t, err, &reasonError) require.Equal(t, tt.expectedReason, reasonError.Reason) } }) } } func TestMSTeamsRedactedURL(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() secret := "secret" notifier, err := New( &config.MSTeamsConfig{ WebhookURL: &config.SecretURL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, secret) } func TestMSTeamsReadingURLFromFile(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() f, err := os.CreateTemp("", "webhook_url") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString(u.String() + "\n") require.NoError(t, err, "writing to temp file failed") notifier, err := New( &config.MSTeamsConfig{ WebhookURLFile: f.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, u.String()) } prometheus-alertmanager-0.28.1+ds/notify/msteamsv2/000077500000000000000000000000001476331240200222725ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/msteamsv2/msteamsv2.go000066400000000000000000000121631476331240200245450ustar00rootroot00000000000000// Copyright 2024 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package msteamsv2 import ( "bytes" "context" "encoding/json" "fmt" "io" "log/slog" "net/http" "os" "strings" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) const ( colorRed = "Attention" colorGreen = "Good" colorGrey = "Warning" ) type Notifier struct { conf *config.MSTeamsV2Config tmpl *template.Template logger *slog.Logger client *http.Client retrier *notify.Retrier webhookURL *config.SecretURL postJSONFunc func(ctx context.Context, client *http.Client, url string, body io.Reader) (*http.Response, error) } // https://learn.microsoft.com/en-us/connectors/teams/?tabs=text1#adaptivecarditemschema type Content struct { Schema string `json:"$schema"` Type string `json:"type"` Version string `json:"version"` Body []Body `json:"body"` Msteams Msteams `json:"msteams,omitempty"` } type Body struct { Type string `json:"type"` Text string `json:"text"` Weight string `json:"weight,omitempty"` Size string `json:"size,omitempty"` Wrap bool `json:"wrap,omitempty"` Style string `json:"style,omitempty"` Color string `json:"color,omitempty"` } type Msteams struct { Width string `json:"width"` } type Attachment struct { ContentType string `json:"contentType"` ContentURL *string `json:"contentUrl"` // Use a pointer to handle null values Content Content `json:"content"` } type teamsMessage struct { Type string `json:"type"` Attachments []Attachment `json:"attachments"` } // New returns a new notifier that uses the Microsoft Teams Power Platform connector. func New(c *config.MSTeamsV2Config, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "msteamsv2", httpOpts...) if err != nil { return nil, err } n := &Notifier{ conf: c, tmpl: t, logger: l, client: client, retrier: ¬ify.Retrier{}, webhookURL: c.WebhookURL, postJSONFunc: notify.PostJSON, } return n, nil } func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { key, err := notify.ExtractGroupKey(ctx) if err != nil { return false, err } n.logger.Debug("extracted group key", "key", key) data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger) tmpl := notify.TmplText(n.tmpl, data, &err) if err != nil { return false, err } title := tmpl(n.conf.Title) if err != nil { return false, err } text := tmpl(n.conf.Text) if err != nil { return false, err } alerts := types.Alerts(as...) color := colorGrey switch alerts.Status() { case model.AlertFiring: color = colorRed case model.AlertResolved: color = colorGreen } var url string if n.conf.WebhookURL != nil { url = n.conf.WebhookURL.String() } else { content, err := os.ReadFile(n.conf.WebhookURLFile) if err != nil { return false, fmt.Errorf("read webhook_url_file: %w", err) } url = strings.TrimSpace(string(content)) } // A message as referenced in https://learn.microsoft.com/en-us/connectors/teams/?tabs=text1%2Cdotnet#request-body-schema t := teamsMessage{ Type: "message", Attachments: []Attachment{ { ContentType: "application/vnd.microsoft.card.adaptive", ContentURL: nil, Content: Content{ Schema: "http://adaptivecards.io/schemas/adaptive-card.json", Type: "AdaptiveCard", Version: "1.2", Body: []Body{ { Type: "TextBlock", Text: title, Weight: "Bolder", Size: "Medium", Wrap: true, Style: "heading", Color: color, }, { Type: "TextBlock", Text: text, Wrap: true, }, }, Msteams: Msteams{ Width: "full", }, }, }, }, } var payload bytes.Buffer if err = json.NewEncoder(&payload).Encode(t); err != nil { return false, err } resp, err := n.postJSONFunc(ctx, n.client, url, &payload) if err != nil { return true, notify.RedactURL(err) } defer notify.Drain(resp) // https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using?tabs=cURL#rate-limiting-for-connectors shouldRetry, err := n.retrier.Check(resp.StatusCode, resp.Body) if err != nil { return shouldRetry, notify.NewErrorWithReason(notify.GetFailureReasonFromStatusCode(resp.StatusCode), err) } return shouldRetry, err } prometheus-alertmanager-0.28.1+ds/notify/msteamsv2/msteamsv2_test.go000066400000000000000000000135631476331240200256110ustar00rootroot00000000000000// Copyright 2024 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package msteamsv2 import ( "context" "encoding/json" "fmt" "io" "net/http" "net/http/httptest" "net/url" "os" "testing" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/notify/test" "github.com/prometheus/alertmanager/types" ) // This is a test URL that has been modified to not be valid. var testWebhookURL, _ = url.Parse("https://example.westeurope.logic.azure.com:443/workflows/xxx/triggers/manual/paths/invoke?api-version=2016-06-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=xxx") func TestMSTeamsV2Retry(t *testing.T) { notifier, err := New( &config.MSTeamsV2Config{ WebhookURL: &config.SecretURL{URL: testWebhookURL}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) for statusCode, expected := range test.RetryTests(test.DefaultRetryCodes()) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("retry - error on status %d", statusCode)) } } func TestNotifier_Notify_WithReason(t *testing.T) { tests := []struct { name string statusCode int responseContent string expectedReason notify.Reason noError bool }{ { name: "with a 2xx status code and response 1", statusCode: http.StatusOK, responseContent: "1", noError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { notifier, err := New( &config.MSTeamsV2Config{ WebhookURL: &config.SecretURL{URL: testWebhookURL}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) notifier.postJSONFunc = func(ctx context.Context, client *http.Client, url string, body io.Reader) (*http.Response, error) { resp := httptest.NewRecorder() resp.WriteString(tt.responseContent) resp.WriteHeader(tt.statusCode) return resp.Result(), nil } ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") alert1 := &types.Alert{ Alert: model.Alert{ StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, } _, err = notifier.Notify(ctx, alert1) if tt.noError { require.NoError(t, err) } else { var reasonError *notify.ErrorWithReason require.ErrorAs(t, err, &reasonError) require.Equal(t, tt.expectedReason, reasonError.Reason) } }) } } func TestMSTeamsV2Templating(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { dec := json.NewDecoder(r.Body) out := make(map[string]interface{}) err := dec.Decode(&out) if err != nil { panic(err) } })) defer srv.Close() u, _ := url.Parse(srv.URL) for _, tc := range []struct { title string cfg *config.MSTeamsV2Config retry bool errMsg string }{ { title: "full-blown message", cfg: &config.MSTeamsV2Config{ Title: `{{ template "msteams.default.title" . }}`, Text: `{{ template "msteams.default.text" . }}`, }, retry: false, }, { title: "title with templating errors", cfg: &config.MSTeamsV2Config{ Title: "{{ ", }, errMsg: "template: :1: unclosed action", }, { title: "message with templating errors", cfg: &config.MSTeamsV2Config{ Title: `{{ template "msteams.default.title" . }}`, Text: "{{ ", }, errMsg: "template: :1: unclosed action", }, } { t.Run(tc.title, func(t *testing.T) { tc.cfg.WebhookURL = &config.SecretURL{URL: u} tc.cfg.HTTPConfig = &commoncfg.HTTPClientConfig{} pd, err := New(tc.cfg, test.CreateTmpl(t), promslog.NewNopLogger()) require.NoError(t, err) ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") ok, err := pd.Notify(ctx, []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "lbl1": "val1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }...) if tc.errMsg == "" { require.NoError(t, err) } else { require.Error(t, err) require.Contains(t, err.Error(), tc.errMsg) } require.Equal(t, tc.retry, ok) }) } } func TestMSTeamsV2RedactedURL(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() secret := "secret" notifier, err := New( &config.MSTeamsV2Config{ WebhookURL: &config.SecretURL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, secret) } func TestMSTeamsV2ReadingURLFromFile(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() f, err := os.CreateTemp("", "webhook_url") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString(u.String() + "\n") require.NoError(t, err, "writing to temp file failed") notifier, err := New( &config.MSTeamsV2Config{ WebhookURLFile: f.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, u.String()) } prometheus-alertmanager-0.28.1+ds/notify/notify.go000066400000000000000000000756201476331240200222220ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package notify import ( "context" "errors" "fmt" "log/slog" "sort" "sync" "time" "github.com/cenkalti/backoff/v4" "github.com/cespare/xxhash/v2" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/featurecontrol" "github.com/prometheus/alertmanager/inhibit" "github.com/prometheus/alertmanager/nflog" "github.com/prometheus/alertmanager/nflog/nflogpb" "github.com/prometheus/alertmanager/silence" "github.com/prometheus/alertmanager/timeinterval" "github.com/prometheus/alertmanager/types" ) // ResolvedSender returns true if resolved notifications should be sent. type ResolvedSender interface { SendResolved() bool } // Peer represents the cluster node from where we are the sending the notification. type Peer interface { // WaitReady waits until the node silences and notifications have settled before attempting to send a notification. WaitReady(context.Context) error } // MinTimeout is the minimum timeout that is set for the context of a call // to a notification pipeline. const MinTimeout = 10 * time.Second // Notifier notifies about alerts under constraints of the given context. It // returns an error if unsuccessful and a flag whether the error is // recoverable. This information is useful for a retry logic. type Notifier interface { Notify(context.Context, ...*types.Alert) (bool, error) } // Integration wraps a notifier and its configuration to be uniquely identified // by name and index from its origin in the configuration. type Integration struct { notifier Notifier rs ResolvedSender name string idx int receiverName string } // NewIntegration returns a new integration. func NewIntegration(notifier Notifier, rs ResolvedSender, name string, idx int, receiverName string) Integration { return Integration{ notifier: notifier, rs: rs, name: name, idx: idx, receiverName: receiverName, } } // Notify implements the Notifier interface. func (i *Integration) Notify(ctx context.Context, alerts ...*types.Alert) (bool, error) { return i.notifier.Notify(ctx, alerts...) } // SendResolved implements the ResolvedSender interface. func (i *Integration) SendResolved() bool { return i.rs.SendResolved() } // Name returns the name of the integration. func (i *Integration) Name() string { return i.name } // Index returns the index of the integration. func (i *Integration) Index() int { return i.idx } // String implements the Stringer interface. func (i *Integration) String() string { return fmt.Sprintf("%s[%d]", i.name, i.idx) } // notifyKey defines a custom type with which a context is populated to // avoid accidental collisions. type notifyKey int const ( keyReceiverName notifyKey = iota keyRepeatInterval keyGroupLabels keyGroupKey keyFiringAlerts keyResolvedAlerts keyNow keyMuteTimeIntervals keyActiveTimeIntervals keyRouteID ) // WithReceiverName populates a context with a receiver name. func WithReceiverName(ctx context.Context, rcv string) context.Context { return context.WithValue(ctx, keyReceiverName, rcv) } // WithGroupKey populates a context with a group key. func WithGroupKey(ctx context.Context, s string) context.Context { return context.WithValue(ctx, keyGroupKey, s) } // WithFiringAlerts populates a context with a slice of firing alerts. func WithFiringAlerts(ctx context.Context, alerts []uint64) context.Context { return context.WithValue(ctx, keyFiringAlerts, alerts) } // WithResolvedAlerts populates a context with a slice of resolved alerts. func WithResolvedAlerts(ctx context.Context, alerts []uint64) context.Context { return context.WithValue(ctx, keyResolvedAlerts, alerts) } // WithGroupLabels populates a context with grouping labels. func WithGroupLabels(ctx context.Context, lset model.LabelSet) context.Context { return context.WithValue(ctx, keyGroupLabels, lset) } // WithNow populates a context with a now timestamp. func WithNow(ctx context.Context, t time.Time) context.Context { return context.WithValue(ctx, keyNow, t) } // WithRepeatInterval populates a context with a repeat interval. func WithRepeatInterval(ctx context.Context, t time.Duration) context.Context { return context.WithValue(ctx, keyRepeatInterval, t) } // WithMuteTimeIntervals populates a context with a slice of mute time names. func WithMuteTimeIntervals(ctx context.Context, mt []string) context.Context { return context.WithValue(ctx, keyMuteTimeIntervals, mt) } func WithActiveTimeIntervals(ctx context.Context, at []string) context.Context { return context.WithValue(ctx, keyActiveTimeIntervals, at) } func WithRouteID(ctx context.Context, routeID string) context.Context { return context.WithValue(ctx, keyRouteID, routeID) } // RepeatInterval extracts a repeat interval from the context. Iff none exists, the // second argument is false. func RepeatInterval(ctx context.Context) (time.Duration, bool) { v, ok := ctx.Value(keyRepeatInterval).(time.Duration) return v, ok } // ReceiverName extracts a receiver name from the context. Iff none exists, the // second argument is false. func ReceiverName(ctx context.Context) (string, bool) { v, ok := ctx.Value(keyReceiverName).(string) return v, ok } // GroupKey extracts a group key from the context. Iff none exists, the // second argument is false. func GroupKey(ctx context.Context) (string, bool) { v, ok := ctx.Value(keyGroupKey).(string) return v, ok } // GroupLabels extracts grouping label set from the context. Iff none exists, the // second argument is false. func GroupLabels(ctx context.Context) (model.LabelSet, bool) { v, ok := ctx.Value(keyGroupLabels).(model.LabelSet) return v, ok } // Now extracts a now timestamp from the context. Iff none exists, the // second argument is false. func Now(ctx context.Context) (time.Time, bool) { v, ok := ctx.Value(keyNow).(time.Time) return v, ok } // FiringAlerts extracts a slice of firing alerts from the context. // Iff none exists, the second argument is false. func FiringAlerts(ctx context.Context) ([]uint64, bool) { v, ok := ctx.Value(keyFiringAlerts).([]uint64) return v, ok } // ResolvedAlerts extracts a slice of firing alerts from the context. // Iff none exists, the second argument is false. func ResolvedAlerts(ctx context.Context) ([]uint64, bool) { v, ok := ctx.Value(keyResolvedAlerts).([]uint64) return v, ok } // MuteTimeIntervalNames extracts a slice of mute time names from the context. If and only if none exists, the // second argument is false. func MuteTimeIntervalNames(ctx context.Context) ([]string, bool) { v, ok := ctx.Value(keyMuteTimeIntervals).([]string) return v, ok } // ActiveTimeIntervalNames extracts a slice of active time names from the context. If none exists, the // second argument is false. func ActiveTimeIntervalNames(ctx context.Context) ([]string, bool) { v, ok := ctx.Value(keyActiveTimeIntervals).([]string) return v, ok } // RouteID extracts a RouteID from the context. Iff none exists, the // // second argument is false. func RouteID(ctx context.Context) (string, bool) { v, ok := ctx.Value(keyRouteID).(string) return v, ok } // A Stage processes alerts under the constraints of the given context. type Stage interface { Exec(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) } // StageFunc wraps a function to represent a Stage. type StageFunc func(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) // Exec implements Stage interface. func (f StageFunc) Exec(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { return f(ctx, l, alerts...) } type NotificationLog interface { Log(r *nflogpb.Receiver, gkey string, firingAlerts, resolvedAlerts []uint64, expiry time.Duration) error Query(params ...nflog.QueryParam) ([]*nflogpb.Entry, error) } type Metrics struct { numNotifications *prometheus.CounterVec numTotalFailedNotifications *prometheus.CounterVec numNotificationRequestsTotal *prometheus.CounterVec numNotificationRequestsFailedTotal *prometheus.CounterVec numNotificationSuppressedTotal *prometheus.CounterVec notificationLatencySeconds *prometheus.HistogramVec ff featurecontrol.Flagger } func NewMetrics(r prometheus.Registerer, ff featurecontrol.Flagger) *Metrics { labels := []string{"integration"} if ff.EnableReceiverNamesInMetrics() { labels = append(labels, "receiver_name") } m := &Metrics{ numNotifications: prometheus.NewCounterVec(prometheus.CounterOpts{ Namespace: "alertmanager", Name: "notifications_total", Help: "The total number of attempted notifications.", }, labels), numTotalFailedNotifications: prometheus.NewCounterVec(prometheus.CounterOpts{ Namespace: "alertmanager", Name: "notifications_failed_total", Help: "The total number of failed notifications.", }, append(labels, "reason")), numNotificationRequestsTotal: prometheus.NewCounterVec(prometheus.CounterOpts{ Namespace: "alertmanager", Name: "notification_requests_total", Help: "The total number of attempted notification requests.", }, labels), numNotificationRequestsFailedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{ Namespace: "alertmanager", Name: "notification_requests_failed_total", Help: "The total number of failed notification requests.", }, labels), numNotificationSuppressedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{ Namespace: "alertmanager", Name: "notifications_suppressed_total", Help: "The total number of notifications suppressed for being silenced, inhibited, outside of active time intervals or within muted time intervals.", }, []string{"reason"}), notificationLatencySeconds: prometheus.NewHistogramVec(prometheus.HistogramOpts{ Namespace: "alertmanager", Name: "notification_latency_seconds", Help: "The latency of notifications in seconds.", Buckets: []float64{1, 5, 10, 15, 20}, NativeHistogramBucketFactor: 1.1, NativeHistogramMaxBucketNumber: 100, NativeHistogramMinResetDuration: 1 * time.Hour, }, labels), ff: ff, } r.MustRegister( m.numNotifications, m.numTotalFailedNotifications, m.numNotificationRequestsTotal, m.numNotificationRequestsFailedTotal, m.numNotificationSuppressedTotal, m.notificationLatencySeconds, ) return m } func (m *Metrics) InitializeFor(receiver map[string][]Integration) { if m.ff.EnableReceiverNamesInMetrics() { // Reset the vectors to take into account receiver names changing after hot reloads. m.numNotifications.Reset() m.numNotificationRequestsTotal.Reset() m.numNotificationRequestsFailedTotal.Reset() m.notificationLatencySeconds.Reset() m.numTotalFailedNotifications.Reset() for name, integrations := range receiver { for _, integration := range integrations { m.numNotifications.WithLabelValues(integration.Name(), name) m.numNotificationRequestsTotal.WithLabelValues(integration.Name(), name) m.numNotificationRequestsFailedTotal.WithLabelValues(integration.Name(), name) m.notificationLatencySeconds.WithLabelValues(integration.Name(), name) for _, reason := range possibleFailureReasonCategory { m.numTotalFailedNotifications.WithLabelValues(integration.Name(), name, reason) } } } return } // When the feature flag is not enabled, we just carry on registering _all_ the integrations. for _, integration := range []string{ "email", "pagerduty", "wechat", "pushover", "slack", "opsgenie", "webhook", "victorops", "sns", "telegram", "discord", "webex", "msteams", "msteamsv2", "jira", "rocketchat", } { m.numNotifications.WithLabelValues(integration) m.numNotificationRequestsTotal.WithLabelValues(integration) m.numNotificationRequestsFailedTotal.WithLabelValues(integration) m.notificationLatencySeconds.WithLabelValues(integration) for _, reason := range possibleFailureReasonCategory { m.numTotalFailedNotifications.WithLabelValues(integration, reason) } } } type PipelineBuilder struct { metrics *Metrics ff featurecontrol.Flagger } func NewPipelineBuilder(r prometheus.Registerer, ff featurecontrol.Flagger) *PipelineBuilder { return &PipelineBuilder{ metrics: NewMetrics(r, ff), ff: ff, } } // New returns a map of receivers to Stages. func (pb *PipelineBuilder) New( receivers map[string][]Integration, wait func() time.Duration, inhibitor *inhibit.Inhibitor, silencer *silence.Silencer, intervener *timeinterval.Intervener, marker types.GroupMarker, notificationLog NotificationLog, peer Peer, ) RoutingStage { rs := make(RoutingStage, len(receivers)) ms := NewGossipSettleStage(peer) is := NewMuteStage(inhibitor, pb.metrics) tas := NewTimeActiveStage(intervener, marker, pb.metrics) tms := NewTimeMuteStage(intervener, marker, pb.metrics) ss := NewMuteStage(silencer, pb.metrics) for name := range receivers { st := createReceiverStage(name, receivers[name], wait, notificationLog, pb.metrics) rs[name] = MultiStage{ms, is, tas, tms, ss, st} } pb.metrics.InitializeFor(receivers) return rs } // createReceiverStage creates a pipeline of stages for a receiver. func createReceiverStage( name string, integrations []Integration, wait func() time.Duration, notificationLog NotificationLog, metrics *Metrics, ) Stage { var fs FanoutStage for i := range integrations { recv := &nflogpb.Receiver{ GroupName: name, Integration: integrations[i].Name(), Idx: uint32(integrations[i].Index()), } var s MultiStage s = append(s, NewWaitStage(wait)) s = append(s, NewDedupStage(&integrations[i], notificationLog, recv)) s = append(s, NewRetryStage(integrations[i], name, metrics)) s = append(s, NewSetNotifiesStage(notificationLog, recv)) fs = append(fs, s) } return fs } // RoutingStage executes the inner stages based on the receiver specified in // the context. type RoutingStage map[string]Stage // Exec implements the Stage interface. func (rs RoutingStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { receiver, ok := ReceiverName(ctx) if !ok { return ctx, nil, errors.New("receiver missing") } s, ok := rs[receiver] if !ok { return ctx, nil, errors.New("stage for receiver missing") } return s.Exec(ctx, l, alerts...) } // A MultiStage executes a series of stages sequentially. type MultiStage []Stage // Exec implements the Stage interface. func (ms MultiStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { var err error for _, s := range ms { if len(alerts) == 0 { return ctx, nil, nil } ctx, alerts, err = s.Exec(ctx, l, alerts...) if err != nil { return ctx, nil, err } } return ctx, alerts, nil } // FanoutStage executes its stages concurrently. type FanoutStage []Stage // Exec attempts to execute all stages concurrently and discards the results. // It returns its input alerts and a types.MultiError if one or more stages fail. func (fs FanoutStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { var ( wg sync.WaitGroup me types.MultiError ) wg.Add(len(fs)) for _, s := range fs { go func(s Stage) { if _, _, err := s.Exec(ctx, l, alerts...); err != nil { me.Add(err) } wg.Done() }(s) } wg.Wait() if me.Len() > 0 { return ctx, alerts, &me } return ctx, alerts, nil } // GossipSettleStage waits until the Gossip has settled to forward alerts. type GossipSettleStage struct { peer Peer } // NewGossipSettleStage returns a new GossipSettleStage. func NewGossipSettleStage(p Peer) *GossipSettleStage { return &GossipSettleStage{peer: p} } func (n *GossipSettleStage) Exec(ctx context.Context, _ *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { if n.peer != nil { if err := n.peer.WaitReady(ctx); err != nil { return ctx, nil, err } } return ctx, alerts, nil } const ( SuppressedReasonSilence = "silence" SuppressedReasonInhibition = "inhibition" SuppressedReasonMuteTimeInterval = "mute_time_interval" SuppressedReasonActiveTimeInterval = "active_time_interval" ) // MuteStage filters alerts through a Muter. type MuteStage struct { muter types.Muter metrics *Metrics } // NewMuteStage return a new MuteStage. func NewMuteStage(m types.Muter, metrics *Metrics) *MuteStage { return &MuteStage{muter: m, metrics: metrics} } // Exec implements the Stage interface. func (n *MuteStage) Exec(ctx context.Context, logger *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { var ( filtered []*types.Alert muted []*types.Alert ) for _, a := range alerts { // TODO(fabxc): increment total alerts counter. // Do not send the alert if muted. if n.muter.Mutes(a.Labels) { muted = append(muted, a) } else { filtered = append(filtered, a) } // TODO(fabxc): increment muted alerts counter if muted. } if len(muted) > 0 { var reason string switch n.muter.(type) { case *silence.Silencer: reason = SuppressedReasonSilence case *inhibit.Inhibitor: reason = SuppressedReasonInhibition default: } n.metrics.numNotificationSuppressedTotal.WithLabelValues(reason).Add(float64(len(muted))) logger.Debug("Notifications will not be sent for muted alerts", "alerts", fmt.Sprintf("%v", muted), "reason", reason) } return ctx, filtered, nil } // WaitStage waits for a certain amount of time before continuing or until the // context is done. type WaitStage struct { wait func() time.Duration } // NewWaitStage returns a new WaitStage. func NewWaitStage(wait func() time.Duration) *WaitStage { return &WaitStage{ wait: wait, } } // Exec implements the Stage interface. func (ws *WaitStage) Exec(ctx context.Context, _ *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { select { case <-time.After(ws.wait()): case <-ctx.Done(): return ctx, nil, ctx.Err() } return ctx, alerts, nil } // DedupStage filters alerts. // Filtering happens based on a notification log. type DedupStage struct { rs ResolvedSender nflog NotificationLog recv *nflogpb.Receiver now func() time.Time hash func(*types.Alert) uint64 } // NewDedupStage wraps a DedupStage that runs against the given notification log. func NewDedupStage(rs ResolvedSender, l NotificationLog, recv *nflogpb.Receiver) *DedupStage { return &DedupStage{ rs: rs, nflog: l, recv: recv, now: utcNow, hash: hashAlert, } } func utcNow() time.Time { return time.Now().UTC() } // Wrap a slice in a struct so we can store a pointer in sync.Pool. type hashBuffer struct { buf []byte } var hashBuffers = sync.Pool{ New: func() interface{} { return &hashBuffer{buf: make([]byte, 0, 1024)} }, } func hashAlert(a *types.Alert) uint64 { const sep = '\xff' hb := hashBuffers.Get().(*hashBuffer) defer hashBuffers.Put(hb) b := hb.buf[:0] names := make(model.LabelNames, 0, len(a.Labels)) for ln := range a.Labels { names = append(names, ln) } sort.Sort(names) for _, ln := range names { b = append(b, string(ln)...) b = append(b, sep) b = append(b, string(a.Labels[ln])...) b = append(b, sep) } hash := xxhash.Sum64(b) return hash } func (n *DedupStage) needsUpdate(entry *nflogpb.Entry, firing, resolved map[uint64]struct{}, repeat time.Duration) bool { // If we haven't notified about the alert group before, notify right away // unless we only have resolved alerts. if entry == nil { return len(firing) > 0 } if !entry.IsFiringSubset(firing) { return true } // Notify about all alerts being resolved. // This is done irrespective of the send_resolved flag to make sure that // the firing alerts are cleared from the notification log. if len(firing) == 0 { // If the current alert group and last notification contain no firing // alert, it means that some alerts have been fired and resolved during the // last interval. In this case, there is no need to notify the receiver // since it doesn't know about them. return len(entry.FiringAlerts) > 0 } if n.rs.SendResolved() && !entry.IsResolvedSubset(resolved) { return true } // Nothing changed, only notify if the repeat interval has passed. return entry.Timestamp.Before(n.now().Add(-repeat)) } // Exec implements the Stage interface. func (n *DedupStage) Exec(ctx context.Context, _ *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { gkey, ok := GroupKey(ctx) if !ok { return ctx, nil, errors.New("group key missing") } repeatInterval, ok := RepeatInterval(ctx) if !ok { return ctx, nil, errors.New("repeat interval missing") } firingSet := map[uint64]struct{}{} resolvedSet := map[uint64]struct{}{} firing := []uint64{} resolved := []uint64{} var hash uint64 for _, a := range alerts { hash = n.hash(a) if a.Resolved() { resolved = append(resolved, hash) resolvedSet[hash] = struct{}{} } else { firing = append(firing, hash) firingSet[hash] = struct{}{} } } ctx = WithFiringAlerts(ctx, firing) ctx = WithResolvedAlerts(ctx, resolved) entries, err := n.nflog.Query(nflog.QGroupKey(gkey), nflog.QReceiver(n.recv)) if err != nil && !errors.Is(err, nflog.ErrNotFound) { return ctx, nil, err } var entry *nflogpb.Entry switch len(entries) { case 0: case 1: entry = entries[0] default: return ctx, nil, fmt.Errorf("unexpected entry result size %d", len(entries)) } if n.needsUpdate(entry, firingSet, resolvedSet, repeatInterval) { return ctx, alerts, nil } return ctx, nil, nil } // RetryStage notifies via passed integration with exponential backoff until it // succeeds. It aborts if the context is canceled or timed out. type RetryStage struct { integration Integration groupName string metrics *Metrics labelValues []string } // NewRetryStage returns a new instance of a RetryStage. func NewRetryStage(i Integration, groupName string, metrics *Metrics) *RetryStage { labelValues := []string{i.Name()} if metrics.ff.EnableReceiverNamesInMetrics() { labelValues = append(labelValues, i.receiverName) } return &RetryStage{ integration: i, groupName: groupName, metrics: metrics, labelValues: labelValues, } } func (r RetryStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { r.metrics.numNotifications.WithLabelValues(r.labelValues...).Inc() ctx, alerts, err := r.exec(ctx, l, alerts...) failureReason := DefaultReason.String() if err != nil { var e *ErrorWithReason if errors.As(err, &e) { failureReason = e.Reason.String() } r.metrics.numTotalFailedNotifications.WithLabelValues(append(r.labelValues, failureReason)...).Inc() } return ctx, alerts, err } func (r RetryStage) exec(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { var sent []*types.Alert // If we shouldn't send notifications for resolved alerts, but there are only // resolved alerts, report them all as successfully notified (we still want the // notification log to log them for the next run of DedupStage). if !r.integration.SendResolved() { firing, ok := FiringAlerts(ctx) if !ok { return ctx, nil, errors.New("firing alerts missing") } if len(firing) == 0 { return ctx, alerts, nil } for _, a := range alerts { if a.Status() != model.AlertResolved { sent = append(sent, a) } } } else { sent = alerts } b := backoff.NewExponentialBackOff() b.MaxElapsedTime = 0 // Always retry. tick := backoff.NewTicker(b) defer tick.Stop() var ( i = 0 iErr error ) l = l.With("receiver", r.groupName, "integration", r.integration.String()) if groupKey, ok := GroupKey(ctx); ok { l = l.With("aggrGroup", groupKey) } for { i++ // Always check the context first to not notify again. select { case <-ctx.Done(): if iErr == nil { iErr = ctx.Err() if errors.Is(iErr, context.Canceled) { iErr = NewErrorWithReason(ContextCanceledReason, iErr) } else if errors.Is(iErr, context.DeadlineExceeded) { iErr = NewErrorWithReason(ContextDeadlineExceededReason, iErr) } } if iErr != nil { return ctx, nil, fmt.Errorf("%s/%s: notify retry canceled after %d attempts: %w", r.groupName, r.integration.String(), i, iErr) } return ctx, nil, nil default: } select { case <-tick.C: now := time.Now() retry, err := r.integration.Notify(ctx, sent...) dur := time.Since(now) r.metrics.notificationLatencySeconds.WithLabelValues(r.labelValues...).Observe(dur.Seconds()) r.metrics.numNotificationRequestsTotal.WithLabelValues(r.labelValues...).Inc() if err != nil { r.metrics.numNotificationRequestsFailedTotal.WithLabelValues(r.labelValues...).Inc() if !retry { return ctx, alerts, fmt.Errorf("%s/%s: notify retry canceled due to unrecoverable error after %d attempts: %w", r.groupName, r.integration.String(), i, err) } if ctx.Err() == nil { if iErr == nil || err.Error() != iErr.Error() { // Log the error if the context isn't done and the error isn't the same as before. l.Warn("Notify attempt failed, will retry later", "attempts", i, "err", err) } // Save this error to be able to return the last seen error by an // integration upon context timeout. iErr = err } } else { l := l.With("attempts", i, "duration", dur) if i <= 1 { l = l.With("alerts", fmt.Sprintf("%v", alerts)) l.Debug("Notify success") } else { l.Info("Notify success") } return ctx, alerts, nil } case <-ctx.Done(): if iErr == nil { iErr = ctx.Err() if errors.Is(iErr, context.Canceled) { iErr = NewErrorWithReason(ContextCanceledReason, iErr) } else if errors.Is(iErr, context.DeadlineExceeded) { iErr = NewErrorWithReason(ContextDeadlineExceededReason, iErr) } } if iErr != nil { return ctx, nil, fmt.Errorf("%s/%s: notify retry canceled after %d attempts: %w", r.groupName, r.integration.String(), i, iErr) } return ctx, nil, nil } } } // SetNotifiesStage sets the notification information about passed alerts. The // passed alerts should have already been sent to the receivers. type SetNotifiesStage struct { nflog NotificationLog recv *nflogpb.Receiver } // NewSetNotifiesStage returns a new instance of a SetNotifiesStage. func NewSetNotifiesStage(l NotificationLog, recv *nflogpb.Receiver) *SetNotifiesStage { return &SetNotifiesStage{ nflog: l, recv: recv, } } // Exec implements the Stage interface. func (n SetNotifiesStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { gkey, ok := GroupKey(ctx) if !ok { return ctx, nil, errors.New("group key missing") } firing, ok := FiringAlerts(ctx) if !ok { return ctx, nil, errors.New("firing alerts missing") } resolved, ok := ResolvedAlerts(ctx) if !ok { return ctx, nil, errors.New("resolved alerts missing") } repeat, ok := RepeatInterval(ctx) if !ok { return ctx, nil, errors.New("repeat interval missing") } expiry := 2 * repeat return ctx, alerts, n.nflog.Log(n.recv, gkey, firing, resolved, expiry) } type timeStage struct { muter types.TimeMuter marker types.GroupMarker metrics *Metrics } type TimeMuteStage timeStage func NewTimeMuteStage(muter types.TimeMuter, marker types.GroupMarker, metrics *Metrics) *TimeMuteStage { return &TimeMuteStage{muter, marker, metrics} } // Exec implements the stage interface for TimeMuteStage. // TimeMuteStage is responsible for muting alerts whose route is not in an active time. func (tms TimeMuteStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { routeID, ok := RouteID(ctx) if !ok { return ctx, nil, errors.New("route ID missing") } gkey, ok := GroupKey(ctx) if !ok { return ctx, nil, errors.New("group key missing") } muteTimeIntervalNames, ok := MuteTimeIntervalNames(ctx) if !ok { return ctx, alerts, nil } now, ok := Now(ctx) if !ok { return ctx, alerts, errors.New("missing now timestamp") } // Skip this stage if there are no mute timings. if len(muteTimeIntervalNames) == 0 { return ctx, alerts, nil } muted, mutedBy, err := tms.muter.Mutes(muteTimeIntervalNames, now) if err != nil { return ctx, alerts, err } // If muted is false then mutedBy is nil and the muted marker is removed. tms.marker.SetMuted(routeID, gkey, mutedBy) // If the current time is inside a mute time, all alerts are removed from the pipeline. if muted { tms.metrics.numNotificationSuppressedTotal.WithLabelValues(SuppressedReasonMuteTimeInterval).Add(float64(len(alerts))) l.Debug("Notifications not sent, route is within mute time", "alerts", len(alerts)) return ctx, nil, nil } return ctx, alerts, nil } type TimeActiveStage timeStage func NewTimeActiveStage(muter types.TimeMuter, marker types.GroupMarker, metrics *Metrics) *TimeActiveStage { return &TimeActiveStage{muter, marker, metrics} } // Exec implements the stage interface for TimeActiveStage. // TimeActiveStage is responsible for muting alerts whose route is not in an active time. func (tas TimeActiveStage) Exec(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { routeID, ok := RouteID(ctx) if !ok { return ctx, nil, errors.New("route ID missing") } gkey, ok := GroupKey(ctx) if !ok { return ctx, nil, errors.New("group key missing") } activeTimeIntervalNames, ok := ActiveTimeIntervalNames(ctx) if !ok { return ctx, alerts, nil } // if we don't have active time intervals at all it is always active. if len(activeTimeIntervalNames) == 0 { return ctx, alerts, nil } now, ok := Now(ctx) if !ok { return ctx, alerts, errors.New("missing now timestamp") } active, _, err := tas.muter.Mutes(activeTimeIntervalNames, now) if err != nil { return ctx, alerts, err } var mutedBy []string if !active { // If the group is muted, then it must be muted by all active time intervals. // Otherwise, the group must be in at least one active time interval for it // to be active. mutedBy = activeTimeIntervalNames } tas.marker.SetMuted(routeID, gkey, mutedBy) // If the current time is not inside an active time, all alerts are removed from the pipeline if !active { tas.metrics.numNotificationSuppressedTotal.WithLabelValues(SuppressedReasonActiveTimeInterval).Add(float64(len(alerts))) l.Debug("Notifications not sent, route is not within active time", "alerts", len(alerts)) return ctx, nil, nil } return ctx, alerts, nil } prometheus-alertmanager-0.28.1+ds/notify/notify_test.go000066400000000000000000001013051476331240200232470ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package notify import ( "context" "errors" "fmt" "io" "log/slog" "reflect" "sort" "strings" "testing" "time" "github.com/prometheus/client_golang/prometheus" prom_testutil "github.com/prometheus/client_golang/prometheus/testutil" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/featurecontrol" "github.com/prometheus/alertmanager/nflog" "github.com/prometheus/alertmanager/nflog/nflogpb" "github.com/prometheus/alertmanager/silence" "github.com/prometheus/alertmanager/silence/silencepb" "github.com/prometheus/alertmanager/timeinterval" "github.com/prometheus/alertmanager/types" ) type sendResolved bool func (s sendResolved) SendResolved() bool { return bool(s) } type notifierFunc func(ctx context.Context, alerts ...*types.Alert) (bool, error) func (f notifierFunc) Notify(ctx context.Context, alerts ...*types.Alert) (bool, error) { return f(ctx, alerts...) } type failStage struct{} func (s failStage) Exec(ctx context.Context, l *slog.Logger, as ...*types.Alert) (context.Context, []*types.Alert, error) { return ctx, nil, fmt.Errorf("some error") } type testNflog struct { qres []*nflogpb.Entry qerr error logFunc func(r *nflogpb.Receiver, gkey string, firingAlerts, resolvedAlerts []uint64, expiry time.Duration) error } func (l *testNflog) Query(p ...nflog.QueryParam) ([]*nflogpb.Entry, error) { return l.qres, l.qerr } func (l *testNflog) Log(r *nflogpb.Receiver, gkey string, firingAlerts, resolvedAlerts []uint64, expiry time.Duration) error { return l.logFunc(r, gkey, firingAlerts, resolvedAlerts, expiry) } func (l *testNflog) GC() (int, error) { return 0, nil } func (l *testNflog) Snapshot(w io.Writer) (int, error) { return 0, nil } func alertHashSet(hashes ...uint64) map[uint64]struct{} { res := map[uint64]struct{}{} for _, h := range hashes { res[h] = struct{}{} } return res } func TestDedupStageNeedsUpdate(t *testing.T) { now := utcNow() cases := []struct { entry *nflogpb.Entry firingAlerts map[uint64]struct{} resolvedAlerts map[uint64]struct{} repeat time.Duration resolve bool res bool }{ { // No matching nflog entry should update. entry: nil, firingAlerts: alertHashSet(2, 3, 4), res: true, }, { // No matching nflog entry shouldn't update if no alert fires. entry: nil, resolvedAlerts: alertHashSet(2, 3, 4), res: false, }, { // Different sets of firing alerts should update. entry: &nflogpb.Entry{FiringAlerts: []uint64{1, 2, 3}}, firingAlerts: alertHashSet(2, 3, 4), res: true, }, { // Zero timestamp in the nflog entry should always update. entry: &nflogpb.Entry{ FiringAlerts: []uint64{1, 2, 3}, Timestamp: time.Time{}, }, firingAlerts: alertHashSet(1, 2, 3), res: true, }, { // Identical sets of alerts shouldn't update before repeat_interval. entry: &nflogpb.Entry{ FiringAlerts: []uint64{1, 2, 3}, Timestamp: now.Add(-9 * time.Minute), }, repeat: 10 * time.Minute, firingAlerts: alertHashSet(1, 2, 3), res: false, }, { // Identical sets of alerts should update after repeat_interval. entry: &nflogpb.Entry{ FiringAlerts: []uint64{1, 2, 3}, Timestamp: now.Add(-11 * time.Minute), }, repeat: 10 * time.Minute, firingAlerts: alertHashSet(1, 2, 3), res: true, }, { // Different sets of resolved alerts without firing alerts shouldn't update after repeat_interval. entry: &nflogpb.Entry{ ResolvedAlerts: []uint64{1, 2, 3}, Timestamp: now.Add(-11 * time.Minute), }, repeat: 10 * time.Minute, resolvedAlerts: alertHashSet(3, 4, 5), resolve: true, res: false, }, { // Different sets of resolved alerts shouldn't update when resolve is false. entry: &nflogpb.Entry{ FiringAlerts: []uint64{1, 2}, ResolvedAlerts: []uint64{3}, Timestamp: now.Add(-9 * time.Minute), }, repeat: 10 * time.Minute, firingAlerts: alertHashSet(1), resolvedAlerts: alertHashSet(2, 3), resolve: false, res: false, }, { // Different sets of resolved alerts should update when resolve is true. entry: &nflogpb.Entry{ FiringAlerts: []uint64{1, 2}, ResolvedAlerts: []uint64{3}, Timestamp: now.Add(-9 * time.Minute), }, repeat: 10 * time.Minute, firingAlerts: alertHashSet(1), resolvedAlerts: alertHashSet(2, 3), resolve: true, res: true, }, { // Empty set of firing alerts should update when resolve is false. entry: &nflogpb.Entry{ FiringAlerts: []uint64{1, 2}, ResolvedAlerts: []uint64{3}, Timestamp: now.Add(-9 * time.Minute), }, repeat: 10 * time.Minute, firingAlerts: alertHashSet(), resolvedAlerts: alertHashSet(1, 2, 3), resolve: false, res: true, }, { // Empty set of firing alerts should update when resolve is true. entry: &nflogpb.Entry{ FiringAlerts: []uint64{1, 2}, ResolvedAlerts: []uint64{3}, Timestamp: now.Add(-9 * time.Minute), }, repeat: 10 * time.Minute, firingAlerts: alertHashSet(), resolvedAlerts: alertHashSet(1, 2, 3), resolve: true, res: true, }, } for i, c := range cases { t.Log("case", i) s := &DedupStage{ now: func() time.Time { return now }, rs: sendResolved(c.resolve), } res := s.needsUpdate(c.entry, c.firingAlerts, c.resolvedAlerts, c.repeat) require.Equal(t, c.res, res) } } func TestDedupStage(t *testing.T) { i := 0 now := utcNow() s := &DedupStage{ hash: func(a *types.Alert) uint64 { res := uint64(i) i++ return res }, now: func() time.Time { return now }, rs: sendResolved(false), } ctx := context.Background() _, _, err := s.Exec(ctx, promslog.NewNopLogger()) require.EqualError(t, err, "group key missing") ctx = WithGroupKey(ctx, "1") _, _, err = s.Exec(ctx, promslog.NewNopLogger()) require.EqualError(t, err, "repeat interval missing") ctx = WithRepeatInterval(ctx, time.Hour) alerts := []*types.Alert{{}, {}, {}} // Must catch notification log query errors. s.nflog = &testNflog{ qerr: errors.New("bad things"), } ctx, _, err = s.Exec(ctx, promslog.NewNopLogger(), alerts...) require.EqualError(t, err, "bad things") // ... but skip ErrNotFound. s.nflog = &testNflog{ qerr: nflog.ErrNotFound, } ctx, res, err := s.Exec(ctx, promslog.NewNopLogger(), alerts...) require.NoError(t, err, "unexpected error on not found log entry") require.Equal(t, alerts, res, "input alerts differ from result alerts") s.nflog = &testNflog{ qerr: nil, qres: []*nflogpb.Entry{ {FiringAlerts: []uint64{0, 1, 2}}, {FiringAlerts: []uint64{1, 2, 3}}, }, } ctx, _, err = s.Exec(ctx, promslog.NewNopLogger(), alerts...) require.Contains(t, err.Error(), "result size") // Must return no error and no alerts no need to update. i = 0 s.nflog = &testNflog{ qerr: nflog.ErrNotFound, qres: []*nflogpb.Entry{ { FiringAlerts: []uint64{0, 1, 2}, Timestamp: now, }, }, } ctx, res, err = s.Exec(ctx, promslog.NewNopLogger(), alerts...) require.NoError(t, err) require.Nil(t, res, "unexpected alerts returned") // Must return no error and all input alerts on changes. i = 0 s.nflog = &testNflog{ qerr: nil, qres: []*nflogpb.Entry{ { FiringAlerts: []uint64{1, 2, 3, 4}, Timestamp: now, }, }, } _, res, err = s.Exec(ctx, promslog.NewNopLogger(), alerts...) require.NoError(t, err) require.Equal(t, alerts, res, "unexpected alerts returned") } func TestMultiStage(t *testing.T) { var ( alerts1 = []*types.Alert{{}} alerts2 = []*types.Alert{{}, {}} alerts3 = []*types.Alert{{}, {}, {}} ) stage := MultiStage{ StageFunc(func(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { if !reflect.DeepEqual(alerts, alerts1) { t.Fatal("Input not equal to input of MultiStage") } //nolint:staticcheck // Ignore SA1029 ctx = context.WithValue(ctx, "key", "value") return ctx, alerts2, nil }), StageFunc(func(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { if !reflect.DeepEqual(alerts, alerts2) { t.Fatal("Input not equal to output of previous stage") } v, ok := ctx.Value("key").(string) if !ok || v != "value" { t.Fatalf("Expected value %q for key %q but got %q", "value", "key", v) } return ctx, alerts3, nil }), } _, alerts, err := stage.Exec(context.Background(), promslog.NewNopLogger(), alerts1...) if err != nil { t.Fatalf("Exec failed: %s", err) } if !reflect.DeepEqual(alerts, alerts3) { t.Fatal("Output of MultiStage is not equal to the output of the last stage") } } func TestMultiStageFailure(t *testing.T) { var ( ctx = context.Background() s1 = failStage{} stage = MultiStage{s1} ) _, _, err := stage.Exec(ctx, promslog.NewNopLogger(), nil) if err.Error() != "some error" { t.Fatal("Errors were not propagated correctly by MultiStage") } } func TestRoutingStage(t *testing.T) { var ( alerts1 = []*types.Alert{{}} alerts2 = []*types.Alert{{}, {}} ) stage := RoutingStage{ "name": StageFunc(func(ctx context.Context, l *slog.Logger, alerts ...*types.Alert) (context.Context, []*types.Alert, error) { if !reflect.DeepEqual(alerts, alerts1) { t.Fatal("Input not equal to input of RoutingStage") } return ctx, alerts2, nil }), "not": failStage{}, } ctx := WithReceiverName(context.Background(), "name") _, alerts, err := stage.Exec(ctx, promslog.NewNopLogger(), alerts1...) if err != nil { t.Fatalf("Exec failed: %s", err) } if !reflect.DeepEqual(alerts, alerts2) { t.Fatal("Output of RoutingStage is not equal to the output of the inner stage") } } func TestRetryStageWithError(t *testing.T) { fail, retry := true, true sent := []*types.Alert{} i := Integration{ notifier: notifierFunc(func(ctx context.Context, alerts ...*types.Alert) (bool, error) { if fail { fail = false return retry, errors.New("fail to deliver notification") } sent = append(sent, alerts...) return false, nil }), rs: sendResolved(false), } r := NewRetryStage(i, "", NewMetrics(prometheus.NewRegistry(), featurecontrol.NoopFlags{})) alerts := []*types.Alert{ { Alert: model.Alert{ EndsAt: time.Now().Add(time.Hour), }, }, } ctx := context.Background() ctx = WithFiringAlerts(ctx, []uint64{0}) // Notify with a recoverable error should retry and succeed. resctx, res, err := r.Exec(ctx, promslog.NewNopLogger(), alerts...) require.NoError(t, err) require.Equal(t, alerts, res) require.Equal(t, alerts, sent) require.NotNil(t, resctx) // Notify with an unrecoverable error should fail. sent = sent[:0] fail = true retry = false resctx, _, err = r.Exec(ctx, promslog.NewNopLogger(), alerts...) require.Error(t, err) require.NotNil(t, resctx) } func TestRetryStageWithErrorCode(t *testing.T) { testcases := map[string]struct { isNewErrorWithReason bool reason Reason reasonlabel string expectedCount int }{ "for clientError": {isNewErrorWithReason: true, reason: ClientErrorReason, reasonlabel: ClientErrorReason.String(), expectedCount: 1}, "for serverError": {isNewErrorWithReason: true, reason: ServerErrorReason, reasonlabel: ServerErrorReason.String(), expectedCount: 1}, "for unexpected code": {isNewErrorWithReason: false, reason: DefaultReason, reasonlabel: DefaultReason.String(), expectedCount: 1}, } for _, testData := range testcases { retry := false testData := testData i := Integration{ name: "test", notifier: notifierFunc(func(ctx context.Context, alerts ...*types.Alert) (bool, error) { if !testData.isNewErrorWithReason { return retry, errors.New("fail to deliver notification") } return retry, NewErrorWithReason(testData.reason, errors.New("fail to deliver notification")) }), rs: sendResolved(false), } r := NewRetryStage(i, "", NewMetrics(prometheus.NewRegistry(), featurecontrol.NoopFlags{})) alerts := []*types.Alert{ { Alert: model.Alert{ EndsAt: time.Now().Add(time.Hour), }, }, } ctx := context.Background() ctx = WithFiringAlerts(ctx, []uint64{0}) // Notify with a non-recoverable error. resctx, _, err := r.Exec(ctx, promslog.NewNopLogger(), alerts...) counter := r.metrics.numTotalFailedNotifications require.Equal(t, testData.expectedCount, int(prom_testutil.ToFloat64(counter.WithLabelValues(r.integration.Name(), testData.reasonlabel)))) require.Error(t, err) require.NotNil(t, resctx) } } func TestRetryStageWithContextCanceled(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) i := Integration{ name: "test", notifier: notifierFunc(func(ctx context.Context, alerts ...*types.Alert) (bool, error) { cancel() return true, errors.New("request failed: context canceled") }), rs: sendResolved(false), } r := NewRetryStage(i, "", NewMetrics(prometheus.NewRegistry(), featurecontrol.NoopFlags{})) alerts := []*types.Alert{ { Alert: model.Alert{ EndsAt: time.Now().Add(time.Hour), }, }, } ctx = WithFiringAlerts(ctx, []uint64{0}) // Notify with a non-recoverable error. resctx, _, err := r.Exec(ctx, promslog.NewNopLogger(), alerts...) counter := r.metrics.numTotalFailedNotifications require.Equal(t, 1, int(prom_testutil.ToFloat64(counter.WithLabelValues(r.integration.Name(), ContextCanceledReason.String())))) require.Error(t, err) require.NotNil(t, resctx) } func TestRetryStageNoResolved(t *testing.T) { sent := []*types.Alert{} i := Integration{ notifier: notifierFunc(func(ctx context.Context, alerts ...*types.Alert) (bool, error) { sent = append(sent, alerts...) return false, nil }), rs: sendResolved(false), } r := NewRetryStage(i, "", NewMetrics(prometheus.NewRegistry(), featurecontrol.NoopFlags{})) alerts := []*types.Alert{ { Alert: model.Alert{ EndsAt: time.Now().Add(-time.Hour), }, }, { Alert: model.Alert{ EndsAt: time.Now().Add(time.Hour), }, }, } ctx := context.Background() resctx, res, err := r.Exec(ctx, promslog.NewNopLogger(), alerts...) require.EqualError(t, err, "firing alerts missing") require.Nil(t, res) require.NotNil(t, resctx) ctx = WithFiringAlerts(ctx, []uint64{0}) resctx, res, err = r.Exec(ctx, promslog.NewNopLogger(), alerts...) require.NoError(t, err) require.Equal(t, alerts, res) require.Equal(t, []*types.Alert{alerts[1]}, sent) require.NotNil(t, resctx) // All alerts are resolved. sent = sent[:0] ctx = WithFiringAlerts(ctx, []uint64{}) alerts[1].Alert.EndsAt = time.Now().Add(-time.Hour) resctx, res, err = r.Exec(ctx, promslog.NewNopLogger(), alerts...) require.NoError(t, err) require.Equal(t, alerts, res) require.Equal(t, []*types.Alert{}, sent) require.NotNil(t, resctx) } func TestRetryStageSendResolved(t *testing.T) { sent := []*types.Alert{} i := Integration{ notifier: notifierFunc(func(ctx context.Context, alerts ...*types.Alert) (bool, error) { sent = append(sent, alerts...) return false, nil }), rs: sendResolved(true), } r := NewRetryStage(i, "", NewMetrics(prometheus.NewRegistry(), featurecontrol.NoopFlags{})) alerts := []*types.Alert{ { Alert: model.Alert{ EndsAt: time.Now().Add(-time.Hour), }, }, { Alert: model.Alert{ EndsAt: time.Now().Add(time.Hour), }, }, } ctx := context.Background() ctx = WithFiringAlerts(ctx, []uint64{0}) resctx, res, err := r.Exec(ctx, promslog.NewNopLogger(), alerts...) require.NoError(t, err) require.Equal(t, alerts, res) require.Equal(t, alerts, sent) require.NotNil(t, resctx) // All alerts are resolved. sent = sent[:0] ctx = WithFiringAlerts(ctx, []uint64{}) alerts[1].Alert.EndsAt = time.Now().Add(-time.Hour) resctx, res, err = r.Exec(ctx, promslog.NewNopLogger(), alerts...) require.NoError(t, err) require.Equal(t, alerts, res) require.Equal(t, alerts, sent) require.NotNil(t, resctx) } func TestSetNotifiesStage(t *testing.T) { tnflog := &testNflog{} s := &SetNotifiesStage{ recv: &nflogpb.Receiver{GroupName: "test"}, nflog: tnflog, } alerts := []*types.Alert{{}, {}, {}} ctx := context.Background() resctx, res, err := s.Exec(ctx, promslog.NewNopLogger(), alerts...) require.EqualError(t, err, "group key missing") require.Nil(t, res) require.NotNil(t, resctx) ctx = WithGroupKey(ctx, "1") resctx, res, err = s.Exec(ctx, promslog.NewNopLogger(), alerts...) require.EqualError(t, err, "firing alerts missing") require.Nil(t, res) require.NotNil(t, resctx) ctx = WithFiringAlerts(ctx, []uint64{0, 1, 2}) resctx, res, err = s.Exec(ctx, promslog.NewNopLogger(), alerts...) require.EqualError(t, err, "resolved alerts missing") require.Nil(t, res) require.NotNil(t, resctx) ctx = WithResolvedAlerts(ctx, []uint64{}) ctx = WithRepeatInterval(ctx, time.Hour) tnflog.logFunc = func(r *nflogpb.Receiver, gkey string, firingAlerts, resolvedAlerts []uint64, expiry time.Duration) error { require.Equal(t, s.recv, r) require.Equal(t, "1", gkey) require.Equal(t, []uint64{0, 1, 2}, firingAlerts) require.Equal(t, []uint64{}, resolvedAlerts) require.Equal(t, 2*time.Hour, expiry) return nil } resctx, res, err = s.Exec(ctx, promslog.NewNopLogger(), alerts...) require.NoError(t, err) require.Equal(t, alerts, res) require.NotNil(t, resctx) ctx = WithFiringAlerts(ctx, []uint64{}) ctx = WithResolvedAlerts(ctx, []uint64{0, 1, 2}) tnflog.logFunc = func(r *nflogpb.Receiver, gkey string, firingAlerts, resolvedAlerts []uint64, expiry time.Duration) error { require.Equal(t, s.recv, r) require.Equal(t, "1", gkey) require.Equal(t, []uint64{}, firingAlerts) require.Equal(t, []uint64{0, 1, 2}, resolvedAlerts) require.Equal(t, 2*time.Hour, expiry) return nil } resctx, res, err = s.Exec(ctx, promslog.NewNopLogger(), alerts...) require.NoError(t, err) require.Equal(t, alerts, res) require.NotNil(t, resctx) } func TestMuteStage(t *testing.T) { // Mute all label sets that have a "mute" key. muter := types.MuteFunc(func(lset model.LabelSet) bool { _, ok := lset["mute"] return ok }) metrics := NewMetrics(prometheus.NewRegistry(), featurecontrol.NoopFlags{}) stage := NewMuteStage(muter, metrics) in := []model.LabelSet{ {}, {"test": "set"}, {"mute": "me"}, {"foo": "bar", "test": "set"}, {"foo": "bar", "mute": "me"}, {}, {"not": "muted"}, } out := []model.LabelSet{ {}, {"test": "set"}, {"foo": "bar", "test": "set"}, {}, {"not": "muted"}, } var inAlerts []*types.Alert for _, lset := range in { inAlerts = append(inAlerts, &types.Alert{ Alert: model.Alert{Labels: lset}, }) } _, alerts, err := stage.Exec(context.Background(), promslog.NewNopLogger(), inAlerts...) if err != nil { t.Fatalf("Exec failed: %s", err) } var got []model.LabelSet for _, a := range alerts { got = append(got, a.Labels) } if !reflect.DeepEqual(got, out) { t.Fatalf("Muting failed, expected: %v\ngot %v", out, got) } suppressed := int(prom_testutil.ToFloat64(metrics.numNotificationSuppressedTotal)) if (len(in) - len(got)) != suppressed { t.Fatalf("Expected %d alerts counted in suppressed metric but got %d", (len(in) - len(got)), suppressed) } } func TestMuteStageWithSilences(t *testing.T) { silences, err := silence.New(silence.Options{Retention: time.Hour}) if err != nil { t.Fatal(err) } sil := &silencepb.Silence{ EndsAt: utcNow().Add(time.Hour), Matchers: []*silencepb.Matcher{{Name: "mute", Pattern: "me"}}, } if err = silences.Set(sil); err != nil { t.Fatal(err) } reg := prometheus.NewRegistry() marker := types.NewMarker(reg) silencer := silence.NewSilencer(silences, marker, promslog.NewNopLogger()) metrics := NewMetrics(reg, featurecontrol.NoopFlags{}) stage := NewMuteStage(silencer, metrics) in := []model.LabelSet{ {}, {"test": "set"}, {"mute": "me"}, {"foo": "bar", "test": "set"}, {"foo": "bar", "mute": "me"}, {}, {"not": "muted"}, } out := []model.LabelSet{ {}, {"test": "set"}, {"foo": "bar", "test": "set"}, {}, {"not": "muted"}, } var inAlerts []*types.Alert for _, lset := range in { inAlerts = append(inAlerts, &types.Alert{ Alert: model.Alert{Labels: lset}, }) } // Set the second alert as previously silenced with an old version // number. This is expected to get unsilenced by the stage. marker.SetActiveOrSilenced(inAlerts[1].Fingerprint(), 0, []string{"123"}, nil) _, alerts, err := stage.Exec(context.Background(), promslog.NewNopLogger(), inAlerts...) if err != nil { t.Fatalf("Exec failed: %s", err) } var got []model.LabelSet for _, a := range alerts { got = append(got, a.Labels) } if !reflect.DeepEqual(got, out) { t.Fatalf("Muting failed, expected: %v\ngot %v", out, got) } suppressedRoundOne := int(prom_testutil.ToFloat64(metrics.numNotificationSuppressedTotal)) if (len(in) - len(got)) != suppressedRoundOne { t.Fatalf("Expected %d alerts counted in suppressed metric but got %d", (len(in) - len(got)), suppressedRoundOne) } // Do it again to exercise the version tracking of silences. _, alerts, err = stage.Exec(context.Background(), promslog.NewNopLogger(), inAlerts...) if err != nil { t.Fatalf("Exec failed: %s", err) } got = got[:0] for _, a := range alerts { got = append(got, a.Labels) } if !reflect.DeepEqual(got, out) { t.Fatalf("Muting failed, expected: %v\ngot %v", out, got) } suppressedRoundTwo := int(prom_testutil.ToFloat64(metrics.numNotificationSuppressedTotal)) if (len(in) - len(got) + suppressedRoundOne) != suppressedRoundTwo { t.Fatalf("Expected %d alerts counted in suppressed metric but got %d", (len(in) - len(got)), suppressedRoundTwo) } // Expire the silence and verify that no alerts are silenced now. if err := silences.Expire(sil.Id); err != nil { t.Fatal(err) } _, alerts, err = stage.Exec(context.Background(), promslog.NewNopLogger(), inAlerts...) if err != nil { t.Fatalf("Exec failed: %s", err) } got = got[:0] for _, a := range alerts { got = append(got, a.Labels) } if !reflect.DeepEqual(got, in) { t.Fatalf("Unmuting failed, expected: %v\ngot %v", in, got) } suppressedRoundThree := int(prom_testutil.ToFloat64(metrics.numNotificationSuppressedTotal)) if (len(in) - len(got) + suppressedRoundTwo) != suppressedRoundThree { t.Fatalf("Expected %d alerts counted in suppressed metric but got %d", (len(in) - len(got)), suppressedRoundThree) } } func TestTimeMuteStage(t *testing.T) { sydney, err := time.LoadLocation("Australia/Sydney") if err != nil { t.Fatalf("Failed to load location Australia/Sydney: %s", err) } eveningsAndWeekends := map[string][]timeinterval.TimeInterval{ "evenings": {{ Times: []timeinterval.TimeRange{{ StartMinute: 0, // 00:00 EndMinute: 540, // 09:00 }, { StartMinute: 1020, // 17:00 EndMinute: 1440, // 24:00 }}, Location: &timeinterval.Location{Location: sydney}, }}, "weekends": {{ Weekdays: []timeinterval.WeekdayRange{{ InclusiveRange: timeinterval.InclusiveRange{Begin: 6, End: 6}, // Saturday }, { InclusiveRange: timeinterval.InclusiveRange{Begin: 0, End: 0}, // Sunday }}, Location: &timeinterval.Location{Location: sydney}, }}, } tests := []struct { name string intervals map[string][]timeinterval.TimeInterval now time.Time alerts []*types.Alert mutedBy []string }{{ name: "Should be muted outside working hours", intervals: eveningsAndWeekends, now: time.Date(2024, 1, 1, 0, 0, 0, 0, sydney), alerts: []*types.Alert{{Alert: model.Alert{Labels: model.LabelSet{"foo": "bar"}}}}, mutedBy: []string{"evenings"}, }, { name: "Should not be muted during workings hours", intervals: eveningsAndWeekends, now: time.Date(2024, 1, 1, 9, 0, 0, 0, sydney), alerts: []*types.Alert{{Alert: model.Alert{Labels: model.LabelSet{"foo": "bar"}}}}, mutedBy: nil, }, { name: "Should be muted during weekends", intervals: eveningsAndWeekends, now: time.Date(2024, 1, 6, 10, 0, 0, 0, sydney), alerts: []*types.Alert{{Alert: model.Alert{Labels: model.LabelSet{"foo": "bar"}}}}, mutedBy: []string{"weekends"}, }, { name: "Should be muted at 12pm UTC on a weekday", intervals: eveningsAndWeekends, now: time.Date(2024, 1, 1, 10, 0, 0, 0, time.UTC), alerts: []*types.Alert{{Alert: model.Alert{Labels: model.LabelSet{"foo": "bar"}}}}, mutedBy: []string{"evenings"}, }, { name: "Should be muted at 12pm UTC on a weekend", intervals: eveningsAndWeekends, now: time.Date(2024, 1, 6, 10, 0, 0, 0, time.UTC), alerts: []*types.Alert{{Alert: model.Alert{Labels: model.LabelSet{"foo": "bar"}}}}, mutedBy: []string{"evenings", "weekends"}, }} for _, test := range tests { t.Run(test.name, func(t *testing.T) { r := prometheus.NewRegistry() marker := types.NewMarker(r) metrics := NewMetrics(r, featurecontrol.NoopFlags{}) intervener := timeinterval.NewIntervener(test.intervals) st := NewTimeMuteStage(intervener, marker, metrics) // Get the names of all time intervals for the context. muteTimeIntervalNames := make([]string, 0, len(test.intervals)) for name := range test.intervals { muteTimeIntervalNames = append(muteTimeIntervalNames, name) } // Sort the names so we can compare mutedBy with test.mutedBy. sort.Strings(muteTimeIntervalNames) ctx := context.Background() ctx = WithNow(ctx, test.now) ctx = WithGroupKey(ctx, "group1") ctx = WithActiveTimeIntervals(ctx, nil) ctx = WithMuteTimeIntervals(ctx, muteTimeIntervalNames) ctx = WithRouteID(ctx, "route1") _, active, err := st.Exec(ctx, promslog.NewNopLogger(), test.alerts...) require.NoError(t, err) if len(test.mutedBy) == 0 { // All alerts should be active. require.Equal(t, len(test.alerts), len(active)) // The group should not be marked. mutedBy, isMuted := marker.Muted("route1", "group1") require.False(t, isMuted) require.Empty(t, mutedBy) // The metric for total suppressed notifications should not // have been incremented, which means it will not be collected. require.NoError(t, prom_testutil.GatherAndCompare(r, strings.NewReader(` # HELP alertmanager_marked_alerts How many alerts by state are currently marked in the Alertmanager regardless of their expiry. # TYPE alertmanager_marked_alerts gauge alertmanager_marked_alerts{state="active"} 0 alertmanager_marked_alerts{state="suppressed"} 0 alertmanager_marked_alerts{state="unprocessed"} 0 `))) } else { // All alerts should be muted. require.Empty(t, active) // The group should be marked as muted. mutedBy, isMuted := marker.Muted("route1", "group1") require.True(t, isMuted) require.Equal(t, test.mutedBy, mutedBy) // Gets the metric for total suppressed notifications. require.NoError(t, prom_testutil.GatherAndCompare(r, strings.NewReader(fmt.Sprintf(` # HELP alertmanager_marked_alerts How many alerts by state are currently marked in the Alertmanager regardless of their expiry. # TYPE alertmanager_marked_alerts gauge alertmanager_marked_alerts{state="active"} 0 alertmanager_marked_alerts{state="suppressed"} 0 alertmanager_marked_alerts{state="unprocessed"} 0 # HELP alertmanager_notifications_suppressed_total The total number of notifications suppressed for being silenced, inhibited, outside of active time intervals or within muted time intervals. # TYPE alertmanager_notifications_suppressed_total counter alertmanager_notifications_suppressed_total{reason="mute_time_interval"} %d `, len(test.alerts))))) } }) } } func TestTimeActiveStage(t *testing.T) { sydney, err := time.LoadLocation("Australia/Sydney") if err != nil { t.Fatalf("Failed to load location Australia/Sydney: %s", err) } weekdays := map[string][]timeinterval.TimeInterval{ "weekdays": {{ Weekdays: []timeinterval.WeekdayRange{{ InclusiveRange: timeinterval.InclusiveRange{ Begin: 1, // Monday End: 5, // Friday }, }}, Times: []timeinterval.TimeRange{{ StartMinute: 540, // 09:00 EndMinute: 1020, // 17:00 }}, Location: &timeinterval.Location{Location: sydney}, }}, } tests := []struct { name string intervals map[string][]timeinterval.TimeInterval now time.Time alerts []*types.Alert mutedBy []string }{{ name: "Should be muted outside working hours", intervals: weekdays, now: time.Date(2024, 1, 1, 0, 0, 0, 0, sydney), alerts: []*types.Alert{{Alert: model.Alert{Labels: model.LabelSet{"foo": "bar"}}}}, mutedBy: []string{"weekdays"}, }, { name: "Should not be muted during workings hours", intervals: weekdays, now: time.Date(2024, 1, 1, 9, 0, 0, 0, sydney), alerts: []*types.Alert{{Alert: model.Alert{Labels: model.LabelSet{"foo": "bar"}}}}, mutedBy: nil, }, { name: "Should be muted during weekends", intervals: weekdays, now: time.Date(2024, 1, 6, 10, 0, 0, 0, sydney), alerts: []*types.Alert{{Alert: model.Alert{Labels: model.LabelSet{"foo": "bar"}}}}, mutedBy: []string{"weekdays"}, }, { name: "Should be muted at 12pm UTC", intervals: weekdays, now: time.Date(2024, 1, 6, 10, 0, 0, 0, time.UTC), alerts: []*types.Alert{{Alert: model.Alert{Labels: model.LabelSet{"foo": "bar"}}}}, mutedBy: []string{"weekdays"}, }} for _, test := range tests { t.Run(test.name, func(t *testing.T) { r := prometheus.NewRegistry() marker := types.NewMarker(r) metrics := NewMetrics(r, featurecontrol.NoopFlags{}) intervener := timeinterval.NewIntervener(test.intervals) st := NewTimeActiveStage(intervener, marker, metrics) // Get the names of all time intervals for the context. activeTimeIntervalNames := make([]string, 0, len(test.intervals)) for name := range test.intervals { activeTimeIntervalNames = append(activeTimeIntervalNames, name) } // Sort the names so we can compare mutedBy with test.mutedBy. sort.Strings(activeTimeIntervalNames) ctx := context.Background() ctx = WithNow(ctx, test.now) ctx = WithGroupKey(ctx, "group1") ctx = WithActiveTimeIntervals(ctx, activeTimeIntervalNames) ctx = WithMuteTimeIntervals(ctx, nil) ctx = WithRouteID(ctx, "route1") _, active, err := st.Exec(ctx, promslog.NewNopLogger(), test.alerts...) require.NoError(t, err) if len(test.mutedBy) == 0 { // All alerts should be active. require.Equal(t, len(test.alerts), len(active)) // The group should not be marked. mutedBy, isMuted := marker.Muted("route1", "group1") require.False(t, isMuted) require.Empty(t, mutedBy) // The metric for total suppressed notifications should not // have been incremented, which means it will not be collected. require.NoError(t, prom_testutil.GatherAndCompare(r, strings.NewReader(` # HELP alertmanager_marked_alerts How many alerts by state are currently marked in the Alertmanager regardless of their expiry. # TYPE alertmanager_marked_alerts gauge alertmanager_marked_alerts{state="active"} 0 alertmanager_marked_alerts{state="suppressed"} 0 alertmanager_marked_alerts{state="unprocessed"} 0 `))) } else { // All alerts should be muted. require.Empty(t, active) // The group should be marked as muted. mutedBy, isMuted := marker.Muted("route1", "group1") require.True(t, isMuted) require.Equal(t, test.mutedBy, mutedBy) // Gets the metric for total suppressed notifications. require.NoError(t, prom_testutil.GatherAndCompare(r, strings.NewReader(fmt.Sprintf(` # HELP alertmanager_marked_alerts How many alerts by state are currently marked in the Alertmanager regardless of their expiry. # TYPE alertmanager_marked_alerts gauge alertmanager_marked_alerts{state="active"} 0 alertmanager_marked_alerts{state="suppressed"} 0 alertmanager_marked_alerts{state="unprocessed"} 0 # HELP alertmanager_notifications_suppressed_total The total number of notifications suppressed for being silenced, inhibited, outside of active time intervals or within muted time intervals. # TYPE alertmanager_notifications_suppressed_total counter alertmanager_notifications_suppressed_total{reason="active_time_interval"} %d `, len(test.alerts))))) } }) } } func BenchmarkHashAlert(b *testing.B) { alert := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"foo": "the_first_value", "bar": "the_second_value", "another": "value"}, }, } for i := 0; i < b.N; i++ { hashAlert(alert) } } prometheus-alertmanager-0.28.1+ds/notify/opsgenie/000077500000000000000000000000001476331240200221625ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/opsgenie/api_key_file000066400000000000000000000000231476331240200245200ustar00rootroot00000000000000my_secret_api_key prometheus-alertmanager-0.28.1+ds/notify/opsgenie/opsgenie.go000066400000000000000000000215111476331240200243220ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package opsgenie import ( "bytes" "context" "encoding/json" "fmt" "log/slog" "net/http" "os" "strings" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) // https://docs.opsgenie.com/docs/alert-api - 130 characters meaning runes. const maxMessageLenRunes = 130 // Notifier implements a Notifier for OpsGenie notifications. type Notifier struct { conf *config.OpsGenieConfig tmpl *template.Template logger *slog.Logger client *http.Client retrier *notify.Retrier } // New returns a new OpsGenie notifier. func New(c *config.OpsGenieConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "opsgenie", httpOpts...) if err != nil { return nil, err } return &Notifier{ conf: c, tmpl: t, logger: l, client: client, retrier: ¬ify.Retrier{RetryCodes: []int{http.StatusTooManyRequests}}, }, nil } type opsGenieCreateMessage struct { Alias string `json:"alias"` Message string `json:"message"` Description string `json:"description,omitempty"` Details map[string]string `json:"details"` Source string `json:"source"` Responders []opsGenieCreateMessageResponder `json:"responders,omitempty"` Tags []string `json:"tags,omitempty"` Note string `json:"note,omitempty"` Priority string `json:"priority,omitempty"` Entity string `json:"entity,omitempty"` Actions []string `json:"actions,omitempty"` } type opsGenieCreateMessageResponder struct { ID string `json:"id,omitempty"` Name string `json:"name,omitempty"` Username string `json:"username,omitempty"` Type string `json:"type"` // team, user, escalation, schedule etc. } type opsGenieCloseMessage struct { Source string `json:"source"` } type opsGenieUpdateMessageMessage struct { Message string `json:"message,omitempty"` } type opsGenieUpdateDescriptionMessage struct { Description string `json:"description,omitempty"` } // Notify implements the Notifier interface. func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { requests, retry, err := n.createRequests(ctx, as...) if err != nil { return retry, err } for _, req := range requests { req.Header.Set("User-Agent", notify.UserAgentHeader) resp, err := n.client.Do(req) if err != nil { return true, err } shouldRetry, err := n.retrier.Check(resp.StatusCode, resp.Body) notify.Drain(resp) if err != nil { return shouldRetry, notify.NewErrorWithReason(notify.GetFailureReasonFromStatusCode(resp.StatusCode), err) } } return true, nil } // Like Split but filter out empty strings. func safeSplit(s, sep string) []string { a := strings.Split(strings.TrimSpace(s), sep) b := a[:0] for _, x := range a { if x != "" { b = append(b, x) } } return b } // Create requests for a list of alerts. func (n *Notifier) createRequests(ctx context.Context, as ...*types.Alert) ([]*http.Request, bool, error) { key, err := notify.ExtractGroupKey(ctx) if err != nil { return nil, false, err } data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger) n.logger.Debug("extracted group key", "key", key) tmpl := notify.TmplText(n.tmpl, data, &err) details := make(map[string]string) for k, v := range data.CommonLabels { details[k] = v } for k, v := range n.conf.Details { details[k] = tmpl(v) } requests := []*http.Request{} var ( alias = key.Hash() alerts = types.Alerts(as...) ) switch alerts.Status() { case model.AlertResolved: resolvedEndpointURL := n.conf.APIURL.Copy() resolvedEndpointURL.Path += fmt.Sprintf("v2/alerts/%s/close", alias) q := resolvedEndpointURL.Query() q.Set("identifierType", "alias") resolvedEndpointURL.RawQuery = q.Encode() msg := &opsGenieCloseMessage{Source: tmpl(n.conf.Source)} var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(msg); err != nil { return nil, false, err } req, err := http.NewRequest("POST", resolvedEndpointURL.String(), &buf) if err != nil { return nil, true, err } requests = append(requests, req.WithContext(ctx)) default: message, truncated := notify.TruncateInRunes(tmpl(n.conf.Message), maxMessageLenRunes) if truncated { n.logger.Warn("Truncated message", "alert", key, "max_runes", maxMessageLenRunes) } createEndpointURL := n.conf.APIURL.Copy() createEndpointURL.Path += "v2/alerts" var responders []opsGenieCreateMessageResponder for _, r := range n.conf.Responders { responder := opsGenieCreateMessageResponder{ ID: tmpl(r.ID), Name: tmpl(r.Name), Username: tmpl(r.Username), Type: tmpl(r.Type), } if responder == (opsGenieCreateMessageResponder{}) { // Filter out empty responders. This is useful if you want to fill // responders dynamically from alert's common labels. continue } if responder.Type == "teams" { teams := safeSplit(responder.Name, ",") for _, team := range teams { newResponder := opsGenieCreateMessageResponder{ Name: tmpl(team), Type: tmpl("team"), } responders = append(responders, newResponder) } continue } responders = append(responders, responder) } msg := &opsGenieCreateMessage{ Alias: alias, Message: message, Description: tmpl(n.conf.Description), Details: details, Source: tmpl(n.conf.Source), Responders: responders, Tags: safeSplit(tmpl(n.conf.Tags), ","), Note: tmpl(n.conf.Note), Priority: tmpl(n.conf.Priority), Entity: tmpl(n.conf.Entity), Actions: safeSplit(tmpl(n.conf.Actions), ","), } var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(msg); err != nil { return nil, false, err } req, err := http.NewRequest("POST", createEndpointURL.String(), &buf) if err != nil { return nil, true, err } requests = append(requests, req.WithContext(ctx)) if n.conf.UpdateAlerts { updateMessageEndpointURL := n.conf.APIURL.Copy() updateMessageEndpointURL.Path += fmt.Sprintf("v2/alerts/%s/message", alias) q := updateMessageEndpointURL.Query() q.Set("identifierType", "alias") updateMessageEndpointURL.RawQuery = q.Encode() updateMsgMsg := &opsGenieUpdateMessageMessage{ Message: msg.Message, } var updateMessageBuf bytes.Buffer if err := json.NewEncoder(&updateMessageBuf).Encode(updateMsgMsg); err != nil { return nil, false, err } req, err := http.NewRequest("PUT", updateMessageEndpointURL.String(), &updateMessageBuf) if err != nil { return nil, true, err } requests = append(requests, req) updateDescriptionEndpointURL := n.conf.APIURL.Copy() updateDescriptionEndpointURL.Path += fmt.Sprintf("v2/alerts/%s/description", alias) q = updateDescriptionEndpointURL.Query() q.Set("identifierType", "alias") updateDescriptionEndpointURL.RawQuery = q.Encode() updateDescMsg := &opsGenieUpdateDescriptionMessage{ Description: msg.Description, } var updateDescriptionBuf bytes.Buffer if err := json.NewEncoder(&updateDescriptionBuf).Encode(updateDescMsg); err != nil { return nil, false, err } req, err = http.NewRequest("PUT", updateDescriptionEndpointURL.String(), &updateDescriptionBuf) if err != nil { return nil, true, err } requests = append(requests, req.WithContext(ctx)) } } var apiKey string if n.conf.APIKey != "" { apiKey = tmpl(string(n.conf.APIKey)) } else { content, err := os.ReadFile(n.conf.APIKeyFile) if err != nil { return nil, false, fmt.Errorf("read key_file error: %w", err) } apiKey = tmpl(string(content)) apiKey = strings.TrimSpace(string(apiKey)) } if err != nil { return nil, false, fmt.Errorf("templating error: %w", err) } for _, req := range requests { req.Header.Set("Content-Type", "application/json") req.Header.Set("Authorization", fmt.Sprintf("GenieKey %s", apiKey)) } return requests, true, nil } prometheus-alertmanager-0.28.1+ds/notify/opsgenie/opsgenie_test.go000066400000000000000000000310321476331240200253600ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package opsgenie import ( "context" "fmt" "io" "net/http" "net/url" "os" "testing" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/notify/test" "github.com/prometheus/alertmanager/types" ) func TestOpsGenieRetry(t *testing.T) { notifier, err := New( &config.OpsGenieConfig{ HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) retryCodes := append(test.DefaultRetryCodes(), http.StatusTooManyRequests) for statusCode, expected := range test.RetryTests(retryCodes) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("error on status %d", statusCode)) } } func TestOpsGenieRedactedURL(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() key := "key" notifier, err := New( &config.OpsGenieConfig{ APIURL: &config.URL{URL: u}, APIKey: config.Secret(key), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, key) } func TestGettingOpsGegineApikeyFromFile(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() key := "key" f, err := os.CreateTemp("", "opsgenie_test") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString(key) require.NoError(t, err, "writing to temp file failed") notifier, err := New( &config.OpsGenieConfig{ APIURL: &config.URL{URL: u}, APIKeyFile: f.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, key) } func TestOpsGenie(t *testing.T) { u, err := url.Parse("https://opsgenie/api") if err != nil { t.Fatalf("failed to parse URL: %v", err) } logger := promslog.NewNopLogger() tmpl := test.CreateTmpl(t) for _, tc := range []struct { title string cfg *config.OpsGenieConfig expectedEmptyAlertBody string expectedBody string }{ { title: "config without details", cfg: &config.OpsGenieConfig{ NotifierConfig: config.NotifierConfig{ VSendResolved: true, }, Message: `{{ .CommonLabels.Message }}`, Description: `{{ .CommonLabels.Description }}`, Source: `{{ .CommonLabels.Source }}`, Responders: []config.OpsGenieConfigResponder{ { Name: `{{ .CommonLabels.ResponderName1 }}`, Type: `{{ .CommonLabels.ResponderType1 }}`, }, { Name: `{{ .CommonLabels.ResponderName2 }}`, Type: `{{ .CommonLabels.ResponderType2 }}`, }, }, Tags: `{{ .CommonLabels.Tags }}`, Note: `{{ .CommonLabels.Note }}`, Priority: `{{ .CommonLabels.Priority }}`, Entity: `{{ .CommonLabels.Entity }}`, Actions: `{{ .CommonLabels.Actions }}`, APIKey: `{{ .ExternalURL }}`, APIURL: &config.URL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, expectedEmptyAlertBody: `{"alias":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","message":"","details":{},"source":""} `, expectedBody: `{"alias":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","message":"message","description":"description","details":{"Actions":"doThis,doThat","Description":"description","Entity":"test-domain","Message":"message","Note":"this is a note","Priority":"P1","ResponderName1":"TeamA","ResponderName2":"EscalationA","ResponderName3":"TeamA,TeamB","ResponderType1":"team","ResponderType2":"escalation","ResponderType3":"teams","Source":"http://prometheus","Tags":"tag1,tag2"},"source":"http://prometheus","responders":[{"name":"TeamA","type":"team"},{"name":"EscalationA","type":"escalation"}],"tags":["tag1","tag2"],"note":"this is a note","priority":"P1","entity":"test-domain","actions":["doThis","doThat"]} `, }, { title: "config with details", cfg: &config.OpsGenieConfig{ NotifierConfig: config.NotifierConfig{ VSendResolved: true, }, Message: `{{ .CommonLabels.Message }}`, Description: `{{ .CommonLabels.Description }}`, Source: `{{ .CommonLabels.Source }}`, Details: map[string]string{ "Description": `adjusted {{ .CommonLabels.Description }}`, }, Responders: []config.OpsGenieConfigResponder{ { Name: `{{ .CommonLabels.ResponderName1 }}`, Type: `{{ .CommonLabels.ResponderType1 }}`, }, { Name: `{{ .CommonLabels.ResponderName2 }}`, Type: `{{ .CommonLabels.ResponderType2 }}`, }, }, Tags: `{{ .CommonLabels.Tags }}`, Note: `{{ .CommonLabels.Note }}`, Priority: `{{ .CommonLabels.Priority }}`, Entity: `{{ .CommonLabels.Entity }}`, Actions: `{{ .CommonLabels.Actions }}`, APIKey: `{{ .ExternalURL }}`, APIURL: &config.URL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, expectedEmptyAlertBody: `{"alias":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","message":"","details":{"Description":"adjusted "},"source":""} `, expectedBody: `{"alias":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","message":"message","description":"description","details":{"Actions":"doThis,doThat","Description":"adjusted description","Entity":"test-domain","Message":"message","Note":"this is a note","Priority":"P1","ResponderName1":"TeamA","ResponderName2":"EscalationA","ResponderName3":"TeamA,TeamB","ResponderType1":"team","ResponderType2":"escalation","ResponderType3":"teams","Source":"http://prometheus","Tags":"tag1,tag2"},"source":"http://prometheus","responders":[{"name":"TeamA","type":"team"},{"name":"EscalationA","type":"escalation"}],"tags":["tag1","tag2"],"note":"this is a note","priority":"P1","entity":"test-domain","actions":["doThis","doThat"]} `, }, { title: "config with multiple teams", cfg: &config.OpsGenieConfig{ NotifierConfig: config.NotifierConfig{ VSendResolved: true, }, Message: `{{ .CommonLabels.Message }}`, Description: `{{ .CommonLabels.Description }}`, Source: `{{ .CommonLabels.Source }}`, Details: map[string]string{ "Description": `adjusted {{ .CommonLabels.Description }}`, }, Responders: []config.OpsGenieConfigResponder{ { Name: `{{ .CommonLabels.ResponderName3 }}`, Type: `{{ .CommonLabels.ResponderType3 }}`, }, }, Tags: `{{ .CommonLabels.Tags }}`, Note: `{{ .CommonLabels.Note }}`, Priority: `{{ .CommonLabels.Priority }}`, APIKey: `{{ .ExternalURL }}`, APIURL: &config.URL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, expectedEmptyAlertBody: `{"alias":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","message":"","details":{"Description":"adjusted "},"source":""} `, expectedBody: `{"alias":"6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b","message":"message","description":"description","details":{"Actions":"doThis,doThat","Description":"adjusted description","Entity":"test-domain","Message":"message","Note":"this is a note","Priority":"P1","ResponderName1":"TeamA","ResponderName2":"EscalationA","ResponderName3":"TeamA,TeamB","ResponderType1":"team","ResponderType2":"escalation","ResponderType3":"teams","Source":"http://prometheus","Tags":"tag1,tag2"},"source":"http://prometheus","responders":[{"name":"TeamA","type":"team"},{"name":"TeamB","type":"team"}],"tags":["tag1","tag2"],"note":"this is a note","priority":"P1"} `, }, } { t.Run(tc.title, func(t *testing.T) { notifier, err := New(tc.cfg, tmpl, logger) require.NoError(t, err) ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") expectedURL, _ := url.Parse("https://opsgenie/apiv2/alerts") // Empty alert. alert1 := &types.Alert{ Alert: model.Alert{ StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, } req, retry, err := notifier.createRequests(ctx, alert1) require.NoError(t, err) require.Len(t, req, 1) require.True(t, retry) require.Equal(t, expectedURL, req[0].URL) require.Equal(t, "GenieKey http://am", req[0].Header.Get("Authorization")) require.Equal(t, tc.expectedEmptyAlertBody, readBody(t, req[0])) // Fully defined alert. alert2 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "Message": "message", "Description": "description", "Source": "http://prometheus", "ResponderName1": "TeamA", "ResponderType1": "team", "ResponderName2": "EscalationA", "ResponderType2": "escalation", "ResponderName3": "TeamA,TeamB", "ResponderType3": "teams", "Tags": "tag1,tag2", "Note": "this is a note", "Priority": "P1", "Entity": "test-domain", "Actions": "doThis,doThat", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, } req, retry, err = notifier.createRequests(ctx, alert2) require.NoError(t, err) require.True(t, retry) require.Len(t, req, 1) require.Equal(t, tc.expectedBody, readBody(t, req[0])) // Broken API Key Template. tc.cfg.APIKey = "{{ kaput " _, _, err = notifier.createRequests(ctx, alert2) require.Error(t, err) require.Equal(t, "templating error: template: :1: function \"kaput\" not defined", err.Error()) }) } } func TestOpsGenieWithUpdate(t *testing.T) { u, err := url.Parse("https://test-opsgenie-url") require.NoError(t, err) tmpl := test.CreateTmpl(t) ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") opsGenieConfigWithUpdate := config.OpsGenieConfig{ Message: `{{ .CommonLabels.Message }}`, Description: `{{ .CommonLabels.Description }}`, UpdateAlerts: true, APIKey: "test-api-key", APIURL: &config.URL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, } notifierWithUpdate, err := New(&opsGenieConfigWithUpdate, tmpl, promslog.NewNopLogger()) alert := &types.Alert{ Alert: model.Alert{ StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), Labels: model.LabelSet{ "Message": "new message", "Description": "new description", }, }, } require.NoError(t, err) requests, retry, err := notifierWithUpdate.createRequests(ctx, alert) require.NoError(t, err) require.True(t, retry) require.Len(t, requests, 3) body0 := readBody(t, requests[0]) body1 := readBody(t, requests[1]) body2 := readBody(t, requests[2]) key, _ := notify.ExtractGroupKey(ctx) alias := key.Hash() require.Equal(t, "https://test-opsgenie-url/v2/alerts", requests[0].URL.String()) require.NotEmpty(t, body0) require.Equal(t, requests[1].URL.String(), fmt.Sprintf("https://test-opsgenie-url/v2/alerts/%s/message?identifierType=alias", alias)) require.Equal(t, `{"message":"new message"} `, body1) require.Equal(t, requests[2].URL.String(), fmt.Sprintf("https://test-opsgenie-url/v2/alerts/%s/description?identifierType=alias", alias)) require.Equal(t, `{"description":"new description"} `, body2) } func TestOpsGenieApiKeyFile(t *testing.T) { u, err := url.Parse("https://test-opsgenie-url") require.NoError(t, err) tmpl := test.CreateTmpl(t) ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") opsGenieConfigWithUpdate := config.OpsGenieConfig{ APIKeyFile: `./api_key_file`, APIURL: &config.URL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, } notifierWithUpdate, err := New(&opsGenieConfigWithUpdate, tmpl, promslog.NewNopLogger()) require.NoError(t, err) requests, _, err := notifierWithUpdate.createRequests(ctx) require.NoError(t, err) require.Equal(t, "GenieKey my_secret_api_key", requests[0].Header.Get("Authorization")) } func readBody(t *testing.T, r *http.Request) string { t.Helper() body, err := io.ReadAll(r.Body) require.NoError(t, err) return string(body) } prometheus-alertmanager-0.28.1+ds/notify/pagerduty/000077500000000000000000000000001476331240200223555ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/pagerduty/pagerduty.go000066400000000000000000000251241476331240200247140ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package pagerduty import ( "bytes" "context" "encoding/json" "errors" "fmt" "io" "log/slog" "net/http" "os" "strings" "github.com/alecthomas/units" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) const ( maxEventSize int = 512000 // https://developer.pagerduty.com/docs/ZG9jOjExMDI5NTc4-send-a-v1-event - 1024 characters or runes. maxV1DescriptionLenRunes = 1024 // https://developer.pagerduty.com/docs/ZG9jOjExMDI5NTgx-send-an-alert-event - 1024 characters or runes. maxV2SummaryLenRunes = 1024 ) // Notifier implements a Notifier for PagerDuty notifications. type Notifier struct { conf *config.PagerdutyConfig tmpl *template.Template logger *slog.Logger apiV1 string // for tests. client *http.Client retrier *notify.Retrier } // New returns a new PagerDuty notifier. func New(c *config.PagerdutyConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "pagerduty", httpOpts...) if err != nil { return nil, err } n := &Notifier{conf: c, tmpl: t, logger: l, client: client} if c.ServiceKey != "" || c.ServiceKeyFile != "" { n.apiV1 = "https://events.pagerduty.com/generic/2010-04-15/create_event.json" // Retrying can solve the issue on 403 (rate limiting) and 5xx response codes. // https://v2.developer.pagerduty.com/docs/trigger-events n.retrier = ¬ify.Retrier{RetryCodes: []int{http.StatusForbidden}, CustomDetailsFunc: errDetails} } else { // Retrying can solve the issue on 429 (rate limiting) and 5xx response codes. // https://v2.developer.pagerduty.com/docs/events-api-v2#api-response-codes--retry-logic n.retrier = ¬ify.Retrier{RetryCodes: []int{http.StatusTooManyRequests}, CustomDetailsFunc: errDetails} } return n, nil } const ( pagerDutyEventTrigger = "trigger" pagerDutyEventResolve = "resolve" ) type pagerDutyMessage struct { RoutingKey string `json:"routing_key,omitempty"` ServiceKey string `json:"service_key,omitempty"` DedupKey string `json:"dedup_key,omitempty"` IncidentKey string `json:"incident_key,omitempty"` EventType string `json:"event_type,omitempty"` Description string `json:"description,omitempty"` EventAction string `json:"event_action"` Payload *pagerDutyPayload `json:"payload"` Client string `json:"client,omitempty"` ClientURL string `json:"client_url,omitempty"` Details map[string]string `json:"details,omitempty"` Images []pagerDutyImage `json:"images,omitempty"` Links []pagerDutyLink `json:"links,omitempty"` } type pagerDutyLink struct { HRef string `json:"href"` Text string `json:"text"` } type pagerDutyImage struct { Src string `json:"src"` Alt string `json:"alt"` Href string `json:"href"` } type pagerDutyPayload struct { Summary string `json:"summary"` Source string `json:"source"` Severity string `json:"severity"` Timestamp string `json:"timestamp,omitempty"` Class string `json:"class,omitempty"` Component string `json:"component,omitempty"` Group string `json:"group,omitempty"` CustomDetails map[string]string `json:"custom_details,omitempty"` } func (n *Notifier) encodeMessage(msg *pagerDutyMessage) (bytes.Buffer, error) { var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(msg); err != nil { return buf, fmt.Errorf("failed to encode PagerDuty message: %w", err) } if buf.Len() > maxEventSize { truncatedMsg := fmt.Sprintf("Custom details have been removed because the original event exceeds the maximum size of %s", units.MetricBytes(maxEventSize).String()) if n.apiV1 != "" { msg.Details = map[string]string{"error": truncatedMsg} } else { msg.Payload.CustomDetails = map[string]string{"error": truncatedMsg} } warningMsg := fmt.Sprintf("Truncated Details because message of size %s exceeds limit %s", units.MetricBytes(buf.Len()).String(), units.MetricBytes(maxEventSize).String()) n.logger.Warn(warningMsg) buf.Reset() if err := json.NewEncoder(&buf).Encode(msg); err != nil { return buf, fmt.Errorf("failed to encode PagerDuty message: %w", err) } } return buf, nil } func (n *Notifier) notifyV1( ctx context.Context, eventType string, key notify.Key, data *template.Data, details map[string]string, as ...*types.Alert, ) (bool, error) { var tmplErr error tmpl := notify.TmplText(n.tmpl, data, &tmplErr) description, truncated := notify.TruncateInRunes(tmpl(n.conf.Description), maxV1DescriptionLenRunes) if truncated { n.logger.Warn("Truncated description", "key", key, "max_runes", maxV1DescriptionLenRunes) } serviceKey := string(n.conf.ServiceKey) if serviceKey == "" { content, fileErr := os.ReadFile(n.conf.ServiceKeyFile) if fileErr != nil { return false, fmt.Errorf("failed to read service key from file: %w", fileErr) } serviceKey = strings.TrimSpace(string(content)) } msg := &pagerDutyMessage{ ServiceKey: tmpl(serviceKey), EventType: eventType, IncidentKey: key.Hash(), Description: description, Details: details, } if eventType == pagerDutyEventTrigger { msg.Client = tmpl(n.conf.Client) msg.ClientURL = tmpl(n.conf.ClientURL) } if tmplErr != nil { return false, fmt.Errorf("failed to template PagerDuty v1 message: %w", tmplErr) } // Ensure that the service key isn't empty after templating. if msg.ServiceKey == "" { return false, errors.New("service key cannot be empty") } encodedMsg, err := n.encodeMessage(msg) if err != nil { return false, err } resp, err := notify.PostJSON(ctx, n.client, n.apiV1, &encodedMsg) if err != nil { return true, fmt.Errorf("failed to post message to PagerDuty v1: %w", err) } defer notify.Drain(resp) return n.retrier.Check(resp.StatusCode, resp.Body) } func (n *Notifier) notifyV2( ctx context.Context, eventType string, key notify.Key, data *template.Data, details map[string]string, as ...*types.Alert, ) (bool, error) { var tmplErr error tmpl := notify.TmplText(n.tmpl, data, &tmplErr) if n.conf.Severity == "" { n.conf.Severity = "error" } summary, truncated := notify.TruncateInRunes(tmpl(n.conf.Description), maxV2SummaryLenRunes) if truncated { n.logger.Warn("Truncated summary", "key", key, "max_runes", maxV2SummaryLenRunes) } routingKey := string(n.conf.RoutingKey) if routingKey == "" { content, fileErr := os.ReadFile(n.conf.RoutingKeyFile) if fileErr != nil { return false, fmt.Errorf("failed to read routing key from file: %w", fileErr) } routingKey = strings.TrimSpace(string(content)) } msg := &pagerDutyMessage{ Client: tmpl(n.conf.Client), ClientURL: tmpl(n.conf.ClientURL), RoutingKey: tmpl(routingKey), EventAction: eventType, DedupKey: key.Hash(), Images: make([]pagerDutyImage, 0, len(n.conf.Images)), Links: make([]pagerDutyLink, 0, len(n.conf.Links)), Payload: &pagerDutyPayload{ Summary: summary, Source: tmpl(n.conf.Source), Severity: tmpl(n.conf.Severity), CustomDetails: details, Class: tmpl(n.conf.Class), Component: tmpl(n.conf.Component), Group: tmpl(n.conf.Group), }, } for _, item := range n.conf.Images { image := pagerDutyImage{ Src: tmpl(item.Src), Alt: tmpl(item.Alt), Href: tmpl(item.Href), } if image.Src != "" { msg.Images = append(msg.Images, image) } } for _, item := range n.conf.Links { link := pagerDutyLink{ HRef: tmpl(item.Href), Text: tmpl(item.Text), } if link.HRef != "" { msg.Links = append(msg.Links, link) } } if tmplErr != nil { return false, fmt.Errorf("failed to template PagerDuty v2 message: %w", tmplErr) } // Ensure that the routing key isn't empty after templating. if msg.RoutingKey == "" { return false, errors.New("routing key cannot be empty") } encodedMsg, err := n.encodeMessage(msg) if err != nil { return false, err } resp, err := notify.PostJSON(ctx, n.client, n.conf.URL.String(), &encodedMsg) if err != nil { return true, fmt.Errorf("failed to post message to PagerDuty: %w", err) } defer notify.Drain(resp) retry, err := n.retrier.Check(resp.StatusCode, resp.Body) if err != nil { return retry, notify.NewErrorWithReason(notify.GetFailureReasonFromStatusCode(resp.StatusCode), err) } return retry, err } // Notify implements the Notifier interface. func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { key, err := notify.ExtractGroupKey(ctx) if err != nil { return false, err } var ( alerts = types.Alerts(as...) data = notify.GetTemplateData(ctx, n.tmpl, as, n.logger) eventType = pagerDutyEventTrigger ) if alerts.Status() == model.AlertResolved { eventType = pagerDutyEventResolve } n.logger.Debug("extracted group key", "key", key, "eventType", eventType) details := make(map[string]string, len(n.conf.Details)) for k, v := range n.conf.Details { detail, err := n.tmpl.ExecuteTextString(v, data) if err != nil { return false, fmt.Errorf("%q: failed to template %q: %w", k, v, err) } details[k] = detail } if n.apiV1 != "" { return n.notifyV1(ctx, eventType, key, data, details, as...) } return n.notifyV2(ctx, eventType, key, data, details, as...) } func errDetails(status int, body io.Reader) string { // See https://v2.developer.pagerduty.com/docs/trigger-events for the v1 events API. // See https://v2.developer.pagerduty.com/docs/send-an-event-events-api-v2 for the v2 events API. if status != http.StatusBadRequest || body == nil { return "" } var pgr struct { Status string `json:"status"` Message string `json:"message"` Errors []string `json:"errors"` } if err := json.NewDecoder(body).Decode(&pgr); err != nil { return "" } return fmt.Sprintf("%s: %s", pgr.Message, strings.Join(pgr.Errors, ",")) } prometheus-alertmanager-0.28.1+ds/notify/pagerduty/pagerduty_test.go000066400000000000000000000307561476331240200257620ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package pagerduty import ( "bytes" "context" "encoding/json" "fmt" "io" "net/http" "net/http/httptest" "net/url" "os" "strings" "testing" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/notify/test" "github.com/prometheus/alertmanager/types" ) func TestPagerDutyRetryV1(t *testing.T) { notifier, err := New( &config.PagerdutyConfig{ ServiceKey: config.Secret("01234567890123456789012345678901"), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) retryCodes := append(test.DefaultRetryCodes(), http.StatusForbidden) for statusCode, expected := range test.RetryTests(retryCodes) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("retryv1 - error on status %d", statusCode)) } } func TestPagerDutyRetryV2(t *testing.T) { notifier, err := New( &config.PagerdutyConfig{ RoutingKey: config.Secret("01234567890123456789012345678901"), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) retryCodes := append(test.DefaultRetryCodes(), http.StatusTooManyRequests) for statusCode, expected := range test.RetryTests(retryCodes) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("retryv2 - error on status %d", statusCode)) } } func TestPagerDutyRedactedURLV1(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() key := "01234567890123456789012345678901" notifier, err := New( &config.PagerdutyConfig{ ServiceKey: config.Secret(key), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) notifier.apiV1 = u.String() test.AssertNotifyLeaksNoSecret(ctx, t, notifier, key) } func TestPagerDutyRedactedURLV2(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() key := "01234567890123456789012345678901" notifier, err := New( &config.PagerdutyConfig{ URL: &config.URL{URL: u}, RoutingKey: config.Secret(key), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, key) } func TestPagerDutyV1ServiceKeyFromFile(t *testing.T) { key := "01234567890123456789012345678901" f, err := os.CreateTemp("", "pagerduty_test") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString(key) require.NoError(t, err, "writing to temp file failed") ctx, u, fn := test.GetContextWithCancelingURL() defer fn() notifier, err := New( &config.PagerdutyConfig{ ServiceKeyFile: f.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) notifier.apiV1 = u.String() test.AssertNotifyLeaksNoSecret(ctx, t, notifier, key) } func TestPagerDutyV2RoutingKeyFromFile(t *testing.T) { key := "01234567890123456789012345678901" f, err := os.CreateTemp("", "pagerduty_test") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString(key) require.NoError(t, err, "writing to temp file failed") ctx, u, fn := test.GetContextWithCancelingURL() defer fn() notifier, err := New( &config.PagerdutyConfig{ URL: &config.URL{URL: u}, RoutingKeyFile: f.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, key) } func TestPagerDutyTemplating(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { dec := json.NewDecoder(r.Body) out := make(map[string]interface{}) err := dec.Decode(&out) if err != nil { panic(err) } })) defer srv.Close() u, _ := url.Parse(srv.URL) for _, tc := range []struct { title string cfg *config.PagerdutyConfig retry bool errMsg string }{ { title: "full-blown message", cfg: &config.PagerdutyConfig{ RoutingKey: config.Secret("01234567890123456789012345678901"), Images: []config.PagerdutyImage{ { Src: "{{ .Status }}", Alt: "{{ .Status }}", Href: "{{ .Status }}", }, }, Links: []config.PagerdutyLink{ { Href: "{{ .Status }}", Text: "{{ .Status }}", }, }, Details: map[string]string{ "firing": `{{ template "pagerduty.default.instances" .Alerts.Firing }}`, "resolved": `{{ template "pagerduty.default.instances" .Alerts.Resolved }}`, "num_firing": `{{ .Alerts.Firing | len }}`, "num_resolved": `{{ .Alerts.Resolved | len }}`, }, }, }, { title: "details with templating errors", cfg: &config.PagerdutyConfig{ RoutingKey: config.Secret("01234567890123456789012345678901"), Details: map[string]string{ "firing": `{{ template "pagerduty.default.instances" .Alerts.Firing`, "resolved": `{{ template "pagerduty.default.instances" .Alerts.Resolved }}`, "num_firing": `{{ .Alerts.Firing | len }}`, "num_resolved": `{{ .Alerts.Resolved | len }}`, }, }, errMsg: "failed to template", }, { title: "v2 message with templating errors", cfg: &config.PagerdutyConfig{ RoutingKey: config.Secret("01234567890123456789012345678901"), Severity: "{{ ", }, errMsg: "failed to template", }, { title: "v1 message with templating errors", cfg: &config.PagerdutyConfig{ ServiceKey: config.Secret("01234567890123456789012345678901"), Client: "{{ ", }, errMsg: "failed to template", }, { title: "routing key cannot be empty", cfg: &config.PagerdutyConfig{ RoutingKey: config.Secret(`{{ "" }}`), }, errMsg: "routing key cannot be empty", }, { title: "service_key cannot be empty", cfg: &config.PagerdutyConfig{ ServiceKey: config.Secret(`{{ "" }}`), }, errMsg: "service key cannot be empty", }, } { t.Run(tc.title, func(t *testing.T) { tc.cfg.URL = &config.URL{URL: u} tc.cfg.HTTPConfig = &commoncfg.HTTPClientConfig{} pd, err := New(tc.cfg, test.CreateTmpl(t), promslog.NewNopLogger()) require.NoError(t, err) if pd.apiV1 != "" { pd.apiV1 = u.String() } ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") ok, err := pd.Notify(ctx, []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "lbl1": "val1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }...) if tc.errMsg == "" { require.NoError(t, err) } else { require.Error(t, err) require.Contains(t, err.Error(), tc.errMsg) } require.Equal(t, tc.retry, ok) }) } } func TestErrDetails(t *testing.T) { for _, tc := range []struct { status int body io.Reader exp string }{ { status: http.StatusBadRequest, body: bytes.NewBuffer([]byte( `{"status":"invalid event","message":"Event object is invalid","errors":["Length of 'routing_key' is incorrect (should be 32 characters)"]}`, )), exp: "Length of 'routing_key' is incorrect", }, { status: http.StatusBadRequest, body: bytes.NewBuffer([]byte(`{"status"}`)), exp: "", }, { status: http.StatusBadRequest, exp: "", }, { status: http.StatusTooManyRequests, exp: "", }, } { tc := tc t.Run("", func(t *testing.T) { err := errDetails(tc.status, tc.body) require.Contains(t, err, tc.exp) }) } } func TestEventSizeEnforcement(t *testing.T) { bigDetails := map[string]string{ "firing": strings.Repeat("a", 513000), } // V1 Messages msgV1 := &pagerDutyMessage{ ServiceKey: "01234567890123456789012345678901", EventType: "trigger", Details: bigDetails, } notifierV1, err := New( &config.PagerdutyConfig{ ServiceKey: config.Secret("01234567890123456789012345678901"), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) encodedV1, err := notifierV1.encodeMessage(msgV1) require.NoError(t, err) require.Contains(t, encodedV1.String(), `"details":{"error":"Custom details have been removed because the original event exceeds the maximum size of 512KB"}`) // V2 Messages msgV2 := &pagerDutyMessage{ RoutingKey: "01234567890123456789012345678901", EventAction: "trigger", Payload: &pagerDutyPayload{ CustomDetails: bigDetails, }, } notifierV2, err := New( &config.PagerdutyConfig{ RoutingKey: config.Secret("01234567890123456789012345678901"), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) encodedV2, err := notifierV2.encodeMessage(msgV2) require.NoError(t, err) require.Contains(t, encodedV2.String(), `"custom_details":{"error":"Custom details have been removed because the original event exceeds the maximum size of 512KB"}`) } func TestPagerDutyEmptySrcHref(t *testing.T) { type pagerDutyEvent struct { RoutingKey string `json:"routing_key"` EventAction string `json:"event_action"` DedupKey string `json:"dedup_key"` Payload pagerDutyPayload `json:"payload"` Images []pagerDutyImage Links []pagerDutyLink } images := []config.PagerdutyImage{ { Src: "", Alt: "Empty src", Href: "https://example.com/", }, { Src: "https://example.com/cat.jpg", Alt: "Empty href", Href: "", }, { Src: "https://example.com/cat.jpg", Alt: "", Href: "https://example.com/", }, } links := []config.PagerdutyLink{ { Href: "", Text: "Empty href", }, { Href: "https://example.com/", Text: "", }, } expectedImages := make([]pagerDutyImage, 0, len(images)) for _, image := range images { if image.Src == "" { continue } expectedImages = append(expectedImages, pagerDutyImage{ Src: image.Src, Alt: image.Alt, Href: image.Href, }) } expectedLinks := make([]pagerDutyLink, 0, len(links)) for _, link := range links { if link.Href == "" { continue } expectedLinks = append(expectedLinks, pagerDutyLink{ HRef: link.Href, Text: link.Text, }) } server := httptest.NewServer(http.HandlerFunc( func(w http.ResponseWriter, r *http.Request) { decoder := json.NewDecoder(r.Body) var event pagerDutyEvent if err := decoder.Decode(&event); err != nil { panic(err) } if event.RoutingKey == "" || event.EventAction == "" { http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest) return } for _, image := range event.Images { if image.Src == "" { http.Error(w, "Event object is invalid: 'image src' is missing or blank", http.StatusBadRequest) return } } for _, link := range event.Links { if link.HRef == "" { http.Error(w, "Event object is invalid: 'link href' is missing or blank", http.StatusBadRequest) return } } require.Equal(t, expectedImages, event.Images) require.Equal(t, expectedLinks, event.Links) }, )) defer server.Close() url, err := url.Parse(server.URL) require.NoError(t, err) pagerDutyConfig := config.PagerdutyConfig{ HTTPConfig: &commoncfg.HTTPClientConfig{}, RoutingKey: config.Secret("01234567890123456789012345678901"), URL: &config.URL{URL: url}, Images: images, Links: links, } pagerDuty, err := New(&pagerDutyConfig, test.CreateTmpl(t), promslog.NewNopLogger()) require.NoError(t, err) ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") _, err = pagerDuty.Notify(ctx, []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "lbl1": "val1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }...) require.NoError(t, err) } prometheus-alertmanager-0.28.1+ds/notify/pushover/000077500000000000000000000000001476331240200222245ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/pushover/pushover.go000066400000000000000000000120331476331240200244250ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package pushover import ( "context" "fmt" "log/slog" "net/http" "net/url" "os" "strings" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) const ( // https://pushover.net/api#limits - 250 characters or runes. maxTitleLenRunes = 250 // https://pushover.net/api#limits - 1024 characters or runes. maxMessageLenRunes = 1024 // https://pushover.net/api#limits - 512 characters or runes. maxURLLenRunes = 512 ) // Notifier implements a Notifier for Pushover notifications. type Notifier struct { conf *config.PushoverConfig tmpl *template.Template logger *slog.Logger client *http.Client retrier *notify.Retrier apiURL string // for tests. } // New returns a new Pushover notifier. func New(c *config.PushoverConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "pushover", httpOpts...) if err != nil { return nil, err } return &Notifier{ conf: c, tmpl: t, logger: l, client: client, retrier: ¬ify.Retrier{}, apiURL: "https://api.pushover.net/1/messages.json", }, nil } // Notify implements the Notifier interface. func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { key, ok := notify.GroupKey(ctx) if !ok { return false, fmt.Errorf("group key missing") } data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger) // @tjhop: should this use `group` for the keyval like most other notify implementations? n.logger.Debug("extracted group key", "incident", key) var ( err error message string ) tmpl := notify.TmplText(n.tmpl, data, &err) tmplHTML := notify.TmplHTML(n.tmpl, data, &err) var ( token string userKey string ) if n.conf.Token != "" { token = string(n.conf.Token) } else { content, err := os.ReadFile(n.conf.TokenFile) if err != nil { return false, fmt.Errorf("read token_file: %w", err) } token = string(content) } if n.conf.UserKey != "" { userKey = string(n.conf.UserKey) } else { content, err := os.ReadFile(n.conf.UserKeyFile) if err != nil { return false, fmt.Errorf("read user_key_file: %w", err) } userKey = string(content) } parameters := url.Values{} parameters.Add("token", tmpl(token)) parameters.Add("user", tmpl(userKey)) title, truncated := notify.TruncateInRunes(tmpl(n.conf.Title), maxTitleLenRunes) if truncated { n.logger.Warn("Truncated title", "incident", key, "max_runes", maxTitleLenRunes) } parameters.Add("title", title) if n.conf.HTML { parameters.Add("html", "1") message = tmplHTML(n.conf.Message) } else { message = tmpl(n.conf.Message) } message, truncated = notify.TruncateInRunes(message, maxMessageLenRunes) if truncated { n.logger.Warn("Truncated message", "incident", key, "max_runes", maxMessageLenRunes) } message = strings.TrimSpace(message) if message == "" { // Pushover rejects empty messages. message = "(no details)" } parameters.Add("message", message) supplementaryURL, truncated := notify.TruncateInRunes(tmpl(n.conf.URL), maxURLLenRunes) if truncated { n.logger.Warn("Truncated URL", "incident", key, "max_runes", maxURLLenRunes) } parameters.Add("url", supplementaryURL) parameters.Add("url_title", tmpl(n.conf.URLTitle)) parameters.Add("priority", tmpl(n.conf.Priority)) parameters.Add("retry", fmt.Sprintf("%d", int64(time.Duration(n.conf.Retry).Seconds()))) parameters.Add("expire", fmt.Sprintf("%d", int64(time.Duration(n.conf.Expire).Seconds()))) parameters.Add("device", tmpl(n.conf.Device)) parameters.Add("sound", tmpl(n.conf.Sound)) newttl := int64(time.Duration(n.conf.TTL).Seconds()) if newttl > 0 { parameters.Add("ttl", fmt.Sprintf("%d", newttl)) } if err != nil { return false, err } u, err := url.Parse(n.apiURL) if err != nil { return false, err } u.RawQuery = parameters.Encode() // Don't log the URL as it contains secret data (see #1825). n.logger.Debug("Sending message", "incident", key) resp, err := notify.PostText(ctx, n.client, u.String(), nil) if err != nil { return true, notify.RedactURL(err) } defer notify.Drain(resp) shouldRetry, err := n.retrier.Check(resp.StatusCode, resp.Body) if err != nil { return shouldRetry, notify.NewErrorWithReason(notify.GetFailureReasonFromStatusCode(resp.StatusCode), err) } return shouldRetry, err } prometheus-alertmanager-0.28.1+ds/notify/pushover/pushover_test.go000066400000000000000000000061201476331240200254640ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package pushover import ( "fmt" "os" "testing" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify/test" ) func TestPushoverRetry(t *testing.T) { notifier, err := New( &config.PushoverConfig{ HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) for statusCode, expected := range test.RetryTests(test.DefaultRetryCodes()) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("error on status %d", statusCode)) } } func TestPushoverRedactedURL(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() key, token := "user_key", "token" notifier, err := New( &config.PushoverConfig{ UserKey: config.Secret(key), Token: config.Secret(token), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) notifier.apiURL = u.String() test.AssertNotifyLeaksNoSecret(ctx, t, notifier, key, token) } func TestPushoverReadingUserKeyFromFile(t *testing.T) { ctx, apiURL, fn := test.GetContextWithCancelingURL() defer fn() const userKey = "user key" f, err := os.CreateTemp("", "pushover_user_key") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString(userKey) require.NoError(t, err, "writing to temp file failed") notifier, err := New( &config.PushoverConfig{ UserKeyFile: f.Name(), Token: config.Secret("token"), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) notifier.apiURL = apiURL.String() require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, userKey) } func TestPushoverReadingTokenFromFile(t *testing.T) { ctx, apiURL, fn := test.GetContextWithCancelingURL() defer fn() const token = "token" f, err := os.CreateTemp("", "pushover_token") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString(token) require.NoError(t, err, "writing to temp file failed") notifier, err := New( &config.PushoverConfig{ UserKey: config.Secret("user key"), TokenFile: f.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) notifier.apiURL = apiURL.String() require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, token) } prometheus-alertmanager-0.28.1+ds/notify/rocketchat/000077500000000000000000000000001476331240200225005ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/rocketchat/rocketchat.go000066400000000000000000000203441476331240200251610ustar00rootroot00000000000000// Copyright 2022 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package rocketchat import ( "bytes" "context" "encoding/json" "fmt" "io" "log/slog" "net/http" "os" "strings" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) const maxTitleLenRunes = 1024 type Notifier struct { conf *config.RocketchatConfig tmpl *template.Template logger *slog.Logger client *http.Client retrier *notify.Retrier token string tokenID string postJSONFunc func(ctx context.Context, client *http.Client, url string, body io.Reader) (*http.Response, error) } // PostMessage Payload for postmessage rest API // // https://rocket.chat/docs/developer-guides/rest-api/chat/postmessage/ type Attachment struct { Title string `json:"title,omitempty"` TitleLink string `json:"title_link,omitempty"` Text string `json:"text,omitempty"` ImageURL string `json:"image_url,omitempty"` ThumbURL string `json:"thumb_url,omitempty"` Color string `json:"color,omitempty"` Fields []config.RocketchatAttachmentField `json:"fields,omitempty"` Actions []config.RocketchatAttachmentAction `json:"actions,omitempty"` } // PostMessage Payload for postmessage rest API // // https://rocket.chat/docs/developer-guides/rest-api/chat/postmessage/ type PostMessage struct { Channel string `json:"channel,omitempty"` Text string `json:"text,omitempty"` ParseUrls bool `json:"parseUrls,omitempty"` Alias string `json:"alias,omitempty"` Emoji string `json:"emoji,omitempty"` Avatar string `json:"avatar,omitempty"` Attachments []Attachment `json:"attachments,omitempty"` Actions []config.RocketchatAttachmentAction `json:"actions,omitempty"` } type rocketchatRoundTripper struct { wrapped http.RoundTripper token string tokenID string } func (t *rocketchatRoundTripper) RoundTrip(req *http.Request) (res *http.Response, e error) { req.Header.Set("X-Auth-Token", t.token) req.Header.Set("X-User-Id", t.tokenID) return t.wrapped.RoundTrip(req) } // New returns a new Rocketchat notification handler. func New(c *config.RocketchatConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "rocketchat", httpOpts...) if err != nil { return nil, err } token, err := getToken(c) if err != nil { return nil, err } tokenID, err := getTokenID(c) if err != nil { return nil, err } client.Transport = &rocketchatRoundTripper{wrapped: client.Transport, token: token, tokenID: tokenID} return &Notifier{ conf: c, tmpl: t, logger: l, client: client, retrier: ¬ify.Retrier{}, postJSONFunc: notify.PostJSON, token: token, tokenID: tokenID, }, nil } func getTokenID(c *config.RocketchatConfig) (string, error) { if len(c.TokenIDFile) > 0 { content, err := os.ReadFile(c.TokenIDFile) if err != nil { return "", fmt.Errorf("could not read %s: %w", c.TokenIDFile, err) } return strings.TrimSpace(string(content)), nil } return string(*c.TokenID), nil } func getToken(c *config.RocketchatConfig) (string, error) { if len(c.TokenFile) > 0 { content, err := os.ReadFile(c.TokenFile) if err != nil { return "", fmt.Errorf("could not read %s: %w", c.TokenFile, err) } return strings.TrimSpace(string(content)), nil } return string(*c.Token), nil } // Notify implements the Notifier interface. func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { var err error data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger) tmplText := notify.TmplText(n.tmpl, data, &err) if err != nil { return false, err } title := tmplText(n.conf.Title) if err != nil { return false, err } title, truncated := notify.TruncateInRunes(title, maxTitleLenRunes) if truncated { key, err := notify.ExtractGroupKey(ctx) if err != nil { return false, err } n.logger.Warn("Truncated title", "key", key, "max_runes", maxTitleLenRunes) } att := &Attachment{ Title: title, TitleLink: tmplText(n.conf.TitleLink), Text: tmplText(n.conf.Text), ImageURL: tmplText(n.conf.ImageURL), ThumbURL: tmplText(n.conf.ThumbURL), Color: tmplText(n.conf.Color), } numFields := len(n.conf.Fields) if numFields > 0 { fields := make([]config.RocketchatAttachmentField, numFields) for index, field := range n.conf.Fields { // Check if short was defined for the field otherwise fallback to the global setting var short bool if field.Short != nil { short = *field.Short } else { short = n.conf.ShortFields } // Rebuild the field by executing any templates and setting the new value for short fields[index] = config.RocketchatAttachmentField{ Title: tmplText(field.Title), Value: tmplText(field.Value), Short: &short, } } att.Fields = fields } numActions := len(n.conf.Actions) if numActions > 0 { actions := make([]config.RocketchatAttachmentAction, numActions) for index, action := range n.conf.Actions { actions[index] = config.RocketchatAttachmentAction{ Type: "button", // Only button type is supported Text: tmplText(action.Text), URL: tmplText(action.URL), Msg: tmplText(action.Msg), } } att.Actions = actions } body := &PostMessage{ Channel: tmplText(n.conf.Channel), Emoji: tmplText(n.conf.Emoji), Avatar: tmplText(n.conf.IconURL), Attachments: []Attachment{*att}, } if err != nil { return false, err } var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(body); err != nil { return false, err } url := n.conf.APIURL.JoinPath("api/v1/chat.postMessage").String() resp, err := n.postJSONFunc(ctx, n.client, url, &buf) if err != nil { return true, notify.RedactURL(err) } defer notify.Drain(resp) // Use a retrier to generate an error message for non-200 responses and // classify them as retriable or not. retry, err := n.retrier.Check(resp.StatusCode, resp.Body) if err != nil { err = fmt.Errorf("channel %q: %w", body.Channel, err) return retry, notify.NewErrorWithReason(notify.GetFailureReasonFromStatusCode(resp.StatusCode), err) } // Rocketchat web API might return errors with a 200 response code. retry, err = checkResponseError(resp) if err != nil { err = fmt.Errorf("channel %q: %w", body.Channel, err) return retry, notify.NewErrorWithReason(notify.ClientErrorReason, err) } return retry, nil } // checkResponseError parses out the error message from Rocketchat API response. func checkResponseError(resp *http.Response) (bool, error) { body, err := io.ReadAll(resp.Body) if err != nil { return true, fmt.Errorf("could not read response body: %w", err) } return checkJSONResponseError(body) } // checkJSONResponseError classifies JSON responses from Rocketchat. func checkJSONResponseError(body []byte) (bool, error) { // response is for parsing out errors from the JSON response. type response struct { Success bool `json:"success"` Error string `json:"error"` } var data response if err := json.Unmarshal(body, &data); err != nil { return true, fmt.Errorf("could not unmarshal JSON response %q: %w", string(body), err) } if !data.Success { return false, fmt.Errorf("error response from Rocketchat: %s", data.Error) } return false, nil } prometheus-alertmanager-0.28.1+ds/notify/rocketchat/rocketchat_test.go000066400000000000000000000036741476331240200262270ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package rocketchat import ( "fmt" "net/url" "os" "testing" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify/test" ) func TestRocketchatRetry(t *testing.T) { secret := config.Secret("xxxxx") notifier, err := New( &config.RocketchatConfig{ HTTPConfig: &commoncfg.HTTPClientConfig{}, Token: &secret, TokenID: &secret, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) for statusCode, expected := range test.RetryTests(test.DefaultRetryCodes()) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("error on status %d", statusCode)) } } func TestGettingRocketchatTokenFromFile(t *testing.T) { f, err := os.CreateTemp("", "rocketchat_test") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString("secret") require.NoError(t, err, "writing to temp file failed") _, err = New( &config.RocketchatConfig{ TokenFile: f.Name(), TokenIDFile: f.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, APIURL: &config.URL{URL: &url.URL{Scheme: "http", Host: "example.com", Path: "/api/v1/"}}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) } prometheus-alertmanager-0.28.1+ds/notify/slack/000077500000000000000000000000001476331240200214465ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/slack/slack.go000066400000000000000000000205331476331240200230750ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package slack import ( "bytes" "context" "encoding/json" "fmt" "io" "log/slog" "net/http" "os" "strings" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) // https://api.slack.com/reference/messaging/attachments#legacy_fields - 1024, no units given, assuming runes or characters. const maxTitleLenRunes = 1024 // Notifier implements a Notifier for Slack notifications. type Notifier struct { conf *config.SlackConfig tmpl *template.Template logger *slog.Logger client *http.Client retrier *notify.Retrier postJSONFunc func(ctx context.Context, client *http.Client, url string, body io.Reader) (*http.Response, error) } // New returns a new Slack notification handler. func New(c *config.SlackConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "slack", httpOpts...) if err != nil { return nil, err } return &Notifier{ conf: c, tmpl: t, logger: l, client: client, retrier: ¬ify.Retrier{}, postJSONFunc: notify.PostJSON, }, nil } // request is the request for sending a slack notification. type request struct { Channel string `json:"channel,omitempty"` Username string `json:"username,omitempty"` IconEmoji string `json:"icon_emoji,omitempty"` IconURL string `json:"icon_url,omitempty"` LinkNames bool `json:"link_names,omitempty"` Attachments []attachment `json:"attachments"` } // attachment is used to display a richly-formatted message block. type attachment struct { Title string `json:"title,omitempty"` TitleLink string `json:"title_link,omitempty"` Pretext string `json:"pretext,omitempty"` Text string `json:"text"` Fallback string `json:"fallback"` CallbackID string `json:"callback_id"` Fields []config.SlackField `json:"fields,omitempty"` Actions []config.SlackAction `json:"actions,omitempty"` ImageURL string `json:"image_url,omitempty"` ThumbURL string `json:"thumb_url,omitempty"` Footer string `json:"footer"` Color string `json:"color,omitempty"` MrkdwnIn []string `json:"mrkdwn_in,omitempty"` } // Notify implements the Notifier interface. func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { var err error var ( data = notify.GetTemplateData(ctx, n.tmpl, as, n.logger) tmplText = notify.TmplText(n.tmpl, data, &err) ) var markdownIn []string if len(n.conf.MrkdwnIn) == 0 { markdownIn = []string{"fallback", "pretext", "text"} } else { markdownIn = n.conf.MrkdwnIn } title, truncated := notify.TruncateInRunes(tmplText(n.conf.Title), maxTitleLenRunes) if truncated { key, err := notify.ExtractGroupKey(ctx) if err != nil { return false, err } n.logger.Warn("Truncated title", "key", key, "max_runes", maxTitleLenRunes) } att := &attachment{ Title: title, TitleLink: tmplText(n.conf.TitleLink), Pretext: tmplText(n.conf.Pretext), Text: tmplText(n.conf.Text), Fallback: tmplText(n.conf.Fallback), CallbackID: tmplText(n.conf.CallbackID), ImageURL: tmplText(n.conf.ImageURL), ThumbURL: tmplText(n.conf.ThumbURL), Footer: tmplText(n.conf.Footer), Color: tmplText(n.conf.Color), MrkdwnIn: markdownIn, } numFields := len(n.conf.Fields) if numFields > 0 { fields := make([]config.SlackField, numFields) for index, field := range n.conf.Fields { // Check if short was defined for the field otherwise fallback to the global setting var short bool if field.Short != nil { short = *field.Short } else { short = n.conf.ShortFields } // Rebuild the field by executing any templates and setting the new value for short fields[index] = config.SlackField{ Title: tmplText(field.Title), Value: tmplText(field.Value), Short: &short, } } att.Fields = fields } numActions := len(n.conf.Actions) if numActions > 0 { actions := make([]config.SlackAction, numActions) for index, action := range n.conf.Actions { slackAction := config.SlackAction{ Type: tmplText(action.Type), Text: tmplText(action.Text), URL: tmplText(action.URL), Style: tmplText(action.Style), Name: tmplText(action.Name), Value: tmplText(action.Value), } if action.ConfirmField != nil { slackAction.ConfirmField = &config.SlackConfirmationField{ Title: tmplText(action.ConfirmField.Title), Text: tmplText(action.ConfirmField.Text), OkText: tmplText(action.ConfirmField.OkText), DismissText: tmplText(action.ConfirmField.DismissText), } } actions[index] = slackAction } att.Actions = actions } req := &request{ Channel: tmplText(n.conf.Channel), Username: tmplText(n.conf.Username), IconEmoji: tmplText(n.conf.IconEmoji), IconURL: tmplText(n.conf.IconURL), LinkNames: n.conf.LinkNames, Attachments: []attachment{*att}, } if err != nil { return false, err } var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(req); err != nil { return false, err } var u string if n.conf.APIURL != nil { u = n.conf.APIURL.String() } else { content, err := os.ReadFile(n.conf.APIURLFile) if err != nil { return false, err } u = strings.TrimSpace(string(content)) } resp, err := n.postJSONFunc(ctx, n.client, u, &buf) if err != nil { return true, notify.RedactURL(err) } defer notify.Drain(resp) // Use a retrier to generate an error message for non-200 responses and // classify them as retriable or not. retry, err := n.retrier.Check(resp.StatusCode, resp.Body) if err != nil { err = fmt.Errorf("channel %q: %w", req.Channel, err) return retry, notify.NewErrorWithReason(notify.GetFailureReasonFromStatusCode(resp.StatusCode), err) } // Slack web API might return errors with a 200 response code. // https://slack.dev/node-slack-sdk/web-api#handle-errors retry, err = checkResponseError(resp) if err != nil { err = fmt.Errorf("channel %q: %w", req.Channel, err) return retry, notify.NewErrorWithReason(notify.ClientErrorReason, err) } return retry, nil } // checkResponseError parses out the error message from Slack API response. func checkResponseError(resp *http.Response) (bool, error) { body, err := io.ReadAll(resp.Body) if err != nil { return true, fmt.Errorf("could not read response body: %w", err) } if strings.HasPrefix(resp.Header.Get("Content-Type"), "application/json") { return checkJSONResponseError(body) } return checkTextResponseError(body) } // checkTextResponseError classifies plaintext responses from Slack. // A plaintext (non-JSON) response is successful if it's a string "ok". // This is typically a response for an Incoming Webhook // (https://api.slack.com/messaging/webhooks#handling_errors) func checkTextResponseError(body []byte) (bool, error) { if !bytes.Equal(body, []byte("ok")) { return false, fmt.Errorf("received an error response from Slack: %s", string(body)) } return false, nil } // checkJSONResponseError classifies JSON responses from Slack. func checkJSONResponseError(body []byte) (bool, error) { // response is for parsing out errors from the JSON response. type response struct { OK bool `json:"ok"` Error string `json:"error"` } var data response if err := json.Unmarshal(body, &data); err != nil { return true, fmt.Errorf("could not unmarshal JSON response %q: %w", string(body), err) } if !data.OK { return false, fmt.Errorf("error response from Slack: %s", data.Error) } return false, nil } prometheus-alertmanager-0.28.1+ds/notify/slack/slack_test.go000066400000000000000000000151071476331240200241350ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package slack import ( "context" "fmt" "io" "net/http" "net/http/httptest" "net/url" "os" "strings" "testing" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/notify/test" "github.com/prometheus/alertmanager/types" ) func TestSlackRetry(t *testing.T) { notifier, err := New( &config.SlackConfig{ HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) for statusCode, expected := range test.RetryTests(test.DefaultRetryCodes()) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("error on status %d", statusCode)) } } func TestSlackRedactedURL(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() notifier, err := New( &config.SlackConfig{ APIURL: &config.SecretURL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, u.String()) } func TestGettingSlackURLFromFile(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() f, err := os.CreateTemp("", "slack_test") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString(u.String()) require.NoError(t, err, "writing to temp file failed") notifier, err := New( &config.SlackConfig{ APIURLFile: f.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, u.String()) } func TestTrimmingSlackURLFromFile(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() f, err := os.CreateTemp("", "slack_test_newline") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString(u.String() + "\n\n") require.NoError(t, err, "writing to temp file failed") notifier, err := New( &config.SlackConfig{ APIURLFile: f.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, u.String()) } func TestNotifier_Notify_WithReason(t *testing.T) { tests := []struct { name string statusCode int responseBody string expectedReason notify.Reason expectedErr string expectedRetry bool noError bool }{ { name: "with a 4xx status code", statusCode: http.StatusUnauthorized, expectedReason: notify.ClientErrorReason, expectedRetry: false, expectedErr: "unexpected status code 401", }, { name: "with a 5xx status code", statusCode: http.StatusInternalServerError, expectedReason: notify.ServerErrorReason, expectedRetry: true, expectedErr: "unexpected status code 500", }, { name: "with a 3xx status code", statusCode: http.StatusTemporaryRedirect, expectedReason: notify.DefaultReason, expectedRetry: false, expectedErr: "unexpected status code 307", }, { name: "with a 1xx status code", statusCode: http.StatusSwitchingProtocols, expectedReason: notify.DefaultReason, expectedRetry: false, expectedErr: "unexpected status code 101", }, { name: "2xx response with invalid JSON", statusCode: http.StatusOK, responseBody: `{"not valid json"}`, expectedReason: notify.ClientErrorReason, expectedRetry: true, expectedErr: "could not unmarshal", }, { name: "2xx response with a JSON error", statusCode: http.StatusOK, responseBody: `{"ok":false,"error":"error_message"}`, expectedReason: notify.ClientErrorReason, expectedRetry: false, expectedErr: "error response from Slack: error_message", }, { name: "2xx response with a plaintext error", statusCode: http.StatusOK, responseBody: "no_channel", expectedReason: notify.ClientErrorReason, expectedRetry: false, expectedErr: "error response from Slack: no_channel", }, { name: "successful JSON response", statusCode: http.StatusOK, responseBody: `{"ok":true}`, noError: true, }, { name: "successful plaintext response", statusCode: http.StatusOK, responseBody: "ok", noError: true, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { apiurl, _ := url.Parse("https://slack.com/post.Message") notifier, err := New( &config.SlackConfig{ NotifierConfig: config.NotifierConfig{}, HTTPConfig: &commoncfg.HTTPClientConfig{}, APIURL: &config.SecretURL{URL: apiurl}, Channel: "channelname", }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) notifier.postJSONFunc = func(ctx context.Context, client *http.Client, url string, body io.Reader) (*http.Response, error) { resp := httptest.NewRecorder() if strings.HasPrefix(tt.responseBody, "{") { resp.Header().Add("Content-Type", "application/json; charset=utf-8") } resp.WriteHeader(tt.statusCode) resp.WriteString(tt.responseBody) return resp.Result(), nil } ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") alert1 := &types.Alert{ Alert: model.Alert{ StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, } retry, err := notifier.Notify(ctx, alert1) require.Equal(t, tt.expectedRetry, retry) if tt.noError { require.NoError(t, err) } else { var reasonError *notify.ErrorWithReason require.ErrorAs(t, err, &reasonError) require.Equal(t, tt.expectedReason, reasonError.Reason) require.Contains(t, err.Error(), tt.expectedErr) require.Contains(t, err.Error(), "channelname") } }) } } prometheus-alertmanager-0.28.1+ds/notify/sns/000077500000000000000000000000001476331240200211545ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/sns/sns.go000066400000000000000000000201311476331240200223030ustar00rootroot00000000000000// Copyright 2021 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package sns import ( "context" "errors" "fmt" "log/slog" "net/http" "strings" "unicode/utf8" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/credentials" "github.com/aws/aws-sdk-go/aws/credentials/stscreds" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/sns" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) // Notifier implements a Notifier for SNS notifications. type Notifier struct { conf *config.SNSConfig tmpl *template.Template logger *slog.Logger client *http.Client retrier *notify.Retrier } // New returns a new SNS notification handler. func New(c *config.SNSConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "sns", httpOpts...) if err != nil { return nil, err } return &Notifier{ conf: c, tmpl: t, logger: l, client: client, retrier: ¬ify.Retrier{}, }, nil } func (n *Notifier) Notify(ctx context.Context, alert ...*types.Alert) (bool, error) { var ( tmplErr error data = notify.GetTemplateData(ctx, n.tmpl, alert, n.logger) tmpl = notify.TmplText(n.tmpl, data, &tmplErr) ) client, err := n.createSNSClient(tmpl, &tmplErr) if err != nil { var e awserr.RequestFailure if errors.As(err, &e) { return n.retrier.Check(e.StatusCode(), strings.NewReader(e.Message())) } return true, err } publishInput, err := n.createPublishInput(ctx, tmpl, &tmplErr) if err != nil { return true, err } publishOutput, err := client.Publish(publishInput) if err != nil { var e awserr.RequestFailure if errors.As(err, &e) { retryable, error := n.retrier.Check(e.StatusCode(), strings.NewReader(e.Message())) reasonErr := notify.NewErrorWithReason(notify.GetFailureReasonFromStatusCode(e.StatusCode()), error) return retryable, reasonErr } return true, err } n.logger.Debug("SNS message successfully published", "message_id", publishOutput.MessageId, "sequence number", publishOutput.SequenceNumber) return false, nil } func (n *Notifier) createSNSClient(tmpl func(string) string, tmplErr *error) (*sns.SNS, error) { var creds *credentials.Credentials // If there are provided sigV4 credentials we want to use those to create a session. if n.conf.Sigv4.AccessKey != "" && n.conf.Sigv4.SecretKey != "" { creds = credentials.NewStaticCredentials(n.conf.Sigv4.AccessKey, string(n.conf.Sigv4.SecretKey), "") } sess, err := session.NewSessionWithOptions(session.Options{ Config: aws.Config{ Region: aws.String(n.conf.Sigv4.Region), Endpoint: aws.String(tmpl(n.conf.APIUrl)), }, Profile: n.conf.Sigv4.Profile, }) if err != nil { return nil, err } if *tmplErr != nil { return nil, notify.NewErrorWithReason(notify.ClientErrorReason, fmt.Errorf("execute 'api_url' template: %w", *tmplErr)) } if n.conf.Sigv4.RoleARN != "" { var stsSess *session.Session if n.conf.APIUrl == "" { stsSess = sess } else { // If we have set the API URL we need to create a new session to get the STS Credentials. stsSess, err = session.NewSessionWithOptions(session.Options{ Config: aws.Config{ Region: aws.String(n.conf.Sigv4.Region), Credentials: creds, }, Profile: n.conf.Sigv4.Profile, }) if err != nil { return nil, err } } creds = stscreds.NewCredentials(stsSess, n.conf.Sigv4.RoleARN) } // Use our generated session with credentials to create the SNS Client. client := sns.New(sess, &aws.Config{Credentials: creds, HTTPClient: n.client}) // We will always need a region to be set by either the local config or the environment. if aws.StringValue(sess.Config.Region) == "" { return nil, fmt.Errorf("region not configured in sns.sigv4.region or in default credentials chain") } return client, nil } func (n *Notifier) createPublishInput(ctx context.Context, tmpl func(string) string, tmplErr *error) (*sns.PublishInput, error) { publishInput := &sns.PublishInput{} messageAttributes := n.createMessageAttributes(tmpl) if *tmplErr != nil { return nil, notify.NewErrorWithReason(notify.ClientErrorReason, fmt.Errorf("execute 'attributes' template: %w", *tmplErr)) } // Max message size for a message in a SNS publish request is 256KB, except for SMS messages where the limit is 1600 characters/runes. messageSizeLimit := 256 * 1024 if n.conf.TopicARN != "" { topicARN := tmpl(n.conf.TopicARN) if *tmplErr != nil { return nil, notify.NewErrorWithReason(notify.ClientErrorReason, fmt.Errorf("execute 'topic_arn' template: %w", *tmplErr)) } publishInput.SetTopicArn(topicARN) // If we are using a topic ARN, it could be a FIFO topic specified by the topic's suffix ".fifo". if strings.HasSuffix(topicARN, ".fifo") { // Deduplication key and Message Group ID are only added if it's a FIFO SNS Topic. key, err := notify.ExtractGroupKey(ctx) if err != nil { return nil, err } publishInput.SetMessageDeduplicationId(key.Hash()) publishInput.SetMessageGroupId(key.Hash()) } } if n.conf.PhoneNumber != "" { publishInput.SetPhoneNumber(tmpl(n.conf.PhoneNumber)) if *tmplErr != nil { return nil, notify.NewErrorWithReason(notify.ClientErrorReason, fmt.Errorf("execute 'phone_number' template: %w", *tmplErr)) } // If we have an SMS message, we need to truncate to 1600 characters/runes. messageSizeLimit = 1600 } if n.conf.TargetARN != "" { publishInput.SetTargetArn(tmpl(n.conf.TargetARN)) if *tmplErr != nil { return nil, notify.NewErrorWithReason(notify.ClientErrorReason, fmt.Errorf("execute 'target_arn' template: %w", *tmplErr)) } } tmplMessage := tmpl(n.conf.Message) if *tmplErr != nil { return nil, notify.NewErrorWithReason(notify.ClientErrorReason, fmt.Errorf("execute 'message' template: %w", *tmplErr)) } messageToSend, isTrunc, err := validateAndTruncateMessage(tmplMessage, messageSizeLimit) if err != nil { return nil, err } if isTrunc { // If we truncated the message we need to add a message attribute showing that it was truncated. messageAttributes["truncated"] = &sns.MessageAttributeValue{DataType: aws.String("String"), StringValue: aws.String("true")} } publishInput.SetMessage(messageToSend) publishInput.SetMessageAttributes(messageAttributes) if n.conf.Subject != "" { publishInput.SetSubject(tmpl(n.conf.Subject)) if *tmplErr != nil { return nil, notify.NewErrorWithReason(notify.ClientErrorReason, fmt.Errorf("execute 'subject' template: %w", *tmplErr)) } } return publishInput, nil } func validateAndTruncateMessage(message string, maxMessageSizeInBytes int) (string, bool, error) { if !utf8.ValidString(message) { return "", false, fmt.Errorf("non utf8 encoded message string") } if len(message) <= maxMessageSizeInBytes { return message, false, nil } // If the message is larger than our specified size we have to truncate. truncated := make([]byte, maxMessageSizeInBytes) copy(truncated, message) return string(truncated), true, nil } func (n *Notifier) createMessageAttributes(tmpl func(string) string) map[string]*sns.MessageAttributeValue { // Convert the given attributes map into the AWS Message Attributes Format. attributes := make(map[string]*sns.MessageAttributeValue, len(n.conf.Attributes)) for k, v := range n.conf.Attributes { attributes[tmpl(k)] = &sns.MessageAttributeValue{DataType: aws.String("String"), StringValue: aws.String(tmpl(v))} } return attributes } prometheus-alertmanager-0.28.1+ds/notify/sns/sns_test.go000066400000000000000000000103201476331240200233410ustar00rootroot00000000000000// Copyright 2021 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package sns import ( "context" "net/url" "strings" "testing" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/promslog" "github.com/prometheus/sigv4" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) var logger = promslog.NewNopLogger() func TestValidateAndTruncateMessage(t *testing.T) { sBuff := make([]byte, 257*1024) for i := range sBuff { sBuff[i] = byte(33) } truncatedMessage, isTruncated, err := validateAndTruncateMessage(string(sBuff), 256*1024) require.True(t, isTruncated) require.NoError(t, err) require.NotEqual(t, sBuff, truncatedMessage) require.Len(t, truncatedMessage, 256*1024) sBuff = make([]byte, 100) for i := range sBuff { sBuff[i] = byte(33) } truncatedMessage, isTruncated, err = validateAndTruncateMessage(string(sBuff), 100) require.False(t, isTruncated) require.NoError(t, err) require.Equal(t, string(sBuff), truncatedMessage) invalidUtf8String := "\xc3\x28" _, _, err = validateAndTruncateMessage(invalidUtf8String, 100) require.Error(t, err) } func TestNotifyWithInvalidTemplate(t *testing.T) { for _, tc := range []struct { title string errMsg string updateCfg func(*config.SNSConfig) }{ { title: "with invalid Attribute template", errMsg: "execute 'attributes' template", updateCfg: func(cfg *config.SNSConfig) { cfg.Attributes = map[string]string{ "attribName1": "{{ template \"unknown_template\" . }}", } }, }, { title: "with invalid TopicArn template", errMsg: "execute 'topic_arn' template", updateCfg: func(cfg *config.SNSConfig) { cfg.TopicARN = "{{ template \"unknown_template\" . }}" }, }, { title: "with invalid PhoneNumber template", errMsg: "execute 'phone_number' template", updateCfg: func(cfg *config.SNSConfig) { cfg.PhoneNumber = "{{ template \"unknown_template\" . }}" }, }, { title: "with invalid Message template", errMsg: "execute 'message' template", updateCfg: func(cfg *config.SNSConfig) { cfg.Message = "{{ template \"unknown_template\" . }}" }, }, { title: "with invalid Subject template", errMsg: "execute 'subject' template", updateCfg: func(cfg *config.SNSConfig) { cfg.Subject = "{{ template \"unknown_template\" . }}" }, }, { title: "with invalid APIUrl template", errMsg: "execute 'api_url' template", updateCfg: func(cfg *config.SNSConfig) { cfg.APIUrl = "{{ template \"unknown_template\" . }}" }, }, { title: "with invalid TargetARN template", errMsg: "execute 'target_arn' template", updateCfg: func(cfg *config.SNSConfig) { cfg.TargetARN = "{{ template \"unknown_template\" . }}" }, }, } { tc := tc t.Run(tc.title, func(t *testing.T) { snsCfg := &config.SNSConfig{ HTTPConfig: &commoncfg.HTTPClientConfig{}, TopicARN: "TestTopic", Sigv4: sigv4.SigV4Config{ Region: "us-west-2", }, } if tc.updateCfg != nil { tc.updateCfg(snsCfg) } notifier, err := New( snsCfg, createTmpl(t), logger, ) require.NoError(t, err) var alerts []*types.Alert _, err = notifier.Notify(context.Background(), alerts...) require.Error(t, err) require.True(t, strings.Contains(err.Error(), "template \"unknown_template\" not defined")) require.True(t, strings.Contains(err.Error(), tc.errMsg)) }) } } // CreateTmpl returns a ready-to-use template. func createTmpl(t *testing.T) *template.Template { tmpl, err := template.FromGlobs([]string{}) require.NoError(t, err) tmpl.ExternalURL, _ = url.Parse("http://am") return tmpl } prometheus-alertmanager-0.28.1+ds/notify/telegram/000077500000000000000000000000001476331240200221515ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/telegram/telegram.go000066400000000000000000000067621476331240200243130ustar00rootroot00000000000000// Copyright 2022 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package telegram import ( "context" "fmt" "log/slog" "net/http" "os" "strings" commoncfg "github.com/prometheus/common/config" "gopkg.in/telebot.v3" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) // Telegram supports 4096 chars max - from https://limits.tginfo.me/en. const maxMessageLenRunes = 4096 // Notifier implements a Notifier for telegram notifications. type Notifier struct { conf *config.TelegramConfig tmpl *template.Template logger *slog.Logger client *telebot.Bot retrier *notify.Retrier } // New returns a new Telegram notification handler. func New(conf *config.TelegramConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { httpclient, err := commoncfg.NewClientFromConfig(*conf.HTTPConfig, "telegram", httpOpts...) if err != nil { return nil, err } client, err := createTelegramClient(conf.APIUrl.String(), conf.ParseMode, httpclient) if err != nil { return nil, err } return &Notifier{ conf: conf, tmpl: t, logger: l, client: client, retrier: ¬ify.Retrier{}, }, nil } func (n *Notifier) Notify(ctx context.Context, alert ...*types.Alert) (bool, error) { var ( err error data = notify.GetTemplateData(ctx, n.tmpl, alert, n.logger) tmpl = notify.TmplText(n.tmpl, data, &err) ) if n.conf.ParseMode == "HTML" { tmpl = notify.TmplHTML(n.tmpl, data, &err) } key, ok := notify.GroupKey(ctx) if !ok { return false, fmt.Errorf("group key missing") } messageText, truncated := notify.TruncateInRunes(tmpl(n.conf.Message), maxMessageLenRunes) if truncated { n.logger.Warn("Truncated message", "alert", key, "max_runes", maxMessageLenRunes) } n.client.Token, err = n.getBotToken() if err != nil { return true, err } message, err := n.client.Send(telebot.ChatID(n.conf.ChatID), messageText, &telebot.SendOptions{ DisableNotification: n.conf.DisableNotifications, DisableWebPagePreview: true, ThreadID: n.conf.MessageThreadID, ParseMode: n.conf.ParseMode, }) if err != nil { return true, err } n.logger.Debug("Telegram message successfully published", "message_id", message.ID, "chat_id", message.Chat.ID) return false, nil } func createTelegramClient(apiURL, parseMode string, httpClient *http.Client) (*telebot.Bot, error) { bot, err := telebot.NewBot(telebot.Settings{ URL: apiURL, ParseMode: parseMode, Client: httpClient, Offline: true, }) if err != nil { return nil, err } return bot, nil } func (n *Notifier) getBotToken() (string, error) { if len(n.conf.BotTokenFile) > 0 { content, err := os.ReadFile(n.conf.BotTokenFile) if err != nil { return "", fmt.Errorf("could not read %s: %w", n.conf.BotTokenFile, err) } return strings.TrimSpace(string(content)), nil } return string(n.conf.BotToken), nil } prometheus-alertmanager-0.28.1+ds/notify/telegram/telegram_test.go000066400000000000000000000111571476331240200253440ustar00rootroot00000000000000// Copyright 2022 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package telegram import ( "context" "encoding/json" "fmt" "io" "net/http" "net/http/httptest" "net/url" "os" "testing" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "gopkg.in/yaml.v2" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/notify/test" "github.com/prometheus/alertmanager/types" ) func TestTelegramUnmarshal(t *testing.T) { in := ` route: receiver: test receivers: - name: test telegram_configs: - chat_id: 1234 bot_token: secret message_thread_id: 1357 ` var c config.Config err := yaml.Unmarshal([]byte(in), &c) require.NoError(t, err) require.Len(t, c.Receivers, 1) require.Len(t, c.Receivers[0].TelegramConfigs, 1) require.Equal(t, "https://api.telegram.org", c.Receivers[0].TelegramConfigs[0].APIUrl.String()) require.Equal(t, config.Secret("secret"), c.Receivers[0].TelegramConfigs[0].BotToken) require.Equal(t, int64(1234), c.Receivers[0].TelegramConfigs[0].ChatID) require.Equal(t, 1357, c.Receivers[0].TelegramConfigs[0].MessageThreadID) require.Equal(t, "HTML", c.Receivers[0].TelegramConfigs[0].ParseMode) } func TestTelegramRetry(t *testing.T) { // Fake url for testing purposes fakeURL := config.URL{ URL: &url.URL{ Scheme: "https", Host: "FAKE_API", }, } notifier, err := New( &config.TelegramConfig{ HTTPConfig: &commoncfg.HTTPClientConfig{}, APIUrl: &fakeURL, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) for statusCode, expected := range test.RetryTests(test.DefaultRetryCodes()) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("error on status %d", statusCode)) } } func TestTelegramNotify(t *testing.T) { token := "secret" fileWithToken, err := os.CreateTemp("", "telegram-bot-token") require.NoError(t, err, "creating temp file failed") _, err = fileWithToken.WriteString(token) require.NoError(t, err, "writing to temp file failed") for _, tc := range []struct { name string cfg config.TelegramConfig expText string }{ { name: "No escaping by default", cfg: config.TelegramConfig{ Message: "x < y", HTTPConfig: &commoncfg.HTTPClientConfig{}, BotToken: config.Secret(token), }, expText: "x < y", }, { name: "Characters escaped in HTML mode", cfg: config.TelegramConfig{ ParseMode: "HTML", Message: "x < y", HTTPConfig: &commoncfg.HTTPClientConfig{}, BotToken: config.Secret(token), }, expText: "x < y", }, { name: "Bot token from file", cfg: config.TelegramConfig{ Message: "test", HTTPConfig: &commoncfg.HTTPClientConfig{}, BotTokenFile: fileWithToken.Name(), }, expText: "test", }, } { t.Run(tc.name, func(t *testing.T) { var out []byte srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { require.Equal(t, "/bot"+token+"/sendMessage", r.URL.Path) var err error out, err = io.ReadAll(r.Body) require.NoError(t, err) w.Write([]byte(`{"ok":true,"result":{"chat":{}}}`)) })) defer srv.Close() u, _ := url.Parse(srv.URL) tc.cfg.APIUrl = &config.URL{URL: u} notifier, err := New(&tc.cfg, test.CreateTmpl(t), promslog.NewNopLogger()) require.NoError(t, err) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() ctx = notify.WithGroupKey(ctx, "1") retry, err := notifier.Notify(ctx, []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "lbl1": "val1", "lbl3": "val3", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }...) require.False(t, retry) require.NoError(t, err) req := map[string]string{} err = json.Unmarshal(out, &req) require.NoError(t, err) require.Equal(t, tc.expText, req["text"]) }) } } prometheus-alertmanager-0.28.1+ds/notify/test/000077500000000000000000000000001476331240200213305ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/test/test.go000066400000000000000000000143471476331240200226470ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "context" "net/http" "net/http/httptest" "net/url" "testing" "time" "github.com/prometheus/common/model" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) // RetryTests returns a map of HTTP status codes to bool indicating whether the notifier should retry or not. func RetryTests(retryCodes []int) map[int]bool { tests := map[int]bool{ // 1xx http.StatusContinue: false, http.StatusSwitchingProtocols: false, http.StatusProcessing: false, // 2xx http.StatusOK: false, http.StatusCreated: false, http.StatusAccepted: false, http.StatusNonAuthoritativeInfo: false, http.StatusNoContent: false, http.StatusResetContent: false, http.StatusPartialContent: false, http.StatusMultiStatus: false, http.StatusAlreadyReported: false, http.StatusIMUsed: false, // 3xx http.StatusMultipleChoices: false, http.StatusMovedPermanently: false, http.StatusFound: false, http.StatusSeeOther: false, http.StatusNotModified: false, http.StatusUseProxy: false, http.StatusTemporaryRedirect: false, http.StatusPermanentRedirect: false, // 4xx http.StatusBadRequest: false, http.StatusUnauthorized: false, http.StatusPaymentRequired: false, http.StatusForbidden: false, http.StatusNotFound: false, http.StatusMethodNotAllowed: false, http.StatusNotAcceptable: false, http.StatusProxyAuthRequired: false, http.StatusRequestTimeout: false, http.StatusConflict: false, http.StatusGone: false, http.StatusLengthRequired: false, http.StatusPreconditionFailed: false, http.StatusRequestEntityTooLarge: false, http.StatusRequestURITooLong: false, http.StatusUnsupportedMediaType: false, http.StatusRequestedRangeNotSatisfiable: false, http.StatusExpectationFailed: false, http.StatusTeapot: false, http.StatusUnprocessableEntity: false, http.StatusLocked: false, http.StatusFailedDependency: false, http.StatusUpgradeRequired: false, http.StatusPreconditionRequired: false, http.StatusTooManyRequests: false, http.StatusRequestHeaderFieldsTooLarge: false, http.StatusUnavailableForLegalReasons: false, // 5xx http.StatusInternalServerError: false, http.StatusNotImplemented: false, http.StatusBadGateway: false, http.StatusServiceUnavailable: false, http.StatusGatewayTimeout: false, http.StatusHTTPVersionNotSupported: false, http.StatusVariantAlsoNegotiates: false, http.StatusInsufficientStorage: false, http.StatusLoopDetected: false, http.StatusNotExtended: false, http.StatusNetworkAuthenticationRequired: false, } for _, statusCode := range retryCodes { tests[statusCode] = true } return tests } // DefaultRetryCodes returns the list of HTTP status codes that need to be retried. func DefaultRetryCodes() []int { return []int{ http.StatusInternalServerError, http.StatusNotImplemented, http.StatusBadGateway, http.StatusServiceUnavailable, http.StatusGatewayTimeout, http.StatusHTTPVersionNotSupported, http.StatusVariantAlsoNegotiates, http.StatusInsufficientStorage, http.StatusLoopDetected, http.StatusNotExtended, http.StatusNetworkAuthenticationRequired, } } // CreateTmpl returns a ready-to-use template. func CreateTmpl(t *testing.T) *template.Template { tmpl, err := template.FromGlobs([]string{}) require.NoError(t, err) tmpl.ExternalURL, _ = url.Parse("http://am") return tmpl } // AssertNotifyLeaksNoSecret calls the Notify() method of the notifier, expects // it to fail because the context is canceled by the server and checks that no // secret data is leaked in the error message returned by Notify(). func AssertNotifyLeaksNoSecret(ctx context.Context, t *testing.T, n notify.Notifier, secret ...string) { t.Helper() require.NotEmpty(t, secret) ctx = notify.WithGroupKey(ctx, "1") ok, err := n.Notify(ctx, []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "lbl1": "val1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }...) require.Error(t, err) require.Contains(t, err.Error(), context.Canceled.Error()) for _, s := range secret { require.NotContains(t, err.Error(), s) } require.True(t, ok) } // GetContextWithCancelingURL returns a context that gets canceled when a // client does a GET request to the returned URL. // Handlers passed to the function will be invoked in order before the context gets canceled. // The last argument is a function that needs to be called before the caller returns. func GetContextWithCancelingURL(h ...func(w http.ResponseWriter, r *http.Request)) (context.Context, *url.URL, func()) { done := make(chan struct{}) ctx, cancel := context.WithCancel(context.Background()) i := 0 srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if i < len(h) { h[i](w, r) } else { cancel() <-done } i++ })) // No need to check the error since httptest.NewServer always return a valid URL. u, _ := url.Parse(srv.URL) return ctx, u, func() { close(done) srv.Close() } } prometheus-alertmanager-0.28.1+ds/notify/util.go000066400000000000000000000203721476331240200216610ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package notify import ( "context" "crypto/sha256" "errors" "fmt" "io" "log/slog" "net/http" "net/url" "strings" "github.com/prometheus/common/version" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) // truncationMarker is the character used to represent a truncation. const truncationMarker = "…" // UserAgentHeader is the default User-Agent for notification requests. var UserAgentHeader = version.ComponentUserAgent("Alertmanager") // RedactURL removes the URL part from an error of *url.Error type. func RedactURL(err error) error { var e *url.Error if !errors.As(err, &e) { return err } e.URL = "" return e } // Get sends a GET request to the given URL. func Get(ctx context.Context, client *http.Client, url string) (*http.Response, error) { return request(ctx, client, http.MethodGet, url, "", nil) } // PostJSON sends a POST request with JSON payload to the given URL. func PostJSON(ctx context.Context, client *http.Client, url string, body io.Reader) (*http.Response, error) { return post(ctx, client, url, "application/json", body) } // PostText sends a POST request with text payload to the given URL. func PostText(ctx context.Context, client *http.Client, url string, body io.Reader) (*http.Response, error) { return post(ctx, client, url, "text/plain", body) } func post(ctx context.Context, client *http.Client, url, bodyType string, body io.Reader) (*http.Response, error) { return request(ctx, client, http.MethodPost, url, bodyType, body) } func request(ctx context.Context, client *http.Client, method, url, bodyType string, body io.Reader) (*http.Response, error) { req, err := http.NewRequest(method, url, body) if err != nil { return nil, err } req.Header.Set("User-Agent", UserAgentHeader) if bodyType != "" { req.Header.Set("Content-Type", bodyType) } return client.Do(req.WithContext(ctx)) } // Drain consumes and closes the response's body to make sure that the // HTTP client can reuse existing connections. func Drain(r *http.Response) { io.Copy(io.Discard, r.Body) r.Body.Close() } // TruncateInRunes truncates a string to fit the given size in Runes. func TruncateInRunes(s string, n int) (string, bool) { r := []rune(s) if len(r) <= n { return s, false } if n <= 3 { return string(r[:n]), true } return string(r[:n-1]) + truncationMarker, true } // TruncateInBytes truncates a string to fit the given size in Bytes. func TruncateInBytes(s string, n int) (string, bool) { // First, measure the string the w/o a to-rune conversion. if len(s) <= n { return s, false } // The truncationMarker itself is 3 bytes, we can't return any part of the string when it's less than 3. if n <= 3 { switch n { case 3: return truncationMarker, true default: return strings.Repeat(".", n), true } } // Now, to ensure we don't butcher the string we need to remove using runes. r := []rune(s) truncationTarget := n - 3 // Next, let's truncate the runes to the lower possible number. truncatedRunes := r[:truncationTarget] for len(string(truncatedRunes)) > truncationTarget { truncatedRunes = r[:len(truncatedRunes)-1] } return string(truncatedRunes) + truncationMarker, true } // TmplText is using monadic error handling in order to make string templating // less verbose. Use with care as the final error checking is easily missed. func TmplText(tmpl *template.Template, data *template.Data, err *error) func(string) string { return func(name string) (s string) { if *err != nil { return } s, *err = tmpl.ExecuteTextString(name, data) return s } } // TmplHTML is using monadic error handling in order to make string templating // less verbose. Use with care as the final error checking is easily missed. func TmplHTML(tmpl *template.Template, data *template.Data, err *error) func(string) string { return func(name string) (s string) { if *err != nil { return } s, *err = tmpl.ExecuteHTMLString(name, data) return s } } // Key is a string that can be hashed. type Key string // ExtractGroupKey gets the group key from the context. func ExtractGroupKey(ctx context.Context) (Key, error) { key, ok := GroupKey(ctx) if !ok { return "", fmt.Errorf("group key missing") } return Key(key), nil } // Hash returns the sha256 for a group key as integrations may have // maximum length requirements on deduplication keys. func (k Key) Hash() string { h := sha256.New() // hash.Hash.Write never returns an error. //nolint: errcheck h.Write([]byte(string(k))) return fmt.Sprintf("%x", h.Sum(nil)) } func (k Key) String() string { return string(k) } // GetTemplateData creates the template data from the context and the alerts. func GetTemplateData(ctx context.Context, tmpl *template.Template, alerts []*types.Alert, l *slog.Logger) *template.Data { recv, ok := ReceiverName(ctx) if !ok { l.Error("Missing receiver") } groupLabels, ok := GroupLabels(ctx) if !ok { l.Error("Missing group labels") } return tmpl.Data(recv, groupLabels, alerts...) } func readAll(r io.Reader) string { if r == nil { return "" } bs, err := io.ReadAll(r) if err != nil { return "" } return string(bs) } // Retrier knows when to retry an HTTP request to a receiver. 2xx status codes // are successful, anything else is a failure and only 5xx status codes should // be retried. type Retrier struct { // Function to return additional information in the error message. CustomDetailsFunc func(code int, body io.Reader) string // Additional HTTP status codes that should be retried. RetryCodes []int } // Check returns a boolean indicating whether the request should be retried // and an optional error if the request has failed. If body is not nil, it will // be included in the error message. func (r *Retrier) Check(statusCode int, body io.Reader) (bool, error) { // 2xx responses are considered to be always successful. if statusCode/100 == 2 { return false, nil } // 5xx responses are considered to be always retried. retry := statusCode/100 == 5 if !retry { for _, code := range r.RetryCodes { if code == statusCode { retry = true break } } } s := fmt.Sprintf("unexpected status code %v", statusCode) var details string if r.CustomDetailsFunc != nil { details = r.CustomDetailsFunc(statusCode, body) } else { details = readAll(body) } if details != "" { s = fmt.Sprintf("%s: %s", s, details) } return retry, errors.New(s) } type ErrorWithReason struct { Err error Reason Reason } func NewErrorWithReason(reason Reason, err error) *ErrorWithReason { return &ErrorWithReason{ Err: err, Reason: reason, } } func (e *ErrorWithReason) Error() string { return e.Err.Error() } // Reason is the failure reason. type Reason int const ( DefaultReason Reason = iota ClientErrorReason ServerErrorReason ContextCanceledReason ContextDeadlineExceededReason ) func (s Reason) String() string { switch s { case DefaultReason: return "other" case ClientErrorReason: return "clientError" case ServerErrorReason: return "serverError" case ContextCanceledReason: return "contextCanceled" case ContextDeadlineExceededReason: return "contextDeadlineExceeded" default: panic(fmt.Sprintf("unknown Reason: %d", s)) } } // possibleFailureReasonCategory is a list of possible failure reason. var possibleFailureReasonCategory = []string{DefaultReason.String(), ClientErrorReason.String(), ServerErrorReason.String(), ContextCanceledReason.String(), ContextDeadlineExceededReason.String()} // GetFailureReasonFromStatusCode returns the reason for the failure based on the status code provided. func GetFailureReasonFromStatusCode(statusCode int) Reason { if statusCode/100 == 4 { return ClientErrorReason } if statusCode/100 == 5 { return ServerErrorReason } return DefaultReason } prometheus-alertmanager-0.28.1+ds/notify/util_test.go000066400000000000000000000117771476331240200227310ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package notify import ( "bytes" "fmt" "io" "net/http" "path" "reflect" "runtime" "testing" "github.com/stretchr/testify/require" ) func TestTruncate(t *testing.T) { type expect struct { out string trunc bool } testCases := []struct { in string n int runes expect bytes expect }{ { in: "", n: 5, runes: expect{out: "", trunc: false}, bytes: expect{out: "", trunc: false}, }, { in: "abcde", n: 2, runes: expect{out: "ab", trunc: true}, bytes: expect{out: "..", trunc: true}, }, { in: "abcde", n: 4, runes: expect{out: "abc…", trunc: true}, bytes: expect{out: "a…", trunc: true}, }, { in: "abcde", n: 5, runes: expect{out: "abcde", trunc: false}, bytes: expect{out: "abcde", trunc: false}, }, { in: "abcdefgh", n: 5, runes: expect{out: "abcd…", trunc: true}, bytes: expect{out: "ab…", trunc: true}, }, { in: "a⌘cde", n: 5, runes: expect{out: "a⌘cde", trunc: false}, bytes: expect{out: "a…", trunc: true}, }, { in: "a⌘cdef", n: 5, runes: expect{out: "a⌘cd…", trunc: true}, bytes: expect{out: "a…", trunc: true}, }, { in: "世界cdef", n: 3, runes: expect{out: "世界c", trunc: true}, bytes: expect{out: "…", trunc: true}, }, { in: "❤️✅🚀🔥❌❤️✅🚀🔥❌❤️✅🚀🔥❌❤️✅🚀🔥❌", n: 19, runes: expect{out: "❤️✅🚀🔥❌❤️✅🚀🔥❌❤️✅🚀🔥❌…", trunc: true}, bytes: expect{out: "❤️✅🚀…", trunc: true}, }, } type truncateFunc func(string, int) (string, bool) for _, tc := range testCases { for _, fn := range []truncateFunc{TruncateInBytes, TruncateInRunes} { var truncated bool var out string fnPath := runtime.FuncForPC(reflect.ValueOf(fn).Pointer()).Name() fnName := path.Base(fnPath) switch fnName { case "notify.TruncateInRunes": truncated = tc.runes.trunc out = tc.runes.out case "notify.TruncateInBytes": truncated = tc.bytes.trunc out = tc.bytes.out default: t.Fatalf("unknown function") } t.Run(fmt.Sprintf("%s(%s,%d)", fnName, tc.in, tc.n), func(t *testing.T) { s, trunc := fn(tc.in, tc.n) require.Equal(t, out, s) require.Equal(t, truncated, trunc) }) } } } type brokenReader struct{} func (b brokenReader) Read([]byte) (int, error) { return 0, fmt.Errorf("some error") } func TestRetrierCheck(t *testing.T) { for _, tc := range []struct { retrier Retrier status int body io.Reader retry bool expectedErr string }{ { retrier: Retrier{}, status: http.StatusOK, body: bytes.NewBuffer([]byte("ok")), retry: false, }, { retrier: Retrier{}, status: http.StatusNoContent, retry: false, }, { retrier: Retrier{}, status: http.StatusBadRequest, retry: false, expectedErr: "unexpected status code 400", }, { retrier: Retrier{RetryCodes: []int{http.StatusTooManyRequests}}, status: http.StatusBadRequest, body: bytes.NewBuffer([]byte("invalid request")), retry: false, expectedErr: "unexpected status code 400: invalid request", }, { retrier: Retrier{RetryCodes: []int{http.StatusTooManyRequests}}, status: http.StatusTooManyRequests, retry: true, expectedErr: "unexpected status code 429", }, { retrier: Retrier{}, status: http.StatusServiceUnavailable, body: bytes.NewBuffer([]byte("retry later")), retry: true, expectedErr: "unexpected status code 503: retry later", }, { retrier: Retrier{}, status: http.StatusBadGateway, body: &brokenReader{}, retry: true, expectedErr: "unexpected status code 502", }, { retrier: Retrier{CustomDetailsFunc: func(status int, b io.Reader) string { if status != http.StatusServiceUnavailable { return "invalid" } bs, _ := io.ReadAll(b) return fmt.Sprintf("server response is %q", string(bs)) }}, status: http.StatusServiceUnavailable, body: bytes.NewBuffer([]byte("retry later")), retry: true, expectedErr: "unexpected status code 503: server response is \"retry later\"", }, } { t.Run("", func(t *testing.T) { retry, err := tc.retrier.Check(tc.status, tc.body) require.Equal(t, tc.retry, retry) if tc.expectedErr == "" { require.NoError(t, err) return } require.EqualError(t, err, tc.expectedErr) }) } } prometheus-alertmanager-0.28.1+ds/notify/victorops/000077500000000000000000000000001476331240200224015ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/victorops/victorops.go000066400000000000000000000112051476331240200247570ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package victorops import ( "bytes" "context" "encoding/json" "fmt" "log/slog" "net/http" "os" "strings" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) // https://help.victorops.com/knowledge-base/incident-fields-glossary/ - 20480 characters. const maxMessageLenRunes = 20480 // Notifier implements a Notifier for VictorOps notifications. type Notifier struct { conf *config.VictorOpsConfig tmpl *template.Template logger *slog.Logger client *http.Client retrier *notify.Retrier } // New returns a new VictorOps notifier. func New(c *config.VictorOpsConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "victorops", httpOpts...) if err != nil { return nil, err } return &Notifier{ conf: c, tmpl: t, logger: l, client: client, // Missing documentation therefore assuming only 5xx response codes are // recoverable. retrier: ¬ify.Retrier{}, }, nil } const ( victorOpsEventTrigger = "CRITICAL" victorOpsEventResolve = "RECOVERY" ) // Notify implements the Notifier interface. func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { var err error var ( data = notify.GetTemplateData(ctx, n.tmpl, as, n.logger) tmpl = notify.TmplText(n.tmpl, data, &err) apiURL = n.conf.APIURL.Copy() ) var apiKey string if n.conf.APIKey != "" { apiKey = string(n.conf.APIKey) } else { content, fileErr := os.ReadFile(n.conf.APIKeyFile) if fileErr != nil { return false, fmt.Errorf("failed to read API key from file: %w", fileErr) } apiKey = strings.TrimSpace(string(content)) } apiURL.Path += fmt.Sprintf("%s/%s", apiKey, tmpl(n.conf.RoutingKey)) if err != nil { return false, fmt.Errorf("templating error: %w", err) } buf, err := n.createVictorOpsPayload(ctx, as...) if err != nil { return true, err } resp, err := notify.PostJSON(ctx, n.client, apiURL.String(), buf) if err != nil { return true, notify.RedactURL(err) } defer notify.Drain(resp) shouldRetry, err := n.retrier.Check(resp.StatusCode, resp.Body) if err != nil { return shouldRetry, notify.NewErrorWithReason(notify.GetFailureReasonFromStatusCode(resp.StatusCode), err) } return shouldRetry, err } // Create the JSON payload to be sent to the VictorOps API. func (n *Notifier) createVictorOpsPayload(ctx context.Context, as ...*types.Alert) (*bytes.Buffer, error) { victorOpsAllowedEvents := map[string]bool{ "INFO": true, "WARNING": true, "CRITICAL": true, } key, err := notify.ExtractGroupKey(ctx) if err != nil { return nil, err } var ( alerts = types.Alerts(as...) data = notify.GetTemplateData(ctx, n.tmpl, as, n.logger) tmpl = notify.TmplText(n.tmpl, data, &err) messageType = tmpl(n.conf.MessageType) stateMessage = tmpl(n.conf.StateMessage) ) if alerts.Status() == model.AlertFiring && !victorOpsAllowedEvents[messageType] { messageType = victorOpsEventTrigger } if alerts.Status() == model.AlertResolved { messageType = victorOpsEventResolve } stateMessage, truncated := notify.TruncateInRunes(stateMessage, maxMessageLenRunes) if truncated { n.logger.Warn("Truncated state_message", "incident", key, "max_runes", maxMessageLenRunes) } msg := map[string]string{ "message_type": messageType, "entity_id": key.Hash(), "entity_display_name": tmpl(n.conf.EntityDisplayName), "state_message": stateMessage, "monitoring_tool": tmpl(n.conf.MonitoringTool), } if err != nil { return nil, fmt.Errorf("templating error: %w", err) } // Add custom fields to the payload. for k, v := range n.conf.CustomFields { msg[k] = tmpl(v) if err != nil { return nil, fmt.Errorf("templating error: %w", err) } } var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(msg); err != nil { return nil, err } return &buf, nil } prometheus-alertmanager-0.28.1+ds/notify/victorops/victorops_test.go000066400000000000000000000134151476331240200260230ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package victorops import ( "context" "encoding/json" "fmt" "net/http" "net/http/httptest" "net/url" "os" "testing" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/notify/test" "github.com/prometheus/alertmanager/types" ) func TestVictorOpsCustomFields(t *testing.T) { logger := promslog.NewNopLogger() tmpl := test.CreateTmpl(t) url, err := url.Parse("http://nowhere.com") require.NoError(t, err, "unexpected error parsing mock url") conf := &config.VictorOpsConfig{ APIKey: `12345`, APIURL: &config.URL{URL: url}, EntityDisplayName: `{{ .CommonLabels.Message }}`, StateMessage: `{{ .CommonLabels.Message }}`, RoutingKey: `test`, MessageType: ``, MonitoringTool: `AM`, CustomFields: map[string]string{ "Field_A": "{{ .CommonLabels.Message }}", }, HTTPConfig: &commoncfg.HTTPClientConfig{}, } notifier, err := New(conf, tmpl, logger) require.NoError(t, err) ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") alert := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "Message": "message", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, } msg, err := notifier.createVictorOpsPayload(ctx, alert) require.NoError(t, err) var m map[string]string err = json.Unmarshal(msg.Bytes(), &m) require.NoError(t, err) // Verify that a custom field was added to the payload and templatized. require.Equal(t, "message", m["Field_A"]) } func TestVictorOpsRetry(t *testing.T) { notifier, err := New( &config.VictorOpsConfig{ APIKey: config.Secret("secret"), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) for statusCode, expected := range test.RetryTests(test.DefaultRetryCodes()) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("error on status %d", statusCode)) } } func TestVictorOpsRedactedURL(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() secret := "secret" notifier, err := New( &config.VictorOpsConfig{ APIURL: &config.URL{URL: u}, APIKey: config.Secret(secret), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, secret) } func TestVictorOpsReadingApiKeyFromFile(t *testing.T) { key := "key" f, err := os.CreateTemp("", "victorops_test") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString(key) require.NoError(t, err, "writing to temp file failed") ctx, u, fn := test.GetContextWithCancelingURL() defer fn() notifier, err := New( &config.VictorOpsConfig{ APIURL: &config.URL{URL: u}, APIKeyFile: f.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, key) } func TestVictorOpsTemplating(t *testing.T) { srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { dec := json.NewDecoder(r.Body) out := make(map[string]interface{}) err := dec.Decode(&out) if err != nil { panic(err) } })) defer srv.Close() u, _ := url.Parse(srv.URL) tests := []struct { name string cfg *config.VictorOpsConfig errMsg string }{ { name: "default valid templates", cfg: &config.VictorOpsConfig{}, }, { name: "invalid message_type", cfg: &config.VictorOpsConfig{ MessageType: "{{ .CommonLabels.alertname }", }, errMsg: "templating error", }, { name: "invalid entity_display_name", cfg: &config.VictorOpsConfig{ EntityDisplayName: "{{ .CommonLabels.alertname }", }, errMsg: "templating error", }, { name: "invalid state_message", cfg: &config.VictorOpsConfig{ StateMessage: "{{ .CommonLabels.alertname }", }, errMsg: "templating error", }, { name: "invalid monitoring tool", cfg: &config.VictorOpsConfig{ MonitoringTool: "{{ .CommonLabels.alertname }", }, errMsg: "templating error", }, { name: "invalid routing_key", cfg: &config.VictorOpsConfig{ RoutingKey: "{{ .CommonLabels.alertname }", }, errMsg: "templating error", }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { tc.cfg.HTTPConfig = &commoncfg.HTTPClientConfig{} tc.cfg.APIURL = &config.URL{URL: u} tc.cfg.APIKey = "test" vo, err := New(tc.cfg, test.CreateTmpl(t), promslog.NewNopLogger()) require.NoError(t, err) ctx := context.Background() ctx = notify.WithGroupKey(ctx, "1") _, err = vo.Notify(ctx, []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "lbl1": "val1", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }...) if tc.errMsg == "" { require.NoError(t, err) } else { require.Contains(t, err.Error(), tc.errMsg) } }) } } prometheus-alertmanager-0.28.1+ds/notify/webex/000077500000000000000000000000001476331240200214635ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/webex/webex.go000066400000000000000000000054441476331240200231330ustar00rootroot00000000000000// Copyright 2022 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package webex import ( "bytes" "context" "encoding/json" "log/slog" "net/http" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) const ( // nolint:godot // maxMessageSize represents the maximum message length that Webex supports. maxMessageSize = 7439 ) type Notifier struct { conf *config.WebexConfig tmpl *template.Template logger *slog.Logger client *http.Client retrier *notify.Retrier } // New returns a new Webex notifier. func New(c *config.WebexConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "webex", httpOpts...) if err != nil { return nil, err } n := &Notifier{ conf: c, tmpl: t, logger: l, client: client, retrier: ¬ify.Retrier{}, } return n, nil } type webhook struct { Markdown string `json:"markdown"` RoomID string `json:"roomId,omitempty"` } // Notify implements the Notifier interface. func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { key, err := notify.ExtractGroupKey(ctx) if err != nil { return false, err } n.logger.Debug("extracted group key", "key", key) data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger) tmpl := notify.TmplText(n.tmpl, data, &err) if err != nil { return false, err } message := tmpl(n.conf.Message) if err != nil { return false, err } message, truncated := notify.TruncateInBytes(message, maxMessageSize) if truncated { n.logger.Debug("message truncated due to exceeding maximum allowed length by webex", "truncated_message", message) } w := webhook{ Markdown: message, RoomID: tmpl(n.conf.RoomID), } var payload bytes.Buffer if err = json.NewEncoder(&payload).Encode(w); err != nil { return false, err } resp, err := notify.PostJSON(ctx, n.client, n.conf.APIURL.String(), &payload) if err != nil { return true, notify.RedactURL(err) } shouldRetry, err := n.retrier.Check(resp.StatusCode, resp.Body) if err != nil { return shouldRetry, err } return false, nil } prometheus-alertmanager-0.28.1+ds/notify/webex/webex_test.go000066400000000000000000000112601476331240200241630ustar00rootroot00000000000000// Copyright 2022 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package webex import ( "context" "fmt" "io" "net/http" "net/http/httptest" "net/url" "testing" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/notify/test" "github.com/prometheus/alertmanager/types" ) func TestWebexRetry(t *testing.T) { testWebhookURL, err := url.Parse("https://api.ciscospark.com/v1/message") require.NoError(t, err) notifier, err := New( &config.WebexConfig{ HTTPConfig: &commoncfg.HTTPClientConfig{}, APIURL: &config.URL{URL: testWebhookURL}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) for statusCode, expected := range test.RetryTests(test.DefaultRetryCodes()) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("error on status %d", statusCode)) } } func TestWebexTemplating(t *testing.T) { tc := []struct { name string cfg *config.WebexConfig Message string expJSON string commonCfg *commoncfg.HTTPClientConfig retry bool errMsg string expHeader string }{ { name: "with a valid message and a set http_config.authorization, it is formatted as expected", cfg: &config.WebexConfig{ Message: `{{ template "webex.default.message" . }}`, }, commonCfg: &commoncfg.HTTPClientConfig{ Authorization: &commoncfg.Authorization{Type: "Bearer", Credentials: "anewsecret"}, }, expJSON: `{"markdown":"\n\nAlerts Firing:\nLabels:\n - lbl1 = val1\n - lbl3 = val3\nAnnotations:\nSource: \nLabels:\n - lbl1 = val1\n - lbl2 = val2\nAnnotations:\nSource: \n\n\n\n"}`, retry: false, expHeader: "Bearer anewsecret", }, { name: "with message templating errors, it fails.", cfg: &config.WebexConfig{ Message: "{{ ", }, commonCfg: &commoncfg.HTTPClientConfig{}, errMsg: "template: :1: unclosed action", }, { name: "with a valid roomID set, the roomID is used accordingly.", cfg: &config.WebexConfig{ RoomID: "my-room-id", }, commonCfg: &commoncfg.HTTPClientConfig{}, expJSON: `{"markdown":"", "roomId":"my-room-id"}`, retry: false, }, { name: "with a valid roomID template, the roomID is used accordingly.", cfg: &config.WebexConfig{ RoomID: "{{.GroupLabels.webex_room_id}}", }, commonCfg: &commoncfg.HTTPClientConfig{}, expJSON: `{"markdown":"", "roomId":"group-label-room-id"}`, retry: false, }, } for _, tt := range tc { t.Run(tt.name, func(t *testing.T) { var out []byte var header http.Header srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { var err error out, err = io.ReadAll(r.Body) header = r.Header.Clone() require.NoError(t, err) })) defer srv.Close() u, _ := url.Parse(srv.URL) tt.cfg.APIURL = &config.URL{URL: u} tt.cfg.HTTPConfig = tt.commonCfg notifierWebex, err := New(tt.cfg, test.CreateTmpl(t), promslog.NewNopLogger()) require.NoError(t, err) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() ctx = notify.WithGroupKey(ctx, "1") ctx = notify.WithGroupLabels(ctx, model.LabelSet{"webex_room_id": "group-label-room-id"}) ok, err := notifierWebex.Notify(ctx, []*types.Alert{ { Alert: model.Alert{ Labels: model.LabelSet{ "lbl1": "val1", "lbl3": "val3", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, { Alert: model.Alert{ Labels: model.LabelSet{ "lbl1": "val1", "lbl2": "val2", }, StartsAt: time.Now(), EndsAt: time.Now().Add(time.Hour), }, }, }...) if tt.errMsg == "" { require.NoError(t, err) require.Equal(t, tt.expHeader, header.Get("Authorization")) require.JSONEq(t, tt.expJSON, string(out)) } else { require.Error(t, err) require.Contains(t, err.Error(), tt.errMsg) } require.Equal(t, tt.retry, ok) }) } } prometheus-alertmanager-0.28.1+ds/notify/webhook/000077500000000000000000000000001476331240200220075ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/webhook/webhook.go000066400000000000000000000075021476331240200240000ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package webhook import ( "bytes" "context" "encoding/json" "fmt" "log/slog" "net/http" "os" "strings" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) // Notifier implements a Notifier for generic webhooks. type Notifier struct { conf *config.WebhookConfig tmpl *template.Template logger *slog.Logger client *http.Client retrier *notify.Retrier } // New returns a new Webhook. func New(conf *config.WebhookConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*conf.HTTPConfig, "webhook", httpOpts...) if err != nil { return nil, err } return &Notifier{ conf: conf, tmpl: t, logger: l, client: client, // Webhooks are assumed to respond with 2xx response codes on a successful // request and 5xx response codes are assumed to be recoverable. retrier: ¬ify.Retrier{}, }, nil } // Message defines the JSON object send to webhook endpoints. type Message struct { *template.Data // The protocol version. Version string `json:"version"` GroupKey string `json:"groupKey"` TruncatedAlerts uint64 `json:"truncatedAlerts"` } func truncateAlerts(maxAlerts uint64, alerts []*types.Alert) ([]*types.Alert, uint64) { if maxAlerts != 0 && uint64(len(alerts)) > maxAlerts { return alerts[:maxAlerts], uint64(len(alerts)) - maxAlerts } return alerts, 0 } // Notify implements the Notifier interface. func (n *Notifier) Notify(ctx context.Context, alerts ...*types.Alert) (bool, error) { alerts, numTruncated := truncateAlerts(n.conf.MaxAlerts, alerts) data := notify.GetTemplateData(ctx, n.tmpl, alerts, n.logger) groupKey, err := notify.ExtractGroupKey(ctx) if err != nil { // @tjhop: should we `return false, err` here as we do in most // other Notify() implementations? n.logger.Error("error extracting group key", "err", err) } // @tjhop: should we debug log the key here like most other Notify() implementations? msg := &Message{ Version: "4", Data: data, GroupKey: groupKey.String(), TruncatedAlerts: numTruncated, } var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(msg); err != nil { return false, err } var url string if n.conf.URL != nil { url = n.conf.URL.String() } else { content, err := os.ReadFile(n.conf.URLFile) if err != nil { return false, fmt.Errorf("read url_file: %w", err) } url = strings.TrimSpace(string(content)) } if n.conf.Timeout > 0 { postCtx, cancel := context.WithTimeoutCause(ctx, n.conf.Timeout, fmt.Errorf("configured webhook timeout reached (%s)", n.conf.Timeout)) defer cancel() ctx = postCtx } resp, err := notify.PostJSON(ctx, n.client, url, &buf) if err != nil { if ctx.Err() != nil { err = fmt.Errorf("%w: %w", err, context.Cause(ctx)) } return true, notify.RedactURL(err) } defer notify.Drain(resp) shouldRetry, err := n.retrier.Check(resp.StatusCode, resp.Body) if err != nil { return shouldRetry, notify.NewErrorWithReason(notify.GetFailureReasonFromStatusCode(resp.StatusCode), err) } return shouldRetry, err } prometheus-alertmanager-0.28.1+ds/notify/webhook/webhook_test.go000066400000000000000000000072171476331240200250420ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package webhook import ( "bytes" "fmt" "io" "net/http" "net/url" "os" "testing" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify/test" "github.com/prometheus/alertmanager/types" ) func TestWebhookRetry(t *testing.T) { u, err := url.Parse("http://example.com") if err != nil { require.NoError(t, err) } notifier, err := New( &config.WebhookConfig{ URL: &config.SecretURL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) if err != nil { require.NoError(t, err) } t.Run("test retry status code", func(t *testing.T) { for statusCode, expected := range test.RetryTests(test.DefaultRetryCodes()) { actual, _ := notifier.retrier.Check(statusCode, nil) require.Equal(t, expected, actual, fmt.Sprintf("error on status %d", statusCode)) } }) t.Run("test retry error details", func(t *testing.T) { for _, tc := range []struct { status int body io.Reader exp string }{ { status: http.StatusBadRequest, body: bytes.NewBuffer([]byte( `{"status":"invalid event"}`, )), exp: fmt.Sprintf(`unexpected status code %d: {"status":"invalid event"}`, http.StatusBadRequest), }, { status: http.StatusBadRequest, exp: fmt.Sprintf(`unexpected status code %d`, http.StatusBadRequest), }, } { t.Run("", func(t *testing.T) { _, err = notifier.retrier.Check(tc.status, tc.body) require.Equal(t, tc.exp, err.Error()) }) } }) } func TestWebhookTruncateAlerts(t *testing.T) { alerts := make([]*types.Alert, 10) truncatedAlerts, numTruncated := truncateAlerts(0, alerts) require.Len(t, truncatedAlerts, 10) require.EqualValues(t, 0, numTruncated) truncatedAlerts, numTruncated = truncateAlerts(4, alerts) require.Len(t, truncatedAlerts, 4) require.EqualValues(t, 6, numTruncated) truncatedAlerts, numTruncated = truncateAlerts(100, alerts) require.Len(t, truncatedAlerts, 10) require.EqualValues(t, 0, numTruncated) } func TestWebhookRedactedURL(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() secret := "secret" notifier, err := New( &config.WebhookConfig{ URL: &config.SecretURL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, secret) } func TestWebhookReadingURLFromFile(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() f, err := os.CreateTemp("", "webhook_url") require.NoError(t, err, "creating temp file failed") _, err = f.WriteString(u.String() + "\n") require.NoError(t, err, "writing to temp file failed") notifier, err := New( &config.WebhookConfig{ URLFile: f.Name(), HTTPConfig: &commoncfg.HTTPClientConfig{}, }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, u.String()) } prometheus-alertmanager-0.28.1+ds/notify/wechat/000077500000000000000000000000001476331240200216245ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/notify/wechat/wechat.go000066400000000000000000000124511476331240200234310ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package wechat import ( "bytes" "context" "encoding/json" "errors" "fmt" "io" "log/slog" "net/http" "net/url" "time" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/template" "github.com/prometheus/alertmanager/types" ) // Notifier implements a Notifier for wechat notifications. type Notifier struct { conf *config.WechatConfig tmpl *template.Template logger *slog.Logger client *http.Client accessToken string accessTokenAt time.Time } // token is the AccessToken with corpid and corpsecret. type token struct { AccessToken string `json:"access_token"` } type weChatMessage struct { Text weChatMessageContent `yaml:"text,omitempty" json:"text,omitempty"` ToUser string `yaml:"touser,omitempty" json:"touser,omitempty"` ToParty string `yaml:"toparty,omitempty" json:"toparty,omitempty"` Totag string `yaml:"totag,omitempty" json:"totag,omitempty"` AgentID string `yaml:"agentid,omitempty" json:"agentid,omitempty"` Safe string `yaml:"safe,omitempty" json:"safe,omitempty"` Type string `yaml:"msgtype,omitempty" json:"msgtype,omitempty"` Markdown weChatMessageContent `yaml:"markdown,omitempty" json:"markdown,omitempty"` } type weChatMessageContent struct { Content string `json:"content"` } type weChatResponse struct { Code int `json:"errcode"` Error string `json:"errmsg"` } // New returns a new Wechat notifier. func New(c *config.WechatConfig, t *template.Template, l *slog.Logger, httpOpts ...commoncfg.HTTPClientOption) (*Notifier, error) { client, err := commoncfg.NewClientFromConfig(*c.HTTPConfig, "wechat", httpOpts...) if err != nil { return nil, err } return &Notifier{conf: c, tmpl: t, logger: l, client: client}, nil } // Notify implements the Notifier interface. func (n *Notifier) Notify(ctx context.Context, as ...*types.Alert) (bool, error) { key, err := notify.ExtractGroupKey(ctx) if err != nil { return false, err } n.logger.Debug("extracted group key", "key", key) data := notify.GetTemplateData(ctx, n.tmpl, as, n.logger) tmpl := notify.TmplText(n.tmpl, data, &err) if err != nil { return false, err } // Refresh AccessToken over 2 hours if n.accessToken == "" || time.Since(n.accessTokenAt) > 2*time.Hour { parameters := url.Values{} parameters.Add("corpsecret", tmpl(string(n.conf.APISecret))) parameters.Add("corpid", tmpl(string(n.conf.CorpID))) if err != nil { return false, fmt.Errorf("templating error: %w", err) } u := n.conf.APIURL.Copy() u.Path += "gettoken" u.RawQuery = parameters.Encode() resp, err := notify.Get(ctx, n.client, u.String()) if err != nil { return true, notify.RedactURL(err) } defer notify.Drain(resp) var wechatToken token if err := json.NewDecoder(resp.Body).Decode(&wechatToken); err != nil { return false, err } if wechatToken.AccessToken == "" { return false, fmt.Errorf("invalid APISecret for CorpID: %s", n.conf.CorpID) } // Cache accessToken n.accessToken = wechatToken.AccessToken n.accessTokenAt = time.Now() } msg := &weChatMessage{ ToUser: tmpl(n.conf.ToUser), ToParty: tmpl(n.conf.ToParty), Totag: tmpl(n.conf.ToTag), AgentID: tmpl(n.conf.AgentID), Type: n.conf.MessageType, Safe: "0", } if msg.Type == "markdown" { msg.Markdown = weChatMessageContent{ Content: tmpl(n.conf.Message), } } else { msg.Text = weChatMessageContent{ Content: tmpl(n.conf.Message), } } if err != nil { return false, fmt.Errorf("templating error: %w", err) } var buf bytes.Buffer if err := json.NewEncoder(&buf).Encode(msg); err != nil { return false, err } postMessageURL := n.conf.APIURL.Copy() postMessageURL.Path += "message/send" q := postMessageURL.Query() q.Set("access_token", n.accessToken) postMessageURL.RawQuery = q.Encode() resp, err := notify.PostJSON(ctx, n.client, postMessageURL.String(), &buf) if err != nil { return true, notify.RedactURL(err) } defer notify.Drain(resp) if resp.StatusCode != 200 { return true, notify.NewErrorWithReason(notify.GetFailureReasonFromStatusCode(resp.StatusCode), fmt.Errorf("unexpected status code %v", resp.StatusCode)) } body, err := io.ReadAll(resp.Body) if err != nil { return true, err } n.logger.Debug(string(body), "incident", key) var weResp weChatResponse if err := json.Unmarshal(body, &weResp); err != nil { return true, err } // https://work.weixin.qq.com/api/doc#10649 if weResp.Code == 0 { return false, nil } // AccessToken is expired if weResp.Code == 42001 { n.accessToken = "" return true, errors.New(weResp.Error) } return false, errors.New(weResp.Error) } prometheus-alertmanager-0.28.1+ds/notify/wechat/wechat_test.go000066400000000000000000000050111476331240200244620ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package wechat import ( "fmt" "net/http" "testing" commoncfg "github.com/prometheus/common/config" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/config" "github.com/prometheus/alertmanager/notify/test" ) func TestWechatRedactedURLOnInitialAuthentication(t *testing.T) { ctx, u, fn := test.GetContextWithCancelingURL() defer fn() secret := "secret_key" notifier, err := New( &config.WechatConfig{ APIURL: &config.URL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, CorpID: "corpid", APISecret: config.Secret(secret), }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, secret) } func TestWechatRedactedURLOnNotify(t *testing.T) { secret, token := "secret", "token" ctx, u, fn := test.GetContextWithCancelingURL(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, `{"access_token":"%s"}`, token) }) defer fn() notifier, err := New( &config.WechatConfig{ APIURL: &config.URL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, CorpID: "corpid", APISecret: config.Secret(secret), }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, secret, token) } func TestWechatMessageTypeSelector(t *testing.T) { secret, token := "secret", "token" ctx, u, fn := test.GetContextWithCancelingURL(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, `{"access_token":"%s"}`, token) }) defer fn() notifier, err := New( &config.WechatConfig{ APIURL: &config.URL{URL: u}, HTTPConfig: &commoncfg.HTTPClientConfig{}, CorpID: "corpid", APISecret: config.Secret(secret), MessageType: "markdown", }, test.CreateTmpl(t), promslog.NewNopLogger(), ) require.NoError(t, err) test.AssertNotifyLeaksNoSecret(ctx, t, notifier, secret, token) } prometheus-alertmanager-0.28.1+ds/pkg/000077500000000000000000000000001476331240200176225ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/pkg/README.md000066400000000000000000000002131476331240200210750ustar00rootroot00000000000000The `pkg` directory is deprecated. Please do not add new packages to this directory. Existing packages will be moved elsewhere eventually. prometheus-alertmanager-0.28.1+ds/pkg/labels/000077500000000000000000000000001476331240200210645ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/pkg/labels/matcher.go000066400000000000000000000123121476331240200230350ustar00rootroot00000000000000// Copyright 2017 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package labels import ( "bytes" "encoding/json" "fmt" "regexp" "strconv" "strings" "unicode" "github.com/prometheus/common/model" ) // MatchType is an enum for label matching types. type MatchType int // Possible MatchTypes. const ( MatchEqual MatchType = iota MatchNotEqual MatchRegexp MatchNotRegexp ) func (m MatchType) String() string { typeToStr := map[MatchType]string{ MatchEqual: "=", MatchNotEqual: "!=", MatchRegexp: "=~", MatchNotRegexp: "!~", } if str, ok := typeToStr[m]; ok { return str } panic("unknown match type") } // Matcher models the matching of a label. type Matcher struct { Type MatchType Name string Value string re *regexp.Regexp } // NewMatcher returns a matcher object. func NewMatcher(t MatchType, n, v string) (*Matcher, error) { m := &Matcher{ Type: t, Name: n, Value: v, } if t == MatchRegexp || t == MatchNotRegexp { re, err := regexp.Compile("^(?:" + v + ")$") if err != nil { return nil, err } m.re = re } return m, nil } func (m *Matcher) String() string { if strings.ContainsFunc(m.Name, isReserved) { return fmt.Sprintf(`%s%s%s`, strconv.Quote(m.Name), m.Type, strconv.Quote(m.Value)) } return fmt.Sprintf(`%s%s"%s"`, m.Name, m.Type, openMetricsEscape(m.Value)) } // Matches returns whether the matcher matches the given string value. func (m *Matcher) Matches(s string) bool { switch m.Type { case MatchEqual: return s == m.Value case MatchNotEqual: return s != m.Value case MatchRegexp: return m.re.MatchString(s) case MatchNotRegexp: return !m.re.MatchString(s) } panic("labels.Matcher.Matches: invalid match type") } type apiV1Matcher struct { Name string `json:"name"` Value string `json:"value"` IsRegex bool `json:"isRegex"` IsEqual bool `json:"isEqual"` } // MarshalJSON retains backwards compatibility with types.Matcher for the v1 API. func (m Matcher) MarshalJSON() ([]byte, error) { return json.Marshal(apiV1Matcher{ Name: m.Name, Value: m.Value, IsRegex: m.Type == MatchRegexp || m.Type == MatchNotRegexp, IsEqual: m.Type == MatchRegexp || m.Type == MatchEqual, }) } func (m *Matcher) UnmarshalJSON(data []byte) error { v1m := apiV1Matcher{ IsEqual: true, } if err := json.Unmarshal(data, &v1m); err != nil { return err } var t MatchType switch { case v1m.IsEqual && !v1m.IsRegex: t = MatchEqual case !v1m.IsEqual && !v1m.IsRegex: t = MatchNotEqual case v1m.IsEqual && v1m.IsRegex: t = MatchRegexp case !v1m.IsEqual && v1m.IsRegex: t = MatchNotRegexp } matcher, err := NewMatcher(t, v1m.Name, v1m.Value) if err != nil { return err } *m = *matcher return nil } // openMetricsEscape is similar to the usual string escaping, but more // restricted. It merely replaces a new-line character with '\n', a double-quote // character with '\"', and a backslash with '\\', which is the escaping used by // OpenMetrics. func openMetricsEscape(s string) string { r := strings.NewReplacer( `\`, `\\`, "\n", `\n`, `"`, `\"`, ) return r.Replace(s) } // Matchers is a slice of Matchers that is sortable, implements Stringer, and // provides a Matches method to match a LabelSet against all Matchers in the // slice. Note that some users of Matchers might require it to be sorted. type Matchers []*Matcher func (ms Matchers) Len() int { return len(ms) } func (ms Matchers) Swap(i, j int) { ms[i], ms[j] = ms[j], ms[i] } func (ms Matchers) Less(i, j int) bool { if ms[i].Name > ms[j].Name { return false } if ms[i].Name < ms[j].Name { return true } if ms[i].Value > ms[j].Value { return false } if ms[i].Value < ms[j].Value { return true } return ms[i].Type < ms[j].Type } // Matches checks whether all matchers are fulfilled against the given label set. func (ms Matchers) Matches(lset model.LabelSet) bool { for _, m := range ms { if !m.Matches(string(lset[model.LabelName(m.Name)])) { return false } } return true } func (ms Matchers) String() string { var buf bytes.Buffer buf.WriteByte('{') for i, m := range ms { if i > 0 { buf.WriteByte(',') } buf.WriteString(m.String()) } buf.WriteByte('}') return buf.String() } // This is copied from matcher/parse/lexer.go. It will be removed when // the transition window from classic matchers to UTF-8 matchers is complete, // as then we can use double quotes when printing the label name for all // matchers. Until then, the classic parser does not understand double quotes // around the label name, so we use this function as a heuristic to tell if // the matcher was parsed with the UTF-8 parser or the classic parser. func isReserved(r rune) bool { return unicode.IsSpace(r) || strings.ContainsRune("{}!=~,\\\"'`", r) } prometheus-alertmanager-0.28.1+ds/pkg/labels/matcher_test.go000066400000000000000000000156751476331240200241130ustar00rootroot00000000000000// Copyright 2017 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package labels import ( "encoding/json" "testing" ) func mustNewMatcher(t *testing.T, mType MatchType, value string) *Matcher { m, err := NewMatcher(mType, "", value) if err != nil { t.Fatal(err) } return m } func TestMatcher(t *testing.T) { tests := []struct { matcher *Matcher value string match bool }{ { matcher: mustNewMatcher(t, MatchEqual, "bar"), value: "bar", match: true, }, { matcher: mustNewMatcher(t, MatchEqual, "bar"), value: "foo-bar", match: false, }, { matcher: mustNewMatcher(t, MatchNotEqual, "bar"), value: "bar", match: false, }, { matcher: mustNewMatcher(t, MatchNotEqual, "bar"), value: "foo-bar", match: true, }, { matcher: mustNewMatcher(t, MatchRegexp, "bar"), value: "bar", match: true, }, { matcher: mustNewMatcher(t, MatchRegexp, "bar"), value: "foo-bar", match: false, }, { matcher: mustNewMatcher(t, MatchRegexp, ".*bar"), value: "foo-bar", match: true, }, { matcher: mustNewMatcher(t, MatchNotRegexp, "bar"), value: "bar", match: false, }, { matcher: mustNewMatcher(t, MatchNotRegexp, "bar"), value: "foo-bar", match: true, }, { matcher: mustNewMatcher(t, MatchNotRegexp, ".*bar"), value: "foo-bar", match: false, }, { matcher: mustNewMatcher(t, MatchRegexp, `foo.bar`), value: "foo-bar", match: true, }, { matcher: mustNewMatcher(t, MatchRegexp, `foo\.bar`), value: "foo-bar", match: false, }, { matcher: mustNewMatcher(t, MatchRegexp, `foo\.bar`), value: "foo.bar", match: true, }, { matcher: mustNewMatcher(t, MatchEqual, "foo\nbar"), value: "foo\nbar", match: true, }, { matcher: mustNewMatcher(t, MatchRegexp, "foo.bar"), value: "foo\nbar", match: false, }, { matcher: mustNewMatcher(t, MatchRegexp, "(?s)foo.bar"), value: "foo\nbar", match: true, }, { matcher: mustNewMatcher(t, MatchEqual, "~!=\""), value: "~!=\"", match: true, }, } for _, test := range tests { if test.matcher.Matches(test.value) != test.match { t.Fatalf("Unexpected match result for matcher %v and value %q; want %v, got %v", test.matcher, test.value, test.match, !test.match) } } } func TestMatcherString(t *testing.T) { tests := []struct { name string op MatchType value string want string }{ { name: `foo`, op: MatchEqual, value: `bar`, want: `foo="bar"`, }, { name: `foo`, op: MatchNotEqual, value: `bar`, want: `foo!="bar"`, }, { name: `foo`, op: MatchRegexp, value: `bar`, want: `foo=~"bar"`, }, { name: `foo`, op: MatchNotRegexp, value: `bar`, want: `foo!~"bar"`, }, { name: `foo`, op: MatchEqual, value: `back\slash`, want: `foo="back\\slash"`, }, { name: `foo`, op: MatchEqual, value: `double"quote`, want: `foo="double\"quote"`, }, { name: `foo`, op: MatchEqual, value: `new line`, want: `foo="new\nline"`, }, { name: `foo`, op: MatchEqual, value: `tab stop`, want: `foo="tab stop"`, }, { name: `foo`, op: MatchEqual, value: `🙂`, want: `foo="🙂"`, }, { name: `foo!`, op: MatchNotEqual, value: `bar`, want: `"foo!"!="bar"`, }, { name: `foo🙂`, op: MatchEqual, value: `bar`, want: `foo🙂="bar"`, }, { name: `foo bar`, op: MatchEqual, value: `baz`, want: `"foo bar"="baz"`, }, } for _, test := range tests { m, err := NewMatcher(test.op, test.name, test.value) if err != nil { t.Fatal(err) } if got := m.String(); got != test.want { t.Errorf("Unexpected string representation of matcher; want %v, got %v", test.want, got) } } } func TestMatcherJSONMarshal(t *testing.T) { tests := []struct { name string op MatchType value string want string }{ { name: `foo`, op: MatchEqual, value: `bar`, want: `{"name":"foo","value":"bar","isRegex":false,"isEqual":true}`, }, { name: `foo`, op: MatchNotEqual, value: `bar`, want: `{"name":"foo","value":"bar","isRegex":false,"isEqual":false}`, }, { name: `foo`, op: MatchRegexp, value: `bar`, want: `{"name":"foo","value":"bar","isRegex":true,"isEqual":true}`, }, { name: `foo`, op: MatchNotRegexp, value: `bar`, want: `{"name":"foo","value":"bar","isRegex":true,"isEqual":false}`, }, } cmp := func(m1, m2 Matcher) bool { return m1.Name == m2.Name && m1.Value == m2.Value && m1.Type == m2.Type } for _, test := range tests { m, err := NewMatcher(test.op, test.name, test.value) if err != nil { t.Fatal(err) } b, err := json.Marshal(m) if err != nil { t.Fatal(err) } if got := string(b); got != test.want { t.Errorf("Unexpected JSON representation of matcher:\nwant:\t%v\ngot:\t%v", test.want, got) } var m2 Matcher if err := json.Unmarshal(b, &m2); err != nil { t.Fatal(err) } if !cmp(*m, m2) { t.Errorf("Doing Marshal and Unmarshal seems to be losing data; before %#v, after %#v", m, m2) } } } func TestMatcherJSONUnmarshal(t *testing.T) { tests := []struct { name string op MatchType value string want string }{ { name: "foo", op: MatchEqual, value: "bar", want: `{"name":"foo","value":"bar","isRegex":false}`, }, { name: `foo`, op: MatchEqual, value: `bar`, want: `{"name":"foo","value":"bar","isRegex":false,"isEqual":true}`, }, { name: `foo`, op: MatchNotEqual, value: `bar`, want: `{"name":"foo","value":"bar","isRegex":false,"isEqual":false}`, }, { name: `foo`, op: MatchRegexp, value: `bar`, want: `{"name":"foo","value":"bar","isRegex":true,"isEqual":true}`, }, { name: `foo`, op: MatchNotRegexp, value: `bar`, want: `{"name":"foo","value":"bar","isRegex":true,"isEqual":false}`, }, } cmp := func(m1, m2 Matcher) bool { return m1.Name == m2.Name && m1.Value == m2.Value && m1.Type == m2.Type } for _, test := range tests { var m Matcher if err := json.Unmarshal([]byte(test.want), &m); err != nil { t.Fatal(err) } m2, err := NewMatcher(test.op, test.name, test.value) if err != nil { t.Fatal(err) } if !cmp(m, *m2) { t.Errorf("Unmarshaling seems to be producing unexpected matchers; got %#v, expected %#v", m, m2) } } } prometheus-alertmanager-0.28.1+ds/pkg/labels/parse.go000066400000000000000000000124041476331240200225260ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package labels import ( "fmt" "regexp" "strings" "unicode/utf8" ) var ( // '=~' has to come before '=' because otherwise only the '=' // will be consumed, and the '~' will be part of the 3rd token. re = regexp.MustCompile(`^\s*([a-zA-Z_:][a-zA-Z0-9_:]*)\s*(=~|=|!=|!~)\s*((?s).*?)\s*$`) typeMap = map[string]MatchType{ "=": MatchEqual, "!=": MatchNotEqual, "=~": MatchRegexp, "!~": MatchNotRegexp, } ) // ParseMatchers parses a comma-separated list of Matchers. A leading '{' and/or // a trailing '}' is optional and will be trimmed before further // parsing. Individual Matchers are separated by commas outside of quoted parts // of the input string. Those commas may be surrounded by whitespace. Parts of the // string inside unescaped double quotes ('"…"') are considered quoted (and // commas don't act as separators there). If double quotes are escaped with a // single backslash ('\"'), they are ignored for the purpose of identifying // quoted parts of the input string. If the input string, after trimming the // optional trailing '}', ends with a comma, followed by optional whitespace, // this comma and whitespace will be trimmed. // // Examples for valid input strings: // // {foo = "bar", dings != "bums", } // foo=bar,dings!=bums // foo=bar, dings!=bums // {quote="She said: \"Hi, ladies! That's gender-neutral…\""} // statuscode=~"5.." // // See ParseMatcher for details on how an individual Matcher is parsed. func ParseMatchers(s string) ([]*Matcher, error) { matchers := []*Matcher{} s = strings.TrimPrefix(s, "{") s = strings.TrimSuffix(s, "}") var ( insideQuotes bool escaped bool token strings.Builder tokens []string ) for _, r := range s { switch r { case ',': if !insideQuotes { tokens = append(tokens, token.String()) token.Reset() continue } case '"': if !escaped { insideQuotes = !insideQuotes } else { escaped = false } case '\\': escaped = !escaped default: escaped = false } token.WriteRune(r) } if s := strings.TrimSpace(token.String()); s != "" { tokens = append(tokens, s) } for _, token := range tokens { m, err := ParseMatcher(token) if err != nil { return nil, err } matchers = append(matchers, m) } return matchers, nil } // ParseMatcher parses a matcher with a syntax inspired by PromQL and // OpenMetrics. This syntax is convenient to describe filters and selectors in // UIs and config files. To support the interactive nature of the use cases, the // parser is in various aspects fairly tolerant. // // The syntax of a matcher consists of three tokens: (1) A valid Prometheus // label name. (2) One of '=', '!=', '=~', or '!~', with the same meaning as // known from PromQL selectors. (3) A UTF-8 string, which may be enclosed in // double quotes. Before or after each token, there may be any amount of // whitespace, which will be discarded. The 3rd token may be the empty // string. Within the 3rd token, OpenMetrics escaping rules apply: '\"' for a // double-quote, '\n' for a line feed, '\\' for a literal backslash. Unescaped // '"' must not occur inside the 3rd token (only as the 1st or last // character). However, literal line feed characters are tolerated, as are // single '\' characters not followed by '\', 'n', or '"'. They act as a literal // backslash in that case. func ParseMatcher(s string) (_ *Matcher, err error) { ms := re.FindStringSubmatch(s) if len(ms) == 0 { return nil, fmt.Errorf("bad matcher format: %s", s) } var ( rawValue = ms[3] value strings.Builder escaped bool expectTrailingQuote bool ) if strings.HasPrefix(rawValue, "\"") { rawValue = strings.TrimPrefix(rawValue, "\"") expectTrailingQuote = true } if !utf8.ValidString(rawValue) { return nil, fmt.Errorf("matcher value not valid UTF-8: %s", ms[3]) } // Unescape the rawValue. for i, r := range rawValue { if escaped { escaped = false switch r { case 'n': value.WriteByte('\n') case '"', '\\': value.WriteRune(r) default: // This was a spurious escape, so treat the '\' as literal. value.WriteByte('\\') value.WriteRune(r) } continue } switch r { case '\\': if i < len(rawValue)-1 { escaped = true continue } // '\' encountered as last byte. Treat it as literal. value.WriteByte('\\') case '"': if !expectTrailingQuote || i < len(rawValue)-1 { return nil, fmt.Errorf("matcher value contains unescaped double quote: %s", ms[3]) } expectTrailingQuote = false default: value.WriteRune(r) } } if expectTrailingQuote { return nil, fmt.Errorf("matcher value contains unescaped double quote: %s", ms[3]) } return NewMatcher(typeMap[ms[2]], ms[1], value.String()) } prometheus-alertmanager-0.28.1+ds/pkg/labels/parse_test.go000066400000000000000000000235361476331240200235750ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package labels import ( "reflect" "testing" ) func TestMatchers(t *testing.T) { for _, tc := range []struct { input string want []*Matcher err string }{ { input: `{}`, want: make([]*Matcher, 0), }, { input: `,`, err: "bad matcher format: ", }, { input: `{,}`, err: "bad matcher format: ", }, { input: `{foo='}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "'") return append(ms, m) }(), }, { input: "{foo=`}", want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "`") return append(ms, m) }(), }, { input: "{foo=\\\"}", want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "\"") return append(ms, m) }(), }, { input: `{foo=bar}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar") return append(ms, m) }(), }, { input: `{foo="bar"}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar") return append(ms, m) }(), }, { input: `{foo=~bar.*}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchRegexp, "foo", "bar.*") return append(ms, m) }(), }, { input: `{foo=~"bar.*"}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchRegexp, "foo", "bar.*") return append(ms, m) }(), }, { input: `{foo!=bar}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchNotEqual, "foo", "bar") return append(ms, m) }(), }, { input: `{foo!="bar"}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchNotEqual, "foo", "bar") return append(ms, m) }(), }, { input: `{foo!~bar.*}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchNotRegexp, "foo", "bar.*") return append(ms, m) }(), }, { input: `{foo!~"bar.*"}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchNotRegexp, "foo", "bar.*") return append(ms, m) }(), }, { input: `{foo="bar", baz!="quux"}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar") m2, _ := NewMatcher(MatchNotEqual, "baz", "quux") return append(ms, m, m2) }(), }, { input: `{foo="bar", baz!~"quux.*"}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar") m2, _ := NewMatcher(MatchNotRegexp, "baz", "quux.*") return append(ms, m, m2) }(), }, { input: `{foo="bar",baz!~".*quux", derp="wat"}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar") m2, _ := NewMatcher(MatchNotRegexp, "baz", ".*quux") m3, _ := NewMatcher(MatchEqual, "derp", "wat") return append(ms, m, m2, m3) }(), }, { input: `{foo="bar", baz!="quux", derp="wat"}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar") m2, _ := NewMatcher(MatchNotEqual, "baz", "quux") m3, _ := NewMatcher(MatchEqual, "derp", "wat") return append(ms, m, m2, m3) }(), }, { input: `{foo="bar", baz!~".*quux.*", derp="wat"}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar") m2, _ := NewMatcher(MatchNotRegexp, "baz", ".*quux.*") m3, _ := NewMatcher(MatchEqual, "derp", "wat") return append(ms, m, m2, m3) }(), }, { input: `{foo="bar", instance=~"some-api.*"}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar") m2, _ := NewMatcher(MatchRegexp, "instance", "some-api.*") return append(ms, m, m2) }(), }, { input: `{foo=""}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "") return append(ms, m) }(), }, { input: `{foo="bar,quux", job="job1"}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar,quux") m2, _ := NewMatcher(MatchEqual, "job", "job1") return append(ms, m, m2) }(), }, { input: `{foo = "bar", dings != "bums", }`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar") m2, _ := NewMatcher(MatchNotEqual, "dings", "bums") return append(ms, m, m2) }(), }, { input: `foo=bar,dings!=bums`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar") m2, _ := NewMatcher(MatchNotEqual, "dings", "bums") return append(ms, m, m2) }(), }, { input: `{quote="She said: \"Hi, ladies! That's gender-neutral…\""}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "quote", `She said: "Hi, ladies! That's gender-neutral…"`) return append(ms, m) }(), }, { input: `statuscode=~"5.."`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchRegexp, "statuscode", "5..") return append(ms, m) }(), }, { input: `tricky=~~~`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchRegexp, "tricky", "~~") return append(ms, m) }(), }, { input: `trickier==\\=\=\"`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "trickier", `=\=\="`) return append(ms, m) }(), }, { input: `contains_quote != "\"" , contains_comma !~ "foo,bar" , `, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchNotEqual, "contains_quote", `"`) m2, _ := NewMatcher(MatchNotRegexp, "contains_comma", "foo,bar") return append(ms, m, m2) }(), }, { input: `{foo=bar}}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar}") return append(ms, m) }(), }, { input: `{foo=bar}},}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar}}") return append(ms, m) }(), }, { input: `{foo=,bar=}}`, want: func() []*Matcher { ms := []*Matcher{} m1, _ := NewMatcher(MatchEqual, "foo", "") m2, _ := NewMatcher(MatchEqual, "bar", "}") return append(ms, m1, m2) }(), }, { input: `{foo=bar\t}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar\\t") return append(ms, m) }(), }, { input: `{foo=bar\n}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar\n") return append(ms, m) }(), }, { input: `{foo=bar\}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar\\") return append(ms, m) }(), }, { input: `{foo=bar\\}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar\\") return append(ms, m) }(), }, { input: `{foo=bar\"}`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "bar\"") return append(ms, m) }(), }, { input: `job=`, want: func() []*Matcher { m, _ := NewMatcher(MatchEqual, "job", "") return []*Matcher{m} }(), }, { input: `job="value`, err: `matcher value contains unescaped double quote: "value`, }, { input: `job=value"`, err: `matcher value contains unescaped double quote: value"`, }, { input: `trickier==\\=\=\""`, err: `matcher value contains unescaped double quote: =\\=\=\""`, }, { input: `contains_unescaped_quote = foo"bar`, err: `matcher value contains unescaped double quote: foo"bar`, }, { input: `{invalid-name = "valid label"}`, err: `bad matcher format: invalid-name = "valid label"`, }, { input: `{foo=~"invalid[regexp"}`, err: "error parsing regexp: missing closing ]: `[regexp)$`", }, // Double escaped strings. { input: `"{foo=\"bar"}`, err: `bad matcher format: "{foo=\"bar"`, }, { input: `"foo=\"bar"`, err: `bad matcher format: "foo=\"bar"`, }, { input: `"foo=\"bar\""`, err: `bad matcher format: "foo=\"bar\""`, }, { input: `"foo=\"bar\"`, err: `bad matcher format: "foo=\"bar\"`, }, { input: `"{foo=\"bar\"}"`, err: `bad matcher format: "{foo=\"bar\"}"`, }, { input: `"foo="bar""`, err: `bad matcher format: "foo="bar""`, }, { input: `{{foo=`, err: `bad matcher format: {foo=`, }, { input: `{foo=`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "") return append(ms, m) }(), }, { input: `{foo=}b`, want: func() []*Matcher { ms := []*Matcher{} m, _ := NewMatcher(MatchEqual, "foo", "}b") return append(ms, m) }(), }, } { t.Run(tc.input, func(t *testing.T) { got, err := ParseMatchers(tc.input) if err != nil && tc.err == "" { t.Fatalf("got error where none expected: %v", err) } if err == nil && tc.err != "" { t.Fatalf("expected error but got none: %v", tc.err) } if err != nil && err.Error() != tc.err { t.Fatalf("error not equal:\ngot %v\nwant %v", err, tc.err) } if !reflect.DeepEqual(got, tc.want) { t.Fatalf("labels not equal:\ngot %v\nwant %v", got, tc.want) } }) } } prometheus-alertmanager-0.28.1+ds/pkg/modtimevfs/000077500000000000000000000000001476331240200217775ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/pkg/modtimevfs/modtimevfs.go000066400000000000000000000030241476331240200245020ustar00rootroot00000000000000// Copyright 2018 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package modtimevfs implements a virtual file system that returns a fixed // modification time for all files and directories. package modtimevfs import ( "net/http" "os" "time" ) type timefs struct { fs http.FileSystem t time.Time } // New returns a file system that returns constant modification time for all files. func New(fs http.FileSystem, t time.Time) http.FileSystem { return &timefs{fs: fs, t: t} } type file struct { http.File os.FileInfo t time.Time } func (t *timefs) Open(name string) (http.File, error) { f, err := t.fs.Open(name) if err != nil { return f, err } defer func() { if err != nil { f.Close() } }() fstat, err := f.Stat() if err != nil { return nil, err } return &file{f, fstat, t.t}, nil } // Stat implements the http.File interface. func (f *file) Stat() (os.FileInfo, error) { return f, nil } // ModTime implements the os.FileInfo interface. func (f *file) ModTime() time.Time { return f.t } prometheus-alertmanager-0.28.1+ds/provider/000077500000000000000000000000001476331240200206735ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/provider/mem/000077500000000000000000000000001476331240200214515ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/provider/mem/mem.go000066400000000000000000000156101476331240200225610ustar00rootroot00000000000000// Copyright 2016 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mem import ( "context" "log/slog" "sync" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/provider" "github.com/prometheus/alertmanager/store" "github.com/prometheus/alertmanager/types" ) const alertChannelLength = 200 // Alerts gives access to a set of alerts. All methods are goroutine-safe. type Alerts struct { cancel context.CancelFunc mtx sync.Mutex alerts *store.Alerts marker types.AlertMarker listeners map[int]listeningAlerts next int callback AlertStoreCallback logger *slog.Logger } type AlertStoreCallback interface { // PreStore is called before alert is stored into the store. If this method returns error, // alert is not stored. // Existing flag indicates whether alert has existed before (and is only updated) or not. // If alert has existed before, then alert passed to PreStore is result of merging existing alert with new alert. PreStore(alert *types.Alert, existing bool) error // PostStore is called after alert has been put into store. PostStore(alert *types.Alert, existing bool) // PostDelete is called after alert has been removed from the store due to alert garbage collection. PostDelete(alert *types.Alert) } type listeningAlerts struct { alerts chan *types.Alert done chan struct{} } func (a *Alerts) registerMetrics(r prometheus.Registerer) { newMemAlertByStatus := func(s types.AlertState) prometheus.GaugeFunc { return prometheus.NewGaugeFunc( prometheus.GaugeOpts{ Name: "alertmanager_alerts", Help: "How many alerts by state.", ConstLabels: prometheus.Labels{"state": string(s)}, }, func() float64 { return float64(a.count(s)) }, ) } r.MustRegister(newMemAlertByStatus(types.AlertStateActive)) r.MustRegister(newMemAlertByStatus(types.AlertStateSuppressed)) r.MustRegister(newMemAlertByStatus(types.AlertStateUnprocessed)) } // NewAlerts returns a new alert provider. func NewAlerts(ctx context.Context, m types.AlertMarker, intervalGC time.Duration, alertCallback AlertStoreCallback, l *slog.Logger, r prometheus.Registerer) (*Alerts, error) { if alertCallback == nil { alertCallback = noopCallback{} } ctx, cancel := context.WithCancel(ctx) a := &Alerts{ marker: m, alerts: store.NewAlerts(), cancel: cancel, listeners: map[int]listeningAlerts{}, next: 0, logger: l.With("component", "provider"), callback: alertCallback, } if r != nil { a.registerMetrics(r) } go a.gcLoop(ctx, intervalGC) return a, nil } func (a *Alerts) gcLoop(ctx context.Context, interval time.Duration) { t := time.NewTicker(interval) defer t.Stop() for { select { case <-ctx.Done(): return case <-t.C: a.gc() } } } func (a *Alerts) gc() { a.mtx.Lock() defer a.mtx.Unlock() deleted := a.alerts.GC() for _, alert := range deleted { // As we don't persist alerts, we no longer consider them after // they are resolved. Alerts waiting for resolved notifications are // held in memory in aggregation groups redundantly. a.marker.Delete(alert.Fingerprint()) a.callback.PostDelete(&alert) } for i, l := range a.listeners { select { case <-l.done: delete(a.listeners, i) close(l.alerts) default: // listener is not closed yet, hence proceed. } } } // Close the alert provider. func (a *Alerts) Close() { if a.cancel != nil { a.cancel() } } func max(a, b int) int { if a > b { return a } return b } // Subscribe returns an iterator over active alerts that have not been // resolved and successfully notified about. // They are not guaranteed to be in chronological order. func (a *Alerts) Subscribe() provider.AlertIterator { a.mtx.Lock() defer a.mtx.Unlock() var ( done = make(chan struct{}) alerts = a.alerts.List() ch = make(chan *types.Alert, max(len(alerts), alertChannelLength)) ) for _, a := range alerts { ch <- a } a.listeners[a.next] = listeningAlerts{alerts: ch, done: done} a.next++ return provider.NewAlertIterator(ch, done, nil) } // GetPending returns an iterator over all the alerts that have // pending notifications. func (a *Alerts) GetPending() provider.AlertIterator { var ( ch = make(chan *types.Alert, alertChannelLength) done = make(chan struct{}) ) a.mtx.Lock() defer a.mtx.Unlock() alerts := a.alerts.List() go func() { defer close(ch) for _, a := range alerts { select { case ch <- a: case <-done: return } } }() return provider.NewAlertIterator(ch, done, nil) } // Get returns the alert for a given fingerprint. func (a *Alerts) Get(fp model.Fingerprint) (*types.Alert, error) { a.mtx.Lock() defer a.mtx.Unlock() return a.alerts.Get(fp) } // Put adds the given alert to the set. func (a *Alerts) Put(alerts ...*types.Alert) error { a.mtx.Lock() defer a.mtx.Unlock() for _, alert := range alerts { fp := alert.Fingerprint() existing := false // Check that there's an alert existing within the store before // trying to merge. if old, err := a.alerts.Get(fp); err == nil { existing = true // Merge alerts if there is an overlap in activity range. if (alert.EndsAt.After(old.StartsAt) && alert.EndsAt.Before(old.EndsAt)) || (alert.StartsAt.After(old.StartsAt) && alert.StartsAt.Before(old.EndsAt)) { alert = old.Merge(alert) } } if err := a.callback.PreStore(alert, existing); err != nil { a.logger.Error("pre-store callback returned error on set alert", "err", err) continue } if err := a.alerts.Set(alert); err != nil { a.logger.Error("error on set alert", "err", err) continue } a.callback.PostStore(alert, existing) for _, l := range a.listeners { select { case l.alerts <- alert: case <-l.done: } } } return nil } // count returns the number of non-resolved alerts we currently have stored filtered by the provided state. func (a *Alerts) count(state types.AlertState) int { a.mtx.Lock() defer a.mtx.Unlock() var count int for _, alert := range a.alerts.List() { if alert.Resolved() { continue } status := a.marker.Status(alert.Fingerprint()) if status.State != state { continue } count++ } return count } type noopCallback struct{} func (n noopCallback) PreStore(_ *types.Alert, _ bool) error { return nil } func (n noopCallback) PostStore(_ *types.Alert, _ bool) {} func (n noopCallback) PostDelete(_ *types.Alert) {} prometheus-alertmanager-0.28.1+ds/provider/mem/mem_test.go000066400000000000000000000400301476331240200236120ustar00rootroot00000000000000// Copyright 2016 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package mem import ( "context" "errors" "fmt" "reflect" "strconv" "sync" "testing" "time" "github.com/kylelemons/godebug/pretty" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "go.uber.org/atomic" "github.com/prometheus/alertmanager/store" "github.com/prometheus/alertmanager/types" ) var ( t0 = time.Now() t1 = t0.Add(100 * time.Millisecond) alert1 = &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"bar": "foo"}, Annotations: model.LabelSet{"foo": "bar"}, StartsAt: t0, EndsAt: t1, GeneratorURL: "http://example.com/prometheus", }, UpdatedAt: t0, Timeout: false, } alert2 = &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"bar": "foo2"}, Annotations: model.LabelSet{"foo": "bar2"}, StartsAt: t0, EndsAt: t1, GeneratorURL: "http://example.com/prometheus", }, UpdatedAt: t0, Timeout: false, } alert3 = &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"bar": "foo3"}, Annotations: model.LabelSet{"foo": "bar3"}, StartsAt: t0, EndsAt: t1, GeneratorURL: "http://example.com/prometheus", }, UpdatedAt: t0, Timeout: false, } ) func init() { pretty.CompareConfig.IncludeUnexported = true } // TestAlertsSubscribePutStarvation tests starvation of `iterator.Close` and // `alerts.Put`. Both `Subscribe` and `Put` use the Alerts.mtx lock. `Subscribe` // needs it to subscribe and more importantly unsubscribe `Alerts.listeners`. `Put` // uses the lock to add additional alerts and iterate the `Alerts.listeners` map. // If the channel of a listener is at its limit, `alerts.Lock` is blocked, whereby // a listener can not unsubscribe as the lock is hold by `alerts.Lock`. func TestAlertsSubscribePutStarvation(t *testing.T) { marker := types.NewMarker(prometheus.NewRegistry()) alerts, err := NewAlerts(context.Background(), marker, 30*time.Minute, noopCallback{}, promslog.NewNopLogger(), nil) if err != nil { t.Fatal(err) } iterator := alerts.Subscribe() alertsToInsert := []*types.Alert{} // Exhaust alert channel for i := 0; i < alertChannelLength+1; i++ { alertsToInsert = append(alertsToInsert, &types.Alert{ Alert: model.Alert{ // Make sure the fingerprints differ Labels: model.LabelSet{"iteration": model.LabelValue(strconv.Itoa(i))}, Annotations: model.LabelSet{"foo": "bar"}, StartsAt: t0, EndsAt: t1, GeneratorURL: "http://example.com/prometheus", }, UpdatedAt: t0, Timeout: false, }) } putIsDone := make(chan struct{}) putsErr := make(chan error, 1) go func() { if err := alerts.Put(alertsToInsert...); err != nil { putsErr <- err return } putIsDone <- struct{}{} }() // Increase probability that `iterator.Close` is called after `alerts.Put`. time.Sleep(100 * time.Millisecond) iterator.Close() select { case <-putsErr: t.Fatal(err) case <-putIsDone: // continue case <-time.After(100 * time.Millisecond): t.Fatal("expected `alerts.Put` and `iterator.Close` not to starve each other") } } func TestDeadLock(t *testing.T) { t0 := time.Now() t1 := t0.Add(5 * time.Second) marker := types.NewMarker(prometheus.NewRegistry()) // Run gc every 5 milliseconds to increase the possibility of a deadlock with Subscribe() alerts, err := NewAlerts(context.Background(), marker, 5*time.Millisecond, noopCallback{}, promslog.NewNopLogger(), nil) if err != nil { t.Fatal(err) } alertsToInsert := []*types.Alert{} for i := 0; i < 200+1; i++ { alertsToInsert = append(alertsToInsert, &types.Alert{ Alert: model.Alert{ // Make sure the fingerprints differ Labels: model.LabelSet{"iteration": model.LabelValue(strconv.Itoa(i))}, Annotations: model.LabelSet{"foo": "bar"}, StartsAt: t0, EndsAt: t1, GeneratorURL: "http://example.com/prometheus", }, UpdatedAt: t0, Timeout: false, }) } if err := alerts.Put(alertsToInsert...); err != nil { t.Fatal("Unable to add alerts") } done := make(chan bool) // call subscribe repeatedly in a goroutine to increase // the possibility of a deadlock occurring go func() { tick := time.NewTicker(10 * time.Millisecond) defer tick.Stop() stopAfter := time.After(1 * time.Second) for { select { case <-tick.C: alerts.Subscribe() case <-stopAfter: done <- true break } } }() select { case <-done: // no deadlock alerts.Close() case <-time.After(10 * time.Second): t.Error("Deadlock detected") } } func TestAlertsPut(t *testing.T) { marker := types.NewMarker(prometheus.NewRegistry()) alerts, err := NewAlerts(context.Background(), marker, 30*time.Minute, noopCallback{}, promslog.NewNopLogger(), nil) if err != nil { t.Fatal(err) } insert := []*types.Alert{alert1, alert2, alert3} if err := alerts.Put(insert...); err != nil { t.Fatalf("Insert failed: %s", err) } for i, a := range insert { res, err := alerts.Get(a.Fingerprint()) if err != nil { t.Fatalf("retrieval error: %s", err) } if !alertsEqual(res, a) { t.Errorf("Unexpected alert: %d", i) t.Fatal(pretty.Compare(res, a)) } } } func TestAlertsSubscribe(t *testing.T) { marker := types.NewMarker(prometheus.NewRegistry()) ctx, cancel := context.WithCancel(context.Background()) defer cancel() alerts, err := NewAlerts(ctx, marker, 30*time.Minute, noopCallback{}, promslog.NewNopLogger(), nil) if err != nil { t.Fatal(err) } // Add alert1 to validate if pending alerts will be sent. if err := alerts.Put(alert1); err != nil { t.Fatalf("Insert failed: %s", err) } expectedAlerts := map[model.Fingerprint]*types.Alert{ alert1.Fingerprint(): alert1, alert2.Fingerprint(): alert2, alert3.Fingerprint(): alert3, } // Start many consumers and make sure that each receives all the subsequent alerts. var ( nb = 100 fatalc = make(chan string, nb) wg sync.WaitGroup ) wg.Add(nb) for i := 0; i < nb; i++ { go func(i int) { defer wg.Done() it := alerts.Subscribe() defer it.Close() received := make(map[model.Fingerprint]struct{}) for { select { case got, ok := <-it.Next(): if !ok { fatalc <- fmt.Sprintf("Iterator %d closed", i) return } if it.Err() != nil { fatalc <- fmt.Sprintf("Iterator %d: %v", i, it.Err()) return } expected := expectedAlerts[got.Fingerprint()] if !alertsEqual(got, expected) { fatalc <- fmt.Sprintf("Unexpected alert (iterator %d)\n%s", i, pretty.Compare(got, expected)) return } received[got.Fingerprint()] = struct{}{} if len(received) == len(expectedAlerts) { return } case <-time.After(5 * time.Second): fatalc <- fmt.Sprintf("Unexpected number of alerts for iterator %d, got: %d, expected: %d", i, len(received), len(expectedAlerts)) return } } }(i) } // Add more alerts that should be received by the subscribers. if err := alerts.Put(alert2); err != nil { t.Fatalf("Insert failed: %s", err) } if err := alerts.Put(alert3); err != nil { t.Fatalf("Insert failed: %s", err) } wg.Wait() close(fatalc) fatal, ok := <-fatalc if ok { t.Fatal(fatal) } } func TestAlertsGetPending(t *testing.T) { marker := types.NewMarker(prometheus.NewRegistry()) alerts, err := NewAlerts(context.Background(), marker, 30*time.Minute, noopCallback{}, promslog.NewNopLogger(), nil) if err != nil { t.Fatal(err) } if err := alerts.Put(alert1, alert2); err != nil { t.Fatalf("Insert failed: %s", err) } expectedAlerts := map[model.Fingerprint]*types.Alert{ alert1.Fingerprint(): alert1, alert2.Fingerprint(): alert2, } iterator := alerts.GetPending() for actual := range iterator.Next() { expected := expectedAlerts[actual.Fingerprint()] if !alertsEqual(actual, expected) { t.Errorf("Unexpected alert") t.Fatal(pretty.Compare(actual, expected)) } } if err := alerts.Put(alert3); err != nil { t.Fatalf("Insert failed: %s", err) } expectedAlerts = map[model.Fingerprint]*types.Alert{ alert1.Fingerprint(): alert1, alert2.Fingerprint(): alert2, alert3.Fingerprint(): alert3, } iterator = alerts.GetPending() for actual := range iterator.Next() { expected := expectedAlerts[actual.Fingerprint()] if !alertsEqual(actual, expected) { t.Errorf("Unexpected alert") t.Fatal(pretty.Compare(actual, expected)) } } } func TestAlertsGC(t *testing.T) { marker := types.NewMarker(prometheus.NewRegistry()) alerts, err := NewAlerts(context.Background(), marker, 200*time.Millisecond, noopCallback{}, promslog.NewNopLogger(), nil) if err != nil { t.Fatal(err) } insert := []*types.Alert{alert1, alert2, alert3} if err := alerts.Put(insert...); err != nil { t.Fatalf("Insert failed: %s", err) } for _, a := range insert { marker.SetActiveOrSilenced(a.Fingerprint(), 0, nil, nil) marker.SetInhibited(a.Fingerprint()) if !marker.Active(a.Fingerprint()) { t.Errorf("error setting status: %v", a) } } time.Sleep(300 * time.Millisecond) for i, a := range insert { _, err := alerts.Get(a.Fingerprint()) require.Error(t, err) require.Equal(t, store.ErrNotFound, err, fmt.Sprintf("alert %d didn't get GC'd: %v", i, err)) s := marker.Status(a.Fingerprint()) if s.State != types.AlertStateUnprocessed { t.Errorf("marker %d didn't get GC'd: %v", i, s) } } } func TestAlertsStoreCallback(t *testing.T) { cb := &limitCountCallback{limit: 3} marker := types.NewMarker(prometheus.NewRegistry()) alerts, err := NewAlerts(context.Background(), marker, 200*time.Millisecond, cb, promslog.NewNopLogger(), nil) if err != nil { t.Fatal(err) } err = alerts.Put(alert1, alert2, alert3) if err != nil { t.Fatal(err) } if num := cb.alerts.Load(); num != 3 { t.Fatalf("unexpected number of alerts in the store, expected %v, got %v", 3, num) } alert1Mod := *alert1 alert1Mod.Annotations = model.LabelSet{"foo": "bar", "new": "test"} // Update annotations for alert1 alert4 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"bar4": "foo4"}, Annotations: model.LabelSet{"foo4": "bar4"}, StartsAt: t0, EndsAt: t1, GeneratorURL: "http://example.com/prometheus", }, UpdatedAt: t0, Timeout: false, } err = alerts.Put(&alert1Mod, alert4) // Verify that we failed to put new alert into store (not reported via error, only checked using Load) if err != nil { t.Fatalf("unexpected error %v", err) } if num := cb.alerts.Load(); num != 3 { t.Fatalf("unexpected number of alerts in the store, expected %v, got %v", 3, num) } // But we still managed to update alert1, since callback doesn't report error when updating existing alert. a, err := alerts.Get(alert1.Fingerprint()) if err != nil { t.Fatal(err) } if !alertsEqual(a, &alert1Mod) { t.Errorf("Unexpected alert") t.Fatal(pretty.Compare(a, &alert1Mod)) } // Now wait until existing alerts are GC-ed, and make sure that callback was called. time.Sleep(300 * time.Millisecond) if num := cb.alerts.Load(); num != 0 { t.Fatalf("unexpected number of alerts in the store, expected %v, got %v", 0, num) } err = alerts.Put(alert4) if err != nil { t.Fatal(err) } } func TestAlerts_Count(t *testing.T) { marker := types.NewMarker(prometheus.NewRegistry()) alerts, err := NewAlerts(context.Background(), marker, 200*time.Millisecond, nil, promslog.NewNopLogger(), nil) require.NoError(t, err) states := []types.AlertState{types.AlertStateActive, types.AlertStateSuppressed, types.AlertStateUnprocessed} countByState := func(st types.AlertState) int { return alerts.count(st) } countTotal := func() int { var count int for _, st := range states { count += countByState(st) } return count } // First, there shouldn't be any alerts. require.Equal(t, 0, countTotal()) // When you insert a new alert that will eventually be active, it should be unprocessed first. now := time.Now() a1 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"bar": "foo"}, Annotations: model.LabelSet{"foo": "bar"}, StartsAt: now, EndsAt: now.Add(400 * time.Millisecond), GeneratorURL: "http://example.com/prometheus", }, UpdatedAt: now, Timeout: false, } alerts.Put(a1) require.Equal(t, 1, countByState(types.AlertStateUnprocessed)) require.Equal(t, 1, countTotal()) require.Eventually(t, func() bool { // When the alert will eventually expire and is considered resolved - it won't count. return countTotal() == 0 }, 600*time.Millisecond, 100*time.Millisecond) now = time.Now() a2 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"bar": "foo"}, Annotations: model.LabelSet{"foo": "bar"}, StartsAt: now, EndsAt: now.Add(400 * time.Millisecond), GeneratorURL: "http://example.com/prometheus", }, UpdatedAt: now, Timeout: false, } // When insert an alert, and then silence it. It shows up with the correct filter. alerts.Put(a2) marker.SetActiveOrSilenced(a2.Fingerprint(), 1, []string{"1"}, nil) require.Equal(t, 1, countByState(types.AlertStateSuppressed)) require.Equal(t, 1, countTotal()) require.Eventually(t, func() bool { // When the alert will eventually expire and is considered resolved - it won't count. return countTotal() == 0 }, 600*time.Millisecond, 100*time.Millisecond) } func alertsEqual(a1, a2 *types.Alert) bool { if a1 == nil || a2 == nil { return false } if !reflect.DeepEqual(a1.Labels, a2.Labels) { return false } if !reflect.DeepEqual(a1.Annotations, a2.Annotations) { return false } if a1.GeneratorURL != a2.GeneratorURL { return false } if !a1.StartsAt.Equal(a2.StartsAt) { return false } if !a1.EndsAt.Equal(a2.EndsAt) { return false } if !a1.UpdatedAt.Equal(a2.UpdatedAt) { return false } return a1.Timeout == a2.Timeout } type limitCountCallback struct { alerts atomic.Int32 limit int } var errTooManyAlerts = fmt.Errorf("too many alerts") func (l *limitCountCallback) PreStore(_ *types.Alert, existing bool) error { if existing { return nil } if int(l.alerts.Load())+1 > l.limit { return errTooManyAlerts } return nil } func (l *limitCountCallback) PostStore(_ *types.Alert, existing bool) { if !existing { l.alerts.Inc() } } func (l *limitCountCallback) PostDelete(_ *types.Alert) { l.alerts.Dec() } func TestAlertsConcurrently(t *testing.T) { callback := &limitCountCallback{limit: 100} a, err := NewAlerts(context.Background(), types.NewMarker(prometheus.NewRegistry()), time.Millisecond, callback, promslog.NewNopLogger(), nil) require.NoError(t, err) stopc := make(chan struct{}) failc := make(chan struct{}) go func() { time.Sleep(2 * time.Second) close(stopc) }() expire := 10 * time.Millisecond wg := sync.WaitGroup{} for i := 0; i < 100; i++ { wg.Add(1) go func() { defer wg.Done() j := 0 for { select { case <-failc: return case <-stopc: return default: } now := time.Now() err := a.Put(&types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{"bar": model.LabelValue(strconv.Itoa(j))}, StartsAt: now, EndsAt: now.Add(expire), }, UpdatedAt: now, }) if err != nil && !errors.Is(err, errTooManyAlerts) { close(failc) return } j++ } }() } wg.Wait() select { case <-failc: t.Fatalf("unexpected error happened") default: } time.Sleep(expire) require.Eventually(t, func() bool { // When the alert will eventually expire and is considered resolved - it won't count. return a.count(types.AlertStateActive) == 0 }, 2*expire, expire) require.Equal(t, int32(0), callback.alerts.Load()) } prometheus-alertmanager-0.28.1+ds/provider/provider.go000066400000000000000000000054751476331240200230670ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package provider import ( "fmt" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/types" ) // ErrNotFound is returned if a provider cannot find a requested item. var ErrNotFound = fmt.Errorf("item not found") // Iterator provides the functions common to all iterators. To be useful, a // specific iterator interface (e.g. AlertIterator) has to be implemented that // provides a Next method. type Iterator interface { // Err returns the current error. It is not safe to call it concurrently // with other iterator methods or while reading from a channel returned // by the iterator. Err() error // Close must be called to release resources once the iterator is not // used anymore. Close() } // AlertIterator is an Iterator for Alerts. type AlertIterator interface { Iterator // Next returns a channel that will be closed once the iterator is // exhausted. It is not necessary to exhaust the iterator but Close must // be called in any case to release resources used by the iterator (even // if the iterator is exhausted). Next() <-chan *types.Alert } // NewAlertIterator returns a new AlertIterator based on the generic alertIterator type. func NewAlertIterator(ch <-chan *types.Alert, done chan struct{}, err error) AlertIterator { return &alertIterator{ ch: ch, done: done, err: err, } } // alertIterator implements AlertIterator. So far, this one fits all providers. type alertIterator struct { ch <-chan *types.Alert done chan struct{} err error } func (ai alertIterator) Next() <-chan *types.Alert { return ai.ch } func (ai alertIterator) Err() error { return ai.err } func (ai alertIterator) Close() { close(ai.done) } // Alerts gives access to a set of alerts. All methods are goroutine-safe. type Alerts interface { // Subscribe returns an iterator over active alerts that have not been // resolved and successfully notified about. // They are not guaranteed to be in chronological order. Subscribe() AlertIterator // GetPending returns an iterator over all alerts that have // pending notifications. GetPending() AlertIterator // Get returns the alert for a given fingerprint. Get(model.Fingerprint) (*types.Alert, error) // Put adds the given set of alerts to the set. Put(...*types.Alert) error } prometheus-alertmanager-0.28.1+ds/scripts/000077500000000000000000000000001476331240200205305ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/scripts/compress_assets.sh000077500000000000000000000021161476331240200243040ustar00rootroot00000000000000#!/usr/bin/env bash # # compress static assets set -euo pipefail cd ui/react-app cp embed.go.tmpl embed.go GZIP_OPTS="-fkn" # gzip option '-k' may not always exist in the latest gzip available on different distros. if ! gzip -k -h &>/dev/null; then GZIP_OPTS="-fn"; fi dist="dist" if ! [[ -d "${dist}" ]]; then mkdir -p ${dist} echo " Node

This is the default index, looks like you forget to generate the react app before generating the golang endpoint.

" > ${dist}/index.html fi find dist -type f -name '*.gz' -delete find dist -type f -exec gzip $GZIP_OPTS '{}' \; -print0 | xargs -0 -I % echo %.gz | sort | xargs echo //go:embed >> embed.go echo var embedFS embed.FS >> embed.go prometheus-alertmanager-0.28.1+ds/scripts/genproto.sh000077500000000000000000000026501476331240200227270ustar00rootroot00000000000000#!/usr/bin/env bash # # Generate all protobuf bindings. # Run from repository root. # # Initial script taken from etcd under the Apache 2.0 license # File: https://github.com/coreos/etcd/blob/78a5eb79b510eb497deddd1a76f5153bc4b202d2/scripts/genproto.sh set -e set -u if ! [[ "$0" =~ "scripts/genproto.sh" ]]; then echo "must be run from repository root" exit 255 fi if ! [[ $(protoc --version) =~ "3.15.8" ]]; then echo "could not find protoc 3.15.8, is it installed + in PATH?" exit 255 fi echo "installing plugins" # Since we run go mod download, the go.sum will change. # Make a backup. cp go.sum go.sum.bak go mod download INSTALL_PKGS="golang.org/x/tools/cmd/goimports github.com/gogo/protobuf/protoc-gen-gogofast" for pkg in ${INSTALL_PKGS}; do go install "$pkg" done GOGOPROTO_ROOT="$(go list -mod=readonly -f '{{ .Dir }}' -m github.com/gogo/protobuf)" GOGOPROTO_PATH="${GOGOPROTO_ROOT}:${GOGOPROTO_ROOT}/protobuf" DIRS="nflog/nflogpb silence/silencepb cluster/clusterpb" echo "generating files" for dir in ${DIRS}; do pushd ${dir} protoc --gogofast_out=:. -I=. \ -I="${GOGOPROTO_PATH}" \ *.proto sed -i.bak -E 's/import _ \"gogoproto\"//g' *.pb.go sed -i.bak -E 's/import _ \"google\/protobuf\"//g' *.pb.go sed -i.bak -E 's/\t_ \"google\/protobuf\"//g' -- *.pb.go rm -f *.bak goimports -w *.pb.go popd done mv go.sum.bak go.sum prometheus-alertmanager-0.28.1+ds/scripts/package_assets.sh000077500000000000000000000003101476331240200240360ustar00rootroot00000000000000#!/usr/bin/env bash # # compress static assets set -euo pipefail version="$(< VERSION)" mkdir -p .tarballs tar czf .tarballs/alertmanager-web-ui-${version}.tar.gz ui/app/script.js ui/app/index.html prometheus-alertmanager-0.28.1+ds/scripts/tools.go000066400000000000000000000015661476331240200222270ustar00rootroot00000000000000// Copyright 2019 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. //go:build tools // +build tools // Package tools tracks dependencies for tools that are required to generate the protobuf code. // See https://github.com/golang/go/issues/25922 package tools import ( _ "github.com/gogo/protobuf/protoc-gen-gogofast" _ "golang.org/x/tools/cmd/goimports" ) prometheus-alertmanager-0.28.1+ds/silence/000077500000000000000000000000001476331240200204635ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/silence/silence.go000066400000000000000000000672471476331240200224540ustar00rootroot00000000000000// Copyright 2016 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Package silence provides a storage for silences, which can share its // state over a mesh network and snapshot it. package silence import ( "bytes" "errors" "fmt" "io" "log/slog" "math/rand" "os" "reflect" "regexp" "sort" "sync" "time" "github.com/coder/quartz" uuid "github.com/gofrs/uuid" "github.com/matttproud/golang_protobuf_extensions/pbutil" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/prometheus/alertmanager/cluster" "github.com/prometheus/alertmanager/matcher/compat" "github.com/prometheus/alertmanager/pkg/labels" pb "github.com/prometheus/alertmanager/silence/silencepb" "github.com/prometheus/alertmanager/types" ) // ErrNotFound is returned if a silence was not found. var ErrNotFound = errors.New("silence not found") // ErrInvalidState is returned if the state isn't valid. var ErrInvalidState = errors.New("invalid state") type matcherCache map[string]labels.Matchers // Get retrieves the matchers for a given silence. If it is a missed cache // access, it compiles and adds the matchers of the requested silence to the // cache. func (c matcherCache) Get(s *pb.Silence) (labels.Matchers, error) { if m, ok := c[s.Id]; ok { return m, nil } return c.add(s) } // add compiles a silences' matchers and adds them to the cache. // It returns the compiled matchers. func (c matcherCache) add(s *pb.Silence) (labels.Matchers, error) { ms := make(labels.Matchers, len(s.Matchers)) for i, m := range s.Matchers { var mt labels.MatchType switch m.Type { case pb.Matcher_EQUAL: mt = labels.MatchEqual case pb.Matcher_NOT_EQUAL: mt = labels.MatchNotEqual case pb.Matcher_REGEXP: mt = labels.MatchRegexp case pb.Matcher_NOT_REGEXP: mt = labels.MatchNotRegexp default: return nil, fmt.Errorf("unknown matcher type %q", m.Type) } matcher, err := labels.NewMatcher(mt, m.Name, m.Pattern) if err != nil { return nil, err } ms[i] = matcher } c[s.Id] = ms return ms, nil } // Silencer binds together a AlertMarker and a Silences to implement the Muter // interface. type Silencer struct { silences *Silences marker types.AlertMarker logger *slog.Logger } // NewSilencer returns a new Silencer. func NewSilencer(s *Silences, m types.AlertMarker, l *slog.Logger) *Silencer { return &Silencer{ silences: s, marker: m, logger: l, } } // Mutes implements the Muter interface. func (s *Silencer) Mutes(lset model.LabelSet) bool { fp := lset.Fingerprint() activeIDs, pendingIDs, markerVersion, _ := s.marker.Silenced(fp) var ( err error allSils []*pb.Silence newVersion = markerVersion ) if markerVersion == s.silences.Version() { totalSilences := len(activeIDs) + len(pendingIDs) // No new silences added, just need to check which of the old // silences are still relevant and which of the pending ones // have become active. if totalSilences == 0 { // Super fast path: No silences ever applied to this // alert, none have been added. We are done. return false } // This is still a quite fast path: No silences have been added, // we only need to check which of the applicable silences are // currently active. Note that newVersion is left at // markerVersion because the Query call might already return a // newer version, which is not the version our old list of // applicable silences is based on. allIDs := append(append(make([]string, 0, totalSilences), activeIDs...), pendingIDs...) allSils, _, err = s.silences.Query( QIDs(allIDs...), QState(types.SilenceStateActive, types.SilenceStatePending), ) } else { // New silences have been added, do a full query. allSils, newVersion, err = s.silences.Query( QState(types.SilenceStateActive, types.SilenceStatePending), QMatches(lset), ) } if err != nil { s.logger.Error("Querying silences failed, alerts might not get silenced correctly", "err", err) } if len(allSils) == 0 { // Easy case, neither active nor pending silences anymore. s.marker.SetActiveOrSilenced(fp, newVersion, nil, nil) return false } // It is still possible that nothing has changed, but finding out is not // much less effort than just recreating the IDs from the query // result. So let's do it in any case. Note that we cannot reuse the // current ID slices for concurrency reasons. activeIDs, pendingIDs = nil, nil now := s.silences.nowUTC() for _, sil := range allSils { switch getState(sil, now) { case types.SilenceStatePending: pendingIDs = append(pendingIDs, sil.Id) case types.SilenceStateActive: activeIDs = append(activeIDs, sil.Id) default: // Do nothing, silence has expired in the meantime. } } s.logger.Debug( "determined current silences state", "now", now, "total", len(allSils), "active", len(activeIDs), "pending", len(pendingIDs), ) sort.Strings(activeIDs) sort.Strings(pendingIDs) s.marker.SetActiveOrSilenced(fp, newVersion, activeIDs, pendingIDs) return len(activeIDs) > 0 } // Silences holds a silence state that can be modified, queried, and snapshot. type Silences struct { clock quartz.Clock logger *slog.Logger metrics *metrics retention time.Duration limits Limits mtx sync.RWMutex st state version int // Increments whenever silences are added. broadcast func([]byte) mc matcherCache } // Limits contains the limits for silences. type Limits struct { // MaxSilences limits the maximum number of silences, including expired // silences. MaxSilences func() int // MaxSilenceSizeBytes is the maximum size of an individual silence as // stored on disk. MaxSilenceSizeBytes func() int } // MaintenanceFunc represents the function to run as part of the periodic maintenance for silences. // It returns the size of the snapshot taken or an error if it failed. type MaintenanceFunc func() (int64, error) type metrics struct { gcDuration prometheus.Summary snapshotDuration prometheus.Summary snapshotSize prometheus.Gauge queriesTotal prometheus.Counter queryErrorsTotal prometheus.Counter queryDuration prometheus.Histogram silencesActive prometheus.GaugeFunc silencesPending prometheus.GaugeFunc silencesExpired prometheus.GaugeFunc propagatedMessagesTotal prometheus.Counter maintenanceTotal prometheus.Counter maintenanceErrorsTotal prometheus.Counter } func newSilenceMetricByState(s *Silences, st types.SilenceState) prometheus.GaugeFunc { return prometheus.NewGaugeFunc( prometheus.GaugeOpts{ Name: "alertmanager_silences", Help: "How many silences by state.", ConstLabels: prometheus.Labels{"state": string(st)}, }, func() float64 { count, err := s.CountState(st) if err != nil { s.logger.Error("Counting silences failed", "err", err) } return float64(count) }, ) } func newMetrics(r prometheus.Registerer, s *Silences) *metrics { m := &metrics{} m.gcDuration = prometheus.NewSummary(prometheus.SummaryOpts{ Name: "alertmanager_silences_gc_duration_seconds", Help: "Duration of the last silence garbage collection cycle.", Objectives: map[float64]float64{}, }) m.snapshotDuration = prometheus.NewSummary(prometheus.SummaryOpts{ Name: "alertmanager_silences_snapshot_duration_seconds", Help: "Duration of the last silence snapshot.", Objectives: map[float64]float64{}, }) m.snapshotSize = prometheus.NewGauge(prometheus.GaugeOpts{ Name: "alertmanager_silences_snapshot_size_bytes", Help: "Size of the last silence snapshot in bytes.", }) m.maintenanceTotal = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_silences_maintenance_total", Help: "How many maintenances were executed for silences.", }) m.maintenanceErrorsTotal = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_silences_maintenance_errors_total", Help: "How many maintenances were executed for silences that failed.", }) m.queriesTotal = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_silences_queries_total", Help: "How many silence queries were received.", }) m.queryErrorsTotal = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_silences_query_errors_total", Help: "How many silence received queries did not succeed.", }) m.queryDuration = prometheus.NewHistogram(prometheus.HistogramOpts{ Name: "alertmanager_silences_query_duration_seconds", Help: "Duration of silence query evaluation.", Buckets: prometheus.DefBuckets, NativeHistogramBucketFactor: 1.1, NativeHistogramMaxBucketNumber: 100, NativeHistogramMinResetDuration: 1 * time.Hour, }) m.propagatedMessagesTotal = prometheus.NewCounter(prometheus.CounterOpts{ Name: "alertmanager_silences_gossip_messages_propagated_total", Help: "Number of received gossip messages that have been further gossiped.", }) if s != nil { m.silencesActive = newSilenceMetricByState(s, types.SilenceStateActive) m.silencesPending = newSilenceMetricByState(s, types.SilenceStatePending) m.silencesExpired = newSilenceMetricByState(s, types.SilenceStateExpired) } if r != nil { r.MustRegister( m.gcDuration, m.snapshotDuration, m.snapshotSize, m.queriesTotal, m.queryErrorsTotal, m.queryDuration, m.silencesActive, m.silencesPending, m.silencesExpired, m.propagatedMessagesTotal, m.maintenanceTotal, m.maintenanceErrorsTotal, ) } return m } // Options exposes configuration options for creating a new Silences object. // Its zero value is a safe default. type Options struct { // A snapshot file or reader from which the initial state is loaded. // None or only one of them must be set. SnapshotFile string SnapshotReader io.Reader // Retention time for newly created Silences. Silences may be // garbage collected after the given duration after they ended. Retention time.Duration Limits Limits // A logger used by background processing. Logger *slog.Logger Metrics prometheus.Registerer } func (o *Options) validate() error { if o.SnapshotFile != "" && o.SnapshotReader != nil { return errors.New("only one of SnapshotFile and SnapshotReader must be set") } return nil } // New returns a new Silences object with the given configuration. func New(o Options) (*Silences, error) { if err := o.validate(); err != nil { return nil, err } s := &Silences{ clock: quartz.NewReal(), mc: matcherCache{}, logger: promslog.NewNopLogger(), retention: o.Retention, limits: o.Limits, broadcast: func([]byte) {}, st: state{}, } s.metrics = newMetrics(o.Metrics, s) if o.Logger != nil { s.logger = o.Logger } if o.SnapshotFile != "" { if r, err := os.Open(o.SnapshotFile); err != nil { if !os.IsNotExist(err) { return nil, err } s.logger.Debug("silences snapshot file doesn't exist", "err", err) } else { o.SnapshotReader = r defer r.Close() } } if o.SnapshotReader != nil { if err := s.loadSnapshot(o.SnapshotReader); err != nil { return s, err } } return s, nil } func (s *Silences) nowUTC() time.Time { return s.clock.Now().UTC() } // Maintenance garbage collects the silence state at the given interval. If the snapshot // file is set, a snapshot is written to it afterwards. // Terminates on receiving from stopc. // If not nil, the last argument is an override for what to do as part of the maintenance - for advanced usage. func (s *Silences) Maintenance(interval time.Duration, snapf string, stopc <-chan struct{}, override MaintenanceFunc) { if interval == 0 || stopc == nil { s.logger.Error("interval or stop signal are missing - not running maintenance") return } t := s.clock.NewTicker(interval) defer t.Stop() var doMaintenance MaintenanceFunc doMaintenance = func() (int64, error) { var size int64 if _, err := s.GC(); err != nil { return size, err } if snapf == "" { return size, nil } f, err := openReplace(snapf) if err != nil { return size, err } if size, err = s.Snapshot(f); err != nil { f.Close() return size, err } return size, f.Close() } if override != nil { doMaintenance = override } runMaintenance := func(do MaintenanceFunc) error { s.metrics.maintenanceTotal.Inc() s.logger.Debug("Running maintenance") start := s.nowUTC() size, err := do() s.metrics.snapshotSize.Set(float64(size)) if err != nil { s.metrics.maintenanceErrorsTotal.Inc() return err } s.logger.Debug("Maintenance done", "duration", s.clock.Since(start), "size", size) return nil } Loop: for { select { case <-stopc: break Loop case <-t.C: if err := runMaintenance(doMaintenance); err != nil { // @tjhop: this should probably log at error level s.logger.Info("Running maintenance failed", "err", err) } } } // No need for final maintenance if we don't want to snapshot. if snapf == "" { return } if err := runMaintenance(doMaintenance); err != nil { // @tjhop: this should probably log at error level s.logger.Info("Creating shutdown snapshot failed", "err", err) } } // GC runs a garbage collection that removes silences that have ended longer // than the configured retention time ago. func (s *Silences) GC() (int, error) { start := time.Now() defer func() { s.metrics.gcDuration.Observe(time.Since(start).Seconds()) }() now := s.nowUTC() var n int s.mtx.Lock() defer s.mtx.Unlock() for id, sil := range s.st { if sil.ExpiresAt.IsZero() { return n, errors.New("unexpected zero expiration timestamp") } if !sil.ExpiresAt.After(now) { delete(s.st, id) delete(s.mc, sil.Silence.Id) n++ } } return n, nil } func validateMatcher(m *pb.Matcher) error { if !compat.IsValidLabelName(model.LabelName(m.Name)) { return fmt.Errorf("invalid label name %q", m.Name) } switch m.Type { case pb.Matcher_EQUAL, pb.Matcher_NOT_EQUAL: if !model.LabelValue(m.Pattern).IsValid() { return fmt.Errorf("invalid label value %q", m.Pattern) } case pb.Matcher_REGEXP, pb.Matcher_NOT_REGEXP: if _, err := regexp.Compile(m.Pattern); err != nil { return fmt.Errorf("invalid regular expression %q: %w", m.Pattern, err) } default: return fmt.Errorf("unknown matcher type %q", m.Type) } return nil } func matchesEmpty(m *pb.Matcher) bool { switch m.Type { case pb.Matcher_EQUAL: return m.Pattern == "" case pb.Matcher_REGEXP: matched, _ := regexp.MatchString(m.Pattern, "") return matched default: return false } } func validateSilence(s *pb.Silence) error { if len(s.Matchers) == 0 { return errors.New("at least one matcher required") } allMatchEmpty := true for i, m := range s.Matchers { if err := validateMatcher(m); err != nil { return fmt.Errorf("invalid label matcher %d: %w", i, err) } allMatchEmpty = allMatchEmpty && matchesEmpty(m) } if allMatchEmpty { return errors.New("at least one matcher must not match the empty string") } if s.StartsAt.IsZero() { return errors.New("invalid zero start timestamp") } if s.EndsAt.IsZero() { return errors.New("invalid zero end timestamp") } if s.EndsAt.Before(s.StartsAt) { return errors.New("end time must not be before start time") } return nil } // cloneSilence returns a shallow copy of a silence. func cloneSilence(sil *pb.Silence) *pb.Silence { s := *sil return &s } func (s *Silences) checkSizeLimits(msil *pb.MeshSilence) error { if s.limits.MaxSilenceSizeBytes != nil { n := msil.Size() if m := s.limits.MaxSilenceSizeBytes(); m > 0 && n > m { return fmt.Errorf("silence exceeded maximum size: %d bytes (limit: %d bytes)", n, m) } } return nil } func (s *Silences) getSilence(id string) (*pb.Silence, bool) { msil, ok := s.st[id] if !ok { return nil, false } return msil.Silence, true } func (s *Silences) toMeshSilence(sil *pb.Silence) *pb.MeshSilence { return &pb.MeshSilence{ Silence: sil, ExpiresAt: sil.EndsAt.Add(s.retention), } } func (s *Silences) setSilence(msil *pb.MeshSilence, now time.Time) error { b, err := marshalMeshSilence(msil) if err != nil { return err } _, added := s.st.merge(msil, now) if added { s.version++ } s.broadcast(b) return nil } // Set the specified silence. If a silence with the ID already exists and the modification // modifies history, the old silence gets expired and a new one is created. func (s *Silences) Set(sil *pb.Silence) error { s.mtx.Lock() defer s.mtx.Unlock() now := s.nowUTC() if sil.StartsAt.IsZero() { sil.StartsAt = now } if err := validateSilence(sil); err != nil { return fmt.Errorf("invalid silence: %w", err) } prev, ok := s.getSilence(sil.Id) if sil.Id != "" && !ok { return ErrNotFound } if ok && canUpdate(prev, sil, now) { sil.UpdatedAt = now msil := s.toMeshSilence(sil) if err := s.checkSizeLimits(msil); err != nil { return err } return s.setSilence(msil, now) } // If we got here it's either a new silence or a replacing one (which would // also create a new silence) so we need to make sure we have capacity for // the new silence. if s.limits.MaxSilences != nil { if m := s.limits.MaxSilences(); m > 0 && len(s.st)+1 > m { return fmt.Errorf("exceeded maximum number of silences: %d (limit: %d)", len(s.st), m) } } uid, err := uuid.NewV4() if err != nil { return fmt.Errorf("generate uuid: %w", err) } sil.Id = uid.String() if sil.StartsAt.Before(now) { sil.StartsAt = now } sil.UpdatedAt = now msil := s.toMeshSilence(sil) if err := s.checkSizeLimits(msil); err != nil { return err } if ok && getState(prev, s.nowUTC()) != types.SilenceStateExpired { // We cannot update the silence, expire the old one to leave a history of // the silence before modification. if err := s.expire(prev.Id); err != nil { return fmt.Errorf("expire previous silence: %w", err) } } return s.setSilence(msil, now) } // canUpdate returns true if silence a can be updated to b without // affecting the historic view of silencing. func canUpdate(a, b *pb.Silence, now time.Time) bool { if !reflect.DeepEqual(a.Matchers, b.Matchers) { return false } // Allowed timestamp modifications depend on the current time. switch st := getState(a, now); st { case types.SilenceStateActive: if b.StartsAt.Unix() != a.StartsAt.Unix() { return false } if b.EndsAt.Before(now) { return false } case types.SilenceStatePending: if b.StartsAt.Before(now) { return false } case types.SilenceStateExpired: return false default: panic("unknown silence state") } return true } // Expire the silence with the given ID immediately. func (s *Silences) Expire(id string) error { s.mtx.Lock() defer s.mtx.Unlock() return s.expire(id) } // Expire the silence with the given ID immediately. // It is idempotent, nil is returned if the silence already expired before it is GC'd. // If the silence is not found an error is returned. func (s *Silences) expire(id string) error { sil, ok := s.getSilence(id) if !ok { return ErrNotFound } sil = cloneSilence(sil) now := s.nowUTC() switch getState(sil, now) { case types.SilenceStateExpired: return nil case types.SilenceStateActive: sil.EndsAt = now case types.SilenceStatePending: // Set both to now to make Silence move to "expired" state sil.StartsAt = now sil.EndsAt = now } sil.UpdatedAt = now return s.setSilence(s.toMeshSilence(sil), now) } // QueryParam expresses parameters along which silences are queried. type QueryParam func(*query) error type query struct { ids []string filters []silenceFilter } // silenceFilter is a function that returns true if a silence // should be dropped from a result set for a given time. type silenceFilter func(*pb.Silence, *Silences, time.Time) (bool, error) // QIDs configures a query to select the given silence IDs. func QIDs(ids ...string) QueryParam { return func(q *query) error { q.ids = append(q.ids, ids...) return nil } } // QMatches returns silences that match the given label set. func QMatches(set model.LabelSet) QueryParam { return func(q *query) error { f := func(sil *pb.Silence, s *Silences, _ time.Time) (bool, error) { m, err := s.mc.Get(sil) if err != nil { return true, err } return m.Matches(set), nil } q.filters = append(q.filters, f) return nil } } // getState returns a silence's SilenceState at the given timestamp. func getState(sil *pb.Silence, ts time.Time) types.SilenceState { if ts.Before(sil.StartsAt) { return types.SilenceStatePending } if ts.After(sil.EndsAt) { return types.SilenceStateExpired } return types.SilenceStateActive } // QState filters queried silences by the given states. func QState(states ...types.SilenceState) QueryParam { return func(q *query) error { f := func(sil *pb.Silence, _ *Silences, now time.Time) (bool, error) { s := getState(sil, now) for _, ps := range states { if s == ps { return true, nil } } return false, nil } q.filters = append(q.filters, f) return nil } } // QueryOne queries with the given parameters and returns the first result. // Returns ErrNotFound if the query result is empty. func (s *Silences) QueryOne(params ...QueryParam) (*pb.Silence, error) { res, _, err := s.Query(params...) if err != nil { return nil, err } if len(res) == 0 { return nil, ErrNotFound } return res[0], nil } // Query for silences based on the given query parameters. It returns the // resulting silences and the state version the result is based on. func (s *Silences) Query(params ...QueryParam) ([]*pb.Silence, int, error) { s.mtx.Lock() defer s.mtx.Unlock() s.metrics.queriesTotal.Inc() defer prometheus.NewTimer(s.metrics.queryDuration).ObserveDuration() q := &query{} for _, p := range params { if err := p(q); err != nil { s.metrics.queryErrorsTotal.Inc() return nil, s.Version(), err } } sils, version, err := s.query(q, s.nowUTC()) if err != nil { s.metrics.queryErrorsTotal.Inc() } return sils, version, err } // Version of the silence state. func (s *Silences) Version() int { s.mtx.RLock() defer s.mtx.RUnlock() return s.version } // CountState counts silences by state. func (s *Silences) CountState(states ...types.SilenceState) (int, error) { // This could probably be optimized. sils, _, err := s.Query(QState(states...)) if err != nil { return -1, err } return len(sils), nil } func (s *Silences) query(q *query, now time.Time) ([]*pb.Silence, int, error) { // If we have no ID constraint, all silences are our base set. This and // the use of post-filter functions is the trivial solution for now. var res []*pb.Silence if q.ids != nil { for _, id := range q.ids { if s, ok := s.st[id]; ok { res = append(res, s.Silence) } } } else { for _, sil := range s.st { res = append(res, sil.Silence) } } var resf []*pb.Silence for _, sil := range res { remove := false for _, f := range q.filters { ok, err := f(sil, s, now) if err != nil { return nil, s.version, err } if !ok { remove = true break } } if !remove { resf = append(resf, cloneSilence(sil)) } } return resf, s.version, nil } // loadSnapshot loads a snapshot generated by Snapshot() into the state. // Any previous state is wiped. func (s *Silences) loadSnapshot(r io.Reader) error { st, err := decodeState(r) if err != nil { return err } for _, e := range st { // Comments list was moved to a single comment. Upgrade on loading the snapshot. if len(e.Silence.Comments) > 0 { e.Silence.Comment = e.Silence.Comments[0].Comment e.Silence.CreatedBy = e.Silence.Comments[0].Author e.Silence.Comments = nil } st[e.Silence.Id] = e } s.mtx.Lock() s.st = st s.version++ s.mtx.Unlock() return nil } // Snapshot writes the full internal state into the writer and returns the number of bytes // written. func (s *Silences) Snapshot(w io.Writer) (int64, error) { start := time.Now() defer func() { s.metrics.snapshotDuration.Observe(time.Since(start).Seconds()) }() s.mtx.RLock() defer s.mtx.RUnlock() b, err := s.st.MarshalBinary() if err != nil { return 0, err } return io.Copy(w, bytes.NewReader(b)) } // MarshalBinary serializes all silences. func (s *Silences) MarshalBinary() ([]byte, error) { s.mtx.Lock() defer s.mtx.Unlock() return s.st.MarshalBinary() } // Merge merges silence state received from the cluster with the local state. func (s *Silences) Merge(b []byte) error { st, err := decodeState(bytes.NewReader(b)) if err != nil { return err } s.mtx.Lock() defer s.mtx.Unlock() now := s.nowUTC() for _, e := range st { merged, added := s.st.merge(e, now) if merged { if added { s.version++ } if !cluster.OversizedMessage(b) { // If this is the first we've seen the message and it's // not oversized, gossip it to other nodes. We don't // propagate oversized messages because they're sent to // all nodes already. s.broadcast(b) s.metrics.propagatedMessagesTotal.Inc() s.logger.Debug("Gossiping new silence", "silence", e) } } } return nil } // SetBroadcast sets the provided function as the one creating data to be // broadcast. func (s *Silences) SetBroadcast(f func([]byte)) { s.mtx.Lock() s.broadcast = f s.mtx.Unlock() } type state map[string]*pb.MeshSilence // merge returns two bools: the first is true when merge caused a state change. The second // is true if that state change added a new silence. In other words, the second return is // true whenever a silence with a new ID has been added to the state as a result of merge. func (s state) merge(e *pb.MeshSilence, now time.Time) (bool, bool) { id := e.Silence.Id if e.ExpiresAt.Before(now) { return false, false } // Comments list was moved to a single comment. Apply upgrade // on silences received from peers. if len(e.Silence.Comments) > 0 { e.Silence.Comment = e.Silence.Comments[0].Comment e.Silence.CreatedBy = e.Silence.Comments[0].Author e.Silence.Comments = nil } prev, ok := s[id] if !ok || prev.Silence.UpdatedAt.Before(e.Silence.UpdatedAt) { s[id] = e return true, !ok } return false, false } func (s state) MarshalBinary() ([]byte, error) { var buf bytes.Buffer for _, e := range s { if _, err := pbutil.WriteDelimited(&buf, e); err != nil { return nil, err } } return buf.Bytes(), nil } func decodeState(r io.Reader) (state, error) { st := state{} for { var s pb.MeshSilence _, err := pbutil.ReadDelimited(r, &s) if err == nil { if s.Silence == nil { return nil, ErrInvalidState } st[s.Silence.Id] = &s continue } if errors.Is(err, io.EOF) { break } return nil, err } return st, nil } func marshalMeshSilence(e *pb.MeshSilence) ([]byte, error) { var buf bytes.Buffer if _, err := pbutil.WriteDelimited(&buf, e); err != nil { return nil, err } return buf.Bytes(), nil } // replaceFile wraps a file that is moved to another filename on closing. type replaceFile struct { *os.File filename string } func (f *replaceFile) Close() error { if err := f.File.Sync(); err != nil { return err } if err := f.File.Close(); err != nil { return err } return os.Rename(f.File.Name(), f.filename) } // openReplace opens a new temporary file that is moved to filename on closing. func openReplace(filename string) (*replaceFile, error) { tmpFilename := fmt.Sprintf("%s.%x", filename, uint64(rand.Int63())) f, err := os.Create(tmpFilename) if err != nil { return nil, err } rf := &replaceFile{ File: f, filename: filename, } return rf, nil } prometheus-alertmanager-0.28.1+ds/silence/silence_bench_test.go000066400000000000000000000104011476331240200246260ustar00rootroot00000000000000// Copyright 2024 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package silence import ( "strconv" "testing" "time" "github.com/coder/quartz" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/silence/silencepb" "github.com/prometheus/alertmanager/types" ) // BenchmarkMutes benchmarks the Mutes method for the Muter interface for // different numbers of silences, where all silences match the alert. func BenchmarkMutes(b *testing.B) { b.Run("1 silence mutes alert", func(b *testing.B) { benchmarkMutes(b, 1) }) b.Run("10 silences mute alert", func(b *testing.B) { benchmarkMutes(b, 10) }) b.Run("100 silences mute alert", func(b *testing.B) { benchmarkMutes(b, 100) }) b.Run("1000 silences mute alert", func(b *testing.B) { benchmarkMutes(b, 1000) }) b.Run("10000 silences mute alert", func(b *testing.B) { benchmarkMutes(b, 10000) }) } func benchmarkMutes(b *testing.B, n int) { silences, err := New(Options{}) require.NoError(b, err) clock := quartz.NewMock(b) silences.clock = clock now := clock.Now() var silenceIDs []string for i := 0; i < n; i++ { s := &silencepb.Silence{ Matchers: []*silencepb.Matcher{{ Type: silencepb.Matcher_EQUAL, Name: "foo", Pattern: "bar", }}, StartsAt: now, EndsAt: now.Add(time.Minute), } require.NoError(b, silences.Set(s)) require.NoError(b, err) silenceIDs = append(silenceIDs, s.Id) } require.Len(b, silenceIDs, n) m := types.NewMarker(prometheus.NewRegistry()) s := NewSilencer(silences, m, promslog.NewNopLogger()) b.ResetTimer() for i := 0; i < b.N; i++ { s.Mutes(model.LabelSet{"foo": "bar"}) } b.StopTimer() // The alert should be marked as silenced for each silence. activeIDs, pendingIDs, _, silenced := m.Silenced(model.LabelSet{"foo": "bar"}.Fingerprint()) require.True(b, silenced) require.Empty(b, pendingIDs) require.Len(b, activeIDs, n) } // BenchmarkQuery benchmarks the Query method for the Silences struct // for different numbers of silences. Not all silences match the query // to prevent compiler and runtime optimizations from affecting the benchmarks. func BenchmarkQuery(b *testing.B) { b.Run("100 silences", func(b *testing.B) { benchmarkQuery(b, 100) }) b.Run("1000 silences", func(b *testing.B) { benchmarkQuery(b, 1000) }) b.Run("10000 silences", func(b *testing.B) { benchmarkQuery(b, 10000) }) } func benchmarkQuery(b *testing.B, numSilences int) { s, err := New(Options{}) require.NoError(b, err) clock := quartz.NewMock(b) s.clock = clock now := clock.Now() lset := model.LabelSet{"aaaa": "AAAA", "bbbb": "BBBB", "cccc": "CCCC"} s.st = state{} for i := 0; i < numSilences; i++ { id := strconv.Itoa(i) // Include an offset to avoid optimizations. patA := "A{4}|" + id patB := id // Does not match. if i%10 == 0 { // Every 10th time, have an actually matching pattern. patB = "B(B|C)B.|" + id } s.st[id] = &silencepb.MeshSilence{Silence: &silencepb.Silence{ Id: id, Matchers: []*silencepb.Matcher{ {Type: silencepb.Matcher_REGEXP, Name: "aaaa", Pattern: patA}, {Type: silencepb.Matcher_REGEXP, Name: "bbbb", Pattern: patB}, }, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(time.Hour), UpdatedAt: now.Add(-time.Hour), }} } // Run things once to populate the matcherCache. sils, _, err := s.Query( QState(types.SilenceStateActive), QMatches(lset), ) require.NoError(b, err) require.Len(b, sils, numSilences/10) b.ResetTimer() for i := 0; i < b.N; i++ { sils, _, err := s.Query( QState(types.SilenceStateActive), QMatches(lset), ) require.NoError(b, err) require.Len(b, sils, numSilences/10) } } prometheus-alertmanager-0.28.1+ds/silence/silence_test.go000066400000000000000000001403431476331240200235000ustar00rootroot00000000000000// Copyright 2016 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package silence import ( "bytes" "fmt" "os" "runtime" "sort" "strings" "sync" "testing" "time" "github.com/coder/quartz" "github.com/matttproud/golang_protobuf_extensions/pbutil" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/testutil" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "go.uber.org/atomic" "github.com/prometheus/alertmanager/featurecontrol" "github.com/prometheus/alertmanager/matcher/compat" pb "github.com/prometheus/alertmanager/silence/silencepb" "github.com/prometheus/alertmanager/types" ) func checkErr(t *testing.T, expected string, got error) { t.Helper() if expected == "" { require.NoError(t, got) return } if got == nil { t.Errorf("expected error containing %q but got none", expected) return } require.Contains(t, got.Error(), expected) } func TestOptionsValidate(t *testing.T) { cases := []struct { options *Options err string }{ { options: &Options{ SnapshotReader: &bytes.Buffer{}, }, }, { options: &Options{ SnapshotFile: "test.bkp", }, }, { options: &Options{ SnapshotFile: "test bkp", SnapshotReader: &bytes.Buffer{}, }, err: "only one of SnapshotFile and SnapshotReader must be set", }, } for _, c := range cases { checkErr(t, c.err, c.options.validate()) } } func TestSilenceGCOverTime(t *testing.T) { t.Run("GC does not remove active silences", func(t *testing.T) { s, err := New(Options{}) require.NoError(t, err) s.clock = quartz.NewMock(t) now := s.nowUTC() s.st = state{ "1": &pb.MeshSilence{Silence: &pb.Silence{Id: "1"}, ExpiresAt: now}, "2": &pb.MeshSilence{Silence: &pb.Silence{Id: "2"}, ExpiresAt: now.Add(-time.Second)}, "3": &pb.MeshSilence{Silence: &pb.Silence{Id: "3"}, ExpiresAt: now.Add(time.Second)}, } want := state{ "3": &pb.MeshSilence{Silence: &pb.Silence{Id: "3"}, ExpiresAt: now.Add(time.Second)}, } n, err := s.GC() require.NoError(t, err) require.Equal(t, 2, n) require.Equal(t, want, s.st) }) t.Run("GC does not leak cache entries", func(t *testing.T) { s, err := New(Options{}) require.NoError(t, err) clock := quartz.NewMock(t) s.clock = clock sil1 := &pb.Silence{ Matchers: []*pb.Matcher{{ Type: pb.Matcher_EQUAL, Name: "foo", Pattern: "bar", }}, StartsAt: clock.Now(), EndsAt: clock.Now().Add(time.Minute), } require.NoError(t, s.Set(sil1)) // Need to query the silence to populate the matcher cache. s.Query(QMatches(model.LabelSet{"foo": "bar"})) require.Len(t, s.st, 1) require.Len(t, s.mc, 1) // Move time forward and both silence and cache entry should be garbage // collected. clock.Advance(time.Minute) n, err := s.GC() require.NoError(t, err) require.Equal(t, 1, n) require.Empty(t, s.st) require.Empty(t, s.mc) }) t.Run("replacing a silences does not leak cache entries", func(t *testing.T) { s, err := New(Options{}) require.NoError(t, err) clock := quartz.NewMock(t) s.clock = clock sil1 := &pb.Silence{ Matchers: []*pb.Matcher{{ Type: pb.Matcher_EQUAL, Name: "foo", Pattern: "bar", }}, StartsAt: clock.Now(), EndsAt: clock.Now().Add(time.Minute), } require.NoError(t, s.Set(sil1)) // Need to query the silence to populate the matcher cache. s.Query(QMatches(model.LabelSet{"foo": "bar"})) require.Len(t, s.st, 1) require.Len(t, s.mc, 1) // must clone sil1 before replacing it. sil2 := cloneSilence(sil1) sil2.Matchers = []*pb.Matcher{{ Type: pb.Matcher_EQUAL, Name: "bar", Pattern: "baz", }} require.NoError(t, s.Set(sil2)) // Need to query the silence to populate the matcher cache. s.Query(QMatches(model.LabelSet{"bar": "baz"})) require.Len(t, s.st, 2) require.Len(t, s.mc, 2) // Move time forward and both silence and cache entry should be garbage // collected. clock.Advance(time.Minute) n, err := s.GC() require.NoError(t, err) require.Equal(t, 2, n) require.Empty(t, s.st) require.Empty(t, s.mc) }) // This test checks for a memory leak that occurred in the matcher cache when // updating an existing silence. t.Run("updating a silences does not leak cache entries", func(t *testing.T) { s, err := New(Options{}) require.NoError(t, err) clock := quartz.NewMock(t) s.clock = clock sil1 := &pb.Silence{ Id: "1", Matchers: []*pb.Matcher{{ Type: pb.Matcher_EQUAL, Name: "foo", Pattern: "bar", }}, StartsAt: clock.Now(), EndsAt: clock.Now().Add(time.Minute), } s.st["1"] = &pb.MeshSilence{Silence: sil1, ExpiresAt: clock.Now().Add(time.Minute)} // Need to query the silence to populate the matcher cache. s.Query(QMatches(model.LabelSet{"foo": "bar"})) require.Len(t, s.mc, 1) // must clone sil1 before updating it. sil2 := cloneSilence(sil1) require.NoError(t, s.Set(sil2)) // The memory leak occurred because updating a silence would add a new // entry in the matcher cache even though no new silence was created. // This check asserts that this no longer happens. s.Query(QMatches(model.LabelSet{"foo": "bar"})) require.Len(t, s.st, 1) require.Len(t, s.mc, 1) // Move time forward and both silence and cache entry should be garbage // collected. clock.Advance(time.Minute) n, err := s.GC() require.NoError(t, err) require.Equal(t, 1, n) require.Empty(t, s.st) require.Empty(t, s.mc) }) } func TestSilencesSnapshot(t *testing.T) { // Check whether storing and loading the snapshot is symmetric. now := quartz.NewMock(t).Now().UTC() cases := []struct { entries []*pb.MeshSilence }{ { entries: []*pb.MeshSilence{ { Silence: &pb.Silence{ Id: "3be80475-e219-4ee7-b6fc-4b65114e362f", Matchers: []*pb.Matcher{ {Name: "label1", Pattern: "val1", Type: pb.Matcher_EQUAL}, {Name: "label2", Pattern: "val.+", Type: pb.Matcher_REGEXP}, }, StartsAt: now, EndsAt: now, UpdatedAt: now, }, ExpiresAt: now, }, { Silence: &pb.Silence{ Id: "3dfb2528-59ce-41eb-b465-f875a4e744a4", Matchers: []*pb.Matcher{ {Name: "label1", Pattern: "val1", Type: pb.Matcher_NOT_EQUAL}, {Name: "label2", Pattern: "val.+", Type: pb.Matcher_NOT_REGEXP}, }, StartsAt: now, EndsAt: now, UpdatedAt: now, }, ExpiresAt: now, }, { Silence: &pb.Silence{ Id: "4b1e760d-182c-4980-b873-c1a6827c9817", Matchers: []*pb.Matcher{ {Name: "label1", Pattern: "val1", Type: pb.Matcher_EQUAL}, }, StartsAt: now.Add(time.Hour), EndsAt: now.Add(2 * time.Hour), UpdatedAt: now, }, ExpiresAt: now.Add(24 * time.Hour), }, }, }, } for _, c := range cases { f, err := os.CreateTemp("", "snapshot") require.NoError(t, err, "creating temp file failed") s1 := &Silences{st: state{}, metrics: newMetrics(nil, nil)} // Setup internal state manually. for _, e := range c.entries { s1.st[e.Silence.Id] = e } _, err = s1.Snapshot(f) require.NoError(t, err, "creating snapshot failed") require.NoError(t, f.Close(), "closing snapshot file failed") f, err = os.Open(f.Name()) require.NoError(t, err, "opening snapshot file failed") // Check again against new nlog instance. s2 := &Silences{mc: matcherCache{}, st: state{}} err = s2.loadSnapshot(f) require.NoError(t, err, "error loading snapshot") require.Equal(t, s1.st, s2.st, "state after loading snapshot did not match snapshotted state") require.NoError(t, f.Close(), "closing snapshot file failed") } } // This tests a regression introduced by https://github.com/prometheus/alertmanager/pull/2689. func TestSilences_Maintenance_DefaultMaintenanceFuncDoesntCrash(t *testing.T) { f, err := os.CreateTemp("", "snapshot") require.NoError(t, err, "creating temp file failed") clock := quartz.NewMock(t) s := &Silences{st: state{}, logger: promslog.NewNopLogger(), clock: clock, metrics: newMetrics(nil, nil)} stopc := make(chan struct{}) done := make(chan struct{}) go func() { s.Maintenance(100*time.Millisecond, f.Name(), stopc, nil) close(done) }() runtime.Gosched() clock.Advance(100 * time.Millisecond) close(stopc) <-done } func TestSilences_Maintenance_SupportsCustomCallback(t *testing.T) { f, err := os.CreateTemp("", "snapshot") require.NoError(t, err, "creating temp file failed") clock := quartz.NewMock(t) reg := prometheus.NewRegistry() s := &Silences{st: state{}, logger: promslog.NewNopLogger(), clock: clock} s.metrics = newMetrics(reg, s) stopc := make(chan struct{}) var calls atomic.Int32 var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() s.Maintenance(10*time.Second, f.Name(), stopc, func() (int64, error) { calls.Add(1) return 0, nil }) }() gosched() // Before the first tick, no maintenance executed. clock.Advance(9 * time.Second) require.EqualValues(t, 0, calls.Load()) // Tick once. clock.Advance(1 * time.Second) require.Eventually(t, func() bool { return calls.Load() == 1 }, 5*time.Second, time.Second) // Stop the maintenance loop. We should get exactly one more execution of the maintenance func. close(stopc) wg.Wait() require.EqualValues(t, 2, calls.Load()) // Check the maintenance metrics. require.NoError(t, testutil.GatherAndCompare(reg, bytes.NewBufferString(` # HELP alertmanager_silences_maintenance_errors_total How many maintenances were executed for silences that failed. # TYPE alertmanager_silences_maintenance_errors_total counter alertmanager_silences_maintenance_errors_total 0 # HELP alertmanager_silences_maintenance_total How many maintenances were executed for silences. # TYPE alertmanager_silences_maintenance_total counter alertmanager_silences_maintenance_total 2 `), "alertmanager_silences_maintenance_total", "alertmanager_silences_maintenance_errors_total")) } func TestSilencesSetSilence(t *testing.T) { s, err := New(Options{ Retention: time.Minute, }) require.NoError(t, err) clock := quartz.NewMock(t) s.clock = clock nowpb := s.nowUTC() sil := &pb.Silence{ Id: "some_id", Matchers: []*pb.Matcher{{Name: "abc", Pattern: "def"}}, StartsAt: nowpb, EndsAt: nowpb, } want := state{ "some_id": &pb.MeshSilence{ Silence: sil, ExpiresAt: nowpb.Add(time.Minute), }, } done := make(chan struct{}) s.broadcast = func(b []byte) { var e pb.MeshSilence r := bytes.NewReader(b) _, err := pbutil.ReadDelimited(r, &e) require.NoError(t, err) require.Equal(t, &e, want["some_id"]) close(done) } // setSilence() is always called with s.mtx locked() in the application code func() { s.mtx.Lock() defer s.mtx.Unlock() require.NoError(t, s.setSilence(s.toMeshSilence(sil), nowpb)) }() // Ensure broadcast was called. if _, isOpen := <-done; isOpen { t.Fatal("broadcast was not called") } require.Equal(t, want, s.st, "Unexpected silence state") } func TestSilenceSet(t *testing.T) { s, err := New(Options{ Retention: time.Hour, }) require.NoError(t, err) clock := quartz.NewMock(t) s.clock = clock start1 := s.nowUTC() // Insert silence with fixed start time. sil1 := &pb.Silence{ Matchers: []*pb.Matcher{{Name: "a", Pattern: "b"}}, StartsAt: start1.Add(2 * time.Minute), EndsAt: start1.Add(5 * time.Minute), } versionBeforeOp := s.Version() require.NoError(t, s.Set(sil1)) require.NotEqual(t, "", sil1.Id) require.NotEqual(t, versionBeforeOp, s.Version()) want := state{ sil1.Id: &pb.MeshSilence{ Silence: &pb.Silence{ Id: sil1.Id, Matchers: []*pb.Matcher{{Name: "a", Pattern: "b"}}, StartsAt: start1.Add(2 * time.Minute), EndsAt: start1.Add(5 * time.Minute), UpdatedAt: start1, }, ExpiresAt: start1.Add(5*time.Minute + s.retention), }, } require.Equal(t, want, s.st, "unexpected state after silence creation") // Insert silence with unset start time. Must be set to now. clock.Advance(time.Minute) start2 := s.nowUTC() sil2 := &pb.Silence{ Matchers: []*pb.Matcher{{Name: "a", Pattern: "b"}}, EndsAt: start2.Add(1 * time.Minute), } versionBeforeOp = s.Version() require.NoError(t, s.Set(sil2)) require.NotEqual(t, "", sil2.Id) require.NotEqual(t, versionBeforeOp, s.Version()) want = state{ sil1.Id: want[sil1.Id], sil2.Id: &pb.MeshSilence{ Silence: &pb.Silence{ Id: sil2.Id, Matchers: []*pb.Matcher{{Name: "a", Pattern: "b"}}, StartsAt: start2, EndsAt: start2.Add(1 * time.Minute), UpdatedAt: start2, }, ExpiresAt: start2.Add(1*time.Minute + s.retention), }, } require.Equal(t, want, s.st, "unexpected state after silence creation") // Should be able to update silence without modifications. It is expected to // keep the same ID. sil3 := cloneSilence(sil2) versionBeforeOp = s.Version() require.NoError(t, s.Set(sil3)) require.Equal(t, sil2.Id, sil3.Id) require.Equal(t, versionBeforeOp, s.Version()) // Should be able to update silence with comment. It is also expected to // keep the same ID. sil4 := cloneSilence(sil3) sil4.Comment = "c" versionBeforeOp = s.Version() require.NoError(t, s.Set(sil4)) require.Equal(t, sil3.Id, sil4.Id) require.Equal(t, versionBeforeOp, s.Version()) // Extend sil4 to expire at a later time. This should not expire the // existing silence, and so should also keep the same ID. clock.Advance(time.Minute) start5 := s.nowUTC() sil5 := cloneSilence(sil4) sil5.EndsAt = start5.Add(100 * time.Minute) versionBeforeOp = s.Version() require.NoError(t, s.Set(sil5)) require.Equal(t, sil4.Id, sil5.Id) want = state{ sil1.Id: want[sil1.Id], sil2.Id: &pb.MeshSilence{ Silence: &pb.Silence{ Id: sil2.Id, Matchers: []*pb.Matcher{{Name: "a", Pattern: "b"}}, StartsAt: start2, EndsAt: start5.Add(100 * time.Minute), UpdatedAt: start5, Comment: "c", }, ExpiresAt: start5.Add(100*time.Minute + s.retention), }, } require.Equal(t, want, s.st, "unexpected state after silence creation") require.Equal(t, versionBeforeOp, s.Version()) // Replace the silence sil5 with another silence with different matchers. // Unlike previous updates, changing the matchers for an existing silence // will expire the existing silence and create a new silence. The new // silence is expected to have a different ID to preserve the history of // the previous silence. clock.Advance(time.Minute) start6 := s.nowUTC() sil6 := cloneSilence(sil5) sil6.Matchers = []*pb.Matcher{{Name: "a", Pattern: "c"}} versionBeforeOp = s.Version() require.NoError(t, s.Set(sil6)) require.NotEqual(t, sil5.Id, sil6.Id) want = state{ sil1.Id: want[sil1.Id], sil2.Id: &pb.MeshSilence{ Silence: &pb.Silence{ Id: sil2.Id, Matchers: []*pb.Matcher{{Name: "a", Pattern: "b"}}, StartsAt: start2, EndsAt: start6, // Expired UpdatedAt: start6, Comment: "c", }, ExpiresAt: start6.Add(s.retention), }, sil6.Id: &pb.MeshSilence{ Silence: &pb.Silence{ Id: sil6.Id, Matchers: []*pb.Matcher{{Name: "a", Pattern: "c"}}, StartsAt: start6, EndsAt: start5.Add(100 * time.Minute), UpdatedAt: start6, Comment: "c", }, ExpiresAt: start5.Add(100*time.Minute + s.retention), }, } require.Equal(t, want, s.st, "unexpected state after silence creation") require.NotEqual(t, versionBeforeOp, s.Version()) // Re-create the silence that we just replaced. Changing the start time, // just like changing the matchers, creates a new silence with a different // ID. This is again to preserve the history of the original silence. clock.Advance(time.Minute) start7 := s.nowUTC() sil7 := cloneSilence(sil5) sil7.StartsAt = start1 sil7.EndsAt = start1.Add(5 * time.Minute) versionBeforeOp = s.Version() require.NoError(t, s.Set(sil7)) require.NotEqual(t, sil2.Id, sil7.Id) want = state{ sil1.Id: want[sil1.Id], sil2.Id: want[sil2.Id], sil6.Id: want[sil6.Id], sil7.Id: &pb.MeshSilence{ Silence: &pb.Silence{ Id: sil7.Id, Matchers: []*pb.Matcher{{Name: "a", Pattern: "b"}}, StartsAt: start7, // New silences have their start time set to "now" when created. EndsAt: start1.Add(5 * time.Minute), UpdatedAt: start7, Comment: "c", }, ExpiresAt: start1.Add(5*time.Minute + s.retention), }, } require.Equal(t, want, s.st, "unexpected state after silence creation") require.NotEqual(t, versionBeforeOp, s.Version()) // Updating an existing silence with an invalid silence should not expire // the original silence. clock.Advance(time.Millisecond) sil8 := cloneSilence(sil7) sil8.EndsAt = time.Time{} versionBeforeOp = s.Version() require.EqualError(t, s.Set(sil8), "invalid silence: invalid zero end timestamp") // sil7 should not be expired because the update failed. clock.Advance(time.Millisecond) sil7, err = s.QueryOne(QIDs(sil7.Id)) require.NoError(t, err) require.Equal(t, types.SilenceStateActive, getState(sil7, s.nowUTC())) require.Equal(t, versionBeforeOp, s.Version()) } func TestSilenceLimits(t *testing.T) { s, err := New(Options{ Limits: Limits{ MaxSilences: func() int { return 1 }, MaxSilenceSizeBytes: func() int { return 2 << 11 }, // 4KB }, }) require.NoError(t, err) // Insert sil1 should succeed without error. sil1 := &pb.Silence{ Matchers: []*pb.Matcher{{Name: "a", Pattern: "b"}}, StartsAt: time.Now(), EndsAt: time.Now().Add(5 * time.Minute), } require.NoError(t, s.Set(sil1)) // Insert sil2 should fail because maximum number of silences has been // exceeded. sil2 := &pb.Silence{ Matchers: []*pb.Matcher{{Name: "c", Pattern: "d"}}, StartsAt: time.Now(), EndsAt: time.Now().Add(5 * time.Minute), } require.EqualError(t, s.Set(sil2), "exceeded maximum number of silences: 1 (limit: 1)") // Expire sil1 and run the GC. This should allow sil2 to be inserted. require.NoError(t, s.Expire(sil1.Id)) n, err := s.GC() require.NoError(t, err) require.Equal(t, 1, n) require.NoError(t, s.Set(sil2)) // Expire sil2 and run the GC. require.NoError(t, s.Expire(sil2.Id)) n, err = s.GC() require.NoError(t, err) require.Equal(t, 1, n) // Insert sil3 should fail because it exceeds maximum size. sil3 := &pb.Silence{ Matchers: []*pb.Matcher{ { Name: strings.Repeat("e", 2<<9), Pattern: strings.Repeat("f", 2<<9), }, { Name: strings.Repeat("g", 2<<9), Pattern: strings.Repeat("h", 2<<9), }, }, CreatedBy: strings.Repeat("i", 2<<9), Comment: strings.Repeat("j", 2<<9), StartsAt: time.Now(), EndsAt: time.Now().Add(5 * time.Minute), } require.EqualError(t, s.Set(sil3), fmt.Sprintf("silence exceeded maximum size: %d bytes (limit: 4096 bytes)", s.toMeshSilence(sil3).Size())) // Should be able to insert sil4. sil4 := &pb.Silence{ Matchers: []*pb.Matcher{{Name: "k", Pattern: "l"}}, StartsAt: time.Now(), EndsAt: time.Now().Add(5 * time.Minute), } require.NoError(t, s.Set(sil4)) // Should be able to update sil4 without modifications. It is expected to // keep the same ID. sil5 := cloneSilence(sil4) require.NoError(t, s.Set(sil5)) require.Equal(t, sil4.Id, sil5.Id) // Should be able to update the comment. It is also expected to keep the // same ID. sil6 := cloneSilence(sil5) sil6.Comment = "m" require.NoError(t, s.Set(sil6)) require.Equal(t, sil5.Id, sil6.Id) // Should not be able to update the start and end time as this requires // sil6 to be expired and a new silence to be created. However, this would // exceed the maximum number of silences, which counts both active and // expired silences. sil7 := cloneSilence(sil6) sil7.StartsAt = time.Now().Add(5 * time.Minute) sil7.EndsAt = time.Now().Add(10 * time.Minute) require.EqualError(t, s.Set(sil7), "exceeded maximum number of silences: 1 (limit: 1)") // sil6 should not be expired because the update failed. sil6, err = s.QueryOne(QIDs(sil6.Id)) require.NoError(t, err) require.Equal(t, types.SilenceStateActive, getState(sil6, s.nowUTC())) // Should not be able to update with a comment that exceeds maximum size. // Need to increase the maximum number of silences to test this. s.limits.MaxSilences = func() int { return 2 } sil8 := cloneSilence(sil6) sil8.Comment = strings.Repeat("m", 2<<11) require.EqualError(t, s.Set(sil8), fmt.Sprintf("silence exceeded maximum size: %d bytes (limit: 4096 bytes)", s.toMeshSilence(sil8).Size())) // sil6 should not be expired because the update failed. sil6, err = s.QueryOne(QIDs(sil6.Id)) require.NoError(t, err) require.Equal(t, types.SilenceStateActive, getState(sil6, s.nowUTC())) // Should not be able to replace with a silence that exceeds maximum size. // This is different from the previous assertion as unlike when adding or // updating a comment, changing the matchers for a silence should expire // the existing silence, unless the silence that is replacing it exceeds // limits, in which case the operation should fail and the existing silence // should still be active. sil9 := cloneSilence(sil8) sil9.Matchers = []*pb.Matcher{{Name: "n", Pattern: "o"}} require.EqualError(t, s.Set(sil9), fmt.Sprintf("silence exceeded maximum size: %d bytes (limit: 4096 bytes)", s.toMeshSilence(sil9).Size())) // sil6 should not be expired because the update failed. sil6, err = s.QueryOne(QIDs(sil6.Id)) require.NoError(t, err) require.Equal(t, types.SilenceStateActive, getState(sil6, s.nowUTC())) } func TestSilenceNoLimits(t *testing.T) { s, err := New(Options{ Limits: Limits{}, }) require.NoError(t, err) // Insert sil should succeed without error. sil := &pb.Silence{ Matchers: []*pb.Matcher{{Name: "a", Pattern: "b"}}, StartsAt: time.Now(), EndsAt: time.Now().Add(5 * time.Minute), Comment: strings.Repeat("c", 2<<9), } require.NoError(t, s.Set(sil)) require.NotEqual(t, "", sil.Id) } func TestSetActiveSilence(t *testing.T) { s, err := New(Options{ Retention: time.Hour, }) require.NoError(t, err) clock := quartz.NewMock(t) s.clock = clock now := clock.Now() startsAt := now.Add(-1 * time.Minute) endsAt := now.Add(5 * time.Minute) // Insert silence with fixed start time. sil1 := &pb.Silence{ Matchers: []*pb.Matcher{{Name: "a", Pattern: "b"}}, StartsAt: startsAt, EndsAt: endsAt, } require.NoError(t, s.Set(sil1)) // Update silence with 2 extra nanoseconds so the "seconds" part should not change newStartsAt := now.Add(2 * time.Nanosecond) newEndsAt := endsAt.Add(2 * time.Minute) sil2 := cloneSilence(sil1) sil2.Id = sil1.Id sil2.StartsAt = newStartsAt sil2.EndsAt = newEndsAt clock.Advance(time.Minute) now = s.nowUTC() require.NoError(t, s.Set(sil2)) require.Equal(t, sil1.Id, sil2.Id) want := state{ sil2.Id: &pb.MeshSilence{ Silence: &pb.Silence{ Id: sil1.Id, Matchers: []*pb.Matcher{{Name: "a", Pattern: "b"}}, StartsAt: newStartsAt, EndsAt: newEndsAt, UpdatedAt: now, }, ExpiresAt: newEndsAt.Add(s.retention), }, } require.Equal(t, want, s.st, "unexpected state after silence creation") } func TestSilencesSetFail(t *testing.T) { s, err := New(Options{}) require.NoError(t, err) clock := quartz.NewMock(t) s.clock = clock cases := []struct { s *pb.Silence err string }{ { s: &pb.Silence{ Id: "some_id", Matchers: []*pb.Matcher{{Name: "a", Pattern: "b"}}, EndsAt: clock.Now().Add(5 * time.Minute), }, err: ErrNotFound.Error(), }, { s: &pb.Silence{}, // Silence without matcher. err: "invalid silence", }, } for _, c := range cases { checkErr(t, c.err, s.Set(c.s)) } } func TestQState(t *testing.T) { now := time.Now().UTC() cases := []struct { sil *pb.Silence states []types.SilenceState keep bool }{ { sil: &pb.Silence{ StartsAt: now.Add(time.Minute), EndsAt: now.Add(time.Hour), }, states: []types.SilenceState{types.SilenceStateActive, types.SilenceStateExpired}, keep: false, }, { sil: &pb.Silence{ StartsAt: now.Add(time.Minute), EndsAt: now.Add(time.Hour), }, states: []types.SilenceState{types.SilenceStatePending}, keep: true, }, { sil: &pb.Silence{ StartsAt: now.Add(time.Minute), EndsAt: now.Add(time.Hour), }, states: []types.SilenceState{types.SilenceStateExpired, types.SilenceStatePending}, keep: true, }, } for i, c := range cases { q := &query{} QState(c.states...)(q) f := q.filters[0] keep, err := f(c.sil, nil, now) require.NoError(t, err) require.Equal(t, c.keep, keep, "unexpected filter result for case %d", i) } } func TestQMatches(t *testing.T) { qp := QMatches(model.LabelSet{ "job": "test", "instance": "web-1", "path": "/user/profile", "method": "GET", }) q := &query{} qp(q) f := q.filters[0] cases := []struct { sil *pb.Silence drop bool }{ { sil: &pb.Silence{ Matchers: []*pb.Matcher{ {Name: "job", Pattern: "test", Type: pb.Matcher_EQUAL}, }, }, drop: true, }, { sil: &pb.Silence{ Matchers: []*pb.Matcher{ {Name: "job", Pattern: "test", Type: pb.Matcher_NOT_EQUAL}, }, }, drop: false, }, { sil: &pb.Silence{ Matchers: []*pb.Matcher{ {Name: "job", Pattern: "test", Type: pb.Matcher_EQUAL}, {Name: "method", Pattern: "POST", Type: pb.Matcher_EQUAL}, }, }, drop: false, }, { sil: &pb.Silence{ Matchers: []*pb.Matcher{ {Name: "job", Pattern: "test", Type: pb.Matcher_EQUAL}, {Name: "method", Pattern: "POST", Type: pb.Matcher_NOT_EQUAL}, }, }, drop: true, }, { sil: &pb.Silence{ Matchers: []*pb.Matcher{ {Name: "path", Pattern: "/user/.+", Type: pb.Matcher_REGEXP}, }, }, drop: true, }, { sil: &pb.Silence{ Matchers: []*pb.Matcher{ {Name: "path", Pattern: "/user/.+", Type: pb.Matcher_NOT_REGEXP}, }, }, drop: false, }, { sil: &pb.Silence{ Matchers: []*pb.Matcher{ {Name: "path", Pattern: "/user/.+", Type: pb.Matcher_REGEXP}, {Name: "path", Pattern: "/nothing/.+", Type: pb.Matcher_REGEXP}, }, }, drop: false, }, } for _, c := range cases { drop, err := f(c.sil, &Silences{mc: matcherCache{}, st: state{}}, time.Time{}) require.NoError(t, err) require.Equal(t, c.drop, drop, "unexpected filter result") } } func TestSilencesQuery(t *testing.T) { s, err := New(Options{}) require.NoError(t, err) s.st = state{ "1": &pb.MeshSilence{Silence: &pb.Silence{Id: "1"}}, "2": &pb.MeshSilence{Silence: &pb.Silence{Id: "2"}}, "3": &pb.MeshSilence{Silence: &pb.Silence{Id: "3"}}, "4": &pb.MeshSilence{Silence: &pb.Silence{Id: "4"}}, "5": &pb.MeshSilence{Silence: &pb.Silence{Id: "5"}}, } cases := []struct { q *query exp []*pb.Silence }{ { // Default query of retrieving all silences. q: &query{}, exp: []*pb.Silence{ {Id: "1"}, {Id: "2"}, {Id: "3"}, {Id: "4"}, {Id: "5"}, }, }, { // Retrieve by IDs. q: &query{ ids: []string{"2", "5"}, }, exp: []*pb.Silence{ {Id: "2"}, {Id: "5"}, }, }, { // Retrieve all and filter q: &query{ filters: []silenceFilter{ func(sil *pb.Silence, _ *Silences, _ time.Time) (bool, error) { return sil.Id == "1" || sil.Id == "2", nil }, }, }, exp: []*pb.Silence{ {Id: "1"}, {Id: "2"}, }, }, { // Retrieve by IDs and filter q: &query{ ids: []string{"2", "5"}, filters: []silenceFilter{ func(sil *pb.Silence, _ *Silences, _ time.Time) (bool, error) { return sil.Id == "1" || sil.Id == "2", nil }, }, }, exp: []*pb.Silence{ {Id: "2"}, }, }, } for _, c := range cases { // Run default query of retrieving all silences. res, _, err := s.query(c.q, time.Time{}) require.NoError(t, err, "unexpected error on querying") // Currently there are no sorting guarantees in the querying API. sort.Sort(silencesByID(c.exp)) sort.Sort(silencesByID(res)) require.Equal(t, c.exp, res, "unexpected silences in result") } } type silencesByID []*pb.Silence func (s silencesByID) Len() int { return len(s) } func (s silencesByID) Swap(i, j int) { s[i], s[j] = s[j], s[i] } func (s silencesByID) Less(i, j int) bool { return s[i].Id < s[j].Id } func TestSilenceCanUpdate(t *testing.T) { now := time.Now().UTC() cases := []struct { a, b *pb.Silence ok bool }{ // Bad arguments. { a: &pb.Silence{}, b: &pb.Silence{ StartsAt: now, EndsAt: now.Add(-time.Minute), }, ok: false, }, // Expired silence. { a: &pb.Silence{ StartsAt: now.Add(-time.Hour), EndsAt: now.Add(-time.Second), }, b: &pb.Silence{ StartsAt: now, EndsAt: now, }, ok: false, }, // Pending silences. { a: &pb.Silence{ StartsAt: now.Add(time.Hour), EndsAt: now.Add(2 * time.Hour), UpdatedAt: now.Add(-time.Hour), }, b: &pb.Silence{ StartsAt: now.Add(-time.Minute), EndsAt: now.Add(time.Hour), }, ok: false, }, { a: &pb.Silence{ StartsAt: now.Add(time.Hour), EndsAt: now.Add(2 * time.Hour), UpdatedAt: now.Add(-time.Hour), }, b: &pb.Silence{ StartsAt: now.Add(time.Minute), EndsAt: now.Add(time.Minute), }, ok: true, }, { a: &pb.Silence{ StartsAt: now.Add(time.Hour), EndsAt: now.Add(2 * time.Hour), UpdatedAt: now.Add(-time.Hour), }, b: &pb.Silence{ StartsAt: now, // set to exactly start now. EndsAt: now.Add(2 * time.Hour), }, ok: true, }, // Active silences. { a: &pb.Silence{ StartsAt: now.Add(-time.Hour), EndsAt: now.Add(2 * time.Hour), UpdatedAt: now.Add(-time.Hour), }, b: &pb.Silence{ StartsAt: now.Add(-time.Minute), EndsAt: now.Add(2 * time.Hour), }, ok: false, }, { a: &pb.Silence{ StartsAt: now.Add(-time.Hour), EndsAt: now.Add(2 * time.Hour), UpdatedAt: now.Add(-time.Hour), }, b: &pb.Silence{ StartsAt: now.Add(-time.Hour), EndsAt: now.Add(-time.Second), }, ok: false, }, { a: &pb.Silence{ StartsAt: now.Add(-time.Hour), EndsAt: now.Add(2 * time.Hour), UpdatedAt: now.Add(-time.Hour), }, b: &pb.Silence{ StartsAt: now.Add(-time.Hour), EndsAt: now, }, ok: true, }, { a: &pb.Silence{ StartsAt: now.Add(-time.Hour), EndsAt: now.Add(2 * time.Hour), UpdatedAt: now.Add(-time.Hour), }, b: &pb.Silence{ StartsAt: now.Add(-time.Hour), EndsAt: now.Add(3 * time.Hour), }, ok: true, }, } for _, c := range cases { ok := canUpdate(c.a, c.b, now) if ok && !c.ok { t.Errorf("expected not-updateable but was: %v, %v", c.a, c.b) } if ok && !c.ok { t.Errorf("expected updateable but was not: %v, %v", c.a, c.b) } } } func TestSilenceExpire(t *testing.T) { s, err := New(Options{Retention: time.Hour}) require.NoError(t, err) clock := quartz.NewMock(t) s.clock = clock now := s.nowUTC() m := &pb.Matcher{Type: pb.Matcher_EQUAL, Name: "a", Pattern: "b"} s.st = state{ "pending": &pb.MeshSilence{Silence: &pb.Silence{ Id: "pending", Matchers: []*pb.Matcher{m}, StartsAt: now.Add(time.Minute), EndsAt: now.Add(time.Hour), UpdatedAt: now.Add(-time.Hour), }}, "active": &pb.MeshSilence{Silence: &pb.Silence{ Id: "active", Matchers: []*pb.Matcher{m}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(time.Hour), UpdatedAt: now.Add(-time.Hour), }}, "expired": &pb.MeshSilence{Silence: &pb.Silence{ Id: "expired", Matchers: []*pb.Matcher{m}, StartsAt: now.Add(-time.Hour), EndsAt: now.Add(-time.Minute), UpdatedAt: now.Add(-time.Hour), }}, } count, err := s.CountState(types.SilenceStatePending) require.NoError(t, err) require.Equal(t, 1, count) count, err = s.CountState(types.SilenceStateExpired) require.NoError(t, err) require.Equal(t, 1, count) require.NoError(t, s.Expire("pending")) require.NoError(t, s.Expire("active")) require.NoError(t, s.Expire("expired")) sil, err := s.QueryOne(QIDs("pending")) require.NoError(t, err) require.Equal(t, &pb.Silence{ Id: "pending", Matchers: []*pb.Matcher{m}, StartsAt: now, EndsAt: now, UpdatedAt: now, }, sil) // Let time pass... clock.Advance(time.Second) count, err = s.CountState(types.SilenceStatePending) require.NoError(t, err) require.Equal(t, 0, count) count, err = s.CountState(types.SilenceStateExpired) require.NoError(t, err) require.Equal(t, 3, count) // Expiring a pending Silence should make the API return the // SilenceStateExpired Silence state. silenceState := types.CalcSilenceState(sil.StartsAt, sil.EndsAt) require.Equal(t, types.SilenceStateExpired, silenceState) sil, err = s.QueryOne(QIDs("active")) require.NoError(t, err) require.Equal(t, &pb.Silence{ Id: "active", Matchers: []*pb.Matcher{m}, StartsAt: now.Add(-time.Minute), EndsAt: now, UpdatedAt: now, }, sil) sil, err = s.QueryOne(QIDs("expired")) require.NoError(t, err) require.Equal(t, &pb.Silence{ Id: "expired", Matchers: []*pb.Matcher{m}, StartsAt: now.Add(-time.Hour), EndsAt: now.Add(-time.Minute), UpdatedAt: now.Add(-time.Hour), }, sil) } // TestSilenceExpireWithZeroRetention covers the problem that, with zero // retention time, a silence explicitly set to expired will also immediately // expire from the silence storage. func TestSilenceExpireWithZeroRetention(t *testing.T) { s, err := New(Options{Retention: 0}) require.NoError(t, err) clock := quartz.NewMock(t) s.clock = clock now := s.nowUTC() m := &pb.Matcher{Type: pb.Matcher_EQUAL, Name: "a", Pattern: "b"} s.st = state{ "pending": &pb.MeshSilence{Silence: &pb.Silence{ Id: "pending", Matchers: []*pb.Matcher{m}, StartsAt: now.Add(time.Minute), EndsAt: now.Add(time.Hour), UpdatedAt: now.Add(-time.Hour), }}, "active": &pb.MeshSilence{Silence: &pb.Silence{ Id: "active", Matchers: []*pb.Matcher{m}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(time.Hour), UpdatedAt: now.Add(-time.Hour), }}, "expired": &pb.MeshSilence{Silence: &pb.Silence{ Id: "expired", Matchers: []*pb.Matcher{m}, StartsAt: now.Add(-time.Hour), EndsAt: now.Add(-time.Minute), UpdatedAt: now.Add(-time.Hour), }}, } count, err := s.CountState(types.SilenceStatePending) require.NoError(t, err) require.Equal(t, 1, count) count, err = s.CountState(types.SilenceStateActive) require.NoError(t, err) require.Equal(t, 1, count) count, err = s.CountState(types.SilenceStateExpired) require.NoError(t, err) require.Equal(t, 1, count) // Advance time. The silence state management code uses update time when // merging, and the logic is "first write wins". So we must advance the clock // one tick for updates to take effect. clock.Advance(1 * time.Millisecond) require.NoError(t, s.Expire("pending")) require.NoError(t, s.Expire("active")) require.NoError(t, s.Expire("expired")) // Advance time again. Despite what the function name says, s.Expire() does // not expire a silence. It sets the silence to EndAt the current time. This // means that the silence is active immediately after calling Expire. clock.Advance(1 * time.Millisecond) // Verify all silences have expired. count, err = s.CountState(types.SilenceStatePending) require.NoError(t, err) require.Equal(t, 0, count) count, err = s.CountState(types.SilenceStateActive) require.NoError(t, err) require.Equal(t, 0, count) count, err = s.CountState(types.SilenceStateExpired) require.NoError(t, err) require.Equal(t, 3, count) } // This test checks that invalid silences can be expired. func TestSilenceExpireInvalid(t *testing.T) { s, err := New(Options{Retention: time.Hour}) require.NoError(t, err) clock := quartz.NewMock(t) s.clock = clock now := s.nowUTC() // In this test the matcher has an invalid type. silence := pb.Silence{ Id: "active", Matchers: []*pb.Matcher{{Type: -1, Name: "a", Pattern: "b"}}, StartsAt: now.Add(-time.Minute), EndsAt: now.Add(time.Hour), UpdatedAt: now.Add(-time.Hour), } // Assert that this silence is invalid. require.EqualError(t, validateSilence(&silence), "invalid label matcher 0: unknown matcher type \"-1\"") s.st = state{"active": &pb.MeshSilence{Silence: &silence}} // The silence should be active. count, err := s.CountState(types.SilenceStateActive) require.NoError(t, err) require.Equal(t, 1, count) clock.Advance(time.Millisecond) require.NoError(t, s.Expire("active")) clock.Advance(time.Millisecond) // The silence should be expired. count, err = s.CountState(types.SilenceStateActive) require.NoError(t, err) require.Equal(t, 0, count) count, err = s.CountState(types.SilenceStateExpired) require.NoError(t, err) require.Equal(t, 1, count) } func TestSilencer(t *testing.T) { ss, err := New(Options{Retention: time.Hour}) require.NoError(t, err) clock := quartz.NewMock(t) ss.clock = clock now := ss.nowUTC() m := types.NewMarker(prometheus.NewRegistry()) s := NewSilencer(ss, m, promslog.NewNopLogger()) require.False(t, s.Mutes(model.LabelSet{"foo": "bar"}), "expected alert not silenced without any silences") sil1 := &pb.Silence{ Matchers: []*pb.Matcher{{Name: "foo", Pattern: "baz"}}, StartsAt: now.Add(-time.Hour), EndsAt: now.Add(5 * time.Minute), } require.NoError(t, ss.Set(sil1)) require.False(t, s.Mutes(model.LabelSet{"foo": "bar"}), "expected alert not silenced by non-matching silence") sil2 := &pb.Silence{ Matchers: []*pb.Matcher{{Name: "foo", Pattern: "bar"}}, StartsAt: now.Add(-time.Hour), EndsAt: now.Add(5 * time.Minute), } require.NoError(t, ss.Set(sil2)) require.NotEmpty(t, sil2.Id) require.True(t, s.Mutes(model.LabelSet{"foo": "bar"}), "expected alert silenced by matching silence") // One hour passes, silence expires. clock.Advance(time.Hour) now = ss.nowUTC() require.False(t, s.Mutes(model.LabelSet{"foo": "bar"}), "expected alert not silenced by expired silence") // Update silence to start in the future. err = ss.Set(&pb.Silence{ Id: sil2.Id, Matchers: []*pb.Matcher{{Name: "foo", Pattern: "bar"}}, StartsAt: now.Add(time.Hour), EndsAt: now.Add(3 * time.Hour), }) require.NoError(t, err) require.False(t, s.Mutes(model.LabelSet{"foo": "bar"}), "expected alert not silenced by future silence") // Two hours pass, silence becomes active. clock.Advance(2 * time.Hour) now = ss.nowUTC() // Exposes issue #2426. require.True(t, s.Mutes(model.LabelSet{"foo": "bar"}), "expected alert silenced by activated silence") err = ss.Set(&pb.Silence{ Matchers: []*pb.Matcher{{Name: "foo", Pattern: "b..", Type: pb.Matcher_REGEXP}}, StartsAt: now.Add(time.Hour), EndsAt: now.Add(3 * time.Hour), }) require.NoError(t, err) // Note that issue #2426 doesn't apply anymore because we added a new silence. require.True(t, s.Mutes(model.LabelSet{"foo": "bar"}), "expected alert still silenced by activated silence") // Two hours pass, first silence expires, overlapping second silence becomes active. clock.Advance(2 * time.Hour) // Another variant of issue #2426 (overlapping silences). require.True(t, s.Mutes(model.LabelSet{"foo": "bar"}), "expected alert silenced by activated second silence") } func TestValidateClassicMatcher(t *testing.T) { cases := []struct { m *pb.Matcher err string }{ { m: &pb.Matcher{ Name: "a", Pattern: "b", Type: pb.Matcher_EQUAL, }, err: "", }, { m: &pb.Matcher{ Name: "a", Pattern: "b", Type: pb.Matcher_NOT_EQUAL, }, err: "", }, { m: &pb.Matcher{ Name: "a", Pattern: "b", Type: pb.Matcher_REGEXP, }, err: "", }, { m: &pb.Matcher{ Name: "a", Pattern: "b", Type: pb.Matcher_NOT_REGEXP, }, err: "", }, { m: &pb.Matcher{ Name: "00", Pattern: "a", Type: pb.Matcher_EQUAL, }, err: "invalid label name", }, { m: &pb.Matcher{ Name: "\xf0\x9f\x99\x82", // U+1F642 Pattern: "a", Type: pb.Matcher_EQUAL, }, err: "invalid label name", }, { m: &pb.Matcher{ Name: "a", Pattern: "((", Type: pb.Matcher_REGEXP, }, err: "invalid regular expression", }, { m: &pb.Matcher{ Name: "a", Pattern: "))", Type: pb.Matcher_NOT_REGEXP, }, err: "invalid regular expression", }, { m: &pb.Matcher{ Name: "a", Pattern: "\xff", Type: pb.Matcher_EQUAL, }, err: "invalid label value", }, { m: &pb.Matcher{ Name: "a", Pattern: "\xf0\x9f\x99\x82", // U+1F642 Type: pb.Matcher_EQUAL, }, err: "", }, { m: &pb.Matcher{ Name: "a", Pattern: "b", Type: 333, }, err: "unknown matcher type", }, } for _, c := range cases { checkErr(t, c.err, validateMatcher(c.m)) } } func TestValidateUTF8Matcher(t *testing.T) { cases := []struct { m *pb.Matcher err string }{ { m: &pb.Matcher{ Name: "a", Pattern: "b", Type: pb.Matcher_EQUAL, }, err: "", }, { m: &pb.Matcher{ Name: "a", Pattern: "b", Type: pb.Matcher_NOT_EQUAL, }, err: "", }, { m: &pb.Matcher{ Name: "a", Pattern: "b", Type: pb.Matcher_REGEXP, }, err: "", }, { m: &pb.Matcher{ Name: "a", Pattern: "b", Type: pb.Matcher_NOT_REGEXP, }, err: "", }, { m: &pb.Matcher{ Name: "00", Pattern: "a", Type: pb.Matcher_EQUAL, }, err: "", }, { m: &pb.Matcher{ Name: "\xf0\x9f\x99\x82", // U+1F642 Pattern: "a", Type: pb.Matcher_EQUAL, }, err: "", }, { m: &pb.Matcher{ Name: "a", Pattern: "((", Type: pb.Matcher_REGEXP, }, err: "invalid regular expression", }, { m: &pb.Matcher{ Name: "a", Pattern: "))", Type: pb.Matcher_NOT_REGEXP, }, err: "invalid regular expression", }, { m: &pb.Matcher{ Name: "a", Pattern: "\xff", Type: pb.Matcher_EQUAL, }, err: "invalid label value", }, { m: &pb.Matcher{ Name: "a", Pattern: "\xf0\x9f\x99\x82", // U+1F642 Type: pb.Matcher_EQUAL, }, err: "", }, { m: &pb.Matcher{ Name: "a", Pattern: "b", Type: 333, }, err: "unknown matcher type", }, } // Change the mode to UTF-8 mode. ff, err := featurecontrol.NewFlags(promslog.NewNopLogger(), featurecontrol.FeatureUTF8StrictMode) require.NoError(t, err) compat.InitFromFlags(promslog.NewNopLogger(), ff) // Restore the mode to classic at the end of the test. ff, err = featurecontrol.NewFlags(promslog.NewNopLogger(), featurecontrol.FeatureClassicMode) require.NoError(t, err) defer compat.InitFromFlags(promslog.NewNopLogger(), ff) for _, c := range cases { checkErr(t, c.err, validateMatcher(c.m)) } } func TestValidateSilence(t *testing.T) { var ( now = time.Now().UTC() zeroTimestamp = time.Time{} validTimestamp = now ) cases := []struct { s *pb.Silence err string }{ { s: &pb.Silence{ Id: "some_id", Matchers: []*pb.Matcher{ {Name: "a", Pattern: "b"}, }, StartsAt: validTimestamp, EndsAt: validTimestamp, UpdatedAt: validTimestamp, }, err: "", }, { s: &pb.Silence{ Id: "some_id", Matchers: []*pb.Matcher{}, StartsAt: validTimestamp, EndsAt: validTimestamp, UpdatedAt: validTimestamp, }, err: "at least one matcher required", }, { s: &pb.Silence{ Id: "some_id", Matchers: []*pb.Matcher{ {Name: "a", Pattern: "b"}, {Name: "00", Pattern: "b"}, }, StartsAt: validTimestamp, EndsAt: validTimestamp, UpdatedAt: validTimestamp, }, err: "invalid label matcher", }, { s: &pb.Silence{ Id: "some_id", Matchers: []*pb.Matcher{ {Name: "a", Pattern: ""}, {Name: "b", Pattern: ".*", Type: pb.Matcher_REGEXP}, }, StartsAt: validTimestamp, EndsAt: validTimestamp, UpdatedAt: validTimestamp, }, err: "at least one matcher must not match the empty string", }, { s: &pb.Silence{ Id: "some_id", Matchers: []*pb.Matcher{ {Name: "a", Pattern: "b"}, }, StartsAt: now, EndsAt: now.Add(-time.Second), UpdatedAt: validTimestamp, }, err: "end time must not be before start time", }, { s: &pb.Silence{ Id: "some_id", Matchers: []*pb.Matcher{ {Name: "a", Pattern: "b"}, }, StartsAt: zeroTimestamp, EndsAt: validTimestamp, UpdatedAt: validTimestamp, }, err: "invalid zero start timestamp", }, { s: &pb.Silence{ Id: "some_id", Matchers: []*pb.Matcher{ {Name: "a", Pattern: "b"}, }, StartsAt: validTimestamp, EndsAt: zeroTimestamp, UpdatedAt: validTimestamp, }, err: "invalid zero end timestamp", }, } for _, c := range cases { checkErr(t, c.err, validateSilence(c.s)) } } func TestStateMerge(t *testing.T) { now := time.Now().UTC() // We only care about key names and timestamps for the // merging logic. newSilence := func(id string, ts, exp time.Time) *pb.MeshSilence { return &pb.MeshSilence{ Silence: &pb.Silence{Id: id, UpdatedAt: ts}, ExpiresAt: exp, } } exp := now.Add(time.Minute) cases := []struct { a, b state final state }{ { a: state{ "a1": newSilence("a1", now, exp), "a2": newSilence("a2", now, exp), "a3": newSilence("a3", now, exp), }, b: state{ "b1": newSilence("b1", now, exp), // new key, should be added "a2": newSilence("a2", now.Add(-time.Minute), exp), // older timestamp, should be dropped "a3": newSilence("a3", now.Add(time.Minute), exp), // newer timestamp, should overwrite "a4": newSilence("a4", now.Add(-time.Minute), now.Add(-time.Millisecond)), // new key, expired, should not be added }, final: state{ "a1": newSilence("a1", now, exp), "a2": newSilence("a2", now, exp), "a3": newSilence("a3", now.Add(time.Minute), exp), "b1": newSilence("b1", now, exp), }, }, } for _, c := range cases { for _, e := range c.b { c.a.merge(e, now) } require.Equal(t, c.final, c.a, "Merge result should match expectation") } } func TestStateCoding(t *testing.T) { // Check whether encoding and decoding the data is symmetric. now := time.Now().UTC() cases := []struct { entries []*pb.MeshSilence }{ { entries: []*pb.MeshSilence{ { Silence: &pb.Silence{ Id: "3be80475-e219-4ee7-b6fc-4b65114e362f", Matchers: []*pb.Matcher{ {Name: "label1", Pattern: "val1", Type: pb.Matcher_EQUAL}, {Name: "label2", Pattern: "val.+", Type: pb.Matcher_REGEXP}, }, StartsAt: now, EndsAt: now, UpdatedAt: now, }, ExpiresAt: now, }, { Silence: &pb.Silence{ Id: "4b1e760d-182c-4980-b873-c1a6827c9817", Matchers: []*pb.Matcher{ {Name: "label1", Pattern: "val1", Type: pb.Matcher_EQUAL}, }, StartsAt: now.Add(time.Hour), EndsAt: now.Add(2 * time.Hour), UpdatedAt: now, }, ExpiresAt: now.Add(24 * time.Hour), }, { Silence: &pb.Silence{ Id: "3dfb2528-59ce-41eb-b465-f875a4e744a4", Matchers: []*pb.Matcher{ {Name: "label1", Pattern: "val1", Type: pb.Matcher_NOT_EQUAL}, {Name: "label2", Pattern: "val.+", Type: pb.Matcher_NOT_REGEXP}, }, StartsAt: now, EndsAt: now, UpdatedAt: now, }, ExpiresAt: now, }, }, }, } for _, c := range cases { // Create gossip data from input. in := state{} for _, e := range c.entries { in[e.Silence.Id] = e } msg, err := in.MarshalBinary() require.NoError(t, err) out, err := decodeState(bytes.NewReader(msg)) require.NoError(t, err, "decoding message failed") require.Equal(t, in, out, "decoded data doesn't match encoded data") } } func TestStateDecodingError(t *testing.T) { // Check whether decoding copes with erroneous data. s := state{"": &pb.MeshSilence{}} msg, err := s.MarshalBinary() require.NoError(t, err) _, err = decodeState(bytes.NewReader(msg)) require.Equal(t, ErrInvalidState, err) } // runtime.Gosched() does not "suspend" the current goroutine so there's no guarantee that the main goroutine won't // be able to continue. For more see https://pkg.go.dev/runtime#Gosched. func gosched() { time.Sleep(1 * time.Millisecond) } prometheus-alertmanager-0.28.1+ds/silence/silencepb/000077500000000000000000000000001476331240200224275ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/silence/silencepb/silence.pb.go000066400000000000000000001111131476331240200247760ustar00rootroot00000000000000// Code generated by protoc-gen-gogo. DO NOT EDIT. // source: silence.proto package silencepb import ( fmt "fmt" _ "github.com/gogo/protobuf/gogoproto" proto "github.com/gogo/protobuf/proto" github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" io "io" math "math" math_bits "math/bits" time "time" ) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal var _ = fmt.Errorf var _ = math.Inf var _ = time.Kitchen // This is a compile-time assertion to ensure that this generated file // is compatible with the proto package it is being compiled against. // A compilation error at this line likely means your copy of the // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // Type specifies how the given name and pattern are matched // against a label set. type Matcher_Type int32 const ( Matcher_EQUAL Matcher_Type = 0 Matcher_REGEXP Matcher_Type = 1 Matcher_NOT_EQUAL Matcher_Type = 2 Matcher_NOT_REGEXP Matcher_Type = 3 ) var Matcher_Type_name = map[int32]string{ 0: "EQUAL", 1: "REGEXP", 2: "NOT_EQUAL", 3: "NOT_REGEXP", } var Matcher_Type_value = map[string]int32{ "EQUAL": 0, "REGEXP": 1, "NOT_EQUAL": 2, "NOT_REGEXP": 3, } func (x Matcher_Type) String() string { return proto.EnumName(Matcher_Type_name, int32(x)) } func (Matcher_Type) EnumDescriptor() ([]byte, []int) { return fileDescriptor_7fc56058cf68dbd8, []int{0, 0} } // Matcher specifies a rule, which can match or set of labels or not. type Matcher struct { Type Matcher_Type `protobuf:"varint,1,opt,name=type,proto3,enum=silencepb.Matcher_Type" json:"type,omitempty"` // The label name in a label set to against which the matcher // checks the pattern. Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // The pattern being checked according to the matcher's type. Pattern string `protobuf:"bytes,3,opt,name=pattern,proto3" json:"pattern,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } func (m *Matcher) Reset() { *m = Matcher{} } func (m *Matcher) String() string { return proto.CompactTextString(m) } func (*Matcher) ProtoMessage() {} func (*Matcher) Descriptor() ([]byte, []int) { return fileDescriptor_7fc56058cf68dbd8, []int{0} } func (m *Matcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *Matcher) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_Matcher.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } func (m *Matcher) XXX_Merge(src proto.Message) { xxx_messageInfo_Matcher.Merge(m, src) } func (m *Matcher) XXX_Size() int { return m.Size() } func (m *Matcher) XXX_DiscardUnknown() { xxx_messageInfo_Matcher.DiscardUnknown(m) } var xxx_messageInfo_Matcher proto.InternalMessageInfo // DEPRECATED: A comment can be attached to a silence. type Comment struct { Author string `protobuf:"bytes,1,opt,name=author,proto3" json:"author,omitempty"` Comment string `protobuf:"bytes,2,opt,name=comment,proto3" json:"comment,omitempty"` Timestamp time.Time `protobuf:"bytes,3,opt,name=timestamp,proto3,stdtime" json:"timestamp"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } func (m *Comment) Reset() { *m = Comment{} } func (m *Comment) String() string { return proto.CompactTextString(m) } func (*Comment) ProtoMessage() {} func (*Comment) Descriptor() ([]byte, []int) { return fileDescriptor_7fc56058cf68dbd8, []int{1} } func (m *Comment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *Comment) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_Comment.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } func (m *Comment) XXX_Merge(src proto.Message) { xxx_messageInfo_Comment.Merge(m, src) } func (m *Comment) XXX_Size() int { return m.Size() } func (m *Comment) XXX_DiscardUnknown() { xxx_messageInfo_Comment.DiscardUnknown(m) } var xxx_messageInfo_Comment proto.InternalMessageInfo // Silence specifies an object that ignores alerts based // on a set of matchers during a given time frame. type Silence struct { // A globally unique identifier. Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` // A set of matchers all of which have to be true for a silence // to affect a given label set. Matchers []*Matcher `protobuf:"bytes,2,rep,name=matchers,proto3" json:"matchers,omitempty"` // The time range during which the silence is active. StartsAt time.Time `protobuf:"bytes,3,opt,name=starts_at,json=startsAt,proto3,stdtime" json:"starts_at"` EndsAt time.Time `protobuf:"bytes,4,opt,name=ends_at,json=endsAt,proto3,stdtime" json:"ends_at"` // The last notification made to the silence. UpdatedAt time.Time `protobuf:"bytes,5,opt,name=updated_at,json=updatedAt,proto3,stdtime" json:"updated_at"` // DEPRECATED: A set of comments made on the silence. Comments []*Comment `protobuf:"bytes,7,rep,name=comments,proto3" json:"comments,omitempty"` // Comment for the silence. CreatedBy string `protobuf:"bytes,8,opt,name=created_by,json=createdBy,proto3" json:"created_by,omitempty"` Comment string `protobuf:"bytes,9,opt,name=comment,proto3" json:"comment,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } func (m *Silence) Reset() { *m = Silence{} } func (m *Silence) String() string { return proto.CompactTextString(m) } func (*Silence) ProtoMessage() {} func (*Silence) Descriptor() ([]byte, []int) { return fileDescriptor_7fc56058cf68dbd8, []int{2} } func (m *Silence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *Silence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_Silence.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } func (m *Silence) XXX_Merge(src proto.Message) { xxx_messageInfo_Silence.Merge(m, src) } func (m *Silence) XXX_Size() int { return m.Size() } func (m *Silence) XXX_DiscardUnknown() { xxx_messageInfo_Silence.DiscardUnknown(m) } var xxx_messageInfo_Silence proto.InternalMessageInfo // MeshSilence wraps a regular silence with an expiration timestamp // after which the silence may be garbage collected. type MeshSilence struct { Silence *Silence `protobuf:"bytes,1,opt,name=silence,proto3" json:"silence,omitempty"` ExpiresAt time.Time `protobuf:"bytes,2,opt,name=expires_at,json=expiresAt,proto3,stdtime" json:"expires_at"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } func (m *MeshSilence) Reset() { *m = MeshSilence{} } func (m *MeshSilence) String() string { return proto.CompactTextString(m) } func (*MeshSilence) ProtoMessage() {} func (*MeshSilence) Descriptor() ([]byte, []int) { return fileDescriptor_7fc56058cf68dbd8, []int{3} } func (m *MeshSilence) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } func (m *MeshSilence) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { return xxx_messageInfo_MeshSilence.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) if err != nil { return nil, err } return b[:n], nil } } func (m *MeshSilence) XXX_Merge(src proto.Message) { xxx_messageInfo_MeshSilence.Merge(m, src) } func (m *MeshSilence) XXX_Size() int { return m.Size() } func (m *MeshSilence) XXX_DiscardUnknown() { xxx_messageInfo_MeshSilence.DiscardUnknown(m) } var xxx_messageInfo_MeshSilence proto.InternalMessageInfo func init() { proto.RegisterEnum("silencepb.Matcher_Type", Matcher_Type_name, Matcher_Type_value) proto.RegisterType((*Matcher)(nil), "silencepb.Matcher") proto.RegisterType((*Comment)(nil), "silencepb.Comment") proto.RegisterType((*Silence)(nil), "silencepb.Silence") proto.RegisterType((*MeshSilence)(nil), "silencepb.MeshSilence") } func init() { proto.RegisterFile("silence.proto", fileDescriptor_7fc56058cf68dbd8) } var fileDescriptor_7fc56058cf68dbd8 = []byte{ // 461 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0xcd, 0x8e, 0xd2, 0x50, 0x14, 0xc7, 0xb9, 0x85, 0xa1, 0xdc, 0x43, 0x86, 0x90, 0x13, 0xa3, 0x0d, 0x89, 0x40, 0xba, 0x22, 0xd1, 0x94, 0x04, 0xb7, 0xba, 0x28, 0x13, 0xe2, 0xc6, 0xf1, 0xa3, 0x62, 0xe2, 0x6e, 0x52, 0xe8, 0x11, 0x9a, 0x4c, 0x3f, 0xd2, 0x1e, 0x12, 0x59, 0xe9, 0x23, 0xf8, 0x0c, 0x3e, 0x0d, 0x4b, 0x9f, 0xc0, 0x0f, 0xde, 0xc2, 0x9d, 0xe9, 0xed, 0x2d, 0xce, 0x84, 0x55, 0x77, 0xf7, 0xdc, 0xf3, 0xff, 0x9f, 0x8f, 0xdf, 0x81, 0xcb, 0x3c, 0xbc, 0xa5, 0x78, 0x4d, 0x4e, 0x9a, 0x25, 0x9c, 0xa0, 0xd4, 0x61, 0xba, 0x1a, 0x8c, 0x36, 0x49, 0xb2, 0xb9, 0xa5, 0xa9, 0x4a, 0xac, 0x76, 0x9f, 0xa6, 0x1c, 0x46, 0x94, 0xb3, 0x1f, 0xa5, 0xa5, 0x76, 0xf0, 0x60, 0x93, 0x6c, 0x12, 0xf5, 0x9c, 0x16, 0xaf, 0xf2, 0xd7, 0xfe, 0x2e, 0xc0, 0xbc, 0xf6, 0x79, 0xbd, 0xa5, 0x0c, 0x9f, 0x40, 0x8b, 0xf7, 0x29, 0x59, 0x62, 0x2c, 0x26, 0xbd, 0xd9, 0x23, 0xe7, 0x54, 0xdc, 0xd1, 0x0a, 0x67, 0xb9, 0x4f, 0xc9, 0x53, 0x22, 0x44, 0x68, 0xc5, 0x7e, 0x44, 0x96, 0x31, 0x16, 0x13, 0xe9, 0xa9, 0x37, 0x5a, 0x60, 0xa6, 0x3e, 0x33, 0x65, 0xb1, 0xd5, 0x54, 0xdf, 0x55, 0x68, 0x3f, 0x87, 0x56, 0xe1, 0x45, 0x09, 0x17, 0x8b, 0x77, 0x1f, 0xdc, 0x57, 0xfd, 0x06, 0x02, 0xb4, 0xbd, 0xc5, 0xcb, 0xc5, 0xc7, 0xb7, 0x7d, 0x81, 0x97, 0x20, 0x5f, 0xbf, 0x59, 0xde, 0x94, 0x29, 0x03, 0x7b, 0x00, 0x45, 0xa8, 0xd3, 0x4d, 0xfb, 0x0b, 0x98, 0x57, 0x49, 0x14, 0x51, 0xcc, 0xf8, 0x10, 0xda, 0xfe, 0x8e, 0xb7, 0x49, 0xa6, 0xa6, 0x94, 0x9e, 0x8e, 0x8a, 0xd6, 0xeb, 0x52, 0xa2, 0x27, 0xaa, 0x42, 0x9c, 0x83, 0x3c, 0xa1, 0x50, 0x63, 0x75, 0x67, 0x03, 0xa7, 0x84, 0xe5, 0x54, 0xb0, 0x9c, 0x65, 0xa5, 0x98, 0x77, 0x0e, 0x3f, 0x47, 0x8d, 0x6f, 0xbf, 0x46, 0xc2, 0xfb, 0x6f, 0xb3, 0xff, 0x1a, 0x60, 0xbe, 0x2f, 0x69, 0x60, 0x0f, 0x8c, 0x30, 0xd0, 0xdd, 0x8d, 0x30, 0x40, 0x07, 0x3a, 0x51, 0x89, 0x27, 0xb7, 0x8c, 0x71, 0x73, 0xd2, 0x9d, 0xe1, 0x39, 0x39, 0xef, 0xa4, 0x41, 0x17, 0x64, 0xce, 0x7e, 0xc6, 0xf9, 0x8d, 0xcf, 0xb5, 0xe6, 0xe9, 0x94, 0x36, 0x97, 0xf1, 0x05, 0x98, 0x14, 0x07, 0xaa, 0x40, 0xab, 0x46, 0x81, 0x76, 0x61, 0x72, 0x19, 0xaf, 0x00, 0x76, 0x69, 0xe0, 0x33, 0x05, 0x45, 0x85, 0x8b, 0x3a, 0x48, 0xb4, 0xcf, 0xe5, 0x62, 0x6d, 0x4d, 0x38, 0xb7, 0xcc, 0xb3, 0xb5, 0xf5, 0xb9, 0xbc, 0x93, 0x06, 0x1f, 0x03, 0xac, 0x33, 0x52, 0x4d, 0x57, 0x7b, 0xab, 0xa3, 0xf0, 0x49, 0xfd, 0x33, 0xdf, 0xdf, 0xbd, 0x9f, 0xbc, 0x77, 0x3f, 0xfb, 0xab, 0x80, 0xee, 0x35, 0xe5, 0xdb, 0x8a, 0xff, 0x53, 0x30, 0x75, 0x1f, 0x75, 0x84, 0xfb, 0x7d, 0xb5, 0xc8, 0xab, 0x24, 0xc5, 0xae, 0xf4, 0x39, 0x0d, 0x33, 0x52, 0xb4, 0x8c, 0x3a, 0xbb, 0x6a, 0x9f, 0xcb, 0xf3, 0xfe, 0xe1, 0xcf, 0xb0, 0x71, 0x38, 0x0e, 0xc5, 0x8f, 0xe3, 0x50, 0xfc, 0x3e, 0x0e, 0xc5, 0xaa, 0xad, 0xac, 0xcf, 0xfe, 0x05, 0x00, 0x00, 0xff, 0xff, 0xad, 0x09, 0x3a, 0xe9, 0x90, 0x03, 0x00, 0x00, } func (m *Matcher) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } func (m *Matcher) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } func (m *Matcher) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l if m.XXX_unrecognized != nil { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } if len(m.Pattern) > 0 { i -= len(m.Pattern) copy(dAtA[i:], m.Pattern) i = encodeVarintSilence(dAtA, i, uint64(len(m.Pattern))) i-- dAtA[i] = 0x1a } if len(m.Name) > 0 { i -= len(m.Name) copy(dAtA[i:], m.Name) i = encodeVarintSilence(dAtA, i, uint64(len(m.Name))) i-- dAtA[i] = 0x12 } if m.Type != 0 { i = encodeVarintSilence(dAtA, i, uint64(m.Type)) i-- dAtA[i] = 0x8 } return len(dAtA) - i, nil } func (m *Comment) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } func (m *Comment) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } func (m *Comment) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l if m.XXX_unrecognized != nil { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } n1, err1 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Timestamp, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp):]) if err1 != nil { return 0, err1 } i -= n1 i = encodeVarintSilence(dAtA, i, uint64(n1)) i-- dAtA[i] = 0x1a if len(m.Comment) > 0 { i -= len(m.Comment) copy(dAtA[i:], m.Comment) i = encodeVarintSilence(dAtA, i, uint64(len(m.Comment))) i-- dAtA[i] = 0x12 } if len(m.Author) > 0 { i -= len(m.Author) copy(dAtA[i:], m.Author) i = encodeVarintSilence(dAtA, i, uint64(len(m.Author))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } func (m *Silence) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } func (m *Silence) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } func (m *Silence) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l if m.XXX_unrecognized != nil { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } if len(m.Comment) > 0 { i -= len(m.Comment) copy(dAtA[i:], m.Comment) i = encodeVarintSilence(dAtA, i, uint64(len(m.Comment))) i-- dAtA[i] = 0x4a } if len(m.CreatedBy) > 0 { i -= len(m.CreatedBy) copy(dAtA[i:], m.CreatedBy) i = encodeVarintSilence(dAtA, i, uint64(len(m.CreatedBy))) i-- dAtA[i] = 0x42 } if len(m.Comments) > 0 { for iNdEx := len(m.Comments) - 1; iNdEx >= 0; iNdEx-- { { size, err := m.Comments[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } i -= size i = encodeVarintSilence(dAtA, i, uint64(size)) } i-- dAtA[i] = 0x3a } } n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.UpdatedAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.UpdatedAt):]) if err2 != nil { return 0, err2 } i -= n2 i = encodeVarintSilence(dAtA, i, uint64(n2)) i-- dAtA[i] = 0x2a n3, err3 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndsAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndsAt):]) if err3 != nil { return 0, err3 } i -= n3 i = encodeVarintSilence(dAtA, i, uint64(n3)) i-- dAtA[i] = 0x22 n4, err4 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartsAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartsAt):]) if err4 != nil { return 0, err4 } i -= n4 i = encodeVarintSilence(dAtA, i, uint64(n4)) i-- dAtA[i] = 0x1a if len(m.Matchers) > 0 { for iNdEx := len(m.Matchers) - 1; iNdEx >= 0; iNdEx-- { { size, err := m.Matchers[iNdEx].MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } i -= size i = encodeVarintSilence(dAtA, i, uint64(size)) } i-- dAtA[i] = 0x12 } } if len(m.Id) > 0 { i -= len(m.Id) copy(dAtA[i:], m.Id) i = encodeVarintSilence(dAtA, i, uint64(len(m.Id))) i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } func (m *MeshSilence) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) if err != nil { return nil, err } return dAtA[:n], nil } func (m *MeshSilence) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } func (m *MeshSilence) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int _ = l if m.XXX_unrecognized != nil { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } n5, err5 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.ExpiresAt, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpiresAt):]) if err5 != nil { return 0, err5 } i -= n5 i = encodeVarintSilence(dAtA, i, uint64(n5)) i-- dAtA[i] = 0x12 if m.Silence != nil { { size, err := m.Silence.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } i -= size i = encodeVarintSilence(dAtA, i, uint64(size)) } i-- dAtA[i] = 0xa } return len(dAtA) - i, nil } func encodeVarintSilence(dAtA []byte, offset int, v uint64) int { offset -= sovSilence(v) base := offset for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) v >>= 7 offset++ } dAtA[offset] = uint8(v) return base } func (m *Matcher) Size() (n int) { if m == nil { return 0 } var l int _ = l if m.Type != 0 { n += 1 + sovSilence(uint64(m.Type)) } l = len(m.Name) if l > 0 { n += 1 + l + sovSilence(uint64(l)) } l = len(m.Pattern) if l > 0 { n += 1 + l + sovSilence(uint64(l)) } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } func (m *Comment) Size() (n int) { if m == nil { return 0 } var l int _ = l l = len(m.Author) if l > 0 { n += 1 + l + sovSilence(uint64(l)) } l = len(m.Comment) if l > 0 { n += 1 + l + sovSilence(uint64(l)) } l = github_com_gogo_protobuf_types.SizeOfStdTime(m.Timestamp) n += 1 + l + sovSilence(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } func (m *Silence) Size() (n int) { if m == nil { return 0 } var l int _ = l l = len(m.Id) if l > 0 { n += 1 + l + sovSilence(uint64(l)) } if len(m.Matchers) > 0 { for _, e := range m.Matchers { l = e.Size() n += 1 + l + sovSilence(uint64(l)) } } l = github_com_gogo_protobuf_types.SizeOfStdTime(m.StartsAt) n += 1 + l + sovSilence(uint64(l)) l = github_com_gogo_protobuf_types.SizeOfStdTime(m.EndsAt) n += 1 + l + sovSilence(uint64(l)) l = github_com_gogo_protobuf_types.SizeOfStdTime(m.UpdatedAt) n += 1 + l + sovSilence(uint64(l)) if len(m.Comments) > 0 { for _, e := range m.Comments { l = e.Size() n += 1 + l + sovSilence(uint64(l)) } } l = len(m.CreatedBy) if l > 0 { n += 1 + l + sovSilence(uint64(l)) } l = len(m.Comment) if l > 0 { n += 1 + l + sovSilence(uint64(l)) } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } func (m *MeshSilence) Size() (n int) { if m == nil { return 0 } var l int _ = l if m.Silence != nil { l = m.Silence.Size() n += 1 + l + sovSilence(uint64(l)) } l = github_com_gogo_protobuf_types.SizeOfStdTime(m.ExpiresAt) n += 1 + l + sovSilence(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } return n } func sovSilence(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 } func sozSilence(x uint64) (n int) { return sovSilence(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } func (m *Matcher) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { return fmt.Errorf("proto: Matcher: wiretype end group for non-group") } if fieldNum <= 0 { return fmt.Errorf("proto: Matcher: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) } m.Type = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ m.Type |= Matcher_Type(b&0x7F) << shift if b < 0x80 { break } } case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } m.Name = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Pattern", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } m.Pattern = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipSilence(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSilence } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) iNdEx += skippy } } if iNdEx > l { return io.ErrUnexpectedEOF } return nil } func (m *Comment) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { return fmt.Errorf("proto: Comment: wiretype end group for non-group") } if fieldNum <= 0 { return fmt.Errorf("proto: Comment: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Author", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } m.Author = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Comment", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } m.Comment = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Timestamp", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.Timestamp, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipSilence(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSilence } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) iNdEx += skippy } } if iNdEx > l { return io.ErrUnexpectedEOF } return nil } func (m *Silence) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { return fmt.Errorf("proto: Silence: wiretype end group for non-group") } if fieldNum <= 0 { return fmt.Errorf("proto: Silence: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } m.Id = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Matchers", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } m.Matchers = append(m.Matchers, &Matcher{}) if err := m.Matchers[len(m.Matchers)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field StartsAt", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.StartsAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field EndsAt", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.EndsAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 5: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field UpdatedAt", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.UpdatedAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 7: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Comments", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } m.Comments = append(m.Comments, &Comment{}) if err := m.Comments[len(m.Comments)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 8: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field CreatedBy", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } m.CreatedBy = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 9: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Comment", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } intStringLen := int(stringLen) if intStringLen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } m.Comment = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipSilence(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSilence } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) iNdEx += skippy } } if iNdEx > l { return io.ErrUnexpectedEOF } return nil } func (m *MeshSilence) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { preIndex := iNdEx var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= uint64(b&0x7F) << shift if b < 0x80 { break } } fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { return fmt.Errorf("proto: MeshSilence: wiretype end group for non-group") } if fieldNum <= 0 { return fmt.Errorf("proto: MeshSilence: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Silence", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } if m.Silence == nil { m.Silence = &Silence{} } if err := m.Silence.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ExpiresAt", wireType) } var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowSilence } if iNdEx >= l { return io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ msglen |= int(b&0x7F) << shift if b < 0x80 { break } } if msglen < 0 { return ErrInvalidLengthSilence } postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthSilence } if postIndex > l { return io.ErrUnexpectedEOF } if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.ExpiresAt, dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipSilence(dAtA[iNdEx:]) if err != nil { return err } if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthSilence } if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) iNdEx += skippy } } if iNdEx > l { return io.ErrUnexpectedEOF } return nil } func skipSilence(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 depth := 0 for iNdEx < l { var wire uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return 0, ErrIntOverflowSilence } if iNdEx >= l { return 0, io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ wire |= (uint64(b) & 0x7F) << shift if b < 0x80 { break } } wireType := int(wire & 0x7) switch wireType { case 0: for shift := uint(0); ; shift += 7 { if shift >= 64 { return 0, ErrIntOverflowSilence } if iNdEx >= l { return 0, io.ErrUnexpectedEOF } iNdEx++ if dAtA[iNdEx-1] < 0x80 { break } } case 1: iNdEx += 8 case 2: var length int for shift := uint(0); ; shift += 7 { if shift >= 64 { return 0, ErrIntOverflowSilence } if iNdEx >= l { return 0, io.ErrUnexpectedEOF } b := dAtA[iNdEx] iNdEx++ length |= (int(b) & 0x7F) << shift if b < 0x80 { break } } if length < 0 { return 0, ErrInvalidLengthSilence } iNdEx += length case 3: depth++ case 4: if depth == 0 { return 0, ErrUnexpectedEndOfGroupSilence } depth-- case 5: iNdEx += 4 default: return 0, fmt.Errorf("proto: illegal wireType %d", wireType) } if iNdEx < 0 { return 0, ErrInvalidLengthSilence } if depth == 0 { return iNdEx, nil } } return 0, io.ErrUnexpectedEOF } var ( ErrInvalidLengthSilence = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowSilence = fmt.Errorf("proto: integer overflow") ErrUnexpectedEndOfGroupSilence = fmt.Errorf("proto: unexpected end of group") ) prometheus-alertmanager-0.28.1+ds/silence/silencepb/silence.proto000066400000000000000000000041461476331240200251430ustar00rootroot00000000000000syntax = "proto3"; package silencepb; import "google/protobuf/timestamp.proto"; import "gogoproto/gogo.proto"; option (gogoproto.marshaler_all) = true; option (gogoproto.sizer_all) = true; option (gogoproto.unmarshaler_all) = true; option (gogoproto.goproto_getters_all) = false; // Matcher specifies a rule, which can match or set of labels or not. message Matcher { // Type specifies how the given name and pattern are matched // against a label set. enum Type { EQUAL = 0; REGEXP = 1; NOT_EQUAL = 2; NOT_REGEXP = 3; }; Type type = 1; // The label name in a label set to against which the matcher // checks the pattern. string name = 2; // The pattern being checked according to the matcher's type. string pattern = 3; } // DEPRECATED: A comment can be attached to a silence. message Comment { string author = 1; string comment = 2; google.protobuf.Timestamp timestamp = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; } // Silence specifies an object that ignores alerts based // on a set of matchers during a given time frame. message Silence { // A globally unique identifier. string id = 1; // A set of matchers all of which have to be true for a silence // to affect a given label set. repeated Matcher matchers = 2; // The time range during which the silence is active. google.protobuf.Timestamp starts_at = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; google.protobuf.Timestamp ends_at = 4 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; // The last notification made to the silence. google.protobuf.Timestamp updated_at = 5 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; // DEPRECATED: A set of comments made on the silence. repeated Comment comments = 7; // Comment for the silence. string created_by = 8; string comment = 9; } // MeshSilence wraps a regular silence with an expiration timestamp // after which the silence may be garbage collected. message MeshSilence { Silence silence = 1; google.protobuf.Timestamp expires_at = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; } prometheus-alertmanager-0.28.1+ds/store/000077500000000000000000000000001476331240200201755ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/store/store.go000066400000000000000000000070651476331240200216700ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package store import ( "context" "errors" "sync" "time" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/types" ) // ErrNotFound is returned if a Store cannot find the Alert. var ErrNotFound = errors.New("alert not found") // Alerts provides lock-coordinated to an in-memory map of alerts, keyed by // their fingerprint. Resolved alerts are removed from the map based on // gcInterval. An optional callback can be set which receives a slice of all // resolved alerts that have been removed. type Alerts struct { sync.Mutex c map[model.Fingerprint]*types.Alert cb func([]types.Alert) } // NewAlerts returns a new Alerts struct. func NewAlerts() *Alerts { a := &Alerts{ c: make(map[model.Fingerprint]*types.Alert), cb: func(_ []types.Alert) {}, } return a } // SetGCCallback sets a GC callback to be executed after each GC. func (a *Alerts) SetGCCallback(cb func([]types.Alert)) { a.Lock() defer a.Unlock() a.cb = cb } // Run starts the GC loop. The interval must be greater than zero; if not, the function will panic. func (a *Alerts) Run(ctx context.Context, interval time.Duration) { t := time.NewTicker(interval) defer t.Stop() for { select { case <-ctx.Done(): return case <-t.C: a.GC() } } } // GC deletes resolved alerts and returns them. func (a *Alerts) GC() []types.Alert { a.Lock() var resolved []types.Alert for fp, alert := range a.c { if alert.Resolved() { delete(a.c, fp) resolved = append(resolved, types.Alert{ Alert: model.Alert{ Labels: alert.Labels.Clone(), Annotations: alert.Annotations.Clone(), StartsAt: alert.StartsAt, EndsAt: alert.EndsAt, GeneratorURL: alert.GeneratorURL, }, UpdatedAt: alert.UpdatedAt, Timeout: alert.Timeout, }) } } a.Unlock() a.cb(resolved) return resolved } // Get returns the Alert with the matching fingerprint, or an error if it is // not found. func (a *Alerts) Get(fp model.Fingerprint) (*types.Alert, error) { a.Lock() defer a.Unlock() alert, prs := a.c[fp] if !prs { return nil, ErrNotFound } return alert, nil } // Set unconditionally sets the alert in memory. func (a *Alerts) Set(alert *types.Alert) error { a.Lock() defer a.Unlock() a.c[alert.Fingerprint()] = alert return nil } // DeleteIfNotModified deletes the slice of Alerts from the store if not // modified. func (a *Alerts) DeleteIfNotModified(alerts types.AlertSlice) error { a.Lock() defer a.Unlock() for _, alert := range alerts { fp := alert.Fingerprint() if other, ok := a.c[fp]; ok && alert.UpdatedAt == other.UpdatedAt { delete(a.c, fp) } } return nil } // List returns a slice of Alerts currently held in memory. func (a *Alerts) List() []*types.Alert { a.Lock() defer a.Unlock() alerts := make([]*types.Alert, 0, len(a.c)) for _, alert := range a.c { alerts = append(alerts, alert) } return alerts } // Empty returns true if the store is empty. func (a *Alerts) Empty() bool { a.Lock() defer a.Unlock() return len(a.c) == 0 } prometheus-alertmanager-0.28.1+ds/store/store_test.go000066400000000000000000000114371476331240200227250ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package store import ( "context" "testing" "time" "github.com/prometheus/common/model" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/types" ) func TestSetGet(t *testing.T) { a := NewAlerts() alert := &types.Alert{ UpdatedAt: time.Now(), } require.NoError(t, a.Set(alert)) want := alert.Fingerprint() got, err := a.Get(want) require.NoError(t, err) require.Equal(t, want, got.Fingerprint()) } func TestDeleteIfNotModified(t *testing.T) { t.Run("unmodified alert should be deleted", func(t *testing.T) { a := NewAlerts() a1 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "foo": "bar", }, }, UpdatedAt: time.Now().Add(-time.Second), } require.NoError(t, a.Set(a1)) // a1 should be deleted as it has not been modified. a.DeleteIfNotModified(types.AlertSlice{a1}) got, err := a.Get(a1.Fingerprint()) require.Equal(t, ErrNotFound, err) require.Nil(t, got) }) t.Run("modified alert should not be deleted", func(t *testing.T) { a := NewAlerts() a1 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "foo": "bar", }, }, UpdatedAt: time.Now(), } require.NoError(t, a.Set(a1)) // Make a copy of a1 that is older, but do not put it. // We want to make sure a1 is not deleted. a2 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "foo": "bar", }, }, UpdatedAt: time.Now().Add(-time.Second), } require.True(t, a2.UpdatedAt.Before(a1.UpdatedAt)) a.DeleteIfNotModified(types.AlertSlice{a2}) // a1 should not be deleted. got, err := a.Get(a1.Fingerprint()) require.NoError(t, err) require.Equal(t, a1, got) // Make another copy of a1 that is older, but do not put it. // We want to make sure a2 is not deleted here either. a3 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "foo": "bar", }, }, UpdatedAt: time.Now().Add(time.Second), } require.True(t, a3.UpdatedAt.After(a1.UpdatedAt)) a.DeleteIfNotModified(types.AlertSlice{a3}) // a1 should not be deleted. got, err = a.Get(a1.Fingerprint()) require.NoError(t, err) require.Equal(t, a1, got) }) t.Run("should not delete other alerts", func(t *testing.T) { a := NewAlerts() a1 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "foo": "bar", }, }, UpdatedAt: time.Now(), } a2 := &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "bar": "baz", }, }, UpdatedAt: time.Now(), } require.NoError(t, a.Set(a1)) require.NoError(t, a.Set(a2)) // Deleting a1 should not delete a2. require.NoError(t, a.DeleteIfNotModified(types.AlertSlice{a1})) // a1 should be deleted. got, err := a.Get(a1.Fingerprint()) require.Equal(t, ErrNotFound, err) require.Nil(t, got) // a2 should not be deleted. got, err = a.Get(a2.Fingerprint()) require.NoError(t, err) require.Equal(t, a2, got) }) } func TestGC(t *testing.T) { now := time.Now() newAlert := func(key string, start, end time.Duration) *types.Alert { return &types.Alert{ Alert: model.Alert{ Labels: model.LabelSet{model.LabelName(key): "b"}, StartsAt: now.Add(start * time.Minute), EndsAt: now.Add(end * time.Minute), }, } } active := []*types.Alert{ newAlert("b", 10, 20), newAlert("c", -10, 10), } resolved := []*types.Alert{ newAlert("a", -10, -5), newAlert("d", -10, -1), } s := NewAlerts() var ( n int done = make(chan struct{}) ctx, cancel = context.WithCancel(context.Background()) ) s.SetGCCallback(func(a []types.Alert) { n += len(a) if n >= len(resolved) { cancel() } }) for _, alert := range append(active, resolved...) { require.NoError(t, s.Set(alert)) } go func() { s.Run(ctx, 10*time.Millisecond) close(done) }() select { case <-done: break case <-time.After(1 * time.Second): t.Fatal("garbage collection didn't complete in time") } for _, alert := range active { if _, err := s.Get(alert.Fingerprint()); err != nil { t.Errorf("alert %v should not have been gc'd", alert) } } for _, alert := range resolved { if _, err := s.Get(alert.Fingerprint()); err == nil { t.Errorf("alert %v should have been gc'd", alert) } } require.Len(t, resolved, n) } prometheus-alertmanager-0.28.1+ds/template/000077500000000000000000000000001476331240200206545ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/template/Dockerfile000066400000000000000000000001631476331240200226460ustar00rootroot00000000000000FROM node:20-alpine ENV NODE_PATH="/usr/local/lib/node_modules" RUN npm install juice@10.0.1 -g ENTRYPOINT [""] prometheus-alertmanager-0.28.1+ds/template/Makefile000066400000000000000000000010301476331240200223060ustar00rootroot00000000000000DOCKER_IMG := alertmanager-template DOCKER_RUN_CURRENT_USER := docker run --user=$(shell id -u $(USER)):$(shell id -g $(USER)) DOCKER_CMD := $(DOCKER_RUN_CURRENT_USER) --rm -t -v $(PWD):/app -w /app $(DOCKER_IMG) ifeq ($(NO_DOCKER), true) DOCKER_CMD= endif template-image: @(if [ "$(NO_DOCKER)" != "true" ] ; then \ echo ">> build template docker image"; \ docker build -t $(DOCKER_IMG) . > /dev/null; \ fi; ) email.tmpl: template-image email.html @echo ">> inline css for html email template" $(DOCKER_CMD) ./inline-css.js prometheus-alertmanager-0.28.1+ds/template/default.tmpl000066400000000000000000000176451476331240200232130ustar00rootroot00000000000000{{ define "__alertmanager" }}Alertmanager{{ end }} {{ define "__alertmanagerURL" }}{{ .ExternalURL }}/#/alerts?receiver={{ .Receiver | urlquery }}{{ end }} {{ define "__subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values | join " " }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}({{ with .CommonLabels.Remove .GroupLabels.Names }}{{ .Values | join " " }}{{ end }}){{ end }}{{ end }} {{ define "__description" }}{{ end }} {{ define "__text_alert_list" }}{{ range . }}Labels: {{ range .Labels.SortedPairs }} - {{ .Name }} = {{ .Value }} {{ end }}Annotations: {{ range .Annotations.SortedPairs }} - {{ .Name }} = {{ .Value }} {{ end }}Source: {{ .GeneratorURL }} {{ end }}{{ end }} {{ define "__text_alert_list_markdown" }}{{ range . }} Labels: {{ range .Labels.SortedPairs }} - {{ .Name }} = {{ .Value }} {{ end }} Annotations: {{ range .Annotations.SortedPairs }} - {{ .Name }} = {{ .Value }} {{ end }} Source: {{ .GeneratorURL }} {{ end }} {{ end }} {{ define "slack.default.title" }}{{ template "__subject" . }}{{ end }} {{ define "slack.default.username" }}{{ template "__alertmanager" . }}{{ end }} {{ define "slack.default.fallback" }}{{ template "slack.default.title" . }} | {{ template "slack.default.titlelink" . }}{{ end }} {{ define "slack.default.callbackid" }}{{ end }} {{ define "slack.default.pretext" }}{{ end }} {{ define "slack.default.titlelink" }}{{ template "__alertmanagerURL" . }}{{ end }} {{ define "slack.default.iconemoji" }}{{ end }} {{ define "slack.default.iconurl" }}{{ end }} {{ define "slack.default.text" }}{{ end }} {{ define "slack.default.footer" }}{{ end }} {{ define "pagerduty.default.description" }}{{ template "__subject" . }}{{ end }} {{ define "pagerduty.default.client" }}{{ template "__alertmanager" . }}{{ end }} {{ define "pagerduty.default.clientURL" }}{{ template "__alertmanagerURL" . }}{{ end }} {{ define "pagerduty.default.instances" }}{{ template "__text_alert_list" . }}{{ end }} {{ define "opsgenie.default.message" }}{{ template "__subject" . }}{{ end }} {{ define "opsgenie.default.description" }}{{ .CommonAnnotations.SortedPairs.Values | join " " }} {{ if gt (len .Alerts.Firing) 0 -}} Alerts Firing: {{ template "__text_alert_list" .Alerts.Firing }} {{- end }} {{ if gt (len .Alerts.Resolved) 0 -}} Alerts Resolved: {{ template "__text_alert_list" .Alerts.Resolved }} {{- end }} {{- end }} {{ define "opsgenie.default.source" }}{{ template "__alertmanagerURL" . }}{{ end }} {{ define "wechat.default.message" }}{{ template "__subject" . }} {{ .CommonAnnotations.SortedPairs.Values | join " " }} {{ if gt (len .Alerts.Firing) 0 -}} Alerts Firing: {{ template "__text_alert_list" .Alerts.Firing }} {{- end }} {{ if gt (len .Alerts.Resolved) 0 -}} Alerts Resolved: {{ template "__text_alert_list" .Alerts.Resolved }} {{- end }} AlertmanagerUrl: {{ template "__alertmanagerURL" . }} {{- end }} {{ define "wechat.default.to_user" }}{{ end }} {{ define "wechat.default.to_party" }}{{ end }} {{ define "wechat.default.to_tag" }}{{ end }} {{ define "wechat.default.agent_id" }}{{ end }} {{ define "victorops.default.state_message" }}{{ .CommonAnnotations.SortedPairs.Values | join " " }} {{ if gt (len .Alerts.Firing) 0 -}} Alerts Firing: {{ template "__text_alert_list" .Alerts.Firing }} {{- end }} {{ if gt (len .Alerts.Resolved) 0 -}} Alerts Resolved: {{ template "__text_alert_list" .Alerts.Resolved }} {{- end }} {{- end }} {{ define "victorops.default.entity_display_name" }}{{ template "__subject" . }}{{ end }} {{ define "victorops.default.monitoring_tool" }}{{ template "__alertmanager" . }}{{ end }} {{ define "pushover.default.title" }}{{ template "__subject" . }}{{ end }} {{ define "pushover.default.message" }}{{ .CommonAnnotations.SortedPairs.Values | join " " }} {{ if gt (len .Alerts.Firing) 0 }} Alerts Firing: {{ template "__text_alert_list" .Alerts.Firing }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} Alerts Resolved: {{ template "__text_alert_list" .Alerts.Resolved }} {{ end }} {{ end }} {{ define "pushover.default.url" }}{{ template "__alertmanagerURL" . }}{{ end }} {{ define "sns.default.subject" }}{{ template "__subject" . }}{{ end }} {{ define "sns.default.message" }}{{ .CommonAnnotations.SortedPairs.Values | join " " }} {{ if gt (len .Alerts.Firing) 0 }} Alerts Firing: {{ template "__text_alert_list" .Alerts.Firing }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} Alerts Resolved: {{ template "__text_alert_list" .Alerts.Resolved }} {{ end }} {{ end }} {{ define "telegram.default.message" }} {{ if gt (len .Alerts.Firing) 0 }} Alerts Firing: {{ template "__text_alert_list" .Alerts.Firing }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} Alerts Resolved: {{ template "__text_alert_list" .Alerts.Resolved }} {{ end }} {{ end }} {{ define "discord.default.content" }}{{ end }} {{ define "discord.default.title" }}{{ template "__subject" . }}{{ end }} {{ define "discord.default.message" }} {{ if gt (len .Alerts.Firing) 0 }} Alerts Firing: {{ template "__text_alert_list" .Alerts.Firing }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} Alerts Resolved: {{ template "__text_alert_list" .Alerts.Resolved }} {{ end }} {{ end }} {{ define "webex.default.message" }}{{ .CommonAnnotations.SortedPairs.Values | join " " }} {{ if gt (len .Alerts.Firing) 0 }} Alerts Firing: {{ template "__text_alert_list" .Alerts.Firing }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} Alerts Resolved: {{ template "__text_alert_list" .Alerts.Resolved }} {{ end }} {{ end }} {{ define "msteams.default.summary" }}{{ template "__subject" . }}{{ end }} {{ define "msteams.default.title" }}{{ template "__subject" . }}{{ end }} {{ define "msteams.default.text" }} {{ if gt (len .Alerts.Firing) 0 }} # Alerts Firing: {{ template "__text_alert_list_markdown" .Alerts.Firing }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} # Alerts Resolved: {{ template "__text_alert_list_markdown" .Alerts.Resolved }} {{ end }} {{ end }} {{ define "msteamsv2.default.title" }}{{ template "__subject" . }}{{ end }} {{ define "msteamsv2.default.text" }} {{ if gt (len .Alerts.Firing) 0 }} # Alerts Firing: {{ template "__text_alert_list_markdown" .Alerts.Firing }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} # Alerts Resolved: {{ template "__text_alert_list_markdown" .Alerts.Resolved }} {{ end }} {{ end }} {{ define "jira.default.summary" }}{{ template "__subject" . }}{{ end }} {{ define "jira.default.description" }} {{ if gt (len .Alerts.Firing) 0 }} # Alerts Firing: {{ template "__text_alert_list_markdown" .Alerts.Firing }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} # Alerts Resolved: {{ template "__text_alert_list_markdown" .Alerts.Resolved }} {{ end }} {{ end }} {{- define "jira.default.priority" -}} {{- $priority := "" }} {{- range .Alerts.Firing -}} {{- $severity := index .Labels "severity" -}} {{- if (eq $severity "critical") -}} {{- $priority = "High" -}} {{- else if (and (eq $severity "warning") (ne $priority "High")) -}} {{- $priority = "Medium" -}} {{- else if (and (eq $severity "info") (eq $priority "")) -}} {{- $priority = "Low" -}} {{- end -}} {{- end -}} {{- if eq $priority "" -}} {{- range .Alerts.Resolved -}} {{- $severity := index .Labels "severity" -}} {{- if (eq $severity "critical") -}} {{- $priority = "High" -}} {{- else if (and (eq $severity "warning") (ne $priority "High")) -}} {{- $priority = "Medium" -}} {{- else if (and (eq $severity "info") (eq $priority "")) -}} {{- $priority = "Low" -}} {{- end -}} {{- end -}} {{- end -}} {{- $priority -}} {{- end -}} {{ define "rocketchat.default.title" }}{{ template "__subject" . }}{{ end }} {{ define "rocketchat.default.alias" }}{{ template "__alertmanager" . }}{{ end }} {{ define "rocketchat.default.titlelink" }}{{ template "__alertmanagerURL" . }}{{ end }} {{ define "rocketchat.default.emoji" }}{{ end }} {{ define "rocketchat.default.iconurl" }}{{ end }} {{ define "rocketchat.default.text" }}{{ end }} prometheus-alertmanager-0.28.1+ds/template/email.html000066400000000000000000000241171476331240200226360ustar00rootroot00000000000000 {{ template "__subject" . }}
{{ if gt (len .Alerts.Firing) 0 }} {{ else }} {{ end }}
{{ .Alerts | len }} alert{{ if gt (len .Alerts) 1 }}s{{ end }} for {{ range .GroupLabels.SortedPairs }} {{ .Name }}={{ .Value }} {{ end }} {{ .Alerts | len }} alert{{ if gt (len .Alerts) 1 }}s{{ end }} for {{ range .GroupLabels.SortedPairs }} {{ .Name }}={{ .Value }} {{ end }}
{{ if gt (len .Alerts.Firing) 0 }} {{ end }} {{ range .Alerts.Firing }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} {{ if gt (len .Alerts.Firing) 0 }} {{ end }} {{ end }} {{ range .Alerts.Resolved }} {{ end }}
View in {{ template "__alertmanager" . }}
[{{ .Alerts.Firing | len }}] Firing
Labels
{{ range .Labels.SortedPairs }}{{ .Name }} = {{ .Value }}
{{ end }} {{ if gt (len .Annotations) 0 }}Annotations
{{ end }} {{ range .Annotations.SortedPairs }}{{ .Name }} = {{ .Value }}
{{ end }} Source



[{{ .Alerts.Resolved | len }}] Resolved
Labels
{{ range .Labels.SortedPairs }}{{ .Name }} = {{ .Value }}
{{ end }} {{ if gt (len .Annotations) 0 }}Annotations
{{ end }} {{ range .Annotations.SortedPairs }}{{ .Name }} = {{ .Value }}
{{ end }} Source
prometheus-alertmanager-0.28.1+ds/template/email.tmpl000066400000000000000000000334051476331240200226460ustar00rootroot00000000000000 {{ define "email.default.subject" }}{{ template "__subject" . }}{{ end }} {{ define "email.default.html" }} {{ template "__subject" . }}
{{ if gt (len .Alerts.Firing) 0 }} {{ else }} {{ end }}
{{ .Alerts | len }} alert{{ if gt (len .Alerts) 1 }}s{{ end }} for {{ range .GroupLabels.SortedPairs }} {{ .Name }}={{ .Value }} {{ end }} {{ .Alerts | len }} alert{{ if gt (len .Alerts) 1 }}s{{ end }} for {{ range .GroupLabels.SortedPairs }} {{ .Name }}={{ .Value }} {{ end }}
{{ if gt (len .Alerts.Firing) 0 }} {{ end }} {{ range .Alerts.Firing }} {{ end }} {{ if gt (len .Alerts.Resolved) 0 }} {{ if gt (len .Alerts.Firing) 0 }} {{ end }} {{ end }} {{ range .Alerts.Resolved }} {{ end }}
View in {{ template "__alertmanager" . }}
[{{ .Alerts.Firing | len }}] Firing
Labels
{{ range .Labels.SortedPairs }}{{ .Name }} = {{ .Value }}
{{ end }} {{ if gt (len .Annotations) 0 }}Annotations
{{ end }} {{ range .Annotations.SortedPairs }}{{ .Name }} = {{ .Value }}
{{ end }} Source



[{{ .Alerts.Resolved | len }}] Resolved
Labels
{{ range .Labels.SortedPairs }}{{ .Name }} = {{ .Value }}
{{ end }} {{ if gt (len .Annotations) 0 }}Annotations
{{ end }} {{ range .Annotations.SortedPairs }}{{ .Name }} = {{ .Value }}
{{ end }} Source
{{ end }} prometheus-alertmanager-0.28.1+ds/template/inline-css.js000077500000000000000000000021151476331240200232600ustar00rootroot00000000000000#!/usr/bin/env node // Copyright 2021 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. const juice = require('juice') const fs = require('fs') const inputFile = 'email.html' const outputFile = 'email.tmpl' var inputData = '' try { inputData = fs.readFileSync(inputFile, 'utf8') } catch (err) { console.error(err) process.exit(1) } var templateData = juice(inputData) const outputData = ` {{ define "email.default.subject" }}{{ template "__subject" . }}{{ end }} {{ define "email.default.html" }} ${templateData} {{ end }} ` fs.writeFileSync(outputFile, outputData) prometheus-alertmanager-0.28.1+ds/template/template.go000066400000000000000000000250411476331240200230200ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package template import ( "bytes" tmplhtml "html/template" "io" "net/url" "path" "path/filepath" "regexp" "sort" "strings" tmpltext "text/template" "time" commonTemplates "github.com/prometheus/common/helpers/templates" "github.com/prometheus/common/model" "golang.org/x/text/cases" "golang.org/x/text/language" "github.com/prometheus/alertmanager/asset" "github.com/prometheus/alertmanager/types" ) // Template bundles a text and a html template instance. type Template struct { text *tmpltext.Template html *tmplhtml.Template ExternalURL *url.URL } // Option is generic modifier of the text and html templates used by a Template. type Option func(text *tmpltext.Template, html *tmplhtml.Template) // New returns a new Template with the DefaultFuncs added. The DefaultFuncs // have precedence over any added custom functions. Options allow customization // of the text and html templates in given order. func New(options ...Option) (*Template, error) { t := &Template{ text: tmpltext.New("").Option("missingkey=zero"), html: tmplhtml.New("").Option("missingkey=zero"), } for _, o := range options { o(t.text, t.html) } t.text.Funcs(tmpltext.FuncMap(DefaultFuncs)) t.html.Funcs(tmplhtml.FuncMap(DefaultFuncs)) return t, nil } // FromGlobs calls ParseGlob on all path globs provided and returns the // resulting Template. func FromGlobs(paths []string, options ...Option) (*Template, error) { t, err := New(options...) if err != nil { return nil, err } defaultTemplates := []string{"default.tmpl", "email.tmpl"} for _, file := range defaultTemplates { f, err := asset.Assets.Open(path.Join("/templates", file)) if err != nil { return nil, err } if err := t.Parse(f); err != nil { f.Close() return nil, err } f.Close() } for _, tp := range paths { if err := t.FromGlob(tp); err != nil { return nil, err } } return t, nil } // Parse parses the given text into the template. func (t *Template) Parse(r io.Reader) error { b, err := io.ReadAll(r) if err != nil { return err } if t.text, err = t.text.Parse(string(b)); err != nil { return err } if t.html, err = t.html.Parse(string(b)); err != nil { return err } return nil } // FromGlob calls ParseGlob on given path glob provided and parses into the // template. func (t *Template) FromGlob(path string) error { // ParseGlob in the template packages errors if not at least one file is // matched. We want to allow empty matches that may be populated later on. p, err := filepath.Glob(path) if err != nil { return err } if len(p) > 0 { if t.text, err = t.text.ParseGlob(path); err != nil { return err } if t.html, err = t.html.ParseGlob(path); err != nil { return err } } return nil } // ExecuteTextString needs a meaningful doc comment (TODO(fabxc)). func (t *Template) ExecuteTextString(text string, data interface{}) (string, error) { if text == "" { return "", nil } tmpl, err := t.text.Clone() if err != nil { return "", err } tmpl, err = tmpl.New("").Option("missingkey=zero").Parse(text) if err != nil { return "", err } var buf bytes.Buffer err = tmpl.Execute(&buf, data) return buf.String(), err } // ExecuteHTMLString needs a meaningful doc comment (TODO(fabxc)). func (t *Template) ExecuteHTMLString(html string, data interface{}) (string, error) { if html == "" { return "", nil } tmpl, err := t.html.Clone() if err != nil { return "", err } tmpl, err = tmpl.New("").Option("missingkey=zero").Parse(html) if err != nil { return "", err } var buf bytes.Buffer err = tmpl.Execute(&buf, data) return buf.String(), err } type FuncMap map[string]interface{} var DefaultFuncs = FuncMap{ "toUpper": strings.ToUpper, "toLower": strings.ToLower, "title": func(text string) string { // Casers should not be shared between goroutines, instead // create a new caser each time this function is called. return cases.Title(language.AmericanEnglish).String(text) }, "trimSpace": strings.TrimSpace, // join is equal to strings.Join but inverts the argument order // for easier pipelining in templates. "join": func(sep string, s []string) string { return strings.Join(s, sep) }, "match": regexp.MatchString, "safeHtml": func(text string) tmplhtml.HTML { return tmplhtml.HTML(text) }, "reReplaceAll": func(pattern, repl, text string) string { re := regexp.MustCompile(pattern) return re.ReplaceAllString(text, repl) }, "stringSlice": func(s ...string) []string { return s }, // date returns the text representation of the time in the specified format. "date": func(fmt string, t time.Time) string { return t.Format(fmt) }, // tz returns the time in the timezone. "tz": func(name string, t time.Time) (time.Time, error) { loc, err := time.LoadLocation(name) if err != nil { return time.Time{}, err } return t.In(loc), nil }, "since": time.Since, "humanizeDuration": commonTemplates.HumanizeDuration, } // Pair is a key/value string pair. type Pair struct { Name, Value string } // Pairs is a list of key/value string pairs. type Pairs []Pair // Names returns a list of names of the pairs. func (ps Pairs) Names() []string { ns := make([]string, 0, len(ps)) for _, p := range ps { ns = append(ns, p.Name) } return ns } // Values returns a list of values of the pairs. func (ps Pairs) Values() []string { vs := make([]string, 0, len(ps)) for _, p := range ps { vs = append(vs, p.Value) } return vs } func (ps Pairs) String() string { b := strings.Builder{} for i, p := range ps { b.WriteString(p.Name) b.WriteRune('=') b.WriteString(p.Value) if i < len(ps)-1 { b.WriteString(", ") } } return b.String() } // KV is a set of key/value string pairs. type KV map[string]string // SortedPairs returns a sorted list of key/value pairs. func (kv KV) SortedPairs() Pairs { var ( pairs = make([]Pair, 0, len(kv)) keys = make([]string, 0, len(kv)) sortStart = 0 ) for k := range kv { if k == string(model.AlertNameLabel) { keys = append([]string{k}, keys...) sortStart = 1 } else { keys = append(keys, k) } } sort.Strings(keys[sortStart:]) for _, k := range keys { pairs = append(pairs, Pair{k, kv[k]}) } return pairs } // Remove returns a copy of the key/value set without the given keys. func (kv KV) Remove(keys []string) KV { keySet := make(map[string]struct{}, len(keys)) for _, k := range keys { keySet[k] = struct{}{} } res := KV{} for k, v := range kv { if _, ok := keySet[k]; !ok { res[k] = v } } return res } // Names returns the names of the label names in the LabelSet. func (kv KV) Names() []string { return kv.SortedPairs().Names() } // Values returns a list of the values in the LabelSet. func (kv KV) Values() []string { return kv.SortedPairs().Values() } func (kv KV) String() string { return kv.SortedPairs().String() } // Data is the data passed to notification templates and webhook pushes. // // End-users should not be exposed to Go's type system, as this will confuse them and prevent // simple things like simple equality checks to fail. Map everything to float64/string. type Data struct { Receiver string `json:"receiver"` Status string `json:"status"` Alerts Alerts `json:"alerts"` GroupLabels KV `json:"groupLabels"` CommonLabels KV `json:"commonLabels"` CommonAnnotations KV `json:"commonAnnotations"` ExternalURL string `json:"externalURL"` } // Alert holds one alert for notification templates. type Alert struct { Status string `json:"status"` Labels KV `json:"labels"` Annotations KV `json:"annotations"` StartsAt time.Time `json:"startsAt"` EndsAt time.Time `json:"endsAt"` GeneratorURL string `json:"generatorURL"` Fingerprint string `json:"fingerprint"` } // Alerts is a list of Alert objects. type Alerts []Alert // Firing returns the subset of alerts that are firing. func (as Alerts) Firing() []Alert { res := []Alert{} for _, a := range as { if a.Status == string(model.AlertFiring) { res = append(res, a) } } return res } // Resolved returns the subset of alerts that are resolved. func (as Alerts) Resolved() []Alert { res := []Alert{} for _, a := range as { if a.Status == string(model.AlertResolved) { res = append(res, a) } } return res } // Data assembles data for template expansion. func (t *Template) Data(recv string, groupLabels model.LabelSet, alerts ...*types.Alert) *Data { data := &Data{ Receiver: regexp.QuoteMeta(recv), Status: string(types.Alerts(alerts...).Status()), Alerts: make(Alerts, 0, len(alerts)), GroupLabels: KV{}, CommonLabels: KV{}, CommonAnnotations: KV{}, ExternalURL: t.ExternalURL.String(), } // The call to types.Alert is necessary to correctly resolve the internal // representation to the user representation. for _, a := range types.Alerts(alerts...) { alert := Alert{ Status: string(a.Status()), Labels: make(KV, len(a.Labels)), Annotations: make(KV, len(a.Annotations)), StartsAt: a.StartsAt, EndsAt: a.EndsAt, GeneratorURL: a.GeneratorURL, Fingerprint: a.Fingerprint().String(), } for k, v := range a.Labels { alert.Labels[string(k)] = string(v) } for k, v := range a.Annotations { alert.Annotations[string(k)] = string(v) } data.Alerts = append(data.Alerts, alert) } for k, v := range groupLabels { data.GroupLabels[string(k)] = string(v) } if len(alerts) >= 1 { var ( commonLabels = alerts[0].Labels.Clone() commonAnnotations = alerts[0].Annotations.Clone() ) for _, a := range alerts[1:] { if len(commonLabels) == 0 && len(commonAnnotations) == 0 { break } for ln, lv := range commonLabels { if a.Labels[ln] != lv { delete(commonLabels, ln) } } for an, av := range commonAnnotations { if a.Annotations[an] != av { delete(commonAnnotations, an) } } } for k, v := range commonLabels { data.CommonLabels[string(k)] = string(v) } for k, v := range commonAnnotations { data.CommonAnnotations[string(k)] = string(v) } } return data } prometheus-alertmanager-0.28.1+ds/template/template_test.go000066400000000000000000000366071476331240200240710ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package template import ( tmplhtml "html/template" "net/url" "sync" "testing" tmpltext "text/template" "time" "github.com/prometheus/common/model" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/types" ) func TestPairNames(t *testing.T) { pairs := Pairs{ {"name1", "value1"}, {"name2", "value2"}, {"name3", "value3"}, } expected := []string{"name1", "name2", "name3"} require.EqualValues(t, expected, pairs.Names()) } func TestPairValues(t *testing.T) { pairs := Pairs{ {"name1", "value1"}, {"name2", "value2"}, {"name3", "value3"}, } expected := []string{"value1", "value2", "value3"} require.EqualValues(t, expected, pairs.Values()) } func TestPairsString(t *testing.T) { pairs := Pairs{{"name1", "value1"}} require.Equal(t, "name1=value1", pairs.String()) pairs = append(pairs, Pair{"name2", "value2"}) require.Equal(t, "name1=value1, name2=value2", pairs.String()) } func TestKVSortedPairs(t *testing.T) { kv := KV{"d": "dVal", "b": "bVal", "c": "cVal"} expectedPairs := Pairs{ {"b", "bVal"}, {"c", "cVal"}, {"d", "dVal"}, } for i, p := range kv.SortedPairs() { require.EqualValues(t, p.Name, expectedPairs[i].Name) require.EqualValues(t, p.Value, expectedPairs[i].Value) } // validates alertname always comes first kv = KV{"d": "dVal", "b": "bVal", "c": "cVal", "alertname": "alert", "a": "aVal"} expectedPairs = Pairs{ {"alertname", "alert"}, {"a", "aVal"}, {"b", "bVal"}, {"c", "cVal"}, {"d", "dVal"}, } for i, p := range kv.SortedPairs() { require.EqualValues(t, p.Name, expectedPairs[i].Name) require.EqualValues(t, p.Value, expectedPairs[i].Value) } } func TestKVRemove(t *testing.T) { kv := KV{ "key1": "val1", "key2": "val2", "key3": "val3", "key4": "val4", } kv = kv.Remove([]string{"key2", "key4"}) expected := []string{"key1", "key3"} require.EqualValues(t, expected, kv.Names()) } func TestAlertsFiring(t *testing.T) { alerts := Alerts{ {Status: string(model.AlertFiring)}, {Status: string(model.AlertResolved)}, {Status: string(model.AlertFiring)}, {Status: string(model.AlertResolved)}, {Status: string(model.AlertResolved)}, } for _, alert := range alerts.Firing() { if alert.Status != string(model.AlertFiring) { t.Errorf("unexpected status %q", alert.Status) } } } func TestAlertsResolved(t *testing.T) { alerts := Alerts{ {Status: string(model.AlertFiring)}, {Status: string(model.AlertResolved)}, {Status: string(model.AlertFiring)}, {Status: string(model.AlertResolved)}, {Status: string(model.AlertResolved)}, } for _, alert := range alerts.Resolved() { if alert.Status != string(model.AlertResolved) { t.Errorf("unexpected status %q", alert.Status) } } } func TestData(t *testing.T) { u, err := url.Parse("http://example.com/") require.NoError(t, err) tmpl := &Template{ExternalURL: u} startTime := time.Time{}.Add(1 * time.Second) endTime := time.Time{}.Add(2 * time.Second) for _, tc := range []struct { receiver string groupLabels model.LabelSet alerts []*types.Alert exp *Data }{ { receiver: "webhook", exp: &Data{ Receiver: "webhook", Status: "resolved", Alerts: Alerts{}, GroupLabels: KV{}, CommonLabels: KV{}, CommonAnnotations: KV{}, ExternalURL: u.String(), }, }, { receiver: "webhook", groupLabels: model.LabelSet{ model.LabelName("job"): model.LabelValue("foo"), }, alerts: []*types.Alert{ { Alert: model.Alert{ StartsAt: startTime, Labels: model.LabelSet{ model.LabelName("severity"): model.LabelValue("warning"), model.LabelName("job"): model.LabelValue("foo"), }, Annotations: model.LabelSet{ model.LabelName("description"): model.LabelValue("something happened"), model.LabelName("runbook"): model.LabelValue("foo"), }, }, }, { Alert: model.Alert{ StartsAt: startTime, EndsAt: endTime, Labels: model.LabelSet{ model.LabelName("severity"): model.LabelValue("critical"), model.LabelName("job"): model.LabelValue("foo"), }, Annotations: model.LabelSet{ model.LabelName("description"): model.LabelValue("something else happened"), model.LabelName("runbook"): model.LabelValue("foo"), }, }, }, }, exp: &Data{ Receiver: "webhook", Status: "firing", Alerts: Alerts{ { Status: "firing", Labels: KV{"severity": "warning", "job": "foo"}, Annotations: KV{"description": "something happened", "runbook": "foo"}, StartsAt: startTime, Fingerprint: "9266ef3da838ad95", }, { Status: "resolved", Labels: KV{"severity": "critical", "job": "foo"}, Annotations: KV{"description": "something else happened", "runbook": "foo"}, StartsAt: startTime, EndsAt: endTime, Fingerprint: "3b15fd163d36582e", }, }, GroupLabels: KV{"job": "foo"}, CommonLabels: KV{"job": "foo"}, CommonAnnotations: KV{"runbook": "foo"}, ExternalURL: u.String(), }, }, { receiver: "webhook", groupLabels: model.LabelSet{}, alerts: []*types.Alert{ { Alert: model.Alert{ StartsAt: startTime, Labels: model.LabelSet{ model.LabelName("severity"): model.LabelValue("warning"), model.LabelName("job"): model.LabelValue("foo"), }, Annotations: model.LabelSet{ model.LabelName("description"): model.LabelValue("something happened"), model.LabelName("runbook"): model.LabelValue("foo"), }, }, }, { Alert: model.Alert{ StartsAt: startTime, EndsAt: endTime, Labels: model.LabelSet{ model.LabelName("severity"): model.LabelValue("critical"), model.LabelName("job"): model.LabelValue("bar"), }, Annotations: model.LabelSet{ model.LabelName("description"): model.LabelValue("something else happened"), model.LabelName("runbook"): model.LabelValue("bar"), }, }, }, }, exp: &Data{ Receiver: "webhook", Status: "firing", Alerts: Alerts{ { Status: "firing", Labels: KV{"severity": "warning", "job": "foo"}, Annotations: KV{"description": "something happened", "runbook": "foo"}, StartsAt: startTime, Fingerprint: "9266ef3da838ad95", }, { Status: "resolved", Labels: KV{"severity": "critical", "job": "bar"}, Annotations: KV{"description": "something else happened", "runbook": "bar"}, StartsAt: startTime, EndsAt: endTime, Fingerprint: "c7e68cb08e3e67f9", }, }, GroupLabels: KV{}, CommonLabels: KV{}, CommonAnnotations: KV{}, ExternalURL: u.String(), }, }, } { tc := tc t.Run("", func(t *testing.T) { got := tmpl.Data(tc.receiver, tc.groupLabels, tc.alerts...) require.Equal(t, tc.exp, got) }) } } func TestTemplateExpansion(t *testing.T) { tmpl, err := FromGlobs([]string{}) require.NoError(t, err) for _, tc := range []struct { title string in string data interface{} html bool exp string fail bool }{ { title: "Template without action", in: `abc`, exp: "abc", }, { title: "Template with simple action", in: `{{ "abc" }}`, exp: "abc", }, { title: "Template with invalid syntax", in: `{{ `, fail: true, }, { title: "Template using toUpper", in: `{{ "abc" | toUpper }}`, exp: "ABC", }, { title: "Template using toLower", in: `{{ "ABC" | toLower }}`, exp: "abc", }, { title: "Template using title", in: `{{ "abc" | title }}`, exp: "Abc", }, { title: "Template using TrimSpace", in: `{{ " a b c " | trimSpace }}`, exp: "a b c", }, { title: "Template using positive match", in: `{{ if match "^a" "abc"}}abc{{ end }}`, exp: "abc", }, { title: "Template using negative match", in: `{{ if match "abcd" "abc" }}abc{{ end }}`, exp: "", }, { title: "Template using join", in: `{{ . | join "," }}`, data: []string{"a", "b", "c"}, exp: "a,b,c", }, { title: "Text template without HTML escaping", in: `{{ "" }}`, exp: "", }, { title: "HTML template with escaping", in: `{{ "" }}`, html: true, exp: "<b>", }, { title: "HTML template using safeHTML", in: `{{ "" | safeHtml }}`, html: true, exp: "", }, { title: "Template using reReplaceAll", in: `{{ reReplaceAll "ab" "AB" "abcdabcda"}}`, exp: "ABcdABcda", }, { title: "Template using stringSlice", in: `{{ with .GroupLabels }}{{ with .Remove (stringSlice "key1" "key3") }}{{ .SortedPairs.Values }}{{ end }}{{ end }}`, data: Data{ GroupLabels: KV{ "key1": "key1", "key2": "key2", "key3": "key3", "key4": "key4", }, }, exp: "[key2 key4]", }, } { tc := tc t.Run(tc.title, func(t *testing.T) { f := tmpl.ExecuteTextString if tc.html { f = tmpl.ExecuteHTMLString } got, err := f(tc.in, tc.data) if tc.fail { require.Error(t, err) return } require.NoError(t, err) require.Equal(t, tc.exp, got) }) } } func TestTemplateExpansionWithOptions(t *testing.T) { testOptionWithAdditionalFuncs := func(funcs FuncMap) Option { return func(text *tmpltext.Template, html *tmplhtml.Template) { text.Funcs(tmpltext.FuncMap(funcs)) html.Funcs(tmplhtml.FuncMap(funcs)) } } for _, tc := range []struct { options []Option title string in string data interface{} html bool exp string fail bool }{ { title: "Test custom function", options: []Option{testOptionWithAdditionalFuncs(FuncMap{"printFoo": func() string { return "foo" }})}, in: `{{ printFoo }}`, exp: "foo", }, { title: "Test Default function with additional function added", options: []Option{testOptionWithAdditionalFuncs(FuncMap{"printFoo": func() string { return "foo" }})}, in: `{{ toUpper "test" }}`, exp: "TEST", }, { title: "Test custom function is overridden by the DefaultFuncs", options: []Option{testOptionWithAdditionalFuncs(FuncMap{"toUpper": func(s string) string { return "foo" }})}, in: `{{ toUpper "test" }}`, exp: "TEST", }, { title: "Test later Option overrides the previous", options: []Option{ testOptionWithAdditionalFuncs(FuncMap{"printFoo": func() string { return "foo" }}), testOptionWithAdditionalFuncs(FuncMap{"printFoo": func() string { return "bar" }}), }, in: `{{ printFoo }}`, exp: "bar", }, } { tc := tc t.Run(tc.title, func(t *testing.T) { tmpl, err := FromGlobs([]string{}, tc.options...) require.NoError(t, err) f := tmpl.ExecuteTextString if tc.html { f = tmpl.ExecuteHTMLString } got, err := f(tc.in, tc.data) if tc.fail { require.Error(t, err) return } require.NoError(t, err) require.Equal(t, tc.exp, got) }) } } // This test asserts that template functions are thread-safe. func TestTemplateFuncs(t *testing.T) { tmpl, err := FromGlobs([]string{}) require.NoError(t, err) for _, tc := range []struct { title string in string data interface{} exp string expErr string }{{ title: "Template using toUpper", in: `{{ "abc" | toUpper }}`, exp: "ABC", }, { title: "Template using toLower", in: `{{ "ABC" | toLower }}`, exp: "abc", }, { title: "Template using title", in: `{{ "abc" | title }}`, exp: "Abc", }, { title: "Template using trimSpace", in: `{{ " abc " | trimSpace }}`, exp: "abc", }, { title: "Template using join", in: `{{ . | join "," }}`, data: []string{"abc", "def"}, exp: "abc,def", }, { title: "Template using match", in: `{{ match "[a-z]+" "abc" }}`, exp: "true", }, { title: "Template using reReplaceAll", in: `{{ reReplaceAll "ab" "AB" "abc" }}`, exp: "ABc", }, { title: "Template using date", in: `{{ . | date "2006-01-02" }}`, data: time.Date(2024, 1, 1, 8, 15, 30, 0, time.UTC), exp: "2024-01-01", }, { title: "Template using tz", in: `{{ . | tz "Europe/Paris" }}`, data: time.Date(2024, 1, 1, 8, 15, 30, 0, time.UTC), exp: "2024-01-01 09:15:30 +0100 CET", }, { title: "Template using invalid tz", in: `{{ . | tz "Invalid/Timezone" }}`, data: time.Date(2024, 1, 1, 8, 15, 30, 0, time.UTC), expErr: "template: :1:7: executing \"\" at : error calling tz: unknown time zone Invalid/Timezone", }, { title: "Template using HumanizeDuration - seconds - float64", in: "{{ range . }}{{ humanizeDuration . }}:{{ end }}", data: []float64{0, 1, 60, 3600, 86400, 86400 + 3600, -(86400*2 + 3600*3 + 60*4 + 5), 899.99}, exp: "0s:1s:1m 0s:1h 0m 0s:1d 0h 0m 0s:1d 1h 0m 0s:-2d 3h 4m 5s:14m 59s:", }, { title: "Template using HumanizeDuration - seconds - string.", in: "{{ range . }}{{ humanizeDuration . }}:{{ end }}", data: []string{"0", "1", "60", "3600", "86400"}, exp: "0s:1s:1m 0s:1h 0m 0s:1d 0h 0m 0s:", }, { title: "Template using HumanizeDuration - subsecond and fractional seconds - float64.", in: "{{ range . }}{{ humanizeDuration . }}:{{ end }}", data: []float64{.1, .0001, .12345, 60.1, 60.5, 1.2345, 12.345}, exp: "100ms:100us:123.5ms:1m 0s:1m 0s:1.234s:12.35s:", }, { title: "Template using HumanizeDuration - subsecond and fractional seconds - string.", in: "{{ range . }}{{ humanizeDuration . }}:{{ end }}", data: []string{".1", ".0001", ".12345", "60.1", "60.5", "1.2345", "12.345"}, exp: "100ms:100us:123.5ms:1m 0s:1m 0s:1.234s:12.35s:", }, { title: "Template using HumanizeDuration - string with error.", in: `{{ humanizeDuration "one" }}`, expErr: "template: :1:3: executing \"\" at : error calling humanizeDuration: strconv.ParseFloat: parsing \"one\": invalid syntax", }, { title: "Template using HumanizeDuration - int.", in: "{{ range . }}{{ humanizeDuration . }}:{{ end }}", data: []int{0, -1, 1, 1234567}, exp: "0s:-1s:1s:14d 6h 56m 7s:", }, { title: "Template using HumanizeDuration - uint.", in: "{{ range . }}{{ humanizeDuration . }}:{{ end }}", data: []uint{0, 1, 1234567}, exp: "0s:1s:14d 6h 56m 7s:", }, { title: "Template using since", in: "{{ . | since | humanizeDuration }}", data: time.Now().Add(-1 * time.Hour), exp: "1h 0m 0s", }} { tc := tc t.Run(tc.title, func(t *testing.T) { wg := sync.WaitGroup{} for i := 0; i < 10; i++ { wg.Add(1) go func() { defer wg.Done() got, err := tmpl.ExecuteTextString(tc.in, tc.data) if tc.expErr == "" { require.NoError(t, err) require.Equal(t, tc.exp, got) } else { require.EqualError(t, err, tc.expErr) require.Empty(t, got) } }() } wg.Wait() }) } } prometheus-alertmanager-0.28.1+ds/test/000077500000000000000000000000001476331240200200205ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/test/cli/000077500000000000000000000000001476331240200205675ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/test/cli/acceptance.go000066400000000000000000000470251476331240200232140ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "bytes" "context" "errors" "fmt" "io" "net" "net/http" "os" "os/exec" "path/filepath" "regexp" "strings" "sync" "syscall" "testing" "time" httptransport "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" apiclient "github.com/prometheus/alertmanager/api/v2/client" "github.com/prometheus/alertmanager/api/v2/client/general" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/cli/format" ) const ( // nolint:godot // amtool is the relative path to local amtool binary. amtool = "../../../amtool" ) // AcceptanceTest provides declarative definition of given inputs and expected // output of an Alertmanager setup. type AcceptanceTest struct { *testing.T opts *AcceptanceOpts amc *AlertmanagerCluster collectors []*Collector actions map[float64][]func() } // AcceptanceOpts defines configuration parameters for an acceptance test. type AcceptanceOpts struct { RoutePrefix string Tolerance time.Duration baseTime time.Time } func (opts *AcceptanceOpts) alertString(a *models.GettableAlert) string { if a.EndsAt == nil || time.Time(*a.EndsAt).IsZero() { return fmt.Sprintf("%v[%v:]", a, opts.relativeTime(time.Time(*a.StartsAt))) } return fmt.Sprintf("%v[%v:%v]", a, opts.relativeTime(time.Time(*a.StartsAt)), opts.relativeTime(time.Time(*a.EndsAt))) } // expandTime returns the absolute time for the relative time // calculated from the test's base time. func (opts *AcceptanceOpts) expandTime(rel float64) time.Time { return opts.baseTime.Add(time.Duration(rel * float64(time.Second))) } // expandTime returns the relative time for the given time // calculated from the test's base time. func (opts *AcceptanceOpts) relativeTime(act time.Time) float64 { return float64(act.Sub(opts.baseTime)) / float64(time.Second) } // NewAcceptanceTest returns a new acceptance test with the base time // set to the current time. func NewAcceptanceTest(t *testing.T, opts *AcceptanceOpts) *AcceptanceTest { test := &AcceptanceTest{ T: t, opts: opts, actions: map[float64][]func(){}, } return test } // freeAddress returns a new listen address not currently in use. func freeAddress() string { // Let the OS allocate a free address, close it and hope // it is still free when starting Alertmanager. l, err := net.Listen("tcp4", "localhost:0") if err != nil { panic(err) } defer func() { if err := l.Close(); err != nil { panic(err) } }() return l.Addr().String() } // AmtoolOk verifies that the "amtool" file exists in the correct location for testing, // and is a regular file. func AmtoolOk() (bool, error) { stat, err := os.Stat(amtool) if err != nil { return false, fmt.Errorf("error accessing amtool command, try 'make build' to generate the file. %w", err) } else if stat.IsDir() { return false, fmt.Errorf("file %s is a directory, expecting a binary executable file", amtool) } return true, nil } // Do sets the given function to be executed at the given time. func (t *AcceptanceTest) Do(at float64, f func()) { t.actions[at] = append(t.actions[at], f) } // AlertmanagerCluster returns a new AlertmanagerCluster that allows starting a // cluster of Alertmanager instances on random ports. func (t *AcceptanceTest) AlertmanagerCluster(conf string, size int) *AlertmanagerCluster { amc := AlertmanagerCluster{} for i := 0; i < size; i++ { am := &Alertmanager{ t: t, opts: t.opts, } dir, err := os.MkdirTemp("", "am_test") if err != nil { t.Fatal(err) } am.dir = dir cf, err := os.Create(filepath.Join(dir, "config.yml")) if err != nil { t.Fatal(err) } am.confFile = cf am.UpdateConfig(conf) am.apiAddr = freeAddress() am.clusterAddr = freeAddress() transport := httptransport.New(am.apiAddr, t.opts.RoutePrefix+"/api/v2/", nil) am.clientV2 = apiclient.New(transport, strfmt.Default) amc.ams = append(amc.ams, am) } t.amc = &amc return &amc } // Collector returns a new collector bound to the test instance. func (t *AcceptanceTest) Collector(name string) *Collector { co := &Collector{ t: t.T, name: name, opts: t.opts, collected: map[float64][]models.GettableAlerts{}, expected: map[Interval][]models.GettableAlerts{}, } t.collectors = append(t.collectors, co) return co } // Run starts all Alertmanagers and runs queries against them. It then checks // whether all expected notifications have arrived at the expected receiver. func (t *AcceptanceTest) Run() { errc := make(chan error) for _, am := range t.amc.ams { am.errc = errc defer func(am *Alertmanager) { am.Terminate() am.cleanup() t.Logf("stdout:\n%v", am.cmd.Stdout) t.Logf("stderr:\n%v", am.cmd.Stderr) }(am) } err := t.amc.Start() if err != nil { t.T.Fatal(err) } // Set the reference time right before running the test actions to avoid // test failures due to slow setup of the test environment. t.opts.baseTime = time.Now() go t.runActions() var latest float64 for _, coll := range t.collectors { if l := coll.latest(); l > latest { latest = l } } deadline := t.opts.expandTime(latest) select { case <-time.After(time.Until(deadline)): // continue case err := <-errc: t.Error(err) } } // runActions performs the stored actions at the defined times. func (t *AcceptanceTest) runActions() { var wg sync.WaitGroup for at, fs := range t.actions { ts := t.opts.expandTime(at) wg.Add(len(fs)) for _, f := range fs { go func(f func()) { time.Sleep(time.Until(ts)) f() wg.Done() }(f) } } wg.Wait() } type buffer struct { b bytes.Buffer mtx sync.Mutex } func (b *buffer) Write(p []byte) (int, error) { b.mtx.Lock() defer b.mtx.Unlock() return b.b.Write(p) } func (b *buffer) String() string { b.mtx.Lock() defer b.mtx.Unlock() return b.b.String() } // Alertmanager encapsulates an Alertmanager process and allows // declaring alerts being pushed to it at fixed points in time. type Alertmanager struct { t *AcceptanceTest opts *AcceptanceOpts apiAddr string clusterAddr string clientV2 *apiclient.AlertmanagerAPI cmd *exec.Cmd confFile *os.File dir string errc chan<- error } // AlertmanagerCluster represents a group of Alertmanager instances // acting as a cluster. type AlertmanagerCluster struct { ams []*Alertmanager } // Start the Alertmanager cluster and wait until it is ready to receive. func (amc *AlertmanagerCluster) Start() error { var peerFlags []string for _, am := range amc.ams { peerFlags = append(peerFlags, "--cluster.peer="+am.clusterAddr) } for _, am := range amc.ams { err := am.Start(peerFlags) if err != nil { return fmt.Errorf("starting alertmanager cluster: %w", err) } } for _, am := range amc.ams { err := am.WaitForCluster(len(amc.ams)) if err != nil { return fmt.Errorf("waiting alertmanager cluster: %w", err) } } return nil } // Members returns the underlying slice of cluster members. func (amc *AlertmanagerCluster) Members() []*Alertmanager { return amc.ams } // Start the alertmanager and wait until it is ready to receive. func (am *Alertmanager) Start(additionalArg []string) error { am.t.Helper() args := []string{ "--config.file", am.confFile.Name(), "--log.level", "debug", "--web.listen-address", am.apiAddr, "--storage.path", am.dir, "--cluster.listen-address", am.clusterAddr, "--cluster.settle-timeout", "0s", } if am.opts.RoutePrefix != "" { args = append(args, "--web.route-prefix", am.opts.RoutePrefix) } args = append(args, additionalArg...) cmd := exec.Command("../../../alertmanager", args...) if am.cmd == nil { var outb, errb buffer cmd.Stdout = &outb cmd.Stderr = &errb } else { cmd.Stdout = am.cmd.Stdout cmd.Stderr = am.cmd.Stderr } am.cmd = cmd if err := am.cmd.Start(); err != nil { return fmt.Errorf("starting alertmanager failed: %w", err) } go func() { if err := am.cmd.Wait(); err != nil { am.errc <- err } }() time.Sleep(50 * time.Millisecond) for i := 0; i < 10; i++ { resp, err := http.Get(am.getURL("/")) if err != nil { time.Sleep(500 * time.Millisecond) continue } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return fmt.Errorf("starting alertmanager failed: expected HTTP status '200', got '%d'", resp.StatusCode) } _, err = io.ReadAll(resp.Body) if err != nil { return fmt.Errorf("starting alertmanager failed: %w", err) } return nil } return fmt.Errorf("starting alertmanager failed: timeout") } // WaitForCluster waits for the Alertmanager instance to join a cluster with the // given size. func (am *Alertmanager) WaitForCluster(size int) error { params := general.NewGetStatusParams() params.WithContext(context.Background()) var status general.GetStatusOK // Poll for 2s for i := 0; i < 20; i++ { status, err := am.clientV2.General.GetStatus(params) if err != nil { return err } if len(status.Payload.Cluster.Peers) == size { return nil } time.Sleep(100 * time.Millisecond) } return fmt.Errorf( "failed to wait for Alertmanager instance %q to join cluster: expected %v peers, but got %v", am.clusterAddr, size, len(status.Payload.Cluster.Peers), ) } // Terminate kills the underlying Alertmanager cluster processes and removes intermediate // data. func (amc *AlertmanagerCluster) Terminate() { for _, am := range amc.ams { am.Terminate() } } // Terminate kills the underlying Alertmanager process and remove intermediate // data. func (am *Alertmanager) Terminate() { am.t.Helper() if err := syscall.Kill(am.cmd.Process.Pid, syscall.SIGTERM); err != nil { am.t.Fatalf("Error sending SIGTERM to Alertmanager process: %v", err) } } // Reload sends the reloading signal to the Alertmanager instances. func (amc *AlertmanagerCluster) Reload() { for _, am := range amc.ams { am.Reload() } } // Reload sends the reloading signal to the Alertmanager process. func (am *Alertmanager) Reload() { am.t.Helper() if err := syscall.Kill(am.cmd.Process.Pid, syscall.SIGHUP); err != nil { am.t.Fatalf("Error sending SIGHUP to Alertmanager process: %v", err) } } func (am *Alertmanager) cleanup() { am.t.Helper() if err := os.RemoveAll(am.confFile.Name()); err != nil { am.t.Errorf("Error removing test config file %q: %v", am.confFile.Name(), err) } } // Version runs the 'amtool' command with the --version option and checks // for appropriate output. func Version() (string, error) { cmd := exec.Command(amtool, "--version") out, err := cmd.CombinedOutput() if err != nil { return "", err } versionRE := regexp.MustCompile(`^amtool, version (\d+\.\d+\.\d+) *`) matched := versionRE.FindStringSubmatch(string(out)) if len(matched) != 2 { return "", errors.New("Unable to match version info regex: " + string(out)) } return matched[1], nil } // AddAlertsAt declares alerts that are to be added to the Alertmanager // server at a relative point in time. func (am *Alertmanager) AddAlertsAt(omitEquals bool, at float64, alerts ...*TestAlert) { am.t.Do(at, func() { am.AddAlerts(omitEquals, alerts...) }) } // AddAlerts declares alerts that are to be added to the Alertmanager server. // The omitEquals option omits alertname= from the command line args passed to // amtool and instead uses the alertname value as the first argument to the command. // For example `amtool alert add foo` instead of `amtool alert add alertname=foo`. // This has been added to allow certain tests to test adding alerts both with and // without alertname=. All other tests that use AddAlerts as a fixture can set this // to false. func (am *Alertmanager) AddAlerts(omitEquals bool, alerts ...*TestAlert) { for _, alert := range alerts { out, err := am.addAlertCommand(omitEquals, alert) if err != nil { am.t.Errorf("Error adding alert: %v\nOutput: %s", err, string(out)) } } } func (am *Alertmanager) addAlertCommand(omitEquals bool, alert *TestAlert) ([]byte, error) { amURLFlag := "--alertmanager.url=" + am.getURL("/") args := []string{amURLFlag, "alert", "add"} // Make a copy of the labels labels := make(models.LabelSet, len(alert.labels)) for k, v := range alert.labels { labels[k] = v } if omitEquals { // If alertname is present and omitEquals is true then the command should // be `amtool alert add foo ...` and not `amtool alert add alertname=foo ...`. if alertname, ok := labels["alertname"]; ok { args = append(args, alertname) delete(labels, "alertname") } } for k, v := range labels { args = append(args, k+"="+v) } startsAt := strfmt.DateTime(am.opts.expandTime(alert.startsAt)) args = append(args, "--start="+startsAt.String()) if alert.endsAt > alert.startsAt { endsAt := strfmt.DateTime(am.opts.expandTime(alert.endsAt)) args = append(args, "--end="+endsAt.String()) } cmd := exec.Command(amtool, args...) return cmd.CombinedOutput() } // QueryAlerts uses the amtool cli to query alerts. func (am *Alertmanager) QueryAlerts(match ...string) ([]TestAlert, error) { amURLFlag := "--alertmanager.url=" + am.getURL("/") args := append([]string{amURLFlag, "alert", "query"}, match...) cmd := exec.Command(amtool, args...) output, err := cmd.CombinedOutput() if err != nil { return nil, err } return parseAlertQueryResponse(output) } func parseAlertQueryResponse(data []byte) ([]TestAlert, error) { alerts := []TestAlert{} lines := strings.Split(string(data), "\n") header, lines := lines[0], lines[1:len(lines)-1] startTimePos := strings.Index(header, "Starts At") if startTimePos == -1 { return alerts, errors.New("Invalid header: " + header) } summPos := strings.Index(header, "Summary") if summPos == -1 { return alerts, errors.New("Invalid header: " + header) } for _, line := range lines { alertName := strings.TrimSpace(line[0:startTimePos]) startTime := strings.TrimSpace(line[startTimePos:summPos]) startsAt, err := time.Parse(format.DefaultDateFormat, startTime) if err != nil { return alerts, err } summary := strings.TrimSpace(line[summPos:]) alert := TestAlert{ labels: models.LabelSet{"alertname": alertName}, startsAt: float64(startsAt.Unix()), summary: summary, } alerts = append(alerts, alert) } return alerts, nil } // SetSilence updates or creates the given Silence. func (amc *AlertmanagerCluster) SetSilence(at float64, sil *TestSilence) { for _, am := range amc.ams { am.SetSilence(at, sil) } } // SetSilence updates or creates the given Silence. func (am *Alertmanager) SetSilence(at float64, sil *TestSilence) { out, err := am.addSilenceCommand(sil) if err != nil { am.t.T.Errorf("Unable to set silence %v %v", err, string(out)) } } // addSilenceCommand adds a silence using the 'amtool silence add' command. func (am *Alertmanager) addSilenceCommand(sil *TestSilence) ([]byte, error) { amURLFlag := "--alertmanager.url=" + am.getURL("/") args := []string{amURLFlag, "silence", "add"} if sil.comment != "" { args = append(args, "--comment="+sil.comment) } args = append(args, sil.match...) cmd := exec.Command(amtool, args...) return cmd.CombinedOutput() } // QuerySilence queries the current silences using the 'amtool silence query' command. func (am *Alertmanager) QuerySilence(match ...string) ([]TestSilence, error) { amURLFlag := "--alertmanager.url=" + am.getURL("/") args := append([]string{amURLFlag, "silence", "query"}, match...) cmd := exec.Command(amtool, args...) out, err := cmd.CombinedOutput() if err != nil { am.t.T.Error("Silence query command failed: ", err) } return parseSilenceQueryResponse(out) } var silenceHeaderFields = []string{"ID", "Matchers", "Ends At", "Created By", "Comment"} func parseSilenceQueryResponse(data []byte) ([]TestSilence, error) { sils := []TestSilence{} lines := strings.Split(string(data), "\n") header, lines := lines[0], lines[1:len(lines)-1] matchersPos := strings.Index(header, silenceHeaderFields[1]) if matchersPos == -1 { return sils, errors.New("Invalid header: " + header) } endsAtPos := strings.Index(header, silenceHeaderFields[2]) if endsAtPos == -1 { return sils, errors.New("Invalid header: " + header) } createdByPos := strings.Index(header, silenceHeaderFields[3]) if createdByPos == -1 { return sils, errors.New("Invalid header: " + header) } commentPos := strings.Index(header, silenceHeaderFields[4]) if commentPos == -1 { return sils, errors.New("Invalid header: " + header) } for _, line := range lines { id := strings.TrimSpace(line[0:matchersPos]) matchers := strings.TrimSpace(line[matchersPos:endsAtPos]) endsAtString := strings.TrimSpace(line[endsAtPos:createdByPos]) endsAt, err := time.Parse(format.DefaultDateFormat, endsAtString) if err != nil { return sils, err } createdBy := strings.TrimSpace(line[createdByPos:commentPos]) comment := strings.TrimSpace(line[commentPos:]) silence := TestSilence{ id: id, endsAt: float64(endsAt.Unix()), match: strings.Split(matchers, " "), createdBy: createdBy, comment: comment, } sils = append(sils, silence) } return sils, nil } // DelSilence deletes the silence with the sid at the given time. func (amc *AlertmanagerCluster) DelSilence(at float64, sil *TestSilence) { for _, am := range amc.ams { am.DelSilence(at, sil) } } // DelSilence deletes the silence with the sid at the given time. func (am *Alertmanager) DelSilence(at float64, sil *TestSilence) { output, err := am.expireSilenceCommand(sil) if err != nil { am.t.Errorf("Error expiring silence %v: %s", string(output), err) return } } // expireSilenceCommand expires a silence using the 'amtool silence expire' command. func (am *Alertmanager) expireSilenceCommand(sil *TestSilence) ([]byte, error) { amURLFlag := "--alertmanager.url=" + am.getURL("/") args := []string{amURLFlag, "silence", "expire", sil.ID()} cmd := exec.Command(amtool, args...) return cmd.CombinedOutput() } // UpdateConfig rewrites the configuration file for the Alertmanager cluster. It // does not initiate config reloading. func (amc *AlertmanagerCluster) UpdateConfig(conf string) { for _, am := range amc.ams { am.UpdateConfig(conf) } } // UpdateConfig rewrites the configuration file for the Alertmanager. It does not // initiate config reloading. func (am *Alertmanager) UpdateConfig(conf string) { if _, err := am.confFile.WriteString(conf); err != nil { am.t.Fatal(err) return } if err := am.confFile.Sync(); err != nil { am.t.Fatal(err) return } } func (am *Alertmanager) ShowRoute() ([]byte, error) { return am.showRouteCommand() } func (am *Alertmanager) showRouteCommand() ([]byte, error) { amURLFlag := "--alertmanager.url=" + am.getURL("/") args := []string{amURLFlag, "config", "routes", "show"} cmd := exec.Command(amtool, args...) return cmd.CombinedOutput() } func (am *Alertmanager) TestRoute(labels ...string) ([]byte, error) { return am.testRouteCommand(labels...) } func (am *Alertmanager) testRouteCommand(labels ...string) ([]byte, error) { amURLFlag := "--alertmanager.url=" + am.getURL("/") args := append([]string{amURLFlag, "config", "routes", "test"}, labels...) cmd := exec.Command(amtool, args...) return cmd.CombinedOutput() } func (am *Alertmanager) getURL(path string) string { return fmt.Sprintf("http://%s%s%s", am.apiAddr, am.opts.RoutePrefix, path) } prometheus-alertmanager-0.28.1+ds/test/cli/acceptance/000077500000000000000000000000001476331240200226555ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/test/cli/acceptance/cli_test.go000066400000000000000000000152551476331240200250220ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "fmt" "os" "testing" "time" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/api/v2/models" . "github.com/prometheus/alertmanager/test/cli" ) func TestMain(m *testing.M) { if ok, err := AmtoolOk(); !ok { panic("unable to access amtool binary: " + err.Error()) } os.Exit(m.Run()) } // TestAmtoolVersion checks that amtool is executable and // is reporting valid version info. func TestAmtoolVersion(t *testing.T) { t.Parallel() version, err := Version() if err != nil { t.Fatal("Unable to get amtool version", err) } t.Logf("testing amtool version: %v", version) } func TestAddAlert(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [alertname] group_wait: 1s group_interval: 1s repeat_interval: 1ms receivers: - name: "default" webhook_configs: - url: 'http://%s' send_resolved: true ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) am := amc.Members()[0] alert1 := Alert("alertname", "test1").Active(1, 2) am.AddAlertsAt(false, 0, alert1) co.Want(Between(1, 2), Alert("alertname", "test1").Active(1)) at.Run() t.Log(co.Check()) } func TestQueryAlert(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [alertname] group_wait: 1s group_interval: 1s repeat_interval: 1ms receivers: - name: "default" webhook_configs: - url: 'http://%s' send_resolved: true ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 1 * time.Second, }) co := at.Collector("webhook") wh := NewWebhook(co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) require.NoError(t, amc.Start()) defer amc.Terminate() am := amc.Members()[0] alert1 := Alert("alertname", "test1", "severity", "warning").Active(1) alert2 := Alert("alertname", "alertname=test2", "severity", "info").Active(1) alert3 := Alert("alertname", "{alertname=test3}", "severity", "info").Active(1) am.AddAlerts(true, alert1, alert2, alert3) alerts, err := am.QueryAlerts() require.NoError(t, err) require.Len(t, alerts, 3) // Get the first alert using the alertname heuristic alerts, err = am.QueryAlerts("test1") require.NoError(t, err) require.Len(t, alerts, 1) // QueryAlerts uses the simple output option, which means just the alertname // label is printed. We can assert that querying works as expected as we know // there are two alerts called "test1" and "test2". expectedLabels := models.LabelSet{"alertname": "test1"} require.True(t, alerts[0].HasLabels(expectedLabels)) // Get the second alert alerts, err = am.QueryAlerts("alertname=test2") require.NoError(t, err) require.Len(t, alerts, 1) expectedLabels = models.LabelSet{"alertname": "test2"} require.True(t, alerts[0].HasLabels(expectedLabels)) // Get the third alert alerts, err = am.QueryAlerts("{alertname=test3}") require.NoError(t, err) require.Len(t, alerts, 1) expectedLabels = models.LabelSet{"alertname": "{alertname=test3}"} require.True(t, alerts[0].HasLabels(expectedLabels)) } func TestQuerySilence(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [alertname] group_wait: 1s group_interval: 1s repeat_interval: 1ms receivers: - name: "default" webhook_configs: - url: 'http://%s' send_resolved: true ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 1 * time.Second, }) co := at.Collector("webhook") wh := NewWebhook(co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) require.NoError(t, amc.Start()) defer amc.Terminate() am := amc.Members()[0] silence1 := Silence(0, 4).Match("test1", "severity=warn").Comment("test1") silence2 := Silence(0, 4).Match("alertname=test2", "severity=warn").Comment("test2") silence3 := Silence(0, 4).Match("{alertname=test3}", "severity=warn").Comment("test3") am.SetSilence(0, silence1) am.SetSilence(0, silence2) am.SetSilence(0, silence3) // Get all silences sils, err := am.QuerySilence() require.NoError(t, err) require.Len(t, sils, 3) expected1 := []string{"alertname=\"test1\"", "severity=\"warn\""} require.Equal(t, expected1, sils[0].GetMatches()) expected2 := []string{"alertname=\"test2\"", "severity=\"warn\""} require.Equal(t, expected2, sils[1].GetMatches()) expected3 := []string{"alertname=\"{alertname=test3}\"", "severity=\"warn\""} require.Equal(t, expected3, sils[2].GetMatches()) // Get the first silence using the alertname heuristic sils, err = am.QuerySilence("test1") require.NoError(t, err) require.Len(t, sils, 1) require.Equal(t, expected1, sils[0].GetMatches()) } func TestRoutesShow(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [alertname] group_wait: 1s group_interval: 1s repeat_interval: 1ms receivers: - name: "default" webhook_configs: - url: 'http://%s' send_resolved: true ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 1 * time.Second, }) co := at.Collector("webhook") wh := NewWebhook(co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) require.NoError(t, amc.Start()) defer amc.Terminate() am := amc.Members()[0] _, err := am.ShowRoute() require.NoError(t, err) } func TestRoutesTest(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [alertname] group_wait: 1s group_interval: 1s repeat_interval: 1ms receivers: - name: "default" webhook_configs: - url: 'http://%s' send_resolved: true ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 1 * time.Second, }) co := at.Collector("webhook") wh := NewWebhook(co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) require.NoError(t, amc.Start()) defer amc.Terminate() am := amc.Members()[0] _, err := am.TestRoute() require.NoError(t, err) // Bad labels should return error out, err := am.TestRoute("{foo=bar}") require.EqualError(t, err, "exit status 1") require.Equal(t, "amtool: error: Failed to parse labels: unexpected open or close brace: {foo=bar}\n\n", string(out)) } prometheus-alertmanager-0.28.1+ds/test/cli/collector.go000066400000000000000000000132711476331240200231100ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "encoding/json" "fmt" "sync" "testing" "time" "github.com/prometheus/alertmanager/api/v2/models" ) // Collector gathers alerts received by a notification receiver // and verifies whether all arrived and within the correct time boundaries. type Collector struct { t *testing.T name string opts *AcceptanceOpts collected map[float64][]models.GettableAlerts expected map[Interval][]models.GettableAlerts mtx sync.RWMutex } func (c *Collector) String() string { return c.name } // Collected returns a map of alerts collected by the collector indexed with the // receive timestamp. func (c *Collector) Collected() map[float64][]models.GettableAlerts { c.mtx.RLock() defer c.mtx.RUnlock() return c.collected } func batchesEqual(as, bs models.GettableAlerts, opts *AcceptanceOpts) bool { if len(as) != len(bs) { return false } for _, a := range as { found := false for _, b := range bs { if equalAlerts(a, b, opts) { found = true break } } if !found { return false } } return true } // latest returns the latest relative point in time where a notification is // expected. func (c *Collector) latest() float64 { c.mtx.RLock() defer c.mtx.RUnlock() var latest float64 for iv := range c.expected { if iv.end > latest { latest = iv.end } } return latest } // Want declares that the Collector expects to receive the given alerts // within the given time boundaries. func (c *Collector) Want(iv Interval, alerts ...*TestAlert) { c.mtx.Lock() defer c.mtx.Unlock() var nas models.GettableAlerts for _, a := range alerts { nas = append(nas, a.nativeAlert(c.opts)) } c.expected[iv] = append(c.expected[iv], nas) } // add the given alerts to the collected alerts. func (c *Collector) add(alerts ...*models.GettableAlert) { c.mtx.Lock() defer c.mtx.Unlock() arrival := c.opts.relativeTime(time.Now()) c.collected[arrival] = append(c.collected[arrival], models.GettableAlerts(alerts)) } func (c *Collector) Check() string { report := fmt.Sprintf("\ncollector %q:\n\n", c) c.mtx.RLock() defer c.mtx.RUnlock() for iv, expected := range c.expected { report += fmt.Sprintf("interval %v\n", iv) var alerts []models.GettableAlerts for at, got := range c.collected { if iv.contains(at) { alerts = append(alerts, got...) } } for _, exp := range expected { found := len(exp) == 0 && len(alerts) == 0 report += "---\n" for _, e := range exp { report += fmt.Sprintf("- %v\n", c.opts.alertString(e)) } for _, a := range alerts { if batchesEqual(exp, a, c.opts) { found = true break } } if found { report += " [ ✓ ]\n" } else { c.t.Fail() report += " [ ✗ ]\n" } } } // Detect unexpected notifications. var totalExp, totalAct int for _, exp := range c.expected { for _, e := range exp { totalExp += len(e) } } for _, act := range c.collected { for _, a := range act { if len(a) == 0 { c.t.Error("received empty notifications") } totalAct += len(a) } } if totalExp != totalAct { c.t.Fail() report += fmt.Sprintf("\nExpected total of %d alerts, got %d", totalExp, totalAct) } if c.t.Failed() { report += "\nreceived:\n" for at, col := range c.collected { for _, alerts := range col { report += fmt.Sprintf("@ %v\n", at) for _, a := range alerts { report += fmt.Sprintf("- %v\n", c.opts.alertString(a)) } } } } return report } // alertsToString returns a string representation of the given Alerts. Use for // debugging. func alertsToString(as []*models.GettableAlert) (string, error) { b, err := json.Marshal(as) if err != nil { return "", err } return string(b), nil } // CompareCollectors compares two collectors based on their collected alerts. func CompareCollectors(a, b *Collector, opts *AcceptanceOpts) (bool, error) { f := func(collected map[float64][]models.GettableAlerts) []*models.GettableAlert { result := []*models.GettableAlert{} for _, batches := range collected { for _, batch := range batches { for _, alert := range batch { result = append(result, alert) } } } return result } aAlerts := f(a.Collected()) bAlerts := f(b.Collected()) if len(aAlerts) != len(bAlerts) { aAsString, err := alertsToString(aAlerts) if err != nil { return false, err } bAsString, err := alertsToString(bAlerts) if err != nil { return false, err } err = fmt.Errorf( "first collector has %v alerts, second collector has %v alerts\n%v\n%v", len(aAlerts), len(bAlerts), aAsString, bAsString, ) return false, err } for _, aAlert := range aAlerts { found := false for _, bAlert := range bAlerts { if equalAlerts(aAlert, bAlert, opts) { found = true break } } if !found { aAsString, err := alertsToString([]*models.GettableAlert{aAlert}) if err != nil { return false, err } bAsString, err := alertsToString(bAlerts) if err != nil { return false, err } err = fmt.Errorf( "could not find matching alert for alert from first collector\n%v\nin alerts of second collector\n%v", aAsString, bAsString, ) return false, err } } return true, nil } prometheus-alertmanager-0.28.1+ds/test/cli/mock.go000066400000000000000000000163571476331240200220630ustar00rootroot00000000000000// Copyright 2019 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "encoding/json" "fmt" "net" "net/http" "reflect" "time" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/notify/webhook" ) // At is a convenience method to allow for declarative syntax of Acceptance // test definitions. func At(ts float64) float64 { return ts } type Interval struct { start, end float64 } func (iv Interval) String() string { return fmt.Sprintf("[%v,%v]", iv.start, iv.end) } func (iv Interval) contains(f float64) bool { return f >= iv.start && f <= iv.end } // Between is a convenience constructor for an interval for declarative syntax // of Acceptance test definitions. func Between(start, end float64) Interval { return Interval{start: start, end: end} } // TestSilence models a model.Silence with relative times. type TestSilence struct { id string createdBy string match []string matchRE []string startsAt, endsAt float64 comment string } // Silence creates a new TestSilence active for the relative interval given // by start and end. func Silence(start, end float64) *TestSilence { return &TestSilence{ startsAt: start, endsAt: end, } } // Match adds a new plain matcher to the silence. func (s *TestSilence) Match(v ...string) *TestSilence { s.match = append(s.match, v...) return s } // GetMatches returns the plain matchers for the silence. func (s TestSilence) GetMatches() []string { return s.match } // MatchRE adds a new regex matcher to the silence. func (s *TestSilence) MatchRE(v ...string) *TestSilence { if len(v)%2 == 1 { panic("bad key/values") } s.matchRE = append(s.matchRE, v...) return s } // GetMatchREs returns the regex matchers for the silence. func (s *TestSilence) GetMatchREs() []string { return s.matchRE } // Comment sets the comment to the silence. func (s *TestSilence) Comment(c string) *TestSilence { s.comment = c return s } // SetID sets the silence ID. func (s *TestSilence) SetID(ID string) { s.id = ID } // ID gets the silence ID. func (s *TestSilence) ID() string { return s.id } // TestAlert models a model.Alert with relative times. type TestAlert struct { labels models.LabelSet annotations models.LabelSet startsAt, endsAt float64 summary string } // Alert creates a new alert declaration with the given key/value pairs // as identifying labels. func Alert(keyval ...interface{}) *TestAlert { if len(keyval)%2 == 1 { panic("bad key/values") } a := &TestAlert{ labels: models.LabelSet{}, annotations: models.LabelSet{}, } for i := 0; i < len(keyval); i += 2 { ln := keyval[i].(string) lv := keyval[i+1].(string) a.labels[ln] = lv } return a } // nativeAlert converts the declared test alert into a full alert based // on the given parameters. func (a *TestAlert) nativeAlert(opts *AcceptanceOpts) *models.GettableAlert { na := &models.GettableAlert{ Alert: models.Alert{ Labels: a.labels, }, Annotations: a.annotations, StartsAt: &strfmt.DateTime{}, EndsAt: &strfmt.DateTime{}, } if a.startsAt > 0 { start := strfmt.DateTime(opts.expandTime(a.startsAt)) na.StartsAt = &start } if a.endsAt > 0 { end := strfmt.DateTime(opts.expandTime(a.endsAt)) na.EndsAt = &end } return na } // Annotate the alert with the given key/value pairs. func (a *TestAlert) Annotate(keyval ...interface{}) *TestAlert { if len(keyval)%2 == 1 { panic("bad key/values") } for i := 0; i < len(keyval); i += 2 { ln := keyval[i].(string) lv := keyval[i+1].(string) a.annotations[ln] = lv } return a } // Active declares the relative activity time for this alert. It // must be a single starting value or two values where the second value // declares the resolved time. func (a *TestAlert) Active(tss ...float64) *TestAlert { if len(tss) > 2 || len(tss) == 0 { panic("only one or two timestamps allowed") } if len(tss) == 2 { a.endsAt = tss[1] } a.startsAt = tss[0] return a } // HasLabels returns true if the two label sets are equivalent, otherwise false. func (a *TestAlert) HasLabels(labels models.LabelSet) bool { return reflect.DeepEqual(a.labels, labels) } func equalAlerts(a, b *models.GettableAlert, opts *AcceptanceOpts) bool { if !reflect.DeepEqual(a.Labels, b.Labels) { return false } if !reflect.DeepEqual(a.Annotations, b.Annotations) { return false } if !equalTime(time.Time(*a.StartsAt), time.Time(*b.StartsAt), opts) { return false } if (a.EndsAt == nil) != (b.EndsAt == nil) { return false } if !(a.EndsAt == nil) && !(b.EndsAt == nil) && !equalTime(time.Time(*a.EndsAt), time.Time(*b.EndsAt), opts) { return false } return true } func equalTime(a, b time.Time, opts *AcceptanceOpts) bool { if a.IsZero() != b.IsZero() { return false } diff := a.Sub(b) if diff < 0 { diff = -diff } return diff <= opts.Tolerance } type MockWebhook struct { opts *AcceptanceOpts collector *Collector listener net.Listener // Func is called early on when retrieving a notification by an // Alertmanager. If Func returns true, the given notification is dropped. // See sample usage in `send_test.go/TestRetry()`. Func func(timestamp float64) bool } func NewWebhook(c *Collector) *MockWebhook { l, err := net.Listen("tcp4", "localhost:0") if err != nil { // TODO(fabxc): if shutdown of mock destinations ever becomes a concern // we want to shut them down after test completion. Then we might want to // log the error properly, too. panic(err) } wh := &MockWebhook{ listener: l, collector: c, opts: c.opts, } go func() { if err := http.Serve(l, wh); err != nil { panic(err) } }() return wh } func (ws *MockWebhook) ServeHTTP(w http.ResponseWriter, req *http.Request) { // Inject Func if it exists. if ws.Func != nil { if ws.Func(ws.opts.relativeTime(time.Now())) { return } } dec := json.NewDecoder(req.Body) defer req.Body.Close() var v webhook.Message if err := dec.Decode(&v); err != nil { panic(err) } // Transform the webhook message alerts back into model.Alerts. var alerts models.GettableAlerts for _, a := range v.Alerts { var ( labels = models.LabelSet{} annotations = models.LabelSet{} ) for k, v := range a.Labels { labels[k] = v } for k, v := range a.Annotations { annotations[k] = v } start := strfmt.DateTime(a.StartsAt) end := strfmt.DateTime(a.EndsAt) alerts = append(alerts, &models.GettableAlert{ Alert: models.Alert{ Labels: labels, GeneratorURL: strfmt.URI(a.GeneratorURL), }, Annotations: annotations, StartsAt: &start, EndsAt: &end, }) } ws.collector.add(alerts...) } func (ws *MockWebhook) Address() string { return ws.listener.Addr().String() } prometheus-alertmanager-0.28.1+ds/test/with_api_v2/000077500000000000000000000000001476331240200222335ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/test/with_api_v2/acceptance.go000066400000000000000000000320621476331240200246530ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "bytes" "context" "fmt" "net" "os" "os/exec" "path/filepath" "strings" "sync" "syscall" "testing" "time" apiclient "github.com/prometheus/alertmanager/api/v2/client" "github.com/prometheus/alertmanager/api/v2/client/alert" "github.com/prometheus/alertmanager/api/v2/client/general" "github.com/prometheus/alertmanager/api/v2/client/silence" "github.com/prometheus/alertmanager/api/v2/models" httptransport "github.com/go-openapi/runtime/client" "github.com/go-openapi/strfmt" ) // AcceptanceTest provides declarative definition of given inputs and expected // output of an Alertmanager setup. type AcceptanceTest struct { *testing.T opts *AcceptanceOpts amc *AlertmanagerCluster collectors []*Collector actions map[float64][]func() } // AcceptanceOpts defines configuration parameters for an acceptance test. type AcceptanceOpts struct { FeatureFlags []string RoutePrefix string Tolerance time.Duration baseTime time.Time } func (opts *AcceptanceOpts) alertString(a *models.GettableAlert) string { if a.EndsAt == nil || time.Time(*a.EndsAt).IsZero() { return fmt.Sprintf("%v[%v:]", a, opts.relativeTime(time.Time(*a.StartsAt))) } return fmt.Sprintf("%v[%v:%v]", a, opts.relativeTime(time.Time(*a.StartsAt)), opts.relativeTime(time.Time(*a.EndsAt))) } // expandTime returns the absolute time for the relative time // calculated from the test's base time. func (opts *AcceptanceOpts) expandTime(rel float64) time.Time { return opts.baseTime.Add(time.Duration(rel * float64(time.Second))) } // expandTime returns the relative time for the given time // calculated from the test's base time. func (opts *AcceptanceOpts) relativeTime(act time.Time) float64 { return float64(act.Sub(opts.baseTime)) / float64(time.Second) } // NewAcceptanceTest returns a new acceptance test with the base time // set to the current time. func NewAcceptanceTest(t *testing.T, opts *AcceptanceOpts) *AcceptanceTest { test := &AcceptanceTest{ T: t, opts: opts, actions: map[float64][]func(){}, } return test } // freeAddress returns a new listen address not currently in use. func freeAddress() string { // Let the OS allocate a free address, close it and hope // it is still free when starting Alertmanager. l, err := net.Listen("tcp4", "localhost:0") if err != nil { panic(err) } defer func() { if err := l.Close(); err != nil { panic(err) } }() return l.Addr().String() } // Do sets the given function to be executed at the given time. func (t *AcceptanceTest) Do(at float64, f func()) { t.actions[at] = append(t.actions[at], f) } // AlertmanagerCluster returns a new AlertmanagerCluster that allows starting a // cluster of Alertmanager instances on random ports. func (t *AcceptanceTest) AlertmanagerCluster(conf string, size int) *AlertmanagerCluster { amc := AlertmanagerCluster{} for i := 0; i < size; i++ { am := &Alertmanager{ t: t, opts: t.opts, } dir, err := os.MkdirTemp("", "am_test") if err != nil { t.Fatal(err) } am.dir = dir cf, err := os.Create(filepath.Join(dir, "config.yml")) if err != nil { t.Fatal(err) } am.confFile = cf am.UpdateConfig(conf) am.apiAddr = freeAddress() am.clusterAddr = freeAddress() transport := httptransport.New(am.apiAddr, t.opts.RoutePrefix+"/api/v2/", nil) am.clientV2 = apiclient.New(transport, strfmt.Default) amc.ams = append(amc.ams, am) } t.amc = &amc return &amc } // Collector returns a new collector bound to the test instance. func (t *AcceptanceTest) Collector(name string) *Collector { co := &Collector{ t: t.T, name: name, opts: t.opts, collected: map[float64][]models.GettableAlerts{}, expected: map[Interval][]models.GettableAlerts{}, } t.collectors = append(t.collectors, co) return co } // Run starts all Alertmanagers and runs queries against them. It then checks // whether all expected notifications have arrived at the expected receiver. func (t *AcceptanceTest) Run() { errc := make(chan error) for _, am := range t.amc.ams { am.errc = errc t.T.Cleanup(am.Terminate) t.T.Cleanup(am.cleanup) } err := t.amc.Start() if err != nil { t.T.Log(err) t.T.Fail() return } // Set the reference time right before running the test actions to avoid // test failures due to slow setup of the test environment. t.opts.baseTime = time.Now() go t.runActions() var latest float64 for _, coll := range t.collectors { if l := coll.latest(); l > latest { latest = l } } deadline := t.opts.expandTime(latest) select { case <-time.After(time.Until(deadline)): // continue case err := <-errc: t.Error(err) } } // runActions performs the stored actions at the defined times. func (t *AcceptanceTest) runActions() { var wg sync.WaitGroup for at, fs := range t.actions { ts := t.opts.expandTime(at) wg.Add(len(fs)) for _, f := range fs { go func(f func()) { time.Sleep(time.Until(ts)) f() wg.Done() }(f) } } wg.Wait() } type buffer struct { b bytes.Buffer mtx sync.Mutex } func (b *buffer) Write(p []byte) (int, error) { b.mtx.Lock() defer b.mtx.Unlock() return b.b.Write(p) } func (b *buffer) String() string { b.mtx.Lock() defer b.mtx.Unlock() return b.b.String() } // Alertmanager encapsulates an Alertmanager process and allows // declaring alerts being pushed to it at fixed points in time. type Alertmanager struct { t *AcceptanceTest opts *AcceptanceOpts apiAddr string clusterAddr string clientV2 *apiclient.AlertmanagerAPI confFile *os.File dir string cmd *exec.Cmd errc chan<- error } // AlertmanagerCluster represents a group of Alertmanager instances // acting as a cluster. type AlertmanagerCluster struct { ams []*Alertmanager } // Start the Alertmanager cluster and wait until it is ready to receive. func (amc *AlertmanagerCluster) Start() error { var peerFlags []string for _, am := range amc.ams { peerFlags = append(peerFlags, "--cluster.peer="+am.clusterAddr) } for _, am := range amc.ams { err := am.Start(peerFlags) if err != nil { return fmt.Errorf("failed to start alertmanager cluster: %w", err) } } for _, am := range amc.ams { err := am.WaitForCluster(len(amc.ams)) if err != nil { return fmt.Errorf("failed to wait for Alertmanager instance %q to join cluster: %w", am.clusterAddr, err) } } return nil } // Members returns the underlying slice of cluster members. func (amc *AlertmanagerCluster) Members() []*Alertmanager { return amc.ams } // Start the alertmanager and wait until it is ready to receive. func (am *Alertmanager) Start(additionalArg []string) error { am.t.Helper() args := []string{ "--config.file", am.confFile.Name(), "--log.level", "debug", "--web.listen-address", am.apiAddr, "--storage.path", am.dir, "--cluster.listen-address", am.clusterAddr, "--cluster.settle-timeout", "0s", } if len(am.opts.FeatureFlags) > 0 { args = append(args, "--enable-feature", strings.Join(am.opts.FeatureFlags, ",")) } if am.opts.RoutePrefix != "" { args = append(args, "--web.route-prefix", am.opts.RoutePrefix) } args = append(args, additionalArg...) cmd := exec.Command("../../../alertmanager", args...) if am.cmd == nil { var outb, errb buffer cmd.Stdout = &outb cmd.Stderr = &errb } else { cmd.Stdout = am.cmd.Stdout cmd.Stderr = am.cmd.Stderr } am.cmd = cmd if err := am.cmd.Start(); err != nil { return err } go func() { if err := am.cmd.Wait(); err != nil { am.errc <- err } }() time.Sleep(50 * time.Millisecond) var lastErr error for i := 0; i < 10; i++ { _, lastErr = am.clientV2.General.GetStatus(nil) if lastErr == nil { return nil } time.Sleep(500 * time.Millisecond) } return fmt.Errorf("unable to get a successful response from the Alertmanager: %w", lastErr) } // WaitForCluster waits for the Alertmanager instance to join a cluster with the // given size. func (am *Alertmanager) WaitForCluster(size int) error { params := general.NewGetStatusParams() params.WithContext(context.Background()) var status *general.GetStatusOK // Poll for 2s for i := 0; i < 20; i++ { var err error status, err = am.clientV2.General.GetStatus(params) if err != nil { return err } if len(status.Payload.Cluster.Peers) == size { return nil } time.Sleep(100 * time.Millisecond) } return fmt.Errorf( "expected %v peers, but got %v", size, len(status.Payload.Cluster.Peers), ) } // Terminate kills the underlying Alertmanager cluster processes and removes intermediate // data. func (amc *AlertmanagerCluster) Terminate() { for _, am := range amc.ams { am.Terminate() } } // Terminate kills the underlying Alertmanager process and remove intermediate // data. func (am *Alertmanager) Terminate() { am.t.Helper() if am.cmd.Process != nil { if err := syscall.Kill(am.cmd.Process.Pid, syscall.SIGTERM); err != nil { am.t.Logf("Error sending SIGTERM to Alertmanager process: %v", err) } am.t.Logf("stdout:\n%v", am.cmd.Stdout) am.t.Logf("stderr:\n%v", am.cmd.Stderr) } } // Reload sends the reloading signal to the Alertmanager instances. func (amc *AlertmanagerCluster) Reload() { for _, am := range amc.ams { am.Reload() } } // Reload sends the reloading signal to the Alertmanager process. func (am *Alertmanager) Reload() { am.t.Helper() if am.cmd.Process != nil { if err := syscall.Kill(am.cmd.Process.Pid, syscall.SIGHUP); err != nil { am.t.Fatalf("Error sending SIGHUP to Alertmanager process: %v", err) } } } func (am *Alertmanager) cleanup() { am.t.Helper() if err := os.RemoveAll(am.confFile.Name()); err != nil { am.t.Errorf("Error removing test config file %q: %v", am.confFile.Name(), err) } } // Push declares alerts that are to be pushed to the Alertmanager // servers at a relative point in time. func (amc *AlertmanagerCluster) Push(at float64, alerts ...*TestAlert) { for _, am := range amc.ams { am.Push(at, alerts...) } } // Push declares alerts that are to be pushed to the Alertmanager // server at a relative point in time. func (am *Alertmanager) Push(at float64, alerts ...*TestAlert) { am.t.Do(at, func() { var cas models.PostableAlerts for i := range alerts { a := alerts[i].nativeAlert(am.opts) alert := &models.PostableAlert{ Alert: models.Alert{ Labels: a.Labels, GeneratorURL: a.GeneratorURL, }, Annotations: a.Annotations, } if a.StartsAt != nil { alert.StartsAt = *a.StartsAt } if a.EndsAt != nil { alert.EndsAt = *a.EndsAt } cas = append(cas, alert) } params := alert.PostAlertsParams{} params.WithContext(context.Background()).WithAlerts(cas) _, err := am.clientV2.Alert.PostAlerts(¶ms) if err != nil { am.t.Errorf("Error pushing %v: %v", cas, err) } }) } // SetSilence updates or creates the given Silence. func (amc *AlertmanagerCluster) SetSilence(at float64, sil *TestSilence) { for _, am := range amc.ams { am.SetSilence(at, sil) } } // SetSilence updates or creates the given Silence. func (am *Alertmanager) SetSilence(at float64, sil *TestSilence) { am.t.Do(at, func() { resp, err := am.clientV2.Silence.PostSilences( silence.NewPostSilencesParams().WithSilence( &models.PostableSilence{ Silence: *sil.nativeSilence(am.opts), }, ), ) if err != nil { am.t.Errorf("Error setting silence %v: %s", sil, err) return } sil.SetID(resp.Payload.SilenceID) }) } // DelSilence deletes the silence with the sid at the given time. func (amc *AlertmanagerCluster) DelSilence(at float64, sil *TestSilence) { for _, am := range amc.ams { am.DelSilence(at, sil) } } // DelSilence deletes the silence with the sid at the given time. func (am *Alertmanager) DelSilence(at float64, sil *TestSilence) { am.t.Do(at, func() { _, err := am.clientV2.Silence.DeleteSilence( silence.NewDeleteSilenceParams().WithSilenceID(strfmt.UUID(sil.ID())), ) if err != nil { am.t.Errorf("Error deleting silence %v: %s", sil, err) } }) } // UpdateConfig rewrites the configuration file for the Alertmanager cluster. It // does not initiate config reloading. func (amc *AlertmanagerCluster) UpdateConfig(conf string) { for _, am := range amc.ams { am.UpdateConfig(conf) } } // UpdateConfig rewrites the configuration file for the Alertmanager. It does not // initiate config reloading. func (am *Alertmanager) UpdateConfig(conf string) { if _, err := am.confFile.WriteString(conf); err != nil { am.t.Fatal(err) } if err := am.confFile.Sync(); err != nil { am.t.Fatal(err) } } // Client returns a client to interact with the API v2 endpoint. func (am *Alertmanager) Client() *apiclient.AlertmanagerAPI { return am.clientV2 } prometheus-alertmanager-0.28.1+ds/test/with_api_v2/acceptance/000077500000000000000000000000001476331240200243215ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/test/with_api_v2/acceptance/api_test.go000066400000000000000000000176141476331240200264710ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "fmt" "testing" "time" "github.com/go-openapi/strfmt" "github.com/prometheus/common/model" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/api/v2/client/alert" "github.com/prometheus/alertmanager/api/v2/client/silence" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/featurecontrol" a "github.com/prometheus/alertmanager/test/with_api_v2" ) func TestAddAlerts(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 10m repeat_interval: 1h receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := a.NewAcceptanceTest(t, &a.AcceptanceOpts{ FeatureFlags: []string{featurecontrol.FeatureClassicMode}, Tolerance: 1 * time.Second, }) co := at.Collector("webhook") wh := a.NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) require.NoError(t, amc.Start()) defer amc.Terminate() am := amc.Members()[0] now := time.Now() pa := &models.PostableAlert{ StartsAt: strfmt.DateTime(now), EndsAt: strfmt.DateTime(now.Add(5 * time.Minute)), Alert: models.Alert{ Labels: models.LabelSet{ "a": "b", "b": "Σ", "c": "\xf0\x9f\x99\x82", "d": "eΘ", }, }, } alertParams := alert.NewPostAlertsParams() alertParams.Alerts = models.PostableAlerts{pa} _, err := am.Client().Alert.PostAlerts(alertParams) require.NoError(t, err) } // TestAlertGetReturnsCurrentStatus checks that querying the API returns the // current status of each alert, i.e. if it is silenced or inhibited. func TestAlertGetReturnsCurrentAlertStatus(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 10m repeat_interval: 1h inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname'] receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := a.NewAcceptanceTest(t, &a.AcceptanceOpts{ Tolerance: 1 * time.Second, }) co := at.Collector("webhook") wh := a.NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) require.NoError(t, amc.Start()) defer amc.Terminate() am := amc.Members()[0] labelName := "alertname" labelValue := "test1" now := time.Now() startsAt := strfmt.DateTime(now) endsAt := strfmt.DateTime(now.Add(5 * time.Minute)) labels := models.LabelSet(map[string]string{labelName: labelValue, "severity": "warning"}) fp := model.LabelSet{model.LabelName(labelName): model.LabelValue(labelValue), "severity": "warning"}.Fingerprint() pa := &models.PostableAlert{ StartsAt: startsAt, EndsAt: endsAt, Alert: models.Alert{Labels: labels}, } alertParams := alert.NewPostAlertsParams() alertParams.Alerts = models.PostableAlerts{pa} _, err := am.Client().Alert.PostAlerts(alertParams) require.NoError(t, err) resp, err := am.Client().Alert.GetAlerts(nil) require.NoError(t, err) // No silence has been created or inhibiting alert sent, alert should // be active. for _, al := range resp.Payload { require.Equal(t, models.AlertStatusStateActive, *al.Status.State) } // Wait for group_wait, so that we are in the group_interval period, // when the pipeline won't update the alert's status. time.Sleep(2 * time.Second) // Create silence and verify that the alert is immediately marked // silenced via the API. silenceParams := silence.NewPostSilencesParams() cm := "a" isRegex := false ps := &models.PostableSilence{ Silence: models.Silence{ StartsAt: &startsAt, EndsAt: &endsAt, Comment: &cm, CreatedBy: &cm, Matchers: models.Matchers{ &models.Matcher{Name: &labelName, Value: &labelValue, IsRegex: &isRegex}, }, }, } silenceParams.Silence = ps silenceResp, err := am.Client().Silence.PostSilences(silenceParams) require.NoError(t, err) silenceID := silenceResp.Payload.SilenceID resp, err = am.Client().Alert.GetAlerts(nil) require.NoError(t, err) for _, al := range resp.Payload { require.Equal(t, models.AlertStatusStateSuppressed, *al.Status.State) require.Equal(t, fp.String(), *al.Fingerprint) require.Len(t, al.Status.SilencedBy, 1) require.Equal(t, silenceID, al.Status.SilencedBy[0]) } // Create inhibiting alert and verify that original alert is // immediately marked as inhibited. labels["severity"] = "critical" _, err = am.Client().Alert.PostAlerts(alertParams) require.NoError(t, err) inhibitingFP := model.LabelSet{model.LabelName(labelName): model.LabelValue(labelValue), "severity": "critical"}.Fingerprint() resp, err = am.Client().Alert.GetAlerts(nil) require.NoError(t, err) for _, al := range resp.Payload { require.Len(t, al.Status.SilencedBy, 1) require.Equal(t, silenceID, al.Status.SilencedBy[0]) if fp.String() == *al.Fingerprint { require.Equal(t, models.AlertStatusStateSuppressed, *al.Status.State) require.Equal(t, fp.String(), *al.Fingerprint) require.Len(t, al.Status.InhibitedBy, 1) require.Equal(t, inhibitingFP.String(), al.Status.InhibitedBy[0]) } } deleteParams := silence.NewDeleteSilenceParams().WithSilenceID(strfmt.UUID(silenceID)) _, err = am.Client().Silence.DeleteSilence(deleteParams) require.NoError(t, err) resp, err = am.Client().Alert.GetAlerts(nil) require.NoError(t, err) // Silence has been deleted, inhibiting alert should be active. // Original alert should still be inhibited. for _, al := range resp.Payload { require.Empty(t, al.Status.SilencedBy) if inhibitingFP.String() == *al.Fingerprint { require.Equal(t, models.AlertStatusStateActive, *al.Status.State) } else { require.Equal(t, models.AlertStatusStateSuppressed, *al.Status.State) } } } func TestFilterAlertRequest(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 10m repeat_interval: 1h inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname'] receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := a.NewAcceptanceTest(t, &a.AcceptanceOpts{ Tolerance: 1 * time.Second, }) co := at.Collector("webhook") wh := a.NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) require.NoError(t, amc.Start()) defer amc.Terminate() am := amc.Members()[0] now := time.Now() startsAt := strfmt.DateTime(now) endsAt := strfmt.DateTime(now.Add(5 * time.Minute)) labels := models.LabelSet(map[string]string{"alertname": "test1", "severity": "warning"}) pa1 := &models.PostableAlert{ StartsAt: startsAt, EndsAt: endsAt, Alert: models.Alert{Labels: labels}, } labels = models.LabelSet(map[string]string{"system": "foo", "severity": "critical"}) pa2 := &models.PostableAlert{ StartsAt: startsAt, EndsAt: endsAt, Alert: models.Alert{Labels: labels}, } alertParams := alert.NewPostAlertsParams() alertParams.Alerts = models.PostableAlerts{pa1, pa2} _, err := am.Client().Alert.PostAlerts(alertParams) require.NoError(t, err) filter := []string{"alertname=test1", "severity=warning"} resp, err := am.Client().Alert.GetAlerts(alert.NewGetAlertsParams().WithFilter(filter)) require.NoError(t, err) require.Len(t, resp.Payload, 1) for _, al := range resp.Payload { require.Equal(t, models.AlertStatusStateActive, *al.Status.State) } } prometheus-alertmanager-0.28.1+ds/test/with_api_v2/acceptance/cluster_test.go000066400000000000000000000056471476331240200274040ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "fmt" "sync" "testing" "time" a "github.com/prometheus/alertmanager/test/with_api_v2" ) // TestClusterDeduplication tests, that in an Alertmanager cluster of 3 // instances, only one should send a notification for a given alert. func TestClusterDeduplication(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 1s repeat_interval: 1h receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := a.NewAcceptanceTest(t, &a.AcceptanceOpts{ Tolerance: 1 * time.Second, }) co := at.Collector("webhook") wh := a.NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 3) amc.Push(a.At(1), a.Alert("alertname", "test1")) co.Want(a.Between(2, 3), a.Alert("alertname", "test1").Active(1)) at.Run() t.Log(co.Check()) } // TestClusterVSInstance compares notifications sent by Alertmanager cluster to // notifications sent by single instance. func TestClusterVSInstance(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [ "alertname" ] group_wait: 1s group_interval: 1s repeat_interval: 1h receivers: - name: "default" webhook_configs: - url: 'http://%s' ` acceptanceOpts := func() *a.AcceptanceOpts { return &a.AcceptanceOpts{ Tolerance: 2 * time.Second, } } clusterSizes := []int{1, 3} tests := []*a.AcceptanceTest{ a.NewAcceptanceTest(t, acceptanceOpts()), a.NewAcceptanceTest(t, acceptanceOpts()), } collectors := []*a.Collector{} amClusters := []*a.AlertmanagerCluster{} wg := sync.WaitGroup{} for i, tc := range tests { collectors = append(collectors, tc.Collector("webhook")) webhook := a.NewWebhook(t, collectors[i]) amClusters = append(amClusters, tc.AlertmanagerCluster(fmt.Sprintf(conf, webhook.Address()), clusterSizes[i])) wg.Add(1) } for _, alertTime := range []float64{0, 2, 4, 6, 8} { for i, amc := range amClusters { alert := a.Alert("alertname", fmt.Sprintf("test1-%v", alertTime)) amc.Push(a.At(alertTime), alert) collectors[i].Want(a.Between(alertTime, alertTime+5), alert.Active(alertTime)) } } for _, t := range tests { go func(t *a.AcceptanceTest) { t.Run() wg.Done() }(t) } wg.Wait() _, err := a.CompareCollectors(collectors[0], collectors[1], acceptanceOpts()) if err != nil { t.Fatal(err) } } prometheus-alertmanager-0.28.1+ds/test/with_api_v2/acceptance/inhibit_test.go000066400000000000000000000117671476331240200273510ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "fmt" "testing" "time" . "github.com/prometheus/alertmanager/test/with_api_v2" ) func TestInhibiting(t *testing.T) { t.Parallel() // This integration test checks that alerts can be inhibited and that an // inhibited alert will be notified again as soon as the inhibiting alert // gets resolved. conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 1s repeat_interval: 1s receivers: - name: "default" webhook_configs: - url: 'http://%s' inhibit_rules: - source_match: alertname: JobDown target_match: alertname: InstanceDown equal: - job - zone ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) amc.Push(At(1), Alert("alertname", "test1", "job", "testjob", "zone", "aa")) amc.Push(At(1), Alert("alertname", "InstanceDown", "job", "testjob", "zone", "aa")) amc.Push(At(1), Alert("alertname", "InstanceDown", "job", "testjob", "zone", "ab")) // This JobDown in zone aa should inhibit InstanceDown in zone aa in the // second batch of notifications. amc.Push(At(2.2), Alert("alertname", "JobDown", "job", "testjob", "zone", "aa")) // InstanceDown in zone aa should fire again in the third batch of // notifications once JobDown in zone aa gets resolved. amc.Push(At(3.6), Alert("alertname", "JobDown", "job", "testjob", "zone", "aa").Active(2.2, 3.6)) co.Want(Between(2, 2.5), Alert("alertname", "test1", "job", "testjob", "zone", "aa").Active(1), Alert("alertname", "InstanceDown", "job", "testjob", "zone", "aa").Active(1), Alert("alertname", "InstanceDown", "job", "testjob", "zone", "ab").Active(1), ) co.Want(Between(3, 3.5), Alert("alertname", "test1", "job", "testjob", "zone", "aa").Active(1), Alert("alertname", "InstanceDown", "job", "testjob", "zone", "ab").Active(1), Alert("alertname", "JobDown", "job", "testjob", "zone", "aa").Active(2.2), ) co.Want(Between(4, 4.5), Alert("alertname", "test1", "job", "testjob", "zone", "aa").Active(1), Alert("alertname", "InstanceDown", "job", "testjob", "zone", "aa").Active(1), Alert("alertname", "InstanceDown", "job", "testjob", "zone", "ab").Active(1), Alert("alertname", "JobDown", "job", "testjob", "zone", "aa").Active(2.2, 3.6), ) at.Run() t.Log(co.Check()) } func TestAlwaysInhibiting(t *testing.T) { t.Parallel() // This integration test checks that when inhibited and inhibiting alerts // gets resolved at the same time, the final notification contains both // alerts. conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 1s repeat_interval: 1s receivers: - name: "default" webhook_configs: - url: 'http://%s' inhibit_rules: - source_match: alertname: JobDown target_match: alertname: InstanceDown equal: - job - zone ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) amc.Push(At(1), Alert("alertname", "InstanceDown", "job", "testjob", "zone", "aa")) amc.Push(At(1), Alert("alertname", "JobDown", "job", "testjob", "zone", "aa")) amc.Push(At(2.6), Alert("alertname", "JobDown", "job", "testjob", "zone", "aa").Active(1, 2.6)) amc.Push(At(2.6), Alert("alertname", "InstanceDown", "job", "testjob", "zone", "aa").Active(1, 2.6)) co.Want(Between(2, 2.5), Alert("alertname", "JobDown", "job", "testjob", "zone", "aa").Active(1), ) co.Want(Between(3, 3.5), Alert("alertname", "InstanceDown", "job", "testjob", "zone", "aa").Active(1, 2.6), Alert("alertname", "JobDown", "job", "testjob", "zone", "aa").Active(1, 2.6), ) at.Run() t.Log(co.Check()) } func TestEmptyInhibitionRule(t *testing.T) { t.Parallel() // This integration test checks that when we have empty inhibition rules, // there is no panic caused by null-pointer references. conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 1s repeat_interval: 1s receivers: - name: "default" webhook_configs: - url: 'http://%s' inhibit_rules: - ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) at.Run() t.Log(co.Check()) } prometheus-alertmanager-0.28.1+ds/test/with_api_v2/acceptance/send_test.go000066400000000000000000000321411476331240200266410ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "fmt" "testing" "time" . "github.com/prometheus/alertmanager/test/with_api_v2" ) // This file contains acceptance tests around the basic sending logic // for notifications, which includes batching and ensuring that each // notification is eventually sent at least once and ideally exactly // once. func testMergeAlerts(t *testing.T, endsAt bool) { t.Parallel() timerange := func(ts float64) []float64 { if !endsAt { return []float64{ts} } return []float64{ts, ts + 3.0} } conf := ` route: receiver: "default" group_by: [alertname] group_wait: 1s group_interval: 1s repeat_interval: 1ms receivers: - name: "default" webhook_configs: - url: 'http://%s' send_resolved: true ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) am := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) // Refresh an alert several times. The starting time must remain at the earliest // point in time. am.Push(At(1), Alert("alertname", "test").Active(timerange(1.1)...)) // Another Prometheus server might be sending later but with an earlier start time. am.Push(At(1.2), Alert("alertname", "test").Active(1)) co.Want(Between(2, 2.5), Alert("alertname", "test").Active(1)) am.Push(At(2.1), Alert("alertname", "test").Annotate("ann", "v1").Active(timerange(2)...)) co.Want(Between(3, 3.5), Alert("alertname", "test").Annotate("ann", "v1").Active(1)) // Annotations are always overwritten by the alert that arrived most recently. am.Push(At(3.6), Alert("alertname", "test").Annotate("ann", "v2").Active(timerange(1.5)...)) co.Want(Between(4, 4.5), Alert("alertname", "test").Annotate("ann", "v2").Active(1)) // If an alert is marked resolved twice, the latest point in time must be // set as the eventual resolve time. am.Push(At(4.6), Alert("alertname", "test").Annotate("ann", "v2").Active(3, 4.5)) am.Push(At(4.8), Alert("alertname", "test").Annotate("ann", "v3").Active(2.9, 4.8)) am.Push(At(4.8), Alert("alertname", "test").Annotate("ann", "v3").Active(2.9, 4.1)) co.Want(Between(5, 5.5), Alert("alertname", "test").Annotate("ann", "v3").Active(1, 4.8)) // Reactivate an alert after a previous occurrence has been resolved. // No overlap, no merge must occur. am.Push(At(5.3), Alert("alertname", "test").Active(timerange(5)...)) co.Want(Between(6, 6.5), Alert("alertname", "test").Active(5)) at.Run() t.Log(co.Check()) } func TestMergeAlerts(t *testing.T) { testMergeAlerts(t, false) } // This test is similar to TestMergeAlerts except that the firing alerts have // the EndsAt field set to StartsAt + 3s. This is what Prometheus starting from // version 2.4.0 sends to AlertManager. func TestMergeAlertsWithEndsAt(t *testing.T) { testMergeAlerts(t, true) } func TestRepeat(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [alertname] group_wait: 1s group_interval: 1s repeat_interval: 1ms receivers: - name: "default" webhook_configs: - url: 'http://%s' ` // Create a new acceptance test that instantiates new Alertmanagers // with the given configuration and verifies times with the given // tolerance. at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) // Create a collector to which alerts can be written and verified // against a set of expected alert notifications. co := at.Collector("webhook") // Run something that satisfies the webhook interface to which the // Alertmanager pushes as defined by its configuration. wh := NewWebhook(t, co) // Create a new Alertmanager process listening to a random port am := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) // Declare pushes to be made to the Alertmanager at the given time. // Times are provided in fractions of seconds. am.Push(At(1), Alert("alertname", "test").Active(1)) // XXX(fabxc): disabled as long as alerts are not persisted. // at.Do(At(1.2), func() { // am.Terminate() // am.Start() // }) am.Push(At(3.5), Alert("alertname", "test").Active(1, 3)) // Declare which alerts are expected to arrive at the collector within // the defined time intervals. co.Want(Between(2, 2.5), Alert("alertname", "test").Active(1)) co.Want(Between(3, 3.5), Alert("alertname", "test").Active(1)) co.Want(Between(4, 4.5), Alert("alertname", "test").Active(1, 3)) // Start the flow as defined above and run the checks afterwards. at.Run() t.Log(co.Check()) } func TestRetry(t *testing.T) { t.Parallel() // We create a notification config that fans out into two different // webhooks. // The succeeding one must still only receive the first successful // notifications. Sending to the succeeding one must eventually succeed. conf := ` route: receiver: "default" group_by: [alertname] group_wait: 1s group_interval: 2s repeat_interval: 3s receivers: - name: "default" webhook_configs: - url: 'http://%s' - url: 'http://%s' ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co1 := at.Collector("webhook") wh1 := NewWebhook(t, co1) co2 := at.Collector("webhook_failing") wh2 := NewWebhook(t, co2) wh2.Func = func(ts float64) bool { // Fail the first interval period but eventually succeed in the third // interval after a few failed attempts. return ts < 4.5 } am := at.AlertmanagerCluster(fmt.Sprintf(conf, wh1.Address(), wh2.Address()), 1) am.Push(At(1), Alert("alertname", "test1")) co1.Want(Between(2, 2.5), Alert("alertname", "test1").Active(1)) co1.Want(Between(6, 6.5), Alert("alertname", "test1").Active(1)) co2.Want(Between(6, 6.5), Alert("alertname", "test1").Active(1)) at.Run() for _, c := range []*Collector{co1, co2} { t.Log(c.Check()) } } func TestBatching(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 1s # use a value slightly below the 5s interval to avoid timing issues repeat_interval: 4900ms receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) am := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) am.Push(At(1.1), Alert("alertname", "test1").Active(1)) am.Push(At(1.7), Alert("alertname", "test5").Active(1)) co.Want(Between(2.0, 2.5), Alert("alertname", "test1").Active(1), Alert("alertname", "test5").Active(1), ) am.Push(At(3.3), Alert("alertname", "test2").Active(1.5), Alert("alertname", "test3").Active(1.5), Alert("alertname", "test4").Active(1.6), ) co.Want(Between(4.1, 4.5), Alert("alertname", "test1").Active(1), Alert("alertname", "test5").Active(1), Alert("alertname", "test2").Active(1.5), Alert("alertname", "test3").Active(1.5), Alert("alertname", "test4").Active(1.6), ) // While no changes happen expect no additional notifications // until the 5s repeat interval has ended. co.Want(Between(9.1, 9.5), Alert("alertname", "test1").Active(1), Alert("alertname", "test5").Active(1), Alert("alertname", "test2").Active(1.5), Alert("alertname", "test3").Active(1.5), Alert("alertname", "test4").Active(1.6), ) at.Run() t.Log(co.Check()) } func TestResolved(t *testing.T) { t.Parallel() for i := 0; i < 2; i++ { conf := ` global: resolve_timeout: 10s route: receiver: "default" group_by: [alertname] group_wait: 1s group_interval: 5s receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) am := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) am.Push(At(1), Alert("alertname", "test", "lbl", "v1"), Alert("alertname", "test", "lbl", "v2"), Alert("alertname", "test", "lbl", "v3"), ) co.Want(Between(2, 2.5), Alert("alertname", "test", "lbl", "v1").Active(1), Alert("alertname", "test", "lbl", "v2").Active(1), Alert("alertname", "test", "lbl", "v3").Active(1), ) co.Want(Between(12, 13), Alert("alertname", "test", "lbl", "v1").Active(1, 11), Alert("alertname", "test", "lbl", "v2").Active(1, 11), Alert("alertname", "test", "lbl", "v3").Active(1, 11), ) at.Run() t.Log(co.Check()) } } func TestResolvedFilter(t *testing.T) { t.Parallel() // This integration test ensures that even though resolved alerts may not be // notified about, they must be set as notified. Resolved alerts, even when // filtered, have to end up in the SetNotifiesStage, otherwise when an alert // fires again it is ambiguous whether it was resolved in between or not. conf := ` global: resolve_timeout: 10s route: receiver: "default" group_by: [alertname] group_wait: 1s group_interval: 5s receivers: - name: "default" webhook_configs: - url: 'http://%s' send_resolved: true - url: 'http://%s' send_resolved: false ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co1 := at.Collector("webhook1") wh1 := NewWebhook(t, co1) co2 := at.Collector("webhook2") wh2 := NewWebhook(t, co2) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh1.Address(), wh2.Address()), 1) amc.Push(At(1), Alert("alertname", "test", "lbl", "v1"), Alert("alertname", "test", "lbl", "v2"), ) amc.Push(At(3), Alert("alertname", "test", "lbl", "v1").Active(1, 4), Alert("alertname", "test", "lbl", "v3"), ) amc.Push(At(8), Alert("alertname", "test", "lbl", "v3").Active(3), ) co1.Want(Between(2, 2.5), Alert("alertname", "test", "lbl", "v1").Active(1), Alert("alertname", "test", "lbl", "v2").Active(1), ) co1.Want(Between(7, 7.5), Alert("alertname", "test", "lbl", "v1").Active(1, 4), Alert("alertname", "test", "lbl", "v2").Active(1), Alert("alertname", "test", "lbl", "v3").Active(3), ) // Notification should be sent because the v2 alert is resolved due to the time-out. co1.Want(Between(12, 12.5), Alert("alertname", "test", "lbl", "v2").Active(1, 11), Alert("alertname", "test", "lbl", "v3").Active(3), ) co2.Want(Between(2, 2.5), Alert("alertname", "test", "lbl", "v1").Active(1), Alert("alertname", "test", "lbl", "v2").Active(1), ) co2.Want(Between(7, 7.5), Alert("alertname", "test", "lbl", "v2").Active(1), Alert("alertname", "test", "lbl", "v3").Active(3), ) // No notification should be sent after group_interval because no new alert has been fired. co2.Want(Between(12, 12.5)) at.Run() for _, c := range []*Collector{co1, co2} { t.Log(c.Check()) } } func TestReload(t *testing.T) { t.Parallel() // This integration test ensures that the first alert isn't notified twice // and repeat_interval applies after the AlertManager process has been // reloaded. conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 6s repeat_interval: 10m receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) amc.Push(At(1), Alert("alertname", "test1")) at.Do(At(3), amc.Reload) amc.Push(At(4), Alert("alertname", "test2")) co.Want(Between(2, 2.5), Alert("alertname", "test1").Active(1)) // Timers are reset on reload regardless, so we count the 6 second group // interval from 3 onwards. co.Want(Between(9, 9.5), Alert("alertname", "test1").Active(1), Alert("alertname", "test2").Active(4), ) at.Run() t.Log(co.Check()) } func TestWebhookTimeout(t *testing.T) { t.Parallel() // This integration test uses an extended group_interval to check that // the webhook level timeout has the desired effect, and that notification // sending is retried in this case. conf := ` route: receiver: "default" group_by: [alertname] group_wait: 1s group_interval: 1m repeat_interval: 1m receivers: - name: "default" webhook_configs: - url: 'http://%s' timeout: 500ms ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) wh.Func = func(ts float64) bool { // Make some webhook requests slow enough to hit the webhook // timeout, but not so slow as to hit the dispatcher timeout. if ts < 3 { time.Sleep(time.Second) return true } return false } am := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) am.Push(At(1), Alert("alertname", "test1")) co.Want(Between(3, 4), Alert("alertname", "test1").Active(1)) at.Run() t.Log(co.Check()) } prometheus-alertmanager-0.28.1+ds/test/with_api_v2/acceptance/silence_test.go000066400000000000000000000107021476331240200273310ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "fmt" "testing" "time" "github.com/go-openapi/strfmt" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/api/v2/client/silence" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/featurecontrol" . "github.com/prometheus/alertmanager/test/with_api_v2" ) func TestAddSilence(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 1s repeat_interval: 1ms receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := NewAcceptanceTest(t, &AcceptanceOpts{ FeatureFlags: []string{featurecontrol.FeatureClassicMode}, Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) require.NoError(t, amc.Start()) defer amc.Terminate() am := amc.Members()[0] now := time.Now() ps := models.PostableSilence{ Silence: models.Silence{ Comment: stringPtr("test"), CreatedBy: stringPtr("test"), Matchers: models.Matchers{{ Name: stringPtr("foo"), IsEqual: boolPtr(true), IsRegex: boolPtr(false), Value: stringPtr("bar"), }}, StartsAt: dateTimePtr(strfmt.DateTime(now)), EndsAt: dateTimePtr(strfmt.DateTime(now.Add(24 * time.Hour))), }, } silenceParams := silence.NewPostSilencesParams() silenceParams.Silence = &ps _, err := am.Client().Silence.PostSilences(silenceParams) require.NoError(t, err) } func TestSilencing(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 1s repeat_interval: 1ms receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) // No repeat interval is configured. Thus, we receive an alert // notification every second. amc.Push(At(1), Alert("alertname", "test1").Active(1)) amc.Push(At(1), Alert("alertname", "test2").Active(1)) co.Want(Between(2, 2.5), Alert("alertname", "test1").Active(1), Alert("alertname", "test2").Active(1), ) // Add a silence that affects the first alert. amc.SetSilence(At(2.3), Silence(2.5, 4.5).Match("alertname", "test1")) co.Want(Between(3, 3.5), Alert("alertname", "test2").Active(1)) co.Want(Between(4, 4.5), Alert("alertname", "test2").Active(1)) // Silence should be over now and we receive both alerts again. co.Want(Between(5, 5.5), Alert("alertname", "test1").Active(1), Alert("alertname", "test2").Active(1), ) at.Run() t.Log(co.Check()) } func TestSilenceDelete(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 1s repeat_interval: 1ms receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) // No repeat interval is configured. Thus, we receive an alert // notification every second. amc.Push(At(1), Alert("alertname", "test1").Active(1)) amc.Push(At(1), Alert("alertname", "test2").Active(1)) // Silence everything for a long time and delete the silence after // two iterations. sil := Silence(1.5, 100).MatchRE("alertname", ".+") amc.SetSilence(At(1.3), sil) amc.DelSilence(At(3.5), sil) co.Want(Between(3.5, 4.5), Alert("alertname", "test1").Active(1), Alert("alertname", "test2").Active(1), ) at.Run() t.Log(co.Check()) } func boolPtr(b bool) *bool { return &b } func stringPtr(s string) *string { return &s } func dateTimePtr(t strfmt.DateTime) *strfmt.DateTime { return &t } prometheus-alertmanager-0.28.1+ds/test/with_api_v2/acceptance/utf8_test.go000066400000000000000000000204371476331240200266030ustar00rootroot00000000000000// Copyright 2023 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "fmt" "strings" "testing" "time" "github.com/go-openapi/strfmt" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/api/v2/client/alert" "github.com/prometheus/alertmanager/api/v2/client/alertgroup" "github.com/prometheus/alertmanager/api/v2/client/silence" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/featurecontrol" . "github.com/prometheus/alertmanager/test/with_api_v2" ) func TestAddUTF8Alerts(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 10m repeat_interval: 1h receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 1 * time.Second, }) co := at.Collector("webhook") wh := NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) require.NoError(t, amc.Start()) defer amc.Terminate() am := amc.Members()[0] // Add an alert with UTF-8 labels. now := time.Now() labels := models.LabelSet{ "a": "a", "00": "b", "Σ": "c", "\xf0\x9f\x99\x82": "dΘ", } pa := &models.PostableAlert{ StartsAt: strfmt.DateTime(now), EndsAt: strfmt.DateTime(now.Add(5 * time.Minute)), Alert: models.Alert{Labels: labels}, } postAlertParams := alert.NewPostAlertsParams() postAlertParams.Alerts = models.PostableAlerts{pa} _, err := am.Client().Alert.PostAlerts(postAlertParams) require.NoError(t, err) // Can get same alert from the API. resp, err := am.Client().Alert.GetAlerts(nil) require.NoError(t, err) require.Len(t, resp.Payload, 1) require.Equal(t, labels, resp.Payload[0].Labels) // Can filter alerts on UTF-8 labels. getAlertParams := alert.NewGetAlertsParams() getAlertParams = getAlertParams.WithFilter([]string{"00=b", "Σ=c", "\"\\xf0\\x9f\\x99\\x82\"=dΘ"}) resp, err = am.Client().Alert.GetAlerts(getAlertParams) require.NoError(t, err) require.Len(t, resp.Payload, 1) require.Equal(t, labels, resp.Payload[0].Labels) // Can get same alert in alert group from the API. alertGroupResp, err := am.Client().Alertgroup.GetAlertGroups(nil) require.NoError(t, err) require.Len(t, alertGroupResp.Payload, 1) require.Len(t, alertGroupResp.Payload[0].Alerts, 1) require.Equal(t, labels, alertGroupResp.Payload[0].Alerts[0].Labels) // Can filter alertGroups on UTF-8 labels. getAlertGroupsParams := alertgroup.NewGetAlertGroupsParams() getAlertGroupsParams.Filter = []string{"00=b", "Σ=c", "\"\\xf0\\x9f\\x99\\x82\"=dΘ"} alertGroupResp, err = am.Client().Alertgroup.GetAlertGroups(getAlertGroupsParams) require.NoError(t, err) require.Len(t, alertGroupResp.Payload, 1) require.Len(t, alertGroupResp.Payload[0].Alerts, 1) require.Equal(t, labels, alertGroupResp.Payload[0].Alerts[0].Labels) } func TestCannotAddUTF8AlertsInClassicMode(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 10m repeat_interval: 1h receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := NewAcceptanceTest(t, &AcceptanceOpts{ FeatureFlags: []string{featurecontrol.FeatureClassicMode}, Tolerance: 1 * time.Second, }) co := at.Collector("webhook") wh := NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) require.NoError(t, amc.Start()) defer amc.Terminate() am := amc.Members()[0] // Cannot add an alert with UTF-8 labels. now := time.Now() pa := &models.PostableAlert{ StartsAt: strfmt.DateTime(now), EndsAt: strfmt.DateTime(now.Add(5 * time.Minute)), Alert: models.Alert{ Labels: models.LabelSet{ "a": "a", "00": "b", "Σ": "c", "\xf0\x9f\x99\x82": "dΘ", }, }, } alertParams := alert.NewPostAlertsParams() alertParams.Alerts = models.PostableAlerts{pa} _, err := am.Client().Alert.PostAlerts(alertParams) require.Error(t, err) require.True(t, strings.Contains(err.Error(), "invalid label set")) } func TestAddUTF8Silences(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 1s repeat_interval: 1ms receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) require.NoError(t, amc.Start()) defer amc.Terminate() am := amc.Members()[0] // Add a silence with UTF-8 label matchers. now := time.Now() matchers := models.Matchers{{ Name: stringPtr("fooΣ"), IsEqual: boolPtr(true), IsRegex: boolPtr(false), Value: stringPtr("bar🙂"), }} ps := models.PostableSilence{ Silence: models.Silence{ Comment: stringPtr("test"), CreatedBy: stringPtr("test"), Matchers: matchers, StartsAt: dateTimePtr(strfmt.DateTime(now)), EndsAt: dateTimePtr(strfmt.DateTime(now.Add(24 * time.Hour))), }, } postSilenceParams := silence.NewPostSilencesParams() postSilenceParams.Silence = &ps _, err := am.Client().Silence.PostSilences(postSilenceParams) require.NoError(t, err) // Can get the same silence from the API. resp, err := am.Client().Silence.GetSilences(nil) require.NoError(t, err) require.Len(t, resp.Payload, 1) require.Equal(t, matchers, resp.Payload[0].Matchers) // Can filter silences on UTF-8 label matchers. getSilenceParams := silence.NewGetSilencesParams() getSilenceParams = getSilenceParams.WithFilter([]string{"fooΣ=bar🙂"}) resp, err = am.Client().Silence.GetSilences(getSilenceParams) require.NoError(t, err) require.Len(t, resp.Payload, 1) require.Equal(t, matchers, resp.Payload[0].Matchers) } func TestCannotAddUTF8SilencesInClassicMode(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 1s repeat_interval: 1ms receivers: - name: "default" webhook_configs: - url: 'http://%s' ` at := NewAcceptanceTest(t, &AcceptanceOpts{ FeatureFlags: []string{featurecontrol.FeatureClassicMode}, Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) amc := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) require.NoError(t, amc.Start()) defer amc.Terminate() am := amc.Members()[0] // Cannot create a silence with UTF-8 matchers. now := time.Now() ps := models.PostableSilence{ Silence: models.Silence{ Comment: stringPtr("test"), CreatedBy: stringPtr("test"), Matchers: models.Matchers{{ Name: stringPtr("fooΣ"), IsEqual: boolPtr(true), IsRegex: boolPtr(false), Value: stringPtr("bar🙂"), }}, StartsAt: dateTimePtr(strfmt.DateTime(now)), EndsAt: dateTimePtr(strfmt.DateTime(now.Add(24 * time.Hour))), }, } silenceParams := silence.NewPostSilencesParams() silenceParams.Silence = &ps _, err := am.Client().Silence.PostSilences(silenceParams) require.Error(t, err) require.True(t, strings.Contains(err.Error(), "invalid silence: invalid label matcher")) } func TestSendAlertsToUTF8Route(t *testing.T) { t.Parallel() conf := ` route: receiver: default routes: - receiver: webhook matchers: - foo🙂=bar group_by: - foo🙂 group_wait: 1s receivers: - name: default - name: webhook webhook_configs: - url: 'http://%s' ` at := NewAcceptanceTest(t, &AcceptanceOpts{ Tolerance: 150 * time.Millisecond, }) co := at.Collector("webhook") wh := NewWebhook(t, co) am := at.AlertmanagerCluster(fmt.Sprintf(conf, wh.Address()), 1) am.Push(At(1), Alert("foo🙂", "bar").Active(1)) co.Want(Between(2, 2.5), Alert("foo🙂", "bar").Active(1)) at.Run() t.Log(co.Check()) } prometheus-alertmanager-0.28.1+ds/test/with_api_v2/acceptance/web_test.go000066400000000000000000000021611476331240200264640ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "testing" a "github.com/prometheus/alertmanager/test/with_api_v2" ) func TestWebWithPrefix(t *testing.T) { t.Parallel() conf := ` route: receiver: "default" group_by: [] group_wait: 1s group_interval: 1s repeat_interval: 1h receivers: - name: "default" ` // The test framework polls the API with the given prefix during // Alertmanager startup and thereby ensures proper configuration. at := a.NewAcceptanceTest(t, &a.AcceptanceOpts{RoutePrefix: "/foo"}) at.AlertmanagerCluster(conf, 1) at.Run() } prometheus-alertmanager-0.28.1+ds/test/with_api_v2/collector.go000066400000000000000000000132711476331240200245540ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "encoding/json" "fmt" "sync" "testing" "time" "github.com/prometheus/alertmanager/api/v2/models" ) // Collector gathers alerts received by a notification receiver // and verifies whether all arrived and within the correct time boundaries. type Collector struct { t *testing.T name string opts *AcceptanceOpts collected map[float64][]models.GettableAlerts expected map[Interval][]models.GettableAlerts mtx sync.RWMutex } func (c *Collector) String() string { return c.name } // Collected returns a map of alerts collected by the collector indexed with the // receive timestamp. func (c *Collector) Collected() map[float64][]models.GettableAlerts { c.mtx.RLock() defer c.mtx.RUnlock() return c.collected } func batchesEqual(as, bs models.GettableAlerts, opts *AcceptanceOpts) bool { if len(as) != len(bs) { return false } for _, a := range as { found := false for _, b := range bs { if equalAlerts(a, b, opts) { found = true break } } if !found { return false } } return true } // latest returns the latest relative point in time where a notification is // expected. func (c *Collector) latest() float64 { c.mtx.RLock() defer c.mtx.RUnlock() var latest float64 for iv := range c.expected { if iv.end > latest { latest = iv.end } } return latest } // Want declares that the Collector expects to receive the given alerts // within the given time boundaries. func (c *Collector) Want(iv Interval, alerts ...*TestAlert) { c.mtx.Lock() defer c.mtx.Unlock() var nas models.GettableAlerts for _, a := range alerts { nas = append(nas, a.nativeAlert(c.opts)) } c.expected[iv] = append(c.expected[iv], nas) } // add the given alerts to the collected alerts. func (c *Collector) add(alerts ...*models.GettableAlert) { c.mtx.Lock() defer c.mtx.Unlock() arrival := c.opts.relativeTime(time.Now()) c.collected[arrival] = append(c.collected[arrival], models.GettableAlerts(alerts)) } func (c *Collector) Check() string { report := fmt.Sprintf("\ncollector %q:\n\n", c) c.mtx.RLock() defer c.mtx.RUnlock() for iv, expected := range c.expected { report += fmt.Sprintf("interval %v\n", iv) var alerts []models.GettableAlerts for at, got := range c.collected { if iv.contains(at) { alerts = append(alerts, got...) } } for _, exp := range expected { found := len(exp) == 0 && len(alerts) == 0 report += "---\n" for _, e := range exp { report += fmt.Sprintf("- %v\n", c.opts.alertString(e)) } for _, a := range alerts { if batchesEqual(exp, a, c.opts) { found = true break } } if found { report += " [ ✓ ]\n" } else { c.t.Fail() report += " [ ✗ ]\n" } } } // Detect unexpected notifications. var totalExp, totalAct int for _, exp := range c.expected { for _, e := range exp { totalExp += len(e) } } for _, act := range c.collected { for _, a := range act { if len(a) == 0 { c.t.Error("received empty notifications") } totalAct += len(a) } } if totalExp != totalAct { c.t.Fail() report += fmt.Sprintf("\nExpected total of %d alerts, got %d", totalExp, totalAct) } if c.t.Failed() { report += "\nreceived:\n" for at, col := range c.collected { for _, alerts := range col { report += fmt.Sprintf("@ %v\n", at) for _, a := range alerts { report += fmt.Sprintf("- %v\n", c.opts.alertString(a)) } } } } return report } // alertsToString returns a string representation of the given Alerts. Use for // debugging. func alertsToString(as []*models.GettableAlert) (string, error) { b, err := json.Marshal(as) if err != nil { return "", err } return string(b), nil } // CompareCollectors compares two collectors based on their collected alerts. func CompareCollectors(a, b *Collector, opts *AcceptanceOpts) (bool, error) { f := func(collected map[float64][]models.GettableAlerts) []*models.GettableAlert { result := []*models.GettableAlert{} for _, batches := range collected { for _, batch := range batches { for _, alert := range batch { result = append(result, alert) } } } return result } aAlerts := f(a.Collected()) bAlerts := f(b.Collected()) if len(aAlerts) != len(bAlerts) { aAsString, err := alertsToString(aAlerts) if err != nil { return false, err } bAsString, err := alertsToString(bAlerts) if err != nil { return false, err } err = fmt.Errorf( "first collector has %v alerts, second collector has %v alerts\n%v\n%v", len(aAlerts), len(bAlerts), aAsString, bAsString, ) return false, err } for _, aAlert := range aAlerts { found := false for _, bAlert := range bAlerts { if equalAlerts(aAlert, bAlert, opts) { found = true break } } if !found { aAsString, err := alertsToString([]*models.GettableAlert{aAlert}) if err != nil { return false, err } bAsString, err := alertsToString(bAlerts) if err != nil { return false, err } err = fmt.Errorf( "could not find matching alert for alert from first collector\n%v\nin alerts of second collector\n%v", aAsString, bAsString, ) return false, err } } return true, nil } prometheus-alertmanager-0.28.1+ds/test/with_api_v2/mock.go000066400000000000000000000166161476331240200235250ustar00rootroot00000000000000// Copyright 2018 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package test import ( "encoding/json" "fmt" "net/http" "net/http/httptest" "reflect" "sync" "testing" "time" "github.com/go-openapi/strfmt" "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/notify/webhook" ) // At is a convenience method to allow for declarative syntax of Acceptance // test definitions. func At(ts float64) float64 { return ts } type Interval struct { start, end float64 } func (iv Interval) String() string { return fmt.Sprintf("[%v,%v]", iv.start, iv.end) } func (iv Interval) contains(f float64) bool { return f >= iv.start && f <= iv.end } // Between is a convenience constructor for an interval for declarative syntax // of Acceptance test definitions. func Between(start, end float64) Interval { return Interval{start: start, end: end} } // TestSilence models a model.Silence with relative times. type TestSilence struct { id string match []string matchRE []string startsAt, endsAt float64 mtx sync.RWMutex } // Silence creates a new TestSilence active for the relative interval given // by start and end. func Silence(start, end float64) *TestSilence { return &TestSilence{ startsAt: start, endsAt: end, } } // Match adds a new plain matcher to the silence. func (s *TestSilence) Match(v ...string) *TestSilence { s.match = append(s.match, v...) return s } // MatchRE adds a new regex matcher to the silence. func (s *TestSilence) MatchRE(v ...string) *TestSilence { if len(v)%2 == 1 { panic("bad key/values") } s.matchRE = append(s.matchRE, v...) return s } // SetID sets the silence ID. func (s *TestSilence) SetID(ID string) { s.mtx.Lock() defer s.mtx.Unlock() s.id = ID } // ID gets the silence ID. func (s *TestSilence) ID() string { s.mtx.RLock() defer s.mtx.RUnlock() return s.id } // nativeSilence converts the declared test silence into a regular // silence with resolved times. func (s *TestSilence) nativeSilence(opts *AcceptanceOpts) *models.Silence { nsil := &models.Silence{} t := false for i := 0; i < len(s.match); i += 2 { nsil.Matchers = append(nsil.Matchers, &models.Matcher{ Name: &s.match[i], Value: &s.match[i+1], IsRegex: &t, }) } t = true for i := 0; i < len(s.matchRE); i += 2 { nsil.Matchers = append(nsil.Matchers, &models.Matcher{ Name: &s.matchRE[i], Value: &s.matchRE[i+1], IsRegex: &t, }) } if s.startsAt > 0 { start := strfmt.DateTime(opts.expandTime(s.startsAt)) nsil.StartsAt = &start } if s.endsAt > 0 { end := strfmt.DateTime(opts.expandTime(s.endsAt)) nsil.EndsAt = &end } comment := "some comment" createdBy := "admin@example.com" nsil.Comment = &comment nsil.CreatedBy = &createdBy return nsil } // TestAlert models a model.Alert with relative times. type TestAlert struct { labels models.LabelSet annotations models.LabelSet startsAt, endsAt float64 } // Alert creates a new alert declaration with the given key/value pairs // as identifying labels. func Alert(keyval ...interface{}) *TestAlert { if len(keyval)%2 == 1 { panic("bad key/values") } a := &TestAlert{ labels: models.LabelSet{}, annotations: models.LabelSet{}, } for i := 0; i < len(keyval); i += 2 { ln := keyval[i].(string) lv := keyval[i+1].(string) a.labels[ln] = lv } return a } // nativeAlert converts the declared test alert into a full alert based // on the given parameters. func (a *TestAlert) nativeAlert(opts *AcceptanceOpts) *models.GettableAlert { na := &models.GettableAlert{ Alert: models.Alert{ Labels: a.labels, }, Annotations: a.annotations, StartsAt: &strfmt.DateTime{}, EndsAt: &strfmt.DateTime{}, } if a.startsAt > 0 { start := strfmt.DateTime(opts.expandTime(a.startsAt)) na.StartsAt = &start } if a.endsAt > 0 { end := strfmt.DateTime(opts.expandTime(a.endsAt)) na.EndsAt = &end } return na } // Annotate the alert with the given key/value pairs. func (a *TestAlert) Annotate(keyval ...interface{}) *TestAlert { if len(keyval)%2 == 1 { panic("bad key/values") } for i := 0; i < len(keyval); i += 2 { ln := keyval[i].(string) lv := keyval[i+1].(string) a.annotations[ln] = lv } return a } // Active declares the relative activity time for this alert. It // must be a single starting value or two values where the second value // declares the resolved time. func (a *TestAlert) Active(tss ...float64) *TestAlert { if len(tss) > 2 || len(tss) == 0 { panic("only one or two timestamps allowed") } if len(tss) == 2 { a.endsAt = tss[1] } a.startsAt = tss[0] return a } func equalAlerts(a, b *models.GettableAlert, opts *AcceptanceOpts) bool { if !reflect.DeepEqual(a.Labels, b.Labels) { return false } if !reflect.DeepEqual(a.Annotations, b.Annotations) { return false } if !equalTime(time.Time(*a.StartsAt), time.Time(*b.StartsAt), opts) { return false } if (a.EndsAt == nil) != (b.EndsAt == nil) { return false } if !(a.EndsAt == nil) && !(b.EndsAt == nil) && !equalTime(time.Time(*a.EndsAt), time.Time(*b.EndsAt), opts) { return false } return true } func equalTime(a, b time.Time, opts *AcceptanceOpts) bool { if a.IsZero() != b.IsZero() { return false } diff := a.Sub(b) if diff < 0 { diff = -diff } return diff <= opts.Tolerance } type MockWebhook struct { opts *AcceptanceOpts collector *Collector addr string // Func is called early on when retrieving a notification by an // Alertmanager. If Func returns true, the given notification is dropped. // See sample usage in `send_test.go/TestRetry()`. Func func(timestamp float64) bool } func NewWebhook(t *testing.T, c *Collector) *MockWebhook { t.Helper() wh := &MockWebhook{ collector: c, opts: c.opts, } server := httptest.NewServer(wh) wh.addr = server.Listener.Addr().String() t.Cleanup(func() { server.Close() }) return wh } func (ws *MockWebhook) ServeHTTP(w http.ResponseWriter, req *http.Request) { // Inject Func if it exists. if ws.Func != nil { if ws.Func(ws.opts.relativeTime(time.Now())) { return } } dec := json.NewDecoder(req.Body) defer req.Body.Close() var v webhook.Message if err := dec.Decode(&v); err != nil { panic(err) } // Transform the webhook message alerts back into model.Alerts. var alerts models.GettableAlerts for _, a := range v.Alerts { var ( labels = models.LabelSet{} annotations = models.LabelSet{} ) for k, v := range a.Labels { labels[k] = v } for k, v := range a.Annotations { annotations[k] = v } start := strfmt.DateTime(a.StartsAt) end := strfmt.DateTime(a.EndsAt) alerts = append(alerts, &models.GettableAlert{ Alert: models.Alert{ Labels: labels, GeneratorURL: strfmt.URI(a.GeneratorURL), }, Annotations: annotations, StartsAt: &start, EndsAt: &end, }) } ws.collector.add(alerts...) } func (ws *MockWebhook) Address() string { return ws.addr } prometheus-alertmanager-0.28.1+ds/timeinterval/000077500000000000000000000000001476331240200215445ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/timeinterval/timeinterval.go000066400000000000000000000431131476331240200246000ustar00rootroot00000000000000// Copyright 2020 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package timeinterval import ( "encoding/json" "errors" "fmt" "os" "regexp" "runtime" "strconv" "strings" "time" "gopkg.in/yaml.v2" ) // Intervener determines whether a given time and active route time interval should mute outgoing notifications. // It implements the TimeMuter interface. type Intervener struct { intervals map[string][]TimeInterval } // Mutes implements the TimeMuter interface. func (i *Intervener) Mutes(names []string, now time.Time) (bool, []string, error) { var in []string for _, name := range names { interval, ok := i.intervals[name] if !ok { return false, nil, fmt.Errorf("time interval %s doesn't exist in config", name) } for _, ti := range interval { if ti.ContainsTime(now.UTC()) { in = append(in, name) } } } return len(in) > 0, in, nil } func NewIntervener(ti map[string][]TimeInterval) *Intervener { return &Intervener{ intervals: ti, } } // TimeInterval describes intervals of time. ContainsTime will tell you if a golang time is contained // within the interval. type TimeInterval struct { Times []TimeRange `yaml:"times,omitempty" json:"times,omitempty"` Weekdays []WeekdayRange `yaml:"weekdays,flow,omitempty" json:"weekdays,omitempty"` DaysOfMonth []DayOfMonthRange `yaml:"days_of_month,flow,omitempty" json:"days_of_month,omitempty"` Months []MonthRange `yaml:"months,flow,omitempty" json:"months,omitempty"` Years []YearRange `yaml:"years,flow,omitempty" json:"years,omitempty"` Location *Location `yaml:"location,flow,omitempty" json:"location,omitempty"` } // TimeRange represents a range of minutes within a 1440 minute day, exclusive of the End minute. A day consists of 1440 minutes. // For example, 4:00PM to End of the day would Begin at 1020 and End at 1440. type TimeRange struct { StartMinute int EndMinute int } // InclusiveRange is used to hold the Beginning and End values of many time interval components. type InclusiveRange struct { Begin int End int } // A WeekdayRange is an inclusive range between [0, 6] where 0 = Sunday. type WeekdayRange struct { InclusiveRange } // A DayOfMonthRange is an inclusive range that may have negative Beginning/End values that represent distance from the End of the month Beginning at -1. type DayOfMonthRange struct { InclusiveRange } // A MonthRange is an inclusive range between [1, 12] where 1 = January. type MonthRange struct { InclusiveRange } // A YearRange is a positive inclusive range. type YearRange struct { InclusiveRange } // A Location is a container for a time.Location, used for custom unmarshalling/validation logic. type Location struct { *time.Location } type yamlTimeRange struct { StartTime string `yaml:"start_time" json:"start_time"` EndTime string `yaml:"end_time" json:"end_time"` } // A range with a Beginning and End that can be represented as strings. type stringableRange interface { setBegin(int) setEnd(int) // Try to map a member of the range into an integer. memberFromString(string) (int, error) } func (ir *InclusiveRange) setBegin(n int) { ir.Begin = n } func (ir *InclusiveRange) setEnd(n int) { ir.End = n } func (ir *InclusiveRange) memberFromString(in string) (out int, err error) { out, err = strconv.Atoi(in) if err != nil { return -1, err } return out, nil } func (r *WeekdayRange) memberFromString(in string) (out int, err error) { out, ok := daysOfWeek[in] if !ok { return -1, fmt.Errorf("%s is not a valid weekday", in) } return out, nil } func (r *MonthRange) memberFromString(in string) (out int, err error) { out, ok := months[in] if !ok { out, err = strconv.Atoi(in) if err != nil { return -1, fmt.Errorf("%s is not a valid month", in) } } return out, nil } var daysOfWeek = map[string]int{ "sunday": 0, "monday": 1, "tuesday": 2, "wednesday": 3, "thursday": 4, "friday": 5, "saturday": 6, } var daysOfWeekInv = map[int]string{ 0: "sunday", 1: "monday", 2: "tuesday", 3: "wednesday", 4: "thursday", 5: "friday", 6: "saturday", } var months = map[string]int{ "january": 1, "february": 2, "march": 3, "april": 4, "may": 5, "june": 6, "july": 7, "august": 8, "september": 9, "october": 10, "november": 11, "december": 12, } var monthsInv = map[int]string{ 1: "january", 2: "february", 3: "march", 4: "april", 5: "may", 6: "june", 7: "july", 8: "august", 9: "september", 10: "october", 11: "november", 12: "december", } // UnmarshalYAML implements the Unmarshaller interface for Location. func (tz *Location) UnmarshalYAML(unmarshal func(interface{}) error) error { var str string if err := unmarshal(&str); err != nil { return err } loc, err := time.LoadLocation(str) if err != nil { if runtime.GOOS == "windows" { if zoneinfo := os.Getenv("ZONEINFO"); zoneinfo != "" { return fmt.Errorf("%w (ZONEINFO=%q)", err, zoneinfo) } return fmt.Errorf("%w (on Windows platforms, you may have to pass the time zone database using the ZONEINFO environment variable, see https://pkg.go.dev/time#LoadLocation for details)", err) } return err } *tz = Location{loc} return nil } // UnmarshalJSON implements the json.Unmarshaler interface for Location. // It delegates to the YAML unmarshaller as it can parse JSON and has validation logic. func (tz *Location) UnmarshalJSON(in []byte) error { return yaml.Unmarshal(in, tz) } // UnmarshalYAML implements the Unmarshaller interface for WeekdayRange. func (r *WeekdayRange) UnmarshalYAML(unmarshal func(interface{}) error) error { var str string if err := unmarshal(&str); err != nil { return err } if err := stringableRangeFromString(str, r); err != nil { return err } if r.Begin > r.End { return errors.New("start day cannot be before end day") } if r.Begin < 0 || r.Begin > 6 { return fmt.Errorf("%s is not a valid day of the week: out of range", str) } if r.End < 0 || r.End > 6 { return fmt.Errorf("%s is not a valid day of the week: out of range", str) } return nil } // UnmarshalJSON implements the json.Unmarshaler interface for WeekdayRange. // It delegates to the YAML unmarshaller as it can parse JSON and has validation logic. func (r *WeekdayRange) UnmarshalJSON(in []byte) error { return yaml.Unmarshal(in, r) } // UnmarshalYAML implements the Unmarshaller interface for DayOfMonthRange. func (r *DayOfMonthRange) UnmarshalYAML(unmarshal func(interface{}) error) error { var str string if err := unmarshal(&str); err != nil { return err } if err := stringableRangeFromString(str, r); err != nil { return err } // Check beginning <= end accounting for negatives day of month indices as well. // Months != 31 days can't be addressed here and are clamped, but at least we can catch blatant errors. if r.Begin == 0 || r.Begin < -31 || r.Begin > 31 { return fmt.Errorf("%d is not a valid day of the month: out of range", r.Begin) } if r.End == 0 || r.End < -31 || r.End > 31 { return fmt.Errorf("%d is not a valid day of the month: out of range", r.End) } // Restricting here prevents errors where begin > end in longer months but not shorter months. if r.Begin < 0 && r.End > 0 { return fmt.Errorf("end day must be negative if start day is negative") } // Check begin <= end. We can't know this for sure when using negative indices // but we can prevent cases where its always invalid (using 28 day minimum length). checkBegin := r.Begin checkEnd := r.End if r.Begin < 0 { checkBegin = 28 + r.Begin } if r.End < 0 { checkEnd = 28 + r.End } if checkBegin > checkEnd { return fmt.Errorf("end day %d is always before start day %d", r.End, r.Begin) } return nil } // UnmarshalJSON implements the json.Unmarshaler interface for DayOfMonthRange. // It delegates to the YAML unmarshaller as it can parse JSON and has validation logic. func (r *DayOfMonthRange) UnmarshalJSON(in []byte) error { return yaml.Unmarshal(in, r) } // UnmarshalYAML implements the Unmarshaller interface for MonthRange. func (r *MonthRange) UnmarshalYAML(unmarshal func(interface{}) error) error { var str string if err := unmarshal(&str); err != nil { return err } if err := stringableRangeFromString(str, r); err != nil { return err } if r.Begin > r.End { begin := monthsInv[r.Begin] end := monthsInv[r.End] return fmt.Errorf("end month %s is before start month %s", end, begin) } return nil } // UnmarshalJSON implements the json.Unmarshaler interface for MonthRange. // It delegates to the YAML unmarshaller as it can parse JSON and has validation logic. func (r *MonthRange) UnmarshalJSON(in []byte) error { return yaml.Unmarshal(in, r) } // UnmarshalYAML implements the Unmarshaller interface for YearRange. func (r *YearRange) UnmarshalYAML(unmarshal func(interface{}) error) error { var str string if err := unmarshal(&str); err != nil { return err } if err := stringableRangeFromString(str, r); err != nil { return err } if r.Begin > r.End { return fmt.Errorf("end year %d is before start year %d", r.End, r.Begin) } return nil } // UnmarshalJSON implements the json.Unmarshaler interface for YearRange. // It delegates to the YAML unmarshaller as it can parse JSON and has validation logic. func (r *YearRange) UnmarshalJSON(in []byte) error { return yaml.Unmarshal(in, r) } // UnmarshalYAML implements the Unmarshaller interface for TimeRanges. func (tr *TimeRange) UnmarshalYAML(unmarshal func(interface{}) error) error { var y yamlTimeRange if err := unmarshal(&y); err != nil { return err } if y.EndTime == "" || y.StartTime == "" { return errors.New("both start and end times must be provided") } start, err := parseTime(y.StartTime) if err != nil { return err } end, err := parseTime(y.EndTime) if err != nil { return err } if start >= end { return errors.New("start time cannot be equal or greater than end time") } tr.StartMinute, tr.EndMinute = start, end return nil } // UnmarshalJSON implements the json.Unmarshaler interface for Timerange. // It delegates to the YAML unmarshaller as it can parse JSON and has validation logic. func (tr *TimeRange) UnmarshalJSON(in []byte) error { return yaml.Unmarshal(in, tr) } // MarshalYAML implements the yaml.Marshaler interface for WeekdayRange. func (r WeekdayRange) MarshalYAML() (interface{}, error) { bytes, err := r.MarshalText() return string(bytes), err } // MarshalText implements the econding.TextMarshaler interface for WeekdayRange. // It converts the range into a colon-separated string, or a single weekday if possible. // E.g. "monday:friday" or "saturday". func (r WeekdayRange) MarshalText() ([]byte, error) { beginStr, ok := daysOfWeekInv[r.Begin] if !ok { return nil, fmt.Errorf("unable to convert %d into weekday string", r.Begin) } if r.Begin == r.End { return []byte(beginStr), nil } endStr, ok := daysOfWeekInv[r.End] if !ok { return nil, fmt.Errorf("unable to convert %d into weekday string", r.End) } rangeStr := fmt.Sprintf("%s:%s", beginStr, endStr) return []byte(rangeStr), nil } // MarshalYAML implements the yaml.Marshaler interface for TimeRange. func (tr TimeRange) MarshalYAML() (out interface{}, err error) { startHr := tr.StartMinute / 60 endHr := tr.EndMinute / 60 startMin := tr.StartMinute % 60 endMin := tr.EndMinute % 60 startStr := fmt.Sprintf("%02d:%02d", startHr, startMin) endStr := fmt.Sprintf("%02d:%02d", endHr, endMin) yTr := yamlTimeRange{startStr, endStr} return interface{}(yTr), err } // MarshalJSON implements the json.Marshaler interface for TimeRange. func (tr TimeRange) MarshalJSON() (out []byte, err error) { startHr := tr.StartMinute / 60 endHr := tr.EndMinute / 60 startMin := tr.StartMinute % 60 endMin := tr.EndMinute % 60 startStr := fmt.Sprintf("%02d:%02d", startHr, startMin) endStr := fmt.Sprintf("%02d:%02d", endHr, endMin) yTr := yamlTimeRange{startStr, endStr} return json.Marshal(yTr) } // MarshalText implements the econding.TextMarshaler interface for Location. // It marshals a Location back into a string that represents a time.Location. func (tz Location) MarshalText() ([]byte, error) { if tz.Location == nil { return nil, fmt.Errorf("unable to convert nil location into string") } return []byte(tz.Location.String()), nil } // MarshalYAML implements the yaml.Marshaler interface for Location. func (tz Location) MarshalYAML() (interface{}, error) { bytes, err := tz.MarshalText() return string(bytes), err } // MarshalJSON implements the json.Marshaler interface for Location. func (tz Location) MarshalJSON() (out []byte, err error) { return json.Marshal(tz.String()) } // MarshalText implements the encoding.TextMarshaler interface for InclusiveRange. // It converts the struct into a colon-separated string, or a single element if // appropriate. E.g. "monday:friday" or "monday". func (ir InclusiveRange) MarshalText() ([]byte, error) { if ir.Begin == ir.End { return []byte(strconv.Itoa(ir.Begin)), nil } out := fmt.Sprintf("%d:%d", ir.Begin, ir.End) return []byte(out), nil } // MarshalYAML implements the yaml.Marshaler interface for InclusiveRange. func (ir InclusiveRange) MarshalYAML() (interface{}, error) { bytes, err := ir.MarshalText() return string(bytes), err } var ( validTime = "^((([01][0-9])|(2[0-3])):[0-5][0-9])$|(^24:00$)" validTimeRE = regexp.MustCompile(validTime) ) // Given a time, determines the number of days in the month that time occurs in. func daysInMonth(t time.Time) int { monthStart := time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, t.Location()) monthEnd := monthStart.AddDate(0, 1, 0) diff := monthEnd.Sub(monthStart) return int(diff.Hours() / 24) } func clamp(n, min, max int) int { if n <= min { return min } if n >= max { return max } return n } // ContainsTime returns true if the TimeInterval contains the given time, otherwise returns false. func (tp TimeInterval) ContainsTime(t time.Time) bool { if tp.Location != nil { t = t.In(tp.Location.Location) } if tp.Times != nil { in := false for _, validMinutes := range tp.Times { if (t.Hour()*60+t.Minute()) >= validMinutes.StartMinute && (t.Hour()*60+t.Minute()) < validMinutes.EndMinute { in = true break } } if !in { return false } } if tp.DaysOfMonth != nil { in := false for _, validDates := range tp.DaysOfMonth { var begin, end int daysInMonth := daysInMonth(t) if validDates.Begin < 0 { begin = daysInMonth + validDates.Begin + 1 } else { begin = validDates.Begin } if validDates.End < 0 { end = daysInMonth + validDates.End + 1 } else { end = validDates.End } // Skip clamping if the beginning date is after the end of the month. if begin > daysInMonth { continue } // Clamp to the boundaries of the month to prevent crossing into other months. begin = clamp(begin, -1*daysInMonth, daysInMonth) end = clamp(end, -1*daysInMonth, daysInMonth) if t.Day() >= begin && t.Day() <= end { in = true break } } if !in { return false } } if tp.Months != nil { in := false for _, validMonths := range tp.Months { if t.Month() >= time.Month(validMonths.Begin) && t.Month() <= time.Month(validMonths.End) { in = true break } } if !in { return false } } if tp.Weekdays != nil { in := false for _, validDays := range tp.Weekdays { if t.Weekday() >= time.Weekday(validDays.Begin) && t.Weekday() <= time.Weekday(validDays.End) { in = true break } } if !in { return false } } if tp.Years != nil { in := false for _, validYears := range tp.Years { if t.Year() >= validYears.Begin && t.Year() <= validYears.End { in = true break } } if !in { return false } } return true } // Converts a string of the form "HH:MM" into the number of minutes elapsed in the day. func parseTime(in string) (mins int, err error) { if !validTimeRE.MatchString(in) { return 0, fmt.Errorf("couldn't parse timestamp %s, invalid format", in) } timestampComponents := strings.Split(in, ":") if len(timestampComponents) != 2 { return 0, fmt.Errorf("invalid timestamp format: %s", in) } timeStampHours, err := strconv.Atoi(timestampComponents[0]) if err != nil { return 0, err } timeStampMinutes, err := strconv.Atoi(timestampComponents[1]) if err != nil { return 0, err } if timeStampHours < 0 || timeStampHours > 24 || timeStampMinutes < 0 || timeStampMinutes > 60 { return 0, fmt.Errorf("timestamp %s out of range", in) } // Timestamps are stored as minutes elapsed in the day, so multiply hours by 60. mins = timeStampHours*60 + timeStampMinutes return mins, nil } // Converts a range that can be represented as strings (e.g. monday:wednesday) into an equivalent integer-represented range. func stringableRangeFromString(in string, r stringableRange) (err error) { in = strings.ToLower(in) if strings.ContainsRune(in, ':') { components := strings.Split(in, ":") if len(components) != 2 { return fmt.Errorf("couldn't parse range %s, invalid format", in) } start, err := r.memberFromString(components[0]) if err != nil { return err } End, err := r.memberFromString(components[1]) if err != nil { return err } r.setBegin(start) r.setEnd(End) return nil } val, err := r.memberFromString(in) if err != nil { return err } r.setBegin(val) r.setEnd(val) return nil } prometheus-alertmanager-0.28.1+ds/timeinterval/timeinterval_test.go000066400000000000000000000443101476331240200256370ustar00rootroot00000000000000// Copyright 2020 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package timeinterval import ( "encoding/json" "reflect" "sort" "testing" "time" "github.com/stretchr/testify/require" "gopkg.in/yaml.v2" ) var timeIntervalTestCases = []struct { validTimeStrings []string invalidTimeStrings []string timeInterval TimeInterval }{ { timeInterval: TimeInterval{}, validTimeStrings: []string{ "02 Jan 06 15:04 +0000", "03 Jan 07 10:04 +0000", "04 Jan 06 09:04 +0000", }, invalidTimeStrings: []string{}, }, { // 9am to 5pm, monday to friday timeInterval: TimeInterval{ Times: []TimeRange{{StartMinute: 540, EndMinute: 1020}}, Weekdays: []WeekdayRange{{InclusiveRange{Begin: 1, End: 5}}}, }, validTimeStrings: []string{ "04 May 20 15:04 +0000", "05 May 20 10:04 +0000", "09 Jun 20 09:04 +0000", }, invalidTimeStrings: []string{ "03 May 20 15:04 +0000", "04 May 20 08:59 +0000", "05 May 20 05:00 +0000", }, }, { // Easter 2020 timeInterval: TimeInterval{ DaysOfMonth: []DayOfMonthRange{{InclusiveRange{Begin: 4, End: 6}}}, Months: []MonthRange{{InclusiveRange{Begin: 4, End: 4}}}, Years: []YearRange{{InclusiveRange{Begin: 2020, End: 2020}}}, }, validTimeStrings: []string{ "04 Apr 20 15:04 +0000", "05 Apr 20 00:00 +0000", "06 Apr 20 23:05 +0000", }, invalidTimeStrings: []string{ "03 May 18 15:04 +0000", "03 Apr 20 23:59 +0000", "04 Jun 20 23:59 +0000", "06 Apr 19 23:59 +0000", "07 Apr 20 00:00 +0000", }, }, { // Check negative days of month, last 3 days of each month timeInterval: TimeInterval{ DaysOfMonth: []DayOfMonthRange{{InclusiveRange{Begin: -3, End: -1}}}, }, validTimeStrings: []string{ "31 Jan 20 15:04 +0000", "30 Jan 20 15:04 +0000", "29 Jan 20 15:04 +0000", "30 Jun 20 00:00 +0000", "29 Feb 20 23:05 +0000", }, invalidTimeStrings: []string{ "03 May 18 15:04 +0000", "27 Jan 20 15:04 +0000", "03 Apr 20 23:59 +0000", "04 Jun 20 23:59 +0000", "06 Apr 19 23:59 +0000", "07 Apr 20 00:00 +0000", "01 Mar 20 00:00 +0000", }, }, { // Check out of bound days are clamped to month boundaries timeInterval: TimeInterval{ Months: []MonthRange{{InclusiveRange{Begin: 6, End: 6}}}, DaysOfMonth: []DayOfMonthRange{{InclusiveRange{Begin: -31, End: 31}}}, }, validTimeStrings: []string{ "30 Jun 20 00:00 +0000", "01 Jun 20 00:00 +0000", }, invalidTimeStrings: []string{ "31 May 20 00:00 +0000", "1 Jul 20 00:00 +0000", }, }, { // Check alternative timezones can be used to compare times. // AEST 9AM to 5PM, Monday to Friday. timeInterval: TimeInterval{ Times: []TimeRange{{StartMinute: 540, EndMinute: 1020}}, Weekdays: []WeekdayRange{{InclusiveRange{Begin: 1, End: 5}}}, Location: &Location{mustLoadLocation("Australia/Sydney")}, }, validTimeStrings: []string{ "06 Apr 21 13:00 +1000", }, invalidTimeStrings: []string{ "06 Apr 21 13:00 +0000", }, }, { // Check an alternative timezone during daylight savings time. timeInterval: TimeInterval{ Times: []TimeRange{{StartMinute: 540, EndMinute: 1020}}, Weekdays: []WeekdayRange{{InclusiveRange{Begin: 1, End: 5}}}, Months: []MonthRange{{InclusiveRange{Begin: 11, End: 11}}}, Location: &Location{mustLoadLocation("Australia/Sydney")}, }, validTimeStrings: []string{ "01 Nov 21 09:00 +1100", "31 Oct 21 22:00 +0000", }, invalidTimeStrings: []string{ "31 Oct 21 21:00 +0000", }, }, } var timeStringTestCases = []struct { timeString string TimeRange TimeRange expectError bool }{ { timeString: "{'start_time': '00:00', 'end_time': '24:00'}", TimeRange: TimeRange{StartMinute: 0, EndMinute: 1440}, expectError: false, }, { timeString: "{'start_time': '01:35', 'end_time': '17:39'}", TimeRange: TimeRange{StartMinute: 95, EndMinute: 1059}, expectError: false, }, { timeString: "{'start_time': '09:35', 'end_time': '09:39'}", TimeRange: TimeRange{StartMinute: 575, EndMinute: 579}, expectError: false, }, { // Error: Begin and End times are the same timeString: "{'start_time': '17:31', 'end_time': '17:31'}", TimeRange: TimeRange{}, expectError: true, }, { // Error: End time out of range timeString: "{'start_time': '12:30', 'end_time': '24:01'}", TimeRange: TimeRange{}, expectError: true, }, { // Error: Start time greater than End time timeString: "{'start_time': '09:30', 'end_time': '07:41'}", TimeRange: TimeRange{}, expectError: true, }, { // Error: Start time out of range and greater than End time timeString: "{'start_time': '24:00', 'end_time': '17:41'}", TimeRange: TimeRange{}, expectError: true, }, { // Error: No range specified timeString: "{'start_time': '14:03'}", TimeRange: TimeRange{}, expectError: true, }, } var yamlUnmarshalTestCases = []struct { in string intervals []TimeInterval contains []string excludes []string expectError bool err string }{ { // Simple business hours test in: ` --- - weekdays: ['monday:friday'] times: - start_time: '09:00' end_time: '17:00' `, intervals: []TimeInterval{ { Weekdays: []WeekdayRange{{InclusiveRange{Begin: 1, End: 5}}}, Times: []TimeRange{{StartMinute: 540, EndMinute: 1020}}, }, }, contains: []string{ "08 Jul 20 09:00 +0000", "08 Jul 20 16:59 +0000", }, excludes: []string{ "08 Jul 20 05:00 +0000", "08 Jul 20 08:59 +0000", }, expectError: false, }, { // More advanced test with negative indices and ranges in: ` --- # Last week, excluding Saturday, of the first quarter of the year during business hours from 2020 to 2025 and 2030-2035 - weekdays: ['monday:friday', 'sunday'] months: ['january:march'] days_of_month: ['-7:-1'] years: ['2020:2025', '2030:2035'] times: - start_time: '09:00' end_time: '17:00' `, intervals: []TimeInterval{ { Weekdays: []WeekdayRange{{InclusiveRange{Begin: 1, End: 5}}, {InclusiveRange{Begin: 0, End: 0}}}, Times: []TimeRange{{StartMinute: 540, EndMinute: 1020}}, Months: []MonthRange{{InclusiveRange{1, 3}}}, DaysOfMonth: []DayOfMonthRange{{InclusiveRange{-7, -1}}}, Years: []YearRange{{InclusiveRange{2020, 2025}}, {InclusiveRange{2030, 2035}}}, }, }, contains: []string{ "27 Jan 21 09:00 +0000", "28 Jan 21 16:59 +0000", "29 Jan 21 13:00 +0000", "31 Mar 25 13:00 +0000", "31 Mar 25 13:00 +0000", "31 Jan 35 13:00 +0000", }, excludes: []string{ "30 Jan 21 13:00 +0000", // Saturday "01 Apr 21 13:00 +0000", // 4th month "30 Jan 26 13:00 +0000", // 2026 "31 Jan 35 17:01 +0000", // After 5pm }, expectError: false, }, { in: ` --- - weekdays: ['monday:friday'] times: - start_time: '09:00' end_time: '17:00'`, intervals: []TimeInterval{ { Weekdays: []WeekdayRange{{InclusiveRange{Begin: 1, End: 5}}}, Times: []TimeRange{{StartMinute: 540, EndMinute: 1020}}, }, }, contains: []string{ "01 Apr 21 13:00 +0000", }, }, { // Invalid start time. in: ` --- - times: - start_time: '01:99' end_time: '23:59'`, expectError: true, err: "couldn't parse timestamp 01:99, invalid format", }, { // Invalid end time. in: ` --- - times: - start_time: '00:00' end_time: '99:99'`, expectError: true, err: "couldn't parse timestamp 99:99, invalid format", }, { // Start day before end day. in: ` --- - weekdays: ['friday:monday']`, expectError: true, err: "start day cannot be before end day", }, { // Invalid weekdays. in: ` --- - weekdays: ['blurgsday:flurgsday'] `, expectError: true, err: "blurgsday is not a valid weekday", }, { // Numeric weekdays aren't allowed. in: ` --- - weekdays: ['1:3'] `, expectError: true, err: "1 is not a valid weekday", }, { // Negative numeric weekdays aren't allowed. in: ` --- - weekdays: ['-2:-1'] `, expectError: true, err: "-2 is not a valid weekday", }, { // 0 day of month. in: ` --- - days_of_month: ['0'] `, expectError: true, err: "0 is not a valid day of the month: out of range", }, { // Start day of month < 0. in: ` --- - days_of_month: ['-50:-20'] `, expectError: true, err: "-50 is not a valid day of the month: out of range", }, { // End day of month > 31. in: ` --- - days_of_month: ['1:50'] `, expectError: true, err: "50 is not a valid day of the month: out of range", }, { // Negative indices should work. in: ` --- - days_of_month: ['1:-1'] `, intervals: []TimeInterval{ { DaysOfMonth: []DayOfMonthRange{{InclusiveRange{1, -1}}}, }, }, expectError: false, }, { // End day must be negative if begin day is negative. in: ` --- - days_of_month: ['-15:5'] `, expectError: true, err: "end day must be negative if start day is negative", }, { // Negative end date before positive positive start date. in: ` --- - days_of_month: ['10:-25'] `, expectError: true, err: "end day -25 is always before start day 10", }, { // Months should work regardless of case in: ` --- - months: ['January:december'] `, expectError: false, intervals: []TimeInterval{ { Months: []MonthRange{{InclusiveRange{1, 12}}}, }, }, }, { // Time zones may be specified by location. in: ` --- - years: ['2020:2022'] location: 'Australia/Sydney' `, expectError: false, intervals: []TimeInterval{ { Years: []YearRange{{InclusiveRange{2020, 2022}}}, Location: &Location{mustLoadLocation("Australia/Sydney")}, }, }, }, { // Invalid start month. in: ` --- - months: ['martius:june'] `, expectError: true, err: "martius is not a valid month", }, { // Invalid end month. in: ` --- - months: ['march:junius'] `, expectError: true, err: "junius is not a valid month", }, { // Start month after end month. in: ` --- - months: ['december:january'] `, expectError: true, err: "end month january is before start month december", }, { // Start year after end year. in: ` --- - years: ['2022:2020'] `, expectError: true, err: "end year 2020 is before start year 2022", }, } func TestYamlUnmarshal(t *testing.T) { for _, tc := range yamlUnmarshalTestCases { var ti []TimeInterval err := yaml.Unmarshal([]byte(tc.in), &ti) if err != nil && !tc.expectError { t.Errorf("Received unexpected error: %v when parsing %v", err, tc.in) } else if err == nil && tc.expectError { t.Errorf("Expected error when unmarshalling %s but didn't receive one", tc.in) } else if err != nil && tc.expectError { if err.Error() != tc.err { t.Errorf("Incorrect error: Want %s, got %s", tc.err, err.Error()) } continue } if !reflect.DeepEqual(ti, tc.intervals) { t.Errorf("Error unmarshalling %s: Want %+v, got %+v", tc.in, tc.intervals, ti) } for _, ts := range tc.contains { _t, _ := time.Parse(time.RFC822Z, ts) isContained := false for _, interval := range ti { if interval.ContainsTime(_t) { isContained = true } } if !isContained { t.Errorf("Expected intervals to contain time %s", _t) } } for _, ts := range tc.excludes { _t, _ := time.Parse(time.RFC822Z, ts) isContained := false for _, interval := range ti { if interval.ContainsTime(_t) { isContained = true } } if isContained { t.Errorf("Expected intervals to exclude time %s", _t) } } } } func TestContainsTime(t *testing.T) { for _, tc := range timeIntervalTestCases { for _, ts := range tc.validTimeStrings { _t, _ := time.Parse(time.RFC822Z, ts) if !tc.timeInterval.ContainsTime(_t) { t.Errorf("Expected period %+v to contain %+v", tc.timeInterval, _t) } } for _, ts := range tc.invalidTimeStrings { _t, _ := time.Parse(time.RFC822Z, ts) if tc.timeInterval.ContainsTime(_t) { t.Errorf("Period %+v not expected to contain %+v", tc.timeInterval, _t) } } } } func TestParseTimeString(t *testing.T) { for _, tc := range timeStringTestCases { var tr TimeRange err := yaml.Unmarshal([]byte(tc.timeString), &tr) if err != nil && !tc.expectError { t.Errorf("Received unexpected error: %v when parsing %v", err, tc.timeString) } else if err == nil && tc.expectError { t.Errorf("Expected error for invalid string %s but didn't receive one", tc.timeString) } else if !reflect.DeepEqual(tr, tc.TimeRange) { t.Errorf("Error parsing time string %s: Want %+v, got %+v", tc.timeString, tc.TimeRange, tr) } } } func TestYamlMarshal(t *testing.T) { for _, tc := range yamlUnmarshalTestCases { if tc.expectError { continue } var ti []TimeInterval err := yaml.Unmarshal([]byte(tc.in), &ti) if err != nil { t.Error(err) } out, err := yaml.Marshal(&ti) if err != nil { t.Error(err) } var ti2 []TimeInterval yaml.Unmarshal(out, &ti2) if !reflect.DeepEqual(ti, ti2) { t.Errorf("Re-marshalling %s produced a different TimeInterval.", tc.in) } } } // Test JSON marshalling by marshalling a time interval // and then unmarshalling to ensure they're identical. func TestJsonMarshal(t *testing.T) { for _, tc := range yamlUnmarshalTestCases { if tc.expectError { continue } var ti []TimeInterval err := yaml.Unmarshal([]byte(tc.in), &ti) if err != nil { t.Error(err) } out, err := json.Marshal(&ti) if err != nil { t.Error(err) } var ti2 []TimeInterval json.Unmarshal(out, &ti2) if !reflect.DeepEqual(ti, ti2) { t.Errorf("Re-marshalling %s produced a different TimeInterval. Used:\n%s and got:\n%v", tc.in, out, ti2) } } } var completeTestCases = []struct { in string contains []string excludes []string }{ { in: ` --- weekdays: ['monday:wednesday', 'saturday', 'sunday'] times: - start_time: '13:00' end_time: '15:00' days_of_month: ['1', '10', '20:-1'] years: ['2020:2023'] months: ['january:march'] `, contains: []string{ "10 Jan 21 13:00 +0000", "30 Jan 21 14:24 +0000", }, excludes: []string{ "09 Jan 21 13:00 +0000", "20 Jan 21 12:59 +0000", "02 Feb 21 13:00 +0000", }, }, { // Check for broken clamping (clamping begin date after end of month to the end of the month) in: ` --- days_of_month: ['30:31'] years: ['2020:2023'] months: ['february'] `, excludes: []string{ "28 Feb 21 13:00 +0000", }, }, } // Tests the entire flow from unmarshalling to containing a time. func TestTimeIntervalComplete(t *testing.T) { for _, tc := range completeTestCases { var ti TimeInterval if err := yaml.Unmarshal([]byte(tc.in), &ti); err != nil { t.Error(err) } for _, ts := range tc.contains { tt, err := time.Parse(time.RFC822Z, ts) if err != nil { t.Error(err) } if !ti.ContainsTime(tt) { t.Errorf("Expected %s to contain %s", tc.in, ts) } } for _, ts := range tc.excludes { tt, err := time.Parse(time.RFC822Z, ts) if err != nil { t.Error(err) } if ti.ContainsTime(tt) { t.Errorf("Expected %s to exclude %s", tc.in, ts) } } } } // Utility function for declaring time locations in test cases. Panic if the location can't be loaded. func mustLoadLocation(name string) *time.Location { loc, err := time.LoadLocation(name) if err != nil { panic(err) } return loc } func TestIntervener_Mutes(t *testing.T) { sydney, err := time.LoadLocation("Australia/Sydney") if err != nil { t.Fatalf("Failed to load location Australia/Sydney: %s", err) } eveningsAndWeekends := map[string][]TimeInterval{ "evenings": {{ Times: []TimeRange{{ StartMinute: 0, // 00:00 EndMinute: 540, // 09:00 }, { StartMinute: 1020, // 17:00 EndMinute: 1440, // 24:00 }}, Location: &Location{Location: sydney}, }}, "weekends": {{ Weekdays: []WeekdayRange{{ InclusiveRange: InclusiveRange{Begin: 6, End: 6}, // Saturday }, { InclusiveRange: InclusiveRange{Begin: 0, End: 0}, // Sunday }}, Location: &Location{Location: sydney}, }}, } tests := []struct { name string intervals map[string][]TimeInterval now time.Time mutedBy []string }{{ name: "Should be muted outside working hours", intervals: eveningsAndWeekends, now: time.Date(2024, 1, 1, 0, 0, 0, 0, sydney), mutedBy: []string{"evenings"}, }, { name: "Should not be muted during working hours", intervals: eveningsAndWeekends, now: time.Date(2024, 1, 1, 9, 0, 0, 0, sydney), mutedBy: nil, }, { name: "Should be muted during weekends", intervals: eveningsAndWeekends, now: time.Date(2024, 1, 6, 10, 0, 0, 0, sydney), mutedBy: []string{"weekends"}, }, { name: "Should be muted during weekend evenings", intervals: eveningsAndWeekends, now: time.Date(2024, 1, 6, 17, 0, 0, 0, sydney), mutedBy: []string{"evenings", "weekends"}, }, { name: "Should be muted at 12pm UTC on a weekday", intervals: eveningsAndWeekends, now: time.Date(2024, 1, 1, 10, 0, 0, 0, time.UTC), mutedBy: []string{"evenings"}, }, { name: "Should be muted at 12pm UTC on a weekend", intervals: eveningsAndWeekends, now: time.Date(2024, 1, 6, 10, 0, 0, 0, time.UTC), mutedBy: []string{"evenings", "weekends"}, }} for _, test := range tests { t.Run(test.name, func(t *testing.T) { intervener := NewIntervener(test.intervals) // Get the names of all time intervals for the context. timeIntervalNames := make([]string, 0, len(test.intervals)) for name := range test.intervals { timeIntervalNames = append(timeIntervalNames, name) } // Sort the names so we can compare mutedBy with test.mutedBy. sort.Strings(timeIntervalNames) isMuted, mutedBy, err := intervener.Mutes(timeIntervalNames, test.now) require.NoError(t, err) if len(test.mutedBy) == 0 { require.False(t, isMuted) require.Empty(t, mutedBy) } else { require.True(t, isMuted) require.Equal(t, test.mutedBy, mutedBy) } }) } } prometheus-alertmanager-0.28.1+ds/types/000077500000000000000000000000001476331240200202055ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/types/types.go000066400000000000000000000401031476331240200216760ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package types import ( "fmt" "strings" "sync" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/prometheus/alertmanager/matcher/compat" "github.com/prometheus/alertmanager/pkg/labels" ) // AlertState is used as part of AlertStatus. type AlertState string // Possible values for AlertState. const ( AlertStateUnprocessed AlertState = "unprocessed" AlertStateActive AlertState = "active" AlertStateSuppressed AlertState = "suppressed" ) // AlertStatus stores the state of an alert and, as applicable, the IDs of // silences silencing the alert and of other alerts inhibiting the alert. Note // that currently, SilencedBy is supposed to be the complete set of the relevant // silences while InhibitedBy may contain only a subset of the inhibiting alerts // – in practice exactly one ID. (This somewhat confusing semantics might change // in the future.) type AlertStatus struct { State AlertState `json:"state"` SilencedBy []string `json:"silencedBy"` InhibitedBy []string `json:"inhibitedBy"` // For internal tracking, not exposed in the API. pendingSilences []string silencesVersion int } // groupStatus stores the state of the group, and, as applicable, the names // of all active and mute time intervals that are muting it. type groupStatus struct { // mutedBy contains the names of all active and mute time intervals that // are muting it. mutedBy []string } // AlertMarker helps to mark alerts as silenced and/or inhibited. // All methods are goroutine-safe. type AlertMarker interface { // SetActiveOrSilenced replaces the previous SilencedBy by the provided IDs of // active and pending silences, including the version number of the // silences state. The set of provided IDs is supposed to represent the // complete set of relevant silences. If no active silence IDs are provided and // InhibitedBy is already empty, it sets the provided alert to AlertStateActive. // Otherwise, it sets the provided alert to AlertStateSuppressed. SetActiveOrSilenced(alert model.Fingerprint, version int, activeSilenceIDs, pendingSilenceIDs []string) // SetInhibited replaces the previous InhibitedBy by the provided IDs of // alerts. In contrast to SetActiveOrSilenced, the set of provided IDs is not // expected to represent the complete set of inhibiting alerts. (In // practice, this method is only called with one or zero IDs. However, // this expectation might change in the future. If no IDs are provided // and InhibitedBy is already empty, it sets the provided alert to // AlertStateActive. Otherwise, it sets the provided alert to // AlertStateSuppressed. SetInhibited(alert model.Fingerprint, alertIDs ...string) // Count alerts of the given state(s). With no state provided, count all // alerts. Count(...AlertState) int // Status of the given alert. Status(model.Fingerprint) AlertStatus // Delete the given alert. Delete(model.Fingerprint) // Various methods to inquire if the given alert is in a certain // AlertState. Silenced also returns all the active and pending // silences, while Inhibited may return only a subset of inhibiting // alerts. Silenced also returns the version of the silences state the // result is based on. Unprocessed(model.Fingerprint) bool Active(model.Fingerprint) bool Silenced(model.Fingerprint) (activeIDs, pendingIDs []string, version int, silenced bool) Inhibited(model.Fingerprint) ([]string, bool) } // GroupMarker helps to mark groups as active or muted. // All methods are goroutine-safe. // // TODO(grobinson): routeID is used in Muted and SetMuted because groupKey // is not unique (see #3817). Once groupKey uniqueness is fixed routeID can // be removed from the GroupMarker interface. type GroupMarker interface { // Muted returns true if the group is muted, otherwise false. If the group // is muted then it also returns the names of the time intervals that muted // it. Muted(routeID, groupKey string) ([]string, bool) // SetMuted marks the group as muted, and sets the names of the time // intervals that mute it. If the list of names is nil or the empty slice // then the muted marker is removed. SetMuted(routeID, groupKey string, timeIntervalNames []string) // DeleteByGroupKey removes all markers for the GroupKey. DeleteByGroupKey(routeID, groupKey string) } // NewMarker returns an instance of a AlertMarker implementation. func NewMarker(r prometheus.Registerer) *MemMarker { m := &MemMarker{ alerts: map[model.Fingerprint]*AlertStatus{}, groups: map[string]*groupStatus{}, } m.registerMetrics(r) return m } type MemMarker struct { alerts map[model.Fingerprint]*AlertStatus groups map[string]*groupStatus mtx sync.RWMutex } // Muted implements GroupMarker. func (m *MemMarker) Muted(routeID, groupKey string) ([]string, bool) { m.mtx.Lock() defer m.mtx.Unlock() status, ok := m.groups[routeID+groupKey] if !ok { return nil, false } return status.mutedBy, len(status.mutedBy) > 0 } // SetMuted implements GroupMarker. func (m *MemMarker) SetMuted(routeID, groupKey string, timeIntervalNames []string) { m.mtx.Lock() defer m.mtx.Unlock() status, ok := m.groups[routeID+groupKey] if !ok { status = &groupStatus{} m.groups[routeID+groupKey] = status } status.mutedBy = timeIntervalNames } func (m *MemMarker) DeleteByGroupKey(routeID, groupKey string) { m.mtx.Lock() defer m.mtx.Unlock() delete(m.groups, routeID+groupKey) } func (m *MemMarker) registerMetrics(r prometheus.Registerer) { newMarkedAlertMetricByState := func(st AlertState) prometheus.GaugeFunc { return prometheus.NewGaugeFunc( prometheus.GaugeOpts{ Name: "alertmanager_marked_alerts", Help: "How many alerts by state are currently marked in the Alertmanager regardless of their expiry.", ConstLabels: prometheus.Labels{"state": string(st)}, }, func() float64 { return float64(m.Count(st)) }, ) } alertsActive := newMarkedAlertMetricByState(AlertStateActive) alertsSuppressed := newMarkedAlertMetricByState(AlertStateSuppressed) alertStateUnprocessed := newMarkedAlertMetricByState(AlertStateUnprocessed) r.MustRegister(alertsActive) r.MustRegister(alertsSuppressed) r.MustRegister(alertStateUnprocessed) } // Count implements AlertMarker. func (m *MemMarker) Count(states ...AlertState) int { m.mtx.RLock() defer m.mtx.RUnlock() if len(states) == 0 { return len(m.alerts) } var count int for _, status := range m.alerts { for _, state := range states { if status.State == state { count++ } } } return count } // SetActiveOrSilenced implements AlertMarker. func (m *MemMarker) SetActiveOrSilenced(alert model.Fingerprint, version int, activeIDs, pendingIDs []string) { m.mtx.Lock() defer m.mtx.Unlock() s, found := m.alerts[alert] if !found { s = &AlertStatus{} m.alerts[alert] = s } s.SilencedBy = activeIDs s.pendingSilences = pendingIDs s.silencesVersion = version // If there are any silence or alert IDs associated with the // fingerprint, it is suppressed. Otherwise, set it to // AlertStateActive. if len(activeIDs) == 0 && len(s.InhibitedBy) == 0 { s.State = AlertStateActive return } s.State = AlertStateSuppressed } // SetInhibited implements AlertMarker. func (m *MemMarker) SetInhibited(alert model.Fingerprint, ids ...string) { m.mtx.Lock() defer m.mtx.Unlock() s, found := m.alerts[alert] if !found { s = &AlertStatus{} m.alerts[alert] = s } s.InhibitedBy = ids // If there are any silence or alert IDs associated with the // fingerprint, it is suppressed. Otherwise, set it to // AlertStateActive. if len(ids) == 0 && len(s.SilencedBy) == 0 { s.State = AlertStateActive return } s.State = AlertStateSuppressed } // Status implements AlertMarker. func (m *MemMarker) Status(alert model.Fingerprint) AlertStatus { m.mtx.RLock() defer m.mtx.RUnlock() if s, found := m.alerts[alert]; found { return *s } return AlertStatus{ State: AlertStateUnprocessed, SilencedBy: []string{}, InhibitedBy: []string{}, } } // Delete implements AlertMarker. func (m *MemMarker) Delete(alert model.Fingerprint) { m.mtx.Lock() defer m.mtx.Unlock() delete(m.alerts, alert) } // Unprocessed implements AlertMarker. func (m *MemMarker) Unprocessed(alert model.Fingerprint) bool { return m.Status(alert).State == AlertStateUnprocessed } // Active implements AlertMarker. func (m *MemMarker) Active(alert model.Fingerprint) bool { return m.Status(alert).State == AlertStateActive } // Inhibited implements AlertMarker. func (m *MemMarker) Inhibited(alert model.Fingerprint) ([]string, bool) { s := m.Status(alert) return s.InhibitedBy, s.State == AlertStateSuppressed && len(s.InhibitedBy) > 0 } // Silenced returns whether the alert for the given Fingerprint is in the // Silenced state, any associated silence IDs, and the silences state version // the result is based on. func (m *MemMarker) Silenced(alert model.Fingerprint) (activeIDs, pendingIDs []string, version int, silenced bool) { s := m.Status(alert) return s.SilencedBy, s.pendingSilences, s.silencesVersion, s.State == AlertStateSuppressed && len(s.SilencedBy) > 0 } // MultiError contains multiple errors and implements the error interface. Its // zero value is ready to use. All its methods are goroutine safe. type MultiError struct { mtx sync.Mutex errors []error } // Add adds an error to the MultiError. func (e *MultiError) Add(err error) { e.mtx.Lock() defer e.mtx.Unlock() e.errors = append(e.errors, err) } // Len returns the number of errors added to the MultiError. func (e *MultiError) Len() int { e.mtx.Lock() defer e.mtx.Unlock() return len(e.errors) } // Errors returns the errors added to the MuliError. The returned slice is a // copy of the internal slice of errors. func (e *MultiError) Errors() []error { e.mtx.Lock() defer e.mtx.Unlock() return append(make([]error, 0, len(e.errors)), e.errors...) } func (e *MultiError) Error() string { e.mtx.Lock() defer e.mtx.Unlock() es := make([]string, 0, len(e.errors)) for _, err := range e.errors { es = append(es, err.Error()) } return strings.Join(es, "; ") } // Alert wraps a model.Alert with additional information relevant // to internal of the Alertmanager. // The type is never exposed to external communication and the // embedded alert has to be sanitized beforehand. type Alert struct { model.Alert // The authoritative timestamp. UpdatedAt time.Time Timeout bool } func validateLs(ls model.LabelSet) error { for ln, lv := range ls { if !compat.IsValidLabelName(ln) { return fmt.Errorf("invalid name %q", ln) } if !lv.IsValid() { return fmt.Errorf("invalid value %q", lv) } } return nil } // Validate overrides the same method in model.Alert to allow UTF-8 labels. // This can be removed once prometheus/common has support for UTF-8. func (a *Alert) Validate() error { if a.StartsAt.IsZero() { return fmt.Errorf("start time missing") } if !a.EndsAt.IsZero() && a.EndsAt.Before(a.StartsAt) { return fmt.Errorf("start time must be before end time") } if len(a.Labels) == 0 { return fmt.Errorf("at least one label pair required") } if err := validateLs(a.Labels); err != nil { return fmt.Errorf("invalid label set: %w", err) } if err := validateLs(a.Annotations); err != nil { return fmt.Errorf("invalid annotations: %w", err) } return nil } // AlertSlice is a sortable slice of Alerts. type AlertSlice []*Alert func (as AlertSlice) Less(i, j int) bool { // Look at labels.job, then labels.instance. for _, overrideKey := range [...]model.LabelName{"job", "instance"} { iVal, iOk := as[i].Labels[overrideKey] jVal, jOk := as[j].Labels[overrideKey] if !iOk && !jOk { continue } if !iOk { return false } if !jOk { return true } if iVal != jVal { return iVal < jVal } } return as[i].Labels.Before(as[j].Labels) } func (as AlertSlice) Swap(i, j int) { as[i], as[j] = as[j], as[i] } func (as AlertSlice) Len() int { return len(as) } // Alerts turns a sequence of internal alerts into a list of // exposable model.Alert structures. func Alerts(alerts ...*Alert) model.Alerts { res := make(model.Alerts, 0, len(alerts)) for _, a := range alerts { v := a.Alert // If the end timestamp is not reached yet, do not expose it. if !a.Resolved() { v.EndsAt = time.Time{} } res = append(res, &v) } return res } // Merge merges the timespan of two alerts based and overwrites annotations // based on the authoritative timestamp. A new alert is returned, the labels // are assumed to be equal. func (a *Alert) Merge(o *Alert) *Alert { // Let o always be the younger alert. if o.UpdatedAt.Before(a.UpdatedAt) { return o.Merge(a) } res := *o // Always pick the earliest starting time. if a.StartsAt.Before(o.StartsAt) { res.StartsAt = a.StartsAt } if o.Resolved() { // The latest explicit resolved timestamp wins if both alerts are effectively resolved. if a.Resolved() && a.EndsAt.After(o.EndsAt) { res.EndsAt = a.EndsAt } } else { // A non-timeout timestamp always rules if it is the latest. if a.EndsAt.After(o.EndsAt) && !a.Timeout { res.EndsAt = a.EndsAt } } return &res } // A Muter determines whether a given label set is muted. Implementers that // maintain an underlying AlertMarker are expected to update it during a call of // Mutes. type Muter interface { Mutes(model.LabelSet) bool } // A TimeMuter determines if the time is muted by one or more active or mute // time intervals. If the time is muted, it returns true and the names of the // time intervals that muted it. Otherwise, it returns false and a nil slice. type TimeMuter interface { Mutes(timeIntervalNames []string, now time.Time) (bool, []string, error) } // A MuteFunc is a function that implements the Muter interface. type MuteFunc func(model.LabelSet) bool // Mutes implements the Muter interface. func (f MuteFunc) Mutes(lset model.LabelSet) bool { return f(lset) } // A Silence determines whether a given label set is muted. type Silence struct { // A unique identifier across all connected instances. ID string `json:"id"` // A set of matchers determining if a label set is affected // by the silence. Matchers labels.Matchers `json:"matchers"` // Time range of the silence. // // * StartsAt must not be before creation time // * EndsAt must be after StartsAt // * Deleting a silence means to set EndsAt to now // * Time range must not be modified in different ways // // TODO(fabxc): this may potentially be extended by // creation and update timestamps. StartsAt time.Time `json:"startsAt"` EndsAt time.Time `json:"endsAt"` // The last time the silence was updated. UpdatedAt time.Time `json:"updatedAt"` // Information about who created the silence for which reason. CreatedBy string `json:"createdBy"` Comment string `json:"comment,omitempty"` Status SilenceStatus `json:"status"` } // Expired return if the silence is expired // meaning that both StartsAt and EndsAt are equal. func (s *Silence) Expired() bool { return s.StartsAt.Equal(s.EndsAt) } // SilenceStatus stores the state of a silence. type SilenceStatus struct { State SilenceState `json:"state"` } // SilenceState is used as part of SilenceStatus. type SilenceState string // Possible values for SilenceState. const ( SilenceStateExpired SilenceState = "expired" SilenceStateActive SilenceState = "active" SilenceStatePending SilenceState = "pending" ) // CalcSilenceState returns the SilenceState that a silence with the given start // and end time would have right now. func CalcSilenceState(start, end time.Time) SilenceState { current := time.Now() if current.Before(start) { return SilenceStatePending } if current.Before(end) { return SilenceStateActive } return SilenceStateExpired } prometheus-alertmanager-0.28.1+ds/types/types_test.go000066400000000000000000000331641476331240200227460ustar00rootroot00000000000000// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package types import ( "reflect" "sort" "strconv" "testing" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/common/model" "github.com/prometheus/common/promslog" "github.com/stretchr/testify/require" "github.com/prometheus/alertmanager/featurecontrol" "github.com/prometheus/alertmanager/matcher/compat" ) func TestMemMarker_Muted(t *testing.T) { r := prometheus.NewRegistry() marker := NewMarker(r) // No groups should be muted. timeIntervalNames, isMuted := marker.Muted("route1", "group1") require.False(t, isMuted) require.Empty(t, timeIntervalNames) // Mark the group as muted because it's the weekend. marker.SetMuted("route1", "group1", []string{"weekends"}) timeIntervalNames, isMuted = marker.Muted("route1", "group1") require.True(t, isMuted) require.Equal(t, []string{"weekends"}, timeIntervalNames) // Other groups should not be marked as muted. timeIntervalNames, isMuted = marker.Muted("route1", "group2") require.False(t, isMuted) require.Empty(t, timeIntervalNames) // Other routes should not be marked as muted either. timeIntervalNames, isMuted = marker.Muted("route2", "group1") require.False(t, isMuted) require.Empty(t, timeIntervalNames) // The group is no longer muted. marker.SetMuted("route1", "group1", nil) timeIntervalNames, isMuted = marker.Muted("route1", "group1") require.False(t, isMuted) require.Empty(t, timeIntervalNames) } func TestMemMarker_DeleteByGroupKey(t *testing.T) { r := prometheus.NewRegistry() marker := NewMarker(r) // Mark the group and check that it is muted. marker.SetMuted("route1", "group1", []string{"weekends"}) timeIntervalNames, isMuted := marker.Muted("route1", "group1") require.True(t, isMuted) require.Equal(t, []string{"weekends"}, timeIntervalNames) // Delete the markers for a different group key. The group should // still be muted. marker.DeleteByGroupKey("route1", "group2") timeIntervalNames, isMuted = marker.Muted("route1", "group1") require.True(t, isMuted) require.Equal(t, []string{"weekends"}, timeIntervalNames) // Delete the markers for the correct group key. The group should // no longer be muted. marker.DeleteByGroupKey("route1", "group1") timeIntervalNames, isMuted = marker.Muted("route1", "group1") require.False(t, isMuted) require.Empty(t, timeIntervalNames) } func TestMemMarker_Count(t *testing.T) { r := prometheus.NewRegistry() marker := NewMarker(r) now := time.Now() states := []AlertState{AlertStateSuppressed, AlertStateActive, AlertStateUnprocessed} countByState := func(state AlertState) int { return marker.Count(state) } countTotal := func() int { var count int for _, s := range states { count += countByState(s) } return count } require.Equal(t, 0, countTotal()) a1 := model.Alert{ StartsAt: now.Add(-2 * time.Minute), EndsAt: now.Add(2 * time.Minute), Labels: model.LabelSet{"test": "active"}, } a2 := model.Alert{ StartsAt: now.Add(-2 * time.Minute), EndsAt: now.Add(2 * time.Minute), Labels: model.LabelSet{"test": "suppressed"}, } a3 := model.Alert{ StartsAt: now.Add(-2 * time.Minute), EndsAt: now.Add(-1 * time.Minute), Labels: model.LabelSet{"test": "resolved"}, } // Insert an active alert. marker.SetActiveOrSilenced(a1.Fingerprint(), 1, nil, nil) require.Equal(t, 1, countByState(AlertStateActive)) require.Equal(t, 1, countTotal()) // Insert a suppressed alert. marker.SetActiveOrSilenced(a2.Fingerprint(), 1, []string{"1"}, nil) require.Equal(t, 1, countByState(AlertStateSuppressed)) require.Equal(t, 2, countTotal()) // Insert a resolved alert - it'll count as active. marker.SetActiveOrSilenced(a3.Fingerprint(), 1, []string{"1"}, nil) require.Equal(t, 1, countByState(AlertStateActive)) require.Equal(t, 3, countTotal()) } func TestAlertMerge(t *testing.T) { now := time.Now() // By convention, alert A is always older than alert B. pairs := []struct { A, B, Res *Alert }{ { // Both alerts have the Timeout flag set. // StartsAt is defined by Alert A. // EndsAt is defined by Alert B. A: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-2 * time.Minute), EndsAt: now.Add(2 * time.Minute), }, UpdatedAt: now, Timeout: true, }, B: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-time.Minute), EndsAt: now.Add(3 * time.Minute), }, UpdatedAt: now.Add(time.Minute), Timeout: true, }, Res: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-2 * time.Minute), EndsAt: now.Add(3 * time.Minute), }, UpdatedAt: now.Add(time.Minute), Timeout: true, }, }, { // Alert A has the Timeout flag set while Alert B has it unset. // StartsAt is defined by Alert A. // EndsAt is defined by Alert B. A: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-time.Minute), EndsAt: now.Add(3 * time.Minute), }, UpdatedAt: now, Timeout: true, }, B: &Alert{ Alert: model.Alert{ StartsAt: now, EndsAt: now.Add(2 * time.Minute), }, UpdatedAt: now.Add(time.Minute), }, Res: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-time.Minute), EndsAt: now.Add(2 * time.Minute), }, UpdatedAt: now.Add(time.Minute), }, }, { // Alert A has the Timeout flag unset while Alert B has it set. // StartsAt is defined by Alert A. // EndsAt is defined by Alert A. A: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-time.Minute), EndsAt: now.Add(3 * time.Minute), }, UpdatedAt: now, }, B: &Alert{ Alert: model.Alert{ StartsAt: now, EndsAt: now.Add(2 * time.Minute), }, UpdatedAt: now.Add(time.Minute), Timeout: true, }, Res: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-time.Minute), EndsAt: now.Add(3 * time.Minute), }, UpdatedAt: now.Add(time.Minute), Timeout: true, }, }, { // Both alerts have the Timeout flag unset and are not resolved. // StartsAt is defined by Alert A. // EndsAt is defined by Alert A. A: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-time.Minute), EndsAt: now.Add(3 * time.Minute), }, UpdatedAt: now, }, B: &Alert{ Alert: model.Alert{ StartsAt: now, EndsAt: now.Add(2 * time.Minute), }, UpdatedAt: now.Add(time.Minute), }, Res: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-time.Minute), EndsAt: now.Add(3 * time.Minute), }, UpdatedAt: now.Add(time.Minute), }, }, { // Both alerts have the Timeout flag unset and are not resolved. // StartsAt is defined by Alert A. // EndsAt is defined by Alert B. A: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-time.Minute), EndsAt: now.Add(3 * time.Minute), }, UpdatedAt: now, }, B: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-time.Minute), EndsAt: now.Add(4 * time.Minute), }, UpdatedAt: now.Add(time.Minute), }, Res: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-time.Minute), EndsAt: now.Add(4 * time.Minute), }, UpdatedAt: now.Add(time.Minute), }, }, { // Both alerts have the Timeout flag unset, A is resolved while B isn't. // StartsAt is defined by Alert A. // EndsAt is defined by Alert B. A: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-3 * time.Minute), EndsAt: now.Add(-time.Minute), }, UpdatedAt: now, }, B: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-2 * time.Minute), EndsAt: now.Add(time.Minute), }, UpdatedAt: now.Add(time.Minute), }, Res: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-3 * time.Minute), EndsAt: now.Add(time.Minute), }, UpdatedAt: now.Add(time.Minute), }, }, { // Both alerts have the Timeout flag unset, B is resolved while A isn't. // StartsAt is defined by Alert A. // EndsAt is defined by Alert B. A: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-2 * time.Minute), EndsAt: now.Add(3 * time.Minute), }, UpdatedAt: now, }, B: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-2 * time.Minute), EndsAt: now, }, UpdatedAt: now.Add(time.Minute), }, Res: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-2 * time.Minute), EndsAt: now, }, UpdatedAt: now.Add(time.Minute), }, }, { // Both alerts are resolved (EndsAt < now). // StartsAt is defined by Alert B. // EndsAt is defined by Alert A. A: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-3 * time.Minute), EndsAt: now.Add(-time.Minute), }, UpdatedAt: now.Add(-time.Minute), }, B: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-4 * time.Minute), EndsAt: now.Add(-2 * time.Minute), }, UpdatedAt: now.Add(time.Minute), }, Res: &Alert{ Alert: model.Alert{ StartsAt: now.Add(-4 * time.Minute), EndsAt: now.Add(-1 * time.Minute), }, UpdatedAt: now.Add(time.Minute), }, }, } for i, p := range pairs { p := p t.Run(strconv.Itoa(i), func(t *testing.T) { if res := p.A.Merge(p.B); !reflect.DeepEqual(p.Res, res) { t.Errorf("unexpected merged alert %#v", res) } if res := p.B.Merge(p.A); !reflect.DeepEqual(p.Res, res) { t.Errorf("unexpected merged alert %#v", res) } }) } } func TestValidateUTF8Ls(t *testing.T) { tests := []struct { name string ls model.LabelSet err string }{{ name: "valid UTF-8 label set", ls: model.LabelSet{ "a": "a", "00": "b", "Σ": "c", "\xf0\x9f\x99\x82": "dΘ", }, }, { name: "invalid UTF-8 label set", ls: model.LabelSet{ "\xff": "a", }, err: "invalid name \"\\xff\"", }} // Change the mode to UTF-8 mode. ff, err := featurecontrol.NewFlags(promslog.NewNopLogger(), featurecontrol.FeatureUTF8StrictMode) require.NoError(t, err) compat.InitFromFlags(promslog.NewNopLogger(), ff) // Restore the mode to classic at the end of the test. ff, err = featurecontrol.NewFlags(promslog.NewNopLogger(), featurecontrol.FeatureClassicMode) require.NoError(t, err) defer compat.InitFromFlags(promslog.NewNopLogger(), ff) for _, test := range tests { t.Run(test.name, func(t *testing.T) { err := validateLs(test.ls) if err != nil && err.Error() != test.err { t.Errorf("unexpected err for %s: %s", test.ls, err) } else if err == nil && test.err != "" { t.Error("expected error, got nil") } }) } } func TestCalcSilenceState(t *testing.T) { var ( pastStartTime = time.Now() pastEndTime = time.Now() futureStartTime = time.Now().Add(time.Hour) futureEndTime = time.Now().Add(time.Hour) ) expected := CalcSilenceState(futureStartTime, futureEndTime) require.Equal(t, SilenceStatePending, expected) expected = CalcSilenceState(pastStartTime, futureEndTime) require.Equal(t, SilenceStateActive, expected) expected = CalcSilenceState(pastStartTime, pastEndTime) require.Equal(t, SilenceStateExpired, expected) } func TestSilenceExpired(t *testing.T) { now := time.Now() silence := Silence{StartsAt: now, EndsAt: now} require.True(t, silence.Expired()) silence = Silence{StartsAt: now.Add(time.Hour), EndsAt: now.Add(time.Hour)} require.True(t, silence.Expired()) silence = Silence{StartsAt: now, EndsAt: now.Add(time.Hour)} require.False(t, silence.Expired()) } func TestAlertSliceSort(t *testing.T) { var ( a1 = &Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "job": "j1", "instance": "i1", "alertname": "an1", }, }, } a2 = &Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "job": "j1", "instance": "i1", "alertname": "an2", }, }, } a3 = &Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "job": "j2", "instance": "i1", "alertname": "an1", }, }, } a4 = &Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "an1", }, }, } a5 = &Alert{ Alert: model.Alert{ Labels: model.LabelSet{ "alertname": "an2", }, }, } ) cases := []struct { alerts AlertSlice exp AlertSlice }{ { alerts: AlertSlice{a2, a1}, exp: AlertSlice{a1, a2}, }, { alerts: AlertSlice{a3, a2, a1}, exp: AlertSlice{a1, a2, a3}, }, { alerts: AlertSlice{a4, a2, a4}, exp: AlertSlice{a2, a4, a4}, }, { alerts: AlertSlice{a5, a4}, exp: AlertSlice{a4, a5}, }, } for _, tc := range cases { sort.Stable(tc.alerts) if !reflect.DeepEqual(tc.alerts, tc.exp) { t.Fatalf("expected %v but got %v", tc.exp, tc.alerts) } } } type fakeRegisterer struct { registeredCollectors []prometheus.Collector } func (r *fakeRegisterer) Register(prometheus.Collector) error { return nil } func (r *fakeRegisterer) MustRegister(c ...prometheus.Collector) { r.registeredCollectors = append(r.registeredCollectors, c...) } func (r *fakeRegisterer) Unregister(prometheus.Collector) bool { return false } func TestNewMarkerRegistersMetrics(t *testing.T) { fr := fakeRegisterer{} NewMarker(&fr) if len(fr.registeredCollectors) == 0 { t.Error("expected NewMarker to register metrics on the given registerer") } } prometheus-alertmanager-0.28.1+ds/ui/000077500000000000000000000000001476331240200174565ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/Dockerfile000066400000000000000000000004141476331240200214470ustar00rootroot00000000000000FROM node:22-bookworm ENV NPM_CONFIG_PREFIX=/home/node/.npm-global ENV PATH=$PATH:/home/node/.npm-global/bin RUN mkdir -p $NPM_CONFIG_PREFIX; yarn global add \ elm@0.19.1 \ elm-format@0.8.7 \ elm-test@0.19.1-revision6 \ uglify-js@3.13.4 \ elm-review@2.5.0 prometheus-alertmanager-0.28.1+ds/ui/app/000077500000000000000000000000001476331240200202365ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/.gitignore000066400000000000000000000000621476331240200222240ustar00rootroot00000000000000dist/ elm-stuff/ script.js .elm /elm-* /openapi-* prometheus-alertmanager-0.28.1+ds/ui/app/CONTRIBUTING.md000066400000000000000000000047151476331240200224760ustar00rootroot00000000000000# Contributing This document describes how to: - Set up your dev environment - Become familiar with [Elm](http://elm-lang.org/) - Develop against AlertManager ## Dev Environment Setup You can either use our default Docker setup or install all dev dependencies locally. For the former you only need Docker installed, for the latter you need to set the environment flag `NO_DOCKER` to `true` and have the following dependencies installed: - [Elm](https://guide.elm-lang.org/install.html#install) - [Elm-Format](https://github.com/avh4/elm-format) is installed In addition for easier development you can [configure](https://guide.elm-lang.org/install.html#configure-your-editor) your editor. **All submitted elm code must be formatted with `elm-format`**. Install and execute it however works best for you. We recommend having formatting the file on save, similar to how many developers use `gofmt`. If you prefer, there's a make target available to format all elm source files: ``` # make format ``` ## Elm Resources - The [Official Elm Guide](https://guide.elm-lang.org/) is a great place to start. Going through the entire guide takes about an hour, and is a good primer to get involved in our codebase. Once you've worked through it, you should be able to start writing your feature with the help of the compiler. - Check the [syntax reference](http://elm-lang.org/docs/syntax) when you need a reminder of how the language works. - Read up on [how to write elm code](http://elm-lang.org/docs/style-guide). - Watch videos from the latest [elm-conf](https://www.youtube.com/channel/UCOpGiN9AkczVjlpGDaBwQrQ) - Learn how to use the debugger! Elm comes packaged with an excellent [debugger](http://elm-lang.org/blog/the-perfect-bug-report). We've found this tool to be invaluable in understanding how the app is working as we're debugging behavior. ## Local development workflow At the top level of this repo, follow the HA AlertManager instructions. Compile the binary, then run with `goreman`. Add example alerts with the file provided in the HA example folder. Then start the development server: ``` # cd ui/app # make dev-server ``` Your app should be available at `http://localhost:`. Navigate to `src/Main.elm`. Any changes to the file system are detected automatically, triggering a recompile of the project. ## Committing changes Before you commit changes, please run `make build-all` on the root level Makefile. Please include `asset/*_vfsdata.go` in your commit. prometheus-alertmanager-0.28.1+ds/ui/app/Makefile000066400000000000000000000050401476331240200216750ustar00rootroot00000000000000# Use `=` instead of `:=` expanding variable lazely, not at beginning. Needed as # elm files change during execution. ELM_FILES = $(shell find src -iname *.elm) DOCKER_IMG := elm-env DOCKER_RUN_CURRENT_USER := docker run --user=$(shell id -u $(USER)):$(shell id -g $(USER)) DOCKER_CMD := $(DOCKER_RUN_CURRENT_USER) --rm -t -v $(PWD):/app -w /app -e "ELM_HOME=/app/.elm" $(DOCKER_IMG) # If JUNIT_DIR is set, the tests are executed with the JUnit reporter and the result is stored in the given directory. JUNIT_DIR ?= ifeq ($(NO_DOCKER), true) DOCKER_CMD= endif all: script.js test elm-env: @(if [ "$(NO_DOCKER)" != "true" ] ; then \ echo ">> building elm-env docker image"; \ docker build --platform=linux/amd64 -t $(DOCKER_IMG) ../. > /dev/null; \ fi; ) format: elm-env $(ELM_FILES) @echo ">> format front-end code" @$(DOCKER_CMD) elm-format --yes $(ELM_FILES) review: src/Data elm-env @$(DOCKER_CMD) elm-review --fix test: src/Data elm-env @$(DOCKER_CMD) rm -rf elm-stuff/generated-code @$(DOCKER_CMD) elm-format $(ELM_FILES) --validate @$(DOCKER_CMD) elm-review ifneq ($(JUNIT_DIR),) mkdir -p $(JUNIT_DIR) @$(DOCKER_CMD) elm-test --report=junit | tee $(JUNIT_DIR)/junit.xml else @$(DOCKER_CMD) elm-test endif dev-server: elm reactor # macOS requires mktemp template to be at the end of the filename, # however --output flag for elm make must end in .js or .html. script.js: export TEMPFILE := "$(shell mktemp ./elm-XXXXXXXXXX)" script.js: export TEMPFILE_JS := "$(TEMPFILE).js" script.js: src/Data elm-env format $(ELM_FILES) @echo ">> building script.js" @$(DOCKER_CMD) rm -rf elm-stuff @$(DOCKER_CMD) elm make src/Main.elm --optimize --output $(TEMPFILE_JS) @$(DOCKER_CMD) uglifyjs $(TEMPFILE_JS) --compress 'pure_funcs="F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9",pure_getters,keep_fargs=false,unsafe_comps,unsafe' --mangle --output $(@) @rm -rf $(TEMPFILE_JS) @rm -rf $(TEMPFILE) src/Data: export TEMPOPENAPI := $(shell mktemp -d ./openapi-XXXXXXXXXX) src/Data: ../../api/v2/openapi.yaml -rm -r src/Data $(DOCKER_RUN_CURRENT_USER) --rm -v ${PWD}/../..:/local openapitools/openapi-generator-cli:v3.3.4 generate \ -i /local/api/v2/openapi.yaml \ -g elm \ -o /local/ui/app/$(TEMPOPENAPI) # We only want data directory & DateTime package. cp -r $(TEMPOPENAPI)/src/Data src/Data cp -r $(TEMPOPENAPI)/src/DateTime.elm src/DateTime.elm rm -rf $(TEMPOPENAPI) clean: - @rm -rf script.js elm-stuff src/Data src/DateTime.elm openapi-* elm-* - @if [ ! -z "$(docker images -q $(DOCKER_IMG))" ]; then \ docker rmi $(DOCKER_IMG); fi prometheus-alertmanager-0.28.1+ds/ui/app/README.md000066400000000000000000000031571476331240200215230ustar00rootroot00000000000000# Alertmanager UI This is a re-write of the Alertmanager UI in [elm-lang](http://elm-lang.org/). ## Usage ### Filtering on the alerts page By default, the alerts page only shows active (not silenced) alerts. Adding a query string containing the following will additionally show silenced alerts. ``` http://alertmanager/#/alerts?silenced=true ``` In order to show _only_ silenced alerts, update the query string to hide active alerts. ``` http://alertmanager/#/alerts?silenced=true&active=false ``` The alerts page can also be filtered by the receivers for a page. Receivers are configured in Alertmanager's yaml configuration file. ``` http://alertmanager/#/alerts?receiver=backend ``` Filtering based on label matchers is available. They can easily be added and modified through the UI. ``` http://alertmanager/#/alerts?filter=%7Bseverity%3D%22warning%22%2C%20owner%3D%22backend%22%7D ``` These filters can be used in conjunction. ### Filtering on the silences page Filtering based on label matchers is available. They can easily be added and modified through the UI. ``` http://alertmanager/#/silences?filter=%7Bseverity%3D%22warning%22%2C%20owner%3D%22backend%22%7D ``` ### Note on filtering via label matchers Filtering via label matchers follows the same syntax and semantics as Prometheus. A properly formatted filter is a set of label matchers joined by accepted matching operators, surrounded by curly braces: ``` {foo="bar", baz=~"quu.*"} ``` Operators include: - `=` - `!=` - `=~` - `!~` See the official documentation for additional information: https://prometheus.io/docs/querying/basics/#instant-vector-selectors prometheus-alertmanager-0.28.1+ds/ui/app/elm.json000066400000000000000000000016211476331240200217060ustar00rootroot00000000000000{ "type": "application", "source-directories": [ "src" ], "elm-version": "0.19.1", "dependencies": { "direct": { "elm/browser": "1.0.0", "elm/core": "1.0.0", "elm/html": "1.0.0", "elm/http": "1.0.0", "elm/json": "1.0.0", "elm/parser": "1.1.0", "elm/regex": "1.0.0", "elm/time": "1.0.0", "elm/url": "1.0.0", "rtfeldman/elm-iso8601-date-strings": "1.1.2", "NoRedInk/elm-json-decode-pipeline": "1.0.0", "justinmimbs/time-extra": "1.1.0" }, "indirect": { "elm/virtual-dom": "1.0.0", "elm/random": "1.0.0", "justinmimbs/date": "3.2.0" } }, "test-dependencies": { "direct": { "elm-explorations/test": "1.0.0" }, "indirect": {} } } prometheus-alertmanager-0.28.1+ds/ui/app/favicon.ico000066400000000000000000000353561476331240200223730ustar00rootroot00000000000000 h6  00 %F(  IDPoQq]zRqRq`}JTrWuWuWuWuSr@4X0U+Q+Q+Q+Q2W3XNn*Q,R,R*Ph5Z+R,R,R*PLl1W+R,R,R*QDfGh-S+Q8\1Vb~Gzd2WTsLl>Ce^{D@( @ *ng$80kPoQpq80U(O*P*P(O4X,D.T(O)O)O)O)O'N5Y68_|b~b~b~b~b~b~`}+GhJkKkKkKkKkKkKkKkKkKkKkJkIiw:#K'N'N'N'N'N'N'N'N'N'N'N'N%L*fhhhhhhhhhhhhg+n|Yw[x[x[x[x[x[x[x[x[x[x[x[xYwV+Q)O)O)P)P)P)P)P)P)P)P)P)P)P)O,R8\'N+Q1V-S,R,R,R,R,R,R,R,R/U/T)P'N?aRqy}-S,R,R,R,R,R,R,R+QDelMmWu*P,R,R,R,R,R,R,R,R-S/T,R,R,R,R,R,R,R,R,R)P\y)P,R,R,R,R,R,R,R,R,R+QCe)O,R,R,R,R,R,R,R,R,R+Q?b+Q,R,R,R,R,R,R,R,R,R*PHij6[+Q,R,R,R,R+R9\2W,R)OeR(Zx)P/U.T,R,R*QVt?a+Q,R(OTs]z*P,R*PsMm(OPo~55Yv-R,R*Qd*P%Qp:^+Q3XAdp{Kl(NUtg1Vu'N$a]z)P,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R+Q<_i)O,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R+Q@czk)O,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R*PNnI4.S,R,R,R,R,R,R,R,R,R,R8\0V,R,R,R)Ok Ce+Q,R,R,R,R,R,R,R,R+QYw:]+Q,R,R+Qos)O,R-S3X,R,R,R,R,R,RwBd+Q,R*QDeO%/T+R4X|5Z,R,R,R,R-SOn*P,R*PJj)P9\_|)P,R,R,R0U`})P*QIik*z'NGh*P,R,R+Q8\{(O+Qv)Oi3X,R,R*PPo)P=`X1VBd+Q,R)O2W_|5`}Sr*P+R3XSr{!U_|)P)PZx<hg)O+QNg~'N?aOS,Rb~>2[yq#n\ $sdY)ZR"???prometheus-alertmanager-0.28.1+ds/ui/app/index.html000066400000000000000000000031661476331240200222410ustar00rootroot00000000000000 Alertmanager prometheus-alertmanager-0.28.1+ds/ui/app/lib/000077500000000000000000000000001476331240200210045ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/lib/elm-datepicker/000077500000000000000000000000001476331240200236725ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/lib/elm-datepicker/css/000077500000000000000000000000001476331240200244625ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/lib/elm-datepicker/css/elm-datepicker.css000066400000000000000000000040451476331240200300650ustar00rootroot00000000000000.cursor-pointer {cursor: pointer;} .month { height: 270px; } .calendar_ .date-container { } .calendar_ .weekheader { margin-top: 5px; } .calendar_ .date { color: #C0C0C0; cursor: pointer; height: 30px; width: 40px; display: inline-flex; justify-content: center; align-items: center; font-size: .75rem; background-color: #fff; } .calendar_ .date.thismonth { color: #22292f; } .calendar_ .date.front { background-color: rgba(0,0,0,0); } .calendar_ .date.back { margin-bottom: 5px; } .calendar_ .date.front.mouseover { background-color: #EEEEEE; border-radius: 50%; } .calendar_ .date.front.start { background-color: #b0c4de; border-radius: 50%; } .calendar_ .date.front.end { background-color: #b0c4de; border-radius: 50%; } .calendar_ .date.back.start { background-color: #b0c4de; border-top-left-radius: 50%; border-bottom-left-radius: 50%; } .calendar_ .date.back.end { background-color: #b0c4de; border-top-right-radius: 50%; border-bottom-right-radius: 50%; } .calendar_ .date.back.between { background-color: #b0c4de; } .timepicker { height:60px; width:80%; margin-top: 10px; } .timepicker .subject { padding:10px; width:20%; vertical-align:middle; } .timepicker .hour { width:10%; } .timepicker .minute { width:10%; } .timepicker .view { width:100%; height:50%; text-align:center; border: 0px none; } .timepicker .up-button { width:100%; height:25%; border: 0px none; } .timepicker .down-button { width:100%; height:25%; border: 0px none; } .timepicker .colon { width: 5%; } .timepicker .timeview { width:50%; } .month-header { width:70%; margin: 0 auto; } .month-header .prev-month { width:20%; } .month-header .month-text { width:60%; font-weight: bold; font-size: 12px; text-align: center; } .month-header .next-month { width:20%; } .d-flex-center { display:flex; align-items: center; justify-content: space-around; } prometheus-alertmanager-0.28.1+ds/ui/app/review/000077500000000000000000000000001476331240200215375ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/review/elm.json000066400000000000000000000017531476331240200232150ustar00rootroot00000000000000{ "type": "application", "source-directories": [ "src" ], "elm-version": "0.19.1", "dependencies": { "direct": { "elm/core": "1.0.5", "elm/json": "1.1.3", "elm/project-metadata-utils": "1.0.1", "jfmengels/elm-review": "2.4.1", "jfmengels/elm-review-simplify": "1.0.1", "jfmengels/elm-review-unused": "1.1.9", "stil4m/elm-syntax": "7.2.2" }, "indirect": { "elm/html": "1.0.0", "elm/parser": "1.1.0", "elm/random": "1.0.0", "elm/time": "1.0.0", "elm/virtual-dom": "1.0.2", "elm-community/list-extra": "8.3.0", "elm-explorations/test": "1.2.2", "rtfeldman/elm-hex": "1.0.0", "stil4m/structured-writer": "1.0.3" } }, "test-dependencies": { "direct": { "elm-explorations/test": "1.2.2" }, "indirect": {} } } prometheus-alertmanager-0.28.1+ds/ui/app/review/src/000077500000000000000000000000001476331240200223265ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/review/src/ReviewConfig.elm000066400000000000000000000020261476331240200254140ustar00rootroot00000000000000module ReviewConfig exposing (config) {-| Do not rename the ReviewConfig module or the config function, because `elm-review` will look for these. To add packages that contain rules, add them to this review project using `elm install author/packagename` when inside the directory containing this file. -} import NoUnused.CustomTypeConstructorArgs import NoUnused.CustomTypeConstructors import NoUnused.Dependencies import NoUnused.Exports import NoUnused.Modules import NoUnused.Parameters import NoUnused.Patterns import NoUnused.Variables import Simplify import Review.Rule exposing (Rule) config : List Rule config = List.map (Review.Rule.ignoreErrorsForDirectories [ "src/Data/" ]) [ NoUnused.CustomTypeConstructors.rule [] , NoUnused.CustomTypeConstructorArgs.rule , NoUnused.Dependencies.rule , NoUnused.Exports.rule , NoUnused.Modules.rule , NoUnused.Parameters.rule , NoUnused.Patterns.rule , NoUnused.Variables.rule , Simplify.rule ] prometheus-alertmanager-0.28.1+ds/ui/app/src/000077500000000000000000000000001476331240200210255ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Alerts/000077500000000000000000000000001476331240200222575ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Alerts/Api.elm000066400000000000000000000022321476331240200234660ustar00rootroot00000000000000module Alerts.Api exposing (fetchAlertGroups, fetchAlerts, fetchReceivers) import Data.AlertGroup exposing (AlertGroup) import Data.GettableAlert exposing (GettableAlert) import Data.Receiver exposing (Receiver) import Json.Decode import Utils.Api import Utils.Filter exposing (Filter, generateAPIQueryString) import Utils.Types exposing (ApiData) fetchReceivers : String -> Cmd (ApiData (List Receiver)) fetchReceivers apiUrl = Utils.Api.send (Utils.Api.get (apiUrl ++ "/receivers") (Json.Decode.list Data.Receiver.decoder) ) fetchAlertGroups : String -> Filter -> Cmd (ApiData (List AlertGroup)) fetchAlertGroups apiUrl filter = let url = String.join "/" [ apiUrl, "alerts", "groups" ++ generateAPIQueryString filter ] in Utils.Api.send (Utils.Api.get url (Json.Decode.list Data.AlertGroup.decoder)) fetchAlerts : String -> Filter -> Cmd (ApiData (List GettableAlert)) fetchAlerts apiUrl filter = let url = String.join "/" [ apiUrl, "alerts" ++ generateAPIQueryString filter ] in Utils.Api.send (Utils.Api.get url (Json.Decode.list Data.GettableAlert.decoder)) prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/000077500000000000000000000000001476331240200216765ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/Alert.elm000066400000000000000000000020471476331240200234470ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.Alert exposing (Alert(..), decoder, encoder) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias Alert = { labels : Dict String String , generatorURL : Maybe String } decoder : Decoder Alert decoder = Decode.succeed Alert |> required "labels" (Decode.dict Decode.string) |> optional "generatorURL" (Decode.nullable Decode.string) Nothing encoder : Alert -> Encode.Value encoder model = Encode.object [ ( "labels", Encode.dict identity Encode.string model.labels ) , ( "generatorURL", Maybe.withDefault Encode.null (Maybe.map Encode.string model.generatorURL) ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/AlertGroup.elm000066400000000000000000000024221476331240200244610ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.AlertGroup exposing (AlertGroup, decoder, encoder) import Data.GettableAlert as GettableAlert exposing (GettableAlert) import Data.Receiver as Receiver exposing (Receiver) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias AlertGroup = { labels : Dict String String , receiver : Receiver , alerts : List GettableAlert } decoder : Decoder AlertGroup decoder = Decode.succeed AlertGroup |> required "labels" (Decode.dict Decode.string) |> required "receiver" Receiver.decoder |> required "alerts" (Decode.list GettableAlert.decoder) encoder : AlertGroup -> Encode.Value encoder model = Encode.object [ ( "labels", Encode.dict identity Encode.string model.labels ) , ( "receiver", Receiver.encoder model.receiver ) , ( "alerts", Encode.list GettableAlert.encoder model.alerts ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/AlertStatus.elm000066400000000000000000000041331476331240200246510ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.AlertStatus exposing (AlertStatus, State(..), decoder, encoder) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias AlertStatus = { state : State , silencedBy : List String , inhibitedBy : List String , mutedBy : List String } type State = Unprocessed | Active | Suppressed decoder : Decoder AlertStatus decoder = Decode.succeed AlertStatus |> required "state" stateDecoder |> required "silencedBy" (Decode.list Decode.string) |> required "inhibitedBy" (Decode.list Decode.string) |> required "mutedBy" (Decode.list Decode.string) encoder : AlertStatus -> Encode.Value encoder model = Encode.object [ ( "state", stateEncoder model.state ) , ( "silencedBy", Encode.list Encode.string model.silencedBy ) , ( "inhibitedBy", Encode.list Encode.string model.inhibitedBy ) , ( "mutedBy", Encode.list Encode.string model.mutedBy ) ] stateDecoder : Decoder State stateDecoder = Decode.string |> Decode.andThen (\str -> case str of "unprocessed" -> Decode.succeed Unprocessed "active" -> Decode.succeed Active "suppressed" -> Decode.succeed Suppressed other -> Decode.fail <| "Unknown type: " ++ other ) stateEncoder : State -> Encode.Value stateEncoder model = case model of Unprocessed -> Encode.string "unprocessed" Active -> Encode.string "active" Suppressed -> Encode.string "suppressed" prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/AlertmanagerConfig.elm000066400000000000000000000015641476331240200261330ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.AlertmanagerConfig exposing (AlertmanagerConfig, decoder, encoder) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias AlertmanagerConfig = { original : String } decoder : Decoder AlertmanagerConfig decoder = Decode.succeed AlertmanagerConfig |> required "original" Decode.string encoder : AlertmanagerConfig -> Encode.Value encoder model = Encode.object [ ( "original", Encode.string model.original ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/AlertmanagerStatus.elm000066400000000000000000000030571476331240200262100ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.AlertmanagerStatus exposing (AlertmanagerStatus, decoder, encoder) import Data.AlertmanagerConfig as AlertmanagerConfig exposing (AlertmanagerConfig) import Data.ClusterStatus as ClusterStatus exposing (ClusterStatus) import Data.VersionInfo as VersionInfo exposing (VersionInfo) import DateTime exposing (DateTime) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias AlertmanagerStatus = { cluster : ClusterStatus , versionInfo : VersionInfo , config : AlertmanagerConfig , uptime : DateTime } decoder : Decoder AlertmanagerStatus decoder = Decode.succeed AlertmanagerStatus |> required "cluster" ClusterStatus.decoder |> required "versionInfo" VersionInfo.decoder |> required "config" AlertmanagerConfig.decoder |> required "uptime" DateTime.decoder encoder : AlertmanagerStatus -> Encode.Value encoder model = Encode.object [ ( "cluster", ClusterStatus.encoder model.cluster ) , ( "versionInfo", VersionInfo.encoder model.versionInfo ) , ( "config", AlertmanagerConfig.encoder model.config ) , ( "uptime", DateTime.encoder model.uptime ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/ClusterStatus.elm000066400000000000000000000041231476331240200252220ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.ClusterStatus exposing (ClusterStatus, Status(..), decoder, encoder) import Data.PeerStatus as PeerStatus exposing (PeerStatus) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias ClusterStatus = { name : Maybe String , status : Status , peers : Maybe (List PeerStatus) } type Status = Ready | Settling | Disabled decoder : Decoder ClusterStatus decoder = Decode.succeed ClusterStatus |> optional "name" (Decode.nullable Decode.string) Nothing |> required "status" statusDecoder |> optional "peers" (Decode.nullable (Decode.list PeerStatus.decoder)) Nothing encoder : ClusterStatus -> Encode.Value encoder model = Encode.object [ ( "name", Maybe.withDefault Encode.null (Maybe.map Encode.string model.name) ) , ( "status", statusEncoder model.status ) , ( "peers", Maybe.withDefault Encode.null (Maybe.map (Encode.list PeerStatus.encoder) model.peers) ) ] statusDecoder : Decoder Status statusDecoder = Decode.string |> Decode.andThen (\str -> case str of "ready" -> Decode.succeed Ready "settling" -> Decode.succeed Settling "disabled" -> Decode.succeed Disabled other -> Decode.fail <| "Unknown type: " ++ other ) statusEncoder : Status -> Encode.Value statusEncoder model = case model of Ready -> Encode.string "ready" Settling -> Encode.string "settling" Disabled -> Encode.string "disabled" prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/GettableAlert.elm000066400000000000000000000043351476331240200251210ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.GettableAlert exposing (GettableAlert, decoder, encoder) import Data.AlertStatus as AlertStatus exposing (AlertStatus) import Data.Receiver as Receiver exposing (Receiver) import DateTime exposing (DateTime) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias GettableAlert = { labels : Dict String String , generatorURL : Maybe String , annotations : Dict String String , receivers : List Receiver , fingerprint : String , startsAt : DateTime , updatedAt : DateTime , endsAt : DateTime , status : AlertStatus } decoder : Decoder GettableAlert decoder = Decode.succeed GettableAlert |> required "labels" (Decode.dict Decode.string) |> optional "generatorURL" (Decode.nullable Decode.string) Nothing |> required "annotations" (Decode.dict Decode.string) |> required "receivers" (Decode.list Receiver.decoder) |> required "fingerprint" Decode.string |> required "startsAt" DateTime.decoder |> required "updatedAt" DateTime.decoder |> required "endsAt" DateTime.decoder |> required "status" AlertStatus.decoder encoder : GettableAlert -> Encode.Value encoder model = Encode.object [ ( "labels", Encode.dict identity Encode.string model.labels ) , ( "generatorURL", Maybe.withDefault Encode.null (Maybe.map Encode.string model.generatorURL) ) , ( "annotations", Encode.dict identity Encode.string model.annotations ) , ( "receivers", Encode.list Receiver.encoder model.receivers ) , ( "fingerprint", Encode.string model.fingerprint ) , ( "startsAt", DateTime.encoder model.startsAt ) , ( "updatedAt", DateTime.encoder model.updatedAt ) , ( "endsAt", DateTime.encoder model.endsAt ) , ( "status", AlertStatus.encoder model.status ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/GettableSilence.elm000066400000000000000000000036171476331240200254360ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.GettableSilence exposing (GettableSilence, decoder, encoder) import Data.Matcher as Matcher exposing (Matcher) import Data.SilenceStatus as SilenceStatus exposing (SilenceStatus) import DateTime exposing (DateTime) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias GettableSilence = { matchers : List Matcher , startsAt : DateTime , endsAt : DateTime , createdBy : String , comment : String , id : String , status : SilenceStatus , updatedAt : DateTime } decoder : Decoder GettableSilence decoder = Decode.succeed GettableSilence |> required "matchers" (Decode.list Matcher.decoder) |> required "startsAt" DateTime.decoder |> required "endsAt" DateTime.decoder |> required "createdBy" Decode.string |> required "comment" Decode.string |> required "id" Decode.string |> required "status" SilenceStatus.decoder |> required "updatedAt" DateTime.decoder encoder : GettableSilence -> Encode.Value encoder model = Encode.object [ ( "matchers", Encode.list Matcher.encoder model.matchers ) , ( "startsAt", DateTime.encoder model.startsAt ) , ( "endsAt", DateTime.encoder model.endsAt ) , ( "createdBy", Encode.string model.createdBy ) , ( "comment", Encode.string model.comment ) , ( "id", Encode.string model.id ) , ( "status", SilenceStatus.encoder model.status ) , ( "updatedAt", DateTime.encoder model.updatedAt ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/InlineResponse200.elm000066400000000000000000000016741476331240200255640ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.InlineResponse200 exposing (InlineResponse200, decoder, encoder) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias InlineResponse200 = { silenceID : Maybe String } decoder : Decoder InlineResponse200 decoder = Decode.succeed InlineResponse200 |> optional "silenceID" (Decode.nullable Decode.string) Nothing encoder : InlineResponse200 -> Encode.Value encoder model = Encode.object [ ( "silenceID", Maybe.withDefault Encode.null (Maybe.map Encode.string model.silenceID) ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/Matcher.elm000066400000000000000000000023041476331240200237570ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.Matcher exposing (Matcher, decoder, encoder) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias Matcher = { name : String , value : String , isRegex : Bool , isEqual : Maybe Bool } decoder : Decoder Matcher decoder = Decode.succeed Matcher |> required "name" Decode.string |> required "value" Decode.string |> required "isRegex" Decode.bool |> optional "isEqual" (Decode.nullable Decode.bool) (Just True) encoder : Matcher -> Encode.Value encoder model = Encode.object [ ( "name", Encode.string model.name ) , ( "value", Encode.string model.value ) , ( "isRegex", Encode.bool model.isRegex ) , ( "isEqual", Maybe.withDefault Encode.null (Maybe.map Encode.bool model.isEqual) ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/PeerStatus.elm000066400000000000000000000016541476331240200245020ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.PeerStatus exposing (PeerStatus, decoder, encoder) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias PeerStatus = { name : String , address : String } decoder : Decoder PeerStatus decoder = Decode.succeed PeerStatus |> required "name" Decode.string |> required "address" Decode.string encoder : PeerStatus -> Encode.Value encoder model = Encode.object [ ( "name", Encode.string model.name ) , ( "address", Encode.string model.address ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/PostableAlert.elm000066400000000000000000000034201476331240200251350ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.PostableAlert exposing (PostableAlert, decoder, encoder) import DateTime exposing (DateTime) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias PostableAlert = { labels : Dict String String , generatorURL : Maybe String , startsAt : Maybe DateTime , endsAt : Maybe DateTime , annotations : Maybe (Dict String String) } decoder : Decoder PostableAlert decoder = Decode.succeed PostableAlert |> required "labels" (Decode.dict Decode.string) |> optional "generatorURL" (Decode.nullable Decode.string) Nothing |> optional "startsAt" (Decode.nullable DateTime.decoder) Nothing |> optional "endsAt" (Decode.nullable DateTime.decoder) Nothing |> optional "annotations" (Decode.nullable (Decode.dict Decode.string)) Nothing encoder : PostableAlert -> Encode.Value encoder model = Encode.object [ ( "labels", Encode.dict identity Encode.string model.labels ) , ( "generatorURL", Maybe.withDefault Encode.null (Maybe.map Encode.string model.generatorURL) ) , ( "startsAt", Maybe.withDefault Encode.null (Maybe.map DateTime.encoder model.startsAt) ) , ( "endsAt", Maybe.withDefault Encode.null (Maybe.map DateTime.encoder model.endsAt) ) , ( "annotations", Maybe.withDefault Encode.null (Maybe.map (Encode.dict identity Encode.string) model.annotations) ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/PostableSilence.elm000066400000000000000000000032021476331240200254460ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.PostableSilence exposing (PostableSilence, decoder, encoder) import Data.Matcher as Matcher exposing (Matcher) import DateTime exposing (DateTime) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias PostableSilence = { matchers : List Matcher , startsAt : DateTime , endsAt : DateTime , createdBy : String , comment : String , id : Maybe String } decoder : Decoder PostableSilence decoder = Decode.succeed PostableSilence |> required "matchers" (Decode.list Matcher.decoder) |> required "startsAt" DateTime.decoder |> required "endsAt" DateTime.decoder |> required "createdBy" Decode.string |> required "comment" Decode.string |> optional "id" (Decode.nullable Decode.string) Nothing encoder : PostableSilence -> Encode.Value encoder model = Encode.object [ ( "matchers", Encode.list Matcher.encoder model.matchers ) , ( "startsAt", DateTime.encoder model.startsAt ) , ( "endsAt", DateTime.encoder model.endsAt ) , ( "createdBy", Encode.string model.createdBy ) , ( "comment", Encode.string model.comment ) , ( "id", Maybe.withDefault Encode.null (Maybe.map Encode.string model.id) ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/Receiver.elm000066400000000000000000000014501476331240200241410ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.Receiver exposing (Receiver, decoder, encoder) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias Receiver = { name : String } decoder : Decoder Receiver decoder = Decode.succeed Receiver |> required "name" Decode.string encoder : Receiver -> Encode.Value encoder model = Encode.object [ ( "name", Encode.string model.name ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/Silence.elm000066400000000000000000000026501476331240200237620ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.Silence exposing (Silence(..), decoder, encoder) import Data.Matcher as Matcher exposing (Matcher) import DateTime exposing (DateTime) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias Silence = { matchers : List Matcher , startsAt : DateTime , endsAt : DateTime , createdBy : String , comment : String } decoder : Decoder Silence decoder = Decode.succeed Silence |> required "matchers" (Decode.list Matcher.decoder) |> required "startsAt" DateTime.decoder |> required "endsAt" DateTime.decoder |> required "createdBy" Decode.string |> required "comment" Decode.string encoder : Silence -> Encode.Value encoder model = Encode.object [ ( "matchers", Encode.list Matcher.encoder model.matchers ) , ( "startsAt", DateTime.encoder model.startsAt ) , ( "endsAt", DateTime.encoder model.endsAt ) , ( "createdBy", Encode.string model.createdBy ) , ( "comment", Encode.string model.comment ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/SilenceStatus.elm000066400000000000000000000031431476331240200251640ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.SilenceStatus exposing (SilenceStatus, State(..), decoder, encoder) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias SilenceStatus = { state : State } type State = Expired | Active | Pending decoder : Decoder SilenceStatus decoder = Decode.succeed SilenceStatus |> required "state" stateDecoder encoder : SilenceStatus -> Encode.Value encoder model = Encode.object [ ( "state", stateEncoder model.state ) ] stateDecoder : Decoder State stateDecoder = Decode.string |> Decode.andThen (\str -> case str of "expired" -> Decode.succeed Expired "active" -> Decode.succeed Active "pending" -> Decode.succeed Pending other -> Decode.fail <| "Unknown type: " ++ other ) stateEncoder : State -> Encode.Value stateEncoder model = case model of Expired -> Encode.string "expired" Active -> Encode.string "active" Pending -> Encode.string "pending" prometheus-alertmanager-0.28.1+ds/ui/app/src/Data/VersionInfo.elm000066400000000000000000000026661476331240200246500ustar00rootroot00000000000000{- Alertmanager API API of the Prometheus Alertmanager (https://github.com/prometheus/alertmanager) OpenAPI spec version: 0.0.1 NOTE: This file is auto generated by the openapi-generator. https://github.com/openapitools/openapi-generator.git Do not edit this file manually. -} module Data.VersionInfo exposing (VersionInfo, decoder, encoder) import Dict exposing (Dict) import Json.Decode as Decode exposing (Decoder) import Json.Decode.Pipeline exposing (optional, required) import Json.Encode as Encode type alias VersionInfo = { version : String , revision : String , branch : String , buildUser : String , buildDate : String , goVersion : String } decoder : Decoder VersionInfo decoder = Decode.succeed VersionInfo |> required "version" Decode.string |> required "revision" Decode.string |> required "branch" Decode.string |> required "buildUser" Decode.string |> required "buildDate" Decode.string |> required "goVersion" Decode.string encoder : VersionInfo -> Encode.Value encoder model = Encode.object [ ( "version", Encode.string model.version ) , ( "revision", Encode.string model.revision ) , ( "branch", Encode.string model.branch ) , ( "buildUser", Encode.string model.buildUser ) , ( "buildDate", Encode.string model.buildDate ) , ( "goVersion", Encode.string model.goVersion ) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/DateTime.elm000066400000000000000000000012721476331240200232220ustar00rootroot00000000000000module DateTime exposing (DateTime, decoder, encoder, toString) import Iso8601 import Json.Decode as Decode exposing (Decoder) import Json.Encode as Encode import Result import Time type alias DateTime = Time.Posix decoder : Decoder DateTime decoder = Decode.string |> Decode.andThen decodeIsoString encoder : DateTime -> Encode.Value encoder = Encode.string << toString decodeIsoString : String -> Decoder DateTime decodeIsoString str = case Iso8601.toTime str of Result.Ok posix -> Decode.succeed posix Result.Err _ -> Decode.fail <| "Invalid date: " ++ str toString : DateTime -> String toString = Iso8601.fromTime prometheus-alertmanager-0.28.1+ds/ui/app/src/Main.elm000066400000000000000000000100651476331240200224120ustar00rootroot00000000000000module Main exposing (main) import Browser exposing (UrlRequest(..)) import Browser.Navigation exposing (Key) import Json.Decode as Json import Parsing import Types exposing (Model, Msg(..), Route(..)) import Updates exposing (update) import Url exposing (Url) import Utils.Api as Api import Utils.DateTimePicker.Utils exposing (FirstDayOfWeek(..)) import Utils.Filter exposing (nullFilter) import Utils.Types exposing (ApiData(..)) import Views import Views.AlertList.Types exposing (initAlertList) import Views.SilenceForm.Types exposing (initSilenceForm) import Views.SilenceList.Types exposing (initSilenceList) import Views.SilenceView.Types exposing (initSilenceView) import Views.Status.Types exposing (initStatusModel) main : Program Json.Value Model Msg main = Browser.application { init = init , update = update , view = \model -> { title = "Alertmanager" , body = [ Views.view model ] } , subscriptions = always Sub.none , onUrlRequest = \request -> case request of Internal url -> NavigateToInternalUrl (Url.toString url) External url -> NavigateToExternalUrl url , onUrlChange = urlUpdate } init : Json.Value -> Url -> Key -> ( Model, Cmd Msg ) init flags url key = let route = Parsing.urlParser url filter = case route of AlertsRoute filter_ -> filter_ SilenceListRoute filter_ -> filter_ _ -> nullFilter prod = flags |> Json.decodeValue (Json.field "production" Json.bool) |> Result.withDefault False defaultCreator = flags |> Json.decodeValue (Json.field "defaultCreator" Json.string) |> Result.withDefault "" groupExpandAll = flags |> Json.decodeValue (Json.field "groupExpandAll" Json.bool) |> Result.withDefault False apiUrl = if prod then Api.makeApiUrl url.path else Api.makeApiUrl "http://localhost:9093/" libUrl = if prod then url.path else "/" firstDayOfWeek = flags |> Json.decodeValue (Json.field "firstDayOfWeek" Json.string) |> Result.withDefault "Sunday" |> (\d -> case d of "Sunday" -> Sunday _ -> Monday ) in update (urlUpdate url) (Model (initSilenceList key) (initSilenceView key) (initSilenceForm key firstDayOfWeek) (initAlertList key groupExpandAll) route filter initStatusModel url.path apiUrl libUrl Loading Loading Loading defaultCreator groupExpandAll key { firstDayOfWeek = firstDayOfWeek } ) urlUpdate : Url -> Msg urlUpdate url = let route = Parsing.urlParser url in case route of SilenceListRoute maybeFilter -> NavigateToSilenceList maybeFilter SilenceViewRoute silenceId -> NavigateToSilenceView silenceId SilenceFormEditRoute silenceId -> NavigateToSilenceFormEdit silenceId SilenceFormNewRoute params -> NavigateToSilenceFormNew params AlertsRoute filter -> NavigateToAlerts filter StatusRoute -> NavigateToStatus SettingsRoute -> NavigateToSettings TopLevelRoute -> RedirectAlerts NotFoundRoute -> NavigateToNotFound prometheus-alertmanager-0.28.1+ds/ui/app/src/Parsing.elm000066400000000000000000000034171476331240200231340ustar00rootroot00000000000000module Parsing exposing (urlParser) import Regex import Types exposing (Route(..)) import Url exposing (Url) import Url.Parser exposing (Parser, map, oneOf, parse, top) import Views.AlertList.Parsing exposing (alertsParser) import Views.Settings.Parsing exposing (settingsViewParser) import Views.SilenceForm.Parsing exposing (silenceFormEditParser, silenceFormNewParser) import Views.SilenceList.Parsing exposing (silenceListParser) import Views.SilenceView.Parsing exposing (silenceViewParser) import Views.Status.Parsing exposing (statusParser) urlParser : Url -> Route urlParser url = let -- Parse a query string occurring after the hash if it exists, and use -- it for routing. hashAndQuery = url.fragment |> Maybe.map (Regex.splitAtMost 1 (Regex.fromString "\\?" |> Maybe.withDefault Regex.never)) |> Maybe.withDefault [] ( path, query ) = case hashAndQuery of [] -> ( "/", Nothing ) h :: [] -> ( h, Nothing ) h :: rest -> ( h, Just (String.concat rest) ) in case parse routeParser { url | query = query, fragment = Nothing, path = path } of Just route -> route Nothing -> NotFoundRoute routeParser : Parser (Route -> a) a routeParser = oneOf [ map SilenceListRoute silenceListParser , map StatusRoute statusParser , map SettingsRoute settingsViewParser , map SilenceFormNewRoute silenceFormNewParser , map SilenceViewRoute silenceViewParser , map SilenceFormEditRoute silenceFormEditParser , map AlertsRoute alertsParser , map TopLevelRoute top ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Silences/000077500000000000000000000000001476331240200225725ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Silences/Api.elm000066400000000000000000000036741476331240200240140ustar00rootroot00000000000000module Silences.Api exposing (create, destroy, getSilence, getSilences) import Data.GettableSilence exposing (GettableSilence) import Data.PostableSilence exposing (PostableSilence) import Http import Json.Decode import Silences.Decoders import Utils.Api import Utils.Filter exposing (Filter, generateAPIQueryString) import Utils.Types exposing (ApiData(..)) getSilences : String -> Filter -> (ApiData (List GettableSilence) -> msg) -> Cmd msg getSilences apiUrl filter msg = let url = String.join "/" [ apiUrl, "silences" ++ generateAPIQueryString filter ] in Utils.Api.send (Utils.Api.get url (Json.Decode.list Data.GettableSilence.decoder)) |> Cmd.map msg getSilence : String -> String -> (ApiData GettableSilence -> msg) -> Cmd msg getSilence apiUrl uuid msg = let url = String.join "/" [ apiUrl, "silence", uuid ] in Utils.Api.send (Utils.Api.get url Data.GettableSilence.decoder) |> Cmd.map msg create : String -> PostableSilence -> Cmd (ApiData String) create apiUrl silence = let url = String.join "/" [ apiUrl, "silences" ] body = Http.jsonBody <| Data.PostableSilence.encoder silence in -- TODO: This should return the silence, not just the ID, so that we can -- redirect to the silence show page. Utils.Api.send (Utils.Api.post url body Silences.Decoders.create) destroy : String -> GettableSilence -> (ApiData String -> msg) -> Cmd msg destroy apiUrl silence msg = -- The incorrect route using "silences" receives a 405. The route seems to -- be matching on /silences and ignoring the :sid, should be getting a 404. let url = String.join "/" [ apiUrl, "silence", silence.id ] responseDecoder = -- Silences.Encoders.silence silence Silences.Decoders.destroy in Utils.Api.send (Utils.Api.delete url responseDecoder) |> Cmd.map msg prometheus-alertmanager-0.28.1+ds/ui/app/src/Silences/Decoders.elm000066400000000000000000000004311476331240200250170ustar00rootroot00000000000000module Silences.Decoders exposing (create, destroy) import Json.Decode as Json import Utils.Types exposing (ApiData(..)) create : Json.Decoder String create = Json.at [ "silenceID" ] Json.string destroy : Json.Decoder String destroy = Json.at [ "status" ] Json.string prometheus-alertmanager-0.28.1+ds/ui/app/src/Silences/Types.elm000066400000000000000000000014141476331240200243750ustar00rootroot00000000000000module Silences.Types exposing ( nullSilence , stateToString ) import Data.Matcher exposing (Matcher) import Data.PostableSilence exposing (PostableSilence) import Data.SilenceStatus exposing (State(..)) import Time nullSilence : PostableSilence nullSilence = { id = Nothing , createdBy = "" , comment = "" , startsAt = Time.millisToPosix 0 , endsAt = Time.millisToPosix 0 , matchers = nullMatchers } nullMatchers : List Matcher nullMatchers = [ nullMatcher ] nullMatcher : Matcher nullMatcher = Matcher "" "" False (Just True) stateToString : State -> String stateToString state = case state of Active -> "active" Pending -> "pending" Expired -> "expired" prometheus-alertmanager-0.28.1+ds/ui/app/src/Status/000077500000000000000000000000001476331240200223105ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Status/Api.elm000066400000000000000000000013451476331240200235230ustar00rootroot00000000000000module Status.Api exposing (clusterStatusToString, getStatus) import Data.AlertmanagerStatus exposing (AlertmanagerStatus) import Data.ClusterStatus exposing (Status(..)) import Utils.Api exposing (get, send) import Utils.Types exposing (ApiData) getStatus : String -> (ApiData AlertmanagerStatus -> msg) -> Cmd msg getStatus apiUrl msg = let url = String.join "/" [ apiUrl, "status" ] request = get url Data.AlertmanagerStatus.decoder in Cmd.map msg <| send request clusterStatusToString : Status -> String clusterStatusToString status = case status of Ready -> "ready" Settling -> "settling" Disabled -> "disabled" prometheus-alertmanager-0.28.1+ds/ui/app/src/Status/Types.elm000066400000000000000000000011121476331240200241060ustar00rootroot00000000000000module Status.Types exposing (ClusterPeer, ClusterStatus, VersionInfo) type alias StatusResponse = { config : String , uptime : String , versionInfo : VersionInfo , clusterStatus : Maybe ClusterStatus } type alias VersionInfo = { branch : String , buildDate : String , buildUser : String , goVersion : String , revision : String , version : String } type alias ClusterStatus = { name : String , status : String , peers : List ClusterPeer } type alias ClusterPeer = { name : String , address : String } prometheus-alertmanager-0.28.1+ds/ui/app/src/Types.elm000066400000000000000000000041571476331240200226370ustar00rootroot00000000000000module Types exposing (Model, Msg(..), Route(..)) import Browser.Navigation exposing (Key) import Utils.Filter exposing (Filter, SilenceFormGetParams) import Utils.Types exposing (ApiData) import Views.AlertList.Types as AlertList exposing (AlertListMsg) import Views.Settings.Types as SettingsView exposing (SettingsMsg) import Views.SilenceForm.Types as SilenceForm exposing (SilenceFormMsg) import Views.SilenceList.Types as SilenceList exposing (SilenceListMsg) import Views.SilenceView.Types as SilenceView exposing (SilenceViewMsg) import Views.Status.Types exposing (StatusModel, StatusMsg) type alias Model = { silenceList : SilenceList.Model , silenceView : SilenceView.Model , silenceForm : SilenceForm.Model , alertList : AlertList.Model , route : Route , filter : Filter , status : StatusModel , basePath : String , apiUrl : String , libUrl : String , bootstrapCSS : ApiData String , fontAwesomeCSS : ApiData String , elmDatepickerCSS : ApiData String , defaultCreator : String , expandAll : Bool , key : Key , settings : SettingsView.Model } type Msg = MsgForAlertList AlertListMsg | MsgForSilenceView SilenceViewMsg | MsgForSilenceForm SilenceFormMsg | MsgForSilenceList SilenceListMsg | MsgForStatus StatusMsg | MsgForSettings SettingsMsg | NavigateToAlerts Filter | NavigateToNotFound | NavigateToSilenceView String | NavigateToSilenceFormEdit String | NavigateToSilenceFormNew SilenceFormGetParams | NavigateToSilenceList Filter | NavigateToStatus | NavigateToSettings | NavigateToInternalUrl String | NavigateToExternalUrl String | RedirectAlerts | BootstrapCSSLoaded (ApiData String) | FontAwesomeCSSLoaded (ApiData String) | ElmDatepickerCSSLoaded (ApiData String) | SetDefaultCreator String | SetGroupExpandAll Bool type Route = AlertsRoute Filter | NotFoundRoute | SilenceFormEditRoute String | SilenceFormNewRoute SilenceFormGetParams | SilenceListRoute Filter | SilenceViewRoute String | StatusRoute | TopLevelRoute | SettingsRoute prometheus-alertmanager-0.28.1+ds/ui/app/src/Updates.elm000066400000000000000000000111651476331240200231350ustar00rootroot00000000000000module Updates exposing (update) import Browser.Navigation as Navigation import Task import Types exposing (Model, Msg(..), Route(..)) import Views.AlertList.Types exposing (AlertListMsg(..)) import Views.AlertList.Updates import Views.Settings.Updates import Views.SilenceForm.Types exposing (SilenceFormMsg(..)) import Views.SilenceForm.Updates import Views.SilenceList.Types exposing (SilenceListMsg(..)) import Views.SilenceList.Updates import Views.SilenceView.Types as SilenceViewTypes import Views.SilenceView.Updates import Views.Status.Types exposing (StatusMsg(..)) import Views.Status.Updates update : Msg -> Model -> ( Model, Cmd Msg ) update msg ({ basePath, apiUrl } as model) = case msg of NavigateToAlerts filter -> let ( alertList, cmd ) = Views.AlertList.Updates.update FetchAlerts model.alertList filter apiUrl basePath in ( { model | alertList = alertList, route = AlertsRoute filter, filter = filter }, cmd ) NavigateToSilenceList filter -> let ( silenceList, cmd ) = Views.SilenceList.Updates.update FetchSilences model.silenceList filter basePath apiUrl in ( { model | silenceList = silenceList, route = SilenceListRoute filter, filter = filter } , Cmd.map MsgForSilenceList cmd ) NavigateToStatus -> ( { model | route = StatusRoute }, Task.perform identity (Task.succeed <| MsgForStatus <| InitStatusView apiUrl) ) NavigateToSilenceView silenceId -> let ( silenceView, cmd ) = Views.SilenceView.Updates.update (SilenceViewTypes.InitSilenceView silenceId) model.silenceView apiUrl in ( { model | route = SilenceViewRoute silenceId, silenceView = silenceView } , Cmd.map MsgForSilenceView cmd ) NavigateToSilenceFormNew params -> ( { model | route = SilenceFormNewRoute params } , Task.perform (NewSilenceFromMatchersAndComment model.defaultCreator >> MsgForSilenceForm) (Task.succeed params) ) NavigateToSilenceFormEdit uuid -> ( { model | route = SilenceFormEditRoute uuid }, Task.perform identity (Task.succeed <| (FetchSilence uuid |> MsgForSilenceForm)) ) NavigateToNotFound -> ( { model | route = NotFoundRoute }, Cmd.none ) NavigateToInternalUrl url -> ( model, Navigation.pushUrl model.key url ) NavigateToExternalUrl url -> ( model, Navigation.load url ) RedirectAlerts -> ( model, Navigation.pushUrl model.key (basePath ++ "#/alerts") ) NavigateToSettings -> ( { model | route = SettingsRoute }, Cmd.none ) MsgForStatus subMsg -> Views.Status.Updates.update subMsg model MsgForAlertList subMsg -> let ( alertList, cmd ) = Views.AlertList.Updates.update subMsg model.alertList model.filter apiUrl basePath in ( { model | alertList = alertList }, cmd ) MsgForSilenceList subMsg -> let ( silenceList, cmd ) = Views.SilenceList.Updates.update subMsg model.silenceList model.filter basePath apiUrl in ( { model | silenceList = silenceList }, Cmd.map MsgForSilenceList cmd ) MsgForSettings subMsg -> let ( settingsView, cmd ) = Views.Settings.Updates.update subMsg model.settings in ( { model | settings = settingsView }, cmd ) MsgForSilenceView subMsg -> let ( silenceView, cmd ) = Views.SilenceView.Updates.update subMsg model.silenceView apiUrl in ( { model | silenceView = silenceView }, Cmd.map MsgForSilenceView cmd ) MsgForSilenceForm subMsg -> let ( silenceForm, cmd ) = Views.SilenceForm.Updates.update subMsg model.silenceForm basePath apiUrl in ( { model | silenceForm = silenceForm }, cmd ) BootstrapCSSLoaded css -> ( { model | bootstrapCSS = css }, Cmd.none ) FontAwesomeCSSLoaded css -> ( { model | fontAwesomeCSS = css }, Cmd.none ) ElmDatepickerCSSLoaded css -> ( { model | elmDatepickerCSS = css }, Cmd.none ) SetDefaultCreator name -> ( { model | defaultCreator = name }, Cmd.none ) SetGroupExpandAll expanded -> ( { model | expandAll = expanded }, Cmd.none ) prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/000077500000000000000000000000001476331240200221255ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/Api.elm000066400000000000000000000044501476331240200233400ustar00rootroot00000000000000module Utils.Api exposing (delete, get, makeApiUrl, map, post, send) import Http exposing (Error(..)) import Json.Decode as Json exposing (field) import Utils.Types exposing (ApiData(..)) map : (a -> b) -> ApiData a -> ApiData b map fn response = case response of Success value -> Success (fn value) Initial -> Initial Loading -> Loading Failure a -> Failure a parseError : String -> Maybe String parseError = Json.decodeString (field "error" Json.string) >> Result.toMaybe errorToString : Http.Error -> String errorToString err = case err of Timeout -> "Timeout exceeded" NetworkError -> "Network error" BadStatus resp -> parseError resp.body |> Maybe.withDefault (String.fromInt resp.status.code ++ " " ++ resp.status.message) BadPayload err_ _ -> -- OK status, unexpected payload "Unexpected response from api: " ++ err_ BadUrl url -> "Malformed url: " ++ url fromResult : Result Http.Error a -> ApiData a fromResult result = case result of Err e -> Failure (errorToString e) Ok x -> Success x send : Http.Request a -> Cmd (ApiData a) send = Http.send fromResult get : String -> Json.Decoder a -> Http.Request a get url decoder = request "GET" [] url Http.emptyBody decoder post : String -> Http.Body -> Json.Decoder a -> Http.Request a post url body decoder = request "POST" [] url body decoder delete : String -> Json.Decoder a -> Http.Request a delete url decoder = request "DELETE" [] url Http.emptyBody decoder request : String -> List Http.Header -> String -> Http.Body -> Json.Decoder a -> Http.Request a request method headers url body decoder = Http.request { method = method , headers = headers , url = url , body = body , expect = Http.expectJson decoder , timeout = Nothing , withCredentials = False } makeApiUrl : String -> String makeApiUrl externalUrl = let url = if String.endsWith "/" externalUrl then String.dropRight 1 externalUrl else externalUrl in url ++ "/api/v2" prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/Date.elm000066400000000000000000000046331476331240200235070ustar00rootroot00000000000000module Utils.Date exposing ( addDuration , dateTimeFormat , durationFormat , parseDuration , timeDifference , timeFromString , timeToString ) import Iso8601 import Parser exposing ((|.), (|=), Parser) import Time exposing (Posix) import Tuple parseDuration : String -> Result String Float parseDuration = Parser.run durationParser >> Result.mapError (always "Wrong duration format") durationParser : Parser Float durationParser = Parser.succeed identity |= Parser.loop 0 durationHelp |. Parser.spaces |. Parser.end durationHelp : Float -> Parser (Parser.Step Float Float) durationHelp duration = Parser.oneOf [ Parser.succeed (\d -> Parser.Loop (d + duration)) |= term |. Parser.spaces , Parser.succeed (Parser.Done duration) ] units : List ( String, number ) units = [ ( "w", 604800000 ) , ( "d", 86400000 ) , ( "h", 3600000 ) , ( "m", 60000 ) , ( "s", 1000 ) ] timeToString : Posix -> String timeToString = Iso8601.fromTime term : Parser Float term = Parser.succeed (*) |= Parser.float |= (units |> List.map (\( unit, ms ) -> Parser.succeed ms |. Parser.symbol unit) |> Parser.oneOf ) addDuration : Float -> Posix -> Posix addDuration duration time = Time.millisToPosix <| (Time.posixToMillis time + round duration) timeDifference : Posix -> Posix -> Float timeDifference startsAt endsAt = toFloat <| (Time.posixToMillis endsAt - Time.posixToMillis startsAt) durationFormat : Float -> Maybe String durationFormat duration = if duration >= 0 then List.foldl (\( unit, ms ) ( result, curr ) -> ( if curr // ms == 0 then result else result ++ String.fromInt (curr // ms) ++ unit ++ " " , modBy ms curr ) ) ( "", round duration ) units |> Tuple.first |> String.trim |> Just else Nothing dateTimeFormat : Posix -> String dateTimeFormat = Iso8601.fromTime timeFromString : String -> Result String Posix timeFromString string = if string == "" then Err "Should not be empty" else Iso8601.toTime string |> Result.mapError (always "Wrong ISO8601 format") prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/DateTimePicker/000077500000000000000000000000001476331240200247575ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/DateTimePicker/Types.elm000066400000000000000000000031271476331240200265650ustar00rootroot00000000000000module Utils.DateTimePicker.Types exposing ( DateTimePicker , InputHourOrMinute(..) , Msg(..) , StartOrEnd(..) , initDateTimePicker , initFromStartAndEndTime ) import Time exposing (Posix) import Utils.DateTimePicker.Utils exposing (FirstDayOfWeek, floorMinute) type alias DateTimePicker = { month : Maybe Posix , mouseOverDay : Maybe Posix , startDate : Maybe Posix , endDate : Maybe Posix , startTime : Maybe Posix , endTime : Maybe Posix , firstDayOfWeek : FirstDayOfWeek } type Msg = NextMonth | PrevMonth | MouseOverDay Posix | OnClickDay | ClearMouseOverDay | SetInputTime StartOrEnd InputHourOrMinute Int | IncrementTime StartOrEnd InputHourOrMinute Int type StartOrEnd = Start | End type InputHourOrMinute = InputHour | InputMinute initDateTimePicker : FirstDayOfWeek -> DateTimePicker initDateTimePicker firstDayOfWeek = { month = Nothing , mouseOverDay = Nothing , startDate = Nothing , endDate = Nothing , startTime = Nothing , endTime = Nothing , firstDayOfWeek = firstDayOfWeek } initFromStartAndEndTime : Maybe Posix -> Maybe Posix -> FirstDayOfWeek -> DateTimePicker initFromStartAndEndTime start end firstDayOfWeek = let startTime = Maybe.map (\s -> floorMinute s) start endTime = Maybe.map (\e -> floorMinute e) end in { month = start , mouseOverDay = Nothing , startDate = start , endDate = end , startTime = startTime , endTime = endTime , firstDayOfWeek = firstDayOfWeek } prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/DateTimePicker/Updates.elm000066400000000000000000000146621476331240200270740ustar00rootroot00000000000000module Utils.DateTimePicker.Updates exposing (update) import Time exposing (Posix) import Utils.DateTimePicker.Types exposing ( DateTimePicker , InputHourOrMinute(..) , Msg(..) , StartOrEnd(..) ) import Utils.DateTimePicker.Utils exposing ( addHour , addMinute , firstDayOfNextMonth , firstDayOfPrevMonth , floorDate , trimTime , updateHour , updateMinute ) update : Msg -> DateTimePicker -> DateTimePicker update msg dateTimePicker = let justMonth = dateTimePicker.month |> Maybe.withDefault (Time.millisToPosix 0) setTime_ : StartOrEnd -> InputHourOrMinute -> (InputHourOrMinute -> Posix -> Posix) -> ( Maybe Posix, Maybe Posix ) setTime_ soe ihom updateTime = let set_ : Maybe Posix -> Maybe Posix set_ a = Maybe.map (\b -> updateTime ihom b) a in case soe of Start -> ( set_ dateTimePicker.startTime, dateTimePicker.endTime ) End -> ( dateTimePicker.startTime, set_ dateTimePicker.endTime ) in case msg of NextMonth -> { dateTimePicker | month = Just (firstDayOfNextMonth justMonth) } PrevMonth -> { dateTimePicker | month = Just (firstDayOfPrevMonth justMonth) } MouseOverDay time -> { dateTimePicker | mouseOverDay = Just time } ClearMouseOverDay -> { dateTimePicker | mouseOverDay = Nothing } OnClickDay -> let addDateTime_ : Posix -> Maybe Posix -> Posix addDateTime_ date maybeTime = case maybeTime of Just time -> floorDate date |> Time.posixToMillis |> (\d -> trimTime time |> Time.posixToMillis |> (\t -> d + t) ) |> Time.millisToPosix Nothing -> floorDate date updateTime_ : Maybe Posix -> Maybe Posix -> Maybe Posix updateTime_ maybeDate maybeTime = case maybeDate of Just date -> Just <| addDateTime_ date maybeTime Nothing -> maybeTime ( startDate, endDate ) = case dateTimePicker.mouseOverDay of Just m -> case ( dateTimePicker.startDate, dateTimePicker.endDate ) of ( Nothing, Nothing ) -> ( Just m , Nothing ) ( Just start, Nothing ) -> case compare (floorDate m |> Time.posixToMillis) (floorDate start |> Time.posixToMillis) of LT -> ( Just m , Just start ) _ -> ( Just start , Just m ) ( Nothing, Just end ) -> ( Just m , Just end ) ( Just _, Just _ ) -> ( Just m , Nothing ) _ -> ( dateTimePicker.startDate , dateTimePicker.endDate ) in { dateTimePicker | startDate = startDate , endDate = endDate , startTime = updateTime_ startDate dateTimePicker.startTime , endTime = updateTime_ endDate dateTimePicker.endTime } SetInputTime startOrEnd inputHourOrMinute num -> let limit_ : Int -> Int -> Int limit_ limit n = if n < 0 then 0 else modBy limit n updateHourOrMinute_ : InputHourOrMinute -> Posix -> Posix updateHourOrMinute_ ihom s = case ihom of InputHour -> updateHour (limit_ 24 num) s InputMinute -> updateMinute (limit_ 60 num) s ( startTime, endTime ) = setTime_ startOrEnd inputHourOrMinute updateHourOrMinute_ in { dateTimePicker | startTime = startTime, endTime = endTime } IncrementTime startOrEnd inputHourOrMinute num -> let updateHourOrMinute_ : InputHourOrMinute -> Posix -> Posix updateHourOrMinute_ ihom s = let compare_ : Posix -> Posix compare_ a = if (floorDate s |> Time.posixToMillis) == (floorDate a |> Time.posixToMillis) then a else s in case ihom of InputHour -> addHour num s |> compare_ InputMinute -> addMinute num s |> compare_ ( startTime, endTime ) = setTime_ startOrEnd inputHourOrMinute updateHourOrMinute_ in { dateTimePicker | startTime = startTime, endTime = endTime } prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/DateTimePicker/Utils.elm000066400000000000000000000120201476331240200265510ustar00rootroot00000000000000module Utils.DateTimePicker.Utils exposing ( FirstDayOfWeek(..) , addHour , addMinute , firstDayOfNextMonth , firstDayOfPrevMonth , floorDate , floorMinute , floorMonth , listDaysOfMonth , monthToString , splitWeek , targetValueIntParse , trimTime , updateHour , updateMinute ) import Html.Events exposing (targetValue) import Json.Decode as Decode import Time exposing (Month(..), Posix, Weekday(..), utc) import Time.Extra as Time exposing (Interval(..)) type FirstDayOfWeek = Monday | Sunday listDaysOfMonth : Posix -> FirstDayOfWeek -> List Posix listDaysOfMonth time firstDayOfWeek = let firstOfMonth = Time.floor Time.Month utc time firstOfNextMonth = firstDayOfNextMonth time padFront = weekToInt (Time.toWeekday utc firstOfMonth) |> (\wd -> case firstDayOfWeek of Sunday -> if wd == 7 then 0 else wd Monday -> if wd == 1 then 0 else wd - 1 ) |> (\w -> Time.add Time.Day -w utc firstOfMonth) |> (\d -> Time.range Time.Day 1 utc d firstOfMonth) padBack = weekToInt (Time.toWeekday utc firstOfNextMonth) |> (\wd -> case firstDayOfWeek of Sunday -> wd Monday -> if wd == 1 then 7 else wd - 1 ) |> (\w -> Time.add Time.Day (7 - w) utc firstOfNextMonth) |> Time.range Time.Day 1 utc firstOfNextMonth in Time.range Time.Day 1 utc firstOfMonth firstOfNextMonth |> (\m -> padFront ++ m ++ padBack) firstDayOfNextMonth : Posix -> Posix firstDayOfNextMonth time = Time.floor Time.Month utc time |> Time.add Time.Day 1 utc |> Time.ceiling Time.Month utc firstDayOfPrevMonth : Posix -> Posix firstDayOfPrevMonth time = Time.floor Time.Month utc time |> Time.add Time.Day -1 utc |> Time.floor Time.Month utc splitWeek : List Posix -> List (List Posix) -> List (List Posix) splitWeek days weeks = if List.length days < 7 then weeks else List.append weeks [ List.take 7 days ] |> splitWeek (List.drop 7 days) floorDate : Posix -> Posix floorDate time = Time.floor Time.Day utc time floorMonth : Posix -> Posix floorMonth time = Time.floor Time.Month utc time floorMinute : Posix -> Posix floorMinute time = Time.floor Time.Minute utc time trimTime : Posix -> Posix trimTime time = Time.floor Time.Day utc time |> Time.posixToMillis |> (\d -> Time.posixToMillis time - d ) |> Time.millisToPosix updateHour : Int -> Posix -> Posix updateHour n time = let diff = n - Time.toHour utc time in Time.add Hour diff utc time updateMinute : Int -> Posix -> Posix updateMinute n time = let diff = n - Time.toMinute utc time in Time.add Minute diff utc time addHour : Int -> Posix -> Posix addHour n time = Time.add Hour n utc time addMinute : Int -> Posix -> Posix addMinute n time = Time.add Minute n utc time weekToInt : Weekday -> Int weekToInt weekday = case weekday of Mon -> 1 Tue -> 2 Wed -> 3 Thu -> 4 Fri -> 5 Sat -> 6 Sun -> 7 monthToString : Month -> String monthToString month = case month of Jan -> "January" Feb -> "February" Mar -> "March" Apr -> "April" May -> "May" Jun -> "June" Jul -> "July" Aug -> "August" Sep -> "September" Oct -> "October" Nov -> "November" Dec -> "December" targetValueIntParse : Decode.Decoder Int targetValueIntParse = customDecoder targetValue (String.toInt >> maybeStringToResult) maybeStringToResult : Maybe a -> Result String a maybeStringToResult = Result.fromMaybe "could not convert string" customDecoder : Decode.Decoder a -> (a -> Result String b) -> Decode.Decoder b customDecoder d f = let resultDecoder x = case x of Ok a -> Decode.succeed a Err e -> Decode.fail e in Decode.map f d |> Decode.andThen resultDecoder prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/DateTimePicker/Views.elm000066400000000000000000000233461476331240200265630ustar00rootroot00000000000000module Utils.DateTimePicker.Views exposing (viewDateTimePicker) import Html exposing (Html, br, button, div, i, input, p, strong, text) import Html.Attributes exposing (class, maxlength, value) import Html.Events exposing (on, onClick, onMouseOut, onMouseOver) import Iso8601 import Json.Decode as Decode import Time exposing (Posix, utc) import Utils.DateTimePicker.Types exposing (DateTimePicker, InputHourOrMinute(..), Msg(..), StartOrEnd(..)) import Utils.DateTimePicker.Utils exposing ( FirstDayOfWeek(..) , floorDate , floorMonth , listDaysOfMonth , monthToString , splitWeek , targetValueIntParse ) viewDateTimePicker : DateTimePicker -> Html Msg viewDateTimePicker dateTimePicker = div [ class "w-100 container" ] [ viewCalendar dateTimePicker , div [ class "pt-4 row justify-content-center" ] [ viewTimePicker dateTimePicker Start , viewTimePicker dateTimePicker End ] ] viewCalendar : DateTimePicker -> Html Msg viewCalendar dateTimePicker = let justViewTime = dateTimePicker.month |> Maybe.withDefault (Time.millisToPosix 0) in div [ class "calendar_ month" ] [ viewMonthHeader justViewTime , viewMonth dateTimePicker justViewTime ] viewMonthHeader : Posix -> Html Msg viewMonthHeader justViewTime = div [ class "row month-header" ] [ div [ class "prev-month d-flex-center" , onClick PrevMonth ] [ p [ class "arrow" ] [ i [ class "fa fa-angle-left fa-3x cursor-pointer" ] [] ] ] , div [ class "month-text d-flex-center" ] [ text (Time.toYear utc justViewTime |> String.fromInt) , br [] [] , text (Time.toMonth utc justViewTime |> monthToString) ] , div [ class "next-month d-flex-center" , onClick NextMonth ] [ p [ class "arrow" ] [ i [ class "fa fa-angle-right fa-3x cursor-pointer" ] [] ] ] ] viewMonth : DateTimePicker -> Posix -> Html Msg viewMonth dateTimePicker justViewTime = let days = listDaysOfMonth justViewTime dateTimePicker.firstDayOfWeek weeks = splitWeek days [] in div [ class "row justify-content-center" ] [ div [ class "weekheader" ] (case dateTimePicker.firstDayOfWeek of Sunday -> List.map viewWeekHeader [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ] Monday -> List.map viewWeekHeader [ "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" ] ) , div [ class "date-container" , onMouseOut ClearMouseOverDay ] (List.map (viewWeek dateTimePicker justViewTime) weeks) ] viewWeekHeader : String -> Html Msg viewWeekHeader weekday = div [ class "date text-muted" ] [ text weekday ] viewWeek : DateTimePicker -> Posix -> List Posix -> Html Msg viewWeek dateTimePicker justViewTime days = div [] [ div [] (List.map (viewDay dateTimePicker justViewTime) days) ] viewDay : DateTimePicker -> Posix -> Posix -> Html Msg viewDay dateTimePicker justViewTime day = let compareDate_ : Posix -> Posix -> Order compareDate_ a b = compare (floorDate a |> Time.posixToMillis) (floorDate b |> Time.posixToMillis) setClass_ : Maybe Posix -> String -> String setClass_ d s = case d of Just m -> case compareDate_ m day of EQ -> s _ -> "" Nothing -> "" thisMonthClass = if floorMonth justViewTime == floorMonth day then " thismonth" else "" mouseoverClass = setClass_ dateTimePicker.mouseOverDay " mouseover" startClass = setClass_ dateTimePicker.startDate " start" endClass = setClass_ dateTimePicker.endDate " end" ( startClassBack, endClassBack ) = Maybe.map2 (\_ _ -> ( startClass, endClass )) dateTimePicker.startDate dateTimePicker.endDate |> Maybe.withDefault ( "", "" ) betweenClass = case ( dateTimePicker.startDate, dateTimePicker.endDate ) of ( Just start, Just end ) -> case ( compareDate_ start day, compareDate_ end day ) of ( LT, GT ) -> " between" _ -> "" _ -> "" in div [ class ("date back" ++ startClassBack ++ endClassBack ++ betweenClass) ] [ div [ class ("date front" ++ mouseoverClass ++ startClass ++ endClass ++ thisMonthClass) , onMouseOver <| MouseOverDay day , onClick OnClickDay ] [ text (Time.toDay utc day |> String.fromInt) ] ] viewTimePicker : DateTimePicker -> StartOrEnd -> Html Msg viewTimePicker dateTimePicker startOrEnd = div [ class "row timepicker" ] [ strong [ class "subject" ] [ text (case startOrEnd of Start -> "Start" End -> "End" ) ] , div [ class "hour" ] [ button [ class "up-button d-flex-center" , onClick <| IncrementTime startOrEnd InputHour 1 ] [ i [ class "fa fa-angle-up" ] [] ] , input [ on "blur" <| Decode.map (SetInputTime startOrEnd InputHour) targetValueIntParse , value (case startOrEnd of Start -> case dateTimePicker.startTime of Just t -> Time.toHour utc t |> String.fromInt Nothing -> "0" End -> case dateTimePicker.endTime of Just t -> Time.toHour utc t |> String.fromInt Nothing -> "0" ) , maxlength 2 , class "view d-flex-center" ] [] , button [ class "down-button d-flex-center" , onClick <| IncrementTime startOrEnd InputHour -1 ] [ i [ class "fa fa-angle-down" ] [] ] ] , div [ class "colon d-flex-center" ] [ text ":" ] , div [ class "minute" ] [ button [ class "up-button d-flex-center" , onClick <| IncrementTime startOrEnd InputMinute 1 ] [ i [ class "fa fa-angle-up" ] [] ] , input [ on "blur" <| Decode.map (SetInputTime startOrEnd InputMinute) targetValueIntParse , value (case startOrEnd of Start -> case dateTimePicker.startTime of Just t -> Time.toMinute utc t |> String.fromInt Nothing -> "0" End -> case dateTimePicker.endTime of Just t -> Time.toMinute utc t |> String.fromInt Nothing -> "0" ) , maxlength 2 , class "view" ] [] , button [ class "down-button d-flex-center" , onClick <| IncrementTime startOrEnd InputMinute -1 ] [ i [ class "fa fa-angle-down" ] [] ] ] , div [ class "timeview d-flex-center" ] [ text (let toString_ : Maybe Posix -> Maybe Posix -> String toString_ maybeTime maybeDate = Maybe.map (\t -> case maybeDate of Just _ -> Iso8601.fromTime t |> String.dropRight 8 Nothing -> "" ) maybeTime |> Maybe.withDefault "" selectedTime = case startOrEnd of Start -> toString_ dateTimePicker.startTime dateTimePicker.startDate End -> toString_ dateTimePicker.endTime dateTimePicker.endDate in selectedTime ) ] ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/Filter.elm000066400000000000000000000223241476331240200240540ustar00rootroot00000000000000module Utils.Filter exposing ( Filter , MatchOperator(..) , Matcher , SilenceFormGetParams , convertFilterMatcher , emptySilenceFormGetParams , fromApiMatcher , generateAPIQueryString , nullFilter , parseFilter , parseGroup , parseMatcher , silencePreviewFilter , stringifyFilter , stringifyGroup , stringifyMatcher , toApiMatcher , toUrl , withMatchers ) import Char import Data.Matcher import Parser exposing ((|.), (|=), Parser, Trailing(..)) import Set import Url exposing (percentEncode) type alias Filter = { text : Maybe String , group : Maybe String , customGrouping : Bool , receiver : Maybe String , showSilenced : Maybe Bool , showInhibited : Maybe Bool , showMuted : Maybe Bool , showActive : Maybe Bool } nullFilter : Filter nullFilter = { text = Nothing , group = Nothing , customGrouping = False , receiver = Nothing , showSilenced = Nothing , showInhibited = Nothing , showMuted = Nothing , showActive = Nothing } generateQueryParam : String -> Maybe String -> Maybe String generateQueryParam name = Maybe.map (percentEncode >> (++) (name ++ "=")) toUrl : String -> Filter -> String toUrl baseUrl { receiver, customGrouping, showSilenced, showInhibited, showMuted, showActive, text, group } = let parts = [ ( "silenced", Maybe.withDefault False showSilenced |> boolToString |> Just ) , ( "inhibited", Maybe.withDefault False showInhibited |> boolToString |> Just ) , ( "muted", Maybe.withDefault False showMuted |> boolToString |> Just ) , ( "active", Maybe.withDefault True showActive |> boolToString |> Just ) , ( "filter", emptyToNothing text ) , ( "receiver", emptyToNothing receiver ) , ( "group", group ) , ( "customGrouping", boolToMaybeString customGrouping ) ] |> List.filterMap (\( a, b ) -> generateQueryParam a b) in if List.length parts > 0 then baseUrl ++ (parts |> String.join "&" |> (++) "?" ) else baseUrl generateAPIQueryString : Filter -> String generateAPIQueryString { receiver, showSilenced, showInhibited, showMuted, showActive, text, group } = let filter_ = case parseFilter (Maybe.withDefault "" text) of Just matchers_ -> List.map (stringifyMatcher >> Just >> Tuple.pair "filter") matchers_ Nothing -> [] parts = filter_ ++ [ ( "silenced", Maybe.withDefault False showSilenced |> boolToString |> Just ) , ( "inhibited", Maybe.withDefault False showInhibited |> boolToString |> Just ) , ( "muted", Maybe.withDefault False showMuted |> boolToString |> Just ) , ( "active", Maybe.withDefault True showActive |> boolToString |> Just ) , ( "receiver", emptyToNothing receiver ) , ( "group", group ) ] |> List.filterMap (\( a, b ) -> generateQueryParam a b) in if List.length parts > 0 then parts |> String.join "&" |> (++) "?" else "" boolToMaybeString : Bool -> Maybe String boolToMaybeString b = if b then Just "true" else Nothing boolToString : Bool -> String boolToString b = if b then "true" else "false" emptyToNothing : Maybe String -> Maybe String emptyToNothing str = case str of Just "" -> Nothing _ -> str type alias Matcher = { key : String , op : MatchOperator , value : String } toApiMatcher : Matcher -> Data.Matcher.Matcher toApiMatcher { key, op, value } = let ( isRegex, isEqual ) = case op of Eq -> ( False, True ) NotEq -> ( False, False ) RegexMatch -> ( True, True ) NotRegexMatch -> ( True, False ) in { name = key , isRegex = isRegex , isEqual = Just isEqual , value = value } fromApiMatcher : Data.Matcher.Matcher -> Matcher fromApiMatcher { name, value, isRegex, isEqual } = let isEqualValue = case isEqual of Nothing -> True Just justIsEqual -> justIsEqual op = if not isRegex && isEqualValue then Eq else if not isRegex && not isEqualValue then NotEq else if isRegex && isEqualValue then RegexMatch else NotRegexMatch in { key = name , value = value , op = op } type MatchOperator = Eq | NotEq | RegexMatch | NotRegexMatch matchers : List ( String, MatchOperator ) matchers = [ ( "=~", RegexMatch ) , ( "!~", NotRegexMatch ) , ( "=", Eq ) , ( "!=", NotEq ) ] parseFilter : String -> Maybe (List Matcher) parseFilter = Parser.run filter >> Result.toMaybe parseMatcher : String -> Maybe Matcher parseMatcher = Parser.run matcher >> Result.toMaybe stringifyGroup : List String -> Maybe String stringifyGroup list = if List.isEmpty list then Just "" else if list == [ "alertname" ] then Nothing else Just (String.join "," list) parseGroup : Maybe String -> List String parseGroup maybeGroup = case maybeGroup of Nothing -> [ "alertname" ] Just something -> String.split "," something |> List.filter (String.length >> (<) 0) stringifyFilter : List Matcher -> String stringifyFilter matchers_ = case matchers_ of [] -> "" list -> (list |> List.map stringifyMatcher |> String.join ", " |> (++) "{" ) ++ "}" stringifyMatcher : Matcher -> String stringifyMatcher { key, op, value } = key ++ (matchers |> List.filter (Tuple.second >> (==) op) |> List.head |> Maybe.map Tuple.first |> Maybe.withDefault "" ) ++ "\"" ++ value ++ "\"" convertFilterMatcher : Matcher -> Data.Matcher.Matcher convertFilterMatcher { key, op, value } = { name = key , value = value , isRegex = (op == RegexMatch) || (op == NotRegexMatch) , isEqual = Just ((op == Eq) || (op == RegexMatch)) } filter : Parser (List Matcher) filter = Parser.succeed identity |= Parser.sequence { start = "{" , separator = "," , end = "}" , spaces = Parser.spaces , item = item , trailing = Forbidden } |. Parser.end matcher : Parser Matcher matcher = Parser.succeed identity |. Parser.spaces |= item |. Parser.spaces |. Parser.end item : Parser Matcher item = Parser.succeed Matcher |= Parser.variable { start = isVarChar , inner = isVarChar , reserved = Set.empty } |= (matchers |> List.map (\( keyword, matcher_ ) -> Parser.succeed matcher_ |. Parser.keyword keyword ) |> Parser.oneOf ) |= string '"' string : Char -> Parser String string separator = Parser.succeed () |. Parser.token (String.fromChar separator) |. Parser.loop separator stringHelp |> Parser.getChompedString -- Remove quotes |> Parser.map (String.dropLeft 1 >> String.dropRight 1) stringHelp : Char -> Parser (Parser.Step Char ()) stringHelp separator = Parser.oneOf [ Parser.succeed (Parser.Done ()) |. Parser.token (String.fromChar separator) , Parser.succeed (Parser.Loop separator) |. Parser.chompIf (\char -> char == '\\') |. Parser.chompIf (\_ -> True) , Parser.succeed (Parser.Loop separator) |. Parser.chompIf (\char -> char /= '\\' && char /= separator) ] isVarChar : Char -> Bool isVarChar char = Char.isLower char || Char.isUpper char || (char == '_') || Char.isDigit char withMatchers : List Matcher -> Filter -> Filter withMatchers matchers_ filter_ = { filter_ | text = Just (stringifyFilter matchers_) } silencePreviewFilter : List Data.Matcher.Matcher -> Filter silencePreviewFilter apiMatchers = { nullFilter | text = List.map fromApiMatcher apiMatchers |> stringifyFilter |> Just , showSilenced = Just True , showInhibited = Just True , showMuted = Just True , showActive = Just True } type alias SilenceFormGetParams = { matchers : List Matcher , comment : String } emptySilenceFormGetParams : SilenceFormGetParams emptySilenceFormGetParams = { matchers = [] , comment = "" } prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/FormValidation.elm000066400000000000000000000021351476331240200255430ustar00rootroot00000000000000module Utils.FormValidation exposing ( ValidatedField , ValidationState(..) , initialField , stringNotEmpty , updateValue , validate ) type ValidationState = Initial | Valid | Invalid String fromResult : Result String a -> ValidationState fromResult result = case result of Ok _ -> Valid Err str -> Invalid str type alias ValidatedField = { value : String , validationState : ValidationState } initialField : String -> ValidatedField initialField value = { value = value , validationState = Initial } updateValue : String -> ValidatedField -> ValidatedField updateValue value field = { field | value = value, validationState = Initial } validate : (String -> Result String a) -> ValidatedField -> ValidatedField validate validator field = { field | validationState = fromResult (validator field.value) } stringNotEmpty : String -> Result String String stringNotEmpty string = if String.isEmpty (String.trim string) then Err "Should not be empty" else Ok string prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/Keyboard.elm000066400000000000000000000010261476331240200243630ustar00rootroot00000000000000module Utils.Keyboard exposing (keys, onKeyDown, onKeyUp) import Html exposing (Attribute) import Html.Events exposing (keyCode, on) import Json.Decode as Json keys : { backspace : Int , enter : Int , up : Int , down : Int } keys = { backspace = 8 , enter = 13 , up = 38 , down = 40 } onKeyDown : (Int -> msg) -> Attribute msg onKeyDown tagger = on "keydown" (Json.map tagger keyCode) onKeyUp : (Int -> msg) -> Attribute msg onKeyUp tagger = on "keyup" (Json.map tagger keyCode) prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/List.elm000066400000000000000000000032301476331240200235350ustar00rootroot00000000000000module Utils.List exposing (groupBy, lastElem, mstring, nextElem, zip) import Data.Matcher exposing (Matcher) import Dict exposing (Dict) nextElem : a -> List a -> Maybe a nextElem el list = case list of curr :: rest -> if curr == el then List.head rest else nextElem el rest [] -> Nothing lastElem : List a -> Maybe a lastElem = List.foldl (Just >> always) Nothing mstring : Matcher -> String mstring m = let isEqual = case m.isEqual of Nothing -> True Just value -> value sep = if not m.isRegex && isEqual then "=" else if not m.isRegex && not isEqual then "!=" else if m.isRegex && isEqual then "=~" else "!~" in String.join sep [ m.name, m.value ] {-| Takes a key-fn and a list. Creates a `Dict` which maps the key to a list of matching elements. mary = {id=1, name="Mary"} jack = {id=2, name="Jack"} jill = {id=1, name="Jill"} groupBy .id [mary, jack, jill] == Dict.fromList [(1, [mary, jill]), (2, [jack])] Copied from -} groupBy : (a -> comparable) -> List a -> Dict comparable (List a) groupBy keyfn list = List.foldr (\x acc -> Dict.update (keyfn x) (Maybe.map ((::) x) >> Maybe.withDefault [ x ] >> Just) acc ) Dict.empty list zip : List a -> List b -> List ( a, b ) zip a b = List.map2 (\a1 b1 -> ( a1, b1 )) a b prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/Match.elm000066400000000000000000000066351476331240200236720ustar00rootroot00000000000000module Utils.Match exposing (consecutiveChars, jaroWinkler) import Char import Utils.List exposing (zip) {-| Adapted from https://blog.art-of-coding.eu/comparing-strings-with-metrics-in-haskell/ -} jaro : String -> String -> Float jaro s1 s2 = if s1 == s2 then 1.0 else let l1 = String.length s1 l2 = String.length s2 z2 = zip (List.range 1 l2) (String.toList s2) |> List.map (Tuple.mapSecond Char.toCode) searchLength = -- A character must be within searchLength spaces of the -- character we are matching against in order to be considered -- a match. -- (//) is integer division, which removes the need to floor -- the result. (max l1 l2 // 2) - 1 m = zip (List.range 1 l1) (String.toList s1) |> List.map (Tuple.mapSecond Char.toCode) |> List.concatMap (charMatch searchLength z2) ml = List.length m t = m |> List.map (transposition z2 >> toFloat >> (*) 0.5) |> List.sum ml1 = toFloat ml / toFloat l1 ml2 = toFloat ml / toFloat l2 mtm = (toFloat ml - t) / toFloat ml in if ml == 0 then 0 else (1 / 3) * (ml1 + ml2 + mtm) winkler : String -> String -> Float -> Float winkler s1 s2 jaro_ = if s1 == "" || s2 == "" then 0.0 else if s1 == s2 then 1.0 else let l = consecutiveChars s1 s2 |> String.length |> toFloat p = 0.25 in jaro_ + ((l * p) * (1.0 - jaro_)) jaroWinkler : String -> String -> Float jaroWinkler s1 s2 = if s1 == "" || s2 == "" then 0.0 else if s1 == s2 then 1.0 else jaro s1 s2 |> winkler s1 s2 consecutiveChars : String -> String -> String consecutiveChars s1 s2 = if s1 == "" || s2 == "" then "" else if s1 == s2 then s1 else cp (String.toList s1) (String.toList s2) [] |> String.fromList cp : List Char -> List Char -> List Char -> List Char cp l1 l2 acc = case ( l1, l2 ) of ( x :: xs, y :: ys ) -> if x == y then cp xs ys (acc ++ [ x ]) else if List.length acc > 0 then -- If we have already found matches, we bail. We only want -- consecutive matches. acc else -- Go through every character in l1 until it matches the first -- character in l2, and then start counting from there. cp l1 ys acc _ -> acc charMatch : Int -> List ( Int, Int ) -> ( Int, Int ) -> List ( Int, Int ) charMatch matchRange list ( p, q ) = list |> List.drop (p - matchRange - 1) |> List.take (p + matchRange) |> List.filter (Tuple.second >> (==) q) transposition : List ( Int, Int ) -> ( Int, Int ) -> Int transposition list ( p, q ) = list |> List.filter (\( x, y ) -> p /= x && q == y ) |> List.length prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/String.elm000066400000000000000000000034171476331240200240770ustar00rootroot00000000000000module Utils.String exposing (capitalizeFirst, linkify) import Char import String capitalizeFirst : String -> String capitalizeFirst string = case String.uncons string of Nothing -> string Just ( char, rest ) -> String.cons (Char.toUpper char) rest linkify : String -> List (Result String String) linkify string = List.reverse (linkifyHelp (String.words string) []) linkifyHelp : List String -> List (Result String String) -> List (Result String String) linkifyHelp words linkified = case words of [] -> linkified word :: restWords -> if isUrl word then case linkified of (Err lastWord) :: restLinkified -> -- append space to last word linkifyHelp restWords (Ok word :: Err (lastWord ++ " ") :: restLinkified) (Ok _) :: _ -> -- insert space between two links linkifyHelp restWords (Ok word :: Err " " :: linkified) _ -> linkifyHelp restWords (Ok word :: linkified) else case linkified of (Err lastWord) :: restLinkified -> -- concatenate with last word linkifyHelp restWords (Err (lastWord ++ " " ++ word) :: restLinkified) (Ok _) :: _ -> -- insert space after the link linkifyHelp restWords (Err (" " ++ word) :: linkified) _ -> linkifyHelp restWords (Err word :: linkified) isUrl : String -> Bool isUrl = (\b a -> String.startsWith a b) >> (\b a -> List.any a b) [ "http://", "https://" ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/Types.elm000066400000000000000000000006041476331240200237300ustar00rootroot00000000000000module Utils.Types exposing (ApiData(..), Label, Labels, Matcher) type ApiData a = Initial | Loading | Failure String | Success a type alias Matcher = { isRegex : Bool , isEqual : Maybe Bool , name : String , value : String } type alias Matchers = List Matcher type alias Labels = List Label type alias Label = ( String, String ) prometheus-alertmanager-0.28.1+ds/ui/app/src/Utils/Views.elm000066400000000000000000000143321476331240200237240ustar00rootroot00000000000000module Utils.Views exposing ( apiData , checkbox , error , labelButton , linkifyText , loading , tab , validatedField , validatedTextareaField ) import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (onBlur, onCheck, onClick, onInput) import Utils.FormValidation exposing (ValidatedField, ValidationState(..)) import Utils.String import Utils.Types as Types tab : tab -> tab -> (tab -> msg) -> List (Html msg) -> Html msg tab tab_ currentTab msg content = li [ class "nav-item" ] [ if tab_ == currentTab then span [ class "nav-link active" ] content else button [ style "background" "transparent" , style "font" "inherit" , style "cursor" "pointer" , style "outline" "none" , class "nav-link" , onClick (msg tab_) ] content ] labelButton : Maybe msg -> String -> Html msg labelButton maybeMsg labelText = case maybeMsg of Nothing -> span [ class "btn btn-sm bg-faded btn-secondary mr-2 mb-2" , style "user-select" "text" , style "-moz-user-select" "text" , style "-webkit-user-select" "text" ] [ text labelText ] Just msg -> button [ class "btn btn-sm bg-faded btn-secondary mr-2 mb-2" , onClick msg ] [ span [ class "text-muted" ] [ text labelText ] ] linkifyText : String -> List (Html msg) linkifyText str = List.map (\result -> case result of Ok link -> a [ href link, target "_blank" ] [ text link ] Err txt -> text txt ) (Utils.String.linkify str) checkbox : String -> Bool -> (Bool -> msg) -> Html msg checkbox name status msg = label [ class "f6 dib mb2 mr2 d-flex align-items-center" ] [ input [ type_ "checkbox", checked status, onCheck msg ] [] , span [ class "pl-2" ] [ text <| " " ++ name ] ] validatedField : (List (Attribute msg) -> List (Html msg) -> Html msg) -> String -> String -> (String -> msg) -> msg -> ValidatedField -> Html msg validatedField htmlField labelText classes inputMsg blurMsg field = case field.validationState of Valid -> div [ class <| "d-flex flex-column form-group has-success " ++ classes ] [ label [] [ strong [] [ text labelText ] ] , htmlField [ value field.value , onInput inputMsg , onBlur blurMsg , class "form-control form-control-success" ] [] ] Initial -> div [ class <| "d-flex flex-column form-group " ++ classes ] [ label [] [ strong [] [ text labelText ] ] , htmlField [ value field.value , onInput inputMsg , onBlur blurMsg , class "form-control" ] [] ] Invalid error_ -> div [ class <| "d-flex flex-column form-group has-danger " ++ classes ] [ label [] [ strong [] [ text labelText ] ] , htmlField [ value field.value , onInput inputMsg , onBlur blurMsg , class "form-control form-control-danger" ] [] , div [ class "form-control-feedback" ] [ text error_ ] ] validatedTextareaField : String -> String -> (String -> msg) -> msg -> ValidatedField -> Html msg validatedTextareaField labelText classes inputMsg blurMsg field = let lineCount = String.lines field.value |> List.length |> clamp 3 15 in case field.validationState of Valid -> div [ class <| "d-flex flex-column form-group has-success " ++ classes ] [ label [] [ strong [] [ text labelText ] ] , textarea [ value field.value , onInput inputMsg , onBlur blurMsg , class "form-control form-control-success" , rows lineCount , disableGrammarly ] [] ] Initial -> div [ class <| "d-flex flex-column form-group " ++ classes ] [ label [] [ strong [] [ text labelText ] ] , textarea [ value field.value , onInput inputMsg , onBlur blurMsg , class "form-control" , rows lineCount , disableGrammarly ] [] ] Invalid error_ -> div [ class <| "d-flex flex-column form-group has-danger " ++ classes ] [ label [] [ strong [] [ text labelText ] ] , textarea [ value field.value , onInput inputMsg , onBlur blurMsg , class "form-control form-control-danger" , rows lineCount , disableGrammarly ] [] , div [ class "form-control-feedback" ] [ text error_ ] ] apiData : (a -> Html msg) -> Types.ApiData a -> Html msg apiData onSuccess data = case data of Types.Success payload -> onSuccess payload Types.Loading -> loading Types.Initial -> loading Types.Failure msg -> error msg loading : Html msg loading = div [] [ span [] [ text "Loading..." ] ] error : String -> Html msg error err = div [ class "alert alert-warning" ] [ text (Utils.String.capitalizeFirst err) ] disableGrammarly : Html.Attribute msg disableGrammarly = attribute "data-gramm_editor" "false" prometheus-alertmanager-0.28.1+ds/ui/app/src/Views.elm000066400000000000000000000062301476331240200226220ustar00rootroot00000000000000module Views exposing (view) import Html exposing (Html, div, node, text) import Html.Attributes exposing (class, href, rel, style) import Html.Events exposing (on) import Json.Decode exposing (succeed) import Types exposing (Model, Msg(..), Route(..)) import Utils.Filter exposing (emptySilenceFormGetParams) import Utils.Types exposing (ApiData(..)) import Utils.Views import Views.AlertList.Views as AlertList import Views.NavBar.Views exposing (navBar) import Views.NotFound.Views as NotFound import Views.Settings.Views as SettingsView import Views.SilenceForm.Views as SilenceForm import Views.SilenceList.Views as SilenceList import Views.SilenceView.Views as SilenceView import Views.Status.Views as Status view : Model -> Html Msg view model = div [] [ renderCSS model.libUrl , case ( model.bootstrapCSS, model.fontAwesomeCSS, model.elmDatepickerCSS ) of ( Success _, Success _, Success _ ) -> div [] [ navBar model.route , div [ class "container pb-4" ] [ currentView model ] ] ( Failure err, _, _ ) -> failureView model err ( _, Failure err, _ ) -> failureView model err ( _, _, Failure err ) -> failureView model err _ -> text "" ] failureView : Model -> String -> Html Msg failureView model err = div [] [ div [ style "padding" "40px", style "color" "red" ] [ text err ] , navBar model.route , div [ class "container pb-4" ] [ currentView model ] ] renderCSS : String -> Html Msg renderCSS assetsUrl = div [] [ cssNode (assetsUrl ++ "lib/bootstrap-4.0.0-alpha.6-dist/css/bootstrap.min.css") BootstrapCSSLoaded , cssNode (assetsUrl ++ "lib/font-awesome-4.7.0/css/font-awesome.min.css") FontAwesomeCSSLoaded , cssNode (assetsUrl ++ "lib/elm-datepicker/css/elm-datepicker.css") ElmDatepickerCSSLoaded ] cssNode : String -> (ApiData String -> Msg) -> Html Msg cssNode url msg = node "link" [ href url , rel "stylesheet" , on "load" (succeed (msg (Success url))) , on "error" (succeed (msg (Failure ("Failed to load CSS from: " ++ url)))) ] [] currentView : Model -> Html Msg currentView model = case model.route of SettingsRoute -> SettingsView.view model.settings |> Html.map MsgForSettings StatusRoute -> Status.view model.status SilenceViewRoute _ -> SilenceView.view model.silenceView AlertsRoute filter -> AlertList.view model.alertList filter SilenceListRoute _ -> SilenceList.view model.silenceList SilenceFormNewRoute getParams -> SilenceForm.view Nothing getParams model.defaultCreator model.silenceForm |> Html.map MsgForSilenceForm SilenceFormEditRoute silenceId -> SilenceForm.view (Just silenceId) emptySilenceFormGetParams "" model.silenceForm |> Html.map MsgForSilenceForm TopLevelRoute -> Utils.Views.loading NotFoundRoute -> NotFound.view prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/000077500000000000000000000000001476331240200221225ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/AlertList/000077500000000000000000000000001476331240200240255ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/AlertList/AlertView.elm000066400000000000000000000124201476331240200264250ustar00rootroot00000000000000module Views.AlertList.AlertView exposing (addLabelMsg, view) import Data.GettableAlert exposing (GettableAlert) import Dict import Html exposing (..) import Html.Attributes exposing (class, href, style, title, value) import Html.Events exposing (onClick) import Types exposing (Msg(..)) import Url exposing (percentEncode) import Utils.Filter import Views.AlertList.Types exposing (AlertListMsg(..)) import Views.FilterBar.Types as FilterBarTypes import Views.Shared.Alert exposing (annotation, annotationsButton, generatorUrlButton, titleView) import Views.SilenceForm.Parsing exposing (newSilenceFromAlertLabels) view : List ( String, String ) -> Maybe String -> GettableAlert -> Html Msg view labels maybeActiveId alert = let -- remove the grouping labels, and bring the alertname to front ungroupedLabels = alert.labels |> Dict.toList |> List.filter ((\b a -> List.member a b) labels >> not) |> List.partition (Tuple.first >> (==) "alertname") |> (\( a, b ) -> a ++ b) in li [ -- speedup rendering in Chrome, because list-group-item className -- creates a new layer in the rendering engine style "position" "static" , class "align-items-start list-group-item border-0 p-0 mb-4" ] [ div [ class "w-100 mb-2 d-flex align-items-start" ] [ titleView alert , if Dict.size alert.annotations > 0 then annotationsButton maybeActiveId alert |> Html.map (\msg -> MsgForAlertList (SetActive msg)) else text "" , case alert.generatorURL of Just url -> generatorUrlButton url Nothing -> text "" , silenceButton alert , inhibitedIcon alert , mutedIcon alert , linkButton alert ] , if maybeActiveId == Just alert.fingerprint then table [ class "table w-100 mb-1" ] (List.map annotation <| Dict.toList alert.annotations) else text "" , div [] (List.map labelButton ungroupedLabels) ] labelButton : ( String, String ) -> Html Msg labelButton ( key, val ) = div [ class "btn-group mr-2 mb-2" ] [ span [ class "btn btn-sm border-right-0 text-muted" -- have to reset bootstrap button styles to make the text selectable , style "user-select" "initial" -- have to reset bootstrap button styles to make the text selectable , style "-moz-user-select" "initial" -- have to reset bootstrap button styles to make the text selectable , style "-webkit-user-select" "initial" -- have to reset bootstrap button styles to make the text selectable , style "border-color" "#ccc" ] [ text (key ++ "=\"" ++ val ++ "\"") ] , button [ class "btn btn-sm bg-faded btn-outline-secondary" , onClick (addLabelMsg ( key, val )) , title "Filter by this label" ] [ text "+" ] ] addLabelMsg : ( String, String ) -> Msg addLabelMsg ( key, value ) = FilterBarTypes.AddFilterMatcher False { key = key , op = Utils.Filter.Eq , value = value } |> MsgForFilterBar |> MsgForAlertList linkButton : GettableAlert -> Html Msg linkButton alert = let link = alert.labels |> Dict.toList |> List.map (\( k, v ) -> Utils.Filter.Matcher k Utils.Filter.Eq v) |> Utils.Filter.stringifyFilter |> percentEncode |> (++) "#/alerts?filter=" in a [ class "btn btn-outline-info border-0" , href link ] [ i [ class "fa fa-link mr-2" ] [] , text "Link" ] silenceButton : GettableAlert -> Html Msg silenceButton alert = case List.head alert.status.silencedBy of Just sId -> a [ class "btn btn-outline-danger border-0" , href ("#/silences/" ++ sId) ] [ i [ class "fa fa-bell-slash mr-2" ] [] , text "Silenced" ] Nothing -> a [ class "btn btn-outline-info border-0" , href (newSilenceFromAlertLabels alert.labels) ] [ i [ class "fa fa-bell-slash-o mr-2" ] [] , text "Silence" ] inhibitedIcon : GettableAlert -> Html Msg inhibitedIcon alert = case List.head alert.status.inhibitedBy of Just _ -> span [ class "btn btn-outline-danger border-0" ] [ i [ class "fa fa-eye-slash mr-2" ] [] , text "Inhibited" ] Nothing -> text "" mutedIcon : GettableAlert -> Html Msg mutedIcon alert = case List.head alert.status.mutedBy of Just _ -> span [ class "btn btn-outline-danger border-0" ] [ i [ class "fa fa-bell-slash mr-2" ] [] , text "Muted" ] Nothing -> text "" prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/AlertList/Parsing.elm000066400000000000000000000015251476331240200261320ustar00rootroot00000000000000module Views.AlertList.Parsing exposing (alertsParser) import Url.Parser exposing ((), Parser, map, s) import Url.Parser.Query as Query import Utils.Filter exposing (Filter, MatchOperator(..)) boolParam : String -> Query.Parser Bool boolParam name = Query.custom name (List.head >> (/=) Nothing) maybeBoolParam : String -> Query.Parser (Maybe Bool) maybeBoolParam name = Query.custom name (List.head >> Maybe.map (String.toLower >> (/=) "false")) alertsParser : Parser (Filter -> a) a alertsParser = s "alerts" Query.string "filter" Query.string "group" boolParam "customGrouping" Query.string "receiver" maybeBoolParam "silenced" maybeBoolParam "inhibited" maybeBoolParam "muted" maybeBoolParam "active" |> map Filter prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/AlertList/Types.elm000066400000000000000000000031461476331240200256340ustar00rootroot00000000000000module Views.AlertList.Types exposing ( AlertListMsg(..) , Model , Tab(..) , initAlertList ) import Browser.Navigation exposing (Key) import Data.AlertGroup exposing (AlertGroup) import Data.GettableAlert exposing (GettableAlert) import Set exposing (Set) import Utils.Types exposing (ApiData(..)) import Views.FilterBar.Types as FilterBar import Views.GroupBar.Types as GroupBar import Views.ReceiverBar.Types as ReceiverBar type AlertListMsg = AlertsFetched (ApiData (List GettableAlert)) | AlertGroupsFetched (ApiData (List AlertGroup)) | FetchAlerts | MsgForReceiverBar ReceiverBar.Msg | MsgForFilterBar FilterBar.Msg | MsgForGroupBar GroupBar.Msg | ToggleSilenced Bool | ToggleInhibited Bool | ToggleMuted Bool | SetActive (Maybe String) | ActiveGroups Int | SetTab Tab | ToggleExpandAll Bool type Tab = FilterTab | GroupTab type alias Model = { alerts : ApiData (List GettableAlert) , alertGroups : ApiData (List AlertGroup) , receiverBar : ReceiverBar.Model , groupBar : GroupBar.Model , filterBar : FilterBar.Model , tab : Tab , activeId : Maybe String , activeGroups : Set Int , key : Key , expandAll : Bool } initAlertList : Key -> Bool -> Model initAlertList key expandAll = { alerts = Initial , alertGroups = Initial , receiverBar = ReceiverBar.initReceiverBar key , groupBar = GroupBar.initGroupBar key , filterBar = FilterBar.initFilterBar [] , tab = FilterTab , activeId = Nothing , activeGroups = Set.empty , key = key , expandAll = expandAll } prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/AlertList/Updates.elm000066400000000000000000000161171476331240200261370ustar00rootroot00000000000000port module Views.AlertList.Updates exposing (update) import Alerts.Api as Api import Browser.Navigation as Navigation import Data.AlertGroup exposing (AlertGroup) import Dict import Set import Task import Types exposing (Msg(..)) import Utils.Filter exposing (Filter) import Utils.List import Utils.Types exposing (ApiData(..)) import Views.AlertList.Types exposing (AlertListMsg(..), Model, Tab(..)) import Views.FilterBar.Updates as FilterBar import Views.GroupBar.Updates as GroupBar import Views.ReceiverBar.Updates as ReceiverBar update : AlertListMsg -> Model -> Filter -> String -> String -> ( Model, Cmd Types.Msg ) update msg ({ groupBar, alerts, filterBar, receiverBar, alertGroups } as model) filter apiUrl basePath = let alertsUrl = basePath ++ "#/alerts" filteredUrl = Utils.Filter.toUrl alertsUrl in case msg of AlertGroupsFetched listOfAlertGroups -> ( { model | alertGroups = listOfAlertGroups } , Cmd.none ) AlertsFetched listOfAlerts -> let ( groups_, groupBar_ ) = case listOfAlerts of Success ungroupedAlerts -> let groups = ungroupedAlerts |> Utils.List.groupBy (.labels >> Dict.toList >> List.filter (\( key, _ ) -> List.member key groupBar.fields)) |> Dict.toList |> List.map (\( labels, alerts_ ) -> AlertGroup (Dict.fromList labels) { name = "unknown" } alerts_ ) newGroupBar = { groupBar | list = List.concatMap (.labels >> Dict.toList) ungroupedAlerts |> List.map Tuple.first |> Set.fromList } in ( Success groups, newGroupBar ) Initial -> ( Initial, groupBar ) Loading -> ( Loading, groupBar ) Failure e -> ( Failure e, groupBar ) in ( { model | alerts = listOfAlerts , alertGroups = groups_ , groupBar = groupBar_ } , Cmd.none ) FetchAlerts -> let newGroupBar = GroupBar.setFields filter groupBar newFilterBar = FilterBar.setMatchers filter filterBar in ( { model | alerts = if filter.customGrouping then Loading else alerts , alertGroups = if filter.customGrouping then alertGroups else Loading , filterBar = newFilterBar , groupBar = newGroupBar , activeId = Nothing , activeGroups = Set.empty } , Cmd.batch [ if filter.customGrouping then Api.fetchAlerts apiUrl filter |> Cmd.map (AlertsFetched >> MsgForAlertList) else Api.fetchAlertGroups apiUrl filter |> Cmd.map (AlertGroupsFetched >> MsgForAlertList) , ReceiverBar.fetchReceivers apiUrl |> Cmd.map (MsgForReceiverBar >> MsgForAlertList) ] ) ToggleSilenced showSilenced -> ( model , Navigation.pushUrl model.key (filteredUrl { filter | showSilenced = Just showSilenced }) ) ToggleInhibited showInhibited -> ( model , Navigation.pushUrl model.key (filteredUrl { filter | showInhibited = Just showInhibited }) ) ToggleMuted showMuted -> ( model , Navigation.pushUrl model.key (filteredUrl { filter | showMuted = Just showMuted }) ) SetTab tab -> ( { model | tab = tab }, Cmd.none ) MsgForFilterBar subMsg -> let ( newFilterBar, shouldFilter, cmd ) = FilterBar.update subMsg filterBar filterBarCmd = Cmd.map (MsgForFilterBar >> MsgForAlertList) cmd newUrl = filteredUrl (Utils.Filter.withMatchers newFilterBar.matchers filter) alertsCmd = if shouldFilter then Cmd.batch [ Navigation.pushUrl model.key newUrl , filterBarCmd ] else filterBarCmd in ( { model | filterBar = newFilterBar, tab = FilterTab }, alertsCmd ) MsgForGroupBar subMsg -> let ( newGroupBar, cmd ) = GroupBar.update alertsUrl filter subMsg groupBar in ( { model | groupBar = newGroupBar }, Cmd.map (MsgForGroupBar >> MsgForAlertList) cmd ) MsgForReceiverBar subMsg -> let ( newReceiverBar, cmd ) = ReceiverBar.update alertsUrl filter subMsg receiverBar in ( { model | receiverBar = newReceiverBar }, Cmd.map (MsgForReceiverBar >> MsgForAlertList) cmd ) SetActive maybeId -> ( { model | activeId = maybeId }, Cmd.none ) ActiveGroups activeGroup -> let activeGroups_ = if Set.member activeGroup model.activeGroups then Set.remove activeGroup model.activeGroups else Set.insert activeGroup model.activeGroups in ( { model | activeGroups = activeGroups_, expandAll = False }, persistGroupExpandAll False ) ToggleExpandAll expanded -> let allGroupLabels = case ( alertGroups, expanded ) of ( Success groups, True ) -> List.range 0 (List.length groups) |> Set.fromList _ -> Set.empty in ( { model | expandAll = expanded , activeGroups = allGroupLabels } , Cmd.batch [ persistGroupExpandAll expanded , Task.succeed expanded |> Task.perform SetGroupExpandAll ] ) port persistGroupExpandAll : Bool -> Cmd msg prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/AlertList/Views.elm000066400000000000000000000155721476331240200256330ustar00rootroot00000000000000module Views.AlertList.Views exposing (view) import Data.AlertGroup exposing (AlertGroup) import Data.GettableAlert exposing (GettableAlert) import Data.Receiver exposing (Receiver) import Dict import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (..) import Set exposing (Set) import Types exposing (Msg(..)) import Utils.Filter exposing (Filter) import Utils.Types exposing (ApiData(..), Labels) import Utils.Views import Views.AlertList.AlertView as AlertView import Views.AlertList.Types exposing (AlertListMsg(..), Model, Tab(..)) import Views.FilterBar.Views as FilterBar import Views.GroupBar.Views as GroupBar import Views.ReceiverBar.Views as ReceiverBar renderCheckbox : String -> Maybe Bool -> (Bool -> AlertListMsg) -> Html Msg renderCheckbox textLabel maybeChecked toggleMsg = li [ class "nav-item" ] [ label [ class "mt-1 ml-1 custom-control custom-checkbox" ] [ input [ type_ "checkbox" , class "custom-control-input" , checked (Maybe.withDefault False maybeChecked) , onCheck (toggleMsg >> MsgForAlertList) ] [] , span [ class "custom-control-indicator" ] [] , span [ class "custom-control-description" ] [ text textLabel ] ] ] groupTabName : Bool -> Html msg groupTabName customGrouping = if customGrouping then text "Group (custom)" else text "Group" view : Model -> Filter -> Html Msg view { alertGroups, groupBar, filterBar, receiverBar, tab, activeId, activeGroups, expandAll } filter = div [] [ div [ class "card mb-3" ] [ div [ class "card-header" ] [ ul [ class "nav nav-tabs card-header-tabs" ] [ Utils.Views.tab FilterTab tab (SetTab >> MsgForAlertList) [ text "Filter" ] , Utils.Views.tab GroupTab tab (SetTab >> MsgForAlertList) [ groupTabName filter.customGrouping ] , receiverBar |> ReceiverBar.view filter.receiver |> Html.map (MsgForReceiverBar >> MsgForAlertList) , renderCheckbox "Silenced" filter.showSilenced ToggleSilenced , renderCheckbox "Inhibited" filter.showInhibited ToggleInhibited , renderCheckbox "Muted" filter.showMuted ToggleMuted ] ] , div [ class "card-block" ] [ case tab of FilterTab -> Html.map (MsgForFilterBar >> MsgForAlertList) (FilterBar.view { showSilenceButton = True } filterBar) GroupTab -> Html.map (MsgForGroupBar >> MsgForAlertList) (GroupBar.view groupBar filter.customGrouping) ] ] , div [] [ button [ class "btn btn-outline-secondary border-0 mr-1 mb-3" , onClick (MsgForAlertList (ToggleExpandAll (not expandAll))) ] (if expandAll then [ i [ class "fa fa-minus mr-3" ] [], text "Collapse all groups" ] else [ i [ class "fa fa-plus mr-3" ] [], text "Expand all groups" ] ) ] , Utils.Views.apiData (defaultAlertGroups activeId activeGroups expandAll) alertGroups ] defaultAlertGroups : Maybe String -> Set Int -> Bool -> List AlertGroup -> Html Msg defaultAlertGroups activeId activeGroups expandAll groups = case groups of [] -> Utils.Views.error "No alert groups found" [ { labels, receiver, alerts } ] -> let labels_ = Dict.toList labels in alertGroup activeId (Set.singleton 0) receiver labels_ alerts 0 expandAll _ -> div [ class "pl-5" ] (List.indexedMap (\index group -> alertGroup activeId activeGroups group.receiver (Dict.toList group.labels) group.alerts index expandAll ) groups ) alertGroup : Maybe String -> Set Int -> Receiver -> Labels -> List GettableAlert -> Int -> Bool -> Html Msg alertGroup activeId activeGroups receiver labels alerts groupId expandAll = let groupActive = expandAll || Set.member groupId activeGroups labels_ = case labels of [] -> [ span [ class "btn btn-secondary mr-1 mb-1" ] [ text "Not grouped" ] ] _ -> List.map (\( key, value ) -> div [ class "btn-group mr-1 mb-1" ] [ span [ class "btn text-muted" , style "user-select" "initial" , style "-moz-user-select" "initial" , style "-webkit-user-select" "initial" , style "border-color" "#5bc0de" ] [ text (key ++ "=\"" ++ value ++ "\"") ] , button [ class "btn btn-outline-info" , onClick (AlertView.addLabelMsg ( key, value )) , title "Filter by this label" ] [ text "+" ] ] ) labels expandButton = expandAlertGroup groupActive groupId receiver |> Html.map (\msg -> MsgForAlertList (ActiveGroups msg)) alertCount = List.length alerts alertText = if alertCount == 1 then String.fromInt alertCount ++ " alert" else String.fromInt alertCount ++ " alerts" alertEl = [ span [ class "ml-1 mb-0", style "white-space" "nowrap" ] [ text alertText ] ] in div [] [ div [ class "mb-3" ] (expandButton :: labels_ ++ alertEl) , if groupActive then ul [ class "list-group mb-0" ] (List.map (AlertView.view labels activeId) alerts) else text "" ] expandAlertGroup : Bool -> Int -> Receiver -> Html Int expandAlertGroup expanded groupId receiver = let icon = if expanded then "fa-minus" else "fa-plus" in button [ onClick groupId , class "btn btn-outline-info border-0 mr-1 mb-1" , style "margin-left" "-3rem" ] [ i [ class ("fa " ++ icon) , class "mr-2" ] [] , text receiver.name ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/FilterBar/000077500000000000000000000000001476331240200237745ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/FilterBar/Types.elm000066400000000000000000000020711476331240200255770ustar00rootroot00000000000000module Views.FilterBar.Types exposing (Model, Msg(..), initFilterBar) import Utils.Filter type alias Model = { matchers : List Utils.Filter.Matcher , backspacePressed : Bool , matcherText : String } type Msg = AddFilterMatcher Bool Utils.Filter.Matcher | DeleteFilterMatcher Bool Utils.Filter.Matcher | PressingBackspace Bool | UpdateMatcherText String | Noop {-| A note about the `backspacePressed` attribute: Holding down the backspace removes (one by one) each last character in the input, and the whole time sends multiple keyDown events. This is a guard so that if a user holds down backspace to remove the text in the input, they won't accidentally hold backspace too long and then delete the preceding matcher as well. So, once a user holds backspace to clear an input, they have to then lift up the key and press it again to proceed to deleting the next matcher. -} initFilterBar : List Utils.Filter.Matcher -> Model initFilterBar matchers = { matchers = matchers , backspacePressed = False , matcherText = "" } prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/FilterBar/Updates.elm000066400000000000000000000036551476331240200261110ustar00rootroot00000000000000module Views.FilterBar.Updates exposing (setMatchers, update) import Browser.Dom as Dom import Task import Utils.Filter exposing (Filter, parseFilter) import Views.FilterBar.Types exposing (Model, Msg(..)) {-| Returns a triple where the Bool component notifies whether the matchers have changed. -} update : Msg -> Model -> ( Model, Bool, Cmd Msg ) update msg model = case msg of AddFilterMatcher emptyMatcherText matcher -> ( { model | matchers = if List.member matcher model.matchers then model.matchers else model.matchers ++ [ matcher ] , matcherText = if emptyMatcherText then "" else model.matcherText } , True , Dom.focus "filter-bar-matcher" |> Task.attempt (always Noop) ) DeleteFilterMatcher setMatcherText matcher -> ( { model | matchers = List.filter ((/=) matcher) model.matchers , matcherText = if setMatcherText then Utils.Filter.stringifyMatcher matcher else model.matcherText } , True , Dom.focus "filter-bar-matcher" |> Task.attempt (always Noop) ) UpdateMatcherText value -> ( { model | matcherText = value }, False, Cmd.none ) PressingBackspace isPressed -> ( { model | backspacePressed = isPressed }, False, Cmd.none ) Noop -> ( model, False, Cmd.none ) setMatchers : Filter -> Model -> Model setMatchers filter model = { model | matchers = filter.text |> Maybe.andThen parseFilter |> Maybe.withDefault [] } prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/FilterBar/Views.elm000066400000000000000000000125161476331240200255750ustar00rootroot00000000000000module Views.FilterBar.Views exposing (view) import Html exposing (Html, a, button, div, i, input, small, span, text) import Html.Attributes exposing (class, disabled, href, id, style, value) import Html.Events exposing (onClick, onInput) import Utils.Filter exposing (Matcher, convertFilterMatcher) import Utils.Keyboard exposing (onKeyDown, onKeyUp) import Utils.List import Views.FilterBar.Types exposing (Model, Msg(..)) import Views.SilenceForm.Parsing exposing (newSilenceFromMatchers) keys : { backspace : Int , enter : Int } keys = { backspace = 8 , enter = 13 } viewMatcher : Matcher -> Html Msg viewMatcher matcher = div [ class "col col-auto" ] [ div [ class "btn-group mr-2 mb-2" ] [ button [ class "btn btn-outline-info" , onClick (DeleteFilterMatcher True matcher) ] [ text <| Utils.Filter.stringifyMatcher matcher ] , button [ class "btn btn-outline-danger" , onClick (DeleteFilterMatcher False matcher) ] [ text "×" ] ] ] viewMatchers : List Matcher -> List (Html Msg) viewMatchers matchers = matchers |> List.map viewMatcher view : { showSilenceButton : Bool } -> Model -> Html Msg view { showSilenceButton } { matchers, matcherText, backspacePressed } = let maybeMatcher = Utils.Filter.parseMatcher matcherText maybeLastMatcher = Utils.List.lastElem matchers className = if matcherText == "" then "" else case maybeMatcher of Just _ -> "has-success" Nothing -> "has-danger" keyDown key = if key == keys.enter then maybeMatcher |> Maybe.map (AddFilterMatcher True) |> Maybe.withDefault Noop else if key == keys.backspace then if matcherText == "" then case ( backspacePressed, maybeLastMatcher ) of ( False, Just lastMatcher ) -> DeleteFilterMatcher True lastMatcher _ -> Noop else PressingBackspace True else Noop keyUp key = if key == keys.backspace then PressingBackspace False else Noop onClickAttr = maybeMatcher |> Maybe.map (AddFilterMatcher True) |> Maybe.withDefault Noop |> onClick isDisabled = maybeMatcher == Nothing dataMatchers = matchers |> List.map convertFilterMatcher in div [ class "row no-gutters align-items-start" ] (viewMatchers matchers ++ [ div [ class ("col " ++ className) , style "min-width" (if showSilenceButton then "300px" else "200px" ) ] [ div [ class "row no-gutters align-content-stretch" ] [ div [ class "col input-group" ] [ input [ id "filter-bar-matcher" , class "form-control" , value matcherText , onKeyDown keyDown , onKeyUp keyUp , onInput UpdateMatcherText ] [] , span [ class "input-group-btn" ] [ button [ class "btn btn-primary", disabled isDisabled, onClickAttr ] [ text "+" ] ] ] , if showSilenceButton then div [ class "col col-auto input-group-btn ml-2" ] [ div [ class "input-group" ] [ a [ class "btn btn-outline-info" , href (newSilenceFromMatchers dataMatchers) ] [ i [ class "fa fa-bell-slash-o mr-2" ] [] , text "Silence" ] ] ] else text "" ] , small [ class "form-text text-muted" ] [ text "Custom matcher, e.g." , button [ class "btn btn-link btn-sm align-baseline" , onClick (UpdateMatcherText exampleMatcher) ] [ text exampleMatcher ] ] ] ] ) exampleMatcher : String exampleMatcher = "env=\"production\"" prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/GroupBar/000077500000000000000000000000001476331240200236435ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/GroupBar/Types.elm000066400000000000000000000016111476331240200254450ustar00rootroot00000000000000module Views.GroupBar.Types exposing (Model, Msg(..), initGroupBar) import Browser.Navigation exposing (Key) import Set exposing (Set) type alias Model = { list : Set String , fieldText : String , fields : List String , matches : List String , backspacePressed : Bool , focused : Bool , resultsHovered : Bool , maybeSelectedMatch : Maybe String , key : Key } type Msg = AddField Bool String | DeleteField Bool String | Select (Maybe String) | PressingBackspace Bool | Focus Bool | ResultsHovered Bool | UpdateFieldText String | CustomGrouping Bool | Noop initGroupBar : Key -> Model initGroupBar key = { list = Set.empty , fieldText = "" , fields = [] , matches = [] , focused = False , resultsHovered = False , backspacePressed = False , maybeSelectedMatch = Nothing , key = key } prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/GroupBar/Updates.elm000066400000000000000000000072131476331240200257520ustar00rootroot00000000000000module Views.GroupBar.Updates exposing (setFields, update) import Browser.Dom as Dom import Browser.Navigation as Navigation import Set import Task import Utils.Filter exposing (Filter, parseGroup, stringifyGroup) import Utils.Match exposing (jaroWinkler) import Views.GroupBar.Types exposing (Model, Msg(..)) update : String -> Filter -> Msg -> Model -> ( Model, Cmd Msg ) update url filter msg model = case msg of CustomGrouping customGrouping -> ( model , Cmd.batch [ Navigation.pushUrl model.key (Utils.Filter.toUrl url { filter | customGrouping = customGrouping }) , Dom.focus "group-by-field" |> Task.attempt (always Noop) ] ) AddField emptyFieldText text -> immediatelyFilter url filter { model | fields = model.fields ++ [ text ] , matches = [] , fieldText = if emptyFieldText then "" else model.fieldText } DeleteField setFieldText text -> immediatelyFilter url filter { model | fields = List.filter ((/=) text) model.fields , matches = [] , fieldText = if setFieldText then text else model.fieldText } Select maybeSelectedMatch -> ( { model | maybeSelectedMatch = maybeSelectedMatch }, Cmd.none ) Focus focused -> ( { model | focused = focused , maybeSelectedMatch = Nothing } , Cmd.none ) ResultsHovered resultsHovered -> ( { model | resultsHovered = resultsHovered } , Cmd.none ) PressingBackspace pressed -> ( { model | backspacePressed = pressed }, Cmd.none ) UpdateFieldText text -> updateAutoComplete { model | fieldText = text } Noop -> ( model, Cmd.none ) immediatelyFilter : String -> Filter -> Model -> ( Model, Cmd Msg ) immediatelyFilter url filter model = let newFilter = { filter | group = stringifyGroup model.fields } in ( model , Cmd.batch [ Navigation.pushUrl model.key (Utils.Filter.toUrl url newFilter) , Dom.focus "group-by-field" |> Task.attempt (always Noop) ] ) setFields : Filter -> Model -> Model setFields filter model = { model | fields = parseGroup filter.group } updateAutoComplete : Model -> ( Model, Cmd Msg ) updateAutoComplete model = ( { model | matches = if String.isEmpty model.fieldText then [] else if String.contains " " model.fieldText then model.matches else -- TODO: How many matches do we want to show? -- NOTE: List.reverse is used because our scale is (0.0, 1.0), -- but we want the higher values to be in the front of the -- list. Set.toList model.list |> List.filter ((\a -> List.member a model.fields) >> not) |> List.sortBy (jaroWinkler model.fieldText) |> List.reverse |> List.take 10 , maybeSelectedMatch = Nothing } , Cmd.none ) prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/GroupBar/Views.elm000066400000000000000000000134031476331240200254400ustar00rootroot00000000000000module Views.GroupBar.Views exposing (view) import Html exposing (Html, a, button, div, input, small, span, text) import Html.Attributes exposing (class, disabled, id, style, value) import Html.Events exposing (onBlur, onClick, onFocus, onInput, onMouseEnter, onMouseLeave) import Set import Utils.Keyboard exposing (keys, onKeyDown, onKeyUp) import Utils.List import Utils.Views import Views.GroupBar.Types exposing (Model, Msg(..)) view : Model -> Bool -> Html Msg view ({ list, fieldText, fields } as model) customGrouping = let isDisabled = not (Set.member fieldText list) || List.member fieldText fields className = if String.isEmpty fieldText then "" else if isDisabled then "has-danger" else "has-success" checkbox = div [ class "mb-3" ] [ Utils.Views.checkbox "Enable custom grouping" customGrouping CustomGrouping ] in if customGrouping then div [] [ checkbox , div [ class "row no-gutters align-items-start" ] (List.map viewField fields ++ [ div [ class ("col " ++ className) , style "min-width" "200px" ] [ textInputField isDisabled model , exampleField fields , autoCompleteResults model ] ] ) ] else checkbox exampleField : List String -> Html Msg exampleField fields = if List.member "alertname" fields then small [ class "form-text text-muted" ] [ text "Label key for grouping alerts" ] else small [ class "form-text text-muted" ] [ text "Label key for grouping alerts, e.g." , button [ class "btn btn-link btn-sm align-baseline" , onClick (UpdateFieldText "alertname") ] [ text "alertname" ] ] textInputField : Bool -> Model -> Html Msg textInputField isDisabled { fieldText, matches, maybeSelectedMatch, fields, backspacePressed } = let onClickMsg = if isDisabled then Noop else AddField True fieldText nextMatch = maybeSelectedMatch |> Maybe.map ((\b a -> Utils.List.nextElem a b) <| matches) |> Maybe.withDefault (List.head matches) prevMatch = maybeSelectedMatch |> Maybe.map ((\b a -> Utils.List.nextElem a b) <| List.reverse matches) |> Maybe.withDefault (Utils.List.lastElem matches) keyDown key = if key == keys.down then Select nextMatch else if key == keys.up then Select prevMatch else if key == keys.enter then if not isDisabled then AddField True fieldText else maybeSelectedMatch |> Maybe.map (AddField True) |> Maybe.withDefault Noop else if key == keys.backspace then if fieldText == "" then case ( Utils.List.lastElem fields, backspacePressed ) of ( Just lastField, False ) -> DeleteField True lastField _ -> Noop else PressingBackspace True else Noop keyUp key = if key == keys.backspace then PressingBackspace False else Noop in div [ class "input-group" ] [ input [ id "group-by-field" , class "form-control" , value fieldText , onKeyDown keyDown , onKeyUp keyUp , onInput UpdateFieldText , onFocus (Focus True) , onBlur (Focus False) ] [] , span [ class "input-group-btn" ] [ button [ class "btn btn-primary", disabled isDisabled, onClick onClickMsg ] [ text "+" ] ] ] autoCompleteResults : Model -> Html Msg autoCompleteResults { maybeSelectedMatch, focused, resultsHovered, matches } = let autoCompleteClass = if (focused || resultsHovered) && not (List.isEmpty matches) then "show" else "" in div [ class ("autocomplete-menu " ++ autoCompleteClass) , onMouseEnter (ResultsHovered True) , onMouseLeave (ResultsHovered False) ] [ matches |> List.map (matchedField maybeSelectedMatch) |> div [ class "dropdown-menu" ] ] matchedField : Maybe String -> String -> Html Msg matchedField maybeSelectedMatch field = let className = if maybeSelectedMatch == Just field then "active" else "" in button [ class ("dropdown-item " ++ className) , onClick (AddField True field) ] [ text field ] viewField : String -> Html Msg viewField field = div [ class "col col-auto" ] [ div [ class "btn-group mr-2 mb-2" ] [ button [ class "btn btn-outline-info" , onClick (DeleteField True field) ] [ text field ] , button [ class "btn btn-outline-danger" , onClick (DeleteField False field) ] [ text "×" ] ] ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/NavBar/000077500000000000000000000000001476331240200232735ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/NavBar/Types.elm000066400000000000000000000013311476331240200250740ustar00rootroot00000000000000module Views.NavBar.Types exposing (Tab, alertsTab, noneTab, settingsTab, silencesTab, statusTab, tabs) type alias Tab = { link : String , name : String } alertsTab : Tab alertsTab = { link = "#/alerts", name = "Alerts" } silencesTab : Tab silencesTab = { link = "#/silences", name = "Silences" } statusTab : Tab statusTab = { link = "#/status", name = "Status" } settingsTab : Tab settingsTab = { link = "#/settings", name = "Settings" } helpTab : Tab helpTab = { link = "https://prometheus.io/docs/alerting/alertmanager/", name = "Help" } noneTab : Tab noneTab = { link = "", name = "" } tabs : List Tab tabs = [ alertsTab, silencesTab, statusTab, settingsTab, helpTab ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/NavBar/Views.elm000066400000000000000000000043231476331240200250710ustar00rootroot00000000000000module Views.NavBar.Views exposing (navBar) import Html exposing (Html, a, div, header, li, nav, text, ul) import Html.Attributes exposing (class, href, style, title) import Types exposing (Route(..)) import Views.NavBar.Types exposing (Tab, alertsTab, noneTab, settingsTab, silencesTab, statusTab, tabs) navBar : Route -> Html msg navBar currentRoute = header [ class "navbar navbar-toggleable-md navbar-light bg-faded mb-5 pt-3 pb-3" , style "border-bottom" "1px solid rgba(0, 0, 0, .125)" ] [ nav [ class "container" ] [ a [ class "navbar-brand", href "#" ] [ text "Alertmanager" ] , ul [ class "navbar-nav" ] (navBarItems currentRoute) , case currentRoute of SilenceFormEditRoute _ -> text "" SilenceFormNewRoute _ -> text "" _ -> div [ class "form-inline ml-auto" ] [ a [ class "btn btn-outline-info" , href "#/silences/new" ] [ text "New Silence" ] ] ] ] navBarItems : Route -> List (Html msg) navBarItems currentRoute = List.map (navBarItem currentRoute) tabs navBarItem : Route -> Tab -> Html msg navBarItem currentRoute tab = li [ class <| "nav-item" ++ isActive currentRoute tab ] [ a [ class "nav-link", href tab.link, title tab.name ] [ text tab.name ] ] isActive : Route -> Tab -> String isActive currentRoute tab = if routeToTab currentRoute == tab then " active" else "" routeToTab : Route -> Tab routeToTab currentRoute = case currentRoute of AlertsRoute _ -> alertsTab NotFoundRoute -> noneTab SilenceFormEditRoute _ -> silencesTab SilenceFormNewRoute _ -> silencesTab SilenceListRoute _ -> silencesTab SilenceViewRoute _ -> silencesTab StatusRoute -> statusTab TopLevelRoute -> noneTab SettingsRoute -> settingsTab prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/NotFound/000077500000000000000000000000001476331240200236565ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/NotFound/Views.elm000066400000000000000000000003071476331240200254520ustar00rootroot00000000000000module Views.NotFound.Views exposing (view) import Html exposing (Html, div, h1, text) import Types exposing (Msg) view : Html Msg view = div [] [ h1 [] [ text "not found" ] ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/ReceiverBar/000077500000000000000000000000001476331240200243135ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/ReceiverBar/Types.elm000066400000000000000000000025011476331240200261140ustar00rootroot00000000000000module Views.ReceiverBar.Types exposing (Model, Msg(..), Receiver, apiReceiverToReceiver, initReceiverBar) import Browser.Navigation exposing (Key) import Data.Receiver import Regex import Utils.Types exposing (ApiData(..)) type Msg = ReceiversFetched (ApiData (List Data.Receiver.Receiver)) | UpdateReceiver String | EditReceivers | FilterByReceiver String | Select (Maybe Receiver) | ResultsHovered Bool | BlurReceiverField | Noop type alias Model = { receivers : List Receiver , matches : List Receiver , fieldText : String , selectedReceiver : Maybe Receiver , showReceivers : Bool , resultsHovered : Bool , key : Key } type alias Receiver = { name : String , regex : String } escapeRegExp : String -> String escapeRegExp text = let reg = Regex.fromString "[-[\\]{}()*+?.,\\\\^$|#\\s]" |> Maybe.withDefault Regex.never in Regex.replace reg (.match >> (++) "\\") text apiReceiverToReceiver : Data.Receiver.Receiver -> Receiver apiReceiverToReceiver r = Receiver r.name (escapeRegExp r.name) initReceiverBar : Key -> Model initReceiverBar key = { receivers = [] , matches = [] , fieldText = "" , selectedReceiver = Nothing , showReceivers = False , resultsHovered = False , key = key } prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/ReceiverBar/Updates.elm000066400000000000000000000047601476331240200264260ustar00rootroot00000000000000module Views.ReceiverBar.Updates exposing (fetchReceivers, update) import Alerts.Api as Api import Browser.Dom as Dom import Browser.Navigation as Navigation import Task import Utils.Filter exposing (Filter) import Utils.Match exposing (jaroWinkler) import Utils.Types exposing (ApiData(..)) import Views.ReceiverBar.Types exposing (Model, Msg(..), apiReceiverToReceiver) update : String -> Filter -> Msg -> Model -> ( Model, Cmd Msg ) update url filter msg model = case msg of ReceiversFetched (Success receivers) -> ( { model | receivers = List.map apiReceiverToReceiver receivers }, Cmd.none ) ReceiversFetched _ -> ( model, Cmd.none ) EditReceivers -> ( { model | showReceivers = True , fieldText = "" , matches = model.receivers |> List.take 10 |> (::) { name = "All", regex = "" } , selectedReceiver = Nothing } , Dom.focus "receiver-field" |> Task.attempt (always Noop) ) ResultsHovered resultsHovered -> ( { model | resultsHovered = resultsHovered }, Cmd.none ) UpdateReceiver receiver -> let matches = model.receivers |> List.sortBy (.name >> jaroWinkler receiver) |> List.reverse |> List.take 10 |> (::) { name = "All", regex = "" } in ( { model | fieldText = receiver , matches = matches } , Cmd.none ) BlurReceiverField -> ( { model | showReceivers = False }, Cmd.none ) Select maybeReceiver -> ( { model | selectedReceiver = maybeReceiver }, Cmd.none ) FilterByReceiver regex -> ( { model | showReceivers = False, resultsHovered = False } , Navigation.pushUrl model.key (Utils.Filter.toUrl url { filter | receiver = if regex == "" then Nothing else Just regex } ) ) Noop -> ( model, Cmd.none ) fetchReceivers : String -> Cmd Msg fetchReceivers = Api.fetchReceivers >> Cmd.map ReceiversFetched prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/ReceiverBar/Views.elm000066400000000000000000000064311476331240200261130ustar00rootroot00000000000000module Views.ReceiverBar.Views exposing (view) import Html exposing (Html, div, input, li, text) import Html.Attributes exposing (class, id, style, tabindex, value) import Html.Events exposing (onBlur, onClick, onInput, onMouseEnter, onMouseLeave) import Utils.Keyboard exposing (keys, onKeyDown) import Utils.List import Views.ReceiverBar.Types exposing (Model, Msg(..), Receiver) view : Maybe String -> Model -> Html Msg view maybeRegex model = if model.showReceivers || model.resultsHovered then viewDropdown model else viewResult maybeRegex model.receivers viewResult : Maybe String -> List Receiver -> Html Msg viewResult maybeRegex receivers = let unescapedReceiver = receivers |> List.filter (.regex >> Just >> (==) maybeRegex) |> List.map (.name >> Just) |> List.head |> Maybe.withDefault maybeRegex in li [ class "nav-item ml-auto" , tabindex 1 , style "position" "relative" , style "outline" "none" ] [ div [ onClick EditReceivers , class "mt-1 mr-4" , style "cursor" "pointer" ] [ text ("Receiver: " ++ Maybe.withDefault "All" unescapedReceiver) ] ] viewDropdown : Model -> Html Msg viewDropdown { matches, fieldText, selectedReceiver } = let nextMatch = selectedReceiver |> Maybe.map ((\b a -> Utils.List.nextElem a b) <| matches) |> Maybe.withDefault (List.head matches) prevMatch = selectedReceiver |> Maybe.map ((\b a -> Utils.List.nextElem a b) <| List.reverse matches) |> Maybe.withDefault (Utils.List.lastElem matches) keyDown key = if key == keys.down then Select nextMatch else if key == keys.up then Select prevMatch else if key == keys.enter then selectedReceiver |> Maybe.map .regex |> Maybe.withDefault fieldText |> FilterByReceiver else Noop in li [ class "nav-item ml-auto mr-4 autocomplete-menu show" , onMouseEnter (ResultsHovered True) , onMouseLeave (ResultsHovered False) , style "position" "relative" , style "outline" "none" ] [ input [ id "receiver-field" , value fieldText , onBlur BlurReceiverField , onInput UpdateReceiver , onKeyDown keyDown , class "mr-4" , style "display" "block" , style "width" "100%" ] [] , matches |> List.map (receiverField selectedReceiver) |> div [ class "dropdown-menu dropdown-menu-right" ] ] receiverField : Maybe Receiver -> Receiver -> Html Msg receiverField selected receiver = let attrs = if selected == Just receiver then [ class "dropdown-item active" ] else [ class "dropdown-item" , style "cursor" "pointer" , onClick (FilterByReceiver receiver.regex) ] in div attrs [ text receiver.name ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Settings/000077500000000000000000000000001476331240200237225ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Settings/Parsing.elm000066400000000000000000000002541476331240200260250ustar00rootroot00000000000000module Views.Settings.Parsing exposing (settingsViewParser) import Url.Parser exposing (Parser, s) settingsViewParser : Parser a a settingsViewParser = s "settings" prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Settings/Types.elm000066400000000000000000000003351476331240200255260ustar00rootroot00000000000000module Views.Settings.Types exposing (..) import Utils.DateTimePicker.Utils exposing (FirstDayOfWeek) type alias Model = { firstDayOfWeek : FirstDayOfWeek } type SettingsMsg = UpdateFirstDayOfWeek String prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Settings/Updates.elm000066400000000000000000000027131476331240200260310ustar00rootroot00000000000000port module Views.Settings.Updates exposing (..) import Task import Types exposing (Msg(..)) import Utils.DateTimePicker.Utils exposing (FirstDayOfWeek(..)) import Views.Settings.Types exposing (..) import Views.SilenceForm.Types update : SettingsMsg -> Model -> ( Model, Cmd Msg ) update msg model = case msg of Views.Settings.Types.UpdateFirstDayOfWeek firstDayOfWeekString -> let firstDayOfWeek = case firstDayOfWeekString of "Monday" -> Monday "Sunday" -> Sunday _ -> Monday firstDayOfWeekString2 = case firstDayOfWeek of Monday -> "Monday" Sunday -> "Sunday" in ( { model | firstDayOfWeek = firstDayOfWeek } , Cmd.batch [ Task.perform identity (Task.succeed (MsgForSilenceForm (Views.SilenceForm.Types.UpdateFirstDayOfWeek firstDayOfWeek ) ) ) , persistFirstDayOfWeek firstDayOfWeekString2 ] ) port persistFirstDayOfWeek : String -> Cmd msg prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Settings/Views.elm000066400000000000000000000026051476331240200255210ustar00rootroot00000000000000module Views.Settings.Views exposing (view) import Html exposing (..) import Html.Attributes exposing (checked, class, for, id, type_, value) import Html.Events exposing (..) import Utils.DateTimePicker.Utils exposing (FirstDayOfWeek(..)) import Views.Settings.Types exposing (Model, SettingsMsg(..)) view : Model -> Html SettingsMsg view model = div [] [ div [ class "no-gutters" ] [ label [ for "fieldset" ] [ text "First day of the week:" ] , fieldset [ id "fieldset" ] [ radio "Monday" (model.firstDayOfWeek == Monday) UpdateFirstDayOfWeek , radio "Sunday" (model.firstDayOfWeek == Sunday) UpdateFirstDayOfWeek ] , small [ class "form-text text-muted" ] [ text "Note: This setting is saved in local storage of your browser" ] ] ] radio : String -> Bool -> (String -> msg) -> Html msg radio radioValue isChecked msg = label [ class "mt-1 ml-1 custom-control custom-radio" ] [ input [ type_ "checkbox" , class "custom-control-input" , checked isChecked , value radioValue , onInput msg ] [] , span [ class "custom-control-indicator" ] [] , span [ class "custom-control-description" ] [ text radioValue ] ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Shared/000077500000000000000000000000001476331240200233305ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Shared/Alert.elm000066400000000000000000000032311476331240200250750ustar00rootroot00000000000000module Views.Shared.Alert exposing (annotation, annotationsButton, generatorUrlButton, titleView) import Data.GettableAlert exposing (GettableAlert) import Html exposing (Html, a, button, i, span, td, text, th, tr) import Html.Attributes exposing (class, href) import Html.Events exposing (onClick) import Utils.Date exposing (dateTimeFormat) import Utils.Views exposing (linkifyText) import Views.Shared.Types exposing (Msg) annotationsButton : Maybe String -> GettableAlert -> Html Msg annotationsButton activeAlertId alert = if activeAlertId == Just alert.fingerprint then button [ onClick Nothing , class "btn btn-outline-info border-0 active" ] [ i [ class "fa fa-minus mr-2" ] [], text "Info" ] else button [ class "btn btn-outline-info border-0" , onClick (Just alert.fingerprint) ] [ i [ class "fa fa-plus mr-2" ] [], text "Info" ] annotation : ( String, String ) -> Html msg annotation ( key, value ) = tr [] [ th [ class "text-nowrap" ] [ text (key ++ ":") ] , td [ class "w-100" ] (linkifyText value) ] titleView : GettableAlert -> Html msg titleView alert = span [ class "align-self-center mr-2" ] [ text (dateTimeFormat alert.startsAt) ] generatorUrlButton : String -> Html msg generatorUrlButton url = if String.startsWith "http://" url || String.startsWith "https://" url then a [ class "btn btn-outline-info border-0", href url ] [ i [ class "fa fa-line-chart mr-2" ] [] , text "Source" ] else text "" prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Shared/AlertCompact.elm000066400000000000000000000033361476331240200264120ustar00rootroot00000000000000module Views.Shared.AlertCompact exposing (view) import Data.GettableAlert exposing (GettableAlert) import Dict import Html exposing (Html, div, table, text) import Html.Attributes exposing (class, style) import Utils.Views exposing (labelButton) import Views.Shared.Alert exposing (annotation, annotationsButton, generatorUrlButton, titleView) import Views.Shared.Types exposing (Msg) view : Maybe String -> GettableAlert -> Html Msg view activeAlertId alert = let -- remove the grouping labels, and bring the alertname to front ungroupedLabels = alert.labels |> Dict.toList |> List.partition (Tuple.first >> (==) "alertname") |> (\( a, b ) -> a ++ b) |> List.map (\( a, b ) -> String.join "=" [ a, b ]) in div [ -- speedup rendering in Chrome, because list-group-item className -- creates a new layer in the rendering engine style "position" "static" , class "border-0 p-0 mb-4" ] [ div [ class "w-100 mb-2 d-flex" ] [ titleView alert , if Dict.size alert.annotations > 0 then annotationsButton activeAlertId alert else text "" , case alert.generatorURL of Just url -> generatorUrlButton url Nothing -> text "" ] , if activeAlertId == Just alert.fingerprint then table [ class "table w-100 mb-1" ] (List.map annotation <| Dict.toList alert.annotations) else text "" , div [] (List.map (labelButton Nothing) ungroupedLabels) ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Shared/AlertListCompact.elm000066400000000000000000000006701476331240200272440ustar00rootroot00000000000000module Views.Shared.AlertListCompact exposing (view) import Data.GettableAlert exposing (GettableAlert) import Html exposing (Html, div) import Html.Attributes exposing (class) import Views.Shared.AlertCompact import Views.Shared.Types exposing (Msg) view : Maybe String -> List GettableAlert -> Html Msg view activeAlertId alerts = List.map (Views.Shared.AlertCompact.view activeAlertId) alerts |> div [ class "pa0 w-100" ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Shared/Dialog.elm000066400000000000000000000030521476331240200252260ustar00rootroot00000000000000module Views.Shared.Dialog exposing (Config, view) import Html exposing (Html, button, div, h5, text) import Html.Attributes exposing (class, style) import Html.Events exposing (onClick) type alias Config msg = { title : String , body : Html msg , footer : Html msg , onClose : msg } view : Maybe (Config msg) -> Html msg view maybeConfig = case maybeConfig of Nothing -> div [ style "clip" "rect(0,0,0,0)", style "position" "fixed" ] [ div [ class "modal fade" ] [] , div [ class "modal-backdrop fade" ] [] ] Just { onClose, body, footer, title } -> div [] [ div [ class "modal fade show", style "display" "block" ] [ div [ class "modal-dialog modal-dialog-centered" ] [ div [ class "modal-content" ] [ div [ class "modal-header" ] [ h5 [ class "modal-title" ] [ text title ] , button [ class "close" , onClick onClose ] [ text "×" ] ] , div [ class "modal-body" ] [ body ] , div [ class "modal-footer" ] [ footer ] ] ] ] , div [ class "modal-backdrop fade show" ] [] ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Shared/SilencePreview.elm000066400000000000000000000020751476331240200267570ustar00rootroot00000000000000module Views.Shared.SilencePreview exposing (view) import Data.GettableAlert exposing (GettableAlert) import Html exposing (Html, div, p, strong, text) import Html.Attributes exposing (class) import Utils.Types exposing (ApiData(..)) import Utils.Views exposing (loading) import Views.Shared.AlertListCompact import Views.Shared.Types exposing (Msg) view : Maybe String -> ApiData (List GettableAlert) -> Html Msg view activeAlertId alertsResponse = case alertsResponse of Success alerts -> if List.isEmpty alerts then div [ class "w-100" ] [ p [] [ strong [] [ text "No affected alerts" ] ] ] else div [ class "w-100" ] [ p [] [ strong [] [ text ("Affected alerts: " ++ String.fromInt (List.length alerts)) ] ] , Views.Shared.AlertListCompact.view activeAlertId alerts ] Initial -> text "" Loading -> loading Failure e -> div [ class "alert alert-warning" ] [ text e ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Shared/Types.elm000066400000000000000000000001151476331240200251300ustar00rootroot00000000000000module Views.Shared.Types exposing (Msg) type alias Msg = Maybe String prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceForm/000077500000000000000000000000001476331240200243305ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceForm/Parsing.elm000066400000000000000000000050761476331240200264420ustar00rootroot00000000000000module Views.SilenceForm.Parsing exposing (newSilenceFromAlertLabels, newSilenceFromMatchers, newSilenceFromMatchersAndComment, silenceFormEditParser, silenceFormNewParser) import Data.Matcher import Dict exposing (Dict) import Url exposing (percentEncode) import Url.Parser exposing ((), (), Parser, s, string) import Url.Parser.Query as Query import Utils.Filter exposing (SilenceFormGetParams, parseFilter) newSilenceFromAlertLabels : Dict String String -> String newSilenceFromAlertLabels labels = labels |> Dict.toList |> List.map (\( k, v ) -> Utils.Filter.Matcher k Utils.Filter.Eq v) |> encodeMatchers parseGetParams : Maybe String -> Maybe String -> SilenceFormGetParams parseGetParams filter comment = { matchers = filter |> Maybe.andThen parseFilter >> Maybe.withDefault [] , comment = comment |> Maybe.withDefault "" } silenceFormNewParser : Parser (SilenceFormGetParams -> a) a silenceFormNewParser = s "silences" s "new" Query.map2 parseGetParams (Query.string "filter") (Query.string "comment") silenceFormEditParser : Parser (String -> a) a silenceFormEditParser = s "silences" string s "edit" newSilenceFromMatchers : List Data.Matcher.Matcher -> String newSilenceFromMatchers matchers = matchers |> List.map (\{ name, value, isRegex, isEqual } -> let isEqualValue = case isEqual of Nothing -> True Just justIsEqual -> justIsEqual op = if not isRegex && isEqualValue then Utils.Filter.Eq else if not isRegex && not isEqualValue then Utils.Filter.NotEq else if isRegex && isEqualValue then Utils.Filter.RegexMatch else Utils.Filter.NotRegexMatch in Utils.Filter.Matcher name op value ) |> encodeMatchers newSilenceFromMatchersAndComment : List Data.Matcher.Matcher -> String -> String newSilenceFromMatchersAndComment matchers comment = newSilenceFromMatchers matchers ++ "&comment=" ++ (comment |> percentEncode) encodeMatchers : List Utils.Filter.Matcher -> String encodeMatchers matchers = matchers |> Utils.Filter.stringifyFilter |> percentEncode |> (++) "#/silences/new?filter=" prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceForm/Types.elm000066400000000000000000000166531476331240200261460ustar00rootroot00000000000000module Views.SilenceForm.Types exposing ( Model , SilenceForm , SilenceFormFieldMsg(..) , SilenceFormMsg(..) , fromDateTimePicker , fromMatchersAndCommentAndTime , fromSilence , initSilenceForm , parseEndsAt , toSilence , validateForm , validateMatchers ) import Browser.Navigation exposing (Key) import Data.GettableAlert exposing (GettableAlert) import Data.GettableSilence exposing (GettableSilence) import Data.Matcher import Data.PostableSilence exposing (PostableSilence) import DateTime import Silences.Types exposing (nullSilence) import Time exposing (Posix) import Utils.Date exposing (addDuration, durationFormat, parseDuration, timeDifference, timeFromString, timeToString) import Utils.DateTimePicker.Types exposing (DateTimePicker, initDateTimePicker, initFromStartAndEndTime) import Utils.DateTimePicker.Utils exposing (FirstDayOfWeek) import Utils.Filter import Utils.FormValidation exposing ( ValidatedField , ValidationState(..) , initialField , stringNotEmpty , validate ) import Utils.Types exposing (ApiData(..)) import Views.FilterBar.Types as FilterBar type alias Model = { form : SilenceForm , filterBar : FilterBar.Model , filterBarValid : ValidationState , silenceId : ApiData String , alerts : ApiData (List GettableAlert) , activeAlertId : Maybe String , key : Key , firstDayOfWeek : FirstDayOfWeek } type alias SilenceForm = { id : Maybe String , createdBy : ValidatedField , comment : ValidatedField , startsAt : ValidatedField , endsAt : ValidatedField , duration : ValidatedField , dateTimePicker : DateTimePicker , viewDateTimePicker : Bool } type SilenceFormMsg = UpdateField SilenceFormFieldMsg | CreateSilence | PreviewSilence | AlertGroupsPreview (ApiData (List GettableAlert)) | SetActiveAlert (Maybe String) | FetchSilence String | NewSilenceFromMatchersAndComment String Utils.Filter.SilenceFormGetParams | NewSilenceFromMatchersAndCommentAndTime String (List Utils.Filter.Matcher) String Posix | SilenceFetch (ApiData GettableSilence) | SilenceCreate (ApiData String) | UpdateDateTimePicker Utils.DateTimePicker.Types.Msg | MsgForFilterBar FilterBar.Msg | UpdateFirstDayOfWeek FirstDayOfWeek type SilenceFormFieldMsg = UpdateStartsAt String | UpdateEndsAt String | UpdateDuration String | ValidateTime | UpdateCreatedBy String | ValidateCreatedBy | UpdateComment String | ValidateComment | UpdateTimesFromPicker | OpenDateTimePicker | CloseDateTimePicker initSilenceForm : Key -> FirstDayOfWeek -> Model initSilenceForm key firstDayOfWeek = { form = empty firstDayOfWeek , filterBar = FilterBar.initFilterBar [] , filterBarValid = Utils.FormValidation.Initial , silenceId = Utils.Types.Initial , alerts = Utils.Types.Initial , activeAlertId = Nothing , key = key , firstDayOfWeek = firstDayOfWeek } toSilence : FilterBar.Model -> SilenceForm -> Maybe PostableSilence toSilence filterBar { id, comment, createdBy, startsAt, endsAt } = Result.map5 (\nonEmptyMatchers nonEmptyComment nonEmptyCreatedBy parsedStartsAt parsedEndsAt -> { nullSilence | id = id , comment = nonEmptyComment , matchers = nonEmptyMatchers , createdBy = nonEmptyCreatedBy , startsAt = parsedStartsAt , endsAt = parsedEndsAt } ) (validMatchers filterBar) (stringNotEmpty comment.value) (stringNotEmpty createdBy.value) (timeFromString startsAt.value) (parseEndsAt startsAt.value endsAt.value) |> Result.toMaybe validMatchers : FilterBar.Model -> Result String (List Data.Matcher.Matcher) validMatchers { matchers, matcherText } = if matcherText /= "" then Err "Please complete adding the matcher" else case matchers of [] -> Err "Matchers are required" nonEmptyMatchers -> Ok (List.map Utils.Filter.toApiMatcher nonEmptyMatchers) fromSilence : GettableSilence -> FirstDayOfWeek -> SilenceForm fromSilence { id, createdBy, comment, startsAt, endsAt } firstDayOfWeek = let startsPosix = Utils.Date.timeFromString (DateTime.toString startsAt) |> Result.toMaybe endsPosix = Utils.Date.timeFromString (DateTime.toString endsAt) |> Result.toMaybe in { id = Just id , createdBy = initialField createdBy , comment = initialField comment , startsAt = initialField (timeToString startsAt) , endsAt = initialField (timeToString endsAt) , duration = initialField (durationFormat (timeDifference startsAt endsAt) |> Maybe.withDefault "") , dateTimePicker = initFromStartAndEndTime startsPosix endsPosix firstDayOfWeek , viewDateTimePicker = False } validateForm : SilenceForm -> SilenceForm validateForm { id, createdBy, comment, startsAt, endsAt, duration, dateTimePicker } = { id = id , createdBy = validate stringNotEmpty createdBy , comment = validate stringNotEmpty comment , startsAt = validate timeFromString startsAt , endsAt = validate (parseEndsAt startsAt.value) endsAt , duration = validate parseDuration duration , dateTimePicker = dateTimePicker , viewDateTimePicker = False } validateMatchers : FilterBar.Model -> ValidationState validateMatchers filter = case validMatchers filter of Err error -> Utils.FormValidation.Invalid error Ok _ -> Utils.FormValidation.Valid parseEndsAt : String -> String -> Result String Posix parseEndsAt startsAt endsAt = case ( timeFromString startsAt, timeFromString endsAt ) of ( Ok starts, Ok ends ) -> if Time.posixToMillis starts > Time.posixToMillis ends then Err "Can't be in the past" else Ok ends ( _, endsResult ) -> endsResult empty : FirstDayOfWeek -> SilenceForm empty firstDayOfWeek = { id = Nothing , createdBy = initialField "" , comment = initialField "" , startsAt = initialField "" , endsAt = initialField "" , duration = initialField "" , dateTimePicker = initDateTimePicker firstDayOfWeek , viewDateTimePicker = False } defaultDuration : Float defaultDuration = -- 2 hours 2 * 60 * 60 * 1000 fromMatchersAndCommentAndTime : String -> String -> Posix -> FirstDayOfWeek -> SilenceForm fromMatchersAndCommentAndTime defaultCreator comment now firstDayOfWeek = { id = Nothing , startsAt = initialField (timeToString now) , endsAt = initialField (timeToString (addDuration defaultDuration now)) , duration = initialField (durationFormat defaultDuration |> Maybe.withDefault "") , createdBy = initialField defaultCreator , comment = initialField comment , dateTimePicker = initFromStartAndEndTime (Just now) (Just (addDuration defaultDuration now)) firstDayOfWeek , viewDateTimePicker = False } fromDateTimePicker : SilenceForm -> DateTimePicker -> SilenceForm fromDateTimePicker { id, createdBy, comment, startsAt, endsAt, duration } newPicker = { id = id , createdBy = createdBy , comment = comment , startsAt = startsAt , endsAt = endsAt , duration = duration , dateTimePicker = newPicker , viewDateTimePicker = True } prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceForm/Updates.elm000066400000000000000000000255211476331240200264410ustar00rootroot00000000000000port module Views.SilenceForm.Updates exposing (update) import Alerts.Api import Browser.Navigation as Navigation import Silences.Api import Task import Time import Types exposing (Msg(..)) import Utils.Date exposing (timeFromString) import Utils.DateTimePicker.Types exposing (initFromStartAndEndTime) import Utils.DateTimePicker.Updates as DateTimePickerUpdates import Utils.Filter exposing (silencePreviewFilter) import Utils.FormValidation exposing (initialField, stringNotEmpty, updateValue, validate) import Utils.Types exposing (ApiData(..)) import Views.FilterBar.Types as FilterBar import Views.FilterBar.Updates as FilterBar import Views.SilenceForm.Types exposing ( Model , SilenceForm , SilenceFormFieldMsg(..) , SilenceFormMsg(..) , fromDateTimePicker , fromMatchersAndCommentAndTime , fromSilence , parseEndsAt , toSilence , validateForm , validateMatchers ) updateForm : SilenceFormFieldMsg -> SilenceForm -> SilenceForm updateForm msg form = case msg of UpdateStartsAt time -> let startsAt = Utils.Date.timeFromString time endsAt = Utils.Date.timeFromString form.endsAt.value durationValue = case Result.map2 Utils.Date.timeDifference startsAt endsAt of Ok duration -> case Utils.Date.durationFormat duration of Just value -> value Nothing -> form.duration.value Err _ -> form.duration.value in { form | startsAt = updateValue time form.startsAt , duration = updateValue durationValue form.duration } UpdateEndsAt time -> let endsAt = Utils.Date.timeFromString time startsAt = Utils.Date.timeFromString form.startsAt.value durationValue = case Result.map2 Utils.Date.timeDifference startsAt endsAt of Ok duration -> case Utils.Date.durationFormat duration of Just value -> value Nothing -> form.duration.value Err _ -> form.duration.value in { form | endsAt = updateValue time form.endsAt , duration = updateValue durationValue form.duration } UpdateDuration time -> let duration = Utils.Date.parseDuration time startsAt = Utils.Date.timeFromString form.startsAt.value endsAtValue = case Result.map2 Utils.Date.addDuration duration startsAt of Ok endsAt -> Utils.Date.timeToString endsAt Err _ -> form.endsAt.value in { form | endsAt = updateValue endsAtValue form.endsAt , duration = updateValue time form.duration } ValidateTime -> { form | startsAt = validate Utils.Date.timeFromString form.startsAt , endsAt = validate (parseEndsAt form.startsAt.value) form.endsAt , duration = validate Utils.Date.parseDuration form.duration } UpdateCreatedBy createdBy -> { form | createdBy = updateValue createdBy form.createdBy } ValidateCreatedBy -> { form | createdBy = validate stringNotEmpty form.createdBy } UpdateComment comment -> { form | comment = updateValue comment form.comment } ValidateComment -> { form | comment = validate stringNotEmpty form.comment } UpdateTimesFromPicker -> let ( startsAt, endsAt, duration ) = case ( form.dateTimePicker.startTime, form.dateTimePicker.endTime ) of ( Just start, Just end ) -> ( validate timeFromString (initialField (Utils.Date.timeToString start)) , validate (parseEndsAt (Utils.Date.timeToString start)) (initialField (Utils.Date.timeToString end)) , initialField (Utils.Date.durationFormat (Utils.Date.timeDifference start end) |> Maybe.withDefault "") |> validate Utils.Date.parseDuration ) _ -> ( form.startsAt, form.endsAt, form.duration ) in { form | startsAt = startsAt , endsAt = endsAt , duration = duration , viewDateTimePicker = False } OpenDateTimePicker -> let startsAtTime = case timeFromString form.startsAt.value of Ok time -> Just time _ -> form.dateTimePicker.startTime endsAtTime = timeFromString form.endsAt.value |> Result.toMaybe in { form | viewDateTimePicker = True , dateTimePicker = initFromStartAndEndTime startsAtTime endsAtTime form.dateTimePicker.firstDayOfWeek } CloseDateTimePicker -> { form | viewDateTimePicker = False } update : SilenceFormMsg -> Model -> String -> String -> ( Model, Cmd Msg ) update msg model basePath apiUrl = case msg of CreateSilence -> case toSilence model.filterBar model.form of Just silence -> ( { model | silenceId = Loading } , Cmd.batch [ Silences.Api.create apiUrl silence |> Cmd.map (SilenceCreate >> MsgForSilenceForm) , persistDefaultCreator silence.createdBy , Task.succeed silence.createdBy |> Task.perform SetDefaultCreator ] ) Nothing -> ( { model | silenceId = Failure "Could not submit the form, Silence is not yet valid." , form = validateForm model.form , filterBarValid = validateMatchers model.filterBar } , Cmd.none ) SilenceCreate silenceId -> let cmd = case silenceId of Success id -> Navigation.pushUrl model.key (basePath ++ "#/silences/" ++ id) _ -> Cmd.none in ( { model | silenceId = silenceId }, cmd ) NewSilenceFromMatchersAndComment defaultCreator params -> ( model, Task.perform (NewSilenceFromMatchersAndCommentAndTime defaultCreator params.matchers params.comment >> MsgForSilenceForm) Time.now ) NewSilenceFromMatchersAndCommentAndTime defaultCreator matchers comment time -> ( { form = fromMatchersAndCommentAndTime defaultCreator comment time model.firstDayOfWeek , alerts = Initial , activeAlertId = Nothing , silenceId = Initial , filterBar = FilterBar.initFilterBar matchers , filterBarValid = Utils.FormValidation.Initial , key = model.key , firstDayOfWeek = model.firstDayOfWeek } , Cmd.none ) FetchSilence silenceId -> ( model, Silences.Api.getSilence apiUrl silenceId (SilenceFetch >> MsgForSilenceForm) ) SilenceFetch (Success silence) -> ( { form = fromSilence silence model.firstDayOfWeek , filterBar = FilterBar.initFilterBar (List.map Utils.Filter.fromApiMatcher silence.matchers) , filterBarValid = Utils.FormValidation.Initial , silenceId = model.silenceId , alerts = Initial , activeAlertId = Nothing , key = model.key , firstDayOfWeek = model.firstDayOfWeek } , Task.perform identity (Task.succeed (MsgForSilenceForm PreviewSilence)) ) SilenceFetch _ -> ( model, Cmd.none ) PreviewSilence -> case toSilence model.filterBar model.form of Just silence -> ( { model | alerts = Loading } , Alerts.Api.fetchAlerts apiUrl (silencePreviewFilter silence.matchers) |> Cmd.map (AlertGroupsPreview >> MsgForSilenceForm) ) Nothing -> ( { model | alerts = Failure "Can not display affected Alerts, Silence is not yet valid." , form = validateForm model.form , filterBarValid = validateMatchers model.filterBar } , Cmd.none ) AlertGroupsPreview alerts -> ( { model | alerts = alerts } , Cmd.none ) SetActiveAlert maybeAlertId -> ( { model | activeAlertId = maybeAlertId } , Cmd.none ) UpdateField fieldMsg -> ( { model | form = updateForm fieldMsg model.form , alerts = Initial , silenceId = Initial } , Cmd.none ) UpdateDateTimePicker subMsg -> let newPicker = DateTimePickerUpdates.update subMsg model.form.dateTimePicker in ( { model | form = fromDateTimePicker model.form newPicker } , Cmd.none ) MsgForFilterBar subMsg -> let ( newFilterBar, _, subCmd ) = FilterBar.update subMsg model.filterBar in ( { model | filterBar = newFilterBar, filterBarValid = Utils.FormValidation.Initial } , Cmd.map (MsgForFilterBar >> MsgForSilenceForm) subCmd ) UpdateFirstDayOfWeek firstDayOfWeek -> ( { model | firstDayOfWeek = firstDayOfWeek } , Cmd.none ) port persistDefaultCreator : String -> Cmd msg prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceForm/Views.elm000066400000000000000000000163221476331240200261300ustar00rootroot00000000000000module Views.SilenceForm.Views exposing (view) import Data.GettableAlert exposing (GettableAlert) import Html exposing (Html, button, div, h1, i, input, label, strong, text) import Html.Attributes exposing (class, style) import Html.Events exposing (onClick) import Utils.DateTimePicker.Views exposing (viewDateTimePicker) import Utils.Filter exposing (SilenceFormGetParams) import Utils.FormValidation exposing (ValidatedField, ValidationState(..)) import Utils.Types exposing (ApiData) import Utils.Views exposing (loading, validatedField, validatedTextareaField) import Views.FilterBar.Types as FilterBar import Views.FilterBar.Views as FilterBar import Views.Shared.SilencePreview import Views.SilenceForm.Types exposing (Model, SilenceForm, SilenceFormFieldMsg(..), SilenceFormMsg(..)) view : Maybe String -> SilenceFormGetParams -> String -> Model -> Html SilenceFormMsg view maybeId silenceFormGetParams defaultCreator { form, filterBar, filterBarValid, silenceId, alerts, activeAlertId } = let ( title, resetClick ) = case maybeId of Just silenceId_ -> ( "Edit Silence", FetchSilence silenceId_ ) Nothing -> ( "New Silence", NewSilenceFromMatchersAndComment defaultCreator silenceFormGetParams ) in div [] [ h1 [] [ text title ] , timeInput form.startsAt form.endsAt form.duration , matchersInput filterBarValid filterBar , validatedField input "Creator" inputSectionPadding (UpdateCreatedBy >> UpdateField) (ValidateCreatedBy |> UpdateField) form.createdBy , validatedTextareaField "Comment" inputSectionPadding (UpdateComment >> UpdateField) (ValidateComment |> UpdateField) form.comment , div [ class inputSectionPadding ] [ informationBlock activeAlertId silenceId alerts , silenceActionButtons maybeId resetClick ] , dateTimePickerDialog form ] dateTimePickerDialog : SilenceForm -> Html SilenceFormMsg dateTimePickerDialog form = if form.viewDateTimePicker then div [] [ div [ class "modal fade show", style "display" "block" ] [ div [ class "modal-dialog modal-dialog-centered" ] [ div [ class "modal-content" ] [ div [ class "modal-header" ] [ button [ class "close ml-auto" , onClick (CloseDateTimePicker |> UpdateField) ] [ text "x" ] ] , div [ class "modal-body" ] [ viewDateTimePicker form.dateTimePicker |> Html.map UpdateDateTimePicker ] , div [ class "modal-footer" ] [ button [ class "ml-2 btn btn-outline-success mr-auto" , onClick (CloseDateTimePicker |> UpdateField) ] [ text "Cancel" ] , button [ class "ml-2 btn btn-primary" , onClick (UpdateTimesFromPicker |> UpdateField) ] [ text "Set Date/Time" ] ] ] ] ] , div [ class "modal-backdrop fade show" ] [] ] else div [ style "clip" "rect(0,0,0,0)", style "position" "fixed" ] [ div [ class "modal fade" ] [] , div [ class "modal-backdrop fade" ] [] ] inputSectionPadding : String inputSectionPadding = "mt-5" timeInput : ValidatedField -> ValidatedField -> ValidatedField -> Html SilenceFormMsg timeInput startsAt endsAt duration = div [ class <| "row " ++ inputSectionPadding ] [ validatedField input "Start" "col-lg-4 col-6" (UpdateStartsAt >> UpdateField) (ValidateTime |> UpdateField) startsAt , validatedField input "Duration" "col-lg-3 col-6" (UpdateDuration >> UpdateField) (ValidateTime |> UpdateField) duration , validatedField input "End" "col-lg-4 col-6" (UpdateEndsAt >> UpdateField) (ValidateTime |> UpdateField) endsAt , div [ class "form-group col-lg-1 col-6" ] [ label [] [ text "\u{00A0}" ] , button [ class "form-control btn btn-outline-primary cursor-pointer" , onClick (OpenDateTimePicker |> UpdateField) ] [ i [ class "fa fa-calendar" ] [] ] ] ] matchersInput : Utils.FormValidation.ValidationState -> FilterBar.Model -> Html SilenceFormMsg matchersInput filterBarValid filterBar = let errorClass = case filterBarValid of Invalid _ -> " has-danger" _ -> "" in div [ class (inputSectionPadding ++ errorClass) ] [ label [ Html.Attributes.for "filter-bar-matcher" ] [ strong [] [ text "Matchers " ] , text "Alerts affected by this silence" ] , FilterBar.view { showSilenceButton = False } filterBar |> Html.map MsgForFilterBar , case filterBarValid of Invalid error -> div [ class "form-control-feedback" ] [ text error ] _ -> text "" ] informationBlock : Maybe String -> ApiData String -> ApiData (List GettableAlert) -> Html SilenceFormMsg informationBlock activeAlertId silence alerts = case silence of Utils.Types.Success _ -> text "" Utils.Types.Initial -> Views.Shared.SilencePreview.view activeAlertId alerts |> Html.map SetActiveAlert Utils.Types.Failure error -> Utils.Views.error error Utils.Types.Loading -> loading silenceActionButtons : Maybe String -> SilenceFormMsg -> Html SilenceFormMsg silenceActionButtons maybeId resetClick = div [ class ("mb-4 " ++ inputSectionPadding) ] [ previewSilenceBtn , createSilenceBtn maybeId , button [ class "ml-2 btn btn-danger", onClick resetClick ] [ text "Reset" ] ] createSilenceBtn : Maybe String -> Html SilenceFormMsg createSilenceBtn maybeId = let btnTxt = case maybeId of Just _ -> "Update" Nothing -> "Create" in button [ class "ml-2 btn btn-primary" , onClick CreateSilence ] [ text btnTxt ] previewSilenceBtn : Html SilenceFormMsg previewSilenceBtn = button [ class "btn btn-outline-success" , onClick PreviewSilence ] [ text "Preview Alerts" ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceList/000077500000000000000000000000001476331240200243405ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceList/Parsing.elm000066400000000000000000000006271476331240200264470ustar00rootroot00000000000000module Views.SilenceList.Parsing exposing (silenceListParser) import Url.Parser exposing ((), Parser, map, s) import Url.Parser.Query as Query import Utils.Filter exposing (Filter) silenceListParser : Parser (Filter -> a) a silenceListParser = map (\t -> Filter t Nothing False Nothing Nothing Nothing Nothing Nothing ) (s "silences" Query.string "filter") prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceList/SilenceView.elm000066400000000000000000000115071476331240200272600ustar00rootroot00000000000000module Views.SilenceList.SilenceView exposing (editButton, view) import Data.GettableSilence exposing (GettableSilence) import Data.Matcher exposing (Matcher) import Data.SilenceStatus exposing (State(..)) import Html exposing (Html, a, button, div, li, span, text) import Html.Attributes exposing (class, href, style) import Html.Events exposing (onClick) import Time exposing (Posix) import Types exposing (Msg(..)) import Utils.Date import Utils.Filter import Utils.List import Utils.Views import Views.FilterBar.Types as FilterBarTypes import Views.Shared.Dialog as Dialog import Views.SilenceForm.Parsing exposing (newSilenceFromMatchersAndComment) import Views.SilenceList.Types exposing (SilenceListMsg(..)) view : Bool -> GettableSilence -> Html Msg view showConfirmationDialog silence = li [ -- speedup rendering in Chrome, because list-group-item className -- creates a new layer in the rendering engine style "position" "static" , class "align-items-start list-group-item border-0 p-0 mb-4" ] [ div [ class "w-100 mb-2 d-flex align-items-start" ] [ case silence.status.state of Active -> dateView "Ends" silence.endsAt Pending -> dateView "Starts" silence.startsAt Expired -> dateView "Expired" silence.endsAt , detailsButton silence.id , editButton silence , deleteButton silence ] , div [ class "" ] (List.map matcherButton silence.matchers) , Dialog.view (if showConfirmationDialog then Just (confirmSilenceDeleteView silence False) else Nothing ) ] confirmSilenceDeleteView : GettableSilence -> Bool -> Dialog.Config Msg confirmSilenceDeleteView silence refresh = { onClose = MsgForSilenceList Views.SilenceList.Types.FetchSilences , title = "Expire Silence" , body = text "Are you sure you want to expire this silence?" , footer = button [ class "btn btn-primary" , onClick (MsgForSilenceList (Views.SilenceList.Types.DestroySilence silence refresh)) ] [ text "Confirm" ] } dateView : String -> Posix -> Html Msg dateView string time = span [ class "text-muted align-self-center mr-2" ] [ text (string ++ " " ++ Utils.Date.dateTimeFormat time) ] matcherButton : Matcher -> Html Msg matcherButton matcher = let isEqual = case matcher.isEqual of Nothing -> True Just value -> value op = if not matcher.isRegex && isEqual then Utils.Filter.Eq else if not matcher.isRegex && not isEqual then Utils.Filter.NotEq else if matcher.isRegex && isEqual then Utils.Filter.RegexMatch else Utils.Filter.NotRegexMatch msg = FilterBarTypes.AddFilterMatcher False { key = matcher.name , op = op , value = matcher.value } |> MsgForFilterBar |> MsgForSilenceList in Utils.Views.labelButton (Just msg) (Utils.List.mstring matcher) editButton : GettableSilence -> Html Msg editButton silence = let editUrl = String.join "/" [ "#/silences", silence.id, "edit" ] default = a [ class "btn btn-outline-info border-0", href editUrl ] [ text "Edit" ] in case silence.status.state of -- If the silence is expired, do not edit it, but instead create a new -- one with the old matchers Expired -> a [ class "btn btn-outline-info border-0" , href (newSilenceFromMatchersAndComment silence.matchers silence.comment) ] [ text "Recreate" ] _ -> default deleteButton : GettableSilence -> Html Msg deleteButton silence = case silence.status.state of Expired -> text "" Active -> button [ class "btn btn-outline-danger border-0" , onClick (MsgForSilenceList (ConfirmDestroySilence silence)) ] [ text "Expire" ] Pending -> button [ class "btn btn-outline-danger border-0" , onClick (MsgForSilenceList (ConfirmDestroySilence silence)) ] [ text "Delete" ] detailsButton : String -> Html Msg detailsButton id = a [ class "btn btn-outline-info border-0", href ("#/silences/" ++ id) ] [ text "View" ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceList/Types.elm000066400000000000000000000020361476331240200261440ustar00rootroot00000000000000module Views.SilenceList.Types exposing (Model, SilenceListMsg(..), SilenceTab, initSilenceList) import Browser.Navigation exposing (Key) import Data.GettableSilence exposing (GettableSilence) import Data.SilenceStatus exposing (State(..)) import Utils.Types exposing (ApiData(..)) import Views.FilterBar.Types as FilterBar type SilenceListMsg = ConfirmDestroySilence GettableSilence | DestroySilence GettableSilence Bool | SilencesFetch (ApiData (List GettableSilence)) | FetchSilences | MsgForFilterBar FilterBar.Msg | SetTab State type alias SilenceTab = { silences : List GettableSilence , tab : State , count : Int } type alias Model = { silences : ApiData (List SilenceTab) , filterBar : FilterBar.Model , tab : State , showConfirmationDialog : Maybe String , key : Key } initSilenceList : Key -> Model initSilenceList key = { silences = Initial , filterBar = FilterBar.initFilterBar [] , tab = Active , showConfirmationDialog = Nothing , key = key } prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceList/Updates.elm000066400000000000000000000064771476331240200264620ustar00rootroot00000000000000module Views.SilenceList.Updates exposing (update) import Browser.Navigation as Navigation import Data.GettableSilence exposing (GettableSilence) import Data.SilenceStatus exposing (State(..)) import Silences.Api as Api import Utils.Api as ApiData import Utils.Filter exposing (Filter) import Utils.Types exposing (ApiData(..)) import Views.FilterBar.Updates as FilterBar import Views.SilenceList.Types exposing (Model, SilenceListMsg(..), SilenceTab) update : SilenceListMsg -> Model -> Filter -> String -> String -> ( Model, Cmd SilenceListMsg ) update msg model filter basePath apiUrl = case msg of SilencesFetch fetchedSilences -> ( { model | silences = ApiData.map (\silences -> List.map (groupSilencesByState silences) states) fetchedSilences } , Cmd.none ) FetchSilences -> ( { model | filterBar = FilterBar.setMatchers filter model.filterBar , silences = Loading , showConfirmationDialog = Nothing } , Api.getSilences apiUrl filter SilencesFetch ) ConfirmDestroySilence silence -> ( { model | showConfirmationDialog = Just silence.id } , Cmd.none ) DestroySilence silence refresh -> -- TODO: "Deleted id: ID" growl -- TODO: Check why POST isn't there but is accepted ( { model | silences = Loading, showConfirmationDialog = Nothing } , Cmd.batch [ Api.destroy apiUrl silence (always FetchSilences) , if refresh then Navigation.pushUrl model.key (basePath ++ "#/silences") else Cmd.none ] ) MsgForFilterBar subMsg -> let ( newFilterBar, shouldFilter, cmd ) = FilterBar.update subMsg model.filterBar filterBarCmd = Cmd.map MsgForFilterBar cmd newUrl = Utils.Filter.toUrl (basePath ++ "#/silences") (Utils.Filter.withMatchers newFilterBar.matchers filter) silencesCmd = if shouldFilter then Cmd.batch [ Navigation.pushUrl model.key newUrl , filterBarCmd ] else filterBarCmd in ( { model | filterBar = newFilterBar }, silencesCmd ) SetTab tab -> ( { model | tab = tab }, Cmd.none ) groupSilencesByState : List GettableSilence -> State -> SilenceTab groupSilencesByState silences state = let silencesInTab = filterSilencesByState state silences in { tab = state , silences = silencesInTab , count = List.length silencesInTab } states : List State states = [ Active, Pending, Expired ] filterSilencesByState : State -> List GettableSilence -> List GettableSilence filterSilencesByState state = List.filter (filterSilenceByState state) filterSilenceByState : State -> GettableSilence -> Bool filterSilenceByState state silence = silence.status.state == state prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceList/Views.elm000066400000000000000000000062441476331240200261420ustar00rootroot00000000000000module Views.SilenceList.Views exposing (view) import Data.SilenceStatus exposing (State(..)) import Html exposing (..) import Html.Attributes exposing (..) import Html.Keyed import Html.Lazy exposing (lazy2, lazy3) import Silences.Types exposing (stateToString) import Types exposing (Msg(..)) import Utils.String as StringUtils import Utils.Types exposing (ApiData(..)) import Utils.Views exposing (error, loading) import Views.FilterBar.Views as FilterBar import Views.SilenceList.SilenceView import Views.SilenceList.Types exposing (Model, SilenceListMsg(..), SilenceTab) view : Model -> Html Msg view { filterBar, tab, silences, showConfirmationDialog } = div [] [ div [ class "mb-4" ] [ label [ class "mb-2", for "filter-bar-matcher" ] [ text "Filter" ] , Html.map (MsgForFilterBar >> MsgForSilenceList) (FilterBar.view { showSilenceButton = False } filterBar) ] , lazy2 tabsView tab silences , lazy3 silencesView showConfirmationDialog tab silences ] tabsView : State -> ApiData (List SilenceTab) -> Html Msg tabsView currentTab tabs = case tabs of Success silencesTabs -> List.map (\{ tab, count } -> tabView currentTab count tab) silencesTabs |> ul [ class "nav nav-tabs mb-4" ] _ -> List.map (tabView currentTab 0) states |> ul [ class "nav nav-tabs mb-4" ] tabView : State -> Int -> State -> Html Msg tabView currentTab count tab = Utils.Views.tab tab currentTab (SetTab >> MsgForSilenceList) <| case count of 0 -> [ text (StringUtils.capitalizeFirst (stateToString tab)) ] n -> [ text (StringUtils.capitalizeFirst (stateToString tab)) , span [ class "badge badge-pillow badge-default align-text-top ml-2" ] [ text (String.fromInt n) ] ] silencesView : Maybe String -> State -> ApiData (List SilenceTab) -> Html Msg silencesView showConfirmationDialog tab silencesTab = case silencesTab of Success tabs -> tabs |> List.filter (.tab >> (==) tab) |> List.head |> Maybe.map .silences |> Maybe.withDefault [] |> (\silences -> if List.isEmpty silences then Utils.Views.error "No silences found" else Html.Keyed.ul [ class "list-group" ] (List.map (\silence -> ( silence.id , Views.SilenceList.SilenceView.view (showConfirmationDialog == Just silence.id) silence ) ) silences ) ) Failure msg -> error msg _ -> loading states : List State states = [ Active, Pending, Expired ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceView/000077500000000000000000000000001476331240200243375ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceView/Parsing.elm000066400000000000000000000003221476331240200264360ustar00rootroot00000000000000module Views.SilenceView.Parsing exposing (silenceViewParser) import Url.Parser exposing ((), Parser, s, string) silenceViewParser : Parser (String -> a) a silenceViewParser = s "silences" string prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceView/Types.elm000066400000000000000000000016061476331240200261450ustar00rootroot00000000000000module Views.SilenceView.Types exposing (Model, SilenceViewMsg(..), initSilenceView) import Browser.Navigation exposing (Key) import Data.GettableAlert exposing (GettableAlert) import Data.GettableSilence exposing (GettableSilence) import Utils.Types exposing (ApiData(..)) type SilenceViewMsg = SilenceFetched (ApiData GettableSilence) | SetActiveAlert (Maybe String) | AlertGroupsPreview (ApiData (List GettableAlert)) | InitSilenceView String | ConfirmDestroySilence | Reload String type alias Model = { silence : ApiData GettableSilence , alerts : ApiData (List GettableAlert) , activeAlertId : Maybe String , showConfirmationDialog : Bool , key : Key } initSilenceView : Key -> Model initSilenceView key = { silence = Initial , alerts = Initial , activeAlertId = Nothing , showConfirmationDialog = False , key = key } prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceView/Updates.elm000066400000000000000000000030121476331240200264370ustar00rootroot00000000000000module Views.SilenceView.Updates exposing (update) import Alerts.Api import Browser.Navigation as Navigation import Silences.Api exposing (getSilence) import Utils.Filter exposing (silencePreviewFilter) import Utils.Types exposing (ApiData(..)) import Views.SilenceView.Types exposing (Model, SilenceViewMsg(..)) update : SilenceViewMsg -> Model -> String -> ( Model, Cmd SilenceViewMsg ) update msg model apiUrl = case msg of AlertGroupsPreview alerts -> ( { model | alerts = alerts } , Cmd.none ) SetActiveAlert activeAlertId -> ( { model | activeAlertId = activeAlertId } , Cmd.none ) SilenceFetched (Success silence) -> ( { model | silence = Success silence , alerts = Loading } , Alerts.Api.fetchAlerts apiUrl (silencePreviewFilter silence.matchers) |> Cmd.map AlertGroupsPreview ) ConfirmDestroySilence -> ( { model | showConfirmationDialog = True } , Cmd.none ) SilenceFetched silence -> ( { model | silence = silence, alerts = Initial }, Cmd.none ) InitSilenceView silenceId -> ( { model | showConfirmationDialog = False }, getSilence apiUrl silenceId SilenceFetched ) Reload silenceId -> ( { model | showConfirmationDialog = False }, Navigation.pushUrl model.key ("#/silences/" ++ silenceId) ) prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/SilenceView/Views.elm000066400000000000000000000100171476331240200261320ustar00rootroot00000000000000module Views.SilenceView.Views exposing (view) import Data.GettableAlert exposing (GettableAlert) import Data.GettableSilence exposing (GettableSilence) import Data.SilenceStatus import Html exposing (Html, b, button, div, h1, label, span, text) import Html.Attributes exposing (class) import Html.Events exposing (onClick) import Silences.Types exposing (stateToString) import Types exposing (Msg(..)) import Utils.Date exposing (dateTimeFormat) import Utils.List import Utils.Types exposing (ApiData(..)) import Utils.Views exposing (error, loading) import Views.Shared.Dialog as Dialog import Views.Shared.SilencePreview import Views.SilenceList.SilenceView exposing (editButton) import Views.SilenceList.Types exposing (SilenceListMsg(..)) import Views.SilenceView.Types as SilenceViewTypes exposing (Model) view : Model -> Html Msg view { silence, alerts, activeAlertId, showConfirmationDialog } = case silence of Success sil -> if showConfirmationDialog then viewSilence activeAlertId alerts sil True else viewSilence activeAlertId alerts sil False Initial -> loading Loading -> loading Failure msg -> error msg viewSilence : Maybe String -> ApiData (List GettableAlert) -> GettableSilence -> Bool -> Html Msg viewSilence activeAlertId alerts silence showPromptDialog = let affectedAlerts = Views.Shared.SilencePreview.view activeAlertId alerts |> Html.map (\msg -> MsgForSilenceView (SilenceViewTypes.SetActiveAlert msg)) in div [] [ h1 [] [ text "Silence" , span [ class "ml-3" ] [ editButton silence , expireButton silence ] ] , formGroup "ID" <| text silence.id , formGroup "Starts at" <| text <| dateTimeFormat silence.startsAt , formGroup "Ends at" <| text <| dateTimeFormat silence.endsAt , formGroup "Updated at" <| text <| dateTimeFormat silence.updatedAt , formGroup "Created by" <| text <| silence.createdBy , formGroup "Comment" <| text silence.comment , formGroup "State" <| text <| stateToString silence.status.state , formGroup "Matchers" <| div [] <| List.map (Utils.List.mstring >> Utils.Views.labelButton Nothing) silence.matchers , affectedAlerts , Dialog.view (if showPromptDialog then Just (confirmSilenceDeleteView silence True) else Nothing ) ] confirmSilenceDeleteView : GettableSilence -> Bool -> Dialog.Config Msg confirmSilenceDeleteView silence refresh = { onClose = MsgForSilenceView (SilenceViewTypes.Reload <| silence.id) , title = "Expire Silence" , body = text "Are you sure you want to expire this silence?" , footer = button [ class "btn btn-primary" , onClick (MsgForSilenceList (DestroySilence silence refresh)) ] [ text "Confirm" ] } formGroup : String -> Html Msg -> Html Msg formGroup key content = div [ class "form-group row" ] [ label [ class "col-2 col-form-label" ] [ b [] [ text key ] ] , div [ class "col-10 d-flex align-items-center" ] [ content ] ] expireButton : GettableSilence -> Html Msg expireButton silence = case silence.status.state of Data.SilenceStatus.Expired -> text "" Data.SilenceStatus.Active -> button [ class "btn btn-outline-danger border-0" , onClick (MsgForSilenceView SilenceViewTypes.ConfirmDestroySilence) ] [ text "Expire" ] Data.SilenceStatus.Pending -> button [ class "btn btn-outline-danger border-0" , onClick (MsgForSilenceView SilenceViewTypes.ConfirmDestroySilence) ] [ text "Delete" ] prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Status/000077500000000000000000000000001476331240200234055ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Status/Parsing.elm000066400000000000000000000002261476331240200255070ustar00rootroot00000000000000module Views.Status.Parsing exposing (statusParser) import Url.Parser exposing (Parser, s) statusParser : Parser a a statusParser = s "status" prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Status/Types.elm000066400000000000000000000007261476331240200252150ustar00rootroot00000000000000module Views.Status.Types exposing (StatusModel, StatusMsg(..), initStatusModel) import Data.AlertmanagerStatus exposing (AlertmanagerStatus) import Utils.Types exposing (ApiData(..)) type StatusMsg = NewStatus (ApiData AlertmanagerStatus) -- String carries the api url. | InitStatusView String type alias StatusModel = { statusInfo : ApiData AlertmanagerStatus } initStatusModel : StatusModel initStatusModel = { statusInfo = Initial } prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Status/Updates.elm000066400000000000000000000007321476331240200255130ustar00rootroot00000000000000module Views.Status.Updates exposing (update) import Status.Api exposing (getStatus) import Types exposing (Model, Msg(..)) import Views.Status.Types exposing (StatusMsg(..)) update : StatusMsg -> Model -> ( Model, Cmd Msg ) update msg model = case msg of NewStatus apiResponse -> ( { model | status = { statusInfo = apiResponse } }, Cmd.none ) InitStatusView apiUrl -> ( model, getStatus apiUrl (NewStatus >> MsgForStatus) ) prometheus-alertmanager-0.28.1+ds/ui/app/src/Views/Status/Views.elm000066400000000000000000000104521476331240200252030ustar00rootroot00000000000000module Views.Status.Views exposing (view) import Data.AlertmanagerStatus exposing (AlertmanagerStatus) import Data.ClusterStatus exposing (ClusterStatus, Status(..)) import Data.PeerStatus exposing (PeerStatus) import Data.VersionInfo exposing (VersionInfo) import Html exposing (..) import Html.Attributes exposing (class, classList, style) import Status.Api exposing (clusterStatusToString) import Status.Types exposing (VersionInfo) import Types import Utils.Date exposing (timeToString) import Utils.Types exposing (ApiData(..)) import Utils.Views import Views.Status.Types exposing (StatusModel) view : StatusModel -> Html Types.Msg view { statusInfo } = Utils.Views.apiData viewStatusInfo statusInfo viewStatusInfo : AlertmanagerStatus -> Html Types.Msg viewStatusInfo status = div [] [ h1 [] [ text "Status" ] , div [ class "form-group row" ] [ b [ class "col-sm-2" ] [ text "Uptime:" ] , div [ class "col-sm-10" ] [ text <| timeToString status.uptime ] ] , viewClusterStatus status.cluster , viewVersionInformation status.versionInfo , viewConfig status.config.original ] viewConfig : String -> Html Types.Msg viewConfig config = div [] [ h2 [] [ text "Config" ] , pre [ class "p-4", style "background" "#f7f7f9", style "font-family" "monospace" ] [ code [] [ text config ] ] ] viewClusterStatus : ClusterStatus -> Html Types.Msg viewClusterStatus { name, status, peers } = span [] [ h2 [] [ text "Cluster Status" ] , case name of Just n -> div [ class "form-group row" ] [ b [ class "col-sm-2" ] [ text "Name:" ] , div [ class "col-sm-10" ] [ text n ] ] Nothing -> text "" , div [ class "form-group row" ] [ b [ class "col-sm-2" ] [ text "Status:" ] , div [ class "col-sm-10" ] [ span [ classList [ ( "badge", True ) , case status of Ready -> ( "badge-success", True ) Settling -> ( "badge-warning", True ) Disabled -> ( "badge-danger", True ) ] ] [ text <| clusterStatusToString status ] ] ] , case peers of Just p -> div [ class "form-group row" ] [ b [ class "col-sm-2" ] [ text "Peers:" ] , ul [ class "col-sm-10" ] <| List.map viewClusterPeer p ] Nothing -> text "" ] viewClusterPeer : PeerStatus -> Html Types.Msg viewClusterPeer peer = li [] [ div [ class "" ] [ b [ class "" ] [ text "Name: " ] , text peer.name ] , div [ class "" ] [ b [ class "" ] [ text "Address: " ] , text peer.address ] ] viewVersionInformation : VersionInfo -> Html Types.Msg viewVersionInformation versionInfo = span [] [ h2 [] [ text "Version Information" ] , div [ class "form-group row" ] [ b [ class "col-sm-2" ] [ text "Branch:" ], div [ class "col-sm-10" ] [ text versionInfo.branch ] ] , div [ class "form-group row" ] [ b [ class "col-sm-2" ] [ text "BuildDate:" ], div [ class "col-sm-10" ] [ text versionInfo.buildDate ] ] , div [ class "form-group row" ] [ b [ class "col-sm-2" ] [ text "BuildUser:" ], div [ class "col-sm-10" ] [ text versionInfo.buildUser ] ] , div [ class "form-group row" ] [ b [ class "col-sm-2" ] [ text "GoVersion:" ], div [ class "col-sm-10" ] [ text versionInfo.goVersion ] ] , div [ class "form-group row" ] [ b [ class "col-sm-2" ] [ text "Revision:" ], div [ class "col-sm-10" ] [ text versionInfo.revision ] ] , div [ class "form-group row" ] [ b [ class "col-sm-2" ] [ text "Version:" ], div [ class "col-sm-10" ] [ text versionInfo.version ] ] ] prometheus-alertmanager-0.28.1+ds/ui/app/tests/000077500000000000000000000000001476331240200214005ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/app/tests/Filter.elm000066400000000000000000000121451476331240200233270ustar00rootroot00000000000000module Filter exposing (parseMatcher, stringifyFilter, toUrl) import Expect import Fuzz exposing (string, tuple) import Helpers exposing (isNotEmptyTrimmedAlphabetWord) import Test exposing (..) import Utils.Filter exposing (MatchOperator(..), Matcher) parseMatcher : Test parseMatcher = describe "parseMatcher" [ test "should parse empty matcher string" <| \() -> Expect.equal Nothing (Utils.Filter.parseMatcher "") , test "should parse empty matcher value" <| \() -> Expect.equal (Just (Matcher "alertname" Eq "")) (Utils.Filter.parseMatcher "alertname=\"\"") , fuzz (tuple ( string, string )) "should parse random matcher string" <| \( key, value ) -> if List.map isNotEmptyTrimmedAlphabetWord [ key, value ] /= [ True, True ] then Expect.equal Nothing (Utils.Filter.parseMatcher <| String.concat [ key, "=", value ]) else Expect.equal (Just (Matcher key Eq value)) (Utils.Filter.parseMatcher <| String.concat [ key, "=", "\"", value, "\"" ]) ] toUrl : Test toUrl = describe "toUrl" [ test "should not render keys with Nothing value except the silenced, inhibited, muted and active parameters, which default to false, false, false, true, respectively." <| \() -> Expect.equal "/alerts?silenced=false&inhibited=false&muted=false&active=true" (Utils.Filter.toUrl "/alerts" { receiver = Nothing, group = Nothing, customGrouping = False, text = Nothing, showSilenced = Nothing, showInhibited = Nothing, showMuted = Nothing, showActive = Nothing }) , test "should not render filter key with empty value" <| \() -> Expect.equal "/alerts?silenced=false&inhibited=false&muted=false&active=true" (Utils.Filter.toUrl "/alerts" { receiver = Nothing, group = Nothing, customGrouping = False, text = Just "", showSilenced = Nothing, showInhibited = Nothing, showMuted = Nothing, showActive = Nothing }) , test "should render filter key with values" <| \() -> Expect.equal "/alerts?silenced=false&inhibited=false&muted=false&active=true&filter=%7Bfoo%3D%22bar%22%2C%20baz%3D~%22quux.*%22%7D" (Utils.Filter.toUrl "/alerts" { receiver = Nothing, group = Nothing, customGrouping = False, text = Just "{foo=\"bar\", baz=~\"quux.*\"}", showSilenced = Nothing, showInhibited = Nothing, showMuted = Nothing, showActive = Nothing }) , test "should render silenced key with bool" <| \() -> Expect.equal "/alerts?silenced=true&inhibited=false&muted=false&active=true" (Utils.Filter.toUrl "/alerts" { receiver = Nothing, group = Nothing, customGrouping = False, text = Nothing, showSilenced = Just True, showInhibited = Nothing, showMuted = Nothing, showActive = Nothing }) , test "should render inhibited key with bool" <| \() -> Expect.equal "/alerts?silenced=false&inhibited=true&muted=false&active=true" (Utils.Filter.toUrl "/alerts" { receiver = Nothing, group = Nothing, customGrouping = False, text = Nothing, showSilenced = Nothing, showInhibited = Just True, showMuted = Nothing, showActive = Nothing }) , test "should render muted key with bool" <| \() -> Expect.equal "/alerts?silenced=false&inhibited=false&muted=true&active=true" (Utils.Filter.toUrl "/alerts" { receiver = Nothing, group = Nothing, customGrouping = False, text = Nothing, showSilenced = Nothing, showInhibited = Nothing, showMuted = Just True, showActive = Nothing }) , test "should render active key with bool" <| \() -> Expect.equal "/alerts?silenced=false&inhibited=false&muted=false&active=false" (Utils.Filter.toUrl "/alerts" { receiver = Nothing, group = Nothing, customGrouping = False, text = Nothing, showSilenced = Nothing, showInhibited = Nothing, showMuted = Nothing, showActive = Just False }) , test "should add customGrouping key" <| \() -> Expect.equal "/alerts?silenced=false&inhibited=false&muted=false&active=true&customGrouping=true" (Utils.Filter.toUrl "/alerts" { receiver = Nothing, group = Nothing, customGrouping = True, text = Nothing, showSilenced = Nothing, showInhibited = Nothing, showMuted = Nothing, showActive = Nothing }) ] stringifyFilter : Test stringifyFilter = describe "stringifyFilter" [ test "empty" <| \() -> Expect.equal "" (Utils.Filter.stringifyFilter []) , test "non-empty" <| \() -> Expect.equal "{foo=\"bar\", baz=~\"quux.*\"}" (Utils.Filter.stringifyFilter [ { key = "foo", op = Eq, value = "bar" } , { key = "baz", op = RegexMatch, value = "quux.*" } ] ) ] prometheus-alertmanager-0.28.1+ds/ui/app/tests/Helpers.elm000066400000000000000000000012441476331240200235020ustar00rootroot00000000000000module Helpers exposing (isNotEmptyTrimmedAlphabetWord) import String isNotEmptyTrimmedAlphabetWord : String -> Bool isNotEmptyTrimmedAlphabetWord string = let stringLength = String.length string in stringLength /= 0 && String.length (String.filter isLetter string) == stringLength isLetter : Char -> Bool isLetter char = String.contains (String.fromChar char) lowerCaseAlphabet || String.contains (String.fromChar char) upperCaseAlphabet lowerCaseAlphabet : String lowerCaseAlphabet = "abcdefghijklmnopqrstuvwxyz" upperCaseAlphabet : String upperCaseAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" prometheus-alertmanager-0.28.1+ds/ui/app/tests/Match.elm000066400000000000000000000034741476331240200231430ustar00rootroot00000000000000module Match exposing (testConsecutiveChars, testJaroWinkler) import Expect import Test exposing (..) import Utils.Match exposing (consecutiveChars, jaroWinkler) testJaroWinkler : Test testJaroWinkler = describe "jaroWinkler" [ test "should find the right values 1" <| \() -> Expect.greaterThan (jaroWinkler "zi" "zone") (jaroWinkler "zo" "zone") , test "should find the right values 2" <| \() -> Expect.greaterThan (jaroWinkler "hook" "alertname") (jaroWinkler "de" "dev") , test "should find the right values 3" <| \() -> Expect.equal 0.0 (jaroWinkler "l" "zone") , test "should find the right values 4" <| \() -> Expect.equal 1.0 (jaroWinkler "zone" "zone") , test "should find the right values 5" <| \() -> Expect.greaterThan 0.688 (jaroWinkler "atleio3tefdoisahdf" "attributefdoiashfoihfeowfh9w8f9afaw9fahw") ] testConsecutiveChars : Test testConsecutiveChars = describe "consecutiveChars" [ test "should find the consecutiveChars 1" <| \() -> Expect.equal "zo" (consecutiveChars "zo" "bozo") , test "should find the consecutiveChars 2" <| \() -> Expect.equal "zo" (consecutiveChars "zol" "zone") , test "should find the consecutiveChars 3" <| \() -> Expect.equal "oon" (consecutiveChars "oon" "baboone") , test "should find the consecutiveChars 4" <| \() -> Expect.equal "dom" (consecutiveChars "dom" "random") ] prometheus-alertmanager-0.28.1+ds/ui/app/tests/StringUtils.elm000066400000000000000000000014301476331240200243640ustar00rootroot00000000000000module StringUtils exposing (testLinkify) import Expect import Test exposing (..) import Utils.String exposing (linkify) testLinkify : Test testLinkify = describe "linkify" [ test "should linkify a url in the middle" <| \() -> Expect.equal (linkify "word1 http://url word2") [ Err "word1 ", Ok "http://url", Err " word2" ] , test "should linkify a url in the beginning" <| \() -> Expect.equal (linkify "http://url word1 word2") [ Ok "http://url", Err " word1 word2" ] , test "should linkify a url in the end" <| \() -> Expect.equal (linkify "word1 word2 http://url") [ Err "word1 word2 ", Ok "http://url" ] ] prometheus-alertmanager-0.28.1+ds/ui/react-app/000077500000000000000000000000001476331240200213325ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/react-app/.eslintrc.js000066400000000000000000000035001476331240200235670ustar00rootroot00000000000000module.exports = { extends: [ 'eslint:recommended', 'plugin:react/recommended', 'plugin:react-hooks/recommended', 'plugin:jsx-a11y/recommended', 'plugin:@typescript-eslint/recommended', 'plugin:prettier/recommended', ], plugins: ['import'], env: { commonjs: true, es6: true, jest: true, node: true, browser: true, }, parser: '@typescript-eslint/parser', parserOptions: { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { jsx: true, }, }, settings: { react: { version: 'detect', }, }, rules: { 'prettier/prettier': 'error', '@typescript-eslint/explicit-function-return-type': 'off', '@typescript-eslint/explicit-module-boundary-types': 'off', '@typescript-eslint/array-type': [ 'warn', { default: 'array-simple', }, ], 'import/order': 'warn', // you must disable the base rule as it can report incorrect errors 'no-unused-vars': 'off', '@typescript-eslint/no-unused-vars': ['error'], 'react/prop-types': 'off', 'react-hooks/exhaustive-deps': 'warn', // Not necessary in React 17 'react/react-in-jsx-scope': 'off', 'no-restricted-imports': [ 'error', { patterns: [ { /** * This library is gigantic and named imports end up slowing down builds/blowing out bundle sizes, * so this prevents that style of import. */ group: ['mdi-material-ui', '!mdi-material-ui/'], message: ` Please use the default import from the icon file directly rather than using a named import. Good: import IconName from 'mdi-material-ui/IconName'; Bad: import { IconName } from 'mdi-material-ui'; `, }, ], }, ], }, ignorePatterns: ['**/dist'], }; prometheus-alertmanager-0.28.1+ds/ui/react-app/.gitignore000066400000000000000000000000411476331240200233150ustar00rootroot00000000000000node_modules/ dist/* !dist/*.gz prometheus-alertmanager-0.28.1+ds/ui/react-app/.prettierignore000066400000000000000000000000251476331240200243720ustar00rootroot00000000000000# Build output dist/ prometheus-alertmanager-0.28.1+ds/ui/react-app/.prettierrc.json000066400000000000000000000001111476331240200244570ustar00rootroot00000000000000{ "printWidth": 120, "singleQuote": true, "trailingComma": "es5" } prometheus-alertmanager-0.28.1+ds/ui/react-app/dist/000077500000000000000000000000001476331240200222755ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/react-app/dist/959.js.gz000066400000000000000000000021471476331240200236040ustar00rootroot00000000000000V]o6}P, qlehE Cm ~<FCKSHʱҲMvKB_{x)R;*d@qJZx_YSϡvy/ ZN&i8b]NOoN_L_kYKㅥ׌{kd0uc[[6Ig#Ƌ:̈́US\WwYXlG'Z.ad!Y==1~`l|tYS2:5mvaaN.gjB BZYX)Gj^$E}D{\by+B=*ЬA"oS1@Mc57(ևZ\ @&(*-sQ܃\vrlzcXAp^ڵ5|U kHp//*x9SQMm&*ME1?G<*_:mddL5kي9O~$8;{SD my4;Pdl,]A?6 ylD6rfx-)o\;$F5߀e3fqn}k]2m[C'yoi; ScR][(rlGlG= v>BL\)bo@ZN/ySyUdYziiCO}HYQ;6R᝺e L'n ct3$ ȿ ω#10r .!/ qLw췺@!JYQ \-p |x.d?ZrB9Dy(Ieax"-+Gò[`,4CsJv?XbDo#tA}FJQo3). 〺}Go"1W(|6Tb(_7#8ym(8M›pKviT"L2} -XO B;xƛ>?EZ*1ESDIG&uǶsN -D9֦ݤr$YDnʇU\(;+ cNɒu9B Ǎeiְ}PRU=:e` &DPuwۊ>U9\(JGׇ~2)6Є'!o#=͗Jq4:#`;hetbqwЊ Tp NΉ|W4d4IQlm(O:Sg$}~"PK% _b]p nOD;G2D:usD:?x/t8OV!A 猊]&ut+U6ѡT RL*}lg- fa_ˆt'{S\~Dc96ݠ&<ዑ kZk,6{3Ȱ,2ҏkbV֕wQvc"p_8~ |/bf{z~g\Svʿ4cϧ]PL"Z\Rq(a~?f2+uJ B4Cup7C1b6FpF^EJ Z[2VVjoqJ{O l-ڳa&}!dyf>r,-28ʆfTghQ='WD qEL:al[[)UFUdUK*O]JL+jUHSÓg YV6S勑;9Tr#|NEv0_ޱԎAXq9Qs`7) / @L 98O,Qiǁ*;#]4j@O(w< ybK&A=\0(D{hGHsNm gB ߛ'h'&Tk*]%3ηd+sVf2~\d|qnn+؅HUNa^ `Hvْ =oc@~I{&1MWN{fH"!!#ծ\\k.p(>VfN%Zʭb0NQٮ)5cSX_OlxwM* ? &XB/"栣@sACyoWWUg2{hMcC tG/eAɤ'AJ sK'9TU>~ *!ݘ!ե)I-$mF^xU,A;h#9ݑɢ mPӈtť.6;MKftܩ tUo rhc9ѫ4b:6i[@>r CSbIn<g&fgy09~J2ЈA:+Cge2bi-# tj>*xnh^ :Lԅ2&aXqIs`D2E] -2dEiO [1ݫ*~wQ2dlD/^Z*6 2fOJ rA+$#fb,3Kj:&&cpܗqARHY (J?>(:pϸ]0XM`k%Ld>t5l ױ]//Y-+Vh Wv?ݺ,WXo}+P)y;x[^PenyIjևsTfй$^w%DOzR睰NB?=FC9  Ux1Tpi17; d15js (CrkhMfT2^mߛ9A@t LˁdU ,S9v;rzy0Pq< a`SnHv4 ~.wy2 ke &*Cp)lkAiM)b@ @D_,t"ʴ7  5C$)tjvo-$Q Yz&k5f"prometheus-alertmanager-0.28.1+ds/ui/react-app/dist/97.js.gz000066400000000000000000000311271476331240200235150ustar00rootroot00000000000000;ksȲ*_J:ƏGrHű 劅4°~{ {NeF~̴,j)N|kGzCO3΢$=<w/9#/drٻ7I^=Z[ K0y3hqbtGS'mO?lh@Z{@k0{hoh6a؏g}X$Β]oS%c7 /匡26|{O bo6:"pmT`i΍G)6Ybt&`㱟$Ћ3 4vbs#LM:4'l-ghۇCh8ꌝhiH Y7~JIˏx+󀼛:AiBN%K&Nzgַ{0FΐX}?`EĩOZO À-z0rGcl5'?!qt'f`0uM;b9 Xm1f4 @_߼&4~;H8tcP3ޔzA4elh?N;C)+.ѵ ks8~y$s.C-Xŝ} _eaK%3 4W^x=wRp}F%2iɛ]`S`w;ƿ /aQ[w7G`oT(RuVt v97j5`$L*0"N\Kq˶Ʊ.a(СUbrÊrS}G7z/3ݵJuEXОˍ ca;7y d rp7(b7܁zlF j~=Yx`4aofċ.}}OxekYˏFD`GSe , u̘=) D鍘с83BFP^?%GdFkN2Wx0^hyhG,M)Yj4qFě&Z=15ͰxF(d#iCxC+Jq]ީ6K=N"V;G@ ʖUΎ@nzֹ)@39A(B韁gNJnޙ%hme5ɿ5w6F_}јk r˃Ld|#v IB07jԁ3VznB067Pp|>Jv A[]\PBI+9aC|F W߁c@q0oѶ] (z/jcN NKp5,0uy !DlA+CWv. q\t$0ً9H2`KDDKRM B2`%KքOmgNB>4sZbӂ+R4a{]D*h„hA\B6@h)纲 dbT7[VglԠQf+mV!vxNq<0vZp5^4y@ݬ]]oAǡ|Ƴ7t¦R(5'ٛZ(qCZDHǐ?QH@2zL.U@,Ư7o2/N h |K8Q6} N--1#g7RlI#&q3P4}"zCrrZ"%#? {=t w^- -&VF1#N  k+!s>qU2aGSD*!|\O@_ !~bZ2h(_T,6TP Z/\x1źlT b'&{]Hd:\&?.%תj5. Aɳ0'>L~}f8XIh Q!}{QUq*/Zx%Z-ie8,QۛjukLB6Z- @tZ!V%d(KKDJ,~~"ђKVؙ]('Wk8"5b1f/2@,l'S[Q%yUWEs6 qZxo87+T,L ^ث&:9\Tƕ(XR{ <_>.} sn76 -:PJZ΢׼+:q+I^A1xA.! hMJ =YU _ 5V:g }%JPtiCuAkkM <;H9[1aUlnY m^v\(֋CE~P93 ?cxeWQ1t俬9(&dN}jDN/؉-86?9[wO8V+I>t-{ 'j⤆ZfK<2\{Wra!05!9%H4N^8{$TH_T*I)~$S*8#+hM7wߠnq/p Ecv_TWVF0~ݽ`̱R@T?Yd@`;hw30у=@6LkI=ML !{AS0ݗ 1Al} !uGQ-f?jL!໶7/ǟ|@oxvGH<Ê(AOpq.LMB!4Q砜`fl1F<L-QWjXK[{mVOiE<'}^p(>֓a;!V@*%_HxN\`B9#Ii)Ό^,Q= =!2ЩzGr•Yw}&:7A 7 N)^t7 _!ySU ST7}֭4ۥ|ۡ>S2c YJQ+T&af:~}ttU }+jJ\͐X.rً\|.G+7)Mȷ8nvad9WlVԛS%Ԝ Ԥ=G[5(}y-%fHOR3@jd nk(< =VL-c%xtAiNQlҺF 9ƽ]\fӪEeT9Z<%J"YJV / z _8[9KQMK 3Q%r718e`6a!_?JX̾VEHzfH"ҔD`å#}1PW#S5W X}w`VsW Ve]2A$q9O@|='{oMa?ᓦT?/'ۃÓbe(#Ipϫ=SZQD!5'x?=Sƶ0~Gݸ@hQoa-,I|A=vigkgZ}*kHU4Ff6]F̝U؟Es*oVđO茙x.Sbۭ(X|4iGu[+e7g O#=wЈ #mN՚(iXDPG]=tgЇF̓Muǝ2ADF)̀Ն'Ii2)5?-jC뮠3/Hh"dq1s# j(qx!6,+ܝ{(ځyGp6tO\떒Cq*Ac|`ۀR&B/K9IVp٠ =tȡkW];`GBG3M4FL-?!{ʪ5[&-<?E % EO*( lZ]J)He+'EPFZU[ wRr;͎YV8:ο+'=:z-6YZA Zt"fAKo[̓TnH OC%4(@}`oi*SNT}) ilՄwԴɩZg[EZF4Tmj&UiE>믆[T[O~N DKYy=C_h+U)ǀ5pja MڙӖ8)7&3նI_W:dQ`U Ug0OŰs /0Tj {/9?BSRYL L<-5" {0s,z(KMk]2T@z޺ރ] ˴ojgJx@o. r~#NTg ) fR$5^dD;&}o#BL^(Q>ӆ^"5WoM_ U'f0Q*, S:ahq 6Hw082; ףڂ,1[e Y,rg$='{T5.+Aá^q->؆ia9}O!C :r6&NM\nH\A4Zhfഭ8JU&Z){㓯8%\xQ(=|.Sn/3t"hx1օ e4EOfj·ok?%_( ;#]-b|S%xMoQX^mmsfhhY"9G{+zzZ_ T~bvˢefq̳j'KS;=d߫\l#ࣝ'[iPf&I[mg߯V/\FU)jTǟb|WXؤSc3$cg f٥pCEv\7za8xHֵ B05$wʹ (IS3[y=1}N/6;v>&BtyIoZߤAҜU`؁|ބ'^hREW&1 ß@X:!9-%e3axnc[j:X1˜i9șe8mdK 28$dܮz߳qYpop4' P -N-2 kU36eL*"ƺm}TVd6x̘azjJĀ+ z댂 *EOMZy+ ^=!LL2Lw!3!s*93QS0m.sJTYdd \4F+yã]:bm65|q5{2 ?ҌG(isV]+ hq.W#\֧u5eg_A#X yPFm / UYkh闵3-j>)9>G܍Z9fGo7+k#.0h趟LB &in!ák󰆁TČsp$v9[C֫ ۭiUrcSe4U.]#!T=tdCc[8㒨F:!&(| %%g|&C8/Ge3"9LdLMZ™ USTn>iJkYȇI^i9+TV`Ck7D;Mڡe=̉w&GuT`ⰪdpoߺAr1{:򺘯OOz/,H y OOMI5&I٭A5Tުe@ǎLj;| 770&s~;3 s)q.M# vɣ向]eA]8L?0vμJJUf0dӲ䀌T+#"ȟ;Bpxa(_߾_xaۣK{h h.%K.E~Q-?IrD̚*ZґrXV64-QtK{]cRľT#]Tai# )/l*cکez<&O<d#k~a27Lfd!-!I[&\H T$xhqŞAiF^hFv݌=gF_/<#^6W;Z3RgsP}G_31|OC# y yvaʈMiA=`GP`V…8Y]yc0?Ƌc,lX*W2aѫ,OR(1`ʷ{ihlzqd칱b1py89Fj0>A=.v S"Ů<y܀9) dOWv `F|8eNxN3&#kS09=- ƮcG!A{:VYAr6rriC@|Ѡ-VV(S@d!.8o܎9) `Ž3Z*oAFXr4hSրaTeWR .6;d7VI{p G(c׏oBZPX?Ggv)+YH1<)\aݾ7sjЦmTGuL=뇅-\ӱHIiƣ|=Bz{#cV3GO/|_;1LWjFU_գ{v$rB'~\ʿq}-hx>OA>I4wեRh`J#>j,w5]=2[t1ީq[[M]}^@քrn݅?-?Q6&YxEx@  W R'&{2H;-* Q e{;̸NG 2.a2π;.w^Q4M07\V&+AF ^7*۩1!OGql]MWX-qp2%p1U+]CA#" $aPa|VcA̒wé=<a\je\Pn .Cr'bX묉E#n"9HjG%_տ{GWt;DF@+>r!Ƈ"k0:iɽ/zr7GGAnDpBR{/M;n |ZZ$a"~d:'*E5}sJ/Pa`j@NWjNcM T1dBR-$StEI2߯WUkk%*4#3h-,YxRE76>P_Te r4)kxD^YC3cd{sBEL)%B x־$/OdVR(3x1MV\>Ji+\}'91o'PB2S\>>qЄө+ʞ' !>2q ؊ *MrR=R") o13☦!IKח[]Ǐ(g)ǰ*-9gtGLaLnBu?=YmfF]ݙ+.p}/qv`V`Iohx 5j-sT 2XxܗWf\FM31V.~Gae8Pz#o[ JcL YB #+  [E!A*xs21 [];R<.|rqR^7ٰ%bcB5My,@q07rjSd 0TϬߜ vPA f9;\J_%Nv%@D\ؠ K/cQx,ӍB[FhZC} ڌK rr5D//r+!L`|R|?ߜa_8.\+R%I&Z5x[N]anAbnl{n^}yUzUzaU ߺtA9,x>0l/ÿQw#MCWTKU^NvX=MPre'r-IF|ƗC~& JeGȌ]8_[&B$Sޭ~f򎉽>s8.dNhۥOe\'yV*f/\V}ݵ*fAbx>_g0BG\hcL!p!ܶhBw4 *{wr%Sp7~᧟Gx Ǔ=_ߐ+S5Lprometheus-alertmanager-0.28.1+ds/ui/react-app/dist/97.js.map.gz000066400000000000000000001134411476331240200242710ustar00rootroot00000000000000~0*o戊)j*>9dhYmZQǿf6>^a1y(IJ+ P(|sx8Ys;[w?,H(&ݽJ%**VTT+`=(W*RRywKQWK*yP U*G5]~ kBT*M3TK!W WUm]b/5+lw[ƪj뽂W}N7$(Է*VPmxϣ*tX6gJƠ(lTTlOv75j^6ڛRP>tuT:PџWjxpUd\)Y5&K$A 1ثI-x>`^J7h_~*/TN5͉~wF WA؅Uy8n`g[ Lk]2z^EvZHĶM!D% 8^AaP{d+Hi+{ 0#!V?Ŋг"j2_VqTͼ_E>B!`^9 FSaǀoejh2h¼FTJSj5*rk5ɫJC~Ϊ)6$S0!qi"WڀX":5uDKE/h4VԠpusCOǯ(i}o)M5<Iݬ4A Aj"ꗂ]rG}5Ipo֫b%NOM&@L7kkөQUQA5aA,'4Mqnb`! V,QUsJ%*>3+EayU1 `i=mOtfX wi)y%eMӛbS@W)ezV!1!Z4g.CDt'0u,!h<5UUFT# bWiҷ_4RGMU15\T!` ,Fp5* PME豆OZu@ nXN!B V9 Hܠ(Bcġ`Dl` :躝a>)4a7c&Jj0}+{gTB_v0W0wxFo hQ AtNjQUL$XEۦzV' ~In/0Cu*)*p5$t@+:/^xX-AJ>AidhDRSAb&KG2IG$mҝ9C+~t^լ!.NqJm1`5c]bNK,)8AB ՐPdT.v@,JEMTEC` uQECRHVM5i\8+I*VSJgς{8VOD[]3 |Whu3S*M]GRDNi-*'.I.V" VP`e!.}'mys Hm\1R6)ܭ$@>p<[(UNP|Wa0"wߖ_§ yNM.2Kœ3! 5]lLthj%@|( cXC~./ ]ГQ@Mg1l"aom >:O}i8!낈0 eZ )vh&L1}\Dʎ@`YPN*m͑jVu|)f U`NEvRM7EӪjgMMjX  ̸`\8$Ŗv'Qk@H&SZ_%Z' "H73dWz`|M8 ܫ WBuLDo@HDW PZUA5EdNA:&=j]ҊW06PkdF )#1ƇgHe8ɸ۬j| zХP_&MG`wCxGXqf=Rg \WuÖP}^#d*ubF1kRP ݭۃU2%Q%TH;eEbezl%]i8g8SEFAQyܵ:ˆYuBT{7ͽ~~)i] 5xUHψA@XONH(jxX%߽Amد0\i#@'l{ @ՍStq >;?יOVҺЖ`ES+~kd$5T+WU ?#wp\8MF;fcE awQ+6GXl[ 6^bhr{r&QWoZ Hvvabo 4Js̆%JV՞/3g=? ꠈԆz G"N]Ux/8*J+vQ;OǪc,mJ.L(<drL|o}n ^U-QEjgA ˶% !D<;d}ȻEH} m zyu]0u`āϟR~Y=KQ䛍pOy6sQH"V*st]]]`3]m0b6Z%0+܇mňЌmw$ֵXc7̃#=pJ5$kJ嘰}sqlGHz:atpc2́UZn5kmۮzI ^/qhkg3j+T/R>Y_M Nٚ73ӿ]Mm9 c@xH`s@Ly.Y#Y_s=Z3椻@kzNR-' UΙ692JcmzXx}F{Zix({MӞK5jr(ZgG:E9y=CC茬Ob3uި,Ol+6Fb4\TV[rYĶڠ1HS?5X~- \"[H#)V0]U7f߬3Z-Q-DoPo=eh@"ElRKL6|`7V|wcX CaP3箘>Ht8ФM~B. oAi/YB4efN+cT3!sA>O>hψՙTS@=~S.0 wX:$- ĞP^ UT/@O֚GD1*qk?Fux=&ypWO :h[TOU2'+]պ@˾qf_zNdWړfHaF6o9șB<$0uh6U/ih[Vl!9M/ R""4ald@_f "Y^dޙ!X:sBr}ק6Ҙ-b"{(I}Qͻ٥)J+m\,fO2K{Y\]j{ΒEpJxm%<]gM=O|T?WM~՘9 wnUgq~#Bmycm)Qv`락Քy'}hkfsӒw,]wWR)Þ;1ūˮr<8V[%PD}_Cf6ϪQw~wMDa)rCFaʈDd hsP5/j92րO)VO]7N1hCh A#mӖXPP| >!YxtTCޝ1Q*c5},zdInQ\ǍR 8`naNuGcTDV?nf>UE3R<viT:֜!AsPV}b&散5 뫉|{ uAڥ9 rJyĨCAQtTDQ{3 ]BzpNvX}Aa k $E:6ӢiZw6-ws}Nݏ5.#pZ'WfŦPŜsޤ}xC薢fbGf JvOGt-j-*X03;*' r#[ۧYuD _ܵGo5R @͝뫁a赽8vԉd0;ZuL= )#ϧ]GO v"9Eΰz*!FTccCq@(fd(Hpz.R X&ۤ*1ɄT9՗1pVTL[ΈuکX?&aIc`D{1 ?&<7kUtW"6o~%I t H%YniԥK6OjP{Vۤ U^鍯}tGtW{EG(̔KORx%oêm7key>yT3|z Idڷڜmg~ lv  y%14^'oXaÒ%\䝩Jq3 {wc4]8ha{&%ehHж/lgep@Ck;XGYj& o|^!ly@JKரq~]FnmΉA[>:TIǜ :Mx -[8&aÚe5]{chcY؄.]/J*cMk<#- 4hi} =mՏ/ جY;n씌208977D8M4IHح֮._+&RJCfcDj Y6C9ij#Y%݁OsqXp\hu6+.$gB=M+i"VfmpT]>\*MMl,=;S٤ _YBնjU |l* @mdcz,mp$:qq&ckBi]H#,Ӈ~IPJ) *DEpnpuדUfD}C'fh26Ħ3b |2)a^΀kH7n (+ׂzM,mc.m>6e[;oq+J]Ht/IdF">K fT g( v&砂h}E+'O3|wQ}l%M1G)P12U[:ujlT2 Br4q'ol-DJ#DAwBTH{P-@ݺ1Ƌ`TCflsZRDeuhF%U* %{8:VpLqwˆ[k7՚d )\ YPpr^<'qxi #|lry᧻Mɚvq@Ƅsq=Qx! 28ܬ_C"_J+f )\w^jJ HYf6 gz#ϕ ~JN_Mv$PWF"T֪zOߤ(f||94hߡ8VOSa~ mq!Wmaݯ4gbվr1馰'N5W;K]w* s!9n4wwWVz`Mʸfխ>CWm4-{5n0{ыoF8d6Vi%0"jic)=10̩`Z(W:bQ\Fe`m_LT.CxO܄蚶y,ĉ^Ndv_0d)g!g{qrXƇ@NyK5(m%0aIՍBx-䊁x6:;f{Z<^YZtq{s|ѭE?'(z&aH'csVcVn:m9x;iI82U{@ 9c]6_rQ{29CAA!fE̟gg-al{ZиJp^j:hNQ Ri5coG v0.D=@D1ĘG©vV 0%^ӫfX cic\+"J~C (0E,Mj nLWAbmzPywQxFut؛\{CsTt*4.;F2?7FӇp#e`f]WipG$۬0}\%#.Q0Y< 7FfrjKr 10Q8tN.Zա{HiЉ$۫:O]x}(oKOPԔ)Qqjbnm6EhNWd]c@N hM $duL{;^~8*Z"?B"nCPs>`&`kɫ\1yMk9 )bE8  (X0^6_\ ^ G22 +!A`R2Ln=j5y&U}{n?%v s+Fx\&5TLnM xl;#J&b:h~粞޿)о l`u\wx1.]v*y9k26IL.oPBRCZ빿MhE&v5۾'qÍ4Q6mqtkR3j-![#Dtf5 /5?;EWvvE%֜oU36_ѺNGWž# ܴfWR{ێ4n]y6ŷLEuz3|^0ړjIT!Ic$R7iWQr4af2-~z{hNpӃt9ޞW:yp":!h[_J=xbLob I^%1PT^αxTR06!|_k56inow~M w#Ih|G=.(#,?eV>U[`ѶCb9b3E> twg7o"E{w1?-31 xE܆ߤCTl`]W@e=G?Q@R &}>Jno| Md7ءุ=ˮ\V%b(Icq ?u>)w.Y]es˵mܸw8}kx4K$t8iwJ{0m&X(NŭQan%!8UmK4dq2e ҜjLTە tLiu櫤 n ÉVFәtq k@{2i"k*Q+tٯRL8QO &Ul5㶴߀N3BOٕuwu.s'+(KycI@tfTkz+٨Q,q޳Ӆ4^> mNbr =n/D37y1ーbv뵒$նzVeywhr 4~{llq9C%|N#/[! 1„#ئ#|OҨvI5WMRwx!':X.Upr6FaΝj?򍆗t$#>jJ ɳ+Ls3&P#hgԬWҡ|b'w+nD^ۺA~@sUW18 BwKWϴ@U z69/qaP9g*)D V=4pgRL[.@WU.9"`U=/سWUE6p19eP=|HPIyw'Q)"Qk رsqQVW!\T?35=^yaSqnY NTcL.Vqyɑ"fṃtbRႱiڴbI5wq ֆ""c~~$gмHd5LqYTs{Fۨfȝ|GZ3eN|gԜF,#V㨋/썜Y"|Js}3UgwJ&l?C`4+JמgݴtO0XT8 !(D͗>3@ڷz>0Z_כQ6WW3hRiJCk?neZG?nq1ӑւ+D^7owW6!膴謳 (bc{qe$|Yo&elt[]X VJFUC [\@p)h'5,GܢP=Mt|[)._c NgVTܫP'GHklQjwH՟[8i/Fϗȇ^9ؤ)hXNiOrR ϰ|&9 o@?/ tH[ #r- :K@{urtm`3v_1bL܂M+3$$A>n Tv ymSѫ`:<يQ>u>'">d%Og`K'PYf6{ – 8ZX4ZOPr3!v MCg`cTuV=ota A׆|> z3sL|]֜bvşEc3ᓥuԍ,^"C.bDt":bwVޡڌ خk"Q֧\cRgЍי*v_S%VaOT- v5H>GȾ,9,K5آyh\rL lN~Tb r< q ~Aņu娏̨NZ k"@?hz!:c4QRiQ;Wh#sι']slzmqZC?Rsjp,\j̞nN~#5V<HCY]ae='vŗ6ޒA5 3%J ީcPgl/b@dEӽ{WD,WjB3dz8G~IBu TEg04cr@I.ξ(6wj6֤ GIP@7pDrRӫoJ `"~%1 .W]33:=ĽKD} O{ $#N0?-|yYȴoR}afZ_\3w:d1g"9[`#ք+OUN WwFm0u*0@%SF]ʶ,?r/u$W'ί̯oCI36{FZTLLJIr(\egUR*_ӽ |7ViW5x=@k\%۰݇Y_ãMN|eÅsuUN8ӸPkO}!pv@}!55Dg+(Yk|N%`PuX@֩٣y~x}{ .VRi:8hfq3ܶ. 8jW,ڄ/ =}큅@졣eo4j^#+ie~dd02«d T|X:ٱK#D4h?%% 7#z C PMXs+qhi{GC&3#̀c?Mfho_; 56p,Yc̨gMx_ix%.Q #95h&NւS]҂ ޤi_hjP*ʦ* JEg^ہ\):̶7#!tcWS@&/gILDiu;HTxIN F+xN(&ݷ$ jcp64Q_"?o ՗Lu%OR 8Lk(Û5o SrRVҊ iUY{g)M$oBK: Njs2g(6;5WС F.tS]Jc['K},mr{RAfS ~o †)(7@=3Bq] 읆}Fgp}pASy{" J7QŐrG`&͙!-&1znpV@pɀi~һ,m5S캋7g tD}Oa03A?]-G"@fh':NӇK7<{NJnd\uᓑfm` 4cLG׾2W}DfHtmg W-"+!CoX [d6"]k_'˅v *M58RPҪQ)[V o^[s=+Y Zl)Slk& ΐ/>1mj(񶽀sr7<&p.*)WH<4ܤP&:?6MU1պ@!ObVbPC?52qvw_ӅF*ke{<63Ӂ.Vs?%GqÌ-H=4#h )CĎpyZQjg0f  "l#5&7P5~#(M OAԘchzTM4iycj0g6=r[9iM)U: T%ϯ`Wݜ,~G4(gdjO>ZAso1uҤ<|A4~3FuK_fRP{靓f&٧>ffX'mȺ%4u]Izl%2ku"m VlIT/F%j8Y;rŔςg{F6etV:I4ߵˁ9꟪vWp, J.`@q#VNPtJҔBi, yK7V9tb~6j Z@b9 G )k.}s$GM%rVPgB@_2|?_rR15n}B:Y !}}`tER1ht+@[H؞0|V8 QV!ySS5h f4pI CU$B&,g5eR[poX t@hHpyfz3TښlM GkMh.!&\ωQS bq//kqMY 9b _1]phm} *tYmFm_>/BiwGKa.GA `(CmՒhu#YB~e k*cVOœJSJˢ#ZU? jBDmtzqa؇HYTNކZИ|h!GDz>L;hmscrS؛z .o0ӧq&o݁ X5bh9kVVSIZ.0mK|rf鶐.\)9yH֍h"fYṼ/MRH߼+hhO~ 0h)uI5ziD)Iq;JlsFa?tiW^4AxW˫a'wؙd_i:Ľd5JËA4 ~4?$[k0th':Nk[<hMt9 QXNI)k{釓hi=&o $Jny%F&mԏp T3ۻnWп~؞`â#5Ȗc؂~^s}<_GI4* Ƿ2NTWj\boAX;ֽ%d oJ JCF> J|/h8:I8M 'rO)B˅Ͽ q4xS?߲S:/jlq;qQʮfI՘ b$@`uO,U27K]ùZq(S&3GI!v>b‰|5Q_FUov Cűqэް&])IoΪp){smP-Z,›R"'j{Ѥ0p:*vr9&\A#K5U\.+"C*3Bmm3~hmXu٫ 8*5PVmri)!VU u> at;m@V|Rp9nڃŶ6\Zg}IUDP&a!JD<'(^.].=L7SNz3W֗i>V‰#n֌첧&QBqv8e:a.#Sgh Xv@ j)SWGJFހ=ªD{j#`^xD`_A_0V"O)dƫf`a)kj@M%i%oK՘ ,qd+(.ḃltvT;\A2[[zUr|54R4wN٥x rVq3z]\)" LW|L`T WN9IsNAz, !+"{-z]c^cZ/ K'NTXi AS~w[vLΒ,H졍;.5UQR+7FA:BRp;.Eߩx9]܌(.)| ƽy6U㔹S2eEi)0n98+Yr>ٲPw*`!klPᔶxwڰڞ~pՄZIZ&l1r A#H2UyF/dOWTq4k+l6: Na|J4e˗Ki&ؠ;b+w<܆Шa_a HBLr8i^+ 1C[K?$a[YVa '5t GW*\wCZiUo^_09FJy۳cF%V{~PZRi {#M~!ĬyʐR]ZBx 5ac?SS_1*bKz d+ //B*j}*h=#Q.[+~нHpu 'HˤmeWQ8A6/j1.›[|qxRZ(Gb o/Ol pЋbG1 ::*UDG9tI,&oj7RB>k^3o\:ao8~91e}5꜄ [n.ݸǭGK3s s&ۼ`a6簜*(q/eOkmQ`a79"qLBRhN tpVq&t)1!Js;k눳Ăp؆Ձ[$R3':v:Uh{W;iL;"nǩͬD+̲ps zo61º2>‰trn|.'xKee2KyP—ŷVU(,f3#vFv"k'C:E?/7,[^`@g xN<Ǩ"@"aasKXa/%s5x(HuB 07SIMTU$>C+#+~yjYZ'tIG/a N8ˬyRx}ɥ HE>C㽙K>Cf{nW2%u$ɴGWj_jk 3:Ů2o߳}rle)7BŢ1JT ZNHcd. /?ܱl/1P;V ap޽ڋat\ ۉe<^?)4t5V;䪪dAY4 WQ&t&{yoQ86d&h:A@ _pe|6?Lt:5婑 E"gUEI4)нgfj}e5suD,JK7,?(cM"nb U܄**Bepr}=v9O y"LƆa|R9W⮒L қvtgQ=,܃_k+be}|6>7?_kzQ/+7ԋG;/X!T |>~DJKUtؾih͊ gq6"/r&{dx8k-ކv<~K&7~pPQv;oESjR)*/szXgvi6K4 Ax3zR9|!#O}U)sV}{~mDN+8/mJ/*֟پu醙Dh١z΋g^:j#aO\Tvb FħÆ@1Bghf j0(2G-CV(ERPr/pcXuB>/~֧/桵Nң+xr}A.qE&FO^TB"r6#zFewyn- |a*u2Phivܯ 彫4@ D~x#y?~1,c ?0:F7yOr'tU@s4|7oEV@ӎ>tyi'`ˌ#M/sp(Ńwt<8)`#(7c iNbq8E&Q(W#hnOZXᆴ95a@&X76w+SS7n]R7Xm Qq@#_&`Ya{=82W.CRJ9- -- ΪI1E48vC;xs 7 k2>n>l>c@z;8zpmĤl/R~xy~p01&"c@,G7 !!_5)N)s$XGӇi2OJؘOln!~3cizt X 19%|vi0V n2hLh,ibxz8135-=۸gcy5W~fx%Uja4LE; "@]d,I!`&T`&Omuu7onek=tx/t(E"D6hNޑ^h=Oz )(ԟi`OVWW>MVul"~Q8Uؘϟ!O7O0:>'oюWLt](` 8,9 R4/EW ذ}k,~ɛ-?,)]K(_rGB?5 }zUM ׂIrE~>Mc-:<93[xƬOW뉖Aqk( _:ʰ]vi!Ji갆p08.Ql)3>)f纴#ť|s`P+0JNֆkȯl"0>-;_|t80JΏ;_T 25FtoMP(͹{;IZ8*3i*.+%3N61I忊 |Jʨv=\'>YfڿLxNp+`5&\n llݬc϶syprV63IZPO5^9 {c: om+_KG:LbV0#^_m9M9,6[ Hu#q&)?.>Mܨ])5ޔ1g\A })Q'w{How,e֝/r]$N/2:yi@IK.oNL>Op-ARU%6s QWKt|XTـ.E;gȈ#-`*@-ۣSڃ X^< 69p=E: &DT*o[[7 S'G9Tv[DG](/3KbCL6t2z=?XpFV8DŽt\k380\2UfߌJ OҊtOj,T0ĝ :wЫ;K$<%|yLI~TGrN7fz?If3;׽px"G"8*cQg!ŏb1!O'bε}' cA0[?Mҩ (eHzDzWJuT޷2VȸCGh˦HC>&ן1Wc=ζ k,OIx \Bhqrnbk ʒqR:uJ%PBcY B.M3(mٕo~|rm%bVԬ ΓfjL|.mБS29zF.NuB(K%~NQW5~ϱ[gGu=ؼ- (NwܲleQ^܀)j{jl_߷6KhHE*M-oiy޼-upI,g4ΠZg"9o|k b)ųf  y.߱t84|,w]VP& w K:sp/r%)Zyɕy"H|6b,#TĘfQ\T~>mI};Hj.967\PWa5Ts27r)v$+CĴgbGSNYC%tƗBIHĭ~1 ?Pxyyc9[K&gLQ|St1U[ۊENvDCޙd#9;j) 4TŌ^K43 7K#<9(4wdu~If&8$d,a N@ƅB9`ҒƃN !RϺ жIb8\Fw%MZgCJATdN!ki'Dم:gu5  \tB c8]| TȁAzv5{ȵ37Uf./)"[:MR1n@~!w3YÁ R%uB\e' M(F|,Ϭs"9tNA֌,MPoBOS1L-r:Y-Ͼt'̊ :rV%U)u:uY׬N?BX,KC u-ݴȻk1r̀l9K]#T٨ʳ#²Úd\*ػdU+| f%1]ޅ-^ׅ^7-ٺʯrĬk‘h)x.1ۢ&H-/þe\(rpBᅸ22j6kD7h-0y7܉KיN7{o#z[/Dh/LȚf8k,pCCOz(eS 4^Ŋz*f|}wNk_4a5űoienehp]I!}G]U98[PX~ڵߑh_4W`/fe8xN=1/1K[+xᢸ_X:#<'TLoJRLRN"NqPE) O A +p|VAd~pқ* @&@oiQ@="dV0ٝ[Ca$sjc."i8$F->l:sJrtX=d[#ڋlӢemd^{bdV:+ -[}`#owxq# 9'>TP}!qOk67}?Ja!n=^ ('BA瀪qnBWR[d89XP[pk7ajHH Z,{gAe!x"<8sUx?w!g&3΁|;ئcPX)kisI{2;REi+b:ӳ]d LaJ*^t!NNCd˅zKUp{8C~C-冬cmw K2i*W0nKyv]=wxr]bSαa.%PkуiRB]Ns%mkZ0 bRg,fomw>|ǼV3_d#3X ƭ[332v82rƮWM]pBl>jX oY9۔/~yk=bڝ%0HE=zxNEᠱkD44![ټe!j=YAl>Yi9͝TX*UgZ!g+)Q^ +v4@:d3]5Tѷ5OESž?wI~s!<^T2Q|MK=2}_\`G=FH7o2rul?9֨c1x;t:7ri:E+ aE 7g1" t\ Kc+IB) `D㲸/L'!N~JrzJVjT0.&뭟ZkG8M.Lᭂ;vh2dCn|4 u")\u|f:Ʉ/&p畲Ɏi2OivZvd %7괦gg4+q4T78H燻v Y5˹WK>m%P[$MPtn3ǡeȆJ`B{"^ wfj(=U˺5єn[߯ѥf+qYo3_^[zs^{ 98(ܽƭƷ0ofԝ&'T>]i)Q;&$_wlZһFLlXepAMF3LaJg{o+.V 3+][+']$f}+ z){{ŷ'_6\=E$ѦA/^2,6~ІY9w{`DNxswmg.kWNOuc忶U@ Regݰ bYJn\r, (G'31֧e Sh;˿TʖÚq ]y+L&m >\J-@C.&+q?* QY?9+h !0Rٞ !uM>d59if@p ;'ŁcGN$ƛ۶ݴfJ]_Y J\W,i!_*~_Bec^"&$R=m;afh8*.3X[θ j)o&F53 d)I5!L߄`!!e?^d@kx4'o@w@ˑ(*.n;^j8{5 * pc3ISF}\b Bܮ򷺬Jj c)4U&Ve{\.z I}cYoϞp 6nt? E;wi8adiJN(Íuw9E6kϨwj!N']ιKce;xuk1Nrbc;2@3E(gX >ia ]yZX6~gRPxӦls"H9C6Rȋ?eL(g}@IPnϙ$ Z`l K%e;:kCLЂZ!z%RAlk<8428\[<{Ol_4UP,Kb*L-E&z1G{,dV TkvgD罡:tQ }Lzt(:̇YaE[}X6#@MTu:UڈDi|Md:%AduĠ4Uk/-W=X=5ιwjwU͋_Ik|*-3|i@ga K-'WNMx{Ѽ dqۊ,X79y8: Jy0XbKm)? .& O{aj#B\B7>|{ lj:[$8[j#z˙9=I ]U| 1g9r]]<kZٗC5F&wemOӾx/qT3 M9x0وJZKBK (4)/i 26yl`,cBUbb/-t-oU#qzдg"/3UY__봕2ho] ܆rP» ŷ  O&:(s.ep)#XPYq-|NeAX/.Z4ODaHG94yR%G3nŴH.:[v1ʳ׶No=qq1s a *񳥴"YdT9 VN5~@B}ѧYF(;9F(W9[I}g)cZ[7uLWO5CE41uS-~C7<]iA:eZb3Pi! A,S)R`i!݅;46ken5(dRhњnYW )rIP esLd %fY/V"5uA6A-fe515a\kGU4E?xIƂqEe;-,W/D;3IPMlqp'J* :W>ōA뮷1Ԭ[Դ- @5eSPEϒ _x+fMA4G_˛Ԍﮖ74kܤg'CsLƎ7#ͪ(b1ieYcFf(g]O(e5rkAeUOD$ix'Ѭ9ehvBZ"}缟nv>AE~zE-^f4}+x$ I7Ed΅G̥?BwEIJǶ7܊Ce%d;*<g[cDf #[9(u_Kڼe@O]MԦHC5U,JLVmE+`pHIOs?J2 ~Vfw / Y_ ?a.N>q d2D%Tuh2NmEDjw!I^N.Nj_xFdX'e(_jW&n1¢^q<ڑ8?P Lё -4f$"97^{V8"ȟ-c- ]Ym|2uz_+QuluρgdxOBnHAv aCUs%|=_l=/e0Ho{gmz{ܲ j-3’}fpe^{wֻv VHU㩴頷ͼ=E}8ө;'qy)Q"=x:?D=͞7 gBCCȚ j٫|. 8 yCb8=KۧZnㅤgl뚔FsrI[Z?O:DwT$|Øq~~?,_qb2pʌlQ3i-LJ|E$B7E_)BGvT)fT|/1d 3 LW#5Y*/mt%ϔ!ڌyђbX&B8@INe>Ccy{t>ܔ=R*dL~3sъW/u~u|bɿOϬ#; \=4}чh$eB[k^Z O ! b:"q"+L{B4v_[ȷ]u toY`pc0Nķr_W_1vy,5pҧc;6b?:1?)H |RϤx=*cB5#Է jHdW܂ \ ֶG )G3GKΎkǽ[a [zÏ>FXtݍ[Kk7yMʛ..q9|+ [=w2;Nn%ENp.PR7Bk!:(#&G}LX["A=5)1iBvu= ׹edh?.Ͱ߀:T^fi2#91t2쇸0gxRVBLpcir xH7}I{9#S537t׽K&7 5ʙs`ɛZ2"t )D<5MXj0Ek2i"A%a@NU"{~hybX:^B8T2()?b}x? ?q9=n;i>_9N~64!Otqi@O+kE_ B :O˥guJѤ5GIW_,OOޮ+Cҩ2V}y.OC۰)[~җM >HYTS 3q1? %pOB`?,B:_-9aę}UgvfS{:ËgrGY-Iaڢ'[bObm}J,Aa[SDpM@4;M_ D{tD^?׵߉ΣpxՍ㸍[R'ӰG+49t'h @o~|@)jCq4)X '&GܵSli}ҕTQD:x\˜"׋:xKhA-P~5W "7&(<VFHC̲j[O4w/SQ8-'}u^y76i4Nq)㷓&aQ@;V$'/>b_{4##,i W5{`M˛to=fYKzFMo4B#If(SIroY/eԞN"l XܤTE8 txxٸ3אO`HR)6[Ѽ3NӇ(5o!hY{.(#dj5uڄX%½iH("Kq=vOb.$Dg Òi;DJ^@P4*& %pԖQCRkUj!xZ\.GxEwMqxq M `d\8g!g"q 8#ӊY3 s;vϟo $2+Mvoֲ`b(h!eyh) ߔ0M[!+~c 4m"*ed< @w|Ԕ_ (VD~9"_לݹaT֐j7F4F`0E('W\gl5ntϖfkBTD, F:T恪$ 0hHq"ǡۂKGD,nXR)iq>&rM0F^㧢M 0yʌ8 lExEpHӃBZ*s(RN~OI0_Rf+C4%?{rT3 {DY͍+⩵9eS- "`qx|Lud*©\I%'At#(FDKZ{9W^ի^7)R8E.PqrYIߊRqW<2ڢ _~lQ:WVͬZxVx]v* ڴ5H$e{ff>9ģ{(LJk qmuЃmMUlp$YQhmMOdQW2eX|LKñ~phB ugP:-Ŭɉ ^ʔr%%ҳTeYvj4 grĺaZV lM 0 ӵ_ȶUeRQit9RT=*R`*hv C`Q<mRlqnnj3N)nػpl,E--;G1;M=hVkeNS (iМ:'GP)~a}l KJH)!k1J'ValM-E~1v7N^p7MwN4)0Zd )MV:O"V{u^peOCÔw 9~[Ʒ~rfz[Qh8nS;ܼ O6&p[ްԷ*%G!%A.D65#ߜsLZ &C؅Y1ȥC:el\jKۙ,5? VǼO,O۰#Gr,Gס7++56ߟ 8}0R@8B- rHNk%*k,.g!ծLmH K=B1NYbJ5"Xy`=phKp)(vwm r\ܝ[hGUZI 87=t+CA/bJy店ynFH9r9PO `GYtV[wxQY;"1$vY9g4 .-'rp@Т; uX3BkxčDO\S^ `"!(!P*e'1""Ot]f{)|t,nv'u<#snR"f1# FuL$+a&f\ sƦh`hgv3FbsӜ賗A>{hN^?Q,Ji=rI?9DV!j ךu t`BXNHEqp@Ǔn3 xzb.<>UŹ&(Vq#%V7Q=Us1U: ɸ'icӔ<&N8fd6˪sB3HT%?;&_]ԛޙF 3:':kPӋ lz ^x3w4FY%V}\F>U(Ŭ"s!Kxx俢pJZΘ4)QHFUҬ]s9h6hCo|Kwf5Ψ^ŨDt 7pݹ%H(xS[MHxN3H!bF$D)]B\I*]t_47}0']azk#W,hXOɧK%ry&#&Irl{kRڰ_i~׹`X@ 3V*;)N,_9Nt-2z$Qϑd TK(BAZ V&O=kgy/P;"brg( fl3ǩE bv:7%ǘ|AR3{ LD :fS֗k:i`gU&-$n@*rZG [u4+g `V-!2̝!S*{m{e|&ԻJ,ZZ}ǧ%nM6Q(A.rQ7`'.ަU"!|riGV\1MHGVL?Rm5׸p܏54D3|5ժtAR;T^^~<_ 7|ea(klˈ~+mg /7w؁&$GL7ؼEg Rkp!jvB@}yy]BgĨiL*\L!Mը {lJur!ua&wH]C4%\xbJj u \i o?~Tt-n/l3od#_pԽzM̗t̗\o"ǶxWdC|p~Hqզm?3qdF\ ۯzb6= _:D Z9Y8nZ@F n<(G2q3(l/TL,_Cp;rEju=SDhf S :o{Ӹn*B${P/D"[p hdGBl@t9o,("M~%MN;L,xV>?֕8LPf!SCAWKmC@@|$֒f) 75G*~|FFA=phQ^1ÏHI< ;wƤAn)S&w{ޞ5óQG ?`1XRQ]ޘz`3L,H"M= ^-vRm"t٠6 ]q>6ršںsz MJڱprometheus-alertmanager-0.28.1+ds/ui/react-app/dist/index.html.gz000066400000000000000000000004061476331240200247110ustar00rootroot00000000000000]Q1n0 un$] tԑL lE pwHsD0zVH(goHLÄw#)BTRof=uhY.S.j dQ&pGZ8PVՀC4Rr.u{H5i?B3ՠ{ٝs"q3PK N[o;cI?y!H>q}H#,Whg.)9:Vxprometheus-alertmanager-0.28.1+ds/ui/react-app/dist/main.js.gz000066400000000000000000003374411476331240200242120ustar00rootroot00000000000000; Wp #ܴIK\ {˒#-ۿ}a=ky̬{,RIh쏨Yyq?lXFFl8ǯx|:e8~V5֒)!T ]aEv&Q"ЙkufGh igyn`6EiHߣ1q]70yaDQL [~._\~,K<5iS>:&h8&oP9G_\1|h(d(.~^xw<'cS"bOE`|,C2:Rzs,=8t dȪX-eQJqs{&=q(+ )tOY%zx8F7@_teVa0CQ0o8tKj@bkCm#zS~)+af~K44ӌ-CAQdHagcMh cOP+ ᜌ%e1Yd$] S Q叉 xnۀSdz= 1jg EG]}#NDTc =7]7wzfeDX%)GH9a?EaA/ųy4" hw?K%6I?gZQ)\a "4tohfA\"G)gp-gtrjB (llbu=û0Pਪ GM$ODpPYޒrJ H&tLP{L V%1lCsI!UQ~( Qh}l98Z/R*1evrЇw*hPN(h$j,(bAj~(;[(D}_RACn;P_l۶e9T:/K: ;vaw!{ynЈ2ٌ׍B+'lX}2 Y2+.q%د΄}F_#E-Qdi(V٪VW, 4iU낙mf >6P9藍|;tFUg^8tDFbL ])( %XziϖsF$%8h 2g#7e2~Λr}*l$,.ɮ'ne2YQ#tq؏U%m"3:zsMH+ %\{Uf|DB)ٲ'tU B1O4^P{:;1A22ن\GK;੻ry2&#<[]v*Bd]g4t}Rp~,g4vjru/ҞV[^׵톘l6KZv+'i;єͶGöviV>HH4T&/I>/M¯Tt|b{ݛn]W-l6ϧd2Ьcdebuͅ7 ^߅&&lj>a .W)h y_зgz_a1M V*cwqZB ^D_F `qy CM&`s K qTW[!K,B?0R4a9-bstGSشZ^(dgQ0&5ݼ| ueBɃdda:VfXH*1L?Df-Luߒu~!t/\0-k3wbIŊjmΎ۲Ⱦ &FVRͶP ް=k{ڸWP]rinMi7i.e)` &?3# f?ybI#i4F3#P!]@8^X8؞qXh2+k#(y"Z^CR xk߭B$v1hϪ1c7>(X$B9&OHE{D~~gQ&<6v6T/On44 O;؇mM0!OfZ2 6wbuRh2|i<ݪ~u]r)QQ2=.@!y3U~ KzVcMf#6wY)jaۚWH`O b*:%x.bG$(n. BQ7TN_g_DtLٯj"G\4E~Aov-?S21UW<Tge~wՄ„|ն7~ _[5Z7@׿lNzEG\rxr@hAtLMB8~Ts;u4Nilj䧞n)9ra]|g1N2G }JBbN?|x**-rA!T{{CԷe?:y9^F]pr8]|$P"} ֔Ac Prܣ? g?ޝ4iŐ]7\/FQ.3!@C;\TpX}vЧoLhiů1<ȗP?@12& w }%%64xk)ùpMV  CG #<?Bƞ¨:jPGǵlVJЕ\ 9 /8= ^HQ8!m<5tL R>zG/=}g]@T4 @x |4o|w X^*F}&Yvs o4cgA;eAcMB  ժR(dV~Lrd_{GWܬ#Ҭ)HC@q(Ӛ{? Anfڳ@zJY}CiUq? &%~u'aPt0cr%p`׍<=5}HC(E9Oz;+ssnX[|!KcdTWd婫f>r|:D0A uց%!{KczQ=yw\3y EM +o2dg_9gl5wU*^ԃ^W/΍`L()ضx}o^x6# PnF)}ҧl? v-%r l޶4+6e# dmj7,XIS(54ZTm[P,-PZǠ7{uܮ',`!r0AK[[,%5q%ww!vD80Qxɲf{u`S1C,Zgt_*oz ڹкB`M$4XуFӷ̆T.|R&X=[pCwd[X,-3Gg7y1cʥt,㬁E$W>'|lwem{P0QkY~W8GFNJ’b9=v{vgC]b5WI(zMExZ. CvrZ-gp.g\Z}tPOUAg#{dC>fCE0 dQ?"b"0ȔAC.G4ѲaO|`Y|e߹kJAc9!z,V3ϦƆHi~Q\Q^Fe|%rǃL3+YKee5g#ak5&A8.V! G2e}9Q@!7&i:gP|ݔCd.^f|ES\B# j"+v(@[h% /B<@'7 ?UW׏x́4- 2je5EuʏH}V *JB(ڲqr{QDϻfN#XE) ] kj+E(5ވ,.Z3P)$pr_ YsYy9'6"m3e1Tkav.whOl2M:?KH8_L^#BV+'MF64\?Յju` !3FRTfֶek"1zv}d7F&h@}%2(5z*" )vƇ4ÿ̔UT r5a^x://mCTKc iSҒ[N6!2a#(P[/CSkJfi6Y)HpbWC?&o>Q&ZD'dOm 2bLZs1$->VG+F5 !bs44y!t~S1nh% go5 r>5j\$qJE 1}zԬ45XC`:~LJ{;P]m."u,|'4t:~TnkG-?5hg5tÀ/Ҋ"ܮ9{-h+2?`GF5'y}@FJC_ď0bb+O)(M4sv8EUIl}#w2kSm2*:v&EhV/5e/Ҽ/5zl6cǰVY?kM^R9ރR5}4%sԓ,Ku":ŋ Ns-8j Yl|%ʰ^M@q;l еh K 9eq5:#b5hF[8/05]lO Nh~@TKWwaseV4-@)կ,TP@[ZW:.4fG6q삳&gg*Pޮ~l{~1}ORJ3)R:׫F Խ(3 UX[!*m섐@$.H)k0kkbs$Pv˺ L>Ѫ ;"D~* rg=?X*:( =N83#&-9}4AVT$. PxTy>HpT-hAcZG)@ }]ɒB4|a>UK(B,%Jb9p||KIf7*K+Rd;>@ Nl$2)b5e>lar7*]L=SFBX+/KK/+CYo$;׷' 52=o'Kqu.z/ns>00 @lɝFGI5"eըͨW{BWO.m0.FGL@Sؗ&(wN @JBj&@k@35ѭs{w N`4H#aާ\YR3-iCA)Rбr2GuIirŅ?T].s(:ˊb!B e|_Ҟi]zc$fr:)iങ؉ܤM6u+a9I;Lcjw%9$YI\[A6$"g4~(czmխ”BJfdfܱS*X*3g Rͨ)I ]ʧ(wqVB4૳FɳRD ғjN8́xP)˶k# ~=% ؏ɷ>in/${E޾Q)K.T/v^<#.g%>PT',8= S(a/l`Ngo 0 !K]QHƚ=NNIkfyV {T??>l% B\=Ńuuj (}PBh$ Rx'QaU5P[lqj;WoeXlZ)-> /_6yj'9Pʳ}Y8Gj51p7q ڱ_sXtrZl:8!|(ߛJ/rlce7mܔ.8Ռ8Q<SIqNa[ϲOwߘ+э,DׅmK;f`S>xHܡ,/18Ұ~?yއ~c_:rm+|17t*ʹC׆>,\,Y q|IOME+h@ .DCnQM8U>jtJUoQkqHPS9 EN˰e - [4bK1)Ez_F#If:@ȗݵqIT-슕UEO[+ʯyg԰;/KB|hx~Cirݤ(J$[tF|Ox QPB~4`:p"IɞFV Q ʍo= OJRu/ fg1veŷZ +H"`{ V$K^.-ZiNl%v>0. 6)i1 Ӱ04L}~}A@,O3:Woӏ_ڲ'}]ʫqe|iIND 0iO-i3K&9J.aqG"UMPښ*#dE1Ng|~7(5k,I,D7>Ɣ'#&[aTiI*D%a8kxo"}+L"ڜŬ8ga6hm| -2Tx_ *X> >nC"Va 0ԟ{bd 0Qk2aL Q-yaLhftP!z3AVj;l#Te(: F5 _fs8Lgi3F}SSS}nBhI{3eߧ;U4]_>%{j!B(MBfs% F7*ݡ}®&Ku/YU&Xig>;SϿ,H o>]V0ɩ!|k 'pO!|Jw(Nc+P%o`xVȘ xxhD||mDۢ@~ȒBS ETpS-tbU]RT sW 3ֈ[nҾQƒp ^hnBLWT꟤]c@qP^\.QwUy MQ+3YHUU"3G$naPwܨx) :[4v"c)uW{Zi*>\GbTئf7Ug!Y_;RI?/5eCKG enבpC 5 fkh{k/g%F>/cRi]sY Zf:hsPO՜#}8Sϭ+Q"/b’Z@X% LNth]2T:SL=5t|qVwCʵpљV > .V)k +հ*kttorה@w? C=FDoeJNI,{rrv [=priG-PFsW3ݲ9ᰶm4[l[-)U ڒ0xvh OG^obXk|#l:߻_ :^r)mP;uBE4>Πp>}KxhA=>3RtK-"X/ E*: A˯O%:e%s{[TU|"&23YTPՂ˶T0᪻Pڣrsn|hP8%0n^qL/RZy^à(<1)k FS~ՁS_ywy ]Y' L0Ðtd6\8;"QYDcW7SU#aXc9ӱ|4^C-a/a!QǒK1Pr#0ڏ7&1bb?&1bb!0&.2bb$T7KїAB[cK~;uT2j}JПF2iGп t(#rw9nf 9Q)4]UFuB`8 <dHW˫JɌd(јŠ%6oﲽ.HWc&2?maټJʆ-5hNqw՘o=5kfϵo-!|a L}Nzv̹+T|Jp7<Pr'd\!;nSvkj iC,RN1d? #o.kݵeaM' Oxm4=ebYBGi&-ߵfdqɢ eL:Jgw& G!NY!iJXHǟ" 5BYAşŚ ܢ,7*=MJD^SA#iTz^#u*MIPinx (qVP 7h4*!CrZG]l[Z Xޮ{v;liQf졆ba,Ef3 5aMf.0 9)j4m}6Sd[ڶ\dC,DuӦcվ $VNƁ{Hɶ<22. -ӢE^цQ C52+.ޠ6'vͻ)#dYdP zuٸ8.mm)Y' }^5.=b++3G9Em qDub4tG"KzǧZK::fL 5g`2mC\)*8W±eҳe3.̄eGdJ@I̠02 p ;',d2@U)2 Φ>NW2;c`⃂%7gcuSJ^8T8۸Ε3χ}H= <-?ųbrG9g7#Hk}͸VCYp2}>zhr֩q#ST/;/\گl)˔%LIr~0G῭I:)&{fmO0NrBٿ&+g)J*376ID9SgvЙ@ĘzHTD!o-3fv0RR@e/́bQc{_CCS0cx}]ON6CghDJ'eEmw,㈣7:pA אe- _W[wik&ZsAoW ڸ!#="}^4%cCV6FFKԈ6AD[biamEbdyĆG k^[*6S[eI.f{O/&T du%zW~ZnЃ{ 'WNI4u q]=/Wy˧/]"9,._j,=/65\lw9 >Oy yXs9Ce>(%1dbh$"gLlDs#k(RC"RԈh,m`KC!& PLpO'G"E-#d0Tt .Hbn(aT+ҡZ<荥t#%ӡXWG:أ.Q/yMth\;&+X4@hbɢoE%4K 7Yc$"p*0S D3cbP5 PBX+u-u!&7Yu`Ywcw{R0ӚR3׶s>O |"-X-"vM@*c$(cpW_q@7<=/d#q/WƸа\p$S NGy4shO0~fY /E_Ee_+5k\ҡ ֑W틑!I n>#'X)˺LQIx&I0G%1aY"€wW}@yGш@ zIhMK6-6T>|\#'e\Z!ew$w Dȵ".jfO፰:HUXNd'섒]9?Xi8RQx&\ۍ3ua{J(%{yʽ^~(Eb7>rc<8J5$^NAyp# ҽÀ0ZBdX=@ 3+#GW -Xyã?qBB1\7QUNPOP?CgN7#yJx%ۑg'ZĪh&O+o&zVc#mbwfa֐c ZO>gÀv[DM97#Ϊ8UBDy>dA:W3<3HJҧ݉~N k# a8:vgQ8gÖ=;:]ܮ]&: XQܒ¥SQV[A9OY@jL#rroi8_ v{:&_z Uշhhr|(yroE#Rhf9M 5~3'Ā6hҤ}(anFW7Ѥ (? 5 $#/I_L~[Eb&I"|_VDP'Q3 P!q$5XsIt"DZӐ'ntuwAc2u46$ &&**Am3ӄPiHeGD D;* R! O|(>B9e|&VDQ+EgJXpFA bW4knAԡYvSM}´&(?"DdUqD(x %7O@0 UuӽWRr5VLHm3hWOvk.ACQAFP Э}CPэ`Ĵ\R kL 7QsQZ 4"GJN VSQJ@NԚGE$ZmgKba%/(RPApxRs:%=n5D}(rI0_)OF8z jv{2C(>0e!05jG׋Qu%>CrQ*2S 'ń>D-B߷f%KZeܸДmcaqwKϘ&G7_hD,3WԨU2JeI$(&"2,~+}~& ibT!atu߲)whTnMnGy:F $_dͨ CËKx4sŒ I1ȒB?/%@I)0_iLnXhND/\0-j&bP*,!}>4o [zx hlet,=0iY8CV_[4֨u,ı E]$bC𚘠OX9ȕU&@4GVZ_#4-X0DMj. Cq}\%w(f]9vwFP\""( &88c8;f)|7B}4u@AKA(O)`|rVLkb* t ͔hDīD`.[įM2QRQ {рOap8hV !3tjw[AxI06yّ"cy pI(oH;4%W bᒕDD"43yq~4-#mIR uNPH/=&s9Ƃ]eVaW4_i{H8/m"-j{U x$7IDlتUא{Z+NdvݑOS1V!QT*KLxf-om%2|o5|m~':O`ۘ<4gЪ0+rFnﯘC_Nj~X|MHJ)-,YGю+3GlAWSq $%&ů,h=iA:T> }Kgy0ƺRVٲ̳g6L WKV֬Pf58gKuxt6&TxJs,TESw&MfQ%MLg@{kZʲHO" PipТxTr|§~p_/=^![<Иi(FV;GiKȽ9=gEXAoxBֳЙ y~B34K~\JH[]nQ=+ml:6DuMkxi)5BV|vvfrm_ݜ&#O=9VSOXK`OEjZ2\px]!?*->;[]UsI?dwm靴-h,6 <D yNe,T΃,GԡP]8<ĐcB:,}=r^tX/֋__/Y{};E\롸4MZ2 j4QȘB(eu^Xt}x C ;c5hʆm8cgGcJ4u$;uﴆƄ%0L㩥[*=0|aٌzAڡbyBD=beE hz{LXeyza M"VGδe+'aX=VĞ[3*'NEre Ak2iAR|^xm?us!4s"D$QrY};xuzsdݴ3lܻo ߼/D#I(A@¯^Wfq~j3 2ڮ@ݏ9 gwh,Fp3"h੉pnk؜%qv˸9Pw*`0'?j4X ib~1q6/6aQWZb(VVDDF(&bqE#9#`O}Be9 "$;~t-U}C6LbiŦ&fįF*Q=ǫ}{劐{{˂+:*ɍ|gJ«86C cDF{(X8׍ɺfxԵ, ¿ڪ\0"ڍ`hH>&@EXH9Vas Uma>MG-q[5ɵS;Ӛ볔Ǫ,Ha340 ٖd%BZ8y$1;5R} :%n令FX= #XoNIRZbdO߄01g(5vLJ~Ģ#,~E~t$k?`E{Y, aecac했G%ۏ2@P'b⒁r2Kt¶6sż ڬhZ͋@P(K5n队P!kY$=q'QL~ k8IЖ%>/_JRN,X36 V#|V$TvG'yRjS4hopgnvr xktUw43>JO0C]xNn\|k_ڥr#[зr(Y2 +ହB5V9h1N>"StwC 9}ovK V1uv0SUIZ)!6S`P8VT@+)+%SR`8^Ϫsu7SB( 2{"`Z6N/d /1;Zn;;_옹kv,܇$+"3s8zo u[J{^7KVvHRiNΕuV܆{_5{ G'j螡8h3\DFB"qͮ.gppRV6/{LCg ?@fR6{*b'lGxЯ, CzOE8V~NBz^cr< ׸R1EŸcZ8"wك0""2Bc tj#4hc-3s.|h"EC٥xT^F93+G6Nhվ+fgl½ejndq_ eH~UAx@;s7pɘׯ_+(xesҎait9AR'%ciyl^)X[*'%cxJΦ ,iC2߫P9~oܙo 7aqf)BZ6^̖#cNYɐWǕWָ Tv>=hH8^yߡzMeC 궲y٭ݛү/4>t4 XPc{w O×:U~ǵ2* Ե2LRɕGg %#筩&Ԡ(-A;jb*XD TШaCs앐/ZS@{D|m?{ܗ襡 .~˻A6wN^&͒"+ӔaBp "Jĩ=%DoCJI>i-QSyJ^"j@󬝕(ɪKk[Cdh( ;jyu0!,_ 0ծϝ+^PN0[|:p>m9ܯ/1}8k-5sʾuUxB+R_Byƫ9MpvQ5aq Y S*@/] r8ZB z~+WF;č9CclXG6Ŋ/d0W?I7ӊK?S⋜Y72%Z$wPAVM5eUj}]q_i۱B?v IcBT&Q@IARR߰|(Ua˖$|4kv@%P;Ԃc'b1L{JW-fTz|ЕbD H+97hq8k?GUdƃ vy5S_HP_Ie bR@>V,Ud<4Yqݖ^O搠#ݺ1ud/peOM .5 zfGOMsSX*΀J='1dz`άAkwd.Wj=<ܱ{l\M.pI0n GH!7|es]Qo˼yQƼh((ĕNZS]|GoK?r CC;bݥp%uֵXáe~]96La:;Â#@i6Vzz%\=k;S HddhCٿ.y藭qS6Yyڂ~snC[`3Jb uֺ5tEGw}ŘU XF¼oΉ plWs}xb&A2tIój7:ו>xctLzI<Ĺ 'DŽXIYY'kSw{&Mq'ԊVG؜Tw7ť˛M$x9[(~QНP[;Zjnӥ^饺n=Vܺ9sO=HdV $W7+-:4 祑)Wo_M(9^ZlJ#pv~tKK+ /m<ʥRqN+$e*CW?<ȳeS(n8ݾC<TݫzqT-haSy}qQH^ >G>_Irc4B YyW;Ǟ}]YdyUO +k(&K3|)0\֑v'~bqY̞'Y CZfiex2O8ZUó uqwϦz?$n 檭 N:>f6u!c>8L4aVo)2l-TN*ʦcORբ( }qq7I}6ss/~~,ϒ%3qzĮ#˱{"s־VdB%B<jR> 1wx˥~GG[zVd_av("`/7S VI[~ ~RZzR!֝x4y3?.7p^>(#`gAH~*+eo06)s?Xr?\ϦVW7pn}.M>bkKfxgḳb qRT^ֹnLb,'52!o+_A@F c7h%qqCoC)3Q|>Lᠵ8H:b |2i@Wc_W?|l K a2q1/7~:x1+@^NjqrV",s}ѕƴ{D)죖h!u{TV{zᆎ/?y } |}1L)[rטqBG[9XBlܕdU)Wu46 vE*WUX]  (کw$_m leg))LyaSne"2Vp UIN y,R-ѸR817Up!Lqwi%۳C[0L@l%jepN~67U'$iO[͟^:[V^NdXT~᝹<^ @rFľOj'rTBԤoCʧw3ةl쉺9ZڱHm4jyjm湸U:g aö̽å6GN7ѹdgRBY)4ۇ0q`Xxʐx-:F=w7_z ?xIElWOal ߈H||K2"1#*j\o_+|EƙHvw :`i=5r6ԎQK\T̓wT7_I9\:G<\J?\DZ78R؁⺫W=ysWgw(BbL+)sSxJ`'[vnπG`<1yuJccy=uí^Zeމ'˄}{T/_RL15t7_7'?M:μ?#tYO,QIG$Ǎ:њb 6.^89[J`o(D IQ_PLFMx֞H ¡3e5pK(eZŒv?& g.R/j:,Q`9 -ϮDi^xn]9CZQ4ָp T#.Ksp +y0xti{‡x{9&I,tʄTd]v;l+- ۡ hӋl%q%/h^Ъ*D B^JKqfTΡ c"z-]} .-.Ie: 4CpUvEz.j! š5%sRN/bj[|e-w$IZ]Cm#0rgC[gVervenDKg6_>m2՚E<b`*WE>{l3>iK5-ᝧ4//`\lo^?ɍVk٩t[zF/xLczءFN͟ҏa2D hϕϲժkCPx(x|Kx~듶[ɡGM蛥v歭Q;B%alleM#)e"!"|3F1 ױeFnJzϚڜF9[[SBɭ-N\!}7:͗pX,:Z!Ц_Ihl<S9 Mq k%&U@OkM.. vfnj0@k3hF~ւr涟ޢIFy/FpdnYwнIDZ~p ԆS :46T%N*v)wdq(̇r-]mwtC̢jw,evwmz_"Ɩ}H'5Bx6ڮt2w;LSAUΘ=[ll4BP!%ga$2WE16cz ٮr*dLD0P?"1W֖x7X?\ wE[`ؐ3]Ik/YYO̺.pP^@群5򓡤  maY f`< ywx9vHQE.&J#ME9G#ľBNAN [z[\RfGY Bh&=hH2}`U\Íf4ͮ |?}֛,'xaop$^_~7h@xg)t>ͼ%~yas!rB# 1L9 4qbm\u,2bmti$oICEgy /jMY-$t!_O߇Owwh | %g1v\ TP}OrnUn`80u" 33nO2 ^UiK葜I ~@v6(e:S$AI3`J!kќM$nߍÈB # #F)GV5 L{0QU<0ݪ&j ZeKA_,&m!1A{Tijy [t3C<10 : h𜔫ھzZS>3]g(vO?B?-{ (!J3[ss~z_??/Na"cG9Mjm*ww?qM6^C۾UٹW0p$vv"1_;[(U 79/#(jcd5Y ET2Ky'wrh-jo*J maJyWR ߘ|SǓ,fwW:1>Lb+!,˸"?}Qo+O,:H%z"ػxo@a# w z%{`8MI/ Kw^Tl}2c+X/,XH$۲*:- e5nqqRpB/Ug&zrCa)N v9y&!*;/Žv/ AFyYS=+n&瀚,e!L $Qso)agṷ4dOMu~GLȗ7ݎ{s?]O?~WU24Bת ] ;N?V+ '4^t5y]c2Чv&ϔByV1/e_g5w _\,oroo$RF dVkSWx2W*g?AK0w"etKL=ɥ'm!CmUEWcɗqOՍZ=Z#PȓoFۯ, Xan&6`-HCMX%p6F>cI F@m`TPEt0b( 7qϮ}Lrd!ܜDu +H)i+o}K 四Qz%s^FE@YOT:7Bʿw?q?'o;4)Ҥ~ ߄H9PB~N?aq"ST5o<9I"U(WC[ujTͫO{ rPfݕһ1 Ud5o!©0' HB4 {EHdJXPLɆvLR-忭jRjDd+@Umtb.JO׎KOţ2- M*NNݪe27IN'fҞqt[ 7mR>PX$ +,t8JƗe)q8M>s2hs#|wX>4$+) AA"^Y~9yzɏ8yj3h$hw~f -x,TG6mmlA<-E}|qnqoP1TP|:EOf(< g ωu0ȗ%r{#n<tˁopܕ n־l=")ms"kʔdzmN.;1\-Ďy;>_hv6z €ޗaiG#brnW}-*) $:LxQ#LJpl!FAr\r@5'MHk;G*(i,l2t_Թ |bog k| U`IxE3?!T>L 1 a}En9|<_Ed!@=Z ?"`v[ݴE[iFd=.Nids:N_08P[u}[8& {U->g8CyW^c/(MqPXK]W^PvlRĘ[go(r.ϊL٨ߢ(͞` eJ,#) z\}ZYC3t<J1NFiee1>AB 0 LD^yC hT~!҃@0P=wa4TBp"@kƭ"ˑJG;tPC+Ѝ,wL,Ȅ Y  (?0#[kBY`+-FoƐ *8 D ѸK(i pi4a+EGXkb T, 1t ]4PE/ 튯AF690Lz.U 6E1яJ10(]pDFE-$=ۙiRڂy4D5|7 :2CcI\bE9@u'`V@d?>g2]#qOieAf(GKidƖ=B! <#S )HX~Lf]*faeL Whǣvxx IO#I2@DuqȼۋA37lW4/a<s Ǚl`sr4~$u< v XadGЇji>Xent=>W/EVҾޟ,q|ީWLsxHʢ Rl"%BFGJ |OT)mFid Ϊc}~e(o"bK̘Pw[U(A#۔V)q*h"=?t:ϝϧחGUsuڹvuyiyv}z~9Bv rѱ 3=2vdg2sg$3yz橭C}Z~{&[7g XX] ݼIf0dǑՌihuD?.;FR|ғaq@a"֛+S#ڕN@Dӓh*zUOQڈ x0i  me {<%R\) 5{8NmAJO ԡĄi -7?wĮ [RFtcv4O8ThZB<>7F ɵ-4*G 7Ƃ~EXL&GZ2_:@<+k`4k| N5c~R0;lN.eg'w!~VYp(e`8n~:~OGxg?ىc䍽m9.rˀeq Xy 18MF%[ 8_19u$a ]{Q1lvv*è;".A/*Ԕ}mVl SS_Tzj s5Z-N"̯QyzogeCc%e"ku(ʴE~}l \'VOEvNXJt쀄z&\=8$.4T᧝i LġFänx6oKJ3U17=~Iƶ|_6$0"jܸժG}j'b@,"Mys'j|_t s՗^:\ +OSi]v%*Jgug<1";K\m,}Uze(~M/ls;O4Yk /X0VTפ鵷YJ$Et͑d&ˢk;E>}|"pǿzF$i3C>S^`I8 : L:法Ƀ',)ШmOс>0orj(]NV>oB4Zy8i1 wQ.'N)b)91h 22sR wL:3$U`*j 3Lq}ŇρcЀR񋒡[ʴmѼ}2Wc>m'R4əOi>$av4ɨm%;KÔsaÜC @=rTo(yI*!PȤyS֞Jl*ކݓ) YTbBvt7 Y'n'%V:H]uox&SւAF*maF-HA'vgҍ `$ 6,rIƶl: nRSPYY=('<`YT ȕ#JdfhNdBȡeP1]˞HơT' 03=NS姲f;cZ47o /+j*v}=G|OI}S4p%P*zFMhNԗgLPu'rI j k+kͽ<`sMy| ԾM:[`+۝qbqjtԝ4F_ҘzB̵xj%,d,"M .歠瞧kDF~=[JҩB>O$u _ y|]e)/&Ag ;2(MGCKU#e9sކJ-QdP{a=lF* 2ck4?vܘ8]66h:* 0qQMf7CJ'>8eXxǠŰz$44ZbvX/%fFcT puYHp71PWzjeqkz7,H`g\@#?jWoW0V7N3hCwYvN둦4""`- V0Szc|ߜB˔:ͣ X5cT5kfTtsj 33tŹ)7]odMϣ El!|\ }@mİ]ɣ%@KOkּV]ӜHi 7Q,˒6u LOaJlyz1, ~Rה% s x8i~l ~w ]iY Q=qGђIN2 qLM4!T$2/gi hS|orZ1b/E E? ds홈% K4%t8+J"8# i8T7{XUjľ`3C`Nqj!CmI#8nb~J wvw}+pNŵV#!}΁b;@ =J,>K`[%=ο|E4Q%eRlsoa|FJ '`}ڱԅĨ9n[-{ﯦ񒮕!>%C&EY*s͓tϤ%-Z(ݗORVEURza3S鑛PzKbgV51U{ei%[!?x::;ٝDbfLSN1v૫c-cs/4|z8|/z,d Z8Eu8`NOr-mNV;FY8qZ8HM))X͟e ҒbV)^) ҽXMaŵx`>eFAczc̿8 #9R鷝jvMzZݏ<כ!cIw '%l|wz|8G̗Wn˽mt(-įE^^_sCQn8&nrOPDB\"b3{O!sd!H[|_[m`+ORm0OU;-.8!3K*XkxO0' !ps]Mƺk,h}dܒh=ÅՂ*csSiJ*TZ9pRؔM?XUV* gyη\e\[}rnnl͵&:\Um6Uuc7m^K8u 5|9kϟo6t%Ϟ=[mZ66TÛϚ Ⱥn+m5kP\_mBq3&A 3&A鬮m>xaBm}lhƘ#_ qY6h5ʊ(ci(߇aRV R'.wP(Etduvlaiۼ57.h^ЩE_cQ*y H8ҿ(˗@܇(<0;Fj b, b=gX]}`wLx<+,±>e+E C5X?pF ➚pj`7D^y$C}l+"dP:Plh"g[:KY"d6ꠜ+zOpv|G;l$瓂Ȑgi] jycGv?|6Ţw<2gHx:& O5NWB-3 KѲ;w$ `f]2|B4CUCق\ܞlImv鿁ptRq-Q4")LˋJx>C6&0ur) >Ziv}gP6Vm8q!GtÑmhʖ4:[ Dˠ%•X4_u/ 0‚I5<$S"&"MVPd~h,bxbAXC -t+gCK4sw1ʩ*ިN /e=h@Ab^e/-UO ac<ɓzƷ ]xGY/nu=2,˸Ҥ\Pڕ]IRw$5$6@MYvin@}G(=,YG9ޱj:Yv~ԥ>Z7=fx0JI4Һ uTv!kRm8Ww?=A.z!}`1E'! yogƓ,C>\1mr%`=bXGzEf˛{LazpͱN*n5Im`.Evh6Q܇QR e_fu5₍1K|MZTMNlVx%VpuEs! :N4`D@$XD驴'Pn+f Z.~IPѷZE: oQ$Fre$VnZ|Gұn{vN;,/ IS> 9CjvoDɎ(,.l|FN* @r1o/r8"(J{/Ե\ -pfLurQiI"#Do42rv- ; xHǯǯGQk$ڎD 1v Εz%jӮυ:$4i!=xy3w~3bokE|A9C#Qš: iIJilsg#۔0 oSqvdV@7D %B\ 1 \IX_AE}c.:hTDMSÇp q?ksɊ(4M{_Ix9nex]F;Q|30.\)!VF=G wwX(t?dz+LEW%45H. q'R}fu8&loB0JCQ-<*Irj**IMmWQZo\ X{o{ w9Y9ōr(Ⲉ>]4"J" mxgҾ(nx`o|z#jwOCJ^K(̈:^Ʋn- Xu`X3uv1#6}"Z(ټE`W ڥYX_M/.ohbPadILL@vQ(ƃ$.,p.^i<üQ}48m1'Б48p |%!$1!ˀ2b$DIOt y4Ky!(z@` W5K8a-, [rW~0mG?PƸpLJؿP* `rHav6g,C_=.ۢ3$o(6/p3vp1&=8 Q` zn)=$4CX8 ԡ+W0ɺA D&"؏yPۚLF&ޏqM#BN5Z*Tv<j$ |<<`_jbk< ID<5qd=9xjӤLj3<_A$*T`D:&ԏ1xJ 又e'줭taK#kYN؃h =sfv9ٵ7I]ڀϛv~8&>@OvWPfw>@v7}s*ho>4>QX*סӡ&/*|> +, LgP&D5_qO) 4Э1߆,!V#(v9ɣk! vZ] o2*k/xu-]@4wӖYjH ,Qo m w~Ҡi?a)t.t }  m0Jp(We<C17t3nUҽk]ˍk{ 7l+A@` QW(:HKLD/R+7ꠜ9&^BwbޥТg*VrWT,84GhxG`OT/PWAU5ơ*9lO+q֠TWJ'Cw'm@8 WqO_ L˥Z bDHFi@A6gS zV-ԿMm{.P_f 4u7Uk:fߺ%JDae *VT&ȳdBآՊvsbZw x5 z iveșIr2Mn CU '+0FN#s]Z*㡢o0FB=JP[IhN2)~+87,L D` SPaEf06Kobʹb4 v2+v΂v7"e"Yu^FI##wkRnL8> ^NFg @BM2 aF|(5ݥyAx  ?AJte5sB>J, c=^/]Iw?5[7%X^e;=kˡ6 rlFf ,}z[ŶЏ6 .!7#E- ~DMH5 .@-$6b|!KKۼ>N)ߒԵvͣVH-.cAGbFҙE#.RnXS KRIyby$y6vhUM ;}!x=\ 2N2Qݻ\KK ifr 52ZP0*-Ѧ&xՁN6ݽ澰ȅ|^NncI;iOΨ>!i$;N}$#]ʃ.%=Orm3ۻ~Ġ9@]ϑ4h$>Hv7liiH;ld(mudb36 }?^QCߧӠIY3gʡ'Qql3g'kUfqrnfuN Kݘr|־?MJ$Iov#WZmy0Xh?KWLs ;ubR }n̔8|\l|ȇ Ia+ 1: "*2Yy8M};b;޸+HoxKq1bɱrG"r0 @?t ZГ8XBj6·Lm2:$vnX.Fv#m#& [{r5M/$$kIfyIvI'ɧD~GEz:Vߎgo,K#x8Γ8E'= #`HSJ#B葶}?^x'&==*{|B{ڕ8tNIyUn3XY=ckWXdtI#Cf5gҘU2/H%ffas`8e꺠LPEoh3_9'RY5%Tx"qМTv4($Ugqkfv@^jdwy7Mtwp&͠o1qVpl foA DUۆ?.7o}H߳(`Q*anjA|Ax`cMceBs0/rn{g@{1B{dBwճ=PRy"C n惸y:9/bf F;Yf(t '?ʿNg'_փad7^C }Q "]7hx#צL㉹2ޢ`_0Wjr}bJI  tN, pLfqdZxrqVMidMT$`DGlu$c[w5{ $ /*cfYfpO3K"":"hAliq{*Ս ބ$Lެ+c!M{N xaEܖݤ)vYߓ $S83vyՄ VZ (?²*r8 aAD9'j-j+.DaШ]inX蜘5ܓQlOp0tIĉP =/NkM(-|q->`3B 5ؓ=Wb֧:L٭:b(ƅs!5Cva$0 n}h}GǓe T?a>T|h[:YY_>]gN zp H3l2^ZGv>/I?b}^3u!3b\ڰ{=:aULy:&x9bzoTL+Pd*[8 Ӆ}5/?T?ìAnv?*tra,UmSuD[X}wNVCG2L ED=Չ c *LGˡJGʝ)*}iJ(qV#} }{&ݯ&<+R%7|)qBC8yfܪtHmV"ȧ*ВĴEuR!-J)kAiѱy7j!lRAe]HU9uoO*䧮B>A%P,-AWp:y'4h n#FTC".<(?8(%*^A 1*AB6n)m`%ŕؓ,\`olg Q s6 B= 2Hĩ疾qծ! cbvr3`mLSz$u>Tr'&U&[Qe#ΝQ{[Z`"3tNj}#=M0gS:<--JI(l2TaBLAD vY@NޡY~6E,39Q#L vgip&Ae#|ɿK O/Y0fb12^ێZm9Aԍˆi߿5D#G jdB .E:+vdPr0(i;ZG&cR7*ة\G OQ992bصd1ycv-m\!.EwU]׮.v|dN 36Ni|t'<ʾ8eO̯]' nžF똄~=XKu}$t+lgK#U ˿ ! NƵ.GUGq& qO3iHq>u]*2@V; VV$}A OjD՞""hd&c귨f4ʩ#^pۄMMה kVӸ乕h\FB9I>kn9c1X@ Nq8rf ExzgwS BVS#Ƶr}1N(HAS8Ic jvSl?N? /#a#3 y8,NӃ3&c{@㉂k)WEK{ 8尩 L񲯣e+T?C˗p"˱d>G2m^v4uh>K_Va&abWVR>3U2QˇYI]Y9H^u:혎q~r<~nlmm(q=j1"k;;';5➐e6 Mnh1pOy434Z>h,l8TpɃҪ8`}tX{gi(`su$]> f80FD==IZLs-r@] d0'3yZ1xX$R-On1 [`Vč|;D&@WwG , p⥦}n^ ? ekF(\f QGY(DNW  C=czųUu q |v\͌MWJIQ Y㌎QݖҶYX['!p mM5r?AF27V"ޓf(縊Viny%|2ݺt| ue/9%|E.8_[Tߐc̜ Q87(g 9CrwDžU]k>U "V_thْjIH zV>GȄLU1S'UE҂Nڦv"oG+.sg=%v1((ptwDo!"ɣtc~_m )].jr0 6N= =L:Q&R("⬀ &R!kg#ͬ@8œ"t*"]b*AVΐBZ/v `(1f.u@Ef-mOygIhұONI:Xh BᦄiqIqYl\$ e7 2 b!:P͈\h(ڌQaÍhSMtGl2*iy> 3(uOf(CL*!hkW ĤVm#jpi.3%_'_wW;5 †-T!aL&RG7A .NxU)+RQ9-&*뒴f"1>&7}5CX-_)?\:t68\n &z0= '΄8 y$t.9-yI骸{Yv=)euPҵ7Gc4tP(,EI%ENU.ϱbK]-H:NW;?+Av|swÃȽF׳ӊ7*H)P bH;.&}W;QBn3 )]gP/^w p.!e -Hd,T~d{ε3a_PhGdP-"J8YG22GRNJ)o1.MvwԾ-MTDRXJҊ1ۥ*9E!ůrH[ ׭-pW P4 nQAӒ6߳L(1jfPnG[ ;1Dh¦wFk6' Z=Ѵ>S@e22+Б:: :5tʧSuj|mVFM_{4} t6- GM‹XDe裣\hn°keFugUڥơ~-M7 ٝV<NY>\2}9atZx9 UK芕M`i4A 0y` ҆ߴ1!G~Wk -U +w~b@.Q f 87It,3TA+%fŦ(N1qtojw0<\kZ%mhtF3~+=32bP:[h]~GCM)S9KM ICOB:mP1˙E5yIhIOs2H[fbyc`m u։»$;@~FUE'/)v)t'_Σ_hW¥*M@m8 CV_[Z볅AIϨG)ď)g <8tIȤ5&]C"l*;fYÑ:i:ROĪ!yMv^!dVA8MX8:&X>r_tK .^'4=.k.8|7}VEnjȰ}oe%mǣ]GnЕy~]2?@y/*#3P Ud=535 ;po?O~JYL0d)^`.uϸC2F{sz_Uog=@\ !de叩_P%ln PKktV{fm]/|;<ɴhH3&X_T{ %̩yF;#i4K2b@zuvpFt --e},V37'}ՐVJubNzݳJvPh$}&gk+dtGq?)nd8G(ۣ,MWCz-wGe,W7]iʼn[Z½TՉ5M`<=)rk6;Ċl;%=Ҋpp';sˉLR] pvt~ мc'Pb*p,mG_NcGW$q4k|~JM%P^BsybZ~aa vܫ)\m ]ˁBZ3'oh5>Yӏ"60-Pޟ> [/.~?;~f!-jZ*+U O813ѭ [f17YضhWVr.A ]o.)o1/?hdL*=%^X'WCWasyHr}8#>G -UϿf+6_r8KbFyM_ _j'|J|(ĢLU[h=-ݢn*̼JINBf8D4‹{zKdXdUeoiJn9;\? Izv<侰Ȯ_Ja޻fcCKX+ԙ3wR Mr݅vL{\{i ~)}HULmafWTs[E2_Ԇuݐ5(4^n6a-N&xO'jׁ%2a' uӃ0_A R伡de?yPS}h>5 E_zY)^ͶW=."RS尟稜Qe鋝 3$8OӍ~bZ|)֭5YXMe/N3 9ol!,Q68߽ tdTp.}>o󨪨03ŏԉP6:Ns-F6GD &1=$k1$lx^aR.(Yp;=j&s\[/X(/3c*e+2-ӫSfR%x5m^kv_ോc<:^$hr+b "$*bm'pP(i*~Hߣ2k,}27LMJf,x)!X77:p) w]awqjFAA+{( i;cE-l jJN0k99\xK7-M{ ]cڷ)Fhs^[൴7Preo%KkTaQF؄#e'Ι=ڨW|jFv!b>,bv*\B oj9Kjbߧ@wv?|],hߊˀ9Ei_Zbs ][,ٿ꤯ * E%q|+{G} #V[: _O:ovI wh7{޴O#9q1\5.r!NYHk@f~S__[D!hIU:gj?&ROFKҹ83-e hJ|WQ]*͐켋/\:](Y:ԭɰڊAvi}jmN*bF~`\(lLwQ|V-PUuį]\PٹCyPSn w3õވhH܎OWǾ:*Zi~]v2,Sy/G>g۬@-]f,0:uēl0GJ'L ZMZ3MTYCʮ7-P[0 QUyxQ^*_ %q߱47o)J}sX;z|{᥂"GCP+ҭ1U?djo$ub)aeb,EG8~lCHңl>ֶ/( F @:S*]6ؾ*BؘwMb!#Y>=|m+%a·wEqH5 Eг9nFh;krdrJmwfyEG}ΠWb!5nCw c>'X H-(sLs$:߹?*Sǣw:&ڋƦx.bGdv99aNulb"z!ϗT +}utt2S7wʙd:Lk̕کAK0Зp-er0=/` +7$T.y淣zq7)4{&8??aqXm=?ȳ4<AUNF>#a&TY0h 2"-s.s h4sNRe2o9o݌0kL}a%v'occõ"6IK&, 9`ALk}LUےaUE:1f_tN o}W0 |M0 9%}oS,˫q$*4\t!=Kj̒f|I) YKV'_smqԊ 0O u vHkQp:ka@n'm}m(> xFZ/O4;ڔ~ _Gh2f81u,=4'i'~t;NGM귾zGE>oK$K'c@=vb@ndJGIWg:M;7z)K=`@(rdoobĜ|OFj W> Ɍ>~m|RXi*CtQ- .ܜ9ULɃ֟Z[ &EWWpkLDEV/3 (1revs-+ò efcG`PƙztW=.`̪aANyx6HV5qck}{kxv%ģG=+2HdH8"sϔm:93_7-ҙف0wvSO$'7zOy Oѳ7yN}2^Yׂr\{W[(GhD|9Ttap.T2)f_fw3`?_f] v%|7`my\Tj%/g+HSvj:/xeh Ya%F_I]?r3W^sU kX` /ڢ;ULF.1,yz]MrƗe-?>(ѱP 8+<\"X^A&dOɐڥw2;0_hc;g+Ǜ>/-)azG_s?56}l]֬4&cN+Xs7R[׆uMt。 oWz0,mf6N޴[W; U9 fwUP8^=<ؔ:WLLxB*ɀ8ԣ^7a(t0%ĝtLyUVA6Cu{`=D+ׅ󉺻ЧYE;ɩe;DmJ[+]Ees{5*]v*2pnސA)G8r}B\_i)+ nߙg'{*+Mw,xBKni>vl<[KƆ>CV6m ]`ȳڤ%/W4) b1Zt~H@Pl*S~)cR{$6T~~Dʳ32&+q9zh;a4 R33 |66,[{8C,-}$)I(FuAq-/%L+~~?dC|vRj%YJq[m.I_9@ɎBvK((Q=CNҳ /}ibѸ|}-w_5ARljH!l/O_d%2VvibtW`?4z\ZEwr R!|8Ql"t6+D]3nKi( )²=H7ƹê,h+jU&:_tFvV<~/kKl^Yru=ʙ/VQѰ~?guyzZlDÃmEʟqlTA:,TdȣTsi(!ǀϢQ6`8>C3\tYsc;<ZH͚3zYi ?D;C4?".6Zȳbet =y)T0j_a]| Qw."6 6rQڱ#]re{lU#E hC7̓jtǸke1+#ׅӆ=)|ڡpPswW p XXG~ϸ$FWrHl q=j uoC]_L^|I?IPIV_xbr?COpo#鎡*@ϊƷTOɀ+$eOt]uKKuY,]d icǍgǙgVWNHW!KA <4|`(z.j[[+2a%KB;3(/yIMxWʺX(앲gxK25.3#BhR⥛|8(i9|Tȷ{գ?lXhi2Tփ,\UMHyS6ו|hOoukBe{||\[}r mTUu{cu}s}jP7gV*ـ8kT@?kAm>__X,8d72f Z$FZoN@uCRL+f2kFBL ՟d_<±6GSsp逇 <" î>L%.d{gwv3ⷴNӃty,My|$zZc]Ǔ`M#S kĀ}a9շڍ=D16q轫k*q6kKW5E^B2FݼB扌 =@\ ~f3uV9,TId1VTX_8?fN"HQ`}$8@߯:h:a}CɗdiTIKK1P^q'e~Gߘ -ϒo$&'y+=&w&Vt⢷1Q)И6-M#+ݼSoD 57mMzjHcIR3(aCd_:H,Hr 0Of!<}aƙC;fڅ>RV#@?bʴgL\vS(ɮ6Rm>xR $E/ e-sh{30ɭ WŜkΉ%bPaM>*@ {#|03W&y뢗@fzn8,8e{=n:YMƝPUƜA^ ^r5N ƘPq9&h+uj fś< `i(=i}pT#kE锡]5\Vl+8gRӯb^Ncm~Ae5qh6`ZOj1 TtBՉV(v=R[|(.4KLvL\kHZ;5a"1ʹhħoҷGSk t9x(Ǣ1st<\F K4VSƕ݃TV%,AlSug0̹-K)xO-q=*Y%IO43%gɧ93xwW4ʜB". G҇bMV"xźQj@ qv IƍRQڥpO7 KS-I-В-$Tbj8d{g bSe·Y`txjJ Uj('i6=7)'JIoMctK,\MR@,T{4G4CqHT'R'o'5 " fdʬ'~x&7:pQ|c¨^-*b me:)ৼV 5MfnI(FCmު_ÁNiw i[:P5Jз]6[P[f۴"Ҕt[W#ryf8QzܝɽZ&_Pї[z+6% |&DDEfAsw&ZΈɢBV{mF[@plrL X,Շ 쁬ϽQ[ BP W b"3V *~ژ#K|vW6K+09ISa$kTr_ܼ00W5r"wk%?ݴJ2v''5xi⼆/K, 2C M=4-b$wC6L\}dZ85a)ҦarUA]:~$l-JP+?r+ڹ[NCmB0dۆYZZݏ_T1<37ƢxK!g# eWq *H5LΎiTWZ4oM8"勿^77q;)~+cFEGU ɘi>9û,?hE(ĿizDe-@ԍn (Vz R &I4kõV|dEhZ,xM{H ke/-/P09 5H#g&6T $Rw ǗB!1!w&Ay$q}YS*ET?6AOe$A,.C2{6cMK^kADVLi¾]kXIIul̙vTn(HѲWZ xRZi_85J_h#,;4KkLZ?4?Ju[?{n76d`.! FV\< ^B|.7b) |7**B_}9rhh+\0\ y9,ij'^oT|sX3IS]]k!!lTGuHʤD{|NÚ G3`_K+ě P54 *=ZD'i&+.oK8Ð %cA̮!7\oΆ!)9P}rtkY.kX(NEuy?$K*&MUj2F e?F heB yt ~J-( [rt_U' dQ܍ΨEKkR,;.޸nu+7̈́י{TQWWjf{Ͽ{^عl_ uE$ }teե)C:@kU]ZChGj;me!QO8*}Y5kkrt$WE=!БڹfFRnZwhHUg-1Lps=oZE71I*mPMvB{6-ޤ",½?.T*oR~PDEe 6+n[/]{76 qK+4׼[RHWƄS+G?da:K. K.1)ҊzCW\"Cq)Ͱ=%R)9{8=*-@[J:tq[t|)M#6UђL7Tך+nT$\ƸՕT@{wW jl.1Y 3AZ;c0%@ "ĝ7Qܥ2#2'oI}3qЭ w>BkS<+գ{5bI>Y9(KWd9\,|ax&,6JSl=xH._r*ZV (netbRl5l.g@{>o 4 CHf;l0m_GʤBRyP|X-/zPF@Prѵ-LWMrS&}F(##?7|}O$AQOfiF+-UTܒڃ[3NK324(C@{2h=@zq*cp֖H(V,»W@͆b Ϭݷbo4QxwX HxPIC'!FhC #R lS?poR!Ɍ b4?s~n5Ob \)CAD i -0`-orP*}5ft]5tvNBVikO6$o0"Aak";)-an7?m7g+ Ϙ^@"6-9Lҝ]BKK>{)SfvDZC㴇[aP 9iB%7m; Qy>noe!󰲩vY8)b8!-? M;[svIlKbefY(e?h>zlq殃N%y}u bG|X Qt/]bEf(=YT)rRߠZU@PD>BYi_Q#wNð|oiJ䍬jHɴ܇Mf#*]L²YYY@Ԓ {Pjfmګ!@ { Si_6tWxljx>vKiba/ѩ6C_Nʚ*~L7Fi8J;~N l4WHWE; SQQKe_QA%Ov~) 58nTߌqy!,'Ҵq~*N^6 {\C*3iCzDc~+GQr#ϰxpXHUVF\ Х¶GN79뒆3@l::$J6}X|^v14Ȩ4&, `t;ط|tm?I*}Mm4p:LPB@) `M ]wɭ5k22k6^*7 ;rZ>5n eKO+wPokKL,z 4= xӑ!cٜFv k/\h V˨%$k͕V6_J{hQw.a$^j^ssԆs|AA4_ k5JȱCËⓏJgRYڨ L ziuu zWMƑIbrHO&W ?DʸQv?eB6; Y.ک| E4i붑ލQ[SD<[ibD(i_vsʘ'>I\Sh{ӗD8\t8Șޯ<<wQ, C:EírR<ѐyTW"k.a8Ӓ1%BKqc]u(W2͵@H˜T$64]tn\pL)1 bcP^֑>lg. o*:zd+ r2Ҩ#Agw2:HI8AA 3sҭk"9Rw&h|L)t15z}:Vҡcn9xgيHlE.m`hE!|% Dݒ3g[H p?ZsIPls1!PG1r&MLB sɱ&t(nڨriHU,n Ps#d[Y,z<袼nݛM.{*Dqsr2(E0?(I\&xY1wb,zpGqF [Z p{ZD]7 R8[1)koU>uq##q ۖ 3u tыGyۉxo•~;Dw,`'{2ŷíP r.t( UT4<ςDƔ #~t'_HEϑ^~ƉBgOOZ (I(^Ň =JZix\m; i Pi(BM=3YSom;D<~/kiG6/-(v#p9tm+:vU%s((ʔ+c/d31ȥWQDϝ#%k%0ʱ.gyR!3z"_`mq][W}>-B&[ش n/ƌ3z?oⷅ cgU[b] %K ;p j}eo78SC0TLj,-p-HC:nn[n͛aF]DVȳd D.>Za?B)c" !]TH=yŊRS!%0M[66 xK ߣ{;R;y5 [xBq$7@w<+nUsD咻" i-1gtȲj W3xgF%~ӗnjhs_ei1K1:9RnZ;*ZOwqon45##i Lm@8t"ze*ft@DjS;a5&x!5d:.5۸vAx`2= Dcp{OfI,9[F)!+=Oܫ*Hu},rnL=/Qs2K7M` R%z {atK+^ZG#(d)Bx\p^:|^bUt[Z HhqXؚʑ@>}fvdc>xF "X,z8oY~TȈ~!bkkJ*"S692کH|~),D?硼[ 4>*Y "uhrg &5'zC,M붪J'Ny|]GH&;B;㤽Si`s,'0w&H =Y^W (/:QJ!ytD^PG݇FۑIufGޗ6sVw:vFjPjW\*f<_MK`  kM_?B@kZqx5|k=u"[cۣA$k-Γ/YFA|s-ЫL sa10HՀSwMY}뵾 !UЏNç﯍RIF%f]JR][n@5ךg(BfEI|]8D_7U6݈xPx}}_ )1cB&WT=whpBU5BZf\n>]՟<ޣMQ̡ 4:AD`$4wղJ 9+Ts9?0Fk9ױtXu&W~hx ZGrOuLUjhT",D~> qtȟ4DCxa6)LiIźY?ebYrV\,DA'hfɦ␞K[<[oRk,#=ba1!sVȀV͋/7MD{R޳HłRqrh] c'(;1,~5hMX󱷙{0m@KGodx's! c~Pvw1zTIk[V*H8(r#RQgaآ@fZ)Fɖʵke-$OQԆ͐@u];q )"}lϥOO4>PCm] XA|h@` C jC6MJߑ:Ld&cTס{yNbq46zޏJl6c XLlb?ݮU`CA>=fRZgJGhǨ( jnOyQdAU+XֆI׬;WWf%sVqBZ2Ise˭p8V"]Zآĸ_~{^=&qe qvޒ*[1P/Lp X@}W<.L$3(Zʦm|ƛ%@2K'pD:ˊصxQ8;]]T-3#.-6s|{Ɛ ߅pG&W^Ej> 'yN$7 WIƇ;!Im(D&;3_3<~e?؏̷vFFey, %ࣼ;g6\ޏf>d vO\2f8|aL8REju_Cd=Y;BHRv:o2xThgr6/6,kwe԰lWXH[Kd=uْLV{G% s؄uI)EW{Y9$AT:Bxg{Bp^Tt$EQ[P\{wEQ)JWͤJGM!X8B6WNJRӗkTWϞ>b}FH1Tْ) -K:#-e Wd){Fe>_yV4LF%?)f#x*ht#c$ e,LeF`NƖuOned l k˿Kaeҿ RaAʝhE1XBC2 z@-+#/z.LBD_'s#ɫ\{xS%Ǡ,*;}&`D6fH m!B-dD8Seg3w=Luz?׉d$C|^_7jBr2~ $썆AXIݾ U=VV+MV阓R:Qd2Iz˱Uo,%o2Q_.mVzybeY,)o)/D-p'S˴nѯ黸yK--C~E V<U8s>~~{=+wՉV4,!.Fn~ww *O.R_<_Ym66k3luNηw~?9?|Ű:a=‡%B$dHC5˨dA2LC̖⭂7E3HP#h82Ϗw:vN߼=yv ><{xrx9}ng;܊ }H(bAqjlUpuZ`nܛq;nT}q/WMvQ$avzFa{ %,ȢHs$DUwvŰ,&*>cB!M9z$ҵ)IR_ZQG~a&mHz3W)%=#Uˢo*)/ tYw%π}*Zl P"̹`I44:Mah#]KUF? K05b76|xMuU=)%MM>M0'^hnpd^<G7Ds68qj:v[ 2$c膒◑&b 0:Wg4_x.tA%?w u?'֐v4Qًy, ^kYFe+:$)m9a.XvˬV3ěىݩDH죜c@gdwQ3iv&,(f 5M!|PdkCRBl=vaؔ+LTMje`mәXO4_|-rZXS>\Y,~dAomaE%,F0mfcQӟ~ ?-/@@0Hsv2C I/7ևIZA6o'Uuݨ_/ ޤP I-D~2HpU$[g q^U/z 8D⅃7':y I7; Pu& dBò\`&܀-b4@Փ,VګڟDXe+ivˉp7Ί` %*O5s~~!3_z;ZHX\w3q AͶ;2k1J(?BvHI21.ĵ?rkqƏŀ{]Ҏ*rmuE\TUx6WC4sۂB;|\i\ ' ^,<:1Jq٩:x;G9&G2W2|UY]۪΍&ߢI^r\VOR_t]i}O7S4g:ޡ!gV$fiv507ic(M JPKɡ6|x<,FUᐂQ%);x8{2p>,L-{7 &uꥥM1W>\t˗5]W`!pY姗vaiLY. >1nykL:A;a ~)@ x4 J펤h~{ZcjST(I{T2c:^}rKS i Kǥ_$"Xxc8 wv^[އ4QOc~bFvAbړ5w("gڕ3߇nj~‡4~gLh׸͟ӑC`,Zy {hC~|F 9~yc:~Z @}X:_;?1ƣI6Mm}r FCBB6j~7!Yz_niԉ}螨r(:Z6\ IMp A/ 5U&"!Vq]%!J6$ z(IL#Qucwq7Wr'^ҧ̓ۈ1)Ut""i OE)ऱ\v-/D|DTSńgLҁ[E] 1'^7Nt-@I0O/ ;i3Z: *&>ˑbItRJ_Mq ߑK ɠ@+;P+0fEl@vwp1 e\yR\e>HDG>J:Dw XA6"&!zDrOSjz>D'P̼d},eߧy<' ͻϚjyO'\?dzo$ 4kw_qC[p|༯bRn) q$X`<\-K&]Fр$=*X?BN 17'^Cgk?Ӛw]/>ע%|Ry0V>j]iM1tzHӍ] )htd2@' d_̧iybJ,R3="-o{5(9B 6#k<jx'pZ} gH Mi?vb9 ?wQ<4Y/?.-a/$h{4/@n$C`wu#a )Lcť@A"+w͋&}hm>ՓfIz3{`Q"ZOGv.ei1,𡇵x*U0*O?Ce\E(B?;aS\˛pM9?Zups i%FhRUe޲6 q/!L|_*F%ޓ:Lz]0`U7h[q$xZnE?WdM'{#Gu]3ǧ[Ѣ)f+fe> tAĻ=}mj' вcO:Nx6Ź@e_TuW9{"xGW>XEH'x|\ q#@=j][kE0!' GfjaxWgژyױR/ĺg3"9` } aqXKKS+hR2=G?z$84wPJVbN!kj yĀ3$8.xnNYW>|ͮn2mvw}*MZsI4s=A(<`~,S; uRG{$u;Ŗܑx&h]ugYtw4&tf}RYmf}ep %U o:( +ڣ8Ih6 ZB(g, $F 06?E707)y4lؗԼBmrʮ]D2 =S8i8?I0wʒR$6lSU鬹~\ б(̿q  c_cԁ&29J1BЍ(#C3^{6Xˡ#*舛b]ƽ RG\XVޘ*3υ " ff>nVq\;&iGQ:Np3MI~e=5OsP+?k|z[ũ^!-b j3W ;4^6ѥat ϮnŁp} t +$,HDtb ~S1l6=[o>_]_K^ÍxMcSxe19x=$ &k|L к 9K=KXAZ>.W6 |]tăL͇oh\ y2N8͹Bsw /Α> &O$7w[o :mM߾OZB6[ݒ9_m{\HQ&Xzb;= L L†RD,LEs~7j/-s޾a°m<=^Wz<{Wa;: ͊5C5N~;Y.>)[c {b1&]A [{񓥥o7NIUi-#}ajjI\vg^5q6bn;t.lNe>~\ gxzu'E)EId^O[Nߧ+Ga_k+ZCq³YW_?۹ \y0 \2Mx+$ w@J+5{}A=n$ Օ6;jN2]qQi_nb#8+'8tuHnPY_vII1D&sz!(~2[ؒ]Rfn Ilع73C힔kx=:]S> mLݑd~#AkQ[*owZKA4ژ;hsv']5giH{;LQ7tmnW(,}0T0a`!+*ANA\r1boerPV[gZy(ݗ𵘡.W76ʇ:⛤un9HONP2}嫃/Pȫ%ﺍ=A7߆ %_n,W x#85x+w؛~MP\8_7u'(!@Ҧ u3gy"t$CU_,Zd/Iv=H IZ/bz= jb6si9=tύaSTp&g3|#vÁۤ_p,{-eMr BbkNOe*SyMA#=auz=DR>iC' ~m騖h S^.34>5μ}_ßW_RWXJ|5zFbBǧ¯e8I! /}>1ī3aoW¶;` r.k|4> wmƧo/6c]xCNYPnN(/K3亪gg)컙δkn(pNrh"E1&ǀƎ'|~/>C/(p#x } ]|eWI^ @K7TO 4& |*AMoяwmTgD H}`uG[fw뚼_Zšqp* 291؋DM'^W9Izn'LqOM:iGAmz*'waI1;5T{F[E%5>sA}wQvS }6o#|g W2́(@UN6$@O<9f~|os0Lwdd-: aF~w^ӯg;ɁSĎhjl_ᷯ--_iߟS9E _ VYnh ӳnFTa ?> Ǘ;dcYko_'JMKK3B%4}Dfv`OւXܷ' & YQg>εɨ*y՛ާݷɂb`=x4(d$ZEkuΜ M|hSK#zSg,Bih) }? 8+ o![IO>kVlFyu YH6׺\$_E8ARj*>^l%g&e_;RDMJm)6-}Yl:¨[qi޻4PٮΥD  bYUNwN?J 7;mt; /% 0/}-^*A2h5 %j*4 #ir&g3.~R ?`v%?m(oCޞ% {bZty]c& ȄZ@m# /v\K%sb҂jN"M` ڡ/K p |uxj`?P9- A0,IZ\ч]C~-? 'U[ߑoz`i5{=1govA AX}TXOPiA\WOnPALg3v/&xD3A<>CȆ_W)Vs1ͱ褋7"}Kʷbu`Կ녗*hk 3mz.t  askvzxƺjɯXI6Y&0лǸ:$*' H&3K Z•+i:_Whz7'tMKKB?xpln􎼁Wgd3VRQSsU1zᚫ:)3"^ڤ }1AջBW"CQ(5oFA4lWc՚D51pb a yZsAcg_zp6n o`rqhLUן*7po.~C&<7 =x( R 'BUpvC;K\kנ_Y_ m&uU׺})Y^M/ (Ľ\YK_WuGy ө3;k=myW 7F@#5e@D],: HuJj+^IC D* 5zǾ1|)2$+._v5zvO/τZ 4-4OgXL$!+Dsqny2:h/eFW' ;0hqSڈ뛰(}} ݿUҦl'F|iO$\oDEѥ7Zn˫›HSOkrfm5 LI͟_VY/epbRi,|/ir n^`xgHzwRd NhqIvFfs5!6$d蝗Uh:&,x0bh2-]ˮ"EcLhҋ'fP2;Ƀ$Lf'wU}uF B]|Dnθe3XZS F"sMdʸ1MP'͜Aݏ&+[EsvuؒD PwԮ[7 |&/qdžp"GɝVĀNNȚ¡9(}PzWtzaS(p1F? %$B*ECUظcLoEۀ2!R]~.+ y> g㼟WGz ~3{ߺ1ct'/NLH%K=mI#y1ƅ뱄7U{ U'QO:Ӓ)J НOm?\NS $ςB H+a^ MypqL@r|KzUPZ@|ǻD +"_MK@دGӁ@iJߥ&2 DN"!q+棚 FV_dվ6}y;b8}1Aw-e8*V(uፓ٤2DQB @9N7"^؎]o'x.aѩ%& 99p]0M2gaŎٯ]=guL b9"d(Ԋ^JIytu8t2wDxVV$]Ղ;#K黪Wn_]DjUR/7z-EOSWrfqkO_z`Vy_qxP\'o9IL+jLck@Ϗ5XZ6큠7~0RW%yR+_ '=tzT?pJ^1 ƍ.Sڹez}1tEm8MVa\6ylh4pa09 #p9 ǰIo  {E chz] X@ՠi$dx(@) ]PxFۦg5y>̓<(5M ',oVZ@mLX@Q[SUK?Dop~ۢN᭚4ӲNѭۚ"3z$.(QID'$V=uƼި5w B4xH&%9=VE<Hq&ElAA|>r?j)9@t(_z*m9@}3#lJ휚EoqWg}V-\菼*Yb4 ݼ0柙hĄ+9{e뀹q2-I\.ާl4g;`ճBZqЈwh(k|TxI`,]Tr&sb?¦ӂkk _E(i8|t۠{WC;?,W067o afWDũaC>f55Hܨou.y6R}{.KBo`fQG Ĩ W2|+t/q]BlX>f1h&ɡ7'wknr=\sV<`>T~6!o&ȁ< kϗ(U=/{%h{h{;s.j[-x TT&%;}#)rS)\TЎ&e7FV!YE+ⱏ>*mc>\6aUwW-a>kmRY1yKcvN|b!lCmGSɨXUJ7jcv,_ &&#ϙ>9+oNc@c}'u& svX'*0&Ƴ5_ *,ƔqVD-d_IS`5? D3cXu4&raa?Q|-Pˁuky]d!)A|G/è}s .-P`-E5Si\"T h/r*u$;Z;쒑1Wm8aw4} 1څf}ZL]8sؘ"s VxRО 3 I9hDIXОu3$ ړH ? f"DF-yT?vtx~ǯ4( kv:;hi}g}\^8jmR E*mFONO2iLdiFσB4DⱧ\¯7d-j28))*QV&|+/QҬ~qrXF8eqoʎsǸ{]`ąw'X oچ0W< YVOl^=%Ld x6{l&\d6'IM6œ25<""5V<ʦb9S# F_mLyJy3Pyҽ_ӺqD~w$t8r\ZWj*62j-@oPsңw2Z׭OU; jp,YHu}璏F~ CB4va>)':n3Jց'suKr Evv?(gVڦxη۰#YnBnaX'ҿ)_4 ;lD@gy0bDvv>*tE3L _d"HC5=1.QqI𓞘>>2roh]7Ywk$ f*?kAg9}{#W{ [|>Dr ?E x6r̶̠PSOV82g0K?0toL'>~Oop: +is oݚ jknb` ݁! l tU%b?.YC{l v=@I2q-6l4?:>Tզ൓dSHӶ6Ίpz+}Mw<@g0Hq'O.|? Ng d$~T Z{ŸĪx 4Z d#w8(\fؚ|j%=r!֝?[Fn|}q~=Wo0pM|x6iq*dF]?{YKjs}tmaoc"?/NͽT.{: cw/1*${dM+M**A<19{쑹O8[N[#;wh@v4.:}z q΀hZ `hRzF?#Z:K||~+1veU]TL(BP8&w`~. |4$t r@ acS*'+z|wc1D;hB|[3 բ.jS+[B '?=o[ls[x.@#DQ3.|' qc?P qBVea΃0YŸOWȚNF ȰM`^&AensHe|ޒ3"_0nO/Rfi?Z¤cL̷'bj\}37nT1]Uwnv;~^9̋] R {WQ\q4H 0/%#;Z(7t638bI1C28}'F"˪|tA=3!3w^@{夿st4FX%hל#?wјLoD)zzH>sk"d8QBv-w&^'i( "^Fӣ? -1ZI t~G=Dֱ E#tӔ~OpUH9xGÃ->=E!>ȴ+Κ;&HF! ye/NS#Պ̋u!.q~K/E02u!0A@4gX<ɘV#V2 R;+v{Up=Ǒrwk&E2RT,+{53>LSH17ghCtғĶDj=hڶ5^>m%0rz>ĸ[9:sқ*F.f̹Q'!Syc>GOԵyyz#nLٓy* pa"%&:@kl̂_ ߸^f|eh:Ȗ7ow,(yH joǾ}1,Di,g3ḰJ8G| 4$/ez0Us:Ay/(ЍߗPI`@d\3YsNβ}VV虶5UA$3>^{}q!GC&@w0 ^0N8@"p@%o,)sϽaԟ'#y~ VI~I1B1ڌMFP9a^x(XfX~u(J$u.BlgWn0vsIXj) 1,Pp=n߿Ҙg 'J3]4-t7-__L--ҷt6PqRPL@B~/)v70$qidߝjQ6cYX ou!Tud!#l_ha|{EQ7H?Ajfe7 P+o\<*[{K<AT~=Wћ#0-\aKэ+48X7>T'5]^Na{XoXKZI1RelDkh(m!e yW문l+fe7ѰA, GjKd84JNg|.tlj>1L+gpY59؊ ijfݨ0^λz1j c&b"|G/m)%k3LVJHAz\ϟaHC eBdYuSOn+XǢCi(y1̝ 9@Oʝ9~ubSݖ%L1De7̇FopŒrC5v1_t^EҪ{L2+R>] }Q+7"8Zp !WF &Rr4'u2L䇩 @1f D&X) Wf!0wY`+lэTeoX7ƍ'\ GWR G=.<}N|N{ql/3I1y" ]8f +<%WDj`QF#_ 7y\lJQl0}yKxL=cKFprv=pD*7!zcp74O<hq+vXy$Ga/V!o\K.wK+d3_ޟkV {{'wld!CtVΜ^ܩy8z蔅U-:}ڡ:Vꌮ;2Gt$w^=a\'QXPG 2K8􇸌nW7ECX=%G:2[Vm9Q* }UQ;LNF#Nhwş}hkUKHVc6ṣz:xW.jBFǠj&L?$tj_>)S6ORl@ZlnHkOND:/5<%ye|$"˜#€C (˧{y`~,z5)Y,b俓Ŝ0P?d-1l˸ƍ+lܧz6΄K 5`Q.];(E7s4̫_]n qs/y1]7 3.?4h~跉iv0]X rgIۙ$J ^iO'q3Qݪfb\o kEn܏<-Vla@VRG}$Ux*qOF\"3Ng+'qo/0+.f8 bQ~` pDwK5'<>G͛n?L14F4lf| #=Pɨ7tjAL> Viϭ S3UέnB=/O m?e @%8t&ڸ˃D8PMv\'p|!3<Y"L.3>xtYp0; t).:ysZôwUA[D ,9Lyw﵃[F8&779 [S@=~[q.ۛQ) Tv$_~xq-]&hdsƵwلr5 n좇y&\/lĶنRl կ"^_b}QrX1ez꒞9R+!=!7m!'7.|5:@&ܞк-R>ZFya=墷7Adn)=Vv5zb!WB s3<2cxnO?$"RulK52%+r 7srytB,gσ2kbk+" $V%eKtwR?4H3((2_8Ā߱a:0 y] S1^&@S l' p^v{ '$-+\w ]`*~4@;I)]"fAhoɼ294ckj5;-|.4EE3;\] ԁ>=`㢌#">kmxݣeK{LlF;7WacS\t͹|UBp,\RZ@'p50 JC\@7vcb4\1*Ǘ&EBX"O׭?W\՛pݏ--pLodB;z} )yl"-~*c{{N]Q>YG P}Ykbwg)1^yy__۸גOe+J΅(py 1\~_ *ؐPĮB8eWW p ;Gg{GoDmb)tfۜ!*"rĢ}oVN&96նWMFS衕0_7[? 0/Q@۾/߲},\z'ŀXN|V_a,-iu2}mEֹ}*2ˍ:Өdi`+8U>H6d=CA_vEǞ&{iS'wN."z Hn筣M4TCt%:)bRĆq`rB[Nݠ8Q]2~Lc7tᗒ=WS5yWfѩ#%*SJSb7%nX`>$'G?p[k:O\lJ5D0udXusb 3u *Ak߁VrcEgnU-mwX ]ۮ[Mqk"Pe 7L:'M4S\u'X<=t["p$S9TQ'jA>pdž#9`H(|W"ad6؍%YRĞӜDov@q~yhv\^UۻB%Yao,NAe?1KqA#P.%SPdjIٮý48W+l$wB'Gvx:t0]"sWN~DpUhWA1KQL̬(ښV~ne%O+0-#AOלt<82|y}z>b ͠am0v*LiǧtFMpBpVe.@u0 ?BMkA50W1%<\z^5]i3#錪arS5u$d*EjFJ˼;GѲ$J-IJ-Xȝ0ޛ>:|0[O|ɻ/$LΊ0mБTKeSxL9)8ZA|y~Na:ݺ^TO(}9S 6LQ(P[@jJ/y;5w? [GJt] 8:z}T0)ܐvQ,:wKJUcXSL޿NUs`4ƐhR)p\ŸWێ}m+g-+O>`~ISl-Rfq2,}YҘGCF ש#?Fp{s!H2jsSM Bz^7' EWr%9Sm\IUDߔ((GWTmciT^l7BD40n5xajpakg"栵=偊R {*4:w3)Gh~lh-8#*0^YwȀpr\Kd5V^DF$MOTC3d1^41oԨqoGwÃ8'k]_9+ m8b(!=S&;V꠰捯 +,`Ӱ6)8a"Td Yx&*A=M\wPF*`dj\_F#tMj_f|se~9s#Fu$U;-M{~#9 '(7t9!9;\ hϿw6zMK;y k<.:WPQ={Wa )&=yo''v"a\4ZѢb )ps)Q E$A<ݒ*2AsGtTW/)yHf<__p5`ϰ6j}Ov+J{dyH2WX9כ?[22P4 1F)N Fqx}M)#J̯$4eݜ aN?[w$y6]p4 ivه'L@v<7U eEޏwPׁ$SF9w1Mx.ɰvcB ,2d#nra6wƚqt0 Ή n8H"ռL9HG@*C:-bO" u0 M0 /M A ! Pze,F$ITM|u%B{ۥj8O'@<#ݔIiF蘧jU( !n*/3}o $~GM12x~J/@f<4J%+TdT4?Wꁻ7;MglrR:+"@Mm^ 8 t72,3T;2k=f*$Dt\pM!c]3dTtOa X-LFH(7@n9]a,T?em,]G?A͏[\l7i^}HPeH#^[b鐙8KU+H9zX$Io NxHhЈ5n" [ 5PBJ(ApSJ:յx(FBg2Uypw8-+Y@[48~9~eqƼ) UKXl3-ǕOl<"eJ 2Mk8nj >roxOV_fWm$m/n{?*. '};9qըxBGB+@Dϻ^zXw7bdqQtȦh(&#w '׍mV#hPDiQRiPV?<ò9lСzʫ: -1E1RI)S~8`_}u;F#_\S j?N:UVA6RdXB %=!bg(7(T>nq- |Nb9+Y~z@-GQʪ8zCR|ԑauAcK 6M/@3~aH+l<1"|8Q}p !f_Oow2mv^!JĬObuG6ºoi2S8K?ɼ_76H7TR,Nf>,a5*Hg8{%=)jV ?lI8fE뤃3@f$9x% J307 U3MoְRĉ3s𛥒b1hx ~@ *G>dh@(5ԙ9}| a9S94 hĴBѦ PU<ꏒtr5Ra3 %ܹ_EjÊpaI;teeMZևJ[Q(Q(|SWt]b!zGkAn^[0I`19˾@cg&J<~^ˁʟ:'6B"3TAf]3bZFIgPsu`FM u yOq X BZ7! Qg23Z/^nKP)EU5&AB\R^#$ut"nx6;NځH͚3q%jwC㌙[& ^'aN"ROj^cԇDƃ؂N'+% s0{?K(="P }8FOx#sZ܀?"*=Nyvtnq$F@S4H^:&⪃ffE9V䶏tW쏶}wy̛z~Π񨱊>r,Ŏ;U𼰯( lrk, 8Xr*77رOtBtFrWxzUkYK<˚ ͹Ӿfi%X"Kf&(TM e~a;C>N@;"?lƬn=nn_q >z ݯ3jq:|}}O oev(Бn!ko:.% 9-sq*)Mi6 0+ ʮ0mMn K1n0-Xz- 6z `\H{'NG!VÎfA?l?l*|idz&YK$O3ыV͆lw1o , yK?M ,lS~# +UWZIO8rBF ; QS (72Ӻ#RF5i}G11Y8>|E]jM<]byĦ \烤gZr*k~stYmN}_wմ]SMl>An.HyBt:%Ny@xGdƊ# ދ|׆;QG}Ou pZY [?pW`@7ZSla0hEf֣fxh!R KWcNJE0xx^kz/N2x)MnJ$s⤙OgibQ:O;^Dvv m۳idu~(y$ ]+wລq*Ёqzo`xy\WT1}}Bͤ͋+*GTUV)iSa=msr0cm+rӶB+{Q:[LVGTwƔh\,wYn3V$&ePQTW#:EЫy Y#ؿp-$-<'tl\i=،E>Bh/nkLo!v9R.^+a0H6#n12Ǖrׅ4W~݆kC \4>$H~-}bqh?*鶵*4s#l//OX!-a)Ԃ&zOwg0G"a,h5F}$3 $t b!f^>L&dm5wMa8)$pvfƳHIo»L͈(=4__E7=پ=م w 3`~FE֝?IT+i\.O>$zц6NԸ=d 8aR{gq:) j5O$'x,lnD/j CFnT>͵jveJɧVObp QXY"O#ɠ'KH D4r Ţ~*WSߦq d2-g绻-'^N<˯ٜ:1L?EE % .Y]n/攤o@_H&"DSOD@ b+^p4h%c`f#2JK34VNLvz;2?ŜۡhO hޟ~޹nn=vcͽqϝ6ĤYC*s !V@{sTsP[bGJJYXHA宿puїr([`h+s. 0ܱ/U1X3TE]{)4IP 5}RB)--imF(oOLi;[*dF ~+ n$-ƴl٢4fweF|ʀn`kLt'E5/|rF~OUg黑Ni53su)D3hsD*Ly .SЉ|[pKYr7sKϳر1UBBRhڦ/81z7 ./dU}2LPtdPjz%=(J4T ADzddP=B?,d_K~@wmvpϝsSZs]>̶k4JD. ^eSʦ_)ޔ>lJ6غ)EuSRh.mߘbDߥ,́? %,c#q<<^-mE )YMI.2pTJG4fOy/PFc#a^3kari`/1eR6zah*6PWŽbP^R.tia"V=1>8ju>}7QF6)} X<9 $3_;ِl|~P{Z8(JE*,#4B2lOyx^ѽH*_S˴IN{&gօFts+W :LLh t,5xEk$ش|Tp>lR@x|ũͽ=6;Uj|ēZ |:nQ *mn4~mk+ / ';է8%jQub =yuJeF9*:xWjDuh'tX5:IL_6#N4(gD*#9(}/JS/ :3M>Ere&m7&皙^)ӄQD_& ъ$Ok-yqw$)Fr]VrbO]@hz>lPiRr 4 )S[T(c]bŞ,1rC 6T-+~/m D zYD 3(>{f /s‰b@O]]fCJ$16YhMWDUR*HYUA{7 Y0(a$g[b/ Hx!\^i56fG'9s,T)7_]D`ʡ$0O%Q9خ Xx˨4;c*KLgP']+KGI}ԗ6cV"V뷈TJ,K~؜\l . iL6&0$!Nぴ& g<̳a7> $ (i;"b7nڋ$bIq>j,er71縘 bnoݽrl(xo_`{ o_FYiDa":!hliL0֨~uPSmM {H|Hrazc$s܏\ #rΏ֋f,wHm xD8*e.#Ao-rڅcoxc"[JFnUcNFI r76Xxwl|O|_␾py*kOeY^'J=ONC?XGVɷO;=LI ONM0;ξrys6M9'ޢ?EOZUrUD$d39ioPƻ>mYo,XpAfbyiVIeV 2NIw|I?瓖Y~HUC p?t?{*`HJL0>t ѝL^w&0{iO?섞&Z-vsfg vS Ӳ[ \1 ;He?((*e;ϰM')YD+m0R~}WlԛO"emώ@ r0ߗך15ZMDspd8wNci2NGK'ADLL2+H2gf>/. žxeuj_l^:ڨO8/͋-zE?zJX0 FuUb-Ǩ˟Gڨ $%כ2k9/&cbzl91lEl8jRWem0J u~vlʻrYx-U;]Jm ԊpB-Ө!dV)<s']gaF퍅uo2F4VtC}Nഢ`EiNOp9+_:H~-jenf.c4q?@ V*5a}`3]{tJH i:_-9]V&O%?ղ|)ʗj|V]*T5үsN%E;0әSܷy@Ɂ 40r00ہFr"m=V7mO1TP S_yiV{>?3|8wGA]\2r劃_R^mJAcR nXE茬܂pW~DL/zX7 FjRU%D=H'#;ƭąOɏo׫e Z`h$:#mB5|W#٨ppjWK<W,r$߯ܛM4XmhC'+|W+ GaL˞y' 3V+DzڡbОBC*ڡS#J1hUNұ[*H' U8o<}؂&3{/{ROf9 (fG:ӱI$XyDDmFX|cQ0(_A"?ߔZGC@,z=&vgSh @\5IRq ZڭL. ~ջJO[\m 9˖velLfiF&m֝wbSɑiz5H93uĿ,JFjFeXS3{5e92K*a"a5%ڐ 1MS; z2j;❊>+ޯ JU*vU}pݚ΁V$ʼn *Q<0ty׋Y"=9dvE<^ ӈu< jNAy)J ҔSB0;?d7vΨ!F(n?oFhs>~]_広fU.Giӵ/_{8n|S%K4٦k]ԭg2+]/mXQٌ5b?T%?AB'6WIL;qk8nXD˽: YsXZ0>nN~'\H1?jq>)YO')As^}njF+=}+% 7<'lYqyAfAIqڇfѹKQNܻ|Xh+}.o\{r9T+bl&L)O!b)[e |'@GZmn\QUD*!HБ5a]xL\-$D *HvȋyE`eT'rٴh[HH: ^7E_bcՊM6 9}xi*({Fr,1iTeH ,`s*WܹD!j g5VIW i+rD^lV&ǒr=}ܭ얤GDCP66~W椅V 4-"-~Vɖ)hY#ڀY|6uu%fIEoI!-Mp-WKp!KҚl!-*u.MXSFN%|js+5O/uU@CΖAVg73 x&07-)}DdG%v;dKHBk}p~M:{909[a'[$&ܔBߊ.P Woy46E `])M ]n|Mp fPމS(/=;5+!}g7:.z/?J3mF5z=L W8q̫PL^:LW|q!to5*< g^ 7e]mdlnEbq"\# Rg$uP0M[2ٶ?HDdE% SiقYy∧j ~Jf6]^ƕ&L7V[{jMמyio5Mqy/jz9Fbd~{+(71 f"<,\A\7YHtoA T x3Y%xF)2`Xd|A~rAL#&/~1mKK**9)G hB_%9b8?c^4,NA9$6kjr jc!h^L4EiE_Q'`ɟB^-S{H2"mju U \)a t،[iXЫ"qY'i*+0è}۩ڲXx/&/#3 i]Cҵ\arrk'1 "6eeQ?{sԮy!&8#'c!(}7?$&_-FSq-,~s6\&rp)+LBUҬ:7V1C.\=@eN:Zmm!=\M=>ՇIK6D 9/ T٤+nEk[?j~DkLC"-mnSrHzK#TZ =<&׺2'lcP;k"A_QLO^C5矲 ӍO{%RC,Y6eSWnMwsgqoMZvӦ^y;2r4|@џ0̬&J,-N2:u\ŽY*v27T3Y/O^; =y$ÓS ׆Y(gru8[PyFKD1|x3JHa 54Q8&@vyaqX~<}tYy=,xj6KﯔJpkJ!G+]mfG8lw/[]̴JdJ9 YĆHo5#0-SC7:\{!*RNyV.MU9.N4J:u]c>iR̂NjrY˚DwRs+_߉I"j`wÖ>mxzǝqf58-U<'fhO_m67EA_;!%[[4ы!yInPٷzp8!x3@E7,}eƄӧˣ$4}5wNmX\}@C%э]tWZu{{u|ED8Zk(rZa{m 'R(eW3]F&|.>f™o{;sĈt_ߡnn{TLWL舷OjۼS Q.ifSefɓ@b}`#J4{GF>k߆Oķq,r1f2+TtzA/&-ݍ7i<O alFq|\.EGp.>S9GaUMب$")03;q&sREB0ާ^2hU5>A9TuP*5?d(Xx#}Q;t|(yg,n4+mOi=֑K"_~ GvI +%{֏3E0|7FÌ`?V=t=Z4\qFCu0mt>WpKSvՍt#39{!s&%"g _/Qg8ENr ۻt_MfDARvֶ{"4is']PRVT>Rx}lE`ATԷ~D+z^2 w&gzźu+;'I*zVY6DE9ƲGZ$YE]zV.sD}_ߥcP-|lgSÇ1J*}pS%Q\ymBu#* ̢jC+e'߸z莼9|VTUEAdߊN^ @2Dkg&X(LٟLLu4h x< S?b`Ž3dWP'-ri'>O<%L6I #z WCyY#%}J7oN~3I+!2k`a:4 5n5%!SiY('ķaFAe[B6&G8j(+;Y9Wu q+VoFu52!ݫ9+IዷWe{ߢ#э2+\kg%̹{7KvkPyӽeyO_CcP~Lqo\3@NXGu}jLeS)EƎ ֖?og0I/W:{.wgw zSr3 ;~V}-RUh2-|00+F0epsCm@ӫsnVZVU;AP f,xөi k[CeŖ&0 %|ܖjeI6ۄ4i#)X ";kp;Ҫ)`N93zO?LQP@n0HWIT!}džN7dؕhi]68(4;a#XNK:!e$uȽ.<_7|^;@fj}Ĝ)Dur0:puGA(St~RtLs&ἉAΌK_p]ߦ mbS"K~q,u-6 k>R3_~sW,/(^hVr|3pm;iy̤U+],?W?vKdS=SԝN UPPي٩ce>暮ڷJ߼u[w:6~=}mâ<ֳVZpK Y*̔A ۴c25߉Hl]ccp,IEmu=^51w tUIPM]X֬MA1sjϦQUw(~ zu/JE27cj/U5u w'껞Un %tބIveX NN)6 n&BM49?7_U`\յmR-t ؚm9j&`??,+>&&Ѹ7:Cvp Rprometheus-alertmanager-0.28.1+ds/ui/react-app/dist/main.js.map.gz000066400000000000000000012455301476331240200247640ustar00rootroot00000000000000Y{>7 u\o{I(뺮giSqa @JI}s:1c=\>lǯl^lo~-a3yL^YY j{$7it fY?"=7-<)^3n@7,^`vف{ozyJ/X[r73ߛAӯ ֹL'9 dnU;h<ȓ&@Dm7n4a}}5f-I ZjI;I1 3x Q(N`5Nέrwq$ـw[J }ßmbps 6#Fts~'ܦ${r⬏arl!mcYC^}r ?sO6 O6MW}"mfC *V?yBZ!tWjIx gI뇛T9Fe9wퟠ2<,R%mWȄ&^ pS0kU17ɿ&dͿm0`?GҼnth+Ze_װs7rT"ggBt}6lhWfuUZd6-2!QNoQɴyԪ`YOa]+βp!]j*6x/2i!Hus/~`o6'g4yiҴ/W"atڈ @Ѫ8V,wH;*g) ,;@wF"L4ؕYti[$x6 i̷ͽjg+#_+1fǃDj{! 13C?.GB'SXjȻkT`:t)1t LӔẹBIt]sl~R8,Q{_쨅&z* xOpp#4/KWğ$ l Z/98O6ܾʹ5BXs#w=("IGB4l'Anhz eTFL"Ͼf>Z/?t)} Sa[T%6YKWOAC *}pTjmw /g#^}B _A:6a›O40 Ϙuq $2ydûf>9ׂ 8Q(7;F"L~BQqf,pw{z1ӝO"M!a>\cDBŤUUKRmӲmAhIj3 2SuA8oʌfn@WuhȮ9 :DkƗ6 V?7 {,[8{B#j"i+lzQ Zg={*(9{RyM:GGm8㦞ꐼ3VKo&oֲ!b;2ߠ6,ZaҡST)I*|_=Y_`*[ܲ )˂#V~@7Yu$&)`ovh eUqhmL*f,$m-h[ lkp!f/&I~=y@ſQ.Dz]f=6B}5/Ըn/r@O"1a* 'D҂X_D_9uNWݑGltm<VRb-6BP16.\7t)&7@$xc*Y0+fnkU=4/7YK`fO\׬\ݤ1\κ+ - hcSuvTͥl[_aT\W,S*JZ:Gv" 1<{:*giN4C^h*+n6Q9 )'9P}r [t;h$R5TYe,$W3'*F %̓N %T+_l=0 *9{RϟϢe>I6aՐ3Ԃ-Peڬz{HF `MNس/d@tl9# e{M?Qu2d5=_b- {Gy䳮 mb v8B'1Dchtb3ƻ)^cJ8/4>[lkt5NG2'dB #J%v-|ݬIx)'!#ݤ;zB'aNc| ,Aw L =zb>#4Cbu,5eE*7D_Gf;A<j3L߫@2;1'\u 2飞̂> sQg&8r~&j2u' 1*);gLc|˝dP ͈$MnqHmyؓ?֒&z'ϻZj~Ȭh:mA >nTVl<1G)!Re?v =3ސC%2eC24 v]POcŰ.*[F<Mғb,0?='5f&5@#3\sbEy {@x QK! hq&LHI9>;V\dv ت3Gi^vFT `+RYcM2Y+=;RXfԪurI_й0,[T63ڇ5DBK7|>0n7;{ :f*A & *ٛCߩ?k!Z Y0ruT3Yg4)(BFp֥glK0\eVxGwJ!&{^+ 0O>("CǙ҉5K;)Fkj|(f:&`5ERS!fB &.0O`k |] ܬ1'N7څ?tgJIZ̞NR8)L`~+9/K$QJ, ʉ<݆>=JC:YAWhJo%P:|8][dY'e7b+m6=M8' f\D]+ba9Y&zQ[ub?.]dbM]1)z_Fw](Q GUV˓Ku LpX]ly1mϿ˾v`a^G<- r{y酈 rŀ.3?Z^op Is@(_ {OӫW;#ïO ?f n9[*,K9߁zHPGisx`uOnlȡ6(eV#Z19Pt:3Fyc[:&oW1b$݌,]mO7|~O_u{7\'1&e$SwY&,cx'A-4$ԟ,~d"jNCd}ހw)P8/aoezJoR0wl$\{$v`'ްQ$>2zI[ o _M ~]nS%[ݐ:?B3>pNFw 3 わ/|dc}!-ig% )ln2onty9}~Dp}f/g[);0,RJFOIvK;u7e>ްfb 7t9tɋ. ٿa_z4#ϼ#4+n 4iʑM (3·[.Sh>l цu86$Snw.Ρ_Np;b*Q- D`vdREYJY逤 $OXfՇ+?[ Dԟ-دonEL| 6O)Q_1=əw_qz}'u⦂G0%vlLMߋқ"|=x6|(Y.k09 D(fT&2ؾzIVpٌq&NRAWյ̲\4^3X$ܨ; Xצi`vۚj$q&KVۋ2 Ypm6%H9`wa s$[| uӃ;¥XJylO8q-4ec b Vp۔VzRn[ޜ)Lf5%B7PmxN0R`?:yWYу>DB: pCx7E!>Ё!p6صh-ڡ d&B~}P>TtGYfRs L(F^2_b9tCo36ZNr>*|NxIǹ 2\<3/0_(x}Ϧ]{th|y]HLwAQ+Ł&c8 H)fmcB$&l ֡#B")++3a8~2K\p) 9hmް@q.0dD]zcgD9txNaqPH=Myz5cn;;ZA=0PОe %.c Tdr, SVrb.Nxzq Jxs2GAF\;/|!!#~\b.8 លjf dJqr@ŒdPvHǻAE;B=ͲŔ4Afz3\QzJ-vH[,&]=Rx9edþIrMLF\8(,3Ō2f})PxmٜRD8b|*L?womJM.^Y"O#Pwm{^-r2W;帆,SR%l'B0S;lƒ;+1(\8Gm9(ņ97azv:F]/l)н!+펀v,X_:'+?g53ɔŮ,3SD3. #m6NŕI'@!aSmtƻDxG8N|vV-b3qv->:cHa@id;jAo\\- (-xs<0q}Q>gk%hI2E @drn/,eaz~WsNm#_&@Z O T(X:%X>QU"s! ꀴ ĺq̀l#f4򀗜_%H;t\ «hpxf/5f%vCzU>C}iy}$]2T2CuBYt$GtԻH";I\$ _끁SL+jQIsX{9h),/Jé|4nʤ8R vzts4=y#IPU풴͹ٓO~m޶~!Yi{b;#gJ7Զ'9fޔ5^s fk#d$Zi7i1"p͙8R]왗*mJ˸$ 8f8~*۔qև#!dr2K̎{h\x@vrVIl%q`k;n"pP5BӡGi- EXX3۝T6v`mrLhݡ&q%hB90!#*ų>oEƹք>'kN*ܬH5h/>b]}kJd`"ԆPryfܝr0'(Gn sC4%BDv հRXpsY1S &fRb9KxvLIIC̒&O IQ!Uۈشn>:fM)ʵ7Yj#k$Y@JqQ(Tp?NAEUr=c:M-Čt daZO:n &[18qg'Iה]l_˿e,ENSt̫TidQ?YdtE&~o3ɹMpPgowv.;kW-jRfFIaPH͛SYm98@f/j ڸ'nQͿ=J;IeA+Y7[БL-[IԦ~ATw|GԠ:e@SSr1qG&%w:t%] :,͈2#_ɞ,ۡYp1u@=D+yû&~AzjZ]07"(+b:ihr6NUζR=>"c"Gt`dWþM{56o)K,1ԝm*w4 䚞R'D?}wsk4f5?vpݑonX']RM10TR2YKww˫"*>U?s]0}9IŠtpPILu249eY%MM֑imjN&Bv2 Pϭ.a3z&4|g|'j0fOI6 \8xО*lU*˔F4zKFF@#ʘU}ˍ +h־^-g+0;BFEHrt=v'J 'rl[DwgX3ޟyPPu2ʗw~"l@1 B?oH e_NQ~2fPLrvn&^ w œŭK8Oe!S,}0i{}4lVfv֮ ^ieyMS +'q¢+d*qm+ʏå9-Ö?N@yu+ElZż OprDSvm i/tnh5VmO jMڏ\2頡-t{ech>'b~`7/z Zn!vǯ_tx%\ʆRo֎1h6YMjm\&66GԸN)0J܃5W-nR.-1ٲG pbnkCc_ȝxGARoإp8U$<ϗ\z},1 Dx ~xy#<#]+=́#fʒ{G|@`nvfzǽeÇ¡ ȸ5 qM "Ν@G 3Y7x]lӞ].ss6sl\oUZ:(A53 чq>x*Cn)yjhz`^>^'ﶓZ%!]J@bδa*лRvB'Ct C$yܤ Î."-y 6.wloDZ N\%1Wb"yLw"9<dzqi;rtD%',R>\`\Y +9}8# uv~1mn1sp6>~Y0C&3{($wz%c[lHVsԑqIfg-9Et຅αUz>%lYW V2;nPJa;o 3@W\;4bY'~x"㡋W OQK?}R0'l@{rnq$w_nV. tK}Prᗹ/t6]Rj(D.NRP"wRNb͍adPT|@j'6,cʽy Yr[>X8gD“wϦmNJY났(hBX5S(VӾlo@iW$h(&s1Е"V6b[g) wS` PY-F .(׸o@yTMsZdhΡ-PvQaLDLT pm|к3*K-nR* * G|8ϗ۱ؕ`e[{VcӇ~_nQWuE:T0?'DgX~xE,ܦ{>E#B!Y&_Ygg9Hާ }ϒ)态gU @Q57G0hav@\Ln'p}wW&P`B'Ovd@L6]N/B41[#O#a`0uBsj/,x\5עmCRM':@NRЅlBgiRܤ沒Ӣǫ}q`ޥqNRㇿ١F l6WV7=6ks-7R?"cWjYiP vD6.}$HYk>2=# O!G>'st7qݰNDd=0H=&QuSc!w˭KRjlMj7k <| ~#yᖎgc}M]3̸xEB^5#@[wɓĥ6\6Rβ;1}mPfj;32w1$Em*SO`6"0:SmIPZETcAbKe"ȽʍρPYX`› ̻0hщm9)/=1|r"&( zhNɋzkOvKMm+rz)9}AqaZY@"zbs"!\4S 24|oO3/rrb I-$8b[K`.%}`m.W>txL<6K^!x4[$k*&^oe;tr*j6ﻘ`uj9+z=zWdu7҈?N c,q4)YR(smuߔu;¶؈6象V,jwj] bR('-ReґZ[I$iB~#-ʼ!' @'ō{ lW'ۿ<JDfoNtB\&.kYR񣨈e)dgoy>G禉sB"ʵ1,\ Nh ?jbq>,\v9Vʹ֘}'fFӇslAw6?oqyQ$'$JZWF0);ʶc' &e(4a{=EhQr.vuadrMx2{<B8-7.2(& Ny /8wmUpPnwXێS6;nj-8 *±v#[a"Nn8^jd~;-XCK?[Q.Xm$ڿWF؁g{|A J2Yw̽X{h4Wnh4U12 9bieW~Ot>]@5ݪbZ*<`% c+v䏙 ?^Z&TSr?|bmGMU奷}|tbBr- wAgm @k (m|GIQ`=W9znMJsƚ^q9Y;4Ӂejk_1R)(5F(+ ~wL[}1|PWy h ׍Zˬ׵ZuAJ=.7e$z \Mt'wW>#?QIq,P2KQFSL) @:ǫT47g!'*gT'x_]*pK\yl]JlqcV@ؐmi>i\PB7$W5z_ лݐn#=dMKf򗃮|vJA^'\獅vqa?iLTG8TL]BrwF&6S >sܥTrG`=M45خ4X|-m#>#z!ۖj{W*B ަ_ W^8jFw!K.y,ﯾO~su7C+:t:{~m#Else|!=wŏAKg#*^+4tb7J酾6t)d+lq>ku΂r+ zjեz-)bm[V.ۺq ^ty3YJ%#c1;8cc&^RO>[= Z)@ ]5k)Qܘ63scL?oz4.<\[ǜ E5"^}IWv&jzbvu!ljUO˴ѐ4<_۴V`u!Cx=`} ǘC=˛.٭s- i=SgK 6ϝ%\'QS& z`!h3 94mߡp:o*)^W3H_35?PbkRTn 2$7&%5{[/f* :K-H~zrt 䌊<Ԑ[Z753Q|oXjɀE)^ %EK8M~^ زe sr(]leڥ'|;9-\ t8"(Ոӏ%uzn[AD$ a r!!!#Dm)t܎ xa,"Z>tkQ ~pU^ؑ$t-ߌq,n>`GŴ=NVωnww߀3DAo Bը1:_+FDW5f].?IG|nR~ ]qdS7됙4] w?K,/rZ5@ܟ?fЬ@a/az7vJ}YoKcY.y⪑1k{ !,dPisHƇQIR Y n>5A / uWlOXW7 Nq4w"2ؿEV% /@"[\ryH7l]2؝Ovc?))^8-C~87E >^lt.^{Uw@sAI}\ds2~:!PlLvqsu"4m?dɶwվK%Pl#t|s{1nOLFsO`ϜN(c5ط]'&wͣ[8LSW~K|;NS-_$of$rЁwm,zı<#|J^xvJ;ȡAoP*{^m:SWQщϓO"PŨ2np|Ct"PXc`Iv Cz# 8d'5q-kY^m @7;T||Hد WrTIgQJC >C$!ۯԀtnR}qY{wF'wgoRӾ]nȑtˉ/:QV*ջ]A`Q{xfβF/Y3kަC*J"l>GM'D"~lsj%S 0ϔ="%w0/$m8Kߴ68Et-V縍(de |K YP`qnCiulTd*`d%j&K}&T,&Wi^7qn-.n M(/Yf[oYCl"dDg~.%hlC~mm @"WwMx TsM^)%s|wלT 㖩w-gO:X´$,\I\\kobygwf4mV'FFXeY&$ɖY[0j ըo $ ݽ o)3D[CfgF'ܻϪΉW]>_=V 10Sq}~EU>VM@O-Q$ {?AafQx۶RJpui Aͷ$E/F ϾnoFQ ]6K7&%ba cOtST^o7M&vo}eΔdzN~(.xRw 8+RxLVɹd"rI! Y3W×@j^C ;VO8CCt)|q._4{V!@6dz#9𞖌TVءWpUHkQ&ֵsjO䍞lfcՀI&W2MO}Wy~=8=ηqqBt+ }GCv勍!݃ź5p!ɳ!i`5rӀ `E5>ͻf"RQ L%ds$MiOqsY}R}L]r`5] T5% ~5·eF3> m# ?kBRuh_0Vqc萶@3'r ZaFsA oKN2R/bd&W ʥ`Yn̝)g| lͅ9LdzcQYQt @ # loo{4A1/FJ-y'&1?+̔Sp'hCC_Jw?SoyNlC䢲W=d09ן"St+[LizsY{ùh': cHhPygė#W# ٍ;Y$:uֽsCwաnxQGr*nK`pq7fyݾ3Τo?QO鈃M( b/#3ni-ݜ.@(;~7> lr1_sl]lEK)a{iq|"i X2Tp{+˾vထ?6Pvgz8OY:b?\%""g>>+[OQ6|řU=-/MX,Ɖ!.;Y%"xxK'mIˁ)ǂTPS'38[(2NMm[I D}=g\ecy%ofBB y<*;lv-y\`_h=i[7$ej匲RxSfaTrL]xv VnFLorhPސoΏ|-i=`2wHlj[$fNzTImS3Nq['P#Ă\Lc;{S-xSܷtt"c1}֍?y*ݥH3#ݧ^̗L6XsGP̹A}Oں9WH@f&/D?{"OP֍"g1)8h8εu.b;IKļS"rW\pLAmkХ S |ouʗ_r1!P!ɢ|w-$GJJ #%-YH Uk7[w 5 rË;&0 E$ڐ),3::s:p~g@dqUYW 򎌑6_}~6~2_S^ݥp^oЙߗؾ#B䰫/$2PJ5p'i'iSGݎDBufǙhv$[SPqP+HJe帯a'y&Rْ'/;Krvx.CWcI8Z.^ߓgZRZ^5;旛`'R9=]H00L@kqe &9aMߟ0.Ip[Wy e!$^D%OzW=\!K+FJ7&ᆒ=F>qos͸zE%+OCmgxsWAnR0ыnZEbngy &g/db;gD`olY={~~ ҕI`7C*[E@t2md*g T5 +'>5oCvنYܡk˕L>a1mTǟee\h,͸R$p*q5SF#jaGBh+Ashn upVg-=no85a-#uzCg\NFٚ̈?UmH7`(5d: GJ=gttKwaS ~O N׀kI';:% teRtd^ :f:]ӓYE.U6b%]&G(Q~vҳI+HȾ7W|dR".]@RM*lPp+k8FKnS~P Tt@ǵh'.e$`Xi+a:c_1o $oz7͗*otv^9֘JFFJ̣ <֨>B&%j6f;IʽH]oB{k\!/a޼K ҉#?4z7١4BO4d[/;t9وBe}hGt?uד?^yMfx466[ȉY"f[|=/ФMlEٕy.7d8#@epN`۱xO[7A])~Ws#ڠxcYɜz|{gj@J#?ZB\J# 8/AwAAMR gPEN^\,_[m˵蕯-Tg7ʎ+YΟ>Jn V7oF:F)7 7BJ@hwV\@7.w}6m&S9:!G9 ;?@`GնkI໸qYΟ +d 88$H6MX+ 3Ur+rFm:\|iȃG$|mE\)Duf@88#tt\]-%&yLL \%Q\_zjΝq50❑Mu/lc3S7 *#?go]Z^nn∿bo:So#HlͿSؓb.9t1|tIH-)qIK/E'+io烎qJR'PLUg)' xwGP^捏 ~F2x1ɹ#nNA_b{|hNpo3ô`!hq9zMOi֭=1ߞhs55*+/?;lfHT]v=l[%-{>{Ͼ]J99ujπlv+6K\0p Z@#^ tD/6b{o >7Aas9;\xz%v_/t3F@aeOz]lz(9 ]Vo_̬ZLV}Ms刌 N:Z2_;zc/m8Ⱥ/I5LA9V%8jGG=ka̘{.」 (>ۆnwP1YOcSEHZx2lv!oo/hl $${- zRFJ0xKA腫-ps/JgEAU>Ӗi6ѫ#wz2|  j ,&xd)c`)hZlvη_;h+.D4ym]@龸mڊayUj1MhZ}EhlD6t҂^+'P( "we(*C ,9&z-Ҧa =cX'm͂Nye?%u nw%ĉYxwh.OR8zwi·II(x?D8ۻ<5*;߻ք{m]dw+֮ (4yקA46x^mq ؝j'ƫvW?+7nь{S=]"spŊgmq+nЂ#?лD:sf,L斯fHI5}t"gfϋ;zO_&6{e¿M%wu %M2e˴igzbzCgNq.Y1w2N}p_߅ 39gJ/pp2 i21\"\R"tMJfL(mNa*){hqzZꍃ'DzN҆ &7lݱW g]\4{7 `jQ4p^8Ƌ@tpWafG;e{ zÅz}i{QJ9z s2PSГnygPAs/ɒf9')~O,wmiI~L(t1)H~Y" .S ]+>b sz>lsCj=|`[s?5OϛƜP`Ȥ -&IP OJD>+ T!![~A?ZiTOBʿ%!Er4ot< Wr r^y.L\ˁʗ"Ӫ/.|Du0pg6)hj Nmy\@\Y#6r`3UΕO|(?gh?w1d;2*H%W2=X.6eӷ7xT"R)!|P5i !y`,gF?Ȱ@Cŗ$z!}D*auz.b|HA6f7cOt:@7|QF:k`:?z!= tä̵82ٞ85ô$Cv xtAm `@I;T If) ggsE6qAKΈSwCq ԕ{} !=X@Xvwgѧß죟 ZG^vmbu}ϭePL/'56Xu#qEZ$j~)O,u-4X`Η)'kj.ިw٪D~z="񄫥?SK0Ϫ!,}soD 9_{%ԛ%n_g\tj5LX7ItoE 9MR!-Nͥ?v8I|]9'r綈ZrgNqcP*aHMw7k)fSJ{b v; sу.;H}>3 =~cX), lם'jwuoܢqOtF8H" f[JrwPw.M^oӍBّ{ypT!j?{LL 2K!وMS wrE%,Rg5w3_UY=p~L|or{l9+r{ Ztn{yfrN\t(Q:߬dpjݐKBn& 㼺w "і/E.!ȯqFƕϲsmm:©_n{vVi9_5oRF2~>zo@zf9-M|3lWz\+\;ы6]Wώ/^XLB*>zy q5yBw$t[ /BQ$Vmu;,TtJuI:s{p+plH},.>9oW`C:mF@PIv@}"]? A8o?fZ5g;B\PLGqa7錸J`rz-Jh-.]}{|$dzF!,\/2CmN`s4H:g. C+>^ YMO=x*ؗ?Qe3׾Ea$(̄ݦk,i>='vnltiq4*4:@F8#Iݸy' <=pΚʝ'K@wa2_m\ILRGW)"tF 2jrQ&"}:mC"#LQ` <wk}UpN:ɟHb/tF A|]~5uELJb 461 cCar>b\)α5F`YMurfpͭ}g9;¶Lk)zmb EtP.VD0pF.83Ce'3j?W7JѮ4Ggc=R"SoK(FӠ1wVGl NM.0 f#9>˙'6Ûs-Ϝ^?!K:^s*bv,lUJL(as3:^zў D=蹉異.n`6膠9{t=\A.{Q#b:WQ @oWŹDӓ}xJަCI}-.݉>\wo}xC0V?X^"us1…_Wa\/H5>]e^|0;{q&BK`}It4QD hH\H)ڭ'Ba\Hw=cmďufʈoZu{Ft3P 릀sr/'NLֱ+y;cu{yNqb-  P@ݓgE !Yb6HSb_霃E;+]7(VĹ*W\p^Ѵ_!y ΎxE"s~鮍XpL*:oD|nwQO|Y..$TdF{'~Ѕ"0P|j?\ENwĦ.;u;_BaP|^(\4GB&zc_?~>*p?l E/f 71M{ſ{\{(c}]"NVn1JSAW$8_H@$p,~$ne?п~-gҸkۃӸhw $秸飼hbQϗ>(w%GݞӐT}s&y%w4Cx0K#VSER\F-NLQZdͺN'*fqHzspHQ9Ga <]w6ȍ5C0{dzIUEuMpwprm2Fm ~F24j'gYg%9)xT7 ] bSI *ب|pYI Syfk {pg4e(@g#P̶ }4m,גJ;*gԤ8TMˤ2O{I*!8#0^EtR,ƤkO.e")gfJAk<(z9>VQ52 є3#_3X8vOrsӚy*wx ;J= {ߕruf[\څI~v*_$4E(_X:(uUq*Wk_fI{_DzlF>ܥ [4Òϰ ؞f.g͍vߦv Iqf}"ÌZ`v#шp9̫6wDN2pX7B!3x06e_ÈdI#kҞ3p74FR(2W`1bPIldB%?k, Xo1O-Q^r Ɏ6AЎ=T݅5z4,htD4 Km(C5C !jhk~0~jn ¥\7Z{;JK{7(d[()wP۬,t ]ݶԀyOM#J0JɌ !!Mmc t.[# ;8rs+"-Cjn-#F7]g8x\e;Y?xK bѹ#+ONGq 'nwGud!-wsQUn 䍺55<')/=8H6s9Kmkdn?n}Km&_xn^y?)؄׈.#]YtK.H`i{), be&a<٦qE;-ޑz_pB8֩N А>a1sƃ3)G7j!YC0Q%'nuK$_C5<41?5056?˥r*f2[}Љa!.d#f Y|Ŗ^CEݶJRգ&ۏ^i5#/$v;5$uY 5ω|^~_Q0lY?V Nx|2p= ?@`jdu6,(& 3-&)zu=U l )A/49BN;׌zyM4p>Ok@|W3DC"m.c]%W&#A/]+ K ^k4Wp$?2ܛ>r\une ⵡGSTKFs`I919N_R>l^IDEVfpݵpBUDK&UgL~v8O!@C@|Fb\;v8O,к \ULv6 3*mrc4vu֮hm3MY Bn)a4Ac9_qG\HӃnz:}7n˓lIZS܍`8甃A[5IءcO/aݜQxM-|S4pʿ\5On tqC{Y֍xҰ m&m,|S%~6p `;߈Kr$J1TGt@3OwMr|p.-?~ZER.x#u h%Lg]t+"V]o-T}\ 6G.,Fn_ $U0@ e6*g9޽(^eJkJ9*je<4rvNH:߈O6lVߕ޽f[dw7as::vChOÆ$9&>bN΀ԑ 0Qr*ޣZ RzіվSGte|z,݊s?Kx3VT[K1k)(޵R>;8s-?R%׫JAmJG x#wP4 }=la͸Aq>F檼6fWȑBLU1I}zWE "-i1p@ql5MeW '+ ؆7]n쇳цna̝q7.p[bddyO N\^ Bh>ÇTn'qeSŌ1&n^2-o@/_]^zU6;Ug%_7yY`5&nME6g3Tsnv(`׵DA?s؅ ^ZllIWӼ:{o7?^KjmKYع1X}"(n 'hBQhwYpPbr8api1dpCs5NcݨWܣ}c?v7 S:Y ?b~kHD/:Ѱ齟㶙H]^G{boohѝa߫!-.^O>ihf=y{b`<0#O~Oo̕}S-舞2D6"2+|'~MӯX~ IHqu 'r2mU<&+}{wI6D\_]4 6u[xEa {b7$?v .p:WCޅG8-ү-1pcBQ! 1 -hzF98P/슾S;'MC {u!|`vhG*y僃wv9"[ʁ Vcy- o r'-{9Z]#(?4{J F^Vىac4xtdMw%V4s~K+nwiRrJљxI¯ş,xޞ?}XB [FsObar*ڧFiNGewl卑+;?xqiVFd:G>{J6ቬw?eJiv̿54C ܇&;']Z~b;ZPYTOGcV{]A7|"2WؕF('RC\uIӣ1n.-?X&thsrEs9=,gݩ瀵5[/t%J7[h15~Ř}KCeL}"!s?r^Ȣ2DwP8 ;]T|D6 Axŗ>֡8*xHwOM5e\0 ȧ%O|]=,\B!TͲw&sHf^Zdlڳ6_-Wz)nj_{c&-0l@, {pqgfCT# v V(?/(I5)Q"W 1©aS؝N+Ikյk{5%f}k!y誠*<0cfnL¶]OJx]M$8«dkvW:BWVFZl /TQcaCf+ncKT^p(Xd[N%\#Qc'pq`NY-rчZ̈F`$y鷇CNjإ.J= 3ٌg~]J'BsT@Iᓮ^jI?%mtațJLtZ>[8eQX .Gj ^$ Jwk_O$In['f @6+VI|xBeP9P<\M!25saii]w  %j#$z1SFa,CƖU >HY2˴ր #P:cve^>5QpBŌφ#`0ĭpz;z(tR з- m kQmpMR_R+T(=O( 4 !L` J A*;蹝]讞>u̪IvW 90,}}^ (}^Inx{sՅH.Dѻ/jC6&wj!xc*gdQ;iJjl5ruwq$P_8w',bψ!l]ؐhwZfCRbOPD :{Ԙ i0uFMg+Ľ]og=pwK鵧XT~ӆ=ihe wm NYt@~R!AչbʂUh=So+7m:JyF ?%U[xLS>_Ŀ/)3;@И>8֚#C-˕6#6PtSEpz^YWO ))]:6˻f=S?ҙP)fӵ/(y.~LHi /5ָ+Oo$_Ur֐ŗ5F]ٻ)Ʀ;\8X,tof_MN^l4 r Za['6 S<]~OLP+L ,3LҵY}߮D~lOVHtoV_;7&T:\Fo35MŒOo)! OjNnS 6Fߔ>c0u|8uR$Zu{qr7M3vc:*j3A;Q^DPf+)6|1s7\5cR 2g59B됷c&ȟ}M_Oϋ[?`Rᱵ '@6+ +9\8GZu[Iv SŖٗU2+viP"k3m|tk"v>` CLit#]>Ӱ"S~-8^@4%@c[.ㆤi;ne-ǣ~KĭJWΒy/E͵*m~fק`By,_Ujxq>SFRMXV_⨵noW)y> 7 3}od3icÜ<ߑO- CFɉԼZ?1/E]60le!ALYJZ Z: A6jPFHDQ17^1G5iƩtS 3f62B; Rx~ηsNVkLjY\ȇvBNy(te8#5A.6:z*p ӯ n5Jl^ Y1nl]Wf !$fa_tQNia!j:E*l+de{Oe9 ƥ;?c!j<|vh9)SW~Q6J.Cx !:Ó`BEEq;~_xlނt5ٲ^(u Ԧs^Mꤠw-AkSbUU4Vɠr,ărekzn4n60,Sy۠?]hݹ* Z/|8Pl_VvQ͍LOy`\W,қ~ճK7כ^$6}!,a0FF`_%,`^Jc<'dٹ<l?]i~(acH@]SdOi?0<[ˮiH z0[-]r)uAL9g'ӷDU͜iOb[n/m3`0˽4yvj2AЋ0$tfiUn26=#PK ׮RE^dEM૔vu6OEᅹ kNL++q:11 <ɭEнvU^k6!sC}[Rw0Dg {'YՙyMe{Wr"O([T'Iww%__q6Rg$pWqbp U{7{ d`;Bil`w}.U&k[A!zA (jm6 i~7aN_yZ# FDN)5 Xj**w@1(0}_et%?T Qo\F[}: Ge o/cާ?ۧho na  <eX fd޽(gF,U#WU|&Cr 2B4򺍤l~3[ڟ~ua u?іowx)I?|j@_|bҗ+MQ}k奄wm ,/WƓ"<|Op5m [|xt Xvw5HSDHqKB4`=jXTPaLYЛ%NeDn][?)vTh/zwfɐK=~UYs190~_=x*}Qy֙fepЀTIX=2`X7{ 2a&G)BTm-daaRQPwY9Q  eo X韧7u˹Y.]H}\k~C[w+4li\ :M#e_,4ß77^gG6q{YcLjGndGNvlDae|'ro59;rlQoZSegW7(sn 2$9%~ a\.}DeD99+.A/b-Á< Ǘ0؊Cn_[)㊋g?ӻL06%M#^`*RاTۢW&>.Peׁ/}Fqǎq8c4%+>De5No1qݾ%42nEoG0#)4FՕ0=D \B}sO^l)}n^lx[\WNx\C+_ `tU}Ҵ"jGy4n,<=Yq1K8Z'iD<'S8I$um9>ʲÅVԃ HD2q7~:L?7a۴!m:e3G2[3_n 8V`aK;fw`a3mG:BO?Vܮ!=q =:`zU^]}3(xK)uTГ&~_'0ajա@\} ǕgUr|W`dc2λ{E tS@Wykl;}ɿaxOU^ !0z(+:ǓSm l7~[u~j:9=QoK~+%2? #J(\$VA\Pz$RLtX^E[/bvf&)6?^TPh=jX|w&ISp'f063 gn$7E68 ʍH4 S}Y&MFyIW4<% #NP| chZ16uVޏlIۮP%Su˨AX{c䡖ff> uԤ-̮`.8(F]fУ8dm[X{[(+z"1&_n&2ap^sIv(8zñxVF{tf_kbLhuof0ad 0zOX0[8;vBJ}gbψ}vMJ}M1g-ɺAF(Ug"i4JMG_:˱U@T ,<'F6%7{&^w)6k6"'EDXt Bn}ʭ> \D歷#g{mN'pQpK701ݺ̲6C5&{uJT;]Y]/@+[7d'D#Pr"NǙ)`aЊNӕ}q0o:rl:>%vw}e8k?SRhg&x~z,uɽEy0h{_bs W D/mVҊW4LXsX#dGu*Q8灶4yVxY9A5[xd Q|zܲ\t2٪Se uHぬ|z󈔱 7lK;C5a),VEa:{EW c;/Ù[pe>uS85[82# د$KlB%PkfvwuCdh aQ@Ngr1g_A_:<}ݙIm;?1ǓzV]Y|Qǖ۪o+3IYHHK|#4s7GFBFfϊHHj?S;:`,̙g;]yhL?v< 3F80S_eXz{:5!||cy0-./04 10rm`RbtVw[(jYDLW!U/J2N~tkԋ+xPɱ{ۣ5y) Sܯ/O⏌|8lˆyx Py2B/o8V AP-1A n3C׿*G~}d;)5o*]%0:oH{?Fj7jkp<(h?VqÃԷprnP)yaўЈTM%PU~I3\6?*W !F={N5FQ`hwzȋMvFJ@6nZ %7~ ΚdnfT6lZ)}S [# z3/\]5bIN{ ut$,E5rIc`85捆5,)\|6BoWKlúL4̡>L*-K!e#I}R.< Sp0G,4_ΚjP ~杂Nn9$í @'Ǩ)u%ά]Λj[}[\kȻO}f+yT.z&/`ڢY;U~iEX+^4nj8LcQQلbD>않8u Xnf7uSF#A7;O EC اFx2 Dy:4B$|>J%f*{Ot}v^iN@[#+*"Cc; ybd\^|ۻXۤQR$n!"T.`-9ts͎mFH; ^-9BS=ĉ]΋\̒oDT4V#QB}>G NX0m%ۃ'9'C ^̾B~+nYJϘ=3/ D5i.e'4Evd{( ?M "| 1{2Jc OQ~cR~|6g"avzM}K _!*)Rd_Cn):[߳;+.2dls380}#ews%*QQB> <0\np31_WH4:i`k?/*T 싥LJ˥$_cTIE[L'[ vVr@YUuIugߪNQ6Z2γqz_Fϩ@-2_+2$l&iPE8?>ݬ<_+O*~+w0?y+QgWK @=2-;,U||TЩV-W&; ˰ qφs3 ߧ{&C-,QĵRړʴ8 yAy*<s=˘L$Zgœ!.;Ct?Ah_!@ٍQ5Y/9%a(x2qn)@c 'Enܥ'mN18i-HyqԐ {QjMeQL0@`M1f@?AWx<:߃EΦFKx@} .{<8{g &T#gHFubM;R;_f_@Ʀir̯il7SdeLJ\ܰYw?}`vw!gu3.S#rP$>}GA{9" e&Vb"X 80Eb>Vfmn \T4PRxs!~bMOgt13Bb"xZ̓#}e4gm?yl LTF r&BLZ,y`ݨ Lu/su+FM@ mjF< :lQT5cc;# OE/;q :vرi6|ZdNb qj L6zUo~ɓԐcr![d2k#NT9I3k$'`cy;syNtlG.תAGn~c:HբیU!0w tkb<~|^ٷ2T5yLHN Z? |I ڤymq--ƙ-z-nRirKՈS+X5  e t(~AZz !e!dDٻߣQ:4p=Im0aG0\SDR\4H$fWl|Iܱ.%2)D9:5jߒo`⯈}zG i: vaլ[J%;8iwMKt Hկ '7A)_ X3oZ,p Cos)Wr \$"0ygxPG })яu)lC|8`;pȧ;=+9[&gV`~,A :ȸVǩ-Y辤FL158޶$gKBC AAbٔ01qV6a(7%OA:?Q OF@3dXFߘFbnbfH'(2Ǽ;\ID /:,,n8Z}/6`pa՜HT]-ӌn^R#4X ߡK=?``e|WkD㚣\U5Y<~Njfj%k5jJ>]pn-IcMd-XE,7[HX.+W7M, 09̾ui@ /m6- d Cfkl +e,aWGK$GcW3\{=NzM>T?XZ䝙Q!$$x@ohxIR: E N9Ա8(!OSo.=eWpxL4 V ٤PzP?7B8V`(iA";uࣙQmkqc1 OjQNc @q||>>5R`lm{7I}Tx\ K>qgDhqpeb~?89S[;} 7C;tI\S@7} lN3S y@f<!ƊVk~DgHۘ0z]xJcsт'ͬ\l Ֆ)5 z֖"ORqhr#&8b3#94ÑFoLh45G Nm; >8l(R]aq|S8_u>{E$$ZS]CնM|JWt|F`9O^^ zl.hMilZ߃{a95$V݊=Vį`[آ* '6̞'Fg_?<lTCխP1"B'C[XeW2B仼a Dujy|E_% 3衡7{BNlcC\:;)9ORI/aOTHV`<yO*.D+/rNRjSifF)Wno `NOHr Lʵl)(_ ݍ3RnCe_1޽P#hdt+}Pًb2pAZ'o4^{0C xEo~G1b /6}[11d8+iu)P0;s+OR)bDS?=}+<;W~&i= n~,64М;Rh[eYqsF(D0)Mf1fB>OCAs%}.6*MҧӒJ!QG\E"7b_/z<Wj{n 4YN.a5DcPs*{Ԅh||UzߢBܐ߮zFLX-qĈQQx-ۧ=ׇ]{ʔٹ*t!U.o{1XӅlB݋&HSgazNrjBqǬ"$Tof*N4@tw&={vLW%$ [QRU!a#>+f5'*/4%6:Sv ƅn`ec6T͗RTEX-7"1K6,[7b}¡D"Xn2nXόXhxO ̴.&23noqnɗXqk2JJ,xP|եљϟ`RR1 !;envY]D AY0֓ln8qt^1ᅶj*2(Mo~Z!Ok4{ǶtflKZ;ˁ)CsKr`@N.yd\]UҴK-VV!/ffZFOffv&XL6O` Ɏ%smv=iJ%ꚺE$Ǻwb\⊤]+q\ 'PSg޺O tw; C2|Dot~bVQ1ʿ-?-y.|pDxԓ ]ɈFxCۀվqZE{[ 8xuc3 .QftzTw\js>#Cpp Pj iI6 )6C"vѡ6'iJ($GATʽ!^ѹKuk.*X㴾[Fn=y۳-w ~ ľI|-1 n4qE7 95y95PlUòQR 긿<ٳg& ȿ3UǴ%R <ܼn|EٮB+n2ܠS$ިS!1xwFZژ- 3F=Xwmc{xŬeW:N u;o c:*e}Ki,aW'k3jP/I&Z?P,WMY2G'VEJDTc-v`2ہ@cM71-'2hÁf(_bˤ@tD( >B/ U*jb7=2wgN5։3Ő&|W\'+Ox(fN^7>0+R&X'52NN^TFsb_IX XsCo|\=h[U,ʕ+BOٜqF-h1,kEԢ4Q s.|ךn'9m?CUҽM7A.4wjS$-xN+Zjv;(w{/WG 8lCDIGlIĴs j;Hm&.b?*ݧF!ŤRqFgn3kcz9Ê*ń8ï@"IcN`zԠ┬6TLȚ"o4/˱g5_Lb*"Ҕכ$%Hs}|c |8#WciĖ}ȢSurg]7,84^{-ɴ]Ndʙ;v#YUd rw>_?>6q4x~L=UaMKws<ǽy67 e3z0R/WΠHb مcooŮ^C;F>>PI(2p;߄yCpܛ6 m r'Ab@EZ\EoB&;N%Y, (cƭ- UCGtƃԫԩLNlݺ:' P JSRn[۠$8r&&pi& q”SFl|Zdkps||br'Y0"ڝE0[&漈xcyެc~tm),ܥF0X{㺠cpI44+@B"NdZMQ|Zoh|ĬLBެͩKszQv^E_D FR !)aw/}y?^ʯ*'ac<lxPr<!0~Cp Hcw>hFddX} CqR=8fEq=;W>EXk ,<geVBnwGm$8qQp=4rGr~K(|=ˡT(VJ)jo#$W9f! 0Rj#n:Hha7yaSZ?l|}9Ȥ5 [& ?kz=iB1b!#i)@3Mok#\0ByfuR( 5t8&wcU&[>_G8,J"*q?  ((Xή :84})o.ai6t_lHv&DC'VX" ѹ}.Q~ pmt;@w;@H +EVeDC:;TtkށnfR :V q6b-8okԍ&8AU -:wvɿ<?9?m?|~#mK:P;1 s{ O]<VWkq(A4J3vph)Jw!`yRiKxpQ:I6%lyD6%3yw 'ror>\ʉ]æ+3fi9ul}Ē!rRLGS2"Vp*] X%X Z| T}\[~_{kW0#C7O[|&_JaH1 lB !J 4`nE#<"{\DC=AogoWo2G09y|b|WUc =kMXK:a2^BQ{}k+t7ᩖ9-rԜ!{9Gf@"8-М!H<؁?|!X1 /S_'[l$ᓙ+]xǧ}[]ߧCmL150qzv2JoCb !?CO3K#"TZP;BlA9M4ĉ:#6\'A$9ZS xg6gf/9xԗtHv/&Μ;V'D_Y J?Wp4*jIP7M? K.Omž?uQ'35ic&V,4+a@&FPsdϕdv_YLu7-FIu|BVI+[)<~Ī+lan8W}M(sov,]Z\ՈgU17Lm 3߇ѝZZe0vh|{NM1ygH&BP0bn 7؆o:%GNQ/ |۽<q%xC"@EMޝF.́)uwHGXZ$}}bSķ=EozAY-\m/5[&1Y*5bzwQ0 B(?߻6=pV_JOj˨ޙWr)-p 3)~ 4$?ښA@Ǽay{"sܹg1mAi4e&b!'3 q%fΙlax6akZ,zur3ʔ/O8e].C!='b@f>+yC@՜:׀MO=,[òJNp "hdFYJqkmUk6*M &?JԇΦ4܂JW<>So4kS9A}Wv*1 B$[X3U/=~ccm4q<3Yiz)(vR̸\Q:.I#LƌoтY=}v 2} ?'\Ayy+kKʲnY٣zsɽr٤™pNp/*H\}o/"P77*^E1|>rj@N.'C .KbDkWy=F,_ lVMʧ1bbA2ij8e `ER96#ʨ(u ȊՀ$.B'Y?vE[4JI{c8mM=0NU'^R 3k3w-)0LoŹ4"Ns)C^D -KHŽe}mG SNS\w+ò"~{\XӦ Xq3w}VK [ XX+{h׻(w3MM ۗ.fyT={;N.M]k"<w;*짵mFlɃaPZL,yXy3a`['$zpCjsl4S Ɋub-ÃIב4ʕ$5 wP5)bp0 .<|ՙ4l%zY5򃙬/QGR7WngS`fvvrze44O$t]M25^)3d3m ,{ ƙt6n w#Kn?n/_l˸%}Pf?3,cpNk[~55(o#mduѥ=%m, k(i_8ኪgC?*({65חtUmX I$Z%L:&m,~П7׺' [SЖ,;4jqO(2甍4lJ f7챷o& 2csnҋ}/W #Us96=0U%(͎ ?ȩ&BkZquv  7“KffNvM*s[Z ױz~j:n$D{R@&2REKzjƷ+4h]{GwpNbu0vVn1ESL*gY.pT;Jk-F?+u,6^S,* 63%2e1{jgWX(C2ok[FKip4{LM5H0,4k6E_vDܔhoC u/~x)b'H4m**>%hLn bzөi= zsj[r j TGR9x}kC;T;࠮‡8z2 󩕅Tl.R9ݮr^}ו[ޖOj'aXDqXHwVdXVyu_!\O\q|ݝʷʚΌ\9]uď7&s P]#_m)SKjds2j<Ot>H'[͓0 SYg-'ǽeA^{7\,KԮ%fKuV Gc~M,XW: 8~^ydp_W/Vg+ f3H\[~&rݰ?+ A@dO/徕B|Vpj=|;yá~ {k7l;WwFjq.kEHX♪Sg>:OR3q !5Ԡs<%;2{V7$s3I71%Fr5p Wy|'k{9(6p.|!i+zyo9lϹy7MV 8yl!ޟu, ,uG^:@U8|B*,$> ʿY$/fb$UOfM5%ͅ';"8)ȳ97QaB<3fQMY#^Ǜ=*j6rk//]FD0,4S$p^cDBj}~sGpTtWD _‹º%[@5ULjjn}ц9Hzo=hklv6|I;x;h%q>IxlB:aVŮ:8']SjEY[!ZD84J [TZhl6q ټoI{,!ʹ{x20 㖀E -WXLKж j#M-TĎP Q,ɷGO mhT RWl g,".yJPJB&sGKZ0KT1p0̐w? =uL#AqW>װJVs?::7f?77mO!BO ǮŃd6*XMk:жjoUޅKD.\թc6vUՂ Β@ ާG lU` <1yKRXO /00# NopW0.*VGp_G&T2y [9yɚf9,B69[ƅ4\({D\A*PV zJ M9Ex1\0h9iv+U:;eF;XI#K,s]DjMj+]M?f iL؞o,?b11/OUh73%{)$oމĀY[071O8Fx˱? (VuV#`bJg"JCQ:NYRXj?r6aRp:&Zu k}ͻ _H+H<%p\ vf9HLv#Lkŭ#oh1绲$#z+Ǽe"ȷ-~l_wdt'9YA =ڱ4K_^y<pLP!j$`rɻ#`glVkL @X5Q˥xA'%mSԊl j&ҟ}BsA=W `'VUqRi#o=/j)KصX91nJ0iI7Z3./rr@7^_]e9mcs%AkH-^ AnO&OQ̈:P8cjbmqK[-rd}p2d}MvT(!l6sta~W jPk^/tv@:S\jV!L/3Z.1S . *V9éK5, Og1\X}G0 zrJ2^IKu&FUgEq~n?>HZIGP :fp3.BHZ)!K$Tbv*@7cz֑)k& dYr-!;b;ei4TbRv ~l[".Iޖ_-w Z9pPSA'H7o$~jhq G_ "U#ajڌ0-Mr@ aͽOq&|xu#}+vJL?Yy[S$ WTA?y#5UKL}Eܩ/T=+1y-K\x7r\Op8OOv9~cS^ĞhL#4G:TN|a ];p8K4/);#kHjEMK_5.;5wcw/,䄥b7t"KބЍUk&+u^tD}I>T#"A J:qBiu`C؁$T.˚oy ˉ$?OSя%0_]:KV83&uջ#9<5}&'0 `u^9tv>n4I|Ù@10޴NCh~ccjgN9QDvcjfR)yC#=Ut?D}Kd48&f11zk'/@/S'{|Rݥ7Wz\PJsfց' De+TOX8d홓z &t:7n0s!'E8n~gO8G`d5ކnrt$T[oJ*Hb;LUK܊C- p`ofH<6OK>z'Q2z+J']G^6W'_tu[]zO,U(1U{M:l %~)3?2Iѱ`=g;!Rb>@,8iphr[# QtH (MS-1ky\r bUW3*~=zB|O.w^OIx_*t`]Yp-.z{ :GwruwݵZ{@^{[ s J뼶>4VB$c@:#cx ^:J/N~\))O{ <ڒ, N)Hf( xAޤB-`;Hwve:!W1V[Jv[m|ŴzJg^a/F[OMɊȱ6%J U7/iAٶCV(@Ł*;R溞$=I}eT1b\G(s㸺Ɇi#'١bIWJ+}u(~u6P}=eHUt$*,jx#Dy'dh+ge87'oze< Rzy, _ ~y}ꍭȍ5QvQ!?8(0 S#s\EExjT j5()^5߈IFeu[nu-Qyk r>Sz=5^#S66Z;`S:/,neŸNrg^&5TJ ieTmױZ2+l%̹~V{ Rl>{^<i<&ȀzΡD4*ͼ`wը t zT>szX`{bMyZ{gۙ/-=$yJ3T+Jf*eE J-N}y|HM9-3U%{-))%ޑ0jUcS gǹtWO0'P>w9'?LZ x`pY_oҏhN|Ե19҅g;fRl|YXf=IgQIG%[2GQ%T, P&K6\nhEe%M9Nbk,O 1C;%O9y~=~eOh+$rQiZg֗ڿtKW%ؗ;W-(v`rOb,kw틣_AŠF˷ECw{=3v^RW-UUw,X+=s=vr߶(Ư0%T; г.e":W׹8:59?Rb9x,&flK{=LQcgtF[FFrAHݬH<))'@ug# q0&1P۪ <ϮNʈ~nNeڎ,PYһΘcM67`Jnsn|M(ѝ$9[tv:eքt=vG<`xqtCY]ic޼_Z@`X<`)]Y OFIA捔 |БIpr3x7,ͼlӠLMܭ^2TVC |yB:$nfDT3ΥKI\- ECwg6shmWj\|q(; !;fɿ;trCh[U^E-=g %J谣_ uDP^ rMMxCz,w(~UGb9AojSnc}X-;ɂ{L Byb~ &k#yUw;;*1G*mMH]`5'f~% LPGM6ڲ>*FZ߯uQq@$j̩5:xJTQ޳vV;ui:^>`>??ywa`,Sd fr`m9Jc5N6畓e^sB\pj9jTDg)av[tfM-o&4'َ`-}Oct0^cxqW)!MDs ;g!_׿HWѺcM^LUTp`f )ٲ0)`jJՑa/>AB$5}Jw#lY[wh:ڕJJ~iQe0C܍ҳ:=~Nw1[I)uIŪ+2S6 5VA/٪УpR)_/2ܻ!{y (/,l(|=f 5QU։qx,zTLjS2e/O8Cdyz/&n,hՊ^ /eк%FG#] yNiWJ> i#eNNq*41Եegך% PS$AlK{ɒmo!;PFdlnRaM3^()1,\iqMjuecO?hHhhm1*urQl>mAKLe!S7$'ݔ7acqq?/P+h.ѐXsE(34] C[ǫ&E!jH4p茥CV#>vc2K[CoT\إ)(( y24 4QF0T\4v铒Xy"MwDTRec*,#Lէ8A/K֊i^-CUdrҸ0{P=b%p|J?O+tm|/ĪZfP[ƙϧOՁ=,3+*Wy&!5sJ0ª4e7ڏj1:)08-/bNg-=;fU"Zx ;/Av[REnS~c18H:sF ̛rDAFYyIRБ#SH#K@Fտ~ߑ;˴xYceOކw%43]393'N72f;! u7!;hrN+Xm2DՋH!/\ 2& ,N"V8飢6iS3`G&#lTb&^fQxNcv'ceCMvfTU>uni djxC>r\?q21gCJڿ{6u1a9yJ7v# m O x8B9M"n*n˞vQDG8ޢ=Pbf^3~*5hbjRG^OM"ɀ!'sqSY&v~⊓X->#/k(Ye`qskO3H嫬ŌR7?aCztf_bA;q ]{7pSz=@\aEaދH0o}F)uoX[Sz/N9}bRQy=+cVumYd˿X"yELCe[f'UrIE굡E$c3ǂ\_ܾsn4HJY>츑_DF~X-Alz]4@a rdy}UHh7`e,AUg %W8(s5ziC_Î(l?~Vۘ}:+g$׮xiwUn9ژ- .W6MWԍ;.u?mwEBK혧^H#sCGa J} cuU\u, u+NW<'}K=4phiI~۪;,V1G;a(RV~ْ;Eg\* > D"Y ZʩF8X}.]1LMQGKr[Jocp8דBS1Y ;|b)yHY{G m9$p SuWFs(VWLJ >!P-DW)в'$ȧ^-מ0F17J,uؿDUxĜ lٔ^#ptgMa]5>Wex+Z6I yubya2=Y 0M"3Sf+ي[1_;Qj^7 }AlwmQuM$SǽqxO_q8q')#eםKgD)TF1{'?QU~:{d`YKvYG^]-F\*<'F+({m-i?+er6]‹t7waq/Ou"֐Y:=̻}˒Z[ާъ՜ P~F.;JR: 8 TA@cutlV m@%%,L&`}-TAErk®=œ[ 5p _cu_@鐹8}K]e@] ddD1yfrﵝHd5ZSkB)2b{~ QJ!ɭd8kS}{sTX6ms cnK4 1 Lix,Fix^ 鱎a=Dd^s9Lwa2L,Ң;K-yhc̚fsV8[.#IOgJBailP3k}Ul0Ø59=Җjc%7ϟ7Alga\",{u3\m忭I`:K= NG>Ϩ>q}r{НTirNǗ;[2SL&LSLSVV[VZIRG!Y?xɽSM槊MhUz)r~~="5 7v F>~+_7Py#CRy8~۩4Y[řRQECjkO҂x=ps얺\X3X<;;^Ytks,}[+M~T /< o]q<g5۹Çxk l1ёSfQanC#XTDF5;|(~̰Дo-BhsQ,Xp);4iL0n4,D"\lc_ 呶ԗ74 }og-/-kƼbp/zbcӶW] I%S $rTXqYM/$ ?]*\S);%Ⱦ%%E'ͫzNJ jfΡp߾ Ms앃 }IN:#v@7|5{.z#zJl8OlcR[re =R^ڣ![Ξ$?^a m[[8m8%R},^(sRJ< rDں+g'FsjXCj⅏xC)feo@[ e5 ~ɇ* #-#lۓJy8 9>`oVgJ/bZvr'I#Q_O MfL"!zwwDj<>1Ϝíc=<PZkG$혮B5ʰC+PY|8wߓ⫟/nZjkZܳ9xpUbϔ;hւ俑BJuK_#}Htf4G)q?]4|gvDhGJƋ=J)/YW[R>cչTsqs5j:q@2S8;^aβ^XQ5oQD_m46m"w%x-1pd8(+~$ó<\52 Ѳ ED5GZW<V2.OrOr+HȉU<\I: VJ;l=3&T ę,y2=v!3Wwi>Qk%?Zd!9e[ݴMX^;~4Xr0_b# Fvy;ZFc"Q)܄Ş7_g`I/<< _ >1e W\hW?K Z蚌B*ϝ,>ܲ[xqv)#Ww3нm J(@?U"$:6ʄ K#JU˒Y$q@l7>:R:vl%|2:m7t0W?XD. T(,8V.ﲧ_k&;EhOZ6/3ghI&]#t(f9]=UBag~Tbe:u/BEuᖉZ[9j5 Gd{]̉a|Y9&jy\iB劓c/6hEo_Zׇp2V2&xZ6-U\JtpZK`1V'j>UP Ee)'*|}E7x[F5v׿K[ Vzwk5N3qͫ{Ni`:ZI!eO4Ǵ5ShjTjȚNi֡M+ӇfĹxS3Om.gwAT)ڊBP/Vzw}b5#;$3H3N7頯J2\e>iIxI%T_XKG1#ܮ@{ikr`Y9ǚ[#!j#pL`Gdf` M>T)#gav5LyHT(3$2Z\,ط[Ekdz׻pa[%RldTc}ĈW;>7]7 Q6h 0'`s)!ǷAp4#[ 477u ,J}< Շo2 f'nsՙI-2H~-:ZB)e'#6}>Vʴ(‘:.m%ب9џ )ݗhi͋sm+j.}38g\^qTda.-&)q0 [+<7C Ì&1'٘\43[QvCU!'ز4`ШPdTY=P.,8geUr̈#5༒s{+׮۶tu\:y(6X^pnbN2OZKl*,W6zɨuGOJ ]A8|UGE Lܷ<QɊI\m%¬>4l2ժ[=~a+%Qa_gr10{?,7#/7V9['0 # 8S֑@8=Ǧ!Q?|PF?9Rڑvx&Q`CP:R^Qڥ-w-ӏT4vЦgԭZ'arL0Ͼ(@89..>Bi)SA#H% zʿliuo^ahc,'c=6G>KQlnʐ09sYr޲.scB= «?*:o[i;T>hH ip2EkN-/-g.WGBӪ0nH3(~GmsOMqRXC,Rt߲ASLS(${c7{[ܐ k~t'"|Sޙ >CңZ'o-F v?-Jݳm _nhSzz,Tu ;PVR?\eGuxVajCٚ;S5xDZpW_x"T4]-Ě rl#kժmh#׶YǯsJ5;$n$bms5n|E݁dKO3"F?!-TGO3ϱx~f 7`[^#4`"aq@ iVM;(vSaF%\\ǝт`xGv 5U<0ɼTB+/g'pTЉ3JtrŢԍ4Ѫ-Z[{7b"gN" M6gDW:HHַYݝ3a؀LF͸/nߏ6}~MG X#q6U?~Mc:kYe7*lBfybgs7GT.SbMl3ġrC!;̉+Z"QT%#T@X6Eztk9Еyi—w-$sщyg+Hn^`.` iS?4ب鳥cb'Յ aWW|N1'H=IXDR򒪲vU sc;pcLP0όgyrv0^Wd(,l?! FP*;ٚJW:!_%}OH,ēM QxL'ANN_u#0('~פ7z37XEvwY :@^[.nۉD8t51ގ^cٳȷ5YX}N:hFgt|iͶ'8W#4:68 mA1e!(})bTynwخ_w TNEQrL;Z >21-P[=Pgő5zk/t,5^:SJҊEλ:|3vk>\me9u|gB<^tQ✚R_{m 7bpIZ YP r@߃mӝanNcm';MwCם3|#dW '*"ArHyh.w{4k4X%G v;hq[~{?x&%e1yuQ%4R6-`6v?"-l3h9ÎF6la)ebڙ ; etE ǕȰϰ\v[ eU[\ -YVgIfr-vfv&m&d}QR9q {-7mx_]xdYdk3[\7}R!M K0*hg9t?t$rި_A"骨Vz^;#)lKŦv/ux lt;)T$!l!%%[D, *gMF 3t^>غuT7;3.+s&tdm=z=2 8$_Y(rveMqg2LὬ!Y:{ʈ%|zV6V]o,mە\y6<[]ZFw(WWLuRc) ߲*˦8F:z8Dix].͉. ~.jgO*^_VU#kmRo> 7}L$2"i28OVkcdQJ1(Icxv2P1TKЕ#cɫI.#C~ySt[W˞kNn "8aR`{\.lkBE֕o~uT&)ܪܪ55=wW}\۟V_ʐv(`pJno{בg]O6H^udP`*@tN{kjFN -"P|TQj~ $f, &Ǿ$DO:޾B]'Q+=醩ʡВggP>[zh7qky8ˢ-uIv*22i`++sX*厤5?ǒ*dNr%ggvj/~U}@fIVSaٴrcE> S'[Q(3Ql5k;.|S";!cR~ьB~7Rm3l#DZLbgyb{_848C B|$=y4C`c[d,E6;/vn^Dl)R$,-~(Vz3zP/"x^`vO3nOΖm){}ZMy XkO)8 q@]- ^l5_j&E^&, vP _eRUlpxy ċ;dӼH^P[;@D>[?1ܟz(HʪH S>pdbLt.gd_pR :q779g%&gxceW37|xTunۿ=;Kڪ9PDPPAp5mǙYGYc ᧓G*DT//X V7ǿ~ejCE6#^lh3";~2% ҪNJS8I XT|O73g%qqIG#c k$:@T G랡f`px0ŸKV[0u]˦Õ.zEuEMў4ʼ9E!NO{y_~D:Y`K)< ۤB%# "UtQ!f9N)G0K;⥪WDbS%U-| 0gx7$#xݼ^ŋȒ]ܖc̩C>uw]3'4o9rYˣx㘹7fm0dxX"vTCʴ?WZ7ɜJ3tX$/.=_\4L/R'!UK @[idåB {7IGȑir!p}`4w-p'[Ö%|9&p+apP=5{Y <4I^Wu`uxV)2 $ etB7Βn+XJ'L$r"G0J;1{ժ ⺢t2)aK*+> UVڜP{fJtxu&3$lԨrBNq3J&džOpV$BŜox+D9H?ʭ5NbGZ-Z*) PNĹ7]Og[5 JVz"(SA 6 ~*5GރIijNTgUM =jܶ6+""hgAsB'5[$滚R6gpDl) Fw zNz,#r Wbit\k+@:(6Q|F{ gaEޭI7UZp%m!O Qmxa,s}Sg ;( s"FIf-t܉41Zߒ3>GoUL~UrjᵱF`3g*圆$W-NKEcQVm}%!:Pv/p=Zy\-4XLC 54<{ƔP$8v hop(Szji9$PDۈk/95.z8^np "ռmpMBnd&'l%vk(GC׎җO`eB0녰s`ɬ~ >܄Ð~ #-oG^X+x{vH'n9HZ?OL( xB'% 3&E&ܺyYѾ:2l؝͘;gVॲXy=GPiuHe9`t)f`aeIhƷԴ kX@*" t͝RVnYuJO$c" ԶvBmޠ$]F`N)]_b%!ЬHPr2*J45o\tB؀"9\.I xk!|+RR 1N٪RRdh (Mc{hGlK j4^^\"Qʊ,OʼHa7!/ 7$fcC( Cu))ooi񺰴C uWx9:8hҞ= R<|ۧ:_ʾiPrJ\"v>SشHᖥonLl@K]w+.`gmȎ! &SφeeIE]CvвB&C`n"f B+(0.|t3),ӂQ~Do&\lm*U-BKYpi тuÌV-K 'b~IhT) fK'y\U"Tbk%N^2-<R`,R }s^6#P,ny6;7F+0zz:x9-I[7;:&2hqP2*mbIɩ`G.8⍤z*ҙ[Maߍ HeZ(p(̓#i@ъ;p1;?J8l؇#k70 F׃4/)ӨădMjmj(TrRF_Momݷ`d)5%Q~4ȫs4 s+:3o2' ?|tB^e9JKxHzxջ vPPME`{WւKfW}>ͯA~^xwٓθ» <7*8AX ʾiʥΡ)ƷER|g38; ~{UxNx@Up|b{*(@Ƌ˨#,A\;%yghL:k!tM4[{m^//^菱&b_1f?[1w͢hT ~GBkv֞>#D:@d$ƷX<&qW(Ma*ܫ]ޟV$v.{%{ۦF=v̌'*JN^f0 MH)NBxiԖ K~]Z J+݃t )RvĶ_SuHJ4YnrЕ2_=t9t>8X,Ji;\,jj'|^0Z)UF \6[b: (^<1;,0~%TL3(u\x-Ҵ.ƊXωĘN\ 9\^F%[c0M=LnG܂3jZ8t6 oUȋ>J'>N4ӡce&5KTH-Ͳj ƟA<qK;RP]aU_]JJ:sy]@s],?'*Cʔzo~i9>Ԉj izd&92)YW-G)_eySbUޯSefDY:cB#L<$ŽVdl.;O l`s=P)q6Rj)3lYpArᙏ:>+srstp@CX{d=$%UfkBk0 "&FA\ôG] ={eQ o+=5ݯp..uV?lv6$ hT 73\+C%y=O0hjbg^x'{D4iqXg (׉ʭL .s~q"jTen+P9 -$FR8`hu H# Iy pZ9iʞDcm*u7p1 g9:_T}ݻ t~;3;P9+X^zjQ8YrRM()ճv8 vbČC5anG|p; ?>jb+Ī,-8fCF@} ZEeJxħyL~](ɻ]>_yY!Muc4>Hl4i8 :,Íag]D+ـUEwD4 D 'ZCo2Xr QS<ݲ-zyҳzaǏAL=۞pQq-n&=>g;A'#< ji~IMapbPwfyf"TC(Cr 6VrhhhS? QXQrtrVKWFWXB:ϘİdѧQ~ dnt64o/OA'J ~O g/IK-nnMM_0o)ͬĸ9'@7QBb߀UJqnWۿ,yKacMр"MCY}v9v֕/nw'7vX3cf#b:n˲@Hx 4l~L]s3ozO4f")vEMt_pO?<ǻC30 Bvݝ) C"?}|n?蚌#1'$wY"'vnp_~d#gw[?ݤ0%{qXν۶X0p)y:p]{; ò} .H.Q=yYMJ."}` DRPuˢBJDT #wݱft N7ebwi_8=xlQ$fq5>>mKu.A^~'h8Sګv>~ CF%k\qx\aCv/8=7!b=$Vt$ ~!BS9g>ׅ\)1dGɂiI(J La^S-u:͉7z+41b Nį*(bmE^W QbC* @'h?Ke2&SPէD='mm>. lubu1GVJ:g8l@Lu;MT! B` 2f4F2Nmsvc8mf zW%~Ɠb'%et7@yV:ems5pPw̗l>[մЎ}2Db;f{PScnkI#MC fJ}v\Kr0g?f ܣu:Q-O?XWyȝ`ďԼ5?ѣ`h4trǪ˙azxHm3 Qfy' "hԇkIrvkȂ2V Sz%%3!|tBZN7P&0M&<|أmdNPI`p_=%1OOJpa%x#2JÊ۴_1:.Bam+)?T} B1,o<"H$`4 Y8.\7}Od:aGm{Aň旀t;E:#s{hwg'v9î}tӶJo넭LmgH|}`oY#7|ي'jO}A䧺|k>|",O}C7@R'H ][ q˱_ ͭ /< ԓykCѮGxob<4_O>”\ȭ\Smg=و/05ޮ79hT_ْ4o,j5Y"e3[+tE} Ek@*y' M}MhzĖ ]RG*PDn7hǂ5.spfe 0ゕoڴWk8. $9t%Cַ.|VO3ոayq ɽvKΜ+3/^PNuGЖn> P}GK{׫0I1#I+?.F:Ekv%NYöh!VcV㺍A1wAzޢ( [ˊY2Dy(S0Zr/xC /F9>zJaU%\CgK3hxWd⌴EXʢ#U+fyc*l{  ͜H= 9#FUƪh;xdgVDZGc=e[r,]M錞j%C1 0Y%GoߜUt8m|Fo:}8hB [%Vu"bRXv8mjMDRcOgoА`SS[႞l9o8hg#s.cLM;D#f4$dlB=7 l)|fóL5tی6:YH&0v2 AЈђxR*sqKOZGCAnS$'7:U!5yk!=/1*} "'te@PhZ㍣AلUBu=(}7n(p/Fpc%^cBU~&*-"IP+*I\4"%2 ]?z'j*@>.Jdb`)#`Vɠ,`bn;w`zT rf`-cuxZ?svo!`npk.j:SY\dOK fLoi4̺,lIKNMe OWa"4B$qPxDQ]RO|K9S:AL7l.A ((ةeξU9Ml4+?(Ӈ6|LA{1|9)ߵtz #>OPOBhcw1چ2 cʆ>iiN{&h #r!OFh7*j5af?ETW_Dс hgiYr881P _#)vw"u 99c3z[pCl%e7u"7JZ EW ab2hy"caYw YdmkrgvTη.u~ rg̏ͭ:ԏ7/DXd>g ;,ƒC;}-~qBK}֪CPy*ơ*fௗeHf- hUْ 51U [dj&DoET߇_36yʋ%S1?ͽC;.e^ZOBwJGu5|-d$~OcdRO~d.h"d(PZ bd,/ڨ ZmQ3"|i:Tc qz{Ǵqus,8j}d?4B0,Eδ߼Mhg{8HӮ%OHVGwؕXT0$"xreBEM*QT4ѸU j;̩#FQ ]p_uj豁#z/;<:=u$bR;q )ZN]zQݙYDUo[W }%TDy%!4+6̲j~N\l/͕9Hb%Z}+H6#VBZheu!" *=Ty-.NuY{0zR/"k i_S[VY/h "\o,, jqU9Tۊ ǯ=}@HTE3(| ] 4(KW؄a  ezrD7s^.~x5[4m)3^?F6Z6dAAX&HG%})$) Zp_b8$FTEb,OvK$DKR#=YN1 n,&QUu'\i3}b9wT m|8P18AZ1yM4`2EHjZ=X7afYDi6f~W|a$U Ԥ]4=ϬWjמjSHp? :4#skqqnVw J/!  u sqpHJy>O5]r/|=":-HW jAX2}0>ثb$BL !Mn J/k1FH4\.^( HʘC^w}R>quF&sUBQ=wy}Aܰ" W#W!f$b!V9 gF1D!|,\CA^bę LeqwDӗ156R|EJ`і e҈b}. _nR.^|<3Z kQ/mg\ :Ǘځ߰?vU6"v۽c3U><ÙѝIby(UoN8sVhM<\Zsik{GRDQ8Npoˁoё [c-Pnu ann{^(.mBN'si]Qcį54#RgQ_89FnWdLYl9OO|EE5)Ëp0J-zy'"j7/9QXdJ#p|(ueP!ġvՒLjѥ-zk)> k `M1t{{-/h%dX!MPfpϼX0 83cȋRsV"2rzYڸKxp|dhSA!(-c%~Ҷy`W<2~h._h&4ٲ;ۻ/$k޿'_P={a₭|Q/,q'8θ5ٲ W%"(X`Z@%IЄwl8I(xG4cN3ȾQr ԴXܠT$KN"~[VL*ؕiAdlbv>WZ'Òc%R,wDy(h@;/(8ѿ|NyV~ U6  1z_pF؜$P1(OVhzWqD>9ي;*hedYWn̡.dATXiӺgl<dǸOۢf1lvGXr%G毰yOjT p+5=kV}Ơ~$59w>ͽ;'tQ oO O,e]~{lE}= t$QVKA{6#}a{~?լ9Z_1kKJ XpO.%x<ϊYAd 7B}z+p":$T竜A;[Hf{' 3"oJoQS0V;]9 %n iZ@- =C~ٽ ]f #23:~;=P|܉ 8A&)wx|M3JOaҔweBiˈM[%6;fA[V9*>< ڻ߃*;Dl?1v* 7<#DۖcqZ$8ߣ _?CaޢuG:s6uU2R *U((ձN!b7Bi3F{ә"MAڿ.$?%e2x2k."#OG(LЫ1YfT:CR@!=NuqNmlk-m* yY^=(=q$=b(=Bv'NnWrc>cI]=Md\V)U>J0̽÷uB=-p[v,v,#Ğ<ؐ?ω-k&NݶQ/H"pGD`RYT BU [7*^1Xx8U@ Ƨied49οJ[*Kջ(D5BZQm)KvoZ|쭎b F,7m<鳟6M bK}P.Qc+vZK瑦Yc'݋m| SD4yWdN}NyMEGlͰR>sG!<h/~Z{fi!} 7,y$I_$\_O\`)OO(H۬^"`ë;3bEO T4w/p/ǭ^k!䟐Yo?5v H۟M# mn'(Gvrt3n;fH`w|Sl5[,/+og0& Lqfbb+ 'YL[$=TiuqcK>y%e|JW f25S@^ ~qI:#cģV5iÑ ,j;}x EDB m 9koi3q6rsއWf ( /akwT7/\ZN<]0TL%$)!XƂžS -&"^\Cem/qLqp!Iu+Hp rH=NuM fd,2Vg+ \+s\yª5zZ(e@BAXP.2Eb|oԿ8\Q҉tE* 7ԭ4P1 e=V߆&k>`>4lVߝmzic_֢-ZWi3NʒH@o rY.Ȏv=}FQQu#ޓpoPMZ~/+|PCYXkIy yv.a ~f-N`yx?`Jas\3`4ҿּ[ي?VpqĀHq/2rv,僾@A] m܈ktE;<ֳͭ+)VjXr09 >VEW_-:|EJk E8Rh.b\ BMR |sH0 9O9>0NUD@ιTdkaMOhggk5K2$z"*׸bEvh0 mΦn[Z9ZFS(ƂL^ WTHDjZ'Fa 8F3#mnŦ3I"["/frCD!Gt,- B[$ ›'tnd[#[lt6e>##7|j_"U!ݜvCdv-lx$1YRӾv%>iL6= }R壓{ F(GB?sDilJd+C1Y\ v &_R{5eX96u{1aϕRlJR *)1ˆFmz}nL 1UJ@T 7tS }X}r#Wrm 25>aFwaqe64q]iPXF>a{(7s G(kɮ*8 GeWabbƀ5zu^ h𲜁֗7}kv|K=jսi!HnbS(7{G^QW:\thD޽w~XBǖB\hZhŚi)"* ]%,6cqPt2oDcAK8E/p\VT INJ` FQ&=w_\"Z-P]b8^.[Uk_;L$0Bp\ta#J%b&/T'slA*[c1ep˵n~+yq(" bi(?и(wnنy BB ˆ%h؀B2R+)̰H/ҟF6dƯ?T倪VS\& x )^@n@vq-vj=M@`!'y)E">.m(+< z]a8Z#Udn?i %Jt5bCv\XJv,oC DQQ|4VgVM_-bYL:P#$p՝쩎˷41ZST菶qjT5Ӽ.1X@6-dtskϙ:5;ǥYB§K,M.2?Il~daǣztGVNED!w`Qַepu]q+d g!h-fU^!LT>ݽX9&dl-{o(VOQT<"¬Ej1lkDːΨ.ls.6ml#>6g9?X6bmp);pIYy^_>rJR|Fd٩-(wkOx"<\ލƅ2"e=Ïٯ^9s#a8| ]#TQ,HYHOn"+D:Ȝ.6^c'ҧ[91,-XJnͶxTUIwhiBp\jA#r?F{,[wI:l׶5[,]MK=גF@y1TAHMu{r0Jx͞ h!j'ַ$WZscAD@%EFrM m@;m%ExD%or;:]2$7t$MbݛGjb hϨc@[Hn>Wk{%{3%ĴT[vG}a(E  ] 9ô0h {ZhaWTVpoc}JzPc^ר^Ըsv?V <MZnox(.}*8uv-\ ;<}2lX+qTBrw '4iԨ9 w}򅵣uc[!Ɉ wȓZLVl;g,stg0?\~/5BF7sGz7N>[F-7vIgDXbJvoS@XKb0c.tҀq?xrs>.Y&PVdpH*=K\6\R۲`WBVgC"f 7ʧk]_%KȽ,UNYR@#֪˷ kNn-<OhޣMfU˃VwJPL. rxޠ΍wݩ :c٦j`ĒP"y ``\@oN$0]!ߐqv]I~!=dr-TUey)w F\ }`lwǡ*^$$̓֞y&-_^%cB\PLD? 72eFϬd!UÕ^^VjGid b!|f^KK"F-orwJl,z;k%v+ddJ`UeW Kk!̜=$x=u.?OδVL9taЅA9wőz!/eϸ\E5fzX}[|tk\]dꮔ'$Jn7kVSEjmtG|xͭn T54U45D6M Tv'pmhr|.=86}'v ydyH"+ 6yɒu p"ɞ[m@6&m1S!_g̫cA"88nYƉ3կANL>m4W&TniX4\9Dۑ7fM֜/mAI*C8lU-`p;'uMxWb_^֦HC/o|7iw/v?]|e)Q-#BϚUu~e)@# `0`QG?nSX5bi"2dISkkl"wNxA:nm<ƌ)Ɠ-KTaGsF91^!zHh&ݣ_ILEP`YZj+2أ B]fhobuKEjc󨬠0QpEKl*Ssѡq]@ HMB`R{JўF[ M1^q+Zl]_o`؂>{7aitQE!yRgÐ35:QƏ\8u{J.x C|rވ/ ?Ӹ3LiÒ*O!#΋Uu`*aeoHaN;b$*нE}C*YD)QB: =y')|&4f6iq]WRHBx yI5ipͮ杣d@^ZbhN9bgwSI^Ǔl#x0Ҳ}VŪe#? ;,4(zG:-^N-aKmk_rF9^&Pi~8>@G|i^?U \ 52ːLbKc/C\cOr2Ad v"}1BdW?XA4Mut`=tar==Zdn|%vsZ|!ZݾjT }pp8;h YGO#quJWzx:㲛k~ ,x܋\3/k5dȞ!ۺVwhiј ڻ?YTይZ^0@[Dt_pRh"G@-Zz8jx5!R=|$؎y3#N%L)X],6FΘp#>!H KUj|ᶭ-x 2tDLB # uP5]'!@GaUj/픻5R9ϊTbWwˆyѧ_~,uVuQL ϧg+ؚ c Vsڳ~טO2-*؎g*"4/8{Aօd%,^.?wx\+|k`C!,(ru ~K JTՙD@oA;yylHY%1 yH\]saii[h<47w| +?ʢl=YҦ _. 0}59-*;(>?zS\ɽuzmhn5:e={zmBC7 lR_)|35XW\|(䄿2gj-kGRbZ; XզmgYr@Q$n#YIѐgGByDZh?;W (n ّt陀h{4Z{Vb'a"?s+|HRʦSs[ whZ{=!!w4w"R9bZic=Kzoq`d(X-'/zY0vše |`@2g@r7b)րk{23q8Hip7nf@cVܑ3ol3~jmMwfvr>́ &M_Ț_c7y ~zTظ*_Afb$B3pi\wGNj]Jʸb°wq[5Od3:%o9j+*<+'fhޣ:54nĤ5Ah.zZOOq{9F3MȜ[.,S+Bg뗳ʤ_?G68grF]MaAn(2!ce~dU9;&d`)Xrx\c6L@g;atщbDwfKB1÷uFD]PMYaU 6wDŏSAxrf;\`ވ(n4cwOe2kٯ>lq;By:Kq@'R:0L -oDu`4GOŘc%%2 cgW<#kw=f{0t.ck:Rtmŗ pۄh^C.c0m-8 Jj9>+ +nٲ!Me~_z۹2 P,8fK3UwWLY>Le R =#IrDC2<-Sv2 na*RBKk."KDPT!yffȖ#Y@=+/8t!d0e RiFD`7n0S(5"oH伭8qAeN$,5.8Kk\*uLaOhߚ(6UҏQ'Nsځ'kpyWcvBo`u1Uc8s?/tI_wKX>Iv@ 4p(浴:a!ɮy~7PsndxЈ.+LU,"(- TXu%a'nԷz,cpMT`SX), L GY9.$llثIVjh9wF+^20yube>6wL7RR#4)[M} 뚽})pE5FD'nGRk<?l8t<=C nR1J.pRZz+-/A{ ݁L{&ĖB'[t`)[P;V[ n-J\s.";ʟ@)4$5o0D"ЀK0+QVBDƜt=J#S^ ~{hP87)ͼ#UG!bXw7}ǡO m=CVlŶuv_DwJ=f?EB.i}R H?&Mm]-jd[]rB$\۴8*H5SH lGM1.r‰> :! h#=9GwZOţK![a"+j]?V)iO8WX9Ѵ~9z jrawG(Ix ސ ĝpdU]8#-ĜD\L1Tj;#d^cplN5y-,pwW;hN4Kv$&Y5q8 /q }Bºra-^4]PuSΤS'~⨮ FT]T;q#r8Q?@Xr!- /T$˶=~=Imp,mdvrUQFKF6pl QHDU)kG|CT 33KwTaw#ϱ1gmvW{7Wm؝8hBv5/Q LnQrÕ^:,Y:CV|T95ȏ"|˴81jqeMg:\Kǐ66ǟuy % f+$ R(>s+cE>((~RZb`l52g~"9\=|G샴1 9A Ͻa"oFvr90TڍsvX_WH-#fG|@/O mz(]3/L8c8 5Y+aL69& Z wN0ψ%b̹ r!Zh=x$Lb 6Ng@@C 9G_Nnk]j[g![hpќ֮RmL4#% _b 7褴 RngE2Ж! +܊jش&>G\fioѲ_m&^]^Y@qXxPY℺tG,MВ$$ux?}!e#p&d[T dJ9]3VxZpAP@SU~2Zڮ l'쾁!Sm{9g7vn7Jq ZBތ|%!M[Y,R`$oB ߰(DRԆ֚m;7sz .œfׄ7rN `ɿr\\|tH_tP@sloCBކrNď'x%jdE.E.LJ2\ģAHH 6AD*bgY4QaNd!\,I:Gat+i[(-oNV9$ P㦊0Dڪ[K/YUOd5Z&z>(98BW95j}L}J l]1@LRD=mhPXNW:(J4)ߕfZ7 ͅ .︺Dbr-\c wk21ֲ۠4#Xe2-Y~G- ߝpOC&Rz:"qz 4%,}zO*D^c=ܝ,y!\YTFڶ54RM7&eρ}0ae"MGԾ4|e6te EڬgڶF'ȝHگÂqA0iv>©BJaR6!$A탓{jIqsGT8ozwy9HCauRuI䮡gCc c~%HnZZ@l IbiRMN~=bC<cT6.l^ 1rgJ"e aޢ5!%ȢRz=IOǙGHݤx&=R|=.qsgw"Jɨ pYy=,0Dd{ ^Z=x PyCHU?ģG\H~V"r 㩈'aL}{=*C0HAg"h*o "ڃOYO!r x_r p.lt՟ np͕wt uN~ ƾlZO"eZH;g~i|s:6)Hx0$+blO9%9g[;S/hλc69KɅ |kJC: mLIDe^ nEDl>\.E:o?Erl$tEhLkGË{o0WQ8h˥U$n[0_fS5wfv#|.1:{XU=%Sۑxb#g;U[Y?.>ѐCڸF ;|/ H'5 V(yal}`tX^FAw#g4HBn!Mۯ C8Xl5=Lf !#7Bqi7{ɭ8 (kV6U }6%-$s&uw%y qe%)(=4)Gu5p䡃ʫQQvw B(;Rh! Wѥ5;|A7{r  "m94`Ĵμ|[iQܳ+̝b9/h-)ԳpKX2;_؍]o:7D~ Q|SDr"ٌe9@hO (*^hpJݽh@FE) J'E"n*o&yq>nHJS(c8LPɞXapij ,c#<_ﴆ'iB#v֠E Ԩ IK W=ukۺ~<3O_D$R( ,hs=[Qτab%h֘4gawgZqdc8my@طq2 L6l+n4~kzQNq9 # ~-oSҨ:pEd;h aK۪5Yаf}5qt˿)+yd@&V}\U*9=V!74 ZYe1y ^qcy:S0NA\*g$c؎uZDqm?YP.1ƭ/3^1Z]</rI>aEZ$Փ|͟"3;:YcPTSBܳESZ|i Ճ},i\гyM39rIY,U2,`WQ:۬6]YFc^םp:`%p]i5»"))Sx l31G؉?V(XuO)e7Y(ؿ?D Zdke*z>Lw2rt>ͅs@pyr66Z|@B>],|LE-.Ge j 5,A*cu5P 侥›ϗ6wg ө9tSdlb`}Y(aZc$`ln7Bc(@RT^d 4G1l )= -ΜFЬ`ee/sE{,wƝz,Ƹ^s_vS쏱, s"_F4&ӿq dE7dKd^ߝҲze'S>̗ p[VŒJ"ҏNnp5WF B_8'7<2f@E]֥ρKө0;,)н]Q0swzQ2*&hd#l_,$ܕ m!hKptpjH9O\gYO%HDдܺi: V')=x"ǿlg8,X}qq=1nqa]1醭sCY^@N:tD%_;ڠ2R,.gDL~DD T#HQjo`7'Wc@ν BF(W)XުF}?Xz5{O+aD%\.|ŲK2s{qY7%Kx 1A 瞍 {X2(&LH1 %@w$8JXSbhPar86uÞ|w>EGՁ6 Fؒ+t4Z㘃ZKwiy~ aԾ! nJ4K rvK))hȾse2 /j`N͙Ivad.ﵩRq]1;VMHVB-W&=~0jEDo꒻v9b@:`c f[z6eӌ%S#4tdFI*gUW3Nѻpނӳ>880{Z#wZK|vӒEe@4h'51!GFkάVaXxh_Kk_s xn_7D[}8seRtQДΓ)#pv*JasG^'`8b&jW OQQ}iJ} V2 &:쌓Peŧq޲PeS(eO5zi1cimRpڎٟ-Qk/Dc+f$-NPK.BJ{(i`t)-,OƟ༨h)կg˹`>GTJ"Mqg_MjBm}6dO#~(vγw4 *I%Tnp MlJ.%Ai5+XIjMhifk%Ӆ5$DWV+iЪ"Rc㉅fA! 1jV^l֖7w1*}_)&(mêxN&bIPJ}8Ijdk87a_;pv-*@Ӗ*'KV7i W _Vi XFLd\C(h>[2^ qjݒ>RvUK *tif.^^Wn\lTO-UF0 (.t ފ#]Ğ.%#MMΌB Q}nII!ݡp*J[ԓ8P`f'_#.\{/I #9Rp(u!&ޖjT)-K}2\RC[PVj ؑ=.0%KZ T-$XDW.*"N[U4.tKQXH)qάt8e'H [)Q  V VY#h0[Kݟ;⊦F(r5j `J+鬄1#kw TqğkSġ0JꓱfPbPd~s,0E37Њ۷5gC:ϦUF;n%Ͽ:UWTp6PsBX~!Sg[<2JeJ2F4wUb;X s wN#8po%"U߀ A?!W={ܡJmD@:vp?eK@ʕ;quį>ޱ'Q@>\J r{~\L_O. 7 >~O+KJuϞ"@+|.(\\^e+Jz!A=yY@`Y/7뜤[=[!,]> }ؐy ApZD$w^x5 GF1i[ ;EzpY/X?Qx^ ۷cyV=]k*.>F,d'M̨нk_*hcͰ LjBhOzA17cW6}0f: 4[B€~zR& \NJ9cMSJRjL1%wH.@L2ŧcx{_pwCyii䵍b!X2~+瘕IUAtu@oju7%(-:RqNj5ך|+52D6P'sY)dPIօZuAUP|/<~}ЬOT/OBscRyUB޹Vf_M!a7c݁Ǹqґf+";X +CqȜ/WT ~-.al֛Ξ&׈vW̘s&;D/[s9MXb򒓧 0k&arLרٕDaI?J يiYp-^ӈ[O#`W6_?aq¹PJ(q]ޢ<8)e#EF:P%ASztgBLva )*( ?b.wmWäS)싂b@'a`ظıQb=~XNW "g2*;D}9sU0Nø9OxO']P9.na\i5P lfAB JsԗJo%9]~0KuL7d)aHM['6{8 H9ArE*HĤўh1ߒ,+!uʔ\ 8 f?N %1 uTl{(L8 RW.y*Q L9l! ջ#Hg_`}y)2v.@=BUKS2uA~2-'͝8 $qRu/O8lSLn;'_\b /䱵QG÷! pU @zp;2i/VߖMx ]i :z/m 4r88kGABwd0#ݥ) 0GwXaci-1iKSٶ9"ۘ{e^K=e#`o?+Rg`C( BWOc<5瑪ZTgAU+4YV \ /~YT(a`6D5ћB;JX]/Ҩx(R7(oDEo&GvY,-|eO_MX3 Y'é۷`&a+(iA)Bņ'@ u22PWc.s:Bzq*7ƋŒ1hC6GPd{lic}.1 gmx=SOc I8&8 \ՍbZ=F&n2Β[BE~;iǠKvDRFx~T i2{LLxR_I'Vܩ+ md5@xm(Ɖ}eAʔsIpN_u)ʝS[pӏ &7=eӷ0˳^>&:|}0 qL7!ˬQjW%v9d#-KPNjo]y_U^1En2 O}ahXJQ7v)gV5V ^so9Z\KJn Ï*fp0 e^Xī?jTKUǍJb WJզ+}v0{X4rݾIjrډ~-RqLw2̃A !t*v bb8E v (Ui+m8RZn7tIa<5lUfEa]Q4<@<9lH[œ d# ;{/Ns>lq (1 B'$<*.V7+ڲ7RUqGF!$GG0b3T@͞-UO6 }kֳ]d h5h$B6!lz +nޠW<[kK !A0Q(XхP;VE3ne}|d8v `{݉x p + +Nৢ8H]傑6a^#HƏ)\IS[:qOO;W*!y@e[I CU 7ΐ%yvvW+\X-HR!Þ){;oh^ZVoFNnca- E˕9@ޓ޴%J|:%!c?U*wؔUE\ޕWhqH(eHpr!𓳝e,fN&]U0a_4zFوa=ջ}-Ȼ1'K6ٔ֔pmj:EH5GDDkNX&sf98 f'WsgKZx`HCJ'uH+XpJޢ[|T60lI BOf? a}͝îmtɪ9Otlb EܒfB;|_YhH S셀 69VχRɃҝ*khu<h>kϖԵl ;SXKy}8!ZY>0y ^:ܱd Y:ˡNesm{7s6v.` XuCqI!p%NQB7((K}G*-WY b%r^U~%kW' G4~G}ڴL8]^%U|'%Iمȝ'Ø3hhwks \E!m"yzm= _s6Y15%_pBXtcr\B~ʙdY҃!ssÂ8kJʅWlNSpquM :?[ DJV̄>2M0ۊPY;.{{V;kf>E,B>/;T2鄕lHezy֙'X&N&;<9[s9WւJIT]*Ѐ㐾r)DP+Q1YRm[ i͂/+v (?glwm$DFΝrhPO5QM+i]Q7k*p )orVe{"U9Z$1SdoM B'aӈihAз%0֪Iy}m3ok.lɾ-HPT16$VNF)Qd YPHCW@Ϧ@J>52gWpLjA8*/`6l%yd%7)^Il1 TY(ڗ9BZ xPˣdk&FD)IV҇ m$o$>`WXEW^ Ӏ |7C0 kcWa@m&\Qg{A1p#%df^` mjzf h&ýDzto,鏖=Xto럵VE_yi-踑 yNs;ۊpoq v\UXb=5 g"6JPlH}J}K& gKnӑjlB=ܝ8Ԕ`Q322um{\j: yRɂcP+79Xʙ,DFh t(1 O /m!+QZ;f+!5]=FG|(iJRȆk#Ʉ,Cˣ5 ]G$6}|ѬUWnR¿YHJ: ޷";!)+#OӴP/>Aۊd`*NW` YjUSV@ip'p`ZlXcEK؇Q5\3}LE.{: C5>x{}x 6a~E4yv6yuyneMS)9fC2kǿK\uu\ [!C Ɋ$՚a:\\_/z:;^n/2&.q! sV\vct܄P#~bN_l݌ $g\t 6 S6-oi'8+/[rVx &xKzl?kT+6~7葶[S*IOe/8xǣw9 CiF&FbjLrqs*={oDDB`UGWzNh\d4╣_Ru*)jRMq'nc/5XlߐJ IH!6g*@`!1B({<+XPސc#GR™Vk OR(+=is5"˛Q;,8(F\F\d Wro=v[єfv6f͔_6; mjsv&G}eȊT1GqCJ1$z ӐjlugE-0- 3-7Zlyt|=#9\ B4܋mr |]I5y0Ji苻KvdZp'p)K:s)KpCDTdQ|SE#3Xp^'IK>Dq7*!絼l^xbҢb.WhR2r5*XLD", V)e2tHwCkL$3rFQ>FichMh,msNe\|OK@a͏* b6p!eKav=N NHR% iHDFJ{c3-#iMU%0672UKM1PN3KTXP6qϮEN :տ\JzB<8PH!yU=%45H?mu #*K \۸̚:A:ՉgnU=E}z(# -n?Z=6NS%h% 3q'Gnq+FrQ((.5 sPunw_ ^hj|pTfUWR̖i\?z1}g h'1gַ48P5`1[L c[q|&hHP{yen=8]tP\O;ڸUSa^x_?5j@F♏R zubnP¯hTLЯE̯u5@.4U Wi\>⡞Uq)y7䢶iҦ~ fKiU>lJ\ 4zoxn%螳̂EvA'Qr 1+ y.'RbLg&0%͓ž0`I_n~P|V6f^Ǒ*&GpĺWm!a쩀+0t[^߲7Hk4㛯KD&4Q] ɕ}!o7F6Uןh=;ݙDARF>ܒ {kG ̈ބ\r+ F$B?׀O ҧ#D<޺\Kv_Ј{ Tp ǧ9m'yцh5~7:'.:\O~x 'TF| %^b{;, wȜ#L|SJuıc0,E)vd_p*? O${zz˩؈gYaK1@< V\Md㓦GN[K?Q !'uTά2!VI!ɱ[DL&hb%_&r,UJF#˝b I׍A[27-쁋ugJrValucb I"ñ>a.%m]HH}'])`#9_Ѷy9_%@jpFC@M r֦)j߳dEM:r~ˊ"TrFu!rT}5syu 7~'זML!z.ș}sR>_۪Bo-xL/Hܩ8[w^svla<~#Ǻ=ꯌAn Ȧ-ښm%c$9G:gEM.)2>҈,,:,XOAާm-ФSd/~Ѥ8:q]="o,+6wR\X*hhSrIҭ6X/n̪z QN-ng`z̀'. ]{BK3Z~8aTt#8fz-z]pu&ђEثwBWGjowe]7Wɭgy_pmӐes왆ljga3{l/ >wKoa!QNdkDeukn!B6 h7:B4K谹ޔP"DB޷.Nm'#1`$GEoTRYáM2a"y:{1j.,N{<'/x{En={Ҩ;SgT^3eF~>Іm>^SJA5Pb(hc &xjR|Yeϱī~~!r;9LL3x $O`#f80ZX{Co*d~teսqz8tJ+H RtM12No}ْk2c뱽Z+「#K71P)sYgAЬ#d+@Sek5Nʂ[xf#u@gj`%d^e.DJ\eV޴)T_Ŵ0!=<''@G໊ 5l0u߷q*͏Hm~H]`UDFX-IEI&O=a1LkS:LVQR1Y1 SZEMB887*Fpݷc%0ӍFƦM"Gf'p5G솅e'W%}f&HNKܛm?0u6 z$26&9Ԕ{唹S8Ƀp%{/ oYc\$V_!Y,awcRϣ—U4,e( x߀@@j]QEIyDR=* cK%N(o&r-`62}~⌨Sh ᆽ826Lkqa*{.6pgSd0d%+DsAo]G_鑽%0 MF4߆2)qdmqvlygxj7oB1 ُy8}A:m[R6`m:^FE.8{,{ɎEQtݱfAYd׫WeE[#.%i]n]FS[-JVG O"Wd?2m ^æ,u̙֘1Q-} gBP8=LYeQO.#¿9/i`|C%ߠ{&Q[`E pP+h=Fl~fJi{%u:2Īsd1Y ]=<,Ds93}djN3 )B{'ªaEYt8Y7S-)$yLdqNR}\kmRB/G{ٌB7֭ ZO 8*GT)ơx?qYrtH_,X`MPN}բlٺ> ?mi_-q+㎳-V 2\)<#ڒ3^NѦkDW-J&zh[Z+|*5A7fR ,2I-}HE[RMRfwbK1g6KjW P]-cG>H@*~*ad0h :T Sq%]QXQSҹ-<@,cM&F%Yy\5nYc}zneX%V'&hD1q%Ԙ[:*J JJNcoYڠPo1.sF㜷(` F@5_!ԓ OoOpTf"Zr̫8c|gE-?>oT6+Rl 9+Q[/Pd(PeilV!;ʆ[a] -N`OA#[¦: r x-zXj 2U×#hl.520wU"aJf |0B٬jqAĮ)Hn-Mp6ԏİRXYhK$OXfh,6±&Gr*kaUjoeKV]@Z즡&e1f]R:fyJa]\U̠N4΍$MSWݓkP0rg8h@Ztˬ;,1o 62Љq` F$ZZD V7h!&02o`jӤ⍤07N3?PRϹQ[Pjot%,Ս"A.9 B~\"iNgϺʩ`u}#duvBRI=Z#Vq$RF]ȏOMM>ʣ-Ok&vl. IU!X uRަ >'zfjgKš1(8/ZpΈreeMG-M+"٢gMc5$㨮x CKT#RѬ`jguEyK\(]ijQ޹sj9r;wrT3zY!]pc,uZ7ŶY[6 &'"5:f4@aO^[1r=C)VlW7XFxF'0cugFOBcl~G0l@sb)x {-Ms]N84G԰{gs] Riښ`Xf^*+Z:o- =$ &[c0 ~QGŔpw7TQ1!xjJ7*U\wJΨ Ȍ[P<|4xq0JQEtM#S"$9z1 =[|rSZ7)Ƅ :W꒘XW0L왈]*ӯhju 5v5i$]k;hwZfy,FGDŽ'r`]ȕx`׈[ ҫ~LIV"JV@}} *@CKR8P23Qc^E]4e"i\1$:ff`pF3;Y&UO=]Gci FMk)NNVy8]-sג-ךt&}5$Ű6%d@K$xDR+k+]ANUM†N~: >&qk+5M%E֒~qZYhn^?{6%gCȾUݍ0׸!Ҽ7cyvۛL~c,6 {'hXEkbFB]c, ux k_Y| N8-itf7ZR+ų.#kR%ӺYaUGv2hw~X$8u24ٴK؊}crm_N:Y0ѾquLD"HPD3OINsZƯkϩm}XZ: Е}]2A.9@9E\XKQ4X$ݺtQӤM1C}o@afFnx§Df @@rE8'~% E Bx3ݼ.VxiZWss}dY М|6Y%VY-֧[K K+x==lmC)qv# ũW$"+} w;F$e؉CܓPۣBܨq}Ӡh>MVz.65*\tQu}f?Ze+Uᓮ/n7_G~VI\7u$үIXouPhc.Ԝ@ګ՗{(x >9 6xFMӶQ HAABMjD=Kv]FրAvV7}~; Jީ09:T'57R (,7̢}^8e㓹h6W1Y/ __<"VQzb`DTux]FgaD9;mގ,vr=%, Zf̎`f+$]ZP!׻n=C*,ZtbV˻{@n䯗Cb6"Ž7 Ø}#h\ mΈ+ͼdEKAWZva?ꒂN8r 9kWv2>}lȰ C$FDt9,hFvl}-4>M0C-h#KV V({!SІm߯n `[sb[j& 0i5cBm '^ec?ir[rwWa7 -Y6`&?ܤpjP뙛@Zؤ-/lQkTMv-ɏD3h)Mö,QmU5ITG4bq-X1©ph³M~}W*p~4~'v>)=ylPܬB_7L+d:K&Į1} C" CC݁Ͷ1~JXlRăISP3Aȝe}5!]c>.Q a>z+o[mwoNDHD rV6q]_oDb, DkMcfnBP_5 UPքRCAkvYW{ ']gTW |*xRv+Ӣĺ81OHmHAb,8v.u$M?`>3KΠf{H.&-T\H1&X) )2i:`NŁU@Y yxxN,wc#5hQƺ`-9cFW9H9׫ӆKACkA, 2[T7oF_r^ ZLCsqSǙHK +$7565tY|[ >YWKs'%2IȬWxjmغe#&~Esݜ븋0&b{$pN .-LJ(~1~S\֭O%P;8=իMn!&vL sxQtĖEBKsb=-k4mÒVM'Z66aW WU:ܱ&j9}ι)nt{H'H:4oh([(u+HʆҬ %ۚC35+yBtj闭Z4@ f^4tUFI;%f Jh.~hI`On?ǕߩYMn,[ _7Rf &2wp=hs^ ^ kyшl*cr`R#Wx] RhgݴݻߠĔ&`QdU|ek=_WG i+'eК )֑/PH2LfBSG^d΍z('e74(>E`ۃs=?jw  u0|s:fGQQ($d,jr|ge-v]jD]dk5jƺE85FOv'm9Lv31n gI]~& n\i;Eue{=壭Ÿ:ncBcPehƩz@G FQA>&/8hю{;y7"aЫuQ]nijѪe/qȔnAXMchM5фֈ6DfSn 3wW )`Gi^* mwRN(*V.&d?]GI-0j./* c="42x dhG-U3h}0]N:nx:h:\r@Lm IFj, PSjLޝm͈S\a&b+D^OA~cM+M^ cJ"6ucG]M Q)ՐxM67s +H9ٸeCc1jP~66^#b(MchA89F%EDKBM(P]O0cR?d;FMs"rcHD*:c؀=\Y4BG5”ȄۤL|V7(9cr,~C F̈́xllIQ,1zH;Yw\,Wke!6>kHa8mۼ#u,9!Am>ɀܚ”nӕ w2%nm7Z}WخEBu:ŗLPiWA}:W.[y3I.Nvj|v3jPQ :MT"m/G7[:8\v4+`Nx~Ct {XϓC@Pl65BPnsBb5/ EɮӿD,la6:vTT=N,g2-Š1CTԾ?dWwn]IMM' r=,vm-9Z}"1<&_E58!~.'2_YExa0u6"r!}a4Ã}xnoIowB%RD)K%lZ{ -ٙ @uCb𖶟9nfc{[4Hßd7ǍmKjPuw DlcI(k@jQ:"NQ*8m-yˑVhd>a~ ӊV\线ol#cr`f4G_M:r:,4@Uag҅Mvu4bH{(o4Ey #7jT Y4SW3vl]2I<-U=&ڬcy&tR&p+ܮQ7R7VC_ nvf erUq{&^X6^qQcp8gTQ>w47jR=>'U&G`hIY2̄-3lX4kVH_j^^x :w/%$cR2_i/&8puZ==ǖ*@;&u},[ݔmr $L̲5 $_u ,N vpi-IePߚ2t8_Y1Vp]k.FoGÎMqvI|l߲b}j8J4ӠxmSj5H 10/雩ï@D d>;yAձU}nF>E=\,:v^':à{3^mgL$ӊΈ0Pf6j3)UTVK3u&5:tKMpd8:"AE" 0΃l;my3V۠nyD-Tw#[paiN 1zr;0vٍJՊfK1rhjJS$Hz\A[FmEZjEAŰ»gn`Sjq0),QWzR]3e.glpÍ0d(1Q9)!@ԠDuI9e`fȚu*ɍvY!W-P[Xӎ9:&)[7#z 1\)_FpWdƎ@6J

4> ''7ҎeM2D5 TB!a`I["ߴ"FB%ƼH$:~6~_Oy6ЙTrUojR"O_z^=@>d#4, 2rv4棢)qC+X tSL?tTl$+ HgRڡ%.yr$s d|I& thNԉ6)HDfO"t8ո M~Do8݇=_"w`u6zۉtYLfɕ qh /0O]H9qd !}=?PnI^7q(%,`w >>1KML1aȦeBuu*|!ǢX!+E>nRԙܭiBc] ˍm@[}4mj!Mi(=!Z\H e#o-kOLhT-7FBz05y[Hm?0}G㡑sZ41 P|60NH+TmfA220,J& :I,ٿhTw \q8; .RUXk AY'Y8 +k!R Uxݰ /vb.,m J2C 5WhD d}7X6ff׃m$zMrXm8oKDXiv3*Gzy10k+zjIgԂdL <+C )kokRߓG(VH"T)g7̤6o]ʕTu*];ċ*hdH+F[~t2?q&1纷ZkiSty6)E^q6H޸i)\Ys acDp4YCbE{@B#͵ZЊX!^Θrd:lݙ٩lD .ukYࣀgF5) .5M:fe[r=pСImrzFQ"6l1\E@3FGS3]M^i %'}%ήܘtgr"V!Ezn h9t>y hbet` C d%0@a^V,c3؊ƽ@cd) (54lr\ִخP'a0ťfzP sm= () qxCUUOfu27FrP?"&N%cqVpd/VoD]fqX:('[FƩ٣d+䞺hjg&Cyɪ?NRWDǦ+ uTԛ^hLȱQY\7$\1#hk%(->Ё(5X6vWo zS9.ɲV۩Mi\-jYpF]xGpBK3`>7}uko%gp1!1X!nH5 `7QWr\U45W˦!J9I'{Ct LH ucҧ\Oeu̱Cj{(FѶY==~ӌGAJ/hTR-\*W4x1H@#mХ0Dl. wŎk*zOr`D~3%#aFAx_5`m"TZm|0n*FžpL^5'9ѱhe ;q 'B_< xL,raLFo,Xa6s|$mj]:.' ~*[U_4#:%rMY )Wph2M՗3hc[Q';_T8`J1\9,PΒ:Uqb#S4ߴ¢CI~NTG8*~鎴fkVdssT&;ޅ(ԄwLi${e<$RdE?A:fP$xҭp`V3¿@w1iݎ;?l })OOId!|/aTQJVPC"YجPרݺڬ|]acݛUr6ĦdrjV0|l71^qs:ќtع 9bڃ7' ۧI}%0}6\CYys ~ jo D HC2N!,\RӡzxAP>=&>_bXO~m3Z| UVs=ρgCl/WٗsjRoX V۵JJ$ V6W?l 7Ll|rr:ұvbH}m#;I&{0 XGT;crS` 5/U e 3 бE?~(rNr_hN9=;Ax{|ARu! qj-ĥ,D\$[f>vK4^Y$u9s{{f br휍S0R#Gzh e~ou_ǰ:I8t6t̩1IvVIj˙ ++r20sx56[ti= &e-I-"r+KLVKE5ڥdy7xVll ȧ,5̑bb+Vmz <7ĹN R8'B<]iu)ϖf@R܆N!G0y[):KĊEb:Ȇ6: &+8J+^1lk|8v%SRloS$/#dBy7_(^#S 2;>Z lI]'d,5 M,Ѝ ѸέMgrUVZlv=Aط2 d=q_ݐuĬRz1'.8)Im,SVXη1'm{s`zc'5 :Xf?{sj. ؅fD\Rf~j:IC",JMsD+?d) z]Ţ!&Ʊ7\-Xy`4ZW9YSV(կ|M4|Gp 7:=+MX/WVIh5m8 lcWeWuJ?ZocL#IihқzoRc?Hb稥{܉i\SpĢ敞-1۔>SCB=KM*ZqK" 䏍U{28^ZpLwy@f]zg(/|樉hVnsK:_.αF-n17~q+Z̹)!ȼZZ G2Dol$M&(ͽD^ DJl,'KY 2Q2Mֆ@u3G{* ^,!َ*o8׾?r%ǚjbY1}}r뎤sm .ot k+Rf*1*֝2,`!5C9b?io78ϮEcE榩sh:rՔDa?/_wk\Enվcgo ,9ڥH ނ\%]q^1:7IJs4xQ[f"m9&fw]N/͍!\| 9ARo\p( 0t. ،ukWWr\w̹.s^ V&kulv]9\=fj*zAN^nOaix 5Y'cp2R;E|F[ʝ@lhgMௐEuWy:3cpK3y&1t!!5-هa[d*2'LU*oFZ3B++awid(0++$谾nW_)r%-79۲(ISR><ޔ榹m ! zj W;o4$,KyY{K>H_DO,BX5y41ޙ&Z5 w>! 7E;\CZOvO=셳Z@ə/' ;j,]7I}  !ZqUŠ5AF=NF۶pm1IrT4^ö{㮣xӺypfvng-xl聪p-ԅ3#ŴcT1H(즢?a=BD21Jfzc]*Rˡț!C 9Ke2kHg;w T?%mGB39בhjsۿ7PVL=XKqSo)=fQs*{Kg0z%?{5#t-Q¼,6u帲"7Y"ؐ4e&\Lj,e\qkI]>]z5u\Vmvפ~osC'=S}75V #΅dۘj\|eO]"3fh]Ej كRC< e֠5ABŃnw-'Ħ,2 .R[é6@c <01zZN,J5_T-ۄoZĢ=5iQ}pWN{knĴ2@O_X#Y6#9kR}rӁuuz;ۮYmCTf8/[6JrXK< D%;'}`w-Z6t %3fn/]BV>? `tq`y3 Pr0\JD sev>6h^K/pCe,Dž!Df/fd6uzOnT4ʍq&W!I|ӵV/z=  ZASaonKY=C֭NOpJ1#3l':Z|9lе'3sՌ*{c7Ȍa+,mwyDmA==MfFBZ\$YCSО & 0+- @NgO}l[!;!y+uCgGHHrFQfVfE~8j4gf<YA{-[Pݑf->lL9MuAVeV{w356h0/!YZi5k1@ɇT#ThoYէ͈]3lYgpgZYpb(I/Rž[0ڽ=5PoZ]0rvـyرw ]sYрt+lVuQUa#w՗b^nms9}uQKO_3tI;,2KՕv)$ ha\n=vt3sCqSwr;=BA I&C}N At2ľ= ~I;Ե$Lwdk:mk1Q8[9L_1X_!NolL0H(*;X3K|C?_FÜZ`Zޡp;sc'r>CsVw"wamB{?C{s3H-s mB Zsr"Rq>1ok3u$tdlI J]:VE|6&thvWwSH=3xZktjMѦ;Wa&+k_,ď%o>g# x7!tJ^lNqK`CJ hGd@Wo- cs Nj  0n%n"*- 1Ss4Ȳֈ'<7q1d1x,,@a ?_Ye`x8-T0G׼g"IIM' ~ep:[Ɠh$`/Qd^0)ʣ|F QFr ̯Ut]Y~z&qq{FQk4ˣ`~ KzbiI[cwݤ9F}wrY= 3N{$}G*RGI2(tɣ8nMu o~BLGm8!^7 ?QlFuQ۟D1A|/`?B$21f(G}:MԘ>^q|e<3] W{H58_I,ެ.stdy(N:Sdz}j6ݴ~IDڿIhɎO`5+:704⼑bQ-ڿJfj>L [ާīű?,Z1?}; _Dmo? B?J&~ W"Mtdu]GNV:U}>gۏ`]6?O7>P'w&q)h U_ ?t f"$Go~P~m=־_wLd~h]`Y:N:|?z*[08 À+}2J%{xQ0Zyιz5Z=ңv`;Abd1TZqtAࡤK^}5Z՛zF2 8 K\T_`#x3 pu}5=jTZT@ߡ@Lo{6_7AϼQpiU-[\k+(ly=R?;yhɴR4R#!-:hvIy}XЬc#rh3Cw0 ǠHp+F W*h2; ̺laŝhԊ{y^੄_ڀW NF.^I? tV(DQGxj;$FW0@Ϟ:T 7RI-UЩ DŸxZS/fI *G+.P.T{g`0cz3{Jž" ޏ5-K&ٷNajjy#簷y$Dq]x.)N_dW+\g!K+GԴ#wmciQ||6:RsxV]ueh0)C`tdo͏.kXx*j c 0j&VyfS$nmj(J qZ HKnD'hM1 teZ8lqbUp)qjyeKӁSS a< `ooZC| jd ]G~f+eU?Nxz: V柦`OcְB\DqtHeCޏop*1`,4g9o+S//)3w?"x\M! Je2uϯ `2O%iSƅ`6M_햙'>a{Ak?ToFĭcS,r,axQV+ 0k#tX _;m_4c#fVu5\,g A 7` nWK |CyhpMFդ;\skl[ox6MP 9g7[ٜ M`.Oa/Ӫ;_' &PIxg#ϸZYM1N"wwA[x@?׋്b̀-!{s1+*8QV?|CdZ&rtWzi/9E W+dA (=(a'o!׭$zF ۄ OBoߏ>(x q FS(7|PAۀF5Ȟ:% PwDpOrJsho{~d#]z?=,6 bfW urnE0>+*۳ߞDtw8Հ]DԘO8KD_A'L9,zj*n0{E~yATZv+^6O0YvЏjm K[ G#Hv#|Ol-XK#XϰR[aWcE$J1F:R|<Z6l޿ޒ )R}/744!wt>ۜ(#̺MXw^;oJ( hr6:4-䷟g-]_sy ;c(BH}yR|RgUg_(M+6e '$=[/xj6 Sm[/Sc7R7f$ b#O>'~"%ooeUiü/xK)]z~Ɨ/K3,+{UP wAwN׼LFymֈtwlQ -WA'1|P=p1HbsLv{yKŸ DXp(*2BM "*Y,~pPTlGpy-eؘqDa2ps347MN| uS336ܫsAU2Gj%iyE]/Y>j---t[vg ="c+g%s}+jmWB}Bhn#se^o"<3y*vsO.c ۚnkzCU+xAJUZN7TΖ{>1 jr̃9$HX- $xwɁ߃Gngg۩,QEd ji,̸N0JH7o#?Ṫ* AF* ('"h6\z*ш"L{.=g7_Z|¯t~Y-ysw^\ 2IQ.hN<)}^ƪs ݫv ZL= gdZ 1:[Qm\gz+Y2ԗv4}.!2"$)R z,.KM8K(JW[n>l7`[]zkRtXOdJ>9l,)̒i"GrQڠ?#u{rip3Âڙo@-/Pi-ɂyܴvP3D_p:WFNxNTgtNKV6Lu=YۅD؂6GLe@uX+pV2lNovKʒ[[\9UفA; ,DҬp[ܗޏ#+@':l )jA\ܫKڶ)_!I}9iv~_2#XEdPCwq9= x ^vA\FlsI Ikb}Y!Lgn-1DYZ yN6oܜQo{":3R63IdW;޹[FM'c ˉ|V¢e}FnʹZma<"ix:6vvr.EQ ]*8j Ym(04% V$W+|R}/ p4mǶƳlKtvUsiAScv G{C^],3rI]T.p.U0jXIo(J4,z!_FAm)4 }(0-VBsGW;p!{EOH>՛9u :7aւSgN.t9M=g& d&V57F#پm(*.꒺*us7k&p`bu-HQaYntHGv# ;Vf6A3fa/Ei~+(rZ۬uFu? FN?nX#A=_NȇP}! 8Yuv#NE^AҶ.VLcyps`S"J舂f)dS2|WN.ehL' ,r!$jdV[Y=XbFrۮ~il.~dIre/l}eL٨"QH]D8djP֌- pQފD?kn1-n^|on>`ډf},}3A;'??DqE="):][7}!4-vco0@MdBN_ .hC|F6?+GhdǠeʠ^ «,Uˬ0}R79oLo4|HZsGQj9;ԡџbrC]EĎՍ9~Dl{gg0OCy9%[u ];gY 42KšglJfŽ, ӝrunr4dzN9xAкպFNRihAŗicjUɒϥ>X*]4:n)hP+PήePuiYZ!;VD]Xg7jjz=>ϪݏwVrV#ϰCJYe"jJLMu'mWq'NM]j{]$+&:r@([2p8ʛ{:'G6rjeΣXVw@$VW.&?KPE9n ѥי-@ $X.)K^Lx3|Z~]li99 ]˙eL-W 6?٠!Cw#TakZ%׺ }#HoʆjuL&|b.&>FЇQ:_.K g4hbi*7ngkrwo[p*F'n̸+@)ka5mE3vߢp<B@(+ mTATE{H,CtSyb:Em׶iګRaa^$NU&Ճ8>HJ^^FK(P#!;|WVR]g>u+3HTF².L/,XDP;*Y4.ܑ_uˎ\8\?(,f#M08gM@E3,& kan 1ݶCr?q,G{T]`Ð!76}C=qab[xi Xi)3,s,݊snL3pO1RWpZzf.#xmJ 0vRR@=:16l<(ZW닎`i Kc%_ko:  m;*z5&6QnqH@x]},H-J^.:M`-fu/w5"f0~e%hѸ,knjmvf(9+ 6J-YWaDǜ̄cJrפV Yw/b-j}A}`r*}xC ]<6X1y#$Ci(@V[mV|a=LBqpBf Ǿg8vmI=YICk5d:X-]E9_ G=~;D%z4ECq1dsg']Zr}-K=|8P"k!oLj!5L xvZ踜58Zşb"H'i0V| ~L¿6JTpGx qp:{{>&4`ys8\rы+Op|;{bE[0ׅ ' /2Ay:? 2g: lKBK1t3*}J[=:gܪ?ؒ@b$kht`lmOˆ$BMOMGwSEb'N.zj\WX9U-GaÐN:QkjmnYhabSN39k_0v3 F^bX Gr5dpg`.Dr(RD>\Mi>~2X $M[VD+i:ɖ׏q827XXEG8 s_ߺusNtV&8~CoqѹAeO{eǁ8UBc4x<*T$PjaUsd)hb 3 u~\#OO3xTzK|-F8}Qޝp0PIKq[$jq3MYC3wg{Sg9A:CNGf 6:\G=z# = *.J!JstaV6Ye$1jiq Œ҄ə3S #0~?SsaSہQͩH'dwѭL~ZrNT&Rhr}kCa%ӎN9 Yjb6*INIu4TLba [+F$| 0ŨdU8L*]w3Vl+]J'K : |nR79gxOwoCQXd $!-ͨV(j4,XŤ N'C(ԻqD[w^ʎj>yJ6V)[y$F2!qWuJE䱯#V5I? 5&F6aZҢZ~Ia˯eO~@|ma@~E*-BGcty*s0fC<lՍ0UL1qcw&mB;M 1`0dPSgV< (q'r~΢P3Mڎ!p"O|tIy@ov{LPN AXD.؊[:u"'Q၂:UNEXV+[)f"XHDU}R럋_{3%/]V.B/Ҩ_r'% , A/oY+K\]w/,/յʪS~is7P-vet“T 7A8^T~zx):bJ1/f*Kvk˫kʊ;MgkkhgW*8E.0/`4/až)~D | ɼ3dwHڒ3M*M SaY TcHQ؊"b;DC?/NbRu] w`n?/b̭5k?Gn8ZYe+3,zb.VQokgt+.TV\(W+l76=q)~:=h5邋EKxxn E!O/M@o{7ZT[aPnE:GCz [c{ ,͹CWƥkee6ϙ9L *~1)whW0rQremAǬ!cEFt"q_hi rODK a-ћԏ,m.}[:FIA"0oEB/}PY1.s؎FPƈ-Ѓ.3Aa<2$҄"z7Q4\қ<OaIgX1XDl/7]^`s5se⇟3>0͐Q[XN?y K |Y>[|wԛ_ GHr hc3໺06+9~g [P@FM?{ A>ǟ6U XL3UYS'+.hz=UquF=H0UڑyKrϢpt0Hzzk^~0&c2q%a:4Mʲ%|F2 c;.$7,9jkv+!5 Lnsz[|ej<-wvռIo5BTn69ŹbΜ1m4d+5L-FbE-a:E!W6miBl\ j>;a - P풀s|z,2D#(Q?!tf $\m͹f u_|8Β~Io9VuEy,d9瘳M #zI /ro=;V]`qPgJPpY|&^ NNsdR,d0k8hހ.yPXON3ZɥO5vx%UY"qnec7+ͶCzv[[oL@G [;ޭL>_+pطFgg:P`,;vzMHL0K*V@2o qk|Fp[S vWֳ<cݺ eÝ6;t4{MO<`Hes6/j!=^ =2!e;A .DcԎ p>%hY\ F͏͗՟ҙbh!(.ѲɪT A7M'IUqcV Oi.:|hn@c.J?! { ]o~ckmuCݢqD~{9*T؝Vk}UEx1(2'ixJj֓k1  ǻlaK@+Zwtаh.kZֿr2>hC>HyBG}F 6 I8@pz`)mtT5ct/ÿBK4O r;hIGM92F^02R?4H x8=5ۑ)y}II1 ݑ%<>xi%jNφf So)A/^w5 |SWgfkƼߦ*<1m =5ݿuI\A`d]uLʱxD6Eq7V83A-U8.@0~խ? uRϴ(?#m2 lZ0`"0 ,o!-+ɪy$O n̾gV|:AKoeDGx,,cԁE;a":J'O1*:_q:5|Wh |d>AŜ'`h_ ckMֻIyM~#@٧DV]j~~Ŗ#߼d{pLF^&ai :o( Sw "~j^vøN+Ko]Q7p?wDc&цY}߬QsZ/Nt?[?EP~aBCj/ZS$wdAuR$g^M`y-In m˞vh" $(B:6/|Jsb**|od&JVQyx|P7ׯ^+ c)4LS mH1UvsHLV%-\lDPܛGu}Ќ;GGR~/$'UKКaԛq&0f R&_td@qA9M[`(8i4@}sK;A<|aatꗢIʝ)_K~Gr_ͣJu#G^RuOҪnln}6>㇅?;^b%wPWhʤ+t)7 4\Vp靘 W&6 ({G(eRc݂j$S2 ̖13qyu2Zd.R,J#4BBJ%A΍l dڦ1롪,*BxOA|_@iIۗd5 _  myUk{4CFU}i8_8yA( :@* $E 9)NgľW9{,talߋx }PGzkNn]s)M[\}6PwB9@ \Rh& jy?sʚo'oaE!+/CXZ^k6H/ (''j+xEh"B k۪۩,hSH P~aWur>NE<[P{ֵ#t}md}}6ڄuOY>'E#PJ?Xqo,bkc_.^扶FLxlLGg2DCtS0UXHf)mmq"1(ŊO>h\1VyNLݓ4(:?+tLz`0Ժ"jbPU:S,S##+UR=h!^6_Qp&i3{g!3{:7< 'ockH23s|Zc2jĦo&L[ަb\.ر6[VP=O9!A݌ !jjͳ!C )B-akkIJPbnc#p(tK ~*YQl!|AxkE 6i[UGPǐߔy~#%WNk(b4M'0h^(u‹OOc:MH9>,>, y&Ѫ%0౧1Z?߹}~Esi[pgvd/q{QFJԔoIo򉻜@& }U{=d(]"d>%%Cx|LQ= 5r^aA8Yr4i SHݑc A99]MմoNbL]2s*|\9ؼV]G-qCə"Ȧi MRU`E?7XArl1Q+pL#Hj`* 0d,-TcnP @>{߼7 mdfiG#J-"G[讅K5p}R+3e8uḑY1m4dSUr< V{«~ly̓KknʈLG&q|!P`ұBAD#F8\Y̔v`gqrI]h"HҌ,þHYpFozViWt[ɒY >\ 64 tB112!fC%Suo2Xą@*"FwA|5>Wyt^jw6W67*]vOWi,'@Ɲ9r^SQxsG`C9;.191SI)f&jLF/BoF&w;Q[IzUtb";^D~2;F?օjQ~CexYJRfyoZͬnЎ4 )vʊ} qd`ڨˏ dkl!(J3>a+XOyJ=QgmR IB]l4Bld1yd$wE'JAg-"s Fdz*S|=jp 1_sTX}Ɛjvg‚>PH E4kM 3bB#wB9#*4MhM;7*Oe}WY9Cƍʕʙ/Vs%92vRxJes-T*ͥa!`RM c4PVf*t4C-9zvttBTf+Uȳx}O\$A-$ S;l,{8UP)ڣםwȔ}5 W~L =x& ayt^HA?])햍-gOvr7jOc4bT-wbuȟtpP_w?A;0ZqK7QG"dB7꜍OamR $1`rJt2T]) Ѥc"k[녺^0%vwApnTԫ9y8`>d\ 

d0^O@92z*#!Wo"fhUѐ"x0\j57?^7ks6;!=Ȅy P G9W3(KoO]c4yH@e"]/XMb(|=o0H|u$e `m;E%U-%w4|J eL!Mt0֙W0PJnGCKs fJA/dv2i$08:K§?c`Ks `]K#HXo@r_DaqLɈ x 9ĵ#-Qar#>TQEĔʶ%dP 9e GY//43 &ؼ\9cmT?t¹`! $%7ųKs}狵$!߅H n91R8$4d 9/4K8@p©]QPRKøBΑQMMEXSX:.eW#FUՒԠiɈf̽d -!iJr`RS8Qx1WtB'50U-4 {I4mQm VnZ#PL!g mέ h@06m`+].7b8.I1XDFDqa D>)\lV'jE'r@2V 9#ſx_P(hz`: ! ܍bMcSu@mR8SU$&-D"IEB N' 퉀=`wC kt~MBGD |)~p "Y#ߧRouvn{hN~1:,1Cor;M1hᲕK+MW.@F !5gb8*H:jo6PsS'{^ӝ"se[TԖ\19c,!GVWd.e[MmdDv,|^wzN s@ vcm~;0¿QyܢQ=!}j/YQo)q( y^#$Z3180۬VdwZ_LY 쏭c-@yđ׀l(!nI0wfvHYdxǰ@e裫?*dt1rMEb>V%ʵ3+ivl#DvLQŃ|eB1>%⻍?د0 Zc}hs * `cjOҊvZ"`<Œkr, l>B$U>$y&`Hr† ݛ:Nc>k:`8NZ7v,qjM_U5zpotzd$dS)3tƿ~DgiBHzʼEa)"O0O\O0O䶩N𦌨SIM袈fZ&?_p2[\ug5qt؉&{j>JoEP¾ޱsH:9Ԟty$GE1ٜv4FסX4=ˌM Vq_)B`h9WS)Sh+X~"poWrdj1̩jj>5rFW3oR{HämIǞvrlUefZk^Pl{nnn!unHhPG l5y(MH1 Eΐ· 8w˱{!r b0A7-sq%S7)_3jѨy&R&.?yyd5K[`y^[#lA9G|2lq|S f _a9*(o90K Y!5 E7f%eL0tGZas8xԽCcD{WOMC}?~ExFف/t2F5BQұQ"(rad:}^ TmQ(*$G\ҩ+G[=Zt-Ѹ Ĵfo.(?U \]8-,l4!^~>nMp F=(414?X<Źh9,Ö(~%_:XE|% ~C˦,K``+I>8:Γ.%Aڦb؜i;FJ!qPxT0{)h1t$`. &jcyFH0a3 APtYj1RY#(;]uD )y8"*F]S2˙KJ9p1䒊77AMh6ռQ@]~us>˔ EؙO{  4њI0'2*X@N5()bz}&C7J5W2rT ҵn9Gw>-Q,XE/ݘ?NnNnhu'K:g(<AA'bS )z/ʌ}`%G ,|VXӢ%HWFSnt1{O8lJ7'%"CEbcz`$%jN#|+w'GM!{cެ찟VqC6?.n}jH׷^ VCQIQݏ9չy9Y_,镵t(u\OcY ^t5y_ Lhq)۸D ׵+#x108Qø 6Þsǝ n?eCmbbma̻Іҧ_ި+_9KdckT Km=AAAZ>mCEscp$ Eumy~2o9v )2,@礻}7`O|фBÄdRV\yL f)u[;=M75U<؎ox[\i /0 _ `%N`;յY Nx޼"M<,>\V RY~|N3teuV\PHw|p6kLV7Cnu]%+nWJY avk@s؛sz+S#q:.q>e75s}doHa&<)2 8#`U^XA=b(U [rwy<Vh!@_4zz`k蒗,I=;I￸nKMmް[7UuYEyC7f~`j7 "BU-8^Dwߖ:$vj 6A&RrXG55LX?)X( z惹tC N&O4aGs:LIXs4i5_Ӥ^ pGSMvf(_I8v"H#OE2_%^RulM070&Wyi^*MGZ/d\RZv`޹26d;o6Yu]k?H|{*`` Ď$Etxy mwʌN4 1OyVEBعV| ݂:lqV~2,&~oqK vi+WWE/AJij$GqHM&g,JA.nBc7¸F7#yt ?;["SA( Ñ92iI5=/)DSLdN\L%_y:-@$ .:$h*1:߈-25J&~3yY>u.blPFVLFdpOQL~3io5vhpZ:CM$etwTCѳh {lUE@$:jf/15NiD)}eu9^cS7wNufqMryj[ {w\Nl cPE=>YYgJrDbiR&JA۝QH:RYʬc=8xNq0Q#+TN3~/2 )y0ddMÕ F9Q0yf"#90X{1btt;6\eR[^m>ɒJY1MX+!#Tڳz)W{ݬ u $'22jeဓL̆`ía&c:S4]CH8:5f&Ns:YLX1qDWݝ&V,5#Ʋt][9x"80dSkcAйvKe'aя[1S = :ⷅ4}83(CsJ/uX]%W'_#؃mAvI?@ -?aEbdPrY1<[K7A7No싄<ʠmG[R!` hZ>XLN6\<yG=;/3l\X4myULu:Gnt;W.mvUpWü3KQ,#@YZ6٬5 Q6\-%[ɻ=}&sM:p+%Q`|qq-s< STӂ[6?iW|n!Oԅ9qyRL֨6s7DYǎqs:+x}xu8-yŌ}'u"_ԾTz҃ƒ񧀰eKBLIk>Cء-' 'aAKpQbGLeK#!?.]]揦ΘD{՗w[;ujr:2?^+>beoZ#gFR#DLc u頵B]sߖHt!3䦀?ʊ/-CmN9$(U]_Z/zYYE `04)U'l\E}O>yVsRuFEaq\)&7nj Q[O.E^ Q&~fZ(z/A~z{% M FфMExZְsLnQCxo-b jsZ8DfG.ov^~|ݬ5E|+OI!i= Ow~CcsccxRGNi'N(t4x!A?UF B#S8TC5Q C;*JF`F uLF=Lf',#bmV׃t4Hէ%jl.tWJuCW\/)vy|JMUQ?.YñZmW5 Hkb')y:R_[O:+mr=5|nP%8Hܕ8Z/LKT2,4tKNAhfBk![bp\Hzti r (۴=_B! Xِ2Hh6Y0Z酥˨/լRNQXCI%&t)5J#`+tv2*Y݌>tG*9 HwȲH }A_!:D=qzrbБaW0bEƃN[^T@-9'Bhu1%Rpu3d:O=/sTY ͥPY~V4{9]u% O@'<K2O՗~#*x _87R\|^q4&f o~sBCz8$] P|wBH=紘Rу{9*EBآ /,m7m>Iԛbuۇ|Ix=&*bxn)bҚJP"=8^Ãs~ɲH-sJ=lo(Ut%ZCKKK%rkp]D_m#QMӈs>ؕ$qm=#&{RX!-cs ,inYь $_1I?/)N#N18LK#4dq_}]Ҡ ny>S0*k=qG}rI(7mҰ} kјJ]r}W>imi*nO"*YMdğz2kA;"1Qt|XggF5bnoh8 HZ}Fl˗;Rv3$@Zl csV)緩gKţZ<vC6; :T*7|_N9`r@y?!:d}%ߜfx`7~^LufZ D<L^ײ_͠wkoB[0Vd2jLR> 6f SFM H2"0T?|sg!;)UlTS\aSh| dž6pKO+YItmPAMyyFT>.Q$?s~_C8yyaM8 &%"_xh &ڥӎ9-qX?7o5emf/W5O`Hֹ JwLX5g7hh­ş'ZD-?-Tx5@lgcd5F̞``##5(ϩq!RIo}}5D,k.=ta? ?Qln d z_՛/_ji9AmIs5qA0]rLS1HDw\C]_[`P-e8D&`([ɚKQ^js=T雉97W`ymkLٍfMd }6s`<bor 4XSLrpbdf,Ӹc%,Oۂ@Q/I@ Ap nWC+\Dn;(όϮvvfuS\g53izkBG,mɾoC9 ,}$FmU\y"4lK hڈt4yx-|k0 W}DaE,?R>'̔Uf^A|)` љOCJ;j"x)f-2"ggK#o k^.wlE+YlcX 2<VlgбU̳ubhlEo1$00=a̺C-f$o{>ݽgJ-(AE+`FBZ?Aa}$ѨlOhZ3'<_eM4f mѴV l3]On35@+@rgVeGG7-yW2{y/BE8:oL'AJ#~ `4W@^@g,kYcyТ6>15pQyޏLy|qި Nd\:.Sԅ9W&G|q6jv0{k /o:*5{Ē~l;7*8G+6)VrUwcsʶ5ں|S2C32V[2ԮK~F8}= xU5UO3R6uy;tgML,[怑c6v=|GGc&n m{/$m:bFB+mfe,V \8 Vv`tv҇>w Ѳh:ͱEQx*96SIpz&o@Ash¸, ajP`_pf5BKUbd*k$N|b?R< I|*f$'o`%rwIhj.)p M'1M 0f _Q X}G75LIcD[@լ= {#1StE MȄ,hc6^ȿ^WmD}3<ϭatB9#k#1DIBaKt#&ӻO`K9.JB~;mMbWDǹ}Q䫯^UF9C }0SheHG;TU b%lPOrӪ\ f iyØSփBK3? %SbpLj|"L_Vz{S̗A &/4u~yEIhaoZ$BKЖ)3dM |]'rG}6v/6nVb`X]gGRcg|qg}IKȗwүʓ~wdi6/8p "1٣.vO[MdXw U\2 bj9(t  [SBI~GAhm\x:7Ǧ^fNvckК)NJnmwVZ;cT{5D^ j>m^ސAoDڂZcGzӹ{,3{ άE(d4~NEG&Vtb6.V"̙1^-y8~mP̞領iR!+G)dk稃,{ntK O\L-D9'w6|> OݶR6Mmb̑M\>:@g4 `}ކ.ms@wқZ=ւ%wjwV:kwMRw̿c-M(v(JGP,YB˥o"(U:u ^-zӞ,vDH\xW3]F9_3kf?eQko ^@2==e;-͏ ayg]-_F+me[b`I&~fA~/0bk霛ժáB5pat~)h܉q$8-^X,Hlnr<|M@@t֊,}b\wTb4i@x,P^Cqc2ssOocňQrb9:y,m91+Siϡ_lN\?jwLg ]fjLl(qxBy`օ=:}i7Q)Rna9?J;4c++rR(A3 !jGcHLB %Id:Ay]¨kQ7/8Xw+37gfn~euXM9|;=(ˎx6ceh~E}DUZZ*:K ()LZt1}_ȪO9~mI^فk'5{X=4;H O"Y8CI/j=M.#Q]JTV4ܕl=,|643R|f5˘s1#սU0MF0fy7vǟ4ꯋC6y$F /y{0w~l+'$7Bd(2EpeR;kDF$9V #cȘPo7 j>kn[.-(,3;m̀3%⭔đlee@'{xe5CmXnled;n!ӉhL[i."2-2l-Vh-p[0[ZkhS0G|Mc7^5 PVnwFr拃Ʌ:t5zvk(ܐ*-Uk\iAyDFBbmve]GP/;4S3eo?މ?PR/pD(2oLw٢ J@6x_tcMMԘ-dl)v@}>Bk5ZOS|Di b`:`">u'/k3s+L 낎 C-5%/EG ǑH왤Ĩ/!;ߠ>I{8Xazս1~EY0 ,ae. Q{ JM0]z|,[qnj2InB~g9qc=8K0GK-2~XÕ:q0d;e*Z!#;C*? pк׆Iܝ][m',}Fts; tuO{ &vMކ&ߦYXC[-c* i=ߤwuڗ}H)Č9Onq|CWYtZX$sCdM9hm~w|j<>[oqNv7ke?) ;NOݳyæS|mŐ8PܵkWJ#WnvݽY!c|bj?KS@͈`?AX.י5YCuCT-Tyz%уz2rJ5I1l,׉"ܓÅ~B76DQ);0myKԄYoKoinVV/ڷVzA1 `1e$Nve(0a'k0\ޙ>$<(ϲЩ3|1=Li XC7b;r0\4⾯ ܄.[掁yOs}ٳ˛#$)x͡=0 ow69n!7z.vc_ſe{^ſx0UkF7ųct@ Dt'=^D?[~j;ď<5S:&g4S̤afhs[w'[!o 4z}E!pYqJso0cydi?"a~3!Πo`P>l$_%B~hόz,YuK8>  '| f맢3$N!~фJ _[T cg/fq5uW:$6^nh3yTYRQ0+(.}kqZnE ֶm) Yλ%gm#/ Ay04k“yy$]Hgu^!J I ~4C ^TB<@ߡwU[ T@¼z[`B"TO\`RACyDי>VS#. M}6x v>l^ Z{3#yzrC~㐋1kC'_>C$rG|4OZXټ=m^4  HHysKC٨rdwtF>V|}mlM eˎ?gGr5bLAѱti`SGIKI'U~&밒\ <]#nTrJ K5I`М #K\\OmqJl0(;[t > z2maqbv=,zgąL $,JK<5W&npr%#sGoQy[.?Cޟ1QXaªQiun7@O* "L;m{ZKO%w+q> x" <>J 0$؋MqIE[?ƾ[@olI&O&|XJHI;[N ofќyov܃wdiW 虴Eo\]oO9'VΥa8zYVri:.]s|wLM&c  9V6as_EKZ /sT*t9GR- A-<-&%[`Uz ѫ%zz̯*ZW^ҫWkj}Wj ѫ zѫMzTU-grVs{ʀ rK @̃ Al.w6k pi\{in#XZ}pծnͯnVF\oT*+ Oww30@e@7A np*#mw:K.u7} Zq]YY^^s.o.Y^.uז66Wܺ 9n n `n. ":SpSWI-pSlJǁ[/pnnT\|nպlujC`MbkUye֩fۦ+v:F2;LS Rw6+m_r]sM*Tisll.U7:F]U:+~m,=uwB>@BHhcSp&'Rb@[F݃dN3M8L:_p lAA-Usmd.ۮHcRX!VWQ0G>x[yU{ɵ߽Ž{Ɓکr3cI.~.IEiߋ*E._(V%L¢[])2<ߓ Sw=9ÀvÁ2<@ؕ⛦jT8PF1Xjnb&h0t\T@9@:9l%땓N4Aע`9^V]I] Q/}Ȩw'Kq0PCtK:r'ͮ&Ft1h-p{j"!˪W+hfU$d\ycIfIuބx7!^9ȳ1uܭ"`uci:bUd|'@UL8я,2ǞjNifw۲[|`J4"D'Ƒk?fgJbNFxr9]*ww 2Q!`%Q75&ܑMYTF J!ng},Knm&i2v׆&3gg=Y䲇65ֹLw顺6_ `%Ϩ1MɮYThe>jb PxVnA,oɎ a/^ǽxUe15kC·Tre*w3D+1'AD8sRq4+ `l%y꺥%oL[x`lἻ-!:rNV\N JSerKL2=sYr`1‹=Jl%s:?;^ghf?&?u-:gF5ؚqF-ABRĔ9N0[wNVPj5 p(D<@o9!Qr!;;2B{ޫ zo?Ja'/\$Mi1Ma[l.CP Hp@Ҹ_t8lۤl$,F.]>xTw]MF_jgeGL 䛸 ׸ɣZeZ]ɳp/Zחdq$zB('>vҙ'<'Qȯ )Խo]}Sg$+#&mczck8r믮 3V--k}pծ&WW=U?("]]zW3UZxQ*]=+; v$d˙r4MAw9Aĭ nCm]BgQ  鯲vw^jI 86lsGUz"g7 B6lrڒz#\vt?n-lv Q [yPW,;ݯPם-^Pfv#!h }UCrZ.Z% _и:FZv؀</\d Q S. z>ۛb0in tQ1N~"3tER* [nLS%H.{fFcUEVTe or}#*B)w767 (BZO׍ŒJMD B\$ z0IWpXOR5CӝҨ7vF \pg nB UlՠĶam^nk"=MۋnR-5SZ;!ޝmOGl`Qq67ۏSyS\viʾ,)LJw4z;,H ܡmdN ܭ&op2FaPv J7*;ntg6y9frֆ@RzB1?p'$`ԙ\T Ny̪--RmkyHVȥ"D[o8|Jbh&0mI;53$Űo7mn[C S[ Deix= Gsp6eiD:'2+7SIDly֕WYoUOsJLp8\ Sd>Nk~_f0) ݩT9ڶo( wfߔ ^ =bmS+=O ~a4tz45*@kbɻ6FWHa[}u6@a&Wy@ir0sH2P3s _pN:4<TWvz - Vx2pݫ9enIAk } U %5W~sNo/{^_:`wZBҾH0V?K.*+]ԇɸXKm։z?7|FTUAVu}Z0)h+Y9[*sILQK']RJEt}F4&)QG}I2b0Y0BuRD4݄h}MeO5quF3t"OfgĒ&* ju%6a`G`͓)yhl ;f)9*-NGwg9a8$MatF.XSb7 |qw/_=sʗ&t ݀/`K(>Z`8ɺ:{.1pdv.&3I*39(:6ben5u!C2uӉbt,*_@qed|nպ/P_=-4mRaJK FM}1fM+CAMRMkNNo{|àlGO&BTG4 .* "o3ǰQF'0Oƪ.dB*.U50ݕ`Sa&JjQ1Wy&>o.R9i1'OvÚ'il]Pk$/3ϵ䭋v)-'֤ONH0]JY'NA5 4Uw5 FC BmvcxZ{RLUdAoT!#a)srC2h,(Nڱ톹t^m `}8(!_﨟k7|~#8ɷIk&~p 7%!ZIIw3UJ]װY7O@7gk%A±tbOH)ӡw\i#?VS6vЊ4+P Aw(sD´լjtBVQ|@`tQcIvNyF}kc" N) Z{cs:EÁW-®K̬Bڋ$ڹ(hn^߼sO`Ȣ Poڱ[`a&]]ݩv_> 'd&.zۤG"SKk< fbN|(rzZ H!^<_ڈK8*/%ި5P[Ыd⇗KLf1&iz88$#)8ce7-8=㋱<,=NB0 {= -IGٗ($?x^q_2dޟz :;؏V |O(}`ҁZ ?c>,%`풵p &±KNesv- #ñAx !3%Il8[|N,) Hd1A1*L:@;XOtE\㤻4KJE2=`IK:" KVu/!(_N  ϰiA"QCeX)5D&H`hR \a/g-/F=eZqhkG>BS}z{#A$H:0]v#Z@se\p0?oyRFoC Kɐ6LEMrkFhR!9a1Ka%.^:Bxda =Q0ZZwHmq />VO-xrĽ@am;]sGHNߚ51g[@"?PP] 1}G[yB@g4GYqul\ԗK)(TKgcd^,^c\>! =?NfZrODd>!}`Ʋߦ1*A+}x{ vE˰d8,7isMI-%Op08y6]k<gTggG<#=3O(DNj!O0 9ƨdL8\RE g$&BXὙ&99~$M %ϐº7%""mhV6GP3d =X9 ) t:z n;%l)lپB捻 v-Q3 EC>js<4Y\~ >7L%xU{nYZ?D~]= /t P"𶊖$~ dt*6 Kڭ`N8%Pz|,; '.2 el|} _ŃyL>H{EF)YXYZĦa:qgBT*t eRzFJƟɘLQ rTf;G:ZtcCfQ8=0vCI7csNeFdB*C*F"]i>v yEQj)* o8 8FWx)dKo .'T(SOv} b.PtDm2YLQ]LPf@WσL0tԀO)Ɖ>Az=H"e)h灾7NkGa7 *땃`ѵm_ݚ>{UNAwyxg,EQي `>.G5EN-^t6YĤ+B|%e=CÇޞJÊMc*,S3x ݣ$c$7;Ol}b)#EBU"ȷ&xZga|2:f)Eu+ %>uUY^-xv-FKC=R@)^7|c#I*&8SVb{>:|w?>|=<~0f{+./o*cPsr wȀQ e Q"'0tlУjLJ$'(!F Tt"V0—0N>J+d4Xch8^.𭑶kRqCG~<9ΚΒdeq8|P`8E 0uf5}ɘҶɬT:Z<@cdF>-"q3#)IIOC)\xB!* /T3{t`\ Уz +G=`QKf n>K*q9{$):ÉF8IIhf0L`ΒIu*z|N:X0@-iǥ8aUW 10-A;芾96r.g[FM`xC 7!P-b 0Zˡhʱ[:I +eԙp3n=Jh g5,uHꕦi[~3/>5ʹ0L2xQٌ'D򸢚j.6BW|!g$C$.5J[Q}){ЙmsS/Dde٪sE8ԄƔ?ݩF7.qIv'CX$Bb5iFEWsdoG% f^dL@.OI-Gf'Mr$2U*)d*bqϨIMq|YT% >|DU` Kz̳CUZq,nf% T .r|óp{p }-o$=`4 LͱZ'x&xC)?[{:t7'O᧐ ac*bNZƅ\?z;/]N66@Npݛ`DGg}x7jL> $h'z2^{Otפ6!k(Y'@ @Nxa `äAf3S6;t\0??C;_+M7r:x;]ҞfQlUW(xj``}&sX'Xfڌ۔lg=hJ=W sŤ*c^k.[!kDf+թ=,V\%'/_ہUMܕ@U5OgU] S_A`a}蘏_㳒2ղɖ 4!kUI)oر2iZdh'NYIn {q%> KWjNKvÙ[LfE> \q/>!odwf/!+jᇽWo_~woW]=ܩ܊j#-ۢȶmo*WHV0#͸?E|Ps~TyD!7f-^؇ gAau+s{o9ݵVEV+w/u5'ԱpXU_8|DaOB᠕8F 6!da&С?0bß=N?9gėKu9W BR~"|‹zRp_sK'Q8fXzi>ֵJ˙!HCz0h='8ͬ9=;)K3  $VApNBd d&x fD!$daDB箂7 b%3"[|dxٛGS|3g@ESK!b M8XH T ٷ]Q0O/VpA .K4lGep'1j+8Xdb잏T(IF)[]mA}rQcժ5Nv.+͆F`oQ,)B^Ι͊i>lp&@2z7yqc,%d$!(f ?x[i[%mХgo^|oH-v\*xJS(8_?zW%7E'qkiPk0htL^cYAz!2tmGYD)ʆic(Eh萷V.u;덝FO=݉w:Q4| >~=MQw(""ƁƓ3Ny Kqq3*XF ĺ<-[P:.S}VF!*\VWտ-6щQ3cᬧwpҜ#.koȜo*FWtMb; ި@^q6+9bt\Ϭ".1'/ڧ}% NL"f@LheG hU {*`:|L>]`G[;"T@vÛQR@?D\WMYqmޘ4[070h4Hȟy61֜Zx C}U8v}1pnکzq3ihlfAJ~JQ-e57sUTЬ;NE~YI\?p@PrJkS)tUz 2ZE E˶P\psVR[婚p f,IPS|!fL)'\r>n_1|auQCX݅\"!NZbjxCw!Widol{8PAD݈3u _+g=4.wKsXɮ۽1:+GòXu&vT ُOz|B#ƎW%JF> RQSгʹtלopENc&3W&&]Hg3b@6:ࠀ.ЩJk+rR[÷#4P/FTv1  Ƅlqc?rť X@a89ggJCsg=X\<}g2`[33rswI!F[V~zn_űT?;FU%Fb5_g*5ҡwXZEwTrWDzM >} bXU~/FCvL^&sذB:\"N`ʬבZ*X%Y;c</i56'3'N.M:Uk,_j}b=,Ŵ~]ܛ@{I r]F23zBK 4lTהBU7qae%n#Him5\%U뭎 @8'Z\1cOH^|fo˽m/v]Ռ Iu`!ֵsݨV1BW|Mo-ɴHHª@(N_O<$1…Rxnz̪j~BCWZ,54Ef הXu Û^:esу $Ӈzω9]ֻauUmKLv,*L4l^:z*VOmC<Ŭ}nsr0'ix?\cYרaP -W[Y<],e[޶cHƩTJ ֦8>}&Pܟ'}Dk r1nQqԚC FNrȧ0Tܰ fhu ޚ y~  qypd Jpi5o'2, UT<#qLeˉNݎ/25B 5PQ{qOz`=h,mȇTpyLA*[5f>WA|!I 榗+8@̅UloS6.7Wl `w<I1U:txgk mI0d\Ѿ+%˰coP2|Av8|ЌBCYwBڤkq;ElGxsSάc,S 1neg1CyONCxԡJcMLa0C !8Bƞ,6Y>3qVߨq KslŠ1GݙޜݹSX`eG_I D:Pz>04b'<'͜M/[wSd{̥> R5njf9p:ЩϷ_ۻ=ascޏG?4L𰆕p#xex.Yg*F\f-U+= YOEjjzLS\jqTj{6afekŁ_ :Y>%0{7n>A,Etza~Va}eq_vw+IPu} ýi5pQll8сhSRxӤlWjy!8`0 gcym~a#\)h#z,Fo**K.F|IoOFq{q+{>SUywgT&6Y;JjaNy#GY){b`Jiz&[^xWnJӄ>g#OYNg,QPlj:QGgq5.2ȺU0̐jMYq\6B@[F i $4%♂( 9rR_[4IAlDt87./b4fFUd֚`";ߴ,*Lba* __ 0[Pwg::(h^W.eu- %y .[|$aT8/x //YJֲ_:_ɕo&*/_'4/KvJsB'5L^+Vb5,i2og9~&-^n ;PF9KFaw6E #ʔs7[C7o_"wQWv".Ir`8iCr ly|x~r.JH FcN/ ފ58> Zg̦<,ɣ$OE6ۏjrQZ=:z. *e86.J; FDgaBT9urx4-Nf7l他WAjv86Qȁr.w=z&3bAca,xbf3>,(e,3,A#6jFSuq/Z{ֵoN"kzضxejx n7jd3*nyvNjF4 { _RH>jI< 0Noٞh]3JfbUb[&ؤ;qcc^yI ӊQ@M[6s;F/7L8ڭuT 3骄g_}taKd 8`O½~܁Yilz /+rP` ]7Kxʦ3(G+dK(S=sc1ΙhKy0qn0̸rw'=-cp^Z zJ0뉶z=Lldd}EiN 6֤UxOK/2 aEÊz/Bމ#Ů%3-@_&;<>U{hWʒAYR(܉s?Ⱥ|N%?@9<7;[3ywoHuS1ŭN ǦIHF ]M = V=DB"R5\yKjR9J7>tH΀*X3|L/>W;${K@Cw>ѮX|D`==:\.y {h 1&d`T*|v֦ &t@1^ׂ#Y~T)SB=P_8C N͒/x4h`҆ Ixдo;{ڛJjNҽ+B=}Y策fykJb)at9.\?ȋp]H2L @* P&v5I^a}T%ۤKM,`CX@D56t^+{m 8c>~p #,2؈{nNX$Y0_Fv:S rrld-o.E΀ݳrOGπ VwSA%Վ_3%0m OZZvʚuwu@#N4:493IX o{a}Y.&We]/b]Z_HȴloMs91H9Z L8LWv{ r\0i-7FMy>& T]' gᴁ(hʌI0>e$Xk.X",hF̾W=O # ȶɭT{~T!*_d^{_`>nFǹ' MgUW /n-tFI2k+qF5VRsL P_jCőoOTS޳ł.I^#A1?6? AU st Lv%(we\0r_݄uG9> P>#cm؃<ʚm~5oroVFthcWٓN8b/ j7 *?pNȠޭ8aUI + Нkđof٩D4.DQ-kJQ8Wη*[,Yi%u\Vr'SQōeLb o?HjlӶtXyX荳j; \7dқd@>>4*Vw @-y\XS'C=ATpuBP%`ag0/5r@BP^-4;z)K֞ԓ5ox.lPQ<!{dcxSNB=o*sRn&c5_\KqqS҂UeJ&Z\Ri;'y*UAVwT73'վgמ'eXӧA θˈW =dDpP5O!nrFa RԌO E[\ͷvPr#GoșosHFs!b*2=9Q{$)EI/8Pa>{2 l,}E@7vvC֤P@Db sY;2͑MYr'M?@ƃYB֬3stXAEScr.'̀|4k&q@;&fayh捧~iZhP1D5oïn_ +Y!V?}WX [ ϼTKAz_&]zqՔbK@u⧺pDSwo8 rr)`&#?$5\Uc5tyR1~vekc#؀/]O>TeA^6uQfX7!*^P w#vmʦ'ٍ*g2vܲ<à1qM/ ژb]:ztz׼ (i!~'e:?`ony7A7=G3K.Gq˭$/̫Y,b{|1#/fDZjk82RNaAC9~ X*)AcJ0t= <DD$,ZzvPTiFg zL`ʰh'i{` E?=([/l^n T6C,EOvhTH[uehS5TIي{ W<+vZL:Yaʾ<2qm_ hDNf6tGO$7.mn`בӥjg{^ϓ^2B'Er<9:N "S$Rcu(&JJ ca&>Y1ɀf2cθ* $Zx*nuprFeB_Vk$'spT5VuƏA7jT넾ʈ󽅃%YkK"F4E<7Q,cij)%\VuÑ yª>(aHo>bꋹrxd 0R *d W OU:ky1B_JUsTf pPt3 QO`%?vۜbs8rxktZZKt⻂(bՍܰݮVdnwzG7Ha=μ/&W*OCFO̽܈ ـ8viT6*-z 2I>W8z7l`8=2Ke$p^ZH-l>! ;}g?\6)nvOA&6a֦Bt9fO\pAG2'CSp'Mu6+.1d6쉗T/?x4g/DZY$=w2:exbL-4È uȀ} .I[b<`t{DC4Y'c7l-8>V8SBR *PP kIp(ê@f~ TmUP0n;K")-zNS~ ~ /s c8 |Wt+d6T%sP|4"3RRcy}@Tlb? a}s|ghoX)nv 枛sn9Y'9:J('4, sH U+mf)]pcWtJm`0Ƙ0]3o5L#M[4CsX_/t#:<1Y,8 p:'x=/r[+)^ݶU+̓WS-Ҳ+P0I}}NP^|tyXsٮqK%s6/w+Tnfy\ݢx@8)%JΙy-ŰDd)4~J|ѥX]TȒkv@vfdVWp?C7K-ĕɋT~a哉utqYofY);n(GKJ2;qkb1}fo4߲/u],5)S/Q9g]xt:JH/bS-SU]S5DP77u(WsU[]ChqH;Nk߽3EFX9տ9ؕw۴9fE% /]@ꃙnVBiVVp&n:̎_/ɒ$݄ШR; :;gxCN5ltO"MJs͊r[&WNS[.W|[*W3z[ 6mUvwɤ(L4y-h=SG5C-^6V$Gmb꥘ߺGAr ^z>e/m9i G ޘSG3o-jzD_Av Պ5|^=+I/@Fk 0*.ޡҿ@ ]@4?V]&hÍo$[_'[Vlɯ0556&MoF8Pmߊj\_3ɸ/0.et#nI#YzYw }vr^Z{O76n;X乱͕`މzwk}7Jgg˷WE_aMIWDĴ+lCS!Hh<8;?I=03Qi6h9TeKmEmJ{>\fAG+ɩEU Dzbw+e4_]9|3ҕc>~'w+Wگ_U`|ST@ƯEW-ҙ\Qa|YԔ0;9C~}R?p 6KnZ4]feי']W=:*s^, CWŸ,ol<Yw6mk qR!es7ϱ7ϊe(oEk([+$氨Fwuq _RJD|I1{[E=|[3DUEy7'?oywpk~ٿk(W\eȕZ.t~{Y:gޞ,gᄻD>=%sTݒۣBkFve3×wy_F dDeȵˑ[>Փˑ[<ˑ[:~\˦8c)Zd-✹R-X/"M ^E䆬_Г͍9zeuY~?"2~X٪ I3Yq~ٌ 8Y b~M4H&0Ix7L.o}ALy_gxM$ ,{ `q:lI+׾&Ҭ:"#>zyn]˕O\ӭ+0 J8̙$1$ NkmH$vp,3•fo"y]`mt<]=wv-92!?0^U~ڴ6G7;skɋKU7> 1xoeʪZwoVe3L&v`)EKԊ,Tm Y6TlPH97Z-ŭIv V3:|+_l"( `5>y#83B52=/ \"j4E+磐QM%SZSBénI 5y,ʞ^٥-F>JUiʣRNR_C_mx)G˭9o/($cVZ pcW%No2'VFtƙF{kOpxj.șEu՟.n1o:ko"U% |xQ44isݷw1Fr=߉"?h&-Wn}>H:o)f݆?N/u5(pfQjEE .?_ 6Z7jVU̞|9VL/Xc0ɮ{E2C11W(~>}08 EN9Fb|rD(,ZtD׿}SyD R^Ptrs+;r /m~ z:Q'7T$s(b *,s{Ymv Ip3>zcQpmkVj>aI/ \_˧26'[QUd4ʲަZL髷-j bn= `5Sm͕Ɖyl/ت=RC,+X'fD-[ebiŲ*--O,zΝBlMnGlgr*v A2EE7Fa)̷DQ nP\aRm>]4yr+ub;z.mgݑ[~[Q |<PH*d :72_[;J5{A΄܉wa>_!xQ@Ld>i6kzҙB9B+z^T/pߢ IiwoÛo?|fչJ<sN]A1NwdFg䀀X o<2ZϳxZs?7k.rYۡIgSg</\"LG{ꉔ'5AtD-)#=% qE XXˤcoF~W==/#p~gW mzM-r""~nP V+Ԇ}xşx +1sqd{/iZ4| 8S-Vv-ߛ᧺:%c7|KxN+?-] jC(4/AT֤܅|rWil~B\c*BdBUb;bIpȅcK~Hȟ-y7O0M1]PuW"xn'<7$@-fIgr)T*1w.Kw^(Q/Sg2p4暮 [|.}qbpj1Ǡ+`{{λ^)aC0gE(K\90PqYSNS(:5_9fNYM;XGD`!d!MPC+Jʯ oS句,blrNwrcN]'99FH婍enx "pzgՍZ}>y@>?4;jRxaVdgsp4ճEP *'01#FZ Wt"+}(U H`"G*.s1t(6Q?OzEw MIwn%g} zp0.ժdr~P=X\[Y077]~pٳ섕 3-ՀG?;-~}JvP%a?؏iALݵG;)nE^qCo~;7qkҖ o[hVOpG搼:e>G!J&Gqh\?hWbװbO.%l:(t Ǝ[ڐ 1`_eH#np i)0b%*$c`י#rJ4I6M#&$ b~~@u~GA p \e1.}?|. ,>n@7*UB4ZeRaö l \dKdƸ5Vriǧmড߾3'4AwD sS0x+F-񈱭aݬ&Mb! S$dýؕNǃ&!U~Wx[ $S1aTJt1Ly(GxA T*_կh3*hC )/͊1q9 6А}s7ˁU -3?˦eͲJ\k^"ed#GD `8l4A␯Ͳ|]a?pf{L ]c:=YK`AQ@6G?CK(j$m| 3L[꾉3vns=igXwxeF\Oi9̹Q|rDb*FuC&<];O2Uf;rrV;vh.>L&'t` yߺ:ՠ<+g9$EWtzW&HT _e{]OK1Y 6nG'Nq:Ḓrۈ[ crz씃BM9)Ds"ym!SnDs>Ǔsb}^BR9%kٻ燕O3%)(<ͱ-h݆`qZ,2)qt2XpwFڛL/EAes(ܫGu{Z1n}Y<VG+/*!\EJ׊(5Tv޻G{wd/ `CE|SlrqάTj/1z=v$,W쳈,ZFX' '܎e.>uFcg~|M$0et^`tpxd{UU loMMR_ީ}BY7utf_uڱ:l, v4 VEi]t)3So4h$ɹajL+{?iM;2RmM)=K1Pj~L|lqV5EbGdXZP>}.&SXp1S钙LrRџ ɘ YS !pC(Z-VATtEӕ[aͱc2CS|0s`ĮvtLL[@AxOArG+֐M_qglTcԫ ZQFN/ƈїpʪ3tp13'" (c.<'nc+U\;Yk9m"SFx1LIU,ЩSxW5mƸjGjeIFA%8&%7@%.e!-y^sPFz$94/R,jd.z4!VZϒp'cԁ eYWVAW80A)͝V &Ngž1 3(>}JڞMb3?|48+( SF0,HwFU'\)?I %ZS(q+2of'4> řKi'TL{dа BJEq^f$,Oz٣հvE5XvX7,k+=ӢvEQSBȄYP 3⟄ziP䌢j[YqJϸ3~6cr}M9bpma a!.H"3DW2l=a?ꁟΖYYtw`j]#IK@ܾ1=o.c+$!uDԆuTS4H ˥oxe`A^:_̂X_3pge h< TMUy7^ 3&˼3gq<~y̼9XyǜpԨ]lԚS<3$w*N>%ɔ@L=3VLp< &,fYeQߘΒJuob0k%d%r\s @}SӨ!rA qř;͍+UGZz8A(xgM<0~ъ ÇEM|ftj.N[L>&6̈́eB.}ǓTXE2M,Fʢ8&7ᰂ\x  k:m$aځVàSo {is viI ێd:ځLX aLU;ЄLk>q< "z?L$ 8 lµ''5}?O_us_uZÙ7OF_?O=z}~OwudzcjvCznp]3A;Nj`G4v&a ]`w8Q8;<i^Myt6F1 Qɐ!x&k ? '1 p4JL]7dH%kqNt)1~E} C:5)GʡI8xCzw#$LF02#ZxkSi-ĝV b+qV(}?QIO֚G"wo_?{yׇ>?p?8xvy)lߨVfewH|.kPϊqe9DW)Kϋ2u: 9BCa6Y~,* j|h */ Af΋% ^]~c]ISY'`v 3a_~}a{12HYJT /~ ؄@^OS373[ݐwvp^cL82gWKZפLV9ɸZ+z2lwVV pO_.!aH|549? =kͮW!3!J<Kֲ uw7@0\ju] k&]<{ȃsx5@7s@Ok2!C=g !#&aQ*E)5pe%ƍ0=d|Q6Sy5^:&ΪmZ^^b H$kvV.`pvpг!rb'by+rr,g{cG}9Rv};r|Z%PgoP6aMO{ BQI/_a=ݿ!io>'mBn Ys|Ysd4.Cݧ7 g_gɩޘ꣝Htsx]X(fKdD{jP',ΟF{UC ͸a_zMUт U'S#sdԈk7;ծ Ԉvvv?PO$n]+bݸ&0 /QK#0uJXКc2k3m{~qo2fAw˜66\ۣI8T4ZfY sN ?.]enAy˦Ll@?Cv3_|&CǢO l6sBf7diȍWwcٶI)+'.kIQp`L.4hm|ӧ%5綷w8XdƝ#Ve Y&WMRҫiF}E #nV1Z]~wN[t,˗pL X"$+@aY3)U|,A ؕԎ0{A?4&V@:.!2NfυfVoj __ėtڞ -vܕ~&4]pno#qrJ7|ѷƇ#bԢSCL8ݣֆL /9x4DQw #Y TzE恵-&-aP0¢RarZ9[zPYRiiIE[Q%mފzzw|YalzP̎gFMҁYdEl-N;ʊu.ۛ ,L Q^E\F,R;WT X4,uLKqɢDylBE-[5B\G|]#g-MSH6766)9Ţ"΍EH-?^B9L 3g̯Jr0 oW[t$D^`>nF\:ShXxHxul:]YzrD6&&训MkW7O- t4Dx ZVvpt 6!Fji! ޵֨m{՚r2s%:C v.pnߐļg%o^bI2DZzCUd}z迩Ҝ+SjJ {p45/?OcIfٴ2xahy>'dy2QE9+jt>7:~kWV1ԥ2qik9Lj_M>!QhN.⟝|2~e eX֊ܦT5j9Ǟ yZYg&%g"ηiEI=٥0lh¿MiX[=B a֢6 Qze~҆qGAm8!a$=p:Qpb%zcz ȫk:(Rb@ P{L<$0ZE}Jz2i||%cY%Gɜj#ȄndCkE2 .< yQY/phغG~^Isf;k-B-jOk ڡȡ!iz~8O'I"\X.DEIkO^E˘LLh52Zpm/ssh5 xPr=[6nL@sS!.jύ[4Ōz'kHh%,,Ϥjz>lᣰaeзXR<`->=G;Jݧ@:۝I;15=T ۟;ЩN 8[4(Cw50>}%b(rZyCK0٭C!9}a[N2.xxs'DoBN [!`Eg䲫B%'IJ1kQbYӂhո}/X1䃑Wwq^>݋[QnQ yN)sBű.ϭhFDxjr*"&b}+TGzp6$ 8GS)T`KU9 Pѫ'7ekQp8ƃ~pƋb(2Toպ j- 10@CH 'cƴ?[y;I~$cʏ»S-^􅵼3ٖ>c Z˜ W @8 P_*MqzH&mKuD!~ ƻ<{^-jׂЕḛvj?FM_W5x$ )u=yxUm؎P萶L)2Uq*; H ?A{WvO.H 4]$) L=<0%-+!w&5"ZtEwDtQ ɔGw|۴>u0^$Pc椱(?z3On;o$ZV*øF]t;g0-j#2pmܟ>_FpC&}p@۞x}3z]5ХzJR)1;4CY !ںGNW|U "Ǔ0l( [jyJ>*~`V#>3}2^r%L/_ͨ*f'{=ˆ&C5ʔOA2.`|ާG;at776%ƶ䂍[=i<5vHƭ;sѣ-jl<̛;mhs{GwL{O7>+m$nl=ya*yfCjzh{{Ky؀ۮk4d7PB&,rF@#j€p8NNo1 7z+g/K4Ot&2UE15D>m&bՅi+G{FAMi95)wk)6_%~]qmOZc'e4fJ%'I r9z t.R/#]uPC~]hࡻܡ* u%y\*Rgl!IyӫyWL7=>vy?wV$d~oT/vMLgPڰ 8[u,@]d@8^afNɾWc0&'H.s?TRP`)9A0A/ n*!ô^Ouԥ (-3bi>SRM^{(g*߄j&\ FE~ Q,s%عΧNxų8fґZF1 :aAeÓnZgPY,AY]eOmЍcxQ;8gR`x !>a-M~)|6WȑPЎ`ݾÏ5 ```Ћd}":'fDδcnsTs >վF@o8 h%p֤˲eҝlrϐ~j!xKZhTa"x E3>V֧+:Ϧ4xD,i K|~3^.ѓǃlܿ^H@atfB8hœM%ՠ)h\կX}dFz:Dq}s%$KYUks(E!p "]/+xc}AԿE|U[@h#kˡpO>,fd.aި*E.j~l'Jn<УpvI[;tqdn;ibP0R0/{hWA ,wJ~J~F2'{sq-DTɅbֈ?U{Q~2ocR-7w}sa='#I-0t>rN<8wi =g[YYIߔz/D7pz-m4kwX.i[d[e!#6z@ic`بoo>%wxFdR*.r+ٺUGu|'*_;Mf@ I<;?˨uHokHWNѳOIP[բ7QSM-+̣iYb } ; VmZY{(m# $8biV`.%¶9 aT0c85őxz}UE<H7wUkejzEXյW ,7_5WRP0Ś;$3e0S&p`*s^C^8hzχj8Ľ!qZno~ugLy ω׸.Xp n;YUJǣZTaOTIG>!VW.l*}(Arn<Kğ5E"q0]G"]33z8m;tn!h =4b6Ej_1jZ r7HmXyrP2b2ɇD JD"z=ϗ (Z[ LQḰᐲƺ^lk sD{kM_-2VȚБVQckr`>t"wx 擩Mx7Rd""bxzւh%hXȾ5tifAvhjΆo!z g9#}+Gu^/q$6z{nֻ̬??ψh@W I$J\ۍWqD/:P8KDY ZfK¯]M>j5t~WV<#p}ЩHjƷ;v jq2ڎ:բdcu~N2 xu+:΄:E`o/ۇ)0Cɣ-ѣ,~M;f_̤oue$ g-plq7u;EFo=3Qo/! +KPlZG늫zS΄mu.EZ{xdU'M.}b"u>H ԰#fk:ٯHxqZ(']3a{=eby3 /l/*_Tp@K n/b_V)=~oGX9^s6,NF +8]N_KUMdA]QE ec~Z'! yؼr"78'HO.?FRlI۽JN'j{ϳ~칩fyƺ#.Xlңһ Yޚ`+1Ϯ; Yߓf8[)}c0a}viY 's.y8͉Vrx˴=)Ŷ{UrjuuMLkx1҅>0^4w} 8ôӌq: h[K[g]h[}{^cְDw2 o#ȹS,V6G9Xs^s2[f}V>Ocx~}NT+Z=h"%UkBtOŠ`1$6KcӦH-Z ! U^KJKW;o˪ A ok&.)r#lS w.٩Tn݆aSKhY~#aw]- eΌ91[p`ah7{)mԁ"(WݚG]DS0 3*Q}CYb-~/Bb,ٕmmfE$`ۜNZaSL>8Cahk֌wu# >O-+hpD ><BƛO.گ@3P06 2n?x<#ƫ3rڈ$P{5$@6t𢭝0xvmY#r CܕCQ7M(I!G\'O3ȇ r`d<Wlv%hVciek8ͤ3)F iw먝;p.,{/Y ,,1IVj`sa-^ak(̎P]jý-|ظL֨Y5.Miji@֭e<䮫\nǸ̾%~lվ`xSٴCql,{bHq8JDL,iU7m͏Szhמ#{]o 'x:c1^sAnOz(*>%;aQo`5q;1J/C ocM#/@(aF.wq1m7 Ɏ.fev9 }}q9-rky[_bɳq?kU la;]%¤2ݱgOOư,;W0}g]|vhp~s.?q30>hw U?$3[ss+E[8X2x2>Bhq^3HH.sȢ}`<6]A_ypa8A9 ]H?Iv!uB8j?}wsW7sԇvc>Z5*11^|&v!{ؘ"&(2x? /D 岏n߿"2{ k$U}Q"lywc1t'3)G31XyX9c~̜ Ƶ9vVԺhgP{x&, 65p E@H%OmvEk-$e)Zqp^=a [}sM2>\Tl#HM I0yO^?lh|{ofmzQx'JB[mѽ)`̷ۏa"_~x|=iJG/RbiG(Z.#,/|O"Dt?4Ny#Zl/%Tl`5R3Aױ2Į@! B'Ɩ{6 f@o: ֢QC¼b߮+aMzcu1>y=~= Gkkt.#f;M 1V??_knE2+s娌˜ݳ蠨Q8YZAc»+q~<( *MJ YDBv>qpb I:iP%[ Mؾ^ *$~\~n_Q@S4Sa3^w0Q[͎!{,2v"+N G4wPCZ1l< ކU7UT ! Q#B MMr K˜@ (d78\ `Ŗ\gJ ZL=AtKq{=Hfv!3:Jz&Zv)1+~;%z-Fiﵜg^vS4"߇S.`T?2L,@ÈN౽/(W na\瘎3<  b$˄ҧzFxsZykAa -,NMzS:s*r+ nñ5 *{nHhpЩ=$Tk"&k %d ',69"M^ `#x4 vsf@6D=񩝱- @'i R8-I@PR~_ zxh[1C |5gL2:F J6[v9vZtf%"Տ6E:]5#l2;%uX0Ηh<H*a};q$^^?Fi:tC-ғ[Bvqs B;75_~$Uli@eYoF<ĐMEDK%*ȎdGy#=$s\V-Tổ㏞/̹LJ##RrRSYW9"A(EB]X`i6}[xx+aP0c77[RK kia- P@)iocH1[ 0mE@0<N Ύ {HW;\C$bfg_{(5wi'GD;à\5([|GLp$=p_W&ofbqbW u!9`6S,_4dt;{yrid$kh%@_v9yց43w rw%^` j4E{xKl_h9e!_:U]Hv>EFhȉB *^ MT y8=aW_|vﱁG Ԋa5Ч*$ wjf?s˶ݖb }1z| E6<#՝;ȥ2v }_Bz;?3F4wfbXƤ283k^[[TόxL8@FO yThL&h춻^em7YK`Qz^?kK 2˳1a|/6ϮV7U+c !,8X4>Mٸ^G=Y\AQn;rKAxFр&CO43XBQC鷻~F`UWf$=B;3Z7Z6h/[(pKfxQt1o[3@K=M͕h=ӥ׮l١eg0s2HoyvJ[ͱܿec owc̖K{BY?x n67lf2:X"f0ﲌ ;۵Iis\c&Qk/ rsgGa{Ծ ֚q.޲=Cmi~3%/ a3 gnYbО](oÒ\okK-X9>ƨq۹YNǓ Uf. ei1^qySݨej8|~;>\h٧f"g67ʢOV~**kL7gOt*ќ[߮jIw7uwSǧ]*xFj=F&0sQcW" YHND߾"ly,:im":\"}Y ؂AU"5eZin&Y͎Ff}G?tA"@KL߲g@W&2J18NIqZmw; Jw§KwY?8obszW֓~^eAwKaFcI1 X^$5 diE)kBH딸5?Ix[iد- ȒcvI&5 auiZXsU,5Y{oyQN_}!K׋y%(b6es|KE(\>)炙, PCA\ Kl6t7'Z3WJ{]UDv6[w2KaP@4G`IY{bik>/2`6 9ًSEu&i׸vh|͗,3KVJ%Lc~ęeuBy% ǩA1P9".\0Lhó'O7COx X xAM?sB')(r:Z!' 9JNc{UPDr];sи ffl_2lŏW 7lcJ+13~s uS.un՜ڤL Q(?nK 6™*6QUݹvHTXA46U-C1e.rT; <*f ftP@XrH qFP,(TjIJUl~Bxd&=AXgmEB | b)*]+SK+MY^Kfhv)smņ:C˹̃єaG(,OoA= v3#{ǽgm S h zkv؎T@Up5w,*Sht"Ĩh?1+M#S o]"ҞM=?M[x1^ٽ/@C̹fڒݷPg=X-FU*gT<޳/eUI^4t +J%ϱS0_)uTqXGibЀܸYͬD<+Qxn!D%rmK[ŀ۞ĤֲԈ`OI}\{ӌaukZ>ٕzEҲv[;|]讛T3J42 Lr0Eq:ݐFh6 \xt++8 P;߭^{:5/0Z|#6FAU%c _rt/(Kzmrn?va͑Z0ԉ<'~?0jD5/VV=x<Cյ(eƼhhy$M;C ա@z3(0fWK1-E*V1SD@Z0ߞ/Gϛn!Ջ\o/To/08y7N#Dǰò)tpZ0{}QCYC>uio\FYt-}r{W{z<'wv5҈>>}N> ~uָ>>q}&k޴ t#uG%C ʏ=$Zt#M(G\#k'S:f- %p$A1dz]{@;x CQp $1>\RN؎^õ6̜ΊOpgvɥwV㮑>M}`C))"Ub.ma}&r#˛ARkbt X~-軎Ikr8p22CF/3)eʇ5qGfBT/!)wTI K&bډc'⮻fesw*ޮR1[alHw2欘ƒS6k@2Mm:|oQlOZ&}Wxا̓o,`s;mgnp/DhC>>z`: |fMh5T GI: aȓ7M8:mU0![ SN{YUw>};A;pC~&1B$bjU`P6i}IjD/PtUZIry]ORHOBO %8aoOMg5 Sg1ꎲ$k%JZ859OA5&*+:~ӓIu(ȓ:6ӵvX( y޳M=<{Y}m(?Ofg/0dř%Pl0 g|ԛ~ ,dLPGZ JQ3}~'[keDٛ͆wky]u㖉RЮ`McjWoQ5Z82$w7nk7ݯm~0owv9Amg|lm -ߴKz&JZ#;,!SK<-ivlp $pBHNyxEz8N}1bfufRߴu96jt<4={n<[|NLz|黒M -ldR9 V!Xf̏ ]%2B_k T55Xx)MOϨ;p85_fLuXغ-͒m/dff5ޒܝ 2aS1V-`5umebbs*ۇN?"A2)V W8:?0{/ џ܋Be3vufǴA{4oAг]8杵 z}[PzmL G+=efs*RM#h,bG^i,RjCTQak_Ry+'5yUgzc'<©g_&]{2k7( Ġg1B <=guܣN$wS͎W@wT eShר1 }N3d5 dHexT*rCp4MUm:|oXNQ~OQL)_8yEmT΢ T#`{QH8hB ^^H=cd37zޟ&q$ Vj_2`-Q-[S6#PBh-mnƔY>}}N322ߏ'qzy;)\}Ms!z?Yg(YLիI v0]̺RlȞHpSxR}FпV-;?JוOsӲLE?2K\ g,- eUK͂_QwمZWpB1y7AxCIN۝?K*xE+~XŔ*;wMhfD0q^E<8򉬰8ܬ: fe0Dw&ZUZ, T7xPqஐBDbBϕ@Edu$:]̀k}o)ƥ[Y%A]5={Sg糬l]DBw1 8w~8mƍk/Мܸ #*پY2m:nlVt>Z,J}.V/K1j{^VO[T{/7aV['S,|4Sf !gG=~N6"=ȫt >WoW~[׿e :<-]/:KTwf4h?Gw rmݤ+Hc`0xM~HОfY)ݐT|NAwINvo݂exAoȂC}fˆ>l ca jx$UQԩXSBKJɦ~V3"[h`}medH`5P\y^{7?mǮ훱0WŃY (sQ [2}ڮhznɻbY)~?kwp9IY}kj<e]8FBU6FN0 /8ͨKe6g5ο.aqI[m;S} vSE!qMAШtS5޻;Ǡ_bI}t= `װ]w,\Go&Bk%=͇sig-G+]2]T(͕dMLd :58-8Zӂ̎?։(VQ!=w\oپLg7GEek0[-_#MH.[S;[X 7'>Hx&PUK9I/ӻo#޲*ȥa=ڨbC5Бch|Yh^l,]YлeaW*6C\@qWWg%;D: R9i~F.W%Ș"vJڠU|ʥ,v>s WW\U W].pW|՗X֯#?Bvɾ=.=m 8l jVT:iI>V$1`;h>BE?i.cp9.RڻCEC   Ex 2:ld|'RlD ]qt*\$O.:# \4ҸhDhc>?8ܭ?_qLԫa$tZJ,d:Y]Z2MsյNo.Rx1Q]>/s\;µkg-fi ;|UȇT =)y0s:p-`ȣ]gnO;'l$dX<q} OF|ETH7E瓄WZΔik/uR{ oK/A\r7O㸺aZex,flԯej-wni)ic8KTy}cv~&9ISXGːZ@=Qj>h;1|Xݤ2̔`PG~P;ߖ9seCIb皬pg0̩AFݴ8ri8 IMJ4!P=(Q!ʞ7M'M+ELL)zZ:lߡP2[89CB^1vbGxk7%̯v]ԛwHaZ0μ ,?  *q&`L[tU ܗemeVKكTLevvA ^j}Zo4s KO:3FQ?.:R{}ݭ;`UbKv YT\ kĀAXj[}8V7{8 o[0{mW k7;i[m,X7!ْ|@b[^F: tuoNPmJe4 ;[m.\C`dW6s{ٔo@'[eB$ Rf{;+8 ފ9.] 28J.qpc*N-d{\ Zbh?VBZиL[̚wPi2Kf'fFG(<ㄕ[dLc`F.y8ʩ#"׶ &F1Kkw6gUسGpZm$<_fsOQ}]H^ $_QՒ&0$)"ƱS5#v: ZPo\6# iɏo:^(ٔ:b[Reatʔ* \k"޾@~K8/YLk0xkͮ]vQnh̑Q[tBtۙgeAVOV CƔN!ks`hv0vuTR׺=cObCki2gdG@?|VdK`yX`^b'4'/_$aH8VT"Y̧Ea^ղ=>{ŎLIzZDHqi'ŕjF`XC-1ןAʯU,9 x_!n#Zׯ(ZM[S/vPKu4Bba͛|< x'[ J5_Ne^T6)jvvGצl: _0!oPcЬ|R\tKKdA oNC&eșL wEL.tw6.ڣxo%R*ftMPe?Gb4}]XRقA!i/k=4d3enGEƆQoohM_i)߲jA ˧ض-^SfnNK-3E22! *6?V=.(*i>ZZ߇+QS`*x"+M@1~7 zy65/UV̼8J 5k- JLkch[moѮ MW25e_SRVGF;{4.bY*q9eS]%\eYYill$GmC ̩@pN<$LmѢvF￝ Ybo}MXNd4;Q7t3yּ7K"V~66986сyM]dXd}74ٍQ0;.5>yW ww=㤯xeT? =Rk>G$o %ơ p!yUIoNggJ OId5z<\\ҢbgV`~Ɩ9NX!!W&# zeݪdCݴ K-Rr-#_TS};Hĕ 0[+|_ѤsnFPh~@N,e_cVJ;H6 K@˜fH˙YxUIX֍i R< %]ɗ5SF i0477OOO7Yso۠%֯T~9?a.78$b!S څ`}tfw<\Y2~X4zT櫅qu7Mx~w6hZ4۷?k[Dhk~*5b44=׶:T>j>~)/ĿLD7PKʋr{$R wwɐ*2'N89U.*03h`i.W4~ѫ]U6>W%@E+c,;oh}-7KX$3V)T5\ߗ4~pkt%z$Mj$j U'm=l@/|R`sSL]kN޹Kcb6dD^a}|LTs ȎA ز L嬊cX+';_7i=sקKPxiC]]7mIcKݯt_~cvRLR=.VBB7 7zD"h׆3u%,߷޷.̘{ lsfq$ omVM;Iw3첁L'$j޻c /L: ]\L)E',E D7PS)셩v~[u :z OŸyA4;WTo}laG_\B nG¢n!t, kĤbn~땸~}H _i b@ \k1`}V.2?!_:2Jھk17םQ2Ҝ즍 /!8eCS.'uG38e$J.̡#p]5xaC W;+;໥V׎={VRԬ4ȧ$s,{o.EmKS% l_YgT=ƒ1g0ķm-3UODuPۇa^iPHE B }z.30"EvIoOK^ Wu.>w)\>q?<#۩G(R}5Y] 6>Ȃ\T 6x -7@FNYxF"VM`ZJ t|C"Y$N)]]t)9K;2L]"p*J)jڵ5 8alwůZn(W?/CwNw^X$-iQ{j QwѨxlj2&6%jîq?*dxu~) »8knى‹`or S{wDM?u$xQotgDIA^ױOׄKp Ւ.%<rȮXIXH߲D:bWP%mM/uLQaBs}JutW}GnLES_o;ٗhSEz>f.xq2;?Ī?T"~vC۪ Mld;;X [{Ն yU(`,VICv 5 \,2Y)qw<&;#l?eciߡuZav"N6Nى:6QJiDg`IGO6\Zw]c޸aazlY }~K(%ijв.=Pkx3<^[Wp1B9%{…hςylv4%jHG\Gb[ Piճa*//З|:=(R,;`n#ÔkMXכqbA9K=myBjֵ?:~:7H>o8n8iܻ|Xyer#F}+1u0@F,a wZ,YH25& qzCċ$=čDAmY19ύmߔtY2SĖlEǻS0O8~`dG@2n8=E6okŷvE= m Xc=VEm՛b1~E]lY#4.p(}ʩt3'1nVL <:0@>/ۧT8+7 jHQ?K2 t./~$v/^a>[Gߕb PDp@oUz+Px&$I6e@ya*69jH`mla%x؎E~+I =kϤ ٕnGnųxVul7fX0ST9&?Y6M贁Dj>Gv8'D}3 ? u 4_M*y1n-}t%Z.{&kO{F] ZzOT3яq6O&pOmH)Qo(Ӏm -A-8C!8pcnY8,GFszaqM\B(pQS[ѕ驶&}]sC< OBMР+i},}<_^Q}z,{[)T Tk%f\T -cXٞ23蓦deN† ږ}pU*R'eHc!C1%cq󦉋D)w-V2in$DVn+e0a"qü\1/7*_n周9|gC-ܻE:F5Ƨ47'e;c5 -C_*8h}ކ 9,25; ŌdMO!kTzv>O-)ғQ2+FKm7\=t@\#Gɿ񉹣CSIc^k,V5[I«4khجDfUEҖ+lYe[2lVսfh:A Nt}-O:C^.cKu*c-T=WbVb4UWCcmz}QΊT8T0aI24Y>'"i@<4exZ ZXco:VB47x4گ/Zɞx0)🹼^>]|y@G)sɛdqڰ;zscwIes'a*mKz|lX{u1KްL6]VgsF$G;BwRTo}PdYy6 {] 2",؋z/^m_ 1-K|o0![^?[?Vz3LW8i{O4ߚ[vOÞ*wgtv;FZQܾiIw[hh7zz9(9-@Gu!.BD6 ~Эu%m{o0\{riFwkab:`y 'WwCGo$niezXcFm݅/E?Os[.7oOy&?Pa-_ulƆ&*W\e]͝oIbvaAV%xB >nؚ5AI*+:$jgM2ga>@uilr]&G~ `a8]4C2xsˮV֍y9OԁMІk: kZ2Z$Kk?f5 -oO Ls+,Xp&NIXw GqtOߩw(E2VDZPn9m5saMz 0ցYY?a+BEm8ǁ+X`QMd͠=Ba3]l:ygOg:+p뗼vAËLyKL&;"v}G-%\Awov?;k#x.WѮNb@LMɡK|s,-]>0D4DH${G:â~6~ m 8NPx. qs4s I}B4&ā^^яg*CW#c2"A{HEO5^{mG), p6[OŲc{H`PiAN:: #FM-b/^kw u[<;?iGr1B2G_,i;Ɏ&V tl/] }@Ӌsڴ+|w ջsK_ĿaT wDʶR^bL\Y(RBQ?>eC&/- YʳWYk~m_k>)~}ۅ%_+_9{];Zm%62<hmԲ׶V&q¥n8G;ӯ6 #O]xM~RմݧqF]+9bS/wmҩTupS~¨]ja-jg) ZKsh*fP.XR@wEx8t3he\.<CI?ZZ9CvU)JU _]]uKrܖQ.vkC4wҒ; 2HOщu[ڠ+}  hi-uos{ȔZ>{º]*Qͨ[oeeIj`E0^Jn+ҔJKxr=.wGOMP_9]4ָ}]QD`"DߩE.Ju ^)kw'D<al8Y1o.N5Nȭ8!9Ll!tĆ<_ݮ"$>qY3RRel[ 8r?0͗]tEvQ=3w'-H-2Ғxx2uIj$(Bzkk+u)[*}#ӈC~70;?4RQ{p8P"_sS2Ɓtf~S ֖n5jlޠn+mg5}a1FW2_ Q_KF,; ݒHW"+ϪF1W+t)͆o6g#΂ˎ:n֤qʇ:G6r7#ѱBf. hJII42VggՕc/UĔ b =`I7XwfoՍcEv, ([A,.|نۭt{&%!B7lZI4!Y`R[WYxE8у!݆ )an.­rmf{{TKwnYy۠p wWwUΗVBg&l@Z[֘P{GWH!k)](m~)K١yb__SbQrgCq;(vNﵴͅ%nN^do/;żft'aEEd3lD7j\08ɨQ YƦ-hlYǻCX6kk̆/cy_oJmz3g 2A߮!~ \̌ܵooٹEq Әյ5;%=X~y:ȏƢIx؞BtPҴ/}b^_!,ByYb\o_b}sQd$6FfY%]3f{ݯ!Nc7b0%(]]^KzTPvFK3wZ0>$I1+tDnXH.Wێՙ"Aݵ#f0;A?L\r\ Bq|K2NO}bgw$$ tSIVӛds=%[ҳCn P<97f"f%k 'j޶~el{kKn7Ikelax~4< low?w vc:,hcֺm\%BJ  XJR3J_U[APS3|`WjT"F0ʩ62"w&+?&5%mDnɐŧ(%ٟ8i)UA9 ^KשJa;\Ht9ˁrά'm1vd\>pc ^;JI3dD"N9K --!=iw[9$lz{8;AX y{W7rXuàUVT}dG#%]XAq{[*?[~9D}sK8<`jfV% ?q7#ϵqr&(3j+޿ jjzՎD1uEFN߁:oۊ:l| gX0ulj--q$h%xw4H'un;#(=#$׫!rK1є" BORgy-g(p1)e8ۿwk[uy{o᧍m <2MfL-h$$~x/|e7ǚ*2^͞?lZzŬ'lfs?H(9AvC<H}Yw72`u ;OM>D$9p%7iIjb"@^,$[ :7Kf}CU RO7wCS~2(ypޛUS b`kC O  f=J<nP^c"r6ve%ɭq_KlvJP>KCF:A4'O=OJ̆s}"JqBWR)~pyU(v}h%5iyRҐgnPP /"cdzoP :I>2L*+%2~e=Zǡe8hueZW세.1Rb,6D!qr `r Re*:bQF mK@ab2X^=s "F+4;@FؒahnΙ=8-PH,BYAU:~"\مQ].-ׯWc8rчWt$G,ètv3X#SLGY#әԕeL[Cӛ\0V/*VA%F.Sa/)&0/6.K*fLh_C^?2A`.z,;Q </&o U(ԁ(0c,}>uF0K :0rfђ]{ q!+NFy7Z-6zݥxnӑKƲ\om:'-@OwhuAq20K]YFϣFg3ZVRcQGJ` oZPq6?% x?k"U&![,[j+U5a7gCf$q'+ӲQt&w g+v(~lc܉,0]xm9#DZRzLw6n5oi歝oٹ{i/ ]٪W"]ky1#e1:AF~Y'{m*uJA+/ Sad,.MKk1QǰUzI"[~8tv_:=n = :LJ$沣8^hv\dIqKn4c&aZ |/ ť s8R\G~ֺ.mL tu/;탡GOQY'VC}ýN ?a'~1<P %#g?N !LY@. !lnYLѵds`~>ݚNG.dbpOax+?+mQ0KIQ4q:8d<x! ("ղcX1·}i&{ 96Z_dz xB E%qux n,9s0S,+T_kWJJx LgG/gP @z86nvwnllٺLnOH͛^yg{o09W# s:‹6/ q _6aTGB^"HUoӗ/ރ.<{7<{g7<|bA{>~VFq;Zsl3 w U| \-d:VR~k="%m(h|FӎbΟ?zmcW$^pV}MKdOwULw>V1nąz<=!)p@Ɉ* zguч @M@ѻws4y)`|wp(CP(($FKYlvRbB'W\(tPEZ.i omݮ 딁(8t :^ms:KNG柎nUT~:&m 2 HB:j%ߥXLX8o:+)h}r2%ڇ8;n^ZtI e1%ܗⶇEf wͫPI%dE=I M| pI1Y۶N("t,u<5<`be Kwb#"6z}x9 Xay#7*8|-fmGZi] ˜q2ڙG8)Zf^LC&f 2cz_uA#@X3}J:@D6<&Q n=KWҚ!㉈jlaͮk1.F)m,)q4Õ¸~I F⚒hqBRN`r] fg'j4XOZp:ˣfniŬC7t`/`24 JF̚ a4 Amlvm4ƻ@G߃WoK\ͯjI!A (|Gla:0M(pn(Q4VV$\4458w# fINx 1|z*SZ6ySd#V~Ԛc08m~ pÙ#;&d'z>Xdw+Ew0Iyq;|&VL=5[Vh6GKa 4~3mN me#KùP+CYQ'jR>e}Ut2>fS ̗\`QU@̱aNg,eN+G*b,gYQ;&7s#gq!/N6Q~=9<9ĬI. CT / 0"LA G {h<5̱?&H1:~9@Lxek}۶ZX7v[8'KD,i0++ѱSD<"l)kE }3%Yp^M_("Y=Fag ,3p"D wgOB%s[%ʉR>>=VvuúiLF>Oj;oꆄg{9Ƌbu2^eaYZ $Mnd @j@ U,d{ I {H?+VW XR;vmxR+>f?·LVp zZ)0s=y ^A5׿9> 參E${pيg!Oodw-~ZYކiBc@kwhi3gIaB _'^*[ q14!zeCzXrJʬ1JnjĖ,2szf?nesg$Wcsc;:)j Ń8)l(17nMwj"ڃng*#Hi_L&]hg¯r`h>^D96b%R!=F~g[+zeaTQvhF*N`e \γ΢/ˠ4(t~uC٪V`y 棴T .^laSWWP< \+{$`rrhcd]%*V +47z6d[L})jUoynЕ0[jWYZ|]KolׁTڃ= O~mO>{ Wc8mOM~c;ndvWOW*IN#*q K]&nŒfpy#zU-K4&SLK.fP뎰~MR3'.}?]%)g(P?v5MgpBt}UзXA6ƫŽ ]iq o k*umVàj?qK*ϵc5 W''>gׯk6'hc3r~@KEc0=}@ڇ`wkO02"|AE1^&|ڔM@bu]m^ׇ8K5k+2}s5ފ1oXm  b8ܣ](<47^[oo@$sL8QlLßkYAU~Hu|rU„O(/I֔4[^A&N>gh|hq(*aˊ$lU ,/|`!ڗéJ*O8iTN; Wb?irX&BbS ,F퇱 6zyZ זif۞mxonmݹ/Hڷo^d L)O7b9#Ilf7ɇf[ڭ}~Ӥ.Pps̡%!S nQ{n`ȦSV Q)aVǯy6J~>%'Oڙi[$Z*ẑ@3} X¸g3vgfHQ5Uv- nf|@[(718 -S¶:M]w%+(nMսr_a$\Zԅy%O&rΠެF7UڱUň 602<+OEf'}iʤpA̪IS7cD4`zǵ~F d#n z:v|ܵQ鸏mUm6̄?pzd%r.حǴҟEyh^Q3Gp 1C֦N^d@pG ShNI29b^θfȦlFni]CaLN` 5wiJ}$aGxMކ-NaTT5# rU7Yw|7sȞ k 3/]dŃ{Yk>K\-*Wd&Ab|Hn& 7fq0,O^1!=c[c %(jdžC$W7x~-+#P(O 'W/u)$ 䄈wKnBI6) NytdLWdP8^c4fNaI,W"y%y~u=l^߸О8+)K nl/R vTwM{*Fcg#DJĈR[x1oXE_G(hDn?GVsSĘ*$@yiʅ0DToWxSbVBjPi::#E MymWŨ?kwU7I:^a V+fJpˢǢN-d$%O ZG2`(+= vHyve=fz`@>႟Rد7i}4-FiS`LQ~,3+`:O4ꜹ@*\$-YFԠ 7mya<;W ID?<)14T݌5^Q$Yz{ŪRl\_#s:KR) Xa]^AP )Gge|KRqm.a!J=& NFS~ei>%PpRkAwUڭ"c۞Pv6V!z*6$ qP)&|%BG:JZ(N hW{Z/G깘,5}Im{kk ڝ#],%w255=s?T kORV#XksYUQ5 7#"O{, ͯ[4~zp 䏭L\ >&PX@o\b:PQ(N+`u9:Pk`#$?Zmc^j-?aUMO]ឨZ Jhxc a1sgf=Ϛ[Q F^[uwY5 8k%>4mo(uFd+ڌ@fF$)ieCZirV# 'x=,ʦyn&9HvYAb݆%"`|?uʌNWMX?eٞxPK5p,(,=ҪI>S{Rʩ5]S0Xtj`+\?S92WujD܊]s#F%QJW[1+Rd$ zgM,A皿5WWٳ9 44('[ï /Bo.T CJurppߊ|78+R_A1<֯(qo?s'qCJիbM'lig݄O5&@!>6L5iڥV[4[>hITZ]o^}hVMǑU3-d|K(}Xg]=;)TYɍʑ(D8LPGV0[@#O'5`hJKyG (n bk+PCxCb`밇Yk)| An yB2vMyuE hZ(ĬQ߅}gk'XV_K@PzpLfX-* cgfLźp=uLx_g#[/LDY0G*B H4jMkٶf隱獕v-03Dޅ'bˍKlrΌx"\Q# X1~;xNjVz= ĐB𔨽0FJ%0ƵX#1`eMt nNe{U- }U~%ZL.>?zѫѤpkZTkd 9.R]=I&õHFY*@e)&UE+\Qx&[IG\dEq$ycݬF'c@w<(bl# A™ޛstP#Č䌼"0t+j[ueRcUs+xxp[z_V lhtn_SjmDKV8דdVddpo/`}Z{Sy+G~ΨX=J {Njȉ00e i񯅊—!8_=̵X (H1WVؼm,>RA_$#.l +rAfOu“eڗ<*V`m9 >i @9fgJӥ*Z^[.W)1>>z(OmBWadr敶"0*#F[7L#òCzm1fABAM-0ֲC@ T/v@aH~rVq(;<FV\R Y

pc ơ8C&hg /aRG62jҒPj'\Kĉw*D^7S͡ `Tۃ@Ii67|~R477N6l̼;!f^l6$ѤdLcK=)&ǥtnZeJ9k dkV2rAh82>䁸a༱׬$:z9^ɂu hvV@%PɣIojWqz=D nYm:AKd67QR 'Z~qҿ>:}'*BL 'B`,'⭙a u Vv`j>Y"b-y ]Z/O'1ev`fAb860-='nd1+ az*UեNԍqWbVbF2V+8@ƾ-VtqXʟx?tfqCV8v*X'qUZ%˵C$t[ ({PPZK3H7ۛ7_MI),݀0ōrl2`ėRS6H"z\㟡)ࡐ洡Uӄ"D KJ QQFmk d(*XĪ{* I6aN]u9V-ٳ@C,`_&* }[9H{9_mה,,'3lOmz7 2`WQO!ē:"b#%zM\WiIcU||>tlVg;O AH"&1!|{ =+_zu-XS*c$L( O|#ƹAK̄_W©pժmʮ&EMVT7;_Ѓ[gF'B}4hqya]LF{:W1] ˜<|O><@/2gxRi .3!`1ܤ`w$ +<kL:{v Y$uaLwJFXw'm:S)>DL2O~n$ѵ#(aEO74

WŶ/4 xXL)w%f&iX,W3Ez^уqg:r/֒pA,S5qD_7)% (…]}+Iam7z奜LxzZD2xLp e\5kF;DU ׉Y!o>$)t8qh-5?6+=і `EF ̈оvmj%xhME I$>wɇD.c :i'"Gv)'4̅f)u- sh @ Y|[Ea`~d\eku͊2T.|s\ćt` %m&ntJ9JiϬeЮ"#M]EH$*Њr'ŕ2jՀwDB%eyVН%d= 0`t }Pr,p~ģ05#ՏO^xyVɽN *J#7Isl(9/Otb{B4l(o3E؊9a  +x-&HC6Tu{OtBU=ט9[.7~LkSӪ XXC{(/0%PR-UzȩR8U#DI=b$Ym8URG˿Ռ#/Y +v٫$+m1'Zk\\z9:BWі]/VF$ 9Q̄zxo-;vEuPɄ+We8hS]VIM.RX'XL|d/yt6^7Xb3+ƛR䝦lWhrUuꇭpޘ,Hq\+0` n2pC[n *|ŸK1?oL"7p0wPƒU:)W D_q /H;,L 0+KSڄWfR2m|y1i'gm*"^홥GZ"6fc+4v[4a}/Cë[[O=NY$=^ sZ'D?l")ٟlBMnG"Y5 f ^Y/pwQ!,Y;+An|r} h: bZ?tӶҔA/Iu10V!&{4v ItD^eM:572PzW ‘w;ں&Kǘɸ!{}0Vٞ2{l4.K2SRd%{"k9MX^I T*% yjWlt]˜%sӭAc2M:\E5H̺Sd*JC焺0c ~|qF dCɼcjP14>|hz*n`8)p5)s;8;*>Оgн$_g%u[+7^ׯ+ф)QN"@?'(P 1Jda׽zOnr7nVzMgΝVn.βM(@NŬt4_;HG{cw C*زQrvot2@yZf Z[xtOkقߡn u!W믣rwqP\Ѵz=0 ۨoF[9}jXnLo2{LjN) -3p/|䬥.:ƭz'@rb4 |pCl:U>kpo1`1Pœi:a{v-t{{=} Ͷ?m<mCǴjՎ?`QڹNj.c\0>څh!\,5Pjγ~63oV hEPk5^;"/!=R"0o(z~8tuǰ[w[}rժ}~vzg UtQ17:lrģP+Y|53[ ($Ƅupd-KOI2B+ޠsgS\.qbS gɤ nBD 0nோANOW'fNY 00B"--7KnFoO>FJ|i%`RڥZekmج/dI.!44 I-4Npx$ =DQmo^o=ZՠuV'l3AJvü]hT}Bi~GWR*tR(,3`B/C,bKXE1 .GQk ,&Ǖ tE,k×نwR3\%Jă޺eQ,ΆtX ƴǏ+%FM 3p`Lx70'5Iᄽ;{ISߛFɇ$QWqhQ1G18:z\{ _U@ƻi>yW-SW ^7oMKztCQ ?SRLS_$+PXkBTk&A~&pDT8 яQrr29)ʚeBn.Kȹ^ sLG5Ͳci6=yk  4c|qI([k`kԂ+?y݈d`-FjZ .͍ %.*s7,{-tơ+.q))G׾$/a j2Fqi`@ޢ3 ~ɵo=T&^-xI'퀤b arlQ6_ҦJ@L4t,cX{|K<=户 U1[l1ԭ"k{ 1rL[DW(ý+v!/WR3Fdʼ>v{ 4L;߼F %Nw$9AHGL%lX)V7Q<_n=Xҗ ݌Omc#h~Ǿ׍+Eec}J |xDgmW}C"q,tF.o̎u/'0, &Wipʐ i$q&N{us gz#V|} pe?gY9z^/@!51{J7gt$,Es-0 ɢ'hZ1eO'UÍ`ؐICѹ&zP"`i~akQP<zOM3-W,Y`֛2@3IjnS|O ]6.NٟSb#-Z>|*]6Ђ)<5LXa8ˍoo7JӒ &EDjژY 4=9x}㛕WRW#c]\`lc C 6\oZ_һZh!7tqWj+C{U47b Vk>PjrU`-|٠2+ _m-[-iOܾKџ`x).`.K1\1wQ&+8l5Z(b mxW7Հ0{<Ϋ B`GmVQV>xXCT,\1XvyYm jʎal't𽊢Zin}:dE[4pnDgK:cF03+|Is@?Ӊ(CSwl5LZ^Mifo,٘d| Bl\|gʸ)frq9qBkfJaWrb3eel ,4Vf K5%\%Ad]-]H9%g' &\܎d Xs'b W8H>~G17ƫM,8twp{3J|g,=yk-IE8ٙش$('+X/&« kEvB2$J'3 ÙRV(JlHG_;_ЖU9J5t/8}t7)Jn dϗKl~ts_8W:_v\҄Vr˔k~TCft+x+t/7t D|RTq=}޴JAQ4*FJҎzHpqL#&kFlO.|a @J`MeC~KOd^4'b^?=4nr.NnO~̸[wqXֶ8O zWAIFeN `[Ŭw7"( N+TT`$_(12(\?ѯාXbf݄>?y|A $Tr%qmI3P=o*x|TדEeqmS-hlVWgݾt#0(\<Fc{U  ɾcR} 5*Aqڙ7.lFʤUN 5P~XyKWWu[ׂ6Qxe N/h*) 4IzC1/\ 7\%B5˥WrmP)'W KI}0.N\9M2ODyp&Nn:c0^tP%@?1V!9q!h}>,K|,Ye`H#yZXf zv06ޅar?qOPCݗ{y*frPeBiR J6ŗHuT*5L5ܙp!uدΫz//|㐈ׄT&vY=d)-Oknћڂ9Wt12I,&OLȹ#_ Ne!.[i8V~=>90Z v5j oyg뒖GDp}A;VU'_PWW$ѭAˆɭ CZθy*M{_?+{+&.wkUBbRu=ICq&^/E':ϊI|s[8|wnZ*;'mǹyK>'ẳS8Qb\ht1Kud@n#b7x9 8wӶg=g7z;wW.qs$I66ʲ e 3]>0^T?!!bs~L]4\w)-rӬ)F{9V7cnFJux5)'[VCnק?MK0 [By14?g>;U? oN>{[[n{!nͮ:7/ZÛ[[_~Dk> ""<~<* 0r8덯>y2/ڝ BaήAZ0~n8`/cN59W |9a8q+gmnFN&i/QM`}H[DxGs(!l'[ צHzMк/T} g6 pQM<$J>;@0ƪ@~ r4R0Ki%芄gm_}ĕE/A)U2շ*椭%Ǘٸ}f~`"^9˗f5 #_< h_Dh"]2$?J$XzQRUiH*AUoؿ*h:MTr2P'ɤSz9p0RY(+.q5$H?[]Y6n-WZDU Uڱn>ked B_Hwپ[gZT'ovx boc6afo(wap<=\ELjRjkn:6IUܚJM(6 OvP_szCK>R|J7ђlTaXiڋ5ld:OxCK|R14G*vJjI 11enh~eVD1.QٞUώ73{)(]5}s,,>k{5exE͙Vw:) P.qS= nAgӺuWlnuB&kz<~6PsΩM/LwuD&'Y fuVsɌO.n>sV38=xVWͰnΛ/+e U 컐W z_0χN!HQg%Ӆxz"4E MІI93(40xH҄Ѐ 8ADxg=$xLhm<~ˈv%ۗ!Q @L=%^m+`7WhjsLx8"!"|^8'KWʒW~1FԸN;tp $1\OJDivKew[oP";2fkBI5%Qgñu2s~ʝ7հeلKdHZo|wU^)J{Y{cS_|t0OKdQw~姈_M<CkL\GG}*`*cV q 0J<5:oҧվ\jп(es~+9E(xeG~ae2(Ek|r{8;"v<:}-xAK(`I1$]=Z#_7)}â:Β'j̲tj58ɰ*"OA1{}8YF1wA@a6mVSF?S.7m.r:!o_}!/#s-:{A:xgrJ^(STI:LSnFĬ{ۗ[_:8C8DF{FPEsup?LLc7ZLQҡq([`$-#Bfc^UdwߘtK J t&oGlYL@9Y;bYoi"0%t)`ۆu;!' c#7 MO(mtT֣X::槈MN=ӊbEܕvwQFI*j'^׀ 3:zho~c2FROgg`]gs#n7CGG,vt`tB(`g%+挓X n-h<Кd]4@BxÈN-`jCϕH ;{_}C27.{Zr^E Y2;XValZRk2DF̰&ƙHbI Gi\`($ Dlh6>S^2-RF qm0u ǍcRaO1'5@TCkI؅X|\Jͧq$[T@eH"dV£Shq6z(@v+'PD. ՛h+ Pzدk+[w޼Ud j,2YZ7K\jяAV8F=V+obe=윜J5s4V1VV7V/IZ [ȯt:,l-V%xcNU𛿜h$p)]+wM_R:D@8IfؙPQʚ6\Glu:LY2?TVÔJ%[{zdKX J?k͞exn2Jye\qbMT{>ڋ+C$d/- *ޙ9z'M?HI3VܘEBm]i3U;uOkTa`QսOpW-Y:qmGջqDc0G&!Z21#]'` /wiIzIلػhx& RvQc@ߔX2`:97\LhʗJM"}"]d@]@c:"K||ۑT7Q A|8zroڻYcϳp&Ri!]Xr ?=hIFҳmT1-*szJ#G70 nDϧbt VEp~kCv3D*3ʊ׍E1K;?鲶,M5C7fLhf#u$< "gADdp:/]v$ƕ =v8?>#LH|-T<U`k>]2HYnEJPƚnjlk8&7ıuy t-@!t$b [>5p$z2YF]+VӬ^(XsT ɇ zMrP,,ʥyWq>:Sx%Hkmɔ,8"dgS4"fL6EGN!d@0T̢GD-l{I~sVý 3#KӒpHqޘOnީ[n'$CX/a;6-]dQ 5g.|yPS,t? b@^ .D_e~'I?6AÅZ!TYΞ.YIp%ф\$B\[52TINRxI0DJ(B:a9Ţ+Cj&*2E?O{s-rz3w1:vwѭ QN,!BCMvڷCxږVp\.FXܓmk)m{2_G@9EUrEpsBP)YF~؛;g0N)&x{`}C7K*؇A3BM(t@;ftYPy.Dyj!qit[+b`3Vھz"Z z$e#(zG-׳:BUiW6*y]&,П‹γϴrX\:}{X)*0ǐ"T-GlB9͌%A{'tu1r1΂()GAg8E{[L!&gK^4E^i_ I(,+І jql}!Jlzh5/peAW|a/5xxA*ܚ~_8'dT>^1jP) Ŏ,)q6<rTBr(oBSG-Q4P36)**iAPW|AI nX0.Pq<& 𕕂8 ȟ_0q{k+rF57+yu8J5=>l1eK{K$0:nӡf,7-&g. ]ȓ(LYW(@rl1EK `YLMkz,\υ2X}46: q}@ajPiڄ%,Wa( {͒>:|Ao6N lP4.6CM (2l ?bg6 (iM) |itn~swoܾJpu֬&=sAJflJ:lV K3 =_xd^u;.6U@[1F$'Bxűw_7T˩h8$ b+5OyDwe ^R!RE~ q A6)rb//R(]t~d*ebxwtz ڪ0^5†pz R&-tJ YF1!FY9g6V9vI=3MD(!S4dYlR. w:ꣴ4.N7r˕fQ"=EڡKmk'PN:OZ0 m!0Fo"sVxFMX85BYBalHlQUiv2lY!{&bU233(wytM-rvTr@1N{Jxӳ,jC4`zJ:˜I>/6)7'/`7PN"a Dq˓i!a s4)C$G}) i“h[&-|Qv>ѝkTk[lVFoeNLH&?ȺC"!1KŒu[ZMuĕ`ɰ̕<bo rȅ5" t1ۅ?[Hu6ԡoWL{pjYKUռUVeB;eرٍ3W'|.QФg(HF=!݆qh]PeSg@ fpMp;pdovm{,#4DVh wӇ<_Ss3zۛNP6_/[dϛGG_m:F8`}bdaଣ);&p|fDlG`ф%8vV͐+[|{ ? `uލJp3ھ:\}˱27- }1FDYjyaKjp> I=g2fWHrP߇^uBoEqEY`r68,DZx`ϐ>Q3*ф/igYdx=clV>>%&%3ciQ)+|(fo97+9&g8TUބ mljL'g36ĉ]$/Os8^w& i5G YQ#iK'#$- .acvm¢,aRQ҂5,I%D+֏bl)5J_ʲBdze1k5;D% *o]k~ `aGԈۀ]'͛3+u|F麝0G W6yttz͖MqDgܴߝn|۱h?+Z$rv?hr#΋1ŃTiJ$f#D..xE1;% :{dA5Pl;a`+v(VVjMT+.c Abl*83p F=`jn%\4M̕Y؛a`ΝĜpMt 9nl0ZN3<1O`Z%P)*F"a{l)j#:+$E>ɦ'l7DF2W|6QdOru2w.`(1t_(V+'|ir&*19xoD; (@Ppp M-h9SPR׳-&Fh0[%YUumN8p}*A&pBUZ%v%9>-d]n EK3+]q' ghԪT|#zfY:Lη~gK*4 .R[0%e`y[,)nXeIK$lR ,u 5}Ŕ7;Ru԰6bj֮(aѫBwn*T}`6I+^B{~FU @4ez.'Wk00O4thj~n9mG}up7oնt:ڢ K]W= iV0Z ])!=J̀jgɩ&Gh !q!yN&bS'}xFD[/WlZ^W\T\. vf*rhE:.dmD ;n 'qMHqb P#uFlg2p[`L+/ef& VE_IÇJ?$%-" Yx>tQGhkR%?!՝*6ņ%[`]|鿰I4h|t@A`9Hc=5__~8X/~';cd3-,oj6; +OeT;/1 mC/?.nhG峥X&U- !2RG yQ#}WmҬjsEr 2w+8kh;&$XYe70WS4\ͯ2 :TZ`4ʣd9vlB8q̰;tW%хKAE#&1u0nUC^0&hF=NKKm8?ӐM93#d6u'؊*Q߳tMT!٭ø~8)ZGNgiA%tH3^*$ɔ-t5LdH4'6p!AnmƂq BmMpvUCZBڋ񤦛 .m j #*DTwGCLr2P%KFޢ,KhSq2<)Ǟ6lbۀzBRu>`9's{+1GnUKd >huʵtD ~BT`nhst!}zRIX̙Tm!7ilr'CBR2t^cr YFrc4}܃굺0 %&(%AՂ Ml0SQ&{4s}H~Z+<I`OvrB%uc[KsbtJAס&lʋJlIWaƳd3Jgũiu* !O\JB@䲾(u06lN~T`JKD a %VU߫n+FQe_똢8 UO&9Ztը++EE!^HDκZ USz(gPՁ).17Xtt=Jabm,S d Ox g el}c%s lZiv`D?*WY|ci}(ܯUVFV~nF^҅ϳKif~ pIN&m] Q2jJ$|fͷi~ST>Jb-7yjs-i;9>=4xBo:іQ+oR8a~=dilo{ X݌ oB@8H*^F^BPsE4 K1MІAZ.`%1K"cJ%M)I7-yō(ji<8 1 y%>hm<8k&H6Ɯҙc+;\M۩ޝ;4縶İHa𞣎BvP  }hi{IJK)xԅ'KckY$M;(ΉtȾ᧤BA}BQwT?֏+a˸I1m~}dwC,;@Qyb2g7+cE>_{YH]"^bM,V<@سOy#ӞW}92Ps>UN UXXΡhHScY:Fm'ZyrTQ/J j{fH=~qFb?1_V~)\۪^][=U7/yWzcYUo9PnY|-MeQb_L y.y7Ý^@z j<9#W)tc삷3oHE@  ՉYW9o - "y_sHIЇqQ$/Z.Ycf9;YªJ))#)# q\C׷[E\9 Cmx1F.R{=)XL)M Lڇ ߰kׁzT%]qmU+𚵍6ehG澙,a.e .S.銚Y"-'0FVShXֆaZ-N(ĊӶ#bx]D+7F%{JjpCrPS%l(nSAg54)lalB9:"bG*vqCVqX=4[U\6|{3q$9^? 4!UVhyW`B b2pyX.x*c*;z35˦ٶn$Sab_PKi`ux){}2`}(fu=e;I0Ydqp5}[NJ0VwpJTB Xm VT,7*dvJ*~Uv./Žr/Emw\"kj VԷT僮Y5Y۵($<fE.J-Jybz[%[byy~9jּT٨\h\eq|UWԏ|X. 87 C:XgE: 8$'x8o[m >-F`!(颫N-pJ70hW!k"<`+(T=f\ÆTX 3G\@m֏;LBEѤBL0o$L{jH;_{tML)XR)p[Zlۋyon kj83? KE$%uѽ%} 'AV2 RS&(-(0o՚bټDYJa,m*1ѷ%g@[ 4@#5nk5)ѽku?V>1b+5((Z=ւ2E?$ga;|fI.NG# ;+`o^%y {sp5Ar`5Χjf+oy.$j GV>N6 \6GLSnŠ o>{5Ca_V0X{8Č:y6hF˖S;R[y 7&Hkny@,G:WIa2Sr2T6_|,ٶRe̮Fpfik5NJဳ,54Z Gk0lk)nTDLbP>w:C?FHcSTlAp|PD|xx˔BjbUZv23gh:kҚq*{Ax | ^>DNZR ͇UC3fPK;h86L}NQnH¾[TٚGڲ:QDԽI0|ECwDWBUhmea#~t]/zyxcJI\ HlcxAK p4uoV*jg+K`lJ)RJN|QFgzf |.QBi4 c% Z58jqzO uf$HR俳h+lb1ax (5N[r0oÍ1>"wjDx4텬2t!mtΕ/y/7 w]-Z1Z^|g-o Cxi~VL^Y.M8WT'O , G Gs{J(FK@"[1{e5PhPvq&8zky7vy}tND H lma]]e2$U^!ou|Kݐ=f3w9<gX[C]=ז C I/oX/U WXճvAQ令_̧n}yG;3Ms )xcٺ0fbӴ (r_PT}'L~TQخOQJ>LCyj>= l-vu9{ؖ_lu b/L6pea&ݬlK)q"&h0wTҧyy:JǗKjru)O_mZg:eɄ hb+u#ӓŜl>(Fѵi1 ܚZ'&폮zycJ_c(`fW5ԉ6h(}xsk;Fx,}ȸ͕?zx{pgOA#5eRF[OGٿOW{?X5ok?bI֓eeLҸpWˊ޻o^xȵa1sL7K|TA|ΪV4SAB9A\JRM5qؚe+HT'-\I=r;1HH I4se`WYQRK  6z0&f)ee+Pj\Re90($[)G_SqLGP|;#R k,j# L0B؈C0,r]&]־xNG#1SQ 0]LTc lL>d|NA=#]1jbPx*D[я$۠WQYZ(2Qt_<'8"M886)"JDw}W:1`Q&ͽ v 37ȁڄNO@))̊ ?Njlk`˶%d mH B!bl;#Oلocl# rDɆ9!K>[.Yk떒9/j½Pζ qj8@Ӧ|]sSƹ3TmeV%Yz*$IKDbcJ!9-SOȘގRP~b3s&HjR2`bop͐w8Ғ %B8V,NÔqLsEb lndJbIuILţqpØP6\%Oog*a[jZD.g^eDZIrR3L{_E&#'!3ܼp$}KQ@%b9Z>?C聘\0 rOmg; 8)|zXBPNW yo coA  y 謰Ljk0'w-5++t! ]8DfOyQp]'h^/tu=WflJ sf~AQєaEgjf"iDv uWVĎ(xA1BWaeu=E=*ۊ9CiogGʟtPE1.S#uSi+]$)XV^JX BO2.Obԓ I6Ar42ʵIotCU U[2)$h)]ƉN pA>J9ymZZQLMrTY>5TT{4i䱞x%ڟ"șI6iV5!{M@Dz쭞"­yAUY֓Rk~֣>zG&kXB;r?"s<+hHfή;@ G}6.19Fgy0>r@7B,5g\G !K6ylJSIX?cšlnݸ[zلP aR(O 9cKueIa?&27LC Z21>Erb IF:!$X唓@ &ҰU@gFK]/BW400-%UIYfix8RJ\ j q"*eB-{al={+%k%9_q)79v4_q,A_ )5om) `@\ c$#h`b Z}K Fٳ$y_<fuop LЈh԰dwQ0)<7Y10믷Uڢ4=Sו{^&]xA4y4bㄢI\_$(wCxdX3n‚sLQEQr)2mx/`7 Opi,T~&6c&UiCDoEa` މ{i>Ya y9B9&mՀ#_4"7LزiXVx}9SXg%"6pffY0#95f>>Q+VQ;!t=~%y Q,H :AKpaFIiG5kk9%|u<\ZgZעu 5ث׳4FVqXj~SWI/F:uZYM Sі 7y»ҒEBx-G6Wk;3ԽP: /RnY'`OӼw$,5OYN7N'\̈X/ޑ &yDL+dZ(r +j#˜f _902a@, &9 lNL|`` ffVg <HSn>[ DN%0 o9nĢ,e­.u6R C.ԤR| w:ʠ4GoSxc4VHS ަo'YX:ݠ,'h`IY֥+xkN=Y,zc%ر juv6볌tĕ̢GW[qԤ v2}D:/e,mHTuN c '2M=-Ɍ4LB\$a^ Dܕd goW[Q^ٮcYɳBU)UW>7j0xsi"7\Uˣ8}aHei>?`ڊLoU o@ әb X%@Dʄ݇%т`{ds0ɄuqbK?%ӌ7." ͙G9݌or1؄RGܱfU5E.B*6[ݍ٬=ojEP$^ zϪV o(C(\t1n.*N}Zfk'H OyAAܭÎUfvxaid8"$ac |ZkOEͯKy=5n(۬.p6_?|oo,\att'2ArqJmA 2*VAQ*&ףh!!Ly,S?e $7DXL1(G9/P=ێMfJ6:VR*l3U &[2)v3܂[`˫dwWkABFm9p{D=~<$^rQFasϼE^+[C_3"yaG-qG_#^9+Ki0RnPke/\-^Cy`IP'ճ㙁~A^v]VQ'7|edR8 i.F]CT"q:N| VjMW{ZwV8z<iZ+ >X-z!98R%f ^OpQ;6hL®lFVEbcS>hۼGC~(a kGI$vU W%ݔhQB7E]~u$9qF9IpyM5[u!rPoU/ ]%SxQ@Βf|mPbVu އV408`*kc`![>/Y=MxXBhyqIf jlՆK} _Y7!W\h91@*7_lb~`ʼ# 59#!)zЗ`@dfw Uʦ+Sv#sA6Acj=v~S#&Y 5P;7Ue!ȶۣ4S} _!P\ΰxci5?{J\W*-O] ~8#o$u? ]>0⬅eխaqӁ45_P&M!zxۗG9j1365oxf5zDDe3O?\y7 fec7vN1_#+iU/Ok)ȄbM( z:؉TJj60pҷO 5vKY^fϐa&v5xzH'"by׆ ͞>p$%lc&6("PφX$Ba F]Tŕ83ʬK3PӒka>e6^lJkfKL^`H!4VcZdr(J#!Wl "ED#C$Le٪tJkhL"_ʼn@_ Z1oY2 a i]R byˎ%Yz-o[^2~n=fby츙j?N0g=DyRCB2f%zέq+3hJs0c|B~3Oփ*KT$D, ?G^-WG|wߗ}wJҪKA~efi8D)!2FdLt`nCT Eu0u[;$fyovwAK_e4aՐb]Ǫ1z+lk$^ez(J瓾 w ]2 $z=fG#sťPq/{đ% ƛgY!MpM.L[jKj[8 s:uiI}w4Vwԩs?/TWk^3"U-!ynOa0s2HT}Oĕ3Z#! R6D.`Z!K%%ŴB;xqRqUN/h$V&ޠ3OwJ $^eq#=G!K19 krI.דsau9̕-%GZ!Ho7 0h>!I2ճdGq_ }kbxTςԛ6(&J,mK*Q'pm$ rks$@_TrY#SKSInTbk|MyWڥVQ.jL C-8iu-b"B؍P;FԀB:C"pV⡤l#]G6iB{áڂ޷*Pl/ o 􅱎=oII+e)$eܗ8\Si{pޟi :. 12N\p6D{ :=VtjGgEuL:1 ?j)L،SCflyAÔl{bvD S@pi$e)eåw y'Le%V}/e }{83Rx4Dvf-%X8$pi#DbY^Ii~ykQd%.o hv1x\qfMd` `̿t p)T[A 7%S/j7g0$fN4^eoTf.]kHu`)pᓾibKt[*.n)ĎM8L[Sr2HgeH( =:?C@H 7)󎒳kCRcK? ]@Uv7dj]b|j=r2MsB&n)poJ,d%`č37D|)CǡrXǵh'˾59"6-hs6aAQ/^&|UB\q@$6=t Y$G궰%?W+gwtr9[,&+ji{:ѧЪ.G[ۊ4AMJP7zи%0sARijmGe46-OlΧtr|rPH?#)ϗ[@ z+NP] s=F30v& _`X%˻r0 mE]w?ir턜,4$?a82Q[Fa|cA" Ioɒ!аS՜USβ̳Yp(BZ nɏF[+RЩ"khi|9o9O%p'1[2Z9#q0/<S;N}Kfzk\ϽzuJZ )* `Mf*R,Ur<&R(4!N|PPpT}d"c4vb;nTcc2sHr /l48'G-+IjthIC~BEņ d{Ԫ*RTG-Z'M*`/P0x 4U%c0OYLx_o Zod{z7*vŘ3RK-8aʑh:iVr=PĮ?Ń$xrmaPfy[mx c"̗{YMN9^#)PO^_$w>!aًi99!-\t˥go ;4fi Hu򞚻sr"˨5':r} 5ѸoKhT3f17ve`_4^8>ҥk)ehs xćt ]0h69焪%ԁH{M%If΢r!l>Khp|1M7mWM5SP%Y'{*n7QԚK b)a(K,Gsr0q>/P2^9'OHNi6RD ' * 'D<㜬w KIxeg"6q PKs p,e1@%[hv6U08o7h\1z(^W-9YhWl '̝iDE3?5 00U0rqCC)`_C'/vO :9nޔ®JZa6;N3WI4e?$L({4Ee B8ۋghG$ MIx(Z /n|! SWp@-EMb~ p°}U&w Z?Yըq2Hpsұ0(733F(TgeiH#5f+vq֞&EFaʾq1{=:y5uV I|3 Ԃ/w PXAxH>b =Zh/>=%YU2C;@e@ CCfX)X>u~(@|#ZW5,pZƪUgFye0&v^VLGcOgKRGj)?*|ѝ*lA6qm =#Z{ '(зpm`bU:Ԙ䐢_ꝶ6Wy56 jW@F UX$Tg{3̹[@ Bs14W:@64nB.6b㋌{ ֒Chʖ$]8fS %:qڼҰ6xuiCMv5ytosmK"`i]hH}"sriFջ y7ej PmnP Dͪn8b cfy&(>A<ܿEծ ?jߦz?w:&E~ʊ;m OG떶;Si\&|#$?)WwyF'0GRwL͝[hZXbل!`L_ &:6}Ftݵj+q71y_z_]Czp1oa/&7_b@qwc0B$_ rj(W Nح)R+jL2fVz֮ieHOmfN'mircb'KI8ר>nU4c5>xKƘj&OQ@О3MYȂ0ddgɮCyu2i;@U=nd׊o9jTd"XU!?X('Olu'b}6 cQIJMe8xnBp/崦ƥfGZyrW sŢ-˞Xv9hJfBu<*=ozIg?0/`5蝘*" tb,P!PBlNs1?PQphS7ųíG';vvwNyp9ףjp5pRf&f\vdP̶ɞ8G7so3둋3tr7fTkm&đQ0횘o v*) EWBX8xs܁ !{P&ųؑysIJ2=ezNibV!Z;Eƨ)e$/^=%֜CA@d`gzg gݷx7TWf7 b8v>^;^q с=78788W.~1֎Ůp ^<|ePA6"c-J r&X gt9Z n fV*̢`[dB%(j٪cY)o0<1KNp\72w7c_hHHG.z'*ZR,2m z,'nG>o?_7_d讉H n_3tw%s!~@NF`9G+w˔ZY-j8[Q ܜJb8i(2cM H VDQmI*Hgb?$ V@[$^ epx|Z rzam Fd/<"h1-$h{aĆQ6˫:E׆;h M>fJfw0QMGN6YȰ~XRFOk #8P5!@oʦMgR]|%*j?! T'.b%S4Shc𔄃<o .!N1!#tSD)e064,%N 笔| Ox. 7y%t6sa0pCrakpO ?F/$0!\#]arKvlf80gX<4ZJ&d>r>%=7 )^ĭֹ(3J3,2J`&fw)P kh$2P֥7Ҝ .hvn5)% Bw(T3*_0*AN˗m˗Ǹ|B%zMciYO/i_ԑ $<45#2h-06ZNn4g岳-^vo HuaN|' rҺsg:HQKx_W_yP{p T8Քh._}J$LaFIS4E4WQ0'j! 5^?jC ¥ZnHCC#fT"Iqj-${ʋ[E8^!Vl%0JAG/jtJƈ 6; D8[*!G4e bE>AT4XbpC55g:Gv o}|Jno޺Y eBޖ'!\(/˹ $V8G |2lIc_ |ݲP).lj0(mAtڣTy9zX5d .jy$v]`h nX(o Z%6L蕆&hܨd@=5ْQYqx#p]2GX!\C>ЈǹHy<ɎIDƲU1ȹ0{+l0T*a JTQY ,[' DN]b.9PL8 >(u z\T_F!W<='Ns ZO f .'N/ \P}`vd3m dKY&juVk_/EbnK h]y lbh1{kvU&0@luͧĴ栟gߙD%$M{BhM`.6g$B ^cVpQ~;hkDMBc8N[& ?> n:".ٶXd.qtK9/s A('7Ns&79AU(( 5p TޱB0`9hlxU씈m/ڰ;֠1HyݿxaWkIHv}N 92ăG|Iةec\ O49QynzX?E9t`RnoZ;88613m)6DBbli8:yÖq7dM4[9Cg -W^Y~Y >ZMtrnbPS70M`|w emm좇Y][r|P,{|=ٙ2cJqV9%>1j|Џi)KIH,#pNJƋ0ΖޠT\ 9Y9>sd :ldHÊQ=c'lcPb4ZH7&oD1'(uB0OWűgbӽĉO<7`!davyU^EQ6^) B0$:f꩗ݧFxdoT$Qv6C6Q֐g9j*} 'lJfי %KqdðRu$7Iz層/j{:4 ^%GxNj'o' FKH}s6[F+7 BDs#C&W,P_jLuw oo̠ښ ,J蜦^"ꭜJa#Jvmaj&x* $#CUk8[sv|[q<ɪث4Jn^9hqvkmtoǍL;aIC3=Hd+$ۥAѯf;b 쌫U{F>\YiuMo6G(E b MEr}PBY[<ַN<c\M{Zn*: %'.gLa* dNiGFV#Kzni{Q h`||^aDY{K!z:o}Xׂ%y/[7,IѬ#C6pu9>MCnvxuQ:grz9^gMį)j-H{ضΕND}k^CL}QA:,kRTDuS*.Y2=ZPSkZek[XlHh4mw:c%u2\״+(kkɆ[V+ BE;\fm@܁ [Ɏ=+F:lC0k$;/D =b k]l̥a vniJ*!"fTsg MLeA|M>Uj/I8| .P( ߘ_qߖ:t^8:$\BbU!584/ڕ@08Վt>fhdCQS)*Jh$)p ʑH!\CԯΤG:As69$0y ՛ej|V|Pnҫ,!iZ13-7]u7z,~MVɘxņOSx̜xŹڊ]dHqml}!X1@Kɹ!2r,Zzxɋ''܃\5N95͌@Y)/^ϙb/p)΂;xݮՄ2{h>Rx*=E0tF' ~vCg? (c:lAWB{k p&W'7uRgc/ TA1PyJEJXUПR CejZU]$OMOOTkmO3R,! UC_V PyV6>${9a<̈ppi<(u,YL=^~a߆0jZR~@@m5#xvhF&ֆM+lNVsЈRɊ 0_vnb*5F^]W e$ f# ]k͵k&.\/2.e`\TY,ZڐMy= WR7L4l {p.);1FkL>#=:$cyöX@3`Tc*tR+TծUm.02e|ϋu Z3+V Z>^ aӘ۸Zl (5$/mL$4"}ъprfG=,R#=[|iaɐy\+[P@ ]lC{oWS{N^}u$.+r6{RZǖuMNhN/h4XHIhUjiC򭶀[(o lgQI0. y׃]4 V \Lx!N+Ke_lBDu^Z`z1a^c"?SHl lQo!:];nJA:zL}-]ŸGHAi0+zЫXXe3si nqei9Ex] I[MI4&;F)rUQrkʨ+R'M*ec}ty>6c:<ԣ c6,{Z '6 xDe1/ш,cڗ@2@s<(lkX-Fs:杆A5.\0(p¥iZE HG=p(.aھmHz\⼾c%fW+Hlsr,EZ9NK\Jх:*s}7iXO=ub#'Zr!HPG7ՙthC^Ӡ߿?ǐVkGr-eP͊ǨFę)/쫥aO[b ` 9Eyťi]`~1`1]igXUp": d4a/IRN]66S)64_䝏&ۻ= Ű){nŨ%,h1W1DMep_^V2\ȯRF~( `72ɎiBth]k4gu6*lUo6 ;?| *([m(k&An46 ۣqdJBIkΔ lCׄ_kniKЇ4յY]b;ĞebgbI9쬊+Ҥv} mUi9cN4;qxDV8x2gcUe_iY~Hn m A>cWe30^@94;C^LsѶ&jK4S!TQmsW\лD ];L BNduyӼKkkWզ/4YdGU].H/;)AH "AOT{Q(4eF~t\YC<>ݹ U\4(ϩX@]% ^bŗ'~?pBl LCת9t g% QZ' `0" WƳ)ٴ"^XRP1bhTDɧ-h ukTHWQ:@% jp˗Fߘ ߲"yJgO%2]ĥMo&yMICK*x^倩Y*lQ\8- 4rsQ%зMZ52aXb^?\籌^aO8ߏB&oo ۸.\\N+nydӪ"ZAbHrX#P͇u7rȓ(zGwc6q)ďsFa[-Rwwu(ӮGhn us@9/D[j&q{'*6Y1#RO´.f|yk` IqXy@|K#Ǟ4Z>- -7 KS:S%a>DYNל YӅZ^?.;@ _%ns'O[3`NK3Ȏ*w&ͰN͙3KH,b `4ĻC(A1&8yj 1g,-j$W4&n ;~:2Nt;1qNF0YٴB(.b 9ы'Q%74 ^~)Ӈ"e-PKPB*g=aCI $kt0@|0-"Q" NA G+p,GOp4>{GIЂ.2A `3=%68<fRk A\oL#iamkHҪdF ]#CL8Mt̡,U2Ǎ =dI`Nc*$ß]' #i! zO+0:?\0UPLbkfmxzBlNt}CN@Qh tJt!JJی=tIu.H2Q$9洆6``O _BX8df $BR%}G]Ij$~!ӽ./ W}/ \D c3 >aE -Je6v$RoV6@%7ΔX.:5õ^\(dTi 5O$,(R# ~#c|aːkoE:@QgR F0ohE!դ!P^n[aSONbnjYM#cڴ wiR$> IߨClt@ d <@)Dĩʩ0UÍC_O Do~ ڌ.?4pB:—,| 7Ck FLX[./t8*ڂc`w>|l>gtkԠh 91+9m6ŘJ*EG*W}oԽ!ekO INk@T'v]/n[7< GhuQ TQB1 ;^TE|2! 9Y׬!\ 5}XK',!tL( nf%z,nredo]Pj%i>->.WKX:/@д]J>el0uYQvbW! {TMbtĉU95QUx3Xt#J!?d5Z JIlᢤl90`WFрV]hW&h{:92+4*RAbO|T!`W'nvK{6E+Z4N,! Рa.dx[J:qY,䊢.¶*XVNPRA8(LB`yE/Z(ܺ ݆zT*F#s0ĪzB,qߣ?bnNK\d8<>Hcʻߪ x-41G6Ps3y ~E6%ln,e+s 'ZZĸD+X,NP*nh+t4P=?{٠<0 S[6x*)nsXq<)$b-v5VXFʔ.@,J1F=D)SCISݷ9mDdrE[gM粧/2ǯSK5ꖝtCU)^elUyy˂۽oz`̩qL7]zX*+[{B9xIqL]^|m}(؊){H`6&I7lNc/F5aO<\lz̓U^DAqpq9Jv ~vãH#89h$ȃ>>Eu|6GrN/[lU8J}a AZWWl9.K.AKjFPZN^6_~1ϱm˥NSmu#zPጞ1!E_s{EWO9ZcE-O;7'PkW?㺗X ǃK䗧֕I,7(^9ݷSU|# T{^M8wUM(" =duS޷R\Zͭ +~I9ѯ1_҆j9;4l6!n +_a-hm;o :B ാ] ! 6 jN&o&oox7>2𡔜kh٥w|&CD-f:ĀBvQlL! [n>f@ůPB/~;だ8$W o@_K ZDl(xIԲ y"u*R]v~Kgk21]Qxo- _i"!"guv `tP\ҙ9Gv2Ar(H_XN+3WJKkR)j^G]ܼq,)#g?y*:0-W(tpO5;P2Y CZ[Ú8rtQ@ 4߂* _Ӳyʅz-mbYU44'FbԪ l\Qx@[R@!6gRS)O !`/ .Lr$<ߜ'3W# xYG"Nr("YP =бG4]-,)@O3Cdk\)ؼ *kJp_ -"P+'5 SiPĵF(C-7pe껵78hV~l Ac3ت^.- +0 k#X'Dԗ( 6MZ^X/‚R{j"3yo %Ոg]& nCe4ևE;)J OW/$#V5u:lLouPiٝ E5w"܅`tAb+H=Zo !r>6ncmk0یmD%P n#|“iƻsa=_ 7 W^=MJ˵1kyoKhJ9%3;X'‰ *7O22!$*>%wtSkGKmx E-m겠0Z &?f #`W%#˗+h8W,ҾlcSWƹ͑W?H"n.~9:iӋ^ίCA\E' 2!)w 7 Fpsh- +i=$oghNflE XaZ/xl>)DZ9UԾUӷKP(o\::ySĬE4~#g[ ?&@{-*o3gM v77 `< a=_z"'[&?b|\79#1+A9/ rJ3.f9 W8 Bku8 -i1 !~ $6efUkb骓8щ@=[N=d[ۥp1ty"`.+R X/$UPO-y[E$%L^ >/T.K5n$$|Buh pр8d.0BlulfoYy%"VgoH_wϨhQЪR!,rJıbSgI$ Y/zSq:FT:UX;b}EET236K)LY )f^l=iF .XzCmf( z~ -f9>S)3m3PjToRgq$:2Юk'p E|/ՌJ ͆˫H*؞"2t]J\^u)&!5;K\5}]\v5h3qh^sɉ:@ֵGCd Q/t:M62wa_ޙ-&i/)Isu,YtNlvccB񀂆℉ `Z#Li p+ [<.gFEb> fXFLy;ڇ@ϒsx6Xb'~+4{#Qf Hw4Z`VGvxdF iwD]a I1& #.7k$RyAz$adČJRӝG%N`s" 333xJG,)FdtPKAIr548zDm \!*+֑e# ˞V͔5χgkg%4$O9w"`NIJX); X$K2ܲM/y[~(_'$Gl!ztnS7QH61ZMd)uKފz*jH (+f gBw)& ۙGYN Õr&fPދ'`V;[~Ṡ~BFVjgWL_noyMA؈'?6r lC.y eZVTGx 15oArP[ pn&)Fr`8dapCx38#3QˁYS@R2`Jt=S`~~.hIۭ4?Sܒm6κobڢn=y^TZ acLM,mOnJ$SWg`% Du NZ(qvn .F+. 1QnA_ I0#s?K~?\ufiyiH${#LjDSJM(=@ZJh7U/lc*̓#l_zs-* %9'F#}+# 'ؗaw4vyd@x_ [[;2`%?|n|{ZU`ρNp b+== ?G$?V~FOQI3Ȭlol5PeIB F`웅-v:5% -e9Q~cC V/Aeh!ePDŽFV?49[Ken0PKhJL1MQn #a|uNL>J_*d.Z7ncA%D~^2Wlco۰tC59ѿQ$$F~AJm[Ǖnp#]U7lq6 b̰f qf_ʺ`yHeGlڤ/$ 4#XYGB̉b#NmnS5I..TH*: yGPZ%&!7SBOKҊAJjDшЉR1p<lR$^rI*VQRn3Br+a:NN4Hnw|zXZ̝ ڲLr4 &h;SL"0|_š,l{# u.9ȗ kΑ#0(YTٹF ҈ge|th)VbZ'rJԒ/b@1ڰ"tz.U%Hr" j#R+N@iY~{9 ;Ƅ! ` !,0AĚb#s\vaVM(Ǝ$  BYW0!&P 'X[ȗZu> RV$U07UHyOy4Hy|S-.}`;o{dـ!~+' ;qmĤsI &tJQۙ5EOvk6{0ǝ`/ oXDsS5mH|\4JQ049 u%̅pH+ a ȜK_n$.F𽤪îEf7N0cb1Tf%޿ߘdtz7|\|6&U,P7ڍdܾvq&oxOGul ۿ$ ![v7"loilUDgq=>)s )sF\V8 (}p$jFX0w?:?_2)U !Q❴&voZAP煒8O f>fֳG{OOܴ^L"땂jbνqk5r*&3p’z(XMFMCCev1$6Ɂ^޶|l" P3}PŒ!$ H =pVq=pT`zS>Z'5N gzUXa3VK`6vWLv7X[S,3ޔ^ϭ1Ǜd&[R']dQ>zhHRe%"wZ/ [xe RXQ( *}tR$+ \ 3]Xީ [[H,B)p$G]'ʜWɪ9-*ޑ_9EqabdB;ts% ;^LQi($:kN$ ^jNjM܃:yS>T* "}( J>9FeH_8D ڰ ̮ؐC^(v~[E#^V VA'F }O<`|sW-Ea^i5uR׿W,7Z,4\QT=#?-Q 2vBܰq=, \ GZg5v63XxhVԎ!2Pj Z.vnFο Z^<;z{}sY`j_\o]/D*_wwRh-Mv ~c|tkh@.Oʼn{Ru(]_?m<;~46)$ `΋+W%q2:R?e~EJf}?M9ac's78xrޯx_W+6 k2yVoc6„!^7;)|4s|rq'1uscāۦ_bl*WbmPno.Cgrܓi{PeFȪohAI _}m1 1oë26S,N VooPpT?oow3gGu]]6on~e@<;NM5V=?-qf\Ev+VYFy}^11Yu1K*iݱ) !)ȮFոw:`_}6,5,AyQ]w6 )j)(ܷAs:尀Rj xX'Mِ/&Ai*>|Ayʦ }bh 90/̭RP @șAosXtA~Hy=.27"*$ >3x|7-FyGI& nSa6{V\e aQ`33j7߬nşL뛫HӉt|zklwV~.Ctx&W]?ŕH1%uWvyMF֋ExjE uFDs}6x][+i>D,$B%|QEٌ]O 5``ڰ;*!dkf4vL?:OvQ:۫;& X1*ߖ7%xv@u+(r%5] nyՎ5}ndw"QqY(('Ry@wfoku W{rdlz8bow *d/4@cvf6ӽ#yml

Ϟm>; 1HN}몚2*ՙ@dҸ%L ۆeŠi&bEmg1=f88j>k$"Sl\ʰBN0c. 7bۗ=ìӦ-ϸ;-6+LNJpnk;"`*] ?g?o9:hl<`S>Λ *kq3^c;2pۿ'/Km`6˛Чw::m@#v[M7Kh<}lBP9oЌ荳noݢQ1 XeȇSwZEyEOzd_:fڕ@"m Ŝ L!ɵC )D_`+s300@$l K_쥘"OjY>7&LVGTq c;O.q9Jqܥq:P3s`V;P}5bI Vh KA)'WasrsL>rXLd&?16DBRpdJF LAriKG߆-~Qzw.\\<^nJfAx_&n/O^S3 ;aDUG`h]3eH1C2J-}۠V3gq W6/c YTbû˱6t R&Aф$49@=Z+17K7v|?īW6aWS)#Trxuq'g!"-3]c Q]әhGDj'"FSm2,6WJkP.e (j.$ !JZ/  ښR`Lς/eУD^F;#ch@ҋb0ލSsL -:+nISģ.\rGcuE̽ٞm20sd9*^!e8ԀuFYڰ kt>xiМ87>P;?=ЋwRG Y83[_8>"{alhS0{1&=BzCDlUJ8EGXo!._t^lOUawK s%ɝsn7NLb,Xw:n=: PK=ihRBE9v$ Ž"=*Vٰl2%F)zDG,KYvba QNaZTA{Ӌ5 YC dqR׎lIl8t G+촖EGTTAtRrAY9G7; | ΁uKaXƖ@Y  Yب.+gWcq,>AnZ9 `{7x`M,=@=s@a))c„jTsuQ_ 0o *` Y|zU\VtfayZd882!J1I6=n)g"=kP/}RܝDn^U.wNu0rUx=x3!ammbbD]6L˸`3R6%cq%0dNہ0j~\p-Goo݁}V4LSn4{4EK ”%A>SIc66D |N) nQ@, Q4,|T钂S t9x0](`ul~;k=pL+'Fף୘A“mvUU͠:Ӫ.XEr /۰eUDUuy^5j! ^:WF6Ҝ5UP]&qRma+W͇*9,Fog3T6NW;bQR:-1Vup8n%0`]#n=v(d9fͣ*2XM_TcoqXga89rWumGsqO![a VVAyo%]b UT04l&KNI.ez3"mn)__: l1^7Wt련%$kֆֳ叞$V i#A/% CŐ|AF6F Q㕡:b@z ,1۠$b{k FW m E4 X & oISi^O nxh`;CàwiVF5jvT 8YFږꩶc/?Gd1Sl>6o_W5RGLAwF7u#% ba ¨$ᭈ. $(d "YA$,*v4v v[>as<5D#.9iEG 0#?.???Ҳ:td/_H%>=^I3#d; 5U7x&`J/ m每--⍳D |iւj ㅩ̹P񙔷a ~P}ss8''٬O>k9.LQtp(ǘ]J.oAJB.NF"ӷO7! EmVAgˍHw$V59 5x,$:FF ' Y5fÀtqi+y)Oh_i C);jr9m$\Ч a{0N>/Rz$1U@3^Lm!+/t1G߹!j0!mP[%S~L{y[0QɠrdB(A !NMf %R[ZT(bҩ~FEqV| V+A5C"u=Ltl{6c%s% K'zF8s5m$3d}i@ϓFxEZ φ!،ޥe(O,l b~x w=`j M1ɽqdN.Ge}V 7y9PTX Y].)=dI+cnD AUc%tZ5'\6۹quq4`WsZ!YFHpV͗%Ѿ4v@aWbǵ{@@]/P1 ' & cDߘB^9vZB3%+ܘM@  TR F=|( aS t=`R 9j֘ TҐʱ9ԕ9#wBqa] F cdsU84ܢщXAY QV[$aIkw!J4,@g0s[[jY9LC_lVus͊foK{%al h|gh`ˀH0FQSb[̍4AD8U6>dfEZe8[ΛkjqI((\62 `@CrDZp+ nlZY֎(]81^t``K;t" umP d^pbNF5zT\siuQU $ChK g~PO6@©?X? OX2٫d5`D(0@mmțԼ(X/4BĿr3V=!ۀBI"DgBf q9jK2-rlC @eU1' ?d4A/ort016Ȅ3jiGɹ,O5Tb|s?fYArϥwH@͗_C/Ve`%G1M,ˮ{~*wX 8u$ _-!-;?mGn2'^|01qUJCmg\V脶TbMaiX̓ނR5_C!k;5lK+f 與$-62 AT`Ey^@2y@Ap8 ;lBX tyFJka6He qf$ Q>Ć]oHWd/Hc=cX'6AdD*g/Rǀ%`l+j66IŽMzX  9GnPM8ClC(t@(*b30N3AyIW7Q1 a5DsGǙY7XImz|KP^#Z_B`SNWπ($}Cg=S]wRY[[F ͢u{Ţ86dDP5 aejw:Tw^475Y@V[x36fO:A0q Q(Yq`&zȧOQ0|wH%0. m[B=Š3mVUG?rbxup߬ Wr4}ba.Iޘ RКld>`vPN}3㒞`~f q7mGS#*y(ltZq3.ΝnyO8 E)VC\V7 #h~UV]U1 PS1 ՏeqӉ&a#3}O}9dX Y͢=)=|;ey%9&HKW%>z/S4} M@kfu!Df|m*kXi,5Al km1{eCg0O = 75Դ +.؛_=*_ː_ٜ.&HX6gc2og!N#]r2k4"vffC2l`TKeBO>|OP_eA0hfdo8?aG9a3A+OlrH2Gbq[?+Xkg -!_dfMB?à5X38ܟ0 v3;W6˶zd-Xb%SCI/ E }?uD?Ɛ D rF *XA)oyqfhe )7 h ̷1R)G .dQA&4h9>vlrNMdF~T CUٮ"jbҶI*.i9Y󁝜ΎWΛ $O BZ~m x#?b`Yp M XSFF(*/!`[ahZ3%?::us ;$U3ː*į[u_|xyenO+?fRWUr^Az!8fZu5d)͇@/`wFȣF6K;9Erڀ2b@2/_TfT(^ =߆n"J kUfr?{_5Mvtv|/SS%O1(j荒aBr?}V7IY^h黚"c K&x}˻}^Pֱ[zu^ wVcv͸*^kͳY~ Y]peZ+Lb[ eoZtcO+'5o휚R϶oQXLr;'Xl0^khSX_[үt'$iMEpa΂U~x6Rkl~-5 m$XjY\jU[\4 R5 o%U-ٲdFr{dMzuU>pH-9]:Ca.ĨC`\=}ih`'1(K6h5dR5l[J Q$\Qaۦ{@/s} p͙b>٧ƣANֹkӍQ#m5y<7;V3ۈi>E3=G,@k` YdeA؏J`;N}ۊhMm˩M,#AeLށE]?\8b)y+^ۦ1HJ!Kg@6 3,@gp/s^XaK``v9'5P]eǯ)bpΦ0sWyӨ`{پd11,x=HB[[)e WSCEd@MG&P_`@icwT g} 5̼_z)_.x9?lA*L78PRe aESGUv. ftPン0cK?:>_}Mg\AwE?0Lj3^U'CJD#ja}–D >ٴ1!x? [9QwЉͷ{w8$ !ǎ9AFؐlr!fm&hDՅ ~ ޱBّHt뇠mŁ,V?iT+ ""Ro2Nn+1Sa;vCT>f1Bk`(x9(9Smu;BlzzLjKtI4lj H͟ٹiB6kS+#YnXtԼ;bBP%>MdXj#{ Z]vR-3:1vl~Xv},_;:K瀊s@'|#}o6bu,l%J!BقGK\;qP@!Ch9W,6@TbahD_ɹ зXg$…oz4}p?SU_ZzEIGT^~MzO?i_3xYjb1^9.87@]m\Ymm>~osF?!`kzEe=L&^J}4Ulq/RNԉA_SXma9Td1*2~be{G1#l[hԗnׂAHfeۏ T~!~V6^[ CiQA?`>"{ _#i[>+S`M"M.{`HC`.)EןU]Cbz44~JB$R"kZ­Ȇk^,ڮ@ -v @dNf"̃ <. ֱ M"n4ﳢ)}j=H+=;U66_5{~ٻD4m?qx{=ɕ6v0_zuY}?]`,g`7F'[Erj='w퀀^naOlJp$-EVn_l]m2./^X6­Q/՜/4Mh Yӻ^MRbW-DEcM8"Y9i5,=P(ֹSAz.C=B03{~ʌ\e?6 =qP~R7W,OE )<כThHGQs~JC8Zs (`Zc zQ> p 8QRoSҥ;Pj v1% v0J` t;_ bYZP}hn(>_G2_Vf ѓlNәv+HE4%k ~Z܈RˆߝwS `ENĭ`j(p΅ 4t._U'喪2}JlPC k&WQ}usÕب+9G:g]Wg1lSBz˝ӄ-Q#u9(ҥƨg6a{h&No{Ygf= _ +[5a$]p ba+y+^rg=wMTBɢ9OT6%< 9Rg\CIRhz:ӽE/j94Lo`>nvrj cՂ#97W*BkEHy@\:,U0`ӱT%yO9ksޒ<71wl$L⪎27 3? +#°aMl]zUCE3rChKᷴ߾0 vS!JM2:I) -vN.Љ ; n)T BøCgQ] *Z J`5|̛/.ȟlN ˷UK惼Gnײַu!%u]p(B#) CQ(_S@ fkT]5L[5l͓|Z4%)hX)U#9eK-VɎKZF:[݈dzik -U(+, 3莼5e]CZ-; mei Z19>ϒ\$} Շ[:L-!䚃5 J'f,^[D ^Yj=` mcFx;꾦,Tu~79Ϲ|6C d9p;0zE>/!.ǔbcme.^7 YEߺDo(Ւ H%MKO۔L+"ؘs4&kd k3zk;7p\#IW9BUZ;#Q1RZK|{79;Cxp$/ pΛCTV W hErl3*rh\\P[h\-j=vUtYJ^Iz2sLڻ,RHӢ1Mد)%[䦋@&yJ"r$=)17їмmUIZKHzEcbܸ;eBYޏW@`7>^OXQ[á|lc`v؀9Gx~}i. $yVmc icSP+/Ҟ{*m}MILB^&1]m+PGR: *j|ɘx𡈈 3 < Fz%(-sBzX46:섭|2-jK6^l&D襯'Sc~$k[c.wQOT :(gTɭB;끀چt~NekT6+!Ր&ׇQ{c9MpQ5$];NZz޹3u{gC/-{EțpRCg1{oׇ],iG_ZfX5mR-'zc1I`% JLi#-~DVon7[PfXDJd+4D)$W>:0lYfȐZ7PѣtpwvF҃ǟ*c^~vx$xe9ˇ x[dgTyxݓ<PZ:g2XLY\rxg'vRh 2YK6dGbbsN3:6YYwbARPj 7| 椤0wmy+xˎ|^ڠ#/+W &9J !2gDʸT)gA#؆7L\ 2FO(,ՆOaGfRO0hp^(#mSJ4KhT JS\ieBlL)#JTL%Kz)8k͐3 z*o𞨄N^ w!"w l(sq<湡j]au0})&8VQ@LuԴe;܁9Uoܬ)n|EP}NrvP%@{M$E5|[H0X97=ӢI(Z{'ۚ$QRz;6zy pꃖkRcaE(]3޹>[UqdtP 8((Aʔ\1-?BwN[hqI`26[%iYYor,URrOPq1DzoO @Ow2^ZF}ӊyXJEzg-N )y/dNIT9_"bbE-^1^ͅԾ$ݛW#5՛#  !%867NN~C Ns#B++WZ%M|B]i+І'NJ"m؏R`6rG5- v~G.:k+e靺(T=X_4;rV<}13_!j*NEKucMt`~BXso+buW(bw%lȜb%< n{?-`m,1WSN|/2>KP̈/}{^'8Y%%eF>W`#eɷXqݦ ]}9M-:MO)-A1ybPIuu{ڝNQKDj{|sV4ej!xٓW79>T"]7#feG);۸m9j`HqjM B&_y^I: ~UHSbK<ʼnĄiۤѫB );p,JD,\ dL^ۈEҍ0D'3K[ ju6dia{oD,Bp>u۟]G7e燙4نe?h`Hz2N&MLt2F, UT8B+pܾTޠ4L~~t}.߫Fxk cპ|Oq(>h;˳WӜ4G,g:A]*iE&K@?Rh`|ݘTХsz>'֧?jҠ-0wIZ5m&nM`ŖڑiP/pg1HBߙfy\y'xyumPԮqzq旾*ć0ɬXjHm^^QՔz"lu;aRm=ZX{'3rgRK{F&`?2CLx`;l*R5Sd]U#V!JO9A9/vpxy1]꘽Q}ҲN*Up0dz.$bQQQ!؄Г!VC񸖂B7J᪲1s9`}Xo5!0- ԾS0!4ӺbatbbR|_\R=\5eFsi=;X|3C G<̶~Z_.V٨Zg.q9F7`)!^"9Y1S%ݘI>ͧf !o^o8xam~yܽs玷~y&Q.蘅PEWjugct;8[D-Eǂ!/fݪ/,N5 :5橫(zմ<~s>EA1A^6_ cki@ŚJGmTeJ0pdPkP7pԟM bK|XiЋObGe \":`H)Fc:ŸPan(!穆]+ɛ㼹+]NDcqQ5a؇B%hQ9=0*yGSȈ 0 ;7#+`Xo>dxs͔]C*\,&%7 J I>uXpx2+O"ni  :gۙfMs et cw0)@>å*SQOy$)/3ZnԜV}߲ģt5tpK-Y Ψl*}`?.`xMrp7a0˽{> w<4 W0U`b￶_xmlY|0O2snoTY g*[i51 qZy^a]SGi̓-'b, m%{C|A:q CsU>6 |MQfdF_m( Zȧv$ \qNhA8f^At#ȵ__:^ra ef,Uf.5m;!ssl.*t^+$ف'yy*tn-3Mʏ<< &c^p„.ZbrmmE 9ڃsuQ 4YJ5 w牚d v0vT\k"*E;^M]nzF"`uLTΌ h!aJ@W`T(CDRƭݨ/ vbEӲUnS56i%M[D- e5&M:KM8ű0˞d6pd\mpz{;I^7H29tIB"mnISBa<:Qsb?<"l*L]p3#1%h*EUAxu:IJ_ΧSjGjM9 |9IS׊&y1qU(*e0ô#Md3(;0FzG$Gja]z5A@&2ψ YǯCrl!`4VP9a$`ykB1.-Wy|ј"iyWbJZU6{8X]0v3s7$-~KL.k/.$Jզ~4PFLƛR*w IH+p|H KAdۅZH4Q( `i΄O[-mp^ %V,c"ZrV^}x%"؈'䎋+DU?,-h2FC^F2`6F 1FZEICu^UhUeQ^͝f1"VFI3ŹW"4K~ v GeT{ϵx0}}P"{[ `e]ĩA_;0o+lq1˧ՠ˫|_x]h|i_P,#da>Y*d\mp}T3 'V'*zSnTf2~ v |>/<&NZׯt`y5,(Ï~,x~DWvF.%Ck'=eE_ 3U۔uU_ĩ٪i-V6)h,EV%R 2CIpU>7 Cmg^ӜxCékHKZ:I{WFWWՠ5o Um@4KP6 :3)IrXs*INDck ZB0 ٚyO}J@u>֪u+&WID/mOMd1Y&X'J}#4!ĊF M/ZDy1byΤ -{B"5Pwg)EJXZx47J]0F򾶧IdO_߳qЈu2m:ʄZt]͎|UyՊ`s/1v[m8~uF7d?lS#*cx's92ݤq#Bfž-]xn]f CqچKВn Pp7 |ROu8;muyx`5', =+X^{C,e?HYIEwY9t?XƣDaŖvr - 6r@Չ[ Nӷq4`u:DqHuZw<1!-s{EIErX}U n& z#3T[*m5hRcx# BGrC#CINaX|0B>q8~ jֈR)xW1ԜDj3U젽!sVg8 B[v8Pc-{ 'ݮO?Lm%+Vnx]Gn>oj`O[}GkC$-vJJIapؖ0atȾ"wŷ_Ѵ024_ `@ Vv `k |`7$-+)SF9l˴(BSD7k`!d޼!~Ş+I[I̳k5= h&bk?l \)7'd)4Ÿ6hX NPLXƒ,"I-b"jVp%Ɵe%?0A@R=6I/5@ϯyHOoAoJ6Y?5ZV) GɒZW9gt#b@o|E KR)i6%7R~ _rEIt0HÔϋWBK\l+V#quIE mY[Kcb&tql&wrNpɑKüAx٥\\܄k)a)j:)m8r|(nF"5]p-6 X}./ s" r(iq\7c E>$1tłBcGQ`0UmpzWZ $Ȳ"Ѡ74 a2Ν ƭSs ̓H9lݗֲc*.g"A=?7~m_ˆsT՘>wTEPz&{mkPNUA1-F|:^ܬK[%A7? ԝc3E 0koVLDqAցH/Z|t{ac}o@!HIXb_҅do_MΥ.w7#h:$-2xZ+o|H:dS(a-45"ei]RtYJ2$]ZgI"6Bѯ:|+y?Qݶ[kePmr#6n\t1 ҆~3N7qUi6U N{"C2ҡoKb&',<f`|jSY /C&>0Zh@gw(Հ#%v#?h0/t zwϛefc*0 گzJ~BNESX),1EFB|m)rΔC;5tB]_[[w${TmEmm^hF&-rCdOK_*{@7f 8شT* g0 ~%8 T]=b sܜvːЧڛ20Ao9]S\T"ahR5N3a, tu4"(aŖts]2y]dDEo3D\;Qțo[tPdYZzyzLz&%e6QG}z"̙>rKF+ρ6ӡQWCM~-D @>~\!ᾂp%n] *zAjn ׋Ԙen%3ddZw7h^g,}224-?(rv`7,[tmxMIRk$]8+up.f™)w=n*~^eM#*$v] :nd_d?3wpm:r_d+{Q A'^|X@좺Jsp~=(lP86jv[ֳz2B/Pj)xuKWy-'**8G4TohGц $qx8m?[]'>yhyɃp:+?Qۈ 7 9;]OE2 =/G*s''MF}<YL%[VAy.KBfJ̣f_}<-K[my .|& Kq(07.+Zv\J$v>i=JBjfnv+f֘%Sv;(8mmI :`m1?옵E E~yS} zyzA>0?MnPmg60w]dbͶߞyújMy75VKh3GuzZC0i: LT\ϩ@ / 3C~DoKKf7VAܜz##ؿ"<*[р<8JșqZ,OaQOО4k3P/# /1/$*xAUN8.P%ltjǴϥA!r` KU9c 0F׍sR"X2ѿVʌ_Uq.-Y(٣]P`ޡp ŷ71 N{UGjG1kp&68u[Oz؝#zoй kLHV^uWhV6^4E1}TGuS|Ya͘_hd=- Q ÝL+،Գ!o ?H 3Ap]Ly_)3h AP^i0+}7p6A]= aGU0@u5iJ9OxX(.q5N}7.[7 װS ˗We3ɱH/EN9pmO>;2=ntwgo~up <|:4o&m==| <vth'ыݓ؅l{`5Nf04,ԍ Wy6@^ VS)*yi'%*k*|j٠BX(fPfܫ{ɧ p{ } mrH=ms##u1n: dzV<[R? ^w^> UǫM XB#'i1cs u4{m'GŸϊv-3 Cg9n6xaOe0L-ֶ:2tCKpDhsPL2  9WU @e_MÙ06ಀ=iq#Q>wGԀ~3Y2I7;ĝG ĘWp9037֬1Kxx>.0< 0 +$,@A7_84.d u^ %_ͬYwfCX";>vH/oRBC9y1;v4PVޕ<~@,Rr K5 p-Yѻ \x=8*INlM@yRUx7S0.03ex'@S+p '=7w5:9}o*O/[ц0}wc"I7=?xEW2P_,kV~]_NEBPpzÂvpK%TF%I/&{~TtZM۳&a3>d0` `ݕjH(0q/ܰxSsaUi8)#_jf4W*mKb<;u~'_xߺ2@a~5ְ\k wO+. vcTwmKd{I?"7eLؒ@ ]7шvB?%{^dsYN"4x;zOUW"ފW?#Vqga;pN|";l?|O[b}d Qi~3+G [iEq5.dZ˕0D"Ю ~e\#?p"1ϩ}eL4׆19:g&F3+ӦCvZ0oWKgq88$[)+YAzUDN?WPź5v}oY@BMOQΙ''$l>as(+d%pm j>KɗAb%엱]o ˺p!h1vqy@H}a!APs/N9ʾ39(s١"djuapL]V(:'Hd^c4$RʽQ?)We8zþh`=ݢ,Ll]oTE@fƃbʇqYom]Ri#H^[ 8O M[B$#8Zd$cTyZo9xW1}Ŷ_OeXP<ܦpN`u8+HBF[Chj8ȃm;QQ Y/ ;R[6qpطLJ.ޗ >)o?`%M!, +G"Ѣ !B@oP:oyD KIl{(W9>e!QL|/WVWE &xD ӅIijp8d~Æ*YIUIWlΐ +KQVo^ Tl!RBrt OJ"&XHYS=T ' 2(pgV~4n&a${!PYMB[ ˻ޯ{^| uR1ᮊ,;-WEFQ"r(P VLFXeuVH%b9|bwdJ:~"t`!Me-yJ cQJX- m ͠b8]+(<}SX)3kK1C?bgH'<q+Ȋvxt# Vpͦ7fs闕'ř&מm 54T̍$'ÿ G3-9 GC'lS\~&B6QpmXn[s:ٓLA] `j'/D{~&=CmZb w!찴jaHX)tI-mb;!!<9ƽE|3%݌wƚ+xN_.HşI[^oS}Q6TR&V[%(jζdYKbvHi;X dbefO2Y ja\s4LwG$^1e5Rqƺ)HqPJݭãCg?=SusrH}t_<O؆l[P|ݿ OoG0~S@ݷJ˾_h|ݘXjͩz.Zn%r(5':d)0O#* XC:@tzUCǯ0<~G &B7x+x\wxl!<]xMxL1x\-<;<؁.<;x<<xx}x0͂ȾjnP_q4ohvc7[x\c !<];x<|O xh?gx3ɡ rB5D,+I`!H y]7,` *ɯ@<c;؅#x|؃-9;<qBxǏ ?xM%чd vWx\)Gcw I0X4x\am@PoE}(h(-x?T.˂oh͆.$1C &<؃?A}<;x< ? <<<q?gx3dえ?%?g8[Wx\c '2,BfFxnX<c  xr`# Stex3@x KOc`X#tM 2X#t^x\<;<؁.<;x<<xx}xl|^Ҁdx*â~(3,XmoӠt?*gSӽi:+lg d+F)7C_Ӳo nV5i=vc2oCYg 9y07?,+(UeDwg>9*N'yb'yr}"5b{dI kTiaS  z-ۄEl|7pĥyM?QV@;`)0qǷyppXsH́0H|V9v04@aOLlw8yr*Uz]+8@ ?QՓy^ Lu%+~oE߂>u GsZFD%!H0&' ~{H;tK8+sW8<\ Ʉ{lT+kp0 xĶLcb`O8UJk_9¦y@3enatr N䩣ޟ V}ꜬXn^ܬQͶBز5}-,HGd_)njSU߫}j%h-kINi' LGI4aK V^&#zۧ+<{ȋ[Hٰy'N~J_,|@.{MBl6cQ`00.MYB#R1aDL U?oVB!j[NV:/mBdYbD*3 },1컰ۦuBU:/+%a+SC纡kA2i(F W0WS_Ph3z{8ߧ=n7TW;i d6r42~π0+&?݁>kWa,EįYBE(pQNFy.W4CfӇKƟgwӳt|mJ2:f.C"5ݬ;PS!ӰrA`)Y8ƤX2b ނn~`@VZYT;dbЕ_&aes"Qfha3=29R)42rPi hz| upRlt0ɺ_M8Q̽Rq]$JL6mILh6NL{ផ9D.疒nI)àG*nӞ hoaũ;q`ee:vp {S)y[U7dY5rӵB`r>CZf0&YlhH2LTYiWlIA\f"75Qf=!{*^cyPCE1Hrh%J4Ձ] 49٪VC ɇyoEoi2e_ڜ'ĚF/G2m׸si)-{֗@qRQ%vEh&m*5$-$ZOsY_,d>*iZwN_2;vq:./|>X.ssvwmĒ8FM' *A8I#j D hsNPWIpIvxQdx(zA2-.bZQ8FYv"p.FWN7h΋=#.~vs9L@6yy:E\BU~)EG٠j8͇qII&`(0[i%}d 2-ǿ74K #V:<$7?JfЉRI~%vF&(8vdfGFZzi7VG8S 뎂5kG?45N}|le _Ь1EMSm۟,ViW4@@!aȳ7)e Y7vag&UK!<-oCFʡ+r:սw0qӏ&>+0%0a8n ,[&-R4eT|lC8N:oЫT(bkN0/ݦ艜iUEJv_4#׮CW%nK9 0es/A${Dp\5{BIy@{z)p"lh^\:_vl+Y@)4K9JהֈslDmkF}aW⽐t@H VEY%R:E8XrkR8 V6s`$]+0ٱu%ֹ :~. /WA{Π6y:BΔE9>e{jVfdȽeYriඪyWYBDP*~AC:뾑 7R7ĘI,ȸtҙpۆX;/7FMWS( {I\)*FRyOwH-lLJ?V! +Vb֭ن By[&3/qepoB~IC&i.9NP*"FF*w 7)âM9bg  %pZDz=R\0(\o`Кc [ |~wMÝ^oSz#}y:0g\n}:00:2gcB sI[kCb ׭IAY뮏Qa"7g#ļyͮ$G0KJ!Ű@ru6u[˗*c#0f.V|NE)ɫ<Ul^cyzn+@]˥'NS1el1[QRE$|~'ߖ{K*-rΛ鯝 \>TazpZ ܉w~Kqs pNKK n5ʌ6D lB"SsTZk@W?9-~@htxDXb,j CyZU-<-]GhC'C4h[|k,Q}mVjTsh fJb6Pf~Wj}K6ZGW% Ɣ2 Mt6/Xtr*6Sa~$SAM 8A~LPu"d (PHot%@A7|tL=)Ŧsp8rg9gN+Wjb9 \A pļjSomZͧ}Xx%hN}rX8v-l<p97T@=NF0v,xJdG M wx:Y=fN -v$f2P4wt3Rt.B NFpsvDhWmdI`?ʿhiЫ=0.10.0" } }, "node_modules/@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "dependencies": { "@babel/highlight": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "dependencies": { "@babel/types": "^7.18.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" }, "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { "color-name": "1.1.3" } }, "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "engines": { "node": ">=0.8.0" } }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "engines": { "node": ">=4" } }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { "has-flag": "^3.0.0" }, "engines": { "node": ">=4" } }, "node_modules/@babel/runtime": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "dependencies": { "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { "version": "7.21.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, "engines": { "node": ">=12" } }, "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, "engines": { "node": ">=10.0.0" } }, "node_modules/@emotion/babel-plugin": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", "@emotion/hash": "^0.9.1", "@emotion/memoize": "^0.8.1", "@emotion/serialize": "^1.1.2", "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", "stylis": "4.2.0" } }, "node_modules/@emotion/babel-plugin/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "engines": { "node": ">=0.10.0" } }, "node_modules/@emotion/cache": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", "dependencies": { "@emotion/memoize": "^0.8.1", "@emotion/sheet": "^1.2.2", "@emotion/utils": "^1.2.1", "@emotion/weak-memoize": "^0.3.1", "stylis": "4.2.0" } }, "node_modules/@emotion/hash": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "node_modules/@emotion/is-prop-valid": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", "dependencies": { "@emotion/memoize": "^0.8.0" } }, "node_modules/@emotion/memoize": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "node_modules/@emotion/react": { "version": "11.11.4", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", "@emotion/cache": "^11.11.0", "@emotion/serialize": "^1.1.3", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", "@emotion/utils": "^1.2.1", "@emotion/weak-memoize": "^0.3.1", "hoist-non-react-statics": "^3.3.1" }, "peerDependencies": { "react": ">=16.8.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@emotion/serialize": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", "dependencies": { "@emotion/hash": "^0.9.1", "@emotion/memoize": "^0.8.1", "@emotion/unitless": "^0.8.1", "@emotion/utils": "^1.2.1", "csstype": "^3.0.2" } }, "node_modules/@emotion/sheet": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, "node_modules/@emotion/styled": { "version": "11.10.6", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.10.6", "@emotion/is-prop-valid": "^1.2.0", "@emotion/serialize": "^1.1.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", "@emotion/utils": "^1.2.0" }, "peerDependencies": { "@emotion/react": "^11.0.0-rc.0", "react": ">=16.8.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@emotion/unitless": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", "peerDependencies": { "react": ">=16.8.0" } }, "node_modules/@emotion/utils": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" }, "node_modules/@emotion/weak-memoize": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, "node_modules/@esbuild/android-arm": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", "cpu": [ "arm" ], "dev": true, "optional": true, "os": [ "android" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/android-arm64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "android" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/android-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "android" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/darwin-arm64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "darwin" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/darwin-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "darwin" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/freebsd-arm64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "freebsd" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/freebsd-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "freebsd" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-arm": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", "cpu": [ "arm" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-arm64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-ia32": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", "cpu": [ "ia32" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-loong64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", "cpu": [ "loong64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-mips64el": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", "cpu": [ "mips64el" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-ppc64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", "cpu": [ "ppc64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-riscv64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", "cpu": [ "riscv64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-s390x": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", "cpu": [ "s390x" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/linux-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "linux" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/netbsd-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "netbsd" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/openbsd-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "openbsd" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/sunos-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "sunos" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/win32-arm64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", "cpu": [ "arm64" ], "dev": true, "optional": true, "os": [ "win32" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/win32-ia32": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", "cpu": [ "ia32" ], "dev": true, "optional": true, "os": [ "win32" ], "engines": { "node": ">=12" } }, "node_modules/@esbuild/win32-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", "cpu": [ "x64" ], "dev": true, "optional": true, "os": [ "win32" ], "engines": { "node": ">=12" } }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/js": { "version": "8.56.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, "engines": { "node": ">=12.22" }, "funding": { "type": "github", "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "node_modules/@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "dependencies": { "@sinclair/typebox": "^0.27.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jest/types": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@jsonjoy.com/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", "dev": true, "engines": { "node": ">=10.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" }, "peerDependencies": { "tslib": "2" } }, "node_modules/@jsonjoy.com/json-pack": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", "dev": true, "dependencies": { "@jsonjoy.com/base64": "^1.1.1", "@jsonjoy.com/util": "^1.1.2", "hyperdyperid": "^1.2.0", "thingies": "^1.20.0" }, "engines": { "node": ">=10.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" }, "peerDependencies": { "tslib": "2" } }, "node_modules/@jsonjoy.com/util": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", "dev": true, "engines": { "node": ">=10.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" }, "peerDependencies": { "tslib": "2" } }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "dev": true }, "node_modules/@mui/base": { "version": "5.0.0-alpha.118", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.118.tgz", "integrity": "sha512-GAEpqhnuHjRaAZLdxFNuOf2GDTp9sUawM46oHZV4VnYPFjXJDkIYFWfIQLONb0nga92OiqS5DD/scGzVKCL0Mw==", "dependencies": { "@babel/runtime": "^7.20.13", "@emotion/is-prop-valid": "^1.2.0", "@mui/types": "^7.2.3", "@mui/utils": "^5.11.9", "@popperjs/core": "^2.11.6", "clsx": "^1.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0", "react-dom": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@mui/core-downloads-tracker": { "version": "5.11.9", "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.9.tgz", "integrity": "sha512-YGEtucQ/Nl91VZkzYaLad47Cdui51n/hW+OQm4210g4N3/nZzBxmGeKfubEalf+ShKH4aYDS86XTO6q/TpZnjQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/material": { "version": "5.11.10", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.10.tgz", "integrity": "sha512-hs1WErbiedqlJIZsljgoil908x4NMp8Lfk8di+5c7o809roqKcFTg2+k3z5ucKvs29AXcsdXrDB/kn2K6dGYIw==", "dependencies": { "@babel/runtime": "^7.20.13", "@mui/base": "5.0.0-alpha.118", "@mui/core-downloads-tracker": "^5.11.9", "@mui/system": "^5.11.9", "@mui/types": "^7.2.3", "@mui/utils": "^5.11.9", "@types/react-transition-group": "^4.4.5", "clsx": "^1.2.1", "csstype": "^3.1.1", "prop-types": "^15.8.1", "react-is": "^18.2.0", "react-transition-group": "^4.4.5" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0", "react-dom": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@emotion/react": { "optional": true }, "@emotion/styled": { "optional": true }, "@types/react": { "optional": true } } }, "node_modules/@mui/private-theming": { "version": "5.11.9", "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.9.tgz", "integrity": "sha512-XMyVIFGomVCmCm92EvYlgq3zrC9K+J6r7IKl/rBJT2/xVYoRY6uM7jeB+Wxh7kXxnW9Dbqsr2yL3cx6wSD1sAg==", "dependencies": { "@babel/runtime": "^7.20.13", "@mui/utils": "^5.11.9", "prop-types": "^15.8.1" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@mui/styled-engine": { "version": "5.11.9", "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.11.9.tgz", "integrity": "sha512-bkh2CjHKOMy98HyOc8wQXEZvhOmDa/bhxMUekFX5IG0/w4f5HJ8R6+K6nakUUYNEgjOWPYzNPrvGB8EcGbhahQ==", "dependencies": { "@babel/runtime": "^7.20.13", "@emotion/cache": "^11.10.5", "csstype": "^3.1.1", "prop-types": "^15.8.1" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", "react": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@emotion/react": { "optional": true }, "@emotion/styled": { "optional": true } } }, "node_modules/@mui/system": { "version": "5.11.9", "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.9.tgz", "integrity": "sha512-h6uarf+l3FO6l75Nf7yO+qDGrIoa1DM9nAMCUFZQsNCDKOInRzcptnm8M1w/Z3gVetfeeGoIGAYuYKbft6KZZA==", "dependencies": { "@babel/runtime": "^7.20.13", "@mui/private-theming": "^5.11.9", "@mui/styled-engine": "^5.11.9", "@mui/types": "^7.2.3", "@mui/utils": "^5.11.9", "clsx": "^1.2.1", "csstype": "^3.1.1", "prop-types": "^15.8.1" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", "@types/react": "^17.0.0 || ^18.0.0", "react": "^17.0.0 || ^18.0.0" }, "peerDependenciesMeta": { "@emotion/react": { "optional": true }, "@emotion/styled": { "optional": true }, "@types/react": { "optional": true } } }, "node_modules/@mui/types": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz", "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==", "peerDependencies": { "@types/react": "*" }, "peerDependenciesMeta": { "@types/react": { "optional": true } } }, "node_modules/@mui/utils": { "version": "5.11.9", "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.9.tgz", "integrity": "sha512-eOJaqzcEs4qEwolcvFAmXGpln+uvouvOS9FUX6Wkrte+4I8rZbjODOBDVNlK+V6/ziTfD4iNKC0G+KfOTApbqg==", "dependencies": { "@babel/runtime": "^7.20.13", "@types/prop-types": "^15.7.5", "@types/react-is": "^16.7.1 || ^17.0.0", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, "engines": { "node": ">=12.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" }, "peerDependencies": { "react": "^17.0.0 || ^18.0.0" } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { "node": ">= 8" } }, "node_modules/@pkgr/core": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/unts" } }, "node_modules/@polka/url": { "version": "1.0.0-next.25", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", "dev": true }, "node_modules/@popperjs/core": { "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" } }, "node_modules/@remix-run/router": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.2.tgz", "integrity": "sha512-t54ONhl/h75X94SWsHGQ4G/ZrCEguKSRQr7DrjTciJXW0YU1QhlwYeycvK5JgkzlxmvrK7wq1NB/PLtHxoiDcA==", "engines": { "node": ">=14" } }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, "node_modules/@tanstack/query-core": { "version": "4.24.10", "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.24.10.tgz", "integrity": "sha512-2QywqXEAGBIUoTdgn1lAB4/C8QEqwXHj2jrCLeYTk2xVGtLiPEUD8jcMoeB2noclbiW2mMt4+Fq7fZStuz3wAQ==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { "version": "4.24.10", "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.24.10.tgz", "integrity": "sha512-FY1DixytOcNNCydPQXLxuKEV7VSST32CAuJ55BjhDNqASnMLZn+6c30yQBMrODjmWMNwzfjMZnq0Vw7C62Fwow==", "dependencies": { "@tanstack/query-core": "4.24.10", "use-sync-external-store": "^1.2.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-native": "*" }, "peerDependenciesMeta": { "react-dom": { "optional": true }, "react-native": { "optional": true } } }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", "dev": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true }, "node_modules/@tsconfig/node16": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, "node_modules/@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "node_modules/@types/bonjour": { "version": "3.5.13", "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" } }, "node_modules/@types/eslint": { "version": "8.56.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, "node_modules/@types/express": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { "version": "4.17.33", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", "dev": true, "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*" } }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, "node_modules/@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", "dev": true }, "node_modules/@types/http-proxy": { "version": "1.17.15", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "dependencies": { "@types/istanbul-lib-coverage": "*" } }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "dependencies": { "@types/istanbul-lib-report": "*" } }, "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, "node_modules/@types/node": { "version": "18.14.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.2.tgz", "integrity": "sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA==", "dev": true }, "node_modules/@types/node-forge": { "version": "1.3.11", "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, "node_modules/@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, "node_modules/@types/react": { "version": "18.2.51", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.51.tgz", "integrity": "sha512-XeoMaU4CzyjdRr3c4IQQtiH7Rpo18V07rYZUucEZQwOUEtGgTXv7e6igQiQ+xnV6MbMe1qjEmKdgMNnfppnXfg==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { "version": "18.2.19", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", "dev": true, "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-is": { "version": "17.0.3", "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", "dependencies": { "@types/react": "*" } }, "node_modules/@types/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", "dependencies": { "@types/react": "*" } }, "node_modules/@types/retry": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", "dev": true }, "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "node_modules/@types/semver": { "version": "7.3.13", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, "node_modules/@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" } }, "node_modules/@types/serve-index": { "version": "1.9.4", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { "version": "1.15.7", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "dependencies": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "*" } }, "node_modules/@types/sockjs": { "version": "0.3.36", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/ws": { "version": "8.5.12", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { "version": "17.0.32", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "dependencies": { "@types/yargs-parser": "*" } }, "node_modules/@types/yargs-parser": { "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", "integrity": "sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==", "dev": true, "dependencies": { "@typescript-eslint/scope-manager": "5.53.0", "@typescript-eslint/type-utils": "5.53.0", "@typescript-eslint/utils": "5.53.0", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "@typescript-eslint/parser": "^5.0.0", "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/parser": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.53.0", "@typescript-eslint/visitor-keys": "5.53.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/type-utils": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz", "integrity": "sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==", "dev": true, "dependencies": { "@typescript-eslint/typescript-estree": "5.53.0", "@typescript-eslint/utils": "5.53.0", "debug": "^4.3.4", "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "*" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/types": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@typescript-eslint/typescript-estree": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.53.0", "@typescript-eslint/visitor-keys": "5.53.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/@typescript-eslint/utils": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", "@typescript-eslint/scope-manager": "5.53.0", "@typescript-eslint/types": "5.53.0", "@typescript-eslint/typescript-estree": "5.53.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", "dev": true, "dependencies": { "@typescript-eslint/types": "5.53.0", "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, "node_modules/@webassemblyjs/ast": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-section": "1.12.1", "@webassemblyjs/wasm-gen": "1.12.1", "@webassemblyjs/wasm-opt": "1.12.1", "@webassemblyjs/wasm-parser": "1.12.1", "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/wasm-gen": "1.12.1", "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "dependencies": { "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webpack-cli/configtest": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", "dev": true, "engines": { "node": ">=18.12.0" }, "peerDependencies": { "webpack": "^5.82.0", "webpack-cli": "6.x.x" } }, "node_modules/@webpack-cli/info": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", "dev": true, "engines": { "node": ">=18.12.0" }, "peerDependencies": { "webpack": "^5.82.0", "webpack-cli": "6.x.x" } }, "node_modules/@webpack-cli/serve": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", "dev": true, "engines": { "node": ">=18.12.0" }, "peerDependencies": { "webpack": "^5.82.0", "webpack-cli": "6.x.x" }, "peerDependenciesMeta": { "webpack-dev-server": { "optional": true } } }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" } }, "node_modules/acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" } }, "node_modules/acorn-import-attributes": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, "peerDependencies": { "acorn": "^8" } }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, "engines": { "node": ">=0.4.0" } }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ajv-formats": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "dependencies": { "ajv": "^8.0.0" }, "peerDependencies": { "ajv": "^8.0.0" }, "peerDependenciesMeta": { "ajv": { "optional": true } } }, "node_modules/ajv-formats/node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true, "engines": [ "node >= 0.8.0" ], "bin": { "ansi-html": "bin/ansi-html" } }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" }, "engines": { "node": ">= 8" } }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "node_modules/aria-query": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "node_modules/array-includes": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.findlastindex": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.flatmap": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array.prototype.tosorted": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "dependencies": { "possible-typed-array-names": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/axe-core": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/axobject-query": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", "resolve": "^1.19.0" }, "engines": { "node": ">=10", "npm": ">=6" } }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, "engines": { "node": "*" } }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/body-parser/node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/bonjour-service": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { "fill-range": "^7.0.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { "version": "4.23.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "dependencies": { "caniuse-lite": "^1.0.30001629", "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "node_modules/bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "dev": true, "dependencies": { "run-applescript": "^7.0.0" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/call-bind-apply-helpers": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dev": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/call-bound": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", "dev": true, "dependencies": { "call-bind-apply-helpers": "^1.0.1", "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "engines": { "node": ">=6" } }, "node_modules/camel-case": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" } }, "node_modules/caniuse-lite": { "version": "1.0.30001638", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz", "integrity": "sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ] }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "engines": { "node": ">= 8.10.0" }, "funding": { "url": "https://paulmillr.com/funding/" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "node_modules/chokidar/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true, "engines": { "node": ">=6.0" } }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/sibiraj-s" } ], "engines": { "node": ">=8" } }, "node_modules/clean-css": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dev": true, "dependencies": { "source-map": "~0.6.0" }, "engines": { "node": ">= 10.0" } }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", "engines": { "node": ">=6" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, "engines": { "node": ">= 12" } }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "dependencies": { "mime-db": ">= 1.43.0 < 2" }, "engines": { "node": ">= 0.6" } }, "node_modules/compression": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", "compressible": "~2.0.16", "debug": "2.6.9", "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/compression/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/compression/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true, "engines": { "node": ">=0.8" } }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "dependencies": { "safe-buffer": "5.2.1" }, "engines": { "node": ">= 0.6" } }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" }, "engines": { "node": ">=10" } }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" }, "engines": { "node": ">= 8" } }, "node_modules/css-loader": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", "postcss-modules-extract-imports": "^3.1.0", "postcss-modules-local-by-default": "^4.0.5", "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" }, "engines": { "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "@rspack/core": "0.x || 1.x", "webpack": "^5.27.0" }, "peerDependenciesMeta": { "@rspack/core": { "optional": true }, "webpack": { "optional": true } } }, "node_modules/css-select": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, "engines": { "node": ">= 6" }, "funding": { "url": "https://github.com/sponsors/fb55" } }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, "bin": { "cssesc": "bin/cssesc" }, "engines": { "node": ">=4" } }, "node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, "node_modules/data-view-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/data-view-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "dev": true }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "node_modules/deepmerge": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/default-browser": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "dev": true, "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/default-browser-id": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", "dev": true, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true, "engines": { "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" } }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "dependencies": { "path-type": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { "node": ">=6" } }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=6.0.0" } }, "node_modules/dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "dependencies": { "utila": "~0.4" } }, "node_modules/dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "dependencies": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" } }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } ] }, "node_modules/domhandler": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "dependencies": { "domelementtype": "^2.2.0" }, "engines": { "node": ">= 4" }, "funding": { "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "node_modules/dotenv": { "version": "14.3.2", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-14.3.2.tgz", "integrity": "sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==", "dev": true, "engines": { "node": ">=12" } }, "node_modules/dotenv-defaults": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-5.0.2.tgz", "integrity": "sha512-y5z4NhblzwNk8XBIYVzjLcFkANK0rxbRDO6kGOfH9QrVYIGVEX52IqwSprKVsaLHM9pnNkCSxazZF/JPydDPvA==", "dev": true, "dependencies": { "dotenv": "^14.0.0" } }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, "node_modules/electron-to-chromium": { "version": "1.4.814", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.814.tgz", "integrity": "sha512-GVulpHjFu1Y9ZvikvbArHmAhZXtm3wHlpjTMcXNGKl4IQ4jMQjlnz8yMQYYqdLHKi/jEL2+CBC2akWVCoIGUdw==", "dev": true }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" }, "engines": { "node": ">=10.13.0" } }, "node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } }, "node_modules/envinfo": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", "dev": true, "bin": { "envinfo": "dist/cli.js" }, "engines": { "node": ">=4" } }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { "version": "1.23.8", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.8.tgz", "integrity": "sha512-lfab8IzDn6EpI1ibZakcgS6WsfEBiB+43cuJo+wgylx1xKXf+Sp+YR3vFuQwC/u3sxYwV8Cxe3B0DpVUu/WiJQ==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.3", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.2.6", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-regex": "^1.2.1", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.0", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.0", "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/es-errors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/es-iterator-helpers": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.4", "safe-array-concat": "^1.1.3" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "dev": true }, "node_modules/es-object-atoms": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, "dependencies": { "es-errors": "^1.3.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-set-tostringtag": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "dependencies": { "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/esbuild": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" }, "engines": { "node": ">=12" }, "optionalDependencies": { "@esbuild/android-arm": "0.16.17", "@esbuild/android-arm64": "0.16.17", "@esbuild/android-x64": "0.16.17", "@esbuild/darwin-arm64": "0.16.17", "@esbuild/darwin-x64": "0.16.17", "@esbuild/freebsd-arm64": "0.16.17", "@esbuild/freebsd-x64": "0.16.17", "@esbuild/linux-arm": "0.16.17", "@esbuild/linux-arm64": "0.16.17", "@esbuild/linux-ia32": "0.16.17", "@esbuild/linux-loong64": "0.16.17", "@esbuild/linux-mips64el": "0.16.17", "@esbuild/linux-ppc64": "0.16.17", "@esbuild/linux-riscv64": "0.16.17", "@esbuild/linux-s390x": "0.16.17", "@esbuild/linux-x64": "0.16.17", "@esbuild/netbsd-x64": "0.16.17", "@esbuild/openbsd-x64": "0.16.17", "@esbuild/sunos-x64": "0.16.17", "@esbuild/win32-arm64": "0.16.17", "@esbuild/win32-ia32": "0.16.17", "@esbuild/win32-x64": "0.16.17" } }, "node_modules/esbuild-loader": { "version": "2.21.0", "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-2.21.0.tgz", "integrity": "sha512-k7ijTkCT43YBSZ6+fBCW1Gin7s46RrJ0VQaM8qA7lq7W+OLsGgtLyFV8470FzYi/4TeDexniTBTPTwZUnXXR5g==", "dev": true, "dependencies": { "esbuild": "^0.16.17", "joycon": "^3.0.1", "json5": "^2.2.0", "loader-utils": "^2.0.0", "tapable": "^2.2.0", "webpack-sources": "^1.4.3" }, "funding": { "url": "https://github.com/privatenumber/esbuild-loader?sponsor=1" }, "peerDependencies": { "webpack": "^4.40.0 || ^5.0.0" } }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { "version": "8.56.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.56.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-config-prettier": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" }, "peerDependencies": { "eslint": ">=7.0.0" } }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-module-utils": { "version": "2.12.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "dependencies": { "debug": "^3.2.7" }, "engines": { "node": ">=4" }, "peerDependenciesMeta": { "eslint": { "optional": true } } }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import": { "version": "2.31.0", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.0", "hasown": "^2.0.2", "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.0", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "^4.10.0", "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", "string.prototype.includes": "^2.0.1" }, "engines": { "node": ">=4.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "node_modules/eslint-plugin-prettier": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.9.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { "@types/eslint": ">=8.0.0", "eslint": ">=8.0.0", "eslint-config-prettier": "*", "prettier": ">=3.0.0" }, "peerDependenciesMeta": { "@types/eslint": { "optional": true }, "eslint-config-prettier": { "optional": true } } }, "node_modules/eslint-plugin-react": { "version": "7.37.3", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", "dev": true, "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "node_modules/eslint-plugin-react-hooks": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", "dev": true, "engines": { "node": ">=10" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { "esutils": "^2.0.2" }, "engines": { "node": ">=0.10.0" } }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/eslint-plugin-react/node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" }, "engines": { "node": ">=8.0.0" } }, "node_modules/eslint-scope/node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "dependencies": { "eslint-visitor-keys": "^2.0.0" }, "engines": { "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" }, "funding": { "url": "https://github.com/sponsors/mysticatea" }, "peerDependencies": { "eslint": ">=5" } }, "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-webpack-plugin": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-4.2.0.tgz", "integrity": "sha512-rsfpFQ01AWQbqtjgPRr2usVRxhWDuG0YDYcG8DJOteD3EFnpeuYuOwk0PQiN7PRBTqS6ElNdtPZPggj8If9WnA==", "dev": true, "dependencies": { "@types/eslint": "^8.56.10", "jest-worker": "^29.7.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "schema-utils": "^4.2.0" }, "engines": { "node": ">= 14.15.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "eslint": "^8.0.0 || ^9.0.0", "webpack": "^5.0.0" } }, "node_modules/eslint/node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/esquery": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", "dev": true, "dependencies": { "estraverse": "^5.1.0" }, "engines": { "node": ">=0.10" } }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "dependencies": { "estraverse": "^5.2.0" }, "engines": { "node": ">=4.0" } }, "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, "engines": { "node": ">=0.8.x" } }, "node_modules/express": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.19.0", "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "engines": { "node": ">= 0.10.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "node_modules/fast-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, "node_modules/fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" }, "engines": { "node": ">=8.6.0" } }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "engines": { "node": ">= 4.9.1" } }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/faye-websocket": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "dependencies": { "websocket-driver": ">=0.5.1" }, "engines": { "node": ">=0.8.0" } }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "dependencies": { "flat-cache": "^3.0.4" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/finalhandler": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "bin": { "flat": "cli.js" } }, "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" }, "engines": { "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "node_modules/follow-redirects": { "version": "1.15.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true, "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], "engines": { "node": ">=4.0" }, "peerDependenciesMeta": { "debug": { "optional": true } } }, "node_modules/for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "dependencies": { "is-callable": "^1.1.3" } }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", "chalk": "^4.1.2", "chokidar": "^3.5.3", "cosmiconfig": "^8.2.0", "deepmerge": "^4.2.2", "fs-extra": "^10.0.0", "memfs": "^3.4.1", "minimatch": "^3.0.4", "node-abort-controller": "^3.0.1", "schema-utils": "^3.1.1", "semver": "^7.3.5", "tapable": "^2.2.1" }, "engines": { "node": ">=12.13.0", "yarn": ">=1.0.0" }, "peerDependencies": { "typescript": ">3.6.0", "webpack": "^5.11.0" } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "dependencies": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/d-fischer" }, "peerDependencies": { "typescript": ">=4.9.5" }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { "node": ">=12" } }, "node_modules/fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, "optional": true, "os": [ "darwin" ], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-intrinsic": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dev": true, "dependencies": { "call-bind-apply-helpers": "^1.0.1", "dunder-proto": "^1.0.0", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-symbol-description": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { "is-glob": "^4.0.3" }, "engines": { "node": ">=10.13.0" } }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, "node_modules/globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "node_modules/grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, "dependencies": { "duplexer": "^0.1.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, "node_modules/has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "dependencies": { "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "dependencies": { "dunder-proto": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-tostringtag": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "bin": { "he": "bin/he" } }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dependencies": { "react-is": "^16.7.0" } }, "node_modules/hoist-non-react-statics/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", "readable-stream": "^2.0.1", "wbuf": "^1.1.0" } }, "node_modules/hpack.js/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "node_modules/hpack.js/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "node_modules/hpack.js/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "node_modules/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", "commander": "^8.3.0", "he": "^1.2.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", "terser": "^5.10.0" }, "bin": { "html-minifier-terser": "cli.js" }, "engines": { "node": ">=12" } }, "node_modules/html-webpack-plugin": { "version": "5.6.3", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", "dev": true, "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", "lodash": "^4.17.21", "pretty-error": "^4.0.0", "tapable": "^2.0.0" }, "engines": { "node": ">=10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { "@rspack/core": "0.x || 1.x", "webpack": "^5.20.0" }, "peerDependenciesMeta": { "@rspack/core": { "optional": true }, "webpack": { "optional": true } } }, "node_modules/htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { "type": "github", "url": "https://github.com/sponsors/fb55" } ], "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", "domutils": "^2.5.2", "entities": "^2.0.0" } }, "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", "dev": true }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.8" } }, "node_modules/http-parser-js": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", "dev": true }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" }, "engines": { "node": ">=8.0.0" } }, "node_modules/http-proxy-middleware": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", "micromatch": "^4.0.2" }, "engines": { "node": ">=12.0.0" }, "peerDependencies": { "@types/express": "^4.17.13" }, "peerDependenciesMeta": { "@types/express": { "optional": true } } }, "node_modules/hyperdyperid": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "dev": true, "engines": { "node": ">=10.18" } }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" } }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, "engines": { "node": "^10 || ^12 || >= 14" }, "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" }, "bin": { "import-local-fixture": "fixtures/cli.js" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "engines": { "node": ">=0.8.19" } }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/interpret": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "engines": { "node": ">=10.13.0" } }, "node_modules/ipaddr.js": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true, "engines": { "node": ">= 10" } }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "node_modules/is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-bigint": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "dependencies": { "has-bigints": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/is-boolean-object": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-core-module": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dependencies": { "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-data-view": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-docker": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true, "bin": { "is-docker": "cli.js" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "dependencies": { "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dev": true, "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" }, "engines": { "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-network-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", "dev": true, "engines": { "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { "isobject": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-set": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "dependencies": { "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-string": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-symbol": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-typed-array": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "dependencies": { "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakref": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dev": true, "dependencies": { "call-bound": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-wsl": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, "dependencies": { "is-inside-container": "^1.0.0" }, "engines": { "node": ">=16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/iterator.prototype": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==", "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "reflect.getprototypeof": "^1.0.8", "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/joycon": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" }, "engines": { "node": ">=6" } }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" }, "engines": { "node": ">=4.0" } }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true }, "node_modules/language-tags": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "dependencies": { "language-subtag-registry": "^0.3.20" }, "engines": { "node": ">=0.10" } }, "node_modules/launch-editor": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz", "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==", "dev": true, "dependencies": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" } }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, "engines": { "node": ">=6.11.5" } }, "node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" }, "engines": { "node": ">=8.9.0" } }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, "dependencies": { "tslib": "^2.0.3" } }, "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/mdi-material-ui": { "version": "7.9.3", "resolved": "https://registry.npmjs.org/mdi-material-ui/-/mdi-material-ui-7.9.3.tgz", "integrity": "sha512-l56RUX0tnxY+U1z6hE3cHKXwGUIGpHJLiW2papfvTB1qTegpn3iYU6sX+XBPtl+KG7Ww2RqCLAT03CNzOqeoIg==", "peerDependencies": { "@mui/material": "^5.0.0 || ^6.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/memfs": { "version": "3.4.13", "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", "dev": true, "dependencies": { "fs-monkey": "^1.0.3" }, "engines": { "node": ">= 4.0.0" } }, "node_modules/merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true, "bin": { "mime": "cli.js" }, "engines": { "node": ">=4" } }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "dependencies": { "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" } }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, "engines": { "node": "*" } }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/mrmime": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true, "engines": { "node": ">=10" } }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" }, "bin": { "multicast-dns": "cli.js" } }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], "bin": { "nanoid": "bin/nanoid.cjs" }, "engines": { "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "node_modules/natural-compare-lite": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "node_modules/node-abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "dev": true }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, "engines": { "node": ">= 6.13.0" } }, "node_modules/node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "dependencies": { "boolbase": "^1.0.0" }, "funding": { "url": "https://github.com/fb55/nth-check?sponsor=1" } }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.13.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.entries": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.groupby": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.values": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "dependencies": { "ee-first": "1.1.1" }, "engines": { "node": ">= 0.8" } }, "node_modules/on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "dependencies": { "wrappy": "1" } }, "node_modules/open": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", "dev": true, "dependencies": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "is-wsl": "^3.1.0" }, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true, "bin": { "opener": "bin/opener-bin.js" } }, "node_modules/optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { "p-limit": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-retry": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", "dev": true, "dependencies": { "@types/retry": "0.12.2", "is-network-error": "^1.0.0", "retry": "^0.13.1" }, "engines": { "node": ">=16.17" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dependencies": { "callsites": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/pascal-case": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "engines": { "node": ">=8" } }, "node_modules/picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { "find-up": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/pkg-dir/node_modules/find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, "node_modules/pkg-dir/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/pkg-dir/node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { "version": "8.4.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/postcss/" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.1", "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-modules-extract-imports": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, "engines": { "node": "^10 || ^12 || >= 14" }, "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/postcss-modules-local-by-default": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" }, "engines": { "node": "^10 || ^12 || >= 14" }, "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/postcss-modules-scope": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, "dependencies": { "postcss-selector-parser": "^6.0.4" }, "engines": { "node": "^10 || ^12 || >= 14" }, "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/postcss-modules-values": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "dependencies": { "icss-utils": "^5.0.0" }, "engines": { "node": "^10 || ^12 || >= 14" }, "peerDependencies": { "postcss": "^8.1.0" } }, "node_modules/postcss-selector-parser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" }, "engines": { "node": ">=4" } }, "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, "peer": true, "bin": { "prettier": "bin/prettier.cjs" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" } }, "node_modules/prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "dependencies": { "fast-diff": "^1.1.2" }, "engines": { "node": ">=6.0.0" } }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, "node_modules/prop-types/node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, "engines": { "node": ">= 0.10" } }, "node_modules/proxy-addr/node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true, "engines": { "node": ">= 0.10" } }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/qs": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "dependencies": { "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/raw-body": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" } }, "node_modules/raw-body/node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "dependencies": { "loose-envify": "^1.1.0" }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" }, "peerDependencies": { "react": "^18.2.0" } }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "node_modules/react-router": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.1.tgz", "integrity": "sha512-Jgi8BzAJQ8MkPt8ipXnR73rnD7EmZ0HFFb7jdQU24TynGW1Ooqin2KVDN9voSC+7xhqbbCd2cjGUepb6RObnyg==", "dependencies": { "@remix-run/router": "1.3.2" }, "engines": { "node": ">=14" }, "peerDependencies": { "react": ">=16.8" } }, "node_modules/react-router-dom": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.1.tgz", "integrity": "sha512-67EXNfkQgf34P7+PSb6VlBuaacGhkKn3kpE51+P6zYSG2kiRoumXEL6e27zTa9+PGF2MNXbgIUHTVlleLbIcHQ==", "dependencies": { "@remix-run/router": "1.3.2", "react-router": "6.8.1" }, "engines": { "node": ">=14" }, "peerDependencies": { "react": ">=16.8", "react-dom": ">=16.8" } }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", "loose-envify": "^1.4.0", "prop-types": "^15.6.2" }, "peerDependencies": { "react": ">=16.6.0", "react-dom": ">=16.6.0" } }, "node_modules/readable-stream": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", "dev": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "dependencies": { "picomatch": "^2.2.1" }, "engines": { "node": ">=8.10.0" } }, "node_modules/rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "dependencies": { "resolve": "^1.20.0" }, "engines": { "node": ">= 10.13.0" } }, "node_modules/reflect.getprototypeof": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "dunder-proto": "^1.0.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regexp.prototype.flags": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/mysticatea" } }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true, "engines": { "node": ">= 0.10" } }, "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", "lodash": "^4.17.21", "strip-ansi": "^6.0.1" } }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "dependencies": { "resolve-from": "^5.0.0" }, "engines": { "node": ">=8" } }, "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "engines": { "node": ">=4" } }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, "engines": { "node": ">= 4" } }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" } }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "dependencies": { "glob": "^7.1.3" }, "bin": { "rimraf": "bin.js" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/run-applescript": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", "dev": true, "engines": { "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ], "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/safe-array-concat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { "node": ">=0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, "funding": [ { "type": "github", "url": "https://github.com/sponsors/feross" }, { "type": "patreon", "url": "https://www.patreon.com/feross" }, { "type": "consulting", "url": "https://feross.org/support" } ] }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safe-regex-test": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "node_modules/scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/schema-utils": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 12.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/schema-utils/node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", "dev": true }, "node_modules/selfsigned": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, "dependencies": { "@types/node-forge": "^1.3.0", "node-forge": "^1" }, "engines": { "node": ">=10" } }, "node_modules/semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, "bin": { "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, "node_modules/send": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/send/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serialize-query-params": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/serialize-query-params/-/serialize-query-params-2.0.2.tgz", "integrity": "sha512-1chMo1dST4pFA9RDXAtF0Rbjaut4is7bzFbI1Z26IuMub68pNCILku85aYmeFhvnY//BXUPUhoRMjYcsT93J/Q==" }, "node_modules/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", "http-errors": "~1.6.2", "mime-types": "~2.1.17", "parseurl": "~1.3.2" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/serve-index/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/serve-index/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", "statuses": ">= 1.4.0 < 2" }, "engines": { "node": ">= 0.6" } }, "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true, "engines": { "node": ">= 0.6" } }, "node_modules/serve-static": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/set-function-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "dependencies": { "kind-of": "^6.0.2" }, "engines": { "node": ">=8" } }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, "engines": { "node": ">=8" } }, "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/shell-quote": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel-list": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel-map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/side-channel-weakmap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" }, "engines": { "node": ">= 10" } }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", "http-deceiver": "^1.2.7", "select-hose": "^2.0.0", "spdy-transport": "^3.0.0" }, "engines": { "node": ">=6.0.0" } }, "node_modules/spdy-transport": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", "hpack.js": "^2.1.6", "obuf": "^1.1.2", "readable-stream": "^3.0.6", "wbuf": "^1.7.3" } }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3" }, "engines": { "node": ">= 0.4" } }, "node_modules/string.prototype.matchall": { "version": "4.0.12", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.repeat": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "node_modules/string.prototype.trim": { "version": "1.2.10", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimend": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/style-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", "dev": true, "engines": { "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^5.27.0" } }, "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/synckit": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, "dependencies": { "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/unts" } }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/terser": { "version": "5.31.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" }, "engines": { "node": ">=10" } }, "node_modules/terser-webpack-plugin": { "version": "5.3.10", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^5.1.0" }, "peerDependenciesMeta": { "@swc/core": { "optional": true }, "esbuild": { "optional": true }, "uglify-js": { "optional": true } } }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "engines": { "node": ">= 10.13.0" } }, "node_modules/terser-webpack-plugin/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "node_modules/thingies": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", "dev": true, "engines": { "node": ">=10.18" }, "peerDependencies": { "tslib": "^2" } }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "engines": { "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { "is-number": "^7.0.0" }, "engines": { "node": ">=8.0" } }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, "engines": { "node": ">=0.6" } }, "node_modules/totalist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/tree-dump": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", "dev": true, "engines": { "node": ">=10.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" }, "peerDependencies": { "tslib": "2" } }, "node_modules/ts-loader": { "version": "9.5.1", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", "semver": "^7.3.4", "source-map": "^0.7.4" }, "engines": { "node": ">=12.0.0" }, "peerDependencies": { "typescript": "*", "webpack": "^5.0.0" } }, "node_modules/ts-loader/node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "bin": { "ts-node": "dist/bin.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "peerDependenciesMeta": { "@swc/core": { "optional": true }, "@swc/wasm": { "optional": true } } }, "node_modules/tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "node_modules/tslib": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "dependencies": { "tslib": "^1.8.1" }, "engines": { "node": ">= 6" }, "peerDependencies": { "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, "node_modules/tsutils/node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "dependencies": { "prelude-ls": "^1.2.1" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" }, "engines": { "node": ">= 0.6" } }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typed-array-byte-offset": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typed-array-length": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typescript": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { "node": ">=14.17" } }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "engines": { "node": ">= 10.0.0" } }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "funding": [ { "type": "opencollective", "url": "https://opencollective.com/browserslist" }, { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" }, { "type": "github", "url": "https://github.com/sponsors/ai" } ], "dependencies": { "escalade": "^3.1.2", "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" } }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "dependencies": { "punycode": "^2.1.0" } }, "node_modules/use-query-params": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/use-query-params/-/use-query-params-2.2.1.tgz", "integrity": "sha512-i6alcyLB8w9i3ZK3caNftdb+UnbfBRNPDnc89CNQWkGRmDrm/gfydHvMBfVsQJRq3NoHOM2dt/ceBWG2397v1Q==", "dependencies": { "serialize-query-params": "^2.0.2" }, "peerDependencies": { "@reach/router": "^1.2.1", "react": ">=16.8.0", "react-dom": ">=16.8.0", "react-router-dom": ">=5" }, "peerDependenciesMeta": { "@reach/router": { "optional": true }, "react-router-dom": { "optional": true } } }, "node_modules/use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", "dev": true }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true, "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "engines": { "node": ">= 0.8" } }, "node_modules/watchpack": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" }, "engines": { "node": ">=10.13.0" } }, "node_modules/wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "dependencies": { "minimalistic-assert": "^1.0.0" } }, "node_modules/webpack": { "version": "5.95.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", "dev": true, "dependencies": { "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { "webpack": "bin/webpack.js" }, "engines": { "node": ">=10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependenciesMeta": { "webpack-cli": { "optional": true } } }, "node_modules/webpack-bundle-analyzer": { "version": "4.10.2", "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "commander": "^7.2.0", "debounce": "^1.2.1", "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", "ws": "^7.3.1" }, "bin": { "webpack-bundle-analyzer": "lib/bin/analyzer.js" }, "engines": { "node": ">= 10.13.0" } }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, "engines": { "node": ">= 10" } }, "node_modules/webpack-cli": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "dependencies": { "@discoveryjs/json-ext": "^0.6.1", "@webpack-cli/configtest": "^3.0.1", "@webpack-cli/info": "^3.0.1", "@webpack-cli/serve": "^3.0.1", "colorette": "^2.0.14", "commander": "^12.1.0", "cross-spawn": "^7.0.3", "envinfo": "^7.14.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^3.1.1", "rechoir": "^0.8.0", "webpack-merge": "^6.0.1" }, "bin": { "webpack-cli": "bin/cli.js" }, "engines": { "node": ">=18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^5.82.0" }, "peerDependenciesMeta": { "webpack-bundle-analyzer": { "optional": true }, "webpack-dev-server": { "optional": true } } }, "node_modules/webpack-cli/node_modules/@discoveryjs/json-ext": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", "dev": true, "engines": { "node": ">=14.17.0" } }, "node_modules/webpack-cli/node_modules/commander": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, "engines": { "node": ">=18" } }, "node_modules/webpack-dev-middleware": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", "dev": true, "dependencies": { "colorette": "^2.0.10", "memfs": "^4.6.0", "mime-types": "^2.1.31", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "engines": { "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^5.0.0" }, "peerDependenciesMeta": { "webpack": { "optional": true } } }, "node_modules/webpack-dev-middleware/node_modules/memfs": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.12.0.tgz", "integrity": "sha512-74wDsex5tQDSClVkeK1vtxqYCAgCoXxx+K4NSHzgU/muYVYByFqa+0RnrPO9NM6naWm1+G9JmZ0p6QHhXmeYfA==", "dev": true, "dependencies": { "@jsonjoy.com/json-pack": "^1.0.3", "@jsonjoy.com/util": "^1.3.0", "tree-dump": "^1.0.1", "tslib": "^2.0.0" }, "engines": { "node": ">= 4.0.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" } }, "node_modules/webpack-dev-server": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.0.tgz", "integrity": "sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==", "dev": true, "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", "@types/express": "^4.17.21", "@types/serve-index": "^1.9.4", "@types/serve-static": "^1.15.5", "@types/sockjs": "^0.3.36", "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.2.1", "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "express": "^4.21.2", "graceful-fs": "^4.2.6", "http-proxy-middleware": "^2.0.7", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", "p-retry": "^6.2.0", "schema-utils": "^4.2.0", "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", "webpack-dev-middleware": "^7.4.2", "ws": "^8.18.0" }, "bin": { "webpack-dev-server": "bin/webpack-dev-server.js" }, "engines": { "node": ">= 18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { "webpack": "^5.0.0" }, "peerDependenciesMeta": { "webpack": { "optional": true }, "webpack-cli": { "optional": true } } }, "node_modules/webpack-dev-server/node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { "optional": true }, "utf-8-validate": { "optional": true } } }, "node_modules/webpack-merge": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", "wildcard": "^2.0.1" }, "engines": { "node": ">=18.0.0" } }, "node_modules/webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "dependencies": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" } }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, "engines": { "node": ">= 10.13.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" } }, "node_modules/webpack/node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, "engines": { "node": ">=10.13.0" } }, "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" }, "engines": { "node": ">=0.8.0" } }, "node_modules/websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" }, "engines": { "node": ">= 8" } }, "node_modules/which-boxed-primitive": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-collection": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { "version": "1.1.18", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.3", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, "engines": { "node": ">=8.3.0" }, "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { "bufferutil": { "optional": true }, "utf-8-validate": { "optional": true } } }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "engines": { "node": ">= 6" } }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } } }, "dependencies": { "@aashutoshrathi/word-wrap": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true }, "@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", "requires": { "@babel/highlight": "^7.18.6" } }, "@babel/helper-module-imports": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", "requires": { "@babel/types": "^7.18.6" } }, "@babel/helper-string-parser": { "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" }, "@babel/helper-validator-identifier": { "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" }, "@babel/highlight": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "requires": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", "js-tokens": "^4.0.0" }, "dependencies": { "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { "color-convert": "^1.9.0" } }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { "has-flag": "^3.0.0" } } } }, "@babel/runtime": { "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "requires": { "regenerator-runtime": "^0.13.11" } }, "@babel/types": { "version": "7.21.2", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", "requires": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", "to-fast-properties": "^2.0.0" } }, "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, "requires": { "@jridgewell/trace-mapping": "0.3.9" }, "dependencies": { "@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } } } }, "@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true }, "@emotion/babel-plugin": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz", "integrity": "sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ==", "requires": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", "@emotion/hash": "^0.9.1", "@emotion/memoize": "^0.8.1", "@emotion/serialize": "^1.1.2", "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", "stylis": "4.2.0" }, "dependencies": { "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" } } }, "@emotion/cache": { "version": "11.11.0", "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.11.0.tgz", "integrity": "sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ==", "requires": { "@emotion/memoize": "^0.8.1", "@emotion/sheet": "^1.2.2", "@emotion/utils": "^1.2.1", "@emotion/weak-memoize": "^0.3.1", "stylis": "4.2.0" } }, "@emotion/hash": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" }, "@emotion/is-prop-valid": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", "requires": { "@emotion/memoize": "^0.8.0" } }, "@emotion/memoize": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "@emotion/react": { "version": "11.11.4", "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.11.4.tgz", "integrity": "sha512-t8AjMlF0gHpvvxk5mAtCqR4vmxiGHCeJBaQO6gncUSdklELOgtwjerNY2yuJNfwnc6vi16U/+uMF+afIawJ9iw==", "requires": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.11.0", "@emotion/cache": "^11.11.0", "@emotion/serialize": "^1.1.3", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.1", "@emotion/utils": "^1.2.1", "@emotion/weak-memoize": "^0.3.1", "hoist-non-react-statics": "^3.3.1" } }, "@emotion/serialize": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.1.4.tgz", "integrity": "sha512-RIN04MBT8g+FnDwgvIUi8czvr1LU1alUMI05LekWB5DGyTm8cCBMCRpq3GqaiyEDRptEXOyXnvZ58GZYu4kBxQ==", "requires": { "@emotion/hash": "^0.9.1", "@emotion/memoize": "^0.8.1", "@emotion/unitless": "^0.8.1", "@emotion/utils": "^1.2.1", "csstype": "^3.0.2" } }, "@emotion/sheet": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz", "integrity": "sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA==" }, "@emotion/styled": { "version": "11.10.6", "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.10.6.tgz", "integrity": "sha512-OXtBzOmDSJo5Q0AFemHCfl+bUueT8BIcPSxu0EGTpGk6DmI5dnhSzQANm1e1ze0YZL7TDyAyy6s/b/zmGOS3Og==", "requires": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.10.6", "@emotion/is-prop-valid": "^1.2.0", "@emotion/serialize": "^1.1.1", "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0", "@emotion/utils": "^1.2.0" } }, "@emotion/unitless": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" }, "@emotion/use-insertion-effect-with-fallbacks": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz", "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==", "requires": {} }, "@emotion/utils": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.2.1.tgz", "integrity": "sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg==" }, "@emotion/weak-memoize": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz", "integrity": "sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww==" }, "@esbuild/android-arm": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", "dev": true, "optional": true }, "@esbuild/android-arm64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", "dev": true, "optional": true }, "@esbuild/android-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", "dev": true, "optional": true }, "@esbuild/darwin-arm64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", "dev": true, "optional": true }, "@esbuild/darwin-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", "dev": true, "optional": true }, "@esbuild/freebsd-arm64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", "dev": true, "optional": true }, "@esbuild/freebsd-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", "dev": true, "optional": true }, "@esbuild/linux-arm": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", "dev": true, "optional": true }, "@esbuild/linux-arm64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", "dev": true, "optional": true }, "@esbuild/linux-ia32": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", "dev": true, "optional": true }, "@esbuild/linux-mips64el": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", "dev": true, "optional": true }, "@esbuild/linux-ppc64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", "dev": true, "optional": true }, "@esbuild/linux-riscv64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", "dev": true, "optional": true }, "@esbuild/linux-s390x": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", "dev": true, "optional": true }, "@esbuild/linux-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", "dev": true, "optional": true }, "@esbuild/netbsd-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", "dev": true, "optional": true }, "@esbuild/openbsd-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", "dev": true, "optional": true }, "@esbuild/sunos-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", "dev": true, "optional": true }, "@esbuild/win32-arm64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", "dev": true, "optional": true }, "@esbuild/win32-ia32": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", "dev": true, "optional": true }, "@esbuild/win32-x64": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", "dev": true, "optional": true }, "@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, "requires": { "eslint-visitor-keys": "^3.3.0" } }, "@eslint-community/regexpp": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true }, "@eslint/eslintrc": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.6.0", "globals": "^13.19.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "@eslint/js": { "version": "8.56.0", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", "dev": true }, "@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", "minimatch": "^3.0.5" } }, "@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true }, "@humanwhocodes/object-schema": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "@jest/schemas": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, "requires": { "@sinclair/typebox": "^0.27.8" } }, "@jest/types": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "dev": true, "requires": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "requires": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true }, "@jridgewell/set-array": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true }, "@jridgewell/source-map": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, "@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@jsonjoy.com/base64": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", "dev": true, "requires": {} }, "@jsonjoy.com/json-pack": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.1.0.tgz", "integrity": "sha512-zlQONA+msXPPwHWZMKFVS78ewFczIll5lXiVPwFPCZUsrOKdxc2AvxU1HoNBmMRhqDZUR9HkC3UOm+6pME6Xsg==", "dev": true, "requires": { "@jsonjoy.com/base64": "^1.1.1", "@jsonjoy.com/util": "^1.1.2", "hyperdyperid": "^1.2.0", "thingies": "^1.20.0" } }, "@jsonjoy.com/util": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", "dev": true, "requires": {} }, "@leichtgewicht/ip-codec": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "dev": true }, "@mui/base": { "version": "5.0.0-alpha.118", "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.118.tgz", "integrity": "sha512-GAEpqhnuHjRaAZLdxFNuOf2GDTp9sUawM46oHZV4VnYPFjXJDkIYFWfIQLONb0nga92OiqS5DD/scGzVKCL0Mw==", "requires": { "@babel/runtime": "^7.20.13", "@emotion/is-prop-valid": "^1.2.0", "@mui/types": "^7.2.3", "@mui/utils": "^5.11.9", "@popperjs/core": "^2.11.6", "clsx": "^1.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" } }, "@mui/core-downloads-tracker": { "version": "5.11.9", "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.9.tgz", "integrity": "sha512-YGEtucQ/Nl91VZkzYaLad47Cdui51n/hW+OQm4210g4N3/nZzBxmGeKfubEalf+ShKH4aYDS86XTO6q/TpZnjQ==" }, "@mui/material": { "version": "5.11.10", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.11.10.tgz", "integrity": "sha512-hs1WErbiedqlJIZsljgoil908x4NMp8Lfk8di+5c7o809roqKcFTg2+k3z5ucKvs29AXcsdXrDB/kn2K6dGYIw==", "requires": { "@babel/runtime": "^7.20.13", "@mui/base": "5.0.0-alpha.118", "@mui/core-downloads-tracker": "^5.11.9", "@mui/system": "^5.11.9", "@mui/types": "^7.2.3", "@mui/utils": "^5.11.9", "@types/react-transition-group": "^4.4.5", "clsx": "^1.2.1", "csstype": "^3.1.1", "prop-types": "^15.8.1", "react-is": "^18.2.0", "react-transition-group": "^4.4.5" } }, "@mui/private-theming": { "version": "5.11.9", "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.9.tgz", "integrity": "sha512-XMyVIFGomVCmCm92EvYlgq3zrC9K+J6r7IKl/rBJT2/xVYoRY6uM7jeB+Wxh7kXxnW9Dbqsr2yL3cx6wSD1sAg==", "requires": { "@babel/runtime": "^7.20.13", "@mui/utils": "^5.11.9", "prop-types": "^15.8.1" } }, "@mui/styled-engine": { "version": "5.11.9", "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.11.9.tgz", "integrity": "sha512-bkh2CjHKOMy98HyOc8wQXEZvhOmDa/bhxMUekFX5IG0/w4f5HJ8R6+K6nakUUYNEgjOWPYzNPrvGB8EcGbhahQ==", "requires": { "@babel/runtime": "^7.20.13", "@emotion/cache": "^11.10.5", "csstype": "^3.1.1", "prop-types": "^15.8.1" } }, "@mui/system": { "version": "5.11.9", "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.11.9.tgz", "integrity": "sha512-h6uarf+l3FO6l75Nf7yO+qDGrIoa1DM9nAMCUFZQsNCDKOInRzcptnm8M1w/Z3gVetfeeGoIGAYuYKbft6KZZA==", "requires": { "@babel/runtime": "^7.20.13", "@mui/private-theming": "^5.11.9", "@mui/styled-engine": "^5.11.9", "@mui/types": "^7.2.3", "@mui/utils": "^5.11.9", "clsx": "^1.2.1", "csstype": "^3.1.1", "prop-types": "^15.8.1" } }, "@mui/types": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz", "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==", "requires": {} }, "@mui/utils": { "version": "5.11.9", "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.9.tgz", "integrity": "sha512-eOJaqzcEs4qEwolcvFAmXGpln+uvouvOS9FUX6Wkrte+4I8rZbjODOBDVNlK+V6/ziTfD4iNKC0G+KfOTApbqg==", "requires": { "@babel/runtime": "^7.20.13", "@types/prop-types": "^15.7.5", "@types/react-is": "^16.7.1 || ^17.0.0", "prop-types": "^15.8.1", "react-is": "^18.2.0" } }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@pkgr/core": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true }, "@polka/url": { "version": "1.0.0-next.25", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==", "dev": true }, "@popperjs/core": { "version": "2.11.6", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz", "integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==" }, "@remix-run/router": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.3.2.tgz", "integrity": "sha512-t54ONhl/h75X94SWsHGQ4G/ZrCEguKSRQr7DrjTciJXW0YU1QhlwYeycvK5JgkzlxmvrK7wq1NB/PLtHxoiDcA==" }, "@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true }, "@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, "@tanstack/query-core": { "version": "4.24.10", "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.24.10.tgz", "integrity": "sha512-2QywqXEAGBIUoTdgn1lAB4/C8QEqwXHj2jrCLeYTk2xVGtLiPEUD8jcMoeB2noclbiW2mMt4+Fq7fZStuz3wAQ==" }, "@tanstack/react-query": { "version": "4.24.10", "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.24.10.tgz", "integrity": "sha512-FY1DixytOcNNCydPQXLxuKEV7VSST32CAuJ55BjhDNqASnMLZn+6c30yQBMrODjmWMNwzfjMZnq0Vw7C62Fwow==", "requires": { "@tanstack/query-core": "4.24.10", "use-sync-external-store": "^1.2.0" } }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", "dev": true }, "@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "dev": true }, "@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "dev": true }, "@tsconfig/node16": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", "dev": true }, "@types/body-parser": { "version": "1.19.2", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, "requires": { "@types/connect": "*", "@types/node": "*" } }, "@types/bonjour": { "version": "3.5.13", "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/connect": { "version": "3.4.35", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/connect-history-api-fallback": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, "requires": { "@types/express-serve-static-core": "*", "@types/node": "*" } }, "@types/eslint": { "version": "8.56.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, "requires": { "@types/estree": "*", "@types/json-schema": "*" } }, "@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, "@types/express": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "requires": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "@types/express-serve-static-core": { "version": "4.17.33", "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", "dev": true, "requires": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*" } }, "@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "dev": true }, "@types/http-errors": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", "dev": true }, "@types/http-proxy": { "version": "1.17.15", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "dev": true }, "@types/istanbul-lib-report": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "dev": true, "requires": { "@types/istanbul-lib-coverage": "*" } }, "@types/istanbul-reports": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "dev": true, "requires": { "@types/istanbul-lib-report": "*" } }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, "@types/node": { "version": "18.14.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.2.tgz", "integrity": "sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA==", "dev": true }, "@types/node-forge": { "version": "1.3.11", "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, "@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, "@types/react": { "version": "18.2.51", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.51.tgz", "integrity": "sha512-XeoMaU4CzyjdRr3c4IQQtiH7Rpo18V07rYZUucEZQwOUEtGgTXv7e6igQiQ+xnV6MbMe1qjEmKdgMNnfppnXfg==", "requires": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, "@types/react-dom": { "version": "18.2.19", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.19.tgz", "integrity": "sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==", "dev": true, "requires": { "@types/react": "*" } }, "@types/react-is": { "version": "17.0.3", "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", "requires": { "@types/react": "*" } }, "@types/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", "requires": { "@types/react": "*" } }, "@types/retry": { "version": "0.12.2", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", "dev": true }, "@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "@types/semver": { "version": "7.3.13", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", "integrity": "sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw==", "dev": true }, "@types/send": { "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "requires": { "@types/mime": "^1", "@types/node": "*" } }, "@types/serve-index": { "version": "1.9.4", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, "requires": { "@types/express": "*" } }, "@types/serve-static": { "version": "1.15.7", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "dev": true, "requires": { "@types/http-errors": "*", "@types/node": "*", "@types/send": "*" } }, "@types/sockjs": { "version": "0.3.36", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, "requires": { "@types/node": "*" } }, "@types/ws": { "version": "8.5.12", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/yargs": { "version": "17.0.32", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "requires": { "@types/yargs-parser": "*" } }, "@types/yargs-parser": { "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "dev": true }, "@typescript-eslint/eslint-plugin": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.53.0.tgz", "integrity": "sha512-alFpFWNucPLdUOySmXCJpzr6HKC3bu7XooShWM+3w/EL6J2HIoB2PFxpLnq4JauWVk6DiVeNKzQlFEaE+X9sGw==", "dev": true, "requires": { "@typescript-eslint/scope-manager": "5.53.0", "@typescript-eslint/type-utils": "5.53.0", "@typescript-eslint/utils": "5.53.0", "debug": "^4.3.4", "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "natural-compare-lite": "^1.4.0", "regexpp": "^3.2.0", "semver": "^7.3.7", "tsutils": "^3.21.0" } }, "@typescript-eslint/parser": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, "requires": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", "@typescript-eslint/typescript-estree": "5.62.0", "debug": "^4.3.4" }, "dependencies": { "@typescript-eslint/scope-manager": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "requires": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0" } }, "@typescript-eslint/types": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true }, "@typescript-eslint/typescript-estree": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "requires": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" } }, "@typescript-eslint/visitor-keys": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "requires": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" } } } }, "@typescript-eslint/scope-manager": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.53.0.tgz", "integrity": "sha512-Opy3dqNsp/9kBBeCPhkCNR7fmdSQqA+47r21hr9a14Bx0xnkElEQmhoHga+VoaoQ6uDHjDKmQPIYcUcKJifS7w==", "dev": true, "requires": { "@typescript-eslint/types": "5.53.0", "@typescript-eslint/visitor-keys": "5.53.0" } }, "@typescript-eslint/type-utils": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.53.0.tgz", "integrity": "sha512-HO2hh0fmtqNLzTAme/KnND5uFNwbsdYhCZghK2SoxGp3Ifn2emv+hi0PBUjzzSh0dstUIFqOj3bp0AwQlK4OWw==", "dev": true, "requires": { "@typescript-eslint/typescript-estree": "5.53.0", "@typescript-eslint/utils": "5.53.0", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.53.0.tgz", "integrity": "sha512-5kcDL9ZUIP756K6+QOAfPkigJmCPHcLN7Zjdz76lQWWDdzfOhZDTj1irs6gPBKiXx5/6O3L0+AvupAut3z7D2A==", "dev": true }, "@typescript-eslint/typescript-estree": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.53.0.tgz", "integrity": "sha512-eKmipH7QyScpHSkhbptBBYh9v8FxtngLquq292YTEQ1pxVs39yFBlLC1xeIZcPPz1RWGqb7YgERJRGkjw8ZV7w==", "dev": true, "requires": { "@typescript-eslint/types": "5.53.0", "@typescript-eslint/visitor-keys": "5.53.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", "semver": "^7.3.7", "tsutils": "^3.21.0" } }, "@typescript-eslint/utils": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.53.0.tgz", "integrity": "sha512-VUOOtPv27UNWLxFwQK/8+7kvxVC+hPHNsJjzlJyotlaHjLSIgOCKj9I0DBUjwOOA64qjBwx5afAPjksqOxMO0g==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "@types/semver": "^7.3.12", "@typescript-eslint/scope-manager": "5.53.0", "@typescript-eslint/types": "5.53.0", "@typescript-eslint/typescript-estree": "5.53.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0", "semver": "^7.3.7" } }, "@typescript-eslint/visitor-keys": { "version": "5.53.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.53.0.tgz", "integrity": "sha512-JqNLnX3leaHFZEN0gCh81sIvgrp/2GOACZNgO4+Tkf64u51kTpAyWFOY8XHx8XuXr3N2C9zgPPHtcpMg6z1g0w==", "dev": true, "requires": { "@typescript-eslint/types": "5.53.0", "eslint-visitor-keys": "^3.3.0" } }, "@ungap/structured-clone": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, "@webassemblyjs/ast": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "requires": { "@webassemblyjs/helper-numbers": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "@webassemblyjs/floating-point-hex-parser": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true }, "@webassemblyjs/helper-api-error": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true }, "@webassemblyjs/helper-buffer": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "@webassemblyjs/helper-numbers": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, "requires": { "@webassemblyjs/floating-point-hex-parser": "1.11.6", "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true }, "@webassemblyjs/helper-wasm-section": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "requires": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/wasm-gen": "1.12.1" } }, "@webassemblyjs/ieee754": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true }, "@webassemblyjs/wasm-edit": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "requires": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/helper-wasm-section": "1.12.1", "@webassemblyjs/wasm-gen": "1.12.1", "@webassemblyjs/wasm-opt": "1.12.1", "@webassemblyjs/wasm-parser": "1.12.1", "@webassemblyjs/wast-printer": "1.12.1" } }, "@webassemblyjs/wasm-gen": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "requires": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wasm-opt": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "requires": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-buffer": "1.12.1", "@webassemblyjs/wasm-gen": "1.12.1", "@webassemblyjs/wasm-parser": "1.12.1" } }, "@webassemblyjs/wasm-parser": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "requires": { "@webassemblyjs/ast": "1.12.1", "@webassemblyjs/helper-api-error": "1.11.6", "@webassemblyjs/helper-wasm-bytecode": "1.11.6", "@webassemblyjs/ieee754": "1.11.6", "@webassemblyjs/leb128": "1.11.6", "@webassemblyjs/utf8": "1.11.6" } }, "@webassemblyjs/wast-printer": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "requires": { "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, "@webpack-cli/configtest": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-3.0.1.tgz", "integrity": "sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==", "dev": true, "requires": {} }, "@webpack-cli/info": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-3.0.1.tgz", "integrity": "sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==", "dev": true, "requires": {} }, "@webpack-cli/serve": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-3.0.1.tgz", "integrity": "sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==", "dev": true, "requires": {} }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, "@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { "mime-types": "~2.1.34", "negotiator": "0.6.3" } }, "acorn": { "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true }, "acorn-import-attributes": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, "requires": {} }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, "requires": {} }, "acorn-walk": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "ajv-formats": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "requires": { "ajv": "^8.0.0" }, "dependencies": { "ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true } } }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, "requires": {} }, "ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "dev": true }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, "aria-query": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true }, "array-buffer-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, "requires": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "dev": true }, "array-includes": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "requires": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" } }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, "array.prototype.findlast": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "requires": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" } }, "array.prototype.findlastindex": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "requires": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" } }, "array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, "array.prototype.flatmap": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "requires": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "array.prototype.tosorted": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "requires": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" } }, "arraybuffer.prototype.slice": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "ast-types-flow": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true }, "available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "requires": { "possible-typed-array-names": "^1.0.0" } }, "axe-core": { "version": "4.10.0", "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.0.tgz", "integrity": "sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==", "dev": true }, "axobject-query": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true }, "babel-plugin-macros": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", "requires": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", "resolve": "^1.19.0" } }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, "batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "body-parser": { "version": "1.20.3", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "dev": true, "requires": { "bytes": "3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, "dependencies": { "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "bonjour-service": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" } }, "browserslist": { "version": "4.23.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "requires": { "caniuse-lite": "^1.0.30001629", "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.16" } }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "bundle-name": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", "dev": true, "requires": { "run-applescript": "^7.0.0" } }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "dev": true }, "call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "requires": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "call-bind-apply-helpers": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dev": true, "requires": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "call-bound": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", "dev": true, "requires": { "call-bind-apply-helpers": "^1.0.1", "get-intrinsic": "^1.2.6" } }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "camel-case": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "dev": true, "requires": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" } }, "caniuse-lite": { "version": "1.0.30001638", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001638.tgz", "integrity": "sha512-5SuJUJ7cZnhPpeLHaH0c/HPAnAHZvS6ElWyHK9GSIbVOQABLzowiI2pjmpvZ1WEbkyz46iFd4UXlOHR5SqgfMQ==", "dev": true }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "dependencies": { "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } } } }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true }, "ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true }, "clean-css": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dev": true, "requires": { "source-map": "~0.6.0" } }, "clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" } }, "clsx": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", "dev": true }, "commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "dev": true, "requires": { "mime-db": ">= 1.43.0 < 2" } }, "compression": { "version": "1.7.4", "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { "accepts": "~1.3.5", "bytes": "3.0.0", "compressible": "~2.0.16", "debug": "2.6.9", "on-headers": "~1.0.2", "safe-buffer": "5.1.2", "vary": "~1.1.2" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true } } }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, "connect-history-api-fallback": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "dev": true }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { "safe-buffer": "5.2.1" } }, "content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true }, "convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "cookie": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "dev": true }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, "cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", "parse-json": "^5.0.0", "path-type": "^4.0.0", "yaml": "^1.10.0" } }, "create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "css-loader": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.2.tgz", "integrity": "sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==", "dev": true, "requires": { "icss-utils": "^5.1.0", "postcss": "^8.4.33", "postcss-modules-extract-imports": "^3.1.0", "postcss-modules-local-by-default": "^4.0.5", "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", "semver": "^7.5.4" } }, "css-select": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, "requires": { "boolbase": "^1.0.0", "css-what": "^6.0.1", "domhandler": "^4.3.1", "domutils": "^2.8.0", "nth-check": "^2.0.1" } }, "css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, "csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" }, "damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, "data-view-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, "requires": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "data-view-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, "requires": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "data-view-byte-offset": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "requires": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "dev": true }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { "ms": "2.1.2" } }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "deepmerge": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "dev": true }, "default-browser": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", "dev": true, "requires": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "default-browser-id": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", "dev": true }, "define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, "requires": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "define-lazy-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", "dev": true }, "define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, "requires": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, "destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true }, "detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, "requires": { "path-type": "^4.0.0" } }, "dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "requires": { "@leichtgewicht/ip-codec": "^2.0.1" } }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { "esutils": "^2.0.2" } }, "dom-converter": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "requires": { "utila": "~0.4" } }, "dom-helpers": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", "requires": { "@babel/runtime": "^7.8.7", "csstype": "^3.0.2" } }, "dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true }, "domhandler": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "requires": { "domelementtype": "^2.2.0" } }, "domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, "requires": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dev": true, "requires": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "dotenv": { "version": "14.3.2", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-14.3.2.tgz", "integrity": "sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==", "dev": true }, "dotenv-defaults": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/dotenv-defaults/-/dotenv-defaults-5.0.2.tgz", "integrity": "sha512-y5z4NhblzwNk8XBIYVzjLcFkANK0rxbRDO6kGOfH9QrVYIGVEX52IqwSprKVsaLHM9pnNkCSxazZF/JPydDPvA==", "dev": true, "requires": { "dotenv": "^14.0.0" } }, "dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "requires": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, "electron-to-chromium": { "version": "1.4.814", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.814.tgz", "integrity": "sha512-GVulpHjFu1Y9ZvikvbArHmAhZXtm3wHlpjTMcXNGKl4IQ4jMQjlnz8yMQYYqdLHKi/jEL2+CBC2akWVCoIGUdw==", "dev": true }, "emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true }, "encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "dev": true }, "enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" } }, "entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, "envinfo": { "version": "7.14.0", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", "dev": true }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { "version": "1.23.8", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.8.tgz", "integrity": "sha512-lfab8IzDn6EpI1ibZakcgS6WsfEBiB+43cuJo+wgylx1xKXf+Sp+YR3vFuQwC/u3sxYwV8Cxe3B0DpVUu/WiJQ==", "dev": true, "requires": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.3", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.2.6", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-regex": "^1.2.1", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.0", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.0", "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.18" } }, "es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true }, "es-errors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true }, "es-iterator-helpers": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, "requires": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.4", "safe-array-concat": "^1.1.3" } }, "es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "dev": true }, "es-object-atoms": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, "requires": { "es-errors": "^1.3.0" } }, "es-set-tostringtag": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "requires": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", "hasown": "^2.0.1" } }, "es-shim-unscopables": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "requires": { "hasown": "^2.0.0" } }, "es-to-primitive": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "requires": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "esbuild": { "version": "0.16.17", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", "dev": true, "requires": { "@esbuild/android-arm": "0.16.17", "@esbuild/android-arm64": "0.16.17", "@esbuild/android-x64": "0.16.17", "@esbuild/darwin-arm64": "0.16.17", "@esbuild/darwin-x64": "0.16.17", "@esbuild/freebsd-arm64": "0.16.17", "@esbuild/freebsd-x64": "0.16.17", "@esbuild/linux-arm": "0.16.17", "@esbuild/linux-arm64": "0.16.17", "@esbuild/linux-ia32": "0.16.17", "@esbuild/linux-loong64": "0.16.17", "@esbuild/linux-mips64el": "0.16.17", "@esbuild/linux-ppc64": "0.16.17", "@esbuild/linux-riscv64": "0.16.17", "@esbuild/linux-s390x": "0.16.17", "@esbuild/linux-x64": "0.16.17", "@esbuild/netbsd-x64": "0.16.17", "@esbuild/openbsd-x64": "0.16.17", "@esbuild/sunos-x64": "0.16.17", "@esbuild/win32-arm64": "0.16.17", "@esbuild/win32-ia32": "0.16.17", "@esbuild/win32-x64": "0.16.17" } }, "esbuild-loader": { "version": "2.21.0", "resolved": "https://registry.npmjs.org/esbuild-loader/-/esbuild-loader-2.21.0.tgz", "integrity": "sha512-k7ijTkCT43YBSZ6+fBCW1Gin7s46RrJ0VQaM8qA7lq7W+OLsGgtLyFV8470FzYi/4TeDexniTBTPTwZUnXXR5g==", "dev": true, "requires": { "esbuild": "^0.16.17", "joycon": "^3.0.1", "json5": "^2.2.0", "loader-utils": "^2.0.0", "tapable": "^2.2.0", "webpack-sources": "^1.4.3" } }, "escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "dev": true }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" }, "eslint": { "version": "8.56.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", "@eslint/js": "8.56.0", "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "dependencies": { "eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } } } }, "eslint-config-prettier": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, "requires": {} }, "eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "requires": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" }, "dependencies": { "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } } } }, "eslint-module-utils": { "version": "2.12.0", "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "requires": { "debug": "^3.2.7" }, "dependencies": { "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } } } }, "eslint-plugin-import": { "version": "2.31.0", "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "requires": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.8", "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.0", "hasown": "^2.0.2", "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.0", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "dependencies": { "debug": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } }, "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" } }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "eslint-plugin-jsx-a11y": { "version": "6.10.2", "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, "requires": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "^4.10.0", "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", "string.prototype.includes": "^2.0.1" } }, "eslint-plugin-prettier": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz", "integrity": "sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.9.1" } }, "eslint-plugin-react": { "version": "7.37.3", "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.3.tgz", "integrity": "sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==", "dev": true, "requires": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "dependencies": { "doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { "esutils": "^2.0.2" } }, "resolve": { "version": "2.0.0-next.5", "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "requires": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, "eslint-plugin-react-hooks": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0.tgz", "integrity": "sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==", "dev": true, "requires": {} }, "eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" }, "dependencies": { "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true } } }, "eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, "requires": { "eslint-visitor-keys": "^2.0.0" }, "dependencies": { "eslint-visitor-keys": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "dev": true } } }, "eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true }, "eslint-webpack-plugin": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-4.2.0.tgz", "integrity": "sha512-rsfpFQ01AWQbqtjgPRr2usVRxhWDuG0YDYcG8DJOteD3EFnpeuYuOwk0PQiN7PRBTqS6ElNdtPZPggj8If9WnA==", "dev": true, "requires": { "@types/eslint": "^8.56.10", "jest-worker": "^29.7.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "schema-utils": "^4.2.0" } }, "espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "requires": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^3.4.1" } }, "esquery": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz", "integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==", "dev": true, "requires": { "estraverse": "^5.1.0" } }, "esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { "estraverse": "^5.2.0" } }, "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "dev": true }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "dev": true }, "events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, "express": { "version": "4.21.2", "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, "requires": { "accepts": "~1.3.8", "array-flatten": "1.1.1", "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.19.0", "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", "dev": true }, "fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" }, "dependencies": { "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" } } } }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, "fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true }, "fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, "requires": { "reusify": "^1.0.4" } }, "faye-websocket": { "version": "0.11.4", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" } }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, "requires": { "flat-cache": "^3.0.4" } }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "finalhandler": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "dev": true, "requires": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", "statuses": "2.0.1", "unpipe": "~1.0.0" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, "flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { "flatted": "^3.1.0", "rimraf": "^3.0.2" } }, "flatted": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", "dev": true }, "follow-redirects": { "version": "1.15.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true }, "for-each": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "requires": { "is-callable": "^1.1.3" } }, "fork-ts-checker-webpack-plugin": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-9.0.2.tgz", "integrity": "sha512-Uochze2R8peoN1XqlSi/rGUkDQpRogtLFocP9+PGu68zk1BDAKXfdeCdyVZpgTk8V8WFVQXdEz426VKjXLO1Gg==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", "chalk": "^4.1.2", "chokidar": "^3.5.3", "cosmiconfig": "^8.2.0", "deepmerge": "^4.2.2", "fs-extra": "^10.0.0", "memfs": "^3.4.1", "minimatch": "^3.0.4", "node-abort-controller": "^3.0.1", "schema-utils": "^3.1.1", "semver": "^7.3.5", "tapable": "^2.2.1" }, "dependencies": { "cosmiconfig": { "version": "8.3.6", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "requires": { "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", "parse-json": "^5.2.0", "path-type": "^4.0.0" } }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } } } }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "dev": true }, "fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, "function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" }, "function.prototype.name": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, "requires": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, "get-intrinsic": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dev": true, "requires": { "call-bind-apply-helpers": "^1.0.1", "dunder-proto": "^1.0.0", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.0.0" } }, "get-symbol-description": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "requires": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "requires": { "is-glob": "^4.0.3" } }, "glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, "globals": { "version": "13.24.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, "globalthis": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "requires": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" } }, "gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true }, "graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, "grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", "dev": true }, "graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, "gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, "requires": { "duplexer": "^0.1.2" } }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, "has-bigints": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-property-descriptors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "requires": { "es-define-property": "^1.0.0" } }, "has-proto": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "requires": { "dunder-proto": "^1.0.0" } }, "has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true }, "has-tostringtag": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "requires": { "has-symbols": "^1.0.3" } }, "hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "requires": { "function-bind": "^1.1.2" } }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "requires": { "react-is": "^16.7.0" }, "dependencies": { "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" } } }, "hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "dev": true, "requires": { "inherits": "^2.0.1", "obuf": "^1.0.0", "readable-stream": "^2.0.1", "wbuf": "^1.1.0" }, "dependencies": { "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true }, "readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, "html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, "requires": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", "commander": "^8.3.0", "he": "^1.2.0", "param-case": "^3.0.4", "relateurl": "^0.2.7", "terser": "^5.10.0" } }, "html-webpack-plugin": { "version": "5.6.3", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", "dev": true, "requires": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", "lodash": "^4.17.21", "pretty-error": "^4.0.0", "tapable": "^2.0.0" } }, "htmlparser2": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", "domutils": "^2.5.2", "entities": "^2.0.0" } }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", "dev": true }, "http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "http-parser-js": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", "dev": true }, "http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } }, "http-proxy-middleware": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, "requires": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", "micromatch": "^4.0.2" } }, "hyperdyperid": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", "dev": true }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, "icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, "requires": {} }, "ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "requires": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" } }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "requires": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "interpret": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true }, "ipaddr.js": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "dev": true }, "is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "requires": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, "is-async-function": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-bigint": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "requires": { "has-bigints": "^1.0.2" } }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" } }, "is-boolean-object": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "requires": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-core-module": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "requires": { "hasown": "^2.0.2" } }, "is-data-view": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "requires": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "is-date-object": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "requires": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "is-docker": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, "is-finalizationregistry": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "requires": { "call-bound": "^1.0.3" } }, "is-generator-function": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" } }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", "dev": true, "requires": { "is-docker": "^3.0.0" } }, "is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true }, "is-network-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.1.0.tgz", "integrity": "sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==", "dev": true }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "is-number-object": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "requires": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, "is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { "isobject": "^3.0.1" } }, "is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "requires": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "is-set": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true }, "is-shared-array-buffer": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "requires": { "call-bound": "^1.0.3" } }, "is-string": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "requires": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "is-symbol": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "requires": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "is-typed-array": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "requires": { "which-typed-array": "^1.1.16" } }, "is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true }, "is-weakref": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dev": true, "requires": { "call-bound": "^1.0.2" } }, "is-weakset": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "requires": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "is-wsl": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", "dev": true, "requires": { "is-inside-container": "^1.0.0" } }, "isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, "iterator.prototype": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==", "dev": true, "requires": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "reflect.getprototypeof": "^1.0.8", "set-function-name": "^2.0.2" } }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" } }, "jest-worker": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "dev": true, "requires": { "@types/node": "*", "jest-util": "^29.7.0", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, "dependencies": { "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "joycon": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", "dev": true }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { "argparse": "^2.0.1" } }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" } }, "jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "requires": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true }, "language-tags": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "requires": { "language-subtag-registry": "^0.3.20" } }, "launch-editor": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.8.0.tgz", "integrity": "sha512-vJranOAJrI/llyWGRQqiDM+adrw+k83fvmmx3+nV47g3+36xM15jE+zyZ6Ffel02+xSvuM0b2GDRosXZkbb6wA==", "dev": true, "requires": { "picocolors": "^1.0.0", "shell-quote": "^1.8.1" } }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, "requires": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true }, "loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" } }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { "p-locate": "^5.0.0" } }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, "lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "dev": true, "requires": { "tslib": "^2.0.3" } }, "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, "math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "dev": true }, "mdi-material-ui": { "version": "7.9.3", "resolved": "https://registry.npmjs.org/mdi-material-ui/-/mdi-material-ui-7.9.3.tgz", "integrity": "sha512-l56RUX0tnxY+U1z6hE3cHKXwGUIGpHJLiW2papfvTB1qTegpn3iYU6sX+XBPtl+KG7Ww2RqCLAT03CNzOqeoIg==", "requires": {} }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "dev": true }, "memfs": { "version": "3.4.13", "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", "dev": true, "requires": { "fs-monkey": "^1.0.3" } }, "merge-descriptors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "dev": true }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "dev": true }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" } }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true }, "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { "mime-db": "1.52.0" } }, "minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "dev": true }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "mrmime": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "dev": true, "requires": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" } }, "nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, "natural-compare-lite": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, "negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, "requires": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, "node-abort-controller": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz", "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "dev": true }, "node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true }, "node-releases": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "requires": { "boolbase": "^1.0.0" } }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, "object-inspect": { "version": "1.13.3", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "requires": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "object.entries": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "requires": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "object.fromentries": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "requires": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "object.groupby": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "requires": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2" } }, "object.values": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "requires": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "dev": true }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "requires": { "ee-first": "1.1.1" } }, "on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "dev": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { "wrappy": "1" } }, "open": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", "dev": true, "requires": { "default-browser": "^5.2.1", "define-lazy-prop": "^3.0.0", "is-inside-container": "^1.0.0", "is-wsl": "^3.1.0" } }, "opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, "optionator": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0" } }, "own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, "requires": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { "yocto-queue": "^0.1.0" } }, "p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { "p-limit": "^3.0.2" } }, "p-retry": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.0.tgz", "integrity": "sha512-JA6nkq6hKyWLLasXQXUrO4z8BUZGUt/LjlJxx8Gb2+2ntodU/SS63YZ8b0LUTbQ8ZB9iwOfhEPhg4ykKnn2KsA==", "dev": true, "requires": { "@types/retry": "0.12.2", "is-network-error": "^1.0.0", "retry": "^0.13.1" } }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "dev": true, "requires": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "requires": { "callsites": "^3.0.0" } }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, "pascal-case": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "dev": true, "requires": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, "picocolors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { "find-up": "^4.0.0" }, "dependencies": { "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { "p-locate": "^4.1.0" } }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { "p-limit": "^2.2.0" } } } }, "possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true }, "postcss": { "version": "8.4.39", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "dev": true, "requires": { "nanoid": "^3.3.7", "picocolors": "^1.0.1", "source-map-js": "^1.2.0" } }, "postcss-modules-extract-imports": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, "requires": {} }, "postcss-modules-local-by-default": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", "dev": true, "requires": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" } }, "postcss-modules-scope": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", "dev": true, "requires": { "postcss-selector-parser": "^6.0.4" } }, "postcss-modules-values": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, "requires": { "icss-utils": "^5.0.0" } }, "postcss-selector-parser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, "prettier": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, "peer": true }, "prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, "requires": { "fast-diff": "^1.1.2" } }, "pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, "requires": { "lodash": "^4.17.20", "renderkid": "^3.0.0" } }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, "prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "requires": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" }, "dependencies": { "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" } } }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, "dependencies": { "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true } } }, "punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", "dev": true }, "qs": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "requires": { "side-channel": "^1.0.6" } }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" } }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dev": true, "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "dependencies": { "bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true } } }, "react": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", "requires": { "loose-envify": "^1.1.0" } }, "react-dom": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", "requires": { "loose-envify": "^1.1.0", "scheduler": "^0.23.0" } }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" }, "react-router": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.8.1.tgz", "integrity": "sha512-Jgi8BzAJQ8MkPt8ipXnR73rnD7EmZ0HFFb7jdQU24TynGW1Ooqin2KVDN9voSC+7xhqbbCd2cjGUepb6RObnyg==", "requires": { "@remix-run/router": "1.3.2" } }, "react-router-dom": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.8.1.tgz", "integrity": "sha512-67EXNfkQgf34P7+PSb6VlBuaacGhkKn3kpE51+P6zYSG2kiRoumXEL6e27zTa9+PGF2MNXbgIUHTVlleLbIcHQ==", "requires": { "@remix-run/router": "1.3.2", "react-router": "6.8.1" } }, "react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", "requires": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", "loose-envify": "^1.4.0", "prop-types": "^15.6.2" } }, "readable-stream": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.1.tgz", "integrity": "sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==", "dev": true, "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" } }, "rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "requires": { "resolve": "^1.20.0" } }, "reflect.getprototypeof": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", "dev": true, "requires": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "dunder-proto": "^1.0.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "which-builtin-type": "^1.2.1" } }, "regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regexp.prototype.flags": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "requires": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "set-function-name": "^2.0.2" } }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, "relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "dev": true }, "renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, "requires": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", "lodash": "^4.17.21", "strip-ansi": "^6.0.1" } }, "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, "resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "requires": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { "resolve-from": "^5.0.0" }, "dependencies": { "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true } } }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "dev": true, "requires": { "glob": "^7.1.3" } }, "run-applescript": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", "dev": true }, "run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "requires": { "queue-microtask": "^1.2.2" } }, "safe-array-concat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "requires": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true }, "safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, "requires": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "safe-regex-test": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "requires": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, "scheduler": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", "requires": { "loose-envify": "^1.1.0" } }, "schema-utils": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" }, "dependencies": { "ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, "ajv-keywords": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "requires": { "fast-deep-equal": "^3.1.3" } }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true } } }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", "dev": true }, "selfsigned": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, "requires": { "@types/node-forge": "^1.3.0", "node-forge": "^1" } }, "semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true }, "send": { "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "dev": true, "requires": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", "http-errors": "2.0.0", "mime": "1.6.0", "ms": "2.1.3", "on-finished": "2.4.1", "range-parser": "~1.2.1", "statuses": "2.0.1" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" }, "dependencies": { "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "dev": true }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true } } }, "serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "requires": { "randombytes": "^2.1.0" } }, "serialize-query-params": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/serialize-query-params/-/serialize-query-params-2.0.2.tgz", "integrity": "sha512-1chMo1dST4pFA9RDXAtF0Rbjaut4is7bzFbI1Z26IuMub68pNCILku85aYmeFhvnY//BXUPUhoRMjYcsT93J/Q==" }, "serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "dev": true, "requires": { "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", "http-errors": "~1.6.2", "mime-types": "~2.1.17", "parseurl": "~1.3.2" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "dev": true }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dev": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", "statuses": ">= 1.4.0 < 2" } }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "dev": true }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "dev": true }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "dev": true } } }, "serve-static": { "version": "1.16.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "dev": true, "requires": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.19.0" } }, "set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "requires": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "set-function-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "requires": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { "kind-of": "^6.0.2" } }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { "shebang-regex": "^3.0.0" } }, "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, "shell-quote": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true }, "side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "requires": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "side-channel-list": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "requires": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "side-channel-map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "requires": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "side-channel-weakmap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "requires": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, "requires": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", "totalist": "^3.0.0" } }, "slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, "sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "requires": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" } }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "source-map-js": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", "http-deceiver": "^1.2.7", "select-hose": "^2.0.0", "spdy-transport": "^3.0.0" } }, "spdy-transport": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { "debug": "^4.1.0", "detect-node": "^2.0.4", "hpack.js": "^2.1.6", "obuf": "^1.1.2", "readable-stream": "^3.0.6", "wbuf": "^1.7.3" } }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { "safe-buffer": "~5.2.0" } }, "string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, "requires": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3" } }, "string.prototype.matchall": { "version": "4.0.12", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, "requires": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "string.prototype.repeat": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "string.prototype.trim": { "version": "1.2.10", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "requires": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "string.prototype.trimend": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "requires": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "string.prototype.trimstart": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "requires": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { "ansi-regex": "^5.0.1" } }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "style-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-4.0.0.tgz", "integrity": "sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==", "dev": true, "requires": {} }, "stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "synckit": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.1.tgz", "integrity": "sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==", "dev": true, "requires": { "@pkgr/core": "^0.1.0", "tslib": "^2.6.2" } }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, "terser": { "version": "5.31.1", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "dependencies": { "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true } } }, "terser-webpack-plugin": { "version": "5.3.10", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", "terser": "^5.26.0" }, "dependencies": { "jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, "thingies": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/thingies/-/thingies-1.21.0.tgz", "integrity": "sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==", "dev": true, "requires": {} }, "thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "dev": true }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" } }, "toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "totalist": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true }, "tree-dump": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.0.2.tgz", "integrity": "sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==", "dev": true, "requires": {} }, "ts-loader": { "version": "9.5.1", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, "requires": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", "micromatch": "^4.0.0", "semver": "^7.3.4", "source-map": "^0.7.4" }, "dependencies": { "source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true } } }, "ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" } }, "tsconfig-paths": { "version": "3.15.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, "dependencies": { "json5": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" } } } }, "tslib": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, "requires": { "tslib": "^1.8.1" }, "dependencies": { "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true } } }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, "requires": { "prelude-ls": "^1.2.1" } }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "dev": true, "requires": { "media-typer": "0.3.0", "mime-types": "~2.1.24" } }, "typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "requires": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "typed-array-byte-length": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "requires": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "typed-array-byte-offset": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "requires": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "typed-array-length": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "requires": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "typescript": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true }, "unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "requires": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true }, "update-browserslist-db": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", "dev": true, "requires": { "escalade": "^3.1.2", "picocolors": "^1.0.1" } }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, "requires": { "punycode": "^2.1.0" } }, "use-query-params": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/use-query-params/-/use-query-params-2.2.1.tgz", "integrity": "sha512-i6alcyLB8w9i3ZK3caNftdb+UnbfBRNPDnc89CNQWkGRmDrm/gfydHvMBfVsQJRq3NoHOM2dt/ceBWG2397v1Q==", "requires": { "serialize-query-params": "^2.0.2" } }, "use-sync-external-store": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", "requires": {} }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", "dev": true }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "dev": true }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true }, "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true }, "watchpack": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, "requires": { "minimalistic-assert": "^1.0.0" } }, "webpack": { "version": "5.95.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", "dev": true, "requires": { "@types/estree": "^1.0.5", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", "acorn-import-attributes": "^1.9.5", "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "dependencies": { "schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" } }, "webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true } } }, "webpack-bundle-analyzer": { "version": "4.10.2", "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "dev": true, "requires": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "commander": "^7.2.0", "debounce": "^1.2.1", "escape-string-regexp": "^4.0.0", "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", "opener": "^1.5.2", "picocolors": "^1.0.0", "sirv": "^2.0.3", "ws": "^7.3.1" }, "dependencies": { "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true } } }, "webpack-cli": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-6.0.1.tgz", "integrity": "sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.6.1", "@webpack-cli/configtest": "^3.0.1", "@webpack-cli/info": "^3.0.1", "@webpack-cli/serve": "^3.0.1", "colorette": "^2.0.14", "commander": "^12.1.0", "cross-spawn": "^7.0.3", "envinfo": "^7.14.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^3.1.1", "rechoir": "^0.8.0", "webpack-merge": "^6.0.1" }, "dependencies": { "@discoveryjs/json-ext": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz", "integrity": "sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==", "dev": true }, "commander": { "version": "12.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true } } }, "webpack-dev-middleware": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.2.tgz", "integrity": "sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==", "dev": true, "requires": { "colorette": "^2.0.10", "memfs": "^4.6.0", "mime-types": "^2.1.31", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" }, "dependencies": { "memfs": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.12.0.tgz", "integrity": "sha512-74wDsex5tQDSClVkeK1vtxqYCAgCoXxx+K4NSHzgU/muYVYByFqa+0RnrPO9NM6naWm1+G9JmZ0p6QHhXmeYfA==", "dev": true, "requires": { "@jsonjoy.com/json-pack": "^1.0.3", "@jsonjoy.com/util": "^1.3.0", "tree-dump": "^1.0.1", "tslib": "^2.0.0" } } } }, "webpack-dev-server": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.0.tgz", "integrity": "sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==", "dev": true, "requires": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", "@types/express": "^4.17.21", "@types/serve-index": "^1.9.4", "@types/serve-static": "^1.15.5", "@types/sockjs": "^0.3.36", "@types/ws": "^8.5.10", "ansi-html-community": "^0.0.8", "bonjour-service": "^1.2.1", "chokidar": "^3.6.0", "colorette": "^2.0.10", "compression": "^1.7.4", "connect-history-api-fallback": "^2.0.0", "express": "^4.21.2", "graceful-fs": "^4.2.6", "http-proxy-middleware": "^2.0.7", "ipaddr.js": "^2.1.0", "launch-editor": "^2.6.1", "open": "^10.0.3", "p-retry": "^6.2.0", "schema-utils": "^4.2.0", "selfsigned": "^2.4.1", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", "webpack-dev-middleware": "^7.4.2", "ws": "^8.18.0" }, "dependencies": { "ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "requires": {} } } }, "webpack-merge": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, "requires": { "clone-deep": "^4.0.1", "flat": "^5.0.2", "wildcard": "^2.0.1" } }, "webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" } }, "websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-boxed-primitive": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "requires": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "which-builtin-type": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "requires": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "which-collection": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "requires": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "which-typed-array": { "version": "1.1.18", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, "requires": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.3", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "wildcard": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, "requires": {} }, "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true } } } prometheus-alertmanager-0.28.1+ds/ui/react-app/package.json000066400000000000000000000030721476331240200236220ustar00rootroot00000000000000{ "name": "@prometheus-io/alertmanager", "version": "0.0.0", "private": true, "scripts": { "clean": "rimraf dist/", "start": "webpack serve --config webpack.dev.ts", "build": "webpack --config webpack.prod.ts", "lint": "eslint src --ext .ts,.tsx", "lint:fix": "eslint --fix src --ext .ts,.tsx" }, "dependencies": { "@emotion/react": "^11.11.4", "@emotion/styled": "^11.9.3", "@mui/material": "^5.10.14", "@tanstack/react-query": "^4.7.1", "mdi-material-ui": "^7.9.3", "react": "^18.0.0", "react-dom": "^18.0.0", "react-router-dom": "^6.3.0", "use-query-params": "^2.2.1" }, "devDependencies": { "@types/react": "^18.2.51", "@types/react-dom": "^18.2.19", "@typescript-eslint/eslint-plugin": "^5.30.7", "@typescript-eslint/parser": "^5.62.0", "css-loader": "^7.1.2", "dotenv-defaults": "^5.0.2", "esbuild-loader": "^2.20.0", "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-prettier": "^5.2.1", "eslint-plugin-react": "^7.37.3", "eslint-plugin-react-hooks": "^5.0.0", "eslint-webpack-plugin": "^4.2.0", "fork-ts-checker-webpack-plugin": "^9.0.2", "html-webpack-plugin": "^5.6.3", "style-loader": "^4.0.0", "ts-loader": "^9.5.1", "ts-node": "^10.9.2", "typescript": "^5.7.2", "webpack": "^5.95.0", "webpack-bundle-analyzer": "^4.10.2", "webpack-cli": "^6.0.1", "webpack-dev-server": "^5.2.0", "webpack-merge": "^6.0.1" } } prometheus-alertmanager-0.28.1+ds/ui/react-app/src/000077500000000000000000000000001476331240200221215ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/react-app/src/App.tsx000066400000000000000000000010611476331240200233770ustar00rootroot00000000000000import { Box, styled } from '@mui/material'; import Navbar from './components/navbar'; import Router from './Router'; // Based on the MUI doc: https://mui.com/material-ui/react-app-bar/#fixed-placement const Offset = styled('div')(({ theme }) => theme.mixins.toolbar); function App() { return ( ); } export default App; prometheus-alertmanager-0.28.1+ds/ui/react-app/src/Router.tsx000066400000000000000000000006141476331240200241420ustar00rootroot00000000000000// Other routes are lazy-loaded for code-splitting import { Suspense, lazy } from 'react'; import { Route, Routes } from 'react-router-dom'; const ViewStatus = lazy(() => import('./views/ViewStatus')); function Router() { return ( } /> ); } export default Router; prometheus-alertmanager-0.28.1+ds/ui/react-app/src/client/000077500000000000000000000000001476331240200233775ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/react-app/src/client/am-client.ts000066400000000000000000000015271476331240200256250ustar00rootroot00000000000000import { useQuery } from '@tanstack/react-query'; import buildURL from '../utils/url-builder'; import { fetchJson } from '../utils/fetch'; const resource = 'status'; export interface AMStatusClusterPeersInfo { address: string; name: string; } export interface AMStatusClusterInfo { name: string; peers: AMStatusClusterPeersInfo[]; status: string; } export interface AMStatusVersionInfo { branch: string; buildDate: string; buildUser: string; goVersion: string; revision: string; version: string; } export interface AMStatus { cluster: AMStatusClusterInfo; uptime: string; versionInfo: AMStatusVersionInfo; config: { original: string; }; } export function useAMStatus() { return useQuery([], () => { const url = buildURL({ resource: resource }); return fetchJson(url); }); } prometheus-alertmanager-0.28.1+ds/ui/react-app/src/components/000077500000000000000000000000001476331240200243065ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/react-app/src/components/navbar.tsx000066400000000000000000000031021476331240200263130ustar00rootroot00000000000000import { AppBar, Box, Button, Stack, Toolbar, Typography } from '@mui/material'; import { useLocation, useNavigate } from 'react-router-dom'; export default function Navbar(): JSX.Element { const navigate = useNavigate(); const location = useLocation(); return ( ); } prometheus-alertmanager-0.28.1+ds/ui/react-app/src/index.html000066400000000000000000000006161476331240200241210ustar00rootroot00000000000000 AlertManager

prometheus-alertmanager-0.28.1+ds/ui/react-app/src/index.tsx000066400000000000000000000022521476331240200237710ustar00rootroot00000000000000import React from 'react'; import ReactDOM from 'react-dom/client'; import App from './App'; import { BrowserRouter } from 'react-router-dom'; import { QueryParamProvider } from 'use-query-params'; import { ReactRouter6Adapter } from 'use-query-params/adapters/react-router-6'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; function renderApp(container: Element | null) { if (container === null) { return; } const queryClient = new QueryClient({ defaultOptions: { queries: { refetchOnWindowFocus: false, // react-query uses a default of 3 retries. // This sets the default to 0 retries. // If needed, the number of retries can be overridden in individual useQuery calls. retry: 0, }, }, }); const root = ReactDOM.createRoot(container); root.render( ); } renderApp(document.getElementById('root')); prometheus-alertmanager-0.28.1+ds/ui/react-app/src/utils/000077500000000000000000000000001476331240200232615ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/react-app/src/utils/fetch.ts000066400000000000000000000016161476331240200247260ustar00rootroot00000000000000/** * Calls `global.fetch`, but throws a `FetchError` for non-200 responses. */ export async function fetch(...args: Parameters) { const response = await global.fetch(...args); if (!response.ok) { throw new FetchError(response); } return response; } /** * Calls `global.fetch` and throws a `FetchError` on non-200 responses, but also * decodes the response body as JSON, casting it to type `T`. Returns the * decoded body. */ export async function fetchJson(...args: Parameters) { const response = await fetch(...args); const json: T = await response.json(); return json; } /** * Error thrown when fetch returns a non-200 response. */ export class FetchError extends Error { constructor(readonly response: Response) { super(`${response.status} ${response.statusText}`); Object.setPrototypeOf(this, FetchError.prototype); } } prometheus-alertmanager-0.28.1+ds/ui/react-app/src/utils/url-builder.ts000066400000000000000000000005761476331240200260670ustar00rootroot00000000000000const API_PREFIX = '/api/v2'; export type URLParams = { resource: string; queryParams?: URLSearchParams; apiPrefix?: string; }; export default function buildURL({ apiPrefix = API_PREFIX, resource, queryParams }: URLParams): string { let url = `${apiPrefix}/${resource}`; if (queryParams !== undefined) { url = `${url}?${queryParams.toString()}`; } return url; } prometheus-alertmanager-0.28.1+ds/ui/react-app/src/views/000077500000000000000000000000001476331240200232565ustar00rootroot00000000000000prometheus-alertmanager-0.28.1+ds/ui/react-app/src/views/ViewStatus.tsx000066400000000000000000000062111476331240200261340ustar00rootroot00000000000000import { Chip, Container, List, ListItem, SxProps, Table, TableCell, tableCellClasses, TableContainer, TableRow, TextareaAutosize, Theme, Typography, } from '@mui/material'; import { useAMStatus } from '../client/am-client'; const tableStyle: SxProps = { [`& .${tableCellClasses.root}`]: { borderBottom: 'none', }, }; const tableHeaderStyle: SxProps = { fontWeight: 'bold', }; interface tableCellProperties { header: string; content: string; } function CustomTableCell(props: tableCellProperties) { const { header, content } = props; return ( {header} {content} ); } export default function ViewStatus() { const { data } = useAMStatus(); if (data === undefined || data === null) { return null; } return ( Status
Cluster Status Status Peers {data.cluster.peers.map((peer, i) => { return (

Name: {peer.name}
Address: {peer.address}

); })}
Version Information
Config
); } prometheus-alertmanager-0.28.1+ds/ui/react-app/tsconfig.json000066400000000000000000000014531476331240200240440ustar00rootroot00000000000000// Base config for all typescript packages { "compilerOptions": { "target": "ES2018", "lib": ["dom", "dom.iterable", "esnext"], "module": "esnext", "jsx": "react-jsx", "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "noUncheckedIndexedAccess": true, "declaration": true, "declarationMap": true, "pretty": true, "sourceMap": true }, "include": ["src"], // For builds that use ts-node to compile the configs (e.g. webpack, jest) "ts-node": { "compilerOptions": { "module": "commonjs", "target": "es5", "esModuleInterop": true } } } prometheus-alertmanager-0.28.1+ds/ui/react-app/ui.go000066400000000000000000000013151476331240200222760ustar00rootroot00000000000000// Copyright 2023 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package reactapp import ( "net/http" "github.com/prometheus/common/assets" ) var Assets = http.FS(assets.New(embedFS)) prometheus-alertmanager-0.28.1+ds/ui/react-app/web.go000066400000000000000000000032731476331240200224430ustar00rootroot00000000000000// Copyright 2023 The Prometheus Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package reactapp import ( "fmt" "io" "log/slog" "net/http" "path" "github.com/prometheus/common/route" "github.com/prometheus/common/server" ) var reactRouterPaths = []string{ "/", "/status", } func Register(r *route.Router, logger *slog.Logger) { serveReactApp := func(w http.ResponseWriter, r *http.Request) { f, err := Assets.Open("/dist/index.html") if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Error opening React index.html: %v", err) return } defer func() { _ = f.Close() }() idx, err := io.ReadAll(f) if err != nil { w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Error reading React index.html: %v", err) return } w.Write(idx) } // Static files required by the React app. r.Get("/react-app/*filepath", func(w http.ResponseWriter, r *http.Request) { for _, rt := range reactRouterPaths { if r.URL.Path != "/react-app"+rt { continue } serveReactApp(w, r) return } r.URL.Path = path.Join("/dist", route.Param(r.Context(), "filepath")) fs := server.StaticFileServer(Assets) fs.ServeHTTP(w, r) }) } prometheus-alertmanager-0.28.1+ds/ui/react-app/webpack.common.ts000066400000000000000000000047521476331240200246150ustar00rootroot00000000000000// Copyright 2023 The Perses Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import path from 'path'; import HtmlWebpackPlugin from 'html-webpack-plugin'; import { Configuration } from 'webpack'; import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin'; import ESLintWebpackPlugin from 'eslint-webpack-plugin'; export const commonConfig: Configuration = { entry: path.resolve(__dirname, './src/index.tsx'), output: { path: path.resolve(__dirname, './dist'), publicPath: '/', }, resolve: { extensions: ['.ts', '.tsx', '.js', 'jsx', '.json'], }, plugins: [ // Generates HTML index page with bundle injected new HtmlWebpackPlugin({ template: path.resolve(__dirname, './src/index.html'), templateParameters: {}, }), // Does TS type-checking in a separate process new ForkTsCheckerWebpackPlugin({ typescript: { configFile: path.resolve(__dirname, './tsconfig.json'), }, }), new ESLintWebpackPlugin({ threads: true, files: '../*/src/**/*.{ts,tsx,js,jsx}', }), ], module: { rules: [ { test: /\.tsx?$/, use: [ { loader: 'ts-loader', options: { // Type-checking happens in separate plugin process transpileOnly: true, projectReferences: true, }, }, ], }, { test: /\.css$/, use: ['style-loader', 'css-loader'], }, { test: /\.(ttf|eot|woff|woff2)$/, type: 'asset/resource', }, { test: /\.(png|jpg|gif)$/, type: 'asset', }, // SVG as React components { test: /\.svg$/, use: [ { loader: '@svgr/webpack', options: { // Generated React components will support a 'title' prop to render // a inside the <svg> titleProp: true, }, }, ], }, ], }, }; ����������������������prometheus-alertmanager-0.28.1+ds/ui/react-app/webpack.dev.ts���������������������������������������0000664�0000000�0000000�00000004343�14763312402�0024077�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2023 The Perses Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import fs from 'fs'; import { Configuration } from 'webpack'; import { Configuration as DevServerConfig, ServerConfiguration } from 'webpack-dev-server'; import { merge } from 'webpack-merge'; import { commonConfig } from './webpack.common'; // eslint-disable-next-line @typescript-eslint/no-var-requires require('dotenv-defaults').config(); declare module 'webpack' { interface Configuration { devServer?: DevServerConfig | undefined; } } // Get dev server HTTP options (note: HTTP2 is not currently supported by webpack since we're on Node 16) function getServerConfig(): ServerConfiguration | undefined { // Just use regular HTTP by default if (process.env.HTTPS !== 'true') { return undefined; } // Support the same HTTPS options as Creact React App if HTTPS is set if (process.env.SSL_KEY_FILE === undefined || process.env.SSL_CRT_FILE === undefined) { // Use the default self-signed cert return { type: 'https' }; } // Use a custom cert return { type: 'https', options: { key: fs.readFileSync(process.env.SSL_KEY_FILE), cert: fs.readFileSync(process.env.SSL_CRT_FILE), }, }; } // Webpack configuration in dev const devConfig: Configuration = { mode: 'development', devtool: 'cheap-module-source-map', output: { pathinfo: true, }, watchOptions: { aggregateTimeout: 300, }, devServer: { port: parseInt(process.env.PORT ?? '3000'), open: true, server: getServerConfig(), historyApiFallback: true, allowedHosts: 'all', proxy: { '/api': 'http://localhost:9093', }, }, cache: true, }; const merged = merge(commonConfig, devConfig); export default merged; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������prometheus-alertmanager-0.28.1+ds/ui/react-app/webpack.prod.ts��������������������������������������0000664�0000000�0000000�00000002272�14763312402�0024264�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2023 The Perses Authors // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. import { Configuration } from 'webpack'; import { merge } from 'webpack-merge'; import { ESBuildMinifyPlugin } from 'esbuild-loader'; import { commonConfig } from './webpack.common'; import path from 'path'; const prodConfig: Configuration = { output: { path: path.resolve(__dirname, './dist'), publicPath: '/react-app/', }, mode: 'production', bail: true, devtool: 'source-map', optimization: { // TODO: Could this also be replaced with swc minifier? minimizer: [new ESBuildMinifyPlugin({ target: 'es2018' })], }, }; const merged = merge(commonConfig, prodConfig); export default merged; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������prometheus-alertmanager-0.28.1+ds/ui/web.go���������������������������������������������������������0000664�0000000�0000000�00000005574�14763312402�0020575�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������// Copyright 2015 Prometheus Team // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package ui import ( "fmt" "log/slog" "net/http" _ "net/http/pprof" // Comment this line to disable pprof endpoint. "path" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prometheus/common/route" "github.com/prometheus/alertmanager/asset" ) // Register registers handlers to serve files for the web interface. func Register(r *route.Router, reloadCh chan<- chan error, logger *slog.Logger) { r.Get("/metrics", promhttp.Handler().ServeHTTP) r.Get("/", func(w http.ResponseWriter, req *http.Request) { disableCaching(w) req.URL.Path = "/static/" fs := http.FileServer(asset.Assets) fs.ServeHTTP(w, req) }) r.Get("/script.js", func(w http.ResponseWriter, req *http.Request) { disableCaching(w) req.URL.Path = "/static/script.js" fs := http.FileServer(asset.Assets) fs.ServeHTTP(w, req) }) r.Get("/favicon.ico", func(w http.ResponseWriter, req *http.Request) { disableCaching(w) req.URL.Path = "/static/favicon.ico" fs := http.FileServer(asset.Assets) fs.ServeHTTP(w, req) }) r.Get("/lib/*path", func(w http.ResponseWriter, req *http.Request) { disableCaching(w) req.URL.Path = path.Join("/static/lib", route.Param(req.Context(), "path")) fs := http.FileServer(asset.Assets) fs.ServeHTTP(w, req) }) r.Post("/-/reload", func(w http.ResponseWriter, req *http.Request) { errc := make(chan error) defer close(errc) reloadCh <- errc if err := <-errc; err != nil { http.Error(w, fmt.Sprintf("failed to reload config: %s", err), http.StatusInternalServerError) } }) r.Get("/-/healthy", func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) fmt.Fprintf(w, "OK") }) r.Head("/-/healthy", func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) }) r.Get("/-/ready", func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) fmt.Fprintf(w, "OK") }) r.Head("/-/ready", func(w http.ResponseWriter, _ *http.Request) { w.WriteHeader(http.StatusOK) }) r.Get("/debug/*subpath", http.DefaultServeMux.ServeHTTP) r.Post("/debug/*subpath", http.DefaultServeMux.ServeHTTP) } func disableCaching(w http.ResponseWriter) { w.Header().Set("Cache-Control", "no-cache, no-store, must-revalidate") w.Header().Set("Pragma", "no-cache") w.Header().Set("Expires", "0") // Prevent proxies from caching. } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������